From 809f8b1279bf84f28bccabc4f95a8eba6c22a24d Mon Sep 17 00:00:00 2001
From: Fixiaobai <fixiaobai@163.com>
Date: 星期二, 29 八月 2023 10:30:04 +0800
Subject: [PATCH] 放行委托新增

---
 src/views/laboratory/role/index.vue |  900 +++++++++++++++++++++++++++++++++++++++++++++++++----------
 1 files changed, 739 insertions(+), 161 deletions(-)

diff --git a/src/views/laboratory/role/index.vue b/src/views/laboratory/role/index.vue
index 1c01efc..26da055 100644
--- a/src/views/laboratory/role/index.vue
+++ b/src/views/laboratory/role/index.vue
@@ -1,157 +1,626 @@
 <template>
   <div>
-      <div class="content-main">
-          <div class="top-bar">
-              <el-form ref="form" :inline="true" :model="searchData">
-              <el-form-item label="瑙掕壊鍚嶇О锛�" class="sermargin">
-                <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" @click="search">鏌ヨ</el-button>
-                <el-button type="primary" plain @click="reset">閲嶇疆</el-button>
-              </el-form-item>
-              </el-form>
-              <el-form>
-                <el-form-item class="rightBtn">
-                  <el-button type="primary" @click="addRole" icon="el-icon-plus">鏂板鏉冮檺</el-button>
-                </el-form-item>
-              </el-form>
-              </el-form>
-          </div>
-          <div class="library-table">
-            <div class="table-box">
-              <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
-                  label="鎿嶄綔"
-                  min-width="12%"
-                >
-                  <template slot-scope="scope">
-                    <el-button type="text" size="small" >缂栬緫</el-button>
-                    <el-button type="text" size="small" >鍒犻櫎</el-button>
-                  </template>
-                </el-table-column>
-              </el-table>
-              <!-- 鍒嗛〉鍣� -->
-              <div class="pagination">
-                <el-pagination
-                  @size-change="handleSizeChange"
-                  @current-change="handleCurrentChange"
-                  :current-page="currentPage"
-                  :page-sizes="[5, 10, 20]"
-                  :page-size="pageSize"
-                  layout="total, sizes, prev, pager, next, jumper"
-                  :total="total">
-                </el-pagination>
-              </div>
-            </div>
-          </div>
-      </div>
-      <el-dialog title="淇敼瀵嗙爜" :visible.sync="dialogTableVisible" width="30%">
-        <el-form :model="updateData" ref="updateData" label-position="right" label-width="100px">
-          <el-form-item label="鍘熷瘑鐮侊細">
-            <el-input style="width: 300px" v-model="updateData.oldPassWord" placeholder="璇疯緭鍏ュ師瀵嗙爜" >
+    <div class="content-main">
+      <div class="top-bar">
+        <el-form style="display: flex;align-items: center;" ref="form" :inline="true" :model="searchData">
+          <el-form-item label="瑙掕壊鍚嶇О锛�" class="sermargin">
+            <el-input v-model="searchData.roleName" class="input-form" placeholder="璇疯緭鍏ヨ鑹插悕绉�" style="width:250px">
             </el-input>
           </el-form-item>
-          <el-form-item label="鏂板瘑鐮侊細">
-            <el-input style="width: 300px" v-model="updateData.newPassWord" placeholder="璇疯緭鍏ユ柊瀵嗙爜">
-            </el-input>
-          </el-form-item>
-          <el-form-item label="纭瀵嗙爜锛�">
-            <el-input style="width: 300px" v-model="updateData.confirmPassWord" placeholder="鍐嶆杈撳叆瀵嗙爜">
-            </el-input>
+          <el-form-item class="rightBtn">
+            <el-col>
+              <el-button type="primary" @click="searchRole">鏌ヨ</el-button>
+              <el-button type="primary" plain>閲嶇疆</el-button>
+            </el-col>
           </el-form-item>
         </el-form>
