From 3b3513a1b653af76231ed053cb0d22a362d36876 Mon Sep 17 00:00:00 2001
From: yuyu <1981343953@qq.com>
Date: 星期五, 25 八月 2023 17:33:51 +0800
Subject: [PATCH] Merge branch 'master' of http://192.168.110.209:9001/r/lims-before

---
 src/views/laboratory/role/index.vue |  226 +++++++++++++++++++++++++++++++++++++++++++++-----------
 1 files changed, 180 insertions(+), 46 deletions(-)

diff --git a/src/views/laboratory/role/index.vue b/src/views/laboratory/role/index.vue
index 494b9da..a56cda7 100644
--- a/src/views/laboratory/role/index.vue
+++ b/src/views/laboratory/role/index.vue
@@ -7,10 +7,6 @@
             <el-input v-model="searchData.roleName" class="input-form" placeholder="璇疯緭鍏ヨ鑹插悕绉�" style="width:250px">
             </el-input>
           </el-form-item>
-          <el-form-item label="鏉冮檺锛�" class="sermargin">
-            <el-input v-model="searchData.permission" class="input-form" placeholder="璇疯緭鍏ユ潈闄�" style="width:250px">
-            </el-input>
-          </el-form-item>
           <el-form-item class="rightBtn">
             <el-button type="primary">鏌ヨ</el-button>
             <el-button type="primary" plain>閲嶇疆</el-button>
@@ -28,11 +24,10 @@
           <el-table :max-height="800" :cell-style="{ textAlign: 'center' }"
             :header-cell-style="{ border: '0px', background: '#f5f7fa', color: '#606266', boxShadow: 'inset 0 1px 0 #ebeef5', textAlign: 'center' }"
             :data="roleTable" style="width: 100%">
-            <el-table-column type="selection" min-width="8%" />
-            <el-table-column prop="rolename" label="瑙掕壊鍚嶇О" min-width="20%" />
-            <el-table-column prop="permission" label="鏉冮檺" min-width="20%" />
-            <el-table-column prop="create_time" label="鍒涘缓鏃堕棿" min-width="20%" />
-            <el-table-column prop="update_time" label="鏇存柊鏃堕棿" min-width="20%" />
+            <el-table-column type="index" min-width="8%" />
+            <el-table-column prop="roleName" label="瑙掕壊鍚嶇О" min-width="20%" />
+            <el-table-column prop="createTime" label="鍒涘缓鏃堕棿" min-width="20%" />
+            <el-table-column prop="updateTime" label="鏇存柊鏃堕棿" min-width="20%" />
             <el-table-column label="鎿嶄綔" min-width="12%">
               <template slot-scope="scope">
                 <el-button type="text" size="small">缂栬緫</el-button>
@@ -50,23 +45,61 @@
         </div>
       </div>
     </div>
-    <el-dialog title="鏂板瑙掕壊" :visible.sync="dialogTableVisible" width="60%">
+    <el-dialog title="鏂板瑙掕壊" :visible.sync="dialogTableVisible" width="50%">
       <el-form :model="roleAdd" ref="roleAdd" label-position="right" label-width="100px">
-        <el-form-item label="瑙掕壊鍚�:">
-          <el-input style="width: 300px" v-model="roleAdd.roleName" placeholder="璇疯緭鍏ヨ鑹插悕">
-          </el-input>
-        </el-form-item>
-        <el-form-item label="鍔熻兘閫夋嫨:">
-          <el-cascader size="medium " v-model="roleAdd.menuData" :options="menuInfo">
-            <template slot-scope="{ node, data }">
-              <span>{{ data.label }}</span>
-              <span v-if="!node.isLeaf"> ({{  }}) </span>
-            </template>
-          </el-cascader>
-        </el-form-item>
+        <el-col :span="24" style="display: flex;justify-content: space-between;">
+          <el-form-item :rules="nameaRules" label="瑙掕壊鍚�:">
+            <el-input @blur="assertName" style="width: 300px" v-model="roleAdd.roleName" placeholder="璇疯緭鍏ヨ鑹插悕">
+            </el-input>
+          </el-form-item>
+          <!-- <el-form-item label="鑿滃崟閫夋嫨:">
+            <el-cascader style="width: 300px" collapse-tags size="medium " filterable :props="props"
+              v-model="roleAdd.menuData" :options="menuInfo">
+              <template slot-scope="{ data }">
+                <span>{{ data.label }}</span>
+              </template>
+            </el-cascader>
+          </el-form-item> -->
+        </el-col>
       </el-form>
