diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/appointmentmanage/appservice/impl/DoctorScheduleAppServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/appointmentmanage/appservice/impl/DoctorScheduleAppServiceImpl.java index 51b6fdb4..43b6cbbd 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/appointmentmanage/appservice/impl/DoctorScheduleAppServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/appointmentmanage/appservice/impl/DoctorScheduleAppServiceImpl.java @@ -280,7 +280,6 @@ public class DoctorScheduleAppServiceImpl implements IDoctorScheduleAppService { .set(doctorSchedule.getRegisterFee() != null, SchedulePool::getFee, Double.valueOf(doctorSchedule.getRegisterFee().toString())) .set(doctorSchedule.getRegisterFee() != null, SchedulePool::getInsurancePrice, Double.valueOf(doctorSchedule.getRegisterFee().toString())) - .set(doctorSchedule.getRegisterItem() != null, SchedulePool::getRegType, doctorSchedule.getRegisterItem()) .update(); } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/dto/RequestFormPageDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/dto/RequestFormPageDto.java index 60f10663..d4ee012e 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/dto/RequestFormPageDto.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/dto/RequestFormPageDto.java @@ -81,4 +81,16 @@ public class RequestFormPageDto { * 费用类别 */ private String feeType; + /** + * 麻醉方式 + */ + private Integer anesthesiaTypeEnum; + /** + * 切口等级 + */ + private Integer incisionLevel; + /** + * 手术等级 + */ + private Integer surgeryLevel; } diff --git a/openhis-server-new/openhis-application/src/main/resources/mapper/regdoctorstation/RequestFormManageAppMapper.xml b/openhis-server-new/openhis-application/src/main/resources/mapper/regdoctorstation/RequestFormManageAppMapper.xml index d9c80ca5..64725f1a 100644 --- a/openhis-server-new/openhis-application/src/main/resources/mapper/regdoctorstation/RequestFormManageAppMapper.xml +++ b/openhis-server-new/openhis-application/src/main/resources/mapper/regdoctorstation/RequestFormManageAppMapper.xml @@ -64,6 +64,9 @@ + + + @@ -85,7 +88,9 @@ cs.apply_dept_id, cs.apply_dept_name, cs.surgery_type_enum, - cs.status_enum, + cs.anesthesia_type_enum, + cs.incision_level, + cs.surgery_level, fc.contract_name AS fee_type FROM doc_request_form drf LEFT JOIN cli_surgery cs ON cs.surgery_no = drf.prescription_no @@ -107,8 +112,6 @@ AND cs.apply_dept_id = #{requestFormDto.applyDeptId} AND drf.delete_flag = '0' - - AND (cs.status_enum IS NULL OR cs.status_enum != 4) ORDER BY drf.create_time DESC diff --git a/openhis-ui-vue3/src/api/appoinmentmanage/deptappthoursManage.js b/openhis-ui-vue3/src/api/appoinmentmanage/deptappthoursManage.js index 577110e4..b7fc6ada 100644 --- a/openhis-ui-vue3/src/api/appoinmentmanage/deptappthoursManage.js +++ b/openhis-ui-vue3/src/api/appoinmentmanage/deptappthoursManage.js @@ -1,4 +1,5 @@ import request from '@/utils/request' +import { STATUS } from '@/utils/medicalConstants' export function getDeptAppthoursList(query) { return request({ @@ -71,7 +72,7 @@ export function getTenantList() { params: { pageNum: 1, pageSize: 1000, - status: '1' // 只获取已启动的机构 (1=已启动,0=未启动) + status: STATUS.NORMAL // 只获取正常/启用的机构 } }) } diff --git a/openhis-ui-vue3/src/utils/medicalConstants.js b/openhis-ui-vue3/src/utils/medicalConstants.js index 9dad29fe..ac6de2c1 100644 --- a/openhis-ui-vue3/src/utils/medicalConstants.js +++ b/openhis-ui-vue3/src/utils/medicalConstants.js @@ -154,3 +154,11 @@ export default { getDiagTypeList, getDiagTypeDescription, }; + +/** + * 状态通用常量(与后端 status 字段保持一致:0=正常/启用,1=停用) + */ +export const STATUS = { + NORMAL: '0', // 正常/启用 + DISABLE: '1' // 停用 +}; diff --git a/openhis-ui-vue3/src/views/appoinmentmanage/deptappthoursManage/index.vue b/openhis-ui-vue3/src/views/appoinmentmanage/deptappthoursManage/index.vue index d70e9763..0cbf46dc 100644 --- a/openhis-ui-vue3/src/views/appoinmentmanage/deptappthoursManage/index.vue +++ b/openhis-ui-vue3/src/views/appoinmentmanage/deptappthoursManage/index.vue @@ -577,25 +577,12 @@ function getTenantOptions() { } else { tenantOptions.value = [] } - tenantOptions.value = [ - { id: 1, tenantName: '演示医院' }, - { id: 2, tenantName: '社区卫生院' }, - ...tenantOptions.value - ] } else { console.warn('获取租户列表失败:', response.msg) - tenantOptions.value = [ - { id: 1, tenantName: '演示医院' }, - { id: 2, tenantName: '社区卫生院' } - ] } }) .catch(error => { console.error('获取租户列表失败:', error) - tenantOptions.value = [ - { id: 1, tenantName: '演示医院' }, - { id: 2, tenantName: '社区卫生院' } - ] }) } diff --git a/openhis-ui-vue3/src/views/doctorstation/components/surgery/surgeryApplication.vue b/openhis-ui-vue3/src/views/doctorstation/components/surgery/surgeryApplication.vue index 43471171..5d5287f8 100644 --- a/openhis-ui-vue3/src/views/doctorstation/components/surgery/surgeryApplication.vue +++ b/openhis-ui-vue3/src/views/doctorstation/components/surgery/surgeryApplication.vue @@ -636,7 +636,7 @@ function getList() { surgeryList.value = res.data.records || [] }).catch(error => { console.error('获取手术列表失败:', error) - proxy.$message.error('数据加载失败,请稍后重试') + proxy.$modal.msgError('数据加载失败,请稍后重试') surgeryList.value = [] }).finally(() => { loading.value = false @@ -715,14 +715,14 @@ function loadDoctorList() { // 新增 function handleAdd() { if (!props.patientInfo?.encounterId) { - proxy.$message.warning('请先选择患者') + proxy.$modal.msgWarning('请先选择患者') return } - + title.value = '新增手术申请' open.value = true reset() - + // 自动填充患者信息 form.value.patientId = props.patientInfo.patientId form.value.encounterId = props.patientInfo.encounterId @@ -737,7 +737,7 @@ function handleAdd() { if (doctorList.value.length === 0) { loadDoctorList() } - + // 加载诊断信息 loadDiagnosisInfo() } @@ -1049,32 +1049,33 @@ function submitForm() { // 新增手术 addSurgery(form.value).then((res) => { if (res.code === 200) { - proxy.$modal.msgSuccess('新增成功') - //保存麻醉方式 + proxy.$modal.msgSuccess(res.msg || '新增成功') + // 保存麻醉方式 sessionStorage.setItem('anesthesiaType', form.value.anesthesiaTypeEnum) open.value = false getList() } else { - proxy.$modal.msgError(res.msg || '新增手术失败') + proxy.$modal.msgError(res.msg || '新增手术失败,请检查表单信息') } }).catch(error => { console.error('新增手术失败:', error) - proxy.$modal.msgError('新增手术失败,请稍后重试') + proxy.$modal.msgError('新增手术失败,请检查表单信息') }) } else { // 修改手术 updateSurgery(form.value).then((res) => { if (res.code === 200) { - proxy.$modal.msgSuccess('修改成功') + proxy.$modal.msgSuccess(res.msg || '修改成功') + // 保存麻醉方式 sessionStorage.setItem('anesthesiaType', form.value.anesthesiaTypeEnum) open.value = false getList() } else { - proxy.$modal.msgError(res.msg || '修改手术失败') + proxy.$modal.msgError(res.msg || '更新手术失败,请检查表单信息') } }).catch(error => { console.error('更新手术失败:', error) - proxy.$modal.msgError('更新手术失败,请稍后重试') + proxy.$modal.msgError('更新手术失败,请检查表单信息') }) } } else { diff --git a/openhis-ui-vue3/src/views/maintainSystem/Inspection/index.vue b/openhis-ui-vue3/src/views/maintainSystem/Inspection/index.vue index b93a58e1..f1c310ef 100644 --- a/openhis-ui-vue3/src/views/maintainSystem/Inspection/index.vue +++ b/openhis-ui-vue3/src/views/maintainSystem/Inspection/index.vue @@ -602,117 +602,31 @@ @@ -1752,18 +1668,16 @@ const calculateAmounts = () => { // 重新分配所有项目的服务费 redistributeServiceFee(); - // 计算套餐总金额(基于项目的折扣后金额) - const totalAmount = packageItems.value.reduce((sum, item) => sum + (item.amount || 0), 0); - - // 更新套餐金额 - packageAmount.value = parseFloat(totalAmount.toFixed(2)); - // 计算套餐总服务费 if (generateServiceFee.value) { serviceFee.value = parseFloat(packageItems.value.reduce((sum, item) => sum + (item.serviceFee || 0), 0).toFixed(2)); } else { serviceFee.value = 0; } + + // 计算套餐总金额(折扣后金额 + 服务费) + const totalAmount = packageItems.value.reduce((sum, item) => sum + (item.amount || 0), 0); + packageAmount.value = parseFloat((totalAmount + serviceFee.value).toFixed(2)); }; const itemNameRefs = ref([]); @@ -2275,7 +2189,7 @@ const handleSave = () => { packageLevel: packageLevel.value, packageName: packageName.value.trim(), department: department.value, - discount: discount.value || 0, + discount: parseFloat(String(discount.value).replace('%', '').trim()) || 0, isDisabled: isDisabled.value, showPackageName: showPackageName.value, generateServiceFee: generateServiceFee.value, @@ -2285,7 +2199,7 @@ const handleSave = () => { lisGroup: selectedLisGroup.value, // 从下拉框获取 bloodVolume: bloodVolume.value, remarks: remarks.value, - orgName: userStore.orgName || '测试机构', // 卫生机构 + orgName: (tenantOptions.value.find(t => t.value === selectedTenantId.value)?.label) || userStore.orgName || '', // 卫生机构 createBy: userStore.nickName, // 制单人 createTime: new Date().toISOString(), updateTime: new Date().toISOString() @@ -2382,273 +2296,46 @@ const fetchTenantList = async () => { loadingTenant.value = false; } }; -const showProjectPopover = ref(false); -const categoryList = ref([]); -const currentCategoryCode = ref(''); -const projectTableData = ref([]); -const tableLoading = ref(false); -const popoverSearchKey = ref(''); const currentEditingRow = ref(null); -const isSelectingProject = ref(false); -const tableKey = ref(0); -// 弹窗内项目列表分页 -const popoverPageNo = ref(1); -const popoverPageSize = ref(10); -const popoverTotal = ref(0); + /** - * 点击输入框时:记录当前行并打开弹窗 + * el-autocomplete 行内搜索回调 + * query: 用户输入的关键词;cb: 回调函数,将结果数组传入即可 */ -const openProjectSelector = (row) => { - if (isSelectingProject.value) return; - +const handleProjectInlineSearch = async (query, cb, row) => { currentEditingRow.value = row; - showProjectPopover.value = true; - - if (categoryList.value.length === 0) { - initDiagnosisCategories(); - } else { - fetchProjectsByCategory(currentCategoryCode.value, true); + try { + const params = { pageNo: 1, pageSize: 20, statusEnum: 2, searchKey: query || undefined }; + const response = await getDiagnosisTreatmentList(params); + if (response.code === 200) { + let list = []; + if (response.data && response.data.records) { + list = response.data.records; + } else if (Array.isArray(response.data)) { + list = response.data; + } + // el-autocomplete 要求每项必须有 value 字段(显示在输入框中) + cb(list.map(item => ({ ...item, value: item.name }))); + } else { + cb([]); + } + } catch { + cb([]); } }; -// 监听 popover 开关,动态注册/注销 document 级监听 -watch(showProjectPopover, (val) => { - if (val) { - // nextTick 后注册,避免打开时的点击事件立即触发关闭 - nextTick(() => { - document.addEventListener('mousedown', _captureMousedown, true); - document.addEventListener('mousedown', onDocumentMousedown); - }); - } else { - document.removeEventListener('mousedown', _captureMousedown, true); - document.removeEventListener('mousedown', onDocumentMousedown); - } -}); - -const handleSelectProject = (selectedItem) => { - if (!currentEditingRow.value) { - ElMessage.warning('未检测到编辑行,请重新点击输入框'); - return; - } - - const row = currentEditingRow.value; - - // --- 数据回填逻辑 --- +/** + * el-autocomplete 选中某条记录后回填数据 + */ +const handleProjectInlineSelect = (selectedItem, row) => { row.name = selectedItem.name; row.spec = selectedItem.spec || ''; row.unitPrice = parseFloat(selectedItem.retailPrice || 0); row.unit = selectedItem.permittedUnitCode_dictText || selectedItem.unit || '次'; if (!row.quantity) row.quantity = 1; - row.amount = row.unitPrice * row.quantity; - row.totalAmount = row.amount + (row.serviceFee || 0); - - // 1. 开启“防抖”锁,阻止 openProjectSelector 执行 - isSelectingProject.value = true; - - // 2. 关闭弹窗 - showProjectPopover.value = false; - - // 3. 延迟一小段时间后解锁并清空当前行 - // 100ms 足够让浏览器的 click/focus 事件处理完毕 - setTimeout(() => { - currentEditingRow.value = null; - isSelectingProject.value = false; - }, 100); - - - ElMessage.success(`已选择:${row.name}`); -}; - - - -const initDiagnosisCategories = async () => { - if (categoryList.value.length > 0) return; - try { - const res = await getDiseaseTreatmentInit(); - if (res.code === 200 && res.data?.diagnosisCategoryOptions) { - categoryList.value = res.data.diagnosisCategoryOptions.map(item => ({ - value: item.value, - label: item.info - })); - if (categoryList.value.length > 0) { - currentCategoryCode.value = categoryList.value[0].value; - fetchProjectsByCategory(currentCategoryCode.value, true); - } - } - } catch (e) { - ElMessage.error('加载分类失败,请稍后重试'); - } -}; - -/** - * 根据分类代码加载项目列表(支持分页) - */ -// 分页数据缓存:key = `${categoryCode}_${pageNo}_${pageSize}_${searchKey}` -const _pageCache = new Map(); - -const _cacheKey = (code, pageNo, pageSize, searchKey) => - `${code}_${pageNo}_${pageSize}_${searchKey || ''}`; - -/** 静默预加载单页,结果存入缓存 */ -const _prefetchPage = (code, pageNo, pageSize, searchKey) => { - const key = _cacheKey(code, pageNo, pageSize, searchKey); - if (_pageCache.has(key)) return; - const params = { pageNo, pageSize, statusEnum: 2, categoryCode: code, searchKey: searchKey || undefined }; - getDiagnosisTreatmentList(params).then(response => { - if (response.code === 200) _pageCache.set(key, response.data); - }).catch(() => {}); -}; - -/** 静默并行预加载多页:当前页前后各2页 + 后4页,覆盖常用跳转范围 */ -const _prefetchPages = (code, currentPage, pageSize, searchKey, totalPages) => { - const pagesToFetch = new Set(); - for (let i = Math.max(1, currentPage - 2); i <= Math.min(totalPages || 999, currentPage + 4); i++) { - pagesToFetch.add(i); - } - pagesToFetch.forEach(pageNo => _prefetchPage(code, pageNo, pageSize, searchKey)); -}; - -/** 第1页加载完成后,并行预取所有页(上限20页),覆盖任意跳转 */ -const _prefetchAllPages = (code, pageSize, searchKey, total) => { - const totalPages = Math.min(Math.ceil(total / pageSize), 80); - for (let i = 2; i <= totalPages; i++) { - _prefetchPage(code, i, pageSize, searchKey); - } -}; - -const fetchProjectsByCategory = async (code, resetPage = false) => { - currentCategoryCode.value = code; - if (resetPage) { - popoverPageNo.value = 1; - // 切换分类/搜索时清空缓存 - _pageCache.clear(); - } - - const pageNo = popoverPageNo.value; - const pageSize = popoverPageSize.value; - const searchKey = popoverSearchKey.value || ''; - const key = _cacheKey(code, pageNo, pageSize, searchKey); - - if (_pageCache.has(key)) { - // 命中缓存,直接渲染,无需 loading - const cached = _pageCache.get(key); - if (cached && cached.records) { - projectTableData.value = cached.records; - popoverTotal.value = cached.total != null ? cached.total : cached.records.length; - } else if (Array.isArray(cached)) { - projectTableData.value = cached; - popoverTotal.value = cached.length; - } - // 预加载周边页 - _prefetchPages(code, pageNo, pageSize, searchKey, Math.ceil(popoverTotal.value / pageSize)); - return; - } - - tableLoading.value = true; - try { - const params = { - pageNo, - pageSize, - statusEnum: 2, - categoryCode: code, - searchKey: searchKey || undefined - }; - - const response = await getDiagnosisTreatmentList(params); - - if (response.code === 200) { - let list = []; - if (response.data && response.data.records) { - list = response.data.records; - popoverTotal.value = (response.data.total != null ? response.data.total : list.length); - } else if (Array.isArray(response.data)) { - list = response.data; - popoverTotal.value = list.length; - } - projectTableData.value = list; - // 写入缓存 - _pageCache.set(key, response.data); - // 预加载周边页 - const totalPages = Math.ceil(popoverTotal.value / pageSize); - _prefetchPages(code, pageNo, pageSize, searchKey, totalPages); - } else { - projectTableData.value = []; - popoverTotal.value = 0; - ElMessage.warning(response.msg || '暂无数据'); - } - } catch (error) { - ElMessage.error('查询失败'); - projectTableData.value = []; - popoverTotal.value = 0; - } finally { - tableLoading.value = false; - } -}; - -/** - * 弹窗内搜索触发(重置页码) - */ -const handlePopoverSearch = () => { - if (currentCategoryCode.value) { - fetchProjectsByCategory(currentCategoryCode.value, true); - } -}; - -// 捕获阶段记录真实点击目标(在 DOM 变化前) -let _capturedTarget = null; -const _captureMousedown = (e) => { _capturedTarget = e.target; }; - -// 分页操作时暂时屏蔽 document mousedown 关闭逻辑 -let _ignoreMaskOnce = false; - -/** - * 弹窗内分页页码变化 - */ -const handlePopoverPageChange = (page) => { - _ignoreMaskOnce = true; - popoverPageNo.value = page; - fetchProjectsByCategory(currentCategoryCode.value); -}; - -/** - * 弹窗内每页条数变化 - */ -const handlePopoverSizeChange = (size) => { - _ignoreMaskOnce = true; - popoverPageSize.value = size; - popoverPageNo.value = 1; - fetchProjectsByCategory(currentCategoryCode.value); -}; - -/** - * document 级 mousedown 监听:点击 popover 面板及所有浮层之外时关闭 - * 使用捕获阶段记录的真实目标,避免 DOM 销毁后 contains 检测失效 - */ -const onDocumentMousedown = (e) => { - if (!showProjectPopover.value) return; - - // 分页操作触发时,忽略本次关闭 - if (_ignoreMaskOnce) { - _ignoreMaskOnce = false; - return; - } - - // 使用捕获阶段记录的目标(DOM 变化前的真实元素) - const target = _capturedTarget || e.target; - - // 判断点击目标是否在 popover 面板内 - const popoverEl = document.querySelector('.diagnosis-project-popover'); - if (popoverEl && popoverEl.contains(target)) return; - - // 判断点击目标是否在任意浮层内(el-select-dropdown / el-popper 等) - const floatEls = document.querySelectorAll('.el-select-dropdown, .el-popper, .el-picker-panel'); - for (const el of floatEls) { - if (el.contains(target)) return; - } - // 用坐标兜底:浮层可能已销毁,检查元素是否曾属于浮层类名 - if (target && target.closest && target.closest('.el-select-dropdown, .el-popper, .el-picker-panel')) return; - - showProjectPopover.value = false; + row.amount = parseFloat((row.unitPrice * row.quantity).toFixed(2)); + row.totalAmount = parseFloat((row.amount + (row.serviceFee || 0)).toFixed(2)); + calculateAmounts(); }; @@ -3022,10 +2709,7 @@ onMounted(async () => { } }); -onUnmounted(() => { - document.removeEventListener('mousedown', _captureMousedown, true); - document.removeEventListener('mousedown', onDocumentMousedown); -}); +onUnmounted(() => {}); @@ -3294,83 +2978,38 @@ onUnmounted(() => { flex-wrap: nowrap; } -/* 诊疗项目选择器单元格 */ -.project-selector-cell { - position: relative; - width: 100%; +/* 行内搜索下拉项样式(挂载到 body 的 popper) */ +.project-inline-dropdown .el-autocomplete-suggestion__list li { + padding: 0; } - -/* 全屏遮罩,确保点击弹窗外任意位置关闭 */ -.popover-mask { - position: fixed; - top: 0; - left: 0; - right: 0; - bottom: 0; - z-index: 999; /* 低于 popover 的 z-index */ - background: transparent; -} - -/* Popover 内部容器布局 */ -.popover-container { +.project-inline-item { display: flex; - border: 1px solid #e4e7ed; - border-radius: 4px; - overflow: hidden; - box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15); - background: #fff; + align-items: center; + gap: 8px; + padding: 6px 12px; + font-size: 13px; + cursor: pointer; } - -/* 左侧分类栏 */ -.category-sidebar { - width: 120px; - background-color: #f5f7fa; - border-right: 1px solid #e4e7ed; - max-height: 400px; - overflow-y: auto; +.project-inline-item .item-name { + flex: 1; + min-width: 0; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} +.project-inline-item .item-code { + color: #409EFF; + font-size: 12px; flex-shrink: 0; } - -.category-item { - padding: 12px 15px; - cursor: pointer; - font-size: 14px; - color: #606266; - transition: all 0.2s; - border-left: 3px solid transparent; -} - -.category-item:hover { - background-color: #ecf5ff; - color: #409EFF; -} - -.category-item.active { - background-color: #ecf5ff; - color: #409EFF; - border-left-color: #409EFF; +.project-inline-item .item-price { + color: #f56c6c; + font-size: 12px; font-weight: 600; + flex-shrink: 0; } - -/* 右侧列表区域 */ -.project-list-area { - flex: 1; - padding: 10px; - max-height: 400px; - overflow-y: auto; - display: flex; - flex-direction: column; -} - -.empty-tip { - text-align: center; +.project-inline-item .item-unit { color: #909399; - margin-top: 20px; - font-size: 13px; -} - -/* 全局样式:调整 popover 的 padding 和 z-index */ -.diagnosis-project-popover { - padding: 0 !important; - z-index: 2000 !important; + font-size: 12px; + flex-shrink: 0; } \ No newline at end of file diff --git a/openhis-ui-vue3/src/views/surgicalschedule/index.vue b/openhis-ui-vue3/src/views/surgicalschedule/index.vue index 77423c3d..cba48347 100644 --- a/openhis-ui-vue3/src/views/surgicalschedule/index.vue +++ b/openhis-ui-vue3/src/views/surgicalschedule/index.vue @@ -101,7 +101,7 @@ @@ -259,7 +259,6 @@ placeholder="选择安排时间" value-format="YYYY-MM-DD HH:mm:ss" format="YYYY-MM-DD HH:mm:ss" - :default-time="new Date(2026, 0, 1, 8, 0, 0)" style="width: 100%" /> @@ -446,7 +445,7 @@ v-for="item in anesthesiaList" :key="item.value" :label="item.label" - :value="item.value" + :value="Number(item.value)" /> @@ -611,7 +610,7 @@ v-for="item in incisionTypeList" :key="item.value" :label="item.label" - :value="item.value" + :value="Number(item.value)" /> @@ -748,17 +747,15 @@ + + + - - - @@ -889,6 +886,9 @@ const form = reactive({ allergyRemark: undefined, surgeryNature: undefined, surgerySite: undefined, + incisionLevel: undefined, + surgeryLevel: undefined, + admissionTime: undefined, entryTime: undefined, roomCode: undefined, @@ -1707,44 +1707,6 @@ function getAnesthesiaName(anesMethod) { return anesthesia ? anesthesia.label : '' } -// 获取状态标签类型 -function getStatusTagType(statusEnum) { - const typeMap = { - 0: 'info', // 新开/待排期 - 1: 'warning', // 已排期 - 2: 'primary', // 手术中 - 3: 'success', // 已完成 - 4: 'danger', // 已取消 - 5: 'info' // 暂停 - } - return typeMap[statusEnum] || 'info' -} - -// 获取状态文本 -function getStatusText(statusEnum) { - const textMap = { - 0: '待排期', - 1: '已排期', - 2: '手术中', - 3: '已完成', - 4: '已取消', - 5: '暂停' - } - return textMap[statusEnum] || '未知' -} - -// 将麻醉名称映射为枚举值 -function mapAnesthesiaNameToValue(name) { - if (!name) return undefined - if (name.includes('局部')) return '1' - if (name.includes('区域')) return '2' - if (name.includes('全身') || name.includes('全麻')) return '3' - if (name.includes('脊椎')) return '4' - if (name.includes('硬膜外')) return '5' - if (name.includes('表面')) return '6' - return undefined -} - // 根据出生日期计算年龄 function calculateAge(birthDay) { if (!birthDay) return '' @@ -1780,12 +1742,12 @@ function confirmApply() { const selectedRow = selectedRows[0] // 填充手术申请信息到表单 form.surgeryNo = selectedRow.surgeryNo // 手术单号对应填入手术单号 - form.applyId=selectedRow.applyId// 手术申请 id - form.patientId = selectedRow.patientId// 患者 id - form.visitId = selectedRow.encounterId // id 对应填入就诊 id + form.applyId=selectedRow.applyId// 手术申请id + form.patientId = selectedRow.patientId// 患者id + form.visitId = selectedRow.encounterId // id对应填入就诊id form.operCode = selectedRow.surgeryNo // 手术单号作为手术编码 - form.operName = selectedRow.descJson.surgeryName//手术名称 - form.preoperativeDiagnosis = selectedRow.descJson?.preoperativeDiagnosis || '' + form.operName = selectedRow.descJson?.surgeryName//手术名称 + form.preoperativeDiagnosis = selectedRow.preoperativeDiagnosis || selectedRow.descJson?.preoperativeDiagnosis form.patientName = selectedRow.name// 患者姓名对应填入患者姓名 form.gender = selectedRow.gender//患者性别 form.birthDay = selectedRow.birthDay//患者出生日期 @@ -1795,17 +1757,14 @@ function confirmApply() { form.applyTime = selectedRow.applyTime//申请时间 form.surgeryType = selectedRow.surgeryTypeEnum//手术类型 form.surgeryNature = selectedRow.surgeryTypeEnum//手术性质 - form.surgeonCode = selectedRow.mainSurgeonId//主刀医生 id + form.surgeonCode = selectedRow.mainSurgeonId//主刀医生id form.surgeonName = selectedRow.mainSurgeonName//主刀医生姓名 form.feeType = selectedRow.feeType//费用类别 - // Bug #252 修复:继承手术申请的麻醉方式 - if (selectedRow.descJson?.anesthesiaName) { - form.anesMethod = mapAnesthesiaNameToValue(selectedRow.descJson.anesthesiaName) - } - // Bug #253/#254 修复:继承手术申请的切口类型 - if (selectedRow.descJson?.incisionLevel) { - form.incisionType = String(selectedRow.descJson.incisionLevel) - } + form.anesMethod = selectedRow.anesthesiaTypeEnum != null ? Number(selectedRow.anesthesiaTypeEnum) : undefined //麻醉方法 + form.incisionType = selectedRow.incisionLevel != null ? Number(selectedRow.incisionLevel) : undefined //切口类型 + form.surgeryLevel = selectedRow.surgeryLevel != null ? Number(selectedRow.surgeryLevel) : (selectedRow.descJson?.surgeryLevel != null ? Number(selectedRow.descJson.surgeryLevel) : undefined) //手术等级 + form.surgerySite = selectedRow.descJson?.surgerySite //手术部位 + form.isolationType = selectedRow.descJson?.isolationType //隔离类型 showApplyDialog.value = false }