|
|
<template> <div class="app-container row-container"> <div class="head-container"> <div class="head-search"> <!-- 搜索 --> <el-input v-model="query.search" clearable size="small" placeholder="输入关键字搜索" prefix-icon="el-icon-search" style="width: 200px;" class="filter-item" @keyup.enter.native="crud.toQuery" /> <date-range-picker v-model="blurryTime" class="date-item" /> <rrOperation /> </div> <crudOperation> <template v-slot:left> <el-button size="mini" @click="crud.toAdd"> <i class="iconfont icon-fabu" /> 发布 </el-button> </template> </crudOperation> </div> <div class="container-wrap"> <span class="right-top-line" /> <span class="left-bottom-line" /> <!--表格渲染--> <el-table ref="table" v-loading="crud.loading" :data="crud.data" style="width: 100%;" @row-dblclick="handleDbClick" > <el-table-column type="index" label="序号" width="55" align="center" /> <el-table-column prop="noticeType" label="消息类型" align="center" min-width="100"> <template slot-scope="scope"> <span v-if="scope.row.noticeType===0">系统消息</span> </template> </el-table-column> <el-table-column prop="noticeTitle" :show-overflow-tooltip="true" label="标题" min-width="150" align="center" /> <el-table-column prop="noticeContext" :show-overflow-tooltip="true" label="内容" align="center" min-width="200" /> <el-table-column :show-overflow-tooltip="true" label="发送对象" align="center" min-width="200"> <template v-if="scope.row.noticeDevices.length !== 0" slot-scope="scope"> {{ scope.row.noticeDevices.join(',') }} <!-- <div class="tag-hidden"> <el-tag v-for="(item,i) in scope.row.noticeDevices" :key="i" style="margin-left:3px; color: #fff">{{ item }}</el-tag> </div> --> </template> <template v-if="scope.row.noticeUsers.length !== 0" slot-scope="scope"> <!-- <div class="tag-hidden"> <el-tag v-for="(item,i) in scope.row.noticeUsers" :key="i" style="margin-left:3px; color: #fff">{{ item }}</el-tag> </div> --> {{ scope.row.noticeUsers.join(',') }} </template> </el-table-column> <el-table-column prop="create_by" label="创建人" align="center" min-width="100" /> <el-table-column prop="create_time" label="创建时间" align="center" min-width="180"> <template slot-scope="scope"> <div>{{ scope.row.create_time | parseTime }}</div> </template> </el-table-column> </el-table> <!--分页组件--> <pagination /> </div> <!-- 发布 --> <el-dialog append-to-body :close-on-click-modal="false" :modal-append-to-body="false" :before-close="crud.cancelCU" :visible="crud.status.cu > 0" title="发布通知"> <span class="dialog-right-top" /> <span class="dialog-left-bottom" /> <div class="setting-dialog"> <el-form ref="form" :rules="rules" :model="form" size="small" label-width="100px"> <el-form-item label="消息类型" prop="noticeType" class="down-select"> <el-input v-model="form.noticeTypeName" disabled /> <!-- <el-select v-model="noticeType" placeholder="请选择"> <el-option v-for="item in msgTypeOptions" :key="item.name" :label="item.label" :value="item.value" :disabled="item.disabled" /> </el-select> --> </el-form-item> <el-form-item label="标题" prop="noticeTitle"> <el-input v-model="form.noticeTitle" placeholder="请输入" style="width: 580px;" /> </el-form-item> <el-form-item label="内容" prop="noticeContext"> <el-input v-model="form.noticeContext" placeholder="请输入" type="textarea" rows="3" style="width: 580px;" /> </el-form-item> <el-form-item label="发送对象" prop="userId"> <div class="send-obj"> <span v-if="pushObjItem.length === 0">点击下方按钮选择对象</span> <el-tag v-for="tag in pushObjItem" v-else :key="tag.userId" :disable-transitions="false" > {{ tag.username }} </el-tag> </div> </el-form-item> <span class="select-btn iconfont icon-shezhi" @click="openSelectObj" /> </el-form> <div slot="footer" class="dialog-footer"> <el-button type="text" @click="crud.cancelCU">取消</el-button> <el-button :loading="crud.status.cu === 2" type="primary" @click="crud.submitCU">保存</el-button> </div> </div> </el-dialog> <SelectObj ref="selectObj" @selectObjItem="handleSelectObjItem" /> <Detail ref="archiveDetailDom" /> </div> </template>
<script> import crudNotify from '@/api/system/notify' import CRUD, { presenter, header, form, crud } from '@crud/crud' import crudOperation from '@crud/CRUD.operation' import rrOperation from '@crud/RR.operation' import DateRangePicker from '@/components/DateRangePicker' import pagination from '@crud/Pagination' import SelectObj from './module/selectObj' import Detail from './module/detail'
const defaultForm = { id: null, noticeTypeName: '系统消息', noticeType: null, noticeTitle: null, noticeContext: null, userId: [], deviceInfoId: [] } export default { name: 'NotifyManage', components: { crudOperation, rrOperation, DateRangePicker, pagination, SelectObj, Detail }, cruds() { return CRUD({ title: '通知', url: 'api/notice/initNotice', crudMethod: { ...crudNotify }, sort: [], optShow: { add: false, edit: false, del: false, download: false, group: false }}) }, mixins: [presenter(), header(), form(defaultForm), crud()], data() { return { blurryTime: null, sendVisible: false, tableData: [], pushObjItem: [], msgTypeOptions: [ { value: 1, label: '系统通知' } // { value: 2, label: '报警消息', disabled: true },
// { value: 3, label: '借还消息', disabled: true },
// { value: 4, label: '下载消息', disabled: true }
], rules: { noticeTitle: [ { required: true, message: '标题不可为空', trigger: 'blur' } ], noticeContext: [ { required: true, message: '内容不可为空', trigger: 'blur' } ], userId: [ { required: true, message: '发送对象不可为空', trigger: 'blur' } ] } } }, async created() { }, methods: { [CRUD.HOOK.beforeRefresh]() { if (this.blurryTime) { this.crud.query.startTime = this.blurryTime[0] this.crud.query.endTime = this.blurryTime[1] } else { this.crud.query.startTime = null this.crud.query.endTime = null } }, openSelectObj() { this.$refs.selectObj.sendObjVisible = true this.$refs.selectObj.getFondsDatas() }, handleSelectObjItem(objType, selectItemAll) { this.pushObjItem = selectItemAll if (objType === 0) { this.form.userId = selectItemAll.map(item => item.userId) this.form.deviceInfoId = [] } else { this.form.userId = [] } }, // 提交前的验证
[CRUD.HOOK.afterValidateCU](crud) { console.log(crud.form) crud.form.noticeType = 0 delete crud.form.noticeTypeName return true }, handleDbClick(row) { this.$nextTick(() => { this.$refs.archiveDetailDom.detailVisible = true this.$refs.archiveDetailDom.rowData = row }) } } } </script>
<style lang="scss" scoped> .select-btn{ display: inline-block; padding: 4px 11px 4px 14px; font-size: 18px; color: #fff; background: #0348F3; border-radius: 3px; margin: 10px 0 0 100px; text-align: center; cursor: pointer; } .send-obj{ width: 580px; height: 180px; padding: 0 10px; border-radius: 3px 3px 3px 3px; border: 1px solid #E6E8ED; } </style>
|