85 lines
2.4 KiB
JavaScript
85 lines
2.4 KiB
JavaScript
const express = require('express');
|
||
const router = express.Router();
|
||
const Rider = require('../models/Rider');
|
||
const Order = require('../models/Order');
|
||
|
||
// 骑手登录
|
||
router.post('/login', async (req, res) => {
|
||
try {
|
||
const { phone, password } = req.body;
|
||
if (!phone || !password) {
|
||
return res.status(400).json({ success: false, message: '手机号和密码不能为空' });
|
||
}
|
||
|
||
const rider = await Rider.findOne({ phone, password });
|
||
if (!rider) {
|
||
return res.status(401).json({ success: false, message: '手机号或密码错误' });
|
||
}
|
||
|
||
// 简单生成一个token(实际生产应使用 JWT)
|
||
const token = Buffer.from(`${rider._id}:${Date.now()}`).toString('base64');
|
||
|
||
res.json({
|
||
success: true,
|
||
data: {
|
||
id: rider._id,
|
||
riderId: rider.riderId,
|
||
name: rider.name,
|
||
phone: rider.phone,
|
||
status: rider.status,
|
||
rating: rider.rating,
|
||
totalOrders: rider.totalOrders,
|
||
totalIncome: rider.totalIncome,
|
||
token
|
||
}
|
||
});
|
||
} catch (error) {
|
||
res.status(500).json({ success: false, message: error.message });
|
||
}
|
||
});
|
||
|
||
// 获取骑手信息
|
||
router.get('/:id', async (req, res) => {
|
||
try {
|
||
const rider = await Rider.findById(req.params.id);
|
||
if (!rider) {
|
||
return res.status(404).json({ success: false, message: '骑手不存在' });
|
||
}
|
||
res.json({ success: true, data: rider });
|
||
} catch (error) {
|
||
res.status(500).json({ success: false, message: error.message });
|
||
}
|
||
});
|
||
|
||
// 更新骑手信息(如状态切换)
|
||
router.put('/:id', async (req, res) => {
|
||
try {
|
||
const rider = await Rider.findByIdAndUpdate(
|
||
req.params.id,
|
||
req.body,
|
||
{ new: true, runValidators: true }
|
||
);
|
||
if (!rider) {
|
||
return res.status(404).json({ success: false, message: '骑手不存在' });
|
||
}
|
||
res.json({ success: true, data: rider });
|
||
} catch (error) {
|
||
res.status(400).json({ success: false, message: error.message });
|
||
}
|
||
});
|
||
|
||
// 获取骑手的订单
|
||
router.get('/:id/orders', async (req, res) => {
|
||
try {
|
||
const orders = await Order.find({ rider: req.params.id })
|
||
.populate('customer', 'name phone')
|
||
.populate('vehicle', 'vehicleId model color')
|
||
.sort({ createdAt: -1 });
|
||
res.json({ success: true, data: orders });
|
||
} catch (error) {
|
||
res.status(500).json({ success: false, message: error.message });
|
||
}
|
||
});
|
||
|
||
module.exports = router;
|