From 6bb3ae6dfcf2858b9d9ba632192803bf0830db36 Mon Sep 17 00:00:00 2001
From: xuhuajiao <13476289682@163.com>
Date: Thu, 3 Aug 2023 17:34:28 +0800
Subject: [PATCH] =?UTF-8?q?api=E7=94=A8=E6=88=B7=E7=AE=A1=E7=90=86?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
 src/views/system/user/index.vue | 389 ++++++++++++++++++++------------
 1 file changed, 240 insertions(+), 149 deletions(-)
diff --git a/src/views/system/user/index.vue b/src/views/system/user/index.vue
index 9bf0480..e250954 100644
--- a/src/views/system/user/index.vue
+++ b/src/views/system/user/index.vue
@@ -4,18 +4,17 @@
       
       
         
-          
+          
         
         
           
             
-              
+              
                 {{ data.fondsName }}
-                {{ data.deptsName }}
+                {{ data.deptsName }}
               
             
           
-
         
        
       
@@ -33,6 +32,12 @@
             
           
           
+            
+              
+                
+                删除
+              
+            
             密码重置
           
         
@@ -45,8 +50,8 @@
              -->
             
               
-                
-                  
+                
+                  
                 
                 
                   
@@ -57,9 +62,9 @@
                 
                   
                 
-                
+                
                   
-                  
+                  
                     
                   
                 
-                
+                
                   
                   
                   
                 
-                
-                  
-                    
+                
+                  
+                    
                   
                 
               
@@ -142,7 +147,7 @@
           
           
             
-            
+            
             
             
             
@@ -179,7 +184,7 @@ import crudUser, { resetpassword } from '@/api/system/user'
 import { isvalidPhone } from '@/utils/validate'
 import { getDepts, FetchSonDepts } from '@/api/system/dept'
 import { FetchFondsAll } from '@/api/system/fonds'
-import { getAll, getLevel } from '@/api/system/role'
+import { getAll } from '@/api/system/role'
 import { getAllJob } from '@/api/system/job'
 import CRUD, { presenter, header, form, crud } from '@crud/crud'
 import rrOperation from '@crud/RR.operation'
@@ -193,13 +198,20 @@ import '@riophae/vue-treeselect/dist/vue-treeselect.css'
 import { LOAD_CHILDREN_OPTIONS } from '@riophae/vue-treeselect'
 import Vue from 'vue'
 let userRoles = []
-let userJobs = []
-const defaultForm = { id: null, userName: null, nickName: null, gender: '男', email: null, enabled: null, fondsId: null, roles: [], jobs: [], deptsId: null, phone: null }
+let userPosts = []
+const defaultForm = { id: null, username: null, nickName: null, gender: '男', email: null, enabled: null, fonds: { id: null }, roles: [], posts: [], dept: { id: null }, phone: null }
 export default {
   name: 'User',
   components: { Treeselect, crudOperation, rrOperation, pagination, DateRangePicker },
   cruds() {
-    return CRUD({ title: '用户', url: 'api/users/initUserList', sort: 'update_time,asc', crudMethod: { ...crudUser }})
+    return CRUD({ title: '用户', url: 'api/users/initUserList', sort: '', crudMethod: { ...crudUser }, optShow: {
+      add: true,
+      edit: true,
+      del: false,
+      reset: true,
+      download: true,
+      group: false
+    }})
   },
   mixins: [presenter(), header(), form(defaultForm), crud()],
   // 数据字典
@@ -215,9 +227,15 @@ export default {
         callback()
       }
     }
