/**
|
* 任务校验工具类
|
* 用于统一管理任务相关的前置校验逻辑
|
*/
|
|
import request from '@/utils/request'
|
|
/**
|
* 校验任务是否可以执行操作(出发、结算等)
|
* @param {Object} task - 任务对象
|
* @param {Object} options - 校验选项
|
* @param {Boolean} options.checkAssignees - 是否检查执行人员,默认true
|
* @param {Boolean} options.checkVehicles - 是否检查车辆,默认true
|
* @param {Boolean} options.checkPlannedTime - 是否检查预约时间,默认true
|
* @returns {Object} { valid: Boolean, message: String, field: String }
|
*/
|
export function validateTaskForAction(task, options = {}) {
|
const {
|
checkAssignees = true,
|
checkVehicles = true,
|
checkPlannedTime = true
|
} = options
|
|
// 1. 检查执行人员
|
if (checkAssignees) {
|
const assigneeResult = validateAssignees(task)
|
if (!assigneeResult.valid) {
|
return assigneeResult
|
}
|
}
|
|
// 2. 检查车辆
|
if (checkVehicles) {
|
const vehicleResult = validateVehicles(task)
|
if (!vehicleResult.valid) {
|
return vehicleResult
|
}
|
}
|
|
// 3. 检查预约时间
|
if (checkPlannedTime) {
|
const timeResult = validatePlannedTime(task)
|
if (!timeResult.valid) {
|
return timeResult
|
}
|
}
|
|
return { valid: true, message: '', field: '' }
|
}
|
|
/**
|
* 检查任务是否已分配执行人员
|
* @param {Object} task - 任务对象
|
* @returns {Object} { valid: Boolean, message: String, field: String }
|
*/
|
export function validateAssignees(task) {
|
if (!task.assignees || task.assignees.length === 0) {
|
return {
|
valid: false,
|
message: '任务未分配执行人员',
|
field: 'assignees'
|
}
|
}
|
return { valid: true, message: '', field: '' }
|
}
|
|
/**
|
* 检查任务是否已分配车辆
|
* @param {Object} task - 任务对象
|
* @returns {Object} { valid: Boolean, message: String, field: String }
|
*/
|
export function validateVehicles(task) {
|
// 支持两种字段名:vehicleList 和 assignedVehicles
|
const vehicles = task.vehicleList || task.assignedVehicles
|
|
if (!vehicles || vehicles.length === 0) {
|
return {
|
valid: false,
|
message: '任务未分配车辆',
|
field: 'vehicles'
|
}
|
}
|
return { valid: true, message: '', field: '' }
|
}
|
|
/**
|
* 检查任务预约时间是否有效
|
* @param {Object} task - 任务对象
|
* @returns {Object} { valid: Boolean, message: String, field: String }
|
*/
|
export function validatePlannedTime(task) {
|
if (!task.plannedStartTime) {
|
return {
|
valid: false,
|
message: '任务的转运时间未设置',
|
field: 'plannedStartTime'
|
}
|
}
|
|
// 检查是否为无效时间(1900年)
|
if (task.plannedStartTime.startsWith('1900')) {
|
return {
|
valid: false,
|
message: '任务的转运时间无效',
|
field: 'plannedStartTime'
|
}
|
}
|
|
return { valid: true, message: '', field: '' }
|
}
|
|
/**
|
* 获取任务的车辆ID
|
* @param {Object} task - 任务对象
|
* @returns {Number|null} 车辆ID,未找到返回null
|
*/
|
export function getTaskVehicleId(task) {
|
if (!task) {
|
return null
|
}
|
|
// 从车辆列表中获取第一个车辆的ID
|
const vehicles = task.assignedVehicles || task.vehicleList
|
if (vehicles && vehicles.length > 0) {
|
return vehicles[0].vehicleId
|
}
|
|
// 或者从单个车辆对象获取
|
if (task.vehicleId) {
|
return task.vehicleId
|
}
|
|
return null
|
}
|
|
/**
|
* 校验任务是否可以出发
|
* @param {Object} task - 任务对象
|
* @returns {Object} { valid: Boolean, message: String, field: String }
|
*/
|
export function validateTaskForDepart(task) {
|
return validateTaskForAction(task, {
|
checkAssignees: true,
|
checkVehicles: true,
|
checkPlannedTime: true
|
})
|
}
|
|
/**
|
* 校验任务是否可以结算
|
* @param {Object} task - 任务对象
|
* @returns {Object} { valid: Boolean, message: String, field: String }
|
*/
|
export function validateTaskForSettlement(task) {
|
return validateTaskForAction(task, {
|
checkAssignees: true,
|
checkVehicles: true,
|
checkPlannedTime: true
|
})
|
}
|
|
/**
|
* 检查任务是否可以出发(调用后端接口)
|
* 检查:
|
* 1. 基本校验:车辆、执行人员、预约时间
|
* 2. 车辆冲突检查:是否有未完成的任务
|
* 3. 人员冲突检查:执行人是否有未完成的任务
|
*
|
* @param {Object} task - 任务对象
|
* @returns {Promise<Object>} { valid: Boolean, message: String, conflicts: Array }
|
*/
|
export async function checkTaskCanDepart(task) {
|
// 1. 先进行基本校验
|
const basicValidation = validateTaskForDepart(task)
|
if (!basicValidation.valid) {
|
return {
|
...basicValidation,
|
conflicts: [] // 确保返回的对象包含conflicts字段
|
}
|
}
|
|
// 2. 调用后端接口检查车辆和人员冲突
|
try {
|
const response = await request({
|
url: `/task/${task.taskId}/check-depart`,
|
method: 'get'
|
})
|
|
console.log('后端返回的原始数据:', response)
|
|
if (response.code === 200 && response.data) {
|
const { valid, conflicts } = response.data
|
|
console.log('valid:', valid)
|
console.log('conflicts:', conflicts)
|
|
if (!valid && conflicts && conflicts.length > 0) {
|
// 有冲突,返回第一个冲突信息
|
return {
|
valid: false,
|
message: conflicts[0].message,
|
conflicts: conflicts
|
}
|
}
|
|
return { valid: true, message: '', conflicts: [] }
|
}
|
|
return { valid: false, message: '检查失败,请重试', conflicts: [] }
|
} catch (error) {
|
console.error('检查任务是否可以出发失败:', error)
|
// 接口失败时,只进行基本校验,允许出发
|
return { valid: true, message: '', conflicts: [] }
|
}
|
}
|
|
export default {
|
validateTaskForAction,
|
validateAssignees,
|
validateVehicles,
|
validatePlannedTime,
|
getTaskVehicleId,
|
validateTaskForDepart,
|
validateTaskForSettlement,
|
checkTaskCanDepart
|
}
|