-        <span slot="footer" class="dialog-footer">
-          <el-button @click="dialogTableVisible = false">鍙� 娑�</el-button>
-          <el-button type="primary" @click="changePassword">纭� 瀹�</el-button>
-        </span>
-      </el-dialog>
+        <el-form>
+          <el-form-item class="rightBtn">
+            <el-button type="primary" @click="addClickRole" icon="el-icon-plus">鏂板瑙掕壊</el-button>
+          </el-form-item>
+        </el-form>
+      </div>
+      <div class="library-table">
+        <div class="table-box">
+          <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="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" @click="selectRoleInfo(scope)" size="small">鏌ョ湅</el-button>
+                <el-button type="text" @click="upRole(scope)" size="small">缂栬緫</el-button>
+                <el-button type="text" @click="removeRole(scope)" size="small">鍒犻櫎</el-button>
+              </template>
+            </el-table-column>
+          </el-table>
+          <!-- 鍒嗛〉鍣� -->
+          <div class="pagination">
+            <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange"
+              :current-page="currentPage" :page-sizes="[5, 10, 20]" :page-size="pageSize"
+              layout="total, sizes, prev, pager, next, jumper" :total="total">
+            </el-pagination>
+          </div>
+        </div>
+      </div>
+    </div>
+    <el-dialog title="鏂板瑙掕壊" :visible.sync="dialogTableVisible" width="50%">
+      <el-form :model="roleAdd" ref="roleAdd" label-position="right" label-width="100px">
+        <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" 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="clearAll">鍙� 娑�</el-button>
+        <el-button type="primary" @click="addRole">纭� 瀹�</el-button>
+      </span>
+    </el-dialog>
+
+    <el-dialog top="5vh" title="缂栬緫瑙掕壊" :visible.sync="dialogTableVisibleUpdate" width="50%">
+      <el-form :model="updateRole" ref="updateRole" label-position="right" label-width="100px">
+        <el-col :span="24" style="display: flex;justify-content: space-between;">
+          <el-form-item :rules="nameaRules" label="瑙掕壊鍚�:">
+            <el-input @blur="assertUpName" style="width: 300px" v-model="updateRole.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="500" :data="menuUpdateInfo" style="width: 100%;margin-bottom: 20px;" row-key="id"
+          :default-expand-all="true" :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" 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="clearUPAll">鍙� 娑�</el-button>
+        <el-button type="primary" @click="cilckUP">纭� 瀹�</el-button>
+      </span>
+    </el-dialog>
+
+    <el-dialog top="5vh" title="瑙掕壊瀵熺湅" :visible.sync="dialogTableSelectVisible" width="50%">
+      <el-form :model="selectMenuInfo" ref="selectMenuInfo" label-position="right" label-width="100px">
+        <el-col :span="24" style="display: flex;justify-content: space-between;">
+          <el-form-item label="瑙掕壊鍚�:">
+            <el-input style="width: 300px" v-model="selectMenuInfo.roleName" readonly>
+            </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="500" :data="selectMenuInfo.menuData" style="width: 100%;margin-bottom: 20px;" row-key="menuId"
+          :default-expand-all="true" :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" 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="menuName" label="鑿滃崟鍚�" sortable width="180">
+            <template slot-scope="scope">
+              <el-col v-if="scope.row.parentId == 0">
+                <span style="color: #409eff;">{{ scope.row.menuName }}</span>
+              </el-col>
+              <el-col v-else>
+                <span style="color: #40b815;">{{ scope.row.menuName }}</span>
+              </el-col>
+            </template>
+          </el-table-column>
+          <el-table-column prop="menuId" label="鎿嶄綔鏉冮檺">
+            <template slot-scope="scope">
+              <el-col v-if="scope.row.parentId == 0 && scope.row.children.length > 0">
+                <!-- <el-checkbox v-model="scope.row.select">鏌ヨ</el-checkbox> -->
+              </el-col>
+              <el-col id="selectRoleCheck" class="selectRoleCheck" v-else>
+                <el-checkbox size="medium" disabled v-model="scope.row.selected">鏌ヨ</el-checkbox>
+                <el-checkbox size="medium" disabled v-model="scope.row.added">娣诲姞</el-checkbox>
+                <el-checkbox size="medium" disabled v-model="scope.row.updated">淇敼</el-checkbox>
+                <el-checkbox size="medium" disabled v-model="scope.row.deleted">鍒犻櫎</el-checkbox>
+              </el-col>
+            </template>
+          </el-table-column>
+        </el-table>
+      </el-col>
+    </el-dialog>
   </div>
 </template>
 
 <script>
