cuiqian2004
2025-09-19 d8743368ffda9bc0fb2c6818f695a9a6b1079e57
pages/task/log-list.vue
@@ -3,36 +3,35 @@
      <view class="list-content" v-if="list.length > 0">
         <view class="header">
            <view class="item">
               <view class="title">{{accumulatedDuration}}<text class="text">min</text></view>
               <view class="title">{{totalDuration}}<text class="text">min</text></view>
               <view class="text">累计时长</view>
            </view>
            <!--       <view class="item">
               <view class="title">{{accumulatedMileage}}<text class="text">m</text></view>
               <view class="text">累计里程</view>
            </view> -->
            <view class="item">
               <view class="title">{{cumulativeCount}}</view>
               <view class="title">{{totalCount}}</view>
               <view class="text">累计次数</view>
            </view>
         </view>
         <view class="list">
            <view class="task-header" v-if="fixedList.length > 0">固定任务</view>
            <template v-for="(group) in fixedList" :key="group.date">
            <!-- <view class="task-header" v-if="fixedList.length > 0">固定任务</view> -->
            <template v-for="(group) in taskList" :key="group.date">
               <view class="task-header">{{group.date}}</view>
               <view class="task-list-view">
                  <TaskLogItemView class="list-item" v-for="(item,index) in group.list" :key="index" :taskData="item">
                  <TaskLogItemView class="list-item" v-for="(item,index) in group.list" :key="index"
                     :taskData="item">
                  </TaskLogItemView>
               </view>
            </template>
            <view class="task-header" v-if="tempList.length > 0">临时任务</view>
            <!-- <view class="task-header" v-if="tempList.length > 0">临时任务</view>
            <template v-for="(group) in tempList" :key="group.date">
               <view class="task-header">{{group.date}}</view>
               <view class="task-list-view">
                  <TaskLogItemView class="list-item" v-for="(item,index) in group.list" :key="index" :taskData="item">
                  <TaskLogItemView class="list-item" v-for="(item,index) in group.list" :key="index"
                     :taskData="item">
                  </TaskLogItemView>
               </view>
            </template>
            </template> -->
         </view>
      </view>
      <view class="list-no-content" v-else>
