2025-03-11 09:45:29 +08:00

439 lines
12 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>
<view>
<u-navbar back-text="返回" title="盘点" :background="background"></u-navbar>
<!-- 第一个分段器-->
<uni-segmented-control :current="currentChoose" :values="chooseitems" :style-type="styleType"
:active-color="activeColor" @clickItem="chooseItem" />
<view v-show="currentChoose === 0">
<table>
<tr>
<td>单号:</td>
<td width="82%">
<u-input :border="true" v-model="checkPlanName" :focus="focusCheckPlanName" placeholder="请扫描单号"
@confirm="serachCheckPlan" />
</td>
</tr>
<tr>
<td>盘点描述:</td>
<td>
<u-input :border="true" v-model="checkPlanDescription" placeholder="" :disabled="true" />
</td>
</tr>
</table>
<!-- 第二个分段器-->
<uni-segmented-control :current="current" :values="items" :style-type="styleType"
:active-color="activeColor" @clickItem="onClickItem" />
<view>
<view v-show="current === 0">
<view class="material">
<u-form ref="materialform">
<uni-z-table :style="{'height': tabH+'px'}" :tableData="requestData" :columns="matColumns"
:showBottomSum="true" :rowNumbers="true" :pagination="true" @onSelect="onSelectMatTb">
</uni-z-table>
</u-form>
</view>
</view>
<view v-show="current === 1">
<uni-z-table :style="{'height': tabH+'px'}" :tableData="matDetailData" :columns="matLocation"
:showBottomSum="true" :rowNumbers="true" :pagination="true">
</uni-z-table>
</view>
</view>
</view>
<view v-show="currentChoose === 1">
<table>
<tr>
<td> :</td>
<td>
<u-input placeholder="请扫描条码" :border="true" v-model="barCode" :focus="focusBarCode"
@confirm="searchByBarcode" />
</td>
</tr>
<tr>
<td>物料编码:</td>
<td>
<u-input placeholder="" :disabled="true" :border="true" v-model="materialCode" />
</td>
</tr>
<tr>
<td>物料描述:</td>
<td>
<u-input placeholder="" :disabled="true" :border="true" v-model="materialDescription" />
</td>
</tr>
<tr>
<td>账面数量:</td>
<td>
<u-input placeholder="" :disabled="true" :border="true" v-model="QTY" />
</td>
</tr>
<tr>
<td>库位编码:</td>
<td>
<u-input placeholder="" :disabled="true" :border="true" v-model="Kw" />
</td>
</tr>
<tr>
<td>新库位:</td>
<td>
<u-input placeholder="" :border="true" v-model="newKw" :focus="focusNewKw" />
</td>
</tr>
<tr>
<td>盘点数量:</td>
<td>
<u-input placeholder="" :border="true" v-model="checkQty" :focus="focusQty" />
</td>
</tr>
<tr>
<td><button type="warn" size="mini" @click="clear">清除</button></td>
<td><button type="primary" size="mini" @click="submit">确认</button></td>
</tr>
</table>
</view>
</view>
</template>
<script>
export default {
data() {
return {
items: ['盘点明细', '库位明细'], //第二分段器选项卡
chooseitems: ['盘点信息', '单个条码'], //第一个分栏器
tabH: 800, //表格的宽度
background: {
backgroundImage: 'linear-gradient(45deg, rgb(28, 187, 180), rgb(141, 198, 63))'
}, //返回按钮的样式
//分栏器的样式
styles: [{
value: 'button',
text: '按钮',
checked: true
},
{
value: 'text',
text: '文字'
}
],
colors: ['#007aff', '#4cd964', '#dd524d'],
current: 0,
currentChoose: 0,
colorIndex: 0,
activeColor: '#007aff',
styleType: 'text',
//---------------------------------------- 分割线上方都是引用的外部的组件使用的样式,下方才是是使用的数据
newKw: "", //新库位
checkQty: "", //盘点数量
checkPlanName: "", //盘点单号
barCode: "", //条码
requestData: [], //获取的盘点信息
matDetailData: [], //获取库位明细
infoList: [], //条码接口查询的信息
focusBarCode: false, //条码焦点
focusCheckPlanName: true, //默认选中单号焦点
focusNewKw: false, //新库位焦点
queryParam: {
queryID: "",
version: "",
BINDV: {}
},
focusQty: false, //盘点数量焦点
//---------------------------仅展示的数据
checkPlanDescription: "", //盘点描述
materialCode: "", //物料编码
materialDescription: "", //物料描述
QTY: "", //账面数量
Kw: "", //库位编码
//对应的表格的信息---------盘点明细下的表格
matColumns: [{
title: '未盘数',
field: "WEIPAN",
width: 120,
sort: true,
align: "right"
},
{
title: '物料编号',
field: "MATERIALSPECNAME",
width: 280,
sort: true,
align: "left"
},
{
title: '已盘',
field: "YIPAN",
width: 150,
sort: true,
align: "right"
},
{
title: '物料描述',
field: "DESCRIPTION",
width: 280,
sort: true,
align: "left"
}
],
//对应的相应的库位明细下面的表格
matLocation: [{
title: '仓库',
field: "ERPLOCATION",
width: 150,
sort: true,
align: "left"
},
{
title: '库位',
field: "LOCATIONNAME",
width: 150,
sort: true,
align: "left"
},
{
title: '条码编号',
field: "MATERIALPACKINGNAME",
width: 380,
sort: true,
align: "left"
},
{
title: '条码数量',
field: "MATERIALQUANTITY",
width: 180,
sort: true,
align: "right"
}
]
}
},
mounted() {
this.tabH = this.$GetRemainingHeight(4, 0); //定义表格的高度
},
methods: {
//第一个分段器的点击事件
chooseItem(e) {
if (this.currentChoose !== e.currentIndex) {
this.currentChoose = e.currentIndex //获取当前选中的index
}
if (this.currentChoose == 1)
this.getfocus('focusBarCode')
else this.getfocus('focusCheckPlanName')
},
//第二个分段器的点击事件
onClickItem(e) {
if (this.current !== e.currentIndex) {
this.current = e.currentIndex //获取当前选中的index
}
},
//焦点初始化,让页面所有的焦点同时只能存在一个
initfocus() {
this.focusCheckPlanName = false //单号焦点
this.focusBarCode = false //条码焦点
this.focusNewKw = false //新库位焦点
this.focusQty = false //盘点数量焦点
},
//获取焦点的公共方法
getfocus(nextfocus) {
this.initfocus()
this[nextfocus] //不能用this.nextfocus
this.$nextTick(() => { //vue是数据全部修改后才进行的视图更新哪nextTick函数就是为了拿到最新的数据还不懂的可以去百度
this[nextfocus] = true
})
},
//选中盘点明细的某一行带出库位明细
onSelectMatTb(e) {
let matCode = e.row["MATERIALSPECNAME"] //获取物料编号
this.getKwDetailList(matCode) //调用点中当前行的方法
},
//扫描单号-----------回车搜索
serachCheckPlan() {
if (this.checkPlanName != "") {
this.getCheckPlanList() //获取材料信息
} else {
this.$showMessage("单号不能为空")
this.getfocus('focusCheckPlanName') //焦点继续保持到单号输入框
return
}
},
//扫描条码回车搜索
searchByBarcode() {
if (this.checkPlanName != "") {
if (this.barCode != "") {
this.getListByCode() //获取该条码的全部信息
} else {
this.$showMessage("条码不能为空")
this.getfocus('focusBarCode') //重新聚焦
return
}
} else {
this.$showMessage("单号不能为空")
this.currentChoose = 0
this.getfocus('focusCheckPlanName')
}
},
//获取盘点明细
getCheckPlanList() {
let _param = this.queryParam;
_param.queryID = 'getCheckPlanList';
_param.version = 'PDA01';
_param.BINDV.CHECKPLANNAME = this.checkPlanName;
this.$MyRequest('/common/query', {
param: JSON.stringify(_param)
}).then(res => {
console.log("res+++++"+res)
if (res.data.status === 'success') {
this.requestData = res.data.DATA //接返回的数据
this.checkPlanDescription = this.requestData[0]["PLANTYPENAME"]
this.$playSuccess()
} else {
this.$showMessage(res.data.message)
this.$playFail()
}
}).catch(err => {
this.$showMessage(err)
})
},
//获取库位明细
getKwDetailList(matCode) {
let _param = this.queryParam;
_param.queryID = 'getCheckCordListByMaterialSpec';
_param.version = 'PDA01';
_param.BINDV.MATERIALSPECNAME = this.matCode;
this.$MyRequest('/common/query', {
param: JSON.stringify(_param)
}).then(res => {
console.log("res+++++"+res)
if (res.data.status === 'success') {
this.matDetailData = res.data.DATA //接返回的数据
this.$playSuccess()
} else {
this.$showMessage(res.data.message)
this.$playFail()
}
}).catch(err => {
this.$showMessage(err)
})
},
//通过单个条码搜索信息
getListByCode() {
let _param = this.queryParam;
_param.queryID = 'getCheckCordListByMaterialPacking';
_param.version = 'PDA01';
_param.BINDV.MATERIALPACKINGNAME = this.barCode;
_param.BINDV.CHECKPLANNAME =this.checkPlanName;
this.$MyRequest('/common/query', {
param: JSON.stringify(_param)
}).then(res => {
console.log("res+++++"+res)
if (res.data.status === 'success') {
this.materialCode = res.data.DATA[0]["MATERIALSPECNAME"] //物料编码
this.materialDescription = res.data.DATA[0]["DESCRIPTION"] //物料描述
this.QTY = res.data.DATA[0]["MATERIALQUANTITY"] //账面数量
this.Kw = res.data.DATA[0]["SYSLOCATION"] //库位
this.getfocus('focusQty')
this.$playSuccess()
} else {
this.$showMessage(res.data.message)
this.$playFail()
}
}).catch(err => {
this.$showMessage(err)
})
},
//盘点结果发送
sendCheckedPlan(kw) {
let count = this.barCode.split("|").length;
//标准标签格式中 | 出现次数为5
//SN|物料号|数量|供应商|制造日期|过期日
if (count != 6) {
this.showToast('标签不符合规范请确认', 'error');
return;
}
let boxId = qrCodeArr[0];
//发送请求
this.$MyRequest('/pdaExecuteBpel', {
bpelName: "PDAUpdateCheckRecord",
bpelParam: {
CHECKPLANNAME: this.checkPlanName,
SITENAME: this.siteName,
MATERIALPACKINGNAME:boxId,
ACTLOCATION:kw,
MATERIALACTQUANTITY: this.checkQty
}
}).then(res => {
if (res.data.RETURNCODE === "0") {
this.$showMessage("操作成功")
this.barCode=""//清空条码
this.newKw=""//清空库位
this.checkQty=""//清空盘点数量
//只读输入框的清空
this.materialCode = ""
this.materialDescription = ""
this.QTY = ""
this.Kw = ""
//下面重聚焦
this.getfocus('focusBarCode')
} else {
this.$showMessage(res.data.RETURNMSG)
return
}
}).catch(err => {
this.$showMessage(err.RETURNMSG)
})
},
//清除按钮
clear() {
this.barCode = ""
this.QTY = ""
this.Kw = ""
this.materialCode = ""
this.materialDescription = ""
this.newKw = ""
this.checkQty = ""
this.getfocus('focusBarCode') //重新聚焦
},
//确认按钮的提交事件
submit() {
if (this.checkQty < 0 || this.checkQty=="") {
this.$showMessage("盘点数量不能为空或负")
this.checkQty = "" //清空盘点数量
this.getfocus('focusQty') //重新聚焦
return
} else {
if (this.newKw == "") {
let oldkw = this.Kw //当新库位为空的时候传旧的库位编码进去
this.sendCheckedPlan(oldkw) //调用方法
} else {
this.sendCheckedPlan(this.newKw) //传新的库位编码
}
}
},
}
}
</script>
<style lang="scss">
</style>