<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%;"
|
:disabled="isLoading">
|
{{ isLoading ? '处理中...' : '搬运' }}
|
</button>
|
</view>
|
</view>
|
|
<!-- 空托出库 -->
|
<view v-show="current === 1">
|
<view style="padding: 5%;">
|
<uni-forms label-width="120">
|
<uni-forms-item label="出库区域">
|
<picker mode="selector" :range="areaNames" @change="onOutAreaChange">
|
<view
|
style="padding: 10px; background-color: #fff; border: 1px solid #dcdfe6; border-radius: 4px; min-height: 16px; line-height: 16px;">
|
{{ selectedOutAreaName || '请选择出库区域' }}
|
</view>
|
</picker>
|
</uni-forms-item>
|
|
<uni-forms-item label="出库终点">
|
<uni-easyinput type="text" v-model="TargetAddress" placeholder="请输入出库终点" ref="targetInput" />
|
</uni-forms-item>
|
</uni-forms>
|
|
<button @click="outboundTask" type="primary" size="default" style="margin-top: 2%;"
|
:disabled="isLoading">
|
{{ isLoading ? '处理中...' : '出库' }}
|
</button>
|
</view>
|
</view>
|
|
<u-toast ref="luToast" />
|
</view>
|
</template>
|
|
<script>
|
const innerAudioContext = uni.createInnerAudioContext();
|
|
export default {
|
data() {
|
return {
|
// 当前选中的tab
|
items: ['空托入库', '空托出库'],
|
current: 0,
|
|
// 入库表单数据
|
PalletCode1: "",
|
SourceAddress: "",
|
|
// 出库表单数据
|
TargetAddress: "",
|
|
// 区域选择
|
areaList: [], // 区域数据 [{id, name}]
|
areaNames: [], // 区域名称数组
|
AreaId: "", // 入库选中的区域ID
|
selectedAreaName: "", // 入库选中的区域名称
|
outAreaId: "", // 出库选中的区域ID
|
selectedOutAreaName: "", // 出库选中的区域名称
|
|
// 焦点控制
|
barcodeFocus: true,
|
addressFocus: false,
|
|
// 加载状态
|
isLoading: false,
|
}
|
},
|
|
onLoad() {
|
this.queryAreaInfo();
|
},
|
|
methods: {
|
// 分段选择器点击事件
|
onClickItem(e) {
|
if (this.current !== e.currentIndex) {
|
this.current = e.currentIndex;
|
this.resetForm();
|
}
|
},
|
|
// 重置表单
|
resetForm() {
|
this.PalletCode1 = "";
|
this.SourceAddress = "";
|
this.TargetAddress = "";
|
this.AreaId = "";
|
this.selectedAreaName = "";
|
this.outAreaId = "";
|
this.selectedOutAreaName = "";
|
this.barcodeFocus = true;
|
this.addressFocus = false;
|
},
|
|
// 播放语音提示
|
voiceSpeech(src) {
|
innerAudioContext.src = src;
|
innerAudioContext.play();
|
},
|
|
// 查询区域信息
|
queryAreaInfo() {
|
this.$u.post('/api/Dt_AreaInfo/QueryAreaInfo').then(res => {
|
if (res.status && res.data && Array.isArray(res.data)) {
|
this.areaList = res.data;
|
this.areaNames = res.data.map(item => item.name);
|
console.log('区域数据加载成功', this.areaList);
|
} 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;
|
}
|
},
|
|
// 出库区域选择
|
onOutAreaChange(e) {
|
const index = e.detail.value;
|
if (this.areaList[index]) {
|
this.selectedOutAreaName = this.areaList[index].name;
|
this.outAreaId = this.areaList[index].id;
|
}
|
},
|
|
// 托盘编码输入事件
|
onPalletCode1Input() {
|
this.barcodeFocus = false;
|
this.$nextTick(() => {
|
if (this.PalletCode1 && this.PalletCode1 !== '') {
|
this.addressFocus = true;
|
}
|
});
|
},
|
|
// 入库任务
|
inboundTask() {
|
// 表单验证
|
if (!this.PalletCode1 || this.PalletCode1.trim() === "") {
|
this.$refs.luToast.show({
|
title: "托盘编码不能为空",
|
type: "error"
|
});
|
this.barcodeFocus = true;
|
return;
|
}
|
|
if (!this.SourceAddress || this.SourceAddress.trim() === "") {
|
this.$refs.luToast.show({
|
title: "搬运起点不能为空",
|
type: "error"
|
});
|
this.addressFocus = true;
|
return;
|
}
|
|
if (!this.AreaId) {
|
this.$refs.luToast.show({
|
title: "请选择终点区域",
|
type: "error"
|
});
|
return;
|
}
|
|
if (this.isLoading) return;
|
this.isLoading = true;
|
|
const param = {
|
PalletCode: this.PalletCode1.trim(),
|
Position: this.SourceAddress.trim(),
|
AreaId: this.AreaId,
|
IsFull: false,
|
};
|
|
this.$u.post('/api/Task/RequestInboundTaskAsync', param).then(res => {
|
this.isLoading = false;
|
|
if (res.status) {
|
this.$refs.luToast.show({
|
title: res.message || "入库任务创建成功",
|
type: "success"
|
});
|
this.voiceSpeech('../../static/success.mp3');
|
|
// 重置表单
|
this.PalletCode1 = "";
|
this.SourceAddress = "";
|
this.TargetAddress = "";
|
this.AreaId = "";
|
this.selectedAreaName = "";
|
this.barcodeFocus = true;
|
this.addressFocus = false;
|
} else {
|
this.$refs.luToast.show({
|
title: res.message || "入库任务创建失败",
|
type: "error"
|
});
|
this.barcodeFocus = true;
|
}
|
}).catch(err => {
|
this.isLoading = false;
|
console.error('InboundTask error:', err);
|
this.$refs.luToast.show({
|
title: "网络请求失败",
|
type: "error"
|
});
|
this.barcodeFocus = true;
|
});
|
},
|
|
// 出库任务
|
outboundTask() {
|
if (!this.outAreaId) {
|
this.$refs.luToast.show({
|
title: "请选择出库区域",
|
type: "error"
|
});
|
return;
|
}
|
|
if (this.isLoading) return;
|
this.isLoading = true;
|
|
const param = {
|
AreaId: this.outAreaId,
|
TargetAddress: this.TargetAddress,
|
IsFull: false,
|
};
|
|
this.$u.post('/api/Task/RequestOutboundTaskAsync', param).then(res => {
|
this.isLoading = false;
|
|
if (res.status) {
|
this.$refs.luToast.show({
|
title: res.message || "出库任务创建成功",
|
type: "success"
|
});
|
this.voiceSpeech('../../static/success.mp3');
|
|
// 重置表单
|
this.TargetAddress = "";
|
this.outAreaId = "";
|
this.selectedOutAreaName = "";
|
} else {
|
this.$refs.luToast.show({
|
title: res.message || "出库任务创建失败",
|
type: "error"
|
});
|
}
|
}).catch(err => {
|
this.isLoading = false;
|
console.error('OutboundTask error:', err);
|
this.$refs.luToast.show({
|
title: "网络请求失败",
|
type: "error"
|
});
|
});
|
},
|
},
|
|
// 页面卸载时销毁音频
|
onUnload() {
|
innerAudioContext.destroy();
|
}
|
}
|
</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;
|
}
|
</style>
|