Przeglądaj źródła

添加按钮权限

yangdr 1 miesiąc temu
rodzic
commit
823d13b24c

+ 2 - 2
.env.development

@@ -1,4 +1,4 @@
 NODE_ENV = development
-VITE_API_URL = http://173.18.12.205:8005
-# VITE_API_URL = http://192.18.1.242:8000
+# VITE_API_URL = http://173.18.12.205:8005
+VITE_API_URL = http://192.18.1.242:8000
 # VITE_API_URL = http://192.18.1.235:8000

+ 3 - 0
src/components/FileViewer/FileViewer.vue

@@ -185,6 +185,9 @@ onBeforeUnmount(() => {
 
       .file-name {
         font-weight: bold;
+        white-space: nowrap;
+        text-overflow: ellipsis;
+        overflow: hidden;
       }
 
       .close {

+ 4 - 3
src/components/LayoutHeader.vue

@@ -38,14 +38,15 @@ import { useRoute, useRouter } from "vue-router";
 import { getSessionVar, clearSessionVar, saveSessionVar } from '@/utils/session'
 import EditPasswordDialog from "@/components/EditPasswordDialog.vue"
 import { knowledgeGraphAddr } from "@/utils/config"
-const { updateRouteList } = useMenuStore();
+
 const { proxy } = getCurrentInstance()
 const route = useRoute()
 const router = useRouter()
 let timer
 
 const menuRef = ref()
-const { routeList } = useMenuStore()
+const { routeList, updateRouteList } = useMenuStore()
+// console.log(operationPermissions)
 const user = ref({
   id: "0",
   full_name: 'John Doe',
@@ -151,7 +152,7 @@ function handleMenuClick(path) {
   if (/^https?/g.test(path)) {
     const newWindow = window.open(path, '_blank');
     timer = setInterval(() => {
-      newWindow?.postMessage({ type: 'login', username: getSessionVar("full_name"), userID: getSessionVar("user_id") }, "*")
+      newWindow?.postMessage({ type: 'login', username: getSessionVar("full_name"), userId: getSessionVar("user_id") }, "*")
     }, 1000)
     menuRef.value.updateActiveIndex(currentPath.value)
   } else {

+ 1 - 1
src/dialogs/GraphNodeDialog.vue

@@ -21,7 +21,7 @@
 
 <script setup lang="ts">
 
-import { ref, onMounted, defineEmits, nextTick } from 'vue'
+import { ref, onMounted, nextTick } from 'vue'
 import { getNodeNeighbors } from '@/api/GraphApi'
 import svgPanZoom from 'svg-pan-zoom';
 import { ElMessageBox } from 'element-plus';

+ 17 - 5
src/dialogs/OCRDialog.vue

@@ -57,12 +57,13 @@
                 <el-input v-model="knowledgeBase.querySearch" size="large" placeholder="搜索"
                   @keydown.enter="debounceGetKBfileList" :prefix-icon="Search" />
               </span>
-              <span class="add-file" @click="handleSelectedImport()">
+              <span class="add-file" :disabled="knowledgeBase.selectedNum > 0 ? 'false' : 'true'"
+                @click="handleSelectedImport">
                 <span class="text">批量导入</span>
               </span>
             </div>
             <el-scrollbar class="management-content-middle">
-              <el-table :data="knowledgeBase.filesList" ref="KBTableRef">
+              <el-table :data="knowledgeBase.filesList" ref="KBTableRef" @selection-change="handleSelectionChange">
                 <el-table-column :selectable="handleSelectable" type="selection" width="30" />
                 <el-table-column label="#" prop="index" width="50" />
                 <el-table-column prop="file_name" min-width="150" label="标题">
@@ -173,13 +174,15 @@ type knowledgeBaseType = {
   querySearch: string,
   data: kbData[],
   filesList: any[]
+  selectedNum: number
 }
 let knowledgeBase = ref<knowledgeBaseType>({
   visible: false,
   activeId: 0,
   querySearch: "",
   data: [],
-  filesList: []
+  filesList: [],
+  selectedNum: 0,
 })
 function handleKnowledgeBaseClick(data: kbData) {
   knowledgeBase.value.activeId = data.id
@@ -243,6 +246,10 @@ const showDialog = (visible: boolean = true) => {
   dialogFormVisible.value = visible
 }
 
+function handleSelectionChange(newSelection: any[]) {
+  knowledgeBase.value.selectedNum = newSelection.length
+}
+
 // 清除上传文件列表
 const clearFileList = () => {
   fileList.value = []
@@ -310,8 +317,9 @@ function handleSelectable(row: any, index: number) {
   return row.status
 }
 function handleSelectedImport() {
-  const SelectionRows = KBTableRef.value.getSelectionRows()
-  handleImportFiles(toRaw(SelectionRows))
+  const selectionRows = KBTableRef.value.getSelectionRows()
+  if (selectionRows.length == 0) return;
+  handleImportFiles(toRaw(selectionRows))
   knowledgeBase.value.visible = false
   // console.log(SelectionRows)
 }
@@ -740,6 +748,10 @@ footer {
           // vertical-align: middle;
           // margin-left: 10px;
         }
+
+        &[disabled='true'] {
+          opacity: 0.5;
+        }
       }
     }
 

+ 16 - 7
src/stores/menu.js

@@ -41,12 +41,19 @@ export const useMenuStore = defineStore('menu', () => {
   // ])
   const operationPermissions = computed(() => {
     let permissions = {}
-    routeList.value.forEach(i => {
-      if (Array.isArray(i)) {
-        i.children.forEach(j => {
-          permissions[j.key] = true
-        })
+    function traverseTree(node) {
+      // 如果当前节点有子节点,递归遍历每个子节点
+      if (node.children && node.children.length > 0) {
+        node.children.forEach(child => {
+          permissions[child.menu_route] = true
+          // console.log(child.name); // 处理子节点
+          traverseTree(child); // 递归遍历子节点的子节点
+        });
       }
+    }
+
+    routeList.value.forEach(node => {
+      traverseTree(node);
     });
     return permissions
   })
@@ -54,6 +61,8 @@ export const useMenuStore = defineStore('menu', () => {
   const updateRouteList = (newRoutes) => {
     routeList.value = newRoutes; // 更新路由列表
   };
-
-  return { routeList, updateRouteList, operationPermissions }
+  function isOP(code) {
+    return operationPermissions.value[code] ? true : false;
+  }
+  return { routeList, updateRouteList, operationPermissions, isOP }
 })

+ 26 - 21
src/views/KMPlatform/KnowledgeBase/KBM/KnowledgeBaseManagement.vue

@@ -22,7 +22,7 @@
     </div>
     <main>
       <div class="grid-arrange" v-if="arrange === 'grid'">
-        <div class="box">
+        <div class="box" v-if="operationPermissions['a-1']">
           <div>
             <span class="icon" @click="handleCreateKB"><el-icon>
                 <Plus />
@@ -36,7 +36,7 @@
               <i class="folder-icon" style="height: 32px;width:32px;"></i>
             </span>
             <span class="text">
-              <div class="title" @click="toKMById(item.id)">{{ item.name }}</div>
+              <div class="title" @click="operationPermissions['a-2'] ? toKMById(item.id) : null">{{ item.name }}</div>
               <div class="remark">
                 <template v-if="typeof item.tags === 'string'">
                   <el-tag type="info" effect="plain" hit>{{ item.tags }}</el-tag>
@@ -59,7 +59,7 @@
             <span class="add-label">
               <i class="label-icon"></i>
               <i class="label-text">添加标签</i>
-              <i class="circle-plus" @click="handleAddKBTags(index)"> <el-icon>
+              <i class="circle-plus" v-if="operationPermissions['a-5']" @click="handleAddKBTags(index)"> <el-icon>
                   <CirclePlus />
                 </el-icon></i>
             </span>
@@ -74,8 +74,9 @@
                 </span>
               </template>
               <template #default>
-                <div><el-button link @click="handleEditKB(item)">编辑</el-button></div>
-                <div><el-button link type="danger" @click="handleDeleteKB(item.id)">删除</el-button></div>
+                <div v-if="operationPermissions['a-3']"><el-button link @click="handleEditKB(item)">编辑</el-button></div>
+                <div v-if="operationPermissions['a-4']"><el-button link type="danger"
+                    @click="handleDeleteKB(item.id)">删除</el-button></div>
               </template>
             </el-popover>
 
@@ -83,22 +84,25 @@
         </div>
       </div>
       <div class="list-arrange" v-if="arrange === 'list'">
-        <div class="list-arrange-top"><button class="create-kb" @click="handleCreateKB">创建知识库</button></div>
+        <div class="list-arrange-top"><button v-if="operationPermissions['a-1']" class="create-kb"
+            @click="handleCreateKB">创建知识库</button></div>
         <el-table class="elTable" :data="KBData" style="width: 100%; min-width: 0px;">
-          <el-table-column prop="name" label="知识库名称">
+          <el-table-column prop="name" label="知识库名称" min-width="100">
             <template #default="{ row }">
               <div class="list-name">
                 <div class="icon-area">
                   <i class="document-icon"></i>
                 </div>
                 <div class="text-area">
-                  <div class="name" @click="toKMById(row.id)">{{ row.name }}</div>
+                  <div class="name" @click="operationPermissions['a-2'] ? toKMById(row.id) : null">{{
+                    row.name }}
+                  </div>
                   <div class="remark">{{ row.description }}</div>
                 </div>
               </div>
             </template>
           </el-table-column>
-          <el-table-column prop="file_count" label="文件上数量" min-width="120" />
+          <el-table-column prop="file_count" label="文件上数量" width="120" />
           <el-table-column prop="tags" label="知识库标签">
             <template #default="{ row }">
               <i style="white-space: nowrap;text-overflow: ellipsis;">
@@ -106,17 +110,18 @@
               </i>
             </template>
           </el-table-column>
-          <el-table-column prop="created_at" label="知识库创建时间" min-width="150" />
-          <el-table-column prop="creator" label="创建人" />
-          <el-table-column fixed="right" label="操作" width="200">
+          <el-table-column prop="created_at" label="知识库创建时间" width="150" />
+          <el-table-column prop="creator" label="创建人" width="150" />
+          <el-table-column fixed="right" label="操作" width="150">
             <template #default="{ row }">
-              <el-button link type="primary" @click="toKMById(row.id)">
+              <el-button link type="primary" v-if="operationPermissions['a-2']" @click="toKMById(row.id)">
                 查看
               </el-button>
-              <el-button link type="primary" @click="handleEditKB(row)">
+              <el-button link type="primary" v-if="operationPermissions['a-3']" @click="handleEditKB(row)">
                 编辑
               </el-button>
-              <el-button link type="danger" @click="handleDeleteKB(row.id)">删除</el-button>
+              <el-button link type="danger" v-if="operationPermissions['a-4']"
+                @click="handleDeleteKB(row.id)">删除</el-button>
             </template>
           </el-table-column>
         </el-table>
@@ -463,7 +468,7 @@ onMounted(() => {
         height: 200px;
         border: 1px solid #E5E8EC;
         border-radius: 10px;
-        box-shadow: 0px 0px 1px gray;
+        box-shadow: 0px 0px 1px rgb(199, 193, 193);
         box-sizing: border-box;
         padding: 20px 10px 20px 15px;
         display: flex;
@@ -474,7 +479,6 @@ onMounted(() => {
           display: flex;
           flex: 0 0 auto;
 
-
           .icon {
             flex: 0 0 auto;
           }
@@ -560,19 +564,20 @@ onMounted(() => {
           .operation {
             padding: 10px;
             background: #EFEFF0;
-
-
           }
         }
       }
 
       .box1 {
         background-color: #FCFCFD;
+        // transition: all 0.5s linear;
 
-        .icon {
+        // &:hover {
+        //   transform: translate(0px, -10px) scale(1.05);
+        // }
 
+        .icon {
           background-color: #F5F8FF;
-
         }
       }
     }

+ 17 - 16
src/views/KMPlatform/KnowledgeBase/KM/KnowledgeManagement.vue

@@ -18,11 +18,12 @@
               :prefix-icon="Search" />
           </div>
 
-          <span @click="addFileVisible = true" class="add-file"><el-icon color="#fff">
+          <span v-if="operationPermissions['a-6']" @click="addFileVisible = true" class="add-file"><el-icon
+              color="#fff">
               <Plus />
             </el-icon> <i class="text">添加文件</i></span>
-          <span class="add-file" style="margin-right: 10px;" @click="handleBatchEditFiles"><i class="text"
-              style="margin: 0px;">批量修改文件</i></span>
+          <span class="add-file" style="margin-right: 10px;" v-if="operationPermissions['a-10']"
+            @click="handleBatchEditFiles"><i class="text" style="margin: 0px;">批量修改文件</i></span>
         </div>
         <div class="management-content-middle">
           <el-table :data="filesList" ref="fileTableRef" size="large" style="width: 99% ;">
@@ -34,7 +35,9 @@
                   <span class="icon-area">
                     <i :class="`${row.file_type}-icon file-icon`"></i>
                   </span>
-                  <span @click="handleViewFile(row.minio_url, row.file_type, row.file_name)" class="text-area">
+                  <span
+                    @click="operationPermissions['a-7'] ? handleViewFile(row.minio_url, row.file_type, row.file_name) : null"
+                    class="text-area">
                     {{ row.file_name }}
                   </span>
                 </div>
@@ -50,7 +53,7 @@
             <el-table-column prop="year" label="年份" min-width="60" />
             <el-table-column prop="creator" label="上传人" />
             <el-table-column prop="created_at" label="上传时间" width="155" />
-            <el-table-column prop="" label="状态" min-width="70">
+            <el-table-column prop="" label="状态">
               <template #default="{ row, $index }">
                 <div class="status">
                   <span v-if="row.status">
@@ -65,11 +68,12 @@
                     <i class="circle" type="danger"></i>
                     <el-text type="danger">禁用</el-text>
                   </span>
-                  <el-switch v-model="row.status" @change="handleStatusChange(row.id, row.status)"></el-switch>
+                  <el-switch v-if="operationPermissions['a-8']" v-model="row.status"
+                    @change="handleStatusChange(row.id, row.status)"></el-switch>
                 </div>
               </template>
             </el-table-column>
-            <el-table-column prop="created_at" label="下载" width="50">
+            <el-table-column v-if="operationPermissions['a-9']" prop="created_at" label="下载" width="50">
               <template #default="{ row }">
                 <div style="text-align: center;">
                   <i class="document-download-icon" :disabled="row.status ? true : false"
@@ -80,15 +84,10 @@
             <el-table-column fixed="right" label="操作">
               <template #default="{ row }">
                 <div class="operation">
-
-                  <!-- <el-icon size="24">
-                    <Operation />
-                  </el-icon>
-                  <el-icon size="24">
-                    <MoreFilled />
-                  </el-icon> -->
-                  <el-button link type="primary" @click="handleEditFile(toRaw([row]))">修改</el-button>
-                  <el-button link type="danger" @click="handleDeleteFile(row.id)">删除</el-button>
+                  <el-button link type="primary" v-if="operationPermissions['a-10']"
+                    @click="handleEditFile(toRaw([row]))">修改</el-button>
+                  <el-button link type="danger" v-if="operationPermissions['a-11']"
+                    @click="handleDeleteFile(row.id)">删除</el-button>
                 </div>
               </template>
             </el-table-column>
@@ -125,6 +124,8 @@ import { confirmDelete } from "@/utils/confirmation"
 import CreateKBFileDialog from '@/components/CreateKBFileDialog.vue';
 import FileViewer from "@/components/FileViewer/FileViewer.vue"
 import EditKBFileDialog from "@/components/EditKBFileDialog.vue"
+import { useMenuStore } from "@/stores/menu.js"
+const { operationPermissions } = useMenuStore();
 const { proxy } = getCurrentInstance()
 const route = useRoute()
 const router = useRouter()

+ 11 - 5
src/views/KMPlatform/Permission/AccountManage.vue

@@ -18,7 +18,8 @@
       <el-table-column prop="email" label="邮箱" width="400" align="center" />
       <el-table-column fixed="right" label="操作" align="center">
         <template #default="scope">
-          <el-button link type="primary" @click="handleEdit(scope.row)">编辑</el-button>
+          <el-button link type="primary" v-if="operationPermissions['c-2']"
+            @click="handleEdit(scope.row)">编辑</el-button>
         </template>
       </el-table-column>
     </el-table>
@@ -45,7 +46,8 @@
       </template>
     </el-dialog>
     <el-dialog v-model="orgRoleDialogVisible" title="用户机构与角色管理" width="70vw">
-      <el-button type="primary" @click="handleAddOrgRole" style="margin: 10px">新增机构角色</el-button>
+      <el-button type="primary" v-if="operationPermissions['c-2-1']" @click="handleAddOrgRole"
+        style="margin: 10px">新增机构角色</el-button>
       <el-table :data="orgRoleTable" style="width: 100%">
         <el-table-column prop="organ_name" label="机构" />
         <el-table-column prop="role_name" label="角色" />
@@ -53,14 +55,16 @@
           <template #default="scope">
             <span>
               {{ scope.row.data_type === 1 ? '个人' : scope.row.data_type === 2 ? '本机构' : scope.row.data_type === 3 ?
-              '机构及下辖机构' : '' }}
+                '机构及下辖机构' : '' }}
             </span>
           </template>
         </el-table-column>
         <el-table-column label="操作" width="180">
           <template #default="scope">
-            <el-button size="small" @click="handleEditOrgRole(scope.row)">编辑</el-button>
-            <el-button size="small" type="danger" @click="handleDeleteOrgRole(scope.row)">删除</el-button>
+            <el-button size="small" @click="handleEditOrgRole(scope.row)"
+              v-if="operationPermissions['c-2-2']">编辑</el-button>
+            <el-button size="small" type="danger" @click="handleDeleteOrgRole(scope.row)"
+              v-if="operationPermissions['c-2-3']">删除</el-button>
           </template>
         </el-table-column>
       </el-table>
@@ -96,6 +100,8 @@
 
 <script setup>
 import { ref, reactive, getCurrentInstance } from "vue";
+import { useMenuStore } from "@/stores/menu.js"
+const { operationPermissions } = useMenuStore();
 const { proxy } = getCurrentInstance();
 let tableData = ref([]);
 let total = ref(0);

+ 56 - 55
src/views/KMPlatform/Permission/Organizational.vue

@@ -2,17 +2,20 @@
     <el-card>
         <el-row justify="space-between" align="middle" class="mb-2">
             <el-col>
-                <el-button type="primary" @click="openAddDialog">新增机构</el-button>
+                <el-button type="primary" @click="openAddDialog" v-if="operationPermissions['c-3']">新增机构</el-button>
             </el-col>
         </el-row>
-        <el-table :data="orgList" style="width: 100%"  row-key="id" :tree-props="{ children: 'children', hasChildren: 'hasChildren' }">
+        <el-table :data="orgList" style="width: 100%" row-key="id"
+            :tree-props="{ children: 'children', hasChildren: 'hasChildren' }">
             <el-table-column prop="name" label="机构名称" />
             <el-table-column prop="manager" label="管理员" />
             <el-table-column prop="phone" label="管理员电话" />
             <el-table-column label="操作" width="180">
                 <template #default="scope">
-                    <el-button size="small" @click="openEditDialog(scope.row)">编辑</el-button>
-                    <el-button size="small" type="danger" @click="handleDelete(scope.row)">删除</el-button>
+                    <el-button size="small" @click="openEditDialog(scope.row)"
+                        v-if="operationPermissions['c-4']">编辑</el-button>
+                    <el-button size="small" type="danger" @click="handleDelete(scope.row)"
+                        v-if="operationPermissions['c-5']">删除</el-button>
                 </template>
             </el-table-column>
         </el-table>
@@ -24,15 +27,9 @@
                     <el-input v-model="form.name" />
                 </el-form-item>
                 <el-form-item label="父级机构" prop="parent_id">
-                    <el-tree-select
-                        v-model="form.parent_id"
-                        :data="orgList"
-                        :props="{ label: 'name', value: 'id', children: 'children' }"
-                        placeholder="不选则为一级机构"
-                        clearable
-                        check-strictly
-                        style="width: 100%;"
-                    />
+                    <el-tree-select v-model="form.parent_id" :data="orgList"
+                        :props="{ label: 'name', value: 'id', children: 'children' }" placeholder="不选则为一级机构" clearable
+                        check-strictly style="width: 100%;" />
                 </el-form-item>
                 <el-form-item label="负责人" prop="manager">
                     <el-input v-model="form.manager" />
@@ -60,23 +57,25 @@
 </template>
 
 <script setup>
-import { ref, reactive, onMounted,getCurrentInstance } from 'vue'
+import { ref, reactive, onMounted, getCurrentInstance } from 'vue'
 import { ElMessage, ElMessageBox } from 'element-plus'
+import { useMenuStore } from "@/stores/menu.js"
+const { operationPermissions } = useMenuStore();
 const { proxy } = getCurrentInstance()
 
 // 模拟接口
 const fetchOrgList = async () => {
-  const {records} = await proxy.$http.get('/open-platform/organ/loadData')
-  orgList.value =  records
+    const { records } = await proxy.$http.get('/open-platform/organ/loadData')
+    orgList.value = records
 }
 const fetchAdminList = async () => {
-     const {records} = await proxy.$http.get('/open-platform/user/users',{
+    const { records } = await proxy.$http.get('/open-platform/user/users', {
         params: {
-        userName:'',
-        pageNo: 1,
-        pageSize: 100,
+            userName: '',
+            pageNo: 1,
+            pageSize: 100,
         }
-      })
+    })
     return records
 }
 
@@ -136,32 +135,32 @@ const handleSubmit = () => {
         // const admin = adminList.value.find(u => u.account === form.adminAccount)
         if (form.id) {
             // 编辑
-           proxy.$http.post('/open-platform/organ/update', form)
-            .then((res) => {
-                if (res.code === 200) {
-                   fetchOrgList()
-                    ElMessage.success('编辑成功')
-                } else {
+            proxy.$http.post('/open-platform/organ/update', form)
+                .then((res) => {
+                    if (res.code === 200) {
+                        fetchOrgList()
+                        ElMessage.success('编辑成功')
+                    } else {
+                        ElMessage.error('编辑失败')
+                    }
+                })
+                .catch(() => {
                     ElMessage.error('编辑失败')
-                }
-            })
-            .catch(() => {
-                ElMessage.error('编辑失败')
-            })
+                })
         } else {
             // 新增
-           proxy.$http.post('/open-platform/organ/insert', form)
-            .then((res) => {
-                if (res.code === 200) {
-                   fetchOrgList()
-                    ElMessage.success('新增成功')
-                } else {
+            proxy.$http.post('/open-platform/organ/insert', form)
+                .then((res) => {
+                    if (res.code === 200) {
+                        fetchOrgList()
+                        ElMessage.success('新增成功')
+                    } else {
+                        ElMessage.error('新增失败')
+                    }
+                })
+                .catch(() => {
                     ElMessage.error('新增失败')
-                }
-            })
-            .catch(() => {
-                ElMessage.error('新增失败')
-            })
+                })
         }
         dialogVisible.value = false
     })
@@ -169,18 +168,18 @@ const handleSubmit = () => {
 const handleDelete = (row) => {
     ElMessageBox.confirm('确定删除该机构吗?', '提示', { type: 'warning' })
         .then(() => {
-           proxy.$http.post('/open-platform/organ/delete/' + row.id, )
-            .then((res) => {
-                if (res.code === 200) {
-                    fetchOrgList()
-                    ElMessage.success('删除成功')
-                } else {
+            proxy.$http.post('/open-platform/organ/delete/' + row.id,)
+                .then((res) => {
+                    if (res.code === 200) {
+                        fetchOrgList()
+                        ElMessage.success('删除成功')
+                    } else {
+                        ElMessage.error('删除失败')
+                    }
+                })
+                .catch(() => {
                     ElMessage.error('删除失败')
-                }
-            })
-            .catch(() => {
-                ElMessage.error('删除失败')
-            })
+                })
         })
 }
 
@@ -191,5 +190,7 @@ onMounted(async () => {
 </script>
 
 <style scoped>
-.mb-2 { margin-bottom: 16px; }
+.mb-2 {
+    margin-bottom: 16px;
+}
 </style>

+ 4 - 1
src/views/KMPlatform/Permission/RoleManage.vue

@@ -17,7 +17,8 @@
       <el-table-column prop="description" label="描述" width="400" align="center" />
       <el-table-column fixed="right" label="操作" align="center">
         <template #default="scope">
-          <el-button link type="primary" @click="handleChange(scope.row)">编辑</el-button>
+          <el-button link type="primary" v-if="operationPermissions['c-1']"
+            @click="handleChange(scope.row)">编辑</el-button>
         </template>
       </el-table-column>
     </el-table>
@@ -37,6 +38,8 @@
 
 <script setup>
 import { ref, reactive, getCurrentInstance, nextTick } from "vue";
+import { useMenuStore } from "@/stores/menu.js"
+const { operationPermissions } = useMenuStore();
 const { proxy } = getCurrentInstance();
 const defaultProps = {
   children: "children",

+ 8 - 10
src/views/KMPlatform/Permission/permission.vue

@@ -2,12 +2,8 @@
   <div class="kg-builder">
     <div class="aside" style="width: 200px">
       <ul class="menu-list">
-        <li
-          v-for="i in menuList"
-          :class="route.path === i.path ? 'menu-item active' : 'menu-item'"
-          :key="i.name"
-          @click="handleMenuClick(toRaw(i))"
-        >
+        <li v-for="i in menuList" :class="route.path === i.path ? 'menu-item active' : 'menu-item'" :key="i.name"
+          @click="handleMenuClick(toRaw(i))">
           {{ i.title }}
         </li>
       </ul>
@@ -21,6 +17,8 @@
 <script setup>
 import { ref, toRaw } from "vue";
 import { useRoute, useRouter } from "vue-router";
+import { useMenuStore } from "@/stores/menu.js"
+const { operationPermissions } = useMenuStore();
 const route = useRoute();
 const router = useRouter();
 let menuList = ref([
@@ -62,17 +60,17 @@ function handleMenuClick(data) {
     }
 
     .menu-list {
-       margin: 15px 0px 0px;
+      margin: 15px 0px 0px;
 
-         .menu-item {
+      .menu-item {
         cursor: pointer;
         padding: 10px;
         margin-bottom: 5px;
 
         &:is(.active) {
           // color: #0A61F7;
-          color:#40a1ff;
-           background: #eef6ff;
+          color: #40a1ff;
+          background: #eef6ff;
         }
 
         &:hover {

+ 5 - 1
src/views/QueueView.vue

@@ -10,7 +10,8 @@
         </span>
     </el-row>
     <el-row style="margin:15px;">
-        <el-button v-if="allowCreateJob" type="primary" @click="handleCreateJob">新建工作</el-button>
+        <el-button v-if="allowCreateJob && operationPermissions['b-1']" type="primary"
+            @click="handleCreateJob">新建工作</el-button>
         <el-button @click="handleRefreshTable">刷新</el-button>
     </el-row>
 
@@ -124,6 +125,9 @@ import { ElNotification, ElMessageBox } from 'element-plus'
 import { formatTime } from 'element-plus/es/components/countdown/src/utils.mjs'
 import { formatDate } from '@/utils/misc'
 import { getSessionVar, saveSessionVar } from '@/utils/session'
+import { useMenuStore } from "@/stores/menu.js"
+const { operationPermissions } = useMenuStore();
+
 //从路由参数中获取队列ID
 
 const sessionId = ref<any>("")