From 75b539a34ca2215f60ee1407964af90b975f5f82 Mon Sep 17 00:00:00 2001
From: lin <sbla5888@163.com>
Date: Tue, 26 Mar 2024 10:12:19 +0800
Subject: [PATCH] 议事管理指定人员优化

---
 src/views/article/components/userList.vue              |  255 ++++++++++++++++++++++++++++++++++++++++++
 src/api/system/user.js                                 |    6 
 src/views/article/components/discussionManageChild.vue |   50 ++++++-
 3 files changed, 298 insertions(+), 13 deletions(-)

diff --git a/src/api/system/user.js b/src/api/system/user.js
index 91dfe34..94af1a6 100644
--- a/src/api/system/user.js
+++ b/src/api/system/user.js
@@ -139,12 +139,14 @@
   })
 }
 
-export const getUserlnfoByDistrictlds = (districtIds) => {
+export const getUserlnfoByDistrictlds = (current, size, params) => {
   return request({
     url: '/api/blade-system/user/getUserInfoByDistrictIds',
     method: 'get',
     params: {
-      districtIds,
+      ...params,
+      current,
+      size,
     }
   })
 }
\ No newline at end of file
diff --git a/src/views/article/components/discussionManageChild.vue b/src/views/article/components/discussionManageChild.vue
index 4df0b4f..3adc6a6 100644
--- a/src/views/article/components/discussionManageChild.vue
+++ b/src/views/article/components/discussionManageChild.vue
@@ -4,6 +4,9 @@
       @close="handleClose" @open="opens">
       <avue-form ref="DisCussFrom" :option="option" v-model="froms" @submit="handleSubmit"></avue-form>
     </el-dialog>
+
+    <userList ref="userList" @selectPersonList="selectPersonList"></userList>
+
   </div>
 </template>
 
@@ -27,6 +30,8 @@
   import {
     getDictionary
   } from '@/api/system/dict'
+  import userList from "./userList.vue";
+
 
   // import {
   //   getList as getHouseholdList,
@@ -39,6 +44,9 @@
 
   let formData = {}
   export default {
+    components: {
+      userList
+    },
     data() {
       return {
         dialogVisibles: false,
@@ -178,9 +186,9 @@
             {
               display: false,
               label: "选择用户",
-              prop: "userIds",
+              prop: "userName",
               tags: true,
-              type: "tree",
+              type: "input",
               multiple: true,
               span: 12,
               offset: 8,
@@ -188,16 +196,25 @@
               hide: true,
               row: true,
               // dicUrl: `/api/blade-system/user/getUserlnfoByDistrictlds?districtlds={{}}`,
-              props: {
-                label: 'name',
-                value: 'id',
-              },
-              dicData: [],
+              // props: {
+              //   label: 'name',
+              //   value: 'id',
+              // },
+              // dicData: [],
               rules: [{
                 required: true,
                 message: '请输入姓名',
                 trigger: 'blur'
               }],
+              focus: ({
+                value,
+                column
+              }) => {
+                // this.$message.success('focus事件查看控制台')
+                // console.log('获取焦点', value, column)
+                // this.$refs.userList && this.$refs.userList.resetForm()
+                this.$refs.userList.show(this.discussion.articleRange)
+              },
             },
 
             {
@@ -231,7 +248,8 @@
         dialogVisibles: false,
         articleId: '',
         discussion: {},
-        id: ""
+        id: "",
+        personList: [],
       }
     },
     created() {
@@ -245,9 +263,10 @@
     watch: {
       'froms.appointUser': {
         handler(newData) {
-          const column = this.findObject(this.option.column, "userIds")
+          const column = this.findObject(this.option.column, "userName")
           if (newData == 1) {
             column.display = true
+            // this.$refs.userList.show()
           } else {
             column.display = false
           }
@@ -265,6 +284,14 @@
       }
     },
     methods: {
+      selectPersonList(personList) {
+        console.log(personList, "++++++++++++")
+        this.personList = personList
+        let nameList = personList.map(e => {
+          return e.name
+        })
+        this.froms.userName = nameList.join(",")
+      },
       getuserInfoByDistrictId() {
         getUserlnfoByDistrictlds(this.discussion.articleRange).then(res => {
           const column = this.findObject(this.option.column, "userIds")
@@ -280,7 +307,8 @@
       handleSubmit(form, done) {
         form.articleId = this.articleId
         form.eventType = 1
-        form.userIds = JSON.stringify(form.userIds)
+        form.userIds = this.personList.map(e => e.id).join(",")
+        // form.userIds = JSON.stringify(form.userIds)
         if (form.appointUser == 0) {
           form.userIds = ''
         }
@@ -376,7 +404,7 @@
               this.froms.userIds = JSON.parse(this.froms.userIds)
             }
           }
-          this.getuserInfoByDistrictId()
+          // this.getuserInfoByDistrictId()
 
         })
       },
diff --git a/src/views/article/components/userList.vue b/src/views/article/components/userList.vue
new file mode 100644
index 0000000..167feea
--- /dev/null
+++ b/src/views/article/components/userList.vue
@@ -0,0 +1,255 @@
+<template>
+  <el-dialog class="dept-user-table-dialog" width="70%" title="选择接收人" modal-append-to-body="false" append-to-body="true"
+    :close-on-click-model="true" :visible.sync="showDialog" @close="showDialog = false">
+    <!-- <div class="left">
+      <el-scrollbar>
+        <basic-container>
+          <avue-tree :option="treeOption" :data="treeData" @node-click="nodeClick" />
+        </basic-container>
+      </el-scrollbar>
+    </div> -->
+    <div class="right">
+      <avue-crud :option="option" :search.sync="search" :table-loading="loading" :data="data" ref="crud" v-model="form"
+        :page.sync="page" @search-change="searchChange" @search-reset="searchReset" @selection-change="selectionChange"
+        @current-change="currentChange" @size-change="sizeChange" @refresh-change="refreshChange"></avue-crud>
+    </div>
+    <div slot="footer" class="dialog-footer">
+      <el-button @click="showDialog = false">取 消</el-button>
+      <el-button type="primary" @click="submit">确 定</el-button>
+    </div>
+  </el-dialog>
+
+
+</template>
+
+<script>
+  import {
+    getDeptLazyTree
+  } from "@/api/system/dept";
+  import {
+    getUserlnfoByDistrictlds
+  } from "@/api/system/user";
+  import {
+    mapGetters
+  } from "vuex";
+
+  export default {
+    name: "DeptUserTable",
+    data() {
+      return {
+        showDialog: false,
+        form: {},
+        search: {},
+        selectionList: [],
+        query: {},
+        loading: true,
+        platformLoading: false,
+        page: {
+          pageSize: 10,
+          currentPage: 1,
+          total: 0
+        },
+        treeDeptId: '',
+        treeData: [],
+        treeOption: {
+          nodeKey: 'id',
+          lazy: true,
+          treeLoad: function(node, resolve) {
+            const parentId = (node.level === 0) ? 0 : node.data.id
+            getDeptLazyTree(parentId).then(res => {
+              resolve(res.data.data.map(item => {
+                return {
+                  ...item,
+                  leaf: !item.hasChildren
+                }
+              }))
+            })
+          },
+          addBtn: false,
+          menu: false,
+          size: 'small',
+          props: {
+            labelText: '标题',
+            label: 'title',
+            value: 'value',
+            children: 'children'
+          }
+        },
+        option: {
+          height: 'auto',
+          calcHeight: 120,
+          tip: false,
+          searchShow: true,
+          searchMenuSpan: 6,
+          border: true,
+          index: true,
+          selection: true,
+          viewBtn: true,
+          dialogType: 'drawer',
+          dialogClickModal: false,
+          menu: false,
+          addBtn: false,
+          rowKey: "id",
+          reserveSelection: true,
+          column: [{
+              label: "用户姓名",
+              prop: "name",
+              search: true,
+              searchSpan: 4,
+              display: false
+            },
+            {
+              label: "电话",
+              prop: "phoneNumber",
+              slot: true,
+              searchSpan: 4,
+              search: true,
+              display: false
+            },
+            {
+              label: "地址",
+              width: 560,
+              prop: "address",
+              slot: true,
+              display: false
+            },
+            {
+              label: "楼栋",
+              prop: "building",
+              slot: true,
+              searchSpan: 4,
+              search: true,
+              display: false
+            },
+            {
+              label: "单元",
+              prop: "unit",
+              searchSpan: 4,
+              slot: true,
+              search: true,
+              display: false
+            },
+
+          ],
+        },
+        data: [],
+        articleRange: '',
+      }
+    },
+    computed: {
+      ...mapGetters(["userInfo", "permission"]),
+      ids() {
+        let ids = []
+        this.selectionList.forEach(ele => {
+          console.log(ele, "---------")
+          ids.push(ele.id)
+        })
+        return ids.join(",")
+      },
+      idsList() {
+        let ids = []
+        this.selectionList.forEach(ele => {
+          ids.push({
+            id: ele.id,
+            name: ele.name
+          })
+        })
+        return ids
+      }
+    },
+    methods: {
+      submit() {
+        this.$emit("selectPersonList", this.idsList)
+        this.showDialog = false
+      },
+
+      show(articleRange) {
+        console.log("***111111111111111111***", articleRange)
+        this.articleRange = articleRange
+        this.showDialog = true
+        this.onLoad(this.page)
+      },
+
+      nodeClick(data) {
+        this.treeDeptId = data.id
+        this.page.currentPage = 1
+        this.onLoad(this.page)
+      },
+      searchReset() {
+        this.query = {}
+        this.treeDeptId = ''
+        this.onLoad(this.page)
+      },
+      searchChange(params, done) {
+        this.query = params
+        this.page.currentPage = 1
+        this.onLoad(this.page, params)
+        done()
+      },
+      selectionChange(list) {
+        console.log(list, "list")
+        this.selectionList = list
+      },
+      selectionClear() {
+        this.selectionList = []
+        this.$refs.crud.toggleSelection()
+      },
+      currentChange(currentPage) {
+        this.page.currentPage = currentPage
+      },
+      sizeChange(pageSize) {
+        this.page.pageSize = pageSize
+      },
+      refreshChange() {
+        this.onLoad(this.page, this.query)
+      },
+      onLoad(page, params = {}) {
+        this.loading = true
+        params.districtIds = this.articleRange
+        getUserlnfoByDistrictlds(page.currentPage, page.pageSize, Object.assign(params, this.query), this.treeDeptId)
+          .then(res => {
+            const data = res.data.data
+            this.page.total = data.total
+            this.data = data.records
+            this.loading = false
+            // this.selectionClear()
+          })
+      },
+    }
+  }
+</script>
+
+<style lang="scss">
+  .dept-user-table-dialog {
+    margin: 0 !important;
+
+    .el-dialog {
+      display: flex;
+      flex-direction: column;
+      margin: auto !important;
+      position: absolute;
+      top: 0 !important;
+      left: 0 !important;
+      right: 0 !important;
+      bottom: 0 !important;
+      //width: 1000px !important;
+      height: 800px !important;
+
+      .el-dialog__body {
+        height: 0 !important;
+        flex: 1;
+        display: flex;
+
+        .left {
+          width: 0;
+          flex: 2;
+        }
+
+        .right {
+          margin-left: 10px;
+          flex: 9;
+        }
+      }
+    }
+  }
+</style>
\ No newline at end of file

--
Gitblit v1.9.3