From 47d096ad029b67093cd17fd41b905833f9413c61 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=A7=9C=E9=9B=AA?= <1617763071@qq.com>
Date: Thu, 19 Mar 2026 16:13:01 +0800
Subject: [PATCH] =?UTF-8?q?=E5=A4=96=E5=8D=8F=E8=BF=87=E7=A8=8B=E8=A1=A8?=
=?UTF-8?q?=E5=A4=84=E7=90=86?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/api/exemption/exemption.js | 22 +-
src/api/oem/oem.js | 42 ++++
src/components/basic-import/main.vue | 77 +++++-
src/views/exemption/components/addDialog.vue | 98 +++++---
.../exemption/components/checkDialog.vue | 3 -
src/views/exemption/index.vue | 89 +------
.../oem/proTask/components/oemMaintenance.vue | 236 +++++++++++++++---
src/views/oem/proTask/inPlantProcessOem.vue | 26 +-
src/views/oem/proTask/index.vue | 2 +-
9 files changed, 420 insertions(+), 175 deletions(-)
create mode 100644 src/api/oem/oem.js
diff --git a/src/api/exemption/exemption.js b/src/api/exemption/exemption.js
index d3c1c35..60ae69e 100644
--- a/src/api/exemption/exemption.js
+++ b/src/api/exemption/exemption.js
@@ -63,5 +63,23 @@ export const userList = (current, size, params) => {
},
});
};
-
-
+export const getUserPage = (current, size, params) => {
+ return request({
+ url: '/blade-system/user/page',
+ method: 'get',
+ params: {
+ ...params,
+ current,
+ size,
+ },
+ });
+};
+ export const getPostItem = userId => {
+ return request({
+ url: '/blade-system/user/getPost',
+ method: 'get',
+ params: {
+ userId,
+ },
+ });
+};
diff --git a/src/api/oem/oem.js b/src/api/oem/oem.js
new file mode 100644
index 0000000..ec53586
--- /dev/null
+++ b/src/api/oem/oem.js
@@ -0,0 +1,42 @@
+
+import request from '@/axios';
+
+export const pageList = (current, size, params) => {
+ return request({
+ url: '/blade-desk/mesOemSpecialPro/page',
+ method: 'get',
+ params: {
+ ...params,
+ current,
+ size,
+ },
+ });
+};
+
+export const saveItem = params => {
+ return request({
+ url: '/blade-desk/mesOemSpecialPro/save',
+ method: 'post',
+ data: params,
+ });
+};
+export const updateItem = params => {
+ return request({
+ url: '/blade-desk/mesOemSpecialPro/update',
+ method: 'post',
+ data: params,
+ });
+};
+
+
+ export const removeItem = ids => {
+ return request({
+ url: '/blade-desk/mesOemSpecialPro/remove',
+ method: 'post',
+ params: {
+ ids,
+ },
+ });
+};
+
+
diff --git a/src/components/basic-import/main.vue b/src/components/basic-import/main.vue
index 26513f3..565f773 100644
--- a/src/components/basic-import/main.vue
+++ b/src/components/basic-import/main.vue
@@ -74,6 +74,11 @@ export default {
}
}
},
+ watch: {
+ isShow(newVal) {
+ this.importBox = newVal;
+ }
+ },
mounted(){
console.log('isShowImport=================',this.isShow)
this.importBox = this.isShow
@@ -84,10 +89,74 @@ export default {
this.$emit('closeDialog',val);
},
handleTemplate() {
- exportBlob(
- `${this.templateUrl}?${this.website.tokenHeader}=${getToken()}`
- ).then(res => {
- downloadXls(res.data, this.templateName);
+ const url = `${this.templateUrl}?${this.website.tokenHeader}=${getToken()}`;
+ console.log('下载模板URL:', url);
+ console.log('模板文件名:', this.templateName);
+
+ exportBlob(url).then(res => {
+ console.log('API返回状态:', res.status);
+ console.log('res.data类型:', typeof res.data);
+ console.log('res.data instanceof Blob:', res.data instanceof Blob);
+ console.log('res.data size:', res.data?.size);
+ console.log('res.data type:', res.data?.type);
+
+ if (!res.data || res.data.size === 0) {
+ this.$message.error('下载失败,文件内容为空');
+ return;
+ }
+
+ // 验证文件内容是否是有效的Excel文件
+ this.validateExcelBlob(res.data).then(isValid => {
+ if (!isValid) {
+ console.error('下载的文件不是有效的Excel文件');
+ this.$message.error('下载的文件格式不正确');
+ return;
+ }
+
+ // 确保文件名有正确的扩展名
+ let fileName = this.templateName;
+ if (!fileName.endsWith('.xlsx') && !fileName.endsWith('.xls')) {
+ fileName += '.xlsx';
+ }
+
+ console.log('开始下载文件:', fileName);
+ downloadXls(res.data, fileName);
+ this.$message.success('模板下载成功');
+ }).catch(error => {
+ console.error('验证文件失败:', error);
+ // 即使验证失败也尝试下载
+ let fileName = this.templateName;
+ if (!fileName.endsWith('.xlsx') && !fileName.endsWith('.xls')) {
+ fileName += '.xlsx';
+ }
+ downloadXls(res.data, fileName);
+ this.$message.success('模板下载成功');
+ });
+ }).catch(error => {
+ console.error('下载模板失败:', error);
+ this.$message.error('下载失败,请检查网络或稍后重试');
+ });
+ },
+ validateExcelBlob(blob) {
+ return new Promise((resolve) => {
+ const reader = new FileReader();
+ reader.onloadend = (e) => {
+ const arr = new Uint8Array(e.target.result);
+ const header = Array.from(arr.slice(0, 8)).map(b => b.toString(16).padStart(2, '0')).join(' ');
+ console.log('文件头 (前8字节):', header);
+
+ // 检查XLSX (ZIP格式): 50 4B 03 04
+ const isXlsx = header.startsWith('50 4b 03 04');
+ // 检查XLS: D0 CF 11 E0 A1 B1 1A E1
+ const isXls = header.toLowerCase().startsWith('d0 cf 11 e0 a1 b1 1a e1');
+
+ console.log('是XLSX格式:', isXlsx);
+ console.log('是XLS格式:', isXls);
+
+ resolve(isXlsx || isXls);
+ };
+ reader.onerror = () => resolve(true); // 如果读取失败,假设文件是有效的
+ reader.readAsArrayBuffer(blob.slice(0, 8));
});
},
uploadAfter(res, done, loading, column) {
diff --git a/src/views/exemption/components/addDialog.vue b/src/views/exemption/components/addDialog.vue
index 00d3c05..8c6fced 100644
--- a/src/views/exemption/components/addDialog.vue
+++ b/src/views/exemption/components/addDialog.vue
@@ -24,7 +24,7 @@
diff --git a/src/views/oem/proTask/components/oemMaintenance.vue b/src/views/oem/proTask/components/oemMaintenance.vue
index 5c6079a..20e5c10 100644
--- a/src/views/oem/proTask/components/oemMaintenance.vue
+++ b/src/views/oem/proTask/components/oemMaintenance.vue
@@ -8,6 +8,8 @@
v-model:page="page"
ref="crud"
@row-del="rowDel"
+ @row-save="rowSave"
+ @row-update="rowUpdate"
@search-change="searchChange"
@search-reset="searchReset"
@selection-change="selectionChange"
@@ -24,22 +26,24 @@
导入
-
+
diff --git a/src/views/oem/proTask/inPlantProcessOem.vue b/src/views/oem/proTask/inPlantProcessOem.vue
index e7c53fc..7aecc5a 100644
--- a/src/views/oem/proTask/inPlantProcessOem.vue
+++ b/src/views/oem/proTask/inPlantProcessOem.vue
@@ -75,22 +75,26 @@ export default {
searchMenuPosition: 'right',
align: 'center',
column: [
- {
+ {
label: '外协厂商',
- prop: 'tbCode',
+ prop: 'ocId',
+ search: true,
+ search: true,
sortable: true,
filter: true,
span: 12,
- search: true,
+ headerAlign: 'center',
+ align: 'left',
type: 'select',
- dicData: [
- {
- label: '厂商一',
- },
- {
- label: '厂商2',
- },
- ],
+ dicUrl:"/api/blade-desk/BA/Oem/listForSelect",
+ props:{
+ label:"ocName",
+ value:"id",
+ res:"data"
+ },
+ formatter: (row, value, label, column) => {
+ return row.oemName || value || '-';
+ }
},
{
label: '任务号',
diff --git a/src/views/oem/proTask/index.vue b/src/views/oem/proTask/index.vue
index 60a4651..3a99e50 100644
--- a/src/views/oem/proTask/index.vue
+++ b/src/views/oem/proTask/index.vue
@@ -6,7 +6,7 @@
-->
-
+