wlzboy
2025-10-27 559b2e34c983f615b6d6747f52c801022c561803
ruoyi-ui/src/views/task/general/detail.vue
@@ -30,6 +30,121 @@
        <el-descriptions-item label="备注" :span="2">{{ taskDetail.remark }}</el-descriptions-item>
      </el-descriptions>
      <!-- 急救转运任务扩展信息 -->
      <el-descriptions v-if="taskDetail.taskType === 'EMERGENCY_TRANSFER' && taskDetail.emergencyInfo" title="急救转运信息" :column="2" border style="margin-top: 20px;">
        <el-descriptions-item label="联系人">
          <span v-if="taskDetail.emergencyInfo.contactPerson">{{ taskDetail.emergencyInfo.contactPerson }}</span>
          <span v-else style="color: #C0C4CC;">--</span>
        </el-descriptions-item>
        <el-descriptions-item label="联系电话">
          <span v-if="taskDetail.emergencyInfo.contactPhone">{{ taskDetail.emergencyInfo.contactPhone }}</span>
          <span v-else style="color: #C0C4CC;">--</span>
        </el-descriptions-item>
        <el-descriptions-item label="患者姓名">
          <span v-if="taskDetail.emergencyInfo.patientName">{{ taskDetail.emergencyInfo.patientName }}</span>
          <span v-else style="color: #C0C4CC;">--</span>
        </el-descriptions-item>
        <el-descriptions-item label="患者性别">
          <dict-tag v-if="taskDetail.emergencyInfo.patientGender" :options="dict.type.sys_user_sex" :value="taskDetail.emergencyInfo.patientGender"/>
          <span v-else style="color: #C0C4CC;">--</span>
        </el-descriptions-item>
        <el-descriptions-item label="身份信息" :span="2">
          <span v-if="taskDetail.emergencyInfo.patientIdCard">{{ taskDetail.emergencyInfo.patientIdCard }}</span>
          <span v-else style="color: #C0C4CC;">--</span>
        </el-descriptions-item>
        <el-descriptions-item label="病情描述" :span="2">
          <span v-if="taskDetail.emergencyInfo.illnessDescription">{{ taskDetail.emergencyInfo.illnessDescription }}</span>
          <span v-else style="color: #C0C4CC;">--</span>
        </el-descriptions-item>
      </el-descriptions>
      <!-- 旧系统同步信息(仅急救转运任务显示) -->
      <el-descriptions v-if="taskDetail.taskType === 'EMERGENCY_TRANSFER' && taskDetail.emergencyInfo" title="旧系统同步信息" :column="2" border style="margin-top: 20px;">
        <el-descriptions-item label="服务单同步状态">
          <el-tag v-if="taskDetail.emergencyInfo.syncStatus === 0" type="info" size="small">
            <i class="el-icon-warning"></i> 未同步
          </el-tag>
          <el-tag v-else-if="taskDetail.emergencyInfo.syncStatus === 1" type="warning" size="small">
            <i class="el-icon-loading"></i> 同步中
          </el-tag>
          <el-tag v-else-if="taskDetail.emergencyInfo.syncStatus === 2" type="success" size="small">
            <i class="el-icon-success"></i> 同步成功
          </el-tag>
          <el-tag v-else-if="taskDetail.emergencyInfo.syncStatus === 3" type="danger" size="small">
            <i class="el-icon-error"></i> 同步失败
          </el-tag>
          <span v-else style="color: #C0C4CC;">--</span>
        </el-descriptions-item>
        <el-descriptions-item label="服务单号">
          <span v-if="taskDetail.emergencyInfo.legacyServiceOrdId">
            <el-tag type="primary" size="small">{{ taskDetail.emergencyInfo.legacyServiceOrdId }}</el-tag>
          </span>
          <span v-else style="color: #C0C4CC;">--</span>
        </el-descriptions-item>
        <el-descriptions-item label="服务单同步时间">
          <span v-if="taskDetail.emergencyInfo.syncTime">{{ parseTime(taskDetail.emergencyInfo.syncTime) }}</span>
          <span v-else style="color: #C0C4CC;">--</span>
        </el-descriptions-item>
        <el-descriptions-item label="服务单同步错误" :span="1">
          <span v-if="taskDetail.emergencyInfo.syncErrorMsg" style="color: #F56C6C;">{{ taskDetail.emergencyInfo.syncErrorMsg }}</span>
          <span v-else style="color: #C0C4CC;">--</span>
        </el-descriptions-item>
        <el-descriptions-item label="调度单同步状态">
          <el-tag v-if="taskDetail.emergencyInfo.dispatchSyncStatus === 0" type="info" size="small">
            <i class="el-icon-warning"></i> 未同步
          </el-tag>
          <el-tag v-else-if="taskDetail.emergencyInfo.dispatchSyncStatus === 1" type="warning" size="small">
            <i class="el-icon-loading"></i> 同步中
          </el-tag>
          <el-tag v-else-if="taskDetail.emergencyInfo.dispatchSyncStatus === 2" type="success" size="small">
            <i class="el-icon-success"></i> 同步成功
          </el-tag>
          <el-tag v-else-if="taskDetail.emergencyInfo.dispatchSyncStatus === 3" type="danger" size="small">
            <i class="el-icon-error"></i> 同步失败
          </el-tag>
          <span v-else style="color: #C0C4CC;">--</span>
        </el-descriptions-item>
        <el-descriptions-item label="调度单号">
          <span v-if="taskDetail.emergencyInfo.legacyDispatchOrdId">
            <el-tag type="primary" size="small">{{ taskDetail.emergencyInfo.legacyDispatchOrdId }}</el-tag>
          </span>
          <span v-else style="color: #C0C4CC;">--</span>
        </el-descriptions-item>
        <el-descriptions-item label="调度单同步时间">
          <span v-if="taskDetail.emergencyInfo.dispatchSyncTime">{{ parseTime(taskDetail.emergencyInfo.dispatchSyncTime) }}</span>
          <span v-else style="color: #C0C4CC;">--</span>
        </el-descriptions-item>
        <el-descriptions-item label="调度单同步错误" :span="1">
          <span v-if="taskDetail.emergencyInfo.dispatchSyncErrorMsg" style="color: #F56C6C;">{{ taskDetail.emergencyInfo.dispatchSyncErrorMsg }}</span>
          <span v-else style="color: #C0C4CC;">--</span>
        </el-descriptions-item>
      </el-descriptions>
      <!-- 福祉车任务扩展信息 -->
      <el-descriptions v-if="taskDetail.taskType === 'WELFARE' && taskDetail.welfareInfo" title="福祉车服务信息" :column="2" border style="margin-top: 20px;">
        <el-descriptions-item label="乘客姓名">{{ taskDetail.welfareInfo.passengerName }}</el-descriptions-item>
        <el-descriptions-item label="乘客性别">
          <dict-tag :options="dict.type.sys_user_sex" :value="taskDetail.welfareInfo.passengerGender"/>
        </el-descriptions-item>
        <el-descriptions-item label="乘客年龄">{{ taskDetail.welfareInfo.passengerAge }}</el-descriptions-item>
        <el-descriptions-item label="联系电话">{{ taskDetail.welfareInfo.contactPhone }}</el-descriptions-item>
        <el-descriptions-item label="服务类型" :span="2">
          <span v-if="taskDetail.welfareInfo.serviceType">{{ taskDetail.welfareInfo.serviceType }}</span>
          <span v-else style="color: #C0C4CC;">--</span>
        </el-descriptions-item>
        <el-descriptions-item label="特殊需求" :span="2">
          <span v-if="taskDetail.welfareInfo.specialRequirements">{{ taskDetail.welfareInfo.specialRequirements }}</span>
          <span v-else style="color: #C0C4CC;">--</span>
        </el-descriptions-item>
        <el-descriptions-item label="是否需要轮椅">
          <el-tag v-if="taskDetail.welfareInfo.needsWheelchair == 1" type="success" size="small">是</el-tag>
          <el-tag v-else type="info" size="small">否</el-tag>
        </el-descriptions-item>
        <el-descriptions-item label="陪同人数">{{ taskDetail.welfareInfo.companionCount || 0 }} 人</el-descriptions-item>
        <el-descriptions-item label="预估费用">{{ taskDetail.welfareInfo.estimatedCost || '--' }} 元</el-descriptions-item>
        <el-descriptions-item label="实际费用">{{ taskDetail.welfareInfo.actualCost || '--' }} 元</el-descriptions-item>
      </el-descriptions>
      <!-- 操作按钮 -->
      <div style="margin-top: 20px; text-align: center;">
        <el-button type="primary" @click="handleEdit" v-hasPermi="['task:general:edit']">编辑任务</el-button>
