jiaosong
2023-08-24 fe0ef3441cd689e3679696d990b0ca1b5d7193ac
screen_standard/src/views/index.vue
@@ -54,14 +54,14 @@
                <div class="scroll_item_row">{{ item.materialName }}</div>
                <div class="scroll_item_row">{{ item.materialCode }}</div>
                <div class="scroll_item_row">{{ item.num }}</div>
                <div class="scroll_item_row">
                <div class="scroll_item_row" style="text-align: left;">
                  <el-tooltip v-for="(child, i) in item.procedureList" :key="i" effect="dark"
                    :content="'已报工良品数' + child.doneNum + ';工序计划数' + child.planNum" placement="top">
                    <div class="scroll_item_row_item" @click="jump(child.procedureId, child.procedureName)">
                      <div class="scroll_item_row_item_x"></div>
                      <span v-if="child.rate < 100">{{ child.rate.toFixed(0) }}%</span>
                      <span v-if="child.rate < 100">{{ Math.floor(child.rate) }}%</span>
                      <img v-else src="@/assets/img/ic_complete@2x.png" alt="" />
                      <span class="scroll_item_row_item_wz">{{ child.procedureName }}</span>
                      <span class="scroll_item_row_item_wz">{{ child.procedureName.substring(0, 3) }}</span>
                    </div>
                  </el-tooltip>
                </div>
@@ -103,7 +103,7 @@
            <div class="content_left_item1_head">
              <span>当日员工产量TOP10</span>
            </div>
            <div class="content_left_item1_content" ref="scrollContainer">
            <div class="content_left_item1_content" @mouseenter="handleMouseEnter" @mouseleave="handleMouseLeave" ref="scrollContainer">
              <div class="content_left_item1_content_row" v-for="(item, index) in data.production" :key="index">
                <div class="content_left_item1_content_row_name">
                  <div :class="index > 2 ? 'num bg1' : 'num bg2'">{{ index + 1 }}</div>
@@ -137,8 +137,8 @@
                <div v-for="(item, index) in data.log" :key="index"
                  :class="index % 2 == 0 ? 'scroll_item scroll_item_bg1' : 'scroll_item scroll_item_bg2'">
                  <div class="scroll_item_row">{{ item.userName }}</div>
                  <div class="scroll_item_row">{{ item.materialName }}</div>
                  <div class="scroll_item_row">{{ item.procedureName }}</div>
                  <div class="scroll_item_row">{{ item.materialCode }}</div>
                  <div class="scroll_item_row">{{ dateToSub(item.createTime) }}</div>
                  <div class="scroll_item_row">{{ item.qualifiedNum || 0 }}</div>
                  <div class="scroll_item_row">{{ item.unqualifiedNum || 0 }}</div>
@@ -170,7 +170,7 @@
        </div>
      </div>
      <!-- 设备巡检记录 -->
      <div class="content_right_bottom">
      <div class="content_right_bottom" ref="bottom1">
        <div class="content_right_bottom_head">
          <span>设备巡检记录</span>
        </div>
@@ -187,7 +187,10 @@
                :class="index % 2 == 0 ? 'scroll_item scroll_item_bg1' : 'scroll_item scroll_item_bg2'">
                <div class="scroll_item_row">{{ dateToSub(item.checkdate) }}</div>
                <div class="scroll_item_row">{{ item.deviceName }}</div>
                <div class="scroll_item_row">{{ item.status == 0 ? '合格' : '不合格' }}</div>
                <div class="scroll_item_row">
                  <span v-if="item.status == 0">正常</span>
                  <span v-else style="color: #F84F26">异常</span>
                </div>
                <div class="scroll_item_row">{{ item.userName }}</div>
              </div>
            </div>
