From 47de8cdd66f726f3c70c3cb48c6aedc7548907d3 Mon Sep 17 00:00:00 2001 From: zou Date: Tue, 18 Aug 2026 17:25:00 +0800 Subject: [PATCH] =?UTF-8?q?fix(F006):=20=E5=85=B3=E8=81=94=E4=BC=81?= =?UTF-8?q?=E4=B8=9A=E4=B8=8B=E6=8B=89=E6=94=B9=E5=B9=B3=E5=8F=B0=E4=BC=81?= =?UTF-8?q?=E4=B8=9A=E5=88=97=E8=A1=A8=E6=95=B0=E6=8D=AE=E6=BA=90=20-=20?= =?UTF-8?q?=E4=BF=AExx=E7=AD=89N=E5=AE=B6=E4=BC=81=E4=B8=9A=E8=84=8F?= =?UTF-8?q?=E6=96=87=E6=9C=AC=E9=87=8D=E5=A4=8D;=20=E4=BC=81=E4=B8=9AID?= =?UTF-8?q?=E5=85=A8=E9=93=BE=E8=B7=AF=E5=AD=97=E7=AC=A6=E4=B8=B2=E5=8C=96?= =?UTF-8?q?=E9=98=B2=E9=9B=AA=E8=8A=B1=E7=B2=BE=E5=BA=A6=E4=B8=A2=E5=A4=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/modules/user/UserFormDialog.vue | 37 +++++++++++++---------------- 1 file changed, 17 insertions(+), 20 deletions(-) diff --git a/src/modules/user/UserFormDialog.vue b/src/modules/user/UserFormDialog.vue index 3bb1420..82d700f 100644 --- a/src/modules/user/UserFormDialog.vue +++ b/src/modules/user/UserFormDialog.vue @@ -29,11 +29,11 @@ interface UserForm { mobile: string password: string sex: '' | '0' | '1' - enterpriseIds: number[] + enterpriseIds: string[] enabled: '' | '0' | '1' } -interface EnterpriseOpt { id: number; name: string } +interface EnterpriseOpt { id: string; name: string } const props = defineProps<{ visible: boolean @@ -115,29 +115,26 @@ function resetForm() { /** * 加载企业下拉选项 (弹窗打开时拉一次, 后续复用) * - * 实现: 从 /user/user/page 用户列表聚合 (enterpriseId, enterpriseName) 去重 - * 原因: gateway.json 当前没配 /enterprise/** 路由, /enterprise/list 返 404; - * 而 user-server jar 内 ApiEnterpriseController 也没正确暴露路径 - * (推测 jar 是旧版本编译, controller 路径没生效) - * 替代: 用户表里有 enterpriseId + enterpriseName 字段, 直接聚合即可 - * 兜底: 后端失败时给空数组 + * 2026-08-18 改数据源: 平台企业列表 /user/enterprise/page (企业名干净) + * 之前从 /user/user/page 用户表聚合 enterpriseName, 混入"xx等N家企业"脏文本且重复 + * ID 用字符串 (雪花ID 19位, Number 会丢精度) */ async function loadEnterprises() { if (enterpriseOptions.value.length > 0) return enterpriseLoading.value = true try { - const data: any = await httpGet('/user/user/page', { page: 1, limit: 10000 }) - const arr = Array.isArray(data?.list) ? data.list : (Array.isArray(data) ? data : []) - const seen = new Map() - for (const u of arr) { - const eid = Number(u.enterpriseId ?? 0) - if (eid > 0 && !seen.has(eid)) { - seen.set(eid, u.enterpriseName || `企业 #${eid}`) + const data: any = await httpGet('/user/enterprise/page', { page: 1, limit: 10000 }) + const arr = Array.isArray(data?.list) ? data.list : [] + const seen = new Map() + for (const e of arr) { + const eid = String(e.id ?? '') + if (eid && !seen.has(eid)) { + seen.set(eid, e.enterpriseName || `企业 #${eid}`) } } enterpriseOptions.value = Array.from(seen.entries()) .map(([id, name]) => ({ id, name })) - .sort((a, b) => a.id - b.id) + .sort((a, b) => (a.id > b.id ? 1 : -1)) } catch { enterpriseOptions.value = [] } finally { @@ -157,8 +154,8 @@ async function loadDetail() { form.sex = (data.sex === 0 || data.sex === 1 ? String(data.sex) : '') as UserForm['sex'] // 多企业关联回显: 后端 getUserInfo 返回 enterpriseIdList; 兼容旧数据单值 enterpriseId const ids = Array.isArray(data.enterpriseIdList) - ? data.enterpriseIdList.map((v: any) => Number(v)).filter((v: any) => Number.isFinite(v) && v > 0) - : (data.enterpriseId ? [Number(data.enterpriseId)] : []) + ? data.enterpriseIdList.map((v: any) => String(v)).filter((v: string) => v && v !== '0') + : (data.enterpriseId ? [String(data.enterpriseId)] : []) form.enterpriseIds = ids 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.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 (mode.value === 'create') { @@ -266,7 +263,7 @@ async function submit() {