From cc7f03bcbb427ce334f6935311d22f36a61c21fd Mon Sep 17 00:00:00 2001 From: 鲁班七号 <9159450+luban-71@user.noreply.gitee.com> Date: 星期四, 20 七月 2023 11:52:48 +0800 Subject: [PATCH] 修改“我发布的”,为本级发出 --- src/views/Admin/massSend.vue | 224 ++++++++++++++++++++++++++++++++++++++++++++++++------- 1 files changed, 193 insertions(+), 31 deletions(-) diff --git a/src/views/Admin/massSend.vue b/src/views/Admin/massSend.vue index 3e2d999..6bebbd2 100644 --- a/src/views/Admin/massSend.vue +++ b/src/views/Admin/massSend.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"> @@ -67,6 +75,35 @@ <a-row :gutter="24"> <a-col :span="12"> <div style="display:flex;justify-content: space-between;align-items: center;"> + <b>原通讯录接收人:</b> + <a-checkbox :checked="checkTxlAll" @change="checkTxlChange"> + 全选 + </a-checkbox> + </div> + <a-form-model-item prop="txlUsers"> + <a-tree-select + show-search + tree-checkable + style="width: 100%" + v-model="form.txlUsers" + :dropdown-style="{ maxHeight: '400px', overflow: 'auto' }" + placeholder="选择原通讯录接收人" + allow-clear + multiple + :maxTagCount="3" + @change="onTxlChanges" + @search="onTxlSearch" + @select="onTxlSelect" + :tree-data="addressBook" + :replaceFields="replaceTxlFields" + > + </a-tree-select> + </a-form-model-item> + </a-col> + </a-row> + <a-row :gutter="24"> + <a-col :span="12"> + <div style="display:flex;justify-content: space-between;align-items: center;"> <b>选择接收单位:</b> <a-checkbox :checked="checkAll" @change="checkChange"> 全选 @@ -83,6 +120,7 @@ placeholder="选择工作通知接收单位" allow-clear multiple + :maxTagCount="3" @change="onChanges" @search="onSearch" @select="onSelect" @@ -93,13 +131,16 @@ </a-form-model-item> </a-col> <a-col :span="12"> - <div> + <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-form-model-item> <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 }} + <a-select-option v-for="item in filteredOptions" :key="item.id" :value="item.id" :maxTagCount="3"> + {{ item.recipientName }}({{item.company}} {{item.phone}}) </a-select-option> </a-select> </a-form-model-item> @@ -122,7 +163,7 @@ <!-- </a-select>--> <!-- </div>--> <div style="display: flex;justify-content: 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> </div> @@ -132,7 +173,7 @@ <h2>短信预览</h2> <div class="mobile"> <div class="mesg"> - <P>{{form.content}}发布单位:{{form.publishingUnit}}</P> + <P>【自然灾害风险预警提示】{{form.content}}发布单位:{{form.publishingUnit}}</P> </div> </div> @@ -142,14 +183,15 @@ </template> <script> -import { getPeerRecipient, getAreaWithUserIfo } from '@/api/user' +import {getPeerRecipient, getAreaWithUserIfo, getUserByGroup} from '@/api/user' +import { TreeSelect } from 'ant-design-vue'; import { massSend } from "@/api/send"; import {getUserInfo} from "@/util/storage"; export default { name: "massSend", data() { return { - userInfo: {}, + userInfo: getUserInfo(), department: '自治区自然灾害综合监测预警中心', filteredOptions:[], wrapperCol: { span: 24 }, @@ -160,12 +202,23 @@ warningLevel: undefined, content: '', publishingUnit: '', + txlUsers: [], receiver: [], recipient: [], + addressBookRecipient: [], verticalRecipient: [], horizontalRecipient: [] }, + checkTxlAll: false, checkAll: false, + checkSlAll: false, + addressBook: [], + replaceTxlFields: { + children:'userInfos', + title:'name', + key:'id', + value: 'id' + }, areaUsers: [], replaceFields: { children:'children', @@ -193,7 +246,7 @@ warningLevel: [{ required: true, message: '请选择预警级别', trigger: 'change'}], content: [{ required: true, message: '请输入信息内容', trigger: 'blur'}], receiver: [{ required: true, message: '请选择接收单位', trigger: 'change'}], - recipient: [{ required: true, message: '请选择平级接收人', trigger: 'change'}] + // recipient: [{ required: true, message: '请选择平级接收人', trigger: 'change'}] // verticalRecipient: [{ required: true, message: '请选择接收单位', trigger: 'change'}], // horizontalRecipient: [{ required: true, message: '请选择平级接收人', trigger: 'change'}] } @@ -202,14 +255,43 @@ components: {}, created() { const t = this - t.userInfo = getUserInfo() t.form.publishingUnit = t.userInfo.company + t.getUserByGroup() t.getSameLevel() t.getAreaUsers() }, computed: { }, methods: { + // 获取原通讯录 + async getUserByGroup(){ + let t = this + let res = await getUserByGroup() + if(res.data.code == 100){ + if(res.data.data){ + let bookData = [] + bookData = res.data.data + for(let i in bookData){ + if(!bookData[i].userInfos || bookData[i].userInfos.length == 0){ + bookData.splice(i, 1) + } + } + for(let j of bookData){ + j.id = j.id.toString() + '-' + '1' + j.userInfos.map((item)=>{ + item.name = item.name + '('+ item.company + ' ' + item.phone + ')' + return item + }) + } + t.addressBook = bookData + }else{ + console.log('暂无数据') + } + }else{ + this.$message.warning(res.data.msg); + } + }, + // 获取同级接收人 async getSameLevel(){ let t = this @@ -218,7 +300,7 @@ if(res.data.data){ t.filteredOptions = res.data.data }else{ - this.$message.warning('暂无数据'); + console.log('暂无数据') } }else{ this.$message.warning(res.data.msg); @@ -236,10 +318,32 @@ treeD.push(t.findNodeById(res.data.data,t.userInfo.districtId)) t.areaUsers = treeD }else{ - this.$message.warning('暂无数据'); + console.log('暂无数据') } }else{ this.$message.warning(res.data.msg); + } + }, + + //选择子部门部分 + onTxlChanges(value,label,extra) { + const t = this + if(t.form.txlUsers.length == 0){ + t.checkTxlAll = false + } + }, + checkTxlChange(e) { + const t = this + this.checkTxlAll = !this.checkTxlAll + if(t.checkTxlAll == true){ + let res = [] + for(let i of t.addressBook){ + if(i.userInfos && i.userInfos.length>0) + res = res.concat(...i.userInfos) + } + t.form.txlUsers = res.map(i=>i.id) + }else{ + t.form.txlUsers = [] } }, @@ -249,10 +353,6 @@ if(t.form.receiver.length == 0){ t.checkAll = false } - - // for(let i of value){ - // t.form.verticalRecipient = [...t.form.verticalRecipient,...t.findNodeById(t.areaUsers,i.value).users] - // } }, checkChange(e) { @@ -265,31 +365,75 @@ } }, + //选择平级部门部分 + 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 = [] + } + }, + confirmSend(){ this.$refs.ruleForm.validate(valid => { if (valid) { + this.form.addressBookRecipient = [] this.form.verticalRecipient = [] this.form.horizontalRecipient = [] + + const address = this.form.txlUsers.map((item)=> + { + this.findUserById(item).recipientType = 3 + const {addressBookGroupId,...data} = this.findUserById(item) + data.name = data.name.split('(')[0] + return data + } + ) + this.form.addressBookRecipient = address + const aList = this.form.receiver.map(item=>this.findNodeById(this.areaUsers,item.value)?.users) + if(aList.includes(null)){ + this.$message.error('选择接收单位时存在无用户的单位') + return + } const newAList = [].concat(...aList) for(let i of newAList){ - const {realName,...data} = i + const {id,roleId,...data} = i const {company: recipientUnit,...rest} = data const obj = {recipientUnit,recipientType:1,...rest} this.form.verticalRecipient.push(obj) } - const bList = this.form.recipient.map(item => this.filteredOptions.find(i=>i.id == item)) - for(let i of bList){ - const {recipientName: name, company: recipientUnit,...rest} = i - const obj = {name,recipientUnit,recipientType:2,...rest} - this.form.horizontalRecipient.push(obj) + + 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 {recipientName: name, company: recipientUnit,...rest} = i + const obj = {name,recipientUnit,recipientType:2,realName: name,...rest} + const {id,...noId} = obj + this.form.horizontalRecipient.push(noId) + } } - const {receiver,recipient,...data} = this.form + const {txlUsers,receiver,recipient,...data} = this.form massSend(data).then( res =>{ if(res.data.code == 100){ this.$message.success('信息群发成功') this.$refs.ruleForm.clearValidate() this.$refs.ruleForm.resetFields() + this.form.recipient = [] + this.checkTxlAll = false + this.checkAll = false + this.checkSlAll = false }else{ this.$message.error(res.data.msg) this.$refs.ruleForm.clearValidate() @@ -309,6 +453,12 @@ onSelect() { // console.log(...arguments); }, + onTxlSearch() { + // console.log(...arguments); + }, + onTxlSelect() { + // console.log(...arguments); + }, //选择平级部门部分 handleRisk(selectedItems) { // this.selectedItems = selectedItems; @@ -316,9 +466,6 @@ handleLevel(selectedItems) { // this.selectedItems = selectedItems; }, - handle(selectedItems) { - // this.selectedItems = selectedItems; - }, onChange(){ console.log(this.value) }, @@ -353,14 +500,29 @@ return null; }, + findUserById(id){ + for(let i of this.addressBook){ + if(i.userInfos && i.userInfos.length>0){ + for(let j of i.userInfos){ + if(j.id == id){ + return j + } + } + } + } + return null + }, + // 将树状数据所有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); + if(node.users && node.users.length>0){ + result.push({ label: node.name, value: node.id }); + if (node.children && node.children.length > 0) { + for (let child of node.children) { + traverse(child); + } } } } @@ -372,7 +534,7 @@ userTitTree(treeData) { for(const node of treeData){ if(node.users){ - 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) -- Gitblit v1.9.2