From bd059ca9afcd5577664d17ca690149bde17602e2 Mon Sep 17 00:00:00 2001
From: yuyu <1981343953@qq.com>
Date: 星期三, 23 八月 2023 15:06:50 +0800
Subject: [PATCH] Merge branch 'master' of http://192.168.110.209:9001/r/lims-before

---
 src/views/experiment/passRateStatistics/index.vue    |  419 ++++++++++-------
 src/views/experiment/reportAuditing/index.vue        |   78 ++-
 src/api/experiment/reportAuditing.js                 |   11 
 src/views/experiment/inspectionApplication/index.vue |   10 
 src/views/standardLibrary/index.vue                  |   22 
 src/worker/test.js                                   |    5 
 src/api/url.js                                       |    6 
 src/views/experiment/planAssignments/plan.vue        |  299 +++++++----
 src/api/home.js                                      |   37 +
 src/api/experiment/passRateStatistics.js             |   11 
 .env.development                                     |    2 
 src/api/util/requestUtil.js                          |    9 
 src/views/home/index.vue                             |  458 ++++++++++++++++---
 src/main.js                                          |    5 
 package.json                                         |    1 
 src/layout/components/Sidebar/index.vue              |    1 
 src/assets/404_images/bg.png                         |    0 
 src/views/experiment/checkTheReport/index.vue        |    2 
 src/App.vue                                          |   26 +
 19 files changed, 990 insertions(+), 412 deletions(-)

diff --git a/.env.development b/.env.development
index 8dd5cb9..ab9be2d 100644
--- a/.env.development
+++ b/.env.development
@@ -2,4 +2,4 @@
 ENV = 'development'
 
 # base api
-VUE_APP_BASE_API =  'http://192.168.110.167:1234/'
+VUE_APP_BASE_API =  'http://localhost:1234/'
diff --git a/package.json b/package.json
index c0ee919..00e6b41 100644
--- a/package.json
+++ b/package.json
@@ -40,6 +40,7 @@
     "babel-jest": "23.6.0",
     "babel-plugin-dynamic-import-node": "2.3.3",
     "chalk": "2.4.2",
+    "comlink-loader": "^2.0.0",
     "connect": "3.6.6",
     "eslint": "6.7.2",
     "eslint-plugin-vue": "6.2.2",
diff --git a/src/App.vue b/src/App.vue
index a25f956..230665e 100644
--- a/src/App.vue
+++ b/src/App.vue
@@ -48,6 +48,16 @@
 		color: #fff;
 	}
 	
+	.el-message-box{
+		border: 0;
+		border-radius: 15px;
+	}
+	
+	.el-message-box__header * {
+		font-size: 16px !important;
+		color: #fff !important;
+	}
+	
 	.el-dialog__headerbtn .el-dialog__close{
 		color: #fff;
 		top: -20px;
@@ -67,4 +77,20 @@
 	  box-shadow: 0px 2px 4px rgba(220, 220, 220, 0.41);
 	  padding: 0 14px;
 	}
+	
+	.ins_state_success{
+		background-color: #67c23a;
+		color: #fff;
+		display: initial;
+		padding: 6px 10px;
+		border-radius: 4px;
+	}
+	
+	.ins_state_error{
+		background-color: #f56c6c;
+		color: #fff;
+		display: initial;
+		padding: 6px 10px;
+		border-radius: 4px;
+	}
 </style>
diff --git a/src/api/experiment/passRateStatistics.js b/src/api/experiment/passRateStatistics.js
index daa6a86..f8416d5 100644
--- a/src/api/experiment/passRateStatistics.js
+++ b/src/api/experiment/passRateStatistics.js
@@ -44,4 +44,15 @@
       method: 'get',
       params
     })
+  }
+
+  /**
+   * getSampleOptions
+   */
+  export function getSampleOptions(params) {
+    return request({
+      url: '/qualificationRate/getSampleOptions',
+      method: 'get',
+      params
+    })
   }
\ No newline at end of file
diff --git a/src/api/experiment/reportAuditing.js b/src/api/experiment/reportAuditing.js
index f6a7bae..4784701 100644
--- a/src/api/experiment/reportAuditing.js
+++ b/src/api/experiment/reportAuditing.js
@@ -2,8 +2,17 @@
 
 export function selectAllReportCheck(params) {
   return request({
-    url: '/reportAuditing/selectAllReportAuditing',
+    // url: '/reportAuditing/selectAllReportAuditing',
+    url: '/report/selectAllReport',
     method: 'get',
     params
   })
 }
+// 瀹℃牳
+export function checkApi(params){ 
+  return request({
+    url: '/report/check',
+    method: 'post',
+    params
+  })
+}
\ No newline at end of file
diff --git a/src/api/home.js b/src/api/home.js
new file mode 100644
index 0000000..7c33bcc
--- /dev/null
+++ b/src/api/home.js
@@ -0,0 +1,37 @@
+import request from '@/utils/request'
+
+//鑾峰彇宸叉楠宼op3
+export function getVerifiedTop3(params) {
+    return request({
+      url: '/home/checktop3',
+      method: 'get',
+      params
+    })
+}
+
+//鑾峰彇鏈楠宼op4
+export function getUncheckedTop4(params) {
+    return request({
+      url: '/home/unchecktop4',
+      method: 'get',
+      params
+    })
+}
+
+//鑾峰彇鍘熸潗鏂欎笌鎴愬搧鍚堟牸鐜�
+export function getMatAndFinshQualified(params) {
+    return request({
+      url: '/home/qualified',
+      method: 'get',
+      params
+    })
+}
+
+//鑾峰彇妫�楠屼笌鏈楠岀殑鍗曞瓙涓庨」鐩殑鏁伴噺
+export function getCheckAndProjectNum(params) {
+    return request({
+      url: '/home/checkProjectNum',
+      method: 'get',
+      params
+    })
+}
\ No newline at end of file
diff --git a/src/api/url.js b/src/api/url.js
index 5f8f97d..8849e20 100644
--- a/src/api/url.js
+++ b/src/api/url.js
@@ -1,4 +1,10 @@
 const url = {
+	"selectAllPlan": "/plan/selectAllPlan",//鏌ヨ鎵�鏈夋楠岃鍒�
+	"choosecheck": "/plan/choosecheck",//鍒嗛厤--閫夋嫨妫�楠屼汉
+	"chooseinstum": "/plan/chooseinstum",//鍒嗛厤--閫夋嫨璁惧
+	"reported": "/plan/reported",//涓婃姤
+	"distribution": "/plan/distribution",//鍒嗛厤
+	"check": "/plan/check",//妫�楠�
 }
 
 export default function(Vue) {
diff --git a/src/api/util/requestUtil.js b/src/api/util/requestUtil.js
index dee7d95..3055a2f 100644
--- a/src/api/util/requestUtil.js
+++ b/src/api/util/requestUtil.js
@@ -15,6 +15,15 @@
         data
     })
 }
