diff --git a/backend/src/routes/roster.routes.ts b/backend/src/routes/roster.routes.ts index 8792a21..a1d0d1b 100644 --- a/backend/src/routes/roster.routes.ts +++ b/backend/src/routes/roster.routes.ts @@ -638,6 +638,7 @@ router.get('/:id/evidence-chain', authMiddleware, async (req: AuthRequest, res, status: employee.terminations.some((t) => t.status === 'COMPLETED' && t.terminationDate <= new Date()) ? 'RESIGNED' : 'ACTIVE', gender: employee.gender, phone: employee.phone, + idCardNumber: safeDecryptStr(employee.idCardNumber), }, evidence, risks, @@ -691,6 +692,7 @@ router.get('/:id/evidence-chain/export', authMiddleware, async (req: AuthRequest const empStatus = employee.terminations.some((t) => t.status === 'COMPLETED' && t.terminationDate <= today) ? '离职' : '在职' wsInfo.addRows([ { label: '姓名', value: empName }, + { label: '身份证号', value: safeDecryptStr(employee.idCardNumber) || '' }, { label: '部门', value: empDept }, { label: '入职日期', value: hireDate }, { label: '状态', value: empStatus }, diff --git a/backend/src/services/commission-bonus.service.ts b/backend/src/services/commission-bonus.service.ts index 2f119b6..4c1aa66 100644 --- a/backend/src/services/commission-bonus.service.ts +++ b/backend/src/services/commission-bonus.service.ts @@ -13,12 +13,18 @@ export async function listByMonth(orgId: string, month: string) { where: { orgId, month }, include: { employee: { - select: { id: true, name: true, department: true, idCardHash: true }, + select: { id: true, name: true, department: true, idCardHash: true, idCardNumber: true }, }, }, orderBy: [{ employee: { department: 'asc' } }, { employee: { name: 'asc' } }], }) - return records + return records.map(r => ({ + ...r, + employee: r.employee ? { + ...r.employee, + idCardNumber: (() => { try { const v = r.employee.idCardNumber; return v ? (v.includes(':') ? decrypt(v) : v) : null } catch { return null } })(), + } : r.employee, + })) } /** diff --git a/backend/src/services/evidence.service.ts b/backend/src/services/evidence.service.ts index c29013f..f0abfac 100644 --- a/backend/src/services/evidence.service.ts +++ b/backend/src/services/evidence.service.ts @@ -1,5 +1,5 @@ import prisma from '../lib/prisma' -import { sha256 } from '../lib/crypto' +import { sha256, decrypt } from '../lib/crypto' /** * 递归排序对象/数组中所有 key,确保 JSON.stringify 结果一致 @@ -165,7 +165,7 @@ export async function getEvidenceList(orgId: string, category?: string, page: nu prisma.evidenceChain.count({ where }), prisma.evidenceChain.findMany({ where, - include: { employee: { select: { id: true, name: true, department: true } } }, + include: { employee: { select: { id: true, name: true, department: true, idCardNumber: true } } }, orderBy: { createdAt: 'desc' }, skip: (page - 1) * pageSize, take: pageSize, @@ -187,6 +187,7 @@ export async function getEvidenceList(orgId: string, category?: string, page: nu employeeId: r.employeeId, employeeName: r.employee?.name || null, employeeDept: r.employee?.department || null, + employeeIdCardNumber: (() => { try { const v = r.employee?.idCardNumber; return v ? (v.includes(':') ? decrypt(v) : v) : null } catch { return null } })(), eventCount: events.length, firstAction: firstEvent?.action || null, lastAction: lastEvent?.action || null, diff --git a/frontend/src/pages/CommissionBonus.tsx b/frontend/src/pages/CommissionBonus.tsx index 25fe7f1..3d874ad 100644 --- a/frontend/src/pages/CommissionBonus.tsx +++ b/frontend/src/pages/CommissionBonus.tsx @@ -171,7 +171,10 @@ export default function CommissionBonus() {