From dd802b183444710222451ad023e2dcf4a968325b Mon Sep 17 00:00:00 2001 From: ll <1079863556@qq.com> Date: Fri, 29 Aug 2025 17:26:39 +0800 Subject: [PATCH] =?UTF-8?q?=E9=85=B8=E5=A5=B6=E6=A3=80=E9=AA=8C=E8=AE=B0?= =?UTF-8?q?=E5=BD=95=EF=BC=8C=E9=B2=9C=E5=A5=B6=E6=A3=80=E9=AA=8C=E8=AE=B0?= =?UTF-8?q?=E5=BD=95=E3=80=81=E7=94=9F=E4=B9=B3=E6=A3=80=E9=AA=8C=E8=AE=B0?= =?UTF-8?q?=E5=BD=95=E9=A1=B5=E9=9D=A2=E5=AF=BC=E5=87=BA=E5=8A=9F=E8=83=BD?= =?UTF-8?q?=EF=BC=8C=E5=A5=B6=E4=BA=A7=E9=87=8F=E5=88=86=E6=9E=90=E9=A1=B5?= =?UTF-8?q?=E9=9D=A2=E6=8A=A5=E9=94=99=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 5 +- .../sheepMilkAnalysis/sheepMilkAnalysis.js | 13 +- .../freshMilkTest/freshMilkTest/index.vue | 67 ++++++++-- .../milkProdclasses/milkProdclasses/index.vue | 118 ++++++++++++++---- .../rawMilkTest/rawMilkTest/index.vue | 39 +++++- .../dairyProducts/sheepMilkAnalysis/index.vue | 50 +++++--- .../yogurtTest/yogurtTest/index.vue | 67 ++++++++-- 7 files changed, 279 insertions(+), 80 deletions(-) diff --git a/package.json b/package.json index 4903716..bb90147 100644 --- a/package.json +++ b/package.json @@ -25,7 +25,7 @@ "echarts": "5.5.1", "element-china-area-data": "^6.1.0", "element-plus": "^2.7.6", - "file-saver": "2.0.5", + "file-saver": "^2.0.5", "fuse.js": "6.6.2", "js-beautify": "1.14.11", "js-cookie": "3.0.5", @@ -37,7 +37,8 @@ "vue-cropper": "1.1.1", "vue-router": "4.4.0", "vuedraggable": "4.1.0", - "vuex": "^4.0.2" + "vuex": "^4.0.2", + "xlsx": "^0.18.5" }, "devDependencies": { "@vitejs/plugin-vue": "5.0.5", diff --git a/src/api/dairyProducts/sheepMilkAnalysis/sheepMilkAnalysis.js b/src/api/dairyProducts/sheepMilkAnalysis/sheepMilkAnalysis.js index d65fbd0..03ee763 100644 --- a/src/api/dairyProducts/sheepMilkAnalysis/sheepMilkAnalysis.js +++ b/src/api/dairyProducts/sheepMilkAnalysis/sheepMilkAnalysis.js @@ -1,4 +1,3 @@ -// src/api/dairyProducts/sheepMilkAnalysis/sheepMilkAnalysis.js import request from '@/utils/request' // 查询羊奶产量分析列表(分页 + 条件) @@ -16,14 +15,4 @@ export function getSheepMilkAnalysis(sheepId) { url: '/dairyProducts/sheepMilkAnalysis/' + sheepId, method: 'get' }) -} - -// 导出羊奶产量分析 Excel -export function exportSheepMilkAnalysis(query) { - return request({ - url: '/dairyProducts/sheepMilkAnalysis/export', - method: 'get', - params: query, - responseType: 'blob' // 返回二进制流 - }) -} +} \ No newline at end of file diff --git a/src/views/dairyProducts/freshMilkTest/freshMilkTest/index.vue b/src/views/dairyProducts/freshMilkTest/freshMilkTest/index.vue index 4db694e..073ab7d 100644 --- a/src/views/dairyProducts/freshMilkTest/freshMilkTest/index.vue +++ b/src/views/dairyProducts/freshMilkTest/freshMilkTest/index.vue @@ -291,6 +291,9 @@ import { ref, reactive, onMounted } from 'vue'; import { listFreshMilkTest, getFreshMilkTest, delFreshMilkTest, addFreshMilkTest, updateFreshMilkTest } from "@/api/dairyProducts/freshMilkTest/freshMilkTest.js"; import { ElMessage, ElMessageBox } from 'element-plus'; +// 导入xlsx库和file-saver +import * as XLSX from 'xlsx'; +import { saveAs } from 'file-saver'; const freshMilkTestList = ref([]); const open = ref(false); @@ -304,6 +307,27 @@ const title = ref(""); const columnShowDialogVisible = ref(false); const freshMilkTestRef = ref(null); +// 列配置映射 +const columnConfig = [ + { prop: 'source', label: '来源' }, + { prop: 'datetime', label: '检测日期' }, + { prop: 'fat', label: '脂肪g/100g' }, + { prop: 'protein', label: '蛋白质g/100g' }, + { prop: 'nonFat', label: '非脂g/100g' }, + { prop: 'acidity', label: '酸度oT' }, + { prop: 'bacterialColony1', label: '菌落总数1' }, + { prop: 'bacterialColony2', label: '菌落总数2' }, + { prop: 'bacterialColony3', label: '菌落总数3' }, + { prop: 'bacterialColony4', label: '菌落总数4' }, + { prop: 'bacterialColony5', label: '菌落总数5' }, + { prop: 'coli', label: '大肠菌群(CFU/ml)' }, + { prop: 'lactoferrin', label: '乳铁蛋白(mg/L)' }, + { prop: 'ig', label: '免疫球蛋白(mg/L)' }, + { prop: 'commnet', label: '备注' }, + { prop: 'createBy', label: '创建人' }, + { prop: 'createTime', label: '创建时间' } +]; + // 默认显示的列 const selectedColumns = ref([ 'source', 'datetime', 'fat', 'protein', 'nonFat', 'acidity', @@ -545,17 +569,42 @@ function handleDelete(row) { }); } -/** 导出按钮操作 */ +/** 导出按钮操作 - 前端实现 */ function handleExport() { - const params = new URLSearchParams(); - for (const key in queryParams) { - if (queryParams[key] !== null && queryParams[key] !== undefined) { - params.append(key, queryParams[key]); - } - } + // 获取当前显示的列配置 + const visibleColumnsConfig = columnConfig.filter( + col => selectedColumns.value.includes(col.prop) + ); - const url = `/freshMilkTest/freshMilkTest/export?${params.toString()}`; - window.location.href = url; + // 准备导出数据 + const exportData = freshMilkTestList.value.map(item => { + const rowData = {}; + visibleColumnsConfig.forEach(col => { + // 特殊处理日期字段 + if (col.prop === 'datetime') { + rowData[col.label] = formatDate(item[col.prop]); + } else if (col.prop === 'createTime') { + rowData[col.label] = formatDateTime(item[col.prop]); + } else { + rowData[col.label] = item[col.prop]; + } + }); + return rowData; + }); + + // 创建工作簿和工作表 + const worksheet = XLSX.utils.json_to_sheet(exportData); + const workbook = XLSX.utils.book_new(); + XLSX.utils.book_append_sheet(workbook, worksheet, '鲜奶检验记录'); + + // 生成Excel文件并下载 + const excelBuffer = XLSX.write(workbook, { bookType: 'xlsx', type: 'array' }); + const blob = new Blob([excelBuffer], { + type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' + }); + + // 使用file-saver保存文件 + saveAs(blob, `鲜奶检验记录_${new Date().getTime()}.xlsx`); } // 初始化加载 diff --git a/src/views/dairyProducts/milkProdclasses/milkProdclasses/index.vue b/src/views/dairyProducts/milkProdclasses/milkProdclasses/index.vue index e6e0b37..bd6527f 100644 --- a/src/views/dairyProducts/milkProdclasses/milkProdclasses/index.vue +++ b/src/views/dairyProducts/milkProdclasses/milkProdclasses/index.vue @@ -1,16 +1,24 @@ - +