From 5158499dd1f788fcc5a90e201bf01a85e8ff376e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E7=90=A6?= Date: Sat, 7 Feb 2026 13:02:04 +0800 Subject: [PATCH] =?UTF-8?q?=E8=BD=AC=E8=AF=8A=E6=96=B9=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../business/chat/components/MessageList.vue | 70 +++++++++--- .../src/views/business/chat/stores/chat.ts | 5 +- .../TransferPrescriptionMessageCard.vue | 8 +- .../doctor/online-consultation/index.vue | 3 + .../system/transfer-question/api/index.ts | 15 +++ .../components/AssistantConfigModal.vue | 100 ++++++++++++++++++ .../views/system/transfer-question/index.vue | 14 +++ 7 files changed, 198 insertions(+), 17 deletions(-) create mode 100644 apps/web-antd/src/views/system/transfer-question/components/AssistantConfigModal.vue diff --git a/apps/web-antd/src/views/business/chat/components/MessageList.vue b/apps/web-antd/src/views/business/chat/components/MessageList.vue index 7521f6e7..97c79d09 100644 --- a/apps/web-antd/src/views/business/chat/components/MessageList.vue +++ b/apps/web-antd/src/views/business/chat/components/MessageList.vue @@ -6,6 +6,7 @@ import { Spin } from 'ant-design-vue'; import { useChatStore } from '../stores/chat.ts'; import { useUserStore } from '../stores/user.ts'; +import { getTransferAssistantConfig } from '#/views/system/transfer-question/api'; import MessageBubble from './MessageBubble.vue'; const userStore = useUserStore(); @@ -20,22 +21,63 @@ const isLoading = ref(false); // 加载历史消息状态 // const chatStore.hasMore = ref(true); // 是否有更多历史消息 const oldScrollHeight = ref(0); // 已加载次数 +// 助理配置缓存 +const assistantConfig = ref({ + name: '医生助理', + avatar: '', +}); + +// 加载助理配置 +const loadAssistantConfig = async () => { + try { + const res = await getTransferAssistantConfig(); + if (res?.result) { + assistantConfig.value = { + name: res.result.name || '医生助理', + avatar: res.result.avatar || '', + }; + } + } catch (error) { + console.error('加载助理配置失败:', error); + } +}; + +// 初始化时加载助理配置 +onMounted(() => { + loadAssistantConfig(); +}); + // 获取发送者信息 const getSenderInfo = (message) => { - return message.senderId === userStore.currentUser.doctor_id - ? { - nick_name: userStore.currentUser.nick_name, - avatar: userStore.currentUser.nick_name.charAt(0), - color: userStore.currentUser.color || '#4cc9f0', - } - : { - nick_name: chatStore.currentFriend?.nick_name || '未知用户', - avatar: - chatStore.currentFriend?.avatar || - chatStore.currentFriend?.nick_name.charAt(0) || - '?', - color: chatStore.currentFriend?.color || '#ff6b6b', - }; + const senderId = message.sender_user_id || message.senderId; + + // 如果是医生助理发送的消息 + if (senderId === 'doctor_assistant') { + return { + nick_name: assistantConfig.value.name, + avatar: assistantConfig.value.avatar || assistantConfig.value.name.charAt(0), + color: '#4cc9f0', + }; + } + + // 如果是当前医生发送的消息 + if (senderId === userStore.currentUser.doctor_id || senderId === `doctor-${userStore.currentUser.doctor_id}`) { + return { + nick_name: userStore.currentUser.nick_name, + avatar: userStore.currentUser.nick_name.charAt(0), + color: userStore.currentUser.color || '#4cc9f0', + }; + } + + // 其他情况(患者发送的消息) + return { + nick_name: chatStore.currentFriend?.nick_name || '未知用户', + avatar: + chatStore.currentFriend?.avatar || + chatStore.currentFriend?.nick_name.charAt(0) || + '?', + color: chatStore.currentFriend?.color || '#ff6b6b', + }; }; // 滚动到底部 diff --git a/apps/web-antd/src/views/business/chat/stores/chat.ts b/apps/web-antd/src/views/business/chat/stores/chat.ts index bad7b432..f57d56d5 100644 --- a/apps/web-antd/src/views/business/chat/stores/chat.ts +++ b/apps/web-antd/src/views/business/chat/stores/chat.ts @@ -263,6 +263,7 @@ export const useChatStore = defineStore('chat', () => { return { id: message.id, sender_user_id: message.sender_user_id, + senderId: message.sender_user_id, // 添加senderId字段用于兼容 receiver_user_id: message.receiver_user_id, message_type: message.message_type, message_content: message.message_content, @@ -393,8 +394,8 @@ export const useChatStore = defineStore('chat', () => { isSent: isSent, }; - // 检测挂号消息(message_type=10)或患者就诊经历消息(message_type=11),触发患者列表刷新通知 - if (messageData.message_type === 10 || messageData.message_type === 11) { + // 检测挂号消息(message_type=10)、患者就诊经历消息(message_type=11)或转诊消息(message_type=14),触发患者列表刷新通知 + if (messageData.message_type === 10 || messageData.message_type === 11 || messageData.message_type === 14) { newRegisterNotification.value = { timestamp: Date.now(), data: messageData, diff --git a/apps/web-antd/src/views/doctor/online-consultation/components/TransferPrescriptionMessageCard.vue b/apps/web-antd/src/views/doctor/online-consultation/components/TransferPrescriptionMessageCard.vue index ee413113..5327dbce 100644 --- a/apps/web-antd/src/views/doctor/online-consultation/components/TransferPrescriptionMessageCard.vue +++ b/apps/web-antd/src/views/doctor/online-consultation/components/TransferPrescriptionMessageCard.vue @@ -163,11 +163,12 @@ const convertDrugDataForImport = (drug) => { // 一键导入处方到在线问诊(从前端数据导入) const handleImportToPrescription = async () => { - if (!transferInfo.value?.transfer_id && !transferInfo.value?.id) { + if (!transferInfo.value?.id && !transferInfo.value?.transfer_id) { message.warning('转接方信息不完整'); return; } + // 优先使用props传入的registerId,如果没有则从transferInfo中获取 const registerId = props.registerId || transferInfo.value.register_id; if (!registerId) { @@ -182,6 +183,11 @@ const handleImportToPrescription = async () => { importing.value = true; try { + // 确保处方store已初始化(使用正确的registerId) + if (!prescriptionStore.currentRegisterId || prescriptionStore.currentRegisterId !== registerId) { + prescriptionStore.initializePrescription(registerId, false); + } + // 先将处方类型设置为中药(1) prescriptionStore.changeCategory(1); diff --git a/apps/web-antd/src/views/doctor/online-consultation/index.vue b/apps/web-antd/src/views/doctor/online-consultation/index.vue index fbe0a1b8..3c96bdb4 100644 --- a/apps/web-antd/src/views/doctor/online-consultation/index.vue +++ b/apps/web-antd/src/views/doctor/online-consultation/index.vue @@ -212,6 +212,9 @@ const handleReceptionSuccess = (patient) => { // 初始化处方数据,但不获取患者信息(避免调用错误的API) prescriptionStore.initializePrescription(patient.register_id, false); } + + // 刷新患者列表,更新接诊状态 + patientListRef.value?.fetchPatientList(); }; // 结束接诊 diff --git a/apps/web-antd/src/views/system/transfer-question/api/index.ts b/apps/web-antd/src/views/system/transfer-question/api/index.ts index 4a67ebaa..e9448845 100644 --- a/apps/web-antd/src/views/system/transfer-question/api/index.ts +++ b/apps/web-antd/src/views/system/transfer-question/api/index.ts @@ -41,3 +41,18 @@ export async function updateTransferQuestion(data: Record) { export async function deleteTransferQuestion(data: Record) { return requestClient.post(`${prefix}delete`, data); } + +/** + * 获取转诊助理配置 + */ +export async function getTransferAssistantConfig() { + return requestClient.get('transfer-assistant-config/get-config'); +} + +/** + * 更新转诊助理配置 + * @param data + */ +export async function updateTransferAssistantConfig(data: Record) { + return requestClient.post('transfer-assistant-config/update-config', data); +} diff --git a/apps/web-antd/src/views/system/transfer-question/components/AssistantConfigModal.vue b/apps/web-antd/src/views/system/transfer-question/components/AssistantConfigModal.vue new file mode 100644 index 00000000..55ca5b8a --- /dev/null +++ b/apps/web-antd/src/views/system/transfer-question/components/AssistantConfigModal.vue @@ -0,0 +1,100 @@ + + + diff --git a/apps/web-antd/src/views/system/transfer-question/index.vue b/apps/web-antd/src/views/system/transfer-question/index.vue index b0716c77..ee653e24 100644 --- a/apps/web-antd/src/views/system/transfer-question/index.vue +++ b/apps/web-antd/src/views/system/transfer-question/index.vue @@ -12,6 +12,7 @@ import { TableAction } from '#/components/table-action'; import { deleteTransferQuestion } from './api'; import FormModalDemo from './components/modal.vue'; +import AssistantConfigModalComponent from './components/AssistantConfigModal.vue'; import { formOptions } from './config/search'; import { gridOptions } from './config/table'; @@ -40,6 +41,10 @@ const [FormModal, formModalApi] = useVbenModal({ connectedComponent: FormModalDemo, }); +const [AssistantConfigModal, assistantConfigModalApi] = useVbenModal({ + connectedComponent: AssistantConfigModalComponent, +}); + const showModal = (data = {}, isUpdate = false) => { formModalApi.setData({ // 表单值 @@ -67,6 +72,7 @@ const deleteApi = (row: any) => {