From ddfd2c45dea517f5330a2da02bba253479fe0fe0 Mon Sep 17 00:00:00 2001
From: zhangxiao <898441624@qq.com>
Date: 星期五, 23 八月 2024 19:24:06 +0800
Subject: [PATCH] fix: 权限

---
 src/utils/index.ts                     |    7 +
 src/directive/index.ts                 |    2 
 src/views/dmx/knowledgeLib/addKnow.vue |  124 +++++++++--------
 src/views/dmx/knowledgeLib/edit.vue    |  153 +++++++++++----------
 src/views/dmx/knowledgeLib/index.vue   |   76 ++++++----
 src/views/dmx/knowledgeLib/add.vue     |    2 
 src/directive/hasPermi/index.ts        |   29 ++++
 src/main.ts                            |    5 
 8 files changed, 236 insertions(+), 162 deletions(-)

diff --git a/src/directive/hasPermi/index.ts b/src/directive/hasPermi/index.ts
new file mode 100644
index 0000000..7fc7b70
--- /dev/null
+++ b/src/directive/hasPermi/index.ts
@@ -0,0 +1,29 @@
+import { DirectiveBinding } from 'vue';
+import { useUserStore } from '@/store';
+import { getUserResources } from "@/utils/auth";
+
+function hasPermissionDirective(el: HTMLElement, binding: DirectiveBinding) {
+
+  // 鑾峰彇鐢ㄦ埛鏉冮檺
+  const userStore = useUserStore();
+  const roleData = JSON.parse( getUserResources())
+  const roleBtn = roleData.map((item: any) => item.component)
+  const permission = binding.value as string;
+
+    if (!roleBtn.includes(permission)) {
+      el.style.display = 'none';
+    }
+}
+
+
+
+export default {
+  mounted(el: HTMLElement, binding: DirectiveBinding) {
+  
+    hasPermissionDirective(el, binding);
+  },
+  updated(el: HTMLElement, binding: DirectiveBinding) {
+   
+    hasPermissionDirective(el, binding);
+  },
+};
diff --git a/src/directive/index.ts b/src/directive/index.ts
index 85c567f..9e6d930 100644
--- a/src/directive/index.ts
+++ b/src/directive/index.ts
@@ -1,8 +1,10 @@
 import { App } from 'vue';
 import permission from './permission';
+import hasPermi from './hasPermi';
 
 export default {
   install(Vue: App) {
     Vue.directive('permission', permission);
+    Vue.directive('hasPermi', hasPermi);
   },
 };
diff --git a/src/main.ts b/src/main.ts
index c80c9f9..ec48a6c 100644
--- a/src/main.ts
+++ b/src/main.ts
@@ -8,6 +8,9 @@
 import directive from './directive';
 import './mock';
 import App from './App.vue';
+
+
+
 // Styles are imported via arco-plugin. See config/plugin/arcoStyleImport.ts in the directory for details
 // 鏍峰紡閫氳繃 arco-plugin 鎻掍欢瀵煎叆銆傝瑙佺洰褰曟枃浠� config/plugin/arcoStyleImport.ts
 // https://arco.design/docs/designlab/use-theme-package
@@ -23,8 +26,10 @@
 app.use(store);
 app.use(i18n);
 app.use(globalComponents);
+
 app.use(directive);
 
+
 app.mount('#app');
 
 // 娣诲姞鍏ㄥ眬鏂规硶
diff --git a/src/utils/index.ts b/src/utils/index.ts
index 9af4f41..2a964a7 100644
--- a/src/utils/index.ts
+++ b/src/utils/index.ts
@@ -1,3 +1,5 @@
+
+
 type TargetContext = '_self' | '_parent' | '_blank' | '_top';
 
 export const openWindow = (
@@ -68,5 +70,10 @@
 }
 
 
+
+
 export const documentHeight:number  = window.innerHeight - 320;
 export default null;
+
+
+
diff --git a/src/views/dmx/knowledgeLib/add.vue b/src/views/dmx/knowledgeLib/add.vue
index f8cca58..da877ce 100644
--- a/src/views/dmx/knowledgeLib/add.vue
+++ b/src/views/dmx/knowledgeLib/add.vue
@@ -1,5 +1,5 @@
 <template>
