116 lines
3.3 KiB
JavaScript
116 lines
3.3 KiB
JavaScript
const express = require('express');
|
|
const { body } = require('express-validator');
|
|
const { authMiddleware } = require('../middleware/auth');
|
|
const {
|
|
getEmployees,
|
|
getEmployeeById,
|
|
createEmployee,
|
|
updateEmployee,
|
|
resetPassword,
|
|
deleteEmployee,
|
|
batchUpdateStatus,
|
|
getEmployeeStats
|
|
} = require('../controllers/employeeController');
|
|
|
|
const router = express.Router();
|
|
|
|
// 验证规则
|
|
const createEmployeeValidation = [
|
|
body('employeeNumber')
|
|
.notEmpty()
|
|
.withMessage('员工编号不能为空')
|
|
.isLength({ min: 3, max: 20 })
|
|
.withMessage('员工编号长度在3-20个字符'),
|
|
body('name')
|
|
.notEmpty()
|
|
.withMessage('员工姓名不能为空')
|
|
.isLength({ min: 2, max: 50 })
|
|
.withMessage('员工姓名长度在2-50个字符'),
|
|
body('phone')
|
|
.notEmpty()
|
|
.withMessage('联系电话不能为空')
|
|
.matches(/^1[3-9]\d{9}$/)
|
|
.withMessage('请输入正确的手机号码'),
|
|
body('email')
|
|
.optional()
|
|
.isEmail()
|
|
.withMessage('请输入正确的邮箱地址'),
|
|
body('password')
|
|
.optional()
|
|
.isLength({ min: 6, max: 20 })
|
|
.withMessage('密码长度在6-20个字符'),
|
|
body('isLoanSpecialist')
|
|
.optional()
|
|
.isBoolean()
|
|
.withMessage('贷款专员标识必须是布尔值'),
|
|
body('department')
|
|
.optional()
|
|
.isLength({ max: 50 })
|
|
.withMessage('部门名称不能超过50个字符'),
|
|
body('position')
|
|
.optional()
|
|
.isLength({ max: 50 })
|
|
.withMessage('职位名称不能超过50个字符')
|
|
];
|
|
|
|
const updateEmployeeValidation = [
|
|
body('name')
|
|
.optional()
|
|
.isLength({ min: 2, max: 50 })
|
|
.withMessage('员工姓名长度在2-50个字符'),
|
|
body('phone')
|
|
.optional()
|
|
.matches(/^1[3-9]\d{9}$/)
|
|
.withMessage('请输入正确的手机号码'),
|
|
body('email')
|
|
.optional()
|
|
.isEmail()
|
|
.withMessage('请输入正确的邮箱地址'),
|
|
body('isLoanSpecialist')
|
|
.optional()
|
|
.isBoolean()
|
|
.withMessage('贷款专员标识必须是布尔值'),
|
|
body('department')
|
|
.optional()
|
|
.isLength({ max: 50 })
|
|
.withMessage('部门名称不能超过50个字符'),
|
|
body('position')
|
|
.optional()
|
|
.isLength({ max: 50 })
|
|
.withMessage('职位名称不能超过50个字符'),
|
|
body('status')
|
|
.optional()
|
|
.isIn(['active', 'inactive', 'locked'])
|
|
.withMessage('状态值无效')
|
|
];
|
|
|
|
const resetPasswordValidation = [
|
|
body('newPassword')
|
|
.optional()
|
|
.isLength({ min: 6, max: 20 })
|
|
.withMessage('密码长度在6-20个字符')
|
|
];
|
|
|
|
const batchUpdateStatusValidation = [
|
|
body('ids')
|
|
.isArray({ min: 1 })
|
|
.withMessage('请选择要更新的员工'),
|
|
body('status')
|
|
.isIn(['active', 'inactive', 'locked'])
|
|
.withMessage('状态值无效')
|
|
];
|
|
|
|
// 应用认证中间件
|
|
router.use(authMiddleware);
|
|
|
|
// 路由定义
|
|
router.get('/', getEmployees); // 获取员工列表
|
|
router.get('/stats', getEmployeeStats); // 获取员工统计
|
|
router.get('/:id', getEmployeeById); // 获取员工详情
|
|
router.post('/', createEmployeeValidation, createEmployee); // 创建员工
|
|
router.put('/:id', updateEmployeeValidation, updateEmployee); // 更新员工信息
|
|
router.put('/:id/reset-password', resetPasswordValidation, resetPassword); // 重设密码
|
|
router.delete('/:id', deleteEmployee); // 删除员工
|
|
router.put('/batch/status', batchUpdateStatusValidation, batchUpdateStatus); // 批量更新状态
|
|
|
|
module.exports = router; |