From 5d75fcaea0a3774052b7484a4ffe755258502363 Mon Sep 17 00:00:00 2001
From: wlzboy <66905212@qq.com>
Date: 星期六, 06 十二月 2025 20:49:11 +0800
Subject: [PATCH] fix:开始执行人员就绪按钮
---
app/utils/taskValidator.js | 226 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 226 insertions(+), 0 deletions(-)
diff --git a/app/utils/taskValidator.js b/app/utils/taskValidator.js
new file mode 100644
index 0000000..c52bc0c
--- /dev/null
+++ b/app/utils/taskValidator.js
@@ -0,0 +1,226 @@
+/**
+ * 浠诲姟鏍¢獙宸ュ叿绫�
+ * 鐢ㄤ簬缁熶竴绠$悊浠诲姟鐩稿叧鐨勫墠缃牎楠岄�昏緫
+ */
+
+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: '' }
+}
+
+/**
+ * 鑾峰彇浠诲姟鐨勮溅杈咺D
+ * @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: [] // 纭繚杩斿洖鐨勫璞″寘鍚玞onflicts瀛楁
+ }
+ }
+
+ // 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
+}
--
Gitblit v1.9.1