liukangdong
2024-09-29 09132fa0cc6f9d9dba97e12b50700c2ef51a0b6e
月台屏
已添加5个文件
已删除1个文件
已修改4个文件
423 ■■■■ 文件已修改
admin/src/views/platform/queueUp.vue 33 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
screen/package-lock.json 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
screen/package.json 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
screen/src/assets/images/call/ic_left@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
screen/src/assets/images/call/ic_news@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
screen/src/assets/images/call/ic_right@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
screen/src/assets/images/call/title@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
screen/src/router/index.js 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
screen/src/views/HomeView.vue 76 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
screen/src/views/PlatformCall.vue 299 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/platform/queueUp.vue
@@ -23,7 +23,7 @@
    </div>
    <el-table class="mb20" v-loading="loading" :data="dataList" stripe row-key="id" default-expand-all>
      <el-table-column type="index" label="序号" width="80" />
      <el-table-column label="车牌号" width="160">
      <el-table-column label="车牌号" width="130">
        <template slot-scope="{ row }">
          <div class="plate_id">
            <span>{{ row.carCodeFront.slice(0, 1) }}</span>
@@ -33,10 +33,13 @@
          </div>
        </template>
      </el-table-column>
      <el-table-column prop="carrierName" label="运输公司" min-width="200" />
      <el-table-column prop="billCode" label="运单号" min-width="200" />
      <el-table-column prop="totalNum" label="总运输量(万支)" min-width="130" />
      <el-table-column prop="driverName" label="驾驶员" min-width="140">
      <el-table-column v-if="activeGroup.type == 2" prop="contractNum" label="合同单号" min-width="120" />
      <template v-else>
        <el-table-column prop="carrierName" label="运输公司" min-width="120" />
        <el-table-column prop="billCode" label="运单号" min-width="120" />
      </template>
      <el-table-column prop="totalNum" label="总运输量(万支)" min-width="110" />
      <el-table-column prop="driverName" label="驾驶员" min-width="130">
        <template slot-scope="{ row }">
          <span class="mr10">{{ row.driverName }}</span>
          <span>{{ row.drivierPhone }}</span>
@@ -45,7 +48,8 @@
      <el-table-column prop="signDate" label="签到时间" min-width="150" />
      <el-table-column label="操作" align="center" width="100" fixed="right">
        <template slot-scope="{ row }">
          <el-button v-if="row.type != 4" type="text" @click="handleDetail(row)" v-permissions="['business:company:update']">运单详情</el-button>
          <el-button v-if="activeGroup != 2" type="text" @click="handleDetail(row)" v-permissions="['business:company:update']">运单详情</el-button>
          <el-button v-if="activeGroup == 2" type="text" @click="subDetail(row)" v-permissions="['business:company:update']">预约详情</el-button>
        </template>
      </el-table-column>
    </el-table>
@@ -55,12 +59,14 @@
    <PlatformSign ref="PlatformSignRef" v-if="isPlatformSign" @success="getPlatGroupList"
      @close="isPlatformSign = false" />
    <WaybillDetail ref="WaybillDetailRef" v-if="isShowDetail" @success="getList" @close="isShowDetail = false" />
    <DriverDetail v-if="isShowDriver" ref="DriverDetailRef" />
  </div>
