ll
liukangdong
2024-09-24 e1c24d5ac92e89b214efe5a313b31459ddab537f
pda/pages/index/center.vue
@@ -1,47 +1,23 @@
<template>
  <view class="main_app">
    <view class="main_content">
      <view class="title" @click="showPlatformgroup = true"
        >{{ activePlatformGroup.name
        }}<u-icon
          name="arrow-down"
          size="20"
          class="ml12"
          color="#999999"
        ></u-icon
      ></view>
         <view class="title" @click="showPlatformgroup = true">{{ activePlatformGroup.name
        }}<u-icon name="arrow-down" size="20" class="ml12" color="#999999"></u-icon></view>
      <view class="platform_list">
        <view
          class="item"
          :class="{ active: item.id === activePlatform.id }"
          v-for="(item, index) in activePlatformGroup.platformList"
          :key="index"
          @click="platformClick(item)"
          >{{ item.name }}</view
        >
            <view class="item" :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>{{ platformTaskInfo.workNum }}</text></view
        >
        <view class="status"
          >已叫:<text>{{ platformTaskInfo.callNum }}</text></view
        >
        <view class="status"
          >等待:<text>{{ platformTaskInfo.waitNum }}</text></view
        >
        <view class="status"
          >异常:<text>{{ platformTaskInfo.exceptionNum }}</text></view
        >
            <view class="status">作业:<text>{{ platformTaskInfo.workNum }}</text></view>
            <view class="status">已叫:<text>{{ platformTaskInfo.callNum }}</text></view>
            <view class="status">等待:<text>{{ platformTaskInfo.waitNum }}</text></view>
            <view class="status">异常:<text>{{ platformTaskInfo.exceptionNum }}</text></view>
      </view>
    </view>
    <!--  -->
    <view style="padding-bottom: 140rpx">
      <view
        v-for="item in platformTaskInfo.platformJobList"
        :key="item.id"
        class="platform_ing"
      >
         <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>
@@ -49,18 +25,10 @@
            <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 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="line" v-if="item.type == 4">
          <text class="label">合同单号</text>
@@ -73,9 +41,7 @@
        </view>
        <view class="line">
          <text class="label">驾驶员</text>
          <text class="value"
            >{{ item.driverName }} {{ item.drivierPhone }}</text
          >
               <text class="value">{{ item.driverName }} {{ item.drivierPhone }}</text>
        </view>
        <view class="line">
          <text class="label">总运输量</text>
@@ -86,31 +52,12 @@
          <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 == 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 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 v-if="!platformTaskInfo.platformJobList || platformTaskInfo.platformJobList.length == 0" class="empty_wrap">
@@ -124,38 +71,18 @@
      <view class="btn active" @click="PlatformCallClick(2)">月台叫号</view>
    </view>
    <!-- 叫号 -->
    <u-popup
      :show="showPlatformCall"
      closeable
      safeAreaInsetTop
      round="10"
      @close="showPlatformCall = false"
    >
      <view
        class="PlatformCallModal"
        :style="{ height: 'calc(100vh - ' + windowTop + 'px)' }"
      >
        <view class="title" v-if="callType == 2"
          >月台叫号({{ activePlatform.name }})</view
        >
      <u-popup :show="showPlatformCall" closeable safeAreaInsetTop round="10" @close="showPlatformCall = false">
         <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"
          />
               <input v-model="platformCallSearch" type="text" placeholder="搜索车辆牌照" placeholder-class="placeholder9"
                  @confirm="callQuery" />
        </view>
        <view class="order_list">
          <scroll-view scroll-y="true" @scrolltolower="callScrolltolower" class="scroll_view">
            <view
              class="platform_ing"
              v-for="item in platformCallList"
              :key="item.id"
            >
                  <view class="platform_ing" v-for="item in platformCallList" :key="item.id">
              <view class="head">
                <view v-if="item.carCodeFront" class="code">
                  <text>{{ item.carCodeFront.slice(0, 1) }}</text>
@@ -174,15 +101,11 @@
              <view class="line" v-else>
                <text class="label">运输单号</text>
                <text class="value">{{ item.code }}</text>
                <text class="primaryColor" @click="handleDetail()"
                  >运单详情</text
                >
                        <text class="primaryColor" @click="handleDetail()">运单详情</text>
              </view>
              <view class="line">
                <text class="label">驾驶员</text>
                <text class="value"
                  >{{ item.driverName }} {{ item.drivierPhone }}</text
                >
                        <text class="value">{{ item.driverName }} {{ item.drivierPhone }}</text>
              </view>
              <view class="line">
                <text class="label">总运输量</text>