-  <a-button type="primary" @click="handleClick">
+  <a-button type="primary" v-hasPermi="'/kb/data_add'" @click="handleClick">
     <template #icon>
       <icon-plus />
     </template>
diff --git a/src/views/dmx/knowledgeLib/addKnow.vue b/src/views/dmx/knowledgeLib/addKnow.vue
index 1146c01..be82a80 100644
--- a/src/views/dmx/knowledgeLib/addKnow.vue
+++ b/src/views/dmx/knowledgeLib/addKnow.vue
@@ -1,19 +1,32 @@
-
 <template>
-  <a-button type="primary" @click="handleClick" style="margin-left: 10px">
+  <a-button
+    v-hasPermi="'/kb/create'"
+    type="primary"
+    @click="handleClick"
+    style="margin-left: 10px"
+  >
     <template #icon>
       <icon-plus />
     </template>
   </a-button>
-  <a-modal v-model:visible="visible" title="鍒涘缓鐭ヨ瘑搴�" @before-open="handleOpened" @cancel="handleCancel" :footer="false" title-align="start">
-    <a-form ref="formRef" :rules="rules" :model="form" @submit="handleSubmit" >
+  <a-modal
+    v-model:visible="visible"
+    title="鍒涘缓鐭ヨ瘑搴�"
+    @before-open="handleOpened"
+    @cancel="handleCancel"
+    :footer="false"
+    title-align="start"
+  >
+    <a-form ref="formRef" :rules="rules" :model="form" @submit="handleSubmit">
       <a-form-item field="name" label="鍚嶇О">
-        <a-input v-model="form.name" placeholder="璇疯緭鍏ュ悕绉�"/>
+        <a-input v-model="form.name" placeholder="璇疯緭鍏ュ悕绉�" />
       </a-form-item>
       <a-form-item>
-        <div style="width: 100%;text-align: right">
+        <div style="width: 100%; text-align: right">
           <a-button @click="visible = false">鍙栨秷</a-button>
-          <a-button style="margin-left: 10px" type="primary" html-type="submit">纭畾</a-button>
+          <a-button style="margin-left: 10px" type="primary" html-type="submit"
+            >纭畾</a-button
+          >
         </div>
       </a-form-item>
     </a-form>
@@ -21,71 +34,64 @@
 </template>
 
 <script lang="ts" setup>
-import { onMounted ,onBeforeMount, reactive, ref } from "vue";
-import { kbcreate } from "@/api/kbList";
-import { Message } from '@arco-design/web-vue';
+  import { onMounted, onBeforeMount, reactive, ref } from 'vue';
+  import { kbcreate } from '@/api/kbList';
+  import { Message } from '@arco-design/web-vue';
 
-const visible = ref(false);
-const form = reactive({
-  name: '',// 鐢ㄦ埛鍚�
-});
-const formRef = ref(null);
+  const visible = ref(false);
+  const form = reactive({
+    name: '', // 鐢ㄦ埛鍚�
+  });
+  const formRef = ref(null);
 
-const rules = {
-  name: [
-    {
-      required: true,
-      message:'鍚嶇О涓嶅厑璁镐负绌�',
-    },
-  ],
-}
+  const rules = {
+    name: [
+      {
+        required: true,
+        message: '鍚嶇О涓嶅厑璁镐负绌�',
+      },
+    ],
+  };
 
+  const emit = defineEmits(['getknowledge', 'getKbdetail']);
 
-const emit =  defineEmits(['getknowledge','getKbdetail'])
-
-const handleSubmit = async({values, errors}) => {
-  if(errors) return;
+  const handleSubmit = async ({ values, errors }) => {
+    if (errors) return;
     let data = await kbcreate({
       name: values.name,
-    })
-    if(data.code == 0){
+    });
+    if (data.code == 0) {
       visible.value = false;
       Message.success('鍒涘缓鎴愬姛');
       // emit('getKbdetail',data.data.kb_id);
-      emit("getknowledge",data.data.kb_id);
+      emit('getknowledge', data.data.kb_id);
     }
-}
+  };
 
