类型:填报问题 严重性:严重 状态:5.1.已关闭(复测通过)
| 问题描述 | 场站状态选择为待建,保存之后,变成在建状态 |
|---|---|
| 一级模块 | 项目信息填报 |
| 二级模块 | / |
| 涉及类型 | 全部类型 |
| 是否阻断流程 | 是 |
| 处理人员 | 洪陈解 |
| 复测情况 | 复测通过 |
src/views/projectNew/components/baseInfo/projectDetail.vuechangeProStatus(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行)与保存后触发的刷新流程都不会重新调用该方法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.addOrUpdatePro → ProjectImplAppService.addProject()(xnybw5b/730backup 第1132-1200行)对 proStatus 字段是原样透传落库(project.setpStatus(proVo.getProStatus())),未发现后端有额外的状态覆盖逻辑,因此判断问题根因在前端聚合计算这一层,而非后端。