# 手术申请业务逻辑修正指南 ## Mermaid 流程图分析 ### 预期业务流程 根据提供的 Mermaid 流程图,手术申请单的业务逻辑应包含以下关键点: #### 顶部操作栏 1. **新增按钮** → 显示表单弹窗 2. **刷新按钮** → 重新加载列表 3. **表单提交** → 校验 → 生成手术单号 → 插入主表 → 生成医嘱 → 关联收费项目 → 表格新增数据(状态:新开) #### 手术申请记录表格 1. **查看** → 显示只读详情弹窗 2. **编辑** → 检查状态 - 状态=新开 → 显示可编辑表单 - 状态≠新开 → 提示不可编辑 3. **删除** → 检查状态 - 状态=新开 → 显示确认对话框 → 删除记录 - 状态=已安排 → 显示确认对话框 → 状态=已取消 - 状态≠新开/已安排 → 提示不可取消 4. **数据加载失败** → 显示"数据加载失败"提示 ## 当前实现分析 ### 当前手术状态定义 ```javascript const surgeryStatusOptions = ref([ { value: 0, label: '待排期' }, // 对应流程图中的"新开" { value: 1, label: '已排期' }, // 对应流程图中的"已安排" { value: 2, label: '手术中' }, { value: 3, label: '已完成' }, { value: 4, label: '已取消' }, { value: 5, label: '暂停' } ]) ``` ### 当前操作按钮逻辑 ```javascript 编辑 开始 完成 删除 ``` ## 发现的问题 ### 问题1: 编辑按钮状态判断错误 **当前逻辑**: 状态为 0 或 1 时显示编辑按钮 **预期逻辑**: 只有状态为 0(新开/待排期)时才允许编辑 ### 问题2: 删除操作过于简单 **当前逻辑**: 状态为 0 或 1 时直接删除 **预期逻辑**: - 状态=0(新开): 显示确认对话框 → 删除记录 - 状态=1(已排期): 显示确认对话框 → 更新状态为 4(已取消)→ 表格行样式变灰 - 状态≠0/1: 提示不可取消 ### 问题3: 缺少状态变更后的视觉反馈 **当前逻辑**: 状态变更后无特殊样式 **预期逻辑**: 状态=已取消时,表格行样式变灰 ### 问题4: 缺少数据加载失败的处理 **当前逻辑**: 有错误提示,但不够明确 **预期逻辑**: 显示"数据加载失败"提示 ### 问题5: 表单校验失败提示不明确 **当前逻辑**: 使用 toast 提示 **预期逻辑**: 显示红色 toast 提示 ## 修正方案 ### 1. 修改编辑按钮逻辑 ```javascript // 原代码 编辑 // 修正后 编辑 ``` ### 2. 修改删除操作逻辑 ```javascript // 修改 handleDelete 函数 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('当前状态不允许取消手术') } } ``` ### 3. 添加已取消状态的行样式 ```javascript // 在表格中添加 row-class-name 属性 // 添加函数判断行样式 function getRowClassName({ row }) { return row.statusEnum === 4 ? 'cancelled-row' : '' } // 添加样式 ``` ### 4. 改进表单提交校验提示 ```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('请检查表单信息,标红字段为必填项') } }) } ``` ### 5. 改进编辑操作的状态检查 ```javascript function handleEdit(row) { // 检查状态 if (row.statusEnum !== 0) { proxy.$modal.msgWarning('当前状态不允许编辑手术') return } title.value = '编辑手术' open.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('获取手术信息失败') }) } ``` ### 6. 改进数据加载失败的处理 ```javascript function getList() { loading.value = true const params = { ...queryParams.value } // 处理时间范围 if (params.plannedTime && params.plannedTime.length === 2) { params.plannedTimeStart = params.plannedTime[0] params.plannedTimeEnd = params.plannedTime[1] delete params.plannedTime } getSurgeryPage(params).then((res) => { surgeryList.value = res.data.records total.value = res.data.total }).catch(error => { console.error('获取手术列表失败:', error) // 改进错误提示 proxy.$message.error('数据加载失败,请稍后重试') surgeryList.value = [] total.value = 0 }).finally(() => { loading.value = false }) } ``` ## 完整的修正代码 以下是完整的修正方案,需要应用到 `surgerymanage/index.vue`: ```vue ``` ## 总结 ### 主要修正点 1. **编辑按钮**: 只允许状态=0(新开)时显示 2. **删除操作**: - 状态=0: 直接删除 - 状态=1: 更新为已取消 - 状态≠0/1: 提示不可取消 3. **视觉反馈**: 已取消状态的行显示灰色并划线 4. **错误提示**: 使用红色 toast 提示表单校验失败 5. **数据加载**: 改进失败提示文案 ### 状态映射 | 流程图状态 | 当前状态值 | 状态说明 | |-----------|----------|---------| | 新开 | 0 | 待排期,可编辑、可删除 | | 已安排 | 1 | 已排期,不可编辑,可开始、可取消 | | 手术中 | 2 | 手术进行中,可完成 | | 已完成 | 3 | 手术完成 | | 已取消 | 4 | 手术已取消,行样式变灰 |