From 20baed5059a2f040996cae291d66bdbfc46eb9c2 Mon Sep 17 00:00:00 2001
From: Surpriseplus <845948745@qq.com>
Date: 星期五, 14 十月 2022 15:45:52 +0800
Subject: [PATCH] 菜单权限授权,角色资源授权页面添加,接口对接

---
 src/api/api.js                                              |   39 +
 src/assets/lang/zh.js                                       |   31 
 src/views/AuthorizationManagement/menuRoleAuthorization.vue |  447 +++++++++++++++++++++++
 public/config/config.js                                     |    4 
 src/views/AuthorizationManagement/roleResAuthorization.vue  |  540 ++++++++++++++++++++++++++++
 src/assets/lang/en.js                                       |    3 
 src/router/index.js                                         |   33 +
 7 files changed, 1,070 insertions(+), 27 deletions(-)

diff --git a/public/config/config.js b/public/config/config.js
index a2b2f29..6be7033 100644
--- a/public/config/config.js
+++ b/public/config/config.js
@@ -1,5 +1,5 @@
-// const BASE_URL = 'http://192.168.20.55:12316';
-const BASE_URL = 'http://192.168.20.39:12316';
+const BASE_URL = 'http://192.168.20.55:12316';
+//const BASE_URL = 'http://192.168.20.39:12316';
 var gisUrl = 'http://183.162.245.49:3301';
 var ifreamUrl = 'http://192.168.20.39:12306/';
 
diff --git a/src/api/api.js b/src/api/api.js
index a12ed13..bd75500 100644
--- a/src/api/api.js
+++ b/src/api/api.js
@@ -132,6 +132,12 @@
   //璇锋眰鍦板潃
   return request.get('/auth/selectByPageAndCount', { params: params });
 }
+//鏉冮檺绠$悊鍒楄〃鏍规嵁鑿滃崟
+export function select_AuthMenu_ByPageAndCount(params) {
+  //璇锋眰鍦板潃
+  return request.get('/auth/selectByPageForMenu', { params: params });
+}
+
 //鏉冮檺绠$悊娣诲姞
 export function insertAuth(params) {
   return request.post('/auth/insertAuth', params);
@@ -202,8 +208,6 @@
   return request.post('/Menu/updateMenus', params);
 }
 
-
-
 //璇锋眰鐩綍鏍戞暟鎹�
 export function queryDirTree() {
   return request.get('/dir/selectDirAll');
@@ -268,8 +272,6 @@
   return request.post('/user/updateUserPwd', params);
 }
 
