wlzboy
2026-03-19 c5ac97682e3b4ca748541ace97cb37a2295bd81e
app/pages/task/index.vue
@@ -158,7 +158,7 @@
                      ? 'status-cancelled'
                      : task.taskStatus === 'IN_PROGRESS'
                      ? 'status-in-progress'
                      : 'status-default'
                      : 'status-pending'
                  "
                >
                  {{ getStatusText(task.taskStatus) }}
@@ -188,7 +188,7 @@
                <view class="info-row">
                  <view class="info-item">
                    <view class="label">执行人员:</view>
                    <view class="value">{{ task.assignee }}</view>
                    <view class="value">{{ getAssigneesDisplay(task) }}</view>
                  </view>
                </view>
              </view>
@@ -197,7 +197,10 @@
            <!-- 操作按钮 -->
            <view class="task-actions">
              <!-- 待处理状态: 显示出发、取消 -->
              <template v-if="task.taskStatus === 'PENDING'">
              <template v-if="task.taskStatus === 'PENDING'
              || task.taskStatus === 'NOT_DEPARTED'
              || task.taskStatus === 'NOT_CONFIRMED'
              || task.taskStatus === 'PARTIALLY_CONFIRMED'">
                <button
                  class="action-btn primary"
                  @click="handleTaskAction(task, 'depart')"
