Files
hzdyjs/docs/变更管理/code-adjust-record-2025-08-01-approval-dict-final-fix.md
T
2025-08-01 08:35:47 +08:00

144 lines
3.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 审批记录页面字典访问修复记录
**日期**: 2025-08-01
**操作人员**: Assistant
**修复类型**: 前端Vue组件字典数据访问修复
## 🚨 问题描述
审批记录页面(`web/src/views/cw/approvalRecord/index.vue`)出现大量Vue警告:
```
[Vue warn]: Property "cw_approval_status" was accessed during render but is not defined on instance.
```
错误原因:
1. 使用了错误的 `$dict.cw_approval_status` 访问方式
2. 项目中没有全局 `$dict` 属性
3. 需要使用 `useDict` 手动加载字典数据
## 🔧 修复方案
### 1. 模板修复
**修复前**:
```vue
<el-option v-for="dict in $dict.cw_approval_status" :key="dict.value" :label="dict.label" :value="dict.value" />
<dict-tag :options="$dict.cw_approval_status" :value="scope.row.approvalStatus" />
```
**修复后**:
```vue
<template v-if="cw_approval_status && cw_approval_status.length > 0">
<el-option v-for="dict in cw_approval_status" :key="dict.value" :label="dict.label" :value="dict.value" />
</template>
<dict-tag :options="cw_approval_status" :value="scope.row.approvalStatus" v-if="cw_approval_status && cw_approval_status.length > 0" />
```
### 2. 组件配置修复
**修复前**:
```javascript
export default {
name: 'CwApprovalRecord',
components: {
ApplicationSummary
},
dicts: ['cw_approval_status'], // ❌ 无效配置
data() {
return {
// ...
};
}
}
```
**修复后**:
```javascript
export default {
name: 'CwApprovalRecord',
components: {
ApplicationSummary
},
data() {
return {
// 字典数据
cw_approval_status: [],
// ...
};
},
created() {
this.loadDictData();
this.getList();
},
methods: {
/** 加载字典数据 */
async loadDictData() {
try {
const dictData = this.useDict('cw_approval_status');
// 监听字典数据变化
this.$watch(() => dictData.cw_approval_status, (newVal) => {
this.cw_approval_status = newVal || [];
}, { immediate: true });
} catch (error) {
console.error('加载审批状态字典数据失败:', error);
}
}
}
}
```
## 📋 修复内容
### 文件修改
1. **`web/src/views/cw/approvalRecord/index.vue`**
- 移除无效的 `dicts: ['cw_approval_status']` 配置
- 添加 `cw_approval_status: []` 到data中
- 修改模板中的字典访问方式
- 添加 `loadDictData()` 方法使用 `useDict` 加载字典数据
- 添加字典数据变化监听
### 技术要点
1. **字典数据访问机制**:
- 项目使用 `useDict` composable 函数管理字典数据
- 不支持全局 `$dict` 属性访问
- 需要手动在组件中初始化字典数据
2. **模板安全访问**:
- 使用 `v-if` 条件渲染避免undefined访问
- 检查数组长度确保数据有效性
3. **响应式数据绑定**:
- 使用 `$watch` 监听字典数据变化
- `immediate: true` 确保立即执行
## ✅ 验证结果
修复后期望效果:
- ✅ 消除所有 `cw_approval_status` 未定义的Vue警告
- ✅ 审批状态下拉选择器正常显示选项
- ✅ 表格中审批状态标签正常显示
- ✅ 字典数据异步加载正常工作
## 🔄 相关影响
### 正面影响
- 解决了Vue渲染错误
- 提高了组件稳定性
- 规范了字典数据访问方式
### 注意事项
- 其他组件如果使用类似的 `$dict` 访问方式也需要类似修复
- 确保 `useDict` 工具函数正常工作
- 字典数据为异步加载,需要考虑加载时机
## 📝 技术总结
本次修复明确了项目中字典数据的正确使用方式:
1. 不依赖全局 `$dict` 属性
2. 使用 `useDict` composable函数
3. 在组件created生命周期中初始化
4. 使用响应式监听处理异步数据
这为后续类似问题的修复提供了标准模式。