From 10f334d1b36f8dad1edcd3b489c9eb6b8773d444 Mon Sep 17 00:00:00 2001
From: spring <2396852758@qq.com>
Date: 星期一, 03 三月 2025 14:47:53 +0800
Subject: [PATCH] Merge branch 'dev' of http://114.132.189.42:9002/r/lims-ruoyi-before into dev

---
 src/views/business/materialOrder/copperOrder.vue                  |   15 
 src/components/echarts/echarts.vue                                |  238 +++++++
 src/views/business/materialOrder/customsInspection.vue            |   18 
 src/layout/components/Navbar.vue                                  |   13 
 src/views/statisticalCharts/itemInspectionAnalysis/index.vue      |  535 ++++++++++++++++
 src/components/echarts/DataComparison.vue                         |  507 +++++++++++++++
 src/views/statisticalCharts/qualificationRateStatistics/index.vue |  448 +++++++++++++
 src/views/business/productOrder/components/add.vue                |   74 +-
 src/api/statisticalCharts/dataAnalysis.js                         |   73 ++
 src/router/index.js                                               |   11 
 src/views/structural/capabilityAndLaboratory/capability/index.vue |    4 
 11 files changed, 1,883 insertions(+), 53 deletions(-)

diff --git a/src/api/statisticalCharts/dataAnalysis.js b/src/api/statisticalCharts/dataAnalysis.js
new file mode 100644
index 0000000..0775c06
--- /dev/null
+++ b/src/api/statisticalCharts/dataAnalysis.js
@@ -0,0 +1,73 @@
+// 缁熻鍥捐〃
+import request from "@/utils/request";
+
+//鍚堟牸鐜囩粺璁�
+export function getRawPassRateByBarChart(query) {
+  return request({
+    url: "/dataAnalysis/getRawPassRateByBarChart",
+    method: "get",
+    params: query,
+  });
+}
+//鍘熸潗鏂欑粺璁�
+export function getRawPassRateByCake(query) {
+  return request({
+    url: "/dataAnalysis/getRawPassRateByCake",
+    method: "get",
+    params: query,
+  });
+}
+//鏈湀妫�楠岀被鍨嬫暟閲�
+export function getOrderTypeCookie() {
+  return request({
+    url: "/dataAnalysis/getOrderTypeCookie",
+    method: "get",
+  });
+}
+//鏈湀妫�楠岀被鍨嬫暟閲�
+export function getRawUpMonth() {
+  return request({
+    url: "/dataAnalysis/getRawUpMonth",
+    method: "get",
+  });
+}
+//鏌ヨ鍘熸潗鏂欓」妫�鍒嗘瀽
+export function getRawProductAnalysis(query) {
+  return request({
+    url: "/dataAnalysis/getRawProductAnalysis",
+    method: "post",
+    data: query,
+  });
+}
+//鏌ヨ鍘熸潗鏂欓」妫�鍒嗘瀽鍚堟牸鐜�
+export function getRawProductAnalysisRawPass(query) {
+  return request({
+    url: "/dataAnalysis/getRawProductAnalysisRawPass",
+    method: "post",
+    data: query,
+  });
+}
+//鏌ヨ鍘熸潗鏂欓」妫�鍒嗘瀽鍒楄〃
+export function getRawProductAnalysisAllList(query) {
+  return request({
+    url: "/dataAnalysis/getRawProductAnalysisAllList",
+    method: "post",
+    data: query,
+  });
+}
+//鏌ヨ妫�楠岄」
+export function getRawItemNames(query) {
+  return request({
+    url: "/dataAnalysis/getRawItemNames",
+    method: "get",
+    params: query,
+  });
+}
+//鏌ヨ鍘熸潗鏂欓」妫�鍜屽巶瀹舵暟鎹姣�
+export function getRawSupplierCompare(query) {
+  return request({
+    url: "/dataAnalysis/getRawSupplierCompare",
+    method: "post",
+    data: query,
+  });
+}
diff --git a/src/components/echarts/DataComparison.vue b/src/components/echarts/DataComparison.vue
new file mode 100644
index 0000000..b69b49d
--- /dev/null
+++ b/src/components/echarts/DataComparison.vue
@@ -0,0 +1,507 @@
+<template>
+  <div>
+    <div>
+      <el-row class="title">
+        <el-col :span="6" style="padding-left: 20px;text-align: left;">鏁版嵁鍒嗘瀽</el-col>
+        <el-col :span="18" style="text-align: right;">
+          <el-button size="medium" @click="$emit('goBack')">杩斿洖</el-button>
+        </el-col>
+      </el-row>
+    </div>
+    <div class="container">
+      <div>
+        <div style="padding: 0 0 10px 10px">濉啓鍘傚鏁版嵁</div>
+        <el-form ref="supplierForm" :model="supplierForm" :rules="rules" class="demo-ruleForm" label-width="40px">
+          <el-row :gutter="20">
+            <el-col :span="3">
+              <el-form-item label="1锛�" prop="one">
+                <el-input v-model="supplierForm.one" size="small"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="3">
+              <el-form-item label="2锛�" prop="two">
+                <el-input v-model="supplierForm.two" size="small"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="3">
+              <el-form-item label="3锛�" prop="three">
+                <el-input v-model="supplierForm.three" size="small"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="3">
+              <el-form-item label="4锛�" prop="four">
+                <el-input v-model="supplierForm.four" size="small"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="3">
+              <el-form-item label="5锛�" prop="five">
+                <el-input v-model="supplierForm.five" size="small"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="4">
+              <el-form-item>
+                <el-button size="small" type="primary" @click="submitForm()">鏁版嵁鍒嗘瀽</el-button>
+                <el-button size="small" @click="resetForm()">閲嶇疆</el-button>
+              </el-form-item>
+            </el-col>
+          </el-row>
+        </el-form>
+      </div>
+      <table :border='true' class="table">
+        <tr>
+          <th class="thTitle">          </th>
+          <th class="thTitle">1</th>
+          <th class="thTitle">2</th>
+          <th class="thTitle">3</th>
+          <th class="thTitle">4</th>
+          <th class="thTitle">5</th>
+          <th class="thTitle">骞冲潎鍊�</th>
+          <th class="thTitle">鏍囧噯鍋忓樊</th>
+          <th class="thTitle">鐩稿鍋忓樊</th>
+          <th class="thTitle">骞冲潎鏍囧噯鍋忓樊</th>
+        </tr>
+        <tr>
+          <td class="thBack">鍘傚妫�娴嬫暟鎹�</td>
+          <td v-for="(item,index) in supplierData" :key="index" class="tdData">{{item}}</td>
+        </tr>
+        <tr>
+          <td class="thBack">妫�娴嬩腑蹇冩暟鎹�</td>
+          <td v-for="(item,index) in localData" :key="index" class="tdData">{{item}}</td>
+        </tr>
+        <tr>
+          <td class="thBack">缁濆鍋忓樊</td>
+          <td v-for="(item,index) in absoluteDeviation" :key="index" class="tdData">{{item}}</td>
+        </tr>
+        <tr>
+          <td class="thBack">骞冲潎鍊�</td>
+          <td v-for="(item,index) in average" :key="index" class="tdData">{{item}}</td>
+        </tr>
+        <tr>
+          <td class="thBack2">鍘傚</td>
+        </tr>
+        <tr>
+          <td class="thBack">UCL</td>
+          <td v-for="(item,index) in supplierULC" :key="index" class="tdData">{{item}}</td>
+          <td v-for="(item,index) in empty" :key="'a' + index" class="tdData"></td>
+        </tr>
+        <tr>
+          <td class="thBack">LCL</td>
+          <td v-for="(item,index) in supplierLCL" :key="index" class="tdData">{{item}}</td>
+          <td v-for="(item,index) in empty" :key="'b' + index" class="tdData"></td>
+        </tr>
+        <tr>
+          <td class="thBack">骞冲潎鍊�</td>
+          <td v-for="(item,index) in supplierAverage" :key="index" class="tdData">{{item}}</td>
+          <td v-for="(item,index) in empty" :key="'c' + index" class="tdData"></td>
+        </tr>
+        <tr>
+          <td class="thBack">鏋佸樊</td>
+          <td v-for="(item,index) in supplierRange" :key="index" class="tdData">{{item}}</td>
+          <td v-for="(item,index) in empty" :key="'d' + index" class="tdData"></td>
+        </tr>
+        <tr>
+          <td class="thBack2">妫�娴嬩腑蹇�</td>
+        </tr>
+        <tr>
+          <td class="thBack">UCL</td>
+          <td v-for="(item,index) in localULC" :key="index" class="tdData">{{item}}</td>
+          <td v-for="(item,index) in empty" :key="'e' + index" class="tdData"></td>
+        </tr>
+        <tr>
+          <td class="thBack">LCL</td>
+          <td v-for="(item,index) in localLCL" :key="index" class="tdData">{{item}}</td>
+          <td v-for="(item,index) in empty" :key="'f' + index" class="tdData"></td>
+        </tr>
+        <tr>
+          <td class="thBack">骞冲潎鍊�</td>
+          <td v-for="(item,index) in localAverage" :key="index" class="tdData">{{item}}</td>
+          <td v-for="(item,index) in empty" :key="'g' + index" class="tdData"></td>
+        </tr>
+        <tr>
+          <td class="thBack">鏋佸樊</td>
+          <td v-for="(item,index) in localRange" :key="index" class="tdData">{{item}}</td>
+          <td v-for="(item,index) in empty" :key="'h' + index" class="tdData"></td>
+        </tr>
+      </table>
+      <el-row>
+        <el-col :span="12">
+          <div class="inspection-card">
+            <div class="echartsTitle">妫�娴嬫暟鎹姣�</div>
+            <Echarts ref="chart"
+                     :grid="grid"
+                     :legend="legend"
+                     :lineColors="lineColors"
+                     :series="echartsSeries"
+                     :tooltip="tooltip"
+                     :xAxis="xAxis"
+                     :yAxis="yAxis"
+                     style="height: 40vh;"></Echarts>
+          </div>
+        </el-col>
+        <el-col :span="12">
+          <div class="inspection-card">
+            <div class="echartsTitle">娴嬮噺鏁版嵁鏍囧噯宸姣�</div>
+            <Echarts ref="chart"
+                     :barColors="barColors"
+                     :chartStyle="chartStyle"
+                     :grid="grid"
+                     :legend="legend1"
+                     :series="echartsSeries1"
+                     :tooltip="tooltip"
+                     :xAxis="xAxis1"
+                     :yAxis="yAxis1"
+                     style="height: 40vh;"></Echarts>
+          </div>
+        </el-col>
+      </el-row>
+      <el-row>
+        <el-col :span="12">
+          <div class="inspection-card">
+            <div class="echartsTitle">鍋忓樊鍒嗘瀽</div>
+            <Echarts ref="chart"
+                     :grid="grid"
+                     :legend="legend2"
+                     :lineColors="lineColors"
+                     :series="echartsSeries2"
+                     :tooltip="tooltip"
+                     :xAxis="xAxis"
+                     :yAxis="yAxis2"
+                     style="height: 40vh;"></Echarts>
+          </div>
+        </el-col>
+        <el-col :span="12">
+          <div class="inspection-card">
+            <div class="echartsTitle">妫�娴嬩腑蹇冩暟鎹�</div>
+            <Echarts ref="chart"
+                     :grid="grid"
+                     :legend="legend"
+                     :lineColors="lineColors"
+                     :series="echartsSeries3"
+                     :tooltip="tooltip"
+                     :xAxis="xAxis"
+                     :yAxis="yAxis"
+                     style="height: 40vh;"></Echarts>
+          </div>
+        </el-col>
+      </el-row>
+    </div>
+  </div>
+</template>
+
+<script>
+import Echarts from "./echarts.vue";
+
+export default {
+  name: "DataComparison",
+  // import 寮曞叆鐨勭粍浠堕渶瑕佹敞鍏ュ埌瀵硅薄涓墠鑳戒娇鐢�
+  components: {Echarts},
+  props: {
+    comparisonData : {
+      type: Object,
+      default: () => {}
+    },
+    selectRow : {
+      type: Object,
+      default: () => {}
+    }
+  },
+  data() {
+    // 杩欓噷瀛樻斁鏁版嵁
+    return {
+      supplierForm: {
+        one: '',
+        two: '',
+        three: '',
+        four: '',
+        five: '',
+      },
+      rules: {
+        one: [{ required: true, message: '蹇呭~', trigger: 'blur' }],
+        two: [{ required: true, message: '蹇呭~', trigger: 'blur' }],
+        three: [{ required: true, message: '蹇呭~', trigger: 'blur' }],
+        four: [{ required: true, message: '蹇呭~', trigger: 'blur' }],
+        five: [{ required: true, message: '蹇呭~', trigger: 'blur' }],
+      },
+      comparisonData1: {},
+      supplierData: [], // 鍘傚鏁版嵁
+      localData: [], // 妫�娴嬩腑蹇冩娴嬫暟鎹�
+      absoluteDeviation: [], // 缁濆鍋忓樊
+      average: [], // 骞冲潎鍊�
+      supplierULC: [], // 鍘傚UCL
+      supplierLCL: [], // 鍘傚LCL
+      supplierAverage: [], // 鍘傚骞冲潎鍊�
+      supplierRange: [], // 鍘傚鏋佸樊
+      localULC: [], // 妫�娴嬩腑蹇僓CL
+      localLCL: [], // 妫�娴嬩腑蹇僉CL
+      localAverage: [], // 妫�娴嬩腑蹇冨钩鍧囧��
+      localRange: [], // 妫�娴嬩腑蹇冩瀬宸�
+      manufacturerData: [],
+      manufacturer: [
+        {value: '1.1'},
+        {value: '2.2'},
+        {value: '3.3'},
+        {value: '4.4'},
+        {value: '5.5'},
+      ],
+      testCenter: [
+        {value: '1.2'},
+        {value: '2.33'},
+        {value: '3.64'},
+        {value: '4.3'},
+        {value: '5.9'},
+      ],
+      empty: [
+        {data: '1'},
+        {data: '2'},
+        {data: '3'},
+        {data: '4'},
+      ],
+      lineColors: ['#ed7d31', '#409EFF'],
+      barColors: ['#ed7d31', '#409EFF', '#a5a5a5'],
+      chartStyle: {
+        width: '100%',
+        height: '96%' // 璁剧疆鍥捐〃瀹瑰櫒鐨勯珮搴�
+      },
+      grid: {
+        left: '3%',
+        right: '4%',
+        bottom: '3%',
+        containLabel: true
+      },
+      legend: {
+        data: ['鍘傚妫�娴嬫暟鎹�','妫�娴嬩腑蹇冩娴嬫暟鎹�']
+      },
+      tooltip: {
+        trigger: 'axis',
+        axisPointer: {
+          type: 'shadow'
+        }
+      },
+      xAxis: [{
+        type: 'category',
+        data: ['1', '2', '3', '4', '5']
+      }],
+      yAxis: [{
+        type: 'value'
+      }],
+      echartsSeries: [
+        {
+          name: '鍘傚妫�娴嬫暟鎹�',
+          type: 'line',
+          label: {
+            show: true,
+            position: 'top',
+          },
+          data: []
+        },
+        {
+          name: '妫�娴嬩腑蹇冩娴嬫暟鎹�',
+          type: 'line',
+          label: {
+            show: true,
+            position: 'top',
+          },
+          data: []
+        }
+      ],
+      xAxis1: [{
+        type: 'category',
+        data: ['鍘傚', '妫�娴嬩腑蹇�']
+      }],
+      legend1: {
+        data: ['UCL','LCL', '骞冲潎鍊�']
+      },
+      yAxis1: [
+        {
+          type: 'value',
+        },
+      ],
+      echartsSeries1: [
+        {
+          name: 'UCL',
+          type: 'bar',
+          label: {
+            show: true,
+            position: 'top'
+          },
+          data: []
+        },
+        {
+          name: 'LCL',
+          type: 'bar',
+          label: {
+            show: true,
+            position: 'top'
+          },
+          data: []
+        },
+        {
+          name: '骞冲潎鍊�',
+          type: 'bar',
+          label: {
+            show: true,
+            position: 'top'
+          },
+          data: []
+        },
+      ],
+      legend2: {
+        data: ['骞冲潎鍊�','缁濆鍋忓樊']
+      },
+      yAxis2: [{
+        type: 'value',
+        min: 0,
+        max: 1,
+      }],
+      echartsSeries2: [
+        {
+          name: '骞冲潎鍊�',
+          type: 'line',
+          label: {
+            show: true,
+            position: 'top',
+            formatter: (params) => Math.round(params.value * 1000) / 10 + '%'
+          },
+          data: [],
+        },
+        {
+          name: '缁濆鍋忓樊',
+          type: 'line',
+          label: {
+            show: true,
+            position: 'top',
+            formatter: (params) => Math.round(params.value * 1000) / 10 + '%'
+          },
+          data: [],
+        }
+      ],
+      echartsSeries3: [
+        {
+          name: '妫�娴嬩腑蹇冩娴嬫暟鎹�',
+          type: 'line',
+          data: []
+        }
+      ],
+    }
+  },
+  mounted() {
+    this.getInfo()
+  },
+  // 鏂规硶闆嗗悎
+  methods: {
+    getInfo () {
+      this.localData = this.comparisonData.localData === null ? ['', '', '', '', '','','', '', ''] : this.comparisonData.localData
+      this.localData = this.localData.map((number, index) => index === 7 ? `${Math.round(number * 100)}%` : number)
+      this.echartsSeries3[0].data = this.localData.slice(0, 5)
+      this.localULC = this.comparisonData.localULC
+      this.localLCL = this.comparisonData.localLCL
+      this.localAverage = this.comparisonData.localAverage
+      this.localRange = this.comparisonData.localRange
+    },
+    getInfo1 () {
+      this.echartsSeries1[0].data = []
+      this.supplierData = this.comparisonData1.supplierData === null ? ['', '', '', '', '','','', '', ''] : this.comparisonData1.supplierData
+      this.localData = this.comparisonData1.localData === null ? ['', '', '', '', '','','', '', ''] : this.comparisonData1.localData
+      this.localData = this.localData.map((number, index) => index === 7 ? `${Math.round(number * 100)}%` : number)
+      this.echartsSeries3[0].data = this.localData.slice(0, 5)
+      this.echartsSeries[0].data = this.supplierData
+      this.echartsSeries[1].data = this.localData
+      this.absoluteDeviation = this.comparisonData1.absoluteDeviation === null ? ['', '', '', '', '','','', '', ''] : this.comparisonData1.absoluteDeviation
+      this.echartsSeries2[1].data = this.absoluteDeviation
+      this.absoluteDeviation = this.absoluteDeviation.map(number => `${Math.round(number * 100)}%`) // 缁濆鍋忓樊鐧惧垎姣旇浆鎹�
+      this.average = this.comparisonData1.average === null ? ['', '', '', '', '','','', '', ''] : this.comparisonData1.average
+      this.echartsSeries2[0].data = this.average
+      this.average = this.average.map(number => `${Math.round(number * 100)}%`) // 骞冲潎鍊肩櫨鍒嗘瘮杞崲
+      this.supplierULC = this.comparisonData1.supplierULC === null ? ['', '', '', '', ''] : this.comparisonData1.supplierULC
+      this.echartsSeries1[0].data.push(this.supplierULC[0]) // 娴嬮噺鏁版嵁鏍囧噯宸姣旀煴鐘跺浘鏁版嵁
+      this.supplierLCL = this.comparisonData1.supplierLCL === null ? ['', '', '', '', ''] : this.comparisonData1.supplierLCL
+      this.echartsSeries1[1].data.push(this.supplierLCL[0]) // 娴嬮噺鏁版嵁鏍囧噯宸姣旀煴鐘跺浘鏁版嵁
+      this.supplierAverage = this.comparisonData1.supplierAverage === null ? ['', '', '', '', ''] : this.comparisonData1.supplierAverage
+      this.echartsSeries1[2].data.push(this.supplierAverage[0]) // 娴嬮噺鏁版嵁鏍囧噯宸姣旀煴鐘跺浘鏁版嵁
+      this.supplierRange = this.comparisonData1.supplierRange === null ? ['', '', '', '', ''] : this.comparisonData1.supplierRange
+      this.localULC = this.comparisonData1.localULC
+      this.echartsSeries1[0].data.push(this.localULC[0]) // 娴嬮噺鏁版嵁鏍囧噯宸姣旀煴鐘跺浘鏁版嵁
+      this.localLCL = this.comparisonData1.localLCL
+      this.echartsSeries1[1].data.push(this.localLCL[0]) // 娴嬮噺鏁版嵁鏍囧噯宸姣旀煴鐘跺浘鏁版嵁
+      this.localAverage = this.comparisonData1.localAverage
+      this.echartsSeries1[2].data.push(this.localAverage[0]) // 娴嬮噺鏁版嵁鏍囧噯宸姣旀煴鐘跺浘鏁版嵁
+      this.localRange = this.comparisonData1.localRange
+    },
+    submitForm () {
+      this.$refs['supplierForm'].validate((valid) => {
+        if (valid) {
+          const params = {
+            orderIds: this.selectRow.orderIds,
+            itemNames: this.selectRow.itemNames,
+            supplierDataList: Object.values(this.supplierForm)
+          }
+          this.$axios.post(this.$api.dataAnalysis.getRawSupplierCompare, params, {
+            headers: {
+              'Content-Type': 'application/json'
+            },
+            noQs: true
+          }).then(res => {
+            if (res.code === 201) {
+              return
+            }
+            this.comparisonData1 = res.data
+            this.getInfo1()
+          })
+        } else {
+          console.log('error submit!!');
+          return false;
+        }
+      });
+    },
+    resetForm () {
+      this.$refs['supplierForm'].resetFields();
+    },
+  },
+}
+</script>
+
+<style scoped>
+.title {
+  height: 60px;
+  line-height: 60px;
+}
+.container {
+  width: calc(100% - 20px);
+  height: calc(100vh - 170px);
+  background-color: #fff;
+  padding: 10px;
+  overflow-y: auto;
+}
+.table {
+  width: 100%;
+}
+.thTitle {
+  background-color: #e0eaf5;
+  padding: 6px 2px;
+}
+.thBack {
+  text-align: center;
+  background-color: #e0eaf5;
+  padding: 2px;
+}
+.thBack2 {
+  text-align: center;
+  background-color: #e4f2da;
+  padding: 2px;
+}
+.tdData {
+  padding: 4px;
+  text-align: center;
+  font-size: 13px;
+  width: 10%;
+}
+.inspection-card{
+  width: 100%;
+  background: #FFFFFF;
+  margin-top: 10px;
+}
+.echartsTitle {
+  text-align: center;
+  padding-bottom: 10px;
+}
+</style>
diff --git a/src/components/echarts/echarts.vue b/src/components/echarts/echarts.vue
new file mode 100644
index 0000000..7b8e67c
--- /dev/null
+++ b/src/components/echarts/echarts.vue
@@ -0,0 +1,238 @@
+<template>
+  <div>
+    <div id="id" ref="chart" :style="chartStyle"></div>
+  </div>
+</template>
+
+<script>
+import * as echarts from 'echarts'
+import ResizeListener from 'element-resize-detector';
+
+export default {
+  name: 'EChart',
+  props: {
+    options: {
+      type: Object,
+      default: () => ({})
+    },
+    chartStyle: {
+      type: Object,
+      default: () => ({
+        height: '80%',
+        width: '100%'
+      })
+    },
+    dataset: {
+      type: Object,
+      default: () => {}
+    },
+    xAxis: {
+      type: Array,
+      default: () => []
+    },
+    yAxis: {
+      type: Array,
+      default: () => []
+    },
+    series: {
+      type: Array,
+      default: () => []
+    },
+    grid: {
+      type: Object,
+      default: () => ({})
+    },
+    legend: {
+      type: Object,
+      default: () => ({})
+    },
+    tooltip: {
+      type: Object,
+      default: () => ({})
+    },
+    lineColors: {
+      type: Array,
+      default: () => ['#00BAFF', '#3DE7C9', '#CCEDF0', '#FFB71C', '#FF5A5A']
+    },
+    barColors: {
+      type: Array,
+      default: () => ['#ff8800', '#3DE7C9', '#CCEDF0', '#FFB71C', '#FF5A5A']
+    },
+    loadingOption: {
+      type: Object,
+      default: () => ({
+        text: '鏁版嵁鍔犺浇涓�...',
+        color: '#00BAFF',
+        textColor: '#000',
+        maskColor: 'rgba(255, 255, 255, 0.8)',
+        zlevel: 0
+      })
+    }
+  },
+  data() {
+    return {
+      chartInstance: null,
+    }
+  },
+  watch: {
+    options: {
+      deep: true,
+        // immediate: true,
+        handler(val) {
+        this.$nextTick(() => {
+          this.renderChart()
+        })
+      },
+    },
+    series: {
+      deep: true,
+      // immediate: true,
+      handler(val) {
+        this.$nextTick(() => {
+          this.renderChart()
+        })
+      },
+    },
+    dataset: {
+      deep: true,
+      // immediate: true,
+      handler(val) {
+        this.$nextTick(() => {
+          this.renderChart()
+        })
+      },
+    },
+    xAxis: {
+      deep: true,
+      // immediate: true,
+      handler(val) {
+        this.$nextTick(() => {
+          this.renderChart()
+        })
+      },
+    },
+    yAxis: {
+      deep: true,
+      // immediate: true,
+      handler(val) {
+        this.$nextTick(() => {
+          this.renderChart()
+        })
+      },
+    },
+    grid: {
+      deep: true,
+      // immediate: true,
+      handler(val) {
+        this.$nextTick(() => {
+          this.renderChart()
+        })
+      },
+    },
+    legend: {
+      deep: true,
+      // immediate: true,
+      handler(val) {
+        this.$nextTick(() => {
+          this.renderChart()
+        })
+      },
+    },
+    tooltip: {
+      deep: true,
+      // immediate: true,
+      handler(val) {
+        this.$nextTick(() => {
+          this.renderChart()
+        })
+      },
+    },
+    lineColors: {
+      deep: true,
+      // immediate: true,
+      handler(val) {
+        this.$nextTick(() => {
+          this.renderChart()
+        })
+      },
+    },
+    barColors: {
+      deep: true,
+      // immediate: true,
+      handler(val) {
+        this.$nextTick(() => {
+          this.renderChart()
+        })
+      },
+    },
+  },
+  mounted() {
+    this.chartInstance = echarts.init(this.$refs.chart)
+    this.renderChart()
+    window.addEventListener('resize', this.windowResizeListener);
+  },
+  beforeDestroy() {
+    this.dispose()
+  },
+  methods: {
+    /* 褰撶獥鍙g缉鏀炬椂锛宔chart鍔ㄦ�佽皟鏁磋嚜韬ぇ灏� */
+    windowResizeListener() {
+      if (!this.chartInstance) return;
+      this.dispose()
+      this.chartInstance = echarts.init(this.$refs.chart)
+      this.renderChart()
+      this.chartInstance.resize();
+    },
+    renderChart() {
+      const option = {
+        backgroundColor: this.options.backgroundColor || '#fff',
+        xAxis: this.xAxis,
+        yAxis: this.yAxis,
+        dataset: this.dataset,
+        series: this.series,
+        grid: this.grid,
+        legend: this.legend,
+        tooltip: this.tooltip
+      }
+      // 鏍规嵁浼犲叆鐨勬暟鎹拰閰嶇疆鍙傛暟鐢熸垚鍥捐〃
+      this.generateChart(option)
+    },
+
+    generateChart(option) {
+      // 閰嶇疆鎶樼嚎鍥惧拰鏌辩姸鍥剧殑鏍峰紡
+      if (option.series && option.series.length > 0) {
+        option.series.forEach((s, index) => {
+          if (s.type === 'line') {
+            s.itemStyle = {
+              color: this.lineColors[index] || this.lineColors[0]
+            }
+            s.lineStyle = {
+              color: this.lineColors[index] || this.lineColors[0]
+            }
+          } else if (s.type === 'bar') {
+            s.itemStyle = {
+              color: this.barColors[index] || this.barColors[0]
+            }
+          }
+        })
+      }
+      this.chartInstance.clear()
+
+      // 娓叉煋鍥捐〃
+      this.chartInstance.setOption(option)
+    },
+
+    dispose() {
+      if (this.chartInstance) {
+        window.removeEventListener('resize', this.chartInstance.resize);//閿�姣佸浘琛ㄧ洃鍚簨浠�
+        this.chartInstance.dispose()
+        this.chartInstance = null
+      }
+    }
+  },
+}
+</script>
+
+<style scoped>
+/* 鍦ㄨ繖閲屽彲浠ュ啓鏍峰紡锛屾瘮濡傝缃浘琛ㄥ鍣ㄧ殑瀹藉害鍜岄珮搴� */
+</style>
diff --git a/src/layout/components/Navbar.vue b/src/layout/components/Navbar.vue
index da89cf9..e9566ab 100644
--- a/src/layout/components/Navbar.vue
+++ b/src/layout/components/Navbar.vue
@@ -12,6 +12,16 @@
       <div class="avatar-wrapper">
         <img :src="avatar" class="user-avatar" />
         <span class="userName">{{ nickName }}</span>
