/** * 任务校验工具类 * 用于统一管理任务相关的前置校验逻辑 */ 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} { 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 }