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