zhuangyunsheng 1 rok pred
rodič
commit
caeaaaae86

+ 9 - 6
src/directives/auth.js

@@ -1,12 +1,15 @@
-import tool from '@/utils/tool';
+import { permission } from "@/utils/permission";
 
 /**
  * 用户权限指令
  * @directive 单个权限验证(v-auth="'xxx'")
+ * @directive 多个权限验证,满足一个则显示(v-auth="['xxx','xxx']")
  */
 export default {
-	mounted(el, binding) {
-		let permissions = tool.data.get("PERMISSIONS");
-		if (!permissions.some(v => v === binding.value)) el.parentNode.removeChild(el);
-	}
-}
+    mounted(el, { value }) {
+        if (value) {
+            if (value instanceof Array) value.findIndex(val => permission(val)) === -1 && el.parentNode.removeChild(el);
+            else !permission(value) && el.parentNode.removeChild(el);
+        }
+    }
+}

+ 44 - 44
src/scui.js

@@ -33,53 +33,53 @@ import * as elIcons from "@element-plus/icons-vue"
 import * as scIcons from "./assets/icons"
 
 export default {
-	install(app) {
-		//挂载全局对象
-		app.config.globalProperties.$CONFIG = config;
-		app.config.globalProperties.$TOOL = tool;
-		app.config.globalProperties.$HTTP = http;
-		app.config.globalProperties.$API = api;
+    install(app) {
+        //挂载全局对象
+        app.config.globalProperties.$CONFIG = config;
+        app.config.globalProperties.$TOOL = tool;
+        app.config.globalProperties.$HTTP = http;
+        app.config.globalProperties.$API = api;
 
-		//注册全局组件
-		app.component("scTooltip", scTooltip);
-		app.component("scTable", scTable);
-		app.component("scUpload", scUpload);
-		app.component("scUploadMultiple", scUploadMultiple);
-		app.component("scUploadFile", scUploadFile);
-		app.component("scFormTable", scFormTable);
-		app.component("scTableSelect", scTableSelect);
-		app.component("scPageHeader", scPageHeader);
-		app.component("scDialog", scDialog);
-		app.component("scForm", scForm);
-		app.component("scTitle", scTitle);
-		app.component("scWaterMark", scWaterMark);
-		app.component("scQrCode", scQrCode);
-		app.component("scStatusIndicator", scStatusIndicator);
-		app.component("scTrend", scTrend);
-		app.component("scStatistic", scStatistic);
-		app.component("scEcharts", scEcharts);
-		app.component("dictSelect", dictSelect);
-		app.component("treeSelect", treeSelect);
-		app.component("approveIframe", approveIframe);
+        //注册全局组件
+        app.component("scTooltip", scTooltip);
+        app.component("scTable", scTable);
+        app.component("scUpload", scUpload);
+        app.component("scUploadMultiple", scUploadMultiple);
+        app.component("scUploadFile", scUploadFile);
+        app.component("scFormTable", scFormTable);
+        app.component("scTableSelect", scTableSelect);
+        app.component("scPageHeader", scPageHeader);
+        app.component("scDialog", scDialog);
+        app.component("scForm", scForm);
+        app.component("scTitle", scTitle);
+        app.component("scWaterMark", scWaterMark);
+        app.component("scQrCode", scQrCode);
+        app.component("scStatusIndicator", scStatusIndicator);
+        app.component("scTrend", scTrend);
+        app.component("scStatistic", scStatistic);
+        app.component("scEcharts", scEcharts);
+        app.component("dictSelect", dictSelect);
+        app.component("treeSelect", treeSelect);
+        app.component("approveIframe", approveIframe);
 
-		//注册全局指令
-		app.directive("auth", auth)
-		app.directive("time", time)
-		app.directive("copy", copy)
+        //注册全局指令
+        app.directive("auth", auth)
+        app.directive("time", time)
+        app.directive("copy", copy)
 
-		//统一注册el-icon图标
-		for (let icon in elIcons) {
-			app.component(`ElIcon${icon}`, elIcons[icon])
-		}
-		//统一注册sc-icon图标
-		for (let icon in scIcons.default) {
-			app.component(`ScIcon${icon}`, scIcons.default[icon])
-		}
+        //统一注册el-icon图标
+        for (let icon in elIcons) {
+            app.component(`ElIcon${icon}`, elIcons[icon])
+        }
+        //统一注册sc-icon图标
+        for (let icon in scIcons.default) {
+            app.component(`ScIcon${icon}`, scIcons.default[icon])
+        }
 
-		//关闭async-validator全局控制台警告
-		window.ASYNC_VALIDATOR_NO_WARNING = 1
+        //关闭async-validator全局控制台警告
+        window.ASYNC_VALIDATOR_NO_WARNING = 1
 
-		//全局代码错误捕捉
-		app.config.errorHandler = errorHandler
-	}
+        //全局代码错误捕捉
+        app.config.errorHandler = errorHandler
+    }
 }

