Files
mp-vue/docs/栏目选择记忆功能说明.md
2025-07-25 13:28:38 +08:00

174 lines
5.6 KiB
Markdown
Raw Permalink 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.

# 💾 栏目选择记忆功能说明
## 🎯 功能概述
新增了智能的栏目选择记忆功能,让用户在添加文章时不用每次都重新选择栏目,大大提升了内容发布的效率。
## ✨ 功能特点
### 🧠 智能记忆
- **自动保存**:用户选择栏目后自动保存到本地存储
- **智能恢复**:新建文章时自动填入上次选择的栏目
- **优先级设置**:合理的栏目选择优先级策略
### 🎯 优先级策略
1. **传入栏目优先**:从栏目页面点击"添加文章"时使用传入的栏目ID
2. **记忆栏目备选**:其他情况下使用上次保存的栏目
3. **编辑模式保持**:编辑文章时保持原有栏目不变
### 💾 持久化存储
- **本地存储**:使用 localStorage 保存栏目选择
- **跨会话保持**:关闭浏览器后重新打开仍然有效
- **自动更新**:每次选择新栏目时自动更新记忆
## 🛠️ 技术实现
### 核心常量
```javascript
const LAST_CATEGORY_KEY = 'cms_article_last_category';
```
### 保存功能
```javascript
// 保存最后选择的栏目到本地存储
const saveLastCategory = (categoryId: number | undefined) => {
if (categoryId) {
localStorage.setItem(LAST_CATEGORY_KEY, categoryId.toString());
}
};
```
### 恢复功能
```javascript
// 从本地存储获取最后选择的栏目
const getLastCategory = (): number | undefined => {
const saved = localStorage.getItem(LAST_CATEGORY_KEY);
return saved ? parseInt(saved) : undefined;
};
```
### 触发时机
```javascript
// 1. 用户手动选择栏目时
const onCategoryId = (id: number) => {
form.categoryId = id;
// 💾 在新增模式下,用户手动选择栏目时也保存到本地存储
if (!isUpdate.value && id) {
saveLastCategory(id);
}
};
// 2. 保存成功后
saveOrUpdate(formData)
.then((msg) => {
// 💾 保存成功后,记住当前选择的栏目(仅在新增时)
if (!isUpdate.value && form.categoryId) {
saveLastCategory(form.categoryId);
}
// ...
});
```
### 恢复逻辑
```javascript
// 新增模式:恢复上次选择的栏目
if (props.data) {
// 编辑模式:加载现有文章数据
// ...
} else {
// 新增模式:恢复上次选择的栏目
isUpdate.value = false;
// 🎯 优先级设置栏目:
// 1. 如果传入了 categoryId从栏目页面点击添加使用传入的
// 2. 否则使用上次保存的栏目
if (props.categoryId) {
form.categoryId = props.categoryId;
} else {
const lastCategory = getLastCategory();
if (lastCategory) {
form.categoryId = lastCategory;
}
}
}
```
## 🎮 使用场景
### 场景一:常规文章发布
1. **首次使用**:用户选择栏目,系统自动记忆
2. **后续使用**:打开添加文章弹窗,栏目自动填入
3. **更换栏目**:选择新栏目时,系统更新记忆
### 场景二:从栏目页面添加
1. **点击添加**:从栏目管理页面点击"添加文章"
2. **自动填入**:使用当前栏目,不使用记忆的栏目
3. **保存记忆**:发布成功后更新记忆为当前栏目
### 场景三:编辑现有文章
1. **保持原样**:编辑时保持文章原有的栏目
2. **不影响记忆**:编辑操作不会更新栏目记忆
3. **独立处理**:编辑和新增的栏目处理完全独立
## 💡 用户体验提升
### 🚀 效率提升
- **减少操作**:不用每次都选择栏目
- **快速发布**:特别适合批量发布同类文章
- **减少错误**:避免忘记选择栏目或选错栏目
### 🎯 智能化
- **上下文感知**:根据使用场景智能选择栏目
- **用户习惯**:记住用户的使用偏好
- **无感知操作**:功能在后台默默工作
### 🔄 灵活性
- **随时更改**:用户可以随时选择不同的栏目
- **不强制绑定**:不会强制用户使用记忆的栏目
- **清晰反馈**:栏目选择状态清晰可见
## 🔍 技术细节
### 数据存储
- **存储位置**:浏览器 localStorage
- **存储格式**字符串形式的栏目ID
- **存储时机**:栏目选择变化时和保存成功后
### 兼容性处理
- **类型转换**:字符串和数字之间的安全转换
- **空值处理**:处理 undefined 和 null 值
- **错误容错**localStorage 不可用时的降级处理
### 性能优化
- **最小化存储**只存储必要的栏目ID
- **即时更新**:选择变化时立即保存
- **读取优化**:只在需要时读取存储的值
## 🎉 总结
栏目选择记忆功能是一个贴心的用户体验优化,它:
1. **解决痛点**:彻底解决了重复选择栏目的问题
2. **智能设计**:考虑了各种使用场景的优先级
3. **技术可靠**:使用成熟的本地存储技术
4. **用户友好**:功能透明,不干扰正常操作流程
这个功能让内容管理变得更加高效和人性化,特别适合需要频繁发布文章的用户!
## 🧪 测试建议
### 基础功能测试
1. **首次选择**:选择一个栏目,发布文章,检查是否记忆
2. **自动恢复**:重新打开添加文章弹窗,检查栏目是否自动填入
3. **更换栏目**:选择不同栏目,检查记忆是否更新
### 场景测试
1. **从栏目页添加**:从栏目管理页面点击添加,检查优先级
2. **编辑文章**:编辑现有文章,检查是否不影响记忆
3. **跨会话测试**:关闭浏览器重新打开,检查记忆是否保持
### 边界情况测试
1. **清空栏目**:清空栏目选择,检查处理是否正确
2. **无效栏目**:删除记忆的栏目后,检查是否正常降级
3. **多用户环境**:不同用户登录,检查记忆是否独立