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 @@
-->
-
+