+        <el-dropdown class="avatar-container right-menu-item hover-effect" trigger="click">
+          <div class="avatar-wrapper">
+            <i class="el-icon-caret-bottom" />
+          </div>
+          <el-dropdown-menu slot="dropdown">
+            <router-link to="/user/profile">
+              <el-dropdown-item>涓汉涓績</el-dropdown-item>
+            </router-link>
+          </el-dropdown-menu>
+        </el-dropdown>
         <img
           class="logoout"
           src="@/assets/images/logoout.png"
@@ -211,9 +221,6 @@
       }
     }
 
-    .avatar-container {
-      margin-right: 30px;
-    }
   }
 }
 </style>
diff --git a/src/router/index.js b/src/router/index.js
index f6b55c0..eb196f1 100644
--- a/src/router/index.js
+++ b/src/router/index.js
@@ -104,18 +104,19 @@
         path: "customsInspection",
         component: () =>
           import("@/views/business/materialOrder/customsInspection"),
-        name: "customsInspection",
+        name: "CustomsInspection",
         meta: {
           title: "鍘熸潗鏂欎笅鍗曡鎯�",
           activeMenu: "/business/materialOrder",
+          keepAlive: true
         },
       },
       {
         // 閾滄潗鏂欎笅鍗�
         path: "copperOrder",
         component: () => import("@/views/business/materialOrder/copperOrder"),
-        name: "copperOrder",
-        meta: { title: "閾滄潗鏂欎笅鍗�", activeMenu: "/business/materialOrder" },
+        name: "CopperOrder",
+        meta: { title: "閾滄潗鏂欎笅鍗�", activeMenu: "/business/materialOrder",keepAlive: true },
       },
     ],
   },