+
+export function wpost(path, params) {
+    return request({
+        url: path,
+        method: 'post',
+        params
+    })
+}
+
 export function postFile(path, data) {
     return request({
         url: path,
diff --git a/src/assets/404_images/bg.png b/src/assets/404_images/bg.png
new file mode 100644
index 0000000..412689d
--- /dev/null
+++ b/src/assets/404_images/bg.png
Binary files differ
diff --git a/src/layout/components/Sidebar/index.vue b/src/layout/components/Sidebar/index.vue
index 1187cbb..e093b2b 100644
--- a/src/layout/components/Sidebar/index.vue
+++ b/src/layout/components/Sidebar/index.vue
@@ -31,6 +31,7 @@
       'sidebar'
     ]),
     routes() {
+      console.log(this.$router.options.routes);
       return this.$router.options.routes
     },
     activeMenu() {
diff --git a/src/main.js b/src/main.js
index e996df0..beb2705 100644
--- a/src/main.js
+++ b/src/main.js
@@ -14,6 +14,11 @@
 import store from './store'
 import router from './router'
 
+//寮曞叆echarts
+import echarts from 'echarts'
+Vue.prototype.$echarts = echarts
+
+
 import '@/icons' // icon
 import '@/permission' // permission control
 
diff --git a/src/views/experiment/checkTheReport/index.vue b/src/views/experiment/checkTheReport/index.vue
index a5057c4..2a92de3 100644
--- a/src/views/experiment/checkTheReport/index.vue
+++ b/src/views/experiment/checkTheReport/index.vue
@@ -100,7 +100,7 @@
           <el-table-column prop="approver" label="瀹℃壒浜�" min-width="8%">
             <template slot-scope="scope">
               <span>
-                <el-tag type="info" icon="el-icon-user">
+                <el-tag v-if="scope.row.approver!=null && scope.row.approver!=''" type="info" icon="el-icon-user">
                   <i class="el-icon-user">{{ scope.row.approver }}</i>
                 </el-tag>
               </span>
diff --git a/src/views/experiment/inspectionApplication/index.vue b/src/views/experiment/inspectionApplication/index.vue
index 80346ca..a378d03 100644
--- a/src/views/experiment/inspectionApplication/index.vue
+++ b/src/views/experiment/inspectionApplication/index.vue
@@ -164,7 +164,7 @@
                 <el-pagination
                   class="pagination"
                   :current-page="currentPage"
-                  :page-sizes="[1, 10, 20, 30]"
+                  :page-sizes="[ 10, 20, 30,40]"
                   :page-size="pageSize"
                   layout="total, sizes, prev, pager, next, jumper"
                   :total="total"
@@ -721,10 +721,10 @@
       this.total = this.inspectionTable.length
     },
     reset(){
-      this.countSize = 1
-      this.searchData = { }
-      // console.log('2222');
-      this.selectInspectsList()
+      this.countSize = 1;
+      this.pageSize = 8;
+      this.searchData = { };
+      this.selectInspectsList();
     },
     //琚�変腑鐨勪俊鎭� 鍗曢��
     handleSelectionChange(val) {
diff --git a/src/views/experiment/passRateStatistics/index.vue b/src/views/experiment/passRateStatistics/index.vue
index e59f783..fceb330 100644
--- a/src/views/experiment/passRateStatistics/index.vue
+++ b/src/views/experiment/passRateStatistics/index.vue
@@ -19,6 +19,14 @@
             </el-option>
           </el-select>
         </el-form-item>
+        <el-form-item style="margin-left: 40px;" label="鏍峰搧:">
+          <el-select v-model="searchData.code" filterable placeholder="璇烽�夋嫨">
+            <el-option v-for="item in sampleOptions" :key="item.value" :label="item.label" :value="item.value">
+              <span style="float: left">{{ item.label }}</span>
+              <span style="float: right; color: #8492a6; font-size: 13px">{{ item.value }}</span>
+            </el-option>
+          </el-select>
+        </el-form-item>
         <div class="rightBtn">
           <el-form-item>
             <el-button type="primary" plain size="mini">娓呯┖</el-button>
@@ -31,12 +39,18 @@
     <div class="chart-content">
       <div class="qualified-wrapper">
         <div style="margin-left: 20px;padding:20px 0px;font-size:18px">妫�娴嬫牱鍝佸悎鏍肩巼缁熻</div>
-        <div class="qualified" ref="qualified"></div>
+        <div :hidden="testSample" class="qualified" ref="qualified"></div>
+        <div :hidden="!testSample" style="height: 100%;text-align: center; color: #999696df; margin-top: 100px;">鏆傛棤鏁版嵁
+        </div>
       </div>
       <div class="unqualified">
         <div class="firstBox-wrapper">
-          <div style="margin-left: 20px;padding:20px 0px;font-size:18px">渚涘簲鍟嗕笉鍚堟牸娆℃暟缁熻</div>
-          <div class="firstBox" ref="unqualified_provider"></div>
+          <div style="margin-left: 20px;padding:20px 0px;font-size:18px">渚涘簲鍟嗗悎鏍肩巼缁熻</div>
+          <div>
+            <div :hidden="supplierData" class="firstBox" ref="unqualified_provider"></div>
+            <div :hidden="!supplierData" style="height: 100%;text-align: center; color: #999696df; margin-top: 100px;">
+              鏆傛棤鏁版嵁</div>
+          </div>
         </div>
         <div class="secondBox-wrapper">
           <div class="secondBox_header">
@@ -46,12 +60,17 @@
               }}</el-radio-button>
             </el-radio-group>
           </div>
-          <div class="secondBox" ref="unqualified_project"></div>
+          <div style="width: 100%;height: 100;">
+            <div :hidden="projectData" class="secondBox" ref="unqualified_project"></div>
+            <div :hidden="!projectData" style="height: 100%;text-align: center; color: #999696df; margin-top: 100px;">鏆傛棤鏁版嵁
+            </div>
+          </div>
         </div>
       </div>
     </div>
     <div class="bottom">
       <el-button type="primary" size="mini">鏁版嵁瀵煎嚭</el-button>
+      <!-- <el-button type="primary" size="mini" @click="testWork">娴嬭瘯</el-button> -->
     </div>
   </div>
 </template>
@@ -70,18 +89,26 @@
 })
 
 import * as echarts from 'echarts'
-import { getSupplierList,getTestSampleStatistics,getSupplierNoPassStatistics,getNoPassProjectStatistics } from '@/api/experiment/passRateStatistics';
+import { getSupplierList, getTestSampleStatistics, getSupplierNoPassStatistics, getNoPassProjectStatistics, getSampleOptions } from '@/api/experiment/passRateStatistics';
 import { dateFormat } from '../../../utils/dateUtil'