-
-
 //鏍规嵁瑙掕壊鏌ヨ鐢ㄦ埛
 export function roleUserselectByPageForRole(params) {
   //璇锋眰鍦板潃
@@ -299,3 +301,32 @@
 export function update_args(params) {
   return request.post('/args/update', params);
 }
+
+//鑿滃崟鏉冮檺璇锋眰鍒楄〃
+export function select_menuAuth_ByPageAndCount(params) {
+  return request.get('/menuAuth/selectByPageAndCount', { params: params });
+}
+//鑿滃崟鏉冮檺娣诲姞澶氭潯鏁版嵁
+export function menuAuthinserts(params) {
+  return request.post('/menuAuth/inserts', params);
+}
+//鑿滃崟鏉冮檺鍒犻櫎澶氭潯
+export function menuAuthDeletes(params) {
+  return request.get('/menuAuth/deletes', { params: params });
+}
+//瑙掕壊璧勬簮鍒楄〃
+export function roleReselectByPageAndCount(params) {
+  return request.get('/roleRes/selectByPageAndCount', { params: params });
+}
+//瑙掕壊璧勬簮鏂板
+export function roleResInserts(params) {
+  return request.post('/roleRes/inserts', params);
+}
+//瑙掕壊璧勬簮鍒犻櫎
+export function roleResDeletes(params) {
+  return request.get('/roleRes/deletes', { params: params });
+}
+//璧勬簮绠$悊-鏍规嵁瑙掕壊鍒嗛〉鏌ヨ骞惰繑鍥炶褰曟暟
+export function resSelectCountForRole(params) {
+  return request.get('/res/selectCountForRole', { params: params });
+}
diff --git a/src/assets/lang/en.js b/src/assets/lang/en.js
index 3e546e4..416b164 100644
--- a/src/assets/lang/en.js
+++ b/src/assets/lang/en.js
@@ -105,6 +105,7 @@
     operatManage: 'Operat Manage',
     ResourceLog: 'Resource Log',
     UserRoleAuthorization: 'User Role Authorization',
+    MenuRoleAuthorization: 'Menu Permission Authorization',
     UserRoleAuthorizationObj: {
       RoleTable: 'Role Table',
       userTable: 'user Table',
@@ -112,6 +113,8 @@
       delete: 'delete',
       serialNumber: 'serial Number',
       name: 'name',
+      PermissionTable: 'Permission table',
+      server: 'Service Address',
     },
     ELM: {
       username: 'username',
diff --git a/src/assets/lang/zh.js b/src/assets/lang/zh.js
index a6b66db..2fec689 100644
--- a/src/assets/lang/zh.js
+++ b/src/assets/lang/zh.js
@@ -106,6 +106,7 @@
     operatManage: '杩愮淮绠$悊',
     ResourceLog: '璧勬簮鏃ュ織',
     UserRoleAuthorization: '鐢ㄦ埛瑙掕壊鎺堟潈',
+    MenuRoleAuthorization: '鑿滃崟鏉冮檺鎺堟潈',
     UserRoleAuthorizationObj: {
       RoleTable: '瑙掕壊琛�',
       userTable: '鐢ㄦ埛琛�',
@@ -113,6 +114,8 @@
       delete: '鍒犻櫎',
       serialNumber: '缂栧彿',
       name: '鍚嶇О',
+      PermissionTable: '鏉冮檺琛�',
+      server: '鏈嶅姟鍦板潃',
     },
     ELM: {
       username: '鐢ㄦ埛鍚嶇О',
@@ -399,21 +402,21 @@
       rejection: '鎷掓壒',
       userexport: 'Excel鐢ㄦ埛瀵煎嚭',
       userinput: 'Excel鐢ㄦ埛瀵煎叆',
-      userStatus: "鐢ㄦ埛鐘舵��",
-      uname: "鐢ㄦ埛鍚�",
-      pwd: "瀵嗙爜",
-      sex: "鎬у埆",
-      natives: "绫嶈疮",
+      userStatus: '鐢ㄦ埛鐘舵��',
+      uname: '鐢ㄦ埛鍚�',
+      pwd: '瀵嗙爜',
+      sex: '鎬у埆',
+      natives: '绫嶈疮',
       depName: '鍗曚綅鍚嶇О',
-      idcard: "璇佷欢鍙�",
-      job: "宸ヤ綔",
-      edu: "鏁欒偛",
-      addr: "鍦板潃",
-      email: "鐢靛瓙閭欢",
-      contact: "鑱旂郴鏂瑰紡",
-      status: "鐘舵��",
-      bak: "澶囨敞",
-      depid: "鎵�灞為儴闂�",
+      idcard: '璇佷欢鍙�',
+      job: '宸ヤ綔',
+      edu: '鏁欒偛',
+      addr: '鍦板潃',
+      email: '鐢靛瓙閭欢',
+      contact: '鑱旂郴鏂瑰紡',
+      status: '鐘舵��',
+      bak: '澶囨敞',
+      depid: '鎵�灞為儴闂�',
       chineseName: '涓枃鍚峓鐢ㄦ埛鍚峕',
       affiliatedUnit: '鎵�灞炲崟浣峓鍦ㄨ亴]',
       mobileNumber: '鎵嬫満鍙穂鎺ユ敹鐭俊]',
diff --git a/src/router/index.js b/src/router/index.js
index 8d351de..c52e652 100644
--- a/src/router/index.js
+++ b/src/router/index.js
@@ -37,14 +37,16 @@
 import groupManage from '../views/userManage/groupManage.vue'; // 鐢ㄦ埛绠$悊妯″潡
 import authorityManage from '@/views/userManage/authorityManage.vue'; //鐢ㄦ埛绠$悊-鏉冮檺绠$悊
 import resourceManage from '@/views/userManage/resourceManage.vue'; //鐢ㄦ埛绠$悊-璧勬簮绠$悊
-import userRoleAuthorization from '@/views/AuthorizationManagement/userRoleAuthorization.vue'; //绯荤粺绠$悊-
-const originalPush = VueRouter.prototype.push
+import userRoleAuthorization from '@/views/AuthorizationManagement/userRoleAuthorization.vue'; //绯荤粺绠$悊-鐢ㄦ埛瑙掕壊鎺堟潈
+
+import menuRoleAuthorization from '@/views/AuthorizationManagement/menuRoleAuthorization.vue'; //绯荤粺绠$悊-鑿滃崟鏉冮檺鎺堟潈
+import roleResAuthorization from '@/views/AuthorizationManagement/roleResAuthorization.vue'; //绯荤粺绠$悊-瑙掕壊璧勬簮鎺堟潈
+
+const originalPush = VueRouter.prototype.push;
 
 VueRouter.prototype.push = function push(location) {
-
-  return originalPush.call(this, location).catch(err => err)
-
-}
+  return originalPush.call(this, location).catch((err) => err);
+};
 
 // 缇ょ粍绠$悊
 Vue.use(VueRouter);
@@ -355,7 +357,24 @@
           requireAuth: true, // 鏍囪瘑璇ヨ矾鐢辨槸鍚﹂渶瑕佺櫥褰�
         },
       },
-
+      {
+        path: '/menuRoleAuthorization',
+        component: menuRoleAuthorization,
+        name: 'menuRoleAuthorization',
+        meta: {
+          title: '鑿滃崟鏉冮檺鎺堟潈',
+          requireAuth: true, // 鏍囪瘑璇ヨ矾鐢辨槸鍚﹂渶瑕佺櫥褰�
+        },
+      },
+      {
+        path: '/roleResAuthorization',
+        component: roleResAuthorization,
+        name: 'roleResAuthorization',
+        meta: {
+          title: '鑿滃崟鏉冮檺鎺堟潈',
+          requireAuth: true, // 鏍囪瘑璇ヨ矾鐢辨槸鍚﹂渶瑕佺櫥褰�
+        },
+      },
     ],
   },
 ];
