fix(F006): 关联企业下拉改平台企业列表数据源 - 修xx等N家企业脏文本重复; 企业ID全链路字符串化防雪花精度丢失
This commit is contained in:
parent
220852aeca
commit
47de8cdd66
@ -29,11 +29,11 @@ interface UserForm {
|
|||||||
mobile: string
|
mobile: string
|
||||||
password: string
|
password: string
|
||||||
sex: '' | '0' | '1'
|
sex: '' | '0' | '1'
|
||||||
enterpriseIds: number[]
|
enterpriseIds: string[]
|
||||||
enabled: '' | '0' | '1'
|
enabled: '' | '0' | '1'
|
||||||
}
|
}
|
||||||
|
|
||||||
interface EnterpriseOpt { id: number; name: string }
|
interface EnterpriseOpt { id: string; name: string }
|
||||||
|
|
||||||
const props = defineProps<{
|
const props = defineProps<{
|
||||||
visible: boolean
|
visible: boolean
|
||||||
@ -115,29 +115,26 @@ function resetForm() {
|
|||||||
/**
|
/**
|
||||||
* 加载企业下拉选项 (弹窗打开时拉一次, 后续复用)
|
* 加载企业下拉选项 (弹窗打开时拉一次, 后续复用)
|
||||||
*
|
*
|
||||||
* 实现: 从 /user/user/page 用户列表聚合 (enterpriseId, enterpriseName) 去重
|
* 2026-08-18 改数据源: 平台企业列表 /user/enterprise/page (企业名干净)
|
||||||
* 原因: gateway.json 当前没配 /enterprise/** 路由, /enterprise/list 返 404;
|
* 之前从 /user/user/page 用户表聚合 enterpriseName, 混入"xx等N家企业"脏文本且重复
|
||||||
* 而 user-server jar 内 ApiEnterpriseController 也没正确暴露路径
|
* ID 用字符串 (雪花ID 19位, Number 会丢精度)
|
||||||
* (推测 jar 是旧版本编译, controller 路径没生效)
|
|
||||||
* 替代: 用户表里有 enterpriseId + enterpriseName 字段, 直接聚合即可
|
|
||||||
* 兜底: 后端失败时给空数组
|
|
||||||
*/
|
*/
|
||||||
async function loadEnterprises() {
|
async function loadEnterprises() {
|
||||||
if (enterpriseOptions.value.length > 0) return
|
if (enterpriseOptions.value.length > 0) return
|
||||||
enterpriseLoading.value = true
|
enterpriseLoading.value = true
|
||||||
try {
|
try {
|
||||||
const data: any = await httpGet('/user/user/page', { page: 1, limit: 10000 })
|
const data: any = await httpGet('/user/enterprise/page', { page: 1, limit: 10000 })
|
||||||
const arr = Array.isArray(data?.list) ? data.list : (Array.isArray(data) ? data : [])
|
const arr = Array.isArray(data?.list) ? data.list : []
|
||||||
const seen = new Map<number, string>()
|
const seen = new Map<string, string>()
|
||||||
for (const u of arr) {
|
for (const e of arr) {
|
||||||
const eid = Number(u.enterpriseId ?? 0)
|
const eid = String(e.id ?? '')
|
||||||
if (eid > 0 && !seen.has(eid)) {
|
if (eid && !seen.has(eid)) {
|
||||||
seen.set(eid, u.enterpriseName || `企业 #${eid}`)
|
seen.set(eid, e.enterpriseName || `企业 #${eid}`)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
enterpriseOptions.value = Array.from(seen.entries())
|
enterpriseOptions.value = Array.from(seen.entries())
|
||||||
.map(([id, name]) => ({ id, name }))
|
.map(([id, name]) => ({ id, name }))
|
||||||
.sort((a, b) => a.id - b.id)
|
.sort((a, b) => (a.id > b.id ? 1 : -1))
|
||||||
} catch {
|
} catch {
|
||||||
enterpriseOptions.value = []
|
enterpriseOptions.value = []
|
||||||
} finally {
|
} finally {
|
||||||
@ -157,8 +154,8 @@ async function loadDetail() {
|
|||||||
form.sex = (data.sex === 0 || data.sex === 1 ? String(data.sex) : '') as UserForm['sex']
|
form.sex = (data.sex === 0 || data.sex === 1 ? String(data.sex) : '') as UserForm['sex']
|
||||||
// 多企业关联回显: 后端 getUserInfo 返回 enterpriseIdList; 兼容旧数据单值 enterpriseId
|
// 多企业关联回显: 后端 getUserInfo 返回 enterpriseIdList; 兼容旧数据单值 enterpriseId
|
||||||
const ids = Array.isArray(data.enterpriseIdList)
|
const ids = Array.isArray(data.enterpriseIdList)
|
||||||
? data.enterpriseIdList.map((v: any) => Number(v)).filter((v: any) => Number.isFinite(v) && v > 0)
|
? data.enterpriseIdList.map((v: any) => String(v)).filter((v: string) => v && v !== '0')
|
||||||
: (data.enterpriseId ? [Number(data.enterpriseId)] : [])
|
: (data.enterpriseId ? [String(data.enterpriseId)] : [])
|
||||||
form.enterpriseIds = ids
|
form.enterpriseIds = ids
|
||||||
form.enabled = (data.enabled === 0 || data.enabled === 1 ? String(data.enabled) : '0') as UserForm['enabled']
|
form.enabled = (data.enabled === 0 || data.enabled === 1 ? String(data.enabled) : '0') as UserForm['enabled']
|
||||||
}
|
}
|
||||||
@ -191,7 +188,7 @@ async function submit() {
|
|||||||
}
|
}
|
||||||
if (form.password) payload.password = form.password
|
if (form.password) payload.password = form.password
|
||||||
if (form.sex !== '') payload.sex = Number(form.sex)
|
if (form.sex !== '') payload.sex = Number(form.sex)
|
||||||
if (form.enterpriseIds.length) payload.enterpriseIds = form.enterpriseIds
|
if (form.enterpriseIds.length) payload.enterpriseIds = form.enterpriseIds.map(String)
|
||||||
if (form.enabled !== '') payload.enabled = Number(form.enabled)
|
if (form.enabled !== '') payload.enabled = Number(form.enabled)
|
||||||
|
|
||||||
if (mode.value === 'create') {
|
if (mode.value === 'create') {
|
||||||
@ -266,7 +263,7 @@ async function submit() {
|
|||||||
<el-form-item label="关联企业" prop="enterpriseIds">
|
<el-form-item label="关联企业" prop="enterpriseIds">
|
||||||
<el-select
|
<el-select
|
||||||
v-model="form.enterpriseIds"
|
v-model="form.enterpriseIds"
|
||||||
placeholder="请选择关联企业 (可多选, 一人可属多个企业)"
|
placeholder="从平台企业列表选择 (可多选)"
|
||||||
multiple
|
multiple
|
||||||
filterable
|
filterable
|
||||||
clearable
|
clearable
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user