From 1df2f72ad0321815d5874b4083aac2999bd2da18 Mon Sep 17 00:00:00 2001 From: 马宇豪 <978517621@qq.com> Date: 星期三, 05 七月 2023 17:11:46 +0800 Subject: [PATCH] 修改 --- src/views/Admin/notice.vue | 236 ++++++++++++++++++++++++++++++++++++++++++---------------- 1 files changed, 169 insertions(+), 67 deletions(-) diff --git a/src/views/Admin/notice.vue b/src/views/Admin/notice.vue index aa3a28d..f1e84a9 100644 --- a/src/views/Admin/notice.vue +++ b/src/views/Admin/notice.vue @@ -1,5 +1,13 @@ <template> <div class="inner"> + <a-alert + message="管理员身份无法进行信息编辑操作" + banner + closable + v-if="userInfo.role.id === 1" + type="error" + style="margin-bottom: 12px" + /> <h2>预警信息发布</h2> <a-form-model ref="ruleForm" :model="form" :rules="rules" :wrapper-col="wrapperCol"> <div class="left"> @@ -52,7 +60,17 @@ </a-form-model-item> <a-row> <a-col :span="12"> - <a-button>上传附件</a-button> + <a-upload + :action="uploadUrl" + :file-list="fileList" + @change="fileChange" + :headers="header" + accept=".doc, .docx, .word, .pdf, .zip, .xlsx, .rar, .jpg, .jpeg, .png" + :data="{module: 'naturalDisasterPath'}" + :remove="(file)=>{removeFile(file)}" + > + <a-button> <a-icon type="upload" />上传附件</a-button> + </a-upload> </a-col> <a-col :span="12" style="display: flex;align-items: center;justify-content: right"> <b style="margin-bottom: 24px">超时设置:</b> @@ -72,7 +90,7 @@ 全选 </a-checkbox> </div> - <a-form-model-item prop="receiver"> + <a-form-model-item prop="receiver" style="margin-bottom: 6px"> <a-tree-select show-search tree-checkable @@ -91,13 +109,21 @@ > </a-tree-select> </a-form-model-item> + <a-checkbox :checked="withLeaders" @change="isAddLeaders" style="margin-bottom: 24px"> + 同时发信息给本级领导 + </a-checkbox> </a-col> <a-col :span="12"> - <b style="margin-bottom: 6px">平级接收人选择:</b> + <div style="display:flex;justify-content: space-between;align-items: center;"> + <b>平级接收人选择:</b> + <a-checkbox :checked="checkSlAll" @change="checkSlChange"> + 全选 + </a-checkbox> + </div> <a-form-model-item prop="recipient"> <a-select mode="multiple" placeholder="选择平级接收单位" v-model="form.recipient" @change="handle"> <a-select-option v-for="item in filteredOptions" :key="item.id" :value="item.id"> - {{ item.recipientName }} + {{ item.recipientName }}({{item.company}} {{item.phone}}) </a-select-option> </a-select> </a-form-model-item> @@ -108,25 +134,23 @@ <b style="margin-bottom: 6px">选择审批领导:</b> <a-form-model-item prop="reviewId"> <a-select show-search v-model="form.reviewId" placeholder="请选择审批领导" style="width: 300px"> - <a-select-option v-for="(item,index) in leaders" :value="item.id" :key="index">{{item.name}}</a-select-option> + <a-select-option v-for="(item,index) in leaders" :value="item.id" :key="index">{{item.realName}}</a-select-option> </a-select> </a-form-model-item> </a-col> <a-col :span="12" style="text-align: right"> - <a-button type="primary" style="width: 250px;" @click="confirmSend()"> + <a-button type="primary" style="width: 250px;" @click="confirmSend()" :disabled="userInfo.role.id==1?true:false"> 确认并提交审核 </a-button> </a-col> </a-row> </div> - <div class="right"> <h2>短信预览</h2> <div class="mobile"> <div class="mesg"> - <P>【{{form.title}}】{{form.content}}。发布单位:{{form.publishingUnit}}</P> + <P>【自然灾害风险预警提示】{{form.content}}<br>发布单位:{{form.publishingUnit}}</P> </div> - </div> </div> </a-form-model> @@ -134,15 +158,17 @@ </template> <script> -import {getAreaWithUserIfo, getPeerRecipient, getLeaders} from '@/api/user' + import {getAreaWithUserIfo, getPeerRecipient, getLeaders} from '@/api/user' import {getUserInfo} from "@/util/storage"; import Cookies from "js-cookie"; -import {massSend, msgSend} from "@/api/send"; + import {massSend, msgSend} from "@/api/send"; + import {deleteFile} from "@/api/list"; export default { name: "notice", data() { return { userInfo: {}, + unittype: null, wrapperCol: { span: 24 }, filteredOptions:[], form: { @@ -162,8 +188,11 @@ acceptingUnitIds: [], peerRecipientIds: [] }, + sendLeaders: [], leaders: [], checkAll: false, + checkSlAll: false, + withLeaders: false, areaUsers: [], replaceFields: { children:'children', @@ -194,16 +223,26 @@ timeout: [{ required: true, message: '请输入超时时间', trigger: 'blur'}], receiver: [{ required: true, message: '请选择接收单位', trigger: 'change'}], reviewId: [{ required: true, message: '请选择审批人', trigger: 'change'}], - recipient: [{ required: true, message: '请选择平级接收人', trigger: 'change'}] + // recipient: [{ required: true, message: '请选择平级接收人', trigger: 'change'}] // acceptingUnitIds: [{ required: true, message: '请选择接收单位', trigger: 'change'}], // peerRecipientIds: [{ required: true, message: '请选择平级接收人', trigger: 'change'}] - } + }, + uploadUrl: '', + fileList: [], + header: { + uid: null, + tk: Cookies.get('resTk') + }, + delList: [] }; }, components: {}, created() { const t = this + const { baseUrl } = require('../../../config/env.' + process.env.NODE_ENV) + t.uploadUrl= baseUrl + '/attachment/upload/detail' t.userInfo = getUserInfo() + t.header.uid = t.userInfo.uid t.form.districtId = t.userInfo.districtId t.form.publishingUnit = t.userInfo.company t.getSameLevel() @@ -220,7 +259,7 @@ if(res.data.data){ t.filteredOptions = res.data.data }else{ - this.$message.warning('暂无数据'); + console.log('暂无数据') } }else{ this.$message.warning(res.data.msg); @@ -233,14 +272,14 @@ let res = await getAreaWithUserIfo() if(res.data.code == 100){ if(res.data.data){ - const treeD = [] + // const treeD = [] t.userTitTree(res.data.data) - const obj = t.findNodeById(res.data.data,t.userInfo.districtId) - treeD.push(t.removeNodesWithoutUsers(obj)) - t.areaUsers = treeD - t.unittype = this.findNodeById(this.areaUsers,t.userInfo.districtId)?.type + // treeD.push(t.findNodeById(res.data.data,t.userInfo.districtId)) + const treeD = t.findNodeById(res.data.data,t.userInfo.districtId) + t.areaUsers = treeD.children + t.unittype = treeD.type }else{ - this.$message.warning('暂无数据'); + console.log('暂无数据') } }else{ this.$message.warning(res.data.msg); @@ -255,7 +294,7 @@ if(res.data.data){ t.leaders = res.data.data }else{ - this.$message.warning('暂无数据'); + console.log('暂无数据') } }else{ this.$message.warning(res.data.msg); @@ -271,11 +310,81 @@ }, checkChange(e) { const t = this - this.checkAll = !this.checkAll + t.checkAll = !t.checkAll if(t.checkAll == true){ - t.form.receiver = t.traverseTree(t.areaUsers[0]) + t.form.receiver = t.traverseTree(t.areaUsers) }else{ t.form.receiver = [] + } + }, + + //选择平级部门部分 + handle(selectedItems) { + const t = this + if(t.form.recipient.length == t.filteredOptions.length){ + t.checkSlAll = true + }else{ + t.checkSlAll = false + } + }, + + checkSlChange(e) { + const t = this + t.checkSlAll = !t.checkSlAll + if(t.checkSlAll == true){ + t.form.recipient = t.filteredOptions.map(i=>i.id) + }else{ + t.form.recipient = [] + } + }, + + isAddLeaders(e) { + const t = this + t.withLeaders = !t.withLeaders + t.sendLeaders = [] + if(e.target.checked){ + for(let i of t.leaders){ + const {realName,...data} = i + const { id: recipienterId, name: recipienterName, phone: recipienterPhone,...rest} = data + const obj = { recipienterId, recipienterName, recipienterPhone, province: null,city: null,area: null,town: null,receiveUnit: t.userInfo.company,unittype: t.userInfo.unittype,roleId: 2,...rest} + t.sendLeaders.push(obj) + } + } + }, + + fileChange(info) { + let fileList = [...info.fileList]; + fileList = fileList.map(file => { + if(file.status == 'done'){ + if (file.response) { + const res = file.response + if(res.code == 100){ + this.$message.success('文件上传成功') + }else{ + this.$message.error('文件上传失败') + } + // Component will show file.url as link + file.url = res.data.fileUrl + } + } + return file; + }); + this.fileList = fileList; + }, + + removeFile(file){ + this.delList.push(file.uid) + }, + + async deleteFile(){ + const t = this + for(let i of t.delList){ + const res = await deleteFile(i) + if(res.data.code == 100){ + console.log('文件删除成功') + }else{ + t.$message.error(res.data.msg) + } } }, @@ -284,29 +393,40 @@ if (valid) { this.form.acceptingUnitIds = [] this.form.peerRecipientIds = [] + const aList = this.form.receiver.map(item=>this.findNodeById(this.areaUsers,item.value)?.users) - console.log(aList,'a') + if(aList.includes(null)){ + this.$message.error('选择接收单位时存在无用户的单位') + return + } const newAList = [].concat(...aList) - console.log(newAList,'b') for(let i of newAList){ const {realName,...data} = i const {id:recipienterId,name: recipienterName,phone: recipienterPhone,company: receiveUnit,...rest} = data const obj = { recipienterId, recipienterName, recipienterPhone, receiveUnit,...rest} this.form.acceptingUnitIds.push(obj) } - const bList = this.form.recipient.map(item => this.filteredOptions.find(i=>i.id == item)) - for(let i of bList){ - const {id:recipienterId,recipientName: recipienterName,phone: recipienterPhone, company: receiveUnit,...rest} = i - const obj = {recipienterId, recipienterName,recipienterPhone,receiveUnit,unittype:this.unittype,...rest} - this.form.peerRecipientIds.push(obj) + this.form.acceptingUnitIds = [...this.form.acceptingUnitIds,...this.sendLeaders] + if(this.form.recipient.length>0){ + const bList = this.form.recipient.map(item => this.filteredOptions.find(i=>i.id == item)) + for(let i of bList){ + const {id:recipienterId,recipientName: recipienterName,phone: recipienterPhone, company: receiveUnit,...rest} = i + const obj = {recipienterId, recipienterName,recipienterPhone,receiveUnit,unittype:this.unittype,...rest} + this.form.peerRecipientIds.push(obj) + } } + this.form.attachments = this.fileList.map(i=>i.response.data.id) const {receiver,recipient,id,...data} = this.form msgSend(data).then( res =>{ if(res.data.code == 100){ + this.deleteFile() this.$message.success('信息已提交审核') }else{ this.$message.error(res.data.msg) } + this.fileList = [] + this.delList = [] + this.withLeaders = false this.$refs.ruleForm.clearValidate() this.$refs.ruleForm.resetFields() }) @@ -337,11 +457,13 @@ // 将树状数据所有id和name放入对象数组 traverseTree(treeData) { let result = []; - function traverse(node) { - result.push({ label: node.name, value: node.id }); - if (node.children && node.children.length > 0) { - for (let child of node.children) { - traverse(child); + function traverse(data) { + for(const node of data){ + if(node.users && node.users.length>0) { + result.push({label: node.name, value: node.id}); + if (node.children && node.children.length > 0) { + traverse(node.children); + } } } } @@ -353,6 +475,7 @@ userTitTree(treeData) { for(const node of treeData){ if(node.users){ + node.users = node.users.filter(i=>i.roleId == 3) node.users = node.users.map((i)=>{ return{ ...i, @@ -360,7 +483,7 @@ districtId: node.id } }) - node.name = node.name + '('+node.users.map(i=>i.name +' '+ i.phone).join(',')+')' + node.name = node.name + '('+node.users.map(i=>i.realName +' '+ i.phone).join(',')+')' } if(node.children){ this.userTitTree(node.children) @@ -369,15 +492,15 @@ return treeData }, // 将users为null的节点删除 - removeNodesWithoutUsers(node) { - if (node.users === null) { - return null; // 返回 null 表示删除节点 - } - if (node.children && node.children.length > 0) { - node.children = node.children.map(child => this.removeNodesWithoutUsers(child)).filter(Boolean); - } - return node; - }, + // removeNodesWithoutUsers(node) { + // if (node.users === null && node.children === null) { + // return null; // 返回 null 表示删除节点 + // } + // if (node.children && node.children.length > 0) { + // node.children = node.children.map(child => this.removeNodesWithoutUsers(child)).filter(Boolean); + // } + // return node; + // }, onSearch() { console.log(...arguments); @@ -385,34 +508,13 @@ onSelect() { console.log(...arguments); }, - //选择平级部门部分 - handle(selectedItems) { - this.selectedItems = selectedItems; - }, + handleRisk(selectedItems) { // this.selectedItems = selectedItems; }, handleLevel(selectedItems) { // this.selectedItems = selectedItems; }, - - onChange(){ - console.log(this.value) - }, - handleChange(value) { - console.log(`selected ${value}`); - }, - handleBlur() { - console.log('blur'); - }, - handleFocus() { - console.log('focus'); - }, - filterOption(input, option) { - return ( - option.componentOptions.children[0].text.toLowerCase().indexOf(input.toLowerCase()) >= 0 - ); - }, }, } </script> -- Gitblit v1.9.2