webui电源设置适配多种电源规则

电源设置评审材料

背景

新电源类型接入 openUBMC 后,WEB 电源设置页面需要根据电源类型动态控制页面能力。特殊电源与普通电源在主备配置和深度休眠上存在不同约束,页面不能继续依赖型号硬编码来做分支判断。

如果在 PowerInfo.vue 页面组件中直接按具体型号控制逻辑,页面行为会与电源型号强耦合。后续新增电源型号或新增电源能力时,就需要继续修改页面主流程,扩展性和可维护性都较差,也容易影响已有电源的展示与配置行为。

关联 ISSUE

[需求]: 电源设置适配多种电源规则 - openUBMC/webui - AtomGit

整体方案

WEB 前端新增电源能力识别与配置校验的独立模块,将“电源类型识别”和“页面交互控制”解耦:

  1. 新增 powerSupplyRules.ts,通过 SupplyList 中的 Model、PartNumber 等字段识别电源类型,并输出能力集合。
  2. 新增 powerSupplyValidators.ts,根据能力集合、总电源数量和已选择主用电源数量执行保存前校验。
  3. 修改 PowerInfo.vue,页面加载电源信息后调用规则模块获取能力集合,并基于能力集合控制主用电源选择上限、深度休眠展示和保存前校验。
  4. 不新增 WEB REST 接口,不修改 /UI/Rest/System/PowerSupply 请求路径和响应结构,仍复用既有 getpowerSupply() 与 setPowerSupply(configParam) 流程。

评审点

  1. 新增 WEB 前端电源能力识别规则模块 powerSupplyRules.ts。
  2. 新增 WEB 前端电源配置保存前校验模块 powerSupplyValidators.ts。
  3. 修改 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 页面主流程中堆叠型号判断。
  • 对保存行为:保存前增加策略校验。校验通过时沿用原有提交流程;校验失败时仅在前端提示并中断提交,不会向后端发送无效配置。