From 741d3097157579dc76a380f09d722422d526aa79 Mon Sep 17 00:00:00 2001 From: TermiNexus Date: Thu, 1 Oct 2026 23:18:01 +0800 Subject: [PATCH] =?UTF-8?q?feat(gerp):=20=E5=B7=A5=E4=BD=9C=E7=BB=84?= =?UTF-8?q?=E8=AF=A6=E6=83=85=E5=91=98=E5=B7=A5=E5=8D=A1=E7=89=87=E6=A0=87?= =?UTF-8?q?=E9=A2=98=E6=98=BE=E7=A4=BA=E8=A7=92=E8=89=B2=E6=95=B0=E4=B8=8E?= =?UTF-8?q?=E7=94=A8=E6=88=B7=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/views/company/WorkgroupDetail.vue | 40 +++++++++++++++++++++++++-- 1 file changed, 37 insertions(+), 3 deletions(-) diff --git a/src/views/company/WorkgroupDetail.vue b/src/views/company/WorkgroupDetail.vue index 1dc5eaa..adb48f3 100644 --- a/src/views/company/WorkgroupDetail.vue +++ b/src/views/company/WorkgroupDetail.vue @@ -49,6 +49,10 @@ const editSubmitting = ref(false) const columns = ref([]) const editForm = reactive>({}) +// 工作组员工计数(卡片标题「角色数:x/用户数:y」) +// 角色数 = 用户-角色关系条数;用户数 = 去重用户数(同一人挂多个角色只算一个) +const empCounts = ref<{ roles: number; users: number }>({ roles: 0, users: 0 }) + // 主键字段 const PK_FIELD = 'WorkgroupUUID' @@ -86,11 +90,41 @@ async function loadData(): Promise { setPageTitle(row.WorkgroupName || '工作组详情') // 解析所属公司 UUID → 名称 await resolveCompany(row.CompanyUUID) + // 计数依赖 row.CompanyUUID,必须等主数据就位后再取 + await loadEmpCounts() } finally { loading.value = false } } +/** + * 加载「工作组员工(角色数:x/用户数:y)」 + * + * 计数必须与子表同源(同样的 WorkgroupUUID + CompanyUUID 过滤条件),所以复用 List 接口: + * 只要 1 行数据,靠 total 拿角色数、user_count 拿去重用户数(后端按 WithUserCount 现算)。 + */ +async function loadEmpCounts(): Promise { + if (!workgroupUUID.value) return + try { + const result = await formApi.list>('UserRoleWorkgroup', { + WorkgroupUUID: workgroupUUID.value, + CompanyUUID: data.value?.CompanyUUID || '', + WithUserCount: 1, + pageSize: 1, + }) + const paged = result as unknown as { total?: number; user_count?: number } + empCounts.value = { roles: paged?.total ?? 0, users: paged?.user_count ?? 0 } + } catch { + // 计数失败不影响页面主体(错误提示已由响应拦截器统一处理) + } +} + +/** 刷新子表 + 计数(计数与子表同源,必须一起更新) */ +function refreshEmployees(): void { + wgTableRef.value?.refresh?.() + void loadEmpCounts() +} + /** 解析 CompanyUUID → CompanyName */ async function resolveCompany(companyUUID?: string): Promise { if (!companyUUID) { @@ -213,7 +247,7 @@ watch(workgroupUUID, () => { { :max-height="400" :on-view="goUserDetail" > -