| | |
| | | <view |
| | | class="task-status" |
| | | :class=" |
| | | task.taskStatus === 'PENDING' |
| | | task.taskStatus === TaskStatus.PENDING |
| | | ? 'status-pending' |
| | | : task.taskStatus === 'DEPARTING' |
| | | : task.taskStatus === TaskStatus.NOT_CONFIRMED |
| | | ? 'status-not-confirmed' |
| | | : task.taskStatus === TaskStatus.NOT_DEPARTED |
| | | ? 'status-not-departed' |
| | | : task.taskStatus === TaskStatus.PARTIALLY_CONFIRMED |
| | | ? 'status-partially-confirmed' |
| | | : task.taskStatus === TaskStatus.DEPARTING |
| | | ? 'status-departing' |
| | | : task.taskStatus === 'ARRIVED' |
| | | : task.taskStatus === TaskStatus.ARRIVED |
| | | ? 'status-arrived' |
| | | : task.taskStatus === 'RETURNING' |
| | | : task.taskStatus === TaskStatus.RETURNING |
| | | ? 'status-returning' |
| | | : task.taskStatus === 'COMPLETED' |
| | | : task.taskStatus === TaskStatus.COMPLETED |
| | | ? 'status-completed' |
| | | : task.taskStatus === 'CANCELLED' |
| | | : task.taskStatus === TaskStatus.CANCELLED |
| | | ? 'status-cancelled' |
| | | : task.taskStatus === 'IN_PROGRESS' |
| | | : task.taskStatus === TaskStatus.IN_PROGRESS |
| | | ? 'status-in-progress' |
| | | : 'status-default' |
| | | : 'status-pending' |
| | | " |
| | | > |
| | | {{ getStatusText(task.status) }} |
| | | {{ getStatusText(task.taskStatus) }} |
| | | </view> |
| | | </view> |
| | | |
| | |
| | | |
| | | <!-- 操作按钮 --> |
| | | <view class="task-actions"> |
| | | <!-- 待处理状态: 显示出发、取消 --> |
| | | <template v-if="task.taskStatus === 'PENDING'"> |
| | | <!-- 待处理状态:显示出发、取消 --> |
| | | <template v-if="task.taskStatus === TaskStatus.PENDING || task.taskStatus === TaskStatus.NOT_DEPARTED || task.taskStatus === TaskStatus.NOT_CONFIRMED || task.taskStatus === TaskStatus.PARTIALLY_CONFIRMED"> |
| | | <button |
| | | class="action-btn primary" |
| | | @click="handleTaskAction(task, 'depart')" |
| | |
| | | </button> |
| | | </template> |
| | | |
| | | <!-- 出发中状态: 显示已到达、强制结束 --> |
| | | <template v-else-if="task.taskStatus === 'DEPARTING'"> |
| | | <!-- 出发中状态:显示已到达、强制结束 --> |
| | | <template v-else-if="task.taskStatus === TaskStatus.DEPARTING"> |
| | | <button |
| | | class="action-btn primary" |
| | | @click="handleTaskAction(task, 'arrive')" |
| | |
| | | </button> |
| | | </template> |
| | | |
| | | <!-- 已到达状态: 显示已返程 --> |
| | | <template v-else-if="task.taskStatus === 'ARRIVED'"> |
| | | <!-- 已到达状态:显示已返程 --> |
| | | <template v-else-if="task.taskStatus === TaskStatus.ARRIVED"> |
| | | <button |
| | | class="action-btn primary" |
| | | @click="handleTaskAction(task, 'return')" |
| | |
| | | </button> |
| | | </template> |
| | | |
| | | <!-- 返程中状态: 显示已完成 --> |
| | | <template v-else-if="task.taskStatus === 'RETURNING'"> |
| | | <!-- 返程中状态:显示已完成 --> |
| | | <template v-else-if="task.taskStatus === TaskStatus.RETURNING"> |
| | | <button |
| | | class="action-btn primary" |
| | | @click="handleTaskAction(task, 'complete')" |
| | |
| | | import { formatDateTime } from "@/utils/common"; |
| | | import subscribeManager from "@/utils/subscribe"; |
| | | import { checkTaskCanDepart } from "@/utils/taskValidator"; |
| | | import { getStatusText as getTaskStatusText, TaskStatus } from "@/utils/TaskUtil"; |
| | | |
| | | // 任务类型映射(临时定义,避免导入问题) |
| | | const TASK_TYPE_MAP = { |
| | | MAINTENANCE: "维修保养", |
| | | FUEL: "加油", |
| | | OTHER: "其他", |
| | | EMERGENCY_TRANSFER: "转运任务", |
| | | WELFARE: "福祉车", |
| | | maintenance: "维修保养", |
| | | refuel: "加油", |
| | | inspection: "巡检", |
| | | emergency: "转运任务", |
| | | welfare: "福祉车" |
| | | }; |
| | | |
| | | // 任务状态映射(临时定义,避免导入问题) |
| | | const TASK_STATUS_MAP = { |
| | | PENDING: "待处理", |
| | | NOT_CONFIRMED: "完全未确认", |
| | | NOT_DEPARTED: "待出发", |
| | | PARTIALLY_CONFIRMED: "部分确认", |
| | | DEPARTING: "出发中", |
| | | ARRIVED: "已到达", |
| | | RETURNING: "返程中", |
| | | COMPLETED: "已完成", |
| | | CANCELLED: "已取消", |
| | | IN_PROGRESS: "任务中" |
| | | }; |
| | | |
| | | export default { |
| | | data() { |
| | | return { |
| | | TaskStatus, // 暴露 TaskStatus 给模板使用 |
| | | // 用户绑定的车辆信息 |
| | | boundVehicle: "", |
| | | boundVehicleId: null, |
| | |
| | | runningTasks() { |
| | | return this.displayedTaskList.filter((task) => { |
| | | // 包含待处理、出发中、已到达、返程中等所有未完成的状态 |
| | | return [ |
| | | "PENDING", |
| | | "DEPARTING", |
| | | "ARRIVED", |
| | | "RETURNING", |
| | | "IN_PROGRESS", |
| | | ].includes(task.taskStatus); |
| | | const activeStatuses = [ |
| | | TaskStatus.NOT_CONFIRMED, |
| | | TaskStatus.NOT_DEPARTED, |
| | | TaskStatus.PARTIALLY_CONFIRMED, |
| | | TaskStatus.PENDING, |
| | | TaskStatus.DEPARTING, |
| | | TaskStatus.ARRIVED, |
| | | TaskStatus.RETURNING, |
| | | TaskStatus.IN_PROGRESS, |
| | | ]; |
| | | return activeStatuses.includes(task.taskStatus); |
| | | }); |
| | | }, |
| | | |
| | |
| | | convertStatus(dbStatus) { |
| | | const statusMap = { |
| | | PENDING: "pending", |
| | | NOT_CONFIRMED: "pending", |
| | | NOT_DEPARTED: "pending", |
| | | PARTIALLY_CONFIRMED: "pending", |
| | | |
| | | DEPARTING: "processing", |
| | | ARRIVED: "processing", |
| | | RETURNING: "processing", |
| | |
| | | this.$modal |
| | | .confirm("确定要出发吗?") |
| | | .then(() => { |
| | | this.updateTaskStatus(task.taskId, "DEPARTING", "任务已出发"); |
| | | this.updateTaskStatus(task.taskId, TaskStatus.DEPARTING, "任务已出发"); |
| | | }) |
| | | .catch(() => {}); |
| | | } catch (error) { |
| | |
| | | this.$modal |
| | | .confirm("检查任务状态失败,是否继续出发?") |
| | | .then(() => { |
| | | this.updateTaskStatus(task.taskId, "DEPARTING", "任务已出发"); |
| | | this.updateTaskStatus(task.taskId, TaskStatus.DEPARTING, "任务已出发"); |
| | | }) |
| | | .catch(() => {}); |
| | | } |
| | |
| | | this.$modal |
| | | .confirm("确认已到达目的地?") |
| | | .then(() => { |
| | | this.updateTaskStatus(task.taskId, "ARRIVED", "已到达目的地"); |
| | | this.updateTaskStatus(task.taskId, TaskStatus.ARRIVED, "已到达目的地"); |
| | | }) |
| | | .catch(() => {}); |
| | | break; |
| | |
| | | this.$modal |
| | | .confirm("确定要强制结束此任务吗?") |
| | | .then(() => { |
| | | this.updateTaskStatus(task.taskId, "CANCELLED", "任务已强制结束"); |
| | | this.updateTaskStatus(task.taskId, TaskStatus.CANCELLED, "任务已强制结束"); |
| | | }) |
| | | .catch(() => {}); |
| | | break; |
| | |
| | | this.$modal |
| | | .confirm("确认开始返程?") |
| | | .then(() => { |
| | | this.updateTaskStatus(task.taskId, "RETURNING", "已开始返程"); |
| | | this.updateTaskStatus(task.taskId, TaskStatus.RETURNING, "已开始返程"); |
| | | }) |
| | | .catch(() => {}); |
| | | break; |
| | |
| | | case "complete": |
| | | // 已完成 -> 状态变为已完成 |
| | | // 需要检查是否上传了知情同意书 |
| | | this.checkConsentAttachmentAndThen(task.taskId, "COMPLETED", "任务已完成"); |
| | | this.checkConsentAttachmentAndThen(task.taskId, TaskStatus.COMPLETED, "任务已完成"); |
| | | break; |
| | | } |
| | | }, |
| | |
| | | getLocationAndUpdateStatus(taskId, status, remark, cancelReason) { |
| | | const that = this; |
| | | |
| | | // 使用uni.getLocation获取GPS位置 |
| | | // 使用 uni.getLocation 获取 GPS 位置 |
| | | uni.getLocation({ |
| | | type: "gcj02", |
| | | geocode: true, |
| | | altitude: true, |
| | | success: function (res) { |
| | | console.log("GPS定位成功:", res); |
| | | |
| | | console.log("GPS 定位成功:", res); |
| | | |
| | | const statusData = { |
| | | taskStatus: status, |
| | | remark: remark, |
| | |
| | | }); |
| | | }, |
| | | |
| | | // 获取状态样式类 |
| | | getStatusClass(status) { |
| | | const statusClassMap = { |
| | | PENDING: "status-pending", |
| | | DEPARTING: "status-departing", |
| | | ARRIVED: "status-arrived", |
| | | RETURNING: "status-returning", |
| | | COMPLETED: "status-completed", |
| | | CANCELLED: "status-cancelled", |
| | | IN_PROGRESS: "status-in-progress", |
| | | }; |
| | | return statusClassMap[status] || "status-default"; |
| | | }, |
| | | |
| | | getStatusText(status) { |
| | | // 支持新旧两种状态格式 |
| | | const statusMap = { |
| | | // 新格式(数据库状态) |
| | | PENDING: "待处理", |
| | | DEPARTING: "出发中", |
| | | ARRIVED: "已到达", |
| | | RETURNING: "返程中", |
| | | COMPLETED: "已完成", |
| | | CANCELLED: "已取消", |
| | | IN_PROGRESS: "处理中", |
| | | // 旧格式(UI状态) |
| | | pending: "待处理", |
| | | processing: "处理中", |
| | | completed: "已完成", |
| | | }; |
| | | return statusMap[status] || "未知"; |
| | | }, |
| | | |
| | | // 获取任务类型文本 |
| | | getTaskTypeText(type) { |
| | | const typeMap = { |
| | | // 新格式(数据库类型) |
| | | MAINTENANCE: "维修保养", |
| | | FUEL: "加油", |
| | | OTHER: "其他", |
| | | EMERGENCY_TRANSFER: "转运任务", |
| | | WELFARE: "福祉车", |
| | | // 旧格式(UI类型) |
| | | maintenance: "维修保养", |
| | | refuel: "加油", |
| | | inspection: "巡检", |
| | | emergency: "转运任务", |
| | | welfare: "福祉车", |
| | | }; |
| | | return typeMap[type] || "未知类型"; |
| | | return TASK_TYPE_MAP[type] || "未知类型"; |
| | | }, |
| | | |
| | | // 获取任务状态文本 |
| | | getStatusText(status) { |
| | | return TASK_STATUS_MAP[status] || "未知"; |
| | | }, |
| | | |
| | | clickConfirmsubscribeTaskNotify() { |
| | |
| | | background-color: #fff3e0; |
| | | color: #ff9500; |
| | | } |
| | | &.status-not-confirmed { |
| | | background-color: #fff3e0; |
| | | color: #ff9500; |
| | | } |
| | | &.status-not-departed { |
| | | background-color: #fff3e0; |
| | | color: #ff9500; |
| | | } |
| | | &.status-partially-confirmed { |
| | | background-color: #fff3e0; |
| | | color: #ff9500; |
| | | } |
| | | |
| | | // 出发中 - 蓝色 |
| | | &.status-departing { |