From b44b5aa1dda1d9196416cbf84e610cfd1f5b1c82 Mon Sep 17 00:00:00 2001
From: liukangdong <898885815@qq.com>
Date: 星期三, 25 九月 2024 15:54:01 +0800
Subject: [PATCH] lll

---
 admin/src/assets/images/ic_google@2x.png              |    0 
 admin/src/views/platform/LogisticsRecord/waybill.vue  |   17 
 admin/src/assets/images/login_img@2x.png              |    0 
 admin/src/views/login.vue                             |  325 +++++++++++++++++++++---
 admin/src/views/platform/queueUp.vue                  |    6 
 admin/src/views/statistics/platformRecord.vue         |    2 
 h5/api/driver.js                                      |    8 
 admin/src/views/platform/components/PlatformSign.vue  |   17 +
 admin/src/api/platform/index.js                       |    8 
 admin/src/assets/images/bg@2x.png                     |    0 
 admin/src/views/statistics/platformStatic.vue         |  140 ++++++----
 /dev/null                                             |    0 
 h5/pages/driver/taskDetail.vue                        |    2 
 admin/src/views/platform/index.vue                    |    8 
 admin/src/views/platform/components/WaybillDetail.vue |   96 ++++--
 admin/src/router/index.js                             |    4 
 h5/manifest.json                                      |    2 
 h5/pages/driver/taskConfirm.vue                       |   95 +++---
 pda/manifest.json                                     |    4 
 19 files changed, 530 insertions(+), 204 deletions(-)

diff --git a/admin/src/api/platform/index.js b/admin/src/api/platform/index.js
index f799f80..fc0eaa6 100644
--- a/admin/src/api/platform/index.js
+++ b/admin/src/api/platform/index.js
@@ -97,10 +97,18 @@
 export function platformJobPage(data) {
   return request.post('/visitsAdmin/cloudService/business/platformJob/page', data)
 }
+// 鏈堝彴浣滀笟缁熻 鍒嗛〉鍒楄〃
+export function platformWorkReportPage(data) {
+  return request.post('/visitsAdmin/cloudService/business/platform/platformWorkReportPage', data)
+}
 // 鏈堝彴璋冨害浣滀笟浠诲姟 鍒犻櫎
 export function platformJobDel(id) {
   return request.get('/visitsAdmin/cloudService/business/platformJob/delete?id=' + id)
 }
+// 鏈堝彴杩愬崟璇︽儏
+export function platformWmsJobDetail(id) {
+  return request.get('/visitsAdmin/cloudService/business/platformWmsJob/' + id)
+}
 // 鏈堝彴璋冨害浣滀笟浠诲姟 绛惧埌
 export function platformJobSign(data) {
   return request.post('/visitsAdmin/cloudService/business/platformJob/signIn', data)
diff --git a/admin/src/assets/images/bg@2x.png b/admin/src/assets/images/bg@2x.png
new file mode 100644
index 0000000..12cf9ff
--- /dev/null
+++ b/admin/src/assets/images/bg@2x.png
Binary files differ
diff --git a/admin/src/assets/images/ic_google@2x.png b/admin/src/assets/images/ic_google@2x.png
new file mode 100644
index 0000000..71a569b
--- /dev/null
+++ b/admin/src/assets/images/ic_google@2x.png
Binary files differ
diff --git a/admin/src/assets/images/login_img.jpg b/admin/src/assets/images/login_img.jpg
deleted file mode 100644
index c7024a0..0000000
--- a/admin/src/assets/images/login_img.jpg
+++ /dev/null
Binary files differ
diff --git a/admin/src/assets/images/login_img@2x.png b/admin/src/assets/images/login_img@2x.png
new file mode 100644
index 0000000..4abf7b0
--- /dev/null
+++ b/admin/src/assets/images/login_img@2x.png
Binary files differ
diff --git a/admin/src/router/index.js b/admin/src/router/index.js
index abcd0d2..0078cd0 100644
--- a/admin/src/router/index.js
+++ b/admin/src/router/index.js
@@ -67,6 +67,10 @@
     next()
     return
   }
