From 47e18c4dd34d7d8b0dc60e8e1177cc7dff36f4e6 Mon Sep 17 00:00:00 2001
From: Mr.Shi <1878285526@qq.com>
Date: 星期二, 22 八月 2023 18:33:40 +0800
Subject: [PATCH] 大屏
---
 screen_standard/src/views/index.vue |  313 ++++++++++++++++++++++++++++++++++------------------
 1 files changed, 204 insertions(+), 109 deletions(-)
diff --git a/screen_standard/src/views/index.vue b/screen_standard/src/views/index.vue
index 0683d24..f2654cb 100644
--- a/screen_standard/src/views/index.vue
+++ b/screen_standard/src/views/index.vue
@@ -15,7 +15,7 @@
                         <div class="content_left_item1_content_row_line">
                             <el-progress
                                 :show-text="false"
-                                :percentage="item.doneNum">
+                                :percentage="item.doneNum / baseNum">
                             </el-progress>
                         </div>
                         <div class="content_left_item1_content_row_num">{{ item.doneNum }}</div>
@@ -67,24 +67,26 @@
                     <div @mouseenter="handleMouseEnter1" @mouseleave="handleMouseLeave1" class="main_container">
                         <div ref="scrollContainer1" class="scroll_container">
                             <div v-for="(item, index) in data.plannedProgress" :key="index" :class="index % 2 == 0 ? 'scroll_item scroll_item_bg1' : 'scroll_item scroll_item_bg2'">
-                                <div class="scroll_item_row">323444112</div>
-                                <div class="scroll_item_row">鐢靛悏浠�</div>
-                                <div class="scroll_item_row">CP003</div>
-                                <div class="scroll_item_row">1000</div>
+                                <div class="scroll_item_row">{{ item.code }}</div>
+                                <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">
                                     <el-tooltip
-                                        v-for="(child, i) in 6" :key="i"
+                                        v-for="(child, i) in item.procedureList" :key="i"
                                         effect="dark"
-                                        content="宸叉姤宸ヨ壇鍝佹暟1000锛涘伐搴忚鍒掓暟500"
+                                        :content="'宸叉姤宸ヨ壇鍝佹暟' + child.doneNum + '锛涘伐搴忚鍒掓暟' + child.planNum"
                                         placement="top">
-                                        <div class="scroll_item_row_item">
+                                        <div class="scroll_item_row_item" @click="jump(child.procedureId, child.procedureName)">
                                             <div class="scroll_item_row_item_x"></div>
-                                            <img v-if="i == 0 || i == 1" src="@/assets/img/ic_complete@2x.png" alt="" />
-                                            <span v-else>98%</span>
+                                            <!-- <img v-if="i == 0 || i == 1" src="@/assets/img/ic_complete@2x.png" alt="" /> -->
+                                            <span v-if="child.rate < 100">{{ child.rate }}%</span>
+                                            <img v-else src="@/assets/img/ic_complete@2x.png" alt="" />
+                                            <span class="scroll_item_row_item_wz">{{ child.procedureName }}</span>
                                         </div>
                                     </el-tooltip>
                                 </div>
-                                <div class="scroll_item_row">498/500</div>
+                                <div class="scroll_item_row">{{ item.qualifiedNum }}/{{ item.doneNum }}</div>
                             </div>
                         </div>
                     </div>
@@ -153,7 +155,7 @@
                 </div>
                 <div class="content_right_top_nr">
                     <div class="content_right_top_nr_bottom_yuan" v-if="data.typeDistribution.length > 0">
-                        <span>67</span>
+                        <span>{{ data.num }}</span>
                         <span>涓嶈壇椤瑰垎甯�</span>
                     </div>
                     <div class="content_right_top_nr_top" id="lineChrat"></div>
@@ -189,10 +191,13 @@
 </template>
 
 <script setup>
-    import { reactive, ref, onMounted, onBeforeUnmount, onUnmounted, nextTick, computed, watch } from 'vue'
-    import { getTop, getStockList, getWorkPlansList, getProcedureProcessList, getRecordLogPage, getDeviceCheckPage, getUnqualified7DayData, getUnqualifiedCateData } from '@/utils/api.js'
+    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 { useCounterStore } from '@/stores/counter.js'
     import * as echarts from 'echarts'