-import { getPlanPageList, getStandingPageList } from '@/api/laboratory/measure'
+import { getMenusTree, addRoleInfo, assertRepeat, getAllRoleAndMenuInfo, deleteRole, updateRoleMenu } from '@/api/laboratory/role'
+import { default as menuPower } from './menuPower.vue'
 export default {
+  components: {
+    menuPower: () => import('./menuPower.vue')
+  },
   data() {
     return {
-      searchData:{
-        roleName: '',
-        permission: ''
+      props: { multiple: true },
+      dialogTableVisibleUpdate: false,
+      updateRole: {
+        roleId: null,
+        roleName: null,
+        lastName: null,
+        menuData: null,
+        lastMenuSelect: null
       },
-      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'
-      }],
-      updateData:{
+      selectRole: [],
+      roleAdd: {
+        roleName: null,
+        menuData: null
+      },
+      nameaRules: [{ required: true, message: '璇疯緭鍏ヨ鑹插悕' }],
+      menuTableTree: null,
+      searchData: {
+        roleName: '',
+      },
+      assertRepeatName: true,
+      menuInfo: [],
+      menuUpdateInfo: [],
+      selectMenuInfo: {
+        roleName: null,
+        menuData: null
+      },
+      roleTable: [],
+      updateData: {
         oldPassWord: '',
         newPassWord: '',
         confirmPassWord: ''
       },
       dialogTableVisible: false,
+      dialogTableSelectVisible: false,
+      addOrUp: false,
       currentPage: 1,
       pageSize: 5,
       total: 20
     }
   },
-  created(){
-    
+  created() {
+
+  },
+  mounted() {
+    this.start()
   },
   methods: {
-    addRole(){
+    selectRoleInfo(scope) {
+      this.selectMenuInfo.roleName = scope.row.roleName
+      this.selectMenuInfo.menuData = scope.row.roleMenuList
+      console.log(this.selectMenuInfo.menuData);
+      this.dialogTableSelectVisible = true
+    },
+    searchRole() {
+      this.start()
+    },
+    clearUPAll() {
+      this.updateRole = {
+        roleId: null,
+        roleName: null,
+        lastName: null,
+        menuData: null,
+        lastMenuSelect: null
+      }
+      this.menuUpdateInfo = []
+      this.dialogTableVisibleUpdate = false
+    },
+    async cilckUP() {
+      if (this.updateRole.roleName == null || this.updateRole.roleName == '') {
+        this.$message({
+          message: '璇疯緭鍏ヨ鑹插悕',
+          type: 'warning'
+        });
+        return
+      }
+      if (!this.assertRepeatName) {
+        this.$message({
+          message: '瑙掕壊鍚嶉噸澶嶏紝璇烽噸鏂拌緭鍏�',
+          type: 'warning'
+        });
+        return
+      }
+      this.menuUpdateInfo.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.menuUpdateInfo);
+      this.updateRole.menuData = JSON.parse(JSON.stringify(this.menuUpdateInfo));
+      this.updateRole.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.updateRole.menuData = this.updateRole.menuData.filter(item => {
+        return item.selected == true
+      })
+      this.assertDeleteOrUp()
+      console.log(this.updateRole);
+      let up = await updateRoleMenu(this.updateRole)
+      if (up.data) {
+        this.$message({
+          type: 'success',
+          message: '缂栬緫鎴愬姛!'
+        });
+        this.start()
+        this.clearUPAll()
+      } else {
+        this.$message.error('缂栬緫澶辫触锛佽閲嶆柊鎿嶄綔');
+      }
+
+    },
+    async upRole(scope) {
+      this.updateRole.roleId = scope.row.roleId
+      this.updateRole.roleName = scope.row.roleName
+      this.updateRole.lastName = scope.row.roleName
+      let menuSelect = scope.row.roleMenuList
+      this.updateRole.lastMenuSelect = scope.row.roleMenuList
+      let res = await getMenusTree();
+      this.menuUpdateInfo = res.data
+      this.menuUpdateInfo.forEach(item => {
+        this.$set(item, 'added', false);
+        this.$set(item, 'updated', false);
+        this.$set(item, 'deleted', false);
+        this.$set(item, 'selected', false);
+        if (item.children.length == 0) {
+          delete item['children']
+        } else {
+          item.children.forEach(c => {
+            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']
+            }
+          })
+        }
+      })
+      menuSelect.forEach(ms => {
+        this.menuUpdateInfo.forEach(item => {
+          if (ms.menuName === item.name) {
+            item.selected = ms.selected
+            item.added = ms.added
+            item.deleted = ms.deleted
+            item.updated = ms.updated
+            ms.children.forEach(msc => {
+              if (item.children != undefined) {
+                item.children.forEach(itemc => {
+                  if (itemc.name === msc.menuName) {
+                    itemc.selected = msc.selected
+                    itemc.added = msc.added
+                    itemc.deleted = msc.deleted
+                    itemc.updated = msc.updated
+                  }
+                })
+              }
+            })
+          }
+        })
+      })
+      this.dialogTableVisibleUpdate = true
+    },
+    removeRole(scope) {
+      this.$confirm('姝ゆ搷浣滃皢鍒犻櫎璇ヨ鑹�, 鏄惁缁х画?', '鎻愮ず', {
+        confirmButtonText: '纭畾',
+        cancelButtonText: '鍙栨秷',
+        type: 'warning'
+      }).then(async () => {
+        this.roleTable = this.roleTable.filter(item => {
+          return item.roleId != scope.row.roleId
+        });
+        this.$message({
+          type: 'success',
+          message: '鍒犻櫎鎴愬姛!'
+        });
+        await deleteRole({ id: scope.row.roleId })
+      }).catch(() => {
+        this.$message({
+          type: 'info',
+          message: '宸插彇娑堝垹闄�'
+        });
+      });
+    },
+    async start() {
+      let res = await getAllRoleAndMenuInfo({ currentPage: this.currentPage, pageSize: this.pageSize, name: this.searchData.roleName })
+      res.data.list.forEach(item => {
+        item.roleId = String(item.roleId)
+      })
+      this.roleTable = res.data.list
+      this.total = res.data.total
+    },
+    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) {
+      if (scope.row.added) {
+        scope.row.selected = true
+      }
+      this.updateFatherState(scope)
+    },
+    chekUpdate(scope) {
+      if (scope.row.updated) {
+        scope.row.selected = true
+      }
+      this.updateFatherState(scope)
+    },
+    chekDelet(scope) {
+      if (scope.row.deleted) {
+        scope.row.selected = true
+      }
+      this.updateFatherState(scope)
+    },
+    chekSelect(scope) {
+      this.updateFatherState(scope)
+    },
+    updateFatherState(scope) {
+      if (this.menuUpdateInfo != []) {
+        this.menuUpdateInfo.forEach(item => {
+          if (item.id == scope.row.parentId) {
+            if (item.children != undefined) {
+              let childrenFalse = item.children.length * 4;
+              let countFalse = 0;
+              item.children.forEach(c => {
+                if (c.added == false) {
+                  countFalse++;
+                }
+                if (c.deleted == false) {
+                  countFalse++;
+                }
+                if (c.updated == false) {
+                  countFalse++;
+                }
+                if (c.selected == false) {
+                  countFalse++;
+                }
+              })
+              if (childrenFalse === countFalse) {
+                item.selected = false
+              }
+            }
+          }
+        })
+      }
+      if (this.menuInfo != []) {
+        this.menuInfo.forEach(item => {
+          if (item.id == scope.row.parentId) {
+            if (item.children != undefined) {
+              let childrenFalse = item.children.length * 4;
+              let countFalse = 0;
+              item.children.forEach(c => {
+                if (c.added == false) {
+                  countFalse++;
+                }
+                if (c.deleted == false) {
+                  countFalse++;
+                }
+                if (c.updated == false) {
+                  countFalse++;
+                }
+                if (c.selected == false) {
+                  countFalse++;
+                }
+              })
+              if (childrenFalse === countFalse) {
+                item.selected = false
+              }
+            }
+          }
+        })
+      }
+    },
+    async addClickRole() {
+      let res = await getMenusTree();
+      this.menuInfo = res.data
+      this.menuInfo.forEach(item => {
+        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 => {
+            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']
+            }
+          })
+        }
+      })
       this.dialogTableVisible = true
