From 6f8f87fb0976b0317cfa3794a6d65750fd0b2b33 Mon Sep 17 00:00:00 2001 From: lq Date: Mon, 18 Aug 2025 16:08:37 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E8=BD=AE=E6=92=AD=E5=9B=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../form/components/upload-image.vue | 175 ++++++ .../chat/components/MessageBubble.vue | 249 ++++++++- .../business/chat/components/MessageInput.vue | 3 +- .../src/views/business/chat/stores/chat.ts | 4 +- .../business/store/settings/api/index.ts | 14 + .../store/settings/components/uploadModal.vue | 65 +++ .../business/store/settings/config/form.ts | 26 + .../views/business/store/settings/index.vue | 174 ++++-- .../store/api/index.ts | 8 + .../warehouse-drug-management/store/index.vue | 16 +- .../src/views/system/store/config/form.ts | 15 +- pnpm-lock.yaml | 503 ++++-------------- 12 files changed, 795 insertions(+), 457 deletions(-) create mode 100644 apps/web-antd/src/components/form/components/upload-image.vue create mode 100644 apps/web-antd/src/views/business/store/settings/components/uploadModal.vue create mode 100644 apps/web-antd/src/views/business/store/settings/config/form.ts diff --git a/apps/web-antd/src/components/form/components/upload-image.vue b/apps/web-antd/src/components/form/components/upload-image.vue new file mode 100644 index 00000000..b8a96811 --- /dev/null +++ b/apps/web-antd/src/components/form/components/upload-image.vue @@ -0,0 +1,175 @@ + + + + + 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 cb28af78..fa6e1b57 100644 --- a/apps/web-antd/src/views/business/chat/components/MessageBubble.vue +++ b/apps/web-antd/src/views/business/chat/components/MessageBubble.vue @@ -13,6 +13,9 @@ import previewMedia from '../composables/useMediaPreview.ts'; import {useThemeStore} from '../stores/theme.ts'; import AudioMessage from './AudioMessage.vue'; +const userStore = useUserStore(); +const themeStore = useThemeStore(); + const props = defineProps({ message: { type: Object, @@ -30,10 +33,6 @@ const props = defineProps({ const emit = defineEmits(['show-user-profile']); -const userStore = useUserStore(); - -const themeStore = useThemeStore(); - const avatarStyle = computed(() => ({ background: props.senderInfo.color, })); @@ -43,6 +42,8 @@ const statusInfo = ref({ text: '', }); +// 挂号操作状态 +const registerOperating = ref(false); // 添加处方状态映射 const prescriptionStatusMap = { @@ -51,6 +52,21 @@ const prescriptionStatusMap = { 2: '未通过', }; +// 添加挂号状态映射 +const registerStatusMap = { + 0: '待就诊', + 1: '已缴费', + 2: '已就诊', + 3: '已取消', + 4: '已退费' +}; + +// 添加支付状态映射 +const payStatusMap = { + 0: '未支付', + 1: '已支付' +}; + const checkPrescriptionStatus = (id) => { if (!id) return; getPrescriptionCheckStatusApi({id}).then((res) => { @@ -60,6 +76,62 @@ const checkPrescriptionStatus = (id) => { }) }; +// 接诊操作 +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; // 已就诊 + } + + // 显示成功提示 + console.log(`接诊成功 - 挂号ID: ${registerId}, 订单号: ${orderNo}`); + + // 这里可以调用实际的API + // await acceptRegisterApi({ id: registerId, order_no: orderNo }); + + } catch (error) { + console.error('接诊失败:', error); + } finally { + registerOperating.value = false; + } +}; + +// 拒诊操作 +const rejectRegister = 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 = 3; // 已取消 + } + + // 显示成功提示 + console.log(`拒诊成功 - 挂号ID: ${registerId}, 订单号: ${orderNo}`); + + // 这里可以调用实际的API + // await rejectRegisterApi({ id: registerId, order_no: orderNo, reason: '医生拒诊' }); + + } catch (error) { + console.error('拒诊失败:', error); + } finally { + registerOperating.value = false; + } +}; + const bubbleClasses = computed(() => { const baseClasses = ['message-bubble']; @@ -125,8 +197,6 @@ const handleVideoError = (event) => { console.error('视频加载失败:', event); }; - - const [PrescriptionDetailModal, PrescriptionDetailModalApi] = useVbenModal({ connectedComponent: PrescriptionDetail, }); @@ -138,6 +208,24 @@ const viewPrescription = (item) => { PrescriptionDetailModalApi.open(); } +// 格式化日期时间 +const formatDateTime = (timestamp) => { + if (!timestamp) return ''; + const date = new Date(timestamp * 1000); + return date.toLocaleString('zh-CN', { + year: 'numeric', + month: '2-digit', + day: '2-digit', + hour: '2-digit', + minute: '2-digit' + }); +}; + +// 获取性别文本 +const getSexText = (sex) => { + return sex === 1 ? '男' : '女'; +}; +