From a77c8f80470ed47568cbd90d066ebf0a84d302d9 Mon Sep 17 00:00:00 2001 From: gaoluyang <2820782392@qq.com> Date: 星期一, 03 三月 2025 13:38:49 +0800 Subject: [PATCH] 项检分析搬迁 --- src/views/statisticalCharts/itemInspectionAnalysis/index.vue | 535 +++++++++++++++++++++++++++++++++++++++++++++++++++++ src/views/statisticalCharts/qualificationRateStatistics/index.vue | 8 src/api/statisticalCharts/dataAnalysis.js | 44 ++++ 3 files changed, 581 insertions(+), 6 deletions(-) diff --git a/src/api/statisticalCharts/dataAnalysis.js b/src/api/statisticalCharts/dataAnalysis.js index 30a6fc8..0775c06 100644 --- a/src/api/statisticalCharts/dataAnalysis.js +++ b/src/api/statisticalCharts/dataAnalysis.js @@ -18,16 +18,56 @@ }); } //鏈湀妫�楠岀被鍨嬫暟閲� -export function getOrderTypeCookie(query) { +export function getOrderTypeCookie() { return request({ url: "/dataAnalysis/getOrderTypeCookie", method: "get", }); } //鏈湀妫�楠岀被鍨嬫暟閲� -export function getRawUpMonth(query) { +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/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 index 5e7938f..4e8ae3c 100644 --- a/src/views/statisticalCharts/qualificationRateStatistics/index.vue +++ b/src/views/statisticalCharts/qualificationRateStatistics/index.vue @@ -46,7 +46,7 @@ :legend="pieLegend" :series="materialPieSeries" :tooltip="pieTooltip" - style="height: 34vh;"></Echarts> + style="height: 36vh;"></Echarts> </div> </el-col> <el-col :span="8"> @@ -57,7 +57,7 @@ :legend="pieLegend" :series="materialPieSeries1" :tooltip="pieTooltip" - style="height: 34vh;"></Echarts> + style="height: 36vh;"></Echarts> </div> </el-col> <el-col :span="8"> @@ -72,7 +72,7 @@ :tooltip="tooltip" :xAxis="xAxis1" :yAxis="yAxis1" - style="height: 34vh;"></Echarts> + style="height: 36vh;"></Echarts> </div> </el-col> </el-row> @@ -233,7 +233,7 @@ }, }, labelLine: { - length: 30, + length: 20, length2: 40, }, data: [ -- Gitblit v1.9.3