diff --git a/common/js/oss-upload.js b/common/js/oss-upload.js index 16eb83f..0309bff 100644 --- a/common/js/oss-upload.js +++ b/common/js/oss-upload.js @@ -38,6 +38,23 @@ function basenameFromPath(filePath) { return parts[parts.length - 1] || ''; } +/** + * 根据文件路径/文件名推断 Content-Type + * 小程序本地临时路径通常没有 MIME,必须按扩展名推断,否则 OSS 会落成 octet-stream + * 与后端 Policy 的 starts-with $Content-Type 配套:表单必须带该字段 + */ +function resolveUploadContentType(filePath, fileName) { + const name = String(fileName || filePath || '').toLowerCase(); + if (name.endsWith('.pdf')) return 'application/pdf'; + if (name.endsWith('.png')) return 'image/png'; + if (name.endsWith('.jpg') || name.endsWith('.jpeg')) return 'image/jpeg'; + if (name.endsWith('.gif')) return 'image/gif'; + if (name.endsWith('.webp')) return 'image/webp'; + if (name.endsWith('.bmp')) return 'image/bmp'; + // 医生端直传以图片为主,缺省按 jpeg,避免浏览器当附件下载 + return 'image/jpeg'; +} + /** * @returns {Promise<{ accessKeyId, policy, signature, host, bucket, key, expire }>} */ @@ -65,6 +82,8 @@ export async function uploadToOss(options) { const signature = await getOssSignatureFromBackend(); const objectName = generateObjectName(filePath); + // Content-Type / Content-Disposition 必须与后端 PostPolicy 条件一致,否则 OSS 报 AccessDenied + // (starts-with 空前缀要求字段存在;inline 便于浏览器预览而非附件下载) const formData = { key: objectName, policy: signature.policy, @@ -72,6 +91,8 @@ export async function uploadToOss(options) { signature: signature.signature, success_action_status: '200', 'x-oss-object-acl': 'public-read', + 'Content-Type': resolveUploadContentType(filePath, fileName), + 'Content-Disposition': 'inline', }; return new Promise((resolve, reject) => { diff --git a/pages/pharmacist/pharmacist-my.vue b/pages/pharmacist/pharmacist-my.vue index 03ffb8a..83af88b 100644 --- a/pages/pharmacist/pharmacist-my.vue +++ b/pages/pharmacist/pharmacist-my.vue @@ -1,4 +1,5 @@ @@ -136,19 +161,6 @@ } diff --git a/subPackages/sub_online_reception/components/MessageBubble.vue b/subPackages/sub_online_reception/components/MessageBubble.vue index dcd0792..478f84c 100644 --- a/subPackages/sub_online_reception/components/MessageBubble.vue +++ b/subPackages/sub_online_reception/components/MessageBubble.vue @@ -131,6 +131,18 @@ 主诉 {{ parsedObj.chief_complaint }} + + 适用症/症状 + {{ parsedObj.illnessInfo }} + + + 是否就诊过 + {{ parsedObj.has_visited === 1 || parsedObj.has_visited === '1' ? '是' : '否' }} + + + 是否使用过药品 + {{ parsedObj.has_used_drug === 1 || parsedObj.has_used_drug === '1' ? '是' : '否' }} + 所选药品 @@ -185,6 +197,21 @@ 患者选择 {{ followUpAnsweredLabel }} + + 是否就诊过 + {{ parsedObj.has_visited === 1 || parsedObj.has_visited === '1' ? '是' : '否' }} + + + 适用症/症状 + {{ parsedObj.illness_info }} + + + 补充信息 + {{ parsedObj.supplement }} + @@ -294,7 +321,7 @@ - {{ parsedObj.reason || '本次服务已完成' }} + {{ parsedObj.end_reason || parsedObj.reason || parsedObj.message || '本次服务已完成' }} diff --git a/subPackages/sub_workbench/prescription_v2/index.vue b/subPackages/sub_workbench/prescription_v2/index.vue index 73db051..64eeb6a 100644 --- a/subPackages/sub_workbench/prescription_v2/index.vue +++ b/subPackages/sub_workbench/prescription_v2/index.vue @@ -2615,6 +2615,11 @@ export default { const doctorId = uni.getStorageSync('doctor_id') || uni.getStorageSync('user_id'); if (!doctorId) return; const senderUserId = String(doctorId).startsWith('doctor-') ? String(doctorId) : `doctor-${doctorId}`; + // 在线复诊开方后:电子处方卡 + 购药指引 + 用药温馨提示 + const tipTexts = [ + '根据您的病情描述,已为您开具电子处方,请点击上方的‘立即支付’,进行购药;如有商品价格和订单等问题请咨询平台客服。', + '温馨提示:用药前请详细阅读药品说明书,并严格按照线下医嘱用药。如用药过程中出现病情变化或其它不适症状,请立即停药并及时就医。(请您注意,如果您尚未在医院就诊或未曾使用过本次申请的药品,请暂时不要支付订单。我们建议您在医生的指导下使用药品,以确保用药安全。)', + ]; try { await sendToUserHttpApi({ room_id: roomId, @@ -2624,6 +2629,17 @@ export default { message_content: JSON.stringify(inner), duration: 0 }); + for (let i = 0; i < tipTexts.length; i++) { + // 温馨提示由小助手发送,处方卡仍由医生发送 + await sendToUserHttpApi({ + room_id: roomId, + sender_user_id: 'doctor_assistant', + receiver_user_id: receiverUserId, + message_type: 0, + message_content: tipTexts[i], + duration: 0 + }); + } } catch (e) { console.warn('trySendPrescriptionChatMessage', e); }