@@ -242,13 +357,24 @@
    <el-dialog title="分配车辆" :visible.sync="vehicleAssignOpen" width="600px" append-to-body>
      <el-form ref="vehicleAssignForm" :model="vehicleAssignForm" :rules="vehicleAssignRules" label-width="80px">
        <el-form-item label="车辆" prop="vehicleIds">
          <el-select v-model="vehicleAssignForm.vehicleIds" placeholder="请选择车辆" multiple clearable>
          <el-select v-model="vehicleAssignForm.vehicleIds" placeholder="请选择车辆" multiple clearable style="width: 100%">
            <el-option
              v-for="vehicle in availableVehicles"
              :key="vehicle.vehicleId"
              :label="vehicle.vehicleNo + ' (' + vehicle.vehicleType + ')'"
              :label="vehicle.vehicleNo + ' - ' + vehicle.deptName"
              :value="vehicle.vehicleId"
            />
            >
              <div style="display: flex; justify-content: space-between; align-items: center;">
                <div>
                  <div style="font-weight: bold; color: #303133;">{{ vehicle.vehicleNo }}</div>
                  <div style="font-size: 12px; color: #909399;">ID: {{ vehicle.vehicleId }}</div>
                </div>
                <div style="text-align: right;">
                  <div style="color: #67C23A; font-size: 13px;">{{ getVehicleTypeName(vehicle.vehicleType) }}</div>
                  <div style="color: #8492a6; font-size: 12px;">{{ vehicle.vehicleBrand }} {{ vehicle.vehicleModel }}</div>
                </div>
              </div>
            </el-option>
          </el-select>
        </el-form-item>
        <el-form-item label="备注" prop="remark">
@@ -288,7 +414,7 @@
export default {
  name: "TaskDetail",
  dicts: ['sys_task_type', 'sys_task_status', 'sys_vehicle_type', 'sys_task_vehicle_status'],
  dicts: ['sys_task_type', 'sys_task_status', 'sys_vehicle_type', 'sys_task_vehicle_status', 'sys_user_sex', 'hospital_department'],
  data() {
    return {
      // 任务详情
@@ -552,6 +678,15 @@
      } else {
        return (size / 1024 / 1024).toFixed(2) + ' MB';
      }
    },
    /** 获取车辆类型名称 */
    getVehicleTypeName(vehicleType) {
      const typeDict = this.dict.type.sys_vehicle_type;
      if (typeDict && typeDict.length > 0) {
        const typeItem = typeDict.find(item => item.value === vehicleType);
        return typeItem ? typeItem.label : vehicleType;
      }
      return vehicleType;
    }
  }
};