bug
jiangping
2023-12-06 1f4e7d0f73a73e7350cf5a1df279d5f30904c5d5
screen_standard/src/components/AppLayout.vue
@@ -1,39 +1,185 @@
<template>
  <div class="content">
    <div class="header">
      <div class="header-item" style="font-size: 20px;">豆米科技</div>
      <div class="title">DM云工厂车间大屏</div>
      <div class="header-item">天气</div>
    </div>
      <div class="header-item" style="font-size: 20px;">
        <el-dropdown trigger="click" v-if="route.name=='home'">
          <div class="eare-title">
            {{ tempCom.name}}
            <div class="right-icon">
              <img src="@/assets/img/ar_drop@2x.png" alt="">
            </div>
          </div>
          <template #dropdown>
            <el-dropdown-menu>
              <el-dropdown-item v-for="(item, index) in comList" :key="index" @click="selectCom(item, index)">{{item.name}}</el-dropdown-item>
            </el-dropdown-menu>
          </template>
        </el-dropdown>
        <img v-else src="@/assets/img/btn_back@2x.png" style="width: 108px;height: 34px; margin-top: 14px;" @click="back">
      </div>
      <div class="title">{{ title }}</div>
      <div class="header-item right">
        <img v-if="!isFull" src="@/assets/img/ic_fullscreen@2x.png" class="full-ic" @click="fullChange">
        <img v-else src="@/assets/img/ic_exitfullscreen@2x.png" class="full-ic" @click="fullChange">
        <img src="@/assets/img/title_line@2x.png" class="right-line" alt="">
        <div class="date">
          <div class="time">{{ tempDate.time }}</div>
          <div class="day">{{ `${tempDate.date} ${tempDate.day}` }}</div>
        </div>
        <!-- <img src="@/assets/img/title_line@2x.png" class="right-line" alt=""> -->
      </div>
    </div>
    <div class="num-list">
      <div
        v-for="(item, index) in layoutList"
        :key="index"
        class="num-item"
        :style="{ 'background-image': `url(${getAssets(item.bgImg)})`}"
      >
        <img :src="getAssets(item.logo)" alt="">
        <div class="item-right">
          <div class="item-title">{{ item.name }}</div>
          <div class="num-value">{{ countList[index] }}</div>
        </div>
      </div>
    </div>
    <RouterView />
    <KeepAlive>
      <router-view></router-view>
    </KeepAlive>
  </div>