+ 6 - 0
src/utils/permission.js

@@ -0,0 +1,6 @@
+import tool from "@/utils/tool";
+
+export function permission(data) {
+    let permissions = tool.data.get("PERMISSIONS");
+    return permissions && permissions.includes(data);
+}

+ 8 - 6
src/views/procurement/process/index.vue

@@ -83,7 +83,7 @@
                 <div class="left-panel">
                     <template v-for="(item, key, index) in stepDic" v-bind:key="index">
                         <el-button v-if="index == 0" type="primary" @click="table_add">发起{{ item }}</el-button>
-                        <el-button v-else type="primary" @click="table_handle(key)">{{ item }}</el-button>
+                        <el-button v-else v-auth="key" type="primary" @click="table_handle(key)">{{ item }}</el-button>
                     </template>
                 </div>
             </el-header>
@@ -125,17 +125,17 @@
                             <template v-if="showBtnGroup(scope.row)">
                                 <el-button text @click="table_detail(scope.row)">提交</el-button><el-divider direction="vertical" />
                                 <el-button text @click="table_detail(scope.row)">编辑</el-button><el-divider direction="vertical" />
-                                <el-button text @click="table_del(scope.row)">删除</el-button><el-divider direction="vertical" />
+                                <el-button text @click="table_del(scope.row)">删除</el-button><el-divider v-auth="Object.keys(stepDic)" direction="vertical" />
                             </template>
                             <template v-else>
-                                <el-button text @click="table_detail(scope.row)">申请详情</el-button><el-divider direction="vertical" />
+                                <el-button text @click="table_detail(scope.row)">申请详情</el-button><el-divider v-auth="Object.keys(stepDic)" direction="vertical" />
                             </template>
                             <el-dropdown trigger="click" @command="table_handle($event, scope.row)">
-                                <el-button text>更多</el-button>
+                                <el-button v-auth="Object.keys(stepDic)" text>更多</el-button>
                                 <template #dropdown>
-                                    <el-dropdown-menu>
+                                    <el-dropdown-menu v-auth="Object.keys(stepDic)">
                                         <template v-for="(item, key, index) in moreDropdown" v-bind:key="index">
-                                            <el-dropdown-item :command="key" :divided="index > 0">{{ item }}</el-dropdown-item>
+                                            <el-dropdown-item v-if="permission(key)" :command="key" :divided="index > 0">{{ item }}</el-dropdown-item>
                                         </template>
                                     </el-dropdown-menu>
                                 </template>
@@ -153,6 +153,7 @@
 
 <script>
 import moment from "moment";
+import { permission } from "@/utils/permission";
 import { column, stepDic } from "./main";
 import { statusDic } from "@/views/procurement/plan/main";
 import applyDetail from "./detail";
@@ -219,6 +220,7 @@ export default {
     },
 
     methods: {
+        permission,
         handlerKey(mode) {
             const modeArray = mode.split("purchase_")[1].split("_");
             const suffixArray = modeArray.slice(1);

+ 2 - 2
src/views/supplier/evaluation/components/detail.vue

@@ -18,9 +18,9 @@
 							<template #default="scope">
 								<template v-if="isEvaluator && scope.row.status == 'evaluate'">
 									<el-button text @click="table_add(scope.row)">评价</el-button>
-									<el-divider v-if="scope.row.status == 'done'" v-auth="'eval.back'" direction="vertical" />
+									<el-divider v-if="scope.row.status == 'done'" v-auth="'eval_back'" direction="vertical" />
 								</template>
-								<el-button v-if="scope.row.status == 'done'" v-auth="'eval.back'" text @click="table_back(scope.row)">退回</el-button>
+								<el-button v-if="scope.row.status == 'done'" v-auth="'eval_back'" text @click="table_back(scope.row)">退回</el-button>
 							</template>
 						</el-table-column>
 					</scTable>

+ 3 - 3
src/views/system/menu/save.vue

@@ -19,9 +19,9 @@
 					</el-form-item>
 					<el-form-item label="类型:" prop="type">
 						<el-radio-group v-model="form.type">
-							<el-radio-button label="目录" value="0"></el-radio-button>
-							<el-radio-button label="菜单" value="1"></el-radio-button>
-							<el-radio-button label="按钮" value="2"></el-radio-button>
+							<el-radio-button label="目录" :value="0"></el-radio-button>
+							<el-radio-button label="菜单" :value="1"></el-radio-button>
+							<el-radio-button label="按钮" :value="2"></el-radio-button>
 						</el-radio-group>
 					</el-form-item>