From b9f286005ccc5fcc3b9726fce0804aa547f46ce8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=98937886381=E2=80=99?= <‘937886381@qq.com’> Date: Tue, 9 Dec 2025 13:07:09 +0800 Subject: [PATCH] =?UTF-8?q?=E7=94=9F=E4=BA=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .env.dev | 6 +- src/api/base/equipment.js | 31 + src/api/base/equipmentType.js | 2 + src/api/core/monitoring/auto.js | 9 + src/api/monitoring/defectSummary.js | 56 + src/api/monitoring/qualityIsra.js | 63 + src/assets/images/equipmentNum.png | Bin 0 -> 12799 bytes src/assets/images/equipmentNumImg.png | Bin 0 -> 8316 bytes src/assets/images/runNum.png | Bin 0 -> 13409 bytes src/assets/images/runNumImg.png | Bin 0 -> 52305 bytes src/assets/images/stopNum.png | Bin 0 -> 12836 bytes src/assets/images/stopNumImg.png | Bin 0 -> 9364 bytes src/components/DialogForm/index.vue | 148 +- .../components/BasicDrawer.vue | 323 ++--- .../base/materialPricing/add-or-updata.vue | 2 +- .../analysis/balanceAnalysis/eq-detail.vue | 18 +- .../core/analysis/yieldAnalysis/index.vue | 24 +- src/views/core/base/equipment/index.vue | 3 +- src/views/core/base/equipmentType/index.vue | 2 +- src/views/core/base/product/add-or-updata.vue | 13 +- src/views/core/base/product/attr-add.vue | 245 ++-- .../core/monitoring/lineAuto/BarChart.vue | 8 + src/views/core/monitoring/lineAuto/index.vue | 357 ++++- .../core/monitoring/nextClip/hisData.vue | 11 +- src/views/core/monitoring/nextClip/index.vue | 4 +- .../core/monitoring/productAuto/BarChart.vue | 8 + .../core/monitoring/productAuto/index.vue | 468 ++++-- .../core/monitoring/rawFilmReport/index.vue | 601 +++++--- .../monitoring/rawFilmReport/searchBar.vue | 274 ++++ .../equipmentOverview/SmallTitle.vue | 65 + .../equipmentOverview/add-or-updata.vue | 134 ++ .../equipmentOverview/alarm-or-updata.vue | 498 +++++++ .../equipment/equipmentOverview/index.vue | 1252 +++++++++++++++++ src/views/login.vue | 15 +- src/views/quality/dpdda/defectAnalysis.vue | 309 ++++ src/views/quality/dpdda/defectSummary.vue | 560 ++++++++ src/views/quality/dpdda/defectSummaryDet.vue | 224 +++ src/views/quality/dpdda/sectionDefect.vue | 416 ++++++ .../qualityIsra/defectVisualization.vue | 674 +++++++++ src/views/quality/qualityIsra/dialogForm.vue | 270 ++++ src/views/quality/qualityIsra/index.vue | 468 ++++++ src/views/quality/transmittanceTesting.vue | 305 ++++ yarn.lock | 5 + 43 files changed, 7142 insertions(+), 729 deletions(-) create mode 100644 src/api/monitoring/defectSummary.js create mode 100644 src/api/monitoring/qualityIsra.js create mode 100644 src/assets/images/equipmentNum.png create mode 100644 src/assets/images/equipmentNumImg.png create mode 100644 src/assets/images/runNum.png create mode 100644 src/assets/images/runNumImg.png create mode 100644 src/assets/images/stopNum.png create mode 100644 src/assets/images/stopNumImg.png create mode 100644 src/views/core/monitoring/rawFilmReport/searchBar.vue create mode 100644 src/views/equipment/equipmentOverview/SmallTitle.vue create mode 100644 src/views/equipment/equipmentOverview/add-or-updata.vue create mode 100644 src/views/equipment/equipmentOverview/alarm-or-updata.vue create mode 100644 src/views/equipment/equipmentOverview/index.vue create mode 100644 src/views/quality/dpdda/defectAnalysis.vue create mode 100644 src/views/quality/dpdda/defectSummary.vue create mode 100644 src/views/quality/dpdda/defectSummaryDet.vue create mode 100644 src/views/quality/dpdda/sectionDefect.vue create mode 100644 src/views/quality/qualityIsra/defectVisualization.vue create mode 100644 src/views/quality/qualityIsra/dialogForm.vue create mode 100644 src/views/quality/qualityIsra/index.vue create mode 100644 src/views/quality/transmittanceTesting.vue diff --git a/.env.dev b/.env.dev index 912c2eab..e53dd47e 100644 --- a/.env.dev +++ b/.env.dev @@ -12,8 +12,10 @@ ENV = 'development' VUE_APP_TITLE = 智能监控分析系统 # 芋道管理系统/开发环境 -# VUE_APP_BASE_API = 'http://192.168.8.22:48080' -VUE_APP_BASE_API = 'http://172.16.33.65:48082' +# VUE_APP_BASE_API = 'http://172.16.33.187:48082' +# VUE_APP_BASE_API = 'http://line.kszny.picaiba.com' +VUE_APP_BASE_API = 'http://172.16.32.79:48082' + # 路由懒加载 VUE_CLI_BABEL_TRANSPILE_MODULES = true diff --git a/src/api/base/equipment.js b/src/api/base/equipment.js index 8c1b4246..3239772a 100644 --- a/src/api/base/equipment.js +++ b/src/api/base/equipment.js @@ -59,3 +59,34 @@ export function getEquipmentAll() { method: 'get' }) } + +export function getTree(query) { + return request({ + url: '/base/factory/getTree', + method: 'get', + params: query + }) +} + +export function getEquipmentOverall(data) { + return request({ + url: '/monitoring/equipment-overall/get', + method: 'post', + data: data, + }); +} + +export function getParamMonitor(data) { + return request({ + url: '/monitoring/equipment-monitor/paramMonitor', + method: 'post', + data: data, + }); +} +export function getAlarmDet(data) { + return request({ + url: 'monitoring/equipment-overall/alarmDet', + method: 'post', + data: data, + }); +} diff --git a/src/api/base/equipmentType.js b/src/api/base/equipmentType.js index 57e7746a..6309087f 100644 --- a/src/api/base/equipmentType.js +++ b/src/api/base/equipmentType.js @@ -52,3 +52,5 @@ export function exportEquipmentTypeExcel(query) { responseType: 'blob' }) } + + diff --git a/src/api/core/monitoring/auto.js b/src/api/core/monitoring/auto.js index 577209a7..07acbe6e 100644 --- a/src/api/core/monitoring/auto.js +++ b/src/api/core/monitoring/auto.js @@ -50,6 +50,15 @@ export function getPdlAutoReportNewSearchNow(data) { }); } +export function getPdlAutoReportNewSearchLastGroup(data) { + return request({ + url: '/monitoring/production-monitor/getPdlAutoReportNewSearchLastGroup', + method: 'post', + data: data, + timeout: 60000, + }); +} + // 班组自动报表分页 export function getTeamReportPage(data) { diff --git a/src/api/monitoring/defectSummary.js b/src/api/monitoring/defectSummary.js new file mode 100644 index 00000000..b48be963 --- /dev/null +++ b/src/api/monitoring/defectSummary.js @@ -0,0 +1,56 @@ +import request from '@/utils/request' + +// 创建能源监控配置 +export function getDefectSummaryTable(data) { + return request({ + url: '/extend/check-gaozhun-record/defectSummaryTable', + method: 'post', + data: data, + }); +} +export function getTranslucentPage(data) { + return request({ + url: '/monitoring/translucent/page', + method: 'get', + params: data, + }); +} + +export function exportTranslucent(data) { + return request({ + url: '/monitoring/translucent/export-excel', + method: 'get', + params: data, + responseType: 'blob', + }); +} + +export function getDefectAnalysis(data) { + return request({ + url: '/extend/check-gaozhun-record/defectAnalysis', + method: 'post', + data: data, + }); +} + +export function getSectionDefect(data) { + return request({ + url: '/extend/check-gaozhun-record/sectionDefect', + method: 'post', + data: data, + }); +} +export function getDefectSummaryChart(data) { + return request({ + url: '/extend/check-gaozhun-record/defectSummaryChart', + method: 'post', + data: data, + }); +} +export function getDefectSummaryDet(data) { + return request({ + url: '/extend/check-gaozhun-record/defectSummaryDet', + method: 'post', + data: data, + }); +} diff --git a/src/api/monitoring/qualityIsra.js b/src/api/monitoring/qualityIsra.js new file mode 100644 index 00000000..28ec31a0 --- /dev/null +++ b/src/api/monitoring/qualityIsra.js @@ -0,0 +1,63 @@ +/* + * @Author: zhp + * @Date: 2023-12-08 15:26:59 + * @LastEditTime: 2023-12-11 15:21:44 + * @LastEditors: zhp + * @Description: + */ +import request from '@/utils/request' +export function getQualityIsraPage(query) { + return request({ + url: '/extend/check-isra-statistics/getIsraData', + method: 'get', + params: query, + }); +} + +export function getQualityIsraDayMap(query) { + return request({ + url: '/base/quality-isra-statistics/dayMap', + method: 'get', + params: query + }) +} + +export function getQualityIsraWeekMap(query) { + return request({ + url: '/base/quality-isra-statistics/weekMap', + method: 'get', + params: query + }) +} + +export function getQualityIsraMonthMap(query) { + return request({ + url: '/base/quality-isra-statistics/monthMap', + method: 'get', + params: query + }) +} + +export function getQualityIsraDayList(query) { + return request({ + url: '/base/quality-isra-statistics/dayList', + method: 'get', + params: query + }) +} + +export function getQualityIsraWeekList(query) { + return request({ + url: '/base/quality-isra-statistics/weekList', + method: 'get', + params: query + }) +} + +export function getQualityIsraMonthList(query) { + return request({ + url: '/base/quality-isra-statistics/monthList', + method: 'get', + params: query + }) +} diff --git a/src/assets/images/equipmentNum.png b/src/assets/images/equipmentNum.png new file mode 100644 index 0000000000000000000000000000000000000000..530a8f00308f6f86760d2fb5e1ed80a6f0025892 GIT binary patch literal 12799 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 literal 0 HcmV?d00001 diff --git a/src/assets/images/equipmentNumImg.png b/src/assets/images/equipmentNumImg.png new file mode 100644 index 0000000000000000000000000000000000000000..3d38d4b1cfcdc40a34d273016f657419bb39e08c GIT binary patch literal 8316 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 literal 0 HcmV?d00001 diff --git a/src/assets/images/runNumImg.png b/src/assets/images/runNumImg.png new file mode 100644 index 0000000000000000000000000000000000000000..345260d6972c1ef4d176eb094224e2462ba7c5e9 GIT binary patch literal 52305 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 literal 0 HcmV?d00001 diff --git a/src/assets/images/stopNum.png b/src/assets/images/stopNum.png new file mode 100644 index 0000000000000000000000000000000000000000..9ecdefab1c1b63e1e7aa83b484d0abcc22128ef0 GIT binary patch literal 12836 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 P_vH@%&nrKR{QAED{XXix literal 0 HcmV?d00001 diff --git a/src/assets/images/stopNumImg.png b/src/assets/images/stopNumImg.png new file mode 100644 index 0000000000000000000000000000000000000000..903e55d863c104293a8db647e6128c9f978de333 GIT binary patch literal 9364 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 diff --git a/src/views/core/monitoring/lineAuto/BarChart.vue b/src/views/core/monitoring/lineAuto/BarChart.vue index d823cedd..73e7716d 100644 --- a/src/views/core/monitoring/lineAuto/BarChart.vue +++ b/src/views/core/monitoring/lineAuto/BarChart.vue @@ -262,6 +262,14 @@ export default { tooltip: { valueFormatter: (value) => `${value} %`, }, + label: { + show: true, + position: 'top', + distance: 6, + fontSize: 11, + color: '#333333', + formatter: (params) => `${params.value}` // 显示单位 + }, data: this.barData.map((item) => item.processingRatio), }, ], diff --git a/src/views/core/monitoring/lineAuto/index.vue b/src/views/core/monitoring/lineAuto/index.vue index 6ca68b83..c1e70c1c 100644 --- a/src/views/core/monitoring/lineAuto/index.vue +++ b/src/views/core/monitoring/lineAuto/index.vue @@ -34,7 +34,7 @@ + :page="1" :limit="100" :table-props="tableProps" :table-data="tableData" :max-height="300" />
@@ -57,7 +57,7 @@ + :page="1" :limit="100" :table-props="tableProps" :table-data="tableData2" :max-height="300" />
@@ -71,9 +71,55 @@
+
+ +
+ + 上一班数据 + + + + + + + +
+ +
+
+
+
+
+
+
+ +
+ + 当天数据 + + + + + + + +
+ +
+
+
+
+
+
+
+
-
+
@@ -86,7 +132,7 @@ 生产表格数据
+ :limit="100" :table-props="tableProps" :max-height="300" :table-data="tableDataCustom" />
@@ -113,7 +159,7 @@ 当班数据 + :max-height="300" />
@@ -122,7 +168,7 @@ 当天数据 + :max-height="300" />
@@ -142,7 +188,7 @@ 生产表格数据 + :limit="100" :table-props="productTableProps" :table-data="productTableData" :max-height="300" /> @@ -154,7 +200,7 @@ import { parseTime } from '@/filter/code-filter'; import { getLineAuto, getPdList, getPdlAutoReportNewSearchNow, getProductAuto, - getProcessAutoReportGroup, getProcessAutoReportDay, getProcessAutoReportNew + getProcessAutoReportGroup, getProcessAutoReportDay, getProcessAutoReportNew, getPdlAutoReportNewSearchLastGroup } from '@/api/core/monitoring/auto'; import { getFactoryPage } from '@/api/core/base/factory'; import * as XLSX from 'xlsx'; @@ -165,11 +211,11 @@ import ButtonNav from '@/components/ButtonNav'; import { listData } from '@/api/system/dict/data'; // 表格列配置 const tableProps = [ - // { - // prop: 'factoryName', - // label: '工厂', - // fixed: true - // }, + { + prop: 'factoryName', + label: '工厂', + fixed: true + }, { prop: 'lineName', label: '产线', @@ -368,15 +414,27 @@ export default { productTableDataDay: [], tableDataCustom: [], list: [], // 折线图数据 + timeTypeOptions: { + productLine: [ // 按产线监控(包含上一班) + { id: 1, name: '当天' }, + { id: 2, name: '自定义' }, + { id: 3, name: '上一班' } + ], + product: [ // 按产品监控(不含上一班) + { id: 1, name: '当天' }, + { id: 2, name: '自定义' } + ] + }, formConfig: [ { type: 'select', label: '时间维度', selectOptions: [ { id: 1, name: '当天' }, - { id: 2, name: '自定义' } + { id: 2, name: '自定义' }, + { id: 3, name: '上一班' } ], - width: 80, + width: 100, onchange: true, // defaultSelect: 1, clearable: false, @@ -437,6 +495,7 @@ export default { { id: 3, name: '月' }, { id: 4, name: '年' } ], + onchange: true, width: 80, param: 'reportType' }, @@ -467,6 +526,13 @@ export default { productTableProps() { // 当班数据的完整表头(基础列 + 当班动态表头) const baseColumns = [ + { + prop: 'sizes', + label: '规格', + width: 105, + showOverflowtooltip: true, + fixed: true + }, { prop: 'process', label: '产品工艺', @@ -476,7 +542,8 @@ export default { prop: 'processType', label: '产品类型', filter: (val) => (val != 1 ? '面板' : '背板'), - fixed: true + fixed: true, + sortable: true, }, { prop: 'factoryName', @@ -513,13 +580,16 @@ export default { this.$nextTick(() => { if (this.$refs.buttonNav) { this.$refs.buttonNav.currentMenu = '按产线监控'; + this.formConfig[0].selectOptions = this.timeTypeOptions.productLine; } if (this.$refs.searchBarForm) { // this.$refs.searchBarForm.formInline.timeVal = [ // yesterday.getTime(), // end.getTime() // ]; + this.$refs.searchBarForm.formInline.timeType = 1 + } }); @@ -576,18 +646,26 @@ export default { // 3. 执行公共重置 resetCommon(); - + // if (this.activeName === 'productLine') { + // } else { + // } // 4. 根据类型设置差异化的表单配置(仅处理不同的部分) if (isProductLine) { - // 按产线监控:显示产线,隐藏产品工艺和类型 + // 按产线监控:显示产线,隐藏产品工艺和类型,时间维度包含上一班 + this.formConfig[0].selectOptions = this.timeTypeOptions.productLine; // 恢复上一班选项 this.formConfig[3].type = 'select'; // 显示产线 this.formConfig[4].type = ''; // 隐藏产品工艺 this.formConfig[5].type = ''; // 隐藏产品类型 + this.getDayDataList(); + } else { - // 按产品监控:显示产品工艺和类型,隐藏产线 + // 按产品监控:显示产品工艺和类型,隐藏产线,时间维度移除上一班 + this.formConfig[0].selectOptions = this.timeTypeOptions.product; // 不含上一班 this.formConfig[3].type = ''; // 隐藏产线 this.formConfig[4].type = 'select'; // 显示产品工艺 this.formConfig[5].type = 'select'; // 显示产品类型 + this.getProductList(); + } }, @@ -601,6 +679,12 @@ export default { { ref: 'lineCurrentShiftTable', name: '产线监控_当班数据' }, { ref: 'lineTodayTable', name: '产线监控_当天数据' } ], '产线监控_当班及当天数据汇总'); // 传入自定义汇总文件名 + } else if (this.listQuery.timeType === 1) { + // 产线-当天:导出当班 + 当天两个表格(自定义汇总文件名) + this.exportMultipleTables([ + { ref: 'lineCurrentShiftTable', name: '产线监控_上一班数据' }, + { ref: 'lineTodayTable', name: '产线监控_当天数据' } + ], '产线监控_当班及当天数据汇总'); // 传入自定义汇总文件名 } else { // 产线-自定义:导出一个表格(自定义文件名) this.exportSingleTable('lineCustomTable', '产线监控_自定义时间数据'); @@ -801,31 +885,126 @@ export default { this.formConfig[2].selectOptions = res.data.list || []; }); }, + getWeekTimeRange(date) { + const targetDate = new Date(date); + const day = targetDate.getDay() || 7; // 周日转为7 + const year = targetDate.getFullYear(); + const month = targetDate.getMonth(); + const dateNum = targetDate.getDate(); + // 本周一 00:00:00 + const startDate = new Date(year, month, dateNum - day + 1); + startDate.setHours(0, 0, 0, 0); + + // 本周日 23:59:59 + const endDate = new Date(year, month, dateNum - day + 7); + endDate.setHours(23, 59, 59, 999); + + return { + startTime: startDate.getTime(), + endTime: endDate.getTime() + }; + }, + + // 辅助函数:获取本年的开始和结束时间戳(1月1日00:00:00 到 12月31日23:59:59) + getYearTimeRange(date) { + const targetDate = new Date(date); + const year = targetDate.getFullYear(); + + // 本年1月1日 00:00:00 + const startDate = new Date(year, 0, 1); + startDate.setHours(0, 0, 0, 0); + + // 本年12月31日 23:59:59 + const endDate = new Date(year, 11, 31); + endDate.setHours(23, 59, 59, 999); + + return { + startTime: startDate.getTime(), + endTime: endDate.getTime() + }; + }, // 搜索/导出按钮点击 buttonClick(val) { + if (this.activeName === 'productLine') { + this.listQuery.pageNo = 1; + this.listQuery.pageSize = 10; + this.listQuery.factoryId = val.factoryId || undefined; + this.listQuery.process = val.process ? val.process : []; + this.listQuery.lineId = val.lineId ? val.lineId : []; + this.listQuery.processType = val.processType ? val.processType : []; + this.listQuery.reportType = val.reportType || undefined; + this.listQuery.timeType = val.timeType || undefined; + this.listQuery.searchType = val.searchType || undefined; + + // 处理不同时间选择类型 + if (val.timeVal) { + this.listQuery.startTime = val.timeVal[0]; + this.listQuery.endTime = val.timeVal[1]; + } else if (val.timeValWeek) { + // 周选择器 + const { startTime, endTime } = this.getWeekTimeRange(val.timeValWeek); + this.listQuery.startTime = startTime; + this.listQuery.endTime = endTime; + } else if (val.timeValMonth) { + // 月选择器 + this.listQuery.startTime = val.timeValMonth[0]; + this.listQuery.endTime = val.timeValMonth[1]; + } else if (val.timeValYear) { + // 年选择器 + const { startTime, endTime } = this.getYearTimeRange(val.timeValYear); + this.listQuery.startTime = startTime; + this.listQuery.endTime = endTime; + } else { + this.listQuery.startTime = undefined; + this.listQuery.endTime = undefined; + } + } else { + this.listQuery.pageNo = 1; + this.listQuery.pageSize = 10; + this.listQuery.factoryId = val.factoryId || [] + this.listQuery.process = val.process ? val.process : []; + this.listQuery.lineId = undefined; + this.listQuery.processType = val.processType ? val.processType : []; + this.listQuery.reportType = val.reportType || undefined; + this.listQuery.timeType = val.timeType || undefined; + this.listQuery.searchType = val.searchType || undefined; + + // 处理不同时间选择类型 + if (val.timeVal) { + this.listQuery.startTime = val.timeVal[0]; + this.listQuery.endTime = val.timeVal[1]; + } else if (val.timeValWeek) { + // 周选择器 + const { startTime, endTime } = this.getWeekTimeRange(val.timeValWeek); + this.listQuery.startTime = startTime; + this.listQuery.endTime = endTime; + } else if (val.timeValMonth) { + // 月选择器 + this.listQuery.startTime = val.timeValMonth[0]; + this.listQuery.endTime = val.timeValMonth[1]; + } else if (val.timeValYear) { + // 年选择器 + const { startTime, endTime } = this.getYearTimeRange(val.timeValYear); + this.listQuery.startTime = startTime; + this.listQuery.endTime = endTime; + } else { + this.listQuery.startTime = undefined; + this.listQuery.endTime = undefined; + } + } switch (val.btnName) { case 'search': - this.listQuery.pageNo = 1; - this.listQuery.pageSize = 10; - this.listQuery.factoryId = val.factoryId || undefined; - this.listQuery.process = val.process ? val.process : []; - this.listQuery.lineId = val.lineId ? val.lineId : []; - this.listQuery.processType = val.processType ? val.processType : []; - this.listQuery.reportType = val.reportType || undefined; - this.listQuery.timeType = val.timeType || undefined; - this.listQuery.searchType = val.searchType || undefined; - this.listQuery.startTime = val.timeVal ? val.timeVal[0] : undefined; - this.listQuery.endTime = val.timeVal ? val.timeVal[1] : undefined; if (this.activeName === 'productLine') { if (this.listQuery.timeType === 1) { this.getDayDataList(); + } else if (this.listQuery.timeType === 3) { + this.getLastDayDataList(); } else { this.getDataList(); } } else { this.getProductList(); - } break; case 'export': @@ -834,6 +1013,9 @@ export default { case 'reset': this.$refs.searchBarForm.resetForm(); this.$refs.searchBarForm.formInline.timeType = 1; + this.formConfig[0].selectOptions = this.activeName === 'productLine' + ? this.timeTypeOptions.productLine + : this.timeTypeOptions.product; this.listQuery = { pageSize: 100, pageNo: 1, @@ -842,12 +1024,9 @@ export default { }; if (this.activeName === 'productLine') { this.getDayDataList(); - } else { this.getProductList(); - } - break; default: console.log(val); @@ -1097,6 +1276,28 @@ export default { return [...lineColumns, totalColumn]; }, // 为当天时调用的接口 + getLastDayDataList() { + getPdlAutoReportNewSearchLastGroup().then((response) => { + this.tableData = response.data.classData.map((item, index) => { + item.originalLossNum = item.original?.lossNum; + item.originalLossArea = item.original?.lossArea; + item.edgeLossNum = item.edge?.lossNum; + item.edgeLossArea = item.edge?.lossArea; + item.drillLossNum = item.drill?.lossNum; + item.drillLossArea = item.drill?.lossArea; + item.coatingLossNum = item.coating?.lossNum; + item.coatingLossArea = item.coating?.lossArea; + item.silkLossNum = item.silk?.lossNum; + item.silkLossArea = item.silk?.lossArea; + item.temperingLossNum = item.tempering?.lossNum; + item.temperingLossArea = item.tempering?.lossArea; + item.packingLossNum = item.packing?.lossNum; + item.packingLossArea = item.packing?.lossArea; + return item; + }); + // console.log(this.tableData, this.tableData2); + }); + }, getDayDataList() { getPdlAutoReportNewSearchNow().then((response) => { this.tableData = response.data.classData.map((item, index) => { @@ -1156,24 +1357,21 @@ export default { console.log(value); this.listQuery.timeType = value; - if (value === 1) { - // 切换为“当天”:隐藏查询类型、报表类型、时间范围 + if (value === 2) { + // 切换为“自定义”:显示查询类型和时间范围 + this.formConfig[1].type = 'select'; + this.$refs.searchBarForm.formInline.timeType = value; + this.listQuery.timeType = value; + this.formConfig[7].type = 'datePicker'; + } else { this.formConfig[1].type = ''; this.formConfig[6].type = ''; this.formConfig[7].type = ''; this.$refs.searchBarForm.formInline.timeType = value; this.listQuery.timeType = value; - this.$refs.searchBarForm.formInline.searchType = undefined; this.$refs.searchBarForm.formInline.reportType = undefined; this.$refs.searchBarForm.formInline.timeVal = undefined; - } else { - // 切换为“自定义”:显示查询类型和时间范围 - this.formConfig[1].type = 'select'; - this.$refs.searchBarForm.formInline.timeType = value; - this.listQuery.timeType = value; - - this.formConfig[7].type = 'datePicker'; } } else if (param === 'searchType') { if (value === 1) { @@ -1187,7 +1385,74 @@ export default { this.formConfig[7].type = 'datePicker'; } } else if (param === 'reportType') { - this.$refs.searchBarForm.formInline.timeVal = undefined; + if (this.$refs.searchBarForm && this.$refs.searchBarForm.formInline) { + const formInline = this.$refs.searchBarForm.formInline; + // 精准判断:只有字段存在时,才置为undefined(不存在则不处理) + if ('timeVal' in formInline) { + formInline.timeVal = undefined; + } + if ('timeValWeek' in formInline) { + formInline.timeValWeek = undefined; + } + if ('timeValMonth' in formInline) { + formInline.timeValMonth = undefined; + } + if ('timeValYear' in formInline) { + formInline.timeValYear = undefined; + } + } + this.listQuery.startTime = undefined; + this.listQuery.endTime = undefined; + if (value === 1) { + this.formConfig[7] = { + type: 'datePicker', + label: '时间范围', + dateType: 'datetimerange', + format: 'yyyy-MM-dd HH:mm:ss', + valueFormat: 'timestamp', + rangeSeparator: '-', + startPlaceholder: '开始时间', + endPlaceholder: '结束时间', + param: 'timeVal', + width: 350 + }; + } else if (value === 2) { + this.formConfig[7] = { + type: 'datePicker', + label: '时间范围', + dateType: 'week', + placeholder: '选择日期', + format: 'yyyy-MM-dd', + valueFormat: 'yyyy-MM-dd', + param: 'timeValWeek', + width: 250, + }; + } else if (value === 3) { + this.formConfig[7] = { + type: 'datePicker', + label: '时间范围', + dateType: 'monthrange', + format: 'yyyy-MM-dd', + valueFormat: 'timestamp', + rangeSeparator: '-', + startPlaceholder: '开始时间', + endPlaceholder: '结束时间', + param: 'timeValMonth', + defaultTime: ['00:00:00', '23:59:59'], + width: 250, + }; + } else if (value === 4) { + this.formConfig[7] = { + type: 'datePicker', + label: '时间范围', + dateType: 'year', + placeholder: '选择年份', + format: 'yyyy', + valueFormat: 'timestamp', + param: 'timeValYear', + width: 250, + }; + } } else if (param === 'factoryId') { // 切换工厂时刷新产线列表 this.listQuery.lineId = []; @@ -1234,7 +1499,7 @@ export default { .content-wrapper { // flex: 1; width: 100%; - height: calc(100vh - 303px); + height: calc(100vh - 280px); // overflow: hidden; } diff --git a/src/views/core/monitoring/nextClip/hisData.vue b/src/views/core/monitoring/nextClip/hisData.vue index 5342afa4..87105ed6 100644 --- a/src/views/core/monitoring/nextClip/hisData.vue +++ b/src/views/core/monitoring/nextClip/hisData.vue @@ -77,7 +77,7 @@ const tableProps = [ }, { prop: 'palletNum', - label: '下片托数' + label: '一托玻璃数量/片' }, { prop: 'startTime', @@ -92,7 +92,7 @@ const tableProps = [ width: 160 }, { - prop: 'outputNum', + prop: 'length', label: '玻璃长度/mm' }, { @@ -314,9 +314,10 @@ export default { case 'search': this.listQuery.pageNo = 1; this.listQuery.pageSize = 10; - this.listQuery.productId = val.productId ? val.productId : undefined; - this.listQuery.startTime = val.timeVal ? val.timeVal[0]: undefined; - this.listQuery.endTime = val.timeVal ? val.timeVal[1]: undefined; + this.listQuery.productionLineId = val.productionLineId ? val.productionLineId : undefined; + this.listQuery.thick = val.thick ? val.thick : undefined; + this.listQuery.startTime = val.timeVal ? val.timeVal[0] : undefined; + this.listQuery.endTime = val.timeVal ? val.timeVal[1] : undefined; //this.listQuery.reportEndTime = val.timeVal ? [new Date(val.timeVal[1]).getTime()] : undefined; this.getDataList(); diff --git a/src/views/core/monitoring/nextClip/index.vue b/src/views/core/monitoring/nextClip/index.vue index 55bf6a9c..ff748fe2 100644 --- a/src/views/core/monitoring/nextClip/index.vue +++ b/src/views/core/monitoring/nextClip/index.vue @@ -77,7 +77,7 @@ const tableProps = [ }, { prop: 'palletNum', - label: '下片托数' + label: '一托玻璃数量/片' }, { prop: 'startTime', @@ -92,7 +92,7 @@ const tableProps = [ width: 160 }, { - prop: 'outputNum', + prop: 'length', label: '玻璃长度/mm' }, { diff --git a/src/views/core/monitoring/productAuto/BarChart.vue b/src/views/core/monitoring/productAuto/BarChart.vue index d823cedd..73e7716d 100644 --- a/src/views/core/monitoring/productAuto/BarChart.vue +++ b/src/views/core/monitoring/productAuto/BarChart.vue @@ -262,6 +262,14 @@ export default { tooltip: { valueFormatter: (value) => `${value} %`, }, + label: { + show: true, + position: 'top', + distance: 6, + fontSize: 11, + color: '#333333', + formatter: (params) => `${params.value}` // 显示单位 + }, data: this.barData.map((item) => item.processingRatio), }, ], diff --git a/src/views/core/monitoring/productAuto/index.vue b/src/views/core/monitoring/productAuto/index.vue index 764bbbfd..c916ce73 100644 --- a/src/views/core/monitoring/productAuto/index.vue +++ b/src/views/core/monitoring/productAuto/index.vue @@ -34,7 +34,7 @@ + :page="1" :limit="100" :table-props="tableProps" :table-data="tableData" :max-height="300" />
@@ -57,7 +57,7 @@ + :page="1" :limit="100" :table-props="tableProps" :table-data="tableData2" :max-height="300" />
@@ -71,22 +71,68 @@
+
+ +
+ + 上一班数据 + + + + + + + +
+ +
+
+
+
+
+
+
+ +
+ + 当天数据 + + + + + + + +
+ +
+
+
+
+
+
+
+
-
+
{{ reportTypeMap[listQuery.reportType] }} {{ parseTime(listQuery.startTime) }} 至{{ - parseTime(listQuery.endTime) }} + parseTime(listQuery.endTime) }} 生产表格数据
+ :limit="100" :table-props="tableProps" :max-height="300" :table-data="tableDataCustom" />
@@ -113,7 +159,7 @@ 当班数据 + :max-height="300" />
@@ -122,7 +168,7 @@ 当天数据 + :max-height="300" />
@@ -142,7 +188,7 @@ 生产表格数据 + :limit="100" :table-props="productTableProps" :table-data="productTableData" :max-height="300" /> @@ -154,7 +200,7 @@ import { parseTime } from '@/filter/code-filter'; import { getLineAuto, getPdList, getPdlAutoReportNewSearchNow, getProductAuto, - getProcessAutoReportGroup, getProcessAutoReportDay, getProcessAutoReportNew + getProcessAutoReportGroup, getProcessAutoReportDay, getProcessAutoReportNew, getPdlAutoReportNewSearchLastGroup } from '@/api/core/monitoring/auto'; import { getFactoryPage } from '@/api/core/base/factory'; import * as XLSX from 'xlsx'; @@ -165,11 +211,11 @@ import ButtonNav from '@/components/ButtonNav'; import { listData } from '@/api/system/dict/data'; // 表格列配置 const tableProps = [ - // { - // prop: 'factoryName', - // label: '工厂', - // fixed: true - // }, + { + prop: 'factoryName', + label: '工厂', + fixed: true + }, { prop: 'lineName', label: '产线', @@ -368,15 +414,27 @@ export default { productTableDataDay: [], tableDataCustom: [], list: [], // 折线图数据 + timeTypeOptions: { + productLine: [ // 按产线监控(包含上一班) + { id: 1, name: '当天' }, + { id: 2, name: '自定义' }, + { id: 3, name: '上一班' } + ], + product: [ // 按产品监控(不含上一班) + { id: 1, name: '当天' }, + { id: 2, name: '自定义' } + ] + }, formConfig: [ { type: 'select', label: '时间维度', selectOptions: [ { id: 1, name: '当天' }, - { id: 2, name: '自定义' } + { id: 2, name: '自定义' }, + { id: 3, name: '上一班' } ], - width: 80, + width: 100, onchange: true, // defaultSelect: 1, clearable: false, @@ -438,6 +496,7 @@ export default { { id: 4, name: '年' } ], width: 80, + onchange: true, param: 'reportType' }, { @@ -513,17 +572,20 @@ export default { this.$nextTick(() => { if (this.$refs.buttonNav) { this.$refs.buttonNav.currentMenu = '按产品监控'; + this.formConfig[0].selectOptions = this.timeTypeOptions.product; } if (this.$refs.searchBarForm) { // this.$refs.searchBarForm.formInline.timeVal = [ // yesterday.getTime(), // end.getTime() // ]; + this.$refs.searchBarForm.formInline.timeType = 1 + } }); - this.getProductList(); + this.getDayDataList(); this.getPdLineList(); const queryParams = { pageNo: 1, @@ -579,15 +641,21 @@ export default { // 4. 根据类型设置差异化的表单配置(仅处理不同的部分) if (isProductLine) { - // 按产线监控:显示产线,隐藏产品工艺和类型 + // 按产线监控:显示产线,隐藏产品工艺和类型,时间维度包含上一班 + this.formConfig[0].selectOptions = this.timeTypeOptions.productLine; // 恢复上一班选项 this.formConfig[3].type = 'select'; // 显示产线 this.formConfig[4].type = ''; // 隐藏产品工艺 this.formConfig[5].type = ''; // 隐藏产品类型 + this.getDayDataList(); + } else { - // 按产品监控:显示产品工艺和类型,隐藏产线 + // 按产品监控:显示产品工艺和类型,隐藏产线,时间维度移除上一班 + this.formConfig[0].selectOptions = this.timeTypeOptions.product; // 不含上一班 this.formConfig[3].type = ''; // 隐藏产线 this.formConfig[4].type = 'select'; // 显示产品工艺 this.formConfig[5].type = 'select'; // 显示产品类型 + this.getProductList(); + } }, @@ -596,48 +664,52 @@ export default { // 按产线监控 if (this.activeName === 'productLine') { if (this.listQuery.timeType === 1) { - // 产线-当天:导出当班 + 当天两个表格 + // 产线-当天:导出当班 + 当天两个表格(自定义汇总文件名) this.exportMultipleTables([ { ref: 'lineCurrentShiftTable', name: '产线监控_当班数据' }, { ref: 'lineTodayTable', name: '产线监控_当天数据' } - ]); + ], '产线监控_当班及当天数据汇总'); // 传入自定义汇总文件名 + } else if (this.listQuery.timeType === 1) { + // 产线-当天:导出当班 + 当天两个表格(自定义汇总文件名) + this.exportMultipleTables([ + { ref: 'lineCurrentShiftTable', name: '产线监控_上一班数据' }, + { ref: 'lineTodayTable', name: '产线监控_当天数据' } + ], '产线监控_当班及当天数据汇总'); // 传入自定义汇总文件名 } else { - // 产线-自定义:导出一个表格 + // 产线-自定义:导出一个表格(自定义文件名) this.exportSingleTable('lineCustomTable', '产线监控_自定义时间数据'); } } // 按产品监控 else { if (this.listQuery.timeType === 1) { - // 产品-当天:导出当班 + 当天两个表格 + // 产品-当天:导出当班 + 当天两个表格(自定义汇总文件名) this.exportMultipleTables([ { ref: 'productCurrentShiftTable', name: '产品监控_当班数据' }, { ref: 'productTodayTable', name: '产品监控_当天数据' } - ]); + ], '产品监控_当班及当天数据汇总'); // 传入自定义汇总文件名 } else { - // 产品-自定义:导出一个表格 + // 产品-自定义:导出一个表格(自定义文件名) this.exportSingleTable('productCustomTable', '产品监控_自定义时间数据'); } } }, - // 导出单个表格 + // 导出单个表格(保持原有逻辑,文件名由调用方传入,已区分不同场景) exportSingleTable(refName, fileName) { const table = this.getTableDom(refName); if (!table) return; - // 克隆表格并移除固定列 const clonedTable = table.cloneNode(true); - this.removeFixedColumns(clonedTable); + this.adjustTableForExport(clonedTable); - // 转换为工作簿并导出 const workbook = XLSX.utils.table_to_book(clonedTable); const fullName = `${fileName}_${this.formatDate()}.xlsx`; XLSX.writeFile(workbook, fullName); }, - // 导出多个表格(同一个Excel的不同sheet) - exportMultipleTables(tables) { + // 导出多个表格(新增自定义汇总文件名参数,适配不同选项卡) + exportMultipleTables(tables, customSummaryName) { const workbook = XLSX.utils.book_new(); let hasValidTable = false; @@ -646,11 +718,9 @@ export default { if (!table) return; hasValidTable = true; - // 克隆表格并移除固定列 const clonedTable = table.cloneNode(true); - this.removeFixedColumns(clonedTable); + this.adjustTableForExport(clonedTable); - // 转换为sheet并添加到工作簿 const worksheet = XLSX.utils.table_to_sheet(clonedTable); XLSX.utils.book_append_sheet(workbook, worksheet, name); }); @@ -660,31 +730,128 @@ export default { return; } - // 导出包含多个sheet的Excel - const fullName = `生产监控数据汇总_${this.formatDate()}.xlsx`; + // 动态生成汇总文件名:自定义名称 + 日期 + const fullName = `${customSummaryName}_${this.formatDate()}.xlsx`; XLSX.writeFile(workbook, fullName); }, - - // 辅助方法:获取表格DOM元素 + // 辅助方法:获取表格DOM元素(包含表头) getTableDom(refName) { const tableComponent = this.$refs[refName]; if (!tableComponent) { this.$message.warning(`未找到${refName}表格`); return null; } - // 获取表格组件内部的el-table DOM - const tableDom = tableComponent.$el.querySelector('.el-table__body-wrapper table'); - if (!tableDom) { + // 获取完整表格容器(包含表头和表体) + const tableContainer = tableComponent.$el.querySelector('.el-table'); + if (!tableContainer) { this.$message.warning(`${refName}表格数据为空`); return null; } - return tableDom; + return tableContainer; }, - // 辅助方法:移除固定列(避免重复导出) - removeFixedColumns(table) { - const fixedColumns = table.querySelectorAll('.el-table__fixed, .el-table__fixed-right'); - fixedColumns.forEach(col => col.remove()); + // 重点修复:调整表格结构(解决表头重复问题) + adjustTableForExport(tableContainer) { + // 1. 移除空表格提示和分页等无关元素 + const emptyCells = tableContainer.querySelectorAll('.el-table__empty-block, .el-pagination'); + emptyCells.forEach(cell => cell.remove()); + + // 2. 定位核心元素 + const mainTable = tableContainer.querySelector('.el-table__body-wrapper table'); // 主表体 + const fixedLeft = tableContainer.querySelector('.el-table__fixed'); // 左固定列容器 + const fixedRight = tableContainer.querySelector('.el-table__fixed-right'); // 右固定列容器 + + // 3. 提取所有表头行(支持多级表头,按层级收集) + const allHeaderRows = []; // 存储所有层级的表头行(每行是一个单元格数组) + + // 辅助函数:提取某个容器内的所有表头行(处理多级表头) + const extractHeaderRows = (container) => { + const headerWrapper = container?.querySelector('.el-table__header-wrapper table'); + if (!headerWrapper) return []; + const thead = headerWrapper.querySelector('thead'); + if (!thead) return []; + // 多级表头可能有多个tr(行) + const headerRows = Array.from(thead.querySelectorAll('tr')); + return headerRows.map(row => Array.from(row.querySelectorAll('th'))); // 每行的单元格数组 + }; + + // 收集左固定列的表头行(可能有多层) + const fixedLeftHeaderRows = extractHeaderRows(fixedLeft); + // 收集主表头的表头行(可能有多层) + const mainHeaderRows = extractHeaderRows(tableContainer); + // 收集右固定列的表头行(可能有多层) + const fixedRightHeaderRows = extractHeaderRows(fixedRight); + + // 4. 合并表头行(按层级对齐,左固定列 → 主表头 → 右固定列) + // 确定最大表头层级(多级表头的行数) + const maxLevel = Math.max( + fixedLeftHeaderRows.length, + mainHeaderRows.length, + fixedRightHeaderRows.length + ); + + // 按层级合并每行的单元格 + for (let i = 0; i < maxLevel; i++) { + const rowCells = []; + // 左固定列当前层级的单元格(不足则补空) + rowCells.push(...(fixedLeftHeaderRows[i] || [])); + // 主表头当前层级的单元格(不足则补空) + rowCells.push(...(mainHeaderRows[i] || [])); + // 右固定列当前层级的单元格(不足则补空) + rowCells.push(...(fixedRightHeaderRows[i] || [])); + allHeaderRows.push(rowCells); + } + + // 5. 清理所有原有表头和固定列容器(避免干扰) + tableContainer.querySelectorAll('thead').forEach(thead => thead.remove()); + tableContainer.querySelectorAll('.el-table__header-wrapper').forEach(wrapper => wrapper.remove()); + [fixedLeft, fixedRight].forEach(container => container?.remove()); + + // 6. 构建唯一表头并添加到主表体(支持多级表头) + if (mainTable && allHeaderRows.length > 0) { + const newThead = document.createElement('thead'); + // 按层级添加表头行 + allHeaderRows.forEach(cells => { + const newTr = document.createElement('tr'); + cells.forEach(cell => { + // 复制单元格(避免DOM残留引用问题) + const clonedCell = cell.cloneNode(true); + newTr.appendChild(clonedCell); + }); + newThead.appendChild(newTr); + }); + // 将新表头插入主表体最前面 + mainTable.insertBefore(newThead, mainTable.firstChild); + } + + // 7. 合并固定列数据到主表体(仅处理tbody数据) + // 合并左固定列数据 + if (fixedLeft && mainTable) { + const fixedLeftRows = fixedLeft.querySelectorAll('.el-table__body-wrapper tbody tr'); + const mainRows = mainTable.querySelectorAll('tbody tr'); + fixedLeftRows.forEach((fixedRow, index) => { + if (mainRows[index]) { + const fixedCells = Array.from(fixedRow.querySelectorAll('td')); + fixedCells.forEach(cell => { + mainRows[index].insertBefore(cell.cloneNode(true), mainRows[index].firstChild); + }); + } + }); + } + + // 合并右固定列数据 + if (fixedRight && mainTable) { + const fixedRightRows = fixedRight.querySelectorAll('.el-table__body-wrapper tbody tr'); + const mainRows = mainTable.querySelectorAll('tbody tr'); + fixedRightRows.forEach((fixedRow, index) => { + if (mainRows[index]) { + const fixedCells = Array.from(fixedRow.querySelectorAll('td')); + fixedCells.forEach(cell => { + mainRows[index].appendChild(cell.cloneNode(true)); + }); + } + }); + } }, // 辅助方法:格式化日期(用于文件名) @@ -698,7 +865,6 @@ export default { String(date.getMinutes()).padStart(2, '0') ].join(''); }, - // 获取产线和工厂列表 getPdLineList() { getPdList().then(res => { @@ -712,28 +878,85 @@ export default { // 搜索/导出按钮点击 buttonClick(val) { + if (this.activeName === 'productLine') { + this.listQuery.pageNo = 1; + this.listQuery.pageSize = 10; + this.listQuery.factoryId = val.factoryId || undefined; + this.listQuery.process = val.process ? val.process : []; + this.listQuery.lineId = val.lineId ? val.lineId : []; + this.listQuery.processType = val.processType ? val.processType : []; + this.listQuery.reportType = val.reportType || undefined; + this.listQuery.timeType = val.timeType || undefined; + this.listQuery.searchType = val.searchType || undefined; + + // 处理不同时间选择类型 + if (val.timeVal) { + this.listQuery.startTime = val.timeVal[0]; + this.listQuery.endTime = val.timeVal[1]; + } else if (val.timeValWeek) { + // 周选择器 + const { startTime, endTime } = this.getWeekTimeRange(val.timeValWeek); + this.listQuery.startTime = startTime; + this.listQuery.endTime = endTime; + } else if (val.timeValMonth) { + // 月选择器 + this.listQuery.startTime = val.timeValMonth[0]; + this.listQuery.endTime = val.timeValMonth[1]; + } else if (val.timeValYear) { + // 年选择器 + const { startTime, endTime } = this.getYearTimeRange(val.timeValYear); + this.listQuery.startTime = startTime; + this.listQuery.endTime = endTime; + } else { + this.listQuery.startTime = undefined; + this.listQuery.endTime = undefined; + } + } else { + this.listQuery.pageNo = 1; + this.listQuery.pageSize = 10; + this.listQuery.factoryId = val.factoryId || [] + this.listQuery.process = val.process ? val.process : []; + this.listQuery.lineId = undefined; + this.listQuery.processType = val.processType ? val.processType : []; + this.listQuery.reportType = val.reportType || undefined; + this.listQuery.timeType = val.timeType || undefined; + this.listQuery.searchType = val.searchType || undefined; + + // 处理不同时间选择类型 + if (val.timeVal) { + this.listQuery.startTime = val.timeVal[0]; + this.listQuery.endTime = val.timeVal[1]; + } else if (val.timeValWeek) { + // 周选择器 + const { startTime, endTime } = this.getWeekTimeRange(val.timeValWeek); + this.listQuery.startTime = startTime; + this.listQuery.endTime = endTime; + } else if (val.timeValMonth) { + // 月选择器 + this.listQuery.startTime = val.timeValMonth[0]; + this.listQuery.endTime = val.timeValMonth[1]; + } else if (val.timeValYear) { + // 年选择器 + const { startTime, endTime } = this.getYearTimeRange(val.timeValYear); + this.listQuery.startTime = startTime; + this.listQuery.endTime = endTime; + } else { + this.listQuery.startTime = undefined; + this.listQuery.endTime = undefined; + } + } switch (val.btnName) { case 'search': - this.listQuery.pageNo = 1; - this.listQuery.pageSize = 10; - this.listQuery.factoryId = val.factoryId || undefined; - this.listQuery.process = val.process ? val.process : []; - this.listQuery.lineId = val.lineId ? val.lineId : []; - this.listQuery.processType = val.processType ? val.processType : []; - this.listQuery.reportType = val.reportType || undefined; - this.listQuery.timeType = val.timeType || undefined; - this.listQuery.searchType = val.searchType || undefined; - this.listQuery.startTime = val.timeVal ? val.timeVal[0] : undefined; - this.listQuery.endTime = val.timeVal ? val.timeVal[1] : undefined; if (this.activeName === 'productLine') { if (this.listQuery.timeType === 1) { this.getDayDataList(); + } else if (this.listQuery.timeType === 3) { + this.getLastDayDataList(); } else { this.getDataList(); } } else { - this.getProductList(); - + this.getProductList(); } break; case 'export': @@ -742,6 +965,9 @@ export default { case 'reset': this.$refs.searchBarForm.resetForm(); this.$refs.searchBarForm.formInline.timeType = 1; + this.formConfig[0].selectOptions = this.activeName === 'productLine' + ? this.timeTypeOptions.productLine + : this.timeTypeOptions.product; this.listQuery = { pageSize: 100, pageNo: 1, @@ -750,12 +976,9 @@ export default { }; if (this.activeName === 'productLine') { this.getDayDataList(); - } else { this.getProductList(); - } - break; default: console.log(val); @@ -763,8 +986,8 @@ export default { }, getDataList() { - if(!this.listQuery.startTime &&!this.listQuery.endTime ){ - return this.$modal.msgError('请选择时间'); + if (!this.listQuery.startTime && !this.listQuery.endTime) { + return this.$modal.msgError('请选择时间'); } this.dataListLoading = true; // const arr = ['日', '周', '月', '年']; @@ -798,7 +1021,7 @@ export default { console.log('resGroup'); if (this.listQuery.timeType === 2) { const resGroup = await getProcessAutoReportNew(this.listQuery); - console.log('resGroup',resGroup); + console.log('resGroup', resGroup); // 格式化数据:lineDetList提取到外层,键名加lineId前缀 const formatData = (rawList) => { @@ -827,7 +1050,7 @@ export default { // 处理当班和当天数据(分别存储) this.productTableData = formatData(resGroup.data.list); // 当班数据 - console.log(this.productTableData,'productTableData'); + console.log(this.productTableData, 'productTableData'); // -------------------------- // 生成当班数据的动态表头 @@ -1005,6 +1228,28 @@ export default { return [...lineColumns, totalColumn]; }, // 为当天时调用的接口 + getLastDayDataList() { + getPdlAutoReportNewSearchLastGroup().then((response) => { + this.tableData = response.data.classData.map((item, index) => { + item.originalLossNum = item.original?.lossNum; + item.originalLossArea = item.original?.lossArea; + item.edgeLossNum = item.edge?.lossNum; + item.edgeLossArea = item.edge?.lossArea; + item.drillLossNum = item.drill?.lossNum; + item.drillLossArea = item.drill?.lossArea; + item.coatingLossNum = item.coating?.lossNum; + item.coatingLossArea = item.coating?.lossArea; + item.silkLossNum = item.silk?.lossNum; + item.silkLossArea = item.silk?.lossArea; + item.temperingLossNum = item.tempering?.lossNum; + item.temperingLossArea = item.tempering?.lossArea; + item.packingLossNum = item.packing?.lossNum; + item.packingLossArea = item.packing?.lossArea; + return item; + }); + // console.log(this.tableData, this.tableData2); + }); + }, getDayDataList() { getPdlAutoReportNewSearchNow().then((response) => { this.tableData = response.data.classData.map((item, index) => { @@ -1060,28 +1305,26 @@ export default { // 搜索栏下拉选择变化 handleSearchBarChanged({ param, value }) { + console.log(value, param); if (param === 'timeType') { console.log(value); this.listQuery.timeType = value; - if (value === 1) { - // 切换为“当天”:隐藏查询类型、报表类型、时间范围 + if (value === 2) { + // 切换为“自定义”:显示查询类型和时间范围 + this.formConfig[1].type = 'select'; + this.$refs.searchBarForm.formInline.timeType = value; + this.listQuery.timeType = value; + this.formConfig[7].type = 'datePicker'; + } else { this.formConfig[1].type = ''; this.formConfig[6].type = ''; this.formConfig[7].type = ''; this.$refs.searchBarForm.formInline.timeType = value; this.listQuery.timeType = value; - this.$refs.searchBarForm.formInline.searchType = undefined; this.$refs.searchBarForm.formInline.reportType = undefined; this.$refs.searchBarForm.formInline.timeVal = undefined; - } else { - // 切换为“自定义”:显示查询类型和时间范围 - this.formConfig[1].type = 'select'; - this.$refs.searchBarForm.formInline.timeType = value; - this.listQuery.timeType = value; - - this.formConfig[7].type = 'datePicker'; } } else if (param === 'searchType') { if (value === 1) { @@ -1095,7 +1338,74 @@ export default { this.formConfig[7].type = 'datePicker'; } } else if (param === 'reportType') { - this.$refs.searchBarForm.formInline.timeVal = undefined; + if (this.$refs.searchBarForm && this.$refs.searchBarForm.formInline) { + const formInline = this.$refs.searchBarForm.formInline; + // 精准判断:只有字段存在时,才置为undefined(不存在则不处理) + if ('timeVal' in formInline) { + formInline.timeVal = undefined; + } + if ('timeValWeek' in formInline) { + formInline.timeValWeek = undefined; + } + if ('timeValMonth' in formInline) { + formInline.timeValMonth = undefined; + } + if ('timeValYear' in formInline) { + formInline.timeValYear = undefined; + } + } + this.listQuery.startTime = undefined; + this.listQuery.endTime = undefined; + if (value === 1) { + this.formConfig[7] = { + type: 'datePicker', + label: '时间范围', + dateType: 'datetimerange', + format: 'yyyy-MM-dd HH:mm:ss', + valueFormat: 'timestamp', + rangeSeparator: '-', + startPlaceholder: '开始时间', + endPlaceholder: '结束时间', + param: 'timeVal', + width: 350 + }; + } else if (value === 2) { + this.formConfig[7] = { + type: 'datePicker', + label: '时间范围', + dateType: 'week', + placeholder: '选择日期', + format: 'yyyy-MM-dd', + valueFormat: 'yyyy-MM-dd', + param: 'timeValWeek', + width: 250, + }; + } else if (value === 3) { + this.formConfig[7] = { + type: 'datePicker', + label: '时间范围', + dateType: 'monthrange', + format: 'yyyy-MM-dd', + valueFormat: 'timestamp', + rangeSeparator: '-', + startPlaceholder: '开始时间', + endPlaceholder: '结束时间', + param: 'timeValMonth', + defaultTime: ['00:00:00', '23:59:59'], + width: 250, + }; + } else if (value === 4) { + this.formConfig[7] = { + type: 'datePicker', + label: '时间范围', + dateType: 'year', + placeholder: '选择年份', + format: 'yyyy', + valueFormat: 'timestamp', + param: 'timeValYear', + width: 250, + }; + } } else if (param === 'factoryId') { // 切换工厂时刷新产线列表 this.listQuery.lineId = []; @@ -1142,7 +1452,7 @@ export default { .content-wrapper { // flex: 1; width: 100%; - height: calc(100vh - 303px); + height: calc(100vh - 280px); // overflow: hidden; } diff --git a/src/views/core/monitoring/rawFilmReport/index.vue b/src/views/core/monitoring/rawFilmReport/index.vue index 5dd5448a..33798e93 100644 --- a/src/views/core/monitoring/rawFilmReport/index.vue +++ b/src/views/core/monitoring/rawFilmReport/index.vue @@ -1,14 +1,8 @@ - + + diff --git a/src/views/core/monitoring/rawFilmReport/searchBar.vue b/src/views/core/monitoring/rawFilmReport/searchBar.vue new file mode 100644 index 00000000..234a70ee --- /dev/null +++ b/src/views/core/monitoring/rawFilmReport/searchBar.vue @@ -0,0 +1,274 @@ + + + diff --git a/src/views/equipment/equipmentOverview/SmallTitle.vue b/src/views/equipment/equipmentOverview/SmallTitle.vue new file mode 100644 index 00000000..93b4a18f --- /dev/null +++ b/src/views/equipment/equipmentOverview/SmallTitle.vue @@ -0,0 +1,65 @@ + + + + + + diff --git a/src/views/equipment/equipmentOverview/add-or-updata.vue b/src/views/equipment/equipmentOverview/add-or-updata.vue new file mode 100644 index 00000000..0e3c8403 --- /dev/null +++ b/src/views/equipment/equipmentOverview/add-or-updata.vue @@ -0,0 +1,134 @@ + + + + + diff --git a/src/views/equipment/equipmentOverview/alarm-or-updata.vue b/src/views/equipment/equipmentOverview/alarm-or-updata.vue new file mode 100644 index 00000000..1a5341b3 --- /dev/null +++ b/src/views/equipment/equipmentOverview/alarm-or-updata.vue @@ -0,0 +1,498 @@ + + + + + diff --git a/src/views/equipment/equipmentOverview/index.vue b/src/views/equipment/equipmentOverview/index.vue new file mode 100644 index 00000000..b3d22063 --- /dev/null +++ b/src/views/equipment/equipmentOverview/index.vue @@ -0,0 +1,1252 @@ + + + + + + + diff --git a/src/views/login.vue b/src/views/login.vue index 051df9a2..5db9fab6 100644 --- a/src/views/login.vue +++ b/src/views/login.vue @@ -51,6 +51,7 @@ src="/static/videos/login.webm" muted autoplay + id="video" loop style=" user-select: none; @@ -338,7 +339,8 @@ export default { SysUserSocialTypeEnum: SystemUserSocialTypeEnum, }; }, - created() { + created() { + // 租户开关 this.tenantEnable = getTenantEnable(); if (this.tenantEnable) { @@ -356,8 +358,15 @@ export default { this.redirect = this.$route.query.redirect ? decodeURIComponent(this.$route.query.redirect) : undefined; - this.getCookie(); - }, + this.getCookie(); + + + }, + mounted () { + const video = document.getElementById('video'); + // 设置为0.5倍速,数值越小速度越慢(0.5为半速,0.75为0.75倍速等) + video.playbackRate = 0.2; + }, methods: { getCode() { // 情况一,未开启:则直接登录 diff --git a/src/views/quality/dpdda/defectAnalysis.vue b/src/views/quality/dpdda/defectAnalysis.vue new file mode 100644 index 00000000..da8f55ec --- /dev/null +++ b/src/views/quality/dpdda/defectAnalysis.vue @@ -0,0 +1,309 @@ + + + diff --git a/src/views/quality/dpdda/defectSummary.vue b/src/views/quality/dpdda/defectSummary.vue new file mode 100644 index 00000000..ca1934bb --- /dev/null +++ b/src/views/quality/dpdda/defectSummary.vue @@ -0,0 +1,560 @@ + + + + diff --git a/src/views/quality/dpdda/defectSummaryDet.vue b/src/views/quality/dpdda/defectSummaryDet.vue new file mode 100644 index 00000000..f60f8eb1 --- /dev/null +++ b/src/views/quality/dpdda/defectSummaryDet.vue @@ -0,0 +1,224 @@ + + + + + diff --git a/src/views/quality/dpdda/sectionDefect.vue b/src/views/quality/dpdda/sectionDefect.vue new file mode 100644 index 00000000..49bed6a2 --- /dev/null +++ b/src/views/quality/dpdda/sectionDefect.vue @@ -0,0 +1,416 @@ + + + + diff --git a/src/views/quality/qualityIsra/defectVisualization.vue b/src/views/quality/qualityIsra/defectVisualization.vue new file mode 100644 index 00000000..89033e0a --- /dev/null +++ b/src/views/quality/qualityIsra/defectVisualization.vue @@ -0,0 +1,674 @@ + + + + + diff --git a/src/views/quality/qualityIsra/dialogForm.vue b/src/views/quality/qualityIsra/dialogForm.vue new file mode 100644 index 00000000..be2f7c74 --- /dev/null +++ b/src/views/quality/qualityIsra/dialogForm.vue @@ -0,0 +1,270 @@ + + + + + + + diff --git a/src/views/quality/qualityIsra/index.vue b/src/views/quality/qualityIsra/index.vue new file mode 100644 index 00000000..885e6fc1 --- /dev/null +++ b/src/views/quality/qualityIsra/index.vue @@ -0,0 +1,468 @@ + + + + diff --git a/src/views/quality/transmittanceTesting.vue b/src/views/quality/transmittanceTesting.vue new file mode 100644 index 00000000..cd40b057 --- /dev/null +++ b/src/views/quality/transmittanceTesting.vue @@ -0,0 +1,305 @@ + + + diff --git a/yarn.lock b/yarn.lock index 8d649fcd..f067da31 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3157,6 +3157,11 @@ "resolved" "https://registry.npmmirror.com/check-types/-/check-types-8.0.3.tgz" "version" "8.0.3" +"chinese-lunar@^0.1.4": + "integrity" "sha512-E4seb9UZkSJtkm65Ry2ZLWTw5Z87DOyGcCePdg3ft7da342hnEliMtcDAPSn+YSo/o0xl1Egmhh671kxEJgY+g==" + "resolved" "https://registry.npmmirror.com/chinese-lunar/-/chinese-lunar-0.1.4.tgz" + "version" "0.1.4" + "chokidar@^2.1.8": "integrity" "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==" "resolved" "https://registry.npmmirror.com/chokidar/-/chokidar-2.1.8.tgz"