76 lines
2.2 KiB
JavaScript
76 lines
2.2 KiB
JavaScript
const Joi = require('joi');
|
|
|
|
/**
|
|
* Joi 输入校验中间件
|
|
*/
|
|
const validate = (schema) => {
|
|
return (req, res, next) => {
|
|
const { error } = schema.validate(req.body, { abortEarly: true });
|
|
if (error) {
|
|
return res.status(400).json({
|
|
success: false,
|
|
message: '输入校验失败: ' + error.details[0].message
|
|
});
|
|
}
|
|
next();
|
|
};
|
|
};
|
|
|
|
module.exports = { validate };
|
|
|
|
// ─── 常用校验 Schema ───────────────────────────────────────────
|
|
|
|
const schemas = {
|
|
// 骑手登录
|
|
login: Joi.object({
|
|
phone: Joi.string().pattern(/^1[3-9]\d{9}$/).required(),
|
|
password: Joi.string().min(6).max(20).required()
|
|
}),
|
|
|
|
// 车辆创建/更新
|
|
vehicle: Joi.object({
|
|
storeId: Joi.string().allow(''),
|
|
frameNumber: Joi.string().allow(''),
|
|
plateNumber: Joi.string().allow(''),
|
|
brand: Joi.string().allow(''),
|
|
vehicleType: Joi.string().allow(''),
|
|
color: Joi.string().allow(''),
|
|
batteryType: Joi.string().allow(''),
|
|
batteryCapacity: Joi.number().min(0).max(200),
|
|
batteryStatus: Joi.string().valid('正常', '老化', '待更换'),
|
|
status: Joi.string().valid('空闲', '在租', '维修中', '已报废', '待回收')
|
|
}),
|
|
|
|
// 订单
|
|
order: Joi.object({
|
|
customer: Joi.string().allow(''),
|
|
vehicle: Joi.string().allow(''),
|
|
contractMonths: Joi.number().min(0).allow(''),
|
|
startDate: Joi.date().allow(''),
|
|
endDate: Joi.date().allow(''),
|
|
rentalFee: Joi.number().min(0).allow(''),
|
|
deposit: Joi.number().min(0).allow(''),
|
|
orderType: Joi.string().allow('')
|
|
}),
|
|
|
|
// 客户
|
|
customer: Joi.object({
|
|
name: Joi.string().min(1).max(50).required(),
|
|
phone: Joi.string().pattern(/^1[3-9]\d{9}$/).required(),
|
|
idCard: Joi.string().allow(''),
|
|
address: Joi.string().allow(''),
|
|
email: Joi.string().email().allow('')
|
|
}),
|
|
|
|
// 门店
|
|
store: Joi.object({
|
|
name: Joi.string().min(1).max(100).required(),
|
|
address: Joi.string().allow(''),
|
|
phone: Joi.string().allow(''),
|
|
manager: Joi.string().allow(''),
|
|
status: Joi.string().valid('营业中', '休息中', '已关闭')
|
|
})
|
|
};
|
|
|
|
module.exports.schemas = schemas;
|