From b2ca05f7007f588f4d2b8eacb6ceb5535d1570aa Mon Sep 17 00:00:00 2001
From: 小小儁爺 <1694218219@qq.com>
Date: 星期五, 17 四月 2026 11:25:14 +0800
Subject: [PATCH] 1.看板发布2.报工记录功能发布

---
 src/permission.js                       |    2 
 src/views/kanbanManager/jghjcj_back.vue |  287 ++++++
 src/views/statistic/reportList.vue      |  653 ++++++++++++++
 src/views/kanbanManager/zpcj_back.vue   |  285 ++++++
 src/views/kanbanManager/jghjcj2.vue     |  287 ++++++
 src/router/index.js                     |    8 
 src/api/ReportManager.js                |   18 
 src/views/kanbanManager/jghjcj.vue      |  564 ++++++++----
 src/views/kanbanManager/zpcj.vue        |  559 ++++++++----
 9 files changed, 2,294 insertions(+), 369 deletions(-)

diff --git a/src/api/ReportManager.js b/src/api/ReportManager.js
index 27c0066..aa93227 100644
--- a/src/api/ReportManager.js
+++ b/src/api/ReportManager.js
@@ -186,3 +186,21 @@
     params: data
   })
 }
+
+// 鎶ュ伐璁板綍鍒楄〃鏁版嵁鏌ヨ
+export function MesOrderStepReportSearch(data) {
+  return request({
+    url: 'ReportManager/MesOrderStepReportSearch',
+    method: 'get',
+    params: data
+  })
+}
+
+// 鎶ュ伐璁板綍鍒楄〃鏁版嵁瀵煎嚭
+export function MesOrderStepReportExcelSearch(data) {
+  return request({
+    url: 'ReportManager/MesOrderStepReportExcelSearch',
+    method: 'get',
+    params: data
+  })
+}
diff --git a/src/permission.js b/src/permission.js
index b61e3a9..917b13d 100644
--- a/src/permission.js
+++ b/src/permission.js
@@ -9,7 +9,7 @@
 
 NProgress.configure({ showSpinner: false }) // NProgress Configuration
 