-const handleClick = () => {
-  visible.value = true;
-};
-const handleBeforeOk = (done) => {
-    formRef.value.validate().then(res => {
-      console.log('form:', form)
+  const handleClick = () => {
+    visible.value = true;
+  };
+  const handleBeforeOk = (done) => {
+    formRef.value.validate().then((res) => {
+      console.log('form:', form);
       if (!form.name) {
-        done(false)
-      }else {
+        done(false);
+      } else {
         console.log('璇锋眰鏁版嵁');
-
       }
-    })
-};
-const handleCancel = () => {
-  visible.value = false;
-}
+    });
+  };
+  const handleCancel = () => {
+    visible.value = false;
+  };
 
-const handleOpened =(el) => {
-  Object.assign(form,{
-    name: '',// 鐢ㄦ埛鍚�
-  });
-  formRef.value.resetFields();
-}
+  const handleOpened = (el) => {
+    Object.assign(form, {
+      name: '', // 鐢ㄦ埛鍚�
+    });
+    formRef.value.resetFields();
+  };
 
-onBeforeMount(()=>{
-
-})
-onMounted(()=>{
-
-
-})
-</script>
\ No newline at end of file
+  onBeforeMount(() => {});
+  onMounted(() => {});
+</script>
diff --git a/src/views/dmx/knowledgeLib/edit.vue b/src/views/dmx/knowledgeLib/edit.vue
index 2f45a85..50da19f 100644
--- a/src/views/dmx/knowledgeLib/edit.vue
+++ b/src/views/dmx/knowledgeLib/edit.vue
@@ -1,19 +1,33 @@
-
 <template>
-  <a-button type="text"  :disabled="props.item.run == '1'" @click="handleClick" size="small">
+  <a-button
+    type="text"
+    v-hasPermi="'/kb/rename'"
+    :disabled="props.item.run == '1'"
+    @click="handleClick"
+    size="small"
+  >
     <template #icon>
       <icon-edit />
     </template>
   </a-button>
-  <a-modal v-model:visible="visible" title="閲嶅懡鍚�" @before-open="handleOpened" @cancel="handleCancel" :footer="false" title-align="start">
-    <a-form ref="formRef" :rules="rules" :model="form" @submit="handleSubmit" >
+  <a-modal
+    v-model:visible="visible"
+    title="閲嶅懡鍚�"
+    @before-open="handleOpened"
+    @cancel="handleCancel"
+    :footer="false"
+    title-align="start"
+  >
+    <a-form ref="formRef" :rules="rules" :model="form" @submit="handleSubmit">
       <a-form-item field="name" label="鍚嶇О">
-        <a-input v-model="form.name" placeholder="璇疯緭鍏ュ悕绉�"/>
+        <a-input v-model="form.name" placeholder="璇疯緭鍏ュ悕绉�" />
       </a-form-item>
       <a-form-item>
-        <div style="width: 100%;text-align: right">
+        <div style="width: 100%; text-align: right">
           <a-button @click="visible = false">鍙栨秷</a-button>
-          <a-button style="margin-left: 10px" type="primary" html-type="submit">纭畾</a-button>
+          <a-button style="margin-left: 10px" type="primary" html-type="submit"
+            >纭畾</a-button
+          >
         </div>
       </a-form-item>
     </a-form>
@@ -21,82 +35,73 @@
 </template>
 
 <script lang="ts" setup>
-import { onMounted ,onBeforeMount, reactive, ref } from "vue";
-import {  kbdocumentrename, kbdocumentrm } from "@/api/kbList";
-import { Message } from "@arco-design/web-vue";
+  import { onMounted, onBeforeMount, reactive, ref } from 'vue';
+  import { kbdocumentrename, kbdocumentrm } from '@/api/kbList';
+  import { Message } from '@arco-design/web-vue';
 
-const visible = ref(false);
-const loading = ref(false);
-const form = reactive({
-  name: '',// 鐢ㄦ埛鍚�
-});
-const formRef = ref(null);
+  const visible = ref(false);
+  const loading = ref(false);
+  const form = reactive({
+    name: '', // 鐢ㄦ埛鍚�
+  });
+  const formRef = ref(null);
 
-const rules = {
-  name: [
-    {
-      required: true,
-      message:'鍚嶇О涓嶅厑璁镐负绌�',
-    },
-  ],
-}
+  const rules = {
+    name: [
+      {
+        required: true,
+        message: '鍚嶇О涓嶅厑璁镐负绌�',
+      },
+    ],
+  };
 
+  const props = defineProps(['item']);
 
