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 |  458 +++++++++++++++++++++++++++++++++++----------------------
 1 files changed, 280 insertions(+), 178 deletions(-)
diff --git a/screen_standard/src/views/index.vue b/screen_standard/src/views/index.vue
index 0dc7ccb..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>
@@ -152,8 +154,8 @@
                     <span>杩�7澶╀笉鑹搧鍒嗗竷</span>
                 </div>
                 <div class="content_right_top_nr">
-                    <div class="content_right_top_nr_bottom_yuan">
-                        <span>67</span>
+                    <div class="content_right_top_nr_bottom_yuan" v-if="data.typeDistribution.length > 0">
+                        <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 } 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: [],
@@ -201,29 +206,20 @@
         processProgress: [],
         log: [],
         patrolInspection: [],
-        dayDistribution: [
-            { date: '8/1', num: '20' },
-            { date: '8/2', num: '10' },
-            { date: '8/3', num: '20' },
-            { date: '8/4', num: '40' },
-            { date: '8/5', num: '30' },
-            { date: '8/6', num: '10' },
-            { date: '8/7', num: '20' },
-        ],
-        typeDistribution: [
-            { name: '澶栬涓嶈壇', num: 15 },
-            { name: '鏈夋瘺鍒�', num: 12 },
-            { name: '灏哄涓嶈壇', num: 22 },
-            { name: '鏈夊垝鐥�', num: 5 },
-            { name: '鍏朵粬', num: 2 }
-        ]
+        dayDistribution: [],
+        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)
@@ -255,62 +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()
-                })
-            })
+            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)
+            })
+    }
 
     /**
      * 涓冩棩鎶樼嚎鍥�
@@ -320,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
@@ -409,106 +474,102 @@
      * 涓嶈壇绫诲瀷鍒嗗竷
      */
     function setTypeChart() {
-    let dayChartDom = document.getElementById('pieChart');
-    let myChart = echarts.init(dayChartDom);
-    let legendData = []
-    let seriesData = []
-    data.typeDistribution.forEach(item => {
-        legendData.push(item.name)
-        seriesData.push({name:item.name, value:item.num})
-    })
-    let option = {
-        // title: {
-        //   text: '鍚屽悕鏁伴噺缁熻',
-        //   subtext: '绾睘铏氭瀯',
-        //   left: 'center'
-        // },
-        // tooltip: {
-        //   trigger: 'item',
-        //   formatter: '{a} <br/>{b} : {c} ({d}%)'
-        // },
-        legend: {
-        show: false,
-        type: 'scroll',
-        orient: 'vertical',
-        right: 10,
-        top: 20,
-        bottom: 20,
-        data: legendData
-        },
-        series: [
-        {
-            // name: '濮撳悕',
-            type: 'pie',
+        let dayChartDom = document.getElementById('pieChart');
+        let myChart = echarts.init(dayChartDom);
+        let legendData = []
+        let seriesData = []
+        data.typeDistribution.forEach(item => {
+            legendData.push(item.name)
+            seriesData.push({name:item.name, value:item.num})
+        })
+        let option = {
+            // title: {
+            //   text: '鍚屽悕鏁伴噺缁熻',
+            //   subtext: '绾睘铏氭瀯',
+            //   left: 'center'
+            // },
+            // tooltip: {
+            //   trigger: 'item',
+            //   formatter: '{a} <br/>{b} : {c} ({d}%)'
+            // },
+            legend: {
+            show: false,
+            type: 'scroll',
+            orient: 'vertical',
+            right: 10,
+            top: 20,
+            bottom: 20,
+            data: legendData
+            },
+            series: [
+            {
+                // name: '濮撳悕',
+                type: 'pie',
 
-            radius: ['60%', '70%'],
-            // avoidLabelOverlap: false,
-            itemStyle: {
-            borderRadius: 4,
-            borderColor: 'rgba(52, 88, 159, 0.4)',
-            borderWidth: 4
-            },
-            center: ['50%', '50%'],
-            labelLine: {
-            show: false
-            },
-            label: {
-            formatter:'{dot| } {title|{b} {c}}\n\n{per|{d}%}',
-            rich: {
-                title: {
-                color: '#fff'
+                radius: ['60%', '70%'],
+                // avoidLabelOverlap: false,
+                itemStyle: {
+                borderRadius: 4,
+                borderColor: 'rgba(52, 88, 159, 0.4)',
+                borderWidth: 4
                 },
-                per: {
-                color: '#01D9FE'
+                center: ['50%', '50%'],
+                labelLine: {
+                show: false
                 },
-                dot: {
-                backgroundColor: 'inherit',
-                width: 8,
-                height: 8,
-                borderRadius: 4
+                label: {
+                formatter:'{dot| } {title|{b} {c}}\n\n{per|{d}%}',
+                rich: {
+                    title: {
+                    color: '#fff'
+                    },
+                    per: {
+                    color: '#01D9FE'
+                    },
+                    dot: {
+                    backgroundColor: 'inherit',
+                    width: 8,
+                    height: 8,
+                    borderRadius: 4
+                    }
+                }
+                },
+                // labelLayout: {
+                //   hideOverlap: true
+                // },
+                endLabel: {
+                show: true,
+                distance: 5,
+                color: "red"
+                },
+                data: seriesData,
+                emphasis: {
+                itemStyle: {
+                    shadowBlur: 10,
+                    shadowOffsetX: 0,
+                    shadowColor: 'rgba(0, 0, 0, 1)'
+                }
                 }
             }
-            },
-            // labelLayout: {
-            //   hideOverlap: true
-            // },
-            endLabel: {
-            show: true,
-            distance: 5,
-            color: "red"
-            },
-            data: seriesData,
-            emphasis: {
-            itemStyle: {
-                shadowBlur: 10,
-                shadowOffsetX: 0,
-                shadowColor: 'rgba(0, 0, 0, 1)'
-            }
-            }
+            ]
         }
-        ]
-    }
-    option && myChart.setOption(option);
+        option && myChart.setOption(option);
     }
 
-    onMounted(() => {
-        setDayChart()
-        setTypeChart()
-    })
-
-    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)
@@ -519,7 +580,6 @@
                 if (i == 0) {
                     getWorkPlansList(companyId.value, departId.value)
                         .then(res => {
-                            console.log(res)
                             data.plannedProgress = res
                             nextTick(() => {
                                 start1()
@@ -528,7 +588,6 @@
                 } else {
                     getProcedureProcessList(companyId.value, departId.value)
                         .then(res => {
-                            console.log(res)
                             data.processProgress = res
                             nextTick(() => {
                                 start2()
@@ -575,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() {
@@ -726,6 +785,15 @@
             }
         }
     }
+
+    // onUnmounted(() => {
+
+    // })
+
+    onMounted(() => {
+        if (!departId.value) return;
+        timer5.value = setInterval(init(), 60000)
+    })
 </script>
 
 <style lang="scss" scoped>
@@ -775,6 +843,7 @@
                         }
                         .content_left_item1_content_row_name {
                             flex-shrink: 0;
+                            width: 100px;
                             display: flex;
                             align-items: center;
                             span {
@@ -819,6 +888,7 @@
                         }
                         .content_left_item1_content_row_num {
                             font-size: 13px;
+                            width: 60px;
                             font-family: SourceHanSansSC-Regular, SourceHanSansSC;
                             font-weight: 400;
                             color: #D2E0FF;
@@ -893,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;
                                     }
@@ -996,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;
                                     }
@@ -1038,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;
@@ -1098,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 {
@@ -1188,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;
@@ -1232,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;
@@ -1338,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