# 手术管理页面代码修正方案 根据详细设计文档,以下是手术管理页面的完整修正方案。 ## 一、表格列定义修正 ### 修改前: ```vue ``` ### 修改后: ```vue ``` ## 二、操作按钮逻辑修正 ### 修改 handleEdit 函数: ```javascript function handleEdit(row) { // 检查状态:只有状态为新开(0)时才允许编辑 if (row.statusEnum !== 0) { proxy.$modal.msgWarning('当前状态不允许编辑手术,仅新开状态可编辑') return } title.value = '编辑手术' open.value = true // 设置为编辑模式 isEditMode.value = true getSurgeryDetail(row.id).then(res => { if (res.code === 200) { Object.assign(form.value, res.data) } }).catch(error => { console.error('获取手术信息失败:', error) proxy.$modal.msgError('获取手术信息失败') }) } ``` ### 修改 handleDelete 函数: ```javascript function handleDelete(row) { // 检查状态 if (row.statusEnum === 0) { // 新开状态 - 直接删除 proxy.$modal.confirm('是否确认删除手术"' + row.surgeryName + '"?').then(() => { return deleteSurgery(row.id) }).then(() => { getPageList() proxy.$modal.msgSuccess('删除成功') }).catch(error => { console.error('删除手术失败:', error) proxy.$modal.msgError('删除失败') }) } else if (row.statusEnum === 1) { // 已排期状态 - 更新为已取消 proxy.$modal.confirm('是否确认取消手术"' + row.surgeryName + '"?').then(() => { return updateSurgeryStatus(row.id, 4) // 4 = 已取消 }).then(() => { getPageList() proxy.$modal.msgSuccess('手术已取消') }).catch(error => { console.error('取消手术失败:', error) proxy.$modal.msgError('取消失败') }) } else { // 其他状态 - 不允许操作 proxy.$modal.msgWarning('当前状态不允许取消手术') } } ``` ### 添加 getRowClassName 函数: ```javascript // 获取表格行样式 function getRowClassName({ row }) { return row.statusEnum === 4 ? 'cancelled-row' : '' } ``` ### 修改 submitForm 函数: ```javascript function submitForm() { proxy.$refs['surgeryRef'].validate((valid) => { if (valid) { if (form.value.id == undefined) { // 新增手术 addSurgery(form.value).then((res) => { proxy.$modal.msgSuccess('新增成功') open.value = false getPageList() }).catch(error => { console.error('新增手术失败:', error) // 显示红色 toast 提示 proxy.$message.error('新增手术失败,请检查表单信息') }) } else { // 修改手术 updateSurgery(form.value).then((res) => { proxy.$modal.msgSuccess('修改成功') open.value = false getPageList() }).catch(error => { console.error('更新手术失败:', error) // 显示红色 toast 提示 proxy.$message.error('更新手术失败,请检查表单信息') }) } } else { // 表单校验失败 - 显示红色 toast 提示 proxy.$message.error('请检查表单信息,标红字段为必填项') } }) } ``` ### 修改 handleRefresh 函数: ```javascript function handleRefresh() { getPageList() proxy.$modal.msgSuccess('刷新成功') } ``` ### 移除不需要的函数: ```javascript // 删除这些函数(在新设计中不需要): // - handleStart() // - handleComplete() ``` ## 三、表单字段调整(根据设计文档) ### 根据设计文档,表单应该包含: #### 1. 患者基本信息区: ```vue 患者基本信息 ``` #### 2. 手术信息区: ```vue 手术信息 ``` #### 3. 医疗信息区: ```vue 医疗信息 ``` #### 4. 人员信息区: ```vue 人员信息 ``` #### 5. 其他信息区: ```vue 其他信息 ``` #### 6. 操作按钮区: ```vue 取消 提交申请 添加次要手术 ``` ## 四、样式添加 ```vue ``` ## 五、添加辅助函数 ```javascript // 获取状态 badge 类型 function getStatusBadgeType(status) { const typeMap = { 0: 'info', // 新开 1: 'warning', // 已安排 2: 'primary', // 手术中 3: 'success', // 已完成 4: 'danger', // 已取消 5: 'info' // 暂停 } return typeMap[status] || 'info' } // 添加次要手术 function addAppendSurgery() { // 打开次要手术选择弹窗 proxy.$modal.msgInfo('请选择次要手术') // TODO: 实现次要手术选择逻辑 } // 生成手术单号 function generateSurgeryNo() { const now = new Date() const year = now.getFullYear() const month = String(now.getMonth() + 1).padStart(2, '0') const day = String(now.getDate()).padStart(2, '0') const random = String(Math.floor(Math.random() * 10000)).padStart(4, '0') return `OP${year}${month}${day}${random}` } ``` ## 六、完整修正步骤总结 ### 步骤1:修改表格结构 1. 调整表格列顺序和内容 2. 添加 `row-class-name` 属性 3. 修改操作列的条件判断 ### 步骤2:修改 JavaScript 函数 1. 修改 `handleEdit()` - 添加状态检查 2. 修改 `handleDelete()` - 区分删除和取消 3. 修改 `submitForm()` - 改进错误提示 4. 添加 `getRowClassName()` - 行样式判断 5. 修改 `handleRefresh()` - 添加成功提示 6. 移除 `handleStart()` 和 `handleComplete()` - 新设计不需要 ### 步骤3:修改表单结构 1. 调整表单分组(添加 divider) 2. 添加患者基本信息区(大部分字段禁用) 3. 添加手术信息区 4. 添加医疗信息区 5. 添加人员信息区 6. 添加其他信息区 7. 修改操作按钮(添加次要手术按钮) ### 步骤4:添加样式 1. 顶部操作栏样式 2. 表格样式 3. 已取消状态行样式 4. 对话框样式 ### 步骤5:添加辅助函数 1. `getStatusBadgeType()` - 状态 badge 类型 2. `addAppendSurgery()` - 添加次要手术 3. `generateSurgeryNo()` - 生成手术单号 ## 七、后端接口需求 根据设计文档,提交手术申请时需要: 1. **插入 outp_surgery_apply(门诊手术申请主表)** 2. **通过系统自动插入一条手术申请医嘱** 3. **关联收费项目明细,系统自动插入预收费明细表** ### 后端修改建议: 需要在后端实现一个事务性的接口: ```java @Transactional public R submitSurgeryApply(SurgeryApplyDto dto) { // 1. 插入门诊手术申请主表 // 2. 自动生成手术单号:OP+年月日+4位随机数 // 3. 自动插入手术申请医嘱 // 4. 关联收费项目明细 // 5. 插入预收费明细表 return R.ok(); } ``` ## 八、测试要点 1. **新增手术申请** - 检查手术单号是否自动生成 - 检查患者信息是否自动填充 - 检查医生信息是否自动获取 2. **编辑手术申请** - 只允许新开状态编辑 - 其他状态应提示不可编辑 3. **删除/取消手术申请** - 新开状态应直接删除 - 已安排状态应更新为已取消 - 取消后行样式应变灰 4. **查看手术详情** - 显示所有字段 - 提交按钮变为关闭 5. **错误处理** - 表单校验失败显示红色 toast - 数据加载失败显示"数据加载失败"