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