feat(gerp): 工作组详情员工卡片标题显示角色数与用户数

This commit is contained in:
TermiNexus committed 2026-10-01 23:18:01 +08:00
1 parent 66304f9c5e
commit 741d309715
1 file changed
+37 -3
+37 -3
View File
@@ -49,6 +49,10 @@ const editSubmitting = ref(false)
const columns = ref<ColumnSchema[]>([])
const editForm = reactive<Record<string, any>>({})
// 工作组员工计数(卡片标题「角色数: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<void> {
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<void> {
if (!workgroupUUID.value) return
try {
const result = await formApi.list<Record<string, unknown>>('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<void> {
if (!companyUUID) {
@@ -213,7 +247,7 @@ watch(workgroupUUID, () => {
<template #header>
<div class="detail-card-header">
<el-icon><Avatar /></el-icon>
<span>工作组员工</span>
<span>工作组员工(角色数:{{ empCounts.roles }}/用户数:{{ empCounts.users }})</span>
</div>
</template>
<CrudTable
@@ -228,7 +262,7 @@ watch(workgroupUUID, () => {
:max-height="400"
:on-view="goUserDetail"
>
<template #toolbar="{ refresh }">
<template #toolbar>
<el-button type="warning" @click="openBatchDialog">
<el-icon><Edit /></el-icon>批量调整职务
</el-button>
@@ -238,7 +272,7 @@ watch(workgroupUUID, () => {
:context="{ WorkgroupUUID: workgroupUUID, CompanyUUID: data?.CompanyUUID || '' }"
:preselected="batchPreselected"
title="工作组员工批量调整职务"
@success="refresh"
@success="refreshEmployees"
/>
</template>
</CrudTable>