@@ -300,6 +303,35 @@
import { mapState } from "vuex";
import { formatDateTime } from "@/utils/common";
import { checkTaskCanDepart } from "@/utils/taskValidator";
import { getStatusText as getTaskStatusText, getTaskStatusOptions, getTaskTypeText as getTaskTypeTextUtil } 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 {
  components: {
@@ -315,8 +347,8 @@
        vehicle: "",
        taskNo: "",
      },
      statusOptions: ["全部状态", "待处理", "处理中", "已完成", "已取消"],
      statusValues: ["", "pending", "processing", "completed", "cancelled"],
      statusOptions: ["全部状态", ...getTaskStatusOptions().map(opt => opt.label)],
      statusValues: ["", ...getTaskStatusOptions().map(opt => opt.value)],
      selectedStatus: "",
      selectedStatusText: "",
      startDate: "",
@@ -415,6 +447,9 @@
        queryParams.taskStatus = "PENDING";
      } else if (this.currentFilter === "processing") {
        queryParams.taskStatusList = [
          "NOT_CONFIRMED",
          "NOT_DEPARTED",
          "PARTIALLY_CONFIRMED",
          "DEPARTING",
          "ARRIVED",
          "RETURNING",
@@ -429,6 +464,9 @@
          const statusMap = {
            pending: "PENDING",
            processing: [
              "NOT_CONFIRMED",
              "NOT_DEPARTED",
              "PARTIALLY_CONFIRMED",
              "DEPARTING",
              "ARRIVED",
              "RETURNING",
@@ -533,6 +571,9 @@
        queryParams.taskStatus = "PENDING";
      } else if (this.currentFilter === "processing") {
        queryParams.taskStatusList = [
          "NOT_CONFIRMED",
          "NOT_DEPARTED",
          "PARTIALLY_CONFIRMED",
          "DEPARTING",
          "ARRIVED",
          "RETURNING",
@@ -663,13 +704,36 @@
        // 优先显示转入医院名称
        if (task.emergencyInfo.hospitalInName) {
          if(task.emergencyInfo.hospitalInName.includes("家中")){
            return task.emergencyInfo.destinationAddress;
            return task.emergencyInfo.hospitalInAddress;
          }
          return task.emergencyInfo.hospitalInName;
        }
        }
        // 如果没有转入医院名称,但有转入医院地址,则显示地址
        if (task.emergencyInfo.hospitalInAddress) {
          return task.emergencyInfo.hospitalInAddress;
        }
      }
      // 其他情况使用原来的endLocation
      return this.formatAddress(task.endLocation || "未设置");
    },
    // 获取执行人员显示(从 assignees 数组中提取 userName)
    getAssigneesDisplay(task) {
      // 如果有 assignees 数组且不为空
      if (task.assignees && task.assignees.length > 0) {
        // 提取所有 userName,过滤掉空值
        const userNames = task.assignees
          .map(assignee => assignee.userName)
          .filter(name => name); // 过滤掉 null/undefined/空字符串
        // 如果有有效的用户名,用逗号连接
        if (userNames.length > 0) {
          return userNames.join('、');
        }
      }
      // 如果没有 assignees 数组,使用旧的 assigneeName 或 assignee 字段
      return task.assigneeName || task.assignee || '未分配';
    },
    // 切换查询界面显示/隐藏
@@ -940,12 +1004,19 @@
          title: '检查附件...'
        });
        
        const response = await checkTaskConsentAttachment(taskId);
        // 注意:这里会被请求拦截器处理,code !== 200 时会 reject
        const response = await checkTaskConsentAttachment(taskId).catch(err => {
          // 拦截器 reject 的情况,返回一个默认对象
          console.log('请求被拦截器 reject,err:', err);
          return { code: -1, msg: '未上传知情同意书' };
        });
        
        uni.hideLoading();
        console.log('检查附件结果:', response);
        
        if (response.code === 200) {
        if (response && response.code === 200) {
          // 已上传知情同意书,继续更新状态
          console.log('已上传知情同意书,继续完成任务');
          this.$modal
            .confirm("确认任务已完成?")
            .then(() => {
@@ -953,8 +1024,11 @@
            })
            .catch(() => {});
        } else {
          // 未上传知情同意书,显示提示
          this.$modal.confirm('任务未上传知情同意书,无法完成任务。是否现在去上传?').then(() => {
          // 未上传知情同意书或其他错误,阻止完成
          const message = (response && response.msg) || '任务未上传知情同意书,无法完成任务';
          console.log('未上传知情同意书,阻止完成');
          this.$modal.confirm(message + '。是否现在去上传?').then(() => {
            // 跳转到任务详情页上传附件
            uni.navigateTo({
              url: `/pagesTask/detail?id=${taskId}`
@@ -963,12 +1037,10 @@
        }
      } catch (error) {
        uni.hideLoading();
        console.error('检查附件失败:', error);
        console.error('检查附件异常:', error);
        
        // 如果检查失败,询问用户是否继续
        this.$modal.confirm('检查附件状态失败,是否继续完成任务?').then(() => {
          this.updateTaskStatus(taskId, status, remark);
        }).catch(() => {});
        // 如果检查失败(网络异常等),不允许完成任务
        this.$modal.showToast('检查附件状态失败,无法完成任务');
      }
    },
@@ -1049,19 +1121,9 @@
      });
    },
    getStatusText(status) {
      const statusMap = {
        PENDING: "待处理",
        DEPARTING: "出发中",
        ARRIVED: "已到达",
        RETURNING: "返程中",
        COMPLETED: "已完成",
        CANCELLED: "已取消",
        IN_PROGRESS: "处理中", // 兼容旧数据
      };
      return statusMap[status] || "未知";
    },
    // 使用 TaskUtil 中的 getStatusText 方法
    // getStatusText 已在 utils/TaskUtil.js 中定义
    // 获取状态样式类
    getStatusClass(status) {
      const statusClassMap = {
@@ -1075,16 +1137,18 @@
      };
      return statusClassMap[status] || "status-default";
    },
    // 使用 TaskUtil 中的 getTaskTypeText 方法
    // getTaskTypeText 已在 utils/TaskUtil.js 中定义
    // 获取任务类型文本
    getTaskTypeText(type) {
      const typeMap = {
        MAINTENANCE: "维修保养",
        FUEL: "加油",
        OTHER: "其他",
        EMERGENCY_TRANSFER: "转运任务",
        WELFARE: "福祉车",
      };
      return typeMap[type] || "未知类型";
      return TASK_TYPE_MAP[type] || "未知类型";
    },
    // 获取任务状态文本
    getStatusText(status) {
      return TASK_STATUS_MAP[status] || "未知";
    },
  },
};
@@ -1426,6 +1490,10 @@
              font-size: 26rpx;
              flex: 1;
              word-break: break-all;
              overflow-wrap: break-word;
              line-height: 1.5;
              max-height: none;
              overflow: visible;
            }
          }
        }