101 lines
3.6 KiB
JavaScript
101 lines
3.6 KiB
JavaScript
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;
|