diff --git a/clinical-web/README.md b/clinical-web/README.md index 9b87d1c..6b4b076 100644 --- a/clinical-web/README.md +++ b/clinical-web/README.md @@ -285,3 +285,7 @@ API 请求和响应类型按业务域放在 `api/workbench/types.ts`、`api/mana 真实 PAD 任务的勾选表格、结构化单选/多选、文本与日期项,使用后端 `/v1/sign-tasks/{taskId}/form` 返回的字段定义和规范化正文。每次修改串行保存完整患者答案,使用 `expectedRevision` 防止覆盖其他端的修改;保存失败会阻止签署。系统快照及医护已填项只读。上传签名时带 `signer.answerRevision`,后端完成最终必填校验并固化答案。已签任务和记录详情读取签署快照,下载 PDF 使用同一份答案。 旧文书的勾选表格由后端按行生成独立编号;裸方框按独立勾选处理。需要互斥单选时应在模板中定义 `choice` 及选项。创建任务时单选/勾选项留给患者填写,文本项仍可由医护预填。页面显示“填写内容已保存”后可刷新回显。 + +### 左下角账户菜单 + +点击头像区域可查看个人信息、修改密码或退出登录。个人资料使用 `GET /v1/auth/me`,联系方式通过 `PATCH /v1/auth/me` 保存,仅更新当前登录用户。手机号和邮箱保持脱敏值时不提交,填写完整值表示替换,空字符串表示清空;`expectedVersion` 防止并发覆盖。基本信息只读,ID 优先展示 `employeeId`,无编号时显示用户 UUID。改密遵循后端 12–128 位强密码策略,成功后清理登录态并重新登录。 diff --git a/clinical-web/src/api/auth.ts b/clinical-web/src/api/auth.ts index dd40b20..71bf8e5 100644 --- a/clinical-web/src/api/auth.ts +++ b/clinical-web/src/api/auth.ts @@ -14,6 +14,7 @@ import type { LoginRequest, LoginResponse, PasswordChangeRequest, + ProfileUpdateRequest, } from '@/types/auth' import type { ApiResponse } from '@/types/common' @@ -115,3 +116,12 @@ export function getAuthErrorMessage(error: unknown) { return '登录失败,请稍后重试' } + +export async function updateProfile(payload: ProfileUpdateRequest): Promise { + const response = await request.request>({ + url: '/v1/auth/me', + method: 'PATCH', + data: payload, + }) + return unwrapApiResponse(response) +} diff --git a/clinical-web/src/components/layout/AccountPanel.vue b/clinical-web/src/components/layout/AccountPanel.vue new file mode 100644 index 0000000..3e608cd --- /dev/null +++ b/clinical-web/src/components/layout/AccountPanel.vue @@ -0,0 +1,177 @@ + + + + + diff --git a/clinical-web/src/components/layout/Menu.vue b/clinical-web/src/components/layout/Menu.vue index bf165e6..87283be 100644 --- a/clinical-web/src/components/layout/Menu.vue +++ b/clinical-web/src/components/layout/Menu.vue @@ -1,11 +1,27 @@