diff --git a/src/views/AuthorizationManagement/menuRoleAuthorization.vue b/src/views/AuthorizationManagement/menuRoleAuthorization.vue
new file mode 100644
index 0000000..52f59a3
--- /dev/null
+++ b/src/views/AuthorizationManagement/menuRoleAuthorization.vue
@@ -0,0 +1,447 @@
+<template>
+  <div class="menuSettings_box">
+    <div class="menuSettings_tree">
+      <My-bread
+        :list="[
+          `${$t('operatManage.operatManage')}`,
+
+          `${$t('operatManage.MenuRoleAuthorization')}`,
+        ]"
+      ></My-bread>
+
+      <el-divider />
+      <div class="menuTreeBox">
+        <el-tree
+          :data="depList"
+          :props="defaultProps"
+          :show-checkbox="true"
+          :check-on-click-node="true"
+          :check-strictly="true"
+          node-key="id"
+          @check="treeCheck"
+          ref="treeForm"
+        >
+        </el-tree>
+      </div>
+    </div>
+
+    <div class="menuSettings">
+      <!-- <div class="title_box">
+        <h4>璇︾粏淇℃伅</h4>
+      </div> -->
+      <div
+        style="
+          font-size: 14px;
+          color: #606266;
+          line-height: 1;
+          cursor: text;
+          position: relative;
+          top: 5px;
+          margin-left: 10px;
+          display: flex;
+          align-items: center;
+        "
+      >
+        <span>
+          {{
+            $t('operatManage.UserRoleAuthorizationObj.PermissionTable')
+          }}</span
+        >
+        <div class="btn" style="margin-left: auto">
+          <el-button
+            type="primary"
+            icon="el-icon-circle-plus-outline"
+            size="small"
+            :disabled="roleid == null ? true : false"
+            @click="adduser"
+            >{{ $t('operatManage.UserRoleAuthorizationObj.Added') }}</el-button
+          >
+          <el-button
+            type="danger"
+            icon="el-icon-delete"
+            size="small"
+            @click="deletesUser"
+            :disabled="roleid == null ? true : false"
+            >{{ $t('operatManage.UserRoleAuthorizationObj.delete') }}</el-button
+          >
+        </div>
+      </div>
+      <el-divider class="divider" />
+
+      <el-table
+        :data="tableData"
+        stripe
+        style="width: 100%"
+        height="85%"
+        @selection-change="handleSelectionChange"
+        :header-cell-style="{
+          background: 'transparent',
+        }"
+      >
+        <el-table-column type="selection" width="55"> </el-table-column>
+        <el-table-column
+          prop="authid"
+          :label="$t('operatManage.UserRoleAuthorizationObj.serialNumber')"
+        >
+        </el-table-column>
+        <el-table-column
+          prop="authName"
+          :label="$t('operatManage.UserRoleAuthorizationObj.name')"
+        >
+        </el-table-column>
+      </el-table>
+
+      <div style="margin-top: 20px; text-align: center" class="pagination_box">
+        <el-pagination
+          @size-change="userhandleSizeChange"
+          @current-change="userhandleCurrentChange"
+          :current-page="userlistData.pageIndex"
+          :page-sizes="[10, 20, 30, 40]"
+          :page-size="userlistData.pageSize"
+          layout="total, sizes, prev, pager, next, jumper"
+          :total="usercount"
+        >
+        </el-pagination>
+      </div>
+    </div>
+    <el-dialog
+      :title="$t('operatManage.UserRoleAuthorizationObj.Added')"
+      :visible.sync="dialogTableVisible"
+    >
+      <el-table
+        :data="gridData"
+        height="40vh"
+        @selection-change="addhandleSelectionChange"
+      >
+        <el-table-column type="selection" width="55"> </el-table-column>
+        <el-table-column
+          prop="id"
+          :label="$t('operatManage.UserRoleAuthorizationObj.serialNumber')"
+        >
+        </el-table-column>
+        <el-table-column
+          prop="name"
+          :label="$t('operatManage.UserRoleAuthorizationObj.name')"
+        >
+        </el-table-column>
+      </el-table>
+      <div style="margin-top: 20px; text-align: center" class="pagination_box">
+        <el-pagination
+          @size-change="addhandleSizeChange"
+          @current-change="addhandleCurrentChange"
+          :current-page="addlistData.pageIndex"
+          :page-sizes="[10, 20, 30, 40]"
+          :page-size="addlistData.pageSize"
+          layout="total, sizes, prev, pager, next, jumper"
+          :total="addcount"
+        >
+        </el-pagination>
+      </div>
+      <div slot="footer" class="dialog-footer">
+        <el-button @click="dialogTableVisible = false">{{
+          $t('dataManage.dictionaryManageObj.cancel')
+        }}</el-button>
+        <el-button type="primary" @click="addConfirm">{{
+          $t('dataManage.dictionaryManageObj.confirm')
+        }}</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import MyBread from '../../components/MyBread.vue';
+import {
+  queryMenuTree,
+  select_menuAuth_ByPageAndCount,
+  roleUserselectByPageForRole,
+  menuAuthDeletes,
+  select_AuthMenu_ByPageAndCount,
+  menuAuthinserts,
+} from '../../api/api';
+export default {
+  //import寮曞叆鐨勭粍浠堕渶瑕佹敞鍏ュ埌瀵硅薄涓墠鑳戒娇鐢�
+  components: {
+    MyBread,
+  },
+
+  data() {
+    return {
+      addcount: 0,
+      gridData: [],
+      addlistData: {
+        pageIndex: 1,
+        pageSize: 10,
+      },
+      dialogTableVisible: false,
+      usertableData: [],
+      userlistData: {
+        pageIndex: 1,
+        pageSize: 10,
+      },
+      usercount: 0,
+      tableData: [],
+      //   褰撳墠閫夋嫨鐨勮鐨刬d
+      templateSelection: '',
+      //   褰撳墠閫夋嫨鐨勮鐨勬暟鎹�
+      checkList: [],
+
+      defaultProps: {
+        children: 'children',
+        label: 'cnName',
+      },
+      oriData: [], //鍘熷鏍戞暟鎹�
+      depList: [], //el鏍戞暟鎹�
+      backUpData: {},
+      formLabelWidth: '170px',
+      listData: {
+        pageIndex: 1,
+        pageSize: 10,
+      },
+      count: 0,
+      usermultipleSelection: [],
+      debid: null,
+      roleid: null,
+      addmultipleSelection: [],
+    };
+  },
+  methods: {
+    /**
+     * sws
+     */
+
+    // 閮ㄩ棬璇锋眰
+    async getMenuTree() {
+      //鑾峰彇鐩綍鏍戞渶澶D锛屾柊寤鸿妭鐐逛娇鐢�
+      const data = await queryMenuTree();
+      if (data.code !== 200) {
+        return this.$message.error('璇锋眰鍗曚綅鎶ラ敊');
+      }
+      this.depList = this.treeData(data.result);
+    },
+    treeData(source) {
+      let cloneData = JSON.parse(JSON.stringify(source)); // 瀵规簮鏁版嵁娣卞害鍏嬮殕
+      return cloneData.filter((father) => {
+        // 寰幆鎵�鏈夐」
+        let branchArr = cloneData.filter((child) => father.id == child.pid); // 瀵规瘮ID锛屽垎鍒笂涓嬬骇鑿滃崟锛屽苟杩斿洖鏁版嵁
+        branchArr.length > 0 ? (father.children = branchArr) : ''; // 缁欑埗绾ф坊鍔犱竴涓猚hildren灞炴�э紝骞惰祴鍊�
+        return father.pid == 0; // 杩斿洖涓�绾ц彍鍗�
+      });
+    },
+    // 閮ㄩ棬鏍戝崟閫�
+    treeCheck(node, list) {
+      //node 璇ヨ妭鐐规墍瀵瑰簲鐨勫璞°�乴ist 鏍戠洰鍓嶇殑閫変腑鐘舵�佸璞�
+      //閫変腑浜嬩欢鍦ㄩ�変腑鍚庢墽琛岋紝褰搇is涓湁涓や釜閫変腑鏃讹紝浣跨敤setCheckedKeys鏂规硶锛岄�変腑涓�涓妭鐐�
+
+      if (list.checkedNodes.length > 0) {
+        this.listData.menuid = node.id;
+        this.debid = node.id;
+        this.roleid = node.id;
+        this.getRole();
+        if (list.checkedKeys.length == 2) {
+          //鍗曢�夊疄鐜�
+          this.$refs.treeForm.setCheckedKeys([node.id]);
+        }
+      } else {
+        this.debid = null;
+        this.roleid = null;
+        this.tableData = [];
+        this.usertableData = [];
+      }
+    },
+
+    addConfirm() {
+      this.$confirm('纭畾鏄惁鏂板', '鎻愮ず', {
+        confirmButtonText: '纭畾',
+        cancelButtonText: '鍙栨秷',
+        type: 'warning',
+      })
+        .then(async () => {
+          let arr = [];
+          this.addmultipleSelection.forEach((e) => {
+            arr.push({ menuid: this.roleid, authid: e.id });
+          });
+
+          const data = await menuAuthinserts(arr);
+          if (data.code !== 200) {
+            return this.$message.error('鏂板澶辫触');
+          }
+          this.$message({
+            type: 'success',
+            message: '鏂板鎴愬姛!',
+          });
+          this.dialogTableVisible = false;
+          this.getRole();
+        })
+        .catch(() => {});
+    },
+    adduser() {
+      this.dialogTableVisible = true;
+      this.getadduserList();
+    },
+    //鐢ㄦ埛鍒犻櫎
+    async deletesUser() {
+      let arr = [];
+      this.usermultipleSelection.forEach((e) => {
+        arr.push(e.id);
+      });
+      const data = await menuAuthDeletes({ ids: arr.toString() });
+      if (data.code !== 200) {
+        return this.$message.error('鍒犻櫎澶辫触');
+      }
+      this.$message({
+        message: '鍒犻櫎鎴愬姛',
+        type: 'success',
+      });
+      this.getRole();
+    },
+
+    async getadduserList() {
+      this.addlistData.menuid = this.roleid;
+      const data = await select_AuthMenu_ByPageAndCount(this.addlistData);
+      if (data.code !== 200) {
+        return this.$message.error('鏂板鐢ㄦ埛鍒楄〃璇锋眰閿欒');
+      }
+      this.gridData = data.result;
+      this.addcount = data.count;
+    },
+
+    //鐢ㄦ埛琛ㄥ閫�
+    handleSelectionChange(val) {
+      this.usermultipleSelection = val;
+    },
+    //鏂板鐢ㄦ埛琛ㄥ閫�
+    addhandleSelectionChange(val) {
+      this.addmultipleSelection = val;
+    },
+    // 鏂板鐢ㄦ埛琛ㄥ垎椤�
+    addhandleSizeChange(val) {
+      this.addlistData.pageSize = val;
+      this.getadduserList();
+    },
+    // 鏂板鐢ㄦ埛琛ㄥ垎椤�
+    addhandleCurrentChange(val) {
+      this.addlistData.pageIndex = val;
+      this.getadduserList();
+    },
+    // 鐢ㄦ埛琛ㄥ垎椤�
+    userhandleSizeChange(val) {
+      this.userlistData.pageSize = val;
+      this.getRole();
+    },
+    // 鐢ㄦ埛琛ㄥ垎椤�
+    userhandleCurrentChange(val) {
+      this.userlistData.pageIndex = val;
+      this.getRole();
+    },
+
+    // 瑙掕壊琛ㄨ姹�
+    async getRole() {
+      const data = await select_menuAuth_ByPageAndCount(this.listData);
+      if (data.code !== 200) {
+        return this.$message.error('鐢ㄦ埛瑙掕壊璇锋眰閿欒');
+      }
+
+      this.tableData = data.result;
+      this.usercount = data.count;
+    },
+  },
+  created() {
+    this.getMenuTree();
+  },
+};
+</script>
+<style lang="less" scoped>
+//@import url(); 寮曞叆鍏叡css绫�
+.menuSettings_box {
+  //   background: rgb(240, 242, 245);
+  border-radius: 10px;
+  height: 100%;
+  padding: 10px;
+  box-sizing: border-box;
+  display: flex;
+  .menuSettings_tree {
+    position: relative;
+    width: 30%;
+    height: 100%;
+    background: rgb(240, 242, 245);
+    padding: 20px;
+    border-radius: 10px;
+    box-sizing: border-box;
+    overflow: auto;
+    .saveBtn {
+      position: absolute;
+      left: 250px;
+      top: 23px;
+    }
+    .menuTreeBox {
+      height: 90%;
+      overflow: auto;
+      .el-tree {
+        background: transparent;
+        font-size: 15px;
+        font-family: Microsoft YaHei;
+        font-weight: 400;
+        color: #000000;
+        // /deep/ .el-tree-node__label {
+        //   font-size: 18px;
+        // }
+        /deep/ .el-tree-node {
+          padding-top: 10px;
+          // padding-bottom: 10px;
+        }
+        /deep/ .el-tree-node:focus > .el-tree-node__content {
+          background-color: #b9b9b9;
+        }
+        /deep/ .el-tree-node__content:hover {
+          background-color: rgb(153, 153, 153);
+        }
+        .btnBox {
+          margin-left: 5px;
+          .el-button + .el-button {
+            margin-left: 5px;
+          }
+        }
+      }
+    }
+  }
+  .menuSettings {
+    width: 70%;
+    border-radius: 10px;
+    background: rgb(240, 242, 245);
+    margin-left: 10px;
+    height: 100%;
+    padding: 20px;
+    box-sizing: border-box;
+    .title_box {
+      background: #fff;
+      padding: 10px;
+      margin-bottom: 24px;
+      display: flex;
+      border-radius: 10px;
+      border: 1px solid rgb(202, 201, 204);
+      box-sizing: border-box;
+    }
+  }
+  .table_box {
+    padding: 10px;
+    background: #fff;
+    border-radius: 5px;
+    border: 1px solid rgb(202, 201, 204);
+    overflow: auto;
+    height: 85%;
+  }
+  .divider {
+    margin-top: 8px;
+  }
+}
+.el-table,
+.el-table /deep/ .el-table__expanded-cell {
+  background-color: transparent;
+}
+
+.el-table /deep/ th,
+.el-table /deep/ tr {
+  background-color: transparent;
+}
+</style>
diff --git a/src/views/AuthorizationManagement/roleResAuthorization.vue b/src/views/AuthorizationManagement/roleResAuthorization.vue
new file mode 100644
index 0000000..b03aa95
--- /dev/null
+++ b/src/views/AuthorizationManagement/roleResAuthorization.vue
@@ -0,0 +1,540 @@
+<template>
+  <div class="menuSettings_box">
+    <div class="menuSettings_tree">
+      <My-bread
+        :list="[
+          `${$t('operatManage.operatManage')}`,
+          `${$t('operatManage.UserRoleAuthorization')}`,
+        ]"
+      ></My-bread>
+
+      <el-divider />
+      <div class="menuTreeBox">
+        <el-tree
+          :data="depList"
+          :props="defaultProps"
+          :show-checkbox="true"
+          :check-on-click-node="true"
+          :check-strictly="true"
+          node-key="id"
+          @check="treeCheck"
+          ref="treeForm"
+        >
+        </el-tree>
+      </div>
+    </div>
+    <div
+      class="menuSettings_tree"
+      style="margin-left: 10px; width: calc(50% - 172px)"
+    >
+      <div
+        style="
+          font-size: 14px;
+          color: #606266;
+          line-height: 1;
+          cursor: text;
+          position: relative;
+          top: 10px;
+          margin-left: 10px;
+        "
+      >
+        {{ $t('operatManage.UserRoleAuthorizationObj.RoleTable') }}
+      </div>
+      <el-divider />
+      <el-table
+        :data="tableData"
+        style="width: 100%"
+        @row-click="singleElection"
+        highlight-current-row
+        height="85%"
+        :header-cell-style="{
+          background: 'transparent',
+        }"
+      >
+        <el-table-column align="center" width="55">
+          <template slot-scope="scope">
+            <!-- 鍙互鎵嬪姩鐨勪慨鏀筶abel鐨勫�硷紝浠庤�屾帶鍒堕�夋嫨鍝竴椤� -->
+            <el-radio
+              class="radio"
+              v-model="templateSelection"
+              :label="scope.row.id"
+              >&nbsp;</el-radio
+            >
+          </template>
+        </el-table-column>
+        <el-table-column
+          prop="id"
+          :label="$t('operatManage.UserRoleAuthorizationObj.serialNumber')"
+        >
+        </el-table-column>
+        <el-table-column
+          prop="name"
+          :label="$t('operatManage.UserRoleAuthorizationObj.name')"
+        >
+        </el-table-column>
+      </el-table>
+      <div style="text-align: center; margin-top: 20px">
+        <el-pagination
+          @size-change="handleSizeChange"
+          @current-change="handleCurrentChange"
+          :current-page="listData.pageIndex"
+          :page-sizes="[10, 20, 30, 40]"
+          :page-size="userlistData.pageSize"
+          layout="total, sizes, prev, pager, next, jumper"
+          :total="count"
+        >
+        </el-pagination>
+      </div>
+    </div>
+    <div class="menuSettings">
+      <!-- <div class="title_box">
+        <h4>璇︾粏淇℃伅</h4>
+      </div> -->
+      <div
+        style="
+          font-size: 14px;
+          color: #606266;
+          line-height: 1;
+          cursor: text;
+          position: relative;
+          top: 5px;
+          margin-left: 10px;
+          display: flex;
+          align-items: center;
+        "
+      >
+        <span>
+          {{ $t('operatManage.UserRoleAuthorizationObj.userTable') }}</span
+        >
+        <div class="btn" style="margin-left: auto">
+          <el-button
+            type="primary"
+            icon="el-icon-circle-plus-outline"
+            size="small"
+            :disabled="roleid == null ? true : false"
+            @click="adduser"
+            >{{ $t('operatManage.UserRoleAuthorizationObj.Added') }}</el-button
+          >
+          <el-button
+            type="danger"
+            icon="el-icon-delete"
+            size="small"
+            @click="deletesUser"
+            :disabled="roleid == null ? true : false"
+            >{{ $t('operatManage.UserRoleAuthorizationObj.delete') }}</el-button
+          >
+        </div>
+      </div>
+      <el-divider class="divider" />
+
+      <el-table
+        :data="usertableData"
+        stripe
+        style="width: 100%"
+        height="85%"
+        @selection-change="handleSelectionChange"
+        :header-cell-style="{
+          background: 'transparent',
+        }"
+      >
+        <el-table-column type="selection" width="55"> </el-table-column>
+        <el-table-column
+          prop="id"
+          :label="$t('operatManage.UserRoleAuthorizationObj.serialNumber')"
+        >
+        </el-table-column>
+        <el-table-column
+          prop="resName"
+          :label="$t('operatManage.UserRoleAuthorizationObj.name')"
+        >
+        </el-table-column>
+        <el-table-column
+          prop="server"
+          :label="$t('operatManage.UserRoleAuthorizationObj.server')"
+        >
+        </el-table-column>
+      </el-table>
+
+      <div style="margin-top: 20px; text-align: center" class="pagination_box">
+        <el-pagination
+          @size-change="userhandleSizeChange"
+          @current-change="userhandleCurrentChange"
+          :current-page="userlistData.pageIndex"
+          :page-sizes="[10, 20, 30, 40]"
+          :page-size="userlistData.pageSize"
+          layout="total, sizes, prev, pager, next, jumper"
+          :total="usercount"
+        >
+        </el-pagination>
+      </div>
+    </div>
+    <el-dialog
+      :title="$t('operatManage.UserRoleAuthorizationObj.Added')"
+      :visible.sync="dialogTableVisible"
+    >
+      <el-table
+        :data="gridData"
+        height="40vh"
+        @selection-change="addhandleSelectionChange"
+      >
+        <el-table-column type="selection" width="55"> </el-table-column>
+        <el-table-column
+          prop="id"
+          :label="$t('operatManage.UserRoleAuthorizationObj.serialNumber')"
+        >
+        </el-table-column>
+        <el-table-column
+          prop="name"
+          :label="$t('operatManage.UserRoleAuthorizationObj.name')"
+        >
+        </el-table-column>
+        <el-table-column
+          prop="server"
+          :label="$t('operatManage.UserRoleAuthorizationObj.server')"
+        >
+        </el-table-column>
+      </el-table>
+      <div style="margin-top: 20px; text-align: center" class="pagination_box">
+        <el-pagination
+          @size-change="addhandleSizeChange"
+          @current-change="addhandleCurrentChange"
+          :current-page="addlistData.pageIndex"
+          :page-sizes="[10, 20, 30, 40]"
+          :page-size="addlistData.pageSize"
+          layout="total, sizes, prev, pager, next, jumper"
+          :total="addcount"
+        >
+        </el-pagination>
+      </div>
+      <div slot="footer" class="dialog-footer">
+        <el-button @click="dialogTableVisible = false">{{
+          $t('dataManage.dictionaryManageObj.cancel')
+        }}</el-button>
+        <el-button type="primary" @click="addConfirm">{{
+          $t('dataManage.dictionaryManageObj.confirm')
+        }}</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import MyBread from '../../components/MyBread.vue';
+import {
+  queryDepTree,
+  select_Role_ByPageAndCount,
+  roleReselectByPageAndCount,
+  roleResDeletes,
+  resSelectCountForRole,
+  roleResInserts,
+} from '../../api/api';
+export default {
+  //import寮曞叆鐨勭粍浠堕渶瑕佹敞鍏ュ埌瀵硅薄涓墠鑳戒娇鐢�
+  components: {
+    MyBread,
+  },
+
+  data() {
+    return {
+      addcount: 0,
+      gridData: [],
+      addlistData: {
+        pageIndex: 1,
+        pageSize: 10,
+      },
+      dialogTableVisible: false,
+      usertableData: [],
+      userlistData: {
+        pageIndex: 1,
+        pageSize: 10,
+      },
+      usercount: 0,
+      tableData: [],
+      //   褰撳墠閫夋嫨鐨勮鐨刬d
+      templateSelection: '',
+      //   褰撳墠閫夋嫨鐨勮鐨勬暟鎹�
+      checkList: [],
+
+      defaultProps: {
+        children: 'children',
+        label: 'name',
+      },
+      oriData: [], //鍘熷鏍戞暟鎹�
+      depList: [], //el鏍戞暟鎹�
+      backUpData: {},
+      formLabelWidth: '170px',
+      listData: {
+        pageIndex: 1,
+        pageSize: 10,
+      },
+      count: 0,
+      usermultipleSelection: [],
+      debid: null,
+      roleid: null,
+      addmultipleSelection: [],
+    };
+  },
+  methods: {
+    addConfirm() {
+      this.$confirm('纭畾鏄惁鏂板', '鎻愮ず', {
+        confirmButtonText: '纭畾',
+        cancelButtonText: '鍙栨秷',
+        type: 'warning',
+      })
+        .then(async () => {
+          let arr = [];
+          this.addmultipleSelection.forEach((e) => {
+            arr.push({ resid: e.id, roleid: this.roleid });
+          });
+          const data = await roleResInserts(arr);
+          if (data.code !== 200) {
+            return this.$message.error('鏂板澶辫触');
+          }
+
+          this.$message({
+            type: 'success',
+            message: '鏂板鎴愬姛!',
+          });
+          this.dialogTableVisible = false;
+          this.getuserList();
+        })
+        .catch(() => {});
+    },
+    adduser() {
+      this.dialogTableVisible = true;
+      this.getadduserList();
+    },
+    //鐢ㄦ埛鍒犻櫎
+    async deletesUser() {
+      let arr = [];
+      this.usermultipleSelection.forEach((e) => {
+        arr.push(e.id);
+      });
+      const data = await roleResDeletes({ ids: arr.toString() });
+      if (data.code !== 200) {
+        return this.$message.error('鍒犻櫎澶辫触');
+      }
+      this.$message({
+        message: '鍒犻櫎鎴愬姛',
+        type: 'success',
+      });
+      this.getuserList();
+    },
+    //鐢ㄦ埛琛ㄥ閫�
+    handleSelectionChange(val) {
+      this.usermultipleSelection = val;
+    },
+    //鏂板鐢ㄦ埛琛ㄥ閫�
+    addhandleSelectionChange(val) {
+      this.addmultipleSelection = val;
+    },
+    // 鏂板鐢ㄦ埛琛ㄥ垎椤�
+    addhandleSizeChange(val) {
+      this.addlistData.pageSize = val;
+      this.getadduserList();
+    },
+    // 鏂板鐢ㄦ埛琛ㄥ垎椤�
+    addhandleCurrentChange(val) {
+      this.addlistData.pageIndex = val;
+      this.getadduserList();
+    },
+    // 鐢ㄦ埛琛ㄥ垎椤�
+    userhandleSizeChange(val) {
+      this.userlistData.pageSize = val;
+      this.getuserList();
+    },
+    // 鐢ㄦ埛琛ㄥ垎椤�
+    userhandleCurrentChange(val) {
+      this.userlistData.pageIndex = val;
+      this.getuserList();
+    },
+    // 瑙掕壊琛ㄥ垎椤�
+    handleSizeChange(val) {
+      this.listData.pageSize = val;
+      this.getRole();
+    },
+    // 瑙掕壊琛ㄥ垎椤�
+    handleCurrentChange(val) {
+      this.listData.pageIndex = val;
+      this.getRole();
+    },
+    // 瑙掕壊鍗曢��
+    singleElection(row) {
+      this.templateSelection = row.id;
+      this.checkList = this.tableData.filter((item) => item.id === row.id);
+      this.userlistData.roleid = row.id;
+      this.roleid = row.id;
+      this.getuserList();
+    },
+    // 閮ㄩ棬璇锋眰
+    async getMenuTree() {
+      //鑾峰彇鐩綍鏍戞渶澶D锛屾柊寤鸿妭鐐逛娇鐢�
+      const data = await queryDepTree();
+
+      if (data.code !== 200) {
+        return this.$message.error('璇锋眰鍗曚綅鎶ラ敊');
+      }
+      this.depList = this.treeData(data.result);
+    },
+    treeData(source) {
+      let cloneData = JSON.parse(JSON.stringify(source)); // 瀵规簮鏁版嵁娣卞害鍏嬮殕
+      return cloneData.filter((father) => {
+        // 寰幆鎵�鏈夐」
+        let branchArr = cloneData.filter((child) => father.id == child.pid); // 瀵规瘮ID锛屽垎鍒笂涓嬬骇鑿滃崟锛屽苟杩斿洖鏁版嵁
+        branchArr.length > 0 ? (father.children = branchArr) : ''; // 缁欑埗绾ф坊鍔犱竴涓猚hildren灞炴�э紝骞惰祴鍊�
+        return father.pid == 0; // 杩斿洖涓�绾ц彍鍗�
+      });
+    },
+    // 閮ㄩ棬鏍戝崟閫�
+    treeCheck(node, list) {
+      //node 璇ヨ妭鐐规墍瀵瑰簲鐨勫璞°�乴ist 鏍戠洰鍓嶇殑閫変腑鐘舵�佸璞�
+      //閫変腑浜嬩欢鍦ㄩ�変腑鍚庢墽琛岋紝褰搇is涓湁涓や釜閫変腑鏃讹紝浣跨敤setCheckedKeys鏂规硶锛岄�変腑涓�涓妭鐐�
+
+      if (list.checkedNodes.length > 0) {
+        this.listData.depid = node.id;
+        this.debid = node.id;
+        this.getRole();
+        if (list.checkedKeys.length == 2) {
+          //鍗曢�夊疄鐜�
+          this.$refs.treeForm.setCheckedKeys([node.id]);
+        }
+      } else {
+        this.debid = null;
+        this.roleid = null;
+        this.tableData = [];
+        this.usertableData = [];
+      }
+    },
+    async getadduserList() {
+      this.addlistData.roleid = this.roleid;
+
+      // this.addlistData.debid = this.debid;
+      const data = await resSelectCountForRole(this.addlistData);
+      if (data.code !== 200) {
+        return this.$message.error('鏂板璧勬簮鍒楄〃璇锋眰閿欒');
+      }
+      this.gridData = data.result;
+      this.addcount = data.count;
+    },
+    // 鐢ㄦ埛琛ㄨ姹�
+    async getuserList() {
+      const data = await roleReselectByPageAndCount(this.userlistData);
+      if (data.code !== 200) {
+        return this.$message.error('鐢ㄦ埛璧勬簮鍒楄〃璇锋眰閿欒');
+      }
+      this.usertableData = data.result;
+      this.usercount = data.count;
+    },
+    // 瑙掕壊琛ㄨ姹�
+    async getRole() {
+      const data = await select_Role_ByPageAndCount(this.listData);
+      if (data.code !== 200) {
+        return this.$message.error('鐢ㄦ埛瑙掕壊璇锋眰閿欒');
+      }
+      this.tableData = data.result;
+      this.count = data.count;
+      if (data.result == null) {
+        this.usertableData = [];
+        this.usercount = 0;
+      }
+    },
+  },
+  created() {
+    this.getMenuTree();
+  },
+};
+</script>
+<style lang="less" scoped>
+//@import url(); 寮曞叆鍏叡css绫�
+.menuSettings_box {
+  //   background: rgb(240, 242, 245);
+  border-radius: 10px;
+  height: 100%;
+  padding: 10px;
+  box-sizing: border-box;
+  display: flex;
+  .menuSettings_tree {
+    position: relative;
+    width: 344px;
+    height: 100%;
+    background: rgb(240, 242, 245);
+    padding: 20px;
+    border-radius: 10px;
+    box-sizing: border-box;
+    overflow: auto;
+    .saveBtn {
+      position: absolute;
+      left: 250px;
+      top: 23px;
+    }
+    .menuTreeBox {
+      height: 90%;
+      overflow: auto;
+      .el-tree {
+        background: transparent;
+        font-size: 15px;
+        font-family: Microsoft YaHei;
+        font-weight: 400;
+        color: #000000;
+        // /deep/ .el-tree-node__label {
+        //   font-size: 18px;
+        // }
+        /deep/ .el-tree-node {
+          padding-top: 10px;
+          // padding-bottom: 10px;
+        }
+        /deep/ .el-tree-node:focus > .el-tree-node__content {
+          background-color: #b9b9b9;
+        }
+        /deep/ .el-tree-node__content:hover {
+          background-color: rgb(153, 153, 153);
+        }
+        .btnBox {
+          margin-left: 5px;
+          .el-button + .el-button {
+            margin-left: 5px;
+          }
+        }
+      }
+    }
+  }
+  .menuSettings {
+    width: calc(50% - 172px);
+    border-radius: 10px;
+    background: rgb(240, 242, 245);
+    margin-left: 10px;
+    height: 100%;
+    padding: 20px;
+    box-sizing: border-box;
+    .title_box {
+      background: #fff;
+      padding: 10px;
+      margin-bottom: 24px;
+      display: flex;
+      border-radius: 10px;
+      border: 1px solid rgb(202, 201, 204);
+      box-sizing: border-box;
+    }
+  }
+  .table_box {
+    padding: 10px;
+    background: #fff;
+    border-radius: 5px;
+    border: 1px solid rgb(202, 201, 204);
+    overflow: auto;
+    height: 85%;
+  }
+  .divider {
+    margin-top: 8px;
+  }
+}
+.el-table,
+.el-table /deep/ .el-table__expanded-cell {
+  background-color: transparent;
+}
+
+.el-table /deep/ th,
+.el-table /deep/ tr {
+  background-color: transparent;
+}
+</style>

--
Gitblit v1.9.3