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

项目保存之后,“项目创建人”“项目创建人电话”未显示

Excel 第 21 行 · 新能源并网五区(xnybw5)
严重性:严重 状态:5.1.已关闭(复测通过)

1基本信息

问题描述保存之后,项目创建人、项目创建人电话没有显示出来
一级模块项目信息填报
二级模块/
涉及类型全部类型
严重性严重
当前状态5.1.已关闭
研发处理人员陈键泽/洪陈解
复测情况复测通过

2问题截图

本行 manifest 中未提取到对应截图,以下分析基于代码走读。

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

前端:xnybw5f / src/views/projectNew/components/baseInfo/projectDetail.vue(第 1921-1935 行 init 方法)
新建项目时,“项目创建人”同步赋值,但“项目创建人电话”通过一次未等待的异步接口获取。
前端:xnybw5f / src/views/projectNew/components/baseInfo/components/baseInfo.vue(第 571-577 行 init 方法,同类写法)
与 projectDetail.vue 的写法完全一致,同样存在竞态风险。

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

5修复方案

说明:本条缺陷当前状态为“已关闭 / 复测通过”。走读 backup730 代码发现,新建项目页面初始化时对“项目创建人”和“项目创建人电话”采用了两种不同的赋值方式:“创建人”直接从本地登录态同步赋值,而“创建人电话”需要额外调用一次 projectBaseApi.getPhone() 接口异步获取,且该调用是“发出去就不管”(未 await),也没有在电话获取完成前禁用“保存”按钮:

修改前(projectDetail.vue 第 1917-1935 行)
async init() {
  return new Promise((resolve) => {
    if (this.currentStatus == 'add') {
      this.form.creator = userInfo.userAlias
      this.form.createTime = new Date()
      this.form.bakPstatus = '0'
      this.form.implVoList = []
      // 未 await,保存按钮此时已经可点
      projectBaseApi.getPhone({ userId: userInfo.userId }).then(res => {
        this.form.creatorPhone = res.data
      })
      this.readOnly = false
      resolve()
    }
    ...
修改后(建议)
async init() {
  return new Promise(async (resolve) => {
    if (this.currentStatus == 'add') {
      this.form.creator = userInfo.userAlias
      this.form.createTime = new Date()
      this.form.bakPstatus = '0'
      this.form.implVoList = []
      // 等待电话号码回填完成后再放开保存入口
      try {
        const res = await projectBaseApi.getPhone({ userId: userInfo.userId })
        this.form.creatorPhone = res.data
      } catch (e) {
        this.$message.error('获取创建人联系电话失败,请刷新页面重试')
      }
      this.readOnly = false
      resolve()
    }
    ...
该问题症状是“创建人”和“创建人电话”两个字段都未回显,而代码里“创建人”是同步赋值、理论上不受此竞态影响,因此不能排除还存在另一条路径——例如保存后页面通过 getProjectById 重新整体覆盖 this.formbaseInfo.vue 第 578-583 行 this.form = res.data),如果后端返回体在某些分支下漏填 creator/creatorPhone,也会表现为同样的现象。建议本次修复同时在后端 ProjectImplAppService.getProjectById() 返回前补充一次显式非空校验/日志埋点,双向锁定问题面,避免复测通过后在其他数据状态下复现。