+    import { useRouter } from 'vue-router'
+
+    const router = useRouter()
 
     let data = reactive({
         production: [],
@@ -202,14 +207,19 @@
         log: [],
         patrolInspection: [],
         dayDistribution: [],
-        typeDistribution: []
+        typeDistribution: [],
+        num: 0,
+        baseNum: 0
     })
+
+    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)
@@ -241,88 +251,130 @@
         return enterprise.departId
     })
 
+    const jump = (procedureId, procedureName) => {
+        enterprise.setProcedureName(procedureName)
+        router.push({ name: 'process', query: { procedureId } })
+    }
+
     watch(() => departId.value, (val) => {
         if (val) {
-            // 褰撴棩鍛樺伐浜ч噺TOP10
-            getTop(companyId.value, departId.value)
-                .then(res => {
-                    if (res.length > 0) {
-                        res.forEach((item, index) => {
-                            if (index > 1) {
-                                item.doneNum1 = res[0].doneNum / item.doneNum
-                            }
-                        })
-                        data.production = res
-                    }
-                })
-            // 浠撳簱瀹炴椂浣欓噺缁熻
-            getStockList(companyId.value, departId.value)
-                .then(res => {
-                    data.marginStatistics = res
-                    nextTick(() => {
-                        start()
-                    })
-                })
-            // 鎴愬搧璁″垝杩涘害
-            getWorkPlansList(companyId.value, departId.value)
-                .then(res => {
-                    data.plannedProgress = res
-                    nextTick(() => {
-                        start1()
-                    })
-                })
-            // 鎶ュ伐鏃ュ織
-            getRecordLogPage(companyId.value, departId.value, {
-                capacity: 9999,
-                model: {},
-                page: 1
-            }).then(res => {
-                data.log = res.records
-                nextTick(() => {
-                    start3()
-                })
-            })
-            // 璁惧宸℃璁板綍
-            getDeviceCheckPage(companyId.value, departId.value, {
-                capacity: 9999,
-                model: {},
-                page: 1
-            }).then(res => {
-                data.patrolInspection = res.records
-                nextTick(() => {
-                    start4()
-                })
-            })
-            // 杩戜竷澶╀笉鑹暟
-            getUnqualified7DayData(companyId.value, departId.value, '')
-                .then(res => {
-                    if (res && res.length > 0) {
-                        data.dayDistribution = res.map(item => {
-                            return {
-                                date: item.createTime,
-                                num: item.unqualifiedNum
-                            }
-                        })
-                        setDayChart()
-                    }
-                })
-            // 杩戜竷澶╀笉鑹」
-            getUnqualifiedCateData(companyId.value, departId.value, '')
-                .then(res => {
-                    if (res && res.length > 0) {
-                        data.typeDistribution = res.map(item => {
-                            return {
-                                name: item.categoryName,
-                                num: item.unqualifiedNum
-                            }
-                        })
-                        setTypeChart()
-                    }
-                })
+            init()
         }
     })
+    // router.afterEach((to) => {
+    //     if (to.fullPath === '/') {
+    //         if (!departId.value) return
+    //         // data.production = []
+    //         // data.marginStatistics = []
+    //         // data.plannedProgress = []
+    //         // data.processProgress = []
+    //         // data.log = []
+    //         // init()
+    //     } else {
+    //         clearTimeout(timer.value)
+    //         clearTimeout(timer1.value)
+    //         clearTimeout(timer2.value)
+    //         clearTimeout(timer3.value)
+    //         clearTimeout(timer4.value)
+    //     }
+    // })
+    // router.beforeEach((to) => {
+    //     console.log(to);
+    //     if (to.fullPath === '/') {
+    //         if (!departId.value) return
+    //         init()
+    //     } else {
+    //         clearTimeout(timer.value)
+    //         clearTimeout(timer1.value)
+    //         clearTimeout(timer2.value)
+    //         clearTimeout(timer3.value)
+    //         clearTimeout(timer4.value)
+    //     }
+    // })
 
     start1()