-      // console.log(this.dialogTableVisible)
+    },
+    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);
+      this.start()
+      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(){},
@@ -164,50 +633,159 @@
     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
+    },
+    assertDeleteOrUp() {
+      console.log("---------");
+      console.log(this.updateRole.menuData);
+      this.updateRole.lastMenuSelect
+      this.updateRole.menuData
+      let newTree = []
+      let oldTree = []
+      this.updateRole.menuData.forEach(item => {
+        const obj = {
+          menuId: item.id,
+          menuName: item.name,
+          added: item.added,
+          parentId: item.parentId,
+          deleted: item.deleted,
+          updated: item.updated,
+          selected: item.selected
+        }
+        newTree.push(obj)
+        if (item.children != undefined && obj.selected != false) {
+          item.children.forEach(c => {
+            const objc = {
+              menuId: c.id,
+              menuName: c.name,
+              parentId: c.parentId,
+              added: c.added,
+              deleted: c.deleted,
+              updated: c.updated,
+              selected: c.selected
+            }
+            newTree.push(objc)
+          })
+        }
+      })
+      console.log(newTree);
+      // this.updateRole.lastMenuSelect.forEach(item => {
+      //   const obj = {
+      //     menuId: item.menuId,
+      //     menuName: item.menuName,
+      //     added: item.added,
+      //     deleted: item.deleted,
+      //     updated: item.updated,
+      //     selected: item.selected
+      //   }
+      //   if (obj.selected) {
+      //     oldTree.push(obj)
+      //   }
+      //   if (item.children != [] && obj.selected != false) {
+      //     item.children.forEach(c => {
+      //       const objc = {
+      //         menuId: c.menuId,
+      //         menuName: c.menuName,
+      //         added: c.added,
+      //         deleted: c.deleted,
+      //         updated: c.updated,
+      //         selected: c.selected
+      //       }
+      //       oldTree.push(objc)
+      //     })
+      //   }
+      // })
+      console.log(oldTree);
+      // this.updateRole.lastMenuSelect = oldTree
+      this.updateRole.menuData = newTree
+    },
+    async assertUpName() {
+      if (this.updateRole.roleName == null || this.updateRole.roleName == '') {
+        this.$message({
+          message: '璇疯緭鍏ヨ鑹插悕绉帮紒',
+          type: 'warning'
+        });
+        return
+      }
+      if (this.updateRole.roleName === this.updateRole.lastName) {
+        return
+      }
+      let res = await assertRepeat({ roleName: this.updateRole.roleName })
+      if (!res.data) {
+        this.assertRepeatName = false
+        this.$message({
+          message: '瑙掕壊鍚嶉噸澶嶏紝璇烽噸鏂拌緭鍏ワ紒',
+          type: 'warning'
+        });
+      } else {
+        this.assertRepeatName = true
+      }
     }
   }
 }
 </script>
 
 <style scoped>
