Browse Source

权限控制

liujintao 2 tháng trước cách đây
mục cha
commit
e10939c331

+ 17 - 0
src/utils/hasPermission.ts

@@ -0,0 +1,17 @@
+import { BtnPermissionStore } from '/@/plugin/permission/store.permission';
+
+
+const { data } = BtnPermissionStore();
+
+/**
+ * 判断是否有权限
+ * @param permissions /api/system/menu_button/menu_button_all_permission/ 中是否包含传递进来的值
+ */
+export function hasPermission(permissions: string | string[]): boolean {
+    if (typeof permissions === 'string') {
+        return data.includes(permissions);
+    } else if (Array.isArray(permissions)) {
+        return permissions.every(permission => data.includes(permission));
+    }
+    return false;
+}

+ 3 - 1
src/views/company-information/components/CompanyDetail.vue

@@ -14,6 +14,7 @@ import router from '/@/router';
 import { useResponse } from '/@/utils/useResponse';
 import EditDrawer from '../components/EditDrawer.vue';
 import { getFilterOptions } from '/@/views/shop-information/api'
+import {hasPermission} from "/@/utils/hasPermission";
 
 const route = useRoute();
 const companyId = route.query.id;
@@ -227,7 +228,8 @@ function handleQuery() {
 					</span>
         </div>
         <div class="font-semibold">
-          <el-button class="absolute" link style="right: 10px; top: 20px" type="warning" @click="drawerOpen">
+          <el-button class="absolute" link style="right: 10px; top: 20px" type="warning" @click="drawerOpen"
+                     v-if="hasPermission('COMPANY_UPDATE')">
             <el-icon style="font-size: 25px !important">
               <Edit />
             </el-icon>

+ 3 - 1
src/views/company-information/index.vue

@@ -10,6 +10,7 @@ import * as api from './api';
 import InfoCard from './components/InfoCard.vue';
 import { Plus } from '@element-plus/icons-vue';
 import CompanyCreate from '/@/views/company-information/components/CompanyCreate.vue';
+import {hasPermission} from "/@/utils/hasPermission";
 
 
 const cardData = ref();
@@ -46,7 +47,8 @@ function handleRefresh() {
           <el-divider class=" text-3xl" direction="vertical"/>
         </div>
         <span>
-           <el-button :icon="Plus" type="primary" @click="addCompany">添 加</el-button>
+           <el-button :icon="Plus" type="primary" @click="addCompany"
+                      v-if="hasPermission('COMPANY_ADD')">添 加</el-button>
         </span>
       </div>
     </el-card>

+ 7 - 5
src/views/computer-information/components/ComputerDetail.vue

@@ -13,6 +13,7 @@ import { usePagination } from '/@/utils/usePagination';
 import EditComputerInfo from '/@/views/computer-information/components/EditComputerInfo.vue';
 import { ref } from 'vue';
 import { getCurrentTableData, getPastTableData } from '../api';
+import {hasPermission} from "/@/utils/hasPermission";
 
 const route = useRoute();
 const id = route.query.id;
@@ -189,11 +190,6 @@ onMounted(async () => {
 					</div>
 				</template>
 			</el-image>
-      <el-tooltip content="编辑" placement="top">
-        <el-button link type="warning" @click="editItem">
-          <Edit style="width: 1.5em; height: 1.5em; margin-right: 8px" />
-        </el-button>
-      </el-tooltip>
 			<el-col :span="18">
 				<div class="info-container text-lg">
 					<div class="info-column">
@@ -218,6 +214,12 @@ onMounted(async () => {
 						<div class="font-semibold">
 							使用人:
 							<span class="font-medium italic ml-1.5" style="color: #64748b">{{ computerOverview.userName }}</span>
+              <el-tooltip content="编辑" placement="top">
+                <el-button link type="warning" class="absolute" style="right: 10px; top: 20px"
+                           @click="editItem" v-if="hasPermission('COMPUTER_UPDATE')">
+                  <Edit style="width: 1.5em; height: 1.5em;" />
+                </el-button>
+              </el-tooltip>
 						</div>
 						<div class="font-semibold">
 							电脑类型:

+ 3 - 1
src/views/computer-information/components/InfoCard.vue

@@ -14,6 +14,7 @@ import { Picture as IconPicture, Plus, Search } from '@element-plus/icons-vue';
 import * as api from '/@/views/computer-information/api';
 import CreateComputer from '/@/views/computer-information/components/CreateComputer.vue';
 import { ElCol, ElIcon } from 'element-plus';
+import {hasPermission} from "/@/utils/hasPermission";
 
 const router = useRouter();
 // const loading = ref();
@@ -142,7 +143,8 @@ onMounted(() => {
 				<el-input v-model="searchStation" clearable placeholder="位置" style="width: 200px" @change="fetchCardData"></el-input>
 			</div>
 			<span>
-				<el-button :icon="Plus" bg text type="primary" @click="addComputer">添 加</el-button>
+				<el-button :icon="Plus" bg text type="primary" @click="addComputer"
+                   v-if="hasPermission('COMPUTER_CREATE')">添 加</el-button>
 			</span>
 		</div>
 	</el-card>

+ 3 - 3
src/views/shop-information/components/DataTable.vue

@@ -13,7 +13,7 @@ import { useResponse } from '/@/utils/useResponse';
 import { Link,Download,Refresh} from '@element-plus/icons-vue';
 import router from '/@/router';
 import { uesDownloadFile } from '/@/utils/useDownload';
-
+import { hasPermission } from '/@/utils/hasPermission';
 const { tableOptions, handlePageChange } = usePagination(fetchList);
 
 const gridRef = ref();
@@ -23,7 +23,7 @@ const gridOptions: any = reactive({
   round: true,
   stripe: true,
   currentRowHighLight: true,
-  height: 750,
+  height: 680,
   toolbarConfig: {
     size: 'large',
     custom: true,
@@ -180,7 +180,7 @@ function handleNavigate(item: any) {
       </el-row>
     </template>
     <template #toolbar_tools >
-      <el-button circle class="toolbar-btn" @click="handleDownload">
+      <el-button circle class="toolbar-btn" @click="handleDownload" v-if="hasPermission('SHOP_EXPORT')">
         <el-icon>
           <Download />
         </el-icon>

+ 3 - 1
src/views/shop-information/components/PlatformDetail.vue

@@ -14,6 +14,7 @@ import { useTableData } from '/@/utils/useTableData';
 import { usePagination } from '/@/utils/usePagination';
 import { useTableHeight } from '/@/utils/useTableHeight';
 import {uesDownloadFile} from "/@/utils/useDownload";
+import {hasPermission} from "/@/utils/hasPermission";
 
 const gridRef = ref();
 const cardContainer: Ref<HTMLElement | null> = useTemplateRef('cardContainer');
@@ -223,7 +224,8 @@ function handleNavigate(item: any) {
             </el-row>
           </template>
           <template #toolbar_tools >
-            <el-button circle class="toolbar-btn" @click="handleDownload" style="margin-right: 12px">
+            <el-button circle class="toolbar-btn" @click="handleDownload" style="margin-right: 12px"
+                       v-if="hasPermission('SHOP_EXPORT')">
               <el-icon>
                 <Download />
               </el-icon>

+ 3 - 1
src/views/shop-information/components/ShopDetail.vue

@@ -13,6 +13,7 @@ import { useTableData } from '/@/utils/useTableData';
 import { usePagination } from '/@/utils/usePagination';
 import EditDrawer from './EditDrawer.vue';
 import { useTableHeight } from '/@/utils/useTableHeight';
+import {hasPermission} from "/@/utils/hasPermission";
 
 const cardContainer: Ref<HTMLElement | null> = useTemplateRef('cardContainer');
 const { tableHeight } = useTableHeight(cardContainer);
@@ -245,7 +246,8 @@ async function fetchOperator() {
 					</template>
 					<template #toolbar_tools>
 						<div class="mr-2.5">
-							<el-button :disabled="selectedTab != '1'" :icon="Edit" circle plain type="warning" @click="drawerOpen"></el-button>
+							<el-button :disabled="selectedTab != '1'" :icon="Edit" circle plain type="warning"
+                         @click="drawerOpen" v-if="hasPermission('SHOP_EDIT')"></el-button>
 						</div>
 					</template>
 					<template #pager>