R64 A1-A6:新员工入门引导

这个提交包含在:
2026-04-14 16:45:10 +08:00
父节点 86644a6766
当前提交 7ac0de660c
共修改 12 个文件,包含 453 行新增和 5 行删除
+24
查看文件
@@ -28,6 +28,22 @@ function parseNotificationPreferences(body) {
return parsed.data;
}
function buildProfileCompleteness(employee) {
const hasEmergencyContact = Boolean(employee?.emergency_contact_name && employee?.emergency_contact_phone);
const hasBankAccount = Boolean(employee?.bank_account_encrypted && employee?.bank_name);
const hasAvatar = Boolean(employee?.avatar_path);
const hasIdNumber = Boolean(employee?.id_number_encrypted);
const completedCount = [hasEmergencyContact, hasBankAccount, hasAvatar, hasIdNumber].filter(Boolean).length;
return {
hasEmergencyContact,
hasBankAccount,
hasAvatar,
hasIdNumber,
score: completedCount * 25,
};
}
async function meRoutes(fastify) {
fastify.get(
"/me",
@@ -46,6 +62,12 @@ async function meRoutes(fastify) {
department_id: true,
direct_manager_id: true,
status: true,
emergency_contact_name: true,
emergency_contact_phone: true,
bank_account_encrypted: true,
bank_name: true,
avatar_path: true,
id_number_encrypted: true,
notification_push_enabled: true,
roles: { select: { role_code: true } },
wecom_identity_binding: { select: { external_user_id: true, created_at: true } },
@@ -53,6 +75,7 @@ async function meRoutes(fastify) {
});
const roleCodes = (employee?.roles ?? []).map((r) => r.role_code);
const profileCompleteness = buildProfileCompleteness(employee);
return sendData(reply, request, {
id: employee?.id ?? request.employee.id,
employeeNo: employee?.employee_no ?? "",
@@ -64,6 +87,7 @@ async function meRoutes(fastify) {
status: employee?.status ?? "active",
notificationPushEnabled: employee?.notification_push_enabled ?? true,
roleCodes,
profileCompleteness,
wecomBinding: employee?.wecom_identity_binding ? { externalUserId: employee.wecom_identity_binding.external_user_id, createdAt: employee.wecom_identity_binding.created_at?.toISOString?.() ?? null } : null,
});
},