+      <el-col :span="24">
+        <el-table height="300" :data="menuInfo" style="width: 100%;margin-bottom: 20px;" row-key="id"
+          :default-expand-all="false" :tree-props="{ children: 'children', hasChildren: 'hasChildren' }">
+          <el-table-column highlight-current-row prop="parentId" label="鑿滃崟绫诲瀷" sortable width="180">
+            <template slot-scope="scope">
+              <span v-if="scope.row.parentId == 0 && scope.row.children != undefined" style="color: #409eff;">涓昏彍鍗�</span>
+              <span v-if="scope.row.parentId == 0 && scope.row.children === undefined" style="color: #409eff;">
+                涓昏彍鍗�
+              </span>
+            </template>
+          </el-table-column>
+          <el-table-column prop="name" label="鑿滃崟鍚�" sortable width="180">
+            <template slot-scope="scope">
+              <el-col v-if="scope.row.parentId == 0">
+                <span style="color: #409eff;">{{ scope.row.name }}</span>
+              </el-col>
+              <el-col v-else>
+                <span style="color: #40b815;">{{ scope.row.name }}</span>
+              </el-col>
+            </template>
+          </el-table-column>
+          <el-table-column prop="id" label="鎿嶄綔鏉冮檺">
+            <template slot-scope="scope">
+              <el-col v-if="scope.row.parentId == 0 && scope.row.children != undefined">
+                <!-- <el-checkbox v-model="scope.row.select">鏌ヨ</el-checkbox> -->
+              </el-col>
+              <el-col v-else>
+                <el-checkbox size="medium" v-model="scope.row.selected" @change="chekSelect(scope)">鏌ヨ</el-checkbox>
+                <el-checkbox size="medium" v-model="scope.row.added" @change="chekAdd(scope)">娣诲姞</el-checkbox>
+                <el-checkbox size="medium" v-model="scope.row.updated" @change="chekUpdate(scope)">淇敼</el-checkbox>
+                <el-checkbox size="medium" v-model="scope.row.deleted" @change="chekDelet(scope)">鍒犻櫎</el-checkbox>
+              </el-col>
+            </template>
+          </el-table-column>
+        </el-table>
+      </el-col>
       <span slot="footer" class="dialog-footer">
-        <el-button @click="dialogTableVisible = false">鍙� 娑�</el-button>
+        <el-button @click="clearAll">鍙� 娑�</el-button>
         <el-button type="primary" @click="addRole">纭� 瀹�</el-button>
       </span>
     </el-dialog>
@@ -74,8 +107,12 @@
 </template>
 
 <script>
