const { Employee, User } = require('../models'); const { validationResult } = require('express-validator'); const bcrypt = require('bcryptjs'); /** * 获取员工列表 */ const getEmployees = async (req, res) => { try { const { page = 1, pageSize = 10, searchField = 'name', searchValue = '', status = '', isLoanSpecialist = '' } = req.query; // 构建查询条件 const where = {}; if (searchValue) { if (searchField === 'name') { where.name = { [require('sequelize').Op.like]: `%${searchValue}%` }; } else if (searchField === 'phone') { where.phone = { [require('sequelize').Op.like]: `%${searchValue}%` }; } else if (searchField === 'employeeNumber') { where.employeeNumber = { [require('sequelize').Op.like]: `%${searchValue}%` }; } } if (status) { where.status = status; } if (isLoanSpecialist !== '') { where.isLoanSpecialist = isLoanSpecialist === 'true'; } // 分页参数 const offset = (parseInt(page) - 1) * parseInt(pageSize); const limit = parseInt(pageSize); // 查询数据 const { count, rows } = await Employee.findAndCountAll({ where, limit, offset, order: [['created_at', 'DESC']], attributes: { exclude: ['password'] // 不返回密码 } }); // 格式化数据 const employees = rows.map(employee => ({ id: employee.id, employeeNumber: employee.employeeNumber, name: employee.name, phone: employee.phone, email: employee.email, isLoanSpecialist: employee.isLoanSpecialist, department: employee.department, position: employee.position, status: employee.status, lastLogin: employee.lastLogin, createdAt: employee.createdAt, updatedAt: employee.updatedAt })); res.json({ success: true, message: '获取员工列表成功', data: { employees, pagination: { current: parseInt(page), pageSize: parseInt(pageSize), total: count, pages: Math.ceil(count / parseInt(pageSize)) } } }); } catch (error) { console.error('获取员工列表失败:', error); res.status(500).json({ success: false, message: '获取员工列表失败' }); } }; /** * 获取员工详情 */ const getEmployeeById = async (req, res) => { try { const { id } = req.params; const employee = await Employee.findByPk(id, { attributes: { exclude: ['password'] // 不返回密码 } }); if (!employee) { return res.status(404).json({ success: false, message: '员工不存在' }); } res.json({ success: true, message: '获取员工详情成功', data: employee }); } catch (error) { console.error('获取员工详情失败:', error); res.status(500).json({ success: false, message: '获取员工详情失败' }); } }; /** * 创建员工 */ const createEmployee = async (req, res) => { try { const errors = validationResult(req); if (!errors.isEmpty()) { return res.status(400).json({ success: false, message: '请求参数错误', errors: errors.array() }); } const { employeeNumber, name, phone, email, password, isLoanSpecialist, department, position } = req.body; // 检查员工编号是否已存在 const existingEmployee = await Employee.findOne({ where: { employeeNumber } }); if (existingEmployee) { return res.status(400).json({ success: false, message: '员工编号已存在' }); } // 检查手机号是否已存在 const existingPhone = await Employee.findOne({ where: { phone } }); if (existingPhone) { return res.status(400).json({ success: false, message: '手机号已存在' }); } // 创建员工 const employee = await Employee.create({ employeeNumber, name, phone, email, password: password || '123456', // 默认密码 isLoanSpecialist: isLoanSpecialist || false, department, position, status: 'active' }); res.status(201).json({ success: true, message: '创建员工成功', data: { id: employee.id, employeeNumber: employee.employeeNumber, name: employee.name, phone: employee.phone, email: employee.email, isLoanSpecialist: employee.isLoanSpecialist, department: employee.department, position: employee.position, status: employee.status, createdAt: employee.createdAt } }); } catch (error) { console.error('创建员工失败:', error); res.status(500).json({ success: false, message: '创建员工失败' }); } }; /** * 更新员工信息 */ const updateEmployee = async (req, res) => { try { const errors = validationResult(req); if (!errors.isEmpty()) { return res.status(400).json({ success: false, message: '请求参数错误', errors: errors.array() }); } const { id } = req.params; const { name, phone, email, isLoanSpecialist, department, position, status } = req.body; const employee = await Employee.findByPk(id); if (!employee) { return res.status(404).json({ success: false, message: '员工不存在' }); } // 检查手机号是否被其他员工使用 if (phone && phone !== employee.phone) { const existingPhone = await Employee.findOne({ where: { phone, id: { [require('sequelize').Op.ne]: id } } }); if (existingPhone) { return res.status(400).json({ success: false, message: '手机号已被其他员工使用' }); } } // 更新员工信息 await employee.update({ name, phone, email, isLoanSpecialist, department, position, status }); res.json({ success: true, message: '更新员工信息成功', data: { id: employee.id, employeeNumber: employee.employeeNumber, name: employee.name, phone: employee.phone, email: employee.email, isLoanSpecialist: employee.isLoanSpecialist, department: employee.department, position: employee.position, status: employee.status, updatedAt: employee.updatedAt } }); } catch (error) { console.error('更新员工信息失败:', error); res.status(500).json({ success: false, message: '更新员工信息失败' }); } }; /** * 重设密码 */ const resetPassword = async (req, res) => { try { const { id } = req.params; const { newPassword } = req.body; const employee = await Employee.findByPk(id); if (!employee) { return res.status(404).json({ success: false, message: '员工不存在' }); } // 更新密码 await employee.update({ password: newPassword || '123456' // 默认密码 }); res.json({ success: true, message: '重设密码成功' }); } catch (error) { console.error('重设密码失败:', error); res.status(500).json({ success: false, message: '重设密码失败' }); } }; /** * 删除员工 */ const deleteEmployee = async (req, res) => { try { const { id } = req.params; const employee = await Employee.findByPk(id); if (!employee) { return res.status(404).json({ success: false, message: '员工不存在' }); } // 软删除 await employee.destroy(); res.json({ success: true, message: '删除员工成功' }); } catch (error) { console.error('删除员工失败:', error); res.status(500).json({ success: false, message: '删除员工失败' }); } }; /** * 批量更新员工状态 */ const batchUpdateStatus = async (req, res) => { try { const { ids, status } = req.body; if (!ids || !Array.isArray(ids) || ids.length === 0) { return res.status(400).json({ success: false, message: '请选择要更新的员工' }); } if (!status) { return res.status(400).json({ success: false, message: '请选择要更新的状态' }); } await Employee.update( { status }, { where: { id: { [require('sequelize').Op.in]: ids } } } ); res.json({ success: true, message: '批量更新状态成功' }); } catch (error) { console.error('批量更新状态失败:', error); res.status(500).json({ success: false, message: '批量更新状态失败' }); } }; /** * 获取员工统计信息 */ const getEmployeeStats = async (req, res) => { try { const totalEmployees = await Employee.count(); const activeEmployees = await Employee.count({ where: { status: 'active' } }); const inactiveEmployees = await Employee.count({ where: { status: 'inactive' } }); const lockedEmployees = await Employee.count({ where: { status: 'locked' } }); const loanSpecialists = await Employee.count({ where: { isLoanSpecialist: true } }); res.json({ success: true, message: '获取员工统计成功', data: { totalEmployees, activeEmployees, inactiveEmployees, lockedEmployees, loanSpecialists } }); } catch (error) { console.error('获取员工统计失败:', error); res.status(500).json({ success: false, message: '获取员工统计失败' }); } }; module.exports = { getEmployees, getEmployeeById, createEmployee, updateEmployee, resetPassword, deleteEmployee, batchUpdateStatus, getEmployeeStats };