diff --git a/clinical-web/src/api/management/roles.ts b/clinical-web/src/api/management/roles.ts index 73c95ee..4718112 100644 --- a/clinical-web/src/api/management/roles.ts +++ b/clinical-web/src/api/management/roles.ts @@ -6,6 +6,7 @@ import type { BackendCollection, CreateRoleRequest, RoleRecord, + RoleQuery, RoleResponseDto, UpdateRoleRequest, } from './types' @@ -21,18 +22,33 @@ function normalizeRole(dto: RoleResponseDto, index: number): RoleRecord { name: dto.name, description: dto.description ?? '—', color: fallbackColors[index % fallbackColors.length], - userCount: dto.userCount ?? 0, + userCount: dto.userCount ?? undefined, status: dto.status ?? 'ENABLED', } } -export function getRoles(): Promise { +function toBackendQuery(query: RoleQuery) { + const params: Record = { + page: Math.max(query.page, 1), + size: Math.min(Math.max(query.pageSize, 1), 200), + } + + if (query.keyword?.trim()) { + params.keyword = query.keyword.trim() + } + + return params +} + +export function getRoles(query: RoleQuery = { page: 1, pageSize: 200 }): Promise { if (useMockData) { return Promise.resolve([]) } return request - .get>>('/v1/roles') + .get>>('/v1/roles', { + params: toBackendQuery(query), + }) .then(unwrapApiResponse) .then((data) => { const records = Array.isArray(data) diff --git a/clinical-web/src/api/management/types.ts b/clinical-web/src/api/management/types.ts index 116b5a9..cd6ac41 100644 --- a/clinical-web/src/api/management/types.ts +++ b/clinical-web/src/api/management/types.ts @@ -126,6 +126,10 @@ export interface RoleRecord { status: RoleStatus } +export interface RoleQuery extends PageQuery { + keyword?: string +} + export type RoleStatus = 'ENABLED' | 'DISABLED' | string export interface RoleResponseDto { @@ -297,6 +301,7 @@ export interface UserQuery extends PageQuery { keyword?: string department?: string status?: UserStatus | 'all' + campusId?: string } export interface UserRecord { diff --git a/clinical-web/src/api/management/users.ts b/clinical-web/src/api/management/users.ts index 3296b3b..dd1bb7d 100644 --- a/clinical-web/src/api/management/users.ts +++ b/clinical-web/src/api/management/users.ts @@ -78,8 +78,8 @@ function mapUser(dto: UserResponseDto): UserRecord { id: dto.id, name: dto.displayName, account: dto.username, - department: dto.departmentId ?? '未指定科室', - role: '未分配角色', + department: dto.departmentId ? '未知科室' : '未指定科室', + role: '未返回角色', status: normalizeStatus(dto.status), lastLoginAt: formatDateTime(dto.lastLoginAt), employeeNo: dto.employeeNo, @@ -116,6 +116,10 @@ function toBackendQuery(query: UserQuery) { params.keyword = query.keyword.trim() } + if (query.campusId) { + params.campusId = query.campusId + } + return params } @@ -141,8 +145,9 @@ export function getUsers(query: UserQuery): Promise { !keyword || [record.name, record.account].join(' ').toLowerCase().includes(keyword) const matchesDepartment = !query.department || record.department === query.department const matchesStatus = !query.status || query.status === 'all' || record.status === query.status + const matchesCampus = !query.campusId || record.campusId === query.campusId - return matchesKeyword && matchesDepartment && matchesStatus + return matchesKeyword && matchesDepartment && matchesStatus && matchesCampus }) const page = Math.max(query.page, 1) const pageSize = Math.max(query.pageSize, 1) diff --git a/clinical-web/src/views/management/users/components/RoleSummaryCards.vue b/clinical-web/src/views/management/users/components/RoleSummaryCards.vue index 3ef6106..fa58cdc 100644 --- a/clinical-web/src/views/management/users/components/RoleSummaryCards.vue +++ b/clinical-web/src/views/management/users/components/RoleSummaryCards.vue @@ -14,7 +14,9 @@ defineProps<{ {{ role.name }}

{{ role.description }}

- {{ role.userCount }} 人 + + {{ role.userCount === null ? '暂无人数统计' : `${role.userCount} 人` }} + diff --git a/clinical-web/src/views/management/users/components/UserEditorDialog.vue b/clinical-web/src/views/management/users/components/UserEditorDialog.vue index e8afeba..068b58c 100644 --- a/clinical-web/src/views/management/users/components/UserEditorDialog.vue +++ b/clinical-web/src/views/management/users/components/UserEditorDialog.vue @@ -52,6 +52,14 @@ function handleCampusChange() { } } +function markPhoneEdited() { + form.phoneMasked = false +} + +function markEmailEdited() { + form.emailMasked = false +} + function submit() { error.message = '' @@ -157,6 +165,7 @@ watch( inputmode="tel" autocomplete="tel" placeholder="请输入手机号" + @input="markPhoneEdited" />

{{ error.message }}

-

当前接口未提供用户角色绑定字段,角色分配暂保留在角色管理流程。

+

+ 用户角色暂未提供绑定接口;接口返回的手机号和邮箱可能已脱敏,未重新填写的脱敏字段不会提交。 +