diff --git a/apps/web-antd/src/views/business/order/product-order/components/cells/OrderUserInfoCell.vue b/apps/web-antd/src/views/business/order/product-order/components/cells/OrderUserInfoCell.vue index 43fa971e..db4c6ae0 100644 --- a/apps/web-antd/src/views/business/order/product-order/components/cells/OrderUserInfoCell.vue +++ b/apps/web-antd/src/views/business/order/product-order/components/cells/OrderUserInfoCell.vue @@ -95,6 +95,64 @@ function handleOpenPatient() { patientName: String(patientName(props.row)), }); } + +/** 付款人类型文案:1用户 2医生 3就诊人 */ +function payUserTypeLabel(row: Record) { + const t = Number(row.pay_user_type || 0); + if (t === 2) return '医生'; + if (t === 3) return '就诊人'; + if (t === 1) return '用户'; + return '—'; +} + +/** 实际付款人用户 ID */ +function resolvePayUserId(row: Record) { + return Number(row.pay_user_id || row.pay_user?.id || 0); +} + +/** 是否展示代付行:有付款人 ID,或至少有类型(医生代付可回落医生名) */ +function hasPayUserInfo(row: Record) { + return resolvePayUserId(row) > 0 || Number(row.pay_user_type || 0) > 0; +} + +/** 代付展示名:优先 pay_user 昵称;医生代付可回落医生名 */ +function payUserDisplayName(row: Record) { + const nick = String(row.pay_user?.nickname || '').trim(); + if (nick) return nick; + if (Number(row.pay_user_type) === 2 && row.doctor?.name) { + return String(row.doctor.name); + } + if (Number(row.pay_user_type) === 3) { + return patientName(row); + } + return '—'; +} + +function getPayUserAvatarSrc(row: Record) { + const raw = String(row.pay_user?.avatarurl ?? '').trim(); + if (!raw) return defaultAvatar; + return resolveAvatarUrl(raw) || defaultAvatar; +} + +/** 点代付用户:按类型打开对应用户/医生/就诊人 */ +function handleOpenPayUser() { + const type = Number(props.row.pay_user_type || 0); + if (type === 2) { + emit('openDoctor', props.row); + return; + } + if (type === 3) { + handleOpenPatient(); + return; + } + const userId = resolvePayUserId(props.row); + if (!userId) return; + emit('openUserPatients', { + userId, + nickname: String(props.row.pay_user?.nickname || ''), + avatarurl: String(props.row.pay_user?.avatarurl || ''), + }); +} diff --git a/apps/web-antd/src/views/doctor/doctor-reception/api/index.ts b/apps/web-antd/src/views/doctor/doctor-reception/api/index.ts index 234c3cd5..6a5f1375 100644 --- a/apps/web-antd/src/views/doctor/doctor-reception/api/index.ts +++ b/apps/web-antd/src/views/doctor/doctor-reception/api/index.ts @@ -547,3 +547,30 @@ export async function goldenFormulaSaveMatchApi(data: { }) { return requestClient.post(`${prefix}golden-formula-save-match`, data); } + +/** + * 医生新建就诊人并自动挂号 + * waive_register_fee=1 时免除挂号费 + */ +export async function createUserPatientApi(data: Record) { + return requestClient.post(`${prefix}create-user-patient`, data); +} + +/** 当前医生未认领就诊人列表 */ +export async function getUnclaimedUserPatientListApi() { + return requestClient.get(`${prefix}unclaimed-user-patient-list`); +} + +/** 就诊人认领小程序码(base64,不上传) */ +export async function getUserPatientClaimQrcodeApi(userPatientId: number) { + return requestClient.get(`${prefix}user-patient-claim-qrcode`, { + params: { user_patient_id: userPatientId }, + }); +} + +/** 医生代支付小程序码(患者端扫码付) */ +export async function getProxyPayQrcodeApi(orderId: number) { + return requestClient.post(`${prefix}proxy-pay-qrcode`, { + order_id: orderId, + }); +} diff --git a/apps/web-antd/src/views/doctor/doctor-reception/components/ClaimQrcodeModal.vue b/apps/web-antd/src/views/doctor/doctor-reception/components/ClaimQrcodeModal.vue new file mode 100644 index 00000000..fb915566 --- /dev/null +++ b/apps/web-antd/src/views/doctor/doctor-reception/components/ClaimQrcodeModal.vue @@ -0,0 +1,110 @@ + + + diff --git a/apps/web-antd/src/views/doctor/doctor-reception/components/CreateUserPatientModal.vue b/apps/web-antd/src/views/doctor/doctor-reception/components/CreateUserPatientModal.vue new file mode 100644 index 00000000..7470e59f --- /dev/null +++ b/apps/web-antd/src/views/doctor/doctor-reception/components/CreateUserPatientModal.vue @@ -0,0 +1,276 @@ + + + diff --git a/apps/web-antd/src/views/doctor/doctor-reception/components/PatientPrescriptionHistoryDrawer.vue b/apps/web-antd/src/views/doctor/doctor-reception/components/PatientPrescriptionHistoryDrawer.vue index c70e2b7d..89a56e1a 100644 --- a/apps/web-antd/src/views/doctor/doctor-reception/components/PatientPrescriptionHistoryDrawer.vue +++ b/apps/web-antd/src/views/doctor/doctor-reception/components/PatientPrescriptionHistoryDrawer.vue @@ -37,6 +37,8 @@ type DrawerData = { allowWithdraw?: boolean; /** 撤回成功后刷新 */ onWithdrawn?: () => void; + /** 医生代支付:打开小程序码 */ + onProxyPay?: (orderId: number) => void; }; const meta = ref({}); @@ -262,6 +264,20 @@ defineExpose({ drawerApi }); > 复用 +