Browse Source

2026-01-21

收货入库任务通知页面的入库明细页签,在行操作上加一个【标签导入】
master
fengyuan_yang 12 hours ago
parent
commit
956ed64fd1
  1. 14
      src/api/qc/Inbound_notification.js
  2. 41
      src/utils/httpRequest.js
  3. 32
      src/views/modules/qc/inboundNotification.vue
  4. 155
      src/views/modules/qc/label_import_upload.vue

14
src/api/qc/Inbound_notification.js

@ -1,4 +1,5 @@
import { createAPI } from "@/utils/httpRequest.js";
import { createAPI, createFormAPI } from "@/utils/httpRequest.js";
import httpRequest from '@/utils/httpRequest'
// 查询收获入库单
export const searchInboundNotification = data => createAPI('/inbound/searchInboundNotification','post',data)
@ -30,3 +31,14 @@ export const getInboundCategoryList = data => createAPI('/inbound/getInboundCate
// 查询部门列表
export const getDepartmentList = data => createAPI('/inbound/getDepartmentList','post',data)
// 标签导入
export const labelImport = data => createFormAPI('/inbound/labelImport','post',data)
// 下载标签导入模板
export const downloadLabelTemplate = () => {
return httpRequest({
url: httpRequest.adornUrl('/inbound/downloadLabelTemplate'),
method: 'get',
responseType: 'blob'
})
}

41
src/utils/httpRequest.js

@ -167,3 +167,44 @@ export const createAPI = (url, method, data, type) => {
...config
})
}
// ============================= FormData上传请求 =============================
const instanceForm = axios.create({
baseURL: (process.env.NODE_ENV !== 'production' && process.env.OPEN_PROXY ? '/proxyApi/' : window.SITE_CONFIG.baseUrl),
timeout: 10000 * 30,
withCredentials: true,
headers: {
'Content-Type': 'multipart/form-data'
}
})
/**
* 请求拦截
*/
instanceForm.interceptors.request.use(config => {
config.headers['token'] = Vue.cookie.get('token') // 请求头带上token
return config
}, error => {
return Promise.reject(error)
})
/**
* 响应拦截
*/
instanceForm.interceptors.response.use(response => {
if (response.data && response.data.code === 401) { // 401, token失效
clearLoginInfo()
router.push({ name: 'login' })
}
return response
}, error => {
return Promise.reject(error)
})
export const createFormAPI = (url, method, data) => {
return instanceForm({
url,
method,
data
})
}

32
src/views/modules/qc/inboundNotification.vue

@ -296,10 +296,11 @@
fixed="right"
header-align="center"
align="center"
width="90"
width="150"
label="操作">
<template slot-scope="scope">
<el-link style="cursor: pointer" @click="inboundDetailModal(scope.row)">入库明细</el-link>
<el-link v-if="currentRow.orderStatus === '草稿' || currentRow.orderStatus === '编辑中'" style="cursor: pointer; margin-left: 10px;" type="warning" @click="labelImportModal(scope.row)">标签导入</el-link>
</template>
</el-table-column>
</el-table>
@ -666,6 +667,9 @@
<Chooselist ref="baseList" @getBaseData="getBaseData"></Chooselist>
<!-- 标签导入组件 -->
<LabelImportUpload ref="labelImportUpload" @refreshPageTables="getInboundDetail"></LabelImportUpload>
</div>
</template>
@ -691,12 +695,14 @@
} from "@/api/qc/qc.js"
import {getTableDefaultListLanguage, getTableUserListLanguage} from "@/api/table.js"
import Chooselist from '@/views/modules/common/Chooselist_eam'
import LabelImportUpload from './label_import_upload'
import {userFavoriteList, saveUserFavorite, removeUserFavorite} from '@/api/userFavorite.js'
import excel from "@/utils/excel-util.js"
import {verifyData} from "@/api/chooselist/chooselist.js"
export default {
components: {
Chooselist,
LabelImportUpload,
},
data () {
return {
@ -1995,6 +2001,30 @@
}
})
},
//
labelImportModal (row) {
//
if (this.currentRow.orderStatus !== '草稿' && this.currentRow.orderStatus !== '编辑中') {
this.$message.warning('只有草稿或编辑中状态的单据才能导入标签!')
return
}
//
let currentData = {
site: this.currentRow.site,
buNo: this.currentRow.buNo,
orderNo: this.currentRow.orderNo,
orderType: this.currentRow.orderType,
orderStatus: this.currentRow.orderStatus,
relatedOrderNo: row.relatedOrderNo,
relatedOrderLineNo: row.relatedOrderLineNo,
partNo: row.partNo
}
//
this.$nextTick(() => {
this.$refs.labelImportUpload.init(currentData)
})
},
}
}
</script>

