feat(5#6#易损件维护):

1.新增导入和下载模版方法
2.新增校验失败错误弹窗
This commit is contained in:
leiqiaozhen 2025-04-28 14:05:58 +08:00
parent b6b9a58f88
commit 2585d4ae4e
2 changed files with 205 additions and 2 deletions

View File

@ -52,4 +52,22 @@ export function delObj(id) {
url: iep('/z-wear-part-detail/' + id),
method: 'delete'
})
}
}
// 胶辊类型-导入
export function doJGImport(obj) {
return request({
url: iep('/z-wear-part-detail/doJGImport'),
method: 'post',
data: obj
})
}
// 过滤器类型-导入
export function doGLQImport(obj) {
return request({
url: iep('/z-wear-part-detail/doGLQImport'),
method: 'post',
data: obj
})
}

View File

@ -335,6 +335,56 @@
>
{{ $t('common.new') }}
</el-button>
<!-- 导入按钮 -->
<el-button
v-if="wear_part_add"
type="primary"
size="small"
icon="el-icon-upload"
@click="handleImport()"
>导入
</el-button>
<!-- 导入对话框 -->
<el-dialog title="易损件导入" :visible.sync="upload.open" width="400px" append-to-body>
<el-upload ref="upload" :limit="1" accept=".xlsx, .xls" action="#" :before-upload="beforeUpload"
:auto-upload="false" drag>
<i class="el-icon-upload"></i>
<div class="el-upload__text">
将文件拖到此处,或
<em>点击上传</em>
</div>
<div class="el-upload__tip text-center" slot="tip">
<span>仅允许导入xls、xlsx格式文件。</span>
<el-link type="primary" :underline="false" style="font-size:12px;vertical-align: baseline;"
@click="downExcelTemp('JG')" >下载胶辊类型模板
</el-link>
<span>&nbsp;&nbsp;</span>
<el-link type="primary" :underline="false" style="font-size:12px;vertical-align: baseline;"
@click="downExcelTemp('GLQ')" >下载过滤器类型模板
</el-link>
</div>
</el-upload>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitFileForm">确 定</el-button>
<el-button @click="upload.open = false">取 消</el-button>
</div>
</el-dialog>
<!--校验失败错误数据 对话框-->
<el-dialog title="校验失败数据" :visible.sync="errorVisible">
<el-table :data="errorData">
<el-table-column property="lineNum" label="行号" width="50"></el-table-column>
<el-table-column property="errors" label="错误描述" show-overflow-tooltip>
<template slot-scope="scope">
<el-tag type="danger" v-for="error in scope.row.errors" :key="error">{{ error }}
</el-tag>
</template>
</el-table-column>
</el-table>
</el-dialog>
<!-- 导出按钮 -->
<el-button
v-if="wear_part_export"
@ -394,7 +444,7 @@
</template>
<script>
import {fetchList, getZWearPartNoList,getDictItemValueList, addObj, putObj, delObj} from '@/api/mes/prd/wear-part'
import {fetchList, getZWearPartNoList,getDictItemValueList, addObj, putObj, delObj, doJGImport, doGLQImport} from '@/api/mes/prd/wear-part'
import { tableOption } from '@/views/mes/prd/wear-part/init'
import { mapGetters } from 'vuex'
import { setOrder } from '@/util/sort'
@ -408,6 +458,7 @@ import {clear} from "@/components/table-header-pop/render";
import {fetchItemList} from "@/api/admin/dict";
import customData from "@/components/custom-data/main.vue";
import {iep} from "@/api/prefix";
import {read, utils} from "xlsx";
export default {
name: 'wear-part',
@ -543,6 +594,13 @@ export default {
itemType: [],
itemStatus: [],
},
upload: {
open: false,
isUploading: false
},
errorVisible: false,
errorData: [],
}
},
created() {
@ -888,6 +946,133 @@ export default {
})
},
//导入
handleImport(){
this.upload.open = true;
},
// 导入确定
submitFileForm() {
let me = this;
if (isBlank(me.site)) {
me.$message.warning('站点丢失请刷新界面');
return false;
}
let params = me.$refs.upload.uploadFiles;
if (params == null || params == undefined || params.length < 1) {
me.$message.warning('请先上传文件');
return false;
} else {
me.$refs.upload.submit();
}
},
// 下载模版
downExcelTemp(importType) {
let fileName = '';
switch (importType) {
case 'JG':
fileName = '胶辊类型';
break;
case 'GLQ':
fileName = '过滤器类型';
break;
default:
break;
}
this.downBlobFile(iep("/z-wear-part-detail/downloadTemplate"), {importType: importType}, fileName + '导入模板.xlsx')
},
beforeUpload(file) {
const reader = new FileReader();
reader.onload = (e) => {
const data = new Uint8Array(e.target.result);
const workbook = read(data, {type: 'array'});
const worksheet = workbook.Sheets[workbook.SheetNames[0]];
const jsonData = utils.sheet_to_json(worksheet, {header: 1});
const rows = jsonData.slice(1);
let list = []
// 如果
if (rows.length < 2) {
this.$message.warning('导入数据:排除模版中的前2行数据后为空,请检查!');
return false;
} else {
// 如果是胶辊类型
if ((rows[0][0] == 'JG')) {
for (let i = 1; i < rows.length; i++) {
debugger
let row = {
type: rows[i][0],
status: rows[i][1],
wearPartNo: rows[i][2],
description: rows[i][3],
productLine: rows[i][4],
useTimes: rows[i][5],
startTime: rows[i][6],
storageLocation: rows[i][7],
supplier: rows[i][8],
remark: rows[i][9]
}
list.push(row);
}
let errorMsgList = [];
showLoading()
doJGImport(list).then(res => {
hideLoading()
errorMsgList = res.data.data
if(errorMsgList.length > 0){
this.errorData = errorMsgList
this.errorVisible = true
}else{
this.$message.success('导入成功')
this.upload.open = false
this.searchChange();
}
})
}
// 如果是过滤器类型 GLQ
if ((rows[0][0] == 'GLQ')) {
for (let i = 1; i < rows.length; i++) {
let row = {
type: rows[i][0],
status: rows[i][1],
wearPartNo: rows[i][2],
description: rows[i][3],
specification: rows[i][4],
productLine: rows[i][5],
useTimes: rows[i][6],
onlineDuration: rows[i][7],
storageLocation: rows[i][8],
supplier: rows[i][9],
remark: rows[i][10]
}
list.push(row);
}
let errorMsgList = [];
showLoading()
doGLQImport(list).then(res => {
hideLoading()
errorMsgList = res.data.data
if(errorMsgList.length > 0){
this.errorData = errorMsgList
this.errorVisible = true
}else{
this.$message.success('导入成功')
this.upload.open = false
this.searchChange();
}
})
}
}
};
reader.readAsArrayBuffer(file);
return false; // 取消默认的上传行为
},
// 导出
exportExcel() {
// 先检索后导出