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))