From 1cc8a600d7adb4dbbcfc6a44f355da60c6e22a10 Mon Sep 17 00:00:00 2001 From: "DESKTOP-31IBRMI\\Administrator" <1509326266@qq.com> Date: Thu, 8 Aug 2024 15:26:26 +0800 Subject: [PATCH] feat(projects): perfect user interface --- package.json | 2 - src/hooks/common/table.ts | 7 +- src/pages/manage/user/index.tsx | 17 ++++- .../manage/user/modules/UserOperateDrawer.tsx | 72 +++++++++++++++++-- 4 files changed, 86 insertions(+), 12 deletions(-) diff --git a/package.json b/package.json index 89c37a2..c374c83 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,6 @@ "type": "module", "version": "0.1.0", "private": false, - "homepage": "https://github.com/soybeanjs/soybean-admin-antd", "packageManager": "pnpm@9.1.1", "scripts": { "build": "vite build --mode prod", @@ -74,7 +73,6 @@ "@unocss/transformer-variant-group": "0.61.9", "@unocss/vite": "0.61.9", "@vitejs/plugin-react": "4.3.1", - "@vitejs/plugin-react-swc": "3.7.0", "eslint": "9.8.0", "eslint-plugin-react": "7.35.0", "eslint-plugin-react-hooks": "4.6.2", diff --git a/src/hooks/common/table.ts b/src/hooks/common/table.ts index 74b7daa..f21e1f8 100644 --- a/src/hooks/common/table.ts +++ b/src/hooks/common/table.ts @@ -1,5 +1,4 @@ import type { TablePaginationConfig, TableProps } from 'antd'; -import { cloneDeep } from 'lodash-es'; import { useBoolean, useHookTable } from '@sa/hooks'; import { Form } from 'antd'; import { getIsMobile } from '@/store/slice/app'; @@ -148,12 +147,12 @@ export function useTableOperate( } /** the editing row data */ - const [editingData, setEditingData] = useState(null); + const [editingData, setEditingData] = useState(undefined); function handleEdit(id: T['id']) { setOperateType('edit'); - const findItem = data.find(item => item.id === id) || null; - setEditingData(cloneDeep(findItem)); + const findItem = data.find(item => item.id === id); + setEditingData(findItem); openDrawer(); } diff --git a/src/pages/manage/user/index.tsx b/src/pages/manage/user/index.tsx index befb94e..8058d05 100644 --- a/src/pages/manage/user/index.tsx +++ b/src/pages/manage/user/index.tsx @@ -138,8 +138,18 @@ export function Component() { { showQuickJumper: true } ); - const { checkedRowKeys, rowSelection, onBatchDeleted, onDeleted, handleEdit, handleAdd, drawerVisible, closeDrawer } = - useTableOperate(data, run); + const { + checkedRowKeys, + rowSelection, + onBatchDeleted, + onDeleted, + handleEdit, + handleAdd, + drawerVisible, + closeDrawer, + operateType, + editingData + } = useTableOperate(data, run); useWhyDidYouUpdate('Component', { columns, columnChecks, @@ -202,6 +212,9 @@ export function Component() { > diff --git a/src/pages/manage/user/modules/UserOperateDrawer.tsx b/src/pages/manage/user/modules/UserOperateDrawer.tsx index 51c47a9..828af89 100644 --- a/src/pages/manage/user/modules/UserOperateDrawer.tsx +++ b/src/pages/manage/user/modules/UserOperateDrawer.tsx @@ -5,27 +5,88 @@ import { fetchGetAllRoles } from '@/service/api'; interface Props { open: boolean; + /** the type of operation */ + operateType: AntDesign.TableOperateType; closeDrawer: () => void; + submitted: () => void; + /** the edit row data */ + rowData?: Api.SystemManage.User; } -const UserOperateDrawer: FC = ({ open, closeDrawer }) => { +type Model = Pick< + Api.SystemManage.User, + 'userName' | 'userGender' | 'nickName' | 'userPhone' | 'userEmail' | 'userRoles' | 'status' +>; + +interface OptionsProps { + label: string; + value: string; +} + +const UserOperateDrawer: FC = ({ open, closeDrawer, submitted, operateType, rowData }) => { const { t } = useTranslation(); + const [roleOptions, setRoleOptions] = useState([]); + + const [form] = Form.useForm(); + const onClose = () => { closeDrawer(); }; + + async function getRoleOptions() { + const { error, data } = await fetchGetAllRoles(); + + if (!error) { + const options = data.map(item => ({ + label: item.roleName, + value: item.roleCode + })); + + // end + setRoleOptions(options); + } + } + + async function handleSubmit() { + const data = await form.validateFields(); + console.log(data); + + // request + window.$message?.success(t('common.updateSuccess')); + closeDrawer(); + submitted(); + } + + useUpdateEffect(() => { + if (open) { + form.resetFields(); + getRoleOptions(); + } + }, [open]); + return ( - + } > -
+ = ({ open, closeDrawer }) => { label={t('page.manage.user.userRole')} name="roles" > -