<template>
|
<view class="wrap">
|
<scroll-view class="scroll-list material-transfer-detail" scroll-y="true" @scrolltolower="loadMore">
|
<u-cell-group class="list material-transfer-detail-cell" :border="false">
|
<u-card :title="item.partNo" :sub-title="item.partNo" v-for="(item, index) in list" :key="item.id"
|
:index="item.id" @click="materialCardClick(item)" :showHead="showCardHead"
|
:bodyStyle="item.selected?bodyStyle:{}">
|
<view slot="body">
|
<view class="item u-border-bottom"
|
>
|
<view>
|
<view style="text-align: right;">
|
<u-button type="primary" style="height: 80rpx;line-height: 80rpx;width: 100rpx;" text="更新" size="mini"
|
@click.stop="updateDetail(item.id)">更新</u-button>
|
<u-button type="error" style="height: 80rpx;line-height: 80rpx;width: 100rpx;" text="删除" size="mini" :customStyle="{marginLeft:'20rpx'}"
|
@click.stop="deleteDetail(item.id)">删除</u-button>
|
</view>
|
</view>
|
<view>
|
<view class="row-list">
|
<u-row justify="space-between">
|
<u-col span="4">
|
<span class="span-lable">零件号</span>
|
</u-col>
|
<u-col span="8">
|
<view>
|
<span>{{item.partNo}}</span>
|
</view>
|
</u-col>
|
</u-row>
|
</view>
|
<view class="row-list">
|
<u-row justify="space-between">
|
<u-col span="4">
|
<span class="span-lable">零件描述</span>
|
</u-col>
|
<u-col span="8">
|
<view>
|
<span>{{item.partDesc}}</span>
|
|
</view>
|
</u-col>
|
</u-row>
|
</view>
|
|
<view class="row-list">
|
<u-row justify="space-between">
|
<u-col span="4">
|
<span class="span-lable">批次号</span>
|
</u-col>
|
<u-col span="8">
|
<view>
|
<span>{{item.batchNo}}</span>
|
</view>
|
</u-col>
|
</u-row>
|
</view>
|
<view class="row-list">
|
<u-row justify="space-between">
|
<u-col span="4">
|
<span class="span-lable">移库数量</span>
|
</u-col>
|
<u-col span="8">
|
<view>
|
<u-input class="custom-edit-input" v-model="item.transferQuantity"
|
type="text" :clearable=false height="50">
|
</u-input>
|
</view>
|
</u-col>
|
</u-row>
|
</view>
|
<view class="row-list">
|
<u-row justify="space-between">
|
<u-col span="4">
|
<span class="span-lable">IFS从库位</span>
|
</u-col>
|
<u-col span="8">
|
<view>
|
|
<span>{{item.fromIfsLocationNo}}</span>
|
</view>
|
</u-col>
|
</u-row>
|
</view>
|
<view class="row-list">
|
<u-row justify="space-between">
|
<u-col span="4">
|
<span class="span-lable">IFS至库位</span>
|
</u-col>
|
<u-col span="8">
|
<view>
|
<span>{{item.toIfsLocationNo}}</span>
|
|
</view>
|
</u-col>
|
</u-row>
|
</view>
|
</view>
|
</view>
|
</view>
|
|
</u-card>
|
</u-cell-group>
|
<view class="loadmore" @click="loadMore">
|
<u-loadmore :status="loadStatus"></u-loadmore>
|
</view>
|
</scroll-view>
|
<!--<view class="view-fixed-one">
|
<u-button type="success" text="扫码" size="medium"
|
@click="scanMaterialCodeClick()">扫码</u-button>
|
</view>-->
|
<view class="view-fixed-two">
|
<u-button type="success" text="库位" style="height: 80rpx;line-height: 80rpx;" size="medium" :customStyle="{borderRadius:'0rpx'}"
|
@click="toLocations()">库位</u-button>
|
<u-button type="success" text="执行" style="height: 80rpx;line-height: 80rpx;" size="medium"
|
:customStyle="{width:'320rpx',marginLeft:'30rpx',borderRadius:'0rpx'}" @click="executeMove()">执行</u-button>
|
</view>
|
<scan></scan>
|
</view>
|
</template>
|
<script>
|
import scan from "@/components/scan/scan.vue";
|
export default {
|
components: {
|
scan
|
},
|
data() {
|
return {
|
showCardHead: false,
|
query: {
|
current: 1,
|
size: 20
|
},
|
list: [],
|
options: [{
|
text: '更新',
|
style: {
|
backgroundColor: '#007aff'
|
}
|
},
|
{
|
text: '删除',
|
style: {
|
backgroundColor: '#dd524d'
|
}
|
}
|
],
|
loadStatus: 'loadmore',
|
bodyStyle: {
|
background: '#bbf59c'
|
},
|
isfStockList: [],
|
materialNeedList: [],
|
transportsId: null,
|
currStock: null
|
};
|
},
|
onLoad(params) {
|
if (params && params.id !== "undefined") {
|
this.transportsId = params.id
|
this.query.transportsId = params.id
|
this.loadList();
|
}
|
},
|
onShow() {
|
|
let that = this
|
|
uni.$off('scan') // 每次进来先 移除全局自定义事件监听器
|
uni.$on('scan', function(data) {
|
console.log('onscan');
|
//扫码成功后的回调,你可以写自己的逻辑代码在这里
|
console.log('扫码结果:', data.code);
|
let sanCode=data.code
|
let formatData = JSON.parse(sanCode.replace(/\n/g,"").replace(/\s*/g,''));
|
console.log('formatData:', formatData);
|
console.log('formatData.BatchNumber:', formatData.BatchNumber);
|
|
let materialInfo={
|
batchNo: formatData.BatchNumber,
|
partNo: formatData.erpPartNo,
|
wdr: formatData.wdr
|
}
|
that.scanMaterialCodeClick(materialInfo)
|
})
|
},
|
onNavigationBarButtonTap(e) {
|
uni.scanCode({
|
success: res => {
|
try {
|
const result = JSON.parse(res.result)
|
|
} catch (e) {}
|
}
|
});
|
},
|
methods: {
|
updateDetail(id){
|
let k = this.list.findIndex(
|
(item) => item.id === id
|
)
|
let material = this.list.find((item) => {
|
return item.id === id
|
})
|
let transportsDetail = {
|
id: id,
|
transferQuantity: material.transferQuantity
|
}
|
|
this.$u.api.palletTransportsDetail.updateDetail(transportsDetail).then(res => {
|
let _code = res.code
|
let _data = res.data
|
let _msg = res.msg
|
if (_code === 0) {
|
this.list[k].show = false;
|
this.$u.toast(`更新成功`);
|
this.search('')
|
} else {
|
this.$u.toast('更新失败');
|
}
|
|
});
|
},
|
deleteDetail(id){
|
let k = this.list.findIndex(
|
(item) => item.id === id
|
)
|
let transportsDetail = {
|
id: id
|
}
|
|
this.$u.api.palletTransportsDetail.delObj(transportsDetail).then(res => {
|
let _code = res.code
|
let _data = res.data
|
let _msg = res.msg
|
if (_code === 0) {
|
this.list.splice(k, 1);
|
this.$u.toast('删除成功');
|
this.search('')
|
} else {
|
this.$u.toast('删除失败');
|
}
|
});
|
},
|
clickOperateBtn(id, index1) {
|
let k = this.list.findIndex(
|
(item) => item.id === id
|
)
|
if (index1 == 1) {
|
let transportsDetail = {
|
id: id
|
}
|
|
this.$u.api.palletTransportsDetail.delObj(transportsDetail).then(res => {
|
let _code = res.code
|
let _data = res.data
|
let _msg = res.msg
|
if (_code === 0) {
|
this.list.splice(k, 1);
|
this.$u.toast('删除成功');
|
this.search('')
|
} else {
|
this.$u.toast('删除失败');
|
}
|
});
|
|
} else {
|
let material = this.list.find((item) => {
|
return item.id === id
|
})
|
let transportsDetail = {
|
id: id,
|
transferQuantity: material.transferQuantity
|
}
|
|
this.$u.api.palletTransportsDetail.updateDetail(transportsDetail).then(res => {
|
let _code = res.code
|
let _data = res.data
|
let _msg = res.msg
|
if (_code === 0) {
|
this.list[k].show = false;
|
this.$u.toast(`更新成功`);
|
this.search('')
|
} else {
|
this.$u.toast('更新失败');
|
}
|
|
});
|
}
|
},
|
// 如果打开一个的时候,不需要关闭其他,则无需实现本方法
|
openOperateBtn(id) {
|
// 先将正在被操作的swipeAction标记为打开状态,否则由于props的特性限制,
|
// 原本为'false',再次设置为'false'会无效
|
let k = this.list.findIndex(
|
(item) => item.id === id
|
)
|
this.list[k].show = true;
|
this.list.map((val, idx) => {
|
if (k != idx) this.list[idx].show = false;
|
})
|
},
|
setMaterialLocation(loc) {
|
let transportsDetails = []
|
this.list.forEach((item) => {
|
if (item.selected) {
|
transportsDetails.push({
|
id: item.id,
|
toIfsLocationNo: loc.locationNo
|
})
|
}
|
})
|
this.$u.api.palletTransportsDetail.updateBatch(transportsDetails).then(res => {
|
let _code = res.code
|
let _data = res.data
|
let _msg = res.msg
|
if (_code === 0) {
|
this.$u.toast('更新IFS从库位成功');
|
this.search('')
|
} else {
|
this.$u.toast('更新IFS从库位失败');
|
}
|
|
});
|
},
|
toLocations() {
|
let selectFlag = false
|
this.list.forEach((item) => {
|
if (item.selected) {
|
selectFlag = true
|
}
|
})
|
if (selectFlag) {
|
uni.navigateTo({
|
url: '/pages/product/pick/ifsLocationList',
|
})
|
} else {
|
this.$u.toast('请选择移库明细');
|
}
|
},
|
scanMaterialCodeClick(materialInfo) {
|
//扫码 返回part_no、lot_batch_no、wdr
|
//调用IFS库存查询接口,若返回多条库存,需跳转至IFS库存列表选择某条库存
|
//选中某条库存后,调用物料需求查询接口,若存在多条物料需求,则跳转至物料需求列表选择某条物料需求
|
//保存当前移库明细,并将该条移库明细渲染到页面
|
let queryParam = {
|
batchNo: materialInfo.batchNo,
|
partNo: materialInfo.partNo,
|
transportsId: this.transportsId,
|
wdr: materialInfo.wdr
|
}
|
this.$u.api.ifsStock.page(queryParam).then(res => {
|
let _code = res.code
|
let _data = res.data
|
let _msg = res.msg
|
this.isfStockList = []
|
if (_code === 0) {
|
if (_data != null && _data.length > 0) {
|
if (_data.length > 1) {
|
_data.forEach((item, index) => {
|
this.isfStockList.push({
|
id: index + 1,
|
partNo: item.PART_NO,
|
partDesc: item.PART_DESC,
|
locationDesc: item.LOCATION_DESC,
|
locationNo: item.LOCATION_NO,
|
batchNo: item.LOT_BATCH_NO,
|
wdr: item.WAIV_DEV_REJ_NO,
|
available: item.QTY_AVAILABLE,
|
unit: item.UNIT_MEAS_DESC,
|
engChgLevel: item.ENG_CHG_LEVEL,
|
planMoveQuality: item.QTY_AVAILABLE,
|
selected: false
|
})
|
})
|
uni.navigateTo({
|
url: '/pages/product/pick/ifsStock',
|
})
|
} else {
|
this.currStock = {
|
id: 1,
|
partNo: _data[0].PART_NO,
|
partDesc: _data[0].PART_DESC,
|
locationDesc: _data[0].LOCATION_DESC,
|
locationNo: _data[0].LOCATION_NO,
|
batchNo: _data[0].LOT_BATCH_NO,
|
wdr: _data[0].WAIV_DEV_REJ_NO,
|
available: _data[0].QTY_AVAILABLE,
|
unit: _data[0].UNIT_MEAS_DESC,
|
engChgLevel: _data[0].ENG_CHG_LEVEL,
|
planMoveQuality: _data[0].QTY_AVAILABLE
|
}
|
this.queryMaterialNeedList(queryParam.partNo)
|
}
|
} else {
|
this.$u.toast('未找到IFS库存');
|
}
|
|
} else {
|
|
}
|
});
|
},
|
getIsfStockList() {
|
return this.isfStockList
|
},
|
getMaterialNeedList() {
|
return this.materialNeedList
|
},
|
findMaterial(ifsStock) {
|
this.currStock = ifsStock
|
this.queryMaterialNeedList(ifsStock.partNo)
|
},
|
//根据零件号去查询物料需求
|
queryMaterialNeedList(partNo) {
|
let queryParam = {
|
current: 1,
|
size: 100,
|
transportsId: this.transportsId,
|
partNo: partNo
|
}
|
this.$u.api.palletTransportsMaterial.page(queryParam).then(res => {
|
let _code = res.code
|
let _data = res.data
|
let _msg = res.msg
|
this.materialNeedList = []
|
if (_code === 0) {
|
if (_data.records != null && _data.records.length > 0) {
|
if (_data.records.length > 1) {
|
_data.records.forEach((item, index) => {
|
this.materialNeedList.push({
|
id: item.id,
|
partDesc: item.partDesc,
|
demandQuantity: item.demandQuantity,
|
partId: item.partId,
|
partNo: item.partNo,
|
surplusQuantity: item.surplusQuantity,
|
toIfsLocationName: item.toIfsLocationName,
|
toIfsLocationNo: item.toIfsLocationNo,
|
transferQuantity: item.transferQuantity,
|
unit: item.unit,
|
transportsId: item.transportsId,
|
detailExistState: item.detailExistState,
|
selected: false
|
})
|
})
|
uni.navigateTo({
|
url: '/pages/product/pick/materialNeed',
|
})
|
} else {
|
let materialNeed = {
|
id: _data.records[0].id
|
}
|
this.saveDetail(materialNeed)
|
}
|
} else {
|
this.$u.toast('未找到对应的物料需求');
|
}
|
} else {
|
|
}
|
});
|
},
|
saveDetail(materialNeed) {
|
let postDetailParam = {
|
partNo: this.currStock.partNo,
|
partDesc: this.currStock.partDesc,
|
batchNo: this.currStock.batchNo,
|
wdr: this.currStock.wdr,
|
transferQuantity: this.currStock.planMoveQuality,
|
fromIfsLocationNo: this.currStock.locationNo,
|
transportsMaterialId: materialNeed.id,
|
transportsId: this.transportsId
|
}
|
this.$u.api.palletTransportsDetail.addDetail(postDetailParam).then(res => {
|
let _code = res.code
|
let _data = res.data
|
let _msg = res.msg
|
//保存明细成功时
|
if (_code === 0) {
|
this.$u.toast('添加移库明细成功');
|
this.search('')
|
} else {
|
this.$u.toast('添加移库明细失败');
|
}
|
|
});
|
},
|
executeMove(){
|
let moveFlag = true
|
let detailIds = []
|
this.list.forEach((item) => {
|
if (item.selected) {
|
detailIds.push(item.id)
|
if (item.state === '02submitted') {
|
moveFlag = false
|
}
|
}
|
})
|
if(moveFlag){
|
if(detailIds.length>0){
|
this.$u.api.palletTransports.executeMove(detailIds).then(res => {
|
let _code = res.code
|
let _data = res.data
|
let _msg = res.msg
|
//保存明细成功时
|
if (_code === 0) {
|
this.$u.toast('执行成功');
|
this.search('')
|
} else {
|
this.$u.toast('执行失败');
|
}
|
|
});
|
}else{
|
this.$u.toast('请选择已创建状态的明细');
|
}
|
}else{
|
this.$u.toast('只有已创建状态的明细,才能被执行');
|
}
|
},
|
materialCardClick(item) {
|
item.selected = !item.selected
|
},
|
loadMore() {
|
this.loadStatus = "loading";
|
setTimeout(() => {
|
this.query.current += 1;
|
this.loadList();
|
}, 100);
|
},
|
loadList() {
|
let that=this
|
that.$u.api.palletTransportsDetail.page(that.query).then(res => {
|
if (!res.data.records || res.data.records.length == 0) {
|
that.loadStatus = "nomore";
|
return;
|
}
|
that.list = that.list.concat(res.data.records);
|
that.list.forEach((item) => {
|
that.$set(item, 'selected', false)
|
that.$set(item, 'show', false)
|
})
|
//this.total = res.data.total;
|
that.query.current = res.data.current;
|
that.query.size = res.data.size;
|
that.loadStatus = "loadmore";
|
});
|
},
|
search(value) {
|
this.list = [];
|
this.query.current = 1;
|
this.$nextTick(() => {
|
this.loadList();
|
})
|
}
|
}
|
};
|
</script>
|
<style lang="scss">
|
.custom-edit-input {
|
border-bottom: 2rpx solid #F8F8F8;
|
}
|
|
.list .content {
|
font-size: 12px;
|
background-color: #efefef;
|
box-sizing: border-box;
|
border-radius: 14rpx;
|
margin: 8px;
|
padding: 5px 10px;
|
box-shadow: none;
|
}
|
.material-transfer-detail{
|
background-color: #F8F8F8;
|
}
|
.material-transfer-detail-cell {
|
::v-deep .u-cell-item-box {
|
background-color: #F8F8F8;
|
}
|
}
|
</style>
|