118 lines
3.3 KiB
JavaScript
118 lines
3.3 KiB
JavaScript
const express = require('express');
|
|
const router = express.Router();
|
|
const Vehicle = require('../models/Vehicle');
|
|
|
|
// 获取所有车辆(支持按 storeId 过滤)
|
|
router.get('/', async (req, res) => {
|
|
try {
|
|
const filter = {};
|
|
if (req.query.storeId) {
|
|
filter.storeId = req.query.storeId;
|
|
}
|
|
const vehicles = await Vehicle.find(filter).populate('currentOrderId');
|
|
res.json({ success: true, data: vehicles });
|
|
} catch (error) {
|
|
res.status(500).json({ success: false, message: error.message });
|
|
}
|
|
});
|
|
|
|
// 获取单个车辆
|
|
router.get('/:id', async (req, res) => {
|
|
try {
|
|
const vehicle = await Vehicle.findById(req.params.id).populate('currentOrderId');
|
|
if (!vehicle) {
|
|
return res.status(404).json({ success: false, message: '车辆不存在' });
|
|
}
|
|
res.json({ success: true, data: vehicle });
|
|
} catch (error) {
|
|
res.status(500).json({ success: false, message: error.message });
|
|
}
|
|
});
|
|
|
|
// 创建车辆
|
|
router.post('/', async (req, res) => {
|
|
try {
|
|
const data = { ...req.body };
|
|
// status 为"在租"时自动设置 isRented
|
|
if (data.status === '在租') {
|
|
data.isRented = true;
|
|
}
|
|
const vehicle = new Vehicle(data);
|
|
await vehicle.save();
|
|
res.status(201).json({ success: true, data: vehicle });
|
|
} catch (error) {
|
|
res.status(400).json({ success: false, message: error.message });
|
|
}
|
|
});
|
|
|
|
// 更新车辆
|
|
router.put('/:id', async (req, res) => {
|
|
try {
|
|
const data = { ...req.body };
|
|
// status 变化时同步 isRented
|
|
if (data.status !== undefined) {
|
|
data.isRented = data.status === '在租';
|
|
}
|
|
const vehicle = await Vehicle.findByIdAndUpdate(
|
|
req.params.id,
|
|
data,
|
|
{ new: true, runValidators: true }
|
|
);
|
|
if (!vehicle) {
|
|
return res.status(404).json({ success: false, message: '车辆不存在' });
|
|
}
|
|
res.json({ success: true, data: vehicle });
|
|
} catch (error) {
|
|
res.status(400).json({ success: false, message: error.message });
|
|
}
|
|
});
|
|
|
|
// 删除车辆
|
|
router.delete('/:id', async (req, res) => {
|
|
try {
|
|
const vehicle = await Vehicle.findByIdAndDelete(req.params.id);
|
|
if (!vehicle) {
|
|
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('/status/:status', async (req, res) => {
|
|
try {
|
|
const vehicles = await Vehicle.find({ status: req.params.status });
|
|
res.json({ success: true, data: vehicles });
|
|
} catch (error) {
|
|
res.status(500).json({ success: false, message: error.message });
|
|
}
|
|
});
|
|
|
|
// 更新车辆位置
|
|
router.patch('/:id/location', async (req, res) => {
|
|
try {
|
|
const { longitude, latitude } = req.body;
|
|
const vehicle = await Vehicle.findByIdAndUpdate(
|
|
req.params.id,
|
|
{
|
|
location: {
|
|
type: 'Point',
|
|
coordinates: [longitude, latitude]
|
|
},
|
|
lastLocationUpdate: new Date()
|
|
},
|
|
{ new: true }
|
|
);
|
|
if (!vehicle) {
|
|
return res.status(404).json({ success: false, message: '车辆不存在' });
|
|
}
|
|
res.json({ success: true, data: vehicle });
|
|
} catch (error) {
|
|
res.status(400).json({ success: false, message: error.message });
|
|
}
|
|
});
|
|
|
|
module.exports = router;
|