-const props =  defineProps(['item'])
+  const emit = defineEmits(['upTabdateItem']);
 
-const emit =  defineEmits(['upTabdateItem'])
-
-const handleSubmit = async ({values, errors}) => {
-  if (errors) return;
-  let data = await kbdocumentrename({
-    doc_id:props.item.id,
-    name:form.name
-  })
-  if(data.code == 0){
-    Message.success('鎿嶄綔鎴愬姛');
-    visible.value = false;
-    emit("upTabdateItem",props.item.id,form.name);
-  }
-}
-
-const handleClick = () => {
-  visible.value = true;
-};
-const handleBeforeOk = (done) => {
-  formRef.value.validate().then(res => {
-    console.log('form:', form)
-    if (!form.name) {
-      done(false)
-    }else {
-      console.log('璇锋眰鏁版嵁');
-
+  const handleSubmit = async ({ values, errors }) => {
+    if (errors) return;
+    let data = await kbdocumentrename({
+      doc_id: props.item.id,
+      name: form.name,
+    });
+    if (data.code == 0) {
+      Message.success('鎿嶄綔鎴愬姛');
+      visible.value = false;
+      emit('upTabdateItem', props.item.id, form.name);
     }
-  })
-};
-const handleCancel = () => {
-  visible.value = false;
-}
+  };
 
-const handleOpened =(el) => {
-  console.log(props.item, 'props.item');
-  Object.assign(form,props.item);
-  // formRef.value.resetFields();
-}
+  const handleClick = () => {
+    visible.value = true;
+  };
+  const handleBeforeOk = (done) => {
+    formRef.value.validate().then((res) => {
+      console.log('form:', form);
+      if (!form.name) {
+        done(false);
+      } else {
+        console.log('璇锋眰鏁版嵁');
+      }
+    });
+  };
+  const handleCancel = () => {
+    visible.value = false;
+  };
 
-onBeforeMount(()=>{
+  const handleOpened = (el) => {
+    console.log(props.item, 'props.item');
+    Object.assign(form, props.item);
+    // formRef.value.resetFields();
+  };
 
-})
-onMounted(()=>{
-
-
-})
+  onBeforeMount(() => {});
+  onMounted(() => {});
 </script>
 
 <script lang="ts">
-export default {
-  name: 'add',
-  methods: {
-
-  }
-};
-</script>
\ No newline at end of file
+  export default {
+    name: 'add',
+    methods: {},
+  };
+</script>
diff --git a/src/views/dmx/knowledgeLib/index.vue b/src/views/dmx/knowledgeLib/index.vue
index 4f8fefc..ca8e462 100644
--- a/src/views/dmx/knowledgeLib/index.vue
+++ b/src/views/dmx/knowledgeLib/index.vue
@@ -298,6 +298,7 @@
                   <template #status="{ record }">
                     <a-switch
                       v-model="record.status"
+                      :disabled="!getAut('/kb/data_status')"
                       size="small"
                       checked-value="1"
                       unchecked-value="0"
@@ -438,6 +439,7 @@
                           type="text"
                           size="large"
                           @click="run(record)"
+                          v-hasPermi="'/kb/data_analysis'"
                           :loading="record.loading"
                         >
                           <template #icon>
@@ -469,13 +471,18 @@
                       type="text"
                       :disabled="record.run == '1'"
                       @click="handleClick(record)"
+                      v-hasPermi="'/kb/data_update'"
                       size="small"
                     >
                       <template #icon>
                         <icon-tool />
                       </template>
                     </a-button>
-                    <edit :item="record" @upTabdateItem="upTabdateItem" />
+                    <edit
+                      :item="record"
+                      v-hasPermi="'/kb/rename'"
+                      @upTabdateItem="upTabdateItem"
+                    />
                     <a-popconfirm
                       :content="'纭畾鍒犻櫎鍚�'"
                       type="warning"
@@ -485,6 +492,7 @@
                         type="text"
                         size="small"
                         :disabled="record.run == '1'"
+                        v-hasPermi="'/kb/data_delete'"
                       >
                         <template #icon>
                           <icon-delete />
@@ -494,6 +502,7 @@
                     <a-button
                       type="text"
                       size="small"
+                      v-hasPermi="'/kb/data_download'"
                       :disabled="record.run == '1'"
                       @click="onDownloadDocument(record)"
                     >
@@ -517,7 +526,11 @@
               </a-card>
             </a-scrollbar>
           </a-tab-pane>
-          <a-tab-pane key="2" :title="t('dmx.list.test')">
+          <a-tab-pane
+            key="2"
+            :title="t('dmx.list.test')"
+            v-if="getAut('/kb/test')"
+          >
             <a-scrollbar
               class="rt-container-main"
               :style="{ height: documentHeight + 70 + 'px' }"
@@ -526,7 +539,11 @@
               <test ref="testForm"></test>
             </a-scrollbar>
           </a-tab-pane>
-          <a-tab-pane key="3" :title="t('dmx.list.disposition')">
+          <a-tab-pane
+            key="3"
+            :title="t('dmx.list.disposition')"
+            v-if="getAut('/kb/update')"
+          >
             <a-scrollbar
               class="rt-container-main"
               :style="{ height: documentHeight + 70 + 'px' }"
@@ -595,15 +612,16 @@
 </template>
 
 <script lang="ts" setup>
-import {
-  computed,
-  ref,
-  reactive,
-  watch,
-  nextTick,
-  onBeforeMount,
-  onMounted, onBeforeUnmount
-} from "vue";
+  import {
+    computed,
+    ref,
+    reactive,
+    watch,
+    nextTick,
+    onBeforeMount,
+    onMounted,
+    onBeforeUnmount,
+  } from 'vue';
   import { useI18n } from 'vue-i18n';
   import useLoading from '@/hooks/loading';
   import {
@@ -640,6 +658,7 @@
   import { documentHeight, parseTime } from '@/utils';
   import { deleteLlm } from '@/api/model';
   import { userModelState } from '@/store';
+  import { getUserResources } from '@/utils/auth';
 
   let modelStore = userModelState();
   const httpUrl = modelStore.hrefUrl;
@@ -697,9 +716,7 @@
     parser_idObj: {},
   });
   let tabs = ref([]);
