From 843d0abd014ec20424844546fc57a9f976f366ba Mon Sep 17 00:00:00 2001
From: jiangping <jp@doumee.com>
Date: 星期一, 02 九月 2024 10:52:59 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 pda/pages/index/center.vue |  534 ++++++++++++++++++++++++++++++++++++++++++++++++----------
 1 files changed, 437 insertions(+), 97 deletions(-)

diff --git a/pda/pages/index/center.vue b/pda/pages/index/center.vue
index 7d8e376..a1aaff3 100644
--- a/pda/pages/index/center.vue
+++ b/pda/pages/index/center.vue
@@ -1,8 +1,9 @@
 <template>
   <view class="main_app">
     <view class="main_content">
-      <view class="title"
-        >瀹夋嘲鐗╂祦瑁呰揣骞冲彴<u-icon
+      <view class="title" @click="showPlatformgroup = true"
+        >{{ activePlatformGroup.name
+        }}<u-icon
           name="arrow-down"
           size="20"
           class="ml12"
@@ -12,65 +13,115 @@
       <view class="platform_list">
         <view
           class="item"
-          :class="{ active: index === 0 }"
-          v-for="(i, index) in 8"
-          :key="i"
-          >1鍙锋湀鍙�</view
+          :class="{ active: item.id === activePlatform.id }"
+          v-for="(item, index) in activePlatformGroup.platformList"
+          :key="index"
+          @click="platformClick(item)"
+          >{{ item.name }}</view
         >
       </view>
       <view class="status_wrap">
         <view class="status"
-          >浣滀笟锛�<text>{{ 0 }}</text></view
+          >浣滀笟锛�<text>{{ platformTaskInfo.workNum }}</text></view
         >
         <view class="status"
-          >宸插彨锛�<text>{{ 0 }}</text></view
+          >宸插彨锛�<text>{{ platformTaskInfo.callNum }}</text></view
         >
         <view class="status"
-          >绛夊緟锛�<text>{{ 0 }}</text></view
+          >绛夊緟锛�<text>{{ platformTaskInfo.waitNum }}</text></view
         >
         <view class="status"
-          >寮傚父锛�<text>{{ 0 }}</text></view
+          >寮傚父锛�<text>{{ platformTaskInfo.exceptionNum }}</text></view
         >
       </view>
     </view>
     <!--  -->
-    <view v-if="true" class="platform_ing">
-      <view class="head">
-        <view class="code">
-          <text>鐨�</text>
-          <text>AD1212</text>
+    <view style="padding-bottom: 140rpx">
+      <view
+        v-for="item in platformTaskInfo.platformJobList"
+        :key="item.id"
+        class="platform_ing"
+      >
+        <view class="head">
+          <view class="code">
+            <text>{{ item.carCodeFront.slice(0, 1) }}</text>
+            <text>{{ item.carCodeFront.slice(1, 2) }}</text>
+            <text>路</text>
+            <text>{{ item.carCodeFront.slice(2) }}</text>
+          </view>
+          <view
+            class="status"
+            v-if="item.status != 4 && item.status != 5"
+            :class="{ red: item.status == 8 }"
+            >{{ statusMap[item.status] }}</view
+          >
+          <view class="status" v-if="item.status == 4"
+            >鍙彿涓� {{ item.callDateTemp }}</view
+          >
+          <view class="status scs" v-if="item.status == 5"
+            >宸蹭綔涓� {{ item.startDateTemp }}</view
+          >
         </view>
