shish 11 місяців тому
батько
коміт
4502320aa0
1 змінених файлів з 59 додано та 19 видалено
  1. 59 19
      hdPad/src/pages/home/components/balanceChange.vue

+ 59 - 19
hdPad/src/pages/home/components/balanceChange.vue

@@ -1,24 +1,38 @@
 <template>
     <view class="balance-change">
-        <block v-if="!$util.isEmpty(list.data)">
-            <view class="balance-table">
-                <view v-for="(item, index) in list.data" :key="index" class="balance-item">
-                    <view class="balance-item-main">
-                        <view class="balance-item-left">
-                            <view class="item-date">{{ formatDate(item.addTime) }}</view>
-                            <view class="item-event">{{ formatText(item.event) }}</view>
-                        </view>
-                        <view class="balance-item-right">
-                            <view class="item-amount" :class="{'income': item.amount.includes('+'), 'expense': item.amount.includes('-')}">{{ item.amount }}</view>
-                            <view class="item-balance">余额: {{ parseFloat(item.balance) }}</view>
+        <scroll-view 
+            scroll-y="true" 
+            class="balance-scroll" 
+            @scrolltolower="loadMore" 
+            :scroll-top="scrollTop"
+            :lower-threshold="50"
+        >
+            <block v-if="!$util.isEmpty(list.data)">
+                <view class="balance-table">
+                    <view v-for="(item, index) in list.data" :key="index" class="balance-item">
+                        <view class="balance-item-main">
+                            <view class="balance-item-left">
+                                <view class="item-date">{{ formatDate(item.addTime) }}</view>
+                                <view class="item-event">{{ formatText(item.event) }}</view>
+                            </view>
+                            <view class="balance-item-right">
+                                <view class="item-amount" :class="{'income': item.amount.includes('+'), 'expense': item.amount.includes('-')}">{{ item.amount }}</view>
+                                <view class="item-balance">余额: {{ parseFloat(item.balance) }}</view>
+                            </view>
                         </view>
                     </view>
                 </view>
-            </view>
-        </block>
-        <block v-else>
-            <view class="balance-table">暂无数据</view>
-        </block>
+                <view class="loading-more" v-if="list.isLoading">
+                    <text class="loading-text">加载中...</text>
+                </view>
+                <view class="no-more" v-if="list.noMore">
+                    <text class="no-more-text">没有更多数据了</text>
+                </view>
+            </block>
+            <block v-else>
+                <view class="empty-data">暂无数据</view>
+            </block>
+        </scroll-view>
     </view>
 </template>
 <script>
@@ -35,6 +49,7 @@ export default {
     },
     data() {
         return {
+            scrollTop: 0
         };
     },
     watch: {
@@ -85,7 +100,16 @@ export default {
         },
         refresh() {
             this.resetList()
-            this.init()
+            this.scrollTop = 0
+            this.$nextTick(() => {
+                this.init()
+            })
+        },
+        loadMore() {
+            if (!this.list.noMore && !this.list.isLoading) {
+                this.list.page++
+                this.init()
+            }
         }
     }
 };
@@ -99,6 +123,12 @@ export default {
     max-height: 100vh;
     box-sizing: border-box;
     flex: 1;
+    
+    .balance-scroll {
+        flex: 1;
+        height: 100%;
+    }
+    
     .balance-title {
         padding: 3upx;
         font-size: 10upx;
@@ -109,12 +139,23 @@ export default {
         height: 16upx;
         line-height: 16upx;
     }   
+    
     .empty-data {
         text-align: center;
         padding: 20upx 0;
         color: #999;
         font-size: 10upx;
     }
+    
+    .loading-more, .no-more {
+        text-align: center;
+        padding: 10upx 0;
+        
+        .loading-text, .no-more-text {
+            font-size: 8upx;
+            color: #999;
+        }
+    }
 }
 .table-header-container {
     position: sticky;
@@ -138,10 +179,9 @@ export default {
     overflow: hidden;
     background: #fff;
     box-shadow: 0 2upx 12upx rgba(0,0,0,0.04);
-    margin: 0 0;
+    margin: 0 0 10upx 0;
     font-size: 8upx;
     box-sizing: border-box;
-    flex: 1;
     padding: 5upx;
 }