@@ -131,8 +132,8 @@
         path: "add",
         component: () =>
           import("@/views/business/productOrder/components/add.vue"),
-        name: "add",
-        meta: { title: "鎴愬搧涓嬪崟璇︽儏", activeMenu: "/business/materialOrder" },
+        name: "Add",
+        meta: { title: "鎴愬搧涓嬪崟璇︽儏", activeMenu: "/business/materialOrder",keepAlive: true },
       },
     ],
   },
diff --git a/src/views/business/materialOrder/copperOrder.vue b/src/views/business/materialOrder/copperOrder.vue
index 47ef83b..1ca4a5f 100644
--- a/src/views/business/materialOrder/copperOrder.vue
+++ b/src/views/business/materialOrder/copperOrder.vue
@@ -421,6 +421,7 @@
 }
 
 export default {
+  name: 'CopperOrder',
   components: {},
   dicts: ['check_type', 'urgency_level'],
   data() {
@@ -723,7 +724,7 @@
           this.noNeedCheckLoad = false
           if (res.code == 201) return
           this.$message.success('宸叉彁浜�')
-          this.goBack()
+          this.closeOpenPage()
         }).catch(e=>{
           this.noNeedCheckLoad = false
         })
@@ -1165,7 +1166,7 @@
         if (res.code == 201) return
         this.$message.success('宸叉彁浜�')
         this.bsm3Dia = false;
