@@ -50,6 +50,16 @@
<!-- 手术等级 -- >
< el-table-column label = "手术等级" align = "center" prop = "surgeryLevel_dictText" width = "100" / >
<!-- 手术室确认时间 -- >
< el-table-column label = "手术室确认时间" align = "center" prop = "operatingRoomConfirmTime" width = "180" >
< template # default = "scope" >
{ { scope . row . operatingRoomConfirmTime ? parseTime ( scope . row . operatingRoomConfirmTime , '{y}-{m}-{d} {h}:{i}:{s}' ) : '-' } }
< / template >
< / el-table-column >
<!-- 手术室确认人 -- >
< el-table-column label = "手术室确认人" align = "center" prop = "operatingRoomConfirmUser" width = "100" / >
<!-- 状态 -- >
< el-table-column label = "状态" align = "center" prop = "statusEnum_dictText" width = "100" >
< template # default = "scope" >
@@ -63,13 +73,13 @@
< el-table-column label = "操作" align = "center" width = "200" fixed = "right" >
< template # default = "scope" >
<!-- 查看 : 显示手术申请详情 ( 只读模式 ) -- >
< el-button link type = "primary" @click ="handleView(scope.row)" > 查看 < / el -button >
< el-button link type = "primary" icon = "View" @click ="handleView(scope.row)" > 查看 < / el -button >
<!-- 编辑 : 修改手术申请信息 ( 只有状态为新开的能修改 ) -- >
< el-button link type = "primary" @click ="handleEdit(scope.row)" v-if = "scope.row.statusEnum === 0" > 编辑 < / el -button >
< el-button link type = "primary" icon = "Edit" @click ="handleEdit(scope.row)" v-if = "scope.row.statusEnum === 0" > 编辑 < / el -button >
<!-- 删除 : 取消手术申请 ( 作废 ) -- >
< el-button link type = "danger" @click ="handleDelete(scope.row)" v-if = "scope.row.statusEnum === 0 || scope.row.statusEnum === 1" > 删除 < / el -button >
< el-button link type = "danger" icon = "Delete" @click ="handleDelete(scope.row)" v-if = "scope.row.statusEnum === 0 || scope.row.statusEnum === 1" > 删除 < / el -button >
< / template >
< / el-table-column >
< / el-table >
@@ -144,11 +154,27 @@
< / el-col >
< el-col :span = "12" >
< el-form-item label = "手术名称" prop = "surgeryName" >
< el-input v-model = "form.surgeryName" placeholder="请选择手术名称" >
< template # append >
< el-button icon = "Search" @click ="selectSurgeryName" / >
< / template >
< / el-input >
< el-select
v-model = "form.surgeryName"
filterable
remote
reserve -keyword
placeholder = "请输入关键词搜索手术"
:remote-method = "remoteSearchSurgery"
:loading = "surgeryLoading"
style = "width: 100%"
@change ="handleSurgeryChange"
@focus ="() => remoteSearchSurgery('')"
>
< el-option
v-for = "item in surgeryNameList"
:key = "item.id"
:label = "item.name"
:value = "item.name"
>
< span > { { item . retailPrice || item . retail _price || item . salePrice || item . price || 0 } } 元 - { { item . name } } < / span >
< / el-option >
< / el-select >
< / el-form-item >
< / el-col >
< / el-row >
@@ -167,6 +193,97 @@
< / el-col >
< / el-row >
< el-row :gutter = "20" >
< el-col :span = "24" >
< el-form-item label = "添加次要手术" prop = "appendSurgery" >
< el-button type = "primary" plain icon = "Plus" @click ="addAppendSurgery" style = "width: 100%" > 添加次要手术 < / el-button >
< / el-form-item >
< / el-col >
< / el-row >
<!-- 次要手术表格 -- >
< el-row v-if = "form.secondarySurgeries && form.secondarySurgeries.length > 0" >
< el -col :span = "24" style = "margin-bottom: 20px;" >
< el-table :data = "form.secondarySurgeries" border stripe size = "small" >
< el-table-column label = "手术名称" min -width = " 200 " >
< template # default = "scope" >
< el-select
v-model = "scope.row.surgeryName"
filterable
remote
reserve -keyword
placeholder = "搜索次要手术"
:remote-method = "remoteSearchSurgery"
:loading = "surgeryLoading"
style = "width: 100%"
@change ="(val) => handleSecondarySurgeryChange(val, scope.row)"
@focus ="() => remoteSearchSurgery('')"
>
< el-option
v-for = "item in surgeryNameList"
:key = "item.id"
:label = "item.name"
:value = "item.name"
>
< span > { { item . retailPrice || item . retail _price || item . salePrice || item . price || 0 } } 元 - { { item . name } } < / span >
< / el-option >
< / el-select >
< / template >
< / el-table-column >
< el-table-column label = "手术等级" width = "130" >
< template # default = "scope" >
< el-select v-model = "scope.row.surgeryLevel" placeholder="选择等级" >
< el -option label = "一级手术" :value = "1" / >
< el-option label = "二级手术" :value = "2" / >
< el-option label = "三级手术" :value = "3" / >
< el-option label = "四级手术" :value = "4" / >
< / el-select >
< / template >
< / el-table-column >
< el-table-column label = "切口类型" width = "130" >
< template # default = "scope" >
< el-select v-model = "scope.row.incisionLevel" placeholder="选择切口" >
< el -option label = "I类切口" :value = "1" / >
< el-option label = "II类切口" :value = "2" / >
< el-option label = "III类切口" :value = "3" / >
< el-option label = "IV类切口" :value = "4" / >
< / el-select >
< / template >
< / el-table-column >
< el-table-column label = "麻醉方式" width = "180" >
< template # default = "scope" >
< el-select
v-model = "scope.row.anesthesiaName"
filterable
remote
reserve -keyword
placeholder = "搜索麻醉"
:remote-method = "remoteSearchAnesthesia"
:loading = "anesthesiaLoading"
style = "width: 100%"
@change ="(val) => handleSecondaryAnesthesiaChange(val, scope.row)"
@focus ="() => remoteSearchAnesthesia('')"
>
< el-option
v-for = "item in anesthesiaNameList"
:key = "item.id"
:label = "item.name"
:value = "item.name"
>
< span > { { item . retailPrice || item . retail _price || item . salePrice || item . price || 0 } } 元 - { { item . name } } < / span >
< / el-option >
< / el-select >
< / template >
< / el-table-column >
< el-table-column label = "操作" width = "80" align = "center" >
< template # default = "scope" >
< el-button link type = "danger" icon = "Delete" @click ="removeSecondarySurgery(scope.$index)" > < / el -button >
< / template >
< / el-table-column >
< / el-table >
< / el-col >
< / el-row >
<!-- 医疗信息区 -- >
< el-divider content -position = " left " > 医疗信息 < / el-divider >
@@ -195,10 +312,27 @@
< el-row :gutter = "20" >
< el-col :span = "12" >
< el-form-item label = "麻醉方式" prop = "anesthesiaTypeEnum " >
< el-select v-model = "form.anesthesiaTypeEnum" placeholder="请选择麻醉方式" style="width: 100%" >
< el -option label = "局麻" :value = "1" / >
< el-option label = "全麻" :value = "3" / >
< el-form-item label = "麻醉方式" prop = "anesthesiaName " >
< el-select
v-model = "form.anesthesiaName"
filterable
remote
reserve -keyword
placeholder = "搜索麻醉项目"
:remote-method = "remoteSearchAnesthesia"
:loading = "anesthesiaLoading"
style = "width: 100%"
@change ="handleAnesthesiaChange"
@focus ="() => remoteSearchAnesthesia('')"
>
< el-option
v-for = "item in anesthesiaNameList"
:key = "item.id"
:label = "item.name"
:value = "item.name"
>
< span > { { item . retailPrice || item . retail _price || item . salePrice || item . price || 0 } } 元 - { { item . name } } < / span >
< / el-option >
< / el-select >
< / el-form-item >
< / el-col >
@@ -224,12 +358,22 @@
< el-row :gutter = "20" >
< el-col :span = "12" >
< el-form-item label = "手术 助手" prop = "assistantId" >
< el-select v-model = "form.assistantId" filterable clearable placeholder="请选择手术 助手" style="width: 100%" >
< el-form-item label = "第一 助手" prop = "assistant1 Id" >
< el-select v-model = "form.assistant1 Id" filterable clearable placeholder="请选择第一 助手" style="width: 100%" >
< el -option v-for = "item in doctorList" :key="item.id" :label="item.name" :value="item.id" / >
< / el-select >
< / el-form-item >
< / el-col >
< el-col :span = "12" >
< el-form-item label = "第二助手" prop = "assistant2Id" >
< el-select v-model = "form.assistant2Id" filterable clearable placeholder="请选择第二助手" style="width: 100%" >
< el -option v-for = "item in doctorList" :key="item.id" :label="item.name" :value="item.id" / >
< / el-select >
< / el-form-item >
< / el-col >
< / el-row >
< el-row :gutter = "20" >
< el-col :span = "12" >
< el-form-item label = "申请科室" prop = "applyDeptName" >
< el-input v-model = "form.applyDeptName" disabled placeholder="系统自动获取" / >
@@ -240,6 +384,31 @@
<!-- 其他信息区 -- >
< el-divider content -position = " left " > 其他信息 < / el-divider >
< el-row :gutter = "20" >
< el-col :span = "12" >
< el-form-item label = "急诊标志" prop = "emergencyFlag" >
< el-switch
v-model = "form.emergencyFlag"
:active-value = "1"
:inactive-value = "0"
active -text = " 是 "
inactive -text = " 否 "
/ >
< / el-form-item >
< / el-col >
< el-col :span = "12" >
< el-form-item label = "植入高值耗材" prop = "implantFlag" >
< el-switch
v-model = "form.implantFlag"
:active-value = "1"
:inactive-value = "0"
active -text = " 是 "
inactive -text = " 否 "
/ >
< / el-form-item >
< / el-col >
< / el-row >
< el-form-item label = "术前诊断" prop = "preoperativeDiagnosis" >
< el-input v-model = "form.preoperativeDiagnosis" disabled placeholder="自动获取门诊诊断的主要诊断名称" type="textarea" :rows="3" / >
< / el-form-item >
@@ -247,12 +416,40 @@
< el-form-item label = "手术指征" prop = "surgeryIndication" >
< el-input v-model = "form.surgeryIndication" placeholder="请输入手术指征" type="textarea" :rows="3" / >
< / el-form-item >
<!-- 费用信息区 -- >
< el-divider content -position = " left " > 费用信息 < / el-divider >
< el-row :gutter = "20" >
< el-col :span = "12" >
< el-form-item label = "手术费用" >
< el-input v-model = "form.surgeryFee" disabled placeholder="0.00" >
< template # append > 元 < / template >
< / el-input >
< / el-form-item >
< / el-col >
< el-col :span = "12" >
< el-form-item label = "麻醉费用" >
< el-input v-model = "form.anesthesiaFee" disabled placeholder="0.00" >
< template # append > 元 < / template >
< / el-input >
< / el-form-item >
< / el-col >
< / el-row >
< el-row :gutter = "20" >
< el-col :span = "12" >
< el-form-item label = "总计费用" >
< el-input :value = "totalCalculatedFee" disabled placeholder = "0.00" >
< template # append > 元 < / template >
< / el-input >
< / el-form-item >
< / el-col >
< / el-row >
< / el-form >
< template # footer >
< div class = "dialog-footer" >
< el-button @click ="cancel" > 取 消 < / el -button >
< el-button type = "primary" @click ="submitForm" > 提交申请 < / el -button >
< el-button icon = "Close" @click ="cancel" > 取 消 < / el -button >
< el-button type = "primary" icon = "Check" @click ="submitForm" > 提交申请 < / el -button >
< / div >
< / template >
< / el-dialog >
@@ -278,15 +475,28 @@
< el-descriptions-item label = "申请科室" > { { viewData . applyDeptName } } < / el-descriptions-item >
< el-descriptions-item label = "术前诊断" :span = "2" > { { viewData . preoperativeDiagnosis } } < / el-descriptions-item >
< el-descriptions-item label = "手术指征" :span = "2" > { { viewData . surgeryIndication } } < / el-descriptions-item >
<!-- 次要手术详情展示 -- >
< el-descriptions-item label = "次要手术" :span = "2" v-if = "viewData.secondarySurgeries && viewData.secondarySurgeries.length > 0" >
< el -table :data = "viewData.secondarySurgeries" border size = "small" >
< el-table-column prop = "surgeryName" label = "手术名称" / >
< el-table-column prop = "surgeryCode" label = "手术编码" width = "120" / >
< el-table-column label = "等级" width = "100" >
< template # default = "scope" >
{ { scope . row . surgeryLevel === 1 ? '一级' : scope . row . surgeryLevel === 2 ? '二级' : scope . row . surgeryLevel === 3 ? '三级' : scope . row . surgeryLevel === 4 ? '四级' : '-' } }
< / template >
< / el-table-column >
< / el-table >
< / el-descriptions-item >
< / el-descriptions >
< / el-dialog >
< / div >
< / template >
< script setup name = "SurgeryApplication" >
import { getCurrentInstance , ref , computed , watch } from 'vue'
import { getCurrentInstance , ref , computed , watch , onMounted } from 'vue'
import { getSurgeryPage , addSurgery , updateSurgery , deleteSurgery , getSurgeryDetail , updateSurgeryStatus } from '@/api/surgerymanage'
import { getEncounterDiagnosis } from '../api'
import { getEncounterDiagnosis , getDiagnosisTreatmentList , queryParticipantList } from '../api'
import { listUser } from '@/api/system/user'
import useUserStore from '@/store/modules/user'
@@ -320,20 +530,55 @@ const form = ref({
applyDeptName : undefined ,
surgeryNo : undefined ,
surgeryName : undefined ,
surgeryCode : undefined ,
surgeryTypeEnum : undefined ,
surgeryLevel : undefined ,
plannedTime : undefined ,
mainSurgeonId : undefined ,
assistantId : undefined ,
assistant1 Id : undefined ,
assistant2Id : undefined ,
anesthesiaTypeEnum : undefined ,
anesthesiaName : undefined ,
anesthesiaFee : undefined ,
surgeryFee : undefined ,
totalFee : undefined ,
incisionLevel : undefined ,
preoperativeDiagnosis : undefined ,
surgeryIndication : undefined
surgeryIndication : undefined ,
emergencyFlag : 0 , // 急诊标志,默认为否
implantFlag : 0 , // 植入高值耗材标志,默认为否
secondarySurgeries : [ ] // 次要手术列表
} )
const surgeryRef = ref ( )
const viewData = ref ( { } )
const title = ref ( '' )
const doctorList = ref ( [ ] )
const surgeryNameList = ref ( [ ] )
const anesthesiaNameList = ref ( [ ] )
const surgeryLoading = ref ( false )
const anesthesiaLoading = ref ( false )
// 计算总费用
const totalCalculatedFee = computed ( ( ) => {
const surgeryFee = parseFloat ( form . value . surgeryFee || 0 )
const anesthesiaFee = parseFloat ( form . value . anesthesiaFee || 0 )
// 加上次要手术费用
let secondaryFee = 0
if ( form . value . secondarySurgeries && form . value . secondarySurgeries . length > 0 ) {
secondaryFee = form . value . secondarySurgeries . reduce ( ( acc , curr ) => {
// 累加次要手术的手术费和麻醉费
const sFee = parseFloat ( curr . retailPrice || curr . retail _price || curr . surgeryFee || 0 )
const aFee = parseFloat ( curr . anesthesiaFee || 0 )
return acc + sFee + aFee
} , 0 )
}
return ( surgeryFee + anesthesiaFee + secondaryFee ) . toFixed ( 2 )
} )
// 监听总费用变化,同步到表单对象
watch ( totalCalculatedFee , ( newVal ) => {
form . value . totalFee = newVal
} )
// 字典选项
const surgeryStatusOptions = ref ( [
@@ -357,7 +602,9 @@ const rules = ref({
surgeryLevel : [ { required : true , message : '请选择手术等级' , trigger : 'change' } ] ,
plannedTime : [ { required : true , message : '请选择计划手术时间' , trigger : 'change' } ] ,
mainSurgeonId : [ { required : true , message : '请选择主刀医生' , trigger : 'change' } ] ,
anesthesiaTypeEnum : [ { required : true , message : '请选择麻醉方式' , trigger : 'change' } ]
anesthesiaName : [ { required : true , message : '请选择麻醉方式' , trigger : 'change' } ] ,
applyDoctorName : [ { required : true , message : '申请医生不能为空' , trigger : 'blur' } ] ,
applyDeptName : [ { required : true , message : '申请科室不能为空' , trigger : 'blur' } ]
} )
// 监听患者信息变化
@@ -369,6 +616,11 @@ watch(() => props.patientInfo, (newVal) => {
}
} , { immediate : true } )
// 挂载时加载医生列表
onMounted ( ( ) => {
loadDoctorList ( )
} )
// 获取手术申请列表
function getList ( ) {
if ( ! props . patientInfo ? . encounterId ) {
@@ -412,18 +664,53 @@ function loadDiagnosisInfo() {
// 加载医生列表
function loadDoctorList ( ) {
listUser ( { pageNo : 1 , pageSize : 1000 } ) . then ( res => {
if ( res . code === 200 ) {
doctorList . value = res . data . records || [ ]
console . log ( '加载医生列表成功,数量:' , doctorList . value . length )
} else {
proxy . $modal . msgError ( '获取医生列表失败' )
doctorList . value = [ ]
console . log ( '开始加载医生列表...' )
// 同时尝试两个接口,确保能获取到数据
const p1 = queryParticipantList ( { searchKey : '' } ) . catch ( ( ) => ( { code : 500 } ) )
const p2 = listUser ( { pageNo : 1 , pageSize : 1000 } ) . catch ( ( ) => ( { code : 500 } ) )
Promise . all ( [ p1 , p2 ] ) . then ( ( [ res1 , res2 ] ) => {
let list = [ ]
// 方案1: 从参与者接口获取
if ( res1 . code === 200 && res1 . data && Array . isArray ( res1 . data ) && res1 . data . length > 0 ) {
list = res1 . data . map ( item => ( {
id : item . practitionerId || item . practitioner _id || item . id ,
name : item . practitionerName || item . practitioner _name || item . nickName || item . name ,
orgName : item . organizationName || item . organization _name || item . deptName
} ) )
console . log ( '从参与者接口获取到医生:' , list . length )
}
// 方案2: 如果方案1没数据, 从用户接口获取
if ( list . length === 0 && res2 . code === 200 ) {
const data = res2 . data ? . records || res2 . rows || res2 . data || [ ]
if ( Array . isArray ( data ) ) {
list = data . map ( item => ( {
id : item . practitionerId || item . id || item . userId ,
name : item . nickName || item . name || item . userName ,
orgName : item . deptName || item . organizationName || item . orgId _dictText
} ) )
console . log ( '从用户接口获取到医生:' , list . length )
}
}
} ) . catch ( error => {
console . error ( '加载医生列表失败:' , error )
proxy . $modal . msgError ( '获取医生列表失败' )
doctorList . value = [ ]
if ( list . length > 0 ) {
// 去重处理 (根据ID)
const uniqueList = [ ]
const idMap = new Set ( )
for ( const item of list ) {
if ( item . id && ! idMap . has ( String ( item . id ) ) ) {
idMap . add ( String ( item . id ) )
uniqueList . push ( item )
}
}
doctorList . value = uniqueList
} else {
console . warn ( '两个医生接口均未返回有效数据' )
}
} ) . catch ( err => {
console . error ( '加载医生列表失败:' , err )
} )
}
@@ -446,7 +733,12 @@ function handleAdd() {
form . value . patientGender = props . patientInfo . genderEnum _enumText
form . value . patientAge = props . patientInfo . age
form . value . applyDoctorName = userStore . nickName
form . value . applyDeptName = props . patientInfo . deptName || ''
form . value . applyDeptName = userStore . orgName || props. patientInfo . deptName || ''
// 确保医生列表已加载
if ( doctorList . value . length === 0 ) {
loadDoctorList ( )
}
// 加载诊断信息
loadDiagnosisInfo ( )
@@ -463,9 +755,39 @@ function handleEdit(row) {
open . value = true
isEditMode . value = true
// 确保医生列表已加载
if ( doctorList . value . length === 0 ) {
loadDoctorList ( )
}
getSurgeryDetail ( row . id ) . then ( res => {
if ( res . code === 200 ) {
console . log ( '【编辑手术】完整返回数据:' , res . data )
console . log ( '【编辑手术】手术指征字段值:' , res . data . surgeryIndication )
Object . assign ( form . value , res . data )
console . log ( '【编辑手术】赋值后form.surgeryIndication:' , form . value . surgeryIndication )
// 处理麻醉名称回显
if ( res . data . anesthesiaTypeEnum _dictText ) {
form . value . anesthesiaName = res . data . anesthesiaTypeEnum _dictText
anesthesiaNameList . value = [ {
name : res . data . anesthesiaTypeEnum _dictText ,
id : 'default'
} ]
}
// 处理回显
if ( res . data . surgeryName ) {
surgeryNameList . value = [ {
name : res . data . surgeryName ,
busNo : res . data . surgeryCode
} ]
}
// 确保 secondarySurgeries 是数组
if ( ! form . value . secondarySurgeries ) {
form . value . secondarySurgeries = [ ]
}
}
} ) . catch ( error => {
console . error ( '获取手术信息失败:' , error )
@@ -478,7 +800,18 @@ function handleView(row) {
viewOpen . value = true
getSurgeryDetail ( row . id ) . then ( res => {
if ( res . code === 200 ) {
console . log ( '【手术详情】完整返回数据:' , res . data )
console . log ( '【手术详情】手术指征字段值:' , res . data . surgeryIndication )
console . log ( '【手术详情】手术指征字段类型:' , typeof res . data . surgeryIndication )
console . log ( '【手术详情】手术指征是否为空:' , res . data . surgeryIndication === null || res . data . surgeryIndication === undefined || res . data . surgeryIndication === '' )
viewData . value = res . data
if ( ! viewData . value . secondarySurgeries ) {
viewData . value . secondarySurgeries = [ ]
}
console . log ( '【手术详情】赋值后viewData:' , viewData . value )
console . log ( '【手术详情】赋值后viewData.surgeryIndication:' , viewData . value . surgeryIndication )
}
} ) . catch ( error => {
console . error ( '获取手术信息失败:' , error )
@@ -522,16 +855,158 @@ function handleRefresh() {
proxy . $modal . msgSuccess ( '刷新成功' )
}
// 选择手术名称
function selectSurgeryName ( ) {
proxy . $modal . msgInfo ( '请选择手术名称' )
// TODO: 实现手术名称选择弹窗
// 远程搜索手术项目
function remoteSearchSurgery ( query ) {
surgeryLoading . value = true
getDiagnosisTreatmentList ( {
searchKey : query || '' ,
pageNo : 1 ,
pageSize : 100
} ) . then ( res => {
// 处理不同的数据返回格式
let data = [ ]
if ( res . data && res . data . records ) {
data = res . data . records
} else if ( res . data && Array . isArray ( res . data ) ) {
data = res . data
} else if ( res . records && Array . isArray ( res . records ) ) {
data = res . records
}
// 在前端进行手术分类过滤 (categoryCode 为 '24' 是手术)
// 同时过滤掉停用的项 (statusEnum 为 2 是启用)
surgeryNameList . value = data . filter ( item =>
( item . categoryCode === '24' || item . categoryCode _dictText === '手术' ) &&
( item . statusEnum === 2 || item . statusEnum _enumText === '启用' || ! item . statusEnum )
)
surgeryLoading . value = false
} ) . catch ( error => {
console . error ( '搜索手术项目失败:' , error )
surgeryLoading . value = false
} )
}
// 远程搜索麻醉项目
function remoteSearchAnesthesia ( query ) {
anesthesiaLoading . value = true
getDiagnosisTreatmentList ( {
searchKey : query || '' ,
pageNo : 1 ,
pageSize : 100
} ) . then ( res => {
let data = [ ]
if ( res . data && res . data . records ) {
data = res . data . records
} else if ( res . data && Array . isArray ( res . data ) ) {
data = res . data
} else if ( res . records && Array . isArray ( res . records ) ) {
data = res . records
}
// 过滤麻醉项 (categoryCode 为 '25' 是麻醉)
anesthesiaNameList . value = data . filter ( item =>
( item . categoryCode === '25' || item . categoryCode _dictText === '麻醉' ) &&
( item . statusEnum === 2 || item . statusEnum _enumText === '启用' || ! item . statusEnum )
)
anesthesiaLoading . value = false
} ) . catch ( error => {
console . error ( '搜索麻醉项目失败:' , error )
anesthesiaLoading . value = false
} )
}
// 手术项目选择变更
function handleSurgeryChange ( val ) {
const selected = surgeryNameList . value . find ( item => item . name === val )
if ( selected ) {
form . value . surgeryCode = selected . busNo
// 设置手术费用 (增加对多种字段名和类型的兼容)
const price = selected . retailPrice ? ? selected . retail _price ? ? selected . price ? ? selected . salePrice ? ? 0
form . value . surgeryFee = parseFloat ( price )
// 如果手术等级为空,可以尝试自动填充
if ( ! form . value . surgeryLevel && selected . level ) {
form . value . surgeryLevel = selected . level
}
}
}
// 麻醉项目选择变更
function handleAnesthesiaChange ( val ) {
const selected = anesthesiaNameList . value . find ( item => item . name === val )
if ( selected ) {
// 设置麻醉费用 (增加对多种字段名和类型的兼容)
const price = selected . retailPrice ? ? selected . retail _price ? ? selected . price ? ? selected . salePrice ? ? 0
form . value . anesthesiaFee = parseFloat ( price )
// 尝试根据名称映射麻醉方式枚举
form . value . anesthesiaTypeEnum = mapAnesthesiaNameToEnum ( selected . name )
}
}
// 次要手术麻醉项目选择变更
function handleSecondaryAnesthesiaChange ( val , row ) {
const selected = anesthesiaNameList . value . find ( item => item . name === val )
if ( selected ) {
// 设置该次要手术的麻醉费用
const price = selected . retailPrice ? ? selected . retail _price ? ? selected . price ? ? selected . salePrice ? ? 0
row . anesthesiaFee = parseFloat ( price )
row . anesthesiaTypeEnum = mapAnesthesiaNameToEnum ( selected . name )
row . anesthesiaName = selected . name
}
}
// 辅助方法:将麻醉名称映射为枚举值
function mapAnesthesiaNameToEnum ( 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 handleSecondarySurgeryChange ( val , row ) {
const selected = surgeryNameList . value . find ( item => item . name === val )
if ( selected ) {
row . surgeryCode = selected . busNo
row . surgeryName = selected . name
// 设置次要手术费用
const price = selected . retailPrice ? ? selected . retail _price ? ? selected . price ? ? selected . salePrice ? ? 0
row . surgeryFee = parseFloat ( price )
// 自动填充等级信息(如果后端返回了)
if ( selected . level ) row . surgeryLevel = selected . level
}
}
// 添加次要手术
function addAppendSurgery ( ) {
form . value . secondarySurgeries . push ( {
surgeryName : '' ,
surgeryCode : '' ,
surgeryLevel : undefined ,
incisionLevel : undefined ,
anesthesiaTypeEnum : undefined
} )
}
// 移除次要手术
function removeSecondarySurgery ( index ) {
form . value . secondarySurgeries . splice ( index , 1 )
}
// 提交表单
function submitForm ( ) {
proxy . $refs [ 'surgeryRef' ] . validate ( ( valid ) => {
if ( valid ) {
console . log ( '【提交表单】完整表单数据:' , JSON . parse ( JSON . stringify ( form . value ) ) )
console . log ( '【提交表单】手术指征字段值:' , form . value . surgeryIndication )
console . log ( '【提交表单】手术指征字段类型:' , typeof form . value . surgeryIndication )
if ( form . value . id == undefined ) {
// 新增手术
addSurgery ( form . value ) . then ( ( res ) => {
@@ -579,15 +1054,24 @@ function reset() {
applyDeptName : undefined ,
surgeryNo : undefined ,
surgeryName : undefined ,
surgeryCode : undefined ,
surgeryTypeEnum : undefined ,
surgeryLevel : undefined ,
plannedTime : undefined ,
mainSurgeonId : undefined ,
assistantId : undefined ,
assistant1 Id : undefined ,
assistant2Id : undefined ,
anesthesiaTypeEnum : undefined ,
anesthesiaName : undefined ,
anesthesiaFee : undefined ,
surgeryFee : undefined ,
totalFee : undefined ,
incisionLevel : undefined ,
preoperativeDiagnosis : undefined ,
surgeryIndication : undefined
surgeryIndication : undefined ,
emergencyFlag : 0 ,
implantFlag : 0 ,
secondarySurgeries : [ ]
}
if ( surgeryRef . value ) {
surgeryRef . value . resetFields ( )