+  if (to.name === 'login') {
+   next()
+   return
+  }
   getUserInfo()
     .then(userInfo => {
       // 濡傛灉鐢ㄦ埛涓嶅瓨鍦ㄦ潈闄�
diff --git a/admin/src/views/login.vue b/admin/src/views/login.vue
index 16a3215..652081b 100644
--- a/admin/src/views/login.vue
+++ b/admin/src/views/login.vue
@@ -1,21 +1,54 @@
 <template>
   <div class="wrap">
-    <div class="introduce">
-      <h2>{{title}}</h2>
-      <h3></h3>
-    </div>
-    <div class="login">
-      <h1>绯荤粺鐧诲綍&nbsp;/&nbsp;LOGIN IN</h1>
-      <div class="info-input">
-        <el-input v-model="username" placeholder="璇疯緭鍏ョ敤鎴峰悕" prefix-icon="el-icon-user-solid" maxlength="50" v-trim/>
-        <el-input v-model="password" placeholder="璇疯緭鍏ュ瘑鐮�" type="password" prefix-icon="eva-icon-password" maxlength="30" show-password/>
-        <div class="captcha-input">
-          <el-input v-model="captcha.value" placeholder="鍥剧墖楠岃瘉鐮�" prefix-icon="eva-icon-shield" maxlength="4" @keypress.enter.native="login"/>
-          <img v-if="!captcha.loading" :src="captcha.uri" @click="refreshCaptcha">
-          <span v-else><i class="el-icon-loading"></i></span>
+    <img src="@/assets/images/bg@2x.png" class="main_bg" alt="">
+    <div class="login_wrap">
+      <div class="login_img">
+        <div class="h3">鏅烘収鐗╂祦鍥尯瀹夋秷涓�浣撳寲绯荤粺</div>
+      </div>
+      <div class="form_wrap">
+        <!-- <div class="tabs">
+          <div class="tab active">
+            <div class="name">甯愬彿鐧诲綍</div>
+            <div class="icon"></div>
+          </div>
+          <div class="tab">
+            <div class="name">鎵嬫満鐧诲綍</div>
+            <div class="icon"></div>
+          </div>
+        </div> -->
+        <div class="df_ac">
+          <div class="label">甯愬彿</div>
+          <div class="line">
+            <el-input v-model="username" placeholder="璇疯緭鍏ュ笎鍙�" maxlength="50" v-trim />
+          </div>
+        </div>
+        <div class="df_ac">
+          <div class="label">瀵嗙爜</div>
+          <div class="line">
+            <el-input v-model="password" placeholder="璇疯緭鍏ュ瘑鐮�" type="password" maxlength="30" show-password />
+          </div>
+        </div>
+
+        <div class="df_ac">
+          <div class="label">楠岃瘉鐮�</div>
+          <div class="line">
+            <el-input v-model="captcha.value" placeholder="璇疯緭鍏ラ獙璇佺爜" maxlength="4" @keypress.enter.native="login" />
+            <img v-if="!captcha.loading" class="code_image" :src="captcha.uri" @click="refreshCaptcha">
+            <span v-else><i class="el-icon-loading"></i></span>
+          </div>
+        </div>
+        <el-button :loading="loading" type="primary" class="login_btn"
+          @click.native.prevent="login">绔嬪嵆鐧诲綍</el-button>
+        <div class="btn_wrap">
+          <el-checkbox v-model="isRemPsd">
+            <span style="font-size: 13px; font-weight: 400" class="placeholder9">璁颁綇瀵嗙爜</span>
+          </el-checkbox>
+        </div>
+        <div class="google">
+          <img src="@/assets/images/ic_google@2x.png" class="img" alt="">
+          <span class="placeholder6">鏈郴缁熸帹鑽愪娇鐢℅OOGLE娴忚鍣�</span>
         </div>
       </div>
-      <el-button :loading="loading" @click="login">鐧�&nbsp;&nbsp;褰�</el-button>
     </div>
   </div>
 </template>
@@ -23,14 +56,14 @@
 <script>
 import { mapMutations } from 'vuex'
 import { getCaptcha, loginByPassword } from '@/api/system/common'
-import Cookies from "js-cookie";
+import Cookies from "js-cookie"
 
 export default {
   name: 'Login',
-  data () {
+  data() {
     return {
       loading: false,
-      title: process.env.VUE_APP_TITLE,
+      isRemPsd: false,
       username: '',
       password: '',
       // 楠岃瘉鐮�
@@ -42,10 +75,17 @@
       }
     }
   },
+  mounted() {
+    this.username = localStorage.getItem('username') || ''
+    this.password = localStorage.getItem('password') || ''
+    const isRemPsd = localStorage.getItem('isRemPsd') || false
+    this.isRemPsd = JSON.parse(isRemPsd)
+    this.refreshCaptcha()
+  },
   methods: {
     ...mapMutations(['setUserInfo']),
     // 鐧诲綍
-    login () {
+    login() {
       if (this.loading) {
         return
       }
@@ -61,8 +101,17 @@
       })
         .then((res) => {
           // window.location.href = process.env.VUE_APP_CONTEXT_PATH
-          Cookies.set('dm_user_token',res)
-          window.location.reload()
+          if (this.isRemPsd) {
+            localStorage.setItem('username', this.username.trim())
+            localStorage.setItem('password', this.password.trim())
+            localStorage.setItem('isRemPsd', this.isRemPsd)
+          } else {
+            localStorage.removeItem('username')
+            localStorage.removeItem('password')
+            localStorage.removeItem('isRemPsd')
+          }
+          Cookies.set('dm_user_token', res)
+          this.$router.push('index')
         })
         .catch(e => {
           this.refreshCaptcha()
@@ -73,7 +122,7 @@
         })
     },
     // 鍒锋柊楠岃瘉鐮�
-    refreshCaptcha () {
+    refreshCaptcha() {
       this.captcha.loading = true
       getCaptcha()
         .then(data => {
@@ -90,7 +139,7 @@
         })
     },
     // 鐧诲綍鍓嶉獙璇�
-    __check () {
+    __check() {
       if (this.username.trim() === '') {
         this.$tip.error('璇疯緭鍏ョ敤鎴峰悕')
         return false
@@ -106,47 +155,218 @@
       return true
     }
   },
-  created () {
-    this.refreshCaptcha()
-  }
+
 }
 </script>
 
 <style scoped lang="scss">
 @import "@/assets/style/variables.scss";
+
+div {
+  box-sizing: border-box;
+}
+
 $input-gap: 30px;
+
 .wrap {
-  display: flex;
   width: 100%;
   height: 100vh;
-  background-image: url("../assets/images/login.jpg");
-  background-repeat: no-repeat;
-  background-size: auto 180%;
-  background-clip: content-box;
-  background-position: center;
+  position: relative;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+
   // 宸﹁竟浠嬬粛
-  .introduce {
-    padding-left: 10%;
+  .main_bg {
+    position: absolute;
     width: 100%;
     height: 100%;
+    left: 0;
+    top: 0;
+    z-index: -1;
+  }
+
+  .login_wrap {
+    width: 1000px;
+    height: 600px;
     box-sizing: border-box;
-    color: #fff;
-    background: rgba(0, 0, 0, 0.4);
+    background: #ffffff;
+    box-shadow: 0px 20px 60px 0px rgba(0, 0, 0, 0.11);
     display: flex;
-    flex-direction: column;
-    justify-content: center;
-    h2 {
-      font-size:34px;
-      font-style: italic;
-      font-weight: 900;
-      margin-top: 50px;
+
+    .login_img {
+      width: 500px;
+      height: 600px;
+      background: url("../assets/images/login_img@2x.png");
+      background-size: 100% 100%;
+      padding-left: 40px;
+      padding-top: 80px;
+
+      .h3 {
+        font-size: 28px;
+        font-weight: 700;
+        color: #fff;
+        margin-bottom: 26px;
+      }
+
+      .text {
+        font-size: 18px;
+        color: #fff;
+      }
     }
-    h3 {
-      font-size: 49px;
-      font-weight: 300;
-      margin: 25px 0;
+
+    .form_wrap {
+      flex: 1;
+      height: 100%;
+      background-color: #fff;
+      box-sizing: border-box;
+      /* padding: 50px 80px 20px; */
+      padding: 80px 80px 20px;
+      position: relative;
+
+      .tabs {
+        display: flex;
+        justify-content: space-evenly;
+        font-size: 20px;
+        color: #666666;
+        margin-bottom: 30px;
+
+        .tab {
+          display: flex;
+          flex-direction: column;
+          justify-content: center;
+          align-items: center;
+
+          .icon {
+            width: 36px;
+            height: 4px;
+            background: #fff;
+            border-radius: 2px;
+            margin-top: 8px;
+          }
+        }
+
+        .active {
+          font-weight: 500;
+          font-size: 24px;
+          color: #222222;
+
+          .icon {
+            background: #207FF7;
+          }
+        }
+      }
+
+      .df_ac {
+        flex-direction: column;
+        align-items: flex-start;
+      }
+
+      .title {
+        font-size: 24px;
+        margin-top: 70px;
+        margin-bottom: 48px;
+        text-align: center;
+      }
+
+      .label {
+        color: #222222;
+        margin-bottom: 18px;
+        font-size: 14px;
+        margin-right: 12px;
+        width: 42px;
+      }
+
+      &.ey {
+        .label {
+          width: 135px;
+        }
+      }
+
+      .line {
+        margin-bottom: 17px;
+        display: flex;
+        width: 100%;
+
+        .el-input {
+          height: 40px;
+
+          // font-size: 14px;
+          ::v-deep .el-input__inner {
+            height: 40px !important;
+          }
+        }
+
+        .code_image {
+          width: 100px;
+          margin-left: 10px;
+        }
+      }
+
+      .forget {
+        justify-content: space-between;
+        width: 100%;
+
+        .text {
+          cursor: pointer;
+        }
+      }
+
+      .login_btn {
+        width: 100%;
+        height: 40px;
+        background: $primary-color;
+        box-shadow: 0px 2px 8px 0px rgba(67, 94, 190, 0.15);
+        border-radius: 2px;
+        margin: 0 auto;
+        font-weight: 500;
+        font-size: 16px;
+      }
+
+      .google {
+        position: absolute;
+        left: 50%;
+        transform: translate(-50%, 0);
+        bottom: 20px;
+        display: flex;
+        align-items: center;
+        justify-content: center;
+        width: 100%;
+        font-size: 12px;
+
+        .img {
+          margin-right: 5px;
+          width: 18px;
+        }
+      }
+
+      .btn_wrap {
+        margin-top: 20px;
+      }
+
+      .agreement {
+        text-align: center;
+      }
+
+      .google {
+        position: absolute;
+        left: 50%;
+        transform: translate(-50%, 0);
+        bottom: 20px;
+        display: flex;
+        align-items: center;
+        justify-content: center;
+        width: 100%;
+        font-size: 12px;
+
+        .img {
+          margin-right: 5px;
+          width: 18px;
+        }
+      }
     }
   }
+
   // 鍙宠竟鐧诲綍
   .login {
     height: 100%;
@@ -161,40 +381,50 @@
     flex-direction: column;
     justify-content: center;
     box-sizing: border-box;
+
     h1 {
       font-size: 28px;
       font-weight: 500;
     }
+
     .info-input {
       margin-top: $input-gap;
       margin-bottom: 60px;
+
       /deep/ .el-input {
         margin-top: 30px;
+
         .el-input__inner {
           height: 50px;
           background: #F9F9F9;
           border: 1px solid transparent;
+
           &:focus {
             border: 1px solid $primary-color;
           }
         }
       }
     }
+
     // 楠岃瘉鐮佽緭鍏�
     .captcha-input {
       display: flex;
       margin-top: $input-gap;
       height: 50px;
+
       .el-input {
         width: 100%;
         margin-top: 0;
       }
-      span, img {
+
+      span,
+      img {
         width: 45%;
         height: 100%;
         flex-shrink: 0;
         margin-left: 16px;
       }
+
       span {
         display: flex;
         align-items: center;
@@ -203,6 +433,7 @@
         border-radius: 8px;
       }
     }
+
     .el-button {
       height: 50px;
       width: 100%;
diff --git a/admin/src/views/platform/LogisticsRecord/waybill.vue b/admin/src/views/platform/LogisticsRecord/waybill.vue
index a86666b..2084078 100644
--- a/admin/src/views/platform/LogisticsRecord/waybill.vue
+++ b/admin/src/views/platform/LogisticsRecord/waybill.vue
@@ -49,7 +49,7 @@
     <Pagination @size-change="handleSizeChange" @current-change="getList" :pagination="pagination" />
     <!--  -->
     <!--  -->
-    <DriverDetail v-if="isShowDriver" ref="DriverDetailRef" />
+    <WaybillDetailRef v-if="isShowDetail" ref="WaybillDetailRef" />
   </div>
 </template>
 
@@ -58,7 +58,7 @@
 import QueryForm from '@/components/common/QueryForm'
 import { platformJobPage, platformJobExport, platformJobDel } from '@/api'
 import { statusMap } from '../config'
-import DriverDetail from "@/views/task/driverDetail"
+import WaybillDetailRef from "../components/WaybillDetail.vue"
 import GlobalWindow from '@/components/common/GlobalWindow'
 import UploadFaceImg from '@/components/common/UploadFaceImg'
 import { Message } from 'element-ui'
@@ -67,14 +67,14 @@
   components: {
     Pagination,
     QueryForm,
-    DriverDetail,
+    WaybillDetailRef,
     GlobalWindow,
     UploadFaceImg
   },
   data() {
     return {
       statusMap,
-      isShowDriver: false,
+      isShowDetail: false,
       exLoading: false,
       loading: false,
       pagination: {
@@ -198,12 +198,11 @@
       this.getList()
     },
     handleDetail(row) {
-      this.isShowDriver = true
+      this.isShowDetail = true
       this.$nextTick(() => {
-        this.$refs.DriverDetailRef.id = row.id
-        this.$refs.DriverDetailRef.type = 6
-        this.$refs.DriverDetailRef.getDetail()
-        this.$refs.DriverDetailRef.isShowModal = true
+        this.$refs.WaybillDetailRef.isShowModal = true
+        this.$refs.WaybillDetailRef.id = row.id
+        this.$refs.WaybillDetailRef.getDetail()
       })
     },
     handleSizeChange(capacity) {
diff --git a/admin/src/views/platform/components/PlatformSign.vue b/admin/src/views/platform/components/PlatformSign.vue
index 79b9000..42d5007 100644
--- a/admin/src/views/platform/components/PlatformSign.vue
+++ b/admin/src/views/platform/components/PlatformSign.vue
@@ -45,7 +45,7 @@
             </div>
           </div>
           <div class="footer df_sb">
-            <div v-if="item.type != 4" class="detail">杩愬崟璇︽儏</div>
+            <div @click="handleDetail(item)" v-if="item.type != 4" class="detail">杩愬崟璇︽儏</div>
             <div v-else></div>
             <el-button type="primary" @click="handleCall(item)">绛惧埌</el-button>
           </div>
@@ -54,24 +54,28 @@
       <pagination @size-change="handleSizeChange" @current-change="handlePageChange" :pagination="pagination">
       </pagination>
     </div>
+    <WaybillDetailRef v-if="isShowDetail" ref="WaybillDetailRef" />
   </GlobalWindow>
 </template>
 
 <script>
 import GlobalWindow from '@/components/common/GlobalWindow'
 import Pagination from '@/components/common/Pagination'
+import WaybillDetailRef from "./WaybillDetail.vue"
 import { platformJobPage, platformJobSign } from '@/api'
 import { statusMap } from '../config'
 import { Message } from 'element-ui'
 export default {
   components: {
     GlobalWindow,
-    Pagination
+    Pagination,
+    WaybillDetailRef
   },
   data() {
     return {
       statusMap,
       isShowModal: false,
+      isShowDetail: false,
       subLoading: false,
       pagination: {
         total: 0,
@@ -102,6 +106,14 @@
       }).then(res => {
         this.dataList = res.records
         this.pagination.total = res.total
+      })
+    },
+    handleDetail(row) {
+      this.isShowDetail = true
+      this.$nextTick(() => {
+        this.$refs.WaybillDetailRef.isShowModal = true
+        this.$refs.WaybillDetailRef.id = row.id
+        this.$refs.WaybillDetailRef.getDetail()
       })
     },
     reset() {
@@ -214,6 +226,7 @@
       .footer {
         .detail {
           color: $primaryColor;
+          cursor: pointer;
         }
       }
     }
diff --git a/admin/src/views/platform/components/WaybillDetail.vue b/admin/src/views/platform/components/WaybillDetail.vue
index 76f726f..066ef82 100644
--- a/admin/src/views/platform/components/WaybillDetail.vue
+++ b/admin/src/views/platform/components/WaybillDetail.vue
@@ -1,39 +1,38 @@
 <template>
-  <GlobalWindow
-    title="杩愬崟璇︽儏"
-    center
-    :visible.sync="isShowModal"
-    width="420px"
-    :confirm-working="subLoading"
-    @confirm="isShowDetail = false"
-  >
+  <GlobalWindow title="杩愬崟璇︽儏" center :visible.sync="isShowModal" width="600px" :confirm-working="subLoading"
+    @confirm="isShowModal = false">
     <div class="detail_modal">
       <div class="head">
-        <div class="plate">鐨朅12122</div>
+        <div class="plate" v-if="info.plateNumber">
+          <span>{{ info.plateNumber.slice(0, 1) }}</span>
+          <span>{{ info.plateNumber.slice(1, 2) }}</span>
+          <span>路</span>
+          <span>{{ info.plateNumber.slice(2) }}</span>
+        </div>
         <div class="list">
           <div class="item">
             <span>杩愯緭鍗曞彿锛�</span>
-            <span>22222</span>
+            <span>{{ info.carryBillCode }}</span>
           </div>
           <div class="item">
             <span>鎬昏繍杈撻噺锛�</span>
-            <span>22222</span>
+            <span>{{ info.ioQty }}涓囨敮</span>
           </div>
           <div class="item">
             <span>椹鹃┒鍛橈細</span>
-            <span>22222</span>
+            <span>{{ info.driverName }} {{ info.driverPhone }}</span>
           </div>
         </div>
       </div>
       <div class="title">鍚堝悓鍒楄〃</div>
       <div class="content">
-        <div class="item">
-          <div class="contract">鍚堝悓鍙凤細1292992</div>
-          <div class="placeholder6">鏀惰揣鍦帮細address</div>
+        <div class="item" v-for="item in info.wmsJobContractVOList">
+          <div class="contract">鍚堝悓鍙凤細{{ item.contractCode }}</div>
+          <div class="placeholder6">鏀惰揣鍦帮細{{ item.address }}</div>
           <div class="list">
-            <div class="line">
-              <div class="left"><span>鐗╂枡鍚嶇О锛�</span><span>榛勫北</span></div>
-              <div class="right"><span>鏁伴噺锛�</span><span>100</span></div>
+            <div class="line" v-for="line in item.platformWmsDetailList">
+              <div class="left"><span>鐗╂枡鍚嶇О锛�</span><span>{{ line.materialName }}</span></div>
+              <div class="right"><span>鏁伴噺锛�</span><span>{{ line.ioQty }}涓囨敮</span></div>
             </div>
           </div>
         </div>
@@ -44,7 +43,7 @@
 
 <script>
 import GlobalWindow from '@/components/common/GlobalWindow'
-import { getPlatform, PlatformEdit, PlatformDel } from '@/api'
+import { platformWmsJobDetail } from '@/api'
 export default {
   components: {
     GlobalWindow
@@ -53,23 +52,16 @@
     return {
       isShowModal: false,
       subLoading: false,
-      param: {}
+      info: {},
+      id: ''
 
     }
   },
   methods: {
-    handleSub() {
-      const { param } = this
-      this.subLoading = true
-      PlatformEdit({
-        ...param
-      }).then(res => {
-        this.subLoading = false
-        this.isShowEdit = false
-        this.$tip.success('鎻愪氦鎴愬姛')
-        this.getList()
-      }, () => {
-        this.subLoading = false
+    getDetail() {
+      const { id } = this
+      platformWmsJobDetail(id).then(res => {
+        this.info = res
       })
     }
   }
@@ -79,31 +71,51 @@
 
 <style lang="scss" scoped>
 @import "@/assets/style/variables.scss";
+
 .detail_modal {
   font-size: 12px;
   color: #282828;
+
   .head {
     background: rgba(39, 155, 170, 0.05);
     border-radius: 4px;
     border: 1px solid #dfe2e8;
     padding: 16px;
+
     .plate {
-      width: 90px;
-      text-align: center;
+      display: flex;
+      font-weight: 600;
+      height: 30px;
+      line-height: 30px;
       font-size: 15px;
       color: #111111;
-      padding: 4px 5px;
-      font-weight: 700;
-      border: 1px solid #279baa;
       background-color: #fff;
+      border-radius: 4px;
+      border: 1px solid $primaryColor;
+      padding-right: 4px;
+      width:106px;
+      span {
+        &:nth-of-type(1) {
+          background: $primaryColor;
+          padding: 0 8px;
+          color: #fff;
+        }
+
+        &:nth-of-type(2) {
+          padding-left: 4px;
+        }
+      }
     }
+
     .list {
       display: flex;
       flex-wrap: wrap;
       margin-top: 16px;
+
       .item {
         width: 50%;
         margin-bottom: 8px;
+
         span {
           &:nth-child(1) {
             color: #666666;
@@ -112,35 +124,43 @@
       }
     }
   }
+
   .title {
     margin: 16px 0;
     font-weight: 500;
     font-size: 16px;
     color: #222222;
   }
+
   .content {
     .item {
       border-radius: 4px;
       border: 1px solid #dfe2e8;
       padding: 16px;
+      margin-bottom: 10px;
+
       .list {
         background: #f7f7f7;
         border-radius: 4px;
         padding: 12px 16px;
         margin-top: 10px;
       }
+
       .contract {
         font-weight: 500;
         font-size: 15px;
         color: #279baa;
         margin-bottom: 4px;
       }
+
       .line {
         display: flex;
         margin-bottom: 8px;
+
         &:nth-last-child(1) {
           margin: 0;
         }
+
         div {
           span {
             &:nth-child(1) {
@@ -148,9 +168,11 @@
             }
           }
         }
+
         .left {
           flex: 6;
         }
+
         .right {
           flex: 4;
         }
diff --git a/admin/src/views/platform/index.vue b/admin/src/views/platform/index.vue
index 890d23c..e82f7a4 100644
--- a/admin/src/views/platform/index.vue
+++ b/admin/src/views/platform/index.vue
@@ -94,7 +94,7 @@
             </div>
             <div class="line">
               <div v-if="task.type != 4" class="left">
-                <span class="primaryColor pointer" @click="handleDetail">杩愬崟璇︽儏</span>
+                <span class="primaryColor pointer" @click="handleDetail(task)">杩愬崟璇︽儏</span>
               </div>
               <div v-else></div>
               <div class="right">
@@ -320,10 +320,12 @@
         this.$refs.PlatformQueuingRef.title = item.name
       })
     },
-    handleDetail() {
+    handleDetail(row) {
       this.isShowDetail = true
       this.$nextTick(() => {
         this.$refs.WaybillDetailRef.isShowModal = true
+        this.$refs.WaybillDetailRef.id = row.id
+        this.$refs.WaybillDetailRef.getDetail()
       })
     },
     getList() {
@@ -483,14 +485,12 @@
               border-radius: 4px;
               border: 1px solid $primaryColor;
               padding-right: 4px;
-
               span {
                 &:nth-of-type(1) {
                   background: $primaryColor;
                   padding: 0 8px;
                   color: #fff;
                 }
-
                 &:nth-of-type(2) {
                   padding-left: 4px;
                 }
diff --git a/admin/src/views/platform/queueUp.vue b/admin/src/views/platform/queueUp.vue
index 4b2d2f3..329fef3 100644
--- a/admin/src/views/platform/queueUp.vue
+++ b/admin/src/views/platform/queueUp.vue
@@ -43,9 +43,9 @@
         </template>
       </el-table-column>
       <el-table-column prop="signDate" label="绛惧埌鏃堕棿" min-width="150" />
-      <el-table-column label="鎿嶄綔" width="100" fixed="right">
+      <el-table-column label="鎿嶄綔" align="center" width="100" fixed="right">
         <template slot-scope="{ row }">
-          <el-button type="text" @click="handleDetail(row)" v-permissions="['business:company:update']">杩愬崟璇︽儏</el-button>
+          <el-button v-if="row.type != 4" type="text" @click="handleDetail(row)" v-permissions="['business:company:update']">杩愬崟璇︽儏</el-button>
         </template>
       </el-table-column>
     </el-table>
@@ -169,6 +169,8 @@
       this.isShowDetail = true
       this.$nextTick(() => {
         this.$refs.WaybillDetailRef.isShowModal = true
+        this.$refs.WaybillDetailRef.id = row.id
+        this.$refs.WaybillDetailRef.getDetail()
       })
     },
   }
diff --git a/admin/src/views/statistics/platformRecord.vue b/admin/src/views/statistics/platformRecord.vue
index a7edbbe..1d71124 100644
--- a/admin/src/views/statistics/platformRecord.vue
+++ b/admin/src/views/statistics/platformRecord.vue
@@ -55,6 +55,7 @@
             filed: 'platformGroupId',
             type: 'select',
             label: '鏈堝彴缁�',
+            placeholder: '鍏ㄩ儴鏈堝彴缁�',
             options: []
           },
           {
@@ -92,6 +93,7 @@
             label: i.name
           }
         })
+        // this.queryFormConfig.formItems[1].options.unshift({ value: '', label: '鍏ㄩ儴鏈堝彴缁�' })
       })
     },
     getList(page) {
diff --git a/admin/src/views/statistics/platformStatic.vue b/admin/src/views/statistics/platformStatic.vue
index 4e69412..4af9ec1 100644
--- a/admin/src/views/statistics/platformStatic.vue
+++ b/admin/src/views/statistics/platformStatic.vue
@@ -1,108 +1,138 @@
 <template>
   <div class="main_app">
-    <QueryForm
-      v-model="filters"
-      :query-form-config="queryFormConfig"
-      @handleQuery="getList(1)"
-      @clear="clear"
-    />
+    <QueryForm v-model="filters" :query-form-config="queryFormConfig" @handleQuery="getList(1)" @clear="clear">
+      <template #fastdate>
+        <el-radio-group v-model="filters.fastdate" size="small" @input="changeRadio">
+          <el-radio-button label="0">褰撳ぉ</el-radio-button>
+          <el-radio-button label="6">杩�7澶�</el-radio-button>
+          <el-radio-button label="29">杩�30澶�</el-radio-button>
+        </el-radio-group>
+      </template>
+    </QueryForm>
     <el-table v-loading="loading" :data="list" stripe>
-      <el-table-column
-        prop="name"
-        label="鏈堝彴鍚嶇О"
-        min-width="100"
-        show-overflow-tooltip
-      />
-      <el-table-column
-        prop="name"
-        label="鏈堝彴缁�"
-        min-width="100"
-        show-overflow-tooltip
-      />
-      <el-table-column
-        prop="name"
-        label="鍋滈潬娆℃暟(娆�)"
-        min-width="100"
-        show-overflow-tooltip
-      />
-      <el-table-column
-        prop="name"
-        label="宸ヤ綔鏃堕暱"
-        min-width="100"
-        show-overflow-tooltip
-      />
-      <el-table-column
-        prop="name"
-        label="鏈堝彴浣跨敤鐜�"
-        min-width="100"
-        show-overflow-tooltip
-      />
+      <el-table-column prop="name" label="鏈堝彴鍚嶇О" min-width="100" show-overflow-tooltip />
+      <el-table-column prop="groupName" label="鏈堝彴缁�" min-width="100" show-overflow-tooltip />
+      <el-table-column prop="stopCount" label="鍋滈潬娆℃暟(娆�)" min-width="100" show-overflow-tooltip />
+      <el-table-column prop="workCountTime" label="宸ヤ綔鏃堕暱" min-width="100" show-overflow-tooltip />
+      <el-table-column prop="useRata" label="鏈堝彴浣跨敤鐜�" min-width="100" show-overflow-tooltip />
     </el-table>
-    <pagination
-      @size-change="handleSizeChange"
-      @current-change="getList"
-      :pagination="pagination"
-    />
+    <!-- <pagination @size-change="handleSizeChange" @current-change="getList" :pagination="pagination" /> -->
   </div>
 </template>
 
 <script>
 import Pagination from '@/components/common/Pagination'
 import QueryForm from '@/components/common/QueryForm'
+import dayjs from 'dayjs'
+import { platformWorkReportPage, getPlatformGroupList } from '@/api'
 export default {
   components: {
     Pagination,
     QueryForm
   },
-  data () {
+  data() {
     return {
       loading: false,
       pagination: {
-        capacity: 10,
-        page: 1
+        pageSize: 10,
+        page: 1,
+        total: 0
       },
-      filters: {},
+      filters: {
+        fastdate: 0,
+        selDate: []
+      },
       list: [],
       total: 0,
       queryFormConfig: {
         formItems: [
           {
-            filed: 'aaaa',
+            filed: 'name',
             type: 'input',
             label: '鏈堝彴鍚嶇О'
           },
           {
-            filed: 'bbb',
+            filed: 'groupId',
             type: 'select',
             label: '鏈堝彴缁�',
+            placeholder: '鍏ㄩ儴鏈堝彴缁�',
             options: []
+          },
+          {
+            type: 'slot',
+            filed: 'fastdate',
+            label: ''
           },
           {
             filed: 'selDate',
             type: 'daterange',
-            label: '閫夋嫨鏃堕棿'
+            clearable: false,
+            label: '鏃ユ湡'
           }
         ],
         online: true
       }
     }
   },
+  created() {
+    this.changeRadio('0')
+    this.getList()
+  },
   methods: {
-    handleSub () {
+    changeRadio(day) {
+      const arr = [dayjs().subtract(day, 'day').format('YYYY-MM-DD'), dayjs().format('YYYY-MM-DD')]
+      this.$set(this.filters, 'selDate', arr)
+      this.getList()
+    },
+    handleSub() {
       this.$refs.ruleForm.validate((valid) => {
         if (valid) {
           alert('submit!')
         }
       })
     },
-    getList (page) { },
-    clear () { },
-    handleSizeChange (capacity) {
-      this.pagination.capacity = capacity
+    getGroupList() {
+      getPlatformGroupList({ queryData: 0, queryType: 0 }).then(res => {
+        this.queryFormConfig.formItems[1].options = res.map(i => {
+          return {
+            value: i.id,
+            label: i.name
+          }
+        })
+        // this.queryFormConfig.formItems[1].options.unshift({ value: '', label: '鍏ㄩ儴鏈堝彴缁�' })
+      })
+    },
+    getList(page) {
+      const { pagination, filters } = this
+      this.loading = true
+      platformWorkReportPage({
+        ...filters,
+        queryDateStart: filters.selDate && filters.selDate.length > 0 ? filters.selDate[0] : null,
+        queryDateEnd: filters.selDate && filters.selDate.length > 0 ? filters.selDate[1] : null,
+      }).then(res => {
+        this.loading = false
+        this.list = res || []
+        this.list.forEach(item => {
+          item.useRata = item.useRata + '%'
+          item.workCountTime = item.workCountTime + '鏃�'
+          // item.workTime = dayjs.duration(item.workTime, 'seconds').format('H鏃秏鍒唖绉�')
+        })
+      }, () => {
+        this.loading = false
+      })
+    },
+    clear() {
+      this.filters = {
+        fastdate: 0,
+        selDate: []
+      }
+      this.changeRadio('0')
+    },
+    handleSizeChange(capacity) {
+      this.pagination.pageSize = capacity
     }
   }
 }
 </script>
 
-<style>
-</style>
+<style></style>
diff --git a/h5/api/driver.js b/h5/api/driver.js
index 22aaa04..f0c8f77 100644
--- a/h5/api/driver.js
+++ b/h5/api/driver.js
@@ -112,4 +112,12 @@
     method: 'post',
     data
   })
+}
+//  wms杩愬崟璇︽儏
+export const wmsJobDetail = (data) => {
+  return http({
+    url: 'visitsAdmin/cloudService/web/driverPlatform/wmsJobDetail',
+    method: 'get',
+    data
+  })
 }
\ No newline at end of file
diff --git a/h5/manifest.json b/h5/manifest.json
index 0688118..8563963 100644
--- a/h5/manifest.json
+++ b/h5/manifest.json
@@ -92,7 +92,7 @@
                 "/admin_interface" : {
                     // 杩欎釜瀛楁鍚嶉渶涓庝綘閰嶇疆鐨刡asePrefixUrl涓�鑷达紝绯荤粺璇嗗埆鍒板甫鏈�/dev-api璇锋眰鐨勫湴鍧�鏃讹紝浼氬湪鍓嶉潰鎷兼帴涓婁唬鐞嗘湇鍔″櫒鍦板潃
                     // "target" : "http://172.20.10.7:10010", // 浠g悊鏈嶅姟鍣ㄥ煙鍚嶆垨IP鍦板潃
-                    "target" : "http://192.168.0.103:10010", // 浠g悊鏈嶅姟鍣ㄥ煙鍚嶆垨IP鍦板潃
+                    "target" : "http://192.168.0.100:10010", // 浠g悊鏈嶅姟鍣ㄥ煙鍚嶆垨IP鍦板潃
                     // "target" : "http://10.50.250.178:8088/gateway_interface", // 浠g悊鏈嶅姟鍣ㄥ煙鍚嶆垨IP鍦板潃
                     "changeOrigin" : true, // 鍏佽璺ㄥ煙 
                     "pathRewrite" : {
diff --git a/h5/pages/driver/taskConfirm.vue b/h5/pages/driver/taskConfirm.vue
index dd156a3..97860e4 100644
--- a/h5/pages/driver/taskConfirm.vue
+++ b/h5/pages/driver/taskConfirm.vue
@@ -18,8 +18,8 @@
 			</view>
 			<view class="line">
 				<view class="label">杩愯緭鍗曞彿</view>
-				<view class="value" @click="showDetail = true">
-					<text class="waybill_num">{{ param.contractNum }}</text>
+				<view class="value" @click="wmsDetail">
+					<text class="waybill_num">{{ param.billCode }}</text>
 					<text class="btn">杩愬崟璇︽儏</text>
 				</view>
 			</view>
@@ -59,49 +59,45 @@
 		<u-popup :show="showDetail" :round="10" :safeAreaInsetBottom="true" closeOnClickOverlay :closeable="true" mode="bottom" @close="showDetail = false">
 			<view class="detail_modal">
 				<view class="modal_title">杩愬崟璇︽儏</view>
-				<view class="id_card">
-					<view class="last">鐨�</view>
-					<view class="name">AD1111</view>
+				<view v-if="wmsInfo.plateNumber" class="id_card">
+					<text>{{ wmsInfo.plateNumber.slice(0, 1) }}</text>
+					<text>{{ wmsInfo.plateNumber.slice(1, 2) }}</text>
+					<text>路</text>
+					<text>{{ wmsInfo.plateNumber.slice(2) }}</text>
 				</view>
 				<!--  -->
 				<view class="info">
 					<view class="line">
 						<view class="label">杩愯緭鍗曞彿</view>
-						<view class="value">2222</view>
+						<view class="value">{{ wmsInfo.carryBillCode }}</view>
 					</view>
 					<view class="line">
 						<view class="label">椹鹃┒鍛�</view>
-						<view class="value">2222</view>
+						<view class="value">{{ wmsInfo.driverName }} {{ wmsInfo.driverPhone }}</view>
 					</view>
 					<view class="line">
 						<view class="label">鎬昏繍杈撻噺</view>
-						<view class="value">2222</view>
+						<view class="value">{{ wmsInfo.ioQty }}涓囨敮</view>
 					</view>
 					<view class="line">
 						<view class="label">杩愯緭鍏徃</view>
-						<view class="value">2222</view>
+						<view class="value">{{ wmsInfo.carrierName }}</view>
 					</view>
 				</view>
 				<view class="separate"></view>
-				<view class="contract_list">
-					<view class="title">鍚堝悓鍙凤細111</view>
-					<view class="address">aadd</view>
+				<view class="contract_list" v-for="item in wmsInfo.wmsJobContractVOList">
+					<view class="title">鍚堝悓鍙凤細{{ item.contractCode }}</view>
+					<view class="address">鏀惰揣鍦帮細{{ item.address }}</view>
 					<view class="list">
-						<view class="line">
-							<view class="label">鐗╂枡锛�</view>
-							<view class="value">榛勫北榛戦┈</view>
-						</view>
-						<view class="line">
-							<view class="label">鏁伴噺锛�</view>
-							<view class="value">榛勫北榛戦┈</view>
-						</view>
-						<view class="line">
-							<view class="label">鐗╂枡锛�</view>
-							<view class="value">榛勫北榛戦┈</view>
-						</view>
-						<view class="line">
-							<view class="label">鏁伴噺锛�</view>
-							<view class="value">榛勫北榛戦┈</view>
+						<view class="item" v-for="line in item.platformWmsDetailList">
+							<view class="line">
+								<view class="label">鐗╂枡锛�</view>
+								<view class="value">{{ line.materialName }}</view>
+							</view>
+							<view class="line">
+								<view class="label">鏁伴噺锛�</view>
+								<view class="value">{{ line.ioQty }}</view>
+							</view>
 						</view>
 					</view>
 				</view>
@@ -115,7 +111,7 @@
 
 <script>
 import keyboardInput from '@/components/keyboard-input/keyboard-input.vue';
-import { driverTaskJobDetail, driverConfirmTask } from '@/api';
+import { driverTaskJobDetail, driverConfirmTask, wmsJobDetail } from '@/api';
 import dayjs from 'dayjs'
 export default {
 	components: {
@@ -124,6 +120,7 @@
 	data() {
 		return {
 			param: {},
+			wmsInfo: {},
 			showDate: false,
 			showDetail: false,
 			minDate: '',
@@ -155,6 +152,13 @@
 			}).then(ress => {
 				this.param = { ...ress.data, carCodeBack: '' };
 			});
+		},
+		wmsDetail() {
+			const { param } = this
+			wmsJobDetail({ id: param.id }).then(res => {
+				this.wmsInfo = res.data
+				this.showDetail = true
+			})
 		},
 		dateEnter(e) {
 			setTimeout(() => {
@@ -435,26 +439,29 @@
 	}
 
 	.id_card {
-		border-radius: 8rpx;
 		display: flex;
+		font-weight: 600;
 		height: 60rpx;
 		line-height: 60rpx;
-		font-weight: 600;
-		font-size: 36rpx;
+		font-size: 32rpx;
 		color: #111111;
-		text-align: center;
-		margin-bottom: 30rpx;
-
-		.last {
-			background: #e9f5f6;
-			width: 60rpx;
-			border-radius: 8rpx 0rpx 0rpx 8rpx;
-			border: 1rpx solid #dfdede;
-		}
-
-		.name {
-			width: 186rpx;
-			border: 1rpx solid #dfdede;
+		border-radius: 8rpx;
+		border: 1rpx solid #dfdede;
+		width: 220rpx;
+		margin-bottom: 15rpx;
+		text {
+			&:nth-of-type(1) {
+				background: #e9f5f6;
+				padding: 0 12rpx;
+			}
+		
+			&:nth-of-type(2) {
+				padding-left: 10rpx;
+			}
+		
+			&:nth-of-type(4) {
+				padding-right: 6rpx;
+			}
 		}
 	}
 }
diff --git a/h5/pages/driver/taskDetail.vue b/h5/pages/driver/taskDetail.vue
index 6f15732..9d23139 100644
--- a/h5/pages/driver/taskDetail.vue
+++ b/h5/pages/driver/taskDetail.vue
@@ -27,7 +27,7 @@
 				<view class="line">
 				  <view class="label">杩愯緭鍗曞彿</view>
 				  <view class="value" @click="showDetail = true">
-				    <text class="waybill_num">{{param.code}}</text>
+				    <text class="waybill_num">{{param.billCode}}</text>
 				    <text class="btn">杩愬崟璇︽儏</text>
 				  </view>
 				</view>
diff --git a/pda/manifest.json b/pda/manifest.json
index 9b5c102..c6e620f 100644
--- a/pda/manifest.json
+++ b/pda/manifest.json
@@ -18,8 +18,8 @@
 			"proxy": {
 				"/gateway_interface": {
 					// 杩欎釜瀛楁鍚嶉渶涓庝綘閰嶇疆鐨刡asePrefixUrl涓�鑷达紝绯荤粺璇嗗埆鍒板甫鏈�/dev-api璇锋眰鐨勫湴鍧�鏃讹紝浼氬湪鍓嶉潰鎷兼帴涓婁唬鐞嗘湇鍔″櫒鍦板潃
-					"target" : "http://10.50.250.178:8088/gateway_interface", // 浠g悊鏈嶅姟鍣ㄥ煙鍚嶆垨IP鍦板潃
-					// "target": "http://192.168.0.139:10010", // 浠g悊鏈嶅姟鍣ㄥ煙鍚嶆垨IP鍦板潃
+					// "target" : "http://10.50.250.178:8088/gateway_interface", // 浠g悊鏈嶅姟鍣ㄥ煙鍚嶆垨IP鍦板潃
+					"target": "http://192.168.0.100:10010", // 浠g悊鏈嶅姟鍣ㄥ煙鍚嶆垨IP鍦板潃
 					"changeOrigin": true, // 鍏佽璺ㄥ煙 
 					"pathRewrite": {
 						"^/gateway_interface": "" // 閲嶅啓鍦板潃锛屽鏋滃疄闄呮帴鍙d腑鏄笉甯�/dev-api锛岄渶瑕佸皢杩欎釜鍓嶇紑缃┖锛屽洜涓鸿繖涓墠缂�鍙槸涓轰簡璇嗗埆鐢紝璇嗗埆瀹屼箣鍚庡氨娌$敤浜�

--
Gitblit v1.9.3