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:
@@ -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,
|
||||
}))
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user