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