wlzboy
2025-11-16 f67945d53b20f6a45ae50b27d74c966eb1355bb4
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
<template>
  <div class="app-container">
    <el-page-header @back="goBack" content="任务详情">
    </el-page-header>
 
    <el-card class="box-card" style="margin-top: 20px;" shadow="hover">
      <div slot="header" class="clearfix">
        <span><i class="el-icon-document"></i> 任务基本信息</span>
      </div>
      
      <el-descriptions :column="2" border>
        <el-descriptions-item label="任务编号">{{ taskInfo.taskCode }}</el-descriptions-item>
        <el-descriptions-item label="任务状态">
          <el-tag :type="getStatusType(taskInfo.taskStatus)">
            {{ getStatusText(taskInfo.taskStatus) }}
          </el-tag>
        </el-descriptions-item>
        <el-descriptions-item label="车牌号">{{ taskInfo.vehicleNo }}</el-descriptions-item>
        <el-descriptions-item label="执行人">{{ taskInfo.assigneeName }}</el-descriptions-item>
        <el-descriptions-item label="计划开始时间">{{ taskInfo.plannedStartTime }}</el-descriptions-item>
        <el-descriptions-item label="计划结束时间">{{ taskInfo.plannedEndTime }}</el-descriptions-item>
        <el-descriptions-item label="实际开始时间">{{ taskInfo.actualStartTime || '-' }}</el-descriptions-item>
        <el-descriptions-item label="实际结束时间">{{ taskInfo.actualEndTime || '-' }}</el-descriptions-item>
        <el-descriptions-item label="出发地址" :span="2">{{ taskInfo.departureAddress }}</el-descriptions-item>
        <el-descriptions-item label="目的地址" :span="2">{{ taskInfo.destinationAddress }}</el-descriptions-item>
      </el-descriptions>
    </el-card>
 
    <!-- GPS里程统计组件 -->
    <task-mileage-detail v-if="taskInfo.taskId" :task-id="taskInfo.taskId" />
  </div>
</template>
 
<script>
import TaskMileageDetail from '@/components/TaskMileageDetail'
import { getTask } from '@/api/task'
 
export default {
  name: 'TaskDetail',
  components: {
    TaskMileageDetail
  },
  data() {
    return {
      taskInfo: {
        taskId: null,
        taskCode: '',
        taskStatus: '',
        vehicleNo: '',
        assigneeName: '',
        plannedStartTime: '',
        plannedEndTime: '',
        actualStartTime: '',
        actualEndTime: '',
        departureAddress: '',
        destinationAddress: ''
      }
    }
  },
  created() {
    const taskId = this.$route.params && this.$route.params.taskId
    if (taskId) {
      this.loadTaskInfo(taskId)
    }
  },
  methods: {
    /** 加载任务信息 */
    loadTaskInfo(taskId) {
      getTask(taskId).then(response => {
        this.taskInfo = response.data
      })
    },
    
    /** 返回 */
    goBack() {
      this.$router.go(-1)
    },
    
    /** 获取状态类型 */
    getStatusType(status) {
      const statusMap = {
        'PENDING': 'info',
        'DEPARTING': 'warning',
        'ARRIVED': 'primary',
        'RETURNING': 'warning',
        'COMPLETED': 'success',
        'CANCELLED': 'danger'
      }
      return statusMap[status] || 'info'
    },
    
    /** 获取状态文本 */
    getStatusText(status) {
      const statusMap = {
        'PENDING': '待出发',
        'DEPARTING': '出发中',
        'ARRIVED': '已到达',
        'RETURNING': '返程中',
        'COMPLETED': '已完成',
        'CANCELLED': '已取消'
      }
      return statusMap[status] || status
    }
  }
}
</script>
 
<style scoped>
.app-container {
  padding: 20px;
}
</style>