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

① 基本信息

问题描述项目创建人显示成项目创建电话
一级模块项目信息填报
二级模块/
涉及类型全部类型
严重性严重
当前状态2.1.待开发
研发处理人(台账未填写)

② 问题截图

项目创建人显示为手机号
"项目创建人"输入框显示"18675159263",与右侧"项目创建人电话"完全相同的手机号

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

xnybw5f / src/views/projectNew/components/baseInfo/components/baseInfo.vue 第 101-108 行("项目创建人"表单项,绑定 form.creator)、第 570-576 行(init() 新建时赋值 form.creator = userInfo.userAlias)
xnybw5b / src/main/java/cn/csg/so/oms/in/newenergy/project/model/NePjVO.java 第 140-189 行(creator / creatorPhone / creatorId 三个独立字段定义)

④ 代码现状与修复方案

前端"项目基本信息"表单里,"项目创建人"与"项目创建人电话"是两个独立的绑定字段,本身没有写错:

<el-form-item label="项目创建人">
  <el-input v-model="form.creator" disabled maxlength="50"></el-input>   // 第104行
</el-form-item>
<el-form-item label="项目创建人电话">
  <el-input v-model="form.creatorPhone" disabled maxlength="50"></el-input>  // 第114行
</el-form-item>

新建项目时(init() 方法),"项目创建人"取的是当前登录用户的姓名/别名userInfo.userAlias),逻辑上是对的:

if (this.status == 'add') {
  this.form.creator = userInfo.userAlias   // 第572行:取真实姓名/别名,不是手机号
  this.form.createTime = new Date()
  ...
  projectBaseApi.getPhone({ userId: userInfo.userId }).then(res => {
    this.form.creatorPhone = res.data   // 单独查询手机号,赋给creatorPhone
  })
}

后端 NePjVO 模型也明确区分了三个字段,映射到三个不同数据库列,字段之间不存在互相覆盖或列名混淆:

@Column(name = "CREATOR", length = 255)          private String creator;       // 项目创建人(姓名)
@Column(name = "CREATOR_PHONE", length = 255)    private String creatorPhone;  // 项目创建人电话
@Column(name = "CREATOR_ID", length = 36)        private String creatorId;     // 创建人ID
经排查 xnybw5b 全仓库范围内,没有找到任何一处后端代码用 setCreator(...) 写入 NePjVO.creator ——项目基本信息(NePjVO)这条记录的 creator 值完全是"新建保存"接口透传前端提交的原始值直接落库(低代码框架生成的 CRUD,未见业务层覆盖)。也就是说:只要前端第一次"新建保存"时提交的 form.creator 值本身就是手机号,落库后无论怎么读,展示的都会是手机号,且看不到任何后端逻辑会主动纠正它。

结合前端 form.creator = userInfo.userAlias 这行代码本身没问题,最可能的根因是:这个互联网侧测试账号在统一身份认证(SSO)里的"别名/userAlias"字段本身就是手机号(互联网侧用户多为手机号验证码登录,若账号未补充真实姓名,身份系统默认会把手机号当作显示别名下发),并非 xnybw5f/xnybw5b 代码本身写错了字段。

建议修复方式(防御性兜底,不依赖身份系统改造):

this.form.creator = userInfo.userAlias
// 若userAlias本身是纯数字手机号格式,做脱敏展示或退化为"互联网用户+手机号后4位",
// 避免账号未填写真实姓名时,创建人和创建人电话两栏显示完全相同的手机号
const alias = userInfo.userAlias
const isPhoneLike = /^1\d{10}$/.test(alias)
this.form.creator = isPhoneLike ? ('互联网用户' + alias.slice(-4)) : alias

如需彻底解决,建议同时向身份认证(SSO/用户中心)侧确认互联网外部账号在未实名认证前 userAlias 的默认取值规则,从源头补充真实姓名字段。