feat(aihr): surface org snapshot data quality

This commit is contained in:
2026-07-09 21:38:35 +08:00
parent f00f9045eb
commit f38dfeeae0
5 changed files with 54 additions and 1 deletions
@@ -38,8 +38,21 @@
<el-tag>总数 {{ orgSnapshot?.total ?? 0 }}</el-tag>
<el-tag type="success">在职 {{ orgSnapshot?.active ?? 0 }}</el-tag>
<el-tag type="info">离职 {{ orgSnapshot?.departed ?? 0 }}</el-tag>
<el-tag :type="mobileLoginReady ? 'success' : 'warning'">可登录 {{ orgSnapshot?.phoneLinked ?? 0 }}</el-tag>
<el-tag v-if="orgSnapshot?.suspectText" type="danger">疑似乱码 {{ orgSnapshot.suspectText }}</el-tag>
</div>
</div>
<el-alert
v-if="orgQualityWarnings.length"
class="quality-alert"
type="warning"
:closable="false"
show-icon
>
<template #title>
{{ orgQualityWarnings.join(';') }}
</template>
</el-alert>
<div class="org-filters">
<el-input v-model="orgFilters.keyword" clearable placeholder="姓名/岗位/部门/外部ID" @keyup.enter="searchOrgSnapshot" />
<el-select v-model="orgFilters.projectCode" clearable placeholder="项目">
@@ -233,6 +246,26 @@ const projectScopes = computed(() =>
}))
);
const mobileLoginReady = computed(() => {
const snapshot = orgSnapshot.value;
return Boolean(snapshot?.total && snapshot.phoneLinked >= snapshot.active);
});
const orgQualityWarnings = computed(() => {
const snapshot = orgSnapshot.value;
if (!snapshot?.total) {
return [];
}
const warnings: string[] = [];
if (snapshot.phoneLinked < snapshot.active) {
warnings.push(`移动端登录映射不完整:当前筛选 ${snapshot.active} 名在职人员,仅 ${snapshot.phoneLinked} 名带手机号`);
}
if (snapshot.suspectText > 0) {
warnings.push(`组织字段存在 ${snapshot.suspectText} 条疑似乱码,请检查同步源或 SQL 导入字符集`);
}
return warnings;
});
const loadOrgSnapshot = async () => {
orgLoading.value = true;
try {
@@ -377,6 +410,10 @@ onMounted(loadOrgSnapshot);
margin-bottom: 14px;
}
.quality-alert {
margin-bottom: 14px;
}
.sync-result {
display: grid;
gap: 10px;