diff --git a/src/api/qc/qc.js b/src/api/qc/qc.js
index 381e85b..c41f6cb 100644
--- a/src/api/qc/qc.js
+++ b/src/api/qc/qc.js
@@ -5,6 +5,8 @@ export const qcMethodSearch = data => createAPI(`/pms/qc/qcMethodSearch`,'post',
export const qcMethodSave = data => createAPI(`/pms/qc/qcMethodSave`,'post',data)
export const qcMethodUpdate = data => createAPI(`/pms/qc/qcMethodUpdate`,'post',data)
export const qcMethodDelete = data => createAPI(`/pms/qc/qcMethodDelete`,'post',data)
+export const uploadMethodExcel = data => createAPI(`/pms/qc/uploadMethodExcel`,'post',data)
+export const downloadQcImportTemplate = (flag, site) => createAPI(`/pms/qc/downloadQcImportTemplate?flag=${flag}&site=${encodeURIComponent(site || '')}`,'post','download')
// ===================================== 检验项目 =====================================
export const qcItemSearch = data => createAPI(`/pms/qc/qcItemSearch`,'post',data)
diff --git a/src/views/modules/qc/qcItem.vue b/src/views/modules/qc/qcItem.vue
index 3d90d5d..27a4bc9 100644
--- a/src/views/modules/qc/qcItem.vue
+++ b/src/views/modules/qc/qcItem.vue
@@ -37,7 +37,7 @@
新增
-
+ 导入
查询
新增
+ 导入
关闭
+
@@ -163,7 +165,11 @@
} from "@/api/qc/qc.js"
import {getTableDefaultListLanguage, getTableUserListLanguage,updateColumnSize} from "@/api/table.js"
import {userFavoriteList, saveUserFavorite, removeUserFavorite} from '@/api/userFavorite.js'
+ import qcUpload from "./qc_upload"
export default {
+ components: {
+ qcUpload
+ },
data () {
return {
columnsProp:['createBy', 'updateBy'],
@@ -670,6 +676,17 @@
return s
},
+ qcUpload () {
+ let currentData = {
+ flag: 'method',
+ createBy: this.$store.state.user.name,
+ site: this.$store.state.user.site,
+ }
+ this.$nextTick(() => {
+ this.$refs.qcUpload.init(currentData)
+ })
+ },
+
// 动态列开始 获取 用户保存的 格式列
async getTableUserColumn (tableId, columnId) {
let queryTableUser = {
diff --git a/src/views/modules/qc/qcTemplate.vue b/src/views/modules/qc/qcTemplate.vue
index dc37d60..f6e476c 100644
--- a/src/views/modules/qc/qcTemplate.vue
+++ b/src/views/modules/qc/qcTemplate.vue
@@ -38,7 +38,7 @@
新增
-
+ 导入
-
+
下载文件模板
-
-
+
+
+ v-for="i in userBuList"
+ :key="i.buNo"
+ :label="i.sitename"
+ :value="i.buNo">
{{ i.sitename }}
{{ i.buDesc }}
@@ -20,7 +20,7 @@
+ :before-upload="beforeUploadHandle" :on-change="onChange" :on-remove="onRemove" :auto-upload="false" style="text-align: left;">
将文件拖到此处,或点击上传
@@ -28,7 +28,7 @@
@@ -39,14 +39,14 @@
import {
uploadExcel, // 导入项目文件
uploadTemplateExcel, // 导入模板文件
+ uploadMethodExcel, // 导入方法文件
uploadPartAttributeExcel, // 导入物料属性文件
uploadFamilyAttributeExcel, // 导入类别属性文件
+ downloadQcImportTemplate,
queryFileId, // 查询文件ID
getSiteAndBuByUserName
} from "@/api/qc/qc.js"
import { downLoadObjectFile } from '@/api/eam/eam_object_list.js'
-import axios from 'axios'
-import Vue from 'vue'
export default {
data() {
return {
@@ -54,7 +54,8 @@ export default {
visible: false,
fileList: [],
bu: '',
- userBuList:[],
+ userBuList: [],
+ saveLoading: false,
pageData: {
flag: '',
createBy: '',
@@ -62,11 +63,21 @@ export default {
},
}
},
+ computed: {
+ isMasterImport() {
+ return ['item', 'method', 'template'].indexOf(this.pageData.flag) !== -1
+ },
+ needSelectBu() {
+ return !this.isMasterImport
+ },
+ importSite() {
+ return this.pageData.site || (this.$store.state.user && this.$store.state.user.site) || ''
+ }
+ },
created(){
this.getSiteAndBu();
},
methods: {
- // 获取用户的bu
getSiteAndBu () {
let tempData = {
username: this.$store.state.user.name,
@@ -77,103 +88,136 @@ export default {
}
})
},
- //初始化组件的参数
init(currentRow) {
- // 获得类别
this.pageData = JSON.parse(JSON.stringify(currentRow))
- //打开页面
- this.visible = true;
+ this.fileList = []
+ this.bu = ''
+ this.saveLoading = false
+ this.visible = true
+ this.$nextTick(() => {
+ if (this.$refs.uploadFile) {
+ this.$refs.uploadFile.clearFiles()
+ }
+ })
},
- // 上传之前
beforeUploadHandle(file) {
- let extName = file[0].name.substring(file[0].name.lastIndexOf('.')).toLowerCase()
+ const name = file && file.name ? file.name : ''
+ let extName = name.substring(name.lastIndexOf('.')).toLowerCase()
if (!(extName === '.xlsx' || extName === '.xls')) {
this.$message.error('数据导入失败,请选择正确的xlsx模板文件')
return false
}
},
- /*选择上传文件时*/
- onChange(file){
- this.fileList.push(file);
+ onChange(file, fileList) {
+ this.fileList = fileList.slice(-1)
+ },
+ onRemove() {
+ this.fileList = []
},
- /*关闭modal*/
closeDialog(){
- this.fileList = [];
- // 刷新报工的页面
+ this.fileList = []
+ this.bu = ''
+ this.saveLoading = false
this.$emit('refreshPageTables');
- // 关闭当前的页面
this.visible = false;
},
- /*保修当前的数据*/
+ showImportError(msg) {
+ const text = msg || '导入失败'
+ if (text.indexOf('
') !== -1 || text.indexOf('
') !== -1) {
+ this.$alert(text, '导入失败', {
+ confirmButtonText: '确定',
+ dangerouslyUseHTMLString: true
+ })
+ } else {
+ this.$message.warning(text)
+ }
+ },
+ handleImportResult(data) {
+ if (data && data.code === 0) {
+ this.$message.success(data.msg || '导入成功')
+ if (this.$refs.uploadFile) {
+ this.$refs.uploadFile.clearFiles()
+ }
+ this.closeDialog()
+ } else {
+ this.showImportError(data && data.msg)
+ }
+ },
saveUploadFile(){
- if (this.bu==''||this.bu == null){
+ if (this.needSelectBu && (this.bu === '' || this.bu == null)){
this.$message.warning("请选择BU!");
return false;
}
- /*判断文件是否上传*/
- if(null == this.fileList || 0 == this.fileList.length){
+ if (this.isMasterImport && !this.importSite) {
+ this.$message.warning("未获取到当前用户工厂");
+ return false;
+ }
+ if (this.fileList == null || this.fileList.length === 0){
this.$message.error("请先上传文件!");
return false;
}
const formData = new FormData();
formData.append("file", this.fileList[0].raw);
formData.append("createBy", this.pageData.createBy);
- formData.append("site", this.bu.split('_')[0]);
+ if (this.isMasterImport) {
+ formData.append("site", this.importSite);
+ } else if (this.pageData.flag === 'partAttribute') {
+ formData.append("site", this.bu);
+ } else {
+ formData.append("site", this.bu.split('_')[0]);
+ }
+ let request
if (this.pageData.flag === 'item'){
- uploadExcel(formData).then(({data}) => {
- if (data.code === 0) {
- this.$message.success(data.msg);
- // 清空文件上传记录
- this.$refs.uploadFile.clearFiles();
- // 关闭窗口并刷新页面
- this.closeDialog();
- }else {
- this.$message.warning(data.msg);
- }
- })
+ request = uploadExcel(formData)
+ } else if (this.pageData.flag === 'method'){
+ request = uploadMethodExcel(formData)
} else if (this.pageData.flag === 'template'){
- formData.set('site',this.bu)
- uploadTemplateExcel(formData).then(({data}) => {
- if (data.code === 0) {
- this.$message.success(data.msg);
- // 清空文件上传记录
- this.$refs.uploadFile.clearFiles();
- // 关闭窗口并刷新页面
- this.closeDialog();
- }else {
- this.$message.warning(data.msg);
- }
- })
- }else if (this.pageData.flag === 'partAttribute'){
- formData.set('site',this.bu)
- uploadPartAttributeExcel(formData).then(({data}) => {
- if (data.code === 0) {
- this.$message.success(data.msg);
- // 清空文件上传记录
- this.$refs.uploadFile.clearFiles();
- // 关闭窗口并刷新页面
- this.closeDialog();
- }else {
- this.$message.warning(data.msg);
- }
- })
- }else if (this.pageData.flag === 'familyAttribute'){
- uploadFamilyAttributeExcel(formData).then(({data}) => {
- if (data.code === 0) {
- this.$message.success(data.msg);
- // 清空文件上传记录
- this.$refs.uploadFile.clearFiles();
- // 关闭窗口并刷新页面
- this.closeDialog();
- }else {
- this.$message.warning(data.msg);
- }
- })
+ request = uploadTemplateExcel(formData)
+ } else if (this.pageData.flag === 'partAttribute'){
+ request = uploadPartAttributeExcel(formData)
+ } else if (this.pageData.flag === 'familyAttribute'){
+ request = uploadFamilyAttributeExcel(formData)
+ } else {
+ this.$message.warning('不支持的导入类型')
+ return false
}
- this.bu = '';
+ this.saveLoading = true
+ request.then(({data}) => {
+ this.saveLoading = false
+ this.handleImportResult(data)
+ }).catch(() => {
+ this.saveLoading = false
+ this.$message.error('导入失败,请检查文件格式和内容')
+ })
+ },
+ bindDownloadBlob(data, fileName) {
+ const blob = new Blob([data], {type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"})
+ 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)
},
- // 下载
async downloadFile(){
+ const dynamicFlags = ['item', 'template', 'method']
+ if (dynamicFlags.indexOf(this.pageData.flag) !== -1) {
+ const fileNameMap = {
+ item: '检验项目导入模板.xlsx',
+ template: '检验模板导入模板.xlsx',
+ method: '检验方法导入模板.xlsx'
+ }
+ if (!this.importSite) {
+ this.$message.warning("未获取到当前用户工厂")
+ return
+ }
+ await downloadQcImportTemplate(this.pageData.flag, this.importSite).then(({data}) => {
+ this.bindDownloadBlob(data, fileNameMap[this.pageData.flag])
+ })
+ return
+ }
let file = {
id: 0,
fileName: ''
@@ -182,80 +226,33 @@ export default {
orderRef1: '',
orderRef2: ''
}
- if(this.pageData.flag === 'item'){ // 检验项目
- tempData.orderRef1 = 'qc';
- tempData.orderRef2 = 'itemFormat';
- await queryFileId(tempData).then(({data}) => {
- if (data && data.code === 0) {
- file.id = data.data.id
- file.fileName = data.data.fileName
- } else {
- this.$alert(data.msg, '错误', {
- confirmButtonText: '确定'
- })
- }
- })
- }else if (this.pageData.flag === 'template'){ // 检验模板
- tempData.orderRef1 = 'qc';
- tempData.orderRef2 = 'templateFormat';
- await queryFileId(tempData).then(({data}) => {
- if (data && data.code === 0) {
- file.id = data.data.id
- file.fileName = data.data.fileName
- } else {
- this.$alert(data.msg, '错误', {
- confirmButtonText: '确定'
- })
- }
- })
- }else if (this.pageData.flag === 'partAttribute'){ // 物料属性设置
+ if (this.pageData.flag === 'partAttribute'){
tempData.orderRef1 = 'qc';
tempData.orderRef2 = 'partAttributeFormat';
- await queryFileId(tempData).then(({data}) => {
- if (data && data.code === 0) {
- file.id = data.data.id
- file.fileName = data.data.fileName
- } else {
- this.$alert(data.msg, '错误', {
- confirmButtonText: '确定'
- })
- }
- })
- }else if (this.pageData.flag === 'familyAttribute'){ // 类别属性设置
+ } else if (this.pageData.flag === 'familyAttribute'){
tempData.orderRef1 = 'qc';
tempData.orderRef2 = 'familyAttributeFormat';
- await queryFileId(tempData).then(({data}) => {
- if (data && data.code === 0) {
- file.id = data.data.id
- file.fileName = data.data.fileName
- } else {
- this.$alert(data.msg, '错误', {
- confirmButtonText: '确定'
- })
- }
- })
+ } else {
+ this.$message.warning('未找到对应的导入模板')
+ return
+ }
+ await queryFileId(tempData).then(({data}) => {
+ if (data && data.code === 0) {
+ file.id = data.data.id
+ file.fileName = data.data.fileName
+ } else {
+ this.$alert(data.msg, '错误', {
+ confirmButtonText: '确定'
+ })
+ }
+ })
+ if (!file.id) {
+ return
}
await downLoadObjectFile(file).then(({data}) => {
- // 不限制文件下载类型
- const blob = new Blob([data], {type: "application/octet-stream"})
- // 下载文件名称
- const fileName = file.fileName
- // a标签下载
- const linkNode = document.createElement('a')
- // a标签的download属性规定下载文件的名称
- linkNode.download = fileName
- linkNode.style.display = 'none'
- // 生成一个Blob URL
- linkNode.href = URL.createObjectURL(blob)
- document.body.appendChild(linkNode)
- // 模拟在按钮上的一次鼠标单击
- linkNode.click()
- // 释放URL 对象
- URL.revokeObjectURL(linkNode.href)
- document.body.removeChild(linkNode)
- })
+ this.bindDownloadBlob(data, file.fileName)
+ })
},
-
}
}