|
|
# 系统配置
|
|
|
|
|
|
> 模块编码:system
|
|
|
> 端侧:Web专属(仅超级管理员)
|
|
|
> 关联文档:01-模块划分 §2.3 / 02-功能清单-超级管理员 §3 / 03-业务流转逻辑-超级管理员 §9 / 05-接口规范 §9.2 / 06-项目技术要求 §8.3~8.4
|
|
|
> 强制规范遵循 `07-前端界面开发规范.md`
|
|
|
|
|
|
## 功能概览
|
|
|
|
|
|
| 项目 | 说明 |
|
|
|
|------|------|
|
|
|
| 菜单名称 | 系统配置 |
|
|
|
| 子菜单 | 系统版本管理、缓存管理 |
|
|
|
| 功能编号 | SA-S-01 ~ SA-S-02 |
|
|
|
| 权限编码前缀 | system:version:* / system:cache:* |
|
|
|
|
|
|
---
|
|
|
|
|
|
## 页面1:系统版本管理页
|
|
|
|
|
|
**页面编号**:SA-S-01-P01
|
|
|
**端侧归属**:Web专属
|
|
|
**页面路径**:/system/versions
|
|
|
|
|
|
### 界面布局
|
|
|
|
|
|
```
|
|
|
┌──────────────────────────────────────────────────────────────────┐
|
|
|
│ [面包屑] 系统配置 > 系统版本管理 │
|
|
|
├──────────────────────────────────────────────────────────────────┤
|
|
|
│ [当前版本信息卡片] │
|
|
|
│ ┌──────────────────────┐ ┌──────────────────────┐ │
|
|
|
│ │ 管理后台版本 │ │ 小程序版本 │ │
|
|
|
│ │ 当前版本:v1.2.0 │ │ 当前版本:v1.1.0 │ │
|
|
|
│ │ 最低兼容:v1.0.0 │ │ 最低兼容:v1.0.0 │ │
|
|
|
│ │ 发布日期:2026-04-01 │ │ 发布日期:2026-03-15 │ │
|
|
|
│ └──────────────────────┘ └──────────────────────┘ │
|
|
|
├──────────────────────────────────────────────────────────────────┤
|
|
|
│ [操作栏] [新增版本] │
|
|
|
├──────────────────────────────────────────────────────────────────┤
|
|
|
│ [列表区] │
|
|
|
│ 序号 | 版本号 | 端侧 | 最低兼容版本 | 是否强制更新 | 发布日期 | 操作 │
|
|
|
│ 1 | v1.2.0 | Web | v1.0.0 | 否 | 2026-04-01| 编辑│
|
|
|
│ 2 | v1.1.0 | 小程序 | v1.0.0 | 否 | 2026-03-15| 编辑│
|
|
|
│ 3 | v1.0.0 | 小程序 | v1.0.0 | 是 | 2026-01-01| — │
|
|
|
├──────────────────────────────────────────────────────────────────┤
|
|
|
│ [分页] 共5条 │
|
|
|
└──────────────────────────────────────────────────────────────────┘
|
|
|
```
|
|
|
|
|
|
### 查询条件
|
|
|
|
|
|
| 字段名 | 控件类型 | 必填 | 默认值 | 说明 |
|
|
|
|--------|----------|------|--------|------|
|
|
|
| — | — | — | — | 无筛选条件,展示全部版本 |
|
|
|
|
|
|
### 列表字段
|
|
|
|
|
|
| 序号 | 字段名 | 列宽 | 支持排序 | 说明 |
|
|
|
|------|--------|------|----------|------|
|
|
|
| 1 | 序号 | 60px | — | 自增 |
|
|
|
| 2 | 版本号 | 100px | 是 | 语义化版本号 |
|
|
|
| 3 | 端侧 | 80px | 否 | Web/小程序 |
|
|
|
| 4 | 最低兼容版本 | 120px | 否 | 低于此版本需强制更新 |
|
|
|
| 5 | 是否强制更新 | 110px | 否 | 是(红色)/否(绿色) |
|
|
|
| 6 | 发布日期 | 120px | 是 | 默认倒序 |
|
|
|
| 7 | 更新说明 | 200px | 否 | 简述本次更新内容 |
|
|
|
| 8 | 操作 | 80px | — | 编辑 |
|
|
|
|
|
|
### 操作按钮
|
|
|
|
|
|
| 按钮 | 权限编码 | 位置 | 显示条件 | 说明 |
|
|
|
|------|----------|------|----------|------|
|
|
|
| 新增版本 | system:version:create | 操作栏 | 始终 | 弹窗 |
|
|
|
| 编辑 | system:version:update | 行操作 | 始终 | 弹窗 |
|
|
|
|
|
|
### 表单字段(新增/编辑弹窗)
|
|
|
|
|
|
| 字段名 | 控件类型 | 必填 | 默认值 | 数据来源 | 校验规则 |
|
|
|
|--------|----------|------|--------|----------|----------|
|
|
|
| 版本号 | 文本输入 | 是 | — | 自填 | 语义化版本格式(x.y.z) |
|
|
|
| 端侧 | 下拉单选 | 是 | — | 固定选项 | Web/小程序 |
|
|
|
| 最低兼容版本 | 文本输入 | 是 | — | 自填 | 语义化版本格式 |
|
|
|
| 是否强制更新 | 开关 | 是 | 否 | — | 强制更新时用户无法跳过 |
|
|
|
| 更新说明 | 多行文本 | 是 | — | 自填 | 最大500字 |
|
|
|
|
|
|
### 通知触发
|
|
|
|
|
|
| 触发操作 | 通知对象 | 通知方式 | 消息模板 | 文档来源 |
|
|
|
|----------|----------|----------|----------|----------|
|
|
|
| 版本发布 | 小程序用户 | 小程序检测 | 下次启动时检测版本更新 | 03-小程序端 §10 / 06 §8.3 |
|
|
|
|
|
|
### API端点
|
|
|
|
|
|
| 页面操作 | API路径 | 方法 | 说明 |
|
|
|
|----------|---------|------|------|
|
|
|
| 列表查询 | /api/v1/system/versions | GET | — |
|
|
|
| 新增 | /api/v1/system/versions | POST | — |
|
|
|
| 编辑 | /api/v1/system/versions/{id} | PUT | — |
|
|
|
| 获取最新版本 | /api/v1/system/versions/latest | GET | 小程序启动时调用 |
|
|
|
|
|
|
### 交互流程要求
|
|
|
|
|
|
1. **页面加载流程**
|
|
|
- 进入页面 → 并行调用:当前版本信息卡片数据 + 版本列表数据
|
|
|
- 卡片数据优先渲染
|
|
|
|
|
|
2. **操作流程**
|
|
|
- **新增版本**:点击"新增版本"→ 弹出表单弹窗 → 填写版本信息 → 保存 → 刷新列表和卡片
|
|
|
- **编辑**:点击行"编辑"→ 弹出表单弹窗(回填数据)→ 修改 → 保存 → 刷新列表和卡片
|
|
|
|
|
|
3. **弹窗交互**
|
|
|
- 新增/编辑共用一个 `el-dialog` 弹窗
|
|
|
- 保存成功后弹窗关闭,列表刷新
|
|
|
|
|
|
4. **异常处理**
|
|
|
- 版本号格式校验失败 → 字段下方红色提示
|
|
|
- 版本号已存在 → 提示"该版本号已存在"
|
|
|
- 新增版本后小程序端自动检测更新
|
|
|
|
|
|
5. **权限控制交互**
|
|
|
- 无 `system:version:create` → "新增版本"按钮不渲染
|
|
|
- 无 `system:version:update` → 行"编辑"按钮不渲染
|
|
|
|
|
|
6. **[H1]防重复请求**(列表页)
|
|
|
- 行内操作按钮点击后整行操作禁用 + loading态
|
|
|
- 分页切换 abort上一请求后再发新请求
|
|
|
|
|
|
7. **[H2]超时与加载反馈**(列表页)
|
|
|
- 列表查询 timeout=15秒;写操作(新增/编辑) timeout=30秒
|
|
|
- 超时 → ElMessage.error("请求超时,请稍后重试") + 按钮恢复
|
|
|
- 加载>2秒显示全局ElLoading
|
|
|
|
|
|
8. **[H3]操作确认机制**
|
|
|
- 版本发布无需额外确认(弹窗内已有保存按钮)
|
|
|
|
|
|
9. **[H8]操作结果反馈**
|
|
|
- 成功 ElMessage.success(2s) → silent刷新
|
|
|
- 失败 ElMessage.error(0手动关闭)
|
|
|
|
|
|
10. **[H1]防重复请求**(弹窗内保存按钮)
|
|
|
- 保存按钮 :loading + disabled,API返回后恢复
|
|
|
|
|
|
11. **[H2]超时与加载反馈**(弹窗内提交)
|
|
|
- 弹窗内提交 timeout=30秒
|
|
|
|
|
|
12. **[H4]脏数据检测**(编辑模式弹窗)
|
|
|
- 弹窗打开时记录快照
|
|
|
- 关闭弹窗/点击取消时 isDirty 检测 → 确认提示"修改尚未保存,确定关闭吗?"
|
|
|
|
|
|
13. **[H8]操作结果反馈**(弹窗)
|
|
|
- 保存成功 → 关闭弹窗 → 刷新列表
|
|
|
- 保存失败 → 弹窗保持打开,错误提示
|
|
|
|
|
|
### 组件规范
|
|
|
|
|
|
| 元素 | 组件 | 配置参数 |
|
|
|
|------|------|----------|
|
|
|
| 版本信息卡片 | el-card | shadow="hover", :body-style="{padding:'20px'}" |
|
|
|
| 当前版本号 | div | font-size=20px, font-weight=bold |
|
|
|
| 版本列表 | el-table | stripe, border, v-loading |
|
|
|
| 端侧标签 | el-tag | Web:type="primary", 小程序:type="success" |
|
|
|
| 强制更新标签 | el-tag | 是:type="danger", 否:type="success" |
|
|
|
| 新增/编辑弹窗 | el-dialog | width="500px", :close-on-click-modal=false |
|
|
|
| 版本号输入 | el-input | placeholder="x.y.z格式", clearable |
|
|
|
| 端侧下拉 | el-select | :options="[{label:'Web',value:'web'},{label:'小程序',value:'miniapp'}]" |
|
|
|
| 强制更新开关 | el-switch | active-text="是", inactive-text="否" |
|
|
|
| 更新说明 | el-input | type="textarea", :rows=4, maxlength=500, show-word-limit |
|
|
|
|
|
|
### 校验规则
|
|
|
|
|
|
| 字段 | 规则 | 错误提示 |
|
|
|
|------|------|----------|
|
|
|
| 版本号 | 必填, 语义化格式(/^\d+\.\d+\.\d+$/) | "请输入版本号" / "版本号格式为x.y.z" |
|
|
|
| 端侧 | 必填 | "请选择端侧" |
|
|
|
| 最低兼容版本 | 必填, 语义化格式 | "请输入最低兼容版本" / "版本号格式为x.y.z" |
|
|
|
| 更新说明 | 必填, 最大500字符 | "请输入更新说明" / "更新说明不能超过500字符" |
|
|
|
|
|
|
### 响应式布局
|
|
|
|
|
|
| 断点 | 布局调整 |
|
|
|
|------|----------|
|
|
|
| ≥1280px(桌面端) | 版本卡片一行两个;列表完整展示所有列 |
|
|
|
| 1024-1279px(Pad横屏) | 版本卡片一行两个;"更新说明"列隐藏 |
|
|
|
| 768-1023px(Pad竖屏) | 版本卡片一行一个(全宽);列表仅显示:序号、版本号、端侧、是否强制更新、操作
|
|
|
|
|
|
---
|
|
|
|
|
|
## 页面2:缓存管理页
|
|
|
|
|
|
**页面编号**:SA-S-02-P01
|
|
|
**端侧归属**:Web专属
|
|
|
**页面路径**:/system/cache
|
|
|
|
|
|
### 界面布局
|
|
|
|
|
|
```
|
|
|
┌──────────────────────────────────────────────────────────────────┐
|
|
|
│ [面包屑] 系统配置 > 缓存管理 │
|
|
|
├──────────────────────────────────────────────────────────────────┤
|
|
|
│ [缓存状态概览] │
|
|
|
│ ┌────────────────────────────────────────────────────────────┐ │
|
|
|
│ │ Redis状态:● 已连接 内存使用:128MB/512MB 连接数:24 │ │
|
|
|
│ └────────────────────────────────────────────────────────────┘ │
|
|
|
├──────────────────────────────────────────────────────────────────┤
|
|
|
│ [缓存模块列表] │
|
|
|
│ 模块名称 | 缓存键前缀 | 缓存条数 | 最后更新时间 | 操作 │
|
|
|
│ 权限缓存 | perm:* | 1,234 | 10:30:25 | [清理] │
|
|
|
│ 字典缓存 | dict:* | 56 | 09:00:00 | [清理] │
|
|
|
│ 菜单缓存 | menu:* | 120 | 09:00:00 | [清理] │
|
|
|
│ 业务缓存 | biz:* | 0 | — | [清理] │
|
|
|
├──────────────────────────────────────────────────────────────────┤
|
|
|
│ [操作栏] [全部清理] │
|
|
|
└──────────────────────────────────────────────────────────────────┘
|
|
|
```
|
|
|
|
|
|
### 操作按钮
|
|
|
|
|
|
| 按钮 | 权限编码 | 位置 | 显示条件 | 说明 |
|
|
|
|------|----------|------|----------|------|
|
|
|
| 清理(单模块) | system:cache:update | 行操作 | 始终 | 二次确认后清理指定模块缓存 |
|
|
|
| 全部清理 | system:cache:update | 操作栏 | 始终 | 二次确认后清理全部缓存 |
|
|
|
|
|
|
### 缓存模块说明
|
|
|
|
|
|
| 模块 | 缓存键前缀 | 过期策略 | 刷新机制 | 文档来源 |
|
|
|
|------|------------|----------|----------|----------|
|
|
|
| 权限缓存 | perm:* | 2小时TTL | 权限变更时实时刷新(Redis Pub/Sub) | 06 §5.3 / 03-超级管理员 §9 |
|
|
|
| 字典缓存 | dict:* | 24小时TTL | 字典变更时手动/自动刷新 | 06 §5.3 |
|
|
|
| 菜单缓存 | menu:* | 24小时TTL | 菜单变更时手动/自动刷新 | 06 §5.3 |
|
|
|
| 业务缓存 | biz:* | 按需懒加载 | 不缓存,实时查询 | 06 §5.3 |
|
|
|
|
|
|
### 通知触发
|
|
|
|
|
|
| 触发操作 | 通知对象 | 通知方式 | 消息模板 | 文档来源 |
|
|
|
|----------|----------|----------|----------|----------|
|
|
|
| 缓存清理 | 在线用户 | WebSocket推送 | 提示刷新页面 | 03-超级管理员 §9 |
|
|
|
| 权限缓存清理 | 在线用户 | Redis Pub/Sub | 刷新权限缓存 | 03-超级管理员 §9 |
|
|
|
|
|
|
### API端点
|
|
|
|
|
|
| 页面操作 | API路径 | 方法 | 说明 |
|
|
|
|----------|---------|------|------|
|
|
|
| 缓存状态 | /api/v1/system/cache/status | GET | Redis连接状态+各模块缓存统计 |
|
|
|
| 清理单模块 | /api/v1/system/cache/clear/{module} | POST | 清理指定模块缓存 |
|
|
|
| 全部清理 | /api/v1/system/cache/clear-all | POST | 清理全部缓存 |
|
|
|
|
|
|
### 交互流程要求
|
|
|
|
|
|
1. **页面加载流程**
|
|
|
- 进入页面 → 并行调用:缓存状态概览(`GET /api/v1/system/cache/status`)+ 缓存模块列表
|
|
|
- 概览数据优先渲染
|
|
|
|
|
|
2. **操作流程**
|
|
|
- **清理单模块**:点击行"清理"→ 二次确认("确认清理XX缓存?清理后相关数据将从数据库重新加载")→ 调用API → 成功提示 → 刷新缓存状态
|
|
|
- **全部清理**:点击"全部清理"→ 二次确认("确认清理全部缓存?所有在线用户将收到刷新提示")→ 调用API → 成功提示 → 刷新缓存状态
|
|
|
|
|
|
3. **缓存状态实时更新**
|
|
|
- 清理操作完成后自动刷新状态概览和模块列表
|
|
|
- 支持手动刷新(页面顶部刷新按钮)
|
|
|
|
|
|
4. **异常处理**
|
|
|
- Redis连接断开 → 状态概览显示"● 未连接"红色标识,清理按钮禁用
|
|
|
- 清理失败 → 提示错误信息
|
|
|
|
|
|
5. **权限控制交互**
|
|
|
- 无 `system:cache:update` → 所有清理按钮不渲染
|
|
|
|
|
|
6. **[H1]防重复请求**
|
|
|
- 行内清理按钮点击后整行操作禁用 + loading态
|
|
|
- "全部清理"按钮点击后 disabled + loading态,API返回后恢复
|
|
|
|
|
|
7. **[H2]超时与加载反馈**
|
|
|
- 写操作(缓存清理) timeout=30秒
|
|
|
- 超时 → ElMessage.error("请求超时,请稍后重试") + 按钮恢复
|
|
|
- 加载>2秒显示全局ElLoading
|
|
|
|
|
|
8. **[H3]操作确认机制**
|
|
|
- 缓存清理:ElMessageBox.confirm("确认清理XX缓存?清理后相关数据将从数据库重新加载", { type: 'warning' })
|
|
|
- 全部清理:ElMessageBox.confirm("确认清理全部缓存?所有在线用户将收到刷新提示", { type: 'error' })
|
|
|
|
|
|
9. **[H8]操作结果反馈**
|
|
|
- 成功 ElMessage.success(2s) → silent刷新
|
|
|
- 失败 ElMessage.error(0手动关闭)
|
|
|
|
|
|
### 组件规范
|
|
|
|
|
|
| 元素 | 组件 | 配置参数 |
|
|
|
|------|------|----------|
|
|
|
| Redis状态指示 | el-badge | 已连接:type="success", 未连接:type="danger" |
|
|
|
| 内存使用 | el-progress | :percentage, :stroke-width=10, :color |
|
|
|
| 缓存模块列表 | el-table | stripe, :show-header=true |
|
|
|
| 缓存条数 | el-statistic | :value, 千分位格式化 |
|
|
|
| 清理按钮(行) | el-button | type="danger", link, size="small", icon="Delete" |
|
|
|
| 全部清理按钮 | el-button | type="danger", icon="Delete", plain |
|
|
|
| 刷新按钮 | el-button | icon="Refresh", circle |
|
|
|
|
|
|
### 校验规则
|
|
|
|
|
|
无表单校验(操作类页面)
|
|
|
|
|
|
### 响应式布局
|
|
|
|
|
|
| 断点 | 布局调整 |
|
|
|
|------|----------|
|
|
|
| ≥1280px(桌面端) | 状态概览一行展示;缓存模块列表完整展示 |
|
|
|
| 1024-1279px(Pad横屏) | 状态概览一行展示;"最后更新时间"列隐藏 |
|
|
|
| 768-1023px(Pad竖屏) | 状态概览竖向堆叠;缓存模块列表仅显示:模块名称、缓存条数、操作
|
|
|
|
|
|
---
|
|
|
|
|
|
## 需求追溯
|
|
|
|
|
|
| 功能点编号 | 功能名称 | 文档来源 | 后续服务 | 关联功能 |
|
|
|
|------------|----------|----------|----------|----------|
|
|
|
| SA-S-01 | 系统版本管理 | 02-超级管理员 §3 / 03-超级管理员 §9 | 版本发布→小程序检测更新 | 小程序端版本更新提示(MP-C-05) |
|
|
|
| SA-S-02 | 缓存管理 | 02-超级管理员 §3 / 03-超级管理员 §9 | 清理缓存→通知在线用户刷新 | 权限管理(权限缓存清理) / 物业系统配置(字典缓存) |
|
|
|
|
|
|
## 业务规则
|
|
|
|
|
|
1. **版本更新策略**:小版本更新提示用户可选更新,大版本更新(低于最低兼容版本)强制更新(来源:03-小程序端 §10 / 06 §8.3)
|
|
|
2. **SDK依赖校验**:小程序启动时校验蓝牙SDK、微信SDK等关键依赖版本(来源:03-小程序端 §10)
|
|
|
3. **缓存自动清理**:系统启动时自动全量清理缓存,权限变更时定向清理权限缓存(来源:03-超级管理员 §9 / 06 §8.4)
|
|
|
4. **缓存手动清理**:超级管理员可按模块清理缓存,清理后通知在线用户刷新页面(来源:03-超级管理员 §9)
|
|
|
5. **权限缓存TTL降级**:Redis连接断开时,权限缓存2小时TTL到期后自动刷新(来源:06 §3.1)
|