① 基本信息
| 问题描述 | 项目创建人显示成项目创建电话 |
|---|---|
| 一级模块 | 项目信息填报 |
| 二级模块 | / |
| 涉及类型 | 全部类型 |
| 严重性 | 严重 |
| 当前状态 | 2.1.待开发 |
| 研发处理人 | (台账未填写) |
② 问题截图
③ 旧代码涉及的项目文件及行数(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 的默认取值规则,从源头补充真实姓名字段。