fix(consultation): 解决会诊流程中的多个功能问题
- 在 deptappthoursManage.js 中添加 status 参数以仅获取已启动的机构 - 为 consultationapplication 组件添加已确认和已签名状态选项 - 扩展操作列宽度并添加打印功能按钮 - 优化 handlePrint 方法以支持行参数和性别枚举转换 - 为 consultationconfirmation 组件添加必填验证和编辑权限控制 - 修复会诊确认医师信息回显逻辑 - 在 inspectionApplication 组件中修复表格行点击事件和检验项目加载 - 禁用非紧急标记的编辑权限以解决Bug #268 - 为 surgeryApplication 组件添加响应码验证和错误处理 - 在 consultation 组件中添加表单验证清除功能 - 为 PackageManagement 组件实现动态机构选项加载 - 重构 PackageSettings 组件的套餐金额显示和只读模式 - 为检查项目设置组件添加套餐筛选和下级类型选择功能 - 实现检验套餐的编辑和查看模式切换功能
This commit is contained in:
@@ -17,8 +17,13 @@
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="卫生机构">
|
||||
<el-select v-model="queryParams.organization" placeholder="请选择机构" style="width: 150px" clearable>
|
||||
<el-option label="演示医院" value="演示医院" />
|
||||
<el-select v-model="queryParams.organization" placeholder="请选择机构" style="width: 150px" clearable filterable>
|
||||
<el-option
|
||||
v-for="org in organizationOptions"
|
||||
:key="org.value"
|
||||
:label="org.label"
|
||||
:value="org.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
|
||||
@@ -199,6 +204,7 @@ import {ElMessage, ElMessageBox} from 'element-plus'
|
||||
import {getDicts} from '@/api/system/dict/data'
|
||||
import {listDept} from '@/api/system/dept'
|
||||
import {delCheckPackage, getCheckPackage, listCheckPackage} from '@/api/system/checkType'
|
||||
import {getTenantPage} from '@/api/system/tenant'
|
||||
import request from '@/utils/request'
|
||||
import useUserStore from '@/store/modules/user'
|
||||
|
||||
@@ -275,6 +281,8 @@ const loading = ref(false)
|
||||
const packageLevelOptions = ref([])
|
||||
// 科室选项
|
||||
const departments = ref([])
|
||||
// 卫生机构选项
|
||||
const organizationOptions = ref([])
|
||||
|
||||
// 初始化数据
|
||||
onMounted(async () => {
|
||||
@@ -394,6 +402,33 @@ onMounted(async () => {
|
||||
}
|
||||
}
|
||||
|
||||
// 获取卫生机构列表
|
||||
try {
|
||||
const tenantResponse = await getTenantPage({ pageNum: 1, pageSize: 100 })
|
||||
if (tenantResponse && tenantResponse.code === 200) {
|
||||
const tenantData = tenantResponse.data || {}
|
||||
let tenantList = []
|
||||
if (Array.isArray(tenantData)) {
|
||||
tenantList = tenantData
|
||||
} else if (tenantData.records) {
|
||||
tenantList = tenantData.records
|
||||
} else if (tenantData.rows) {
|
||||
tenantList = tenantData.rows
|
||||
} else if (tenantData.list) {
|
||||
tenantList = tenantData.list
|
||||
}
|
||||
// 过滤启用的机构
|
||||
organizationOptions.value = tenantList
|
||||
.filter(item => item && item.status === '0')
|
||||
.map(item => ({
|
||||
value: item.tenantName || item.name || item.orgName || String(item.id),
|
||||
label: item.tenantName || item.name || item.orgName || String(item.id)
|
||||
}))
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('获取卫生机构列表失败:', error)
|
||||
}
|
||||
|
||||
// 加载列表数据
|
||||
handleQuery()
|
||||
})
|
||||
|
||||
@@ -87,7 +87,7 @@
|
||||
|
||||
<el-col :xs="24" :sm="12" :md="8" :lg="6">
|
||||
<el-form-item label="套餐金额">
|
||||
<el-input v-model="formData.packagePrice" :disabled="true" placeholder="自动计算">
|
||||
<el-input v-model="packagePriceDisplay" :disabled="true" placeholder="自动计算">
|
||||
<template #append>元</template>
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
@@ -112,73 +112,60 @@
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :xs="24" :sm="12" :md="8" :lg="6">
|
||||
<el-form-item label="是否停用">
|
||||
<el-radio-group v-model="formData.isDisabled">
|
||||
<el-radio :value="0">启用</el-radio>
|
||||
<el-radio :value="1">停用</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :xs="24" :sm="12" :md="8" :lg="6">
|
||||
<el-form-item label="是否停用">
|
||||
<el-radio-group v-model="formData.isDisabled" :disabled="isReadOnly">
|
||||
<el-radio :value="0">启用</el-radio>
|
||||
<el-radio :value="1">停用</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :xs="24" :sm="12" :md="8" :lg="6">
|
||||
<el-form-item label="显示套餐名">
|
||||
<el-radio-group v-model="formData.showPackageName">
|
||||
<el-radio :value="1">是</el-radio>
|
||||
<el-radio :value="0">否</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :xs="24" :sm="12" :md="8" :lg="6">
|
||||
<el-form-item label="显示套餐名">
|
||||
<el-radio-group v-model="formData.showPackageName" :disabled="isReadOnly">
|
||||
<el-radio :value="1">是</el-radio>
|
||||
<el-radio :value="0">否</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :xs="24" :sm="12" :md="8" :lg="6">
|
||||
<el-form-item label="生成服务费">
|
||||
<el-radio-group v-model="formData.generateServiceFee">
|
||||
<el-radio :value="1">是</el-radio>
|
||||
<el-radio :value="0">否</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :xs="24" :sm="12" :md="8" :lg="6">
|
||||
<el-form-item label="生成服务费">
|
||||
<el-radio-group v-model="formData.generateServiceFee" :disabled="isReadOnly">
|
||||
<el-radio :value="1">是</el-radio>
|
||||
<el-radio :value="0">否</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :xs="24" :sm="12" :md="8" :lg="6">
|
||||
<el-form-item label="套餐价格">
|
||||
<el-radio-group v-model="formData.packagePriceEnabled">
|
||||
<el-radio :value="1">启用</el-radio>
|
||||
<el-radio :value="0">不启用</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :xs="24" :sm="12" :md="8" :lg="6">
|
||||
<el-form-item label="套餐价格">
|
||||
<el-radio-group v-model="formData.packagePriceEnabled" :disabled="isReadOnly">
|
||||
<el-radio :value="1">启用</el-radio>
|
||||
<el-radio :value="0">不启用</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :xs="24" :sm="12" :md="8" :lg="6">
|
||||
<el-form-item label="服务费">
|
||||
<el-input-number
|
||||
v-model="formData.serviceFee"
|
||||
:precision="2"
|
||||
:min="0"
|
||||
placeholder="请输入服务费"
|
||||
style="width: 100%"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :xs="24" :sm="12" :md="8" :lg="6">
|
||||
<el-form-item label="服务费">
|
||||
<el-input-number
|
||||
v-model="formData.serviceFee"
|
||||
:precision="2"
|
||||
:min="0"
|
||||
placeholder="请输入服务费"
|
||||
style="width: 100%"
|
||||
:disabled="isReadOnly"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :xs="24" :sm="12" :md="8" :lg="6">
|
||||
<el-form-item label="日期">
|
||||
<el-date-picker
|
||||
v-model="formData.createDate"
|
||||
type="date"
|
||||
placeholder="选择日期"
|
||||
format="YYYY-MM-DD"
|
||||
value-format="YYYY-MM-DD"
|
||||
:disabled="true"
|
||||
style="width: 100%"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :xs="24" :sm="12" :md="12" :lg="12">
|
||||
<el-form-item label="备注">
|
||||
<el-input v-model="formData.remark" type="textarea" placeholder="请输入备注" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :xs="24" :sm="12" :md="12" :lg="12">
|
||||
<el-form-item label="备注">
|
||||
<el-input v-model="formData.remark" type="textarea" placeholder="请输入备注" :disabled="isReadOnly" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-form>
|
||||
</div>
|
||||
@@ -338,7 +325,7 @@
|
||||
<span v-else>{{ row.origin || '-' }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" width="150" align="center" fixed="right">
|
||||
<el-table-column label="操作" v-if="!isReadOnly" width="150" align="center" fixed="right">
|
||||
<template #default="{ row, $index }">
|
||||
<div class="actions">
|
||||
<el-button
|
||||
@@ -446,7 +433,7 @@ const formData = reactive({
|
||||
user: '',
|
||||
packageName: '',
|
||||
organization: '',
|
||||
packagePrice: '0.00',
|
||||
packagePrice: 0,
|
||||
discount: '',
|
||||
creator: userStore.name || '当前用户',
|
||||
isDisabled: 0,
|
||||
@@ -458,6 +445,14 @@ const formData = reactive({
|
||||
createDate: new Date().toISOString().split('T')[0] // 自动生成当前系统日期
|
||||
})
|
||||
|
||||
// 套餐金额显示值(格式化后的字符串)
|
||||
const packagePriceDisplay = computed({
|
||||
get: () => formData.packagePrice?.toFixed(2) || '0.00',
|
||||
set: (value) => {
|
||||
// 只读,不允许直接修改
|
||||
}
|
||||
})
|
||||
|
||||
// 表单验证规则
|
||||
const formRules = {
|
||||
packageType: [
|
||||
@@ -499,6 +494,9 @@ watch(() => props.packageData, (newData) => {
|
||||
function loadPackageData(data) {
|
||||
if (!data) return
|
||||
|
||||
console.log('=== 加载套餐数据 ===')
|
||||
console.log('套餐数据:', data)
|
||||
|
||||
// 填充基本信息
|
||||
Object.keys(formData).forEach(key => {
|
||||
if (data[key] !== undefined) {
|
||||
@@ -511,7 +509,7 @@ function loadPackageData(data) {
|
||||
// 旧编码格式:在下拉框中添加临时选项
|
||||
const tempDept = {
|
||||
deptCode: deptValue,
|
||||
dictLabel: `旧编码: ${deptValue} (请重新选择)`,
|
||||
dictLabel: `旧编码:${deptValue} (请重新选择)`,
|
||||
dictValue: deptValue,
|
||||
isOldFormat: true
|
||||
}
|
||||
@@ -548,13 +546,45 @@ function loadPackageData(data) {
|
||||
editing: false,
|
||||
filteredList: diagnosisTreatmentList.value
|
||||
}))
|
||||
console.log('明细数据加载成功,条数:', detailData.value.length)
|
||||
} else {
|
||||
console.log('没有明细数据')
|
||||
}
|
||||
|
||||
console.log('formData 加载后:', formData)
|
||||
console.log('detailData 加载后:', detailData.value)
|
||||
}
|
||||
|
||||
onMounted(async () => {
|
||||
console.log('=== PackageSettings 组件开始初始化 ===')
|
||||
console.log('当前模式:', props.mode)
|
||||
|
||||
try {
|
||||
// 新增模式初始化 formData
|
||||
if (props.mode === 'add') {
|
||||
console.log('新增模式:初始化 formData')
|
||||
// 确保表单字段正确初始化
|
||||
formData.id = null
|
||||
formData.packageType = '检查套餐'
|
||||
formData.packageLevel = ''
|
||||
formData.department = ''
|
||||
formData.user = ''
|
||||
formData.packageName = ''
|
||||
formData.organization = ''
|
||||
formData.packagePrice = 0
|
||||
formData.discount = ''
|
||||
formData.isDisabled = 0
|
||||
formData.showPackageName = 1
|
||||
formData.generateServiceFee = 0
|
||||
formData.packagePriceEnabled = 1
|
||||
formData.serviceFee = 0
|
||||
formData.remark = ''
|
||||
formData.createDate = new Date().toISOString().split('T')[0]
|
||||
// 清空明细数据并初始化一行
|
||||
detailData.value = []
|
||||
handleAddRow()
|
||||
}
|
||||
|
||||
// 获取套餐级别字典
|
||||
try {
|
||||
const levelResponse = await getDicts('examination_item_package_level')
|
||||
@@ -698,11 +728,6 @@ onMounted(async () => {
|
||||
// 加载卫生机构列表(只获取启用的租户)
|
||||
await loadOrganizationList()
|
||||
|
||||
// 初始化一行空数据
|
||||
if(props.mode === 'add'){
|
||||
handleAddRow()
|
||||
}
|
||||
|
||||
} catch (error) {
|
||||
console.error('✗ 初始化数据失败:', error)
|
||||
}
|
||||
@@ -1033,12 +1058,12 @@ function calculatePackagePrice() {
|
||||
// 如果有折扣,应用折扣计算
|
||||
let finalPrice = total
|
||||
if (formData.discount && parseFloat(formData.discount) > 0 && parseFloat(formData.discount) <= 100) {
|
||||
const discountRate = parseFloat(formData.discount) / 100 // 将百分比转换为小数(如10% -> 0.1)
|
||||
const discountRate = parseFloat(formData.discount) / 100 // 将百分比转换为小数(如 10% -> 0.1)
|
||||
const discountAmount = total * discountRate // 折扣金额
|
||||
finalPrice = total - discountAmount // 折扣后金额
|
||||
}
|
||||
|
||||
formData.packagePrice = finalPrice.toFixed(2)
|
||||
formData.packagePrice = finalPrice
|
||||
}
|
||||
|
||||
// 折扣变更处理
|
||||
|
||||
@@ -233,7 +233,7 @@
|
||||
</div>
|
||||
<div class="search-item">
|
||||
<label>费用套餐</label>
|
||||
<el-select v-model="searchParamsMethod.packageName" placeholder="选择使用套餐" style="width: 150px">
|
||||
<el-select v-model="searchParamsMethod.packageName" placeholder="选择使用套餐" style="width: 150px" filterable clearable>
|
||||
<el-option
|
||||
v-for="pkg in checkPackages"
|
||||
:key="pkg.id"
|
||||
@@ -551,10 +551,17 @@
|
||||
</td>
|
||||
<td>
|
||||
<template v-if="item.editing">
|
||||
<input type="text" placeholder="请输入下级医技类型" v-model="item.subType">
|
||||
<el-select v-model="item.subType" placeholder="选择下级医技类型" style="width: 100%" clearable filterable>
|
||||
<el-option
|
||||
v-for="opt in checkTypeOptionsForMethodPart"
|
||||
:key="opt.value"
|
||||
:label="opt.label"
|
||||
:value="opt.value"
|
||||
/>
|
||||
</el-select>
|
||||
</template>
|
||||
<template v-else>
|
||||
{{ item.subType || '' }}
|
||||
{{ getCheckTypeLabelForMethodPart(item.subType) || '' }}
|
||||
</template>
|
||||
</td>
|
||||
<td>
|
||||
|
||||
Reference in New Issue
Block a user