feat(gerp): 工作组详情员工卡片标题显示角色数与用户数
This commit is contained in:
1 parent
66304f9c5e
commit
741d309715
1 file changed
+37
-3
@@ -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>
|
||||
|
||||
Reference in new issue
Block a user