</template>
<script setup>
import { getAssets } from '@/utils'
import { getDepartmentList } from '@/utils/api.js'
import { reactive, toRefs, onMounted, computed } from 'vue';
import { useCounterStore } from '@/stores/counter.js'
import { useRoute, useRouter } from 'vue-router'
const enterprise = useCounterStore()
const route = useRoute()
const router = useRouter()
const layoutList = [
  { bgImg: 'bg_zhixingzhong@2x.png', name: '执行中计划数(个)', logo: 'ic_zhixingzhong@2x.png' },
  { bgImg: 'bg_yanqijihua@2x.png', name: '延期计划数(个)', logo: 'ic_yanqijihua@2x.png' },
  { bgImg: 'bg_jinrirenshu@2x.png', name: '今日生产人数(人)', logo: 'ic_jinrirenshu@2x.png' },
  { bgImg: 'bg_jinrishebei@2x.png', name: '今日生产设备(台)', logo: 'ic_jinrishebei@2x.png' },
  { bgImg: 'bg_jinribuliang@2x.png', name: '今日不良品率(%)', logo: 'ic_jinribuliang@2x.png' },
]
const ingNum = computed(() => {
    return enterprise.ingNum
})
const delayNum = computed(() => {
    return enterprise.delayNum
})
const prouserNum = computed(() => {
    return enterprise.prouserNum
})
const deviceNum = computed(() => {
    return enterprise.deviceNum
})
const unqualifiedRate = computed(() => {
    return enterprise.unqualifiedRate
})
const title = computed(() => {
    return enterprise.procedureName ? `${enterprise.procedureName}工序数据看板` :  'DM云工厂车间大屏'
})
const data = reactive({
  tempCom: { name: '豆米科技' },
  isFull: false,
  tempDate: {
    time: '',
    date: '',
    day: ''
  },
  comList: [],
  countList: [
    ingNum||0,
    delayNum||0,
    prouserNum||0,
    deviceNum||0,
    unqualifiedRate||0
  ]
})
import { reactive } from 'vue';
import { RouterView } from 'vue-router'
// const layoutList = [
//   { bgImg: requir('@/assets/img/bg_zhixingzhong@2x.png'), name: '执行中计划数(个)', logo: requir('@/assets/img') }
// ]
let { tempCom, isFull, tempDate, comList, countList } = toRefs(data)
const selectCom = (item, index) => {
  data.tempCom = item
  enterprise.setDepartId(data.tempCom.id)
}
const fullChange = () => {
  data.isFull = !data.isFull
  let element = document.documentElement;
  if (data.isFull) {   // 全屏
    if (element.requestFullscreen) {
      element.requestFullscreen();
    } else if (element.webkitRequestFullScreen) {
      element.webkitRequestFullScreen();
    } else if (element.mozRequestFullScreen) {
      element.mozRequestFullScreen();
    } else if (element.msRequestFullscreen) {
      // IE11
      element.msRequestFullscreen();
    }
  } else {  // 还原
    if (document.exitFullscreen) {
      document.exitFullscreen();
    } else if (document.webkitCancelFullScreen) {
      document.webkitCancelFullScreen();
    } else if (document.mozCancelFullScreen) {
      document.mozCancelFullScreen();
    } else if (document.msExitFullscreen) {
      document.msExitFullscreen();
    }
  }
  // data.isFull = !data.isFull
}
onMounted(() => {
  getDepartmentList(enterprise.companyId)
    .then(res => {
      data.comList = res
      data.tempCom = res[0]
      enterprise.setDepartId(data.tempCom.id)
    })
    .catch(err => {})
  const week = ['星期一', '星期二', '星期三', '星期四', '星期五', '星期六', '星期日']
  setInterval(() => {
    let date = new Date()
    data.tempDate = {
      time: `${date.getHours()}:${date.getMinutes()}:${date.getSeconds()}`,
      date: `${date.getFullYear()}/${date.getMonth()+1}/${date.getDate()}`,
      day: week[date.getDay()-1]
    }
  }, 1000)
  // console.log(date.getDay());
})
const back = () => {
  enterprise.setProcedureName('')
  router.go(-1)
}
</script>
<style lang="scss" scoped>
.content {
  background-image: url('@/assets/img/bg@2x.png');
  background-image: url('@/assets/img/bg.png');
  background-position: center;
  background-size: 100% 100%;
  background-repeat: no-repeat;
  // width: 1920px;
  // height: 1080px;
  width: 100%;
  height: 100%;
  padding: 30px;
  // overflow-y: scroll;
  box-sizing: border-box;
  .header {
    background-image: url('@/assets/img/bg_maintitle@2x.png');
@@ -42,10 +188,26 @@
    height: 74px;
    display: flex;
    padding-top: 1px;
    padding-left: 20px;
    justify-content: space-between;
    color: #fff;
    .header-item {
      width: 200px;
      width: 300px;
    }
    .eare-title {
      margin-top: 27px;
      color: #fff;
      height: 20px;
      font-size: 20px;
      font-family: SourceHanSansSC-Medium, SourceHanSansSC;
      font-weight: 500;
      // line-height: 74px;
      display: flex;
      .right-icon {
        width: 20px;
        height: 20px;
        margin-left: 8px;
      }
    }
    .title {
      margin-top: 15px;
@@ -55,10 +217,83 @@
      line-height: 25px;
      text-align: center;
    }
    .right {
      margin-top: 20px;
      height: 30px;
      display: flex;
      padding-right: 22px;
      flex-direction: row-reverse;
      .full-ic {
        margin-top: 2px;
        width: 30px;
        height: 30px;
      }
      .right-line {
        width: 2px;
        height: 34px;
        margin-left: 15px;
        margin-right: 15px;
      }
      .date {
        .time {
          height: 20px;
          font-size: 18px;
          font-weight: 500;
          color: #FFFFFF;
          line-height: 20px;
        }
        .day {
          height: 12px;
          font-size: 12px;
          font-weight: 400;
          color: #D2E0FF;
          line-height: 12px;
        }
      }
    }
  }
  .num-list {
    margin-top: 24px;
    margin-bottom: 27px;
    display: flex;
    justify-content: space-between;
    height: 88px;
    color: white;
    .num-item {
      width: calc(25% - 50px);
      background-size: 100% 100%;
      margin-right: 25px;
      padding-left: 30px;
      padding-top: 12px;
      display: flex;
      &:last-child {
        margin-right: 0px;
      }
      img {
        width: 52px;
        height: 52px;
      }
      .item-right {
        margin-left: 12px;
        .item-title {
          height: 19px;
          font-size: 13px;
          font-weight: 400;
          color: rgba(255,255,255,0.9);
          line-height: 19px;
        }
        .num-value {
          height: 35px;
          font-size: 30px;
          font-weight: bold;
          color: #FFFFFF;
          line-height: 35px;
          background: linear-gradient(180deg, #EEEEEE 0%, #15CFFF 100%);
          -webkit-background-clip: text;
          -webkit-text-fill-color: transparent;
        }
      }
    }
  }
}
</style>