fix: AI风险预测员工下拉框显示完整身份证号区分同名员工

- 后端 /employees/list 接口返回解密后的完整身份证号
- 前端 AI风险预测通用模式和结构化模式员工下拉框显示 姓名(身份证号)
This commit is contained in:
freedakgmail
2026-08-17 18:47:37 +08:00
parent f2a8f9a97c
commit cdbfeb4f99
3 changed files with 18 additions and 4 deletions
+15 -2
View File
@@ -82,10 +82,23 @@ router.get('/list', authMiddleware, async (req: AuthRequest, res, next) => {
status: { in: status }, status: { in: status },
...(department && { department }), ...(department && { department }),
}, },
select: { id: true, name: true, department: true, position: true, phone: true, gender: true, status: true }, select: { id: true, name: true, department: true, position: true, phone: true, gender: true, status: true, idCardNumber: true },
orderBy: { name: 'asc' }, orderBy: { name: 'asc' },
}) })
res.json({ success: true, data: employees }) // 解密身份证号,返回完整明文用于前端下拉框区分同名员工
const employeesWithIdCard = employees.map((e: any) => {
let idCardNo = ''
if (e.idCardNumber) {
try {
const plain = decrypt(e.idCardNumber)
if (plain) idCardNo = plain
} catch {}
}
delete e.idCardNumber
e.idCardNo = idCardNo
return e
})
res.json({ success: true, data: employeesWithIdCard })
} catch (err) { } catch (err) {
next(err) next(err)
} }
+1
View File
@@ -48,6 +48,7 @@ export interface EmployeeOption {
phone?: string phone?: string
gender?: string gender?: string
status?: string status?: string
idCardNo?: string
} }
export const employeeApi = { export const employeeApi = {
@@ -557,7 +557,7 @@ export function PredictTab() {
<Label className="whitespace-nowrap"></Label> <Label className="whitespace-nowrap"></Label>
<Select value={employeeId} onChange={(e) => setEmployeeId(e.target.value)}> <Select value={employeeId} onChange={(e) => setEmployeeId(e.target.value)}>
<option value=""></option> <option value=""></option>
{(employees || []).map((e: any) => <option key={e.id} value={e.id}>{e.name}</option>)} {(employees || []).map((e: any) => <option key={e.id} value={e.id}>{e.name}{e.idCardNo || e.department}</option>)}
</Select> </Select>
</div> </div>
)} )}
@@ -621,7 +621,7 @@ export function PredictTab() {
<Label></Label> <Label></Label>
<Select value={structEmployeeName} onChange={(e) => handleStructEmployeeChange(e.target.value)}> <Select value={structEmployeeName} onChange={(e) => handleStructEmployeeChange(e.target.value)}>
<option value=""></option> <option value=""></option>
{(employees || []).map((e: any) => <option key={e.id} value={e.name}>{e.name}{e.department}</option>)} {(employees || []).map((e: any) => <option key={e.id} value={e.name}>{e.name}{e.idCardNo || e.department}</option>)}
</Select> </Select>
{employeeSpecialStatus && ( {employeeSpecialStatus && (
<div className="mt-1 flex items-center gap-1 text-xs text-amber-700 bg-amber-50 border border-amber-200 px-2 py-1 rounded"> <div className="mt-1 flex items-center gap-1 text-xs text-amber-700 bg-amber-50 border border-amber-200 px-2 py-1 rounded">