电源设置评审材料
背景
新电源类型接入 openUBMC 后,WEB 电源设置页面需要根据电源类型动态控制页面能力。特殊电源与普通电源在主备配置和深度休眠上存在不同约束,页面不能继续依赖型号硬编码来做分支判断。
如果在 PowerInfo.vue 页面组件中直接按具体型号控制逻辑,页面行为会与电源型号强耦合。后续新增电源型号或新增电源能力时,就需要继续修改页面主流程,扩展性和可维护性都较差,也容易影响已有电源的展示与配置行为。
关联 ISSUE
[需求]: 电源设置适配多种电源规则 - openUBMC/webui - AtomGit
整体方案
WEB 前端新增电源能力识别与配置校验的独立模块,将“电源类型识别”和“页面交互控制”解耦:
- 新增
powerSupplyRules.ts,通过SupplyList中的Model、PartNumber等字段识别电源类型,并输出能力集合。 - 新增
powerSupplyValidators.ts,根据能力集合、总电源数量和已选择主用电源数量执行保存前校验。 - 修改
PowerInfo.vue,页面加载电源信息后调用规则模块获取能力集合,并基于能力集合控制主用电源选择上限、深度休眠展示和保存前校验。 - 不新增 WEB REST 接口,不修改
/UI/Rest/System/PowerSupply请求路径和响应结构,仍复用既有getpowerSupply()与setPowerSupply(configParam)流程。
评审点
- 新增 WEB 前端电源能力识别规则模块
powerSupplyRules.ts。 - 新增 WEB 前端电源配置保存前校验模块
powerSupplyValidators.ts。 - 修改
PowerInfo.vue,由页面硬编码型号判断调整为基于能力集合驱动页面行为。
详细描述
1. 本次变化点
本次改造将电源设置页面中的电源能力判断从 PowerInfo.vue 页面主流程中拆出,新增独立规则与校验模块,由页面统一消费规则结果,不再在页面组件内直接按具体电源型号硬编码控制交互行为。
本次主要变化如下:
- 新增
powerSupplyRules.ts:根据/UI/Rest/System/PowerSupply返回的SupplyList中的Model、PartNumber等字段识别电源类型,并输出页面所需的能力集合。 - 新增
powerSupplyValidators.ts:将保存前校验逻辑从页面交互代码中拆出,根据能力集合、总电源数量、当前选择的主用电源数量等信息执行策略校验。 - 调整
PowerInfo.vue:页面加载电源信息后,先读取SupplyList、ExpectedSupplyList、DeepSleep、DeepSleepSupported、ActiveStandbySupported等既有字段,再调用规则模块生成页面策略。 - 保持 REST 接口不变:本次不新增 WEB REST 接口,不修改
/UI/Rest/System/PowerSupply的请求路径、响应字段和提交入口,仍复用既有getpowerSupply()与setPowerSupply(configParam)流程。
2. 处理流程
flowchart TD
A[进入电源信息页面] --> B[调用 getpowerSupply 获取 /UI/Rest/System/PowerSupply]
B --> C[读取 SupplyList 生成电源身份列表]
B --> D[读取 ExpectedSupplyList 初始化主用/备用选择状态]
B --> E[读取 DeepSleep、DeepSleepSupported、ActiveStandbySupported 等页面状态]
C --> F[powerSupplyRules.ts 计算能力集合]
D --> G[生成页面策略]
E --> G
F --> G
G --> H[输出主用选择范围、深度休眠可见性、提交字段过滤规则]
H --> I[页面按策略渲染控件并约束交互]
I --> J[用户调整工作模式或主用电源]
J --> K[computedState 生成待提交参数并校验保存按钮状态]
K --> L{保存前策略校验是否通过,此处策略为原始策略加当前电源匹配的特殊策略}
L -- 否 --> M[展示错误提示并中断提交]
L -- 是 --> N[调用 setPowerSupply 提交 PowerMode、SupplyList、DeepSleep]
N --> O[完成提交]
3. 对已有功能的影响
- 对普通电源:仍按原有字段和原有接口展示、编辑和提交。未命中特殊规则的电源走默认能力集合,页面行为保持与改造前一致。
- 对特殊电源:通过规则模块识别后,会按能力集合动态限制主用电源可选范围,并按策略控制深度休眠控件和提交字段,避免用户提交不满足供电策略的配置。
- 对接口兼容性:本次改造只调整 WEB 前端页面逻辑,不改变后端接口路径、请求方法、响应结构和提交字段来源。已有
getpowerSupply()、setPowerSupply(configParam)调用链路继续复用。 - 对后续扩展:后续新增电源型号或新增电源能力时,优先在
powerSupplyRules.ts中补充规则,在powerSupplyValidators.ts中补充校验,不需要继续在PowerInfo.vue页面主流程中堆叠型号判断。 - 对保存行为:保存前增加策略校验。校验通过时沿用原有提交流程;校验失败时仅在前端提示并中断提交,不会向后端发送无效配置。