</template>
<script>
import Pagination from '@/components/common/Pagination'
import QueryForm from '@/components/common/QueryForm'
import DriverDetail from "@/views/task/driverDetail.vue"
import {
  getPlatformGroupList,
  platformLineUpPage,
@@ -74,7 +80,8 @@
    Pagination,
    QueryForm,
    PlatformSign,
    WaybillDetail
    WaybillDetail,
    DriverDetail
  },
  data() {
    return {
@@ -84,6 +91,7 @@
      staticParam: {},
      dataList: [],
      loading: false,
      isShowDriver: false,
      isPlatformSign: false,
      pagination: {
        pageSize: 10,
@@ -165,6 +173,15 @@
      this.filters = {}
      this.getList()
    },
    subDetail(row) {
        this.isShowDriver = true
        this.$nextTick(() => {
          this.$refs.DriverDetailRef.id = row.objId
          this.$refs.DriverDetailRef.type = row.objType
          this.$refs.DriverDetailRef.getDetail()
          this.$refs.DriverDetailRef.isShowModal = true
        })
    },
    handleDetail(row) {
      this.isShowDetail = true
      this.$nextTick(() => {
@@ -206,7 +223,7 @@
.plate_id {
  display: flex;
  width: 111px;
  width: 110px;
  font-weight: 600;
  height: 30px;
  line-height: 30px;
screen/package-lock.json
@@ -11,6 +11,7 @@
        "dayjs": "^1.11.11",
        "echarts": "^5.5.1",
        "pinia": "^2.1.7",
        "uqrcodejs": "^4.0.7",
        "vue": "^3.4.21",
        "vue-router": "^4.3.0"
      },
@@ -2686,6 +2687,11 @@
        "browserslist": ">= 4.21.0"
      }
    },
    "node_modules/uqrcodejs": {
      "version": "4.0.7",
      "resolved": "https://registry.npmjs.org/uqrcodejs/-/uqrcodejs-4.0.7.tgz",
      "integrity": "sha512-84+aZmD2godCVI+93lxE3YUAPNY8zAJvNA7xRS7R7U+q57KzMDepBSfNCwoRUhWOfR6eHFoAOcHRPwsP6ka1cA=="
    },
    "node_modules/vite": {
      "version": "5.3.1",
      "resolved": "https://registry.npmjs.org/vite/-/vite-5.3.1.tgz",
screen/package.json
@@ -12,6 +12,7 @@
    "dayjs": "^1.11.11",
    "echarts": "^5.5.1",
    "pinia": "^2.1.7",
    "uqrcodejs": "^4.0.7",
    "vue": "^3.4.21",
    "vue-router": "^4.3.0"
  },
screen/src/assets/images/call/ic_left@2x.png
screen/src/assets/images/call/ic_news@2x.png
screen/src/assets/images/call/ic_right@2x.png
screen/src/assets/images/call/title@2x.png
screen/src/router/index.js
@@ -1,5 +1,5 @@
import { createRouter, createWebHashHistory } from 'vue-router'
import HomeView from '../views/HomeView.vue'
import HomeView from '../views/PlatformCall.vue'
const router = createRouter({
  history: createWebHashHistory(import.meta.env.BASE_URL),
@@ -10,9 +10,9 @@
      component: () => import('../views/EnergyConsum.vue')
    },
    {
      path: '/home',
      name: 'home',
      component: () => import('../views/HomeView.vue')
      path: '/PlatformCall',
      name: 'PlatformCall',
      component: () => import('../views/PlatformCall.vue')
    },
    {
      path: '/EnergyConsum',
screen/src/views/HomeView.vue
ÎļþÒÑɾ³ý
screen/src/views/PlatformCall.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,299 @@
<script setup>
import { ref, onMounted } from 'vue'
import dayjs from 'dayjs'
import UQRCode from 'uqrcodejs'
const initQrcode = () => {
  var qr = new UQRCode();
  // è®¾ç½®äºŒç»´ç å†…容
  qr.data = "https://uqrcode.cn/doc";
  qr.size = 254;
  // è°ƒç”¨åˆ¶ä½œäºŒç»´ç æ–¹æ³•
  qr.make();
  var canvas = document.getElementById("qrcode");
  var canvasContext = canvas.getContext("2d");
  qr.canvasContext = canvasContext;
  qr.drawCanvas();
}
onMounted(() => {
  initQrcode()
})
const weekMap = ['周日', '周一', '周二', '周三', '周四', '周五', '周六']
const newWeek = ref(weekMap[new Date().getDay()])
const newDate = ref(dayjs().format('YYYY-MM-DD'))
const newTime = ref(dayjs().format('HH:mm'))
setInterval(() => {
  newWeek.value = weekMap[new Date().getDay()]
  newDate.value = dayjs().format('YYYY-MM-DD')
  newTime.value = dayjs().format('HH:mm')
}, 1000)
</script>
<template>
  <div class="main_app">
    <div class="main_header">
      <img class="bg" src="@/assets/images/call/title@2x.png" alt="">
      <div class="title">安泰智慧物流园区-车辆叫号大屏</div>
      <div class="time_wrap">
        <div class="left">
          <div class="week">{{ newWeek }}</div>
          <div class="date">{{ newDate }}</div>
        </div>
        <div class="time">{{ newTime }}</div>
      </div>
    </div>
    <div class="main_content">
      <div class="list">
        <div class="line header">
          <div class="item no">序号</div>
          <div class="item">车牌号</div>
          <div class="item status">状态</div>
          <div class="item">停靠月台</div>
          <div class="item">时间</div>
        </div>
        <div class="line">
          <div class="item no">序号</div>
          <div class="item">车牌号</div>
          <div class="item">
            <div class="status underway">作业中</div>
          </div>
          <div class="item">停靠月台</div>
          <div class="item">时间</div>
        </div>
        <div class="line">
          <div class="item no">序号</div>
          <div class="item">车牌号</div>
          <div class="item">
            <div class="status call_ed">作业中</div>
          </div>
          <div class="item">停靠月台</div>
          <div class="item">时间</div>
        </div>
        <div class="line">
          <div class="item no">序号</div>
          <div class="item">车牌号</div>
          <div class="item">
            <div class="status padding">作业中</div>
          </div>
          <div class="item">停靠月台</div>
          <div class="item">时间</div>
        </div>
      </div>
      <div class="current">
        <div class="tip_wrap">
          <img src="@/assets/images/call/ic_left@2x.png" class="icon icon_l" alt="">
          <img src="@/assets/images/call/ic_right@2x.png" class="icon icon_r" alt="">
          <div class="empty">
            <div class="title">温馨提示</div>
            <div class="line">1、请司机根据叫号屏提示入园</div>
            <div class="line">2、未叫号车辆请耐心等待</div>
            <div class="line">3、请有序排队入园</div>
            <div class="line">4、装卸货结束禁止在园区逗留</div>
            <div class="line">5、请遵守园区安全规章制度</div>
          </div>
        </div>
        <div class="qrcode_wrap">
          <div class="qrcode">
            <canvas id="qrcode" width="254" height="254"></canvas>
          </div>
          <div class="title">请扫码签到</div>
        </div>
      </div>
    </div>
    <div class="main_footer">
      <img src="@/assets/images/call/ic_news@2x.png" class="icon" alt="">
      <div class="title">请根据队列提示信息,依次等候进场</div>
      <div class="icon"></div>
    </div>
  </div>
</template>
<style lang="scss" scoped>
.main_app {
  color: #fff;
  width: 100%;
  height: 100vh;
  background-color: #092030;
  position: relative;
  z-index: -2;
  display: flex;
  flex-direction: column;
  .main_header {
    width: 100%;
    height: 112px;
    position: relative;
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding: 0 50px;
    .title {
      font-weight: 800;
      font-size: 48px;
    }
    .time_wrap {
      display: flex;
      align-items: center;
      .date {
        font-weight: 500;
        font-size: 20px;
        text-align: right;
      }
      .week {
        font-weight: 500;
        font-size: 20px;
        text-align: right;
      }
      .time {
        font-weight: 500;
        font-size: 50px;
        margin-left: 15px;
      }
    }
    .bg {
      position: absolute;
      top: 0;
      left: 0;
      width: 100%;
      height: 100%;
      object-fit: cover;
      z-index: -1;
    }
  }
  .main_content{
    flex: 1;
    display: flex;
    padding: 30px 20px;
    position: relative;
    .list{
      flex: 5;
      margin-right: 20px;
      .line{
        display: flex;
        align-items: center;
        height: 100px;
        &:nth-of-type(2n){
          background: rgba(255,255,255,0);
        }
        &:nth-of-type(2n + 1){
          background: rgba(0,237,255,0.13);
        }
        .item{
          display: flex;
          justify-content: center;
          align-items: center;
          font-weight: 500;
          font-size: 36px;
          flex: 10;
          .status{
            width: 174px;
            height: 76px;
            border-radius: 8px;
            display: flex;
            justify-content: center;
            align-items: center;
          }
          .underway{
            background-color: #51b2ce;
          }
          .call_ed{
            background-color: #f2a43a;
          }
          .padding{
            background-color: #1c485a;
          }
        }
        .no{
          flex: 5;
        }
      }
      .header{
        font-size: bold;
        font-size: 40px;
        background: linear-gradient( 180deg, #00B5D1 0%, #003C57 100%) !important;
      }
    }
    .current{
      /* height: calc( 100vh - 192px ); */
      flex: 2;
      display: flex;
      flex-direction: column;
      .tip_wrap{
        margin-bottom: 20px;
        width: 100%;
        position: relative;
        flex-shrink: 0;
        flex: 1;
        .empty{
          padding: 30px 40px;
          font-weight: 500;
          font-size: 30px;
          .title{
            text-align: center;
            font-weight: bold;
            font-size: 36px;
            margin-bottom: 20px;
          }
          .line{
            margin-bottom: 10px;
          }
        }
        .icon{
          position: absolute;
          width: 52px;
          height: 52px;
        }
        .icon_l{
          left: 0;
          top: 0;
        }
        .icon_r{
          right: 0;
          bottom: 0;
        }
      }
      .qrcode_wrap{
        width: 100%;
        flex: 1;
        flex-shrink: 0;
        background-color: #51b2ce;
        padding: 36px 0;
        display: flex;
        flex-direction: column;
        align-items: center;
        justify-content: center;
        .qrcode{
          padding: 12px;
          background-color: #fff;
        }
        .title{
          margin-top: 20px;
          font-weight: bold;
          font-size: 38px;
          color: #111111;
        }
      }
    }
  }
  .main_footer{
    background-color: #1D8D9E;
    height: 80px;
    display: flex;
    align-items: center;
    padding: 0 50px;
    .icon{
      width: 52px;
      height: 52px;
    }
    .title{
      flex: 1;
      text-align: center;
      font-weight: 500;
      font-size: 37px;
    }
  }
}
</style>