@@ -46,7 +45,9 @@
<script>
   import {
      showToast,
      showModal
      showModal,
      showError,
      showInfo
   } from "@/comm/utils.js"
   import TaskLogItemView from "./infos/task-log-item.vue"
   import {
@@ -59,12 +60,35 @@
      },
      data() {
         return {
            ip:"",
            ip: "",
            sceneId: "",
            list: [],
         }
      },
      computed: {
         taskList() {
            const listRes = []
            this.list.forEach((ele) => {
               const dateStart = new Date(Number(ele.start_time))
               const date = `${dateStart.getMonth()}-${dateStart.getDay()}`;
               const curIndex = listRes.findIndex((a) => a.date == date)
               if (curIndex < 0) {
                  let group = {
                     date,
                     list: [ele]
                  }
                  listRes.push(group)
               } else {
                  let group = listRes[curIndex]
                  group.list.push(ele)
               }
            })
            listRes.sort((a, b) => {
               return a.date < b.date ? 1 : -1
            });
            return listRes
         },
         fixedList() {
            let list = this.list.filter((a) => a.tasktype == 1)
            let group
@@ -92,53 +116,22 @@
            })
            return listRes
         },
         tempList() {
            let list = this.list.filter((a) => a.tasktype == 2)
            let group
            const listRes = []
            list.sort((a, b) => {
               return a.date > b.date
            });
            list.forEach((item) => {
               if (group) {
                  if (item.date != group.date) {
                     group = {
                        date: item.date,
                        list: []
                     }
                     listRes.push(group)
                  }
               } else {
                  group = {
                     date: item.date,
                     list: []
                  }
                  listRes.push(group)
               }
               group.list.push(item)
            })
            return listRes
         },
         accumulatedDuration() {
            let res = 0
         totalDuration() {
            let d = 0
            // this.list.forEach((item) => {
            //    d += item.duration || 0
            // })
            this.list.forEach((item) => {
               res += item.duration || 0
               d +=( item.end_time -  item.start_time)
            })
            return res
            return Math.ceil(d / (60 * 1000))
         },
         accumulatedMileage() {
            let res = 0
            this.list.forEach((item) => {
               res += item.accumulated_mileage || 0
            })
            return res
         },
         cumulativeCount() {
            let res = 0
            this.list.forEach((item) => {
               res += item.cycleNumber || 0
            })
            return res
         totalCount() {
             let cnt =this.list.length
            // this.list.forEach((item) => {
            //    cnt += item.list.length
            // })
            return cnt
         },
      },
      onLoad(option) {
@@ -170,87 +163,14 @@
         },
         async loadData() {
            try {
               /*this.list = [{
                  type: 0,
                  taskButton: 1,
                  name: "1号站点到2号站点",
                  date: "5-18",
                  accumulated_duration: 5693,
                  accumulated_mileage: 6421,
                  cumulative_number: 55,
                  status: 1,
               }, {
                  type: 0,
                  taskButton: 2,
                  name: "2号站点到1号站点",
                  date: "5-08",
                  accumulated_duration: 888,
                  accumulated_mileage: 642,
                  cumulative_number: 31,
                  status: 2,
               }, {
                  type: 0,
                  taskButton: 1,
                  name: "1号站点到2号站点",
                  date: "4-28",
                  accumulated_duration: 998,
                  accumulated_mileage: 2421,
                  cumulative_number: 85,
                  status: 2,
               }, {
                  type: 0,
                  taskButton: 2,
                  name: "2号站点到1号站点",
                  date: "4-28",
                  accumulated_duration: 688,
                  accumulated_mileage: 1421,
                  cumulative_number: 65,
                  status: 4,
               }, {
                  type: 1,
                  taskButton: 3,
                  name: "1号站点到2号站点",
                  date: "5-18",
                  accumulated_duration: 5693,
                  accumulated_mileage: 6421,
                  cumulative_number: 55,
                  status: 2,
               }, {
                  type: 1,
                  taskButton: 4,
                  name: "2号站点到1号站点",
                  date: "5-08",
                  accumulated_duration: 888,
                  accumulated_mileage: 642,
                  cumulative_number: 31,
                  status: 2,
               }, {
                  type: 1,
                  taskButton: 3,
                  name: "1号站点到2号站点",
                  date: "4-28",
                  accumulated_duration: 998,
                  accumulated_mileage: 2421,
                  cumulative_number: 85,
                  status: 2,
               }, {
                  type: 1,
                  taskButton: 4,
                  name: "2号站点到1号站点",
                  date: "4-28",
                  accumulated_duration: 688,
                  accumulated_mileage: 1421,
                  cumulative_number: 65,
                  status: 2,
               }]*/
               this.list = await this.loadTaskLog()
            } catch (ex) {
               this.showError(ex)
               showError(ex)
            }
         },
         async loadTaskLog() {
            try {
               const now = new Date();
               const oneWeekAgo = new Date();
               const endTimeStamp = `${now.getTime()}`
@@ -259,53 +179,16 @@
               const res = await getTaskLog(this.ip, startTimeStamp, endTimeStamp)
               const list = res?.task_info || []
               console.log(list)
               list.forEach((ele) => {
                  console.log(ele)
                  const dateStart = new Date()
                  dateStart.setTime(Number(ele.taskStartTimeStamp))
                  ele.date = `${dateStart.getMonth()}-${dateStart.getDay()}`;
                  let taskList = ele.taskList || []
                  taskList.sort((a, b) => {
                     return a.lastUpdateTimeStamp > b.lastUpdateTimeStamp
                  });
                  console.log(taskList)
                  ele.startTime = `${dateStart.getHours()}:${dateStart.getMinutes()}`;
                  ele.endTime = ele.startTime
                  ele.duration = 0;
                  ele.status = 0
               //   console.log(ele)
                  if (taskList.length > 0) {
                     const dateEnd = new Date()
                     dateEnd.setTime(Number(taskList[taskList.length - 1].lastUpdateTimeStamp))
                     for (let i in taskList) {
                        const ele2 = taskList[i]
                        if (ele2.status == 1) {
                           ele.status = 1
                           break;
                        } else if (ele2.status == 2 || ele2.status == 4 || ele2.status == 5) {
                           ele.status = 2
                           break;
                        }
                     }
                     if (!ele.status) {
                        if (taskList.filter((a) => a.status != 3).length == 0) {
                           ele.status = 3
                        }
                     }
                     const diffInMs = dateEnd - dateStart; // 或者 Math.abs(date1 - date2)
                     ele.endTime = `${dateEnd.getHours()}:${dateEnd.getMinutes()}`;
                     ele.duration = Math.round(diffInMs / (1000 * 60))
                     console.log(ele)
                  }
               })
               console.log(list)
               list.sort((a, b) => {
                  return a.end_time < b.end_time ? 1 : -1
               });
               showToast(`装载了${list.length}记录`)
               return list
            } catch (ex) {
               this.showError(ex)
               showError(ex)
               return []
            }
            }
         },
         clickTask(item) {
@@ -313,13 +196,7 @@
            //    url: "/pages/task/index"
            // })
         },
         showError(ex) {
            let exStr = JSON.stringify(ex)
            if (exStr == "{}")
               exStr = ex
            let tip = typeof ex.msg == "string" ? ex.msg : exStr
            showModal(tip, "错误", false,"确定")
         },
      }
   }
</script>
@@ -377,20 +254,22 @@
            overflow: auto;
            .task-header {
               width: 100% ;
               width: 100%;
               padding: 10rpx;
               font-size: 32rpx;
            }
            .task-list-view {
               width: 100% ;
               width: 100%;
               border-radius: 10rpx;
               // padding: 0 10rpx;
               background-color: #fff;
               .list-item {
                  border-bottom: 1px solid #ddd;
               }
               .list-item:last-child {
                  border-bottom: 0;
                  /* 右下角 */