From 6efbb509b876e5e4ec634efa8820bd7b288c2283 Mon Sep 17 00:00:00 2001 From: zhouwenxuan <1175765986@qq.com> Date: 星期二, 06 二月 2024 09:16:37 +0800 Subject: [PATCH] 分组 --- src/api/user.js | 45 +++++ src/layout/menu/index.js | 10 + src/views/Admin/massSend.vue | 6 src/views/Admin/sameLevelGroup.vue | 138 +++++++++++++++++ src/views/Admin/components/sameLevelMod.vue | 33 +++ src/views/Admin/components/sameLevelGroupMod.vue | 118 ++++++++++++++ src/router/index.js | 6 src/views/Admin/notice.vue | 74 +++++++-- 8 files changed, 406 insertions(+), 24 deletions(-) diff --git a/src/api/user.js b/src/api/user.js index 819c7de..c2fedaf 100644 --- a/src/api/user.js +++ b/src/api/user.js @@ -213,3 +213,48 @@ data: data }) } + +//评级接收人分组 + +//分页查询 +export function getSameLevelGroup(data){ + return request({ + url: '/mesmanager/recipientGroup/page', + method: 'post', + data: data + }) +} + +//新增 +export function addSameLevelGroup(data){ + return request({ + url: '/mesmanager/recipientGroup/add ', + method: 'post', + data:data + }) +} + +//修改 +export function updateSameLevelGroup(data){ + return request({ + url: '/mesmanager/recipientGroup/update', + method: 'post', + data:data + }) +} +//删除 +export function delSameLevelGroup(id){ + return request({ + url:'/mesmanager/recipientGroup/delete?id=' + id, + method: 'get' + }) +} + +//列表 +export function getSameLevelGroupList(data){ + return request({ + url: '/mesmanager/recipientGroup/list', + method: 'post', + data: data + }) +} diff --git a/src/layout/menu/index.js b/src/layout/menu/index.js index 601db7f..c440bd8 100644 --- a/src/layout/menu/index.js +++ b/src/layout/menu/index.js @@ -82,6 +82,11 @@ }, { MenuID: "34", + MenuTitle: "平级接收人分组", + MenuPath: "/samelevelGroup", + }, + { + MenuID: "35", MenuTitle: "原通讯录", MenuPath: "/addressBook", } @@ -232,6 +237,11 @@ }, { MenuID: "34", + MenuTitle: "平级接收人分组", + MenuPath: "/samelevelGroup", + }, + { + MenuID: "35", MenuTitle: "原通讯录", MenuPath: "/addressBook", } diff --git a/src/router/index.js b/src/router/index.js index d345dca..550d46b 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -124,6 +124,12 @@ meta: { title: 'App版本信息' }, component: () => import('@/views/Admin/appFile.vue'), }, + { + path: '/samelevelGroup', + name: 'samelevelGroup', + meta: { title: '平级接收人分组' }, + component: () => import('@/views/Admin/sameLevelGroup.vue'), + }, // { // path: '/menu', // name: 'menu', diff --git a/src/views/Admin/components/sameLevelGroupMod.vue b/src/views/Admin/components/sameLevelGroupMod.vue new file mode 100644 index 0000000..c014e12 --- /dev/null +++ b/src/views/Admin/components/sameLevelGroupMod.vue @@ -0,0 +1,118 @@ +<template> + <a-modal + :title="title" + :visible="visible" + centered + :confirm-loading="confirmLoading" + width="50%" + cancelText="取消" + okText="确认" + @ok="onSubmit" + @cancel="handleCancel" + :afterClose="clearMod" + > + <a-form-model ref="ruleForm" :rules="rules" :model="form" :label-col="labelCol" :wrapper-col="wrapperCol" :colon="false"> + <a-form-model-item label="分组名称" prop="name"> + <a-input v-model="form.name"/> + </a-form-model-item> + </a-form-model> + </a-modal> +</template> + +<script> + +import {addRecipient, addSameLevelGroup, addUser, updateRecipient, updateSameLevelGroup, updateUser} from "@/api/user"; +import {verifySimplePhone} from "@/util/validate"; +export default { + name: 'userMod', + props: [], + data () { + return { + title: '新增用户', + visible: false, + confirmLoading: false, + labelCol: { span: 4 }, + wrapperCol: { span: 14 }, + form: { + id: null, + name: '', + }, + rules: { + name: [{ required: true, message: '请输入分组名称', trigger: 'blur'}], + } + } + }, + created() { + const t = this + }, + methods:{ + openDialog(type,data){ + const t = this + if(type == 'add'){ + t.title = '新增' + t.form = { + id: null, + name: '', + } + }else{ + t.title = '编辑' + for(let i in data){ + if(t.isValidKey(i,t.form)){ + t.form[i] = data[i] + } + } + } + t.visible = true + }, + + isValidKey(key, object){ + return key in object; + }, + + clearMod(){ + this.$refs.ruleForm.clearValidate() + this.$refs.ruleForm.resetFields() + }, + + onSubmit() { + this.$refs.ruleForm.validate(valid => { + if (valid) { + if(this.title == '新增'){ + const { id,...data } = this.form + addSameLevelGroup(data).then(res => { + if(res.data.code == 100){ + this.$message.success('新增成功') + this.$emit('refresh') + }else{ + this.$message.error(res.data.msg) + } + }) + }else{ + const data = this.form + updateSameLevelGroup(data).then((res)=>{ + if(res.data.code == 100){ + this.$message.success('修改成功') + this.$emit('refresh') + }else{ + this.$message.error(res.data.msg) + } + }) + } + this.visible = false + } else { + return false; + } + }); + }, + + handleCancel(e) { + const t = this + t.visible = false; + } + } +} +</script> + +<style lang="less" scoped> + +</style> diff --git a/src/views/Admin/components/sameLevelMod.vue b/src/views/Admin/components/sameLevelMod.vue index 39cea6f..4c715cf 100644 --- a/src/views/Admin/components/sameLevelMod.vue +++ b/src/views/Admin/components/sameLevelMod.vue @@ -50,13 +50,18 @@ > </a-tree-select> </a-form-model-item> + <a-form-model-item label="选择分组" prop="peerRecipientGroupId"> + <a-select v-model="form.peerRecipientGroupId" style="width: 100%"> + <a-select-option v-for="item in groupData" :value="item.id" :key="item.id">{{item.name}}</a-select-option> + </a-select> + </a-form-model-item> </a-form-model> </a-modal> </template> <script> -import {addRecipient, addUser, updateRecipient, updateUser} from "@/api/user"; +import {addRecipient, addUser, getSameLevelGroupList, updateRecipient, updateUser} from "@/api/user"; import {verifySimplePhone} from "@/util/validate"; export default { name: 'userMod', @@ -80,6 +85,12 @@ labelCol: { span: 4 }, wrapperCol: { span: 14 }, areaData: [], + groupData: [ + { + id: '', + name: '未分类' + } + ], replaceFields: { children:'children', title:'name', @@ -93,17 +104,19 @@ company: '', phone: '', unittype: null, - districtId: null + districtId: null, + peerRecipientGroupId: null }, rules: { recipientName: [{ required: true, message: '请输入姓名或称呼', trigger: 'blur'}], company: [{ required: true, message: '请输入单位名称(备注)', trigger: 'blur'}], - phone: [{ required: true, validator: validatePhone, trigger: 'blur'}] + phone: [{ required: true, validator: validatePhone, trigger: 'blur'}], } } }, created() { const t = this + t.getGroupList(); }, methods:{ openDialog(type,data){ @@ -116,7 +129,8 @@ company: '', phone: '', unittype: null, - districtId: null + districtId: null, + peerRecipientGroupId: null } }else{ t.title = '编辑用户' @@ -125,6 +139,7 @@ t.form[i] = data[i] } } + t.form.peerRecipientGroupId = data.peerRecipientGroupId ? data.peerRecipientGroupId: '' } t.visible = true }, @@ -132,7 +147,15 @@ isValidKey(key, object){ return key in object; }, - + async getGroupList () { + const t = this + const res = await getSameLevelGroupList(); + if(res.data.code == 100){ + t.groupData = t.groupData.concat(res.data.data) + }else{ + this.$message.error(res.data.msg) + } + }, clearMod(){ this.$refs.ruleForm.clearValidate() this.$refs.ruleForm.resetFields() diff --git a/src/views/Admin/massSend.vue b/src/views/Admin/massSend.vue index dd37f9e..8941a16 100644 --- a/src/views/Admin/massSend.vue +++ b/src/views/Admin/massSend.vue @@ -69,7 +69,7 @@ <!-- </a-form-model-item>--> <!-- </a-col>--> <!-- </a-row>--> - <span><b>发布单位:</b>{{form.publishingUnit}}</span> +<!-- <span><b>发布单位:</b>{{form.publishingUnit}}</span>--> <br/><br/> <!-- 子单位--> <a-row :gutter="24"> @@ -173,7 +173,7 @@ <h2>短信预览</h2> <div class="mobile"> <div class="mesg"> - <P>【自然灾害风险预警提示】{{form.content}}发布单位:{{form.publishingUnit}}</P> + <P>【自然灾害风险预警提示】{{form.content}}</P> </div> </div> @@ -584,4 +584,4 @@ } } -</style> \ No newline at end of file +</style> diff --git a/src/views/Admin/notice.vue b/src/views/Admin/notice.vue index 3b8c67e..1da15e2 100644 --- a/src/views/Admin/notice.vue +++ b/src/views/Admin/notice.vue @@ -78,7 +78,7 @@ </a-form-model-item> </a-col> </a-row> - <span><b>发布单位:</b>{{form.publishingUnit}}</span> +<!-- <span><b>发布单位:</b>{{form.publishingUnit}}</span>--> <br /><br /> <!-- 子单位--> <a-row :gutter="24"> @@ -110,12 +110,22 @@ </a-checkbox> </div> <a-form-model-item prop="recipient"> - <a-select mode="multiple" placeholder="选择平级接收单位" v-model="form.recipient" @change="handle" - :maxTagCount="3"> - <a-select-option v-for="item in filteredOptions" :key="item.id" :value="item.id"> - {{ item.recipientName }}({{item.company}} {{item.phone}}) - </a-select-option> - </a-select> +<!-- <a-select mode="multiple" placeholder="选择平级接收单位" v-model="form.recipient" @change="handle"--> +<!-- :maxTagCount="3">--> +<!-- <a-select-option v-for="item in filteredOptions" :key="item.id" :value="item.id">--> +<!-- {{ item.recipientName }}({{item.company}} {{item.phone}})--> +<!-- </a-select-option>--> +<!-- </a-select>--> + <a-tree-select + v-model="form.recipient" + style="width: 100%" + :tree-data="treeData" + tree-checkable + placeholder="选择平级接收单位" + :show-checked-strategy="SHOW_PARENT" + search-placeholder="Please select" + @change="handle" + /> </a-form-model-item> </a-col> </a-row> @@ -141,7 +151,7 @@ <h2>短信预览</h2> <div class="mobile"> <div class="mesg"> - <P>【自然灾害风险预警提示】{{form.content}}<br>发布单位:{{form.publishingUnit}}</P> + <P>【自然灾害风险预警提示】{{form.content}}</P> </div> </div> </div> @@ -166,10 +176,16 @@ import { deleteFile } from "@/api/list"; + import { TreeSelect } from 'ant-design-vue'; + const SHOW_PARENT = TreeSelect.SHOW_PARENT; + const treeData = []; export default { name: "notice", data() { return { + value: [], + SHOW_PARENT, + treeData, userInfo: {}, unittype: null, wrapperCol: { @@ -322,7 +338,25 @@ let res = await getPeerRecipient() if (res.data.code == 100) { if (res.data.data) { - t.filteredOptions = res.data.data + // t.filteredOptions = res.data.data + + for (const resKey in res.data.data) { + t.filteredOptions = t.filteredOptions.concat(...res.data.data[resKey]); + console.log('t.filteredOptions',t.filteredOptions) + const obj = { + title: resKey, + value: resKey, + key: resKey, + children: res.data.data[resKey].map(item => { + return { + title: item.recipientName + '(' +item.company +item.phone+ ')', + value: item.id, + key: item.id, + } + }) + } + t.treeData.push(obj); + } } else { console.log('暂无数据') } @@ -384,18 +418,25 @@ //选择平级部门部分 handle(selectedItems) { const t = this - if (t.form.recipient.length == t.filteredOptions.length) { - t.checkSlAll = true - } else { - t.checkSlAll = false - } + // if (t.form.recipient.length == t.filteredOptions.length) { + // t.checkSlAll = true + // } else { + // t.checkSlAll = false + // } + const group = t.treeData.map(item => item.value) + if (group.length === t.form.recipient.length && group.every((v,i) => v === t.form.recipient[i])) { + 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) + // t.form.recipient = t.filteredOptions.map(i => i.id) + t.form.recipient = t.treeData.map(item => item.value) } else { t.form.recipient = [] } @@ -539,6 +580,7 @@ ...data } = this.form msgSend(data).then(res => { + if (res.data.code == 100) { this.deleteFile() this.$message.success('信息已提交审核') @@ -683,4 +725,4 @@ } } -</style> \ No newline at end of file +</style> diff --git a/src/views/Admin/sameLevelGroup.vue b/src/views/Admin/sameLevelGroup.vue new file mode 100644 index 0000000..6f5f2ec --- /dev/null +++ b/src/views/Admin/sameLevelGroup.vue @@ -0,0 +1,138 @@ +<template> + <div class="inner"> + <a-row type="flex" justify="space-between" style="margin-bottom: 20px"> + <a-col :span="4"> + <a-button type="primary" @click="editData('add',{})">添加</a-button> + </a-col> + </a-row> + <div class="table-cont"> + <a-table :columns="columns" :data-source="tableData" :pagination="pagination" :rowKey="record=>record.id" bordered> + <template #action="action,row"> + <a-button type="link" @click="editData('edit',row)">编辑</a-button> + <a-button type="link" class="delBtn" @click="delData(row)">删除</a-button> + </template> + </a-table> + </div> + <same-level-mod-group ref="sameLevelMod" @refresh="getUserList"></same-level-mod-group> + </div> +</template> + +<script> +import sameLevelModGroup from "@/views/Admin/components/sameLevelGroupMod.vue" +import {getUserInfo} from "@/util/storage"; +import {delSameLevelGroup, getSameLevelGroup} from "@/api/user"; +export default { + name: 'sameLevel', + components: { + sameLevelModGroup + }, + data () { + return { + areaVal: [], + unittype: null, + districtId: null, + search:{ + pageIndex: 1, + pageSize: 10, + }, + columns:[ + { + title: '分组名称', + dataIndex: 'name', + key: 'name', + align: 'center' + }, + { + title: '操作', + width: '12%', + key: 'action', + scopedSlots: { customRender: 'action' } + }, + ], + tableData: [], + pagination: { + current: 1, + defaultCurrent: 1, + defaultPageSize: 10, + total: 0, + onChange: ( page, pageSize ) => this.onPageChange(page,pageSize), + showTotal: total => `共 ${total} 条` + }, + fieldNames:{ + label: 'name', + value: 'id', + children: 'children' + } + } + }, + created() { + const t = this + t.unittype = getUserInfo().unittype + t.districtId = getUserInfo().districtId + t.getUserList() + }, + methods:{ + async getUserList(){ + const t = this + const res = await getSameLevelGroup(t.search); + if(res.data.code == 100){ + t.tableData = res.data.data + t.pagination.total = res.data.total + }else{ + t.$message.warning(res.data.msg); + } + }, + + resetSearch(){ + const t = this + t.areaVal = [] + t.search = { + pageIndex: 1, + pageSize: 10, + } + t.getUserList() + }, + + editData(type,data){ + const t = this + t.$refs.sameLevelMod.openDialog(type,data) + }, + + async delData(row){ + const t = this + this.$confirm({ + title: '提示', + content: h => <div>是否删除该条信息?</div>, + cancelText: '取消', + okText: '确认', + centered: true, + onOk() { + delSameLevelGroup(row.id).then(res=>{ + if(res.data.code == 100){ + t.$message.success('删除成功'); + t.getUserList() + }else{ + t.$message.warning(res.data.msg); + } + }) + }, + onCancel() { + console.log('Cancel'); + }, + }); + }, + onPageChange(page, pageSize) { + const t= this + t.pagination.current = page + t.search.pageIndex = page + t.getUserList() + }, + } +} +</script> + +<style lang="less" scoped> +.delBtn{ + color: @danger +} +</style> -- Gitblit v1.9.2