+import MyWorker from 'comlink-loader!../../../worker/test';
 export default {
   data() {
     return {
       supplier: [],
+      sampleOptions: [],
       searchData: {
         date: [],
         type: null,
-        supplier: null
+        supplier: null,
+        sample: null,
+        code: null
       },
       options: [
+        {
+          label: '鍏ㄩ儴',
+          value: 3
+        },
         {
           label: '鍘熸潗鏂�',
           value: 0
@@ -109,191 +136,228 @@
       rules: {
         // date: [{ required: true, message: '璇疯緭鍏ヨ处鍙�', trigger: 'blur' }],
         // type: [{ required: true, message: '璇疯緭鍏ュ悕瀛�', trigger: 'blur' }]
-      }
+      },
+      supplierNoPassStatistics: null,
+      supplierData: false,
+      projectStatistics: null,
+      projectData: false,
+      testSampleStatistics: null,
+      testSample: false,
+      m1: null,
+      m2: null,
+      m3: null
     }
   },
-  mounted() {
-    this.getSupplierList()
-    this.getTestSampleStatistics()
-    this.getSupplierNoPassStatistics()
-    const chartDom_qualified = this.$refs.qualified;
-    const chartDom_unqualified_provider = this.$refs.unqualified_provider;
-    const chartDom_unqualified_project = this.$refs.unqualified_project;
-
-    const myChart1 = echarts.init(chartDom_qualified);
-    const myChart2 = echarts.init(chartDom_unqualified_provider);
-    const myChart3 = echarts.init(chartDom_unqualified_project);
-
-    /**
-     * 妫�娴嬪悎鏍肩巼缁熻
-     */
-    const option_qualified = {
-      tooltip: {
-        trigger: 'axis',
-        axisPointer: { // 鍧愭爣杞存寚绀哄櫒锛屽潗鏍囪酱瑙﹀彂鏈夋晥
-          type: 'shadow' // 榛樿涓虹洿绾匡紝鍙�変负锛�'line' | 'shadow'
-        }
-      },
-      legend: {
-        data: ['鏁版嵁1', '鏁版嵁2', '鏁版嵁3']
-      },
-      xAxis: [
-        {
-          type: 'category',
-          data: ['绗竴鎵�', '绗簩鎵�', '绗笁鎵�', '绗洓鎵�']
-        }
-      ],
-      yAxis: [
-        {
-          type: 'value',
-          axisLabel: {
-            formatter: '{value}'
-          }
-        }
-      ],
-      series: [
-        {
-          name: '鏁版嵁1',
-          type: 'bar',
-          data: [7245, 3475, 1237, 3456]
-        },
-        {
-          name: '鏁版嵁2',
-          type: 'bar',
-          data: [9965, 9075, 4875, 8687]
-        },
-        {
-          name: '鏁版嵁3',
-          type: 'line',
-          yAxisIndex: 0,
-          symbolSize: 3, // 鎶樼嚎鑺傜偣鐨勫ぇ灏�
-          symbol: 'circle', // 鎶樼嚎鑺傜偣鐨勫舰鐘�
-          smooth: false, // 骞虫粦鏇茬嚎
-          data: [1465, 6437, 3257, 6537]
-        }
-      ]
-    };
-    /**
-     * 渚涘簲鍟�
-     */
-    const option_unqualified1 = {
-      tooltip: {
-        trigger: 'axis',
-        axisPointer: { // 鍧愭爣杞存寚绀哄櫒锛屽潗鏍囪酱瑙﹀彂鏈夋晥
-          type: 'shadow' // 榛樿涓虹洿绾匡紝鍙�変负锛�'line' | 'shadow'
-        },
-        formatter: function (params) {
-          let tooltip = params[0].name + '<br/>';
-          params.forEach(function (item) {
-            tooltip += item.marker + ' ' + item.seriesName + ': ' + item.value.toFixed(2) + '%<br/>'; // 灏嗘暟鎹繚鐣欎袱浣嶅皬鏁板苟杞负鐧惧垎姣斿舰寮�
-          });
-          return tooltip;
-        }
-      },
-      legend: {
-        data: ['鍚堟牸鏁伴噺', '涓嶅悎鏍兼暟閲�']
-      },
-      xAxis: {
-        data: ['渚涘簲鍟�1', '渚涘簲鍟�2', '渚涘簲鍟�3', '渚涘簲鍟�4']
-      },
-      yAxis: [
-        {
-          type: 'value',
-          axisLabel: {
-            formatter: '{value}%'
-          }
-        }
-      ],
-      series: [
-        {
-          name: '鍚堟牸鏁伴噺',
-          data: [52, 46, 39, 66],
-          type: 'bar',
-          stack: 'x'
-        },
-        {
-          name: '涓嶅悎鏍兼暟閲�',
-          data: [47, 53, 60, 33],
-          type: 'bar',
-          stack: 'x'
-        }
-      ]
-    };
-    /**
-     * 涓嶅悎鏍奸」鐩�
-     */
-    const option_unqualified2 = {
-      legend: {
-        orient: 'vertical',
-        x: 'left',
-        data: ['缁濈紭鍋忓績鐜�', '璇曢獙缁撴灉', '瀵间綋灞忚斀鏈�澶у��']
-      },
-      title: {
-        text: '',
-        left: 'center',
-        top: 'center'
-      },
-      series: [
-        {
-          type: 'pie',
-          data: [
-            {
-              value: 40,
-              name: '缁濈紭鍋忓績鐜�'
-            },
-            {
-              value: 20,
-              name: '璇曢獙缁撴灉'
-            },
-            {
-              value: 40,
-              name: '瀵间綋灞忚斀鏈�澶у��'
-            }
-          ],
-          radius: ['40%', '70%'],
-          label: {
-            show: true,
-            formatter: '{b}: {c}'
-          },
-        }
-      ]
-    }
-
-    myChart1.setOption(option_qualified);
-    myChart2.setOption(option_unqualified1);
-    if (this.type === 0) {
-      myChart3.setOption(option_unqualified2);
-    }
-    if (this.type === 1) {
-      myChart3.setOption(option_unqualified2);
-    }
+  async mounted() {
+    await this.start()
+    this.tableStart()
   },
   methods: {
-    search() {
-      this.getTestSampleStatistics()
-    },
-    dateHandle(){
-      let data=JSON.parse(JSON.stringify(this.searchData))
-      if(this.searchData.date.length!=0&&this.searchData.date !=[]){
-        data.beginDate=dateFormat(this.searchData.date[0])
-        data.endDate=dateFormat(this.searchData.date[1])
+    testWork(){
+      const inst = new MyWorker();
+      inst.test()
+      for (let index = 0; index < 100; index++) {
+        console.log("涓荤嚎绋�"+index);
       }
-      data.date=null
+    },
+    async search() {
+      this.testSampleStatistics = null
+      this.supplierNoPassStatistics = null
+      this.projectStatistics = null
+      this.supplier = []
+      this.sampleOptions = []
+      await this.start()
+      this.tableStart()
+    },
+    dateHandle() {
+      let data = JSON.parse(JSON.stringify(this.searchData))
+      if (this.searchData.date.length != 0 && this.searchData.date != []) {
+        data.beginDate = dateFormat(this.searchData.date[0])
+        data.endDate = dateFormat(this.searchData.date[1])
+      }
+      if (data.supplier == '鍏ㄩ儴') {
+        data.supplier = null
+      }
+      if (data.type === 3) {
+        data.type = null
+      }
+      if (this.sampleOptions.length > 0 && this.sampleOptions != []) {
+        let labelSam = this.sampleOptions.filter(item => {
+          return item.value == data.code
+        })[0]
+        data.sample = labelSam.label
+      }
+      if (data.code == '鍏ㄩ儴') {
+        data.code = null
+        data.sample = null
+      }
+      data.date = null
       return data
     },
     async getSupplierList() {
       let res = await getSupplierList()
+      this.supplier.push({ label: '鍏ㄩ儴', value: '鍏ㄩ儴' })
       res.data.forEach(item => {
         this.supplier.push({ label: item.supplier, value: item.supplier })
       })
     },
-    getTestSampleStatistics(){
-     let param= this.dateHandle()
-     let res =getTestSampleStatistics(param)
+    async getTestSampleStatistics() {
+      let param = this.dateHandle()
+      let res = await getTestSampleStatistics(param)
+      this.testSample = !res.data.noData
+      this.testSampleStatistics = res.data
     },
-    getSupplierNoPassStatistics(){
-      let param= this.dateHandle()
-      getSupplierNoPassStatistics(param)
+    async getSupplierNoPassStatistics() {
+      let param = this.dateHandle()
+      let res = await getSupplierNoPassStatistics(param)
+      this.supplierData = !res.data.noData
+      this.supplierNoPassStatistics = res.data
+    },
+    async getNoPassProjectStatistics() {
+      let param = this.dateHandle()
+      let res = await getNoPassProjectStatistics(param)
+      this.projectData = !res.data.noData
+      this.projectStatistics = res.data
+    },
+    async start() {
+      await this.getTestSampleStatistics()
+      await this.getSupplierNoPassStatistics()
+      await this.getNoPassProjectStatistics()
+      await this.getSupplierList()
+      await this.getSampleOptions()
+    },
+    async getSampleOptions() {
+      let res = await getSampleOptions()
+      this.sampleOptions.push({
+        label: '鍏ㄩ儴',
+        value: '鍏ㄩ儴'
+      })
+      res.data.forEach(item => {
+        let data = {
+          label: item.name,
+          value: item.code
+        }
+        this.sampleOptions.push(data)
+      })
+    },
+    tableStart() {
+      const chartDom_qualified = this.$refs.qualified;
+      const chartDom_unqualified_provider = this.$refs.unqualified_provider;
+      const chartDom_unqualified_project = this.$refs.unqualified_project;
+
+      const myChart1 = echarts.init(chartDom_qualified);
+      const myChart2 = echarts.init(chartDom_unqualified_provider, null, {
+        height: 300
+      });
+      
+      const myChart3 = echarts.init(chartDom_unqualified_project, null, {
+        height: 268
+      });
+      window.addEventListener("resize",function(){
+        myChart1.resize()
+        myChart2.resize()
+        myChart3.resize()
+      })
+      this.m1 = myChart1
+      this.m2 = myChart2
+      this.m3 = myChart3
+      /**
+       * 妫�娴嬪悎鏍肩巼缁熻
+       */
+      const option_qualified = {
+        tooltip: {
+          trigger: 'axis',
+          axisPointer: { // 鍧愭爣杞存寚绀哄櫒锛屽潗鏍囪酱瑙﹀彂鏈夋晥
+            type: 'shadow' // 榛樿涓虹洿绾匡紝鍙�変负锛�'line' | 'shadow'
+          }
+        },
+        legend: {
+          data: ['鍚堟牸', '涓嶅悎鏍�']
+        },
+        xAxis: [
+          {
+            type: 'category',
+            data: this.testSampleStatistics.xAxis
+          }
+        ],
+        yAxis: [
+          {
+            type: 'value',
+            axisLabel: {
+              formatter: '{value}'
+            }
+          }
+        ],
+        series: this.testSampleStatistics.series
+      };
+      /**
+       * 渚涘簲鍟�
+       */
+      const option_unqualified1 = {
+        tooltip: {
+          trigger: 'axis',
+          axisPointer: { // 鍧愭爣杞存寚绀哄櫒锛屽潗鏍囪酱瑙﹀彂鏈夋晥
+            type: 'shadow' // 榛樿涓虹洿绾匡紝鍙�変负锛�'line' | 'shadow'
+          },
+          formatter: function (params) {
+            let tooltip = params[0].name + '<br/>';
+            params.forEach(function (item) {
+              tooltip += item.marker + ' ' + item.seriesName + ': ' + item.value.toFixed(2) + '%<br/>'; // 灏嗘暟鎹繚鐣欎袱浣嶅皬鏁板苟杞负鐧惧垎姣斿舰寮�
+            });
+            return tooltip;
+          }
+        },
+        legend: {
+          data: ['鍚堟牸鏁伴噺', '涓嶅悎鏍兼暟閲�']
+        },
+        xAxis: {
+          data: this.supplierNoPassStatistics.xAxis
+        },
+        yAxis: [
+          {
+            type: 'value',
+            axisLabel: {
+              formatter: '{value}%'
+            }
+          }
+        ],
+        series: this.supplierNoPassStatistics.series
+      };
+      /**
+       * 涓嶅悎鏍奸」鐩�
+       */
+      const option_unqualified2 = {
+        legend: {
+          orient: 'vertical',
+          x: 'left',
+          data: this.projectStatistics.legend
+        },
+        title: {
+          text: '',
+          left: 'center',
+          top: 'center'
+        },
+        series: [
+          {
+            type: 'pie',
+            data: this.projectStatistics.series,
+            radius: ['40%', '70%'],
+            label: {
+              show: true,
+              formatter: '{b}: {c}%'
+            },
+          }
+        ]
+      }
+
+      myChart1.setOption(option_qualified);
+      myChart2.setOption(option_unqualified1);
+      if (this.type === 0) {
+        myChart3.setOption(option_unqualified2);
+      }
+      if (this.type === 1) {
+        myChart3.setOption(option_unqualified2);
+      }
     }
   }
 }
@@ -303,6 +367,7 @@
 .content-main {
   height: 100%;
   width: 100%;
+  overflow: auto;
 
   .top-bar {
     position: absolute;
diff --git a/src/views/experiment/planAssignments/plan.vue b/src/views/experiment/planAssignments/plan.vue
index ee84390..0907cbc 100644
--- a/src/views/experiment/planAssignments/plan.vue
+++ b/src/views/experiment/planAssignments/plan.vue
@@ -17,11 +17,11 @@
 		margin: 10px;
 		padding: 15px;
 		background-color: white;
-		height: calc(100vh - 15vh);
+		height: calc(100vh - 18vh);
 		overflow-y: auto;
 	}
 
-	.order_num{
+	.order_num {
 		border-radius: 1rem;
 		width: 35px;
 		height: 25px;
@@ -56,41 +56,77 @@
 			<el-button size="small">閲嶇疆</el-button>
 		</div>
 		<div class="thing">
-			<el-table :data="tableData" style="width: 100%;" row-key="id" default-expand-all
+			<el-table :data="tableData" style="width: 100%;" row-key="code" default-expand-all
 				:tree-props="{children: 'children', hasChildren: 'hasChildren'}" :key="upIndex">
 				<el-table-column type="index" width="50" label="搴忓彿">
 				</el-table-column>
-				<el-table-column prop="date" label="鐢宠鍗曞彿">
+				<el-table-column prop="code" label="鐢宠鍗曞彿" width="250px">
 					<template slot-scope="scope">
 						<div style="display: flex;">
-							<div v-if="scope.row.code=='01'" style="color: #3caaff;background-color: #eff5ff;" class="order_num">01</div>
-							<div v-else-if="scope.row.code=='02'" style="color: #57c981;background-color: #f1fbf4;" class="order_num">02</div>
-							<div v-else-if="scope.row.code=='03'" style="color: #dfa8fb;background-color: #faf2ff;" class="order_num">03</div>
-							<div>{{scope.row.date}}</div>
+							<div v-if="scope.row.orderNum=='01'" style="color: #3caaff;background-color: #eff5ff;" class="order_num">
+								01
+							</div>
+							<div v-else-if="scope.row.orderNum=='02'" style="color: #57c981;background-color: #f1fbf4;"
+								class="order_num">
+								02</div>
+							<div v-else-if="scope.row.orderNum=='03'" style="color: #dfa8fb;background-color: #faf2ff;"
+								class="order_num">
+								03</div>
+							<div>{{scope.row.code}}</div>
 						</div>
 					</template>
 				</el-table-column>
-				<el-table-column prop="name" label="妫�楠岀粨鏋�">
+				<el-table-column prop="name" label="鍚嶇О" width="200px">
 				</el-table-column>
-				<el-table-column prop="address" label="鍦板潃">
+				<el-table-column prop="unit" label="鍗曚綅">
 				</el-table-column>
-				<el-table-column label="鎿嶄綔" width="80">
+				<el-table-column prop="required" label="瑕佹眰鍊�">
+				</el-table-column>
+				<el-table-column prop="internal" label="鍐呮帶鍊�">
+				</el-table-column>
+				<el-table-column prop="testValue" label="妫�楠屽��">
+				</el-table-column>
+				<el-table-column prop="checker" label="鎵ц浜�">
+				</el-table-column>
+				<el-table-column prop="instrumentname" label="妫�楠岃澶�">
+				</el-table-column>
+				<el-table-column prop="testState" label="妫�楠岀姸鎬�" width="100px">
 					<template slot-scope="scope">
-						<el-button size="mini" type="primary" v-if="isIfReport(scope.row)">涓婃姤</el-button>
-						<el-button size="mini" type="warning" @click="openUpDia(scope.row)"
-							v-else-if="scope.row.code=='03'&&scope.row.insId==undefined&&scope.row.address==null">鍒嗛厤</el-button>
-						<el-button size="mini" type="success" @click="openUpInsDia(scope.row)"
-							v-else-if="scope.row.code=='03'&&scope.row.insId==undefined&&scope.row.name==null">妫�楠�</el-button>
+						<el-tag type="success" v-if="scope.row.testState==1">鍚堟牸</el-tag>
+						<el-tag type="danger" v-else-if="scope.row.testState==0">涓嶅悎鏍�</el-tag>
+					</template>
+				</el-table-column>
+				<el-table-column prop="startTime" label="妫�楠屽紑濮�" width="100px">
+				</el-table-column>
+				<el-table-column prop="endTime" label="妫�楠岀粨鏉�" width="100px">
+				</el-table-column>
+				<el-table-column label="鎿嶄綔" width="150">
+					<template slot-scope="scope">
+						<el-button size="mini" type="primary" v-if="isIfReport(scope.row)"
+							@click="addReported(scope.row.id)">涓婃姤</el-button>
+						<el-button size="mini" type="text" @click="openUpDia(scope.row)"
+							v-if="scope.row.orderNum=='02'">鍒嗛厤</el-button>
+						<el-button size="mini" type="text" @click="openUpInsDia(scope.row)"
+							v-if="scope.row.orderNum=='02'">妫�楠�</el-button>
 					</template>
 				</el-table-column>
 			</el-table>
 		</div>
 		<el-dialog title="鍒嗛厤璁惧鍜屼汉鍛�" :visible.sync="upDia" width="500px" top="30vh">
 			<div class="body">
-				<el-row style="line-height: 46px;">
+				<el-row style="line-height: 50px;">
 					<el-col :span="4" style="font-size: 14px;text-align: right;">浜哄憳:</el-col>
 					<el-col :span="16" :offset="1">
-						<el-input v-model="upData.address" size="small" clearable></el-input>
+						<el-select v-model="upData.checker" size="medium" clearable style="width: 100%;">
+							<el-option v-for="(a, ai) in users" :key="ai" :label="a.name" :value="a.id"></el-option>
+						</el-select>
+					</el-col>
+				</el-row>
+				<el-row style="line-height: 50px;">
+					<el-col :span="4" style="font-size: 14px;text-align: right;">璁惧:</el-col>
+					<el-col :span="16" :offset="1">
+						<el-cascader v-model="upData.device" :options="devices" size="medium" style="width: 100%;" clearable
+							:props="{label: 'name',value: 'id',emitPath: false}" :show-all-levels="false"></el-cascader>
 					</el-col>
 				</el-row>
 			</div>
@@ -102,29 +138,37 @@
 		<el-dialog title="妫�楠�" :visible.sync="upInsDia" width="500px">
 			<div class="body" style="max-height: 50vh;overflow-y: auto;">
 				<el-row style="line-height: 46px;">
-					<el-col :span="4" style="font-size: 14px;text-align: right;">鏍峰搧缂栫爜锛�</el-col>
-					<el-col :span="8">{{upData.date}}</el-col>
-					<el-col :span="4" style="font-size: 14px;text-align: right;">鏍峰搧鍚嶇О锛�</el-col>
-					<el-col :span="8">{{upData.date}}</el-col>
+					<el-col :span="5" style="font-size: 14px;text-align: right;">鐢宠鍗曠紪鐮侊細</el-col>
+					<el-col :span="7">{{upData.insId}}</el-col>
+					<el-col :span="5" style="font-size: 14px;text-align: right;">鏍峰搧鍚嶇О锛�</el-col>
+					<el-col :span="7">{{upData.productName}}</el-col>
 				</el-row>
 				<el-row style="line-height: 46px;">
-					<el-col :span="4" style="font-size: 14px;text-align: right;">妫�楠岄」鐩細</el-col>
-					<el-col :span="8">{{upData.date}}</el-col>
-					<el-col :span="4" style="font-size: 14px;text-align: right;">鍗曚綅锛�</el-col>
-					<el-col :span="8">{{upData.date}}</el-col>
+					<el-col :span="5" style="font-size: 14px;text-align: right;">妫�楠岄」鐩細</el-col>
+					<el-col :span="7">{{upData.name}}</el-col>
+					<el-col :span="5" style="font-size: 14px;text-align: right;">鍗曚綅锛�</el-col>
+					<el-col :span="7">{{upData.unit}}</el-col>
 				</el-row>
 				<el-row style="line-height: 46px;">
-					<el-col :span="4" style="font-size: 14px;text-align: right;">鏍囧噯鍊硷細</el-col>
-					<el-col :span="8">{{upData.date}}</el-col>
-					<el-col :span="4" style="font-size: 14px;text-align: right;">鍐呮帶鍊硷細</el-col>
-					<el-col :span="8">{{upData.date}}</el-col>
+					<el-col :span="5" style="font-size: 14px;text-align: right;">鏍囧噯鍊硷細</el-col>
+					<el-col :span="7">{{upData.required}}</el-col>
+					<el-col :span="5" style="font-size: 14px;text-align: right;">鍐呮帶鍊硷細</el-col>
+					<el-col :span="7">{{upData.internal}}</el-col>
+				</el-row>
+				<el-row style="line-height: 46px;">
+					<el-col :span="5" style="font-size: 14px;text-align: right;">妫�楠岀姸鎬侊細</el-col>
+					<el-col :span="7">
+						<el-tag type="success" v-if="upData.testState==1">鍚堟牸</el-tag>
+						<el-tag type="danger" v-else-if="upData.testState==0">涓嶅悎鏍�</el-tag>
+						<el-tag type="info" v-else>鏃犵粨鏋�</el-tag>
+					</el-col>
 				</el-row>
 				<el-row style="line-height: 46px;">
 					<el-col style="text-align: right;"><el-button size="mini" @click="addRes">娣诲姞妫�楠屽��</el-button></el-col>
 				</el-row>
 				<el-row>
 					<el-col>
-						<el-table :data="upData.res" border style="width: 99.9%;" :key="upIndex2">
+						<el-table :data="upData.testValue" border style="width: 99.9%;" :key="upIndex2">
 							<el-table-column type="index" width="100" label="搴忓彿">
 							</el-table-column>
 							<el-table-column label="妫�楠屽��">
@@ -137,7 +181,7 @@
 							<el-table-column label="鎿嶄綔" width="60">
 								<template slot-scope="scope">
 									<el-button size="mini" type="text"
-										@click.native.prevent="deleteRow(scope.$index, upData.res)">鍒犻櫎</el-button>
+										@click.native.prevent="deleteRow(scope.$index, upData.testValue)">鍒犻櫎</el-button>
 								</template>
 							</el-table-column>
 						</el-table>
@@ -145,7 +189,7 @@
 				</el-row>
 			</div>
 			<span slot="footer" class="dialog-footer">
-				<el-button type="primary" @click="submitUpData">鎻� 浜�</el-button>
+				<el-button type="primary" @click="submitUpData2">鎻� 浜�</el-button>
 				<el-button @click="upInsDia = false">鍙� 娑�</el-button>
 			</span>
 		</el-dialog>
@@ -153,6 +197,12 @@
 </template>
 
 <script>
+	import {
+		get,
+		post,
+		wpost,
+		postFile
+	} from "@/api/util/requestUtil.js"
 	export default {
 		data() {
 			return {
@@ -161,125 +211,146 @@
 					date: [],
 					userName: null,
 				},
-				tableData: [{
-					id: 1,
-					insId: 123,
-					date: '2016-05-02',
-					name: null,
-					address: '涓婃捣甯傛櫘闄�鍖洪噾娌欐睙璺� 1518 寮�',
-					children: [{
-						id: 33,
-						date: '2016-05-01',
-						name: null,
-						res: '[{"number": 1},{"number": 2}]',
-						address: '涓婃捣甯傛櫘闄�鍖洪噾娌欐睙璺� 1519 寮�'
-					}, {
-						id: 34,
-						date: '2016-05-01',
-						name: null,
-						res: '[{"number": 1,"res": "涓嶅悎鏍�"},{"number": 3,"res": "涓嶅悎鏍�"}]',
-						address: '涓婃捣甯傛櫘闄�鍖洪噾娌欐睙璺� 1519 寮�',
-						children: [{
-							id: 35,
-							date: 'hhh',
-							name: null,
-							res: '[{"number": 1},{"number": 2}]',
-							address: '涓婃捣甯傛櫘闄�鍖洪噾娌欐睙璺� 1519 寮�'
-						}]
-					}]
-				}, {
-					id: 2,
-					insId: 123,
-					date: '2016-05-04',
-					name: null,
-					address: '涓婃捣甯傛櫘闄�鍖洪噾娌欐睙璺� 1517 寮�',
-					children: []
-				}, {
-					id: 3,
-					insId: 123,
-					date: '2016-05-01',
-					children: [{
-						id: 31,
-						date: '2016-05-01',
-						name: null,
-						res: '[{"number": 1},{"number": 2}]',
-						address: '涓婃捣甯傛櫘闄�鍖洪噾娌欐睙璺� 1519 寮�'
-					}, {
-						id: 32,
-						date: '2016-05-01',
-						name: null,
-						res: '[]',
-						address: null
-					}]
-				}],
+				tableData: [],
 				upDia: false,
 				upData: {},
 				upIndex: 0,
 				upInsDia: false,
-				upIndex2: 0
+				upIndex2: 0,
+				users: [],
+				devices: []
 			}
 		},
 		mounted() {
 			this.selectDataList()
+			this.getUsers()
+			this.getDevices()
 		},
 		methods: {
 			selectDataList() {
-				this.tableData.forEach(a => {
-					a.code = '01'
-					if (a.children != undefined) {
-						a.children.forEach(b => {
-							b.code = '02'
-							if (b.children != undefined) {
-								b.children.forEach(c => {
-									c.code = '03'
-									c.res = JSON.parse(c.res)
-								})
-							}
-						})
-					}
+				get(this.$url.selectAllPlan).then(res => {
+					this.tableData = JSON.parse(JSON.stringify(res.data).replaceAll('pid', 'code').replaceAll('samplename',
+						'name').replaceAll('inspectionStatus', 'testState'))
+					this.tableData.forEach(a => {
+						a.orderNum = '01'
+						if (a.children != undefined) {
+							a.children.forEach(b => {
+								b.orderNum = '02'
+								if (b.testValue == undefined) {
+									b.testValue = []
+								}
+							})
+						}
+					})
+					this.upIndex++
 				})
-				this.upIndex++
 			},
 			isIfReport(row) {
 				var count = 0
 				if (row.children == undefined) return false
 				row.children.forEach(a => {
-					if (a.name != null && a.name != undefined) count++
+					if (a.testState != null && a.testState != undefined) count++
 				})
-				return row.insId != undefined && count == row.children.length
+				return row.testState == undefined && row.orderNum == '01' && count == row
+					.children.length
 			},
 			openUpDia(row) {
 				this.upDia = true
 				this.upData = {
-					id: row.id,
-					address: row.address
+					id: row.code,
+					checker: null,
+					device: null
 				}
 			},
 			submitUpData() {
-				this.tableData.forEach(a => {
-					a.children.forEach(b => {
-						if (b.id == this.upData.id) {
-							b.address = this.upData.address
-						}
-					})
+				if (this.upData.checker == null || this.upData.checker == '') {
+					this.$message.error('浜哄憳鏈垎閰�')
+					return
+				} else if (this.upData.device == null || this.upData.device == '') {
+					this.$message.error('璁惧鏈垎閰�')
+					return
+				}
+				wpost(this.$url.distribution, {
+					id: this.upData.id,
+					userId: this.upData.checker,
+					instrumentId: this.upData.device
+				}).then(res => {
+					this.$message.success('鍒嗛厤鎴愬姛')
+					this.upDia = false
+					this.selectDataList()
 				})
-				this.$message.success('淇敼鎴愬姛')
-				this.upIndex++
-				this.upDia = false
 			},
 			openUpInsDia(row) {
 				this.upInsDia = true
 				this.upData = this.HaveJson(row)
+				var str = []
+				JSON.parse('[' + this.upData.testValue + ']').forEach(a => {
+					str.push({
+						number: a
+					})
+				})
+				this.upData.testValue = this.HaveJson(str)
+				this.tableData.forEach(a => {
+					a.children.forEach(b => {
+						if (b.code == this.upData.code) {
+							this.upData.insId = a.code
+							this.upData.productName = a.name
+						}
+					})
+				})
 			},
 			deleteRow(index, rows) {
 				rows.splice(index, 1);
 			},
 			addRes() {
-				this.upData.res.push({
+				this.upData.testValue.push({
 					"number": null
 				})
 				this.upIndex2++
+			},
+			getUsers() {
+				get(this.$url.choosecheck).then(res => {
+					this.users = res.data
+				})
+			},
+			getDevices() {
+				get(this.$url.chooseinstum).then(res => {
+					this.devices = res.data
+				})
+			},
+			addReported(id) {
+				wpost(this.$url.reported, {
+					id: id
+				}).then(res => {
+					this.$message.success('涓婃姤鎴愬姛')
+					this.selectDataList()
+				}).catch(e => {
+					this.$message.error('涓婃姤澶辫触')
+				})
+			},
+			submitUpData2() {
+				var data = []
+				this.upData.testValue.forEach(a => {
+					if(a.number!=''&&a.number!=null){
+						data.push(a.number)
+					}
+				})
+				wpost(this.$url.check, {
+					id: this.upData.code,
+					value: data.toString()
+				}).then(res => {
+					this.upInsDia = false
+					this.selectDataList()
+					this.$confirm(`<p style="line-height: 80px">鎮ㄧ殑椤圭洰(${this.upData.name})妫�楠岀粨鏋滀负锛�<span class="${res.data==1?'ins_state_success':'ins_state_error'}">${res.data==1?'鍚堟牸':'涓嶅悎鏍�'}</span></p>`, '鎻愪氦鎴愬姛', {
+						confirmButtonText: '纭畾',
+						cancelButtonText: '鍏抽棴',
+						dangerouslyUseHTMLString:true,
+						type: `${res.data==1?'success':'error'}`
+					}).then(() => {
+					}).catch(() => {
+					})
+				})
 			}
 		}
 	}
-</script>
+</script>
\ No newline at end of file
diff --git a/src/views/experiment/reportAuditing/index.vue b/src/views/experiment/reportAuditing/index.vue
index 0f4b6a3..6c699b2 100644
--- a/src/views/experiment/reportAuditing/index.vue
+++ b/src/views/experiment/reportAuditing/index.vue
@@ -59,7 +59,11 @@
           :data="reportTable"
           style="width: 100%"
         >
-          <el-table-column type="selection" label="" min-width="5%" />
+        <el-table-column
+          type="index"
+          width="50">
+        </el-table-column>
+          <!-- <el-table-column  label="" min-width="5%" /> -->
           <el-table-column prop="materialCode" label="鏍峰搧缂栧彿" min-width="10%">
             <template slot-scope="scope">
               <span style="color: #409eff">
@@ -79,7 +83,7 @@
             label="鏍峰搧鍚嶇О"
             min-width="10%"
           />
-          <el-table-column prop="status" label="瀹℃壒鐘舵��" min-width="8%">
+          <el-table-column prop="status" label="瀹℃壒鐘舵��" min-width="8%" v-model="Auditconclusion">
             <template slot-scope="scope">
               <span>
                 <el-tag type="warning">{{
@@ -99,31 +103,23 @@
                 @click="handleClick(scope.row)"
                 >鏌ョ湅璇︾粏
               </el-button>
-            <el-button  type="text" size="small" @click="checkskip = true">瀹℃牳</el-button>
+            <el-button  type="text" size="small" @click="shenHE(scope)">瀹℃牳</el-button>
 
             <el-dialog
               title="鍘熷璁板綍瀹℃牳"
-              :visible.sync="checkskip"
+              :visible.sync="checkskipvisible"
               width="30%"
-              :before-close="handleClose">
+          
+              >
               <el-form :model="form">
-                <el-form-item label="璇烽�夋嫨瀹℃牳缁撴灉" :label-width="formLabelWidth">
+                <el-form-item label="璇烽�夋嫨瀹℃牳缁撴灉:" :label-width="formLabelWidth">
                 </el-form-item>
-                <el-row :gutter="20">
-                  <el-col :span="6" :offset="5">
-                <!-- <el-button type="primary" style="background-color: rgb(208, 201, 192);">閫�鍥�</el-button> -->
-                <el-button style="background-color: rgb(206, 211, 216);">閫�鍥�</el-button>
-                  </el-col>
-                  <el-col :span="6" :offset="3">
-                <!-- <el-button type="primary" style="background-color: rgb(181, 237, 125);">閫氳繃</el-button> -->
-                <el-button style="background-color: rgb(192, 236, 148);">閫氳繃</el-button>
-                  </el-col>
-                </el-row>
-
               </el-form>
+
               <div slot="footer" class="dialog-footer">
-                <el-button @click="checkskip = false">鍙� 娑�</el-button>
-                <el-button type="primary" @click="checkskip= false">纭� 瀹�</el-button>
+                <el-button @click="checkskipvisible = false">鍙� 娑�</el-button>
+                <el-button style="background-color: rgb(206, 211, 216);" @click="nocheckskip(scope.row)" >涓嶉�氳繃</el-button>
+                <el-button type="primary" @click="checkskip(scope.row)">閫氳繃</el-button>
               </div>
             </el-dialog>
 
@@ -148,27 +144,36 @@
 </template>
 
 <script>
-import { selectAllReportCheck } from "@/api/experiment/reportAuditing";
+import { selectAllReportCheck,checkApi } from "@/api/experiment/reportAuditing";
 export default {
   data() {
     return {
-      input: "",
+      input: '',
       checkStatus: undefined,
       reportTable: [],
       page: 1,
       total: 0,
       pageSize: 10,
-      checked: true,
-      checkskip: false,
+      checkskipvisible: false,
       form:{},
-      handleClose:'',
-      formLabelWidth: '120px'
+      // handleClose:{},
+      formLabelWidth: '120px',
+      checked:{},
+      usertt:[],
+      Auditconclusion:{},
+      tableRow: {},
+
+      
     };
   },
   created() {
     this.getData();
   },
   methods: {
+    shenHE(s){
+      this.tableRow=s
+      this.checkskipvisible=true
+    },
     // 鐘舵�佹寜閽�
     handleRadioChange() {
       this.getData();
@@ -193,10 +198,27 @@
       this.checkStatus = undefined;
       this.getData();
     },
-    //瀹℃牳璺宠浆
-    // checkskip() {
+    //閫氳繃
+    async checkskip(row) {
+      console.log(this.tableRow);
+      this.reportTable[this.tableRow.$index].status=2
+      this.transmitData(this.tableRow.row.id)
+      this.checkskipvisible= false
 
-    // },
+    },
+    //涓嶉�氳繃
+    async nocheckskip(row) {
+      console.log(this.tableRow);
+      this.reportTable[this.tableRow.$index].status=0
+      this.transmitData(this.tableRow.row.id)
+      this.checkskipvisible= false
+
+    },
+    //瀹℃牳
+    async transmitData(id) { 
+      let param={"id":id,"result":1}
+     let data = await checkApi(param)     
+    },
     // 鏌ヨ鍒楄〃
     async getData() {
       const params = {
diff --git a/src/views/home/index.vue b/src/views/home/index.vue
index f876061..1730a72 100644
--- a/src/views/home/index.vue
+++ b/src/views/home/index.vue
@@ -1,96 +1,406 @@
 <template>
   <div class="home-main">
-    <div class="home-header-welcome">
-      <div class="welcome-left">
-        <div class="left-avatar" />
-        <div class="left-tips">
-          <div>Hi jack锛屾杩庝娇鐢╖T-LIMS</div>
-          <div>浠婂ぉ鏄�2023骞�07鏈�07鏃� 鏄熸湡浜�</div>
-        </div>
+    <div class="content-main">
+      <div class="echart1">
+        <el-row :gutter="10">
+          <el-col :span="16">
+            <el-card class="box-card" :body-style="{ padding: '0px 10px',height:'120px' }">
+              <p style="font-size: 10px;margin-left: 10px;">妫�楠屾�绘暟缁熻</p>
+               <el-row :gutter="10">
+                  <el-col :span="6" >
+                    <img :src="imgSrc" />
+                    <div class="card-text">
+                      <h6>妫�楠屽崟宸叉楠屾�绘暟</h6>
+                      <p>{{insNum}}</p>                
+                    </div>
+                  </el-col>
+                  <el-col :span="6">
+                    <img :src="imgSrc"/>
+                    <div class="card-text">
+                      <h6>妫�楠屽崟鏈楠屾�绘暟</h6>
+                      <p>{{insUnNum}}</p>
+                    </div>
+                  </el-col>
+                  <el-col :span="6">
+                    <img :src="imgSrc"/>
+                    <div class="card-text">
+                      <h6>妫�楠岄」鐩凡妫�楠屾�绘暟</h6>
+                      <p>{{insproNum}}</p>
+                    </div>
+                  </el-col>
+                  <el-col :span="6">
+                    <img :src="imgSrc"/>
+                    <div class="card-text">
+                      <h6>妫�楠岄」鐩湭妫�楠屾�绘暟</h6>
+                      <p>{{insproUnNum}}</p>
+                    </div>
+                  </el-col>
+               </el-row>
+            </el-card>
+          </el-col>
+          <el-col :span="8">
+            <el-card class="box-card" :body-style="{ padding: '0px',height:'120px' }">
+              <p style="font-size: 10px;margin-left: 10px;color: #2fcf10;">宸叉楠�</p>  
+              <el-table
+                :data="verifiedData"
+                :default-sort = "{prop: 'date', order: 'descending'}"
+                :cell-style="{margin:'0',padding:'2px 0px'}"
+                :header-cell-style="{margin:'0',padding:'0',backgroundColor:'#f0f7ff',color:'#0050a7'}">
+                  <el-table-column prop="no" label="鎺掑悕" sortable width="110"></el-table-column>
+                  <el-table-column prop="result" label="妫�楠岀粨璁�" width="110"></el-table-column>
+                  <el-table-column prop="num" label="妫�楠屾暟閲�" sortable width="110"></el-table-column>
+                  <el-table-column prop="chact" label="妫�楠屽崰姣�" sortable width="110"></el-table-column>
+              </el-table>
+            </el-card>
+          </el-col>
+        </el-row>
       </div>
-      <div class="welcome-right">
-        <div class="right-centent">
-          <div>鍗冲皢瓒呮湡寰呭姙</div>
-          <div>鏆傛棤</div>
-        </div>
-        <div />
-        <div class="right-centent">
-          <div>宸茶秴鏈熷緟鍔�</div>
-          <div>21</div>
-        </div>
+      <div class="echart2">
+        <el-row :gutter="10">
+          <el-col :span="6">
+            <el-card :body-style="{ padding: '0px',height:'180px' }">
+              <p>鍘熸潗鏂欏悎鏍肩巼</p>  
+              <div id="materialPieChart" style="width:100%;height:180px"></div>
+            </el-card>
+          </el-col>
+          <el-col :span="6">
+            <el-card :body-style="{ padding: '0px',height:'180px' }">
+              <p>鎴愬搧鍚堟牸鐜�</p>  
+              <div id="finishedPieChart" style="width:100%;height:180px"></div>
+            </el-card>
+          </el-col>
+          <el-col :span="12">
+            <el-card :body-style="{ padding: '0px',height:'180px' }">
+              <p style="z-index: 10;position: absolute;font-size: 10px;margin-left: 10px;color: #ff0000;">鏈楠�</p>  
+              <el-table
+                :data="uncheckedData"
+                :cell-style="{margin:'0px',padding:'3px 0px'}"
+                :header-cell-style="{margin:'0px',padding:'3px 0px',backgroundColor:'#f0f7ff',color:'#0050a7'}">
+                  <el-table-column prop="no" label="搴忓彿" width="100"></el-table-column>
+                  <el-table-column prop="name" label="寰呮椤圭洰" width="120"></el-table-column>
+                  <el-table-column prop="instrumentname" label="璁惧" width="120"></el-table-column>
+                  <el-table-column prop="startTime" label="妫�楠屾椂闂�" width="120">
+                  </el-table-column><el-table-column prop="checkname" label="妫�楠屼汉" width="120">
+                  </el-table-column><el-table-column prop="endTime" label="棰勮缁撴潫鏃堕棿" width="120"></el-table-column>
+              </el-table>
+            </el-card>
+          </el-col>
+        </el-row>
+      </div>
+      <div class="echart3">
+        <el-card :body-style="{ padding: '0px',height:'300px' }">
+          <el-radio-group class="button-group" :input="getDataByType(radioType)"  v-model="radioType" size="mini">
+            <el-radio-button label="鏈懆"></el-radio-button>
+            <el-radio-button label="鏈湀"></el-radio-button>
+            <el-radio-button label="鏈勾"></el-radio-button>
+          </el-radio-group>
+          <div id="barLineChart" style="width:100%;height:300px;"></div>
+        </el-card>
       </div>
     </div>
-    <div class="content-main" />
   </div>
 </template>
 
 <script>
+import * as echarts from 'echarts';
+import { getVerifiedTop3,getUncheckedTop4,getMatAndFinshQualified,getCheckAndProjectNum
+} from '@/api/home'
 export default {
+  name: "home",
+  data() {
+    return {
+      insNum: 0,
+      insUnNum: 0,
+      insproNum: 0,
+      insproUnNum: 1110,
+      radioType: "鏈勾",
+      imgSrc: require("@/assets/404_images/bg.png"),
+      verifiedData: new Array(),
+      uncheckedData: new Array(),
+    }
+  },
+  mounted(){
+    this.getcheckProjectNum();
+    this.getVerifiedData();
+    this.getUncheckedData();
+    this.getPieChart();
+  },
+  methods: {
+    async getcheckProjectNum(){
+      const {data} = await getCheckAndProjectNum();
+      this.insNum = data.insNum;
+      this.insUnNum = data.insUnNum;
+      this.insproNum = data.insproNum;
+      this.insproUnNum = data.insproUnNum;
+    },
+    async getVerifiedData(){
+      const { data } = await getVerifiedTop3();
+      for(let i=0;i<data.length;i++){
+        let val = "";
+        if(data[i].result == 0){
+            val = "涓嶅悎鏍�";
+        }else if(data[i].result == 1){
+            val = "鍚堟牸";
+        }else{
+            val = "鏈楠�";
+        }
+        this.verifiedData.push ({
+          no: i+1,
+          result: val,
+          num: data[i].num,
+          chact: data[i].chact + '%'
+        }) 
+      }
+    },
+    async getUncheckedData(){
+        const {data} = await getUncheckedTop4();
+        for(let i=0;i<data.length;i++){
+        this.uncheckedData.push ({
+          no: i+1,
+          name: data[i].name,
+          instrumentname: data[i].instrumentname,
+          startTime: data[i].startTime,
+          checkname: data[i].checkname,
+          endTime: data[i].endTime
+        }) 
+      }  
+    },
+    initPieChart(elementId,data){
+      var chartDom = document.getElementById(elementId);
+      var myChart = echarts.init(chartDom);
+      window.addEventListener('resize', function() {
+        myChart.resize();
+      });
+      var option;
+      option = {
+        tooltip: {
+          trigger: 'item'
+        },
+        legend: {
+          orient: 'vertical',
+          right: 'right',
+          top: 'center',
+          left: 20
+        },
+        series: [
+          {
+            type: 'pie',
+            radius: ['40%', '70%'],
+            tooltip: {
+              valueFormatter: function(value){
+                return value + '%';
+              }
+            },
+            avoidLabelOverlap: false,
+            label: {
+              show: false,
+              position: 'center',
+            },
+            labelLine: {
+              show: false
+            },
+            data: data
+          }
+        ]
+      };
 
+      option && myChart.setOption(option);
+    },
+    async getPieChart(){
+      const {data} = await getMatAndFinshQualified();
+      let material = [
+              { value: data.material, name: '鍚堟牸',itemStyle:{color: '#91cc75'} },
+              { value: data.unmaterial, name: '涓嶅悎鏍�',itemStyle:{color: '#fac858'} },
+              { value: data.notmaterial, name: '寰呮楠�' },
+            ]
+      let finished = [
+              { value: data.finished, name: '鍚堟牸',itemStyle:{color: '#91cc75'} },
+              { value: data.unfinished, name: '涓嶅悎鏍�',itemStyle:{color: '#fac858'} },
+              { value: data.notfinished, name: '寰呮楠�' },
+            ]
+      //娓叉煋楗肩姸鍥�
+      this.initPieChart("materialPieChart",material);
+      this.initPieChart("finishedPieChart",finished);
+    },
+    async getDataByType(label){
+      const xAxis = ['涓�鏈�', '浜屾湀', '涓夋湀', '鍥涙湀', '浜旀湀', '鍏湀', '涓冩湀','鍏湀','涔濇湀','鍗佹湀','鍗佷竴鏈�','鍗佷簩鏈�']
+      const bar1Data  = [2.0, 4.9, 7.0, 23.2, 25.6, 76.7, 135.6, 162.2, 32.6, 20.0, 6.4, 3.3];
+      const bar2Data = [2.6, 5.9, 9.0, 26.4, 28.7, 70.7, 175.6, 182.2, 48.7, 18.8, 6.0, 2.3];
+      const line1Data = [2.0, 2.2, 3.3, 4.5, 6.3, 10.2, 20.3, 23.4, 23.0, 16.5, 12.0, 6.2];
+      const line2Data = [3.0, 4.2, 6.3, 5.5, 8.3, 13.2, 20.3, 13.4, 23.0, 21.5, 2.0, 33.2];
+      switch(label){
+        case "鏈勾":
+          this.initBarAndLineChart(xAxis,bar1Data,bar2Data,line1Data,line2Data);
+          break;
+        case "鏈湀":
+            let arr = new Array();
+            for(let i=1;i<=31;i++){
+                arr.push(i);
+            }
+            this.initBarAndLineChart(arr,bar1Data,bar2Data,line1Data,line2Data);
+          break;
+        case "鏈懆":
+            let arr2 = new Array("鍛ㄤ竴","鍛ㄤ簩","鍛ㄤ笁","鍛ㄥ洓","鍛ㄤ簲","鍛ㄥ叚","鍛ㄦ棩");
+            this.initBarAndLineChart(arr2,bar1Data,bar2Data,line1Data,line2Data);
+          break
+      } 
+    },
+    initBarAndLineChart(xAxis,bar1Data,bar2Data,line1Data,line2Data){
+      var chartDom = document.getElementById('barLineChart');
+      var myChart = echarts.init(chartDom);
+      window.addEventListener('resize', function() {
+        myChart.resize();
+      });
+      var option;
+      option = {
+        tooltip: {
+          trigger: 'axis',
+          axisPointer: {
+            type: 'cross',
+            crossStyle: {
+              color: '#999'
+            }
+          }
+        },
+        legend: {
+          data: ['鍘熸潗鏂欐楠�', '鎴愬搧妫�楠�', '鍘熸潗鏂欏悎鏍肩巼','鎴愬搧鍚堟牸鐜�']
+        },
+        xAxis: [
+          {
+            type: 'category',
+            data: xAxis,
+            axisPointer: {
+              type: 'shadow'
+            }
+          }
+        ],
+        yAxis: [
+          {
+            type: 'value',
+            name: '妫�楠屾暟閲�',
+            min: 0,
+            max: 1000,
+            interval: 100,
+            axisLabel: {
+              formatter: '{value}'
+            }
+          },
+          {
+            type: 'value',
+            name: '鍚堟牸鐜�',
+            min: 0,
+            max: 100,
+            interval: 10,
+            axisLabel: {
+              formatter: '{value} %'
+            }
+          }
+        ],
+        series: [
+          {
+            name: '鍘熸潗鏂欐楠�',
+            type: 'bar',
+            tooltip: {
+              valueFormatter: function (value) {
+                return value;
+              }
+            },
+            data: bar1Data
+          },
+          {
+            name: '鎴愬搧妫�楠�',
+            type: 'bar',
+            tooltip: {
+              valueFormatter: function (value) {
+                return value ;
+              }
+            },
+            data: bar2Data
+          },
+          {
+            name: '鍘熸潗鏂欏悎鏍肩巼',
+            smooth: true,
+            type: 'line',
+            yAxisIndex: 1,
+            tooltip: {
+              valueFormatter: function (value) {
+                return value + ' %';
+              }
+            },
+            data: line1Data
+          },
+          {
+            name: '鎴愬搧鍚堟牸鐜�',
+            smooth: true,
+            type: 'line',
+            yAxisIndex: 1,
+            tooltip: {
+              valueFormatter: function (value) {
+                return value + ' %';
+              }
+            },
+            data: line2Data
+          }
+        ]
+      };
+      option && myChart.setOption(option);
+    }
+  }
 }
 </script>
 
 <style lang="scss" scoped>
 .home-main{
-  .home-header-welcome{
-    width: 100%;
-    background: #fff;
-    height: 84px;
-    display: flex;
-    border-bottom: 1px solid #f0f2f5;
-    padding: 8px 24px 12px 24px;
-    justify-content: space-between;
-    .welcome-left{
-      display: flex;
-      align-items: center;
-      height: 100%;
-      .left-avatar{
-        width: 56px;
-        height: 56px;
-        margin-right: 24px;
-        background: #0077DB;
-        border-radius: 50%;
+  .content-main{
+    .echart1{
+      .el-table{
+          font-weight: bold;
+          width: 100%;
+          height:100;
+          padding:0px;
+          margin-left:10px;
+        }
+        .box-card img{
+          width:100%;
+          height:100px;
+          border-radius: 10px;
+        }
+        .box-card .card-text{
+          position: absolute;
+          top:0px;
+          h6{
+            margin:10px 15px;
+          }
+          p{
+            width:100%;
+            text-align: right;
+            font-size: 25px;
+          }
+        }
+    }
+    .echart2 {
+      .el-table{
+        font-weight: bold;
+        width: 100%;
+        height:100;
+        padding:0px;
+        margin-left:10px;
+        padding-top:40px;
       }
-      .left-tips{
-        height: 80%;
-        display: flex;
-        flex-direction: column;
-        justify-content: space-between;
-        >div:nth-child(1){
-          font-size: 20px;
-          color: #303133;
-        }
-        >div:nth-child(2){
-          font-size: 14px;
-          color: #606266;
-        }
+      .el-col{
+        margin: 10px 0;
+      }
+      p{
+        position: absolute;
+        font-size: 10px;
+        margin-left: 10px;
+        color:black;
       }
     }
-    .welcome-right{
-      width: 250px;
-      display: flex;
-      justify-content: space-between;
-      align-items: center;
-      .right-centent{
-        height: 80%;
-        display: flex;
-        flex-direction: column;
-        justify-content: space-between;
-        align-items: flex-end;
-        >div:nth-child(1){
-          color: #909399;
-          font-size: 14px;
-        }
-        >div:nth-child(2){
-          font-size: 24px;
-          color: #c0c4cc;
-        }
-      }
-      >div:nth-child(2){
-          width: 2px;
-          height: 70%;
-          background: #f0f2f5;
-      }
+    .echart3 .button-group{
+      margin-top: 10px;
+      margin-left: 88%;
+      z-index: 10;
     }
   }
 }
diff --git a/src/views/standardLibrary/index.vue b/src/views/standardLibrary/index.vue
index 4a198f1..11a71b7 100644
--- a/src/views/standardLibrary/index.vue
+++ b/src/views/standardLibrary/index.vue
@@ -705,17 +705,17 @@
         flex-direction: column;
         justify-content: space-between;
 
-        .el-table {
-          // flex: 1;
-          // max-height: 680px;
-          // overflow-y: scroll;
-        }
-        > div:nth-child(3) {
-          // height: 20px;
-          display: flex;
-          justify-content: end;
-          margin: 10px 0;
-        }
+          // .el-table {
+            // flex: 1;
+            // max-height: 680px;
+            // overflow-y: scroll;
+          // }
+          >div:nth-child(3){
+            // height: 20px;
+            display: flex;
+            justify-content: end;
+            margin: 10px 0;
+          }
       }
     }
   }
diff --git a/src/worker/test.js b/src/worker/test.js
new file mode 100644
index 0000000..9fda9e4
--- /dev/null
+++ b/src/worker/test.js
@@ -0,0 +1,5 @@
+export function test(){
+    for (let index = 0; index < 100; index++) {
+        console.log("瀛愮嚎绋�"+index);
+    }
+}
\ No newline at end of file

--
Gitblit v1.9.3