生成时间: 2026-08-02 · 数据来源: xnybw平台需求及工作计划.xlsx(南网在线绿能云缺陷跟踪表)· 仅针对 backup730/730backup 分支代码

场站状态选择为"待建",保存之后变成"在建"状态(Excel第7行)

类型:填报问题  严重性:严重  状态:5.1.已关闭(复测通过)

基本信息

问题描述场站状态选择为待建,保存之后,变成在建状态
一级模块项目信息填报
二级模块/
涉及类型全部类型
是否阻断流程
处理人员洪陈解
复测情况复测通过

问题截图

row7 截图1
图1:保存前选择的场站状态
row7 截图2
图2:保存后场站状态变为"在建"

旧代码涉及的项目文件及行数(backup730/730backup)

xnybw5f / backup730 / src/views/projectNew/components/baseInfo/projectDetail.vue
· 第2101-2124行:changeProStatus(value) —— 项目级"项目状态"(form.proStatus)由所有场站(form.implVoList[].proStatus)聚合计算得出:
changeProStatus(value) {
  const pStatusList = [];
  this.form.implVoList.forEach((element) => {
    if (element.proStatus) { pStatusList.push(element.proStatus); }
  });
  if (pStatusList.length > 0) {
    const allAre3 = pStatusList.every((status) => status === "3");
    const allAre5 = pStatusList.every((status) => status === "5");
    if (allAre3) { this.form.proStatus = "3"; }
    else if (allAre5) { this.form.proStatus = "5"; }
    else { this.form.proStatus = "4"; } // 兜底:非"全待建"或"全已投产"一律判定为"在建"
  }
}
· 第99、107、115、123行:该方法仅通过场站子组件 stationInfo.vue 等抛出的 @changeProStatus 事件(用户手动点击单选框、或切换场站Tab)触发,项目初次加载 init()(第383-385行)与保存后触发的刷新流程都不会重新调用该方法
· 第418-500行:saveOrUpdate() 保存方法顶部第420-426行有一段被注释掉的旧聚合逻辑(// const pStatusList = []...),说明"保存前重新计算一次项目状态"这一步在当前实现中已被移除,保存时直接使用 this.form.proStatus 当前值提交

修复代码涉及的项目文件及行数

projectDetail.vue 第2101-2124行 changeProStatus() 与第418行 saveOrUpdate()

修复方案

问题成因有两处配合才会触发:"全部待建"判定使用了严格字符串比较 status === "3",一旦某个场站的 proStatus 因初始化路径不同而不是字符串"3"(例如从接口原样读入为数字或其它格式),allAre3 判定就会失真而落入兜底分支得到"4"(在建);同时该聚合函数只在用户手动交互时触发,保存前并未强制重新校准一次,导致"用户当下看到的是待建,但底层 form.proStatus 早已因某次未被感知的状态漂移变成在建",保存后即原样落库回显为"在建"。

changeProStatus(value) {
  const pStatusList = [];
  this.form.implVoList.forEach((element) => {
    if (element.proStatus !== undefined && element.proStatus !== null && element.proStatus !== '') {
      pStatusList.push(String(element.proStatus)); // 统一转字符串,避免类型不一致导致判定失真
    }
  });
  ...
}

async saveOrUpdate() {
  // 修复:保存前强制重新校准一次项目状态,不依赖此前是否触发过交互事件
  this.changeProStatus();
  if (this.form.implVoList && this.form.implVoList.length > 0) {
    ...
    projectBaseApi.addOrUpdatePro(this.form).then(...)
  }
}
已核实后端 NewNePjController.addOrUpdateProProjectImplAppService.addProject()(xnybw5b/730backup 第1132-1200行)对 proStatus 字段是原样透传落库(project.setpStatus(proVo.getProStatus())),未发现后端有额外的状态覆盖逻辑,因此判断问题根因在前端聚合计算这一层,而非后端。