From e33f2f1edcfb509ee2e4c69c9acbd3ed87e06719 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E7=90=A6?= Date: Thu, 22 Jan 2026 13:46:35 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/web-antd/src/api/core/auth.ts | 55 ++- .../src/views/_core/authentication/login.vue | 329 ++++++++++++------ .../src/views/doctor/settings/api/index.ts | 8 + .../settings/components/SignatureModal.vue | 166 +++++++++ .../src/views/doctor/settings/index.vue | 45 ++- .../src/views/system/admin/api/index.ts | 8 + .../src/views/system/admin/config/table.ts | 8 + .../web-antd/src/views/system/admin/index.vue | 46 ++- .../src/views/system/store/config/form.ts | 2 + 9 files changed, 544 insertions(+), 123 deletions(-) create mode 100644 apps/web-antd/src/views/doctor/settings/components/SignatureModal.vue diff --git a/apps/web-antd/src/api/core/auth.ts b/apps/web-antd/src/api/core/auth.ts index a91359c2..ab681720 100644 --- a/apps/web-antd/src/api/core/auth.ts +++ b/apps/web-antd/src/api/core/auth.ts @@ -3,9 +3,13 @@ import { baseRequestClient, requestClient } from '#/api/request'; export namespace AuthApi { /** 登录接口参数 */ export interface LoginParams { + login_method?: 'phone' | 'login_account' | 'job_number'; // 登录方式类型 password?: string; username?: string; + phone?: string; // 手机号(当login_method为phone时) code?: string; + login_account?: string; // 登录账号(当login_method为login_account时) + job_number?: string; // 工号(当login_method为job_number时) } /** 登录接口返回值 */ @@ -17,25 +21,62 @@ export namespace AuthApi { data: string; status: number; } + + /** 发送验证码返回结果 */ + export interface SendCodeResult { + code?: string; // 开发环境返回验证码 + accounts?: Array<{ + id: number; + login_account: string; + job_number: string; + }>; // 如果手机号绑定多个账号,返回账号列表 + need_select?: boolean; // 是否需要选择账号/工号 + } } /** * 登录 */ export async function loginApi(data: AuthApi.LoginParams) { - return requestClient.post('login', { - phone: data.username, + const params: any = { + login_method: data.login_method || 'phone', // 添加默认值 password: data.password, code: data.code, - }); + }; + + if (data.login_method === 'phone') { + params.phone = data.phone || data.username; + } else if (data.login_method === 'login_account') { + params.login_account = data.login_account; + } else if (data.login_method === 'job_number') { + params.job_number = data.job_number; + } + + return requestClient.post('login', params); } /** * 发送验证码 */ -export async function sendVerificationCode(username: string) { - return requestClient.post('send-verification-code', { - username, - }); +export async function sendVerificationCode(params: { + login_method?: 'phone' | 'login_account' | 'job_number'; + username?: string; + phone?: string; + login_account?: string; + job_number?: string; +}) { + const requestParams: any = { + login_method: params.login_method || 'phone', + }; + + if (params.login_method === 'phone') { + requestParams.phone = params.phone || params.username; + } else if (params.login_method === 'login_account') { + requestParams.login_account = params.login_account; + } else if (params.login_method === 'job_number') { + requestParams.job_number = params.job_number; + } + + return requestClient.post('send-verification-code', requestParams); } /** diff --git a/apps/web-antd/src/views/_core/authentication/login.vue b/apps/web-antd/src/views/_core/authentication/login.vue index fd641d1e..bd895417 100644 --- a/apps/web-antd/src/views/_core/authentication/login.vue +++ b/apps/web-antd/src/views/_core/authentication/login.vue @@ -1,16 +1,15 @@ diff --git a/apps/web-antd/src/views/doctor/settings/api/index.ts b/apps/web-antd/src/views/doctor/settings/api/index.ts index 411048e1..96cf0544 100644 --- a/apps/web-antd/src/views/doctor/settings/api/index.ts +++ b/apps/web-antd/src/views/doctor/settings/api/index.ts @@ -358,3 +358,11 @@ export async function addDoctorMyDiseaseApi(disease_id: number) { export async function deleteDoctorMyDiseaseApi(id: number) { return requestClient.post(`${prefix}delete-my-disease`, { id }); } + +/** + * 更新医生签名 + * @param data 签名数据,包含 sign_image 字段 + */ +export async function updateSignatureApi(data: { sign_image: string }) { + return requestClient.post(`${prefix}update-signature`, data); +} diff --git a/apps/web-antd/src/views/doctor/settings/components/SignatureModal.vue b/apps/web-antd/src/views/doctor/settings/components/SignatureModal.vue new file mode 100644 index 00000000..ddf6bae8 --- /dev/null +++ b/apps/web-antd/src/views/doctor/settings/components/SignatureModal.vue @@ -0,0 +1,166 @@ + + + + + \ No newline at end of file diff --git a/apps/web-antd/src/views/doctor/settings/index.vue b/apps/web-antd/src/views/doctor/settings/index.vue index 97c6e07f..4aa756ba 100644 --- a/apps/web-antd/src/views/doctor/settings/index.vue +++ b/apps/web-antd/src/views/doctor/settings/index.vue @@ -15,6 +15,8 @@ import { useUserStore } from '@vben/stores'; import EditCommonPrescriptionModal from './components/EditCommonPrescriptionModal.vue'; // 常用方新增弹窗组件 import AddCommonPrescriptionModal from './components/AddCommonPrescriptionModal.vue'; +// 签名查看和更新弹窗组件 +import SignatureModal from './components/SignatureModal.vue'; import { Button, @@ -201,6 +203,12 @@ const [AddCommonPrescriptionModals, AddCommonPrescriptionModalApi] = connectedComponent: AddCommonPrescriptionModal, }); +// ==================== 签名查看和更新弹窗 ==================== + +const [SignatureModals, SignatureModalApi] = useVbenModal({ + connectedComponent: SignatureModal, +}); + /** * 打开新增常用方弹窗 */ @@ -296,6 +304,21 @@ const createDoctorOrder = () => { }); }); }; + +/** + * 打开签名查看和更新弹窗 + */ +const handleViewSignature = () => { + const signature = data.value?.identity_info?.sign_image || ''; + SignatureModalApi.setData({ + signature, + onSuccess: () => { + // 刷新医生信息 + getMyInfo(); + }, + }); + SignatureModalApi.open(); +};