-import { getMenusTree } from '@/api/laboratory/role'
+import { getMenusTree, addRoleInfo, assertRepeat, getAllRoleAndMenuInfo } from '@/api/laboratory/role'
+import { default as menuPower } from './menuPower.vue'
 export default {
+  components: {
+    menuPower: () => import('./menuPower.vue')
+  },
   data() {
     return {
       props: { multiple: true },
@@ -83,22 +120,15 @@
         roleName: null,
         menuData: null
       },
+      nameaRules: [{ required: true, message: '璇疯緭鍏ヨ鑹插悕' }],
+      menuTableTree: null,
       searchData: {
         roleName: '',
         permission: ''
       },
+      assertRepeatName: true,
       menuInfo: [],
-      roleTable: [{
-        rolename: '閮ㄩ暱',
-        permission: 'ROOT',
-        create_time: '2023-07-04 12:12:12',
-        update_time: '2023-07-04 12:12:12'
-      }, {
-        rolename: '缁勯暱',
-        permission: '--',
-        create_time: '2023-07-04 12:12:12',
-        update_time: '2023-07-04 12:12:12'
-      }],
+      roleTable: [],
       updateData: {
         oldPassWord: '',
         newPassWord: '',
@@ -113,23 +143,62 @@
   created() {
 
   },
+  mounted() {
+    this.start()
+  },
   methods: {
+    chekSelect(scope) {
+
+    },
+    async start() {
+      let res = await getAllRoleAndMenuInfo()
+      this.roleTable = res.data
+      console.log(res);
+    },
+    async assertName() {
+      if (this.roleAdd.roleName == null || this.roleAdd.roleName == '') {
+        this.$message({
+          message: '璇疯緭鍏ヨ鑹插悕',
+          type: 'warning'
+        });
+        return
+      }
+      let res = await assertRepeat({ roleName: this.roleAdd.roleName })
+      if (!res.data) {
+        this.assertRepeatName = false
+        this.$message({
+          message: '瑙掕壊鍚嶉噸澶嶏紝璇烽噸鏂拌緭鍏ワ紒',
+          type: 'warning'
+        });
+      } else {
+        this.assertRepeatName = true
+      }
+    },
+    chekAdd(scope) {
+      scope.row.selected = true
+    },
+    chekUpdate(scope) {
+      scope.row.selected = true
+    },
+    chekDelet(scope) {
+      scope.row.selected = true
+    },
     async addClickRole() {
       let res = await getMenusTree();
       this.menuInfo = res.data
       this.menuInfo.forEach(item => {
-        item.select = false
-        item.add = false
-        item.update = false
-        item.delete = false
+        this.$set(item, 'selected', false);
+        this.$set(item, 'added', false);
+        this.$set(item, 'updated', false);
+        this.$set(item, 'deleted', false);
         if (item.children.length == 0) {
           delete item['children']
         } else {
           item.children.forEach(c => {
-            c.select = false
-            c.add = false
-            c.update = false
-            c.delete = false
+            this.$set(c, 'selected', false);
+            this.$set(c, 'added', false);
+            this.$set(c, 'updated', false);
+            this.$set(c, 'deleted', false);
             if (c.children.length == 0) {
               delete c['children']
             }
@@ -137,10 +206,68 @@
         }
       })
       this.dialogTableVisible = true
-      // console.log(this.dialogTableVisible)
     },
-    addRole() {
-      console.log(this.roleAdd);
+    async addRole() {
+      if (this.roleAdd.roleName == null || this.roleAdd.roleName == '') {
+        this.$message({
+          message: '璇疯緭鍏ヨ鑹插悕',
+          type: 'warning'
+        });
+        return
+      }
+      if (!this.assertRepeatName) {
+        this.$message({
+          message: '瑙掕壊鍚嶉噸澶嶏紝璇烽噸鏂拌緭鍏�',
+          type: 'warning'
+        });
+        return
+      }
+      this.menuInfo.forEach(item => {
+        if (item.children != undefined) {
+          item.children.forEach(c => {
+            if (c.added) {
+              item.selected = true
+            }
+            if (c.selected) {
+              item.selected = true
+            }
+            if (c.updated) {
+              item.selected = true
+            }
+            if (c.deleted) {
+              item.selected = true
+            }
+          })
+        }
+      })
+      console.log(this.menuInfo);
+      this.roleAdd.menuData = JSON.parse(JSON.stringify(this.menuInfo));
+      this.roleAdd.menuData.forEach(item => {
+        if (item.children != undefined) {
+          let child = item.children.filter(c => {
+            return c.added == true || c.selected == true || c.deleted == true || c.updated === true
+          })
+          item.children = child
+        }
+      })
+      this.roleAdd.menuData = this.roleAdd.menuData.filter(item => {
+        return item.selected == true
+      })
+      let res = await addRoleInfo(this.roleAdd);
+      if (res.data) {
+        this.$message({
+          message: '娣诲姞瑙掕壊鎴愬姛',
+          type: 'success'
+        });
+        this.dialogTableVisible = false
+      } else {
+        this.$message.error('娣诲姞澶辫触锛佽閲嶆柊鎿嶄綔');
+      }
+    },
+    assertDml(a, b) {
+      a = b ? true : false
+      console.log(a);
+      return a
     },
     // search(){},
     // reset(){},
@@ -153,6 +280,13 @@
     handleCurrentChange(val) {
       console.log(`褰撳墠鏄${val}椤礰)
       this.currentPage = val
+    },
+    clearAll() {
+      this.roleAdd.roleName = null
+      this.roleAdd.menuData = null
+      this.menuInfo = []
+      this.assertRepeatName = true
+      this.dialogTableVisible = false
     }
   }
 }

--
Gitblit v1.9.3