155
src/views/modules/qc/label_import_upload.vue

@ -0,0 +1,155 @@
<template>
<div class="customer-css">
<el-dialog :title="titleCon" :close-on-click-modal="false" :visible.sync="visible" width="420px" style="height: 520px;" class="customer-dialog">
<el-form :inline="true" label-position="top" label-width="80px">
<el-button type="primary" @click="downloadTemplate()">下载文件模板</el-button>
<el-row style="margin-top: 15px;">
<el-col :span="24">
<el-upload class="customer-upload" drag action="javascript:void(0);" ref="uploadFile" :limit="1" accept=".xlsx,.xls"
:before-upload="beforeUploadHandle" :on-change="onChange" :auto-upload="false" style="text-align: left;margin-left: 19px">
<i class="el-icon-upload"></i>
<div class="el-upload__text">将文件拖到此处<em>点击上传</em></div>
<div class="el-upload__tip" slot="tip">只能上传xlsx/xls文件</div>
</el-upload>
</el-col>
</el-row>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button type="primary" :loading="importLoading" @click="saveUploadFile()">导入</el-button>
<el-button @click="closeDialog">关闭</el-button>
</span>
</el-dialog>
</div>
</template>
<script>
import { labelImport, downloadLabelTemplate } from "@/api/qc/Inbound_notification.js"
export default {
data() {
return {
titleCon: '标签导入',
visible: false,
fileList: [],
importLoading: false,
pageData: {
site: '',
buNo: '',
orderNo: '',
orderType: '',
orderStatus: '',
relatedOrderNo: '',
relatedOrderLineNo: '',
partNo: ''
},
}
},
methods: {
//
init (currentRow) {
this.pageData = JSON.parse(JSON.stringify(currentRow))
this.fileList = []
this.visible = true
//
this.$nextTick(() => {
if (this.$refs.uploadFile) {
this.$refs.uploadFile.clearFiles()
}
})
},
//
beforeUploadHandle (file) {
let extName = file.name.substring(file.name.lastIndexOf('.')).toLowerCase()
if (!(extName === '.xlsx' || extName === '.xls')) {
this.$message.error('数据导入失败,请选择正确的xlsx或xls模板文件')
return false
}
return true
},
//
onChange (file, fileList) {
this.fileList = fileList
},
// modal
closeDialog () {
this.fileList = []
if (this.$refs.uploadFile) {
this.$refs.uploadFile.clearFiles()
}
this.visible = false
},
//
saveUploadFile () {
//
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("site", this.pageData.site)
formData.append("buNo", this.pageData.buNo)
formData.append("orderNo", this.pageData.orderNo)
formData.append("orderType", this.pageData.orderType)
formData.append("orderStatus", this.pageData.orderStatus)
formData.append("relatedOrderNo", this.pageData.relatedOrderNo)
formData.append("relatedOrderLineNo", this.pageData.relatedOrderLineNo)
formData.append("partNo", this.pageData.partNo)
this.importLoading = true
labelImport(formData).then(({data}) => {
if (data.code === 0) {
this.$message.success(data.msg || '导入成功')
//
this.$refs.uploadFile.clearFiles()
this.fileList = []
this.visible = false
//
this.$emit('refreshPageTables')
} else {
this.$alert(data.msg || '导入失败', '错误', {
confirmButtonText: '确定',
dangerouslyUseHTMLString: true
})
}
}).catch((error) => {
this.$message.error('导入失败,请检查文件格式是否正确')
}).finally(() => {
this.importLoading = false
})
},
//
downloadTemplate () {
downloadLabelTemplate().then((response) => {
const blob = new Blob([response.data], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' })
const fileName = '标签导入模板.xlsx'
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)
}).catch((error) => {
this.$message.error('下载模板失败,请联系管理员')
})
}
}
}
</script>
<style scoped lang="scss">
.customer-upload {
width: 100%;
}
/deep/ .el-upload-dragger {
width: 350px;
}
</style>
Loading…
Cancel
Save