# 系统设置页面 > 最后更新:2026-04-26 > 状态:已设计 --- ### 1. 基本信息 | 项 | 值 | |----|-----| | 路由 | /settings | | 权限 | admin | | 入口 | 侧边栏系统设置 | | 面包屑 | 首页 / 系统设置 | ### 2. 界面布局 ``` ┌──────────────────────────────────────────────────────────┐ │ [面包屑] 首页 / 系统设置 │ ├──────────────────────────────────────────────────────────┤ │ [Tab切换] [系统配置] [车间管理] [修改密码] │ ├──────────────────────────────────────────────────────────┤ │ │ │ ====== Tab1: 系统配置 ====== │ │ │ │ [查询条件区] │ │ 关键字[___________] [查询] [重置] │ │ │ │ [列表区] │ │ 配置项 | 值 | 类型 | 说明 | 操作 │ │ ping_interval | 60 | number| Ping间隔| [编辑] │ │ collect_retry | 3 | number| 重试次数| [编辑] │ │ daily_summary | 01:00 | string| 汇总时间| [编辑] │ │ log_retention | 90 | number| 日志保留| [编辑] │ │ api_token | ******** | string| API Token| [编辑][重置] │ │ │ │ ====== Tab2: 车间管理 ====== │ │ │ │ [+ 新增车间] │ │ [列表区] │ │ 车间名称 | 排序 | 状态 | 操作 │ │ A栋 | 1 | 启用 | [编辑][删除] │ │ B栋 | 2 | 启用 | [编辑][删除] │ │ C栋 | 3 | 停用 | [编辑][启用] │ │ │ │ ====== Tab3: 修改密码 ====== │ │ │ │ ┌──────────────────────────┐ │ │ │ 当前密码 [__________] │ │ │ │ 新密码 [__________] │ │ │ │ 确认密码 [__________] │ │ │ │ [确认修改] │ │ │ └──────────────────────────┘ │ └──────────────────────────────────────────────────────────┘ ``` ### 3. Tab1-系统配置 #### 查询条件 | 字段 | 控件 | 必填 | 默认值 | 校验 | 联动 | |------|------|------|--------|------|------| | 关键字 | el-input placeholder=配置项/说明 | 否 | 空 | - | 无 | #### 列表字段 | 字段名 | 列宽 | 排序 | 超长处理 | 对齐 | |--------|------|------|---------|------| | 配置项(config_key) | - | - | tooltip | center | | 配置值(config_value) | - | - | tooltip | center | | 值类型(value_type) | - | - | - | center | | 说明(description) | - | - | tooltip | center | | 操作 | 160 | - | - | center | > 列宽规则见 `02-前端全局规范.md` el-table列宽均分规则:数据列不设width自动均分,操作列固定160。 #### 操作按钮 | 名称 | 权限编码 | 位置 | 显示条件 | 点击行为 | |------|---------|------|---------|---------| | 编辑 | settings:update | 行操作 | 始终 | 打开编辑弹窗 | | 重置Token | settings:reset-token | 行操作 | config_key=api_token或collector_api_key | 确认"确定重置{配置项}?重置后需同步更新相关服务配置。 "->调API | #### 弹窗规格 **编辑配置项弹窗:** - 宽度500px,标题=编辑配置项 | 字段 | 控件 | 必填 | 默认值 | 校验 | 联动 | |------|------|------|--------|------|------| | 配置项 | el-input disabled | - | config_key | - | - | | 配置值 | el-input(根据value_type切换number/string) | 是 | 当前值 | 必填 | value_type=number时控件为el-input-number | | 说明 | el-input disabled | - | description | - | - | 说明:敏感字段(api_token/collector_api_key)显示为"********",编辑弹窗中也默认遮蔽,点击眼睛图标切换可见。 ### 4. Tab2-车间管理 #### 列表字段 | 字段名 | 列宽 | 排序 | 超长处理 | 对齐 | |--------|------|------|---------|------| | 车间名称 | - | - | tooltip | center | | 排序 | - | y | - | center | | 状态 | - | - | - | center | | 操作 | 160 | - | - | center | > 列宽规则见 `02-前端全局规范.md` el-table列宽均分规则:数据列不设width自动均分,操作列固定160。 #### 操作按钮 | 名称 | 权限编码 | 位置 | 显示条件 | 点击行为 | |------|---------|------|---------|---------| | 新增车间 | workshop:create | 页头 | 始终 | 打开新增弹窗 | | 编辑 | workshop:update | 行操作 | 始终 | 打开编辑弹窗 | | 删除 | workshop:delete | 行操作 | 启用状态且无关联机床 | 确认->删除 | | 启用/停用 | workshop:toggle | 行操作 | 始终 | 确认->切换状态 | #### 弹窗规格 **新增/编辑车间弹窗:** - 宽度400px,标题=新增车间/编辑车间 | 字段 | 控件 | 必填 | 默认值 | 校验 | 联动 | |------|------|------|--------|------|------| | 车间名称 | el-input maxlength=100 | 是 | - | 必填+唯一性 | - | | 排序号 | el-input-number min=0 max=99 | 是 | 末尾 | 必填+正整数 | - | ### 5. Tab3-修改密码 #### 表单字段 | 字段 | 控件 | 必填 | 默认值 | 校验 | 联动 | |------|------|------|--------|------|------| | 当前密码 | el-input type=password show-password | 是 | - | 必填 | - | | 新密码 | el-input type=password show-password | 是 | - | 必填+长度8-32位 | - | | 确认密码 | el-input type=password show-password | 是 | - | 必填+与新密码一致 | 新密码变化时重新校验 | #### 操作按钮 | 名称 | 权限编码 | 位置 | 显示条件 | 点击行为 | |------|---------|------|---------|---------| | 确认修改 | - | 表单底部 | 始终 | 校验通过->调API->成功提示+清空表单 | ### 6. 状态机 车间is_enabled: - 1(启用): el-tag success -> 可编辑/停用/删除(无机床关联时) - 0(停用): el-tag danger -> 可编辑/启用 删除前提:该车间下无机床(有关联机床的不可删除) ### 7. 交互流程 **Tab1-系统配置:** - 加载:请求配置项列表->渲染 - 查询:关键字搜索->重置page=1->请求列表 - 编辑:弹窗->修改值->保存->关闭->刷新列表 - 重置Token:确认->调API重置->显示新值->提示"请同步更新相关服务配置" **Tab2-车间管理:** - 加载:请求车间列表->渲染(数据量极小,无需分页) - 新增:弹窗->填写->保存->关闭->刷新 - 编辑:弹窗(回填)->修改->保存->关闭->刷新 - 删除:确认"确定删除车间【{名称}】?此操作不可恢复。 "->调API->刷新 - 启停:确认->调API->刷新 **Tab3-修改密码:** - 填写表单->确认修改->校验->调API->成功提示"密码修改成功,请重新登录"->清除Token->跳转/login ### 8. 空状态 系统配置列表无数据:el-empty 暂无配置项 车间列表无数据:el-empty 暂无车间数据,点击新增车间添加 ### 9. 接口引用与数据结构 > Mock/正式API的URL、HTTP方法均定义在 `03-API接口设计.md` §3.9 端点清单,本节仅引用编号并定义返回数据结构。 #### 接口引用 | 接口名称 | 端点编号 | 界面用途 | |---------|---------|---------| | 配置项列表 | §3.9 #1 | Tab1系统配置列表,渲染表格 | | 编辑配置项 | §3.9 #2 | Tab1编辑弹窗保存 | | 重置Token | §3.9 #3 | Tab1重置Token操作 | | 车间列表 | §3.9 #4 | Tab2车间管理列表,渲染表格 | | 新增车间 | §3.9 #5 | Tab2新增弹窗保存 | | 编辑车间 | §3.9 #6 | Tab2编辑弹窗保存 | | 删除车间 | §3.9 #7 | Tab2删除操作 | | 启停车间 | §3.9 #8 | Tab2启停切换 | | 修改密码 | §3.9 #9 | Tab3修改密码表单提交 | #### 数据结构 **配置项列表(§3.9 #1):** Response: ```json { "code": 0, "data": { "items": [ { "id": 1, "configKey": "ping_interval", "configValue": "60", "valueType": "number", "description": "Ping检测间隔(秒)" }, { "id": 2, "configKey": "collect_retry_count", "configValue": "3", "valueType": "number", "description": "采集失败重试次数" }, { "id": 3, "configKey": "collect_retry_interval", "configValue": "30", "valueType": "number", "description": "采集重试间隔(秒)" }, { "id": 4, "configKey": "collect_fail_alert_threshold", "configValue": "5", "valueType": "number", "description": "连续失败N次触发告警" }, { "id": 5, "configKey": "daily_summary_time", "configValue": "01:00", "valueType": "string", "description": "日终汇总执行时间" }, { "id": 6, "configKey": "log_retention_days", "configValue": "90", "valueType": "number", "description": "原始采集日志保留天数" }, { "id": 7, "configKey": "bigscreen_refresh_interval", "configValue": "10", "valueType": "number", "description": "大屏刷新间隔(秒)" }, { "id": 8, "configKey": "api_token", "configValue": "********", "valueType": "string", "description": "前端API Token" }, { "id": 9, "configKey": "collector_api_port", "configValue": "5800", "valueType": "number", "description": "采集服务管理API端口" }, { "id": 10, "configKey": "collector_api_key", "configValue": "********", "valueType": "string", "description": "采集服务间通信API Key" } ]}} ``` **编辑配置项(§3.9 #2):** Request body: ```json { "id": 1, "configValue": "120" } ``` Response: ```json { "code": 0, "message": "success", "data": null } ``` **重置Token(§3.9 #3):** Request body: ```json { "id": 8 } ``` Response: ```json { "code": 0, "data": { "configKey": "api_token", "newValue": "eyJhbGciOiJIUzI1NiJ9.new.token" }} ``` **车间列表(§3.9 #4):** Response: ```json { "code": 0, "data": { "items": [ { "id": 1, "name": "A栋", "sortOrder": 1, "isEnabled": 1, "machineCount": 32 }, { "id": 2, "name": "B栋", "sortOrder": 2, "isEnabled": 1, "machineCount": 28 }, { "id": 3, "name": "C栋", "sortOrder": 3, "isEnabled": 0, "machineCount": 0 } ]}} ``` **新增车间(§3.9 #5):** Request body: ```json { "name": "D栋", "sortOrder": 4 } ``` Response: ```json { "code": 0, "message": "success", "data": { "id": 4, "name": "D栋" }} ``` **编辑车间(§3.9 #6):** Request body: ```json { "id": 1, "name": "A栋-新", "sortOrder": 1 } ``` Response: ```json { "code": 0, "message": "success", "data": null } ``` **删除车间(§3.9 #7):** Request body: ```json { "id": 3 } ``` Response: ```json { "code": 0, "message": "success", "data": null } ``` **启停车间(§3.9 #8):** Request body: ```json { "id": 3 } ``` Response: ```json { "code": 0, "message": "success", "data": null } ``` **修改密码(§3.9 #9):** Request body: ```json { "currentPassword": "admin123", "newPassword": "newpass123" } ``` 成功 Response: ```json { "code": 0, "message": "success", "data": null } ``` 失败 Response(旧密码错误): ```json { "code": 40001, "message": "当前密码不正确", "data": null } ``` ### 10. 数据需求 > 以下为本页面需要的数据,数据库设计定稿时需覆盖。参考 `01-数据库设计.md` 草案。 | 数据需求 | 草案对应 | 说明 | |---------|---------|------| | 系统配置列表 | cnc_sys_config | 主表 | | 编辑配置项 | cnc_sys_config.config_value | 按config_key更新 | | 重置Token | cnc_sys_config | 生成新随机Token写入 | | 车间列表 | cnc_workshop | 主表+关联机床数 | | 车间名称唯一性 | cnc_workshop.name UNIQUE | 新增/编辑时校验 | | 车间删除约束 | cnc_machine.workshop_id | 有关联机床时禁止删除 | | 修改密码 | admin密码校验 | 验证旧密码+写入新密码哈希 |