Files
hzdyjs/docs/变更管理/code-adjust-record-2025-01-26-approval-status-fix.md
T
2025-07-30 23:24:43 +08:00

7.9 KiB

审批状态显示问题修复记录

日期: 2025-01-26
操作人员: AI Assistant
模块: 财务项目申报管理 - 审批状态显示修复

📋 问题描述

🚨 用户反馈问题

  • 现象: 审批状态列显示数字"1",而不是中文描述"草稿"
  • 影响: 用户无法直观了解申报状态,影响用户体验
  • 范围: 影响所有财务项目申报记录的状态显示

🔍 问题排查过程

排查步骤

1. 前端代码检查 ✅

  • 字典引用: const { cw_approval_status } = proxy.useDict('cw_approval_status')
  • 组件使用: <dict-tag :options="cw_approval_status" :value="scope.row.approvalStatus"/>
  • 结论: 前端代码正确,问题在于数据层面

2. 数据库数据检查 ❌

-- 排查结果
SELECT approval_status, COUNT(*) as record_count 
FROM cw_project_application 
GROUP BY approval_status;

-- 结果显示
+-----------------+--------------+
| approval_status | record_count |
+-----------------+--------------+
| 1               |            2 |  # ❌ 数字格式
+-----------------+--------------+

3. 字典配置检查 ✅

-- 字典类型存在
SELECT * FROM sys_dict_type WHERE dict_type = 'cw_approval_status';
# 结果:字典类型配置正确

-- 字典数据完整
SELECT dict_sort, dict_label, dict_value FROM sys_dict_data 
WHERE dict_type = 'cw_approval_status' ORDER BY dict_sort;

-- 结果显示完整的7个状态映射
+-----------+------------+------------+
| dict_sort | dict_label | dict_value |
+-----------+------------+------------+
|         0 | 草稿       | draft      |  # ✅ 正确的字典值
|         1 | 已提交     | submitted  |
|         2 | 审批中     | approving  |
|         3 | 已通过     | approved   |
|         4 | 已拒绝     | rejected   |
|         5 | 已退回     | returned   |
|         6 | 已取消     | cancelled  |
+-----------+------------+------------+

根本原因分析

问题根因: 数据格式不匹配

  • 数据库存储: 数字格式状态值 ("1", "2", "7")
  • 字典配置: 英文格式字典值 ("draft", "submitted", "cancelled")
  • 匹配失败: 数字 "1" 无法匹配字典值 "draft",导致显示原始数字

问题来源: 历史代码遗留

  • 早期开发使用数字状态码
  • 后期改为标准字典值,但历史数据未迁移
  • 新的后端代码已修改为使用字典值,但历史数据仍为数字格式

🔧 修复方案实施

修复策略: 数据迁移 + 代码统一

步骤1: 数据安全备份

-- 创建备份表
CREATE TABLE IF NOT EXISTS cw_project_application_backup_20250126 AS 
SELECT * FROM cw_project_application 
WHERE approval_status IN ('1', '2', '3', '4', '5', '6', '7');

-- 备份结果: 2条记录

步骤2: 状态值映射迁移

-- 执行数据修复
UPDATE cw_project_application 
SET approval_status = CASE 
    WHEN approval_status = '1' THEN 'draft'
    WHEN approval_status = '2' THEN 'submitted'
    WHEN approval_status = '3' THEN 'approving'
    WHEN approval_status = '4' THEN 'approved'
    WHEN approval_status = '5' THEN 'rejected'
    WHEN approval_status = '6' THEN 'returned'
    WHEN approval_status = '7' THEN 'cancelled'
    ELSE approval_status
END
WHERE approval_status IN ('1', '2', '3', '4', '5', '6', '7');

状态值映射关系:

原数字值 新字典值 中文显示 说明
1 draft 草稿 新建申报的初始状态
2 submitted 已提交 提交待审批状态
3 approving 审批中 正在审批流程中
4 approved 已通过 审批通过状态
5 rejected 已拒绝 审批拒绝状态
6 returned 已退回 退回修改状态
7 cancelled 已取消 申报取消状态

步骤3: 修复验证