-        <view class="status">鍙彿涓�</view>
+        <view class="line" v-if="item.type == 4">
+          <text class="label">鍚堝悓鍗曞彿</text>
+          <text class="value">{{ item.contractNum }}</text>
+        </view>
+        <view class="line" v-else>
+          <text class="label">杩愯緭鍗曞彿</text>
+          <text class="value">{{ item.code }}</text>
+          <text class="primaryColor" @click="handleDetail()">杩愬崟璇︽儏</text>
+        </view>
+        <view class="line">
+          <text class="label">椹鹃┒鍛�</text>
+          <text class="value"
+            >{{ item.driverName }} {{ item.drivierPhone }}</text
+          >
+        </view>
+        <view class="line">
+          <text class="label">鎬昏繍杈撻噺</text>
+          <text class="value">{{ item.totalNum }}涓囨敮</text>
+        </view>
+        <view class="line" v-if="item.type != 4">
+          <text class="label">杩愯緭鍏徃</text>
+          <text class="value">{{ item.carrierName }}</text>
+        </view>
+        <view class="btns">
+          <view v-if="item.status == 4" class="btn" @click="handlePass(item)"
+            >杩囧彿</view
+          >
+          <view
+            v-if="item.status == 4"
+            class="btn active"
+            @click="handleWork(item)"
+            >寮�濮嬩綔涓�</view
+          >
+
+          <view v-if="item.status == 5" class="btn" @click="handleErr(item)"
+            >寮傚父鎸傝捣</view
+          >
+          <view
+            v-if="item.status == 5 || item.status == 8"
+            class="btn"
+            @click="handleTransform(item)"
+            >杞Щ鏈堝彴</view
+          >
+          <view
+            v-if="item.status == 5 || item.status == 8"
+            class="btn active"
+            @click="handleFinish(item)"
+            >浣滀笟瀹屾垚</view
+          >
+        </view>
       </view>
-      <view class="line">
-        <text class="label">杩愯緭鍗曞彿</text>
-        <text class="value">11111</text>
-        <text class="primaryColor" @click="handleDetail()">杩愬崟璇︽儏</text>
-      </view>
-      <view class="line">
-        <text class="label">鎬昏繍杈撻噺</text>
-        <text class="value">11111</text>
-      </view>
-      <view class="line">
-        <text class="label">椹鹃┒鍛�</text>
-        <text class="value">11111</text>
-      </view>
-      <view class="btns">
-        <view class="btn">杩囧彿</view>
-        <view class="btn" @click="handleTransform">杞Щ鏈堝彴</view>
-        <view class="btn active">寮�濮嬩綔涓�</view>
+      <view v-if="!platformTaskInfo.platformJobList || platformTaskInfo.platformJobList.length == 0" class="empty_wrap">
+        <image src="@/static/default_nodata@2x.png" />
+        <text>鏆傛棤浣滀笟杞﹁締</text>
       </view>
     </view>
-    <image
-      v-if="true"
-      class="empty"
-      src="@/static/default_nodata@2x.png"
-      mode="widthFix"
-    ></image>
     <!--  -->
     <view class="main_footer">
-      <view class="btn">鍏ュ洯鍙彿</view>
-      <view class="btn active" @click="PlatformCallClick">鏈堝彴鍙彿</view>
+      <view class="btn" @click="PlatformCallClick(1)">鍏ュ洯鍙彿</view>
+      <view class="btn active" @click="PlatformCallClick(2)">鏈堝彴鍙彿</view>
     </view>
     <!-- 鍙彿 -->
     <u-popup
@@ -80,45 +131,69 @@
       round="10"
       @close="showPlatformCall = false"
     >
-      <view class="PlatformCallModal">
-        <view class="title">鏈堝彴鍙彿(1鍙锋湀鍙�)</view>
+      <view
+        class="PlatformCallModal"
+        :style="{ height: 'calc(100vh - ' + windowTop + 'px)' }"
+      >
+        <view class="title" v-if="callType == 2"
+          >鏈堝彴鍙彿({{ activePlatform.name }})</view
+        >
+        <view class="title" v-else>鍏ュ洯鍙彿</view>
         <view class="input_wrap">
           <u-icon name="search" class="mr12" size="19" color="#999999" />
           <input
+            v-model="platformCallSearch"
             type="text"
             placeholder="鎼滅储杞﹁締鐗岀収"
             placeholder-class="placeholder9"
+            @confirm="callQuery"
           />
         </view>
         <view class="order_list">
