Surpriseplus
2022-10-17 a1d1a7e006081b716774be1688bba6ebbdde2fbb
资源配置
已添加1个文件
已修改6个文件
615 ■■■■■ 文件已修改
public/config/config.js 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/api.js 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/lang/en.js 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/lang/zh.js 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/router/index.js 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/AuthorizationManagement/roleMenuAuthorization.vue 576 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/AuthorizationManagement/roleResAuthorization.vue 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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/';
src/api/api.js
@@ -333,3 +333,19 @@
export function resSelectCountForRole(params) {
  return request.get('/res/selectCountForRole', { params: params });
}
//角色菜单-根据角色ID+菜单ID分页查询并返回记录数
export function roleMenuAuthelectByPageForRole(params) {
  return request.get('/roleMenuAuth/selectByPageForRole', { params: params });
}
//角色菜单-插入多條
export function roleMenuAuthInserts(params) {
  return request.post('/roleMenuAuth/inserts', params);
}
//角色菜单-删除多条
export function roleMenuAuthDeletes(params) {
  return request.get('/roleMenuAuth/deletes', { params: params });
}
//菜单权限-根据角色ID+菜单ID分页查询并返回记录数
export function menuAuthSelectByPageForRole(params) {
  return request.get('/menuAuth/selectByPageForRole', { params: params });
}
src/assets/lang/en.js
@@ -106,7 +106,8 @@
    ResourceLog: 'Resource Log',
    UserRoleAuthorization: 'User Role Authorization',
    MenuRoleAuthorization: 'Menu Permission Authorization',
    RoleResAuthorization: 'Role resource authorization',
    RoleResAuthorization: 'Role Resource Authorization',
    RoleMenuAuthorization: 'Role Menu Authorization',
    UserRoleAuthorizationObj: {
      RoleTable: 'Role Table',
      userTable: 'user Table',
src/assets/lang/zh.js
@@ -108,6 +108,7 @@
    UserRoleAuthorization: '用户角色授权',
    MenuRoleAuthorization: '菜单权限授权',
    RoleResAuthorization: '角色资源授权',
    RoleMenuAuthorization: '角色菜单授权',
    UserRoleAuthorizationObj: {
      RoleTable: '角色表',
      userTable: '用户表',
src/router/index.js
@@ -41,6 +41,7 @@
import menuRoleAuthorization from '@/views/AuthorizationManagement/menuRoleAuthorization.vue'; //系统管理-菜单权限授权
import roleResAuthorization from '@/views/AuthorizationManagement/roleResAuthorization.vue'; //系统管理-角色资源授权
import roleMenuAuthorization from '@/views/AuthorizationManagement/roleMenuAuthorization.vue'; //系统管理-角色菜单授权
const originalPush = VueRouter.prototype.push;
@@ -375,6 +376,15 @@
          requireAuth: true, // æ ‡è¯†è¯¥è·¯ç”±æ˜¯å¦éœ€è¦ç™»å½•
        },
      },
      {
        path: '/roleMenuAuthorization',
        component: roleMenuAuthorization,
        name: 'roleMenuAuthorization',
        meta: {
          title: '菜单权限授权',
          requireAuth: true, // æ ‡è¯†è¯¥è·¯ç”±æ˜¯å¦éœ€è¦ç™»å½•
        },
      },
    ],
  },
];
src/views/AuthorizationManagement/roleMenuAuthorization.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,576 @@
<template>
  <div class="menuSettings_box">
    <!-- è§’色,单位 -->
    <div
      class="menuSettings_tree"
      style="margin-left: 10px; width: calc(50% - 172px)"
    >
      <My-bread
        :list="[
          `${$t('operatManage.operatManage')}`,
          `${$t('operatManage.RoleMenuAuthorization')}`,
        ]"
      ></My-bread>
      <el-divider />
      <el-form ref="form" :model="selFrom">
        <el-form-item label="单位">
          <el-select
            ref="multiSelect"
            style="width: 300px"
            v-model="selFrom.name"
            placeholder="请选择单位名称..."
            @change="chooseCustom"
          >
            <el-option
              :value="selectTree"
              class="setstyle"
              style="overflow: auto; height: 200px"
              disabled
            >
              <el-tree
                :data="depList"
                :props="defaultProps"
                :check-on-click-node="true"
                :check-strictly="true"
                node-key="id"
                ref="treeForm"
                @node-click="addAdminHandleNodeClick"
              >
              </el-tree>
            </el-option>
          </el-select>
        </el-form-item>
      </el-form>
      <div style="height: 75%">
        <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">
              <!-- å¯ä»¥æ‰‹åŠ¨çš„ä¿®æ”¹label的值,从而控制选择哪一项 -->
              <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>
      <div style="margin-top: 20px; text-align: center" class="pagination_box">
        <el-pagination
          @size-change="dephandleSizeChange"
          @current-change="dephandleCurrentChange"
          :current-page="roleDepListData.pageIndex"
          :page-sizes="[10, 20, 30, 40]"
          :page-size="roleDepListData.pageSize"
          layout="total, sizes, prev, pager, next, jumper"
          :total="roleDepCount"
        >
        </el-pagination>
      </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: 5px;
          margin-left: 10px;
          display: flex;
          align-items: center;
        "
      >
        <span>
          {{
            $t('operatManage.UserRoleAuthorizationObj.PermissionTable')
          }}</span
        >
      </div>
      <el-divider />
      <div class="menuTreeBox">
        <el-tree
          :data="menuList"
          :props="defaultMenuProps"
          :show-checkbox="true"
          :check-on-click-node="true"
          :check-strictly="true"
          node-key="id"
          @check="menuTreeCheck"
          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"
            @click="adduser"
            :disabled="menuid == null ? true : false"
            >{{ $t('operatManage.UserRoleAuthorizationObj.Added') }}</el-button
          >
          <el-button
            type="danger"
            icon="el-icon-delete"
            size="small"
            @click="deletesUser"
            :disabled="menuid == null ? true : false"
            >{{ $t('operatManage.UserRoleAuthorizationObj.delete') }}</el-button
          >
        </div>
      </div>
      <el-divider class="divider" />
      <el-table
        :data="menuTableData"
        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="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="authhandleSizeChange"
          @current-change="authhandleCurrentChange"
          :current-page="rolMenuListData.pageIndex"
          :page-sizes="[10, 20, 30, 40]"
          :page-size="rolMenuListData.pageSize"
          layout="total, sizes, prev, pager, next, jumper"
          :total="roleMenuCount"
        >
        </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 {
  queryDepTree,
  select_Role_ByPageAndCount,
  selectMenuRecursive,
  roleMenuAuthelectByPageForRole,
  menuAuthSelectByPageForRole,
  roleMenuAuthInserts,
  roleMenuAuthDeletes,
} from '../../api/api';
export default {
  //import引入的组件需要注入到对象中才能使用
  components: {
    MyBread,
  },
  data() {
    return {
      dialogTableVisible: false,
      selFrom: { name: '' },
      selectTree: '',
      depList: [], //el树数据
      defaultProps: {
        children: 'children',
        label: 'name',
      }, //树绑定对象
      defaultMenuProps: {
        children: 'children',
        label: 'cnName',
      }, //菜单表绑定权限
      depid: null, //单位ID
      roleDepListData: {
        pageIndex: 1,
        pageSize: 10,
      },
      rolMenuListData: {
        pageIndex: 1,
        pageSize: 10,
      },
      addlistData: { pageIndex: 1, pageSize: 10 },
      addcount: 0,
      roleDepCount: 0,
      roleMenuCount: 0,
      roleDepCheckList: [],
      tableData: [], //角色列表
      templateSelection: '',
      menuList: [],
      roleid: null,
      menuid: null,
      menuTableData: [],
      gridData: [],
      addmultipleSelection: [],
      usermultipleSelection: [],
    };
  },
  methods: {
    async getDepTree() {
      //获取目录树最大ID,新建节点使用
      const data = await queryDepTree();
      if (data.code !== 200) {
        return this.$message.error('请求单位报错');
      }
      this.depList = this.treeData(data.result);
    },
    async getMenuTree() {
      const data = await selectMenuRecursive({ name: '管道基础大数据平台' });
      if (data.code !== 200) {
        return this.$message.error('请求单位报错');
      }
      this.menuList = 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) : ''; // ç»™çˆ¶çº§æ·»åŠ ä¸€ä¸ªchildren属性,并赋值
        return father.pid == 0; // è¿”回一级菜单
      });
    },
    //树选中节点
    addAdminHandleNodeClick(e) {
      this.roleDepCheckList = [];
      this.templateSelection = '';
      this.depid = e.id;
      this.selFrom.name = e.name;
      this.selectTree = e.name;
      this.getRoleDep();
      this.getMenuTree();
    },
    menuTreeCheck(node, list) {
      if (list.checkedNodes.length > 0) {
        this.rolMenuListData.menuid = node.id;
        this.menuid = node.id;
        this.rolMenuListData.roleid = this.roleid;
        this.getRoleMenu();
      } else {
        this.menuid = null;
      }
    },
    async getRoleMenu() {
      const data = await roleMenuAuthelectByPageForRole(this.rolMenuListData);
      if (data.code !== 200) {
        return this.$message.error('角色菜单请求错误');
      }
      this.menuTableData = data.result;
      this.roleMenuCount = data.count;
    },
    async getRoleDep() {
      this.roleDepListData.depid = this.depid;
      const data = await select_Role_ByPageAndCount(this.roleDepListData);
      if (data.code !== 200) {
        return this.$message.error('用户角色请求错误');
      }
      this.tableData = data.result;
      this.roleDepCount = data.count;
    },
    async getadduserList() {
      this.addlistData.roleid = this.roleid;
      this.addlistData.menuid = this.menuid;
      const data = await menuAuthSelectByPageForRole(this.addlistData);
      if (data.code !== 200) {
        return this.$message.error('菜单权限列表请求错误');
      }
      this.gridData = data.result;
      this.addcount = data.count;
    },
    singleElection(row) {
      this.templateSelection = row.id;
      this.roleid = row.id;
      this.roleDepCheckList = this.tableData.filter(
        (item) => item.id === row.id
      );
    },
    //下拉框选中后自动关闭
    chooseCustom() {
      setTimeout(() => {
        this.$refs.multiSelect.blur();
      }, 50);
    },
    dephandleSizeChange() {
      this.roleDepListData.pageSize = val;
      this.getDepTree();
    },
    dephandleCurrentChange() {
      this.roleDepListData.pageIndex = val;
      this.getDepTree();
    },
    authhandleSizeChange() {
      this.roleDepListData.pageSize = val;
      this.getRoleMenu();
    },
    authhandleCurrentChange() {
      this.roleDepListData.pageIndex = val;
      this.getRoleMenu();
    },
    // æ–°å¢žç”¨æˆ·è¡¨åˆ†é¡µ
    addhandleSizeChange(val) {
      this.addlistData.pageSize = val;
      this.getadduserList();
    },
    // æ–°å¢žç”¨æˆ·è¡¨åˆ†é¡µ
    addhandleCurrentChange(val) {
      this.addlistData.pageIndex = val;
      this.getadduserList();
    },
    addhandleSelectionChange(val) {
      this.addmultipleSelection = val;
    },
    handleSelectionChange(val) {
      this.usermultipleSelection = val;
    },
    adduser() {
      this.dialogTableVisible = true;
      this.getadduserList();
    },
    async deletesUser() {
      let arr = [];
      this.usermultipleSelection.forEach((e) => {
        arr.push(e.id);
      });
      const data = await roleMenuAuthDeletes({ ids: arr.toString() });
      if (data.code !== 200) {
        return this.$message.error('删除失败');
      }
      this.$message({
        message: '删除成功',
        type: 'success',
      });
      this.getRoleMenu();
    },
    addConfirm() {
      this.$confirm('确定是否新增', '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning',
      })
        .then(async () => {
          let arr = [];
          this.addmultipleSelection.forEach((e) => {
            arr.push({ menuAuthId: e.id, roleid: this.roleid });
          });
          const data = await roleMenuAuthInserts(arr);
          if (data.code !== 200) {
            return this.$message.error('新增失败');
          }
          this.$message({
            type: 'success',
            message: '新增成功!',
          });
          this.dialogTableVisible = false;
          this.getRoleMenu();
        })
        .catch(() => {});
    },
  },
  created() {
    this.getDepTree();
    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>
src/views/AuthorizationManagement/roleResAuthorization.vue
@@ -103,7 +103,9 @@
          align-items: center;
        "
      >
        <span> {{ $t('operatManage.UserRoleAuthorizationObj.ResTable') }}</span>
        <span>
          {{ $t('operatManage.UserRoleAuthorizationObj.userTable') }}</span
        >
        <div class="btn" style="margin-left: auto">
          <el-button
            type="primary"
@@ -411,6 +413,7 @@
      if (data.code !== 200) {
        return this.$message.error('新增资源列表请求错误');
      }
      debugger;
      this.gridData = data.result;
      this.addcount = data.count;
    },