-const whiteList = ['/login', '/zhkb', '/zpcj', '/jghjcj', '/ckgl'] // no redirect whitelist
+const whiteList = ['/login', '/zhkb', '/zpcj', '/jghjcj', '/jghjcj2', '/ckgl'] // no redirect whitelist
 
 router.beforeEach(async(to, from, next) => {
   // start progress bar
diff --git a/src/router/index.js b/src/router/index.js
index ef55f11..55361ab 100644
--- a/src/router/index.js
+++ b/src/router/index.js
@@ -48,6 +48,10 @@
     component: () => import('@/views/kanbanManager/jghjcj'),
     hidden: true
   }, {
+    path: '/jghjcj2',
+    component: () => import('@/views/kanbanManager/jghjcj2'),
+    hidden: true
+  }, {
     path: '/ckgl',
     component: () => import('@/views/kanbanManager/ckgl'),
     hidden: true
@@ -523,9 +527,9 @@
       {
         path: 'reportList',
         name: 'ReportList',
-        code: '1040',
+        code: '0700',
         component: () => import('@/views/statistic/reportList'),
-        meta: { code: '1040', title: '鎶ュ伐璁板綍', icon: '', keepAlive: true }
+        meta: { code: '0700', title: '鎶ュ伐璁板綍', icon: '', keepAlive: true }
       },
       {
         path: 'monthReport',
diff --git a/src/views/kanbanManager/jghjcj.vue b/src/views/kanbanManager/jghjcj.vue
index 6f48418..773f02a 100644
--- a/src/views/kanbanManager/jghjcj.vue
+++ b/src/views/kanbanManager/jghjcj.vue
@@ -9,7 +9,7 @@
           <span>娴欐睙闃块瞾鍏嬪仴韬櫒鏉愭湁闄愬叕鍙�</span>
         </div>
 
-        <div class="kb_headTime kb_header_text" style="top: 35px;left:  772px">
+        <div class="kb_headTime kb_header_text" style="top: 35px;left:  768px">
           <span>閲戝伐鐒婃帴杞﹂棿鏁板瓧鍖栫湅鏉�</span>
         </div>
 
@@ -17,55 +17,134 @@
           <span>{{ headTime }}</span>
         </div>
       </div>
-
       <div
         style=" padding:5px 20px 20px 20px;z-index:2;height: 940px;flex-direction: column;justify-content: space-between;"
       >
         <!--        涓婅竟-->
         <div style="display: flex;justify-content: space-between">
-          <div style="width:100%">
-            <div class="smallTitle">
-              <svg-icon icon-class="cxjg" class="svg_class" />
-              鐢熶骇淇℃伅
-            </div>
-
-            <div style="height: 450px">
-              <dv-border-box-12>
-                <dv-scroll-board
-                  ref="scrollBoardTop"
-                  :config="configTableTop"
-                  style="width: 99%;height: 430px;margin:0 auto;padding-top: 13px;"
-                />
-              </dv-border-box-12>
-            </div>
-
-          </div>
-        </div>
-
-        <!--        涓嬭竟-->
-        <div style="display: flex;justify-content: space-between;margin-top: 15px;">
-          <div style="width: 1000px;">
+          <div style="width: 925px;">
             <div class="smallTitle">
               <svg-icon icon-class="blcs" class="svg_class" />
-              璐ㄩ噺涓嶈壇(杩戜竴鍛�)
+              閲囪喘璁㈠崟(鏈�/瀛�)
             </div>
+            <div
+              class="lineContent horn"
+              style="height: 450px;display: flex;flex-direction: column;justify-content: space-between"
+            >
+              <div style="height: 180px;padding: 10px;display: flex;justify-content: space-between">
 
-            <div style="height: 380px;">
-              <dv-border-box-12>
-                <div id="cjzl03" class="flex_c_c" style="width: 100%;height:100%" />
-              </dv-border-box-12>
+                <div v-for="i in LeftTopData01" :key="i.Quarter" class="flex_c_s">
+                  <div class="all_block03 flex_c_s">
+                    <div class="flex_c_c all_block04">{{ i.Quarter }}</div>
+                    <div class="" style="display: flex;justify-content:space-between">
+                      <div class="all_block04 flex_c_c" style="width: 49% ">浠诲姟鏁�</div>
+                      <div class="all_block04 flex_c_c" style="width: 49% ">{{ i.quantity }}</div>
+                    </div>
+                    <div class="" style="display: flex;justify-content:space-between">
+                      <div class="all_block04 flex_c_c" style="width: 49% ">鍏ュ簱鏁�</div>
+                      <div class="all_block04 flex_c_c" style="width: 49% ">{{ i.ouquantity }}</div>
+                    </div>
+                  </div>
+                </div>
+
+              </div>
+              <div style="height: 260px;">
+                <div id="all02_1" class="flex_c_c" style="width: 100%;height:100%;" />
+              </div>
             </div>
-
           </div>
-          <div style="width: 850px;">
+          <div style="width: 925px;">
+            <div class="smallTitle">
+              <svg-icon icon-class="cggz" class="svg_class" />
+              閿�鍞鍗�(鏈�/瀛�)
+            </div>
+            <div
+              class="lineContent horn"
+              style="height: 450px;display: flex;flex-direction: column;justify-content: space-between"
+            >
+              <div style="height: 180px;padding: 10px;display: flex;justify-content: space-between">
+
+                <div v-for="i in RightTopData01" :key="i.Quarter" class="flex_c_s">
+                  <div class="all_block03 flex_c_s">
+                    <div class="flex_c_c all_block04">{{ i.Quarter }}</div>
+                    <div class="" style="display: flex;justify-content:space-between">
+                      <div class="all_block04 flex_c_c" style="width: 49% ">浠诲姟鏁�</div>
+                      <div class="all_block04 flex_c_c" style="width: 49% ">{{ i.quantity }}</div>
+                    </div>
+                    <div class="" style="display: flex;justify-content:space-between">
+                      <div class="all_block04 flex_c_c" style="width: 49% ">鍑哄簱鏁�</div>
+                      <div class="all_block04 flex_c_c" style="width: 49% ">{{ i.ouquantity }}</div>
+                    </div>
+                  </div>
+                </div>
+
+              </div>
+              <div style="height: 260px;">
+                <div id="all02" class="flex_c_c" style="width: 100%;height:100%;" />
+              </div>
+            </div>
+          </div>
+        </div>
+        <!--        涓嬭竟-->
+        <div style="display: flex;justify-content: space-between;margin-top: 15px;">
+          <div style="width: 925px;">
+            <div class="smallTitle">
+              <svg-icon icon-class="cxjg" class="svg_class" />
+              鐢熶骇瀹屽伐(褰撴湀)
+            </div>
+            <div
+              class="lineContent horn"
+              style="height: 380px;display: flex;flex-direction: column;justify-content: space-between"
+            >
+              <div
+                style="padding: 10px;
+                display: flex;justify-content: flex-start;
+                flex-wrap: wrap;"
+              >
+                <div v-for="i in LeftBottomData01" :key="i.wkshp_code" style="margin:0 18px" class="flex_c_s">
+                  <div class="all_block01 flex_c_s">
+                    <div class="flex_c_c all_block02" style="">{{ i.wkshp_name }}</div>
+                    <div class="" style="display: flex;justify-content:space-between">
+                      <div class="all_block02 flex_c_c" style="width: 49% ">浠诲姟鏁�</div>
+                      <div class="all_block02 flex_c_c" style="width: 49% ">{{ i.plan_qty }}</div>
+                    </div>
+                    <div class="" style="display: flex;justify-content:space-between">
+                      <div class="all_block02 flex_c_c" style="width: 49% ">瀹屽伐鏁�</div>
+                      <div class="all_block02 flex_c_c" style="width: 49% ">{{ i.good_qty }}</div>
+                    </div>
+                  </div>
+                </div>
+
+              </div>
+              <!--              <div style="height: 260px;">-->
+              <!--                <div id="all01" class="flex_c_c" style="width: 100%;height:100%;" />-->
+              <!--              </div>-->
+            </div>
+          </div>
+          <div style="width: 925px;">
             <div class="smallTitle">
               <svg-icon icon-class="ckkc" class="svg_class" />
-              涓嶈壇缁熻(杩戜竴鏈�)
+              浠撳簱搴撳瓨
             </div>
-            <div style="height: 380px;">
-              <dv-border-box-12>
-                <div id="cjzl04" class="flex_c_c" style="width: 100%;height:100%" />
-              </dv-border-box-12>
+            <div class="lineContent horn" style="height: 380px;display: flex;justify-content: space-between">
+              <div style="display: flex;justify-content: center;position: relative">
+                <div class="kb_center_block_children all_block05">
+                  <div style="font-size: 24px;">{{ parseFloat(RightBottom.Y) }}</div>
+                  <div class="box02" />
+                  <div>鍘熸潗鏂�</div>
+                </div>
+                <!--                <div class="kb_center_block_children all_block06">-->
+                <!--                  <div style="font-size: 24px;">{{ parseFloat(RightBottom.B) }}</div>-->
+                <!--                  <div class="box02" />-->
+                <!--                  <div>鍗婃垚鍝�</div>-->
+                <!--                </div>-->
+                <div class="kb_center_block_children all_block07">
+                  <div style="font-size: 24px;">{{ parseFloat(RightBottom.C) }}</div>
+                  <div class="box02" />
+                  <div>浜ф垚鍝�</div>
+                </div>
+
+              </div>
             </div>
           </div>
         </div>
@@ -76,11 +155,9 @@
 
 <script>
 import './kbCommon.css'
-import { loadEcharts, cjzl04, cjzl03_2, cjzl03 } from '@/utils/myEcharts'
+import { loadEcharts, all02, all03 } from '@/utils/myEcharts'
 import {
-  WorkShopProduceBottomLeftData,
-  WorkShopProduceBottomRightData,
-  WorkShopProduceTopData
+  WorkShopCompreLeftBottom, WorkShopCompreLeftTop, WorkShopCompreRightBottom, WorkShopCompreRightTop
 } from '@/api/kanbanManager'
 
 export default {
@@ -88,152 +165,164 @@
   data() {
     return {
       headTime: '',
+      tableDataRightTop: [],
 
-      cjzl03_xData: [],
-      cjzl03_yData: [],
-      RightBottom: [],
+      LeftTopData01: [],
+      LeftTopData02: [],
 
-      configTableTop: {
-        headerBGC: 'rgba(38, 68 ,139, 0.2)', // 琛ㄥご鑳屾櫙鑹�
-        oddRowBGC: 'transparent', // 濂囨暟琛岃儗鏅壊
-        evenRowBGC: 'transparent', // 鍋舵暟琛岃儗鏅壊
-        headerHeight: 45,
-        waitTime: 3000,
-        rowNum: 8,
+      RightTopData01: [],
+      RightTopData02: [],
 
-        header: [
-          '<span style="color:#09d8f2;">宸ュ崟鍙�</span>',
-          '<span style="color:#09d8f2;">浜у搧缂栫爜</span>',
-          '<span style="color:#09d8f2;">浜у搧鍚嶇О</span>',
-          '<span style="color:#09d8f2;">浜у搧瑙勬牸</span>',
-          '<span style="color:#09d8f2;">浠诲姟鏁伴噺</span>',
-          '<span style="color:#09d8f2;">鍚堟牸鏁伴噺</span>',
-          '<span style="color:#09d8f2;">涓嶈壇鏁伴噺</span>',
+      LeftBottomData01: [],
+      LeftBottomData02: [],
 
-          '<span style="color:#09d8f2;">宸ュ簭椤哄簭</span>',
-          '<span style="color:#09d8f2;">宸ュ簭缂栫爜</span>',
-          '<span style="color:#09d8f2;">宸ュ簭鍚嶇О</span>',
-          '<span style="color:#09d8f2;">瀹屾垚杩涘害(%)</span>'
-        ],
-        // '<span style="color:#09d8f2;">宸ュ簾鏁伴噺</span>',
-        // '<span style="color:#09d8f2;">鏂欏簾鏁伴噺</span>',
-        data: [
-          // ['<span style="color:#37a2da;">琛�1鍒�1</span>', '琛�1鍒�2', '琛�1鍒�3'],
-        ],
-        // index: true, , 130, 130
-        columnWidth: [200, 140, 350, 350, 130, 130, 130, 130, 130, 130, 130],
-        align: ['center', 'center', 'center', 'center', 'center', 'center', 'center', 'center', 'center', 'center', 'center']
-        // carousel: 'page'
-      }
+      RightBottom: {}
 
     }
   },
   created() {
     setInterval(this.getNowTime, 1000)
 
-    // 涓ゅ皬鏃剁湅鏉垮埛鏂颁竴娆�
+    // // 涓ゅ皬鏃剁湅鏉垮埛鏂颁竴娆�
     setInterval(() => {
       window.location.reload()
     }, 1000 * 60 * 120)
   },
-  async mounted() {
-    await this.getWorkShopProduceTopData()
-    setInterval(() => {
-      this.getWorkShopProduceTopData()
-    }, 10 * 1000)
-    await this.getWorkShopProduceBottomLeftData()
-    setInterval(() => {
-      this.getWorkShopProduceBottomLeftData()
-    }, 20 * 1000)
-    await this.getWorkShopProduceBottomRightData()
-    setInterval(() => {
-      this.getWorkShopProduceBottomRightData()
-    }, 30 * 1000)
+  mounted() {
+    this.getAllApi()
   },
   methods: {
-    async getWorkShopProduceTopData() {
-      WorkShopProduceTopData({ wkshopcode: '02,03' }).then(res => {
-        const flag = this.compareArrays(this.configTableTop.data, res.data)
-        if (!flag) {
-          this.configTableTop.data = res.data.map(i =>
-            [
-              i.wo_code,
-              i.partcode,
-              i.partname,
-              i.partspec ? i.partspec : '/',
-              i.plan_qty,
-              i.good_qty,
-              `<span style="color: red;">${i.ng_qty}</span>`,
-              i.seq,
-              i.step_code,
-              i.step_name,
-              parseFloat(i.schedule.toFixed(2))
-            ]
-          )
-          // `<span style="color: red;">${i.laborbad_qty}</span>`,
-          // `<span style="color: red;">${i.materielbad_qty}</span>`,
-          this.$refs['scrollBoardTop'].updateRows(this.configTableTop.data)
-        }
+    async getAllApi() {
+      // 宸︿笂 閲囪喘璁㈠崟
+      const res2 = await WorkShopCompreLeftBottom()
+      res2.data.BottomLeftTop.forEach(i => {
+        this.LeftTopData01.push({
+          Quarter: i.Quarter,
+          quantity: i.quantity,
+          ouquantity: i.ouquantity
+        })
       })
-    },
-    async getWorkShopProduceBottomLeftData() {
-      const temp = [
-        // { code: '101', name: '鍙戞场杞﹂棿' },
-        // { code: '102', name: '鎸ゅ嚭杞﹂棿' },
-        // { code: '103', name: '鍖呰杞﹂棿' },
-        // { code: '001', name: '娴嬭瘯杞﹂棿' }
+      res2.data.BottomLeftBottom.forEach(i => {
+        this.LeftTopData02.push({
+          Month: i.Month + '鏈�',
+          quantity: i.quantity,
+          ouquantity: i.ouquantity
+        })
+      })
+      loadEcharts('all02_1', all02(this.LeftTopData02, '姣忔湀閲囪喘鏁伴噺/鍏ュ簱鏁伴噺'))
+      setInterval(() => {
+        this.LeftTopData01 = []
+        this.LeftTopData02 = []
+        WorkShopCompreLeftBottom().then(res2 => {
+          res2.data.BottomLeftTop.forEach(i => {
+            this.LeftTopData01.push({
+              Quarter: i.Quarter,
+              quantity: i.quantity,
+              ouquantity: i.ouquantity
+            })
+          })
+          res2.data.BottomLeftBottom.forEach(i => {
+            this.LeftTopData02.push({
+              Month: i.Month + '鏈�',
+              quantity: i.quantity,
+              ouquantity: i.ouquantity
+            })
+          })
+          loadEcharts('all02_1', all02(this.LeftTopData02, '姣忔湀閲囪喘鏁伴噺/鍏ュ簱鏁伴噺'))
+        })
+      }, 1000 * 35)
 
-        // { code: '01', name: '閲戝伐杞﹂棿' },
-        // { code: '02', name: '閾濅慨' },
-        // { code: '03', name: '鍙伴捇' },
-        // { code: '04', name: '鍠锋紗' },
-        // { code: '05', name: '缁勮鎴愬搧' }
+      // 鍙充笂 閿�鍞鍗�
+      const res3 = await WorkShopCompreRightTop()
+      res3.data.RightTop.forEach(i => {
+        this.RightTopData01.push({
+          Quarter: i.Quarter,
+          quantity: i.quantity,
+          ouquantity: i.ouquantity
+        })
+      })
+      res3.data.RightBottom.forEach(i => {
+        this.RightTopData02.push({
+          Month: i.Month + '鏈�',
+          quantity: i.quantity,
+          ouquantity: i.ouquantity
+        })
+      })
+      loadEcharts('all02', all02(this.RightTopData02, '姣忔湀璁㈠崟鏁伴噺/鍑哄簱鏁伴噺'))
+      setInterval(() => {
+        WorkShopCompreRightTop().then(res3 => {
+          this.RightTopData01 = []
+          this.RightTopData02 = []
+          res3.data.RightTop.forEach(i => {
+            this.RightTopData01.push({
+              Quarter: i.Quarter,
+              quantity: i.quantity,
+              ouquantity: i.ouquantity
+            })
+          })
+          res3.data.RightBottom.forEach(i => {
+            this.RightTopData02.push({
+              Month: i.Month + '鏈�',
+              quantity: i.quantity,
+              ouquantity: i.ouquantity
+            })
+          })
+          loadEcharts('all02', all02(this.RightTopData02, '姣忔湀璁㈠崟鏁伴噺/鍑哄簱鏁伴噺'))
+        })
+      }, 1000 * 40)
 
-        { code: '02', name: '閲戝伐杞﹂棿' },
-        { code: '03', name: '鐒婃帴杞﹂棿' }
+      const temp2 = [
+        { wkshp_code: '02', wkshp_name: '閲戝伐杞﹂棿' },
+        { wkshp_code: '03', wkshp_name: '鐒婃帴杞﹂棿' }
       ]
 
-      const res4 = await WorkShopProduceBottomLeftData({ wkshopcode: temp.map(i => i.code).join(',') })
-      // this.cjzl03_xData = res4.data['101,001'].map(i => i.click_date)
-      // this.cjzl03_yData = res4.data['101,001'].map(i => i.count)
-
-      const a = res4.data['004'].map(i => i.click_date) // echarts妯潗鏍�
-      const b = temp.map(i => i.name)// legendData鍊�
-      const c = [
-        // res4.data['01'].map(i => i.count),
-        // res4.data['02'].map(i => i.count),
-        // res4.data['03'].map(i => i.count),
-        // res4.data['04'].map(i => i.count),
-        // res4.data['05'].map(i => i.count)
-        res4.data['004'].map(i => i.count)
-      ]// 绾靛潗鏍囧��
-
-      loadEcharts('cjzl03', cjzl03(a, b, c))
-    },
-
-    async getWorkShopProduceBottomRightData() {
-      const temp = [
-        // { code: '101', name: '鍙戞场杞﹂棿' },
-        // { code: '102', name: '鎸ゅ嚭杞﹂棿' },
-        // { code: '103', name: '鍖呰杞﹂棿' },
-        // { code: '001', name: '娴嬭瘯杞﹂棿' }
-
-        // { code: '01', name: '閲戝伐杞﹂棿' },
-        // { code: '02', name: '閾濅慨' },
-        // { code: '03', name: '鍙伴捇' },
-        // { code: '04', name: '鍠锋紗' },
-        // { code: '05', name: '缁勮鎴愬搧' }
-
-        { code: '02', name: '閲戝伐杞﹂棿' },
-        { code: '03', name: '鐒婃帴杞﹂棿' }
-      ]
-      const res5 = await WorkShopProduceBottomRightData({ wkshopcode: temp.map(i => i.code).join(',') })
-      this.RightBottom = res5.data
-      if (this.RightBottom.length > 0) {
-        loadEcharts('cjzl04', cjzl04(this.RightBottom.map(i => i.name), this.RightBottom.map(i => i.cont)))
+      // 宸︿笅 鐢熶骇璁㈠崟
+      const res4 = await WorkShopCompreLeftTop({ wkshopcode: temp2.map(i => i.wkshp_code).join(',') })
+      for (const res4Key in res4.data.LeftTop) {
+        const data = {
+          good_qty: 0,
+          plan_qty: 0,
+          wkshp_code: '',
+          wkshp_name: ''
+        }
+        data.good_qty = res4.data.LeftTop[res4Key][0].good_qty
+        data.plan_qty = res4.data.LeftTop[res4Key][0].plan_qty
+        data.wkshp_code = res4.data.LeftTop[res4Key][0].wkshp_code
+        data.wkshp_name = temp2.find(i => i.wkshp_code === data.wkshp_code).wkshp_name
+        this.LeftBottomData01.push(data)
       }
-    },
 
+      setInterval(() => {
+        WorkShopCompreLeftTop({ wkshopcode: temp2.map(i => i.wkshp_code).join(',') }).then(res2 => {
+          this.LeftBottomData01 = []
+          this.LeftBottomData02 = []
+          for (const res4Key in res4.data.LeftTop) {
+            const data = {
+              good_qty: 0,
+              plan_qty: 0,
+              wkshp_code: '',
+              wkshp_name: ''
+            }
+
+            data.good_qty = res2.data.LeftTop[res4Key][0].good_qty
+            data.plan_qty = res2.data.LeftTop[res4Key][0].plan_qty
+            data.wkshp_code = res2.data.LeftTop[res4Key][0].wkshp_code
+            data.wkshp_name = temp2.find(i => i.wkshp_code === data.wkshp_code).wkshp_name
+            this.LeftBottomData01.push(data)
+          }
+        })
+      }, 1000 * 30)
+
+      // 鍙充笅 浠撳簱搴撳瓨
+      const res5 = await WorkShopCompreRightBottom()
+      this.RightBottom = res5.data
+
+      setInterval(() => {
+        WorkShopCompreRightBottom().then(res5 => {
+          this.RightBottom = res5.data
+        })
+      }, 1000 * 60)
+    },
     // 鑾峰彇褰撳墠鏃堕棿
     getNowTime() {
       const dt = new Date()
@@ -250,23 +339,25 @@
 
       this.headTime = `${y}-${m}-${d}  ${hh}:${mm}:${ss}   ${week}`
     },
-
-    // 涓や釜鏁扮粍鍋氬姣�
-    compareArrays(arr1, arr2) {
-      const set1 = new Set(arr1)
-      const set2 = new Set(arr2)
-
-      if (set1.size !== set2.size) {
-        return false
+    headerCellStyle() {
+      return {
+        backgroundColor: 'transparent ',
+        padding: '10px 0',
+        textAlign: 'center',
+        color: '#07acc2',
+        border: 'none',
+        fontSize: '20px'
       }
-
-      for (const value of set1) {
-        if (!set2.has(value)) {
-          return false
-        }
+    },
+    cellStyle() {
+      return {
+        padding: '7px 0',
+        textAlign: 'center',
+        backgroundColor: 'transparent ',
+        color: '#c7e7ff',
+        border: 'none',
+        fontSize: '20px'
       }
-
-      return true
     }
 
   }
@@ -275,13 +366,120 @@
 </script>
 
 <style lang="scss" scoped>
-
-::v-deep .header-item {
-  font-size: 16px !important;
+$main_color: #09d8f2;
+$color01: #00FFFF;
+.tableData {
+  background: transparent;
 }
 
-::v-deep .row-item {
-  font-size: 16px !important;
+.el-table::before {
+  height: 0;
 }
 
+.el-table__empty-text {
+  color: $main_color;
+}
+
+.tableDataCell {
+  ::v-deep .cell {
+    padding: 0 2px;
+  }
+}
+
+::v-deep .el-table__body-wrapper::-webkit-scrollbar {
+  /* width: 0;瀹藉害涓�0鏆楄棌 */
+  width: 0;
+  background: transparent;
+}
+
+::v-deep .el-table th,
+::v-deep .el-table tr,
+::v-deep .el-table td {
+  background-color: transparent;
+}
+
+.all_block01 {
+  width: 187px;
+  height: 180px;
+}
+
+.all_block02 {
+  width: 100%;
+  height: 49px;
+  background: rgba(9, 216, 242, 0.1);
+}
+
+.all_block03 {
+  width: 199px;
+  height: 180px;
+}
+
+.all_block04 {
+  width: 100%;
+  height: 49px;
+  background: rgba(9, 216, 242, 0.1);
+}
+
+.kb_center_block_children {
+  height: 180px;
+  //border: 1px solid $kbBorderColor;
+  width: 240px;
+  display: flex;
+  z-index: 2;
+  justify-content: space-around;
+  align-items: center;
+  flex-direction: column;
+  margin: 10px;
+  font-size: 22px;
+
+  .box02 {
+    background: url("../../assets/images/box02.png") no-repeat;
+    transform: scale(1.5);
+    width: 145px;
+    height: 84px;
+
+  }
+}
+
+.all_block05 {
+  position: absolute;
+  animation: upDown 3s ease-in-out infinite;
+  left: 170px;
+}
+
+//.all_block06 {
+//  position: absolute;
+//  animation: upDown2 3s ease-in-out infinite;
+//  left: 320px;
+//}
+
+.all_block07 {
+  position: absolute;
+  animation: upDown2 3s ease-in-out infinite;
+  left: 470px;
+}
+
+@keyframes upDown {
+  0% {
+    top: 50px;
+  }
+  50% {
+    top: 100px;
+  }
+  100% {
+    top: 50px;
+  }
+}
+
+@keyframes upDown2 {
+  0% {
+    top: 100px;
+  }
+  50% {
+    top: 50px;
+  }
+  100% {
+    top: 100px;
+  }
+}
 </style>
diff --git a/src/views/kanbanManager/jghjcj2.vue b/src/views/kanbanManager/jghjcj2.vue
new file mode 100644
index 0000000..57c6f25
--- /dev/null
+++ b/src/views/kanbanManager/jghjcj2.vue
@@ -0,0 +1,287 @@
+<template>
+  <div>
+    <div class="kb_dashboard" style="display:flex;flex-direction: column;justify-content: space-between">
+
+      <div class="kb_backgroundCustom" />
+
+      <div class="kb_header">
+        <div class="kb_headTime" style="top: 35px;left:  20px">
+          <span>娴欐睙闃块瞾鍏嬪仴韬櫒鏉愭湁闄愬叕鍙�</span>
+        </div>
+
+        <div class="kb_headTime kb_header_text" style="top: 35px;left:  772px">
+          <span>閲戝伐鐒婃帴杞﹂棿鏁板瓧鍖栫湅鏉�</span>
+        </div>
+
+        <div class="kb_headTime" style="top: 35px;right:  25px">
+          <span>{{ headTime }}</span>
+        </div>
+      </div>
+
+      <div
+        style=" padding:5px 20px 20px 20px;z-index:2;height: 940px;flex-direction: column;justify-content: space-between;"
+      >
+        <!--        涓婅竟-->
+        <div style="display: flex;justify-content: space-between">
+          <div style="width:100%">
+            <div class="smallTitle">
+              <svg-icon icon-class="cxjg" class="svg_class" />
+              鐢熶骇淇℃伅
+            </div>
+
+            <div style="height: 450px">
+              <dv-border-box-12>
+                <dv-scroll-board
+                  ref="scrollBoardTop"
+                  :config="configTableTop"
+                  style="width: 99%;height: 430px;margin:0 auto;padding-top: 13px;"
+                />
+              </dv-border-box-12>
+            </div>
+
+          </div>
+        </div>
+
+        <!--        涓嬭竟-->
+        <div style="display: flex;justify-content: space-between;margin-top: 15px;">
+          <div style="width: 1000px;">
+            <div class="smallTitle">
+              <svg-icon icon-class="blcs" class="svg_class" />
+              璐ㄩ噺涓嶈壇(杩戜竴鍛�)
+            </div>
+
+            <div style="height: 380px;">
+              <dv-border-box-12>
+                <div id="cjzl03" class="flex_c_c" style="width: 100%;height:100%" />
+              </dv-border-box-12>
+            </div>
+
+          </div>
+          <div style="width: 850px;">
+            <div class="smallTitle">
+              <svg-icon icon-class="ckkc" class="svg_class" />
+              涓嶈壇缁熻(杩戜竴鏈�)
+            </div>
+            <div style="height: 380px;">
+              <dv-border-box-12>
+                <div id="cjzl04" class="flex_c_c" style="width: 100%;height:100%" />
+              </dv-border-box-12>
+            </div>
+          </div>
+        </div>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+import './kbCommon.css'
+import { loadEcharts, cjzl04, cjzl03_2, cjzl03 } from '@/utils/myEcharts'
+import {
+  WorkShopProduceBottomLeftData,
+  WorkShopProduceBottomRightData,
+  WorkShopProduceTopData
+} from '@/api/kanbanManager'
+
+export default {
+  name: 'Cjsc',
+  data() {
+    return {
+      headTime: '',
+
+      cjzl03_xData: [],
+      cjzl03_yData: [],
+      RightBottom: [],
+
+      configTableTop: {
+        headerBGC: 'rgba(38, 68 ,139, 0.2)', // 琛ㄥご鑳屾櫙鑹�
+        oddRowBGC: 'transparent', // 濂囨暟琛岃儗鏅壊
+        evenRowBGC: 'transparent', // 鍋舵暟琛岃儗鏅壊
+        headerHeight: 45,
+        waitTime: 3000,
+        rowNum: 8,
+
+        header: [
+          '<span style="color:#09d8f2;">宸ュ崟鍙�</span>',
+          '<span style="color:#09d8f2;">浜у搧缂栫爜</span>',
+          '<span style="color:#09d8f2;">浜у搧鍚嶇О</span>',
+          '<span style="color:#09d8f2;">浜у搧瑙勬牸</span>',
+          '<span style="color:#09d8f2;">浠诲姟鏁伴噺</span>',
+          '<span style="color:#09d8f2;">鍚堟牸鏁伴噺</span>',
+          '<span style="color:#09d8f2;">涓嶈壇鏁伴噺</span>',
+
+          '<span style="color:#09d8f2;">宸ュ簭椤哄簭</span>',
+          '<span style="color:#09d8f2;">宸ュ簭缂栫爜</span>',
+          '<span style="color:#09d8f2;">宸ュ簭鍚嶇О</span>',
+          '<span style="color:#09d8f2;">瀹屾垚杩涘害(%)</span>'
+        ],
+        // '<span style="color:#09d8f2;">宸ュ簾鏁伴噺</span>',
+        // '<span style="color:#09d8f2;">鏂欏簾鏁伴噺</span>',
+        data: [
+          // ['<span style="color:#37a2da;">琛�1鍒�1</span>', '琛�1鍒�2', '琛�1鍒�3'],
+        ],
+        // index: true, , 130, 130
+        columnWidth: [200, 140, 350, 350, 130, 130, 130, 130, 130, 130, 130],
+        align: ['center', 'center', 'center', 'center', 'center', 'center', 'center', 'center', 'center', 'center', 'center']
+        // carousel: 'page'
+      }
+
+    }
+  },
+  created() {
+    setInterval(this.getNowTime, 1000)
+
+    // 涓ゅ皬鏃剁湅鏉垮埛鏂颁竴娆�
+    setInterval(() => {
+      window.location.reload()
+    }, 1000 * 60 * 120)
+  },
+  async mounted() {
+    await this.getWorkShopProduceTopData()
+    setInterval(() => {
+      this.getWorkShopProduceTopData()
+    }, 10 * 1000)
+    await this.getWorkShopProduceBottomLeftData()
+    setInterval(() => {
+      this.getWorkShopProduceBottomLeftData()
+    }, 20 * 1000)
+    await this.getWorkShopProduceBottomRightData()
+    setInterval(() => {
+      this.getWorkShopProduceBottomRightData()
+    }, 30 * 1000)
+  },
+  methods: {
+    async getWorkShopProduceTopData() {
+      WorkShopProduceTopData({ wkshopcode: '02,03' }).then(res => {
+        const flag = this.compareArrays(this.configTableTop.data, res.data)
+        if (!flag) {
+          this.configTableTop.data = res.data.map(i =>
+            [
+              i.wo_code,
+              i.partcode,
+              i.partname,
+              i.partspec ? i.partspec : '/',
+              i.plan_qty,
+              i.good_qty,
+              `<span style="color: red;">${i.ng_qty}</span>`,
+              i.seq,
+              i.step_code,
+              i.step_name,
+              parseFloat(i.schedule.toFixed(2))
+            ]
+          )
+          // `<span style="color: red;">${i.laborbad_qty}</span>`,
+          // `<span style="color: red;">${i.materielbad_qty}</span>`,
+          this.$refs['scrollBoardTop'].updateRows(this.configTableTop.data)
+        }
+      })
+    },
+    async getWorkShopProduceBottomLeftData() {
+      const temp = [
+        // { code: '101', name: '鍙戞场杞﹂棿' },
+        // { code: '102', name: '鎸ゅ嚭杞﹂棿' },
+        // { code: '103', name: '鍖呰杞﹂棿' },
+        // { code: '001', name: '娴嬭瘯杞﹂棿' }
+
+        // { code: '01', name: '閲戝伐杞﹂棿' },
+        // { code: '02', name: '閾濅慨' },
+        // { code: '03', name: '鍙伴捇' },
+        // { code: '04', name: '鍠锋紗' },
+        // { code: '05', name: '缁勮鎴愬搧' }
+
+        { code: '02', name: '閲戝伐杞﹂棿' },
+        { code: '03', name: '鐒婃帴杞﹂棿' }
+      ]
+
+      const res4 = await WorkShopProduceBottomLeftData({ wkshopcode: temp.map(i => i.code).join(',') })
+      // this.cjzl03_xData = res4.data['101,001'].map(i => i.click_date)
+      // this.cjzl03_yData = res4.data['101,001'].map(i => i.count)
+
+      const a = res4.data['03'].map(i => i.click_date) // echarts妯潗鏍�
+      const b = temp.map(i => i.name)// legendData鍊�
+      const c = [
+        // res4.data['01'].map(i => i.count),
+        // res4.data['02'].map(i => i.count),
+        // res4.data['03'].map(i => i.count),
+        res4.data['02'].map(i => i.count),
+        res4.data['03'].map(i => i.count)
+        // res4.data['004'].map(i => i.count)
+      ]// 绾靛潗鏍囧��
+
+      loadEcharts('cjzl03', cjzl03(a, b, c))
+    },
+
+    async getWorkShopProduceBottomRightData() {
+      const temp = [
+        // { code: '101', name: '鍙戞场杞﹂棿' },
+        // { code: '102', name: '鎸ゅ嚭杞﹂棿' },
+        // { code: '103', name: '鍖呰杞﹂棿' },
+        // { code: '001', name: '娴嬭瘯杞﹂棿' }
+
+        // { code: '01', name: '閲戝伐杞﹂棿' },
+        // { code: '02', name: '閾濅慨' },
+        // { code: '03', name: '鍙伴捇' },
+        // { code: '04', name: '鍠锋紗' },
+        // { code: '05', name: '缁勮鎴愬搧' }
+
+        { code: '02', name: '閲戝伐杞﹂棿' },
+        { code: '03', name: '鐒婃帴杞﹂棿' }
+      ]
+      const res5 = await WorkShopProduceBottomRightData({ wkshopcode: temp.map(i => i.code).join(',') })
+      this.RightBottom = res5.data
+      if (this.RightBottom.length > 0) {
+        loadEcharts('cjzl04', cjzl04(this.RightBottom.map(i => i.name), this.RightBottom.map(i => i.cont)))
+      }
+    },
+
+    // 鑾峰彇褰撳墠鏃堕棿
+    getNowTime() {
+      const dt = new Date()
+      const wk = dt.getDay()
+      const y = dt.getFullYear()
+      const m = (dt.getMonth() + 1 + '').padStart(2, '0')
+      const d = (dt.getDate() + '').padStart(2, '0')
+
+      const hh = (dt.getHours() + '').padStart(2, '0')
+      const mm = (dt.getMinutes() + '').padStart(2, '0')
+      const ss = (dt.getSeconds() + '').padStart(2, '0')
+      const weeks = ['鏄熸湡鏃�', '鏄熸湡涓�', '鏄熸湡浜�', '鏄熸湡涓�', '鏄熸湡鍥�', '鏄熸湡浜�', '鏄熸湡鍏�']
+      const week = weeks[wk]
+
+      this.headTime = `${y}-${m}-${d}  ${hh}:${mm}:${ss}   ${week}`
+    },
+
+    // 涓や釜鏁扮粍鍋氬姣�
+    compareArrays(arr1, arr2) {
+      const set1 = new Set(arr1)
+      const set2 = new Set(arr2)
+
+      if (set1.size !== set2.size) {
+        return false
+      }
+
+      for (const value of set1) {
+        if (!set2.has(value)) {
+          return false
+        }
+      }
+
+      return true
+    }
+
+  }
+
+}
+</script>
+
+<style lang="scss" scoped>
+
+::v-deep .header-item {
+  font-size: 16px !important;
+}
+
+::v-deep .row-item {
+  font-size: 16px !important;
+}
+
+</style>
diff --git a/src/views/kanbanManager/jghjcj_back.vue b/src/views/kanbanManager/jghjcj_back.vue
new file mode 100644
index 0000000..6f48418
--- /dev/null
+++ b/src/views/kanbanManager/jghjcj_back.vue
@@ -0,0 +1,287 @@
+<template>
+  <div>
+    <div class="kb_dashboard" style="display:flex;flex-direction: column;justify-content: space-between">
+
+      <div class="kb_backgroundCustom" />
+
+      <div class="kb_header">
+        <div class="kb_headTime" style="top: 35px;left:  20px">
+          <span>娴欐睙闃块瞾鍏嬪仴韬櫒鏉愭湁闄愬叕鍙�</span>
+        </div>
+
+        <div class="kb_headTime kb_header_text" style="top: 35px;left:  772px">
+          <span>閲戝伐鐒婃帴杞﹂棿鏁板瓧鍖栫湅鏉�</span>
+        </div>
+
+        <div class="kb_headTime" style="top: 35px;right:  25px">
+          <span>{{ headTime }}</span>
+        </div>
+      </div>
+
+      <div
+        style=" padding:5px 20px 20px 20px;z-index:2;height: 940px;flex-direction: column;justify-content: space-between;"
+      >
+        <!--        涓婅竟-->
+        <div style="display: flex;justify-content: space-between">
+          <div style="width:100%">
+            <div class="smallTitle">
+              <svg-icon icon-class="cxjg" class="svg_class" />
+              鐢熶骇淇℃伅
+            </div>
+
+            <div style="height: 450px">
+              <dv-border-box-12>
+                <dv-scroll-board
+                  ref="scrollBoardTop"
+                  :config="configTableTop"
+                  style="width: 99%;height: 430px;margin:0 auto;padding-top: 13px;"
+                />
+              </dv-border-box-12>
+            </div>
+
+          </div>
+        </div>
+
+        <!--        涓嬭竟-->
+        <div style="display: flex;justify-content: space-between;margin-top: 15px;">
+          <div style="width: 1000px;">
+            <div class="smallTitle">
+              <svg-icon icon-class="blcs" class="svg_class" />
+              璐ㄩ噺涓嶈壇(杩戜竴鍛�)
+            </div>
+
+            <div style="height: 380px;">
+              <dv-border-box-12>
+                <div id="cjzl03" class="flex_c_c" style="width: 100%;height:100%" />
+              </dv-border-box-12>
+            </div>
+
+          </div>
+          <div style="width: 850px;">
+            <div class="smallTitle">
+              <svg-icon icon-class="ckkc" class="svg_class" />
+              涓嶈壇缁熻(杩戜竴鏈�)
+            </div>
+            <div style="height: 380px;">
+              <dv-border-box-12>
+                <div id="cjzl04" class="flex_c_c" style="width: 100%;height:100%" />
+              </dv-border-box-12>
+            </div>
+          </div>
+        </div>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+import './kbCommon.css'
+import { loadEcharts, cjzl04, cjzl03_2, cjzl03 } from '@/utils/myEcharts'
+import {
+  WorkShopProduceBottomLeftData,
+  WorkShopProduceBottomRightData,
+  WorkShopProduceTopData
+} from '@/api/kanbanManager'
+
+export default {
+  name: 'Cjsc',
+  data() {
+    return {
+      headTime: '',
+
+      cjzl03_xData: [],
+      cjzl03_yData: [],
+      RightBottom: [],
+
+      configTableTop: {
+        headerBGC: 'rgba(38, 68 ,139, 0.2)', // 琛ㄥご鑳屾櫙鑹�
+        oddRowBGC: 'transparent', // 濂囨暟琛岃儗鏅壊
+        evenRowBGC: 'transparent', // 鍋舵暟琛岃儗鏅壊
+        headerHeight: 45,
+        waitTime: 3000,
+        rowNum: 8,
+
+        header: [
+          '<span style="color:#09d8f2;">宸ュ崟鍙�</span>',
+          '<span style="color:#09d8f2;">浜у搧缂栫爜</span>',
+          '<span style="color:#09d8f2;">浜у搧鍚嶇О</span>',
+          '<span style="color:#09d8f2;">浜у搧瑙勬牸</span>',
+          '<span style="color:#09d8f2;">浠诲姟鏁伴噺</span>',
+          '<span style="color:#09d8f2;">鍚堟牸鏁伴噺</span>',
+          '<span style="color:#09d8f2;">涓嶈壇鏁伴噺</span>',
+
+          '<span style="color:#09d8f2;">宸ュ簭椤哄簭</span>',
+          '<span style="color:#09d8f2;">宸ュ簭缂栫爜</span>',
+          '<span style="color:#09d8f2;">宸ュ簭鍚嶇О</span>',
+          '<span style="color:#09d8f2;">瀹屾垚杩涘害(%)</span>'
+        ],
+        // '<span style="color:#09d8f2;">宸ュ簾鏁伴噺</span>',
+        // '<span style="color:#09d8f2;">鏂欏簾鏁伴噺</span>',
+        data: [
+          // ['<span style="color:#37a2da;">琛�1鍒�1</span>', '琛�1鍒�2', '琛�1鍒�3'],
+        ],
+        // index: true, , 130, 130
+        columnWidth: [200, 140, 350, 350, 130, 130, 130, 130, 130, 130, 130],
+        align: ['center', 'center', 'center', 'center', 'center', 'center', 'center', 'center', 'center', 'center', 'center']
+        // carousel: 'page'
+      }
+
+    }
+  },
+  created() {
+    setInterval(this.getNowTime, 1000)
+
+    // 涓ゅ皬鏃剁湅鏉垮埛鏂颁竴娆�
+    setInterval(() => {
+      window.location.reload()
+    }, 1000 * 60 * 120)
+  },
+  async mounted() {
+    await this.getWorkShopProduceTopData()
+    setInterval(() => {
+      this.getWorkShopProduceTopData()
+    }, 10 * 1000)
+    await this.getWorkShopProduceBottomLeftData()
+    setInterval(() => {
+      this.getWorkShopProduceBottomLeftData()
+    }, 20 * 1000)
+    await this.getWorkShopProduceBottomRightData()
+    setInterval(() => {
+      this.getWorkShopProduceBottomRightData()
+    }, 30 * 1000)
+  },
+  methods: {
+    async getWorkShopProduceTopData() {
+      WorkShopProduceTopData({ wkshopcode: '02,03' }).then(res => {
+        const flag = this.compareArrays(this.configTableTop.data, res.data)
+        if (!flag) {
+          this.configTableTop.data = res.data.map(i =>
+            [
+              i.wo_code,
+              i.partcode,
+              i.partname,
+              i.partspec ? i.partspec : '/',
+              i.plan_qty,
+              i.good_qty,
+              `<span style="color: red;">${i.ng_qty}</span>`,
+              i.seq,
+              i.step_code,
+              i.step_name,
+              parseFloat(i.schedule.toFixed(2))
+            ]
+          )
+          // `<span style="color: red;">${i.laborbad_qty}</span>`,
+          // `<span style="color: red;">${i.materielbad_qty}</span>`,
+          this.$refs['scrollBoardTop'].updateRows(this.configTableTop.data)
+        }
+      })
+    },
+    async getWorkShopProduceBottomLeftData() {
+      const temp = [
+        // { code: '101', name: '鍙戞场杞﹂棿' },
+        // { code: '102', name: '鎸ゅ嚭杞﹂棿' },
+        // { code: '103', name: '鍖呰杞﹂棿' },
+        // { code: '001', name: '娴嬭瘯杞﹂棿' }
+
+        // { code: '01', name: '閲戝伐杞﹂棿' },
+        // { code: '02', name: '閾濅慨' },
+        // { code: '03', name: '鍙伴捇' },
+        // { code: '04', name: '鍠锋紗' },
+        // { code: '05', name: '缁勮鎴愬搧' }
+
+        { code: '02', name: '閲戝伐杞﹂棿' },
+        { code: '03', name: '鐒婃帴杞﹂棿' }
+      ]
+
+      const res4 = await WorkShopProduceBottomLeftData({ wkshopcode: temp.map(i => i.code).join(',') })
+      // this.cjzl03_xData = res4.data['101,001'].map(i => i.click_date)
+      // this.cjzl03_yData = res4.data['101,001'].map(i => i.count)
+
+      const a = res4.data['004'].map(i => i.click_date) // echarts妯潗鏍�
+      const b = temp.map(i => i.name)// legendData鍊�
+      const c = [
+        // res4.data['01'].map(i => i.count),
+        // res4.data['02'].map(i => i.count),
+        // res4.data['03'].map(i => i.count),
+        // res4.data['04'].map(i => i.count),
+        // res4.data['05'].map(i => i.count)
+        res4.data['004'].map(i => i.count)
+      ]// 绾靛潗鏍囧��
+
+      loadEcharts('cjzl03', cjzl03(a, b, c))
+    },
+
+    async getWorkShopProduceBottomRightData() {
+      const temp = [
+        // { code: '101', name: '鍙戞场杞﹂棿' },
+        // { code: '102', name: '鎸ゅ嚭杞﹂棿' },
+        // { code: '103', name: '鍖呰杞﹂棿' },
+        // { code: '001', name: '娴嬭瘯杞﹂棿' }
+
+        // { code: '01', name: '閲戝伐杞﹂棿' },
+        // { code: '02', name: '閾濅慨' },
+        // { code: '03', name: '鍙伴捇' },
+        // { code: '04', name: '鍠锋紗' },
+        // { code: '05', name: '缁勮鎴愬搧' }
+
+        { code: '02', name: '閲戝伐杞﹂棿' },
+        { code: '03', name: '鐒婃帴杞﹂棿' }
+      ]
+      const res5 = await WorkShopProduceBottomRightData({ wkshopcode: temp.map(i => i.code).join(',') })
+      this.RightBottom = res5.data
+      if (this.RightBottom.length > 0) {
+        loadEcharts('cjzl04', cjzl04(this.RightBottom.map(i => i.name), this.RightBottom.map(i => i.cont)))
+      }
+    },
+
+    // 鑾峰彇褰撳墠鏃堕棿
+    getNowTime() {
+      const dt = new Date()
+      const wk = dt.getDay()
+      const y = dt.getFullYear()
+      const m = (dt.getMonth() + 1 + '').padStart(2, '0')
+      const d = (dt.getDate() + '').padStart(2, '0')
+
+      const hh = (dt.getHours() + '').padStart(2, '0')
+      const mm = (dt.getMinutes() + '').padStart(2, '0')
+      const ss = (dt.getSeconds() + '').padStart(2, '0')
+      const weeks = ['鏄熸湡鏃�', '鏄熸湡涓�', '鏄熸湡浜�', '鏄熸湡涓�', '鏄熸湡鍥�', '鏄熸湡浜�', '鏄熸湡鍏�']
+      const week = weeks[wk]
+
+      this.headTime = `${y}-${m}-${d}  ${hh}:${mm}:${ss}   ${week}`
+    },
+
+    // 涓や釜鏁扮粍鍋氬姣�
+    compareArrays(arr1, arr2) {
+      const set1 = new Set(arr1)
+      const set2 = new Set(arr2)
+
+      if (set1.size !== set2.size) {
+        return false
+      }
+
+      for (const value of set1) {
+        if (!set2.has(value)) {
+          return false
+        }
+      }
+
+      return true
+    }
+
+  }
+
+}
+</script>
+
+<style lang="scss" scoped>
+
+::v-deep .header-item {
+  font-size: 16px !important;
+}
+
+::v-deep .row-item {
+  font-size: 16px !important;
+}
+
+</style>
diff --git a/src/views/kanbanManager/zpcj.vue b/src/views/kanbanManager/zpcj.vue
index 8e20b9d..7d18b1b 100644
--- a/src/views/kanbanManager/zpcj.vue
+++ b/src/views/kanbanManager/zpcj.vue
@@ -17,55 +17,134 @@
           <span>{{ headTime }}</span>
         </div>
       </div>
-
       <div
         style=" padding:5px 20px 20px 20px;z-index:2;height: 940px;flex-direction: column;justify-content: space-between;"
       >
         <!--        涓婅竟-->
         <div style="display: flex;justify-content: space-between">
-          <div style="width:100%">
-            <div class="smallTitle">
-              <svg-icon icon-class="cxjg" class="svg_class" />
-              鐢熶骇淇℃伅
-            </div>
-
-            <div style="height: 450px">
-              <dv-border-box-12>
-                <dv-scroll-board
-                  ref="scrollBoardTop"
-                  :config="configTableTop"
-                  style="width: 99%;height: 430px;margin:0 auto;padding-top: 13px;"
-                />
-              </dv-border-box-12>
-            </div>
-
-          </div>
-        </div>
-
-        <!--        涓嬭竟-->
-        <div style="display: flex;justify-content: space-between;margin-top: 15px;">
-          <div style="width: 1000px;">
+          <div style="width: 925px;">
             <div class="smallTitle">
               <svg-icon icon-class="blcs" class="svg_class" />
-              璐ㄩ噺涓嶈壇(杩戜竴鍛�)
+              閲囪喘璁㈠崟(鏈�/瀛�)
             </div>
+            <div
+              class="lineContent horn"
+              style="height: 450px;display: flex;flex-direction: column;justify-content: space-between"
+            >
+              <div style="height: 180px;padding: 10px;display: flex;justify-content: space-between">
 
-            <div style="height: 380px;">
-              <dv-border-box-12>
-                <div id="cjzl03" class="flex_c_c" style="width: 100%;height:100%" />
-              </dv-border-box-12>
+                <div v-for="i in LeftTopData01" :key="i.Quarter" class="flex_c_s">
+                  <div class="all_block03 flex_c_s">
+                    <div class="flex_c_c all_block04">{{ i.Quarter }}</div>
+                    <div class="" style="display: flex;justify-content:space-between">
+                      <div class="all_block04 flex_c_c" style="width: 49% ">浠诲姟鏁�</div>
+                      <div class="all_block04 flex_c_c" style="width: 49% ">{{ i.quantity }}</div>
+                    </div>
+                    <div class="" style="display: flex;justify-content:space-between">
+                      <div class="all_block04 flex_c_c" style="width: 49% ">鍏ュ簱鏁�</div>
+                      <div class="all_block04 flex_c_c" style="width: 49% ">{{ i.ouquantity }}</div>
+                    </div>
+                  </div>
+                </div>
+
+              </div>
+              <div style="height: 260px;">
+                <div id="all02_1" class="flex_c_c" style="width: 100%;height:100%;" />
+              </div>
             </div>
-
           </div>
-          <div style="width: 850px;">
+          <div style="width: 925px;">
+            <div class="smallTitle">
+              <svg-icon icon-class="cggz" class="svg_class" />
+              閿�鍞鍗�(鏈�/瀛�)
+            </div>
+            <div
+              class="lineContent horn"
+              style="height: 450px;display: flex;flex-direction: column;justify-content: space-between"
+            >
+              <div style="height: 180px;padding: 10px;display: flex;justify-content: space-between">
+
+                <div v-for="i in RightTopData01" :key="i.Quarter" class="flex_c_s">
+                  <div class="all_block03 flex_c_s">
+                    <div class="flex_c_c all_block04">{{ i.Quarter }}</div>
+                    <div class="" style="display: flex;justify-content:space-between">
+                      <div class="all_block04 flex_c_c" style="width: 49% ">浠诲姟鏁�</div>
+                      <div class="all_block04 flex_c_c" style="width: 49% ">{{ i.quantity }}</div>
+                    </div>
+                    <div class="" style="display: flex;justify-content:space-between">
+                      <div class="all_block04 flex_c_c" style="width: 49% ">鍑哄簱鏁�</div>
+                      <div class="all_block04 flex_c_c" style="width: 49% ">{{ i.ouquantity }}</div>
+                    </div>
+                  </div>
+                </div>
+
+              </div>
+              <div style="height: 260px;">
+                <div id="all02" class="flex_c_c" style="width: 100%;height:100%;" />
+              </div>
+            </div>
+          </div>
+        </div>
+        <!--        涓嬭竟-->
+        <div style="display: flex;justify-content: space-between;margin-top: 15px;">
+          <div style="width: 925px;">
+            <div class="smallTitle">
+              <svg-icon icon-class="cxjg" class="svg_class" />
+              鐢熶骇瀹屽伐(褰撴湀)
+            </div>
+            <div
+              class="lineContent horn"
+              style="height: 380px;display: flex;flex-direction: column;justify-content: space-between"
+            >
+              <div
+                style="padding: 10px;
+                display: flex;justify-content: flex-start;
+                flex-wrap: wrap;"
+              >
+                <div v-for="i in LeftBottomData01" :key="i.wkshp_code" style="margin:0 18px" class="flex_c_s">
+                  <div class="all_block01 flex_c_s">
+                    <div class="flex_c_c all_block02" style="">{{ i.wkshp_name }}</div>
+                    <div class="" style="display: flex;justify-content:space-between">
+                      <div class="all_block02 flex_c_c" style="width: 49% ">浠诲姟鏁�</div>
+                      <div class="all_block02 flex_c_c" style="width: 49% ">{{ i.plan_qty }}</div>
+                    </div>
+                    <div class="" style="display: flex;justify-content:space-between">
+                      <div class="all_block02 flex_c_c" style="width: 49% ">瀹屽伐鏁�</div>
+                      <div class="all_block02 flex_c_c" style="width: 49% ">{{ i.good_qty }}</div>
+                    </div>
+                  </div>
+                </div>
+
+              </div>
+              <!--              <div style="height: 260px;">-->
+              <!--                <div id="all01" class="flex_c_c" style="width: 100%;height:100%;" />-->
+              <!--              </div>-->
+            </div>
+          </div>
+          <div style="width: 925px;">
             <div class="smallTitle">
               <svg-icon icon-class="ckkc" class="svg_class" />
-              涓嶈壇缁熻(杩戜竴鏈�)
+              浠撳簱搴撳瓨
             </div>
-            <div style="height: 380px;">
-              <dv-border-box-12>
-                <div id="cjzl04" class="flex_c_c" style="width: 100%;height:100%" />
-              </dv-border-box-12>
+            <div class="lineContent horn" style="height: 380px;display: flex;justify-content: space-between">
+              <div style="display: flex;justify-content: center;position: relative">
+                <div class="kb_center_block_children all_block05">
+                  <div style="font-size: 24px;">{{ parseFloat(RightBottom.Y) }}</div>
+                  <div class="box02" />
+                  <div>鍘熸潗鏂�</div>
+                </div>
+                <!--                <div class="kb_center_block_children all_block06">-->
+                <!--                  <div style="font-size: 24px;">{{ parseFloat(RightBottom.B) }}</div>-->
+                <!--                  <div class="box02" />-->
+                <!--                  <div>鍗婃垚鍝�</div>-->
+                <!--                </div>-->
+                <div class="kb_center_block_children all_block07">
+                  <div style="font-size: 24px;">{{ parseFloat(RightBottom.C) }}</div>
+                  <div class="box02" />
+                  <div>浜ф垚鍝�</div>
+                </div>
+
+              </div>
             </div>
           </div>
         </div>
@@ -76,11 +155,9 @@
 
 <script>
 import './kbCommon.css'
-import { loadEcharts, cjzl04, cjzl03_2, cjzl03 } from '@/utils/myEcharts'
+import { loadEcharts, all02, all03 } from '@/utils/myEcharts'
 import {
-  WorkShopProduceBottomLeftData,
-  WorkShopProduceBottomRightData,
-  WorkShopProduceTopData
+  WorkShopCompreLeftBottom, WorkShopCompreLeftTop, WorkShopCompreRightBottom, WorkShopCompreRightTop
 } from '@/api/kanbanManager'
 
 export default {
@@ -88,150 +165,163 @@
   data() {
     return {
       headTime: '',
+      tableDataRightTop: [],
 
-      cjzl03_xData: [],
-      cjzl03_yData: [],
-      RightBottom: [],
+      LeftTopData01: [],
+      LeftTopData02: [],
 
-      configTableTop: {
-        headerBGC: 'rgba(38, 68 ,139, 0.2)', // 琛ㄥご鑳屾櫙鑹�
-        oddRowBGC: 'transparent', // 濂囨暟琛岃儗鏅壊
-        evenRowBGC: 'transparent', // 鍋舵暟琛岃儗鏅壊
-        headerHeight: 45,
-        waitTime: 3000,
-        rowNum: 8,
+      RightTopData01: [],
+      RightTopData02: [],
 
-        header: [
-          '<span style="color:#09d8f2;">宸ュ崟鍙�</span>',
-          '<span style="color:#09d8f2;">浜у搧缂栫爜</span>',
-          '<span style="color:#09d8f2;">浜у搧鍚嶇О</span>',
-          '<span style="color:#09d8f2;">浜у搧瑙勬牸</span>',
-          '<span style="color:#09d8f2;">浠诲姟鏁伴噺</span>',
-          '<span style="color:#09d8f2;">鍚堟牸鏁伴噺</span>',
-          '<span style="color:#09d8f2;">涓嶈壇鏁伴噺</span>',
+      LeftBottomData01: [],
+      LeftBottomData02: [],
 
-          '<span style="color:#09d8f2;">宸ュ簭椤哄簭</span>',
-          '<span style="color:#09d8f2;">宸ュ簭缂栫爜</span>',
-          '<span style="color:#09d8f2;">宸ュ簭鍚嶇О</span>',
-          '<span style="color:#09d8f2;">瀹屾垚杩涘害(%)</span>'
-        ],
-        // '<span style="color:#09d8f2;">宸ュ簾鏁伴噺</span>',
-        // '<span style="color:#09d8f2;">鏂欏簾鏁伴噺</span>',
-        data: [
-          // ['<span style="color:#37a2da;">琛�1鍒�1</span>', '琛�1鍒�2', '琛�1鍒�3'],
-        ],
-        // index: true, , 130, 130
-        columnWidth: [200, 140, 350, 350, 130, 130, 130, 130, 130, 130, 130],
-        align: ['center', 'center', 'center', 'center', 'center', 'center', 'center', 'center', 'center', 'center', 'center']
-        // carousel: 'page'
-      }
+      RightBottom: {}
 
     }
   },
   created() {
     setInterval(this.getNowTime, 1000)
 
-    // 涓ゅ皬鏃剁湅鏉垮埛鏂颁竴娆�
+    // // 涓ゅ皬鏃剁湅鏉垮埛鏂颁竴娆�
     setInterval(() => {
       window.location.reload()
     }, 1000 * 60 * 120)
   },
-  async mounted() {
-    await this.getWorkShopProduceTopData()
-    setInterval(() => {
-      this.getWorkShopProduceTopData()
-    }, 10 * 1000)
-    await this.getWorkShopProduceBottomLeftData()
-    setInterval(() => {
-      this.getWorkShopProduceBottomLeftData()
-    }, 20 * 1000)
-    await this.getWorkShopProduceBottomRightData()
-    setInterval(() => {
-      this.getWorkShopProduceBottomRightData()
-    }, 30 * 1000)
+  mounted() {
+    this.getAllApi()
   },
   methods: {
-    async getWorkShopProduceTopData() {
-      WorkShopProduceTopData({ wkshopcode: '004' }).then(res => {
-        const flag = this.compareArrays(this.configTableTop.data, res.data)
-        if (!flag) {
-          this.configTableTop.data = res.data.map(i =>
-            [
-              i.wo_code,
-              i.partcode,
-              i.partname,
-              i.partspec ? i.partspec : '/',
-              i.plan_qty,
-              i.good_qty,
-              `<span style="color: red;">${i.ng_qty}</span>`,
-              i.seq,
-              i.step_code,
-              i.step_name,
-              parseFloat(i.schedule.toFixed(2))
-            ]
-          )
-          // `<span style="color: red;">${i.laborbad_qty}</span>`,
-          // `<span style="color: red;">${i.materielbad_qty}</span>`,
-          this.$refs['scrollBoardTop'].updateRows(this.configTableTop.data)
-        }
+    async getAllApi() {
+      // 宸︿笂 閲囪喘璁㈠崟
+      const res2 = await WorkShopCompreLeftBottom()
+      res2.data.BottomLeftTop.forEach(i => {
+        this.LeftTopData01.push({
+          Quarter: i.Quarter,
+          quantity: i.quantity,
+          ouquantity: i.ouquantity
+        })
       })
-    },
-    async getWorkShopProduceBottomLeftData() {
-      const temp = [
-        // { code: '101', name: '鍙戞场杞﹂棿' },
-        // { code: '102', name: '鎸ゅ嚭杞﹂棿' },
-        // { code: '103', name: '鍖呰杞﹂棿' },
-        // { code: '001', name: '娴嬭瘯杞﹂棿' }
+      res2.data.BottomLeftBottom.forEach(i => {
+        this.LeftTopData02.push({
+          Month: i.Month + '鏈�',
+          quantity: i.quantity,
+          ouquantity: i.ouquantity
+        })
+      })
+      loadEcharts('all02_1', all02(this.LeftTopData02, '姣忔湀閲囪喘鏁伴噺/鍏ュ簱鏁伴噺'))
+      setInterval(() => {
+        this.LeftTopData01 = []
+        this.LeftTopData02 = []
+        WorkShopCompreLeftBottom().then(res2 => {
+          res2.data.BottomLeftTop.forEach(i => {
+            this.LeftTopData01.push({
+              Quarter: i.Quarter,
+              quantity: i.quantity,
+              ouquantity: i.ouquantity
+            })
+          })
+          res2.data.BottomLeftBottom.forEach(i => {
+            this.LeftTopData02.push({
+              Month: i.Month + '鏈�',
+              quantity: i.quantity,
+              ouquantity: i.ouquantity
+            })
+          })
+          loadEcharts('all02_1', all02(this.LeftTopData02, '姣忔湀閲囪喘鏁伴噺/鍏ュ簱鏁伴噺'))
+        })
+      }, 1000 * 35)
 
-        // { code: '01', name: '閲戝伐杞﹂棿' },
-        // { code: '02', name: '閾濅慨' },
-        // { code: '03', name: '鍙伴捇' },
-        // { code: '04', name: '鍠锋紗' },
-        // { code: '05', name: '缁勮鎴愬搧' }
+      // 鍙充笂 閿�鍞鍗�
+      const res3 = await WorkShopCompreRightTop()
+      res3.data.RightTop.forEach(i => {
+        this.RightTopData01.push({
+          Quarter: i.Quarter,
+          quantity: i.quantity,
+          ouquantity: i.ouquantity
+        })
+      })
+      res3.data.RightBottom.forEach(i => {
+        this.RightTopData02.push({
+          Month: i.Month + '鏈�',
+          quantity: i.quantity,
+          ouquantity: i.ouquantity
+        })
+      })
+      loadEcharts('all02', all02(this.RightTopData02, '姣忔湀璁㈠崟鏁伴噺/鍑哄簱鏁伴噺'))
+      setInterval(() => {
+        WorkShopCompreRightTop().then(res3 => {
+          this.RightTopData01 = []
+          this.RightTopData02 = []
+          res3.data.RightTop.forEach(i => {
+            this.RightTopData01.push({
+              Quarter: i.Quarter,
+              quantity: i.quantity,
+              ouquantity: i.ouquantity
+            })
+          })
+          res3.data.RightBottom.forEach(i => {
+            this.RightTopData02.push({
+              Month: i.Month + '鏈�',
+              quantity: i.quantity,
+              ouquantity: i.ouquantity
+            })
+          })
+          loadEcharts('all02', all02(this.RightTopData02, '姣忔湀璁㈠崟鏁伴噺/鍑哄簱鏁伴噺'))
+        })
+      }, 1000 * 40)
 
-        { code: '004', name: '瑁呴厤杞﹂棿' }
+      const temp2 = [
+        { wkshp_code: '004', wkshp_name: '瑁呴厤杞﹂棿' }
       ]
 
-      const res4 = await WorkShopProduceBottomLeftData({ wkshopcode: temp.map(i => i.code).join(',') })
-      // this.cjzl03_xData = res4.data['101,001'].map(i => i.click_date)
-      // this.cjzl03_yData = res4.data['101,001'].map(i => i.count)
-
-      const a = res4.data['004'].map(i => i.click_date) // echarts妯潗鏍�
-      const b = temp.map(i => i.name)// legendData鍊�
-      const c = [
-        // res4.data['01'].map(i => i.count),
-        // res4.data['02'].map(i => i.count),
-        // res4.data['03'].map(i => i.count),
-        // res4.data['04'].map(i => i.count),
-        // res4.data['05'].map(i => i.count)
-        res4.data['004'].map(i => i.count)
-      ]// 绾靛潗鏍囧��
-
-      loadEcharts('cjzl03', cjzl03(a, b, c))
-    },
-
-    async getWorkShopProduceBottomRightData() {
-      const temp = [
-        // { code: '101', name: '鍙戞场杞﹂棿' },
-        // { code: '102', name: '鎸ゅ嚭杞﹂棿' },
-        // { code: '103', name: '鍖呰杞﹂棿' },
-        // { code: '001', name: '娴嬭瘯杞﹂棿' }
-
-        // { code: '01', name: '閲戝伐杞﹂棿' },
-        // { code: '02', name: '閾濅慨' },
-        // { code: '03', name: '鍙伴捇' },
-        // { code: '04', name: '鍠锋紗' },
-        // { code: '05', name: '缁勮鎴愬搧' }
-
-        { code: '004', name: '瑁呴厤杞﹂棿' }
-      ]
-      const res5 = await WorkShopProduceBottomRightData({ wkshopcode: temp.map(i => i.code).join(',') })
-      this.RightBottom = res5.data
-      if (this.RightBottom.length > 0) {
-        loadEcharts('cjzl04', cjzl04(this.RightBottom.map(i => i.name), this.RightBottom.map(i => i.cont)))
+      // 宸︿笅 鐢熶骇璁㈠崟
+      const res4 = await WorkShopCompreLeftTop({ wkshopcode: temp2.map(i => i.wkshp_code).join(',') })
+      for (const res4Key in res4.data.LeftTop) {
+        const data = {
+          good_qty: 0,
+          plan_qty: 0,
+          wkshp_code: '',
+          wkshp_name: ''
+        }
+        data.good_qty = res4.data.LeftTop[res4Key][0].good_qty
+        data.plan_qty = res4.data.LeftTop[res4Key][0].plan_qty
+        data.wkshp_code = res4.data.LeftTop[res4Key][0].wkshp_code
+        data.wkshp_name = temp2.find(i => i.wkshp_code === data.wkshp_code).wkshp_name
+        this.LeftBottomData01.push(data)
       }
-    },
 
+      setInterval(() => {
+        WorkShopCompreLeftTop({ wkshopcode: temp2.map(i => i.wkshp_code).join(',') }).then(res2 => {
+          this.LeftBottomData01 = []
+          this.LeftBottomData02 = []
+          for (const res4Key in res4.data.LeftTop) {
+            const data = {
+              good_qty: 0,
+              plan_qty: 0,
+              wkshp_code: '',
+              wkshp_name: ''
+            }
+
+            data.good_qty = res2.data.LeftTop[res4Key][0].good_qty
+            data.plan_qty = res2.data.LeftTop[res4Key][0].plan_qty
+            data.wkshp_code = res2.data.LeftTop[res4Key][0].wkshp_code
+            data.wkshp_name = temp2.find(i => i.wkshp_code === data.wkshp_code).wkshp_name
+            this.LeftBottomData01.push(data)
+          }
+        })
+      }, 1000 * 30)
+
+      // 鍙充笅 浠撳簱搴撳瓨
+      const res5 = await WorkShopCompreRightBottom()
+      this.RightBottom = res5.data
+
+      setInterval(() => {
+        WorkShopCompreRightBottom().then(res5 => {
+          this.RightBottom = res5.data
+        })
+      }, 1000 * 60)
+    },
     // 鑾峰彇褰撳墠鏃堕棿
     getNowTime() {
       const dt = new Date()
@@ -248,23 +338,25 @@
 
       this.headTime = `${y}-${m}-${d}  ${hh}:${mm}:${ss}   ${week}`
     },
-
-    // 涓や釜鏁扮粍鍋氬姣�
-    compareArrays(arr1, arr2) {
-      const set1 = new Set(arr1)
-      const set2 = new Set(arr2)
-
-      if (set1.size !== set2.size) {
-        return false
+    headerCellStyle() {
+      return {
+        backgroundColor: 'transparent ',
+        padding: '10px 0',
+        textAlign: 'center',
+        color: '#07acc2',
+        border: 'none',
+        fontSize: '20px'
       }
-
-      for (const value of set1) {
-        if (!set2.has(value)) {
-          return false
-        }
+    },
+    cellStyle() {
+      return {
+        padding: '7px 0',
+        textAlign: 'center',
+        backgroundColor: 'transparent ',
+        color: '#c7e7ff',
+        border: 'none',
+        fontSize: '20px'
       }
-
-      return true
     }
 
   }
@@ -273,13 +365,120 @@
 </script>
 
 <style lang="scss" scoped>
-
-::v-deep .header-item {
-  font-size: 16px !important;
+$main_color: #09d8f2;
+$color01: #00FFFF;
+.tableData {
+  background: transparent;
 }
 
-::v-deep .row-item {
-  font-size: 16px !important;
+.el-table::before {
+  height: 0;
 }
 
+.el-table__empty-text {
+  color: $main_color;
+}
+
+.tableDataCell {
+  ::v-deep .cell {
+    padding: 0 2px;
+  }
+}
+
+::v-deep .el-table__body-wrapper::-webkit-scrollbar {
+  /* width: 0;瀹藉害涓�0鏆楄棌 */
+  width: 0;
+  background: transparent;
+}
+
+::v-deep .el-table th,
+::v-deep .el-table tr,
+::v-deep .el-table td {
+  background-color: transparent;
+}
+
+.all_block01 {
+  width: 187px;
+  height: 180px;
+}
+
+.all_block02 {
+  width: 100%;
+  height: 49px;
+  background: rgba(9, 216, 242, 0.1);
+}
+
+.all_block03 {
+  width: 199px;
+  height: 180px;
+}
+
+.all_block04 {
+  width: 100%;
+  height: 49px;
+  background: rgba(9, 216, 242, 0.1);
+}
+
+.kb_center_block_children {
+  height: 180px;
+  //border: 1px solid $kbBorderColor;
+  width: 240px;
+  display: flex;
+  z-index: 2;
+  justify-content: space-around;
+  align-items: center;
+  flex-direction: column;
+  margin: 10px;
+  font-size: 22px;
+
+  .box02 {
+    background: url("../../assets/images/box02.png") no-repeat;
+    transform: scale(1.5);
+    width: 145px;
+    height: 84px;
+
+  }
+}
+
+.all_block05 {
+  position: absolute;
+  animation: upDown 3s ease-in-out infinite;
+  left: 170px;
+}
+
+//.all_block06 {
+//  position: absolute;
+//  animation: upDown2 3s ease-in-out infinite;
+//  left: 320px;
+//}
+
+.all_block07 {
+  position: absolute;
+  animation: upDown2 3s ease-in-out infinite;
+  left: 470px;
+}
+
+@keyframes upDown {
+  0% {
+    top: 50px;
+  }
+  50% {
+    top: 100px;
+  }
+  100% {
+    top: 50px;
+  }
+}
+
+@keyframes upDown2 {
+  0% {
+    top: 100px;
+  }
+  50% {
+    top: 50px;
+  }
+  100% {
+    top: 100px;
+  }
+}
 </style>
diff --git a/src/views/kanbanManager/zpcj_back.vue b/src/views/kanbanManager/zpcj_back.vue
new file mode 100644
index 0000000..8e20b9d
--- /dev/null
+++ b/src/views/kanbanManager/zpcj_back.vue
@@ -0,0 +1,285 @@
+<template>
+  <div>
+    <div class="kb_dashboard" style="display:flex;flex-direction: column;justify-content: space-between">
+
+      <div class="kb_backgroundCustom" />
+
+      <div class="kb_header">
+        <div class="kb_headTime" style="top: 35px;left:  20px">
+          <span>娴欐睙闃块瞾鍏嬪仴韬櫒鏉愭湁闄愬叕鍙�</span>
+        </div>
+
+        <div class="kb_headTime kb_header_text" style="top: 35px;left:  800px">
+          <span>瑁呴厤杞﹂棿鏁板瓧鍖栫湅鏉�</span>
+        </div>
+
+        <div class="kb_headTime" style="top: 35px;right:  25px">
+          <span>{{ headTime }}</span>
+        </div>
+      </div>
+
+      <div
+        style=" padding:5px 20px 20px 20px;z-index:2;height: 940px;flex-direction: column;justify-content: space-between;"
+      >
+        <!--        涓婅竟-->
+        <div style="display: flex;justify-content: space-between">
+          <div style="width:100%">
+            <div class="smallTitle">
+              <svg-icon icon-class="cxjg" class="svg_class" />
+              鐢熶骇淇℃伅
+            </div>
+
+            <div style="height: 450px">
+              <dv-border-box-12>
+                <dv-scroll-board
+                  ref="scrollBoardTop"
+                  :config="configTableTop"
+                  style="width: 99%;height: 430px;margin:0 auto;padding-top: 13px;"
+                />
+              </dv-border-box-12>
+            </div>
+
+          </div>
+        </div>
+
+        <!--        涓嬭竟-->
+        <div style="display: flex;justify-content: space-between;margin-top: 15px;">
+          <div style="width: 1000px;">
+            <div class="smallTitle">
+              <svg-icon icon-class="blcs" class="svg_class" />
+              璐ㄩ噺涓嶈壇(杩戜竴鍛�)
+            </div>
+
+            <div style="height: 380px;">
+              <dv-border-box-12>
+                <div id="cjzl03" class="flex_c_c" style="width: 100%;height:100%" />
+              </dv-border-box-12>
+            </div>
+
+          </div>
+          <div style="width: 850px;">
+            <div class="smallTitle">
+              <svg-icon icon-class="ckkc" class="svg_class" />
+              涓嶈壇缁熻(杩戜竴鏈�)
+            </div>
+            <div style="height: 380px;">
+              <dv-border-box-12>
+                <div id="cjzl04" class="flex_c_c" style="width: 100%;height:100%" />
+              </dv-border-box-12>
+            </div>
+          </div>
+        </div>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+import './kbCommon.css'
+import { loadEcharts, cjzl04, cjzl03_2, cjzl03 } from '@/utils/myEcharts'
+import {
+  WorkShopProduceBottomLeftData,
+  WorkShopProduceBottomRightData,
+  WorkShopProduceTopData
+} from '@/api/kanbanManager'
+
+export default {
+  name: 'Cjsc',
+  data() {
+    return {
+      headTime: '',
+
+      cjzl03_xData: [],
+      cjzl03_yData: [],
+      RightBottom: [],
+
+      configTableTop: {
+        headerBGC: 'rgba(38, 68 ,139, 0.2)', // 琛ㄥご鑳屾櫙鑹�
+        oddRowBGC: 'transparent', // 濂囨暟琛岃儗鏅壊
+        evenRowBGC: 'transparent', // 鍋舵暟琛岃儗鏅壊
+        headerHeight: 45,
+        waitTime: 3000,
+        rowNum: 8,
+
+        header: [
+          '<span style="color:#09d8f2;">宸ュ崟鍙�</span>',
+          '<span style="color:#09d8f2;">浜у搧缂栫爜</span>',
+          '<span style="color:#09d8f2;">浜у搧鍚嶇О</span>',
+          '<span style="color:#09d8f2;">浜у搧瑙勬牸</span>',
+          '<span style="color:#09d8f2;">浠诲姟鏁伴噺</span>',
+          '<span style="color:#09d8f2;">鍚堟牸鏁伴噺</span>',
+          '<span style="color:#09d8f2;">涓嶈壇鏁伴噺</span>',
+
+          '<span style="color:#09d8f2;">宸ュ簭椤哄簭</span>',
+          '<span style="color:#09d8f2;">宸ュ簭缂栫爜</span>',
+          '<span style="color:#09d8f2;">宸ュ簭鍚嶇О</span>',
+          '<span style="color:#09d8f2;">瀹屾垚杩涘害(%)</span>'
+        ],
+        // '<span style="color:#09d8f2;">宸ュ簾鏁伴噺</span>',
+        // '<span style="color:#09d8f2;">鏂欏簾鏁伴噺</span>',
+        data: [
+          // ['<span style="color:#37a2da;">琛�1鍒�1</span>', '琛�1鍒�2', '琛�1鍒�3'],
+        ],
+        // index: true, , 130, 130
+        columnWidth: [200, 140, 350, 350, 130, 130, 130, 130, 130, 130, 130],
+        align: ['center', 'center', 'center', 'center', 'center', 'center', 'center', 'center', 'center', 'center', 'center']
+        // carousel: 'page'
+      }
+
+    }
+  },
+  created() {
+    setInterval(this.getNowTime, 1000)
+
+    // 涓ゅ皬鏃剁湅鏉垮埛鏂颁竴娆�
+    setInterval(() => {
+      window.location.reload()
+    }, 1000 * 60 * 120)
+  },
+  async mounted() {
+    await this.getWorkShopProduceTopData()
+    setInterval(() => {
+      this.getWorkShopProduceTopData()
+    }, 10 * 1000)
+    await this.getWorkShopProduceBottomLeftData()
+    setInterval(() => {
+      this.getWorkShopProduceBottomLeftData()
+    }, 20 * 1000)
+    await this.getWorkShopProduceBottomRightData()
+    setInterval(() => {
+      this.getWorkShopProduceBottomRightData()
+    }, 30 * 1000)
+  },
+  methods: {
+    async getWorkShopProduceTopData() {
+      WorkShopProduceTopData({ wkshopcode: '004' }).then(res => {
+        const flag = this.compareArrays(this.configTableTop.data, res.data)
+        if (!flag) {
+          this.configTableTop.data = res.data.map(i =>
+            [
+              i.wo_code,
+              i.partcode,
+              i.partname,
+              i.partspec ? i.partspec : '/',
+              i.plan_qty,
+              i.good_qty,
+              `<span style="color: red;">${i.ng_qty}</span>`,
+              i.seq,
+              i.step_code,
+              i.step_name,
+              parseFloat(i.schedule.toFixed(2))
+            ]
+          )
+          // `<span style="color: red;">${i.laborbad_qty}</span>`,
+          // `<span style="color: red;">${i.materielbad_qty}</span>`,
+          this.$refs['scrollBoardTop'].updateRows(this.configTableTop.data)
+        }
+      })
+    },
+    async getWorkShopProduceBottomLeftData() {
+      const temp = [
+        // { code: '101', name: '鍙戞场杞﹂棿' },
+        // { code: '102', name: '鎸ゅ嚭杞﹂棿' },
+        // { code: '103', name: '鍖呰杞﹂棿' },
+        // { code: '001', name: '娴嬭瘯杞﹂棿' }
+
+        // { code: '01', name: '閲戝伐杞﹂棿' },
+        // { code: '02', name: '閾濅慨' },
+        // { code: '03', name: '鍙伴捇' },
+        // { code: '04', name: '鍠锋紗' },
+        // { code: '05', name: '缁勮鎴愬搧' }
+
+        { code: '004', name: '瑁呴厤杞﹂棿' }
+      ]
+
+      const res4 = await WorkShopProduceBottomLeftData({ wkshopcode: temp.map(i => i.code).join(',') })
+      // this.cjzl03_xData = res4.data['101,001'].map(i => i.click_date)
+      // this.cjzl03_yData = res4.data['101,001'].map(i => i.count)
+
+      const a = res4.data['004'].map(i => i.click_date) // echarts妯潗鏍�
+      const b = temp.map(i => i.name)// legendData鍊�
+      const c = [
+        // res4.data['01'].map(i => i.count),
+        // res4.data['02'].map(i => i.count),
+        // res4.data['03'].map(i => i.count),
+        // res4.data['04'].map(i => i.count),
+        // res4.data['05'].map(i => i.count)
+        res4.data['004'].map(i => i.count)
+      ]// 绾靛潗鏍囧��
+
+      loadEcharts('cjzl03', cjzl03(a, b, c))
+    },
+
+    async getWorkShopProduceBottomRightData() {
+      const temp = [
+        // { code: '101', name: '鍙戞场杞﹂棿' },
+        // { code: '102', name: '鎸ゅ嚭杞﹂棿' },
+        // { code: '103', name: '鍖呰杞﹂棿' },
+        // { code: '001', name: '娴嬭瘯杞﹂棿' }
+
+        // { code: '01', name: '閲戝伐杞﹂棿' },
+        // { code: '02', name: '閾濅慨' },
+        // { code: '03', name: '鍙伴捇' },
+        // { code: '04', name: '鍠锋紗' },
+        // { code: '05', name: '缁勮鎴愬搧' }
+
+        { code: '004', name: '瑁呴厤杞﹂棿' }
+      ]
+      const res5 = await WorkShopProduceBottomRightData({ wkshopcode: temp.map(i => i.code).join(',') })
+      this.RightBottom = res5.data
+      if (this.RightBottom.length > 0) {
+        loadEcharts('cjzl04', cjzl04(this.RightBottom.map(i => i.name), this.RightBottom.map(i => i.cont)))
+      }
+    },
+
+    // 鑾峰彇褰撳墠鏃堕棿
+    getNowTime() {
+      const dt = new Date()
+      const wk = dt.getDay()
+      const y = dt.getFullYear()
+      const m = (dt.getMonth() + 1 + '').padStart(2, '0')
+      const d = (dt.getDate() + '').padStart(2, '0')
+
+      const hh = (dt.getHours() + '').padStart(2, '0')
+      const mm = (dt.getMinutes() + '').padStart(2, '0')
+      const ss = (dt.getSeconds() + '').padStart(2, '0')
+      const weeks = ['鏄熸湡鏃�', '鏄熸湡涓�', '鏄熸湡浜�', '鏄熸湡涓�', '鏄熸湡鍥�', '鏄熸湡浜�', '鏄熸湡鍏�']
+      const week = weeks[wk]
+
+      this.headTime = `${y}-${m}-${d}  ${hh}:${mm}:${ss}   ${week}`
+    },
+
+    // 涓や釜鏁扮粍鍋氬姣�
+    compareArrays(arr1, arr2) {
+      const set1 = new Set(arr1)
+      const set2 = new Set(arr2)
+
+      if (set1.size !== set2.size) {
+        return false
+      }
+
+      for (const value of set1) {
+        if (!set2.has(value)) {
+          return false
+        }
+      }
+
+      return true
+    }
+
+  }
+
+}
+</script>
+
+<style lang="scss" scoped>
+
+::v-deep .header-item {
+  font-size: 16px !important;
+}
+
+::v-deep .row-item {
+  font-size: 16px !important;
+}
+
+</style>
diff --git a/src/views/statistic/reportList.vue b/src/views/statistic/reportList.vue
index 1792657..8df2db0 100644
--- a/src/views/statistic/reportList.vue
+++ b/src/views/statistic/reportList.vue
@@ -1,11 +1,658 @@
-<template />
+<template>
+  <div>
+    <div class="body" :style="{height:mainHeight+'px'}">
+      <div class="bodyTopButtonGroup">
+        <el-button v-waves type="primary" icon="el-icon-download" @click="download">瀵煎嚭</el-button>
+      </div>
+
+      <div class="bodyTopFormGroup">
+        <el-form
+          ref="form"
+          :model="form"
+          label-width="100px"
+          inline
+          style="display: flex;"
+        >
+          <div class="elForm">
+            <el-form-item label="杞﹂棿鍚嶇О" style=" display: flex;">
+              <el-select
+                v-model="form.wkshopcode"
+                filterable
+                :popper-append-to-body="false"
+                style="width: 200px"
+                placeholder="璇烽�夋嫨"
+              >
+                <el-option
+                  v-for="item in wkshopcodeArr"
+                  :key="item.torg_code"
+                  :label="item.torg_name"
+                  :value="item.torg_code"
+                />
+              </el-select>
+            </el-form-item>
+            <el-form-item label="宸ュ崟缂栧彿" style=" display: flex;">
+              <el-input v-model="form.wocode" placeholder="璇疯緭鍏�" style="width: 200px" />
+            </el-form-item>
+            <el-form-item label="浜у搧缂栫爜" style=" display: flex;">
+              <el-input v-model="form.partnumber" placeholder="璇疯緭鍏�" style="width: 200px" />
+            </el-form-item>
+            <el-form-item label="浜у搧鍚嶇О" style=" display: flex;">
+              <el-input v-model="form.partname" style="width: 200px" placeholder="璇疯緭鍏�" />
+            </el-form-item>
+            <el-form-item v-show="isExpandForm" label="瑙勬牸鍨嬪彿" style=" display: flex;">
+              <el-input v-model="form.partspec" style="width: 200px" placeholder="璇疯緭鍏�" />
+            </el-form-item>
+            <el-form-item v-show="isExpandForm" label="宸ュ簭鍚嶇О" style=" display: flex;">
+              <el-input v-model="form.stepname" style="width: 200px" placeholder="璇疯緭鍏�" />
+            </el-form-item>
+            <el-form-item v-show="isExpandForm" label="鎶ュ伐璁惧" style=" display: flex;">
+              <el-select
+                v-model="form.eqpcode"
+                filterable
+                :popper-append-to-body="false"
+                style="width: 200px"
+                placeholder="璇烽�夋嫨"
+              >
+                <el-option
+                  v-for="item in eqpArr"
+                  :key="item.code"
+                  :label="item.name"
+                  :value="item.code"
+                />
+              </el-select>
+              <!--              <el-input v-model="form.eqpcode" style="width: 200px" placeholder="璇疯緭鍏�" />-->
+            </el-form-item>
+            <el-form-item v-show="isExpandForm" label="鎶ュ伐浜哄憳" style=" display: flex;">
+              <el-input v-model="form.reportuser" style="width: 200px" placeholder="璇疯緭鍏�" />
+            </el-form-item>
+            <el-form-item v-show="isExpandForm" label="鎶ュ伐鏃堕棿" style="display: flex;align-items: center">
+              <el-date-picker
+                v-model="form.reportdate"
+                type="daterange"
+                range-separator="~"
+                class="timeMini"
+                size="mini"
+                style="width: 200px;display: flex;line-height: 34px;height: 34px;"
+                :clearable="false"
+                start-placeholder="寮�濮嬫棩鏈�"
+                end-placeholder="缁撴潫鏃ユ湡"
+              />
+              <!--              font-size: 14px!important;-->
+              <!--              :picker-options="expireTimeOption"-->
+
+            </el-form-item>
+          </div>
+          <div
+            class="bodySearchReset"
+            :style="{marginLeft:$store.state.app.sidebar.opened? $store.state.settings.menuIsHorizontal?'15%':'3%':'10%'}"
+          >
+            <el-button v-waves type="primary" icon="el-icon-search" @click="search">鏌ヨ</el-button>
+            <el-button v-waves type="info" icon="el-icon-refresh" @click="reset">閲嶇疆</el-button>
+          </div>
+        </el-form>
+        <div
+          class="bodyTopFormExpand"
+        >
+          <svg-icon
+            v-show="mouseHoverType==='mouseout'"
+            style="cursor: pointer"
+            :icon-class="!isExpandForm?'doubleDown3':'doubleUp3'"
+            @mouseenter="mouseHoverType=$event.type"
+          />
+          <svg-icon
+            v-show="mouseHoverType==='mouseenter'"
+            style="cursor: pointer"
+            :icon-class="!isExpandForm?'doubleDown':'doubleUp'"
+            @click="isExpandForm=!isExpandForm"
+            @mouseout="mouseHoverType=$event.type"
+          />
+        </div>
+      </div>
+
+      <div class="elTableDiv">
+        <el-table
+          ref="tableDataRef"
+          class="tableFixed"
+          :data="tableData"
+          :height="isExpandForm?tableHeight:(tableHeight+80)+'px'"
+          border
+          :row-class-name="tableRowClassName"
+          :style="{width: 100+'%',height:isExpandForm?tableHeight:(tableHeight+80)+'px',}"
+          highlight-current-row
+          :header-cell-style="this.$headerCellStyle"
+          :cell-style="this.$cellStyle"
+          @sort-change="sortChange"
+        >
+          <el-table-column
+            prop="rowNum"
+            width="50"
+            fixed
+            label="搴忓彿"
+          />
+          <el-table-column
+            prop="wo_code"
+            label="鎶ュ伐宸ュ崟"
+            sortable="custom"
+            min-width="160"
+            show-overflow-tooltip
+          />
+          <el-table-column
+            prop="partnumber"
+            label="浜у搧缂栫爜"
+            show-overflow-tooltip
+            sortable="custom"
+            min-width="110"
+          />
+          <el-table-column
+            prop="partname"
+            label="浜у搧鍚嶇О"
+            sortable="custom"
+            show-overflow-tooltip
+            min-width="110"
+          />
+          <el-table-column
+            prop="wkshp_name"
+            label="杞﹂棿鍚嶇О"
+            sortable="custom"
+            show-overflow-tooltip
+            min-width="110"
+          />
+          <el-table-column
+            prop="task_qty"
+            label="浠诲姟鏁伴噺"
+            sortable="custom"
+            show-overflow-tooltip
+            min-width="110"
+          />
+          <!--          <el-table-column-->
+          <!--            prop="wkshp_name"-->
+          <!--            label="杞﹂棿鍚嶇О"-->
+          <!--            show-overflow-tooltip-->
+          <!--            sortable="custom"-->
+          <!--            min-width="110"-->
+          <!--          />-->
+          <!--          <el-table-column-->
+          <!--            prop="eqp_name"-->
+          <!--            label="璁惧鍚嶇О"-->
+          <!--            sortable="custom"-->
+          <!--            show-overflow-tooltip-->
+          <!--            min-width="110"-->
+          <!--          />-->
+          <el-table-column
+            prop="stepname"
+            label="宸ュ簭鍚嶇О"
+            show-overflow-tooltip
+            sortable="custom"
+            min-width="110"
+          />
+          <!--          <el-table-column-->
+          <!--            prop="step_price"-->
+          <!--            label="宸ュ簭鍗曚环"-->
+          <!--            show-overflow-tooltip-->
+          <!--            sortable="custom"-->
+          <!--            min-width="110"-->
+          <!--          />-->
+          <el-table-column
+            prop="steptype"
+            label="宸ュ簭绫诲瀷"
+            show-overflow-tooltip
+            sortable="custom"
+            min-width="110"
+          >
+            <template slot-scope="{row}">
+              {{ row.steptype === 'Z' ? '鑷埗' : '澶栧崗' }}
+            </template>
+          </el-table-column>
+          <el-table-column
+            prop="wx_name"
+            label="璁惧/渚涘簲鍟�"
+            show-overflow-tooltip
+            sortable="custom"
+            min-width="125"
+          >
+            <template slot-scope="{row}">
+              {{ row.steptype === 'Z' ?(row.eqp_name?row.eqp_name:'/'): row.wx_name }}
+            </template>
+          </el-table-column>
+          <el-table-column
+            prop="usergroup_name"
+            label="鎶ュ伐鐝粍"
+            show-overflow-tooltip
+            min-width="110"
+            sortable="custom"
+          >
+            <template slot-scope="{row}">
+              {{ row.usergroup_name ? row.usergroup_name : '/' }}
+            </template>
+          </el-table-column>
+          <el-table-column
+            prop="usercode"
+            label="浜哄憳缂栫爜"
+            show-overflow-tooltip
+            min-width="110"
+            sortable="custom"
+          />
+          <el-table-column
+            prop="username"
+            label="鎶ュ伐浜哄憳"
+            show-overflow-tooltip
+            min-width="110"
+            sortable="custom"
+          />
+          <el-table-column
+            prop="report_qty"
+            label="鍚堟牸鏁伴噺"
+            show-overflow-tooltip
+            sortable="custom"
+            min-width="110"
+          />
+          <el-table-column
+            prop="ng_qty"
+            label="涓嶈壇鏁伴噺"
+            show-overflow-tooltip
+            min-width="110"
+            sortable="custom"
+          />
+          <el-table-column
+            prop="laborbad_qty"
+            label="宸ュ簾鏁伴噺"
+            min-width="110"
+            show-overflow-tooltip
+            sortable="custom"
+          />
+          <el-table-column
+            prop="materielbad_qty"
+            label="鏂欏簾鏁伴噺"
+            show-overflow-tooltip
+            min-width="110"
+            sortable="custom"
+          />
+          <el-table-column
+            prop="report_date"
+            label="鎶ュ伐鏃堕棿"
+            min-width="160"
+            show-overflow-tooltip
+            sortable="custom"
+          />
+
+        </el-table>
+      </div>
+      <!--鍒嗛〉-->
+      <pagination
+        :total="total"
+        :page.sync="form.page"
+        :limit.sync="form.rows"
+        align="right"
+        layout="total,prev, pager, next,sizes"
+        popper-class="select_bottom"
+        @pagination="getMesOrderStepReportSearch"
+      />
+    </div>
+
+    <el-dialog
+      v-el-drag-dialog
+      :title="operation==='add'?'鏂板':'浜哄憳鏄庣粏'"
+      :visible.sync="dialogVisible"
+      width="800px"
+      :close-on-click-modal="false"
+      top="15vh"
+      @closed="handleClose"
+      @close="handleClose"
+    >
+      <div style="height: 300px;width: 100%;background-color: aliceblue;padding:20px">
+        <el-tag
+          v-for="tag in tagArr"
+          :key="tag.name"
+          type="success"
+          style="margin-right: 15px;min-width: 80px;text-align: center"
+        >
+          {{ tag }}
+        </el-tag>
+      </div>
+      <span slot="footer" class="dialog-footer">
+        <div class="footerButton">
+          <el-button v-waves @click="dialogVisible=false">杩� 鍥�</el-button>
+          <!--          <el-button v-waves  @click="dialogVisibleCancel">鍙� 娑�</el-button>-->
+          <!--          <el-button v-waves  type="primary" @click="dialogVisibleConfirm">纭� 瀹�</el-button>-->
+        </div>
+      </span>
+    </el-dialog>
+
+    <!--瀵煎叆缁勪欢-->
+    <import-picker
+      ref="importPickerFunc"
+      class="importPickerClass"
+      :shows.sync="shows"
+      :title="title_value"
+      :colos="colos"
+      :code="code"
+    />
+
+  </div>
+</template>
 
 <script>
+import Pagination from '@/components/Pagination'
+import { getCookie } from '@/utils/auth'
+import ImportPicker from '@/components/ImportPicker'
+import { handleDatetime, validateCode } from '@/utils/global'
+import {
+  GroupSalaryReportSearchUser, MesOrderStepReportExcelSearch, MesOrderStepReportSearch
+} from '@/api/ReportManager'
+import elDragDialog from '@/directive/el-drag-dialog'
+import waves from '@/directive/waves'
+import { EqpPermissions, PrentOrganizationNoCompany } from '@/api/GeneralBasicData'
+
 export default {
-  name: 'ReportList'
+  name: 'Zzjg',
+  components: {
+    Pagination, ImportPicker
+  },
+  directives: { elDragDialog, waves },
+  data() {
+    return {
+      mouseHoverType: 'mouseout',
+      isExpandForm: false,
+      mainHeight: 0,
+      tableHeight: 0,
+      form: {
+        wkshopcode: '',
+        wocode: '', // 宸ュ崟缂栧彿
+        partnumber: '', // 浜у搧缂栫爜
+        partname: '', // 浜у搧鍚嶇О
+        partspec: '', // 瑙勬牸鍨嬪彿
+        stepname: '', // 宸ュ簭鍚嶇О
+        style: '', // 鎿嶄綔绫诲瀷
+        eqpcode: '', // 缂洪櫡鍚嶇О
+        reportuser: '', // 鎿嶄綔浜哄憳
+        reportdate: '', // 鎿嶄綔鏃堕棿
+        prop: 'report_date', // 鎺掑簭瀛楁
+        order: 'desc', // 鎺掑簭瀛楁
+        page: 1, // 绗嚑椤�
+        rows: 20 // 姣忛〉澶氬皯鏉�
+      },
+      styleArr: [
+        { code: 'B', name: '鎶ュ伐' },
+        { code: 'S', name: '鏀舵枡' }
+      ],
+      // groupArr: [],
+      wkshopcodeArr: [],
+      total: 10,
+      tableData: [],
+      dialogVisible: false,
+      tagArr: [], //
+      dialogForm: {
+        OrgType: '',
+        OrgCode: '',
+        OrgName: '',
+        SupUnit: ''// 涓婄骇鍗曚綅
+      },
+      operation: '',
+      dialogFormRules: {
+        OrgType: [
+          { required: true, message: '璇疯緭鍏ラ�夋嫨绫诲瀷', trigger: ['blur', 'change'] }
+        ],
+        OrgCode: [
+          { required: true, validator: validateCode, trigger: ['blur', 'change'] }
+        ],
+        OrgName: [
+          { required: true, message: '璇疯緭鍏ュ悕绉�', trigger: ['blur', 'change'] }
+        ]
+
+      },
+      eqpArr: [],
+
+      title_value: '鏁版嵁瀵煎叆 / 鐐规閮ㄤ綅',
+      code: '4',
+      shows: false
+
+    }
+  },
+  watch: {
+    shows() {
+      if (!this.shows) {
+        this.getMesOrderStepReportSearch()
+      }
+    }
+  },
+  created() {
+    this.handleRequest()
+  },
+  mounted() {
+    window.addEventListener('resize', this.getHeight)
+    this.getHeight()
+  },
+  methods: {
+    handleRequest() {
+      this.getMesOrderStepReportSearch().then(res => {
+        if (res.code === '200') {
+          this.getPrentOrganizationNoCompany()
+          this.getEqpPermissions()
+        }
+      })
+    },
+    async getEqpPermissions() {
+      const { data: res4 } = await EqpPermissions() // 璁惧
+      this.eqpArr = res4
+    },
+
+    async getPrentOrganizationNoCompany() {
+      const { data: res } = await PrentOrganizationNoCompany()
+      this.wkshopcodeArr = res
+    },
+    async getMesOrderStepReportSearch() {
+      let tempDate = this.form.reportdate
+      if (tempDate.length > 0) {
+        tempDate = handleDatetime(tempDate[0]) + '~' + handleDatetime(tempDate[1])
+      }
+      const data = {
+        wkshopcode: this.form.wkshopcode,
+        wocode: this.form.wocode,
+        partnumber: this.form.partnumber,
+        partname: this.form.partname,
+        partspec: this.form.partspec,
+        stepname: this.form.stepname,
+        eqpcode: this.form.eqpcode,
+        reportuser: this.form.reportuser,
+        reportdate: tempDate,
+        prop: this.form.prop,
+        order: this.form.order,
+        page: this.form.page,
+        rows: this.form.rows
+      }
+
+      const res = await MesOrderStepReportSearch(data)
+      this.tableData = res.data
+      this.total = res.count
+
+      return { code: res.code }
+    },
+
+    // async getMesOrderStepReportSelectUserGroup() {
+    //   const { data: res } = await MesOrderStepReportSelectUserGroup()
+    //   this.groupArr = res
+    // },
+    // 鎺掑簭鏀瑰彉鏃�
+    sortChange({ column, prop, order }) {
+      if (order === 'descending') {
+        order = 'desc'
+      } else if (order === 'ascending') {
+        order = 'asc'
+      } else {
+        order = 'desc'
+      }
+      this.form.order = order
+      this.form.prop = prop
+      this.getMesOrderStepReportSearch()
+    },
+    async download() {
+      let tempDate = this.form.reportdate
+      if (tempDate.length > 0) {
+        tempDate = handleDatetime(tempDate[0]) + '~' + handleDatetime(tempDate[1])
+      }
+
+      const data = {
+        wkshopcode: this.form.wkshopcode,
+        wocode: this.form.wocode,
+        partnumber: this.form.partnumber,
+        partname: this.form.partname,
+        partspec: this.form.partspec,
+        stepname: this.form.stepname,
+        eqpcode: this.form.eqpcode,
+        reportuser: this.form.reportuser,
+        reportdate: tempDate
+      }
+
+      const { data: res } = await MesOrderStepReportExcelSearch(data)
+      window.location.href = res
+    },
+    // 鏌ヨ
+    search() {
+      this.getMesOrderStepReportSearch()
+    },
+    // 瀵煎叆鎸夐挳
+    upload() {
+      this.shows = true
+      this.$refs.importPickerFunc.newDataFunc()
+    },
+    colos() {
+      this.shows = false
+    },
+    // 閲嶇疆
+    reset() {
+      this.form.wkshopcode = ''
+      this.form.wocode = ''
+      this.form.partnumber = ''
+      this.form.partname = ''
+      this.form.partspec = ''
+      this.form.stepname = ''
+      this.form.eqpcode = ''
+      this.form.reportuser = ''
+      this.form.reportdate = ''
+      this.getMesOrderStepReportSearch()
+    },
+
+    // 鏂板鎸夐挳
+    add(operation) {
+      this.operation = operation
+      this.dialogVisible = true
+    },
+    // 淇敼鎸夐挳
+    async edit(operation, row) {
+      this.operation = operation
+      this.dialogVisible = true
+
+      const res = await GroupSalaryReportSearchUser({ id: row.id })
+      this.tagArr = res.data.map(r => r.reportuser)
+      // this.tagArr = ['妤兼潕淇�', '寮犱笁', '鏉庡洓']
+      // this.$nextTick(() => {
+      //   this.dialogForm.OrgCode = row.org_code
+      //   this.dialogForm.OrgName = row.org_name
+      //   this.dialogForm.SupUnit = row.parent_id
+      // })
+    },
+    // 鍒犻櫎鎸夐挳
+    async del(row) {
+      // this.$confirm('鏄惁纭鍒犻櫎?', '鎻愮ず', {
+      //   confirmButtonText: '纭畾',
+      //   cancelButtonText: '鍙栨秷',
+      //   type: 'warning'
+      // }).then(() => {
+      //   DeleteOrganization({ orgid: row.code }).then(res => {
+      //     if (res.code === '200') {
+      //       this.$message.success('鍒犻櫎鎴愬姛!')
+      //       if (this.form.page > 1 && this.tableData.length === 1) {
+      //         this.form.page--
+      //       }
+      //       this.getMesOrderStepReportSearch()
+      //     }
+      //   })
+      // }).catch(() => {
+      //   this.$message.info('宸插彇娑堝垹闄�')
+      // })
+    },
+    // 瀵硅瘽妗嗗叧闂簨浠�
+    handleClose() {
+      this.dialogForm.OrgType = ''
+      this.dialogForm.OrgCode = ''
+      this.dialogForm.OrgName = ''
+      this.dialogForm.SupUnit = ''
+      this.$refs.dialogForm.clearValidate()
+    },
+    // 瀵硅瘽妗嗗彇娑�
+    dialogVisibleCancel() {
+      this.dialogVisible = false
+    },
+    // 瀵硅瘽妗嗙‘璁�
+    dialogVisibleConfirm() {
+      this.$refs.dialogForm.validate(valid => {
+        if (valid) {
+          const data = {
+            OrganCode: this.dialogForm.OrgCode,
+            OrganName: this.dialogForm.OrgName,
+            OperType: this.operation === 'add' ? 'Add' : 'Update',
+            Operator: getCookie('admin')
+          }
+          // AddUpdateOrganization(data).then(res => {
+          //   if (res.code === '200') {
+          //     this.$message.success(this.operation === 'add' ? '娣诲姞鎴愬姛锛�' : '淇敼鎴愬姛锛�')
+          //     this.dialogVisible = false
+          //     this.getMesOrderStepReportSearch()
+          //   } else {
+          //     this.$message.error(this.operation === 'add' ? '娣诲姞澶辫触锛�' : '淇敼澶辫触锛�')
+          //   }
+          // })
+        }
+      })
+    },
+    // 鑾峰彇椤甸潰楂樺害
+    getHeight() {
+      this.$nextTick(() => {
+        this.mainHeight = window.innerHeight - 85
+        this.tableHeight = this.mainHeight - 295
+
+        this.$refs.tableDataRef.doLayout()
+      })
+    },
+    tableRowClassName({ row, rowIndex }) {
+      return 'custom-row'
+    }
+  }
 }
 </script>
 
-<style scoped>
+<style scoped lang="scss">
+::v-deep .el-select__caret {
+  display: flex;
+  align-items: center;
+  justify-content: center;
+}
 
+::v-deep .el-range__icon {
+  line-height: 28px !important;
+}
+
+::v-deep .el-range-separator {
+  line-height: 28px !important;
+}
+
+::v-deep .el-range-input {
+  font-size: 14px;
+}
+
+::v-deep .el-range-separator {
+  display: flex;
+  justify-content: center;
+  align-items: center;
+}
+
+::v-deep .el-progress-bar__innerText{
+  display: none !important;
+}
+</style>
+<style>
+
+.el-table .custom-row {
+  background: #f8f8fa;
+}
 </style>

--
Gitblit v1.9.3