-    var validateJob = (rule, value, callback) => {
-      console.log(value)
-      if (this.jobDatas.length > 0) {
+    const validateRole = (rule, value, callback) => {
+      if (this.roleDatas.length > 0) {
+        callback()
+      } else {
+        callback(new Error('请选择角色'))
+      }
+    }
+    const validatePost = (rule, value, callback) => {
+      if (this.postDatas.length > 0) {
         callback()
       } else {
         callback(new Error('请选择岗位'))
@@ -230,13 +248,13 @@ export default {
       blurryTime: null,
       btnLoading: false,
       resetVisible: false,
-      // delVisible: false,
-      // deleteData: {},
       height: document.documentElement.clientHeight - 180 + 'px;',
-      deptName: '', depts: [], deptDatas: [], jobs: [], level: 3, roles: [],
-      jobDatas: [], roleDatas: [], // 多选时使用
+      deptName: '', depts: [], deptDatas: [], postsOptions: [], level: 3, roles: [],
+      postDatas: [], roleDatas: [], // 多选时使用
       fondsDatas: [],
       fondsOptions: [],
+      leftFondsId: '',
+      leftDeptsId: '',
       filterText: '',
       defaultExpandedKeys: [],
       defaultProps: { children: 'children', label: 'fondsName' },
@@ -249,9 +267,9 @@ export default {
         { key: '1', display_name: '激活' },
         { key: '0', display_name: '锁定' }
       ],
-
+      deleteData: [],
       rules: {
-        userName: [
+        username: [
           { required: true, message: '请输入用户名', trigger: 'blur' },
           { min: 2, max: 20, message: '长度在 2 到 20 个字符', trigger: 'blur' }
         ],
@@ -266,17 +284,23 @@ export default {
         phone: [
           { required: true, trigger: 'blur', validator: validPhone }
         ],
-        'deptsId': [
+        'dept.id': [
           { required: true, trigger: 'blur', message: '请选择部门' }
         ],
+        'fonds.id': [
+          { required: true, trigger: 'blur', message: '请选择全宗' }
+        ],
         gender: [
           { required: true, trigger: 'change', message: '请选择性别' }
         ],
         enabled: [
           { required: true, trigger: 'change', message: '请选择状态' }
         ],
-        jobs: [
-          { trigger: 'blur', validator: validateJob }
+        roles: [
+          { trigger: 'blur', validator: validateRole }
+        ],
+        posts: [
+          { trigger: 'blur', validator: validatePost }
         ]
       }
     }
@@ -316,10 +340,104 @@ export default {
         this.crud.query.endTime = this.blurryTime[1]
       }
     },
+    // 新增与编辑前做的操作
+    [CRUD.HOOK.afterToCU](crud, form) {
+      this.getRoles()
+      this.getPosts()
+      console.log('postsvvvv', this.postsOptions)
+      console.log('form', form)
+      console.log(this.crud.status.edit)
+      // if (this.crud.status.edit) {
+      //   if (form.postIds.includes(',')) {
+      //     const arr = form.postIds.split(',')
+      //     console.log(arr)
+      //     arr.forEach(item => {
+      //       const json = {}
+      //       json.id = item
+      //       this.postDatas.push(json)
+      //       this.posts.push({
+
+      //       })
+      //       console.log(this.postDatas)
+      //     })
+      //   } else {
+      //     this.postDatas.push(form.postIds)
+      //   }
+      // }
+    },
+    // 新增前将多选的值设置为空
+    [CRUD.HOOK.beforeToAdd]() {
+      this.postDatas = []
+      this.roleDatas = []
+    },
+    // 初始化编辑时候的角色与岗位
+    [CRUD.HOOK.beforeToEdit](crud, form) {
+      console.log('beforeToEdit', crud)
+      console.log('beforeToEditform.roles', form.roles)
+      this.postDatas = []
+      this.roleDatas = []
+      userRoles = []
+      userPosts = []
+      const _this = this
+      form.roles.forEach(function(role, index) {
+        _this.roleDatas.push(role.id)
+        const rol = { id: role.id }
+        userRoles.push(rol)
+      })
+      if (form.postIds.includes(',')) {
+        const arr = form.postIds.split(',')
+        console.log(arr)
+        _this.postDatas = arr
+        arr.forEach(function(id, index) {
+          const data = { id: id }
+          userPosts.push(data)
+          form.posts.push(data)
+        })
+        console.log('userPosts', userPosts)
+      }
+    },
+    // 提交前做的操作
+    [CRUD.HOOK.afterValidateCU](crud) {
+      console.log(crud)
+      console.log(crud.form)
+      if (!crud.form.fonds.id) {
+        this.$message({
+          message: '全宗不能为空',
+          type: 'warning'
+        })
+        return false
+      } else if (!crud.form.dept.id) {
+        this.$message({
+          message: '部门不能为空',
+          type: 'warning'
+        })
+        return false
+      } else if (this.postDatas.length === 0) {
+        this.$message({
+          message: '岗位不能为空',
+          type: 'warning'
+        })
+        return false
+      } else if (this.roleDatas.length === 0) {
+        this.$message({
+          message: '角色不能为空',
+          type: 'warning'
+        })
+        return false
+      }
+      crud.form.id = crud.form.userId
+      crud.form.roles = userRoles
+      crud.form.posts = userPosts
+      delete crud.form.deptsId
+      delete crud.form.deptsName
+      delete crud.form.job
+      return false
+    },
     clickRowHandler(row) {
       this.$refs.table.clearSelection()
       this.$refs.table.toggleRowSelection(row)
     },
+    // 重置密码
     handlePwdReset() {
       this.resetVisible = true
     },
@@ -327,7 +445,6 @@ export default {
     pwdReset(data) {
       const params = data.map(item => { return item.userName })
       this.btnLoading = true
-      console.log(params)
       resetpassword(params).then(res => {
         if (res === 'SUCCESS') {
           this.$message({
@@ -355,11 +472,36 @@ export default {
         userRoles.push(role)
       })
     },
-    changeJob(value) {
-      userJobs = []
-      value.forEach(function(data, index) {
-        const job = { id: data }
-        userJobs.push(job)
+    changePost(val) {
+      // const allValues = []
+      // // 保留所有值
+      // for (const item of this.organOptions) {
+      //   allValues.push(item.id)
+      // }
+      // // 用来储存上一次的值,可以进行对比
+      // const oldVal = this.oldSearchClassify.length === 1 ? this.oldSearchClassify[0] : []
+      // // 若是全部选择
+      // if (val.includes('ALL_SELECT')) this.searchClassify = allValues
+      // // 取消全部选中 上次有 当前没有 表示取消全选
+      // if (oldVal.includes('ALL_SELECT') && !val.includes('ALL_SELECT')) this.searchClassify = []
+      // // 点击非全部选中 需要排除全部选中 以及 当前点击的选项
+      // // 新老数据都有全部选中
+      // if (oldVal.includes('ALL_SELECT') && val.includes('ALL_SELECT')) {
+      //   const index = val.indexOf('ALL_SELECT')
+      //   val.splice(index, 1) // 排除全选选项
+      //   this.searchClassify = val
+      // }
+      // // 全选未选 但是其他选项全部选上 则全选选上 上次和当前 都没有全选
+      // if (!oldVal.includes('ALL_SELECT') && !val.includes('ALL_SELECT')) {
+      //   if (val.length === allValues.length - 1) this.searchClassify = ['ALL_SELECT'].concat(val)
+      // }
+      // // 储存当前最后的结果 作为下次的老数据
+      // this.oldSearchClassify[0] = this.searchClassify
+
+      userPosts = []
+      val.forEach(function(data, index) {
+        const post = { id: data }
+        userPosts.push(post)
       })
     },
     deleteTag(value) {
@@ -369,6 +511,27 @@ export default {
         }
       })
     },
+    // 切换部门
+    handleNodeClick(data) {
+      console.log('nodeiD', data.id)
+      console.log('nodeName', data.deptsName)
+      const selectedKey = this.$refs.tree.getCurrentNode()
+      console.log('selectedKey', selectedKey)
+      const selectedParentVal = this.$refs.tree.getNode(selectedKey).parent.data.id
+      console.log('selectedParentVal', selectedParentVal)
+      if (data.pid === 0) {
+        this.query.deptsId = null
+        this.query.deptsName = null
+        this.leftFondsId = null
+        this.leftDeptsId = null
+      } else {
+        this.query.deptsId = data.id
+        this.query.deptsName = data.deptsName
+        this.leftFondsId = selectedParentVal
+        this.leftDeptsId = data.id
+      }
+      this.crud.toQuery()
+    },
     getFondsDatas() {
       const parent = {}
       parent.id = 0
@@ -380,24 +543,22 @@ export default {
         parent.children = res
         this.fondsDatas.push(parent)
         this.fondsOptions = res
-        // this.fondsOptions = JSON.parse(JSON.stringify(this.fondsDatas))
-        // this.fondsOptions[0].children.map(item => {
-        //   console.log(item)
-        //   delete item.children
-        // })
         this.$nextTick(() => {
-          Vue.set(this.defaultExpandedKeys, 0, this.fondsDatas[0].children[0].id)
-          this.$refs.tree.setCurrentKey(this.fondsDatas[0].children[0].id)
-          this.handleNodeClick(this.fondsDatas[0].children[0])
+          Vue.set(this.defaultExpandedKeys, 0, this.fondsDatas[0].children[0].children[0].id)
+          this.$refs.tree.setCurrentKey(this.fondsDatas[0].children[0].children[0].id)
+          this.handleNodeClick(this.fondsDatas[0].children[0].children[0])
         })
       })
     },
     filterNode(value, data) {
       if (!value) return true
-      return data.fondsName.indexOf(value) !== -1
-    },
-    changeFonds(val) {
-      console.log('val', val)
+      if (data.deptsName) {
+        if (data.deptsName.includes(value)) {
+          return true
+        } else {
+          return false
+        }
+      }
     },
     changeFondsValue(value) {
       this.depts = []
@@ -413,89 +574,6 @@ export default {
       }
       this.getDepts(params)
     },
-    // 新增与编辑前做的操作
-    [CRUD.HOOK.afterToCU](crud, form) {
-      console.log(form)
-      this.getRoles()
-      if (form.id == null) {
-        this.getDepts()
-      } else {
-        // this.getSupDepts(form.deptsId)
-      }
-      this.getRoleLevel()
-      this.getJobs()
-      form.enabled = form.enabled.toString()
-    },
-    // 新增前将多选的值设置为空
-    [CRUD.HOOK.beforeToAdd]() {
-      this.jobDatas = []
-      this.roleDatas = []
-    },
-    // 初始化编辑时候的角色与岗位
-    [CRUD.HOOK.beforeToEdit](crud, form) {
-      this.getJobs(this.form.deptsId)
-      this.jobDatas = []
-      this.roleDatas = []
-      userRoles = []
-      userJobs = []
-      const _this = this
-      form.roles.forEach(function(role, index) {
-        _this.roleDatas.push(role.id)
-        const rol = { id: role.id }
-        userRoles.push(rol)
-      })
-      form.jobs.forEach(function(job, index) {
-        _this.jobDatas.push(job.id)
-        const data = { id: job.id }
-        userJobs.push(data)
-      })
-    },
-    // 提交前做的操作
-    [CRUD.HOOK.afterValidateCU](crud) {
-      if (!crud.form.deptsId) {
-        this.$message({
-          message: '部门不能为空',
-          type: 'warning'
-        })
-        return false
-      } else if (this.jobDatas.length === 0) {
-        this.$message({
-          message: '岗位不能为空',
-          type: 'warning'
-        })
-        return false
-      } else if (this.roleDatas.length === 0) {
-        this.$message({
-          message: '角色不能为空',
-          type: 'warning'
-        })
-        return false
-      }
-      crud.form.roles = userRoles
-      crud.form.jobs = userJobs
-      return true
-    },
-    // 获取左侧部门数据
-    getDeptDatas(node, resolve) {
-      const sort = 'update_time,desc'
-      const params = { sort: sort }
-      if (typeof node !== 'object') {
-        if (node) {
-          params['name'] = node
-        }
-      } else if (node.level !== 0) {
-        params['pid'] = node.data.id
-      }
-      setTimeout(() => {
-        getDepts(params).then(res => {
-          if (resolve) {
-            resolve(res.content)
-          } else {
-            this.deptDatas = res.content
-          }
-        })
-      }, 100)
-    },
     getDepts(params) {
       getDepts(params).then(res => {
         this.depts = res.content.map(function(obj) {
@@ -532,18 +610,33 @@ export default {
         })
       }
     },
-    // 切换部门
-    handleNodeClick(data) {
-      if (data.pid === 0) {
-        this.query.deptId = null
-      } else {
-        this.query.deptId = data.id
-      }
-      this.crud.toQuery()
+    // 删除用户
+    toDelete(datas) {
+      this.deleteData = datas
+      this.$confirm('此操作将删除当前所选' + this.crud.title + '你是否还要继续?', '提示', {
+        confirmButtonText: '继续',
+        cancelButtonText: '取消',
+        type: 'warning',
+        dangerouslyUseHTMLString: true
+      }).then(() => {
+        this.crud.delAllLoading = true
+        const userIds = []
+        this.deleteData.forEach(val => {
+          userIds.push(val.userId)
+        })
+        crudUser.del(userIds).then(() => {
+          this.crud.notify('删除成功', CRUD.NOTIFICATION_TYPE.SUCCESS)
+          this.crud.delAllLoading = false
+          this.crud.refresh()
+        }).catch(err => {
+          this.crud.delAllLoading = false
+          console.log(err)
+        })
+      }).catch(() => {
+      })
     },
     // 改变状态
     changeEnabled(data, val) {
-      // '此操作将 "' + this.dict.label.user_status[val] + '" ' + data.username + ', 你是否继续?',
       this.$confirm('此操作将禁用 / 启用用户 “' + data.username + '”' + '你是否还要继续?', '提示', {
         confirmButtonText: '继续',
         cancelButtonText: '取消',
@@ -552,11 +645,13 @@ export default {
       }).then(() => {
         crudUser.edit(data).then(res => {
           this.crud.notify(this.dict.label.user_status[val] + '成功', CRUD.NOTIFICATION_TYPE.SUCCESS)
+          this.crud.refresh()
         }).catch(() => {
           data.enabled = !data.enabled
         })
       }).catch(() => {
-        data.enabled = !data.enabled
+        this.crud.notify('已取消修改', CRUD.NOTIFICATION_TYPE.INFO)
+        data.enabled = data.enabled ? 0 : 1
       })
     },
     // 获取弹窗内角色数据
@@ -566,15 +661,9 @@ export default {
       }).catch(() => { })
     },
     // 获取弹窗内岗位数据
-    getJobs() {
+    getPosts() {
       getAllJob().then(res => {
-        this.jobs = res.content
-      }).catch(() => { })
-    },
-    // 获取权限级别
-    getRoleLevel() {
-      getLevel().then(res => {
-        this.level = res.level
+        this.postsOptions = res.content
       }).catch(() => { })
     },
     checkboxT(row, rowIndex) {
@@ -608,10 +697,12 @@ export default {
 ::v-deep .el-tree{
   .el-tree-node__content{
     font-size: 14px;
+    color: #545B65;
   }
   .top-level{
     font-size: 16px;
     font-weight: 600;
+    color: #0C0E1E;
   }
 }