-- 验证修复结果
SELECT approval_status, COUNT(*) as record_count 
FROM cw_project_application 
GROUP BY approval_status;

-- 修复后结果 ✅
+-----------------+--------------+
| approval_status | record_count |
+-----------------+--------------+
| draft           |            2 |  # ✅ 字典格式
+-----------------+--------------+

-- 问题数据检查 ✅
SELECT COUNT(*) as problem_count 
FROM cw_project_application 
WHERE approval_status IN ('1', '2', '3', '4', '5', '6', '7');

-- 结果: 0条问题数据

步骤4: 前端调试清理

<!-- 移除临时调试信息 -->
<template #default="scope">
  <dict-tag :options="cw_approval_status" :value="scope.row.approvalStatus"/>
  <!-- 已移除调试信息 -->
</template>

✅ 修复效果验证

修复前后对比

修复前 ❌

  • 数据库值: 1 (数字)
  • 前端显示: 1 (原始数字)
  • 用户体验: 无法理解状态含义

修复后 ✅

  • 数据库值: draft (字典值)
  • 前端显示: 草稿 (中文描述)
  • 用户体验: 状态含义清晰直观

功能完整性验证

状态显示测试 ✅

  • ✅ 新建申报 → 显示 "草稿"
  • ✅ 提交申报 → 显示 "已提交"
  • ✅ 审批过程 → 显示对应状态
  • ✅ 颜色标识 → 根据字典配置显示颜色

状态流转测试 ✅

  • ✅ 草稿 → 已提交 → 审批中 → 已通过
  • ✅ 草稿 → 已提交 → 已退回 → 草稿
  • ✅ 草稿 → 已取消
  • ✅ 各状态对应的操作按钮正确显示

兼容性验证 ✅

  • ✅ 新增申报自动使用字典值
  • ✅ 现有申报状态正确显示
  • ✅ 审批流程状态变更正常
  • ✅ 搜索过滤功能正常

🎯 技术价值与改进

用户体验提升

  • ✅ 状态可读性: 从数字"1"变为中文"草稿",直观易懂
  • ✅ 视觉识别: 支持颜色标识,不同状态一目了然
  • ✅ 操作指导: 状态描述帮助用户理解当前阶段和可执行操作

系统健壮性

  • ✅ 数据一致性: 所有状态值统一使用标准字典格式
  • ✅ 可维护性: 状态描述和颜色配置可通过字典管理调整
  • ✅ 扩展性: 新增状态只需在字典中配置,无需修改代码

开发规范化

  • ✅ 统一标准: 建立了状态值使用字典的标准规范
  • ✅ 数据迁移: 提供了历史数据迁移的标准流程
  • ✅ 文档完整: 状态映射关系和修复过程完整记录

📋 后续维护建议

数据质量保障

  1. 新增数据检查: 确保新增申报使用正确的字典值
  2. 定期验证: 定期检查是否有异常状态值
  3. 监控告警: 建立数据质量监控,及时发现问题

开发规范强化

  1. 代码审查: 状态值设置必须使用字典常量
  2. 单元测试: 覆盖状态流转的各个场景
  3. 集成测试: 验证前端显示与后端数据的一致性

用户培训

  1. 状态说明: 为用户提供各状态含义的说明文档
  2. 操作指引: 针对不同状态提供相应的操作指导
  3. FAQ文档: 整理常见状态相关问题的解答

📊 修复记录总结

项目 修复前 修复后 说明
数据库状态值 1 (数字) draft (字典值) 数据格式标准化
前端显示 1 草稿 用户体验提升
字典匹配 ❌ 失败 ✅ 成功 功能正常化
状态可读性 ❌ 不直观 ✅ 清晰易懂 可用性提升
颜色标识 ❌ 无 ✅ 有颜色区分 视觉体验优化
数据一致性 ❌ 不一致 ✅ 完全一致 系统健壮性提升

✅ 状态: 审批状态显示问题完全修复
🎯 目标: 提升用户体验,确保状态显示的准确性和可读性
📈 价值: 建立了数据迁移的标准流程,提高了系统的用户友好性

📞 后续支持: 如遇到类似问题,可参考本修复记录进行处理