You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

506 lines
19 KiB

<template>
<div class="padListPageOuter isPadForTransferLibJobPage">
<padListPage
:listUrl="listUrl"
ref="padListPage_Ref"
:padListData="padListData"
:searchFormData="searchFormData"
:searchForm="searchForm"
:headerButton="headerButton"
:padMainColumn="padMainColumn"
:padDeatilColumn="padDeatilColumn_list"
:listRowButton="listRowButton"
:padListLoading="padListLoading"
:padListPager="padListPager"
:getPadList="getPadList"
:intSearchFilters="intSearchFilters"
:padListParams="padListParams"
:mainIsShowDetail="true"
@listRowButtonClick="listRowButtonClick"
@headerButtonClick="headerButtonClick"
@headerSearchHandle="headerSearchHandle"
@resetSearchHandle="resetSearchHandle"
:mainColumnNum="4"
:detailColumnNum="4"
:padMainStaColumn="[{prop:'number'},{prop:'jobStatus',filters:'jobStatus'}]"
:mainSize="'mini'"
:detailSize="'mini'"
></padListPage>
<!-- :mainIsShowDetail="true" -->
<!-- 完成库移弹窗 -->
<el-dialog
title="完成库移"
:visible="compeletHandleVisible"
v-loading="compeletLoading"
top="5vh"
width="90%">
<div style="height:calc(100vh - 280px);overflow:auto">
<currenForm
:labelWidth="'90px'"
ref="compeletHandleForm_Ref"
:style="'width:calc(100% - 100px)'"
size="medium"
:searchData="compeletFormData"
:searchForm="compeletForm"
:rules="compeletRule"
@changeInput="compeletChangeInput"
></currenForm>
<curren-descriptions
v-if="compeletHandleVisible"
:border="true"
:column="3"
:direction="'horizontal'"
:colon="false"
:tabsDesTions="padDeatilColumn"
:propsData="currentRowData.details[0]"
style="width:100%;padding-top:20px"
></curren-descriptions>
</div>
<span slot="footer" class="dialog-footer">
<el-button @click="compeletHandleClose()">取 消</el-button>
<el-button type="primary" @click="compeletHandleSure()">确 定</el-button>
</span>
</el-dialog>
<!-- 查看库存余额 -->
<el-dialog
class="showInventoryPop"
title="查看库存余额"
:visible="showInventoryVisible"
top="5vh"
width="90%">
<div v-loading="showInventoryLoading" style="height:calc(100vh - 220px);overflow:auto">
<div
class="showInventoryRow"
v-for="(item,index) in inventoryTableData"
:key="index">
<div class="commonRowTitle">
<el-tag size="mini" effect="dark">{{index + 1}}</el-tag>
<div>{{item[inventoryColumn[6].prop]}}</div>
</div>
<curren-descriptions
:column="2"
:border="true"
:direction="'horizontal'"
:tabsDesTions="inventoryColumn"
:propsData="item"
style="width:100%;padding-top:20px"
:labelStyle="{'width':'200px'}"
></curren-descriptions>
</div>
<el-empty v-if="(!inventoryTableData || inventoryTableData.length <= 0) && !showInventoryLoading" description="暂无数据"></el-empty>
</div>
<span slot="footer" class="dialog-footer">
<el-button @click="inventoryCloseHandle()"> </el-button>
</span>
</el-dialog>
</div>
</template>
<script>
import { padListPageMixins } from "@/mixins/padListPageMixins"
import padListPage from "./components/padListPage/index"
import currenForm from "@/components/currenForm"
import currenDescriptions from "@/components/currenDescriptions"
import { getInventoryByPackingCode,getPageList } from '@/api/wms-api'
import { transferLibJobHandel } from '@/api/wms-job'
import { inventoryBalanceRecommendList } from '@/api/wms-pad'
import { filterSelectMixins } from '@/mixins/filter-Select'
import zh from '@/lang/zh'
let _Names = zh.ColumsNames // 业务字段
export default {
name: 'isPadForTransferLibJob',
mixins: [
padListPageMixins,
filterSelectMixins,
],
components: { padListPage,currenForm,currenDescriptions },
computed: {
// 头部按钮显隐控制
hideButton: function () {
return function (val) {
return this.showFilterSta == val
}
},
// 单独行按钮显隐控制
hideRowButton: function () {
return function (row,val) {
let data = true
val.forEach(key => {
if (row.jobStatus == key) {
data = false
}
})
return data
}
}
},
data () {
return {
listUrl:'wms/store/transfer-lib-job',
searchFormData:{
number:"",
requestNumber:"",
},
searchForm:[
{label:'传入申请单号',prop:'callRequestNumber',type:'input',width:'140px',action:'Like'},
{label:'传入任务单号',prop:'callJobNumber',type:'input',width:'140px',action:'Like'},
],
showFilterSta:false,
headerButton:[
{
type: 'warning',
label: '查看待执行数据',
name: "showCanHandle",
hide: () => { return this.hideButton(true) },
},
{
type: 'danger',
label: '重置[待执行]数据',
name: "showAllData",
hide: () => { return this.hideButton(false) },
},
],
padMainColumn:[
{ label:'任务单号',prop:'number'},
{ label:'申请单号',prop:'requestNumber'},
// { label: "状态", prop: "jobStatus",type: "tagFilter", filters: "jobStatus",titleBack:true },
{ label: "传入申请单号", prop: "callRequestNumber" },
{ label: "传入任务单号", prop: "callJobNumber" },
// { label: "任务描述", prop: 'jobDescription' },
// { label: "使用在途库", prop: 'useOnTheWayLocation', type: "filter", filters: "whetherOrNot" },
// { label: "已确认", prop: 'confirmed',type: "filter", filters: "whetherOrNot" },
// { label: "确认时间", prop: 'confirmTime' },
// { label: "备注", prop: "remark" },
// { label: "操作员", prop: "worker" },
// { label: "承接用户", prop: "acceptUserName" },
// { label: "承接时间", prop: 'acceptTime', type: "dateTime" },
// { label: "完成者用户名", prop: 'completeUserName' },
// { label: "完成时间", prop: "completeTime", type: "dateTime" },
// { label: "创建时间", prop: 'creationTime', type: "dateTime" },
// { label: "上次修改时间", prop: "lastModificationTime", type: "dateTime" },
// { label: "回调服务名称", prop: "callServerName" },
// { label: "回调业务类型", prop: "callBusinessType" },
],
padDeatilColumn_list:[
{ label: _Names.itemCode, prop: "itemCode"},
{ label: _Names.itemName, prop: "itemName" },
{ label: _Names.itemDesc1, prop: "itemDesc1" },
{ label: _Names.itemDesc2, prop: "itemDesc2" },
{ label: "推荐来源数量", prop: 'recommendFromQty' },
{ label: "推荐目标箱标签", prop: 'recommendToPackingCode' },
{ label: "推荐来源库位", prop: 'recommendFromLocationCode' },
{ label: "推荐目标库位", prop: 'recommendToLocationCode' },
],
padDeatilColumn:[
{ label: _Names.itemCode, prop: "itemCode"},
{ label: _Names.itemName, prop: "itemName" },
{ label: _Names.itemDesc1, prop: "itemDesc1" },
{ label: _Names.itemDesc2, prop: "itemDesc2" },
{ label: "请求数量", prop: 'requestQty' },
{ label: _Names.requestLocationErpCode, prop: 'requestLocationErpCode' },
{ label: "推荐来源数量", prop: 'recommendFromQty' },
{ label: "推荐目标数量", prop: 'recommendToQty' },
{ label: "推荐来源箱标签", prop: 'recommendFromPackingCode' },
{ label: "推荐目标箱标签", prop: 'recommendToPackingCode' },
{ label: "推荐来源库位", prop: 'recommendFromLocationCode' },
{ label: "推荐目标库位", prop: 'recommendToLocationCode' },
{ label: _Names.recommendFromErpCode, prop: 'recommendFromLocationErpCode' },
{ label: _Names.recommendToErpCode, prop: 'recommendToLocationErpCode' },
{ label: "推荐来源批次", prop: 'recommendFromLot' },
{ label: "推荐目标批次", prop: 'recommendToLot' },
{ label: "推荐来源过期时间", prop: 'recommendFromExpireDate', type: "dateTime" },
{ label: "推荐目标过期时间", prop: 'recommendToExpireDate', type: "dateTime" },
{ label: "实际来源数量", prop: 'handledFromQty' },
{ label: "实际目标数量", prop: 'handledToQty' },
{ label: "实际来源箱标签", prop: 'handledFromPackingCode' },
{ label: "实际目标箱标签", prop: 'handledToPackingCode' },
{ label: "实际来源库位", prop: 'handledFromLocationCode' },
{ label: "实际目标库位", prop: 'handledToLocationCode' },
{ label: _Names.handledFromErpCode, prop: 'handledFromLocationErpCode' },
{ label: _Names.handledToErpCode, prop: 'handledToLocationErpCode' },
{ label: "实际来源批次", prop: 'handledFromLot' },
{ label: "实际目标批次", prop: 'handledToLot' },
{ label: "实际来源过期时间", prop: 'handledFromExpireDate', type: "dateTime" },
{ label: "实际目标过期时间", prop: 'handledToExpireDate', type: "dateTime" },
{ label: "位置码", prop: 'positionCode' },
{ label: "生产线", prop: 'prodLine' },
{ label: "任务状态", prop: "jobStatus",type: "filter", filters: "jobStatus" },
{ label: "推荐类型", prop: 'recommendType' },
],
listRowButton:[
{
type: 'success',
label: '完成库移',
name: "compelet",
size: "mini",
hide: (row) => { return this.hideRowButton(row,[1,2,4]) },
},
{
type: 'primary',
label: '查看库存余额',
size: "mini",
name: "showInventory",
},
],
// 完成库移显隐
compeletHandleVisible:false,
compeletLoading:false,
compeletFormData: {
packingCode:"",
fromLocationCode:"",
toLocationCode:"",
},
compeletForm: [
{ type: "input", label: "箱码", prop: 'packingCode', colSpan: 12, },
{ type: "input", disabled:true, label: "来源库位", prop: 'fromLocationCode', colSpan: 12, },
{ type: "input", disabled:true, label: "目标库位", prop: 'toLocationCode', colSpan: 12, },
// filterSelect示例:
// { type: "filterSelect", label: "目标库位", prop: "toLocationCode", optionsLabel: "name", optionsValue: "code",
// focus: (type,val) => { return this.getFilterList(type, val, "basedata/location")},colSpan: 12
// },
],
compeletRule: {
packingCode: [{ required: true, trigger: "blur", message: "不可为空" }],
fromLocationCode: [{ required: true, trigger: "blur", message: "不可为空" }],
toLocationCode: [{ required: true, trigger: "blur", message: "不可为空" }],
},
// 当前行数据
currentRowData:null,
// 查看库存余额显隐
showInventoryVisible:false,
showInventoryLoading:false,
inventoryTableData:[],
inventoryColumn:[
{ label: _Names.itemCode, prop: "itemCode" },
{ label: _Names.itemName, prop: "itemName" },
{ label: _Names.itemDesc1, prop: "itemDesc1" },
{ label: _Names.itemDesc2, prop: "itemDesc2" },
{ label: "计量单位", prop: "uom" },
{ label: '数量', prop: "qty" },
{ label: "箱码", prop: 'packingCode' },
{ label: "批次", prop: 'lot' },
{ label: "供应商批次", prop: "supplierBatch" },
{ label: "标包数量", prop: "stdPackQty" },
{ label: "库位", prop: 'locationCode' },
{ label: _Names.locationErpCode, prop: "locationErpCode" },
{ label: "库位组", prop: 'locationGroup' },
{ label: "标准成本单价", prop: "stdCostPrice" },
{ label: "标准成本金额", prop: "stdCost" },
{ label: "备注", prop: 'remark' },
{ label: "序号", prop: 'serialNumber' },
{ label: "状态", prop: "status", type: "filter", filters: "openToClose" },
{ label: "库区", prop: 'locationArea' },
{ label: "管理类型", prop: "manageType", type: "filter", filters: "manageType" },
{ label: "入库时间", prop: 'putInTime', type:"dateTime" },
{ label: "生产时间", prop: "produceDate", type: "dateTime" },
{ label: "到货时间", prop: "arriveDate", type: "dateTime" },
{ label: "过期时间", prop: "expireDate", type: "dateTime" },
{ label: "创建时间", prop: "creationTime", type: "dateTime" },
],
canCompeletHandle:false,//是否可以执行完成库移,取决于箱码是否符合标准
}
},
mounted(){
this.initPage()
},
methods: {
// 完成库移箱码更改事件
compeletChangeInput(prop, val){
if(prop == 'packingCode'){
this.compeletFormData.fromLocationCode = ""
this.compeletFormData.toLocationCode = ""
if(val == ""){
return
}
let _data = {
Sorting: "",
SkipCount: 0,
MaxResultCount: 1000,
condition: {filters: [
{
logic: 'And',
column: "packingCode",
action: "==",
value: val
}
]},
}
this.compeletLoading = true
this.canCompeletHandle = false
getPageList(_data, 'wms/inventory/inventory-balance')
.then(res => {
this.compeletLoading = false
if(!res.items || res.items.length <= 0){
return this.$errorMsg("当前箱码无库存信息,请更改箱码")
}
let _inventory = res.items[0]
if(_inventory.locationCode != this.currentRowData.details[0].recommendFromLocationCode){
return this.$errorMsg("当前箱码的库位与推荐来源库位不符,请更改箱码")
}
this.canCompeletHandle = true
this.compeletFormData.fromLocationCode = _inventory.locationCode
this.compeletFormData.toLocationCode = this.currentRowData.details[0].recommendToLocationCode
}).catch(err => {
this.compeletLoading = false
this.$errorMsg("获取库存失败")
})
}
},
// 头部其他按钮点击事件
headerButtonClick(item,index){
if(item.name == 'showCanHandle'){
this.showCanHandleFunc()
}
else if(item.name == 'showAllData'){
this.showFilterSta = false
document.getElementById("padListCard").scrollTop = 0
this.clearSearchHandle(true)
this.getPadList();
}
},
// 筛选可执行功能
showCanHandleFunc(){
this.showFilterSta = true
let _filters = [{
logic:"And",
column:"jobStatus",
action:"In",
value: JSON.stringify([1,2,4,30])
}]
this.padListParams.condition.filters = _filters
document.getElementById("padListCard").scrollTop = 0
this.clearSearchHandle()
this.getPadList();
},
// 当前行按钮点击事件
listRowButtonClick(row,item){
if(item.name == "showInventory"){
this.currentRowData = row
this.showInventoryVisible = true
let _params = {
itemCode:row.details[0].itemCode,
qty:9999999999,
statuses:'OK',
locationTypes:'RAW'
}
this.showInventoryLoading = true
inventoryBalanceRecommendList(_params)
.then(res=>{
this.inventoryTableData = res
this.showInventoryLoading = false
})
.catch(err=>{
this.showInventoryLoading = false
})
}
if(item.name == "compelet"){
this.currentRowData = row
this.compeletHandleVisible = true
}
},
headerSearchHandle(){
this.showFilterSta = false
},
resetSearchHandle(){
this.clearSearchHandle(true)
this.showFilterSta = false
},
// 完成库移-关闭
compeletHandleClose(){
this.compeletFormData = {
packingCode:"",
fromLocationCode:"",
toLocationCode:"",
}
if(this.$refs.compeletHandleForm_Ref)this.$refs.compeletHandleForm_Ref.clearValidate()
this.compeletHandleVisible = false
},
// 完成库移-确定
compeletHandleSure(val){
if(!this.canCompeletHandle){
this.$errorMsg("当前箱码不符合移库标准,请检查")
return
}
let _form = this.$refs.compeletHandleForm_Ref.$refs.form
_form.validate((valid) => {
if (valid) {
this.compeletLoading = true
// 先获取库存余额进行部分项赋值
getInventoryByPackingCode(this.compeletFormData.packingCode).then(inventory => {
// 目前定的需求为:details中只有一条明细,所以按钮写在最外层,默认赋值第一位
let _data = this.currentRowData
_data.details[0].handledFromPackingCode = this.compeletFormData.packingCode
_data.details[0].handledToPackingCode = this.compeletFormData.packingCode
_data.details[0].handledFromLocationCode = this.compeletFormData.fromLocationCode
_data.details[0].handledToLocationCode = this.compeletFormData.toLocationCode
_data.details[0].handledToLot = inventory.lot
_data.details[0].handledFromLot = inventory.lot
_data.details[0].handledFromSupplierBatch = inventory.supplierBatch
_data.details[0].handledToSupplierBatch = inventory.supplierBatch
_data.details[0].handledFromQty = inventory.qty
_data.details[0].handledToQty = inventory.qty
transferLibJobHandel(this.currentRowData.id, _data).then(res => {
this.compeletLoading = false
this.$successMsg("完成库移成功!")
if(this.showFilterSta){
this.showCanHandleFunc()
}
else{
this.getPadList()
}
this.compeletHandleClose()
}).catch(err => {
this.compeletLoading = false
})
}).catch(err => {
this.compeletLoading = false
})
} else {
return false;
}
});
},
// 查看库存余额关闭
inventoryCloseHandle(){
this.showInventoryVisible = false
this.inventoryTableData = []
}
}
}
</script>
<style lang="scss" scoped>
@import "@/styles/padMain.scss";
.showInventoryPop{
::v-deep .el-dialog__body{
padding:0 15px !important;
}
.showInventoryRow{
margin-bottom: 20px;
.el-descriptions{
padding: 0 !important;
}
}
}
.isPadForTransferLibJobPage{
::v-deep .padListCard .detailDataBox{
padding:5px 0 0 10px !important;
}
::v-deep .padListRow{
padding:10px !important;
margin-bottom:10px !important
}
::v-deep .el-button--mini{
height:28px !important;
overflow:hidden !important;
line-height:12px !important;
}
::v-deep .el-form-item--mini .el-form-item__label{
line-height: 28px;
font-weight: normal;
font-size: 14px;
height:28px;
overflow:hidden
}
}
</style>