From 18d9353c6994e6823cdb31d39ba88e67ee17875f Mon Sep 17 00:00:00 2001 From: shenzhouyu Date: Thu, 7 May 2026 13:55:54 +0800 Subject: [PATCH] =?UTF-8?q?=E9=87=87=E9=9B=86=E5=92=8C=E5=88=80=E6=A8=A1?= =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/qc/dmBasic.js | 8 ++ src/views/modules/dm/DMQcPartAttribute.vue | 115 ++++++++++++++++----- src/views/modules/qc/IPQCResultEntry.vue | 2 +- 3 files changed, 99 insertions(+), 26 deletions(-) diff --git a/src/api/qc/dmBasic.js b/src/api/qc/dmBasic.js index 305ee50..720e9fa 100644 --- a/src/api/qc/dmBasic.js +++ b/src/api/qc/dmBasic.js @@ -75,6 +75,14 @@ export const dmsearchToolHeader = data => createAPI(`/pms/dm/basic/dmsearchToolH export const dmPartAttributeUploadExcel = data => createAPI(`/pms/dm/basic/dmPartAttributeUploadExcel`, "post", data); export const uploadFamilyAttributeExcel = data => createAPI(`/pms/dm/basic/uploadFamilyAttributeExcel`, "post", data); +/** 图纸清单(MES upload_file_address;访问地址由后端按 mes-url 主机 + 库 url 拼接) */ +export const dmMesToolDrawingList = data => createAPI(`/pms/dm/basic/dmMesToolDrawingList`, "post", data); +export const dmMesToolDrawingDelete = data => createAPI(`/pms/dm/basic/dmMesToolDrawingDelete`, "post", data); +/** 图纸预览:后端流式代理 MES 文件(POST + blob,与项目其它下载一致) */ +export const dmMesToolDrawingPreview = (id, download) => createAPI(`/pms/dm/basic/dmMesToolDrawingPreview`, 'get', { id, download: download ? 'true' : 'false' }, 'download') +/** 图纸下载:后端流式代理 MES 文件(POST + blob) */ +export const dmMesToolDrawingDownload = (id, download) => createAPI(`/pms/dm/basic/dmMesToolDrawingPreview`, 'get', { id, download: download ? 'true' : 'false' }, 'download') + // 兼容导出(旧 DM 页面仍可能引用旧命名) export const searchPartInfo = dmToolInfoSearch; export const uploadPartAttributeExcel = dmPartAttributeUploadExcel; diff --git a/src/views/modules/dm/DMQcPartAttribute.vue b/src/views/modules/dm/DMQcPartAttribute.vue index bcd2178..cf783c1 100644 --- a/src/views/modules/dm/DMQcPartAttribute.vue +++ b/src/views/modules/dm/DMQcPartAttribute.vue @@ -373,10 +373,10 @@ - + + - + @@ -453,12 +454,14 @@ import { getSiteAndBuByUserName, dmToolInfoSearch, dmsearchToolHeader, + dmMesToolDrawingList, + dmMesToolDrawingDelete, + dmMesToolDrawingPreview, + dmMesToolDrawingDownload, } from "@/api/qc/dmBasic.js"; import { getTableDefaultListLanguage, getTableUserListLanguage } from "@/api/table.js"; import Chooselist from "@/views/modules/common/Chooselist_eam"; -import { getFileContentList, downLoadObjectFile } from "@/api/eam/eam_object_list.js"; import { userFavoriteList, saveUserFavorite, removeUserFavorite } from "@/api/userFavorite.js"; -import { deleteObjectFile } from "@/api/eam/eam.js"; import dmUpload from "./dm_upload.vue"; import dmSOPUploadFile from "./dm_SOP_upload_file.vue"; @@ -917,7 +920,7 @@ export default { columnProp: "orderRef3", headerAlign: "center", align: "center", - columnLabel: "检验类型", + columnLabel: "文档类别", columnHidden: false, columnImage: false, columnSortable: true, @@ -1443,14 +1446,17 @@ export default { this.authDetail = !detailFlag; this.authFile = !fileFlag; }, - // SOP 文件列表相关:仍复用 EAM 文件接口 sopFileList(row) { this.sopData = { site: row.site, buNo: row.buNo, partNo: row.partNo, inspectionTypeNo: "" }; this.getFileContentList(); }, getFileContentList() { - const tempData = { orderRef1: this.sopData.site, orderRef2: this.sopData.partNo, orderRef3: this.sopData.inspectionTypeNo, orderRef4: this.sopData.buNo }; - getFileContentList(tempData).then(({ data }) => { + const tempData = { + site: this.sopData.site, + partNo: this.sopData.partNo, + inspectionTypeNo: this.sopData.inspectionTypeNo, + }; + dmMesToolDrawingList(tempData).then(({ data }) => { this.sopList = data && data.code === 200 ? data.rows : []; }); this.sopFileModelFlag = true; @@ -1467,24 +1473,83 @@ export default { }; this.$nextTick(() => this.$refs.qcSOPUploadFile.init(currentData)); }, + previewDrawingFile(row) { + if (!row.id) { + this.$message.warning("文件标识无效"); + return; + } + dmMesToolDrawingPreview(row.id,false) + .then(({ data, headers }) => { + if (!data || !data.size) { + this.$message.warning("未获取到文件内容"); + return; + } + const contentType = (headers && (headers["content-type"] || headers["Content-Type"])) || ""; + if (contentType.includes("text/html")) { + this.$message.error("登录已过期或无权访问,请刷新后重试"); + return; + } + if (contentType.includes("application/json")) { + const reader = new FileReader(); + reader.onload = () => { + try { + const j = JSON.parse(reader.result); + this.$message.error((j && j.msg) || "预览失败"); + } catch (e) { + this.$message.error("预览失败"); + } + }; + reader.readAsText(data); + return; + } + const blob = new Blob([data], { type: contentType || "application/octet-stream" }); + const fileURL = URL.createObjectURL(blob); + window.open(fileURL, "_blank"); + }) + .catch(() => { + this.$message.error("预览失败,请检查 MES 鉴权或网络"); + }); + }, downloadFile(row) { - downLoadObjectFile(row).then(({ data }) => { - const blob = new Blob([data], { type: "application/octet-stream" }); - const fileName = row.fileName; - const linkNode = document.createElement("a"); - linkNode.download = fileName; - linkNode.style.display = "none"; - linkNode.href = URL.createObjectURL(blob); - document.body.appendChild(linkNode); - linkNode.click(); - URL.revokeObjectURL(linkNode.href); - document.body.removeChild(linkNode); - }); + if (!row.id) { + this.$message.warning("文件标识无效"); + return; + } + dmMesToolDrawingDownload(row.id,true) + .then(({ data, headers }) => { + const contentType = (headers && (headers["content-type"] || headers["Content-Type"])) || ""; + if (contentType.includes("application/json")) { + const reader = new FileReader(); + reader.onload = () => { + try { + const j = JSON.parse(reader.result); + this.$message.error((j && j.msg) || "下载失败"); + } catch (e) { + this.$message.error("下载失败"); + } + }; + reader.readAsText(data); + return; + } + const blob = new Blob([data], { type: contentType || "application/octet-stream" }); + const fileName = row.fileName || "download"; + const linkNode = document.createElement("a"); + linkNode.download = fileName; + linkNode.style.display = "none"; + linkNode.href = URL.createObjectURL(blob); + document.body.appendChild(linkNode); + linkNode.click(); + URL.revokeObjectURL(linkNode.href); + document.body.removeChild(linkNode); + }) + .catch(() => { + this.$message.error("下载失败,请检查 MES 服务或网络"); + }); }, deleteFile(row) { this.$confirm("确定要删除此文件?", "提示", { confirmButtonText: "确定", cancelButtonText: "取消", type: "warning" }) .then(() => { - deleteObjectFile(row).then(({ data }) => { + dmMesToolDrawingDelete({ id: row.id }).then(({ data }) => { if (data && data.code === 0) { this.getFileContentList(); this.$message({ message: "操作成功", type: "success", duration: 1500, onClose: () => {} }); diff --git a/src/views/modules/qc/IPQCResultEntry.vue b/src/views/modules/qc/IPQCResultEntry.vue index 13f9ba2..f90ff31 100644 --- a/src/views/modules/qc/IPQCResultEntry.vue +++ b/src/views/modules/qc/IPQCResultEntry.vue @@ -2593,7 +2593,7 @@ bu: row.buNo, itemNo: row.itemNo, inspectionNo: row.inspectionNo, - order: row.orderNo, + orderNo: row.orderNo, } getCollectorDataByItem(param).then(({data}) => { if (data.code === 0 && data.rows.length > 0) {