<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="出库区域">
|
<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-item label="出库起点">
|
<uni-easyinput type="text" v-model="SourceAddress" placeholder="请输入出库起点"
|
ref="targetInput" />
|
</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 {
|
// 表单数据
|
SourceAddress:"",
|
TargetAddress: "",
|
AreaId: "",
|
selectedAreaName: "",
|
|
// 区域数据
|
areaList: [], // 原始区域数据 [{id, name}]
|
areaNames: [], // 区域名称数组(用于picker显示)
|
|
// UI控制
|
items: ['出库'],
|
current: 0,
|
barcodeFocus: true,
|
addressFocus: false,
|
isLoading: false, // 加载状态
|
}
|
},
|
|
onLoad() {
|
this.QueryAreaInfo();
|
// 自动聚焦到托盘条码输入框
|
setTimeout(() => {
|
this.barcodeFocus = true;
|
}, 100);
|
},
|
|
methods: {
|
// 分段选择器点击事件
|
onClickItem(e) {
|
if (this.current !== e.currentIndex) {
|
this.current = e.currentIndex;
|
}
|
},
|
|
// 播放语音提示
|
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 = this.areaList.map(item => item.name);
|
|
// 可选:显示加载成功提示(静默加载,不弹toast)
|
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;
|
}
|
},
|
|
// 出库任务
|
outboundTask() {
|
// 1. 表单验证
|
if (!this.TargetAddress || this.TargetAddress.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.barcodeFocus = true;
|
return;
|
}
|
// 可选:验证出库区域
|
// if (!this.AreaId) {
|
// this.$refs.luToast.show({
|
// title: "请选择出库区域",
|
// type: "error"
|
// });
|
// return;
|
// }
|
|
// 防止重复提交
|
if (this.isLoading) return;
|
this.isLoading = true;
|
|
// 构建请求参数
|
const params = {
|
Position: this.SourceAddress.trim(),
|
TargetAddress: this.TargetAddress,
|
// AreaId: this.AreaId,
|
};
|
|
// 发送请求
|
this.$u.post('/api/Task/RequestOutboundTaskAsync', params).then(res => {
|
this.isLoading = false;
|
|
if (res.status) {
|
this.$refs.luToast.show({
|
title: res.message || "出库任务创建成功",
|
type: "success"
|
});
|
|
// 播放成功提示音
|
this.voiceSpeech('../../static/success.mp3');
|
|
// 重置表单
|
this.SourceAddress = "";
|
this.TargetAddress = "";
|
// 保留区域选择,不清空
|
// this.AreaId = "";
|
// this.selectedAreaName = "";
|
|
// 重新聚焦到托盘条码输入框
|
this.barcodeFocus = false;
|
this.$nextTick(() => {
|
this.barcodeFocus = true;
|
});
|
} else {
|
this.$refs.luToast.show({
|
title: res.message || "出库任务创建失败",
|
type: "error"
|
});
|
// 失败时重新聚焦
|
this.barcodeFocus = true;
|
}
|
}).catch(err => {
|
this.isLoading = false;
|
console.error('OutboundTask error:', err);
|
this.$refs.luToast.show({
|
title: "网络请求失败,请重试",
|
type: "error"
|
});
|
this.barcodeFocus = true;
|
});
|
},
|
|
// 重置表单(如需手动重置)
|
resetForm() {
|
this.PalletCode = "";
|
this.TargetAddress = "";
|
this.barcodeFocus = true;
|
}
|
},
|
|
// 页面卸载时销毁音频
|
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;
|
}
|
|
.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>
|