+
+    const init = () => {
+        // 褰撴棩鍛樺伐浜ч噺TOP10
+        getTop(companyId.value, departId.value)
+            .then(res => {
+                if (res.length > 0) {
+                    data.baseNum = res[0].doneNum
+                    data.production = res
+                }
+            })
+        // 浠撳簱瀹炴椂浣欓噺缁熻
+        getStockList(companyId.value, departId.value)
+            .then(res => {
+                data.marginStatistics = res
+                nextTick(() => {
+                    start()
+                })
+            })
+        // 鎴愬搧璁″垝杩涘害
+        getWorkPlansList(companyId.value, departId.value)
+            .then(res => {
+                data.plannedProgress = res
+                nextTick(() => {
+                    start1()
+                })
+            })
+        // 鎶ュ伐鏃ュ織
+        getRecordLogPage(companyId.value, departId.value, {
+            capacity: 9999,
+            model: {},
+            page: 1
+        }).then(res => {
+            data.log = res.records
+            nextTick(() => {
+                start3()
+            })
+        })
+        // 璁惧宸℃璁板綍
+        getDeviceCheckPage(companyId.value, departId.value, {
+            capacity: 9999,
+            model: {},
+            page: 1
+        }).then(res => {
+            data.patrolInspection = res.records
+            nextTick(() => {
+                start4()
+            })
+        })
+        // 杩戜竷澶╀笉鑹暟
+        getUnqualified7DayData(companyId.value, departId.value, '')
+            .then(res => {
+                if (res && res.length > 0) {
+                    data.dayDistribution = res.map(item => {
+                        return {
+                            date: item.createTime,
+                            num: item.unqualifiedNum
+                        }
+                    })
+                    setDayChart()
+                }
+            })
+        // 杩戜竷澶╀笉鑹」
+        getUnqualifiedCateData(companyId.value, departId.value, '')
+            .then(res => {
+                if (res && res.length > 0) {
+                    data.num = 0
+                    data.typeDistribution = res.map(item => {
+                        data.num += item.unqualifiedNum
+                        return {
+                            name: item.categoryName,
+                            num: item.unqualifiedNum
+                        }
+                    })
+                    setTypeChart()
+                }
+            })
+        // getPlanData
+        getPlanData(companyId.value, departId.value)
+            .then(res => {
+                enterprise.setNum(res)
+            })
+    }
 
     /**
      * 涓冩棩鎶樼嚎鍥�
@@ -332,15 +384,16 @@
         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: '杩戜竷鏃ヤ笉鑹搧鎬绘暟锛�67',
+                text: `杩戜竷鏃ヤ笉鑹搧鎬绘暟锛�${num}`,
                 textStyle: {
                     color: '#fff',
                     fontSize: 12
@@ -503,19 +556,20 @@
         option && myChart.setOption(option);
     }
 
-    onBeforeUnmount(()=>{
-        clearTimeout(timer.value)
-        clearTimeout(timer1.value)
-        clearTimeout(timer2.value)
-        clearTimeout(timer3.value)
-        clearTimeout(timer4.value)
-    })
+    // 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)
@@ -526,7 +580,6 @@
                 if (i == 0) {
                     getWorkPlansList(companyId.value, departId.value)
                         .then(res => {
-                            console.log(res)
                             data.plannedProgress = res
                             nextTick(() => {
                                 start1()
@@ -535,7 +588,6 @@
                 } else {
                     getProcedureProcessList(companyId.value, departId.value)
                         .then(res => {
-                            console.log(res)
                             data.processProgress = res
                             nextTick(() => {
                                 start2()
@@ -582,35 +634,35 @@
     function start() {
         clearTimeout(timer.value)
         // 瀹氭椂鍣ㄨЕ鍙戝懆鏈�
-        let speed = ref(25)
+        let speed = ref(100)
         timer.value = setInterval(ListScroll, speed.value)
     }
     // 寮�鍚畾鏃跺櫒
     function start1() {
         clearTimeout(timer1.value)
         // 瀹氭椂鍣ㄨЕ鍙戝懆鏈�
-        let speed1 = ref(25)
+        let speed1 = ref(100)
         timer1.value = setInterval(ListScroll1, speed1.value)
     }
     // 寮�鍚畾鏃跺櫒
     function start2() {
         clearTimeout(timer2.value)
         // 瀹氭椂鍣ㄨЕ鍙戝懆鏈�
-        let speed2 = ref(25)
+        let speed2 = ref(100)
         timer2.value = setInterval(ListScroll2, speed2.value)
     }
     // 寮�鍚畾鏃跺櫒
     function start3() {
         clearTimeout(timer3.value)
         // 瀹氭椂鍣ㄨЕ鍙戝懆鏈�
-        let speed3 = ref(25)
+        let speed3 = ref(100)
         timer3.value = setInterval(ListScroll3, speed3.value)
     }
     // 寮�鍚畾鏃跺櫒
     function start4() {
         clearTimeout(timer4.value)
         // 瀹氭椂鍣ㄨЕ鍙戝懆鏈�
-        let speed4 = ref(25)
+        let speed4 = ref(100)
         timer4.value = setInterval(ListScroll4, speed4.value)
     }
     function ListScroll() {
@@ -733,6 +785,15 @@
             }
         }
     }
+
+    // onUnmounted(() => {
+
+    // })
+
+    onMounted(() => {
+        if (!departId.value) return;
+        timer5.value = setInterval(init(), 60000)
+    })
 </script>
 
 <style lang="scss" scoped>
@@ -782,6 +843,7 @@
                         }
                         .content_left_item1_content_row_name {
                             flex-shrink: 0;
+                            width: 100px;
                             display: flex;
                             align-items: center;
                             span {
@@ -826,6 +888,7 @@
                         }
                         .content_left_item1_content_row_num {
                             font-size: 13px;
+                            width: 60px;
                             font-family: SourceHanSansSC-Regular, SourceHanSansSC;
                             font-weight: 400;
                             color: #D2E0FF;
@@ -900,11 +963,15 @@
                                 align-items: center;
                                 .scroll_item_row {
                                     flex: 1;
+                                    overflow: hidden;
+                                    text-overflow: ellipsis;
+                                    white-space: nowrap;
                                     height: 100%;
                                     display: flex;
                                     align-items: center;
                                     justify-content: center;
                                     color: #FFFFFF;
+                                    font-size: 13px;
                                     &:first-child {
                                         flex: 1.5;
                                     }
@@ -1003,10 +1070,14 @@
                                 .scroll_item_row {
                                     flex: 1;
                                     height: 100%;
+                                    overflow: hidden;
+                                    text-overflow: ellipsis;
+                                    white-space: nowrap;
                                     display: flex;
                                     align-items: center;
                                     justify-content: center;
                                     color: #FFFFFF;
+                                    font-size: 13px;
                                     &:nth-child(5) {
                                         flex: 3;
                                     }
@@ -1045,6 +1116,17 @@
                                             font-family: PingFangSC-Regular, PingFang SC;
                                             font-weight: 400;
                                             color: #01D9FE;
+                                        }
+                                        .scroll_item_row_item_wz {
+                                            white-space: nowrap;
+                                            position: absolute;
+                                            bottom: -10px;
+                                            left: 50%;
+                                            transform: translate(-50%, 45%);
+                                            font-size: 12px;
+                                            font-family: PingFangSC-Regular, PingFang SC;
+                                            font-weight: 400;
+                                            color: #FFFFFF;
                                         }
                                         .scroll_item_row_item_x {
                                             position: absolute;
@@ -1105,8 +1187,12 @@
                                 .scroll_item_row {
                                     flex: 1;
                                     height: 100%;
+                                    overflow: hidden;
+                                    text-overflow: ellipsis;
+                                    white-space: nowrap;
                                     display: flex;
                                     align-items: center;
+                                    font-size: 13px;
                                     justify-content: center;
                                     color: #FFFFFF;
                                     .scroll_item_row_item {
@@ -1195,7 +1281,11 @@
                                 .scroll_item_row {
                                     flex: 1;
                                     height: 100%;
+                                    overflow: hidden;
+                                    text-overflow: ellipsis;
+                                    white-space: nowrap;
                                     display: flex;
+                                    font-size: 13px;
                                     align-items: center;
                                     justify-content: center;
                                     color: #FFFFFF;
@@ -1239,8 +1329,9 @@
                     position: relative;
                     .content_right_top_nr_bottom_yuan {
                         position: absolute;
-                        top: 299px;
-                        left: 168px;
+                        top: 50%;
+                        left: 50%;
+                        transform: translate(-50%, 53%);
                         z-index: 999;
                         width: 114px;
                         height: 114px;
@@ -1345,6 +1436,10 @@
                                 .scroll_item_row {
                                     flex: 1;
                                     height: 100%;
+                                    overflow: hidden;
+                                    text-overflow: ellipsis;
+                                    white-space: nowrap;
+                                    font-size: 13px;
                                     display: flex;
                                     align-items: center;
                                     justify-content: center;
--
Gitblit v1.9.3