From 6a3394bdc5700024521b5d6c3131acbc3b327a2d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90Li?= <15040126243@163.com> Date: Fri, 17 Apr 2026 15:09:17 +0800 Subject: [PATCH] =?UTF-8?q?update=20=E4=BC=98=E5=8C=96=20=E9=87=8D?= =?UTF-8?q?=E6=9E=84=E6=8A=BD=E5=87=BA=E4=B8=80=E4=BA=9B=E5=B8=B8=E7=94=A8?= =?UTF-8?q?hooks=E7=BB=84=E4=BB=B6=E7=AE=80=E5=8C=96=E9=A1=B5=E9=9D=A2?= =?UTF-8?q?=E7=BC=96=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/hooks/async/useLoading.ts | 22 +++ src/hooks/dialog/useDialogState.ts | 33 +++++ src/hooks/dialog/useFormDialog.ts | 42 ++++++ src/hooks/form/useSearchReset.ts | 43 ++++++ src/hooks/form/useSearchToggle.ts | 17 +++ src/hooks/table/useTableSelection.ts | 33 +++++ src/hooks/tree/useTreeCollapsed.ts | 17 +++ src/views/demo/demo/index.vue | 72 +++++----- src/views/demo/tree/index.vue | 67 +++++---- src/views/monitor/logininfo/index.vue | 54 ++++---- src/views/monitor/operlog/index.vue | 43 +++--- src/views/system/client/index.vue | 92 ++++++------- src/views/system/config/index.vue | 75 +++++----- src/views/system/dept/index.vue | 62 +++++---- src/views/system/menu/index.vue | 105 +++++++------- src/views/system/notice/index.vue | 75 +++++----- src/views/system/oss/config.vue | 73 +++++----- src/views/system/oss/index.vue | 89 ++++++------ src/views/system/post/index.vue | 88 ++++++------ src/views/system/role/authUser.vue | 37 +++-- src/views/system/role/index.vue | 72 +++++----- src/views/system/user/index.vue | 75 +++++----- src/views/tool/gen/index.vue | 53 ++++--- src/views/workflow/category/index.vue | 65 +++++---- src/views/workflow/leave/index.vue | 48 ++++--- .../workflow/processDefinition/index.vue | 129 +++++++++--------- src/views/workflow/processInstance/index.vue | 81 +++++------ src/views/workflow/spel/index.vue | 94 ++++++------- src/views/workflow/task/allTaskWaiting.vue | 61 ++++----- src/views/workflow/task/myDocument.vue | 62 ++++----- src/views/workflow/task/taskCopyList.vue | 45 +++--- src/views/workflow/task/taskFinish.vue | 53 ++++--- src/views/workflow/task/taskWaiting.vue | 53 ++++--- 33 files changed, 1062 insertions(+), 968 deletions(-) create mode 100644 src/hooks/async/useLoading.ts create mode 100644 src/hooks/dialog/useDialogState.ts create mode 100644 src/hooks/dialog/useFormDialog.ts create mode 100644 src/hooks/form/useSearchReset.ts create mode 100644 src/hooks/form/useSearchToggle.ts create mode 100644 src/hooks/table/useTableSelection.ts create mode 100644 src/hooks/tree/useTreeCollapsed.ts diff --git a/src/hooks/async/useLoading.ts b/src/hooks/async/useLoading.ts new file mode 100644 index 0000000..19a2178 --- /dev/null +++ b/src/hooks/async/useLoading.ts @@ -0,0 +1,22 @@ +export function useLoading(initialValue = false) { + const loading = ref(initialValue); + + const setLoading = (value: boolean) => { + loading.value = value; + }; + + const withLoading = async (task: () => Promise) => { + loading.value = true; + try { + return await task(); + } finally { + loading.value = false; + } + }; + + return { + loading, + setLoading, + withLoading + }; +} diff --git a/src/hooks/dialog/useDialogState.ts b/src/hooks/dialog/useDialogState.ts new file mode 100644 index 0000000..015bffa --- /dev/null +++ b/src/hooks/dialog/useDialogState.ts @@ -0,0 +1,33 @@ +export function useDialogState(initialTitle = '') { + const dialog = reactive({ + visible: false, + title: initialTitle + }); + + const openDialog = (title?: string) => { + if (title !== undefined) { + dialog.title = title; + } + dialog.visible = true; + }; + + const closeDialog = () => { + dialog.visible = false; + }; + + const toggleDialog = () => { + dialog.visible = !dialog.visible; + }; + + const setTitle = (title: string) => { + dialog.title = title; + }; + + return { + dialog, + openDialog, + closeDialog, + toggleDialog, + setTitle + }; +} diff --git a/src/hooks/dialog/useFormDialog.ts b/src/hooks/dialog/useFormDialog.ts new file mode 100644 index 0000000..c8916d3 --- /dev/null +++ b/src/hooks/dialog/useFormDialog.ts @@ -0,0 +1,42 @@ +import type { Ref } from 'vue'; +import { useDialogState } from './useDialogState'; + +interface UseFormDialogOptions> { + form: Ref; + formRef?: Ref; + initialFormData: T; + initialTitle?: string; +} + +export function useFormDialog>(options: UseFormDialogOptions) { + const { form, formRef, initialFormData, initialTitle } = options; + const { dialog, openDialog, closeDialog, setTitle } = useDialogState(initialTitle); + + const resetForm = () => { + form.value = { ...initialFormData }; + formRef?.value?.resetFields(); + formRef?.value?.clearValidate?.(); + }; + + const openFormDialog = (title?: string) => { + resetForm(); + openDialog(title); + }; + + const showDialog = (title?: string) => { + openDialog(title); + }; + + const closeFormDialog = () => { + closeDialog(); + }; + + return { + dialog, + resetForm, + openDialog: openFormDialog, + showDialog, + closeDialog: closeFormDialog, + setTitle + }; +} diff --git a/src/hooks/form/useSearchReset.ts b/src/hooks/form/useSearchReset.ts new file mode 100644 index 0000000..8c261d3 --- /dev/null +++ b/src/hooks/form/useSearchReset.ts @@ -0,0 +1,43 @@ +import type { Ref } from 'vue'; + +interface UseSearchResetOptions> { + queryFormRef: Ref; + queryParams?: Ref; + pageNumKey?: keyof T; + pageSizeKey?: keyof T; + initialPageNum?: number; + initialPageSize?: number; + resetExtras?: () => void; + afterReset?: () => void; +} + +export function useSearchReset>(options: UseSearchResetOptions) { + const { + queryFormRef, + queryParams, + pageNumKey, + pageSizeKey, + initialPageNum = 1, + initialPageSize, + resetExtras, + afterReset + } = options; + + const resetQuery = () => { + queryFormRef.value?.resetFields(); + if (queryParams?.value) { + if (pageNumKey) { + queryParams.value[pageNumKey] = initialPageNum as T[keyof T]; + } + if (pageSizeKey && initialPageSize !== undefined) { + queryParams.value[pageSizeKey] = initialPageSize as T[keyof T]; + } + } + resetExtras?.(); + afterReset?.(); + }; + + return { + resetQuery + }; +} diff --git a/src/hooks/form/useSearchToggle.ts b/src/hooks/form/useSearchToggle.ts new file mode 100644 index 0000000..9c89d0a --- /dev/null +++ b/src/hooks/form/useSearchToggle.ts @@ -0,0 +1,17 @@ +export function useSearchToggle(initialValue = true) { + const showSearch = ref(initialValue); + + const toggleSearch = () => { + showSearch.value = !showSearch.value; + }; + + const setShowSearch = (value: boolean) => { + showSearch.value = value; + }; + + return { + showSearch, + toggleSearch, + setShowSearch + }; +} diff --git a/src/hooks/table/useTableSelection.ts b/src/hooks/table/useTableSelection.ts new file mode 100644 index 0000000..739e19d --- /dev/null +++ b/src/hooks/table/useTableSelection.ts @@ -0,0 +1,33 @@ +const isSelectableId = (value: unknown): value is string | number => { + return typeof value === 'string' || typeof value === 'number'; +}; + +export function useTableSelection(getRowId: (row: T) => ID) { + const ids = ref([]); + const selectedRows = ref([]); + const single = ref(true); + const multiple = ref(true); + + const handleSelectionChange = (selection: T[]) => { + selectedRows.value = selection; + ids.value = selection.map(getRowId).filter(isSelectableId) as ID[]; + single.value = selection.length !== 1; + multiple.value = selection.length === 0; + }; + + const clearSelection = () => { + selectedRows.value = []; + ids.value = []; + single.value = true; + multiple.value = true; + }; + + return { + ids, + selectedRows, + single, + multiple, + handleSelectionChange, + clearSelection + }; +} diff --git a/src/hooks/tree/useTreeCollapsed.ts b/src/hooks/tree/useTreeCollapsed.ts new file mode 100644 index 0000000..8e298eb --- /dev/null +++ b/src/hooks/tree/useTreeCollapsed.ts @@ -0,0 +1,17 @@ +export function useTreeCollapsed(initialValue = false) { + const treeCollapsed = ref(initialValue); + + const toggleCollapsed = () => { + treeCollapsed.value = !treeCollapsed.value; + }; + + const setCollapsed = (value: boolean) => { + treeCollapsed.value = value; + }; + + return { + treeCollapsed, + toggleCollapsed, + setCollapsed + }; +} diff --git a/src/views/demo/demo/index.vue b/src/views/demo/demo/index.vue index b99dc7b..80a1a11 100644 --- a/src/views/demo/demo/index.vue +++ b/src/views/demo/demo/index.vue @@ -138,26 +138,23 @@