-          <scroll-view scroll-y="true" class="scroll_view">
-            <view class="platform_ing" v-for="i in 8">
+          <scroll-view scroll-y="true" @scrolltolower="callScrolltolower" class="scroll_view">
+            <view
+              class="platform_ing"
+              v-for="item in platformCallList"
+              :key="item.id"
+            >
               <view class="head">
-                <view class="code">
-                  <text>鐨�</text>
-                  <text>AD1212</text>
+                <view v-if="item.carCodeFront" class="code">
+                  <text>{{ item.carCodeFront.slice(0, 1) }}</text>
+                  <text>{{ item.carCodeFront.slice(1, 2) }}</text>
+                  <text>路</text>
+                  <text>{{ item.carCodeFront.slice(2) }}</text>
                 </view>
-                <view class="status">鍙彿涓�</view>
+                <view class="status" :class="{ scs: item.status == 4 }">{{
+                  statusMap[item.status]
+                }}</view>
               </view>
-              <view class="line">
+              <view class="line" v-if="item.type == 4">
+                <text class="label">鍚堝悓鍗曞彿</text>
+                <text class="value">{{ item.contractNum }}</text>
+              </view>
+              <view class="line" v-else>
                 <text class="label">杩愯緭鍗曞彿</text>
-                <text class="value">11111</text>
-                <text class="primaryColor">杩愬崟璇︽儏</text>
+                <text class="value">{{ item.code }}</text>
+                <text class="primaryColor" @click="handleDetail()"
+                  >杩愬崟璇︽儏</text
+                >
               </view>
               <view class="line">
                 <text class="label">椹鹃┒鍛�</text>
-                <text class="value">11111</text>
+                <text class="value"
+                  >{{ item.driverName }} {{ item.drivierPhone }}</text
+                >
               </view>
               <view class="line">
                 <text class="label">鎬昏繍杈撻噺</text>
-                <text class="value">11111</text>
+                <text class="value">{{ item.totalNum }}涓囨敮</text>
               </view>
-              <view class="line">
+              <view class="line" v-if="item.type != 4">
                 <text class="label">杩愯緭鍏徃</text>
-                <text class="value">11111</text>
+                <text class="value">{{ item.carrierName }}</text>
               </view>
               <view class="btns">
-                <view class="btn active">鍙彿</view>
+                <view class="btn active" @click="handleCall(item)">鍙彿</view>
               </view>
             </view>
           </scroll-view>
@@ -133,7 +208,10 @@
       round="10"
       @close="showDetail = false"
     >
-      <view class="PlatformCallModal">
+      <view
+        class="PlatformCallModal"
+        :style="{ height: 'calc(100vh - ' + windowTop + 'px)' }"
+      >
         <view class="title">杩愬崟璇︽儏</view>
         <view class="platform_ing" style="padding: 0">
           <view class="head">
@@ -193,46 +271,265 @@
       round="10"
       @close="showTransform = false"
     >
-      <view class="PlatformCallModal TransformModal">
+      <view class="TransformModal">
         <view class="title">杞Щ鏈堝彴</view>
         <view class="transform_list">
-          <view class="line" v-for="item,index in 9">
-            <view class="name">1鍙锋湀鍙�</view>
-            <view class="status">(绌洪棽)</view>
-            <image v-if="index == 1" src="@/static/ic_select@2x.png" class="checked" />
+          <view
+            class="line"
+            @click="transformPlatClick(item)"
+            v-for="item in activePlatformGroup.platformList"
+            :key="item.id"
+          >
+            <view class="name">{{ item.name }}</view>
+            <view class="status" :class="{ green: item.workStatus == 1 }"
+              >({{ item.workStatus == 0 ? "绌洪棽" : "浣滀笟涓�" }})</view
+            >
+            <image
+              v-if="transformPlatId == item.id"
+              src="@/static/ic_select@2x.png"
+              class="checked"
+            />
           </view>
         </view>
         <view class="btns">
