From 682063c2633cb0909d0e34f95e2be2257071f9bb Mon Sep 17 00:00:00 2001 From: zhouxiaoan <13598091228@139.com> Date: Sat, 20 Apr 2024 12:36:20 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=A2=9E=E5=8A=A0=E5=BF=AB=E6=8D=B7?= =?UTF-8?q?=E9=94=AE=E6=93=8D=E4=BD=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/Search/Search.vue | 2 ++ src/hooks/event/useKeydown.ts | 14 +++++++++++ .../components/Header/ShortcutModal.vue | 2 +- src/layout/components/Header/UserSettings.vue | 23 +++++++++++++++++- src/layout/components/Header/index.vue | 2 +- src/views/final/aside/Aside.vue | 2 ++ src/views/final/comp/FilterModal.vue | 5 ++-- src/views/final/comp/NewFilterModal.vue | 3 +++ src/views/home/aside/Aside.vue | 3 ++- .../home/aside/comp/modals/FilterModal.vue | 6 +++-- .../home/aside/comp/modals/NewFilterModal.vue | 3 +++ src/views/task/content/Content.vue | 21 +++++++++++----- src/views/task/modal/NewFilterModal.vue | 3 +++ src/views/worksheet/content/Content.vue | 24 ++++++++++++------- 14 files changed, 91 insertions(+), 22 deletions(-) create mode 100644 src/hooks/event/useKeydown.ts diff --git a/src/components/Search/Search.vue b/src/components/Search/Search.vue index f422b1b..218c1d8 100644 --- a/src/components/Search/Search.vue +++ b/src/components/Search/Search.vue @@ -26,6 +26,8 @@ const inputHandler = debounce((keyword) => { // 搜索 async function handlerSearch(value) { + // 快捷键触发不做接口请求 + if(value === '/') return const res = await getSearchList({ search: value, }) diff --git a/src/hooks/event/useKeydown.ts b/src/hooks/event/useKeydown.ts new file mode 100644 index 0000000..93dddf7 --- /dev/null +++ b/src/hooks/event/useKeydown.ts @@ -0,0 +1,14 @@ +import { inject, onMounted, onUnmounted, ref } from "vue" + +export const useKeydown = (key,handler) => { + const mousetrap = inject('mousetrap') as any + const event = ref() + onMounted(() => { + event.value = mousetrap.bind(key, handler) + + }) + onUnmounted(() => { + event.value.unbind(key, handler) + }) + +} \ No newline at end of file diff --git a/src/layout/components/Header/ShortcutModal.vue b/src/layout/components/Header/ShortcutModal.vue index 2b32541..0dd7e7c 100644 --- a/src/layout/components/Header/ShortcutModal.vue +++ b/src/layout/components/Header/ShortcutModal.vue @@ -76,7 +76,7 @@ defineExpose({
- 进入“AI工单”主页 + 进入“图检审批”主页
diff --git a/src/layout/components/Header/UserSettings.vue b/src/layout/components/Header/UserSettings.vue index 7cd5944..4b85d96 100644 --- a/src/layout/components/Header/UserSettings.vue +++ b/src/layout/components/Header/UserSettings.vue @@ -5,6 +5,18 @@ import { useUser } from "@/store/modules/user"; import { getImgUrl } from "@/utils/urlUtils"; import defaultAvatar from "@/assets/icons/avatar.svg"; +/** + * 用户权限菜单 + */ +interface IUserMenu { + id: number, + name: string, + resKey: string, + resUrl: string + icon: string, + level: number, + parentId: number +} const emit = defineEmits<{ (e: "logout"): void }>(); @@ -16,7 +28,10 @@ const userStore = useUser(); const useInfo = userStore.getUserInfo; const aiDisabled = ref(false); +const userMenus = computed(() => { + return userStore.getUserInfo.frontmenuTList +}) function handleSelect(row) { userStore.updateTenantId(row.key); location.reload(); @@ -25,24 +40,30 @@ function handleSelect(row) { function logIt(e) { return false; } - +function hasPerm(resKey) { + return userMenus.value.some(i => i.resKey === resKey) +} // 一键查看 function goHome(e) { + if (!hasPerm('home_main')) return router.push({ name: "home" }); } // 任务审批 function goTask(e) { + if (!hasPerm('task-main')) return router.push({ name: "task-main" }); } // AI工单 function goWorksheet(e) { + if (!hasPerm('worksheet-main')) return router.push({ name: "worksheet-main" }); } // 任务终审 function goFinal(e) { + if (!hasPerm('final-main')) return router.push({ name: "final-main" }); } diff --git a/src/layout/components/Header/index.vue b/src/layout/components/Header/index.vue index d637dac..5906d7c 100644 --- a/src/layout/components/Header/index.vue +++ b/src/layout/components/Header/index.vue @@ -170,7 +170,7 @@ export default defineComponent({ mousetrap.bind('n r', quillHandler) mousetrap.bind('n t', quillHandler) mousetrap.bind('n n', recycleHandler) - mousetrap.bind('m m', searchHandler) + mousetrap.bind('/', searchHandler) }) const defaultAvatarSrc = ref(defaultAvatar) diff --git a/src/views/final/aside/Aside.vue b/src/views/final/aside/Aside.vue index 80bc3cb..035df9f 100644 --- a/src/views/final/aside/Aside.vue +++ b/src/views/final/aside/Aside.vue @@ -24,6 +24,7 @@ import { asideMap } from '@/config/final' import type { AsideConfig } from '/#/api' import emitter from '@/utils/mitt' import { getFilterList } from '@/api/home/main' +import { useKeydown } from '@/hooks/event/useKeydown' const emit = defineEmits(['inputChange',]) const finalStore = useFinal() @@ -336,6 +337,7 @@ function updateComponent(key, e) { defineExpose({ showSearch, }); +useKeydown('s', () => setShowSearch(true))