const express = require('express'); const router = express.Router(); const Customer = require('../models/Customer'); const { authMiddleware, requireRole } = require('../middleware/auth'); const { validate } = require('../middleware/validate'); const { schemas } = require('../middleware/validate'); // 获取所有客户(admin 或 store 可查) router.get('/', authMiddleware, requireRole('admin', 'store'), async (req, res) => { try { const customers = await Customer.find(); res.json({ success: true, data: customers }); } catch (error) { res.status(500).json({ success: false, message: error.message }); } }); // 获取单个客户 router.get('/:id', authMiddleware, requireRole('admin', 'store'), async (req, res) => { try { const customer = await Customer.findById(req.params.id); if (!customer) return res.status(404).json({ success: false, message: '客户不存在' }); res.json({ success: true, data: customer }); } catch (error) { res.status(500).json({ success: false, message: error.message }); } }); // 创建客户(admin 或 store) router.post('/', authMiddleware, requireRole('admin', 'store'), validate(schemas.customer), async (req, res) => { try { const customer = new Customer(req.body); await customer.save(); res.status(201).json({ success: true, data: customer }); } catch (error) { res.status(400).json({ success: false, message: error.message }); } }); // 更新客户 router.put('/:id', authMiddleware, requireRole('admin', 'store'), async (req, res) => { try { const customer = await Customer.findByIdAndUpdate(req.params.id, req.body, { new: true, runValidators: true }); if (!customer) return res.status(404).json({ success: false, message: '客户不存在' }); res.json({ success: true, data: customer }); } catch (error) { res.status(400).json({ success: false, message: error.message }); } }); // 删除客户(仅 admin) router.delete('/:id', authMiddleware, requireRole('admin'), async (req, res) => { try { const customer = await Customer.findByIdAndDelete(req.params.id); if (!customer) return res.status(404).json({ success: false, message: '客户不存在' }); res.json({ success: true, message: '客户已删除' }); } catch (error) { res.status(500).json({ success: false, message: error.message }); } }); // 搜索客户 router.get('/search/:keyword', authMiddleware, requireRole('admin', 'store'), async (req, res) => { try { const keyword = req.params.keyword; const customers = await Customer.find({ $or: [ { name: { $regex: keyword, $options: 'i' } }, { phone: { $regex: keyword, $options: 'i' } }, { customerId: { $regex: keyword, $options: 'i' } } ] }); res.json({ success: true, data: customers }); } catch (error) { res.status(500).json({ success: false, message: error.message }); } }); // 更新客户信用评分(admin 或 store) router.patch('/:id/credit', authMiddleware, requireRole('admin', 'store'), async (req, res) => { try { const { creditScore } = req.body; let creditLevel = '优秀'; if (creditScore < 60) creditLevel = '较差'; else if (creditScore < 80) creditLevel = '一般'; else if (creditScore < 90) creditLevel = '良好'; const customer = await Customer.findByIdAndUpdate( req.params.id, { creditScore, creditLevel }, { new: true } ); if (!customer) return res.status(404).json({ success: false, message: '客户不存在' }); res.json({ success: true, data: customer }); } catch (error) { res.status(400).json({ success: false, message: error.message }); } }); module.exports = router;