647556386
2 天以前 2f8fc989f339a936b01092caebd4c46e6109da1b
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
<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;">
                            盘点单号&nbsp;&nbsp;{{item.orderNo}} 
                        </view>
                        <view style="line-height: 17px;color: #596671;font-size: 14px;display: flex;justify-content: space-between;">
                            创建时间&nbsp;&nbsp;{{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;">
                                盘点状态&nbsp;&nbsp;{{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>