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