-        this.goBack()
+        this.closeOpenPage()
       }).catch(e=>{
         this.saveLoad = false
       })
@@ -1781,8 +1782,16 @@
 
     },
     goBack () {
+      if (this.active == 1) {
+        this.$router.go(-1)
+      } else {
+        this.closeOpenPage()
+      }
+    },
+    closeOpenPage() {
       this.$router.go(-1)
-    }
+      this.$tab.closeOpenPage()
+    },
   }
 }
 </script>
diff --git a/src/views/business/materialOrder/customsInspection.vue b/src/views/business/materialOrder/customsInspection.vue
index 79fc1b1..1f50604 100644
--- a/src/views/business/materialOrder/customsInspection.vue
+++ b/src/views/business/materialOrder/customsInspection.vue
@@ -388,7 +388,7 @@
       width="32%">
       <span>{{ dialogMessage }}</span>
       <span slot="footer" class="dialog-footer">
-        <el-button type="primary" @click="goBack()">纭� 瀹�</el-button>
+        <el-button type="primary" @click="dialogVisible= false,closeOpenPage()">纭� 瀹�</el-button>
       </span>
     </el-dialog>
     <el-dialog
@@ -633,7 +633,7 @@
       this.standardMethodListId = null
     }
   },
-  mounted() {
+  created() {
     this.active = this.$route.query.active
     this.orderType = this.$route.query.orderType
     this.currentId = this.$route.query.currentId
@@ -1017,7 +1017,7 @@
         if (res.code == 201) return
         this.noNeedCheckDia = false
         this.$message.success('宸叉彁浜�')
-        this.goBack()
+        this.closeOpenPage()
       }).catch(e=>{
         this.noNeedCheckLoad = false
       })
@@ -1069,7 +1069,7 @@
         if (res.code == 201) return
         this.$message.success('宸叉彁浜�')
         this.bsm3Dia = false;
-        this.goBack()
+        this.closeOpenPage()
       }).catch(e=>{
         this.saveLoad = false
       })
@@ -1832,8 +1832,16 @@
       return row[property] === value;
     },
     goBack () {
+      if (this.active == 1) {
+        this.$router.go(-1)
+      } else {
+        this.closeOpenPage()
+      }
+    },
+    closeOpenPage() {
       this.$router.go(-1)
-    }
+      this.$tab.closeOpenPage()
+    },
   }
 }
 </script>
diff --git a/src/views/business/productOrder/components/add.vue b/src/views/business/productOrder/components/add.vue
index 93e2d2c..d3e19c0 100644
--- a/src/views/business/productOrder/components/add.vue
+++ b/src/views/business/productOrder/components/add.vue
@@ -50,10 +50,10 @@
             </el-select>
           </el-form-item>
           <el-form-item label="鍒跺崟浜�:">
-            <el-input v-model="addObj.custom" disabled size="small"></el-input>
+            <el-input v-model="addObj.custom" disabled size="small" clearable></el-input>
           </el-form-item>
           <el-form-item label="濮旀墭鍗曚綅:" prop="company">
-            <el-input v-model="addObj.company" disabled placeholder="閫夋嫨濮旀墭鍗曚綅" size="small" style="width: 200px">
+            <el-input v-model="addObj.company" disabled placeholder="閫夋嫨濮旀墭鍗曚綅" size="small" style="width: 208px">
               <template slot="append">
                 <el-button slot="append" :disabled="active>1&&tabIndex!=4" icon="el-icon-search"
                            @click="openCompanyList"></el-button>
@@ -69,14 +69,14 @@
             </el-select>
           </el-form-item>
           <el-form-item label="鏍峰搧鍚嶇О:" prop="sample">
-            <el-input v-model="addObj.sample" disabled size="small" style="width: 178px">
+            <el-input v-model="addObj.sample" disabled size="small" style="width: 208px">
               <template slot="append"><el-button slot="append" :disabled="active>1&&tabIndex!=4" icon="el-icon-search"
                                                  @click="selectStandardTree = true"></el-button></template>
             </el-input>
           </el-form-item>
-          <el-form-item label="鏍峰搧鏁伴噺:" prop="sampleNum">
+          <el-form-item label="鏍峰搧鏁伴噺:" prop="sampleNum" style="margin-right: 0">
             <el-input-number v-model="addObj.sampleNum" :disabled="active>1" :max="100" :min="1" :precision="0"
-                             size="small" style="width: 65%;" @change="addStandardTree"></el-input-number>
+                             size="small" @change="addStandardTree"></el-input-number>
           </el-form-item>
           <el-form-item label="鏍峰搧鐘舵��:" prop="sampleStatus">
             <el-select v-model="addObj.sampleStatus" :disabled="active>1&&tabIndex!=4" size="small">
@@ -87,21 +87,9 @@
             <el-input v-model="addObj.testQuantity" :disabled="active>1&&tabIndex!=4" clearable size="small"></el-input>
           </el-form-item>
           <el-form-item label="鏉ユ牱鏂瑰紡:" prop="formType">
-            <el-select v-model="addObj.formType" :disabled="active>1&&tabIndex!=4" size="small">
+            <el-select v-model="addObj.formType" :disabled="active>1&&tabIndex!=4" size="small" clearable>
               <el-option v-for="(a,ai) in dict.type.form_type" :key="ai" :label="a.label" :value="a.value"></el-option>
             </el-select>
-          </el-form-item>
-          <el-form-item label="鎶ュ憡鍙戦�佹柟寮�:">
-            <el-radio-group v-model="addObj.send" :disabled="active>1&&tabIndex!=4">
-              <el-radio :label="1">鑷彇</el-radio>
-              <el-radio :label="0">鍏朵粬</el-radio>
-            </el-radio-group>
-          </el-form-item>
-          <el-form-item label="鏍峰搧澶勭悊鏂瑰紡:">
-            <el-radio-group v-model="addObj.processing" :disabled="active>1&&tabIndex!=4">
-              <el-radio :label="0">濮旀墭鍗曚綅鍙栧洖</el-radio>
-              <el-radio :label="1">瀹為獙瀹ゅ鐞�</el-radio>
-            </el-radio-group>
           </el-form-item>
           <el-form-item label="鐢熶骇鍗曚綅:" prop="production">
             <el-input v-model="addObj.production" :disabled="active>1&&tabIndex!=4" clearable placeholder="璇疯緭鍏�"
