<template>
|
<view>
|
<uni-segmented-control :current="current" :values="items" @clickItem="onClickItem">
|
</uni-segmented-control>
|
|
<!-- 入库 -->
|
<view v-show="current === 0">
|
<view style="padding: 5%;">
|
<uni-forms label-width="120">
|
<uni-forms-item label="托盘编码">
|
<uni-easyinput type="text" :focus="barcodeFocus" v-model="PalletCode1" placeholder="请输入托盘编码"
|
ref='midInput' @input="onPalletCode1Input" />
|
</uni-forms-item>
|
<uni-forms-item label="搬运起点">
|
<uni-easyinput type="text" :focus="addressFocus" v-model="SourceAddress" placeholder="请输入起点"
|
ref='midInput' />
|
</uni-forms-item>
|
<uni-forms-item label="终点区域">
|
<picker mode="selector" :range="areaNames" @change="onAreaChange">
|
<view style="padding: 10px; background-color: #fff; border: 1px solid #dcdfe6; border-radius: 4px; min-height: 16px; line-height: 16px;">
|
{{ selectedAreaName || '请选择终点区域' }}
|
</view>
|
</picker>
|
</uni-forms-item>
|
</uni-forms>
|
<button @click="InboundTask" type="primary" size="default" style="margin-top: 2%;">搬运</button>
|
</view>
|
</view>
|
|
<!-- 物料绑定 -->
|
<view v-show="current === 1">
|
<view style="padding: 5%;">
|
<uni-forms label-width="120">
|
<uni-forms-item label="托盘编码">
|
<uni-easyinput type="text" :focus="barcodefocus" v-model="PalletCode2" placeholder="请输入托盘编码" ref='midInput' @input="onMaterSnInput" />
|
</uni-forms-item>
|
<uni-forms-item label="外箱标签">
|
<uni-easyinput type="text" placeholder="请扫描外箱标签" ref='midInput' :focus="focus" v-model="materSn"
|
/>
|
</uni-forms-item>
|
</uni-forms>
|
<button @click="GroupPlate" type="primary" size="default" style="margin-top: 2%;">组盘</button>
|
</view>
|
</view>
|
|
<!-- 物料解绑 -->
|
<view v-show="current === 2">
|
<view style="padding: 5%;">
|
<uni-forms label-width="120">
|
<uni-forms-item label="托盘编码">
|
<uni-easyinput type="text" :focus="barcodefocus" @input="onPalletCode3Input" v-model="PalletCode3"
|
placeholder="请输入托盘编码" ref='midInput' />
|
</uni-forms-item>
|
</uni-forms>
|
<button @click="SolvePlate" type="primary" size="default" style="margin-top: 2%;">解盘</button>
|
</view>
|
</view>
|
|
<u-toast ref="luToast" />
|
</view>
|
</template>
|
|
<script>
|
const innerAudioContext = uni.createInnerAudioContext();
|
|
export default {
|
data() {
|
return {
|
// 表单数据
|
PalletCode1: "",
|
PalletCode2: "",
|
PalletCode3: "",
|
SourceAddress: "",
|
AreaId: "",
|
selectedAreaName: "",
|
materSn: "",
|
group: null,
|
|
// 区域数据
|
areaList: [], // 原始区域数据 [{id, name}]
|
areaNames: [], // 区域名称数组(用于picker显示)
|
|
// 焦点控制
|
barcodeFocus: true,
|
addressFocus: false,
|
barcodefocus: false,
|
focus: false,
|
istrue: false,
|
|
// UI控制
|
items: ['入库', '物料绑定', '物料解绑'],
|
current: 0
|
}
|
},
|
|
onLoad() {
|
this.QueryAreaInfo();
|
},
|
|
methods: {
|
// 分段选择器点击事件
|
onClickItem(e) {
|
if (this.current !== e.currentIndex) {
|
this.current = e.currentIndex;
|
// 切换tab时重置焦点
|
this.resetFocus();
|
}
|
},
|
|
// 重置焦点状态
|
resetFocus() {
|
this.barcodeFocus = true;
|
this.addressFocus = false;
|
this.barcodefocus = false;
|
this.focus = false;
|
},
|
|
// 播放语音
|
voiceSpeech(src) {
|
innerAudioContext.src = src;
|
innerAudioContext.play();
|
},
|
|
// 查询区域信息
|
QueryAreaInfo() {
|
this.$u.post('/api/Dt_AreaInfo/QueryAreaInfo').then(res => {
|
if (res.status && res.data) {
|
// 后端返回数组格式
|
this.areaList = res.data;
|
// 提取名称数组供picker使用
|
this.areaNames = this.areaList.map(item => item.name);
|
|
// this.$refs.luToast.show({
|
// title: res.message || "加载成功",
|
// type: "success"
|
// });
|
} else {
|
this.$refs.luToast.show({
|
title: res.message || "加载失败",
|
type: "error"
|
});
|
}
|
}).catch(err => {
|
console.error('QueryAreaInfo error:', err);
|
this.$refs.luToast.show({
|
title: "网络请求失败",
|
type: "error"
|
});
|
});
|
},
|
|
// 区域选择事件
|
onAreaChange(e) {
|
const index = e.detail.value;
|
if (this.areaList[index]) {
|
this.selectedAreaName = this.areaList[index].name;
|
this.AreaId = this.areaList[index].id;
|
}
|
},
|
|
// 入库任务
|
InboundTask() {
|
// 验证
|
if (!this.PalletCode1 || this.PalletCode1.trim() === "") {
|
this.$refs.luToast.show({
|
title: "托盘编码不能为空",
|
type: "error"
|
});
|
return;
|
}
|
|
if (!this.SourceAddress || this.SourceAddress.trim() === "") {
|
this.$refs.luToast.show({
|
title: "搬运起点不能为空",
|
type: "error"
|
});
|
return;
|
}
|
|
if (!this.AreaId) {
|
this.$refs.luToast.show({
|
title: "请选择终点区域",
|
type: "error"
|
});
|
return;
|
}
|
|
const param = {
|
PalletCode: this.PalletCode1,
|
Position: this.SourceAddress,
|
AreaId: this.AreaId,
|
};
|
|
this.$u.post('/api/Task/RequestInboundTaskAsync', param).then(res => {
|
if (res.status) {
|
this.$refs.luToast.show({
|
title: res.message || "任务创建成功",
|
type: "success"
|
});
|
// 重置表单
|
this.PalletCode1 = "";
|
this.SourceAddress = "";
|
this.AreaId = "";
|
this.selectedAreaName = "";
|
this.barcodeFocus = true;
|
} else {
|
this.$refs.luToast.show({
|
title: res.message || "任务创建失败",
|
type: "error"
|
});
|
}
|
}).catch(err => {
|
console.error('InboundTask error:', err);
|
this.$refs.luToast.show({
|
title: "网络请求失败",
|
type: "error"
|
});
|
});
|
},
|
|
// 托盘编码1输入事件
|
onPalletCode1Input() {
|
this.barcodeFocus = false;
|
this.$nextTick(() => {
|
if (this.PalletCode1 && this.PalletCode1 !== '') {
|
this.addressFocus = true;
|
}
|
});
|
},
|
|
// 组盘(物料绑定)
|
GroupPlate() {
|
if (!this.PalletCode2 || this.PalletCode2.trim() === "") {
|
this.$refs.luToast.show({
|
title: "托盘编码不能为空",
|
type: "error"
|
});
|
return;
|
}
|
|
if (!this.materSn) {
|
this.$refs.luToast.show({
|
title: "请先扫描外箱标签",
|
type: "error"
|
});
|
return;
|
}
|
|
const param = {
|
PalletCode: this.PalletCode2,
|
group: this.materSn,
|
};
|
|
this.$u.post('/api/BoxingInfo/AddGroupPlateAsync', param).then(res => {
|
if (res.status) {
|
this.$refs.luToast.show({
|
title: res.message || "组盘成功",
|
type: "success"
|
});
|
// 重置表单
|
this.PalletCode2 = "";
|
this.materSn = "";
|
this.barcodefocus = false;
|
this.focus = false;
|
this.voiceSpeech('../../static/success.mp3');
|
} else {
|
this.$refs.luToast.show({
|
title: res.message || "组盘失败",
|
type: "error"
|
});
|
}
|
}).catch(err => {
|
console.error('GroupPlate error:', err);
|
this.$refs.luToast.show({
|
title: "网络请求失败",
|
type: "error"
|
});
|
});
|
},
|
|
// 外箱标签输入事件
|
onMaterSnInput() {
|
this.barcodefocus = false;
|
this.$nextTick(() => {
|
if (this.PalletCode2 && this.PalletCode2 !== '') {
|
this.focus = true;
|
}
|
});
|
},
|
|
// 解盘(物料解绑)
|
SolvePlate() {
|
if (!this.PalletCode3 || this.PalletCode3.trim() === "") {
|
this.$refs.luToast.show({
|
title: "托盘编码不能为空",
|
type: "error"
|
});
|
return;
|
}
|
|
const param = {
|
PalletCode: this.PalletCode3,
|
};
|
|
this.$u.post('/api/BoxingInfo/DeleteGroupPlateAsync', param).then(res => {
|
if (res.status) {
|
this.$refs.luToast.show({
|
title: res.message || "解盘成功",
|
type: "success"
|
});
|
this.PalletCode3 = "";
|
this.barcodefocus = false;
|
} else {
|
this.$refs.luToast.show({
|
title: res.message || "解盘失败",
|
type: "error"
|
});
|
}
|
}).catch(err => {
|
console.error('SolvePlate error:', err);
|
this.$refs.luToast.show({
|
title: "网络请求失败",
|
type: "error"
|
});
|
});
|
},
|
|
// 托盘编码3输入事件
|
onPalletCode3Input() {
|
this.barcodefocus = false;
|
}
|
}
|
}
|
</script>
|
|
<style lang="scss">
|
@import '@/common/uni-ui.scss';
|
|
page {
|
display: flex;
|
flex-direction: column;
|
box-sizing: border-box;
|
background-color: #efeff4;
|
min-height: 100%;
|
height: auto;
|
}
|
|
.tips {
|
color: #67c23a;
|
font-size: 14px;
|
line-height: 40px;
|
text-align: center;
|
background-color: #f0f9eb;
|
height: 0;
|
opacity: 0;
|
transform: translateY(-100%);
|
transition: all 0.3s;
|
}
|
|
.tips-ani {
|
transform: translateY(0);
|
height: 40px;
|
opacity: 1;
|
}
|
|
.content {
|
width: 100%;
|
display: flex;
|
}
|
|
.list-picture {
|
width: 100%;
|
height: 145px;
|
}
|
|
.thumb-image {
|
width: 100%;
|
height: 100%;
|
}
|
|
.ellipsis {
|
display: flex;
|
overflow: hidden;
|
}
|
|
.uni-ellipsis-1 {
|
overflow: hidden;
|
white-space: nowrap;
|
text-overflow: ellipsis;
|
}
|
|
.uni-ellipsis-2 {
|
overflow: hidden;
|
text-overflow: ellipsis;
|
display: -webkit-box;
|
-webkit-line-clamp: 2;
|
-webkit-box-orient: vertical;
|
}
|
</style>
|