From 8cadf8970e1579aa76ca4e4790800864439c1a4b Mon Sep 17 00:00:00 2001 From: wangziqi Date: Mon, 13 Jul 2026 12:01:38 +0800 Subject: [PATCH] fix(admin): restore teacher profile form values --- apps/admin/src/pages/Users/index.tsx | 8 ++++-- .../user-profile-form.integration.test.ts | 27 +++++++++++++++++++ .../src/pages/Users/user-profile-form.ts | 16 +++++++++++ 3 files changed, 49 insertions(+), 2 deletions(-) create mode 100644 apps/admin/src/pages/Users/user-profile-form.integration.test.ts create mode 100644 apps/admin/src/pages/Users/user-profile-form.ts diff --git a/apps/admin/src/pages/Users/index.tsx b/apps/admin/src/pages/Users/index.tsx index 739285f6..b6684d17 100644 --- a/apps/admin/src/pages/Users/index.tsx +++ b/apps/admin/src/pages/Users/index.tsx @@ -15,6 +15,10 @@ import dayjs from 'dayjs'; import api from '../../api'; import PermissionButton from '../../components/PermissionButton'; import { message } from '../../ui/app-message'; +import { + userProfileResponseToFormValues, + type UserProfileResponse, +} from './user-profile-form'; const UsersPage: React.FC = () => { const [data, setData] = useState([]); @@ -36,8 +40,8 @@ const UsersPage: React.FC = () => { const handleOpenProfile = async (record: any) => { setProfileUser(record); try { - const res: any = await api.get(`/rbac/users/${record.id}/profile`); - profileForm.setFieldsValue(res); + const res = await api.get(`/rbac/users/${record.id}/profile`); + profileForm.setFieldsValue(userProfileResponseToFormValues(res)); } catch { profileForm.setFieldsValue({}); } diff --git a/apps/admin/src/pages/Users/user-profile-form.integration.test.ts b/apps/admin/src/pages/Users/user-profile-form.integration.test.ts new file mode 100644 index 00000000..9455a8db --- /dev/null +++ b/apps/admin/src/pages/Users/user-profile-form.integration.test.ts @@ -0,0 +1,27 @@ +import { describe, expect, it } from 'vitest'; +import { userProfileResponseToFormValues } from './user-profile-form'; + +describe('user profile form mapping', () => { + it('unwraps the nested profile returned by the user profile endpoint', () => { + expect( + userProfileResponseToFormValues({ + id: 9, + username: 'teacher01', + name: '测试教师', + profile: { + joinedAt: '2026-07-01', + qualifications: '教师资格证', + subjects: ['语文', '历史'], + }, + }), + ).toEqual({ + joinedAt: '2026-07-01', + qualifications: '教师资格证', + subjects: ['语文', '历史'], + }); + }); + + it('returns empty form values when the user has no profile', () => { + expect(userProfileResponseToFormValues({ profile: null })).toEqual({}); + }); +}); diff --git a/apps/admin/src/pages/Users/user-profile-form.ts b/apps/admin/src/pages/Users/user-profile-form.ts new file mode 100644 index 00000000..8a600322 --- /dev/null +++ b/apps/admin/src/pages/Users/user-profile-form.ts @@ -0,0 +1,16 @@ +export interface UserProfileFormValues { + joinedAt?: string; + qualifications?: string; + subjects?: string[]; +} + +export interface UserProfileResponse { + id?: number; + username?: string; + name?: string; + profile?: UserProfileFormValues | null; +} + +export const userProfileResponseToFormValues = ( + response: UserProfileResponse, +): UserProfileFormValues => response.profile || {};