+.top-bar {
+  margin: -25px -15px;
+  background: #fff;
+  display: flex;
+  justify-content: space-between;
+  padding: 5px 24px 0px 24px;
 
-.top-bar{
-    margin: -25px -15px;
+  .sermargin {
+    margin-right: 60px;
+  }
+}
+
+.rightBtn {
+  margin-right: 50px
+}
+
+.library-table {
+  background-color: #fff;
+  flex: 1;
+  margin: 0px -15px;
+  margin-top: 40px;
+  display: flex;
+  flex-direction: column;
+
+  .table-box {
+    padding: 10px 20px;
+    margin-top: 0px;
+    flex: 1;
     background: #fff;
+    /* padding: 20px 20px 10px 20px; */
     display: flex;
-    justify-content: space-between;
-    padding: 5px 24px 0px 24px;
-    .sermargin{
-      margin-right: 60px;
+    flex-direction: column;
+
+    .el-table {
+      flex: 1;
     }
   }
-.rightBtn{
-    margin-right: 50px
-}
-.library-table{
-      background-color: #fff;
-      flex: 1;
-      margin: 0px -15px;
-      margin-top: 40px;
-      display: flex;
-      flex-direction: column;
-      .table-box{
-          padding: 10px 20px;
-          margin-top: 0px;
-          flex: 1;
-          background: #fff;
-          /* padding: 20px 20px 10px 20px; */
-          display: flex;
-          flex-direction: column;
-          .el-table {
-            flex: 1;
-          }
-      }
-      .pagination{
-        display:flex;
-        justify-content:end;
-        margin-top: 20px
-      }
-    }
 
+  .pagination {
+    display: flex;
+    justify-content: end;
+    margin-top: 20px
+  }
+
+}
 </style>
+
+<style>
+#selectRolecheck .el-checkbox__input.is-disabled.is-checked .el-checkbox__inner::after {
+  border-color: #fff !important;
+}
+
+#selectRoleCheck .el-checkbox__input.is-disabled.is-checked .el-checkbox__inner {
+  background-color: #409EFF;
+  border-color: #409EFF;
+}
+</style>
\ No newline at end of file

--
Gitblit v1.9.3