@@ -201,17 +124,8 @@
      </view>
    </u-popup>
    <!-- 运单详情 -->
    <u-popup
      :show="showDetail"
      closeable
      safeAreaInsetTop
      round="10"
      @close="showDetail = false"
    >
      <view
        class="PlatformCallModal"
        :style="{ height: 'calc(100vh - ' + windowTop + 'px)' }"
      >
      <u-popup :show="showDetail" closeable safeAreaInsetTop round="10" @close="showDetail = false">
         <view class="PlatformCallModal" :style="{ height: 'calc(100vh - ' + windowTop + 'px)' }">
        <view class="title">运单详情</view>
        <view class="platform_ing" style="padding: 0">
          <view class="head">
@@ -242,53 +156,38 @@
            <view class="orderId">合同编号:{{ 111 }}</view>
            <view class="addr">收货地:{{ 111 }}</view>
            <view class="content">
              <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
              >
                     <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>
            </view>
          </view>
        </view>
      </view>
    </u-popup>
    <!-- 转移月台 -->
    <u-popup
      :show="showTransform"
      closeable
      safeAreaInsetTop
      round="10"
      @close="showTransform = false"
    >
      <u-popup :show="showTransform" closeable safeAreaInsetTop round="10" @close="showTransform = false">
      <view class="TransformModal">
        <view class="title">转移月台</view>
        <view class="transform_list">
          <view
            class="line"
            @click="transformPlatClick(item)"
            v-for="item in activePlatformGroup.platformList"
            :key="item.id"
          >
               <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 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">
@@ -298,13 +197,8 @@
      </view>
    </u-popup>
    <!--  -->
    <u-picker
      :show="showPlatformgroup"
      keyName="name"
      :columns="[platformGroupList]"
      @cancel="showPlatformgroup = false"
      @confirm="platConfirm"
    ></u-picker>
      <u-picker :show="showPlatformgroup" keyName="name" :columns="[platformGroupList]"
         @cancel="showPlatformgroup = false" @confirm="platConfirm"></u-picker>
  </view>
</template>
@@ -321,7 +215,9 @@
  platformErr,
  platformOverNumber
} from '@/api'
import { statusMap } from '@/utils/config.js'
   import {
      statusMap
   } from '@/utils/config.js'