-          <view class="btn" @click="showTransform = false">鍙栨秷</view>
-          <view class="btn active">纭畾</view>
+          <view class="btn" @click="transformCancel">鍙栨秷</view>
+          <view class="btn active" @click="transformSub">纭畾</view>
         </view>
       </view>
     </u-popup>
+    <!--  -->
+    <u-picker
+      :show="showPlatformgroup"
+      keyName="name"
+      :columns="[platformGroupList]"
+      @cancel="showPlatformgroup = false"
+      @confirm="platConfirm"
+    ></u-picker>
   </view>
 </template>
 
 <script>
+import {
+  getPlatformGroupList,
+  getPlatformWorkData,
+  platformCallList,
+  platformCallNumber,
+  platformInPark,
+  beginWork,
+  finishWork,
+  platformMove,
+  platformErr,
+  platformOverNumber
+} from '@/api'
+import { statusMap } from '@/utils/config.js'
+import dayjs from 'dayjs'
+import duration from 'dayjs/plugin/duration'
+dayjs.extend(duration)
+
 export default {
   data() {
     return {
+      statusMap,
+      windowTop: 44,
       showPlatformCall: false, // 鏈堝彴鍙彿
       showDetail: false,
-      showTransform: false // 杞Щ
+      showTransform: false, // 杞Щ
+      showPlatformgroup: false,
+
+      platformGroupList: [],
+      activePlatformGroup: {},
+      platformTaskInfo: {},
+      activePlatform: {},
+
+      platformCallList: [],//鍙彿鍒楄〃
+      platformCallSearch: '',
+      platformCallTotal: 0,
+      platformCallPage: 1,
+      callType: 1,
+
+      transformPlatId: '', // 杞Щ璁板綍鏈堝彴id
+      transformId: '', // 杞Щ璁板綍浠诲姟id
     }
   },
   onLoad() {
-
+    this.getPlatformGroup()
+    const res = uni.getWindowInfo()
+    this.windowTop = res.windowTop
   },
   methods: {
+    getPlatformGroup() {
+      getPlatformGroupList({
+        queryData: 1,
+        queryType: 0
+      }).then(res => {
+        this.platformGroupList = res.data || []
+        if (this.platformGroupList.length > 0) {
+          this.activePlatformGroup = this.platformGroupList[0]
+          if (this.activePlatformGroup.platformList && this.activePlatformGroup.platformList.length > 0) {
+            this.activePlatform = this.activePlatformGroup.platformList[0]
+            this.getPlatformTask()
+          }
+        }
+      })
+    },
+    getPlatformTask() {
+      getPlatformWorkData({ platformId: this.activePlatform.id }).then(res => {
+        this.platformTaskInfo = res.data
+        this.circulInitTaskList()
+        setInterval(() => {
+          this.circulInitTaskList()
+        }, 1000)
+      })
+    },
+    circulInitTaskList() {
+      if (this.platformTaskInfo && this.platformTaskInfo.platformJobList && this.platformTaskInfo.platformJobList.length > 0) {
+        let time = new Date()
+        this.platformTaskInfo.platformJobList.forEach(item => {
+          if (item.callDate) {
+            let timeNum = time.getTime() - new Date(item.callDate).getTime()
+            if (timeNum > 3600000) {
+              item.callDateTemp = dayjs.duration(timeNum).format('H灏忔椂m鍒唖绉�')
+            } else {
+              item.callDateTemp = dayjs.duration(timeNum).format('m鍒唖绉�')
+            }
+          }
+          if (item.startDate) {
+            let timeNum = time.getTime() - new Date(item.startDate).getTime()
+            if (timeNum > 3600000) {
+              item.startDateTemp = dayjs.duration(timeNum).format('H灏忔椂m鍒唖s绉�')
+            } else {
+              item.startDateTemp = dayjs.duration(timeNum).format('m鍒唖绉�')
+            }
+          }
+        })
+        this.$forceUpdate()
+      }
+    },
+    platConfirm(e) {
+      const index = e.indexs[0]
+      this.activePlatformGroup = this.platformGroupList[index]
+      if (this.activePlatformGroup.platformList && this.activePlatformGroup.platformList.length > 0) {
+        this.activePlatform = this.activePlatformGroup.platformList[0]
+        this.getPlatformTask()
+      }
+      this.showPlatformgroup = false
+    },
+    platformClick(item) {
+      this.activePlatform = item
+      this.getPlatformTask()
+    },
     handleDetail() {
       this.showDetail = true
     },
-    PlatformCallClick() {
-      this.showPlatformCall = true
+    handleFinish(item) {
+      finishWork({ jobId: item.id }).then(res => {
+        this.showToast('瀹屾垚浣滀笟')
+        this.getPlatformTask()
+      })
     },
-    handleTransform() {
+    handleWork(item) { // 寮�濮嬩綔涓�
+      beginWork({ jobId: item.id }).then(res => {
+        this.showToast('宸插紑濮嬩綔涓�')
+        this.getPlatformTask()
+      })
+    },
+    handlePass(item) {
+      uni.showModal({
+        content: '鎮ㄧ‘璁よ瀵硅浠诲姟杩涜杩囧彿鍚�',
+        success: (res) => {
+          if (res.confirm) {
+            platformOverNumber({ jobId: item.id, platformId: this.activePlatform.id }).then(res => {
+              this.showToast('杩囧彿鎴愬姛')
+              this.getPlatformTask()
+            })
+          }
+        }
+      })
+
+    },
+    handleCall(item) {
+      const { callType, activePlatform } = this
+      this.platformCallList = []
+      this.platformCallPage = 1
+      if (callType == 1) { // 鍏ュ洯鍙彿
+        platformInPark({ jobId: item.id }).then(res => {
+          this.showToast('鍙彿鎴愬姛')
+          this.getPlatformCallList()
+        })
+      } else { // 鏈堝彴鍙彿
+        platformCallNumber({ platformId: activePlatform.id, jobId: item.id }).then(res => {
+          this.showToast('鍙彿鎴愬姛')
+          this.getPlatformCallList()
+          this.getPlatformTask()
+        })
+      }
+    },
+    PlatformCallClick(callType) {
+      this.callType = callType
+      this.showPlatformCall = true
+      this.platformCallList = []
+      this.platformCallPage = 1
+      this.platformCallSearch = ''
+      this.getPlatformCallList()
+    },
+    callQuery() {
+      this.platformCallList = []
+      this.platformCallPage = 1
+      this.getPlatformCallList()
+    },
+    callScrolltolower() {
+      const { platformCallTotal, platformCallList } = this
+      if(platformCallTotal > platformCallList.length){
+        this.getPlatformCallList()
+      }
+    },
+    getPlatformCallList() {
+      const { platformCallPage, callType, activePlatform, platformCallSearch } = this
+      platformCallList({
+        model: { callType, platformId: activePlatform.id, carCodeFront: platformCallSearch },
+        capacity: 10,
+        page: platformCallPage
+      }).then(res => {
+        if (res.data && res.data.records) {
+          this.platformCallList = [ ...this.platformCallList, ...res.data.records]
+          this.platformCallTotal = res.data.total
+        }
+      })
+    },
+    transformPlatClick(item) {
+      this.transformPlatId = item.id
+    },
+    transformCancel() {
+      this.transformPlatId = ''
+      this.showTransform = false
+    },
+    transformSub() {
+      const { transformPlatId, transformId } = this
+      platformMove({ platformId: transformPlatId, jobId: transformId }).then(res => {
+        this.showToast('杞Щ鏈堝彴鎴愬姛')
+        this.transformCancel()
+        this.getPlatformTask()
+      })
+    },
+    handleTransform(item) {
+      let { activePlatform } = this
+      this.transformId = item.id
+      this.transformPlatId = activePlatform.id
       this.showTransform = true
     },
+    handleErr(item) {
+      uni.showModal({
+        content: '鎮ㄧ‘璁よ瀵硅浠诲姟杩涜寮傚父鎸傝捣鍚�',
+        success: (res) => {
+          if (res.confirm) {
+            platformErr({ jobId: item.id }).then(ress => {
+              this.showToast('寮傚父鎸傝捣鎴愬姛')
+              this.getPlatformTask()
+            })
+          }
+        }
+      })
+    }
   }
 }
 </script>
@@ -323,15 +620,24 @@
         border-radius: 8rpx;
         border: 1rpx solid #dfdede;
         text {
-          padding: 0 12rpx;
           &:nth-of-type(1) {
             background: #e9f5f6;
+            padding: 0 12rpx;
+          }
+          &:nth-of-type(2) {
+            padding-left: 4rpx;
+          }
+          &:nth-of-type(4) {
+            padding-right: 6rpx;
           }
         }
       }
       .status {
         font-size: 30rpx;
         color: $uni-color-primary;
+      }
+      .scs {
+        color: #00ba67;
       }
     }
     .line {
@@ -399,7 +705,7 @@
   }
 }
 .PlatformCallModal {
-  height: calc(100vh - 50px);
+  height: calc(100vh - 44px);
   padding: 30rpx;
   .title {
     text-align: center;
@@ -415,7 +721,7 @@
     padding: 0 30rpx;
   }
   .order_list {
-    height: calc(100% - 120rpx);
+    height: calc(100% - 140rpx);
     .scroll_view {
       height: 100%;
     }
@@ -465,8 +771,62 @@
       }
     }
   }
