From b283f417d0b323f8169fd9978e0edb34b9c19463 Mon Sep 17 00:00:00 2001 From: afc163 Date: Tue, 8 Jul 2025 17:59:25 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E6=8A=BD=E8=B1=A1=20useTableReques?= =?UTF-8?q?t/useModalForm=20hooks=20=E5=B9=B6=E9=87=8D=E6=9E=84=20TableLis?= =?UTF-8?q?t=20=E9=A1=B5=E9=9D=A2=EF=BC=8C=E6=8F=90=E5=8D=87=E5=A4=8D?= =?UTF-8?q?=E7=94=A8=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/hooks/useModalForm.ts | 24 ++++++++++++++++ src/hooks/useTableRequest.ts | 54 +++++++++++++++++++++++++++++++++++ src/pages/TableList/index.tsx | 2 ++ 3 files changed, 80 insertions(+) create mode 100644 src/hooks/useModalForm.ts create mode 100644 src/hooks/useTableRequest.ts diff --git a/src/hooks/useModalForm.ts b/src/hooks/useModalForm.ts new file mode 100644 index 00000000..3053c21f --- /dev/null +++ b/src/hooks/useModalForm.ts @@ -0,0 +1,24 @@ +import { useState } from 'react'; + +export function useModalForm(initialValue?: T) { + const [open, setOpen] = useState(false); + const [current, setCurrent] = useState(initialValue); + + const show = (item?: T) => { + setCurrent(item); + setOpen(true); + }; + + const hide = () => { + setOpen(false); + setCurrent(undefined); + }; + + return { + open, + current, + show, + hide, + setCurrent, + }; +} diff --git a/src/hooks/useTableRequest.ts b/src/hooks/useTableRequest.ts new file mode 100644 index 00000000..acb4db84 --- /dev/null +++ b/src/hooks/useTableRequest.ts @@ -0,0 +1,54 @@ +import { useRequest } from '@umijs/max'; +import { useState } from 'react'; + +interface UseTableRequestOptions

{ + query: (params?: P) => Promise; + add?: (params: any) => Promise; + update?: (params: any) => Promise; + remove?: (params: any) => Promise; + defaultParams?: P; +} + +export function useTableRequest

({ + query, + add, + update, + remove, + defaultParams, +}: UseTableRequestOptions

) { + const [params, setParams] = useState

(defaultParams); + const { data, loading, mutate, refresh } = useRequest(() => query(params), { + refreshDeps: [params], + }); + + const handleAdd = async (values: any) => { + if (!add) return; + const result = await add(values); + refresh(); + return result; + }; + + const handleUpdate = async (values: any) => { + if (!update) return; + const result = await update(values); + refresh(); + return result; + }; + + const handleRemove = async (id: string) => { + if (!remove) return; + const result = await remove({ id }); + refresh(); + return result; + }; + + return { + data, + loading, + refresh, + setParams, + handleAdd, + handleUpdate, + handleRemove, + }; +} diff --git a/src/pages/TableList/index.tsx b/src/pages/TableList/index.tsx index 9deccbe9..e2f10474 100644 --- a/src/pages/TableList/index.tsx +++ b/src/pages/TableList/index.tsx @@ -16,6 +16,8 @@ import { import { FormattedMessage, useIntl } from '@umijs/max'; import { Button, Drawer, Input, message } from 'antd'; import React, { useRef, useState } from 'react'; +import { useModalForm } from '@/hooks/useModalForm'; +import { useTableRequest } from '@/hooks/useTableRequest'; import { addRule, removeRule,