import dayjs from 'dayjs'
import duration from 'dayjs/plugin/duration'
dayjs.extend(duration)
@@ -373,7 +269,9 @@
      })
    },
    getPlatformTask() {
      getPlatformWorkData({ platformId: this.activePlatform.id }).then(res => {
            getPlatformWorkData({
               platformId: this.activePlatform.id
            }).then(res => {
        this.platformTaskInfo = res.data
        this.circulInitTaskList()
        setInterval(() => {
@@ -382,7 +280,8 @@
      })
    },
    circulInitTaskList() {
      if (this.platformTaskInfo && this.platformTaskInfo.platformJobList && this.platformTaskInfo.platformJobList.length > 0) {
            if (this.platformTaskInfo && this.platformTaskInfo.platformJobList && this.platformTaskInfo.platformJobList
               .length > 0) {
        let time = new Date()
        this.platformTaskInfo.platformJobList.forEach(item => {
          if (item.callDate) {
@@ -422,23 +321,30 @@
      this.showDetail = true
    },
    handleFinish(item) {
      finishWork({ jobId: item.id }).then(res => {
            finishWork({
               jobId: item.id
            }).then(res => {
        this.showToast('完成作业')
        this.getPlatformTask()
      })
    },
    handleWork(item) { // 开始作业
      beginWork({ jobId: item.id }).then(res => {
            beginWork({
               jobId: item.id
            }).then(res => {
        this.showToast('已开始作业')
        this.getPlatformTask()
      })
    },
    handlePass(item) {
      uni.showModal({
        content: '您确认要对该任务进行过号吗',
               content: `确认 ${item.carCodeFront}置为过号吗?过号后,需要重新签到才能进入园区`,
        success: (res) => {
          if (res.confirm) {
            platformOverNumber({ jobId: item.id, platformId: this.activePlatform.id }).then(res => {
                     platformOverNumber({
                        jobId: item.id,
                        platformId: this.activePlatform.id
                     }).then(res => {
              this.showToast('过号成功')
              this.getPlatformTask()
            })
@@ -448,16 +354,24 @@
    },
    handleCall(item) {
      const { callType, activePlatform } = this
            const {
               callType,
               activePlatform
            } = this
      this.platformCallList = []
      this.platformCallPage = 1
      if (callType == 1) { // 入园叫号
        platformInPark({ jobId: item.id }).then(res => {
               platformInPark({
                  jobId: item.id
               }).then(res => {
          this.showToast('叫号成功')
          this.getPlatformCallList()
        })
      } else { // 月台叫号
        platformCallNumber({ platformId: activePlatform.id, jobId: item.id }).then(res => {
               platformCallNumber({
                  platformId: activePlatform.id,
                  jobId: item.id
               }).then(res => {
          this.showToast('叫号成功')
          this.getPlatformCallList()
          this.getPlatformTask()
@@ -478,15 +392,27 @@
      this.getPlatformCallList()
    },
    callScrolltolower() {
      const { platformCallTotal, platformCallList } = this
            const {
               platformCallTotal,
               platformCallList
            } = this
      if(platformCallTotal > platformCallList.length){
        this.getPlatformCallList()
      }
    },
    getPlatformCallList() {
      const { platformCallPage, callType, activePlatform, platformCallSearch } = this
            const {
               platformCallPage,
               callType,
               activePlatform,
               platformCallSearch
            } = this
      platformCallList({
        model: { callType, platformId: activePlatform.id, carCodeFront: platformCallSearch },
               model: {
                  callType,
                  platformId: activePlatform.id,
                  carCodeFront: platformCallSearch
               },
        capacity: 10,
        page: platformCallPage
      }).then(res => {
@@ -504,15 +430,23 @@
      this.showTransform = false
    },
    transformSub() {
      const { transformPlatId, transformId } = this
      platformMove({ platformId: transformPlatId, jobId: transformId }).then(res => {
            const {
               transformPlatId,
               transformId
            } = this
            platformMove({
               platformId: transformPlatId,
               jobId: transformId
            }).then(res => {
        this.showToast('转移月台成功')
        this.transformCancel()
        this.getPlatformTask()
      })
    },
    handleTransform(item) {
      let { activePlatform } = this
            let {
               activePlatform
            } = this
      this.transformId = item.id
      this.transformPlatId = activePlatform.id
      this.showTransform = true
@@ -522,7 +456,9 @@
        content: '您确认要对该任务进行异常挂起吗',
        success: (res) => {
          if (res.confirm) {
            platformErr({ jobId: item.id }).then(ress => {
                     platformErr({
                        jobId: item.id
                     }).then(ress => {
              this.showToast('异常挂起成功')
              this.getPlatformTask()
            })
@@ -541,12 +477,15 @@
  color: #333333;
  background: url("@/static/bg_yuetai@2x.png") no-repeat;
  background-size: 100% 100%;
  .main_content {
    background-color: #fff;
    padding: 30rpx;
    .platform_list {
      display: flex;
      flex-wrap: wrap;
      .item {
        width: 210rpx;
        height: 80rpx;
@@ -559,16 +498,19 @@
        color: #222222;
        margin-bottom: 20rpx;
        margin-right: 30rpx;
        &:nth-of-type(3n) {
          margin-right: 0;
        }
      }
      .active {
        color: #fff;
        background-color: $uni-color-primary;
        border-color: $uni-color-primary;
      }
    }
    .status_wrap {
      display: flex;
      align-items: center;
@@ -579,11 +521,14 @@
      background: #ffffff;
      box-shadow: 0rpx 0rpx 8rpx 0rpx rgba(0, 0, 0, 0.18);
      border-radius: 8rpx;
      .status {
        color: #666666;
        text {
          color: #111111;
        }
        &:nth-last-child(1) {
          text {
            color: #ed4545;
@@ -591,6 +536,7 @@
        }
      }
    }
    .title {
      font-weight: 500;
      font-size: 32rpx;
@@ -601,15 +547,18 @@
      justify-content: center;
    }
  }
  .platform_ing {
    margin-top: 20rpx;
    padding: 30rpx;
    background-color: #fff;
    .head {
      display: flex;
      justify-content: space-between;
      align-items: center;
      margin-bottom: 30rpx;
      .code {
        display: flex;
        font-weight: 600;
@@ -619,41 +568,51 @@
        color: #111111;
        border-radius: 8rpx;
        border: 1rpx solid #dfdede;
        text {
          &: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 {
      display: flex;
      margin-bottom: 20rpx;
      .label {
        width: 144rpx;
        color: #666666;
      }
      .value {
        flex: 1;
      }
    }
    .btns {
      display: flex;
      justify-content: flex-end;
      .btn {
        width: 210rpx;
        height: 76rpx;
@@ -664,6 +623,7 @@
        border: 1rpx solid #999999;
        margin-left: 20rpx;
      }
      .active {
        background-color: $uni-color-primary;
        color: #fff;
@@ -671,10 +631,12 @@
      }
    }
  }
  .empty {
    width: 220rpx;
    margin: 160rpx auto;
  }
  .main_footer {
    width: 750rpx;
    height: 136rpx;
@@ -686,6 +648,7 @@
    justify-content: space-between;
    font-size: 32rpx;
    background-color: #fff;
    .btn {
      width: 224rpx;
      height: 88rpx;
@@ -696,6 +659,7 @@
      color: $uni-color-primary;
      border: 1rpx solid $uni-color-primary;
    }
    .active {
      width: 436rpx;
      background-color: $uni-color-primary;
@@ -704,13 +668,16 @@
    }
  }
}
.PlatformCallModal {
  height: calc(100vh - 44px);
  padding: 30rpx;
  .title {
    text-align: center;
    margin: 0 0 30rpx;
  }
  .input_wrap {
    display: flex;
    align-items: center;
@@ -720,50 +687,62 @@
    border-radius: 38rpx;
    padding: 0 30rpx;
  }
  .order_list {
    height: calc(100% - 140rpx);
    .scroll_view {
      height: 100%;
    }
    .platform_ing {
      border-radius: 8rpx;
      border: 1rpx solid #dfe2e8;
    }
  }
  .detail_list {
    border-top: 1rpx solid #e5e5e5;
    padding: 30rpx 0;
    .orderId {
      font-size: 30rpx;
      color: $uni-color-primary;
      margin-bottom: 14rpx;
    }
    .addr {
      font-size: 26rpx;
      color: #666666;
      margin-bottom: 20rpx;
    }
    .content {
      width: 100%;
      padding: 20rpx;
      background: #f7f7f7;
      border-radius: 8rpx;
      .line {
        display: flex;
        margin-bottom: 20rpx;
        &:nth-of-type(2n) {
          padding-bottom: 20rpx;
          border-bottom: 1rpx solid #e5e5e5;
        }
        &:last-child {
          padding-bottom: 0rpx;
          border-bottom: none;
        }
        .label {
          font-size: 28rpx;
          color: #666666;
          width: 88rpx;
        }
        .value {
          font-size: 28rpx;
          color: #222222;
@@ -771,10 +750,12 @@
      }
    }
  }
  .btns {
    display: flex;
    align-items: center;
    justify-content: space-between;
    .btn {
      width: 336rpx;
      height: 88rpx;
@@ -786,20 +767,24 @@
      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;
@@ -808,6 +793,7 @@
    z-index: 999;
    left: 30rpx;
    bottom: 30rpx;
    .btn {
      width: 336rpx;
      height: 88rpx;
@@ -819,35 +805,42 @@
      justify-content: center;
      align-items: center;
    }
    .active {
      color: #fff;
      margin-left: 18rpx;
      background-color: $uni-color-primary;
    }
  }
  .transform_list {
    height: 660rpx;
    margin-bottom: 30rpx;
    overflow: auto;
    .line {
      display: flex;
      align-items: center;
      border-bottom: 1rpx solid #e5e5e5;
      padding-bottom: 30rpx;
      margin-bottom: 30rpx;
      .name {
        font-size: 32rpx;
        color: #111111;
      }
      .status {
        flex: 1;
        font-size: 28rpx;
        color: $uni-color-primary;
        margin-left: 12rpx;
      }
      .green {
        color: #00ba67;
      }
      .checked {
        width: 40rpx;
        height: 40rpx;