202501-Wms-Kate-Wuxi/dev_wms_client/src/layout/kittingList.vue
liang f22b4ddb90 1. 增加loading
2. 增加盘点查询界面
3. 增加配料单删除
2025-06-09 17:42:40 +08:00

386 lines
13 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<el-config-provider :locale="zhCn">
<el-container class="content">
<div class="work-area">
<fieldset class="search-area">
<el-form ref="kittingBomQueryFormRef" :model="kittingBomQueryFormEntity"
:label-position="labelPosition" label-width="158px" style="max-width: 100%" status-icon>
<div style="display: flex;justify-content: space-between;">
<el-row>
<el-form-item label="配料单类型">
<el-select-v2 style="width: 196px" v-model="kittingBomQueryFormEntity.bomType"
placeholder="配料单类型"
:options="kittingBomTypeOptions" @change="search()"></el-select-v2>
</el-form-item>
<el-form-item label="机型">
<el-input v-model="kittingBomQueryFormEntity.model" @keyup.enter="search()" clearable/>
</el-form-item>
<el-form-item label="成品号">
<el-input v-model="kittingBomQueryFormEntity.productId" @keyup.enter="search()" clearable/>
</el-form-item>
<el-form-item label="原材料号">
<el-input v-model="kittingBomQueryFormEntity.goodsId" @keyup.enter="search()" clearable/>
</el-form-item>
<el-form-item label="料盒号">
<el-input v-model="kittingBomQueryFormEntity.boxNo" @keyup.enter="search()" clearable/>
</el-form-item>
</el-row>
<div style="align-content: center;">
<el-row>
<el-button type="primary" class="btn-search" @click="search()">查询</el-button>
<el-button type="warning" class="btn-search" @click="clearQuery()">清除输入</el-button>
</el-row>
<el-row>
<el-button style="background-color: #00CED1;" class="btn-search"
@click="openUploadDialog()">导入配料单
</el-button>
<el-button type="success" class="btn-search"
@click="exportExcel()">导出excel
</el-button>
</el-row>
</div>
</div>
</el-form>
</fieldset>
<div class="table-area">
<el-table :data="displayKittingList" stripe border v-loading="tableLoading" class="table-class"
:max-height="maxHeight" highlight-current-row @row-click="getCurrentRow"
:header-cell-style="{ 'text-align': 'center' }" :cell-style="{ 'text-align': 'center' }"
@sort-change="handleSortChange">
<el-table-column width="65px" fixed="left">
<template v-slot="scope">
<el-radio :label="scope.row.templateId" v-model="templateId">&nbsp;</el-radio>
</template>
</el-table-column>
<el-table-column prop="bomType" label="配料单类型" fixed="left" min-width="120px" sortable="custom"
:formatter="bomTypeFormat" show-overflow-tooltip/>
<el-table-column prop="model" label="机型" min-width="120px" sortable="custom"
show-overflow-tooltip/>
<el-table-column prop="productId"
:label="kittingBomQueryFormEntity.bomType === 1 ? '成品号' : '服务件成品号'" fixed="left"
min-width="120px" sortable="custom"
show-overflow-tooltip/>
<el-table-column prop="goodsId" label="原材料号" min-width="120px" sortable="custom"
show-overflow-tooltip/>
<el-table-column prop="goodsDescription" label="物料描述" min-width="120px" sortable="custom"
show-overflow-tooltip/>
<el-table-column prop="quantity1Pair" label="单套数量" min-width="120px" sortable="custom"
show-overflow-tooltip/>
<el-table-column prop="boxNo" label="料盒号" min-width="120px" sortable="custom"
show-overflow-tooltip/>
<el-table-column prop="quantityOfPair" label="套数" min-width="120px" sortable="custom"
show-overflow-tooltip/>
<el-table-column fixed="right" label="操作" width="120px">
<template v-slot="scope">
<el-button plain type="danger" @click="deleteThisProduct(scope.row)">删除</el-button>
</template>
</el-table-column>
</el-table>
<br/>
<el-pagination v-model:current-page="baseTableQuery.currentPage"
v-model:page-size="baseTableQuery.pageSize" :page-sizes="[10, 25, 50]" :small="false"
:disabled="false" :background="false" :default-page-size="10" @size-change="search"
@current-change="search" layout="total, sizes, prev, pager, next, jumper"
:total="baseTableQuery.total"/>
</div>
<el-dialog v-model="showKittingBomUploadDialog" title="上传配料单" width="40%" draggable :show-close="true">
<fieldset class="search-area" v-if="kittingBomQueryFormEntity.bomType === 1">
<legend>导入非服务件配料单</legend>
<UploadExcelProduct></UploadExcelProduct>
</fieldset>
<fieldset class="search-area" v-if="kittingBomQueryFormEntity.bomType === 2">
<legend>导入服务件配料单</legend>
<UploadExcelSingleProduct></UploadExcelSingleProduct>
</fieldset>
</el-dialog>
</div>
</el-container>
</el-config-provider>
</template>
<script setup>
import store from '@/store'
import zhCn from 'element-plus/dist/locale/zh-cn.mjs'
import UploadExcelProduct from '@/excel/UploadExcelProduct.vue'
import UploadExcelSingleProduct from '@/excel/UploadExcelSingleProduct.vue'
import {deleteKittingBom, queryKittingBomByPage} from '@/api/kateWork.js'
import {dateFormatter} from '@/utils/formatter.js'
import {ref, reactive, onMounted, nextTick, onBeforeUnmount} from 'vue'
import {ElMessage, ElMessageBox} from 'element-plus'
import {genTableRequest} from '@/utils/generator.js'
import {labelPosition} from '@/constant/form.js'
import {kittingBomTypeOptions} from '@/constant/options.js'
import {exportKittingBomWithExcel} from '@/api/excel.js'
import {loading} from "@/utils/loading";
/**
* 常量定义
*/
const USER_NAME = store.getters.getUserName
const STAND_ID = store.getters.getStandId
/**
* 变量定义
*/
let maxHeight = ref(window.innerHeight * 0.55)
let tableLoading = ref(false)
let displayKittingList = ref([])
let baseTableQuery = reactive({
currentPage: 1,
pageSize: 10,
total: 0,
sortBy: new Map([['productId', true]]),// 按照成品号顺序排序
standId: STAND_ID,
userName: USER_NAME
})
let kittingBomQueryFormEntity = reactive({
bomType: 1,
model: '',
productId: '',
goodsId: '',
boxNo: ''
})
let kittingBomQueryFormRef = ref()
let templateId = ''
let showKittingBomUploadDialog = ref(false)
/**
* 系统方法
*/
onMounted(() => {
nextTick(() => {
window.addEventListener('resize', resizeHeight)
search()
})
})
onBeforeUnmount(() => {
nextTick(() => {
window.removeEventListener('resize', resizeHeight)
})
})
const resizeHeight = () => {
maxHeight.value = window.innerHeight * 0.55
}
/**
* 自定义方法
*/
// 查询
const search = () => {
tableLoading.value = true
let request = genTableRequest(baseTableQuery)
// 设定查询参数
request.bomType = kittingBomQueryFormEntity.bomType
request.model = kittingBomQueryFormEntity.model.trim()
request.productId = kittingBomQueryFormEntity.productId.trim()
request.goodsId = kittingBomQueryFormEntity.goodsId.trim()
request.boxNo = kittingBomQueryFormEntity.boxNo.trim()
queryKittingBomByPage(request).then((res) => {
const response = res.data
if (response.code === 0) {
const data = response.data
if (data != null) {
displayKittingList.value = data.lists
baseTableQuery.total = data.total
} else {
displayKittingList.value = []
baseTableQuery.total = 0
}
} else {
ElMessage.error(response.message)
}
}).catch(err => {
console.log(err)
ElMessage.error('查询配料单异常。')
}).finally(() => {
tableLoading.value = false
})
}
const clearQuery = () => {
kittingBomQueryFormEntity.model = ''
kittingBomQueryFormEntity.productId = ''
kittingBomQueryFormEntity.goodsId = ''
kittingBomQueryFormEntity.boxNo = ''
}
const bomTypeFormat = (row, column, cellValue, index) => {
switch (cellValue) {
case 1:
return '非服务件'
case 2:
return '服务件'
default:
return '未知类型'
}
}
const handleSortChange = (data) => {
if (baseTableQuery.sortBy.has(data.prop)) {
baseTableQuery.sortBy.delete(data.prop)
}
baseTableQuery.sortBy.set(data.prop, data.order.toLowerCase() === 'ascending')
search()
}
const getCurrentRow = (row) => {
templateId = row.templateId
}
const exportExcel = () => {
const params = {
bomType: kittingBomQueryFormEntity.bomType,
model: kittingBomQueryFormEntity.model,
productId: kittingBomQueryFormEntity.productId,
goodsId: kittingBomQueryFormEntity.goodsId,
boxNo: kittingBomQueryFormEntity.boxNo
}
exportKittingBomWithExcel(params).then(res => {
const link = document.createElement('a');//创建a标签
try {
// let blob = new Blob([res.data],{type: 'application/vnd.ms-excel'}); //如果后台返回的不是blob对象类型先定义成blob对象格式该type导出为xls格式
let blob = res.data //如果后台返回的直接是blob对象类型直接获取数据
// let _fileName = res.headers['content-disposition'].split(';')[1].split('=')[1]; //拆解获取文件名,如果后端有给返回文件名的话
const preName = kittingBomQueryFormEntity.bomType === 1 ? '非服务件' : '服务件'
let _fileName = preName + '配料单' + dateFormatter(new Date) + '.xlsx'
link.style.display = 'none'//隐藏
// 兼容不同浏览器的URL对象
const url = window.URL || window.webkitURL || window.moxURL
link.href = url.createObjectURL(blob)
link.setAttribute('download', _fileName.substring(_fileName.lastIndexOf('_') + 1))
document.body.appendChild(link)
link.click()
document.body.removeChild(link)
url.revokeObjectURL(link.href)//移除url对象
} catch (e) {
console.log(e)
ElMessage.error('下载文件失败')
}
}).catch(err => {
console.log(err)
ElMessage.error('导出失败')
})
}
// 删除当前成品的配料单
const deleteThisProduct = (row) => {
const toDeleteProductId = row.productId
ElMessageBox.confirm(
'当前操作会删除' + toDeleteProductId + '的整个配料单' + '。\n是否确认',
'警告',
{
confirmButtonText: '确认',
cancelButtonText: '取消',
type: 'warning',
}
).then(() => {
const request = {
bomType: row.bomType,
productId: row.productId,
userName: USER_NAME,
standId: STAND_ID
}
loading.open('删除中...')
deleteKittingBom(request).then(res => {
const response = res.data
if (response.code === 0) {
ElMessage.success(response.message)
} else {
ElMessage.error(response.message)
}
}).catch(err => {
console.log(err)
ElMessage.error('删除异常')
}).finally(() => {
search()
loading.close()
})
}).catch((err) => {
console.log(err)
ElMessage.info('操作取消')
})
}
const openUploadDialog = () => {
showKittingBomUploadDialog.value = true
}
</script>
<style scoped>
.content {
display: flex;
width: 100%;
}
.work-area {
width: 100%;
/* padding: 5px; */
}
.search-area {
margin: auto;
min-height: fit-content;
max-height: 40%;
margin-bottom: 10px;
min-width: inherit;
border: solid 1px;
border-radius: 10px;
box-shadow: 0px 15px 10px -15px #000;
overflow: auto;
padding: 10px;
}
.table-area {
margin: auto;
min-height: fit-content;
max-height: 60%;
margin-bottom: 10px;
min-width: inherit;
border: solid 1px;
border-radius: 10px;
box-shadow: 0px 15px 10px -15px #000;
overflow: auto;
padding: 10px;
}
.el-form-item {
margin: 5px 5px 5px 5px;
}
.el-form-item .el-input {
width: 196px;
}
.table-class {
margin: 5px 5px 5px 5px;
width: inherit;
}
.el-pagination {
padding-left: 5px;
}
.my-autocomplete li {
width: 196px;
line-height: normal;
padding: 7px;
}
.my-autocomplete li .name {
text-overflow: ellipsis;
overflow: hidden;
}
.my-autocomplete li .addr {
font-size: 12px;
color: #b4b4b4;
}
.my-autocomplete li .highlighted .addr {
color: #ddd;
}
.my-autocomplete li .goods_id {
color: brown;
}
.my-autocomplete li .goods_name {
color: cornflowerblue;
}
.btn-search {
height: 30px;
width: 80px;
margin: auto 5px 5px auto;
color: black;
}
</style>