diff --git a/apps/web-antd/src/views/business/chat/components/MessageBubble.vue b/apps/web-antd/src/views/business/chat/components/MessageBubble.vue index fa6e1b57..e9f7af68 100644 --- a/apps/web-antd/src/views/business/chat/components/MessageBubble.vue +++ b/apps/web-antd/src/views/business/chat/components/MessageBubble.vue @@ -6,16 +6,29 @@ import { useUserStore } from '@vben/stores'; import {Avatar, Button, Image} from 'ant-design-vue'; +import {getChatMessageRegisterInfoApi} from "#/views/business/chat/api"; import {getPrescriptionCheckStatusApi} from "#/views/business/order/prescription/api"; import PrescriptionDetail from '#/views/doctor/doctor-reception/components/PrescriptionDetail.vue'; import previewMedia from '../composables/useMediaPreview.ts'; import {useThemeStore} from '../stores/theme.ts'; import AudioMessage from './AudioMessage.vue'; +import {receptionApi} from "#/views/doctor/doctor-reception/api"; +import {useChatStore} from "#/views/business/chat/stores/chat"; +import { useUserStore as chatUseUserStore } from '../stores/user'; +import {sendMessage} from "#/views/business/chat/utils/request"; +import RefusalOfTreatmentModal + from "#/views/doctor/doctor-reception/components/RefusalOfTreatmentModal.vue"; +const chatUserStore = chatUseUserStore(); const userStore = useUserStore(); +const chatStore = useChatStore(); const themeStore = useThemeStore(); +const [RefusalOfTreatmentModals, RefusalOfTreatmentModalApi] = useVbenModal({ + connectedComponent: RefusalOfTreatmentModal, +}); + const props = defineProps({ message: { type: Object, @@ -52,19 +65,22 @@ const prescriptionStatusMap = { 2: '未通过', }; -// 添加挂号状态映射 +// 添加挂号状态映射 0待支付1已支付待接诊2接诊中3已结束4已取消5待评价6已评价7已拒诊 const registerStatusMap = { - 0: '待就诊', - 1: '已缴费', - 2: '已就诊', - 3: '已取消', - 4: '已退费' + 0: '待支付', + 1: '待接诊', + 2: '接诊中', + 3: '已结束', + 4: '已取消', + 5: '待评价', + 6: '已评价', + 7: '已拒诊', }; // 添加支付状态映射 const payStatusMap = { 0: '未支付', - 1: '已支付' + 1: '已支付', }; const checkPrescriptionStatus = (id) => { @@ -76,26 +92,48 @@ const checkPrescriptionStatus = (id) => { }) }; +const getRegisterCardInfo = () => { + getChatMessageRegisterInfoApi({ id: props.message.content.id }).then((res) => { + // eslint-disable-next-line vue/no-mutating-props + props.message.content = res; + }); +}; + // 接诊操作 const acceptRegister = async (registerId, orderNo) => { if (registerOperating.value) return; registerOperating.value = true; + try { // 模拟API调用 - await new Promise(resolve => setTimeout(resolve, 1500)); - // 更新消息状态 - if (props.message.content && props.message.content.id === registerId) { - props.message.content.status = 2; // 已就诊 - } + receptionApi(registerId).then(async (value) => { + // message.success('接诊成功'); + // 更新消息状态 + getRegisterCardInfo(); - // 显示成功提示 - console.log(`接诊成功 - 挂号ID: ${registerId}, 订单号: ${orderNo}`); + const messageObj = { + type: 'text', + content: '我已接诊,请简单说明您的情况~', + time: new Date().toLocaleTimeString().slice(0, 5), + senderId: `${chatUserStore.currentUser.id}`, + receiverId: chatStore.currentFriend.id, + isSent: true, + read: true, + duration: 0, + }; - // 这里可以调用实际的API - // await acceptRegisterApi({ id: registerId, order_no: orderNo }); + chatStore.addMessage(messageObj, chatUserStore.currentUser.id); + await sendMessage({ + senderId: chatUserStore.currentUser.id, + receiverId: chatStore.currentFriend.id, + roomId: chatStore.currentFriend.room_id, + type: 'text', + content: '我已接诊,请简单说明您的情况~', + }); + }); } catch (error) { console.error('接诊失败:', error); @@ -110,26 +148,13 @@ const rejectRegister = async (registerId, orderNo) => { registerOperating.value = true; - try { - // 模拟API调用 - await new Promise(resolve => setTimeout(resolve, 1500)); - - // 更新消息状态 - if (props.message.content && props.message.content.id === registerId) { - props.message.content.status = 3; // 已取消 - } - - // 显示成功提示 - console.log(`拒诊成功 - 挂号ID: ${registerId}, 订单号: ${orderNo}`); - - // 这里可以调用实际的API - // await rejectRegisterApi({ id: registerId, order_no: orderNo, reason: '医生拒诊' }); - - } catch (error) { - console.error('拒诊失败:', error); - } finally { - registerOperating.value = false; - } + RefusalOfTreatmentModalApi.setData({ + values: { + register_id: registerId, + }, + }); + RefusalOfTreatmentModalApi.open(); + registerOperating.value = false; }; const bubbleClasses = computed(() => { @@ -167,6 +192,8 @@ const formatDuration = (seconds) => { }; const formatTextWithLinks = (text) => { + console.log(text, props.message) + if (!text) return text; // 或 return text (但可能返回 undefined/null,根据需求调整) const urlRegex = /(https?:\/\/\S+)/g; return text.replaceAll( urlRegex, @@ -226,6 +253,10 @@ const getSexText = (sex) => { return sex === 1 ? '男' : '女'; }; + +if (props.message.type === 'register') { + getRegisterCardInfo(); +} diff --git a/apps/web-antd/src/views/business/order/register/config/table.ts b/apps/web-antd/src/views/business/order/register/config/table.ts index ee38e8e8..d8a83407 100644 --- a/apps/web-antd/src/views/business/order/register/config/table.ts +++ b/apps/web-antd/src/views/business/order/register/config/table.ts @@ -23,9 +23,10 @@ export const gridOptions: VxeGridProps = { { field: 'doctor_info.depart.name', title: '科室' }, { field: 'user_patient.name', title: '就诊人名称' }, { field: 'store.name', title: '开方诊所' }, + { field: 'type', title: '状态', slots: { default: 'type' } }, { field: 'prescription', title: '处方', slots: { default: 'prescription'} }, { field: 'status', title: '状态', slots: { default: 'status' } }, - // { field: 'created_at', title: '下单时间' }, + { field: 'created_at', title: '创建时间' }, // { // type: 'html', // title: '操作', diff --git a/apps/web-antd/src/views/business/order/register/index.vue b/apps/web-antd/src/views/business/order/register/index.vue index 16dfb802..3fc5f6d6 100644 --- a/apps/web-antd/src/views/business/order/register/index.vue +++ b/apps/web-antd/src/views/business/order/register/index.vue @@ -73,6 +73,12 @@ const openPrescriptionDetail = (values) => { + 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 32995a83..643866c3 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 @@ -108,6 +108,20 @@ export async function getPrescriptionInfoApi(id: number) { return requestClient.get('prescription/detail', { params: { id } }); } +/** + * 获取拒接接诊列表 + */ +export async function refuseReceptionListApi() { + return requestClient.get(`${prefix}refuse-reception-list`); +} +/** + * 拒诊 + * @param data + */ +export async function refuseReceptionApi(data: any) { + return requestClient.post(`${prefix}refuse-reception`, data); +} + /** * 检查是否有药物相冲 diff --git a/apps/web-antd/src/views/doctor/doctor-reception/components/RefusalOfTreatmentModal.vue b/apps/web-antd/src/views/doctor/doctor-reception/components/RefusalOfTreatmentModal.vue new file mode 100644 index 00000000..5c3c077a --- /dev/null +++ b/apps/web-antd/src/views/doctor/doctor-reception/components/RefusalOfTreatmentModal.vue @@ -0,0 +1,91 @@ + + + + diff --git a/apps/web-antd/src/views/doctor/doctor-reception/index.vue b/apps/web-antd/src/views/doctor/doctor-reception/index.vue index 6ef076eb..c8225b67 100644 --- a/apps/web-antd/src/views/doctor/doctor-reception/index.vue +++ b/apps/web-antd/src/views/doctor/doctor-reception/index.vue @@ -50,6 +50,8 @@ import DiagnosisModal from './components/DiagnosisModal.vue'; import DoctorOrderModal from './components/DoctorOrderModal.vue'; import PrescriptionDetail from './components/PrescriptionDetail.vue'; import WesternModal from './components/WesternModal.vue'; +import RefusalOfTreatmentModal + from "#/views/doctor/doctor-reception/components/RefusalOfTreatmentModal.vue"; interface Patient { id: number; @@ -298,6 +300,7 @@ const setVisible = (value, instruction = ''): void => { visible.value = value; } }; + /** * 选择华女这操作 * @param patient @@ -598,6 +601,11 @@ function updateDoctorOrder(values) { const [PrescriptionDetailModal, PrescriptionDetailModalApi] = useVbenModal({ connectedComponent: PrescriptionDetail, }); + + +const [RefusalOfTreatmentModals, RefusalOfTreatmentModalApi] = useVbenModal({ + connectedComponent: RefusalOfTreatmentModal, +}); const openWesternModal = () => { // 打开西药处方模态框逻辑 WesternDrugModalApi.setData({ @@ -646,6 +654,34 @@ function reception() { }); } +const updateReceptionStatus = () => { + receptionStatus.value = 0; + tabType.value = 0; + console.log('这', { + receptionStatus: receptionStatus.value, + tabType: tabType.value + }) +} + +/** + * 拒诊 + */ +function refuseReception() { + RefusalOfTreatmentModalApi.setData({ + values: { + register_id: localStorage.getItem(`doctorReception-id`) + }, + getPatientListByReception, + updateReceptionStatus, + // 在patients中循环查询id = selectPatientId.value的 + + // let patient = patients. + // selectPatient(localStorage.getItem(`doctorReception-id`)); + }) + + RefusalOfTreatmentModalApi.open(); +} + /** * 结束诊断 */ @@ -1099,6 +1135,7 @@ watch(