diff --git a/docs/optimization-records/2026-03-09-loading-optimization.md b/docs/optimization-records/2026-03-09-loading-optimization.md new file mode 100644 index 0000000..22a659c --- /dev/null +++ b/docs/optimization-records/2026-03-09-loading-optimization.md @@ -0,0 +1,289 @@ +# 参数配置页面 Loading 优化 + +**优化时间:** 2026-03-09 +**优化分支:** dev +**涉及页面:** 全局配置、项目配置 + +--- + +## 🎯 优化目标 + +为参数配置页面添加完善的 loading 效果,提升用户体验 + +--- + +## ✨ 优化内容 + +### 1. **页面加载 Loading** + +#### 实现方式 +使用 Element UI 的 `v-loading` 指令 + +```vue +
+ +
+``` + +#### Loading 状态控制 +```javascript + data() { + return { + loading: false, // 页面加载状态 + saving: false // 保存状态 + } + } +``` + +#### 加载方法 +```javascript +async loadAllParams() { + this.loading = true; // 开始加载 + try { + const res = await listAllParams({ projectId: 0 }); + this.modelGroups = res.data.models || []; + this.modifiedParams = {}; + } catch (error) { + this.$message.error('加载参数失败:' + error.message); + } finally { + this.loading = false; // 结束加载 + } +} +``` + +--- + +### 2. **空状态提示** + +当数据为空时显示友好提示: + +```vue + +
+ +
+``` + +--- + +### 3. **保存按钮 Loading** + +保存时按钮显示 loading 状态: + +```vue + + 保存所有修改 + +``` + +保存方法中控制状态: +```javascript +async handleSaveAll() { + this.saving = true; // 开始保存 + try { + await saveAllParams(saveDTO); + this.$message.success('保存成功'); + this.modifiedParams = {}; + await this.loadAllParams(); + } catch (error) { + this.$message.error('保存失败:' + error.message); + } finally { + this.saving = false; // 结束保存 + } +} +``` + +--- + +### 4. **条件渲染优化** + +使用 `v-if` 控制内容区域显示: + +```vue + +
+ +
+ + +
+ +
+ + +
+ 保存所有修改 +
+``` + +--- + +### 5. **样式优化** + +添加最小高度,防止内容抖动: + +```scss +.model-cards-container { + margin-bottom: 20px; + min-height: 300px; // 防止 loading 时布局抖动 +} +``` + +--- + +## 📊 优化对比 + +### 优化前 +- ❌ 页面加载时无反馈,用户不知道是否在工作 +- ❌ 数据为空时显示空白页面 +- ❌ 保存时按钮无状态反馈 +- ❌ 可能出现布局抖动 + +### 优化后 +- ✅ 页面加载显示 loading 遮罩,清晰反馈 +- ✅ 数据为空显示友好提示 +- ✅ 保存按钮显示 loading 动画 +- ✅ 条件渲染防止布局抖动 +- ✅ 最小高度保持布局稳定 + +--- + +## 🎨 用户体验提升 + +### 加载状态 +``` +┌─────────────────────────┐ +│ │ +│ 加载中... │ +│ (旋转动画) │ +│ │ +└─────────────────────────┘ +``` + +### 空状态 +``` +┌─────────────────────────┐ +│ │ +│ (空状态图标) │ +│ 暂无参数配置数据 │ +│ │ +└─────────────────────────┘ +``` + +### 正常状态 +``` +┌─────────────────────────┐ +│ 模型1 │ +│ ┌───────────────────┐ │ +│ │ 参数表格 │ │ +│ └───────────────────┘ │ +├─────────────────────────┤ +│ 模型2 │ +│ ┌───────────────────┐ │ +│ │ 参数表格 │ │ +│ └───────────────────┘ │ +├─────────────────────────┤ +│ [保存按钮] 已修改X个 │ +└─────────────────────────┘ +``` + +--- + +## 🔧 技术实现 + +### Loading 指令 +- **Element UI 指令**: `v-loading` +- **加载文本**: `element-loading-text` +- **背景色**: 默认白色遮罩 + +### 状态管理 +```javascript +{ + loading: false, // 数据加载状态 + saving: false // 保存操作状态 +} +``` + +### 条件渲染逻辑 +``` +loading = true → 显示 loading 遮罩 +loading = false && data.length > 0 → 显示数据 +loading = false && data.length = 0 → 显示空状态 +``` + +--- + +## 📝 修改文件 + +### 全局配置页面 +- **文件**: `ruoyi-ui/src/views/ccdi/modelParam/index.vue` +- **修改**: + - 添加 `loading` 状态 + - 添加 `v-loading` 指令 + - 添加空状态提示 + - 优化条件渲染 + - 优化样式 + +### 项目配置页面 +- **文件**: `ruoyi-ui/src/views/ccdiProject/components/detail/ParamConfig.vue` +- **修改**: + - 添加 `loading` 状态 + - 添加 `v-loading` 指令 + - 添加空状态提示 + - 优化条件渲染 + - 优化样式 + +--- + +## 🎯 测试要点 + +### 功能测试 +- [ ] 页面首次加载显示 loading +- [ ] Loading 状态下内容不显示 +- [ ] 数据加载完成后 loading 消失 +- [ ] 数据为空时显示空状态提示 +- [ ] 保存时按钮显示 loading +- [ ] 保存完成后按钮恢复 + +### 性能测试 +- [ ] Loading 动画流畅 +- [ ] 无布局抖动 +- [ ] 快速响应 + +### 兼容性测试 +- [ ] Chrome 正常 +- [ ] Firefox 正常 +- [ ] Edge 正常 + +--- + +## 📌 Git 提交 + +```bash +commit 8b3e9a2 +feat(ui): 为参数配置页面添加loading效果 + +- 添加页面加载loading状态 +- 添加数据为空时的提示 +- 优化loading样式和布局 +- 确保保存按钮有loading反馈 +- 改善用户体验 +``` + +--- + +## 🚀 后续优化建议 + +1. **骨架屏**: 可考虑使用骨架屏替代 loading 遮罩,体验更好 +2. **渐进式加载**: 先加载部分数据,逐步展示 +3. **缓存优化**: 添加数据缓存,减少重复加载 +4. **错误重试**: 添加加载失败的重试机制 + +--- + +**优化完成时间:** 2026-03-09 +**状态:** ✅ 已完成并提交