| | |
| | | <template> |
| | | <div class="content-main"> |
| | | <div class="top-bar"> |
| | | <el-form ref="form" :inline="true" :rules="rules" :model="searchData" label-position="top"> |
| | | <el-form |
| | | ref="form" |
| | | :inline="true" |
| | | :rules="rules" |
| | | :model="searchData" |
| | | label-position="top" |
| | | > |
| | | <el-form-item label="æ£æµæ¥æ:" class="sermargin" prop="date"> |
| | | <el-date-picker v-model="searchData.date" type="daterange" range-separator="è³" start-placeholder="å¼å§æ¥æ" |
| | | end-placeholder="ç»ææ¥æ"> |
| | | <el-date-picker |
| | | v-model="searchData.date" |
| | | type="daterange" |
| | | range-separator="è³" |
| | | start-placeholder="å¼å§æ¥æ" |
| | | end-placeholder="ç»ææ¥æ" |
| | | > |
| | | </el-date-picker> |
| | | </el-form-item> |
| | | <el-form-item label="æ£éªç±»å:" class="sermargin" prop="type"> |
| | | <el-select v-model="searchData.type" placeholder="å
¨é¨"> |
| | | <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value"> |
| | | <el-option |
| | | v-for="item in options" |
| | | :key="item.value" |
| | | :label="item.label" |
| | | :value="item.value" |
| | | > |
| | | </el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="ä¾åºå:"> |
| | | <el-select v-model="searchData.supplier" placeholder="å
¨é¨"> |
| | | <el-option v-for="item in supplier" :key="item.value" :label="item.label" :value="item.value"> |
| | | <el-option |
| | | v-for="item in supplier" |
| | | :key="item.value" |
| | | :label="item.label" |
| | | :value="item.value" |
| | | > |
| | | </el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item style="margin-left: 40px;" label="æ ·å:"> |
| | | <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"> |
| | | <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> |
| | | <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> |
| | | <el-button type="primary" @click="search" size="mini">æ¥è¯¢</el-button> |
| | | <el-button type="primary" @click="search" size="mini" |
| | | >æ¥è¯¢</el-button |
| | | > |
| | | </el-form-item> |
| | | </div> |
| | | </el-form> |
| | |
| | | <div class="top-bar-copy"></div> |
| | | <div class="chart-content"> |
| | | <div class="qualified-wrapper"> |
| | | <div style="margin-left: 20px;padding:20px 0px;font-size:18px">æ£æµæ ·ååæ ¼çç»è®¡</div> |
| | | <div style="margin-left: 20px; padding: 20px 0px; font-size: 18px"> |
| | | æ£æµæ ·ååæ ¼çç»è®¡ |
| | | </div> |
| | | <div :hidden="testSample" class="qualified" ref="qualified"></div> |
| | | <div :hidden="!testSample" style="height: 100%;text-align: center; color: #999696df; margin-top: 100px;">ææ æ°æ® |
| | | <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 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 |
| | | :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"> |
| | | <div style="font-size:18px">ä¸åæ ¼é¡¹ç®ç»è®¡</div> |
| | | <div style="font-size: 18px">ä¸åæ ¼é¡¹ç®ç»è®¡</div> |
| | | <el-radio-group v-model="type"> |
| | | <el-radio-button v-for="item in radiooptions" :key="item.value" :label="item.value">{{ item.label |
| | | }}</el-radio-button> |
| | | <el-radio-button |
| | | v-for="item in radiooptions" |
| | | :key="item.value" |
| | | :label="item.value" |
| | | >{{ item.label }}</el-radio-button |
| | | > |
| | | </el-radio-group> |
| | | </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 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> |
| | |
| | | |
| | | <script> |
| | | // æ·»å æ»å¨çå¬äºä»¶ |
| | | window.addEventListener('scroll', function () { |
| | | var topBar = document.querySelector('.top-bar'); |
| | | window.addEventListener("scroll", function () { |
| | | var topBar = document.querySelector(".top-bar"); |
| | | var scrollTop = window.pageYOffset || document.documentElement.scrollTop; |
| | | |
| | | if (scrollTop > 0) { |
| | | topBar.classList.add('fixed'); |
| | | topBar.classList.add("fixed"); |
| | | } else { |
| | | topBar.classList.remove('fixed'); |
| | | topBar.classList.remove("fixed"); |
| | | } |
| | | }) |
| | | }); |
| | | |
| | | import * as echarts from 'echarts' |
| | | import { getSupplierList, getTestSampleStatistics, getSupplierNoPassStatistics, getNoPassProjectStatistics, getSampleOptions } from '@/api/experiment/passRateStatistics'; |
| | | import { dateFormat } from '../../../utils/dateUtil' |
| | | import MyWorker from 'comlink-loader!../../../worker/test'; |
| | | import * as echarts from "echarts"; |
| | | 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 { |
| | |
| | | type: null, |
| | | supplier: null, |
| | | sample: null, |
| | | code: null |
| | | code: null, |
| | | }, |
| | | options: [ |
| | | { |
| | | label: 'å
¨é¨', |
| | | value: 3 |
| | | label: "å
¨é¨", |
| | | value: 3, |
| | | }, |
| | | { |
| | | label: 'åææ', |
| | | value: 0 |
| | | label: "åææ", |
| | | value: 0, |
| | | }, |
| | | { |
| | | label: 'æå', |
| | | value: 1 |
| | | label: "æå", |
| | | value: 1, |
| | | }, |
| | | { |
| | | label: 'å§æå', |
| | | value: 2 |
| | | } |
| | | label: "å§æå", |
| | | value: 2, |
| | | }, |
| | | ], |
| | | radiooptions: [ |
| | | { |
| | | label: 'ç¯å½¢é¥¼å¾', |
| | | value: 0 |
| | | label: "ç¯å½¢é¥¼å¾", |
| | | value: 0, |
| | | }, |
| | | { |
| | | label: 'å¸ç´¯æå¾', |
| | | value: 1 |
| | | } |
| | | label: "å¸ç´¯æå¾", |
| | | value: 1, |
| | | }, |
| | | ], |
| | | type: 0, |
| | | rules: { |
| | |
| | | testSample: false, |
| | | m1: null, |
| | | m2: null, |
| | | m3: null |
| | | } |
| | | m3: null, |
| | | }; |
| | | }, |
| | | async mounted() { |
| | | await this.start() |
| | | this.tableStart() |
| | | await this.start(); |
| | | this.tableStart(); |
| | | }, |
| | | methods: { |
| | | testWork(){ |
| | | testWork() { |
| | | const inst = new MyWorker(); |
| | | inst.test() |
| | | inst.test(); |
| | | for (let index = 0; index < 100; index++) { |
| | | console.log("主线ç¨"+index); |
| | | console.log("主线ç¨" + index); |
| | | } |
| | | }, |
| | | async search() { |
| | | this.testSampleStatistics = null |
| | | this.supplierNoPassStatistics = null |
| | | this.projectStatistics = null |
| | | this.supplier = [] |
| | | this.sampleOptions = [] |
| | | await this.start() |
| | | this.tableStart() |
| | | 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)) |
| | | 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]) |
| | | data.beginDate = dateFormat(this.searchData.date[0]); |
| | | data.endDate = dateFormat(this.searchData.date[1]); |
| | | } |
| | | if (data.supplier == 'å
¨é¨') { |
| | | data.supplier = null |
| | | if (data.supplier == "å
¨é¨") { |
| | | data.supplier = null; |
| | | } |
| | | if (data.type === 3) { |
| | | data.type = null |
| | | 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 |
| | | 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 |
| | | if (data.code == "å
¨é¨") { |
| | | data.code = null; |
| | | data.sample = null; |
| | | } |
| | | data.date = null |
| | | return data |
| | | 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 }) |
| | | }) |
| | | let res = await getSupplierList(); |
| | | this.supplier.push({ label: "å
¨é¨", value: "å
¨é¨" }); |
| | | res.data.forEach((item) => { |
| | | this.supplier.push({ label: item.supplier, value: item.supplier }); |
| | | }); |
| | | }, |
| | | async getTestSampleStatistics() { |
| | | let param = this.dateHandle() |
| | | let res = await getTestSampleStatistics(param) |
| | | this.testSample = !res.data.noData |
| | | this.testSampleStatistics = res.data |
| | | let param = this.dateHandle(); |
| | | let res = await getTestSampleStatistics(param); |
| | | this.testSample = !res.data.noData; |
| | | this.testSampleStatistics = res.data; |
| | | }, |
| | | async getSupplierNoPassStatistics() { |
| | | let param = this.dateHandle() |
| | | let res = await getSupplierNoPassStatistics(param) |
| | | this.supplierData = !res.data.noData |
| | | this.supplierNoPassStatistics = res.data |
| | | 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 |
| | | 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() |
| | | await this.getTestSampleStatistics(); |
| | | await this.getSupplierNoPassStatistics(); |
| | | await this.getNoPassProjectStatistics(); |
| | | await this.getSupplierList(); |
| | | await this.getSampleOptions(); |
| | | }, |
| | | async getSampleOptions() { |
| | | let res = await getSampleOptions() |
| | | let res = await getSampleOptions(); |
| | | this.sampleOptions.push({ |
| | | label: 'å
¨é¨', |
| | | value: 'å
¨é¨' |
| | | }) |
| | | res.data.forEach(item => { |
| | | label: "å
¨é¨", |
| | | value: "å
¨é¨", |
| | | }); |
| | | res.data.forEach((item) => { |
| | | let data = { |
| | | label: item.name, |
| | | value: item.code |
| | | } |
| | | this.sampleOptions.push(data) |
| | | }) |
| | | value: item.code, |
| | | }; |
| | | this.sampleOptions.push(data); |
| | | }); |
| | | }, |
| | | tableStart() { |
| | | const chartDom_qualified = this.$refs.qualified; |
| | |
| | | |
| | | const myChart1 = echarts.init(chartDom_qualified); |
| | | const myChart2 = echarts.init(chartDom_unqualified_provider, null, { |
| | | height: 300 |
| | | height: 300, |
| | | }); |
| | | |
| | | |
| | | const myChart3 = echarts.init(chartDom_unqualified_project, null, { |
| | | height: 268 |
| | | height: 268, |
| | | }); |
| | | window.addEventListener("resize",function(){ |
| | | myChart1.resize() |
| | | myChart2.resize() |
| | | myChart3.resize() |
| | | }) |
| | | this.m1 = myChart1 |
| | | this.m2 = myChart2 |
| | | this.m3 = myChart3 |
| | | 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' |
| | | } |
| | | trigger: "axis", |
| | | axisPointer: { |
| | | // åæ è½´æç¤ºå¨ï¼åæ è½´è§¦åææ |
| | | type: "shadow", // é»è®¤ä¸ºç´çº¿ï¼å¯é为ï¼'line' | 'shadow' |
| | | }, |
| | | }, |
| | | legend: { |
| | | data: ['åæ ¼', 'ä¸åæ ¼'] |
| | | data: ["åæ ¼", "ä¸åæ ¼"], |
| | | }, |
| | | xAxis: [ |
| | | { |
| | | type: 'category', |
| | | data: this.testSampleStatistics.xAxis |
| | | } |
| | | type: "category", |
| | | data: this.testSampleStatistics.xAxis, |
| | | }, |
| | | ], |
| | | yAxis: [ |
| | | { |
| | | type: 'value', |
| | | type: "value", |
| | | axisLabel: { |
| | | formatter: '{value}' |
| | | } |
| | | } |
| | | formatter: "{value}", |
| | | }, |
| | | }, |
| | | ], |
| | | series: this.testSampleStatistics.series |
| | | series: this.testSampleStatistics.series, |
| | | }; |
| | | /** |
| | | * ä¾åºå |
| | | */ |
| | | const option_unqualified1 = { |
| | | tooltip: { |
| | | trigger: 'axis', |
| | | axisPointer: { // åæ è½´æç¤ºå¨ï¼åæ è½´è§¦åææ |
| | | type: 'shadow' // é»è®¤ä¸ºç´çº¿ï¼å¯é为ï¼'line' | 'shadow' |
| | | trigger: "axis", |
| | | axisPointer: { |
| | | // åæ è½´æç¤ºå¨ï¼åæ è½´è§¦åææ |
| | | type: "shadow", // é»è®¤ä¸ºç´çº¿ï¼å¯é为ï¼'line' | 'shadow' |
| | | }, |
| | | formatter: function (params) { |
| | | let tooltip = params[0].name + '<br/>'; |
| | | let tooltip = params[0].name + "<br/>"; |
| | | params.forEach(function (item) { |
| | | tooltip += item.marker + ' ' + item.seriesName + ': ' + item.value.toFixed(2) + '%<br/>'; // å°æ°æ®ä¿ç两ä½å°æ°å¹¶è½¬ä¸ºç¾åæ¯å½¢å¼ |
| | | tooltip += |
| | | item.marker + |
| | | " " + |
| | | item.seriesName + |
| | | ": " + |
| | | item.value.toFixed(2) + |
| | | "%<br/>"; // å°æ°æ®ä¿ç两ä½å°æ°å¹¶è½¬ä¸ºç¾åæ¯å½¢å¼ |
| | | }); |
| | | return tooltip; |
| | | } |
| | | }, |
| | | }, |
| | | legend: { |
| | | data: ['åæ ¼æ°é', 'ä¸åæ ¼æ°é'] |
| | | data: ["åæ ¼æ°é", "ä¸åæ ¼æ°é"], |
| | | }, |
| | | xAxis: { |
| | | data: this.supplierNoPassStatistics.xAxis |
| | | data: this.supplierNoPassStatistics.xAxis, |
| | | }, |
| | | yAxis: [ |
| | | { |
| | | type: 'value', |
| | | type: "value", |
| | | axisLabel: { |
| | | formatter: '{value}%' |
| | | } |
| | | } |
| | | formatter: "{value}%", |
| | | }, |
| | | }, |
| | | ], |
| | | series: this.supplierNoPassStatistics.series |
| | | series: this.supplierNoPassStatistics.series, |
| | | }; |
| | | /** |
| | | * ä¸åæ ¼é¡¹ç® |
| | | */ |
| | | const option_unqualified2 = { |
| | | legend: { |
| | | orient: 'vertical', |
| | | x: 'left', |
| | | data: this.projectStatistics.legend |
| | | orient: "vertical", |
| | | x: "left", |
| | | data: this.projectStatistics.legend, |
| | | }, |
| | | title: { |
| | | text: '', |
| | | left: 'center', |
| | | top: 'center' |
| | | text: "", |
| | | left: "center", |
| | | top: "center", |
| | | }, |
| | | series: [ |
| | | { |
| | | type: 'pie', |
| | | type: "pie", |
| | | data: this.projectStatistics.series, |
| | | radius: ['40%', '70%'], |
| | | radius: ["40%", "70%"], |
| | | label: { |
| | | show: true, |
| | | formatter: '{b}: {c}%' |
| | | formatter: "{b}: {c}%", |
| | | }, |
| | | } |
| | | ] |
| | | } |
| | | }, |
| | | ], |
| | | }; |
| | | |
| | | myChart1.setOption(option_qualified); |
| | | myChart2.setOption(option_unqualified1); |
| | |
| | | if (this.type === 1) { |
| | | myChart3.setOption(option_unqualified2); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | }, |
| | | }, |
| | | }; |
| | | </script> |
| | | |
| | | <style lang="scss" scoped> |