diff --git a/pages/case/visit-record-detail.vue b/pages/case/visit-record-detail.vue index 4ea9f37..17c9c91 100644 --- a/pages/case/visit-record-detail.vue +++ b/pages/case/visit-record-detail.vue @@ -113,6 +113,35 @@ const showItems = computed(() => { const formRef = ref(null); +function normalizeMedicalType(raw) { + const s = String(raw || '').trim(); + if (!s) return ''; + const lower = s.toLowerCase(); + if (lower.includes('preconsultationrecord')) return 'preConsultationRecord'; + if (lower.includes('preconsult') || (lower.includes('pre') && lower.includes('consult'))) return 'preConsultationRecord'; + if (lower === 'outpatient' || lower === 'out_patient' || lower === 'out-patient') return 'outpatient'; + if (lower === 'inhospital' || lower === 'in_hospital' || lower === 'in-hospital' || lower === 'inpatient') return 'inhospital'; + if (lower === 'physicalexaminationtemplate' || lower === 'physicalexamination' || lower === 'physical_examination') return 'physicalExaminationTemplate'; + if (s === 'outPatient') return 'outpatient'; + if (s === 'inHospital') return 'inhospital'; + if (s === 'preConsultation') return 'preConsultationRecord'; + if (s === 'preConsultationRecord') return 'preConsultationRecord'; + if (s === 'physicalExaminationTemplate') return 'physicalExaminationTemplate'; + return s; +} + +function resolveSortTimeKey() { + const ui = normalizeMedicalType(templateType.value); + // 预问诊:时间字段固定使用 consultationDate,避免被模板配置覆盖,且与列表展示一致 + if (ui === 'preConsultationRecord') return 'consultationDate'; + const t = temp.value || {}; + if (t?.service?.timeTitle) return String(t.service.timeTitle); + if (ui === 'outpatient') return 'visitTime'; + if (ui === 'inhospital') return 'inhosDate'; + if (ui === 'physicalExaminationTemplate') return 'inspectDate'; + return ''; +} + function ensureFilesField() { if (form.files !== undefined) return; if (detail.value && detail.value.files !== undefined) return; @@ -151,7 +180,7 @@ onLoad(async (options) => { ensureFilesField(); // 默认填充模板时间字段 - const timeKey = temp.value?.service?.timeTitle || ''; + const timeKey = resolveSortTimeKey(); if (timeKey && !form[timeKey]) form[timeKey] = dayjs().format('YYYY-MM-DD'); } @@ -237,7 +266,7 @@ async function save() { } // sortTime:使用模板中的时间字段 - const sortTimeKey = temp.value?.service?.timeTitle || ''; + const sortTimeKey = resolveSortTimeKey(); if (sortTimeKey) { const sortTimeValue = forms.value?.[sortTimeKey]; if (sortTimeValue && dayjs(sortTimeValue).isValid()) { diff --git a/pages/message/chat.scss b/pages/message/chat.scss index d97865b..72447c2 100644 --- a/pages/message/chat.scss +++ b/pages/message/chat.scss @@ -15,7 +15,6 @@ $primary-color: #0877F1; flex-direction: column; background-color: #f5f5f5; overflow: hidden; - transition: padding-bottom 0.25s cubic-bezier(0.25, 0.46, 0.45, 0.94); } /* 患者信息栏样式 - 固定在顶部 */ @@ -96,11 +95,10 @@ $primary-color: #0877F1; top: 100rpx; /* 患者信息栏高度,根据实际调整 */ left: 0; right: 0; - bottom: 120rpx; /* 输入框高度,根据实际调整 */ + bottom: 200rpx; /* 输入框高度,根据实际调整 */ box-sizing: border-box; overflow-x: hidden; overflow-y: auto; - transition: bottom 0.25s cubic-bezier(0.25, 0.46, 0.45, 0.94); } .chat-content-compressed { @@ -370,12 +368,16 @@ $primary-color: #0877F1; left: 0; right: 0; background: #fff; - border-top: 1rpx solid #e0e0e0; z-index: 200; flex-shrink: 0; transform: translateZ(0); /* 开启硬件加速,提升性能 */ - transition: bottom 0.25s cubic-bezier(0.25, 0.46, 0.45, 0.94); - will-change: bottom; + display: flex; + flex-direction: column; +} + +.ai-assistant-slot { + width: 100%; + background: #fff; } .input-toolbar { @@ -384,6 +386,8 @@ $primary-color: #0877F1; padding: 12rpx 20rpx; padding-bottom: env(safe-area-inset-bottom); gap: 12rpx; + border-top: 1rpx solid #e0e0e0; + background: #fff; } .voice-toggle-btn { diff --git a/pages/message/components/ai-assistant-buttons.vue b/pages/message/components/ai-assistant-buttons.vue index 40b93af..634cf87 100644 --- a/pages/message/components/ai-assistant-buttons.vue +++ b/pages/message/components/ai-assistant-buttons.vue @@ -383,7 +383,6 @@ defineExpose({ gap: 16rpx; padding: 16rpx 24rpx; background-color: #f8f9fa; - border-bottom: 1rpx solid #e5e5e5; .ai-button { display: flex; diff --git a/pages/message/components/chat-input.vue b/pages/message/components/chat-input.vue index bcf46d6..515345b 100644 --- a/pages/message/components/chat-input.vue +++ b/pages/message/components/chat-input.vue @@ -1,7 +1,9 @@