@@ -111,10 +99,22 @@
             <el-input v-model="addObj.productionEn" :disabled="active>1&&tabIndex!=4" clearable placeholder="璇疯緭鍏�"
                       size="small"></el-input>
           </el-form-item>
+          <el-form-item label="鏍峰搧澶勭悊鏂瑰紡:">
+            <el-radio-group v-model="addObj.processing" :disabled="active>1&&tabIndex!=4" size="mini">
+              <el-radio :label="0" border style="margin-right: 0">濮旀墭鍗曚綅鍙栧洖</el-radio>
+              <el-radio :label="1" border>瀹為獙瀹ゅ鐞�</el-radio>
+            </el-radio-group>
+          </el-form-item>
           <el-form-item label="鏄惁鐣欐牱:">
-            <el-radio-group v-model="addObj.isLeave" :disabled="active>1&&tabIndex!=4">
-              <el-radio :label="0">涓嶇暀鏍�</el-radio>
-              <el-radio :label="1">鐣欐牱</el-radio>
+            <el-radio-group v-model="addObj.isLeave" border :disabled="active>1&&tabIndex!=4" size="mini">
+              <el-radio :label="0" border style="margin-right: 0">涓嶇暀鏍�</el-radio>
+              <el-radio :label="1" border>鐣欐牱</el-radio>
+            </el-radio-group>
+          </el-form-item>
+          <el-form-item label="鎶ュ憡鍙戦�佹柟寮�:">
+            <el-radio-group v-model="addObj.send" :disabled="active>1&&tabIndex!=4" size="mini">
+              <el-radio :label="1" border style="margin-right: 0">鑷彇</el-radio>
+              <el-radio :label="0" border>鍏朵粬</el-radio>
             </el-radio-group>
           </el-form-item>
           <el-form-item label="濮旀墭浜�:">
@@ -125,7 +125,7 @@
           </el-form-item>
           <el-form-item label="澶囨敞:">
             <el-input v-model="addObj.remark" :autosize="{ minRows: 2, maxRows: 2}" :disabled="active>1&&tabIndex!=4" :placeholder="active>1 ? '' : '璇疯緭鍏�'" clearable
-                      size="small" type="textarea"></el-input>
+                      size="small" style="width: 100%" type="textarea"></el-input>
           </el-form-item>
           <el-form-item label="澶囨敞鑻辨枃:">
             <el-input v-model="addObj.remarkEn" :autosize="{ minRows: 2, maxRows: 2}" :disabled="active>1&&tabIndex!=4" :placeholder="active>1 ? '' : '璇疯緭鍏�'" clearable
@@ -176,10 +176,9 @@
               </el-form-item>
             </el-form>
           </div>
-          <div style="display: flex;align-items: center">
+          <div style="display: flex;align-items: center;margin-bottom: 10px">
             <span style="width: 150px;font-size: 14px;text-align: right;">鐗规畩鏍囧噯锛�</span>
-            <el-input v-model="specialStandardMethod" :disabled="!isSpecial" clearable
-            size="small"></el-input>
+            <el-input v-model="specialStandardMethod" :disabled="!isSpecial" clearable size="small"></el-input>
             <el-button v-show="active==1" size="small" style="margin-left: 10px"
                        type="primary" @click="editSpecial">缂栬緫</el-button>
           </div>
@@ -432,7 +431,7 @@
       </div>
       <span slot="footer" class="dialog-footer">
         <el-row>
-          <el-button @click="issuedDialogVisible=false;goBack">鍙� 娑�</el-button>
+          <el-button @click="issuedDialogVisible=false;closeOpenPage">鍙� 娑�</el-button>
           <el-button :loading="upLoad" type="primary" @click="submitForm2">纭� 瀹�</el-button>
         </el-row>
       </span>
@@ -560,6 +559,7 @@
 import {selectCustomPageList} from "@/api/system/customer";
 
 export default {
+  name: 'Add',
   components: {
     limsTable,
     cableConfig,
@@ -1210,7 +1210,7 @@
             this.saveLoad = false
             this.$message.success('宸叉彁浜�')
             this.bsm3Dia = false;
-            this.goBack()
+            this.closeOpenPage()
           }).catch(e=>{
             this.saveLoad = false
           })
@@ -1220,7 +1220,7 @@
             this.saveLoad = false
             this.$message.success('宸叉彁浜�')
             this.bsm3Dia = false;
-            this.goBack()
+            this.closeOpenPage()
           }).catch(e=>{
             this.saveLoad = false
           })
@@ -1283,7 +1283,7 @@
           this.$message.success('鎻愪氦鎴愬姛')
           this.upLoad = false
           this.issuedDialogVisible = false
-          this.goBack()
+          this.closeOpenPage()
         }).catch(e => {
           this.$message.error('鎻愪氦澶辫触')
           this.upLoad = false
@@ -1921,16 +1921,12 @@
           state: 2,
           id: this.currentId,
           tell: this.tell
-        }, {
-          headers: {
-            'Content-Type': 'application/json'
-          }
         }).then(res => {
           this.noLoading = false;
           this.tell = '';
           this.$message.success('鎻愪氦鎴愬姛')
           this.issuedDialogVisible = false;
-          this.goBack()
+          this.closeOpenPage()
         })
       },
       filterHandler(value, row, column) {
@@ -2143,8 +2139,16 @@
         this.productList0.splice(index,1)
       },
       goBack () {
+        if (this.active == 1) {
+          this.$router.go(-1)
+        } else {
+          this.closeOpenPage()
+        }
+      },
+      closeOpenPage() {
         this.$router.go(-1)
-      }
+        this.$tab.closeOpenPage()
+      },
     }
   }
 </script>
