From ba09ccd7346a2e0aa8a1ac55b5cc46eb9cb057af Mon Sep 17 00:00:00 2001 From: zhouwx <1175765986@qq.com> Date: 星期五, 02 八月 2024 08:39:53 +0800 Subject: [PATCH] 责任人 --- src/views/Admin/contactBook/contactors.vue | 88 ++++++++++++++++++++- src/api/user.js | 16 ++++ src/main.js | 2 src/views/Admin/components/contactorsMod.vue | 84 +++++++++++++++++++- package.json | 1 src/router/index.js | 2 6 files changed, 181 insertions(+), 12 deletions(-) diff --git a/package.json b/package.json index 27b03ee..39d48e2 100644 --- a/package.json +++ b/package.json @@ -19,6 +19,7 @@ "style-resources-loader": "^1.5.0", "vue": "^2.6.11", "vue-cli-plugin-style-resources-loader": "^0.1.5", + "vue-json-excel": "^0.3.0", "vue-quill-editor": "^3.0.6", "vue-router": "^3.2.0", "vuex": "^3.4.0" diff --git a/src/api/user.js b/src/api/user.js index 61f21c0..e1d6885 100644 --- a/src/api/user.js +++ b/src/api/user.js @@ -277,3 +277,19 @@ data: data }) } + +export function getExportData(id){ + return request({ + url: '/org/user/export/' + id, + method: 'post', + }) +} +export function getOrgData(id){ + return request({ + url: '/org/structure/findByDistrictId/' + id, + method: 'get', + }) +} + + + diff --git a/src/main.js b/src/main.js index e9c9133..49d3010 100644 --- a/src/main.js +++ b/src/main.js @@ -9,6 +9,8 @@ import 'moment/locale/zh-cn'; import '@/util/permission' import {message,Modal} from "ant-design-vue"; +import JsonExcel from 'vue-json-excel' +Vue.component('downloadExcel', JsonExcel) moment.locale('zh-cn'); import prevent from './directive/index'//你的文件路径 Vue.use(prevent) diff --git a/src/router/index.js b/src/router/index.js index f8e86ef..d070612 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -8,7 +8,7 @@ { path: '/', name: 'login', - component: () => import('@/views/Login'), + component: () => import('@/views/Login1'), meta: { title: '登录' }, }, { diff --git a/src/views/Admin/components/contactorsMod.vue b/src/views/Admin/components/contactorsMod.vue index 6200c7c..ef872d2 100644 --- a/src/views/Admin/components/contactorsMod.vue +++ b/src/views/Admin/components/contactorsMod.vue @@ -46,13 +46,22 @@ :tree-data="areaData" placeholder="行政区划" :replaceFields="replaceFields" - disabled + @change="changeArea" /> </a-form-model-item> </a-col> <a-col :span="12"> <a-form-model-item label="组织架构"> - <a-input v-model="orgName" disabled/> + <a-select + v-model.trim="form.orgStructureId" + placeholder="选择组织架构" + style="width: 100%" + allowClear + show-search + > + <a-select-option v-for="item in orgData" :value="item.id" :key="item.id">{{item.orgName}}</a-select-option> + </a-select> +<!-- <a-input v-model="orgName" />--> </a-form-model-item> </a-col> </a-row> @@ -95,11 +104,14 @@ </template> <script> -import {addContactors,updateContactors} from '@/api/contactBook' +import {addContactors, getStructure, updateContactors} from '@/api/contactBook' import {verifySimplePhone} from "@/util/validate"; import {getDistrictInfo} from "@/api/login"; +import subMenu from "@/views/Admin/contactBook/subMenu.vue"; +import {getOrgData} from "@/api/user"; export default { name: 'addressUserMod', + components: {subMenu}, props: ['groupList'], data () { let validatePhone = (rule, value, callback)=>{ @@ -124,6 +136,13 @@ wrapperCol: { span: 14 }, areaId: null, orgName: '', + areaVal: [], + orgData: [], + fieldNames:{ + label: 'name', + value: 'id', + children: 'children' + }, form: { id: null, name: '', @@ -214,19 +233,26 @@ key:'id', value: 'id' }, + currentKey: [], + openKeys: [], + } }, created() { const t = this - t.getDistrictInfo() + // t.getDistrictInfo() + t.getStructure() }, + methods:{ - openDialog(type,data,areaId,orgName,orgId){ + openDialog(type,data,areaId,orgName,orgId) { const t = this + t.changeArea(areaId) t.createRules() t.areaId = Number(areaId) t.orgName = orgName + if(type == 'add'){ t.title = '新增责任人' t.isView = false @@ -268,6 +294,10 @@ } } t.visible = true + }, + onChange(value) { + const t = this + }, isValidKey(key, object){ return key in object; @@ -360,8 +390,36 @@ }); }, + async getStructure(){ + const t = this + const res = await getStructure() + if(res.data.code == 100){ + t.areaData = t.filterBranches(res.data.data,['自治区直辖县级行政区划']) + // const firstItem = this.firstIdWithOrgStructures(res.data.data[0]) + // if(firstItem){ + // t.openKeys = [firstItem.id +'-'+ firstItem.name] + // t.currentId = firstItem.id + // t.currentKey = [firstItem.orgStructures[0].id +'-'+ firstItem.orgStructures[0].orgName] + // }else{ + // t.$message.warning('暂无可操作的单位,请先进入“组织架构维护页面”新建相应的本级单位') + // } + }else{ + t.$message.warning(res.data.msg) + } + }, + filterBranches(branches, targetNames) { + return branches.filter(branch => { + if (targetNames.includes(branch.name)) { + return false; // 过滤掉当前分支 + } + if (branch.children && branch.children.length > 0) { + branch.children = this.filterBranches(branch.children, targetNames); + } + return true; // 保留当前分支 + }); + }, async getDistrictInfo(){ - let res = await getDistrictInfo() + let res = await getStructure() if(res.data.code == 100){ this.areaData = res.data.data } else { @@ -387,6 +445,20 @@ handleCancel(e) { const t = this t.visible = false; + }, + changeArea(val){ + const t = this + t.form.districtId = val; + t.form.districtCode = t.findCodeById(t.areaData,val) + t.form.orgStructureId = null; + getOrgData(val).then(res => { + if(res.data.code === 100) { + console.log("res",res) + t.orgData = res.data.data + }else { + t.$message.warning(res.data.msg) + } + }) } } } diff --git a/src/views/Admin/contactBook/contactors.vue b/src/views/Admin/contactBook/contactors.vue index 6a07c56..f2e574f 100644 --- a/src/views/Admin/contactBook/contactors.vue +++ b/src/views/Admin/contactBook/contactors.vue @@ -23,10 +23,19 @@ <a-button type="danger" @click="deliverTask" v-if="!unittype || unittype == 1">下发更新任务</a-button> </div> </div> - <div style="margin: 20px 0"> - <a-button type="primary" style="margin-right: 10px" @click="editData('add',{})">新增</a-button> - <a-button type="primary" @click="massImport()">批量导入</a-button> + <div style="margin: 20px 0;display: flex;justify-content: space-between"> + <div> + <a-button type="primary" style="margin-right: 10px" @click="editData('add',{})">新增</a-button> + <a-button type="primary" @click="massImport()">批量导入</a-button> + </div> + <a-button type="primary" @click="openExport">批量导出</a-button> + +<!-- <download-excel :data="json_data" :fields="json_fields" name="责任人导出.xlsx" >--> +<!-- <a-button type="primary">批量导出</a-button>--> +<!-- </download-excel>--> + </div> + <div class="table-cont"> <a-table :columns="columns" :data-source="tableData" :pagination="pagination" :rowKey="record=>record.id.toString()" bordered> <template #index="text,record,index"> @@ -65,6 +74,28 @@ </a-form-model-item> </a-form-model> </a-modal> + <a-modal v-model="exportDialog" title="导出通讯录" :footer="null" centered :afterClose="closeDialog"> + <a-form-model ref="ruleForm" :label-col="labelCol" :wrapper-col="wrapperCol" :colon="false"> + <a-form-model-item label="行政区划" > + <a-tree-select + v-model="exportAreaId" + style="width: 100%" + :dropdown-style="{ maxHeight: '400px', overflow: 'auto' }" + :tree-data="treeData" + placeholder="请选择行政区划" + :replaceFields="replaceFields" + @change="changeArea" + /> + </a-form-model-item> + <div v-if=" json_data.length>0"> + <download-excel :data="json_data" :fields="json_fields" name="责任人导出.xlsx" style="display: flex;justify-content: flex-end"> + <a-button type="primary">批量导出</a-button> + </download-excel> + </div> + <div v-else style="text-align: center;color: salmon">暂无人员导出</div> + + </a-form-model> + </a-modal> </div> </template> @@ -80,7 +111,7 @@ } from "@/api/contactBook"; import subMenu from "@/views/Admin/contactBook/subMenu"; import contactorsMod from "@/views/Admin/components/contactorsMod" -import {importUser} from "@/api/user"; +import {getExportData, importUser} from "@/api/user"; import importNew from "@/assets/importNew.xlsx"; import JSONBig from 'json-bigint' export default { @@ -182,7 +213,34 @@ value: 'id', children: 'children' }, - currentId: null + currentId: null, + exportDialog: false, + areaId: null, + areaData: [], + exportAreaId: null, + replaceFields: { + children:'children', + title:'name', + key:'id', + value: 'code' + }, + json_fields: { + 'ID': 'id', + '姓名': 'name', + '所属当前级别行政区划': 'districtName', + '区划编号': 'districtCode', + '组织架构': 'orgStructureName', + '单位': 'company', + '职务': 'post', + '电话号码': 'phone', + '责任类型': { + field: 'orgUserTypes', + callback: (value) => { + return value?value.map(i=>i.typeName + '(' + i.orgUserTags.map(j=>j.tagName).join('/') +')').join(','): '' + } + }, + }, + json_data: [] } }, created() { @@ -255,6 +313,11 @@ clearMod(){ this.fileList = [] }, + closeDialog(){ + this.exportAreaId = null; + this.json_data = []; + this.exportDialog = false; + }, async getStructure(){ const t = this const res = await getStructure() @@ -272,6 +335,7 @@ t.$message.warning(res.data.msg) } }, + filterBranches(branches, targetNames) { return branches.filter(branch => { @@ -311,6 +375,9 @@ } }, + openExport() { + this.exportDialog = true + }, handleClick(e) { this.currentId = e.keyPath[1]?e.keyPath[1].split('-')[0]:e.keyPath[0].split('-')[0] @@ -395,6 +462,17 @@ }, }); }, + changeArea(value){ + console.log('val',this.exportAreaId) + getExportData(this.exportAreaId).then(res => { + if(res.data.code == 100){ + this.json_data = res.data.data + }else{ + this.$message.warning(res.data.msg); + } + }) + console.log('this.json_data',this.json_data) + }, async deliverTask(){ const t = this -- Gitblit v1.9.2