From ce4743c5eaa3fe25296a13eaebf7ea1e7ff59849 Mon Sep 17 00:00:00 2001 From: chenhao Date: Tue, 21 Apr 2026 10:00:47 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E6=9B=B4=E6=96=B0=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E9=A1=B5=E9=9D=A2=E7=BB=84=E4=BB=B6=E5=92=8C=E5=88=86?= =?UTF-8?q?=E9=A1=B5=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 优化 `index.tsx` 中的导入和表单字段 - 使用 `Table` 组件替换 `ListTable` 和 `AppPagination` - 添加密码确认字段及其验证规则 - 调整工具栏和表格布局以提高一致性 --- frontend/src/pages/access/users/index.tsx | 87 +++++++++++++---------- 1 file changed, 51 insertions(+), 36 deletions(-) diff --git a/frontend/src/pages/access/users/index.tsx b/frontend/src/pages/access/users/index.tsx index 4690c81..7ab549a 100644 --- a/frontend/src/pages/access/users/index.tsx +++ b/frontend/src/pages/access/users/index.tsx @@ -1,4 +1,4 @@ -import { Avatar, Button, Card, Col, Drawer, Form, Input, Popconfirm, Row, Select, Space, Switch, Tag, TreeSelect, Typography, Upload, message } from "antd"; +import { Avatar, Button, Card, Col, Drawer, Form, Input, Popconfirm, Row, Select, Space, Switch, Table, Tag, TreeSelect, Typography, Upload, message } from "antd"; import type { DefaultOptionType } from "antd/es/select"; import { useEffect, useMemo, useState } from "react"; import { useTranslation } from "react-i18next"; @@ -7,9 +7,8 @@ import { createUser, deleteUser, getUserDetail, listOrgs, listRoles, listTenants import { useDict } from "@/hooks/useDict"; import { usePermission } from "@/hooks/usePermission"; import PageHeader from "@/components/shared/PageHeader"; -import ListTable from "@/components/shared/ListTable/ListTable"; -import AppPagination from "@/components/shared/AppPagination"; import { LOGIN_NAME_PATTERN, sanitizeLoginName } from "@/utils/loginName"; +import { getStandardPagination } from "@/utils/pagination"; import type { SysOrg, SysRole, SysTenant, SysUser } from "@/types"; import "./index.less"; @@ -102,6 +101,7 @@ export default function Users() { const activeTenantId = useMemo(() => Number(localStorage.getItem("activeTenantId") || 0), []); const selectedTenantId = Form.useWatch("tenantId", form); const memberships = (Form.useWatch("memberships", form) || []) as Membership[]; + const passwordValue = Form.useWatch("password", form); const tenantMap = useMemo(() => { const map: Record = {}; @@ -216,6 +216,7 @@ export default function Users() { ...detail, roleIds: roleIds || [], password: "", + confirmPassword: "", tenantId: (detail as any).tenantId || detail.memberships?.[0]?.tenantId, orgId: (detail as any).orgId || detail.memberships?.[0]?.orgId, memberships: detail.memberships || [] @@ -304,24 +305,24 @@ export default function Users() { }, ...(isPlatformMode ? [{ - title: t("users.tenant"), - key: "tenant", - render: (_: any, record: SysUser) => { - if (record.memberships && record.memberships.length > 0) { - return ( -
- {record.memberships.slice(0, 2).map((membership: any) => ( - - {tenantMap[membership.tenantId] || `Tenant ${membership.tenantId}`} - - ))} - {record.memberships.length > 2 && +{record.memberships.length - 2} more} -
- ); - } - return {t("usersExt.noTenant")}; + title: t("users.tenant"), + key: "tenant", + render: (_: any, record: SysUser) => { + if (record.memberships && record.memberships.length > 0) { + return ( +
+ {record.memberships.slice(0, 2).map((membership: any) => ( + + {tenantMap[membership.tenantId] || `Tenant ${membership.tenantId}`} + + ))} + {record.memberships.length > 2 && +{record.memberships.length - 2} more} +
+ ); } - }] + return {t("usersExt.noTenant")}; + } + }] : []), { title: t("users.orgNode"), @@ -385,10 +386,10 @@ export default function Users() {
- {isPlatformMode && } className="users-search-input" style={{ width: 300 }} value={searchText} onChange={(event) => { setSearchText(event.target.value); setCurrent(1); }} allowClear aria-label={t("common.search")} /> - - + {isPlatformMode && } className="users-search-input" style={{ width: 300 }} value={searchText} onChange={(event) => { setSearchText(event.target.value); setCurrent(1); }} allowClear aria-label={t("common.search")} /> + + {can("sys:user:create") && } @@ -396,18 +397,9 @@ export default function Users() { -
- +
+ { setCurrent(page); setPageSize(size); })} /> - { - setCurrent(page); - setPageSize(size); - }} - />