From 5e84ffa6a26ee7d77702aeb539076822ef5d596d Mon Sep 17 00:00:00 2001 From: yangsy Date: Tue, 13 Jan 2026 13:19:34 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=AE=9A=E6=97=B6=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=E7=94=A8=E6=88=B7=E6=9D=83=E9=99=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/composables/index.ts | 1 + src/composables/query/index.ts | 1 + .../query/use-user-permissions-query.ts | 55 +++++++++++++++++++ src/constants/query.ts | 1 + src/layouts/app-layout.vue | 3 +- 5 files changed, 60 insertions(+), 1 deletion(-) create mode 100644 src/composables/query/use-user-permissions-query.ts diff --git a/src/composables/index.ts b/src/composables/index.ts index 0e70e34..6aa2300 100644 --- a/src/composables/index.ts +++ b/src/composables/index.ts @@ -1,4 +1,5 @@ export * from './alarm'; export * from './device'; +export * from './permission'; export * from './query'; export * from './stomp'; diff --git a/src/composables/query/index.ts b/src/composables/query/index.ts index 0ae6bd7..0647638 100644 --- a/src/composables/query/index.ts +++ b/src/composables/query/index.ts @@ -1,5 +1,6 @@ export * from './use-line-alarms-query'; export * from './use-line-devices-query'; export * from './use-line-stations-query'; +export * from './use-user-permissions-query'; export * from './use-verify-user-query'; export * from './use-version-check-query'; diff --git a/src/composables/query/use-user-permissions-query.ts b/src/composables/query/use-user-permissions-query.ts new file mode 100644 index 0000000..66302bb --- /dev/null +++ b/src/composables/query/use-user-permissions-query.ts @@ -0,0 +1,55 @@ +import { pagePermissionApi } from '@/apis'; +import { USER_PERMISSIONS_QUERY_KEY } from '@/constants'; +import { PERMISSION_TYPE_NAMES } from '@/enums'; +import { usePermissionStore, useSettingStore, useStationStore, useUserStore } from '@/stores'; +import { useQuery, useQueryClient } from '@tanstack/vue-query'; +import { storeToRefs } from 'pinia'; +import { computed, watch } from 'vue'; + +export const useUserPermissionsQuery = () => { + const queryClient = useQueryClient(); + + const settingStore = useSettingStore(); + const { offlineDev } = storeToRefs(settingStore); + + const stationStore = useStationStore(); + const { stations } = storeToRefs(stationStore); + const userStore = useUserStore(); + const { userInfo } = storeToRefs(userStore); + const permissionStore = usePermissionStore(); + + watch(offlineDev, (offline) => { + if (offline) { + queryClient.cancelQueries({ queryKey: [USER_PERMISSIONS_QUERY_KEY] }); + } + }); + + return useQuery({ + queryKey: computed(() => [USER_PERMISSIONS_QUERY_KEY]), + enabled: computed(() => !offlineDev.value), + refetchInterval: 10 * 1000, + queryFn: async ({ signal }) => { + const { employeeId } = userInfo.value ?? {}; + if (!employeeId) return null; + + const { records } = await pagePermissionApi( + { + model: { + employeeId, + }, + extra: {}, + current: 1, + size: Object.keys(PERMISSION_TYPE_NAMES).length * stations.value.length, + sort: 'id', + order: 'ascending', + }, + { + signal, + }, + ); + permissionStore.setPermRecords(records); + + return null; + }, + }); +}; diff --git a/src/constants/query.ts b/src/constants/query.ts index a24597d..cb8ce33 100644 --- a/src/constants/query.ts +++ b/src/constants/query.ts @@ -1,5 +1,6 @@ export const LINE_ALARMS_QUERY_KEY = 'line-alarms'; export const LINE_DEVICES_QUERY_KEY = 'line-devices'; export const LINE_STATIONS_QUERY_KEY = 'line-stations'; +export const USER_PERMISSIONS_QUERY_KEY = 'user-permissions'; export const VERIFY_USER_QUERY_KEY = 'verify-user'; export const VERSION_CHECK_QUERY_KEY = 'version-check'; diff --git a/src/layouts/app-layout.vue b/src/layouts/app-layout.vue index 3e7a7f2..0d589dc 100644 --- a/src/layouts/app-layout.vue +++ b/src/layouts/app-layout.vue @@ -1,6 +1,6 @@