<template>
|
<view>
|
<u-sticky>
|
<view style="background-color: #ffffff;">
|
<uni-search-bar @confirm="search" v-model="searchValue"></uni-search-bar>
|
</view>
|
</u-sticky>
|
<uni-list :border="true">
|
<uni-list-item
|
direction="column"
|
clickable
|
@click="groupClick(item.orderNo)"
|
link
|
:to="`${page}${item.orderNo}&warehouseId=${warehouseId}&id=${item.id}`"
|
v-for="item in allReceivingOrders"
|
:key="item.orderNo"
|
>
|
<template v-slot:body>
|
<uni-group margin-top="20">
|
<view style="line-height: 17px;color: #596671;font-size: 14px;display: flex;justify-content: space-between;">
|
盘点单号 {{item.orderNo}}
|
</view>
|
<view style="line-height: 17px;color: #596671;font-size: 14px;display: flex;justify-content: space-between;">
|
创建时间 {{item.createDate}}
|
</view>
|
<!-- 托盘编号展示区域 -->
|
<view style="line-height: 17px;color: #596671;font-size: 14px;margin-top: 10rpx;">
|
需盘点盘号:
|
<view style="display: inline-flex;flex-wrap: wrap;margin-left: 10rpx;">
|
<text
|
style="display: inline-block;background-color: #f5f5f5;padding: 2rpx 10rpx;border-radius: 4rpx;margin: 0 5rpx 5rpx 0;"
|
v-for="(detail, index) in item.details"
|
:key="index">
|
{{detail.takePalletCode}} ,料号:{{detail.materielCode}}
|
</text>
|
</view>
|
</view>
|
<view
|
style="margin-top: 10rpx;display: flex;align-items: center; ">
|
<view style="text-align: center;line-height: 40rpx;border-radius: 8rpx; width: 238rpx;height: 40rpx;font-size: 22rpx;background-color:rgba(22,127,247,0.18);color: #1F63FF;">
|
盘点状态 {{item.takeStockStatus}}
|
</view>
|
</view>
|
</uni-group>
|
</template>
|
</uni-list-item>
|
</uni-list>
|
<!-- 加载更多组件 -->
|
<uni-load-more
|
:status="status"
|
:show-icon="true"
|
v-if="allReceivingOrders.length > 0 || status === 'loading'"
|
></uni-load-more>
|
|
<u-back-top :scroll-top="scrollTop" top="400"></u-back-top>
|
</view>
|
</template>
|
|
<script>
|
import { TakeStockStatus } from '../../common/config.js'
|
export default {
|
data() {
|
return {
|
page: "/pages/stash/TakeStock?orderNo=",
|
searchValue: "",
|
warehouseId: "",
|
status: "more", // 加载状态:more-可加载,loading-加载中,noMore-无更多
|
allReceivingOrders: [],
|
pageNo: 1,
|
pageSize: 5, // 关键修复:与后端保持一致(每页5条)
|
scrollTop: 0,
|
isLoaded: false,
|
isLoading: false, // 防止重复加载的锁
|
hasMore: true // 是否还有更多数据
|
}
|
},
|
onLoad(res) {
|
this.warehouseId = res.warehouseId;
|
this.isLoaded = true;
|
this.resetData(); // 重置数据并加载第一页
|
},
|
onPageScroll(e) {
|
this.scrollTop = e.scrollTop;
|
},
|
onShow() {
|
if (this.isLoaded) {
|
this.resetData();
|
}
|
},
|
onReachBottom() {
|
// 下拉到底部时加载更多
|
if (this.hasMore && !this.isLoading) {
|
this.pageNo += 1;
|
this.getData();
|
}
|
},
|
methods: {
|
// 搜索时重置数据
|
search() {
|
this.resetData();
|
},
|
|
// 重置数据到初始状态
|
resetData() {
|
this.pageNo = 1;
|
this.allReceivingOrders = [];
|
this.hasMore = true;
|
this.status = "more";
|
this.getData();
|
},
|
|
groupClick() {
|
// 点击事件处理
|
},
|
|
// 获取数据
|
getData() {
|
if (this.isLoading || !this.hasMore) return;
|
|
this.isLoading = true;
|
this.status = "loading";
|
|
const postData = {
|
MainData: {
|
orderNo: this.searchValue,
|
pageNo: this.pageNo,
|
// 后端固定每页5条,这里可以不传递pageSize,保持与后端一致
|
warehouseId: this.warehouseId,
|
},
|
}
|
|
this.$u.post('/api/TakeStockOrder/GetTakeStockOrders', postData)
|
.then((res) => {
|
this.isLoading = false;
|
|
if (res.status) {
|
const processedData = res.data.map(item => ({
|
...item,
|
takeStockStatus: TakeStockStatus.find(status => status.value === item.takeStockStatus)?.label || ''
|
}));
|
|
if (processedData.length > 0) {
|
if (this.pageNo === 1) {
|
this.allReceivingOrders = processedData;
|
} else {
|
this.allReceivingOrders = [...this.allReceivingOrders, ...processedData];
|
}
|
|
// 关键修复:根据后端实际返回数量判断是否还有更多
|
// 后端固定每页5条,所以当返回5条时说明可能还有更多,少于5条则说明没有更多
|
this.hasMore = processedData.length === this.pageSize;
|
this.status = this.hasMore ? "more" : "noMore";
|
} else {
|
if (this.pageNo === 1) {
|
this.allReceivingOrders = [];
|
}
|
this.hasMore = false;
|
this.status = "noMore";
|
}
|
} else {
|
this.status = this.pageNo > 1 ? "more" : "noMore";
|
this.$u.toast('数据加载失败,请重试');
|
}
|
})
|
.catch(() => {
|
this.isLoading = false;
|
this.status = this.pageNo > 1 ? "more" : "noMore";
|
this.$u.toast('网络错误,请检查网络');
|
});
|
}
|
}
|
}
|
</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;
|
}
|
|
.customcss {
|
display: flex;
|
position: fixed;
|
width: 100%;
|
top: 10px;
|
text-align: center;
|
z-index: 999;
|
left: 30px;
|
height: 20%;
|
}
|
|
.footer {
|
padding-top: 50%;
|
}
|
</style>
|