@@ -200,8 +203,8 @@
<script setup>
import { dateToSub } from '@/utils'
import { reactive, ref, onMounted, nextTick, onUnmounted, computed, watch, toRefs } from 'vue'
import { getPlanData, getTop, getStockList, getWorkPlansList, getProcedureProcessList, getRecordLogPage, getDeviceCheckPage, getUnqualified7DayData, getUnqualifiedCateData } from '@/utils/api.js'
import { reactive, ref, onMounted, onUnmounted, computed, watch, toRefs } from 'vue'
import { getPlanData, getTop, getWorkPlansList, getProcedureProcessList, getRecordLogPage, getDeviceCheckPage, getUnqualified7DayData, getUnqualifiedCateData } from '@/utils/api.js'
import { useCounterStore } from '@/stores/counter.js'
import * as echarts from 'echarts'
import { useRouter } from 'vue-router'
@@ -218,22 +221,24 @@
  dayDistribution: [],
  typeDistribution: [],
  num: 0,
  baseNum: 0
  baseNum: 0,
  firstScroll: false,
  secondScroll: false,
  thirdScroll: false,
  fourthScroll: false,
  fifthScroll: false,
})
let { baseNum } = toRefs(data)
let timer = ref(null)
let timer1 = ref(null)
let timer2 = ref(null)
let timer3 = ref(null)
let timer4 = ref(null)
let timer5 = ref(null)
let scrollContainer = ref(null)
let scrollContainer1 = ref(null)
let scrollContainer2 = ref(null)
let scrollContainer3 = ref(null)
let scrollContainer4 = ref(null)
let bottom1 = ref(null)
let cate = ref([
  {
    name: '成品计划进度',
@@ -271,16 +276,16 @@
  }
})
start1()
const init = () => {
  console.log(timer.value);
  // 当日员工产量TOP10
  getTop(companyId.value, departId.value)
    .then(res => {
      if (res.length > 0) {
        data.baseNum = res[0].doneNum
        data.production = res
        start()
        data.fifthScroll = true
      }
    })
  // 仓库实时余量统计
@@ -297,18 +302,14 @@
        getProcedureProcessList(companyId.value, departId.value)
          .then(res => {
            data.processProgress = res
            nextTick(() => {
              start2()
            })
            data.thirdScroll = true
          })
      } else {
        // 成品计划进度
        getWorkPlansList(companyId.value, departId.value)
          .then(res => {
            data.plannedProgress = res
            nextTick(() => {
              start1()
            })
            data.secondScroll = true
          })
      }
    }
@@ -322,9 +323,7 @@
    page: 1
  }).then(res => {
    data.log = res.records
    nextTick(() => {
      start3()
    })
    data.fourthScroll = true
  })
  // 设备巡检记录
  getDeviceCheckPage(companyId.value, departId.value, {
@@ -333,9 +332,7 @@
    page: 1
  }).then(res => {
    data.patrolInspection = res.records
    nextTick(() => {
      start4()
    })
    data.fifthScroll = true
  })
  // 近七天不良数
  getUnqualified7DayData(companyId.value, departId.value, '')
@@ -362,6 +359,7 @@
            num: item.unqualifiedNum
          }
        })
        console.log(data.num);
        setTypeChart()
      }
    })
