From ebd47e45001b4bf73c1be2c83977da1f6efeed44 Mon Sep 17 00:00:00 2001 From: selfrelease Date: Sun, 16 Aug 2026 11:34:58 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20Excel=20=E6=89=B9=E9=87=8F=E5=AF=BC?= =?UTF-8?q?=E5=85=A5=E5=91=98=E5=B7=A5=E6=97=B6=E8=87=AA=E5=8A=A8=E8=AE=BE?= =?UTF-8?q?=E7=BD=AE=E9=BB=98=E8=AE=A4=E5=AF=86=E7=A0=81=EF=BC=88=E6=89=8B?= =?UTF-8?q?=E6=9C=BA=E5=8F=B7=E5=90=8E6=E4=BD=8D=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 与 createEmployee 保持一致,导入时自动生成 passwordHash, 无需管理员再手动重置。 Generated with [Devin](https://devin.ai) Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com> --- backend/src/routes/import.routes.ts | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/backend/src/routes/import.routes.ts b/backend/src/routes/import.routes.ts index 6da98a2..5580217 100644 --- a/backend/src/routes/import.routes.ts +++ b/backend/src/routes/import.routes.ts @@ -1,6 +1,7 @@ import { Router, Response, NextFunction } from 'express' import multer from 'multer' import * as XLSX from 'xlsx' +import bcrypt from 'bcryptjs' import { authMiddleware, AuthRequest } from '../middleware/auth' import { requireAdmin } from '../middleware/rbac' import { encrypt, decrypt, sha256 } from '../lib/crypto' @@ -305,6 +306,11 @@ router.post('/excel', authMiddleware, requireAdmin, upload.single('file'), async const housingFundOptOut = val(getField(r, '公积金基数')) === '无' || val(getField(r, '公积金基数')) === '不缴' const housingFundBase = housingFundOptOut ? 0 : (housingFundBaseVal || num(salary)) + // 默认密码:手机号后6位(无手机号则 123456) + const importPhoneVal = val(getField(r, '手机号')) || null + const defaultPwd = importPhoneVal ? importPhoneVal.slice(-6) : '123456' + const importPasswordHash = await bcrypt.hash(defaultPwd, 10) + const emp = await prisma.employee.create({ data: { orgId, name, department: dept, hireDate, @@ -312,7 +318,8 @@ router.post('/excel', authMiddleware, requireAdmin, upload.single('file'), async gender: val(getField(r, '性别')) || (idCard ? extractGenderFromIdCard(idCard) : null), femaleWorkerType: (val(getField(r, '女性岗位类型')) === '工人' || val(getField(r, '女性岗位类型')) === 'WORKER') ? 'WORKER' : (val(getField(r, '女性岗位类型')) === '干部' || val(getField(r, '女性岗位类型')) === 'CADRE') ? 'CADRE' : null, - phone: val(getField(r, '手机号')) || null, + phone: importPhoneVal, + passwordHash: importPasswordHash, idCardNumber: idCard ? encrypt(idCard) : null, idCardHash: idCard ? sha256(idCard) : null, birthDate: idCard ? extractBirthDateFromIdCard(idCard) : null,