diff --git a/apps/web/src/layout/AppLayout.tsx b/apps/web/src/layout/AppLayout.tsx index b888a8e..e52116f 100644 --- a/apps/web/src/layout/AppLayout.tsx +++ b/apps/web/src/layout/AppLayout.tsx @@ -11,7 +11,7 @@ import { PageBreadcrumbs } from './PageBreadcrumbs'; import { SideNav } from './SideNav'; import { TopBar } from './TopBar'; -/** 用户与组织、部门管理为「满高主从布局」,由页面自己控制内部滚动 */ +/** 用户管理、部门管理为「满高主从布局」,由页面自己控制内部滚动 */ function isFlushRoute(pathname: string): boolean { return ( pathname === ROUTES.system.users || diff --git a/apps/web/src/navigation/breadcrumbs.spec.ts b/apps/web/src/navigation/breadcrumbs.spec.ts index 15ea7e2..af50cf0 100644 --- a/apps/web/src/navigation/breadcrumbs.spec.ts +++ b/apps/web/src/navigation/breadcrumbs.spec.ts @@ -32,7 +32,7 @@ describe('面包屑子路由补全', () => { expect(getUserSectionTrail('/system/users/new')?.map((entry) => entry.label)).toEqual([ '工作台', '管理中心', - '用户与组织', + '用户管理', '新建用户', ]); expect(getUserSectionTrail('/system/users/01HZZZZZZZZZZZZZZZZZZZZZZZ')).not.toBeNull(); diff --git a/apps/web/src/navigation/breadcrumbs.ts b/apps/web/src/navigation/breadcrumbs.ts index 8acb7e2..c31f46e 100644 --- a/apps/web/src/navigation/breadcrumbs.ts +++ b/apps/web/src/navigation/breadcrumbs.ts @@ -25,14 +25,14 @@ export function getRoleSectionTrail(pathname: string): BreadcrumbEntry[] | null /** * 用户模块下的子路由(新建 / 详情)不在 nav-config 的菜单项里, - * 这里补齐面包屑:工作台 / 管理中心 / 用户与组织 / 当前页。 + * 这里补齐面包屑:工作台 / 管理中心 / 用户管理 / 当前页。 */ export function getUserSectionTrail(pathname: string): BreadcrumbEntry[] | null { if (pathname === ROUTES.system.userNew) { return [ { key: 'home', label: '工作台', path: ROUTES.home }, { key: 'system', label: '管理中心' }, - { key: 'users', label: '用户与组织', path: ROUTES.system.users }, + { key: 'users', label: '用户管理', path: ROUTES.system.users }, { key: 'user-new', label: '新建用户' }, ]; } @@ -40,7 +40,7 @@ export function getUserSectionTrail(pathname: string): BreadcrumbEntry[] | null return [ { key: 'home', label: '工作台', path: ROUTES.home }, { key: 'system', label: '管理中心' }, - { key: 'users', label: '用户与组织', path: ROUTES.system.users }, + { key: 'users', label: '用户管理', path: ROUTES.system.users }, { key: 'user-detail', label: '成员详情' }, ]; } diff --git a/apps/web/src/navigation/nav-config.spec.ts b/apps/web/src/navigation/nav-config.spec.ts index bb9c143..4e25b1f 100644 --- a/apps/web/src/navigation/nav-config.spec.ts +++ b/apps/web/src/navigation/nav-config.spec.ts @@ -26,8 +26,8 @@ describe('导航配置', () => { expect(modules.map((module) => module.key)).toEqual(['dashboard']); }); - it('子路由(/system/users/new、/system/users/:id)也归属用户与组织', () => { - expect(findActiveNav(NAV_MODULES, '/system/users/new')?.item?.label).toBe('用户与组织'); + it('子路由(/system/users/new、/system/users/:id)也归属用户管理', () => { + expect(findActiveNav(NAV_MODULES, '/system/users/new')?.item?.label).toBe('用户管理'); expect(findActiveNav(NAV_MODULES, '/system/users/01HZZZZZZZZZZZZZZZZZZZZZZZ')?.module.key).toBe( 'system', ); @@ -63,7 +63,7 @@ describe('导航配置', () => { it('面包屑从导航配置派生', () => { expect(getBreadcrumbs(NAV_MODULES, '/')).toEqual([{ key: 'home', label: '工作台', path: '/' }]); const breadcrumbs = getBreadcrumbs(NAV_MODULES, '/system/users'); - expect(breadcrumbs.map((entry) => entry.label)).toEqual(['工作台', '管理中心', '用户与组织']); + expect(breadcrumbs.map((entry) => entry.label)).toEqual(['工作台', '管理中心', '用户管理']); const deptBreadcrumbs = getBreadcrumbs(NAV_MODULES, '/system/departments'); expect(deptBreadcrumbs.map((entry) => entry.label)).toEqual(['工作台', '管理中心', '部门管理']); }); diff --git a/apps/web/src/navigation/nav-config.ts b/apps/web/src/navigation/nav-config.ts index 181948e..ada7ce6 100644 --- a/apps/web/src/navigation/nav-config.ts +++ b/apps/web/src/navigation/nav-config.ts @@ -249,11 +249,11 @@ export const NAV_MODULES: readonly NavModule[] = [ items: [ { key: 'users', - label: '用户与组织', + label: '用户管理', path: '/system/users', icon: IconUser, permission: Permission.USER_VIEW, - description: '账号、组织与登录状态', + description: '成员账号、部门归属与登录状态', }, { key: 'departments', diff --git a/apps/web/src/pages/system/users/UsersPage.tsx b/apps/web/src/pages/system/users/UsersPage.tsx index 4007721..119bebe 100644 --- a/apps/web/src/pages/system/users/UsersPage.tsx +++ b/apps/web/src/pages/system/users/UsersPage.tsx @@ -31,7 +31,7 @@ function UsersHeader(): ReactNode { return (
-

用户与组织

+

用户管理

管理成员账号、角色与客户归属

diff --git a/docs/工程规范/11-前端路由与目录规范.md b/docs/工程规范/11-前端路由与目录规范.md index e911bbe..0316ed7 100644 --- a/docs/工程规范/11-前端路由与目录规范.md +++ b/docs/工程规范/11-前端路由与目录规范.md @@ -63,7 +63,7 @@ apps/web/src/pages/ ├─ assets/ # 资产(对应 /assets) ├─ delivery/ # 交付(对应 /delivery) ├─ system/ # 管理中心(对应 /system) -│ └─ users/ # 用户与组织(对应 /system/users) +│ └─ users/ # 用户管理(对应 /system/users) │ ├─ UsersPage.tsx │ ├─ UserNewPage.tsx │ ├─ UserListPanel.tsx diff --git a/e2e/a1-identity.spec.ts b/e2e/a1-identity.spec.ts index da8ee01..e80cbcb 100644 --- a/e2e/a1-identity.spec.ts +++ b/e2e/a1-identity.spec.ts @@ -408,7 +408,7 @@ async function submitLogin(page: Page): Promise { async function expectUsersPage(page: Page): Promise { await expect(page.getByTestId('app-shell')).toBeVisible(); - await expect(page.getByRole('heading', { name: '用户与组织' })).toBeVisible(); + await expect(page.getByRole('heading', { name: '用户管理' })).toBeVisible(); } async function readSession(page: Page): Promise { @@ -641,7 +641,7 @@ test('④ 停用后旧会话被拒(40301),再登录提示「账号已停 await page.goto('/system/users'); await expect(page).toHaveURL(/\/login/); await expect(page.locator('.lx-login__notice')).toContainText('账号已被停用'); - await expect(page.getByRole('heading', { name: '用户与组织' })).toHaveCount(0); + await expect(page.getByRole('heading', { name: '用户管理' })).toHaveCount(0); await expect .poll( async () =>