wlzboy
1 天以前 08f95b2f159b56fa3bd4f4b348855989de8aa456
app/pages/task/index.vue
@@ -112,7 +112,10 @@
            <view class="task-main" @click="viewTaskDetail(task)">
              <!-- 任务头部:标题和状态标签 -->
              <view class="task-header">
                <view class="task-title">{{ getTaskTypeText(task.taskType) }} - {{ task.vehicle }}</view>
                <view class="task-title">
                  {{ getTaskTypeText(task.taskType) }} - {{ task.vehicle }}
                  <text v-if="task.isHeadPush === '1'" class="head-push-tag">总</text>
                </view>
                <view class="task-status" :class="task.taskStatus === 'PENDING' ? 'status-pending' : task.taskStatus === 'DEPARTING' ? 'status-departing' : task.taskStatus === 'ARRIVED' ? 'status-arrived' : task.taskStatus === 'RETURNING' ? 'status-returning' : task.taskStatus === 'COMPLETED' ? 'status-completed' : task.taskStatus === 'CANCELLED' ? 'status-cancelled' : task.taskStatus === 'IN_PROGRESS' ? 'status-in-progress' : 'status-default'">
                  {{ getStatusText(task.taskStatus) }}
                </view>
@@ -120,7 +123,7 @@
              
              <!-- 任务编号单独一行 -->
              <view class="task-code-row">
                <text class="task-code">{{ task.taskCode }}</text>
                <text class="task-code">{{ task.showTaskCode }}</text>
              </view>
              
              <!-- 任务详细信息 -->
@@ -221,6 +224,7 @@
  import { listTask, changeTaskStatus } from '@/api/task'
  import { mapState } from 'vuex'
  import { formatDateTime } from '@/utils/common'
  import { checkTaskCanDepart } from '@/utils/taskValidator'
  
  export default {
    components: {
@@ -296,7 +300,7 @@
        // 应用任务编号筛选 - 使用taskCode而不是taskNo
        if (this.searchForm.taskNo) {
          filtered = filtered.filter(task => 
            task.taskCode && task.taskCode.includes(this.searchForm.taskNo)
            task.showTaskCode && task.showTaskCode.includes(this.searchForm.taskNo)
          );
        }
        
@@ -461,13 +465,87 @@
      },
      
      // 处理任务操作
      handleTaskAction(task, action) {
      async handleTaskAction(task, action) {
        switch (action) {
          case 'depart':
            // 出发 -> 状态变为出发中
            this.$modal.confirm('确定要出发吗?').then(() => {
              this.updateTaskStatus(task.taskId, 'DEPARTING', '任务已出发')
            }).catch(() => {});
            // 显示加载提示
            uni.showLoading({
              title: '检查任务状态...'
            });
            try {
              // 调用工具类检查任务是否可以出发(包含基本校验和冲突检查)
              const checkResult = await checkTaskCanDepart(task)
              uni.hideLoading();
              console.log('出发检查结果:', checkResult);
              console.log('valid:', checkResult.valid);
              console.log('conflicts:', checkResult.conflicts);
              if (!checkResult.valid) {
                // 校验失败,显示提示信息并提供跳转选项
                const conflicts = checkResult.conflicts || [];
                const conflictInfo = conflicts.length > 0 ? conflicts[0] : null;
                console.log('冲突信息:', conflictInfo);
                // 如果有冲突任务信息,提供跳转按钮
                if (conflictInfo && conflictInfo.taskId) {
                  console.log('显示带跳转按钮的弹窗,任务ID:', conflictInfo.taskId);
                  const conflictTaskId = conflictInfo.taskId;
                  const message = checkResult.message || conflictInfo.message || '存在冲突任务';
                  uni.showModal({
                    title: '提示',
                    content: message,
                    confirmText: '去处理',
                    cancelText: '知道了',
                    success: function(res) {
                      console.log('弹窗点击结果:', res);
                      if (res.confirm) {
                        // 用户点击"现在去处理",跳转到冲突任务详情页
                        console.log('准备跳转到任务详情页:', conflictTaskId);
                        uni.navigateTo({
                          url: `/pagesTask/detail?id=${conflictTaskId}`
                        });
                      }
                    },
                    fail: function(err) {
                      console.error('显示弹窗失败:', err);
                    }
                  });
                } else {
                  // 没有冲突任务ID,只显示提示
                  console.log('显示普通提示弹窗');
                  uni.showModal({
                    title: '提示',
                    content: checkResult.message || '任务校验失败',
                    showCancel: false,
                    confirmText: '知道了',
                    fail: function(err) {
                      console.error('显示弹窗失败:', err);
                    }
                  });
                }
                return;
              }
              // 所有检查通过,可以出发
              this.$modal.confirm('确定要出发吗?').then(() => {
                this.updateTaskStatus(task.taskId, 'DEPARTING', '任务已出发')
              }).catch(() => {});
            } catch (error) {
              uni.hideLoading();
              console.error('检查任务状态失败:', error);
              // 检查失败时,仍然允许出发
              this.$modal.confirm('检查任务状态失败,是否继续出发?').then(() => {
                this.updateTaskStatus(task.taskId, 'DEPARTING', '任务已出发')
              }).catch(() => {});
            }
            break;
            
          case 'cancel':
@@ -638,6 +716,17 @@
    }
  }
  
  // 总部推送标记样式
  .head-push-tag {
    color: #ff0000;
    font-size: 24rpx;
    font-weight: bold;
    margin-left: 10rpx;
    padding: 2rpx 8rpx;
    border: 1rpx solid #ff0000;
    border-radius: 4rpx;
  }
  // 任务列表区域
  .task-list-section {
    flex: 1;