fix: 绩效/培训/违纪/工资条/加班/休假/专项扣除/薪酬批次列表姓名下显示完整身份证号

后端:
- roster.routes.ts: 绩效/培训/违纪列表查询加上 idCardNumber 并解密
- payroll.routes.ts: 加班/工资条查询加上 idCardNumber 并解密
- payroll2.routes.ts: 薪酬批次详情加上 idCardNumber 并解密
- leave.routes.ts: 休假审批列表加上 idCardNumber 并解密
- social.routes.ts: 专项附加扣除查询加上 idCardNumber 并解密

前端:
- PerformanceRecords.tsx: 姓名下显示身份证号
- TrainingRecords.tsx: 姓名下显示身份证号
- DisciplinaryRecords.tsx: 姓名下显示身份证号
- PayslipTab.tsx: 姓名下显示身份证号
- OvertimeTab.tsx: 姓名下显示身份证号
- LeaveApproval.tsx: 姓名下显示身份证号
- SpecialDeductionTab.tsx: 姓名下显示身份证号
- BatchTab.tsx: 姓名下显示身份证号
This commit is contained in:
freedakgmail
2026-08-18 07:42:24 +08:00
parent ef03b2e5f8
commit a58cc3f6f9
13 changed files with 126 additions and 31 deletions
+5 -2
View File
@@ -167,8 +167,11 @@ export default function LeaveApproval() {
return (
<tr key={item.id} className="border-b last:border-0 hover:bg-gray-50">
<td className="py-2.5 px-3">
<div className="text-xs font-medium">{item.employee?.name}</div>
<div className="text-xs text-gray-500">{item.employee?.department}</div>
<div className="flex flex-col gap-0.5">
<span className="text-xs font-medium">{item.employee?.name}</span>
{item.employee?.idCardNumber && <span className="text-gray-400 text-[11px] font-mono">{item.employee.idCardNumber}</span>}
<span className="text-xs text-gray-500">{item.employee?.department}</span>
</div>
</td>
<td className="py-2.5 px-3 text-xs">{LEAVE_TYPE_MAP[item.leaveType] || item.leaveType}</td>
<td className="py-2.5 px-3 text-xs text-gray-600">
+8 -5
View File
@@ -1194,11 +1194,14 @@ function BatchDetail({ batchId, onBack }: { batchId: string; onBack: () => void
{batch.entries.slice((page - 1) * pageSize, page * pageSize).map((entry: any) => (
<tr key={entry.id} className="border-b last:border-0 hover:bg-gray-25">
<td className="py-2 px-2">
<div className="text-xs font-medium">{entry.employee.name}</div>
<div className="text-xs text-gray-500">{entry.employee.department}</div>
{entry.employee.status === 'RESIGNED' && (
<span className="text-xs text-danger"></span>
)}
<div className="flex flex-col gap-0.5">
<div className="text-xs font-medium">{entry.employee.name}</div>
{entry.employee.idCardNumber && <span className="text-gray-400 text-[11px] font-mono">{entry.employee.idCardNumber}</span>}
<div className="text-xs text-gray-500">{entry.employee.department}</div>
{entry.employee.status === 'RESIGNED' && (
<span className="text-xs text-danger"></span>
)}
</div>
</td>
{renderCell(entry, 'baseSalary')}
{renderCell(entry, 'overtimePay')}
+6 -1
View File
@@ -425,7 +425,12 @@ export function OvertimeCalculator() {
<tbody>
{overtimeRecords.map((r: any) => (
<tr key={r.id} className="border-b last:border-0 hover:bg-gray-50">
<td className="py-2">{r.employee?.name}</td>
<td className="py-2">
<div className="flex flex-col gap-0.5">
<span>{r.employee?.name}</span>
{r.employee?.idCardNumber && <span className="text-gray-400 text-[11px] font-mono">{r.employee.idCardNumber}</span>}
</div>
</td>
<td className="py-2 text-gray-500">{r.employee?.department}</td>
{editingId === r.id ? (
<>
+6 -1
View File
@@ -194,7 +194,12 @@ export function PayslipManager({ filterEmployeeId }: { filterEmployeeId?: string
<tbody>
{payslips.slice((page - 1) * pageSize, page * pageSize).map((p: any) => (
<tr key={p.id} className="border-b last:border-0 hover:bg-gray-50">
<td className="py-2 px-2 text-sm font-medium">{p.employee?.name}</td>
<td className="py-2 px-2 text-sm font-medium">
<div className="flex flex-col gap-0.5">
<span>{p.employee?.name}</span>
{p.employee?.idCardNumber && <span className="text-gray-400 text-[11px] font-mono">{p.employee.idCardNumber}</span>}
</div>
</td>
<td className="py-2 px-2 text-gray-500">{p.employee?.department}</td>
<td className="py-2 px-2 text-right">¥{fmt(p.baseSalary)}</td>
<td className="py-2 px-2 text-right">¥{fmt(p.overtimePay)}</td>
@@ -121,7 +121,10 @@ export default function DisciplinaryRecords() {
) : records.map((r: any) => (
<tr key={r.id} className="border-b hover:bg-gray-50">
<td className="py-2 pr-4">
<Link to={`/roster?employeeId=${r.employeeId}`} className="text-primary hover:underline">{r.employee?.name}</Link>
<div className="flex flex-col gap-0.5">
<Link to={`/roster?employeeId=${r.employeeId}`} className="text-primary hover:underline">{r.employee?.name}</Link>
{r.employee?.idCardNumber && <span className="text-gray-400 text-[11px] font-mono">{r.employee.idCardNumber}</span>}
</div>
</td>
<td className="py-2 pr-4 text-gray-600">{r.employee?.department || '-'}</td>
<td className="py-2 pr-4">{fmtDate(r.violationDate)}</td>
@@ -124,7 +124,10 @@ export default function PerformanceRecords() {
) : records.map((r: any) => (
<tr key={r.id} className="border-b hover:bg-gray-50">
<td className="py-2 pr-4">
<Link to={`/roster?employeeId=${r.employeeId}`} className="text-primary hover:underline">{r.employee?.name}</Link>
<div className="flex flex-col gap-0.5">
<Link to={`/roster?employeeId=${r.employeeId}`} className="text-primary hover:underline">{r.employee?.name}</Link>
{r.employee?.idCardNumber && <span className="text-gray-400 text-[11px] font-mono">{r.employee.idCardNumber}</span>}
</div>
</td>
<td className="py-2 pr-4 text-gray-600">{r.employee?.department || '-'}</td>
<td className="py-2 pr-4">{r.period}</td>
@@ -156,7 +156,10 @@ export default function TrainingRecords() {
) : records.map((r: any) => (
<tr key={r.id} className="border-b hover:bg-gray-50">
<td className="py-2 pr-4">
<Link to={`/roster?employeeId=${r.employeeId}`} className="text-primary hover:underline">{r.employee?.name}</Link>
<div className="flex flex-col gap-0.5">
<Link to={`/roster?employeeId=${r.employeeId}`} className="text-primary hover:underline">{r.employee?.name}</Link>
{r.employee?.idCardNumber && <span className="text-gray-400 text-[11px] font-mono">{r.employee.idCardNumber}</span>}
</div>
</td>
<td className="py-2 pr-4 text-gray-600">{r.employee?.department || '-'}</td>
<td className="py-2 pr-4">{fmtDate(r.trainingDate)}</td>
@@ -172,7 +172,12 @@ export default function SpecialDeductionTab({ month, setMonth }: { month: string
<tr key={r.id} className="border-b last:border-0 hover:bg-gray-50">
{editing === r.employeeId ? (
<>
<td className="py-1.5">{r.employee?.name}</td>
<td className="py-1.5">
<div className="flex flex-col gap-0.5">
<span>{r.employee?.name}</span>
{r.employee?.idCardNumber && <span className="text-gray-400 text-[11px] font-mono">{r.employee.idCardNumber}</span>}
</div>
</td>
<td className="py-1.5 text-gray-500">{r.employee?.department}</td>
<td className="py-1"><Input type="number" className="!w-20 !h-8 text-right" value={editForm.children} onChange={(e) => setEditForm({ ...editForm, children: Number(e.target.value) })} /></td>
<td className="py-1"><Input type="number" className="!w-20 !h-8 text-right" value={editForm.elderly} onChange={(e) => setEditForm({ ...editForm, elderly: Number(e.target.value) })} /></td>
@@ -190,7 +195,12 @@ export default function SpecialDeductionTab({ month, setMonth }: { month: string
</>
) : (
<>
<td className="py-1.5">{r.employee?.name}</td>
<td className="py-1.5">
<div className="flex flex-col gap-0.5">
<span>{r.employee?.name}</span>
{r.employee?.idCardNumber && <span className="text-gray-400 text-[11px] font-mono">{r.employee.idCardNumber}</span>}
</div>
</td>
<td className="py-1.5 text-gray-500">{r.employee?.department}</td>
<td className="py-1.5 text-right">{r.children > 0 ? `¥${fmt(r.children)}` : '-'}</td>
<td className="py-1.5 text-right">{r.elderly > 0 ? `¥${fmt(r.elderly)}` : '-'}</td>