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