fix: 提成奖金、证据链条、风险中心姓名显示身份证号

后端:
- commission-bonus.service.ts: listByMonth 查询加上 idCardNumber 并解密
- evidence.service.ts: getEvidenceList 加上 idCardNumber 并解密返回 employeeIdCardNumber
- roster.routes.ts: 证据链接口返回 employee.idCardNumber,Excel 导出加上身份证号

前端:
- CommissionBonus.tsx: 列表姓名下显示身份证号,下拉选项和编辑弹窗也加上
- EvidenceChain.tsx: 两处姓名显示加上身份证号,文本导出加上身份证号
- Evidence.tsx: 证据链列表页姓名后显示身份证号
This commit is contained in:
freedakgmail
2026-08-18 08:03:09 +08:00
parent 5db53ed591
commit 4d78eac5c2
6 changed files with 23 additions and 8 deletions
+2
View File
@@ -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 },
@@ -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,
}))
}
/**
+3 -2
View File
@@ -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,