|
@@ -0,0 +1,206 @@
|
|
|
+<template>
|
|
|
+ <div>
|
|
|
+ <el-dialog
|
|
|
+ class="page-dialog privilege-dialog"
|
|
|
+ :visible.sync="modalIsShow"
|
|
|
+ top="10px"
|
|
|
+ width="1000px"
|
|
|
+ :close-on-click-modal="false"
|
|
|
+ :close-on-press-escape="false"
|
|
|
+ :show-close="false"
|
|
|
+ append-to-body
|
|
|
+ fullscreen
|
|
|
+ @opened="visibleChange"
|
|
|
+ >
|
|
|
+ <div class="box-justify" slot="title">
|
|
|
+ <h3>权限设置-{{ user.name }}</h3>
|
|
|
+ <div>
|
|
|
+ <el-button
|
|
|
+ size="mini"
|
|
|
+ type="primary"
|
|
|
+ :disabled="isSubmit"
|
|
|
+ @click="submit"
|
|
|
+ >确定</el-button
|
|
|
+ >
|
|
|
+ <el-button size="mini" type="danger" plain @click="cancel"
|
|
|
+ >取消</el-button
|
|
|
+ >
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="part-box part-box-pad">
|
|
|
+ <div v-for="item in dataList" :key="item.id" class="privilege-group">
|
|
|
+ <div class="privilege-group-title">
|
|
|
+ <h3>{{ item.title }}</h3>
|
|
|
+ </div>
|
|
|
+ <div class="privilege-group-body">
|
|
|
+ <div
|
|
|
+ v-for="option in item.options"
|
|
|
+ :key="option.code"
|
|
|
+ :class="[
|
|
|
+ 'privilege-item',
|
|
|
+ { 'privilege-item-scope': option.dataPrivilege },
|
|
|
+ ]"
|
|
|
+ >
|
|
|
+ <el-checkbox v-model="option.selected">{{
|
|
|
+ option.name
|
|
|
+ }}</el-checkbox>
|
|
|
+ <privilege-scope-edit
|
|
|
+ v-if="option.dataPrivilege && option.selected"
|
|
|
+ v-model="option.scope"
|
|
|
+ :source-list="getSourceList(option.dataPrivilege)"
|
|
|
+ ></privilege-scope-edit>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </el-dialog>
|
|
|
+ </div>
|
|
|
+</template>
|
|
|
+
|
|
|
+<script>
|
|
|
+import { privilegeConfig } from "@/constants/privilege";
|
|
|
+import PrivilegeScopeEdit from "./PrivilegeScopeEdit.vue";
|
|
|
+import { appList, envList, deployList } from "../../admin/api";
|
|
|
+import { userPermissionQuery, userPermissionSave } from "../api";
|
|
|
+
|
|
|
+export default {
|
|
|
+ name: "modify-privilege",
|
|
|
+ components: { PrivilegeScopeEdit },
|
|
|
+ props: {
|
|
|
+ user: {
|
|
|
+ type: Object,
|
|
|
+ default() {
|
|
|
+ return {};
|
|
|
+ },
|
|
|
+ },
|
|
|
+ },
|
|
|
+ data() {
|
|
|
+ return {
|
|
|
+ modalIsShow: false,
|
|
|
+ dataList: [],
|
|
|
+ curRow: {},
|
|
|
+ sources: {},
|
|
|
+ isSubmit: false,
|
|
|
+ };
|
|
|
+ },
|
|
|
+ mounted() {
|
|
|
+ this.getScources();
|
|
|
+ },
|
|
|
+ methods: {
|
|
|
+ visibleChange() {
|
|
|
+ this.initData();
|
|
|
+ },
|
|
|
+ cancel() {
|
|
|
+ this.modalIsShow = false;
|
|
|
+ },
|
|
|
+ open() {
|
|
|
+ this.modalIsShow = true;
|
|
|
+ },
|
|
|
+ async getScources() {
|
|
|
+ const fetchFuncMap = {
|
|
|
+ app: this.fetchAppList,
|
|
|
+ env: this.fetchEnvList,
|
|
|
+ deploy: this.fetchDeployList,
|
|
|
+ };
|
|
|
+
|
|
|
+ let sources = {};
|
|
|
+ const sourceKeys = Object.keys(fetchFuncMap);
|
|
|
+ for (let i = 0; i < sourceKeys.length; i++) {
|
|
|
+ const sourceKey = sourceKeys[i];
|
|
|
+ sources[sourceKey] = await fetchFuncMap[sourceKey]();
|
|
|
+ }
|
|
|
+ this.sources = sources;
|
|
|
+ },
|
|
|
+ async fetchAppList() {
|
|
|
+ return await appList();
|
|
|
+ },
|
|
|
+ async fetchEnvList() {
|
|
|
+ const data = await envList();
|
|
|
+ return this.parseGroupData(data);
|
|
|
+ },
|
|
|
+ async fetchDeployList() {
|
|
|
+ const data = await deployList();
|
|
|
+ return this.parseGroupData(data);
|
|
|
+ },
|
|
|
+ parseGroupData(data) {
|
|
|
+ let groups = {};
|
|
|
+ let groupId = 1;
|
|
|
+ data.forEach((item) => {
|
|
|
+ if (!groups[item.appCode]) {
|
|
|
+ groups[item.appCode] = {
|
|
|
+ id: groupId++,
|
|
|
+ name: item.appName,
|
|
|
+ code: item.appCode,
|
|
|
+ children: [],
|
|
|
+ };
|
|
|
+ }
|
|
|
+
|
|
|
+ groups[item.appCode].children.push({
|
|
|
+ id: item.id,
|
|
|
+ name: `${item.appName}-${item.name}`,
|
|
|
+ });
|
|
|
+ });
|
|
|
+
|
|
|
+ Object.values(groups).forEach((item) => {
|
|
|
+ item.children.sort((a, b) => a.id - b.id);
|
|
|
+ });
|
|
|
+
|
|
|
+ return Object.values(groups);
|
|
|
+ },
|
|
|
+ getSourceList(dataPrivilege) {
|
|
|
+ const sourceKey = dataPrivilege.split(".")[0];
|
|
|
+ return this.sources[sourceKey] || [];
|
|
|
+ },
|
|
|
+ async initData() {
|
|
|
+ const res = await userPermissionQuery(this.user.id);
|
|
|
+ let userPrivilege = {};
|
|
|
+ const privilegeData = res || [];
|
|
|
+ privilegeData.forEach((item) => {
|
|
|
+ userPrivilege[item.code] = item.scope;
|
|
|
+ });
|
|
|
+
|
|
|
+ let dataList = privilegeConfig.map((item) => {
|
|
|
+ let nitem = { id: this.$randomCode(), title: item.title };
|
|
|
+ nitem.options = item.options.map((option) => {
|
|
|
+ return {
|
|
|
+ ...option,
|
|
|
+ selected: !!userPrivilege[option.code],
|
|
|
+ scope: userPrivilege[option.code] || "*",
|
|
|
+ };
|
|
|
+ });
|
|
|
+ return nitem;
|
|
|
+ });
|
|
|
+ this.dataList = dataList;
|
|
|
+ },
|
|
|
+ getData() {
|
|
|
+ let data = [];
|
|
|
+ this.dataList.forEach((item) => {
|
|
|
+ item.options.forEach((option) => {
|
|
|
+ if (!option.selected) return;
|
|
|
+ data.push({ code: option.code, scope: option.scope });
|
|
|
+ });
|
|
|
+ });
|
|
|
+ return data;
|
|
|
+ },
|
|
|
+ async submit() {
|
|
|
+ const data = this.getData();
|
|
|
+ if (!data.length) {
|
|
|
+ this.$message.error("请设置权限!");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (this.isSubmit) return;
|
|
|
+ this.isSubmit = true;
|
|
|
+ const res = await userPermissionSave({
|
|
|
+ userId: this.user.id,
|
|
|
+ permission: data,
|
|
|
+ }).catch(() => {});
|
|
|
+ this.isSubmit = false;
|
|
|
+ if (!res) return;
|
|
|
+ this.$message.success("设置成功!");
|
|
|
+ this.$emit("modified");
|
|
|
+ this.cancel;
|
|
|
+ },
|
|
|
+ },
|
|
|
+};
|
|
|
+</script>
|