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))
diff --git a/src/views/final/comp/FilterModal.vue b/src/views/final/comp/FilterModal.vue
index 82f0cf5..0c771b7 100644
--- a/src/views/final/comp/FilterModal.vue
+++ b/src/views/final/comp/FilterModal.vue
@@ -20,6 +20,7 @@ import { deleteCondition, getConditionList, sort } from '@/api/home/filter'
import type { FilterSearchParam } from '/#/api'
import SvgIcon from '@/components/Icon/SvgIcon.vue'
+import { useKeydown } from '@/hooks/event/useKeydown'
defineOptions({ name: 'FilterModal' })
@@ -242,7 +243,7 @@ function handleClick() {
// show.value = false;
closeModal()
}
-
+useKeydown('n t', handleClick)
let sortTable: Sortable | null = null
const tableRef = ref>()
@@ -391,7 +392,7 @@ function handleOk() {