-  let timer = null;// 瀹氭椂鍣�
-
-
+  let timer = null; // 瀹氭椂鍣�
 
   const selectTab = (index, item) => {
     selectedTab.value = index;
@@ -713,6 +730,12 @@
       ...basePagination,
     });
     getKbdetail(kbobj.id);
+  };
+
+  const getAut = (val) => {
+    const roleData = JSON.parse(getUserResources());
+    const roleBtn = roleData.map((item: any) => item.component);
+    return roleBtn.includes(val);
   };
 
   const basePagination: Pagination = {
@@ -844,19 +867,21 @@
         pagination.current = params.page;
         pagination.total = data.data.total;
 
-        if(timer){
+        if (timer) {
           clearInterval(timer);
         }
         // 瀹氭椂鍣ㄦ煡璇㈡枃妗�
         timer = setInterval(async () => {
-          let params = { ...basePagination, kb_id: kbobj.id }
+          let params = { ...basePagination, kb_id: kbobj.id };
           const data = await queryKbDocumentList(params);
           if (data.code == '0') {
-            parser_ids = kbtenantInfo.parser_ids.split(',').reduce((acc, pair) => {
-              const [key, value] = pair.split(':');
-              acc[key] = value;
-              return acc;
-            }, {});
+            parser_ids = kbtenantInfo.parser_ids
+              .split(',')
+              .reduce((acc, pair) => {
+                const [key, value] = pair.split(':');
+                acc[key] = value;
+                return acc;
+              }, {});
             // console.log(parser_ids, 'parser_ids');
             kbtenantInfo.parser_idObj = parser_ids;
             renderData.value = data.data.docs || [];
@@ -870,8 +895,6 @@
             // console.log(renderData.value, 'renderData');
           }
         }, 10000);
-
-
       }
     } catch (err) {
       // you can report use errorHandler or other
@@ -1212,9 +1235,6 @@
         kb_id: tabs.value[selectedTab.value].id,
         ...basePagination,
       });
-
-
-
     } else {
       // Message.error('瑙f瀽澶辫触');
       // row.run = '1';
@@ -1253,7 +1273,7 @@
   });
   onBeforeUnmount(() => {
     clearInterval(timer);
-  })
+  });
 </script>
 
 <style scoped lang="less">

--
Gitblit v1.8.0