@@ -380,20 +378,22 @@
  let myChart = echarts.init(dayChartDom);
  let dateList = []
  let numList = []
  let num = 0
  data.dayDistribution.forEach(item => {
    dateList.push(item.date)
    numList.push(item.num)
    num += item.num
  })
  let option;
  option = {
    title: {
      text: `近七日不良品总数:${num}`,
      text: `   近七日不良品总数:${data.num}`,
      textStyle: {
        color: '#fff',
        fontSize: 12
      }
    },
    grid: {
      top: 40,
      bottom: 30
    },
    xAxis: {
      type: 'category',
@@ -521,9 +521,6 @@
            }
          }
        },
        // labelLayout: {
        //   hideOverlap: true
        // },
        endLabel: {
          show: true,
          distance: 5,
@@ -543,24 +540,7 @@
  option && myChart.setOption(option);
}
// onBeforeUnmount(()=>{
//     clearTimeout(timer.value)
//     clearTimeout(timer1.value)
//     clearTimeout(timer2.value)
//     clearTimeout(timer3.value)
//     clearTimeout(timer4.value)
// })
onUnmounted(() => {
  clearTimeout(timer.value)
  clearTimeout(timer1.value)
  clearTimeout(timer2.value)
  clearTimeout(timer3.value)
  clearTimeout(timer4.value)
  clearTimeout(timer5.value)
})
const clickCate = (index) => {
  clearTimeout(timer1.value)
  clearTimeout(timer2.value)
  cate.value.forEach((item, i) => {
    if (i === index) {
      // 成品计划进度
@@ -568,17 +548,13 @@
        getWorkPlansList(companyId.value, departId.value)
          .then(res => {
            data.plannedProgress = res
            nextTick(() => {
              start1()
            })
            data.secondScroll = true
          })
      } else {
        getProcedureProcessList(companyId.value, departId.value)
          .then(res => {
            data.processProgress = res
            nextTick(() => {
              start2()
            })
            data.thirdScroll = true
          })
      }
      item.active = true
@@ -588,86 +564,57 @@
  })
}
function handleMouseEnter() {
  clearTimeout(timer.value)
  data.firstScroll = false
}
function handleMouseEnter1() {
  clearTimeout(timer1.value)
  data.secondScroll = false
}
function handleMouseEnter2() {
  clearTimeout(timer2.value)
  data.thirdScroll = false
}
function handleMouseEnter3() {
  clearTimeout(timer3.value)
  data.fourthScroll = false
}
function handleMouseEnter4() {
  clearTimeout(timer4.value)
  data.fifthScroll = false
}
function handleMouseLeave() {
  start()
  data.firstScroll = true
}
function handleMouseLeave1() {
  start1()
  data.secondScroll = true
}
function handleMouseLeave2() {
  start2()
  data.thirdScroll = true
}
function handleMouseLeave3() {
  start3()
  data.fourthScroll = true
}
function handleMouseLeave4() {
  start4()
  data.fifthScroll = true
}
// 开启定时器
function start() {
  clearTimeout(timer.value)
  // 定时器触发周期
  let speed = ref(100)
  timer.value = setInterval(ListScroll, speed.value)
}
// 开启定时器
function start1() {
  clearTimeout(timer1.value)
  // 定时器触发周期
  let speed1 = ref(100)
  timer1.value = setInterval(ListScroll1, speed1.value)
}
// 开启定时器
function start2() {
  clearTimeout(timer2.value)
  // 定时器触发周期
  let speed2 = ref(100)
  timer2.value = setInterval(ListScroll2, speed2.value)
}
// 开启定时器
function start3() {
  clearTimeout(timer3.value)
  // 定时器触发周期
  let speed3 = ref(100)
  timer3.value = setInterval(ListScroll3, speed3.value)
}
// 开启定时器
function start4() {
  clearTimeout(timer4.value)
  // 定时器触发周期
  let speed4 = ref(100)
  timer4.value = setInterval(ListScroll4, speed4.value)
}
function ListScroll() {
  if (!data.firstScroll) return
  // console.log('ListScroll');
  let scrollDom = scrollContainer.value
  if (!scrollDom) return
  // 判读组件是否渲染完成
  if (scrollDom.offsetHeight == 0) {
    scrollDom = scrollContainer.value
  } else {
    let maxLength = scrollDom.clientHeight/34
    // 如果列表数量过少不进行滚动
    if (scrollDom.children.length < 6) {
      clearTimeout(timer.value)
    if (scrollDom.children.length <= maxLength) {
      data.firstScroll = false
      return
    }
    // 组件进行滚动
    scrollDom.scrollTop += 1
    scrollDom.scrollTop += 2
    // console.log(scrollDom.scrollHeight - scrollDom.clientHeight);
    // console.log(scrollDom.scrollTop);
    // 判断是否滚动到底部
    if (scrollDom.scrollTop >= (scrollDom.scrollHeight - scrollDom.clientHeight)) {
    if (scrollDom.scrollTop >= (scrollDom.scrollHeight - scrollDom.clientHeight - 2)) {
      // 获取组件第一个节点
      let first = scrollDom.children[0]
      // 删除节点
@@ -678,6 +625,8 @@
  }
}
function ListScroll1() {
  if (!data.secondScroll) return
  // console.log('ListScroll1');
  let scrollDom = scrollContainer1.value
  // 判读组件是否渲染完成
  if (!scrollDom) return
@@ -686,13 +635,16 @@
  } else {
    // 如果列表数量过少不进行滚动
    if (scrollDom.children.length < 7) {
      clearTimeout(timer1.value)
      data.secondScroll = false
      return
    }
    // 组件进行滚动
    scrollDom.scrollTop += 1
    scrollDom.scrollTop += 2
    // 判断是否滚动到底部
    if (scrollDom.scrollTop >= (scrollDom.scrollHeight - scrollDom.clientHeight)) {
    if (scrollDom.scrollTop >= (scrollDom.scrollHeight - scrollDom.clientHeight-0.5)) {
      console.log(scrollDom.scrollTop);
      console.log(scrollDom.scrollHeight, scrollDom.clientHeight);
      // 获取组件第一个节点
      let first = scrollDom.children[0]
      // 删除节点
@@ -703,6 +655,8 @@
  }
}
function ListScroll2() {
  if (!data.thirdScroll) return
  // console.log('ListScroll2');
  let scrollDom = scrollContainer2.value
  if (!scrollDom) return
  // 判读组件是否渲染完成
@@ -711,15 +665,15 @@
  } else {
    // 如果列表数量过少不进行滚动
    if (scrollDom.children.length < 10) {
      clearTimeout(timer2.value)
      data.thirdScroll = false
      return
    }
    // 组件进行滚动
    scrollDom.scrollTop += 1
    scrollDom.scrollTop += 2
    // console.log('scrollDom.scrollTop', scrollDom.scrollTop);
    // console.log('scrollDom.scrollHeight - scrollDom.clientHeight', scrollDom.scrollHeight - scrollDom.clientHeight);
    // 判断是否滚动到底部
    if (scrollDom.scrollTop >= (scrollDom.scrollHeight - scrollDom.clientHeight)) {
    if (scrollDom.scrollTop >= (scrollDom.scrollHeight - scrollDom.clientHeight - 2)) {
      // 获取组件第一个节点
      let first = scrollDom.children[0]
      // 删除节点
@@ -730,6 +684,9 @@
  }
}
function ListScroll3() {
  if (!data.fourthScroll) return
  // console.log('ListScroll3');
  let scrollDom = scrollContainer3.value
  if (!scrollDom) return
  // 判读组件是否渲染完成
@@ -737,14 +694,17 @@
    scrollDom = scrollContainer3.value
  } else {
    // 如果列表数量过少不进行滚动
    if (scrollDom.children.length <= 5) {
      clearTimeout(timer3.value)
    let num = scrollContainer3.value.offsetHeight / 35;
    // alert(scrollDom.children.length  +"---------------"+num)
    // 如果列表数量过少不进行滚动
    if (scrollDom.children.length <= num) {
      data.fourthScroll = false
      return
    }
    // 组件进行滚动
    scrollDom.scrollTop += 1
    scrollDom.scrollTop = scrollDom.scrollTop+2
    // 判断是否滚动到底部
    if (scrollDom.scrollTop >= (scrollDom.scrollHeight - scrollDom.clientHeight)) {
    if (scrollDom.scrollTop >= (scrollDom.scrollHeight - scrollDom.clientHeight -2)) {
      // 获取组件第一个节点
      let first = scrollDom.children[0]
      // 删除节点
@@ -755,21 +715,26 @@
  }
}
function ListScroll4() {
  if (!data.fifthScroll) return
  // console.log('ListScroll4');
  let scrollDom = scrollContainer4.value
  if (!scrollDom) return
  // 判读组件是否渲染完成
  if (scrollDom.offsetHeight == 0) {
    scrollDom = scrollContainer4.value
  } else {
    // console.log(bottom1.value.height);
    let num = scrollContainer4.value.offsetHeight / 35;
    // alert(scrollDom.children.length  +"---------------"+num)
    // 如果列表数量过少不进行滚动
    if (scrollDom.children.length < 5) {
      clearTimeout(timer4.value)
    if (scrollDom.children.length <= num) {
      data.fifthScroll = false
      return
    }
    // 组件进行滚动
    scrollDom.scrollTop += 1
    scrollDom.scrollTop += 2
    // 判断是否滚动到底部
    if (scrollDom.scrollTop >= (scrollDom.scrollHeight - scrollDom.clientHeight)) {
    if (scrollDom.scrollTop >= (scrollDom.scrollHeight - scrollDom.clientHeight - 2)) {
      // 获取组件第一个节点
      let first = scrollDom.children[0]
      // 删除节点
@@ -779,19 +744,38 @@
    }
  }
}
// onUnmounted(() => {
// })
function scrillAction() {
  ListScroll()
  ListScroll1()
  ListScroll2()
  ListScroll3()
  ListScroll4()
}
onMounted(() => {
  window.addEventListener('resize', () => {
    setTypeChart()
    setDayChart()
  })
  if (!departId.value) return;
  timer5.value = setInterval(init(), 60000)
  init()
  timer5.value = setInterval(init, 60000)
  timer.value = setInterval(scrillAction, 100)
})
onUnmounted(() => {
  console.log('停止滴答');
  clearTimeout(timer.value)
  clearTimeout(timer5.value)
})
</script>
<style lang="scss" scoped>
$fixed-height: 690px;
.content1 {
  flex: 1;
  width: 100%;
  height: auto;
@@ -804,7 +788,8 @@
    margin-right: 20px;
    .content_left_item1 {
      width: 100%;
      height: 284px;
      height:  calc(100vh - 690px);
    //  height: 284px;
      margin-bottom: 20px;
      .content_left_item1_head {
        background: url('@/assets/img/home_title_short@2x.png');
@@ -828,7 +813,7 @@
      .content_left_item1_content {
        width: 100%;
        height: 246px;
        height: calc(100% - 36px);
        padding: 20px;
        overflow: hidden;
        box-sizing: border-box;
@@ -839,7 +824,8 @@
          display: flex;
          align-items: center;
          justify-content: space-between;
          margin-bottom: 13px;
          // margin-bottom: 13px;
          padding: 7px 0;
          &:last-child {
            margin: 0;
@@ -965,7 +951,7 @@
        .main_container {
          width: 100%;
          height: calc(100% - 35px);
          height: calc(100% - 38px);
          .scroll_container {
            width: 100%;
@@ -1079,8 +1065,13 @@
            color: #01D9FE;
            &:nth-child(5) {
              flex: 2.7;
              flex: 3;
            }
            &:nth-child(4) {
              flex: 0.7;
            }
            &:nth-child(6) {
              flex: 0.7;
            }
          }
        }
@@ -1117,10 +1108,15 @@
                justify-content: center;
                color: #FFFFFF;
                font-size: 13px;
                &:nth-child(4) {
                  flex: 0.7;
                }
                &:nth-child(5) {
                  flex: 3;
                  justify-content: start;
                }
                &:nth-child(6) {
                  flex: 0.7;
                }
                .scroll_item_row_item {
                  margin-top: -11px;
@@ -1276,7 +1272,8 @@
    .content_center_bottom {
      width: 100%;
      height: 284px;
     // height: 284px;
      height:  calc(100vh - 690px);
      flex: 2;
      .content_center_bottom_head {
        width: 100%;
@@ -1324,9 +1321,15 @@
            font-weight: 500;
            color: #01D9FE;
            &:nth-child(4) {
              flex: 2;
            &:nth-child(5) {
              flex: 0.5;
            }
            &:nth-child(6) {
              flex: 0.5;
            }
            &:nth-child(7) {
                  flex: 0.7;
                }
          }
        }
@@ -1365,9 +1368,16 @@
                justify-content: center;
                color: #FFFFFF;
                &:nth-child(4) {
                  flex: 2;
                &:nth-child(5) {
                  flex: 0.5;
                }
                &:nth-child(6) {
                  flex: 0.5;
                }
                &:nth-child(7) {
                  flex: 0.7;
                }
              }
            }
          }
@@ -1417,8 +1427,8 @@
          left: 50%;
          transform: translate(-50%, -50%);
          z-index: 999;
          width: 114px;
          height: 114px;
          width: 100px;
          height: 100px;
          border-radius: 50%;
          border: 2px dashed #01D9FE;
          display: flex;
@@ -1460,8 +1470,9 @@
    .content_right_bottom {
      width: 100%;
      height: 284px;
     // height: 284px;
      height:  calc(100vh - 690px);
      .content_right_bottom_head {
        width: 100%;
        height: 38px;
@@ -1506,8 +1517,11 @@
            font-weight: 500;
            color: #01D9FE;
            &:first-child {
              flex: 2;
            // &:first-child {
            //   flex: 2;
            // }
            &:nth-child(3) {
              flex: 0.7;
            }
          }
        }
@@ -1546,10 +1560,12 @@
                align-items: center;
                justify-content: center;
                color: #FFFFFF;
                &:first-child {
                  flex: 2;
                &:nth-child(3) {
                  flex: 0.7;
                }
                // &:first-child {
                //   flex: 2;
                // }
              }
            }
          }