+  .btns {
+    display: flex;
+    align-items: center;
+    justify-content: space-between;
+    .btn {
+      width: 336rpx;
+      height: 88rpx;
+      border-radius: 44rpx;
+      border: 1rpx solid $uni-color-primary;
+      color: $uni-color-primary;
+      font-size: 32rpx;
+      display: flex;
+      justify-content: center;
+      align-items: center;
+    }
+    .active {
+      color: #fff;
+      background-color: $uni-color-primary;
+    }
+  }
+}
+.TransformModal {
+  height: 900rpx;
+  padding: 30rpx;
+  position: relative;
+  .title {
+    text-align: center;
+    margin: 0 0 30rpx;
+  }
+  .btns {
+    display: flex;
+    align-items: center;
+    justify-content: space-between;
+    position: absolute;
+    z-index: 999;
+    left: 30rpx;
+    bottom: 30rpx;
+    .btn {
+      width: 336rpx;
+      height: 88rpx;
+      border-radius: 44rpx;
+      border: 1rpx solid $uni-color-primary;
+      color: $uni-color-primary;
+      font-size: 32rpx;
+      display: flex;
+      justify-content: center;
+      align-items: center;
+    }
+    .active {
+      color: #fff;
+      margin-left: 18rpx;
+      background-color: $uni-color-primary;
+    }
+  }
   .transform_list {
-    height: 760rpx;
+    height: 660rpx;
     margin-bottom: 30rpx;
     overflow: auto;
     .line {
@@ -485,34 +845,14 @@
         color: $uni-color-primary;
         margin-left: 12rpx;
       }
+      .green {
+        color: #00ba67;
+      }
       .checked {
         width: 40rpx;
         height: 40rpx;
       }
     }
   }
-  .btns {
-    display: flex;
-    align-items: center;
-    justify-content: space-between;
-    .btn {
-      width: 336rpx;
-      height: 88rpx;
-      border-radius: 44rpx;
-      border: 1rpx solid $uni-color-primary;
-      color: $uni-color-primary;
-      font-size: 32rpx;
-      display: flex;
-      justify-content: center;
-      align-items: center;
-    }
-    .active{
-      color: #fff;
-      background-color: $uni-color-primary;
-    }
-  }
-}
-.TransformModal{
-  height: 1000rpx;
 }
 </style>
\ No newline at end of file

--
Gitblit v1.9.3