diff --git a/src/views/statisticalCharts/itemInspectionAnalysis/index.vue b/src/views/statisticalCharts/itemInspectionAnalysis/index.vue
new file mode 100644
index 0000000..29616cd
--- /dev/null
+++ b/src/views/statisticalCharts/itemInspectionAnalysis/index.vue
@@ -0,0 +1,535 @@
+<template>
+  <div class="app-container">
+    <div v-if="!isShowDataCom">
+      <el-form ref="entity" size="small" :inline="true">
+        <el-form-item style="width: 16%;">
+          <el-date-picker
+            v-model="datePicker"
+            end-placeholder="缁撴潫鏃ユ湡"
+            format="yyyy-MM-dd"
+            placeholder="閫夋嫨鏃ユ湡"
+            range-separator="鑷�"
+            size="small"
+            start-placeholder="寮�濮嬫棩鏈�"
+            style="width: 100%;"
+            type="daterange"
+            value-format="yyyy-MM-dd">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="鏍峰搧鍚嶇О" prop="sampleName">
+          <el-input v-model="sampleName" clearable placeholder="璇疯緭鍏ユ牱鍝佸悕绉�" size="small"></el-input>
+        </el-form-item>
+        <el-form-item label="鍨嬪彿" prop="modelName">
+          <el-input v-model="modelName" clearable placeholder="璇疯緭鍏ュ瀷鍙�" size="small"></el-input>
+        </el-form-item>
+        <el-form-item label="渚涘簲鍟嗗悕绉�" prop="supplierName">
+          <el-input v-model="supplierName" clearable placeholder="璇疯緭鍏ヤ緵搴斿晢鍚嶇О" size="small"></el-input>
+        </el-form-item>
+        <el-form-item label="妫�楠岄」鍚嶇О" prop="supplierName">
+          <el-select v-model="itemNames" :loading="selectLoading" clearable multiple placeholder="璇烽�夋嫨"
+                     size="small" style="width: 90%;" @focus="getItemList">
+            <el-option
+              v-for="item in itemNamesList"
+              :key="item.value"
+              :label="item.label"
+              :value="item.value">
+            </el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item>
+          <el-button size="small" type="primary" @click="changeData">鏌ヨ</el-button>
+        </el-form-item>
+      </el-form>
+    </div>
+    <div v-if="!isShowDataCom" style="overflow-y: auto;height: calc(100% - 70px);overflow-x: hidden">
+      <el-row>
+        <el-col :span="24">
+          <div class="inspection-card">
+            <div style="display: flex;align-items: center;margin-bottom: 10px;justify-content: space-between;">
+              <div>鍘熸潗鏂欓」妫�鍒嗘瀽鍒楄〃</div>
+              <el-button size="small" type="primary" @click="openShowData">鏌ョ湅鏁版嵁鍒嗘瀽</el-button>
+            </div>
+            <lims-table :tableData="editTableData" :column="editColumn"
+                        height="400" key="tableData" :isSelection="true"
+                        :handleSelectionChange="handleSelectionChange"
+                        :tableLoading="editLoading"></lims-table>
+          </div>
+        </el-col>
+      </el-row>
+      <el-row>
+        <el-col :span="6" style="padding-top: 14px">
+          <div style="display: flex;margin-left: 10px;align-items: center">
+            <span style="width: 100px">鍒嗙粍绫诲瀷锛�</span>
+            <el-select v-model="groupType" clearable placeholder="璇烽�夋嫨"
+                       size="small"
+                       style="width: 90%;" @change="getBarInfo">
+              <el-option
+                v-for="item in groupTypeList"
+                :key="item.value"
+                :label="item.label"
+                :value="item.value">
+              </el-option>
+            </el-select>
+          </div>
+        </el-col>
+      </el-row>
+      <el-row>
+        <el-col :span="24">
+          <div class="inspection-card">
+            <div class="title">妫�楠岄」鏁版嵁瀵规瘮</div>
+            <Echarts ref="chart"
+                     :chartStyle="chartStyle"
+                     :dataset="dataset"
+                     :grid="grid"
+                     :options="echartsOptions"
+                     :series="echartsSeries"
+                     :tooltip="tooltip"
+                     :xAxis="xAxis"
+                     :yAxis="yAxis"
+                     style="height: 40vh;"></Echarts>
+          </div>
+        </el-col>
+      </el-row>
+      <el-row>
+        <el-col :span="24">
+          <div class="inspection-card">
+            <div class="title">鍘熸潗鏂欓」妫�鍚堟牸鐜�</div>
+            <Echarts ref="chart"
+                     :chartStyle="chartStyle"
+                     :dataset="dataset1"
+                     :grid="grid"
+                     :options="echartsOptions1"
+                     :series="echartsSeries1"
+                     :tooltip="tooltip"
+                     :xAxis="xAxis"
+                     :yAxis="yAxis1"
+                     style="height: 40vh;"></Echarts>
+          </div>
+        </el-col>
+      </el-row>
+    </div>
+    <el-dialog :visible.sync="dataDialogVisible" title="鏁版嵁鏌ョ湅" width="80%">
+      <div v-if="dataDialogVisible" style="height: 70vh;overflow-y: auto;">
+        <lims-table :tableData="tableData" :column="column"
+                    @pagination="pagination" key="tableData"
+                    :page="page" :tableLoading="tableLoading"></lims-table>
+      </div>
+    </el-dialog>
+    <DataComparison v-if="isShowDataCom" :comparisonData="comparisonData"
+                    :selectRow="selectRow" @goBack="goBack"></DataComparison>
+  </div>
+</template>
+
+<script>
+import Echarts from "@/components/echarts/echarts.vue";
+import DataComparison from '@/components/echarts/DataComparison.vue'
+import limsTable from "@/components/Table/lims-table.vue";
+import {
+  getRawItemNames,
+  getRawProductAnalysis,
+  getRawProductAnalysisAllList,
+  getRawProductAnalysisRawPass, getRawSupplierCompare
+} from "@/api/statisticalCharts/dataAnalysis";
+import {selectSampleAndProductByOrderId} from "@/api/business/rawMaterialOrder";
+
+export default {
+  name: "ItemInspectionAnalysis",
+  // import 寮曞叆鐨勭粍浠堕渶瑕佹敞鍏ュ埌瀵硅薄涓墠鑳戒娇鐢�
+  components: {limsTable, Echarts, DataComparison},
+  data() {
+    // 杩欓噷瀛樻斁鏁版嵁
+    return {
+      selectChangeRows: [], // 閫変腑鐨勬暟鎹�
+      groupTypeList: [
+        {label: '鏍峰搧', value: '0'},
+        {label: '鍚屼竴鍘傚, 鍚屼竴鍨嬪彿, 涓嶅悓鎵规', value: '1'},
+        {label: '鍚屼竴鍨嬪彿, 涓嶅悓鍘傚', value: '2'},
+      ],
+      itemNames: [], // 妫�楠岄」鍚嶇О
+      itemNamesList: [],
+      selectLoading: false,
+      datePicker: [], // 鏃堕棿
+      groupType: '', // 鍒嗙粍
+      beginDate: '',
+      endDate: '',
+      sampleName: '', // 鏍峰搧鍚嶇О
+      modelName: '', // 鍨嬪彿
+      supplierName: '', // 渚涘簲鍟嗗悕绉�
+      grid: {
+        left: '3%',
+        right: '4%',
+        bottom: '3%',
+        containLabel: true
+      },
+      echartsOptions: {},
+      echartsOptions1: {},
+      dataset: {
+        dimensions: [],
+        source: [],
+      },
+      dataset1: {
+        dimensions: [],
+        source: [],
+      },
+      xAxis: [{ type: 'category' }],
+      yAxis: [{}],
+      yAxis1: [{
+        axisLabel: {
+          formatter: '{value} %'
+        }
+      }],
+      echartsSeries: [],
+      echartsSeries1: [],
+      tooltip: {},
+      chartStyle: {
+        width: '100%',
+        height: '96%' // 璁剧疆鍥捐〃瀹瑰櫒鐨勯珮搴�
+      },
+      editColumn: [
+        {
+          label: '鎵瑰彿',
+          minWidth: '120px',
+          prop: 'updateBatchNo'
+        }, {
+          label: '濮旀墭缂栧彿',
+          minWidth: '120px',
+          prop: 'entrustCode'
+        }, {
+          label: '闆朵欢鍙�',
+          minWidth: '120px',
+          prop: 'partNo'
+        }, {
+          label: '闆朵欢鎻忚堪',
+          minWidth: '120px',
+          prop: 'partDesc'
+        }, {
+          label: '渚涘簲鍟嗗悕绉�',
+          minWidth: '120px',
+          prop: 'supplierName',
+        }, {
+          dataType: 'tag',
+          label: '妫�楠岀姸鎬�',
+          prop: 'inspectStatus',
+          minWidth: '120px',
+          formatData: (params) => {
+            if (params == 0) {
+              return '妫�楠屼腑'
+            } else if (params == 1) {
+              return '鍚堟牸'
+            } else if (params == 2) {
+              return '涓嶅悎鏍�'
+            } else if (params == 3) {
+              return '鏈笅鍗�'
+            } else if (params == 4) {
+              return '璁╂鏀捐'
+            }
+          },
+          formatType: (params) => {
+            if (params == 1 || params == 4) {
+              return 'success'
+            } else if (params == 3) {
+              return 'warning'
+            } else if (params == 0 || params == 2) {
+              return 'danger'
+            }
+          }
+        }, {
+          label: '鏍峰搧鍚嶇О',
+          minWidth: '300px',
+          prop: 'sampleName'
+        }, {
+          label: '鏍峰搧鍨嬪彿',
+          minWidth: '300px',
+          prop: 'sampleModel'
+        },{
+          label: '涓嬪彂鏃堕棿',
+          minWidth: '120px',
+          prop: 'sendTime'
+        },{
+          label: '鎶佃揪鐨勯噰璐暟閲�',
+          minWidth: '130px',
+          prop: 'qtyArrived'
+        },{
+          label: '鍗曚綅',
+          minWidth: '120px',
+          prop: 'buyUnitMeas'
+        },
+        {
+          dataType: 'action',
+          width: '80px',
+          label: '鎿嶄綔',
+          fixed: 'right',
+          operation: [
+            {
+              name: '鏁版嵁鏌ョ湅',
+              type: 'text',
+              clickFun: (row) => {
+                this.handleDataLook(row);
+              },
+            },
+          ]
+        }
+      ],
+      editTableData: [],
+      editLoading: false,
+      dataDialogVisible: false,
+      tableData: [],
+      tableLoading: false,
+      column: [
+        {label: '鏍峰搧缂栧彿', prop: 'sampleCode'},
+        {label: '鏍峰搧鍚嶇О', prop: 'sample'},
+        {label: '妫�楠岄」鍒嗙被', prop: 'inspectionItemClass'},
+        {label: '妫�楠岄」', prop: 'inspectionItem'},
+        {label: '妫�楠屽瓙椤�', prop: 'inspectionItemSubclass'},
+        {label: '鍗曚綅', prop: 'unit'},
+        {label: '鏍峰搧鍨嬪彿', prop: 'model'},
+        {label: '鏉′欢', prop: 'radius'},
+        {label: '鐢电紗鏍囪瘑', prop: 'cableTag'},
+        {label: '璇曢獙瑕佹眰', prop: 'tell'},
+        {label: '妫�楠岀粨鏋�', prop: 'lastValue'},
+        {
+          dataType: 'tag',
+          label: '缁撴灉鍒ゅ畾',
+          prop: 'insResult',
+          formatData: (params) => {
+            if (params == 1) {
+              return '鍚堟牸'
+            } else if (params == 0) {
+              return '涓嶅悎鏍�'
+            } else if (params == 3) {
+              return '涓嶅垽瀹�'
+            } else {
+              return null
+            }
+          },
+          formatType: (params) => {
+            if (params == 1) {
+              return 'success'
+            } else if (params == 0) {
+              return 'danger'
+            } else if (params == 3) {
+              return ''
+            }  else {
+              return null
+            }
+          }
+        }
+      ],
+      page: {
+        total:0,
+        size:10,
+        current:1
+      },
+      currentRow: {},
+      isShowDataCom: false,
+      comparisonData: {},
+      selectRow: {},
+    }
+  },
+  mounted() {
+    // this.getBar()
+  },
+  // 鏂规硶闆嗗悎
+  methods: {
+    getBarInfo (val) {
+      if (val === '1') {
+        if (!this.modelName || !this.supplierName) {
+          this.$message.warning('鍨嬪彿鎴栦緵搴斿晢涓嶈兘涓虹┖')
+          this.groupType = ''
+          return
+        }
+      } else if (val === '2') {
+        if (!this.modelName) {
+          this.$message.warning('鍨嬪彿涓嶈兘涓虹┖')
+          this.groupType = ''
+          return
+        }
+        if (this.supplierName) {
+          this.$message.warning('涓嶅彲閫変緵搴斿晢鍚嶇О')
+          this.groupType = ''
+          return
+        }
+      }
+      this.getBar()
+      this.getBar1()
+    },
+    // 鑾峰彇鍚堟牸鐜囧浘琛ㄦ暟鎹�
+    getBar() {
+      this.echartsSeries = []
+      const params = {
+        beginDate: this.beginDate,
+        endDate: this.endDate,
+        sampleName: this.sampleName,
+        modelName: this.modelName,
+        supplierName: this.supplierName,
+        itemNames: this.itemNames,
+        groupType: this.groupType,
+      }
+      getRawProductAnalysis(params).then((res) => {
+        if (res.data === null) {
+          this.$message.warning('鏆傛棤鏁版嵁')
+          return
+        }
+        for (let i = 0; i < res.data.itemNames.length; i++) {
+          this.echartsSeries.push({type: 'line', label: {
+              show: true,
+              position: 'top'
+            },})
+        }
+        this.dataset.dimensions = this.HaveJson(res.data.itemNames)
+        this.dataset.dimensions.unshift('product')
+        this.dataset.source = this.HaveJson(res.data.productList)
+
+      })
+    },
+    getBar1() {
+      this.echartsSeries1 = []
+      const params = {
+        beginDate: this.beginDate,
+        endDate: this.endDate,
+        sampleName: this.sampleName,
+        modelName: this.modelName,
+        supplierName: this.supplierName,
+        itemNames: this.itemNames,
+        groupType: this.groupType,
+      }
+      getRawProductAnalysisRawPass(params).then((res) => {
+        if (res.data === null) {
+          this.$message.warning('鏆傛棤鏁版嵁')
+          return
+        }
+        for (let i = 0; i < res.data.itemNames.length; i++) {
+          this.echartsSeries1.push({type: 'line',tooltip: {
+              valueFormatter: function (value) {
+                return value + '%';
+              }
+            },label: {
+              show: true,
+              position: 'top',
+              formatter: (params) => params.value[params.dimensionNames[params.encode.y[0]]] + '%'
+            },})
+        }
+        this.dataset1.dimensions = this.HaveJson(res.data.itemNames)
+        this.dataset1.dimensions.unshift('product')
+        this.dataset1.source = this.HaveJson(res.data.productList)
+
+      })
+    },
+    // 鏁版嵁鏌ョ湅
+    handleDataLook(row) {
+      this.dataDialogVisible = true;
+      this.currentRow = row
+      this.refreshTable(row)
+    },
+    // 鏌ヨ鍥炶皟
+    refreshTable(row) {
+      selectSampleAndProductByOrderId({id: row.id}).then(res => {
+        this.tableLoading = false
+        if (res.code === 200) {
+          this.tableData = res.data.records
+          this.page.total = res.data.total
+        }
+      }).catch(err => {
+        this.tableLoading = false
+      })
+    },
+    pagination (page) {
+      this.page.size = page.limit
+      this.refreshTable(this.currentRow)
+    },
+    changeData () {
+      if (this.datePicker !== null && this.datePicker.length > 0) {
+        this.beginDate = this.datePicker[0] + ' 00:00:00'
+        this.endDate = this.datePicker[1] + ' 23:59:59'
+      } else {
+        this.beginDate = ''
+        this.endDate = ''
+      }
+      this.getBar()
+      this.getBar1()
+      this.getTableData()
+    },
+    getTableData () {
+      this.editLoading = true
+      const params = {
+        beginDate: this.beginDate,
+        endDate: this.endDate,
+        sampleName: this.sampleName,
+        modelName: this.modelName,
+        supplierName: this.supplierName,
+        itemNames: this.itemNames,
+      }
+      getRawProductAnalysisAllList(params).then(res => {
+        this.editLoading = false
+        this.editTableData = res.data
+      }).catch(() => {
+        this.editLoading = false
+      })
+    },
+    // 鑾峰彇妫�楠岄」涓嬫媺妗�
+    getItemList () {
+      this.selectLoading = true
+      this.itemNamesList = []
+      const params = {
+        beginDate: this.beginDate,
+        endDate: this.endDate,
+        sampleName: this.sampleName,
+        modelName: this.modelName,
+        supplierName: this.supplierName,
+      }
+      getRawItemNames(params).then((res) => {
+        this.selectLoading = false
+        res.data.map(val => {
+          const obj = Object.assign({
+            label: val,
+            value: val,
+          })
+          this.itemNamesList.push(obj)
+        })
+      }).catch(() => {
+        this.selectLoading = false
+      })
+    },
+    goBack () {
+      this.isShowDataCom = false
+    },
+    openShowData () {
+      if (this.selectChangeRows.length !== 5) {
+        this.$message.warning('璇烽�夋嫨5鏉℃暟鎹�')
+        return
+      }
+      if (this.itemNames.length !== 1) {
+        this.$message.warning('鍙兘閫夋嫨1椤规楠岄」鍚嶇О')
+        return
+      }
+      let ids = []
+      let itemNames = []
+      this.selectChangeRows.forEach(item => {
+        ids.push(item.enterOrderId)
+      })
+      this.itemNames.forEach(item => {
+        itemNames.push(item)
+      })
+      const params = {
+        orderIds: ids,
+        itemNames: itemNames
+      }
+      getRawSupplierCompare(params).then(res => {
+        this.comparisonData = res.data
+        this.selectRow = params
+        this.isShowDataCom = true
+      })
+    },
+    handleSelectionChange (val) {
+      this.selectChangeRows = val
+    },
+  },
+}
+</script>
+
+<style scoped>
+.inspection-card{
+  width: 100%;
+  margin-top: 10px;
+}
+</style>
diff --git a/src/views/statisticalCharts/qualificationRateStatistics/index.vue b/src/views/statisticalCharts/qualificationRateStatistics/index.vue
new file mode 100644
index 0000000..4e8ae3c
--- /dev/null
+++ b/src/views/statisticalCharts/qualificationRateStatistics/index.vue
@@ -0,0 +1,448 @@
+<template>
+  <div class="app-container">
+    <el-row>
+      <el-col :span="4">
+        <el-radio-group v-model="dateType" @change="changeDate">
+          <el-radio-button label="1">鏈懆</el-radio-button>
+          <el-radio-button label="2">鏈湀</el-radio-button>
+          <el-radio-button label="3">浠婂勾</el-radio-button>
+        </el-radio-group>
+      </el-col>
+      <el-col :span="20">
+        <el-form ref="entity" size="small" :inline="true">
+          <el-form-item style="width: 20%;">
+            <el-date-picker
+              v-model="datePicker"
+              end-placeholder="缁撴潫鏃ユ湡"
+              format="yyyy-MM-dd"
+              placeholder="閫夋嫨鏃ユ湡"
+              range-separator="鑷�"
+              size="small"
+              start-placeholder="寮�濮嬫棩鏈�"
+              type="daterange"
+              style="width: 100%;"
+              value-format="yyyy-MM-dd"
+              @change="changeDatePicker">
+            </el-date-picker>
+          </el-form-item>
+          <el-form-item label="鏍峰搧鍚嶇О" prop="sampleName">
+            <el-input v-model="sampleName" clearable placeholder="璇疯緭鍏ユ牱鍝佸悕绉�" size="small" @change="changeDate"></el-input>
+          </el-form-item>
+          <el-form-item label="鍨嬪彿" prop="modelName">
+            <el-input v-model="modelName" clearable placeholder="璇疯緭鍏ュ瀷鍙�" size="small" @change="changeDate"></el-input>
+          </el-form-item>
+          <el-form-item label="渚涘簲鍟嗗悕绉�" prop="supplierName">
+            <el-input v-model="supplierName" clearable placeholder="璇疯緭鍏ヤ緵搴斿晢鍚嶇О" size="small" @change="changeDate"></el-input>
+          </el-form-item>
+        </el-form>
+      </el-col>
+    </el-row>
+    <el-row :gutter="20">
+      <el-col :span="8">
+        <div class="pie-card">
+          <div class="title">鍘熸潗鏂欏悎鏍肩巼</div>
+          <span class="data">{{passRate}}</span>
+          <Echarts ref="chart"
+                   :legend="pieLegend"
+                   :series="materialPieSeries"
+                   :tooltip="pieTooltip"
+                   style="height: 36vh;"></Echarts>
+        </div>
+      </el-col>
+      <el-col :span="8">
+        <div class="pie-card">
+          <div class="title"><span style="color: #F56C6C">鏈湀</span>妫�楠岀被鍨嬫暟閲�</div>
+          <Echarts ref="chart"
+                   :chartStyle="chartStyle2"
+                   :legend="pieLegend"
+                   :series="materialPieSeries1"
+                   :tooltip="pieTooltip"
+                   style="height: 36vh;"></Echarts>
+        </div>
+      </el-col>
+      <el-col :span="8">
+        <div class="pie-card">
+          <div class="title">鍘熸潗鏂�<span style="color: #F56C6C">鏈湀</span>涓�<span style="color: #F56C6C">涓婃湀</span>鍚堟牸鐜囧姣�</div>
+          <Echarts ref="chart"
+                   :barColors="barColors2"
+                   :chartStyle="chartStyle"
+                   :grid="grid"
+                   :legend="barLegend"
+                   :series="barSeries"
+                   :tooltip="tooltip"
+                   :xAxis="xAxis1"
+                   :yAxis="yAxis1"
+                   style="height: 36vh;"></Echarts>
+        </div>
+      </el-col>
+    </el-row>
+    <el-row>
+      <el-col :span="24">
+        <div class="inspection-card">
+          <div class="title">鍚堟牸鐜�</div>
+          <Echarts ref="chart"
+                   :barColors="barColors"
+                   :grid="grid"
+                   :legend="legend"
+                   :lineColors="lineColors"
+                   :options="echartsOptions"
+                   :series="echartsSeries"
+                   :tooltip="tooltip"
+                   :xAxis="xAxis"
+                   :yAxis="yAxis"
+                   style="height: 40vh;"></Echarts>
+        </div>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import Echarts from "@/components/echarts/echarts.vue";
+import {
+  getOrderTypeCookie,
+  getRawPassRateByBarChart,
+  getRawPassRateByCake,
+  getRawUpMonth
+} from "@/api/statisticalCharts/dataAnalysis";
+
+export default {
+  name: "QualificationRateStatistics",
+  // import 寮曞叆鐨勭粍浠堕渶瑕佹敞鍏ュ埌瀵硅薄涓墠鑳戒娇鐢�
+  components: {Echarts},
+  data() {
+    // 杩欓噷瀛樻斁鏁版嵁
+    return {
+      dateType: '1',
+      datePicker: [],
+      beginDate: '',
+      endDate: '',
+      sampleName: '',
+      modelName: '',
+      supplierName: '',
+      echartsOptions: {
+        title: {
+          text: '绀轰緥鍥捐〃',
+          left: 'center'
+        }
+      },
+      xAxis: [
+        {
+          type: 'category',
+          data: [],
+          axisPointer: {
+            type: 'shadow'
+          }
+        }
+      ],
+      yAxis: [
+        {
+          type: 'value',
+          name: '鎬绘暟',
+          min: 0,
+        },
+        {
+          type: 'value',
+          name: '鍚堟牸鐜�',
+          min: 0,
+          max: 100,
+          axisLabel: {
+            formatter: '{value} %'
+          }
+        }
+      ],
+      echartsSeries: [
+        {
+          name: '鎬绘暟',
+          type: 'bar',
+          data: [],
+          label: {
+            show: true,
+            position: 'top'
+          },
+        },
+        {
+          name: '鍚堟牸鐜�',
+          type: 'line',
+          smooth: true,
+          tooltip: {
+            valueFormatter: function (value) {
+              return value + ' %';
+            }
+          },
+          label: {
+            show: true,
+            position: 'top',
+            formatter: function (value) {
+              return value.value + ' %';
+            },
+            distance: 14
+          },
+          yAxisIndex: 1,
+          data: []
+        },
+      ],
+      grid: {
+        left: '3%',
+        right: '4%',
+        bottom: '3%',
+        containLabel: true
+      },
+      legend: {
+        data: ['鎬绘暟','鍚堟牸鐜�']
+      },
+      tooltip: {
+        trigger: 'axis',
+        axisPointer: {
+          type: 'shadow'
+        }
+      },
+      lineColors: ['#409EFF'],
+      barColors: ['#E6A23C'],
+      barColors2: ['#adde8b'],
+      pieTooltip: {
+        trigger: 'item'
+      },
+      pieLegend: {
+        orient: 'vertical',
+        right: 20,
+        top: 'middle',
+      },
+      materialPieSeries: [
+        {
+          name: 'Access From',
+          type: 'pie',
+          radius: ['40%', '70%'],
+          right: '22%',
+          avoidLabelOverlap: false,
+          itemStyle: {
+            borderRadius: 5,
+            borderColor: '#fff',
+            borderWidth: 2
+          },
+          label: {
+            alignTo: 'edge',
+            formatter: '{name|{b}}\n{time|{c}}',
+            edgeDistance: 10,
+            lineHeight: 15,
+            rich: {
+              time: {
+                fontSize: 10,
+                color: '#999'
+              }
+            },
+          },
+          labelLine: {
+            length: 20,
+            length2: 40,
+          },
+          data: [
+            { value: 0, name: '涓嶅悎鏍兼暟閲�' },
+            { value: 0, name: '鍚堟牸鏁伴噺' },
+          ]
+        }
+      ],
+      materialPieSeries1: [
+        {
+          name: 'Access From',
+          type: 'pie',
+          radius: ['40%', '70%'],
+          right: '22%',
+          avoidLabelOverlap: false,
+          itemStyle: {
+            borderRadius: 5,
+            borderColor: '#fff',
+            borderWidth: 2
+          },
+          label: {
+            alignTo: 'edge',
+            formatter: '{name|{b}}\n{time|{c}}',
+            edgeDistance: 10,
+            lineHeight: 15,
+            rich: {
+              time: {
+                fontSize: 10,
+                color: '#999'
+              }
+            },
+          },
+          labelLine: {
+            length: 20,
+            length2: 50,
+          },
+          data: [
+            { value: 0, name: '濮旀墭妫�楠�' },
+            { value: 0, name: '杩涘巶妫�楠�' },
+            { value: 0, name: '瀛e害妫�楠�' },
+            { value: 0, name: '鎶芥牱' },
+          ]
+        }
+      ],
+      barLegend: {},
+      chartStyle: {
+        width: '90%',
+        height: '100%',
+      },
+      chartStyle2: {
+        width: '90%',
+        height: '80%',
+      },
+      xAxis1: [
+        {
+          type: 'value',
+          min: 0,
+          max: 100,
+          axisLabel: {
+            formatter: '{value} %'
+          }
+        }
+      ],
+      yAxis1: [
+        {
+          type: 'category',
+          data: []
+        }
+      ],
+      barSeries: [
+        {
+          type: 'bar',
+          data: [],
+          tooltip: {
+            valueFormatter: function (value) {
+              return value + ' %';
+            }
+          },
+          label: {
+            show: true,
+            formatter: (params) => Math.round(params.value * 100) / 100 + '%'
+          }
+        },
+      ],
+      tableData: [],
+      passRate: '',
+      sum: '',
+    }
+  },
+  mounted() {
+    this.getBar()
+    this.getRawPass()
+    this.getOrderType()
+    this.getPassRateCom()
+  },
+  // 鏂规硶闆嗗悎
+  methods: {
+    // 鑾峰彇鍚堟牸鐜囧浘琛ㄦ暟鎹�
+    getBar() {
+      const params = {
+        dateType: this.dateType,
+        beginDate: this.beginDate,
+        endDate: this.endDate,
+        sampleName: this.sampleName,
+        modelName: this.modelName,
+        supplierName: this.supplierName,
+      }
+      getRawPassRateByBarChart(params).then((res) => {
+        let lineData = []
+        let barData = []
+        let xAxis = []
+        res.data.forEach(item => {
+          barData.push(item.sum)
+          lineData.push(item.passRate)
+          xAxis.push(item.searchTime)
+        })
+        this.echartsSeries[0].data = barData
+        this.echartsSeries[1].data = lineData
+        this.yAxis[0].max = Math.ceil(Math.max.apply(null, barData) / 50) * 50
+        this.yAxis[0].interval = this.yAxis[0].max / 5
+        this.xAxis[0].data = xAxis
+      })
+    },
+    // 鑾峰彇鍘熸潗鏂欏悎鏍肩巼鍥捐〃鏁版嵁
+    getRawPass() {
+      const params = {
+        dateType: this.dateType,
+        beginDate: this.beginDate,
+        endDate: this.endDate,
+        sampleName: this.sampleName,
+        modelName: this.modelName,
+        supplierName: this.supplierName,
+      }
+      getRawPassRateByCake(params).then((res) => {
+        this.materialPieSeries[0].data[0].value = res.data.unQualified
+        this.materialPieSeries[0].data[1].value = res.data.qualified
+        this.passRate = res.data.passRate + '%'
+      })
+    },
+    // 鑾峰彇鏈湀妫�楠岀被鍨嬫暟閲�
+    getOrderType() {
+      getOrderTypeCookie().then((res) => {
+        if (res.code === 201) return
+        this.materialPieSeries1[0].data[0].value = res.data.customer // 濮旀墭
+        this.materialPieSeries1[0].data[1].value = res.data.enter // 杩涘巶
+        this.materialPieSeries1[0].data[2].value = res.data.quarterly // 瀛e害
+        this.materialPieSeries1[0].data[3].value = res.data.spotCheck // 鎶芥牱
+      })
+    },
+    // 鏈湀涓庝笂鏈堝悎鏍肩巼瀵规瘮
+    getPassRateCom() {
+      getRawUpMonth().then((res) => {
+        let month = []
+        let barData = []
+        res.data.forEach(item => {
+          month.push(item.month)
+          barData.push(item.passRate)
+        })
+        this.yAxis1[0].data = month
+        this.barSeries[0].data = barData
+      })
+    },
+    changeDate () {
+      this.getBar()
+      this.getRawPass()
+      // this.getOrderType()
+      // this.getPassRateCom()
+    },
+    changeDatePicker (val) {
+      if (val) {
+        this.beginDate = val[0] + ' 00:00:00'
+        this.endDate = val[1] + ' 23:59:59'
+      } else {
+        this.beginDate = ''
+        this.endDate = ''
+      }
+      this.getBar()
+      this.getRawPass()
+      // this.getOrderType()
+      // this.getPassRateCom()
+    },
+  },
+}
+</script>
+
+<style scoped>
+.title {
+  padding: 10px 0 0 20px;
+}
+.table {
+  padding: 0 10px 10px;
+}
+.pie-card {
+  width: 100%;
+  background: #FFFFFF;
+  margin-top: 10px;
+  position: relative;
+}
+.data {
+  position: absolute;
+  font-size: 20px;
+  transform: translate(-50%);
+  left: 40%;
+  top: 42%;
+  z-index: 1;
+}
+.inspection-card{
+  width: 100%;
+  background: #FFFFFF;
+  margin-top: 10px;
+}
+</style>
diff --git a/src/views/structural/capabilityAndLaboratory/capability/index.vue b/src/views/structural/capabilityAndLaboratory/capability/index.vue
index 1bb6202..11d2981 100644
--- a/src/views/structural/capabilityAndLaboratory/capability/index.vue
+++ b/src/views/structural/capabilityAndLaboratory/capability/index.vue
@@ -385,8 +385,8 @@
       this.$refs.upload.clearFiles()
       this.uploadDia = false
       this.uploading = false
-      if (response.code === 201) {
-        this.$message.error(response.message)
+      if (response.code !== 200) {
+        this.$message.error(response.msg)
         return
       }
       this.$message.success('涓婁紶鎴愬姛')

--
Gitblit v1.9.3