Ver Fonte

订单列表下拉刷新及个人中心页刷新

zuypeng há 1 ano atrás
pai
commit
137c908a66

+ 2 - 2
src/App.vue

@@ -50,7 +50,7 @@ export default <any>{
     console.log("app onShow", options)
     let device = uni.getWindowInfo();
     let backup = uni.getStorageSync('backup')
-    console.log("backup", backup)
+    // console.log("backup", backup)
     this.globalData = Object.assign({}, this.globalData, {
       device: {
         windowWidth: device.windowWidth,
@@ -59,7 +59,7 @@ export default <any>{
         windowTop: device.windowTop,
       }
     }, backup)
-    console.log("backup", backup,this.globalData)
+    console.log("backup", this.globalData)
   },
   onHide() {
     console.log("app onHide", getApp<any>().globalData)

+ 48 - 40
src/pages-order/list/index.vue

@@ -1,42 +1,42 @@
 <template>
   <view class="container">
-      <uv-list>
-        <uv-list-item
-            clickable show-arrow v-for="(item,index) in state.orderList" :key="index" @click="handleClickDetail(item)">
-          <template #default>
-            <view class="wallet-item">
-              <view class="wallet-item_header">
-                <view class="flex-inline">
-                  <text class="wallet-item_header-type">洗车消费</text>
-                  <uv-text class="ml10" style="margin-left: 10px;" plain :size="12"
-                           :type="item.payStatus==0?'primary':(item.payStatus==1?'success':'error')"
-                           :text="fmtDictName('Order.pay', item.payStatus)"></uv-text>
-
-<!--                  <uv-tags class="ml10" style="margin-left: 10px;" size="mini" plain
-                           :type="item.orderStatus==0?'primary':(item.orderStatus==1?'success':'error')"
-                           :text="fmtDictName('Order.status', item.orderStatus)"></uv-tags>-->
-                </view>
-                <text class="wallet-item_header-amt">{{ (item.amount / 100).toFixed(2) }}元</text>
-              </view>
-              <view class="wallet-item_body">
-                <text class="wallet-item_body-order">{{ item.orderId }}</text>
-                <text class="wallet-item_body-time">{{ fmtDateTime(item.startTime) }}</text>
+    <uv-list>
+      <uv-list-item
+          clickable show-arrow v-for="(item,index) in state.orderList" :key="index" @click="handleClickDetail(item)">
+        <template #default>
+          <view class="wallet-item">
+            <view class="wallet-item_header">
+              <view class="flex-inline">
+                <text class="wallet-item_header-type">洗车消费</text>
+                <uv-text class="ml10" style="margin-left: 10px;" plain :size="12"
+                         :type="item.payStatus==0?'primary':(item.payStatus==1?'success':'error')"
+                         :text="fmtDictName('Order.pay', item.payStatus)"></uv-text>
+
+                <!--                  <uv-tags class="ml10" style="margin-left: 10px;" size="mini" plain
+                                           :type="item.orderStatus==0?'primary':(item.orderStatus==1?'success':'error')"
+                                           :text="fmtDictName('Order.status', item.orderStatus)"></uv-tags>-->
               </view>
+              <text class="wallet-item_header-amt">{{ (item.amount / 100).toFixed(2) }}元</text>
             </view>
-          </template>
-        </uv-list-item>
-      </uv-list>
-
-      <uv-load-more :status="computedLoadMoreStatus"
-                    bgColor="#fff"
-                    @loadmore="loadMore" dashed :height="30"/>
+            <view class="wallet-item_body">
+              <text class="wallet-item_body-order">{{ item.orderId }}</text>
+              <text class="wallet-item_body-time">{{ fmtDateTime(item.startTime) }}</text>
+            </view>
+          </view>
+        </template>
+      </uv-list-item>
+    </uv-list>
+
+    <uv-load-more :status="computedLoadMoreStatus"
+                  bgColor="#fff"
+                  @loadmore="loadMore" dashed :height="30"/>
     <!--    <login-bar class="w100 text-center"></login-bar>-->
     <!--    <tab-bar :index="3"/>-->
   </view>
 </template>
 
 <script lang="ts" setup>
-import {computed, reactive} from 'vue'
+import {computed, reactive, ref} from 'vue'
 import {onHide, onShow, onPullDownRefresh, onReachBottom,} from "@dcloudio/uni-app";
 import {get} from "@/utils/https";
 import {fmtDictName, fmtDateTime} from "@/utils/common";
@@ -59,22 +59,21 @@ onShow(() => {
     console.error(gd)
     return;
   }
-  loadOrderList();
+  loadOrderList(true);
 });
 
 onHide(() => {
   Object.assign(state, initState());
 })
 
-const computedLoadMoreStatus =computed(()=>{
-  return state.hasNext?'loadmore':'nomore'
+const computedLoadMoreStatus = computed(() => {
+  return state.hasNext ? 'loadmore' : 'nomore'
 })
 
 onPullDownRefresh(() => {
   console.log("onPullDownRefresh")
   setTimeout(function () {
-    state.query.pageNum = 1;
-    loadOrderList()
+    loadOrderList(true)
   }, 100);
 })
 
@@ -85,17 +84,26 @@ onReachBottom(() => {
 
 const loadMore = () => {
   if (state.hasNext) {
-    state.query.pageNum++
-    loadOrderList()
+    loadOrderList(false)
   }
 }
 
-const loadOrderList = () => {
+const loadOrderList = (refresh: boolean) => {
+  if (!refresh) {
+    state.query.pageNum++
+  } else {
+    state.query.pageNum = 1
+  }
   //load order list
   get(`/wash-order/listMyWashOrder`, state.query).then((res: any) => {
-    if(res.list){
-      state.orderList = state.orderList.concat(res.list);
-      state.hasNext = res.pages>state.query.pageNum;
+    if (res.list) {
+      if (refresh) {
+        state.orderList = res.list;
+      } else {
+        state.orderList = state.orderList.concat(res.list);
+      }
+
+      state.hasNext = res.pages > state.query.pageNum;
     }
 
     uni.stopPullDownRefresh();

+ 2 - 0
src/pages-user/wallet/index.vue

@@ -150,6 +150,8 @@ const loadData = () => {
   })
   get(`/account/walletDetailList`, {type: tab.value}).then((list: any) => {
     dataList.value = list;
+  }).then(()=>{
+    uni.stopPullDownRefresh()
   })
 }
 

+ 1 - 0
src/pages-user/wallet/recharge.vue

@@ -100,6 +100,7 @@ const confirm = () => {
           title:'充值完成',
           icon:'success'
         })
+        getApp<any>().globalData.refresh =true;
         setTimeout(()=>{
           uni.switchTab({
             url:'/pages/user/index'

+ 0 - 1
src/pages.json

@@ -112,7 +112,6 @@
             "navigationStyle": "default",
             "navigationBarTitleText": "登录",
             "navigationBarBackgroundColor": "#ffffff",
-            "enablePullDownRefresh": true
           }
         },
         {

+ 48 - 22
src/pages/user/index.vue

@@ -1,7 +1,7 @@
 <template>
   <uv-navbar leftIcon="" title="我的" bg-color="#C6171E"></uv-navbar>
   <view class="w100 bg" style="background-color:#C6171E "></view>
-<!--  <image src="/static/user/user-bg.png" mode="widthFix" class="bg"/>-->
+  <!--  <image src="/static/user/user-bg.png" mode="widthFix" class="bg"/>-->
 
   <block>
     <view class="container" :style="containerStyle">
@@ -16,13 +16,13 @@
           <image
               class="avatar"
               src='/static/iconfont/me.svg'>
-              </image>
+          </image>
           <view class="phone  fw-500">{{ user.mobilePhone }}</view>
 
           <view class="money-box">
             <view class="money" @click="toPage({path: '/pages-user/wallet/index'})">
               <view class="money-left">
-                <uv-icon name="coupon"  size="24"  color="#C6171E"></uv-icon>
+                <uv-icon name="coupon" size="24" color="#C6171E"></uv-icon>
                 <!--              <image src="/static/iconfont/chongzhi.svg"  mode="widthFit"  style="width: 40rpx;height: 40rpx"></image>-->
                 <!--              <uv-icon name="red-packet" size="24" color="#C6171E"></uv-icon>-->
                 <view style="font-size: 16px;margin-left: 10rpx;">钱包 | 充值</view>
@@ -30,7 +30,7 @@
 
               <view class="money-right">
 
-                <view class="money-right_balance"> ¥  {{ ((user.balance || 0) / 100).toFixed(2) }}</view>
+                <view class="money-right_balance"> ¥ {{ ((user.balance || 0) / 100).toFixed(2) }}</view>
               </view>
 
             </view>
@@ -55,19 +55,19 @@
         </block>
 
         <view class="logout-btn" v-if="isLogin">
-          <view class="mt20 logout-btn-wrap"  type="error" @click="logoutUser">退出登录</view>
+          <view class="mt20 logout-btn-wrap" type="error" @click="logoutUser">退出登录</view>
         </view>
       </view>
     </view>
   </block>
 
-<!--  <cover-view class="login_bar" v-if="!isLogin">
-    <login-bar class="w100 text-center"></login-bar>
-  </cover-view>-->
+  <!--  <cover-view class="login_bar" v-if="!isLogin">
+      <login-bar class="w100 text-center"></login-bar>
+    </cover-view>-->
 
-<!--  <view class="logout-btn">
-    <uv-button :custom-style="customStyle" type="error" @click="logoutUser">退出登录</uv-button>
-  </view>-->
+  <!--  <view class="logout-btn">
+      <uv-button :custom-style="customStyle" type="error" @click="logoutUser">退出登录</uv-button>
+    </view>-->
 
   <tab-bar :index="2"/>
 </template>
@@ -77,7 +77,7 @@ import {onHide, onLoad, onShow} from "@dcloudio/uni-app";
 import {computed, ref} from "vue";
 import TabBar from "@/components/tab-bar/index.vue";
 import LoginBar from "@/components/login-bar/index.vue";
-import {checkLogin, clearToken} from "@/utils/auth"
+import {checkLogin, clearToken, loadUserInfo} from "@/utils/auth"
 import {get} from "@/utils/https";
 import {getServicePhone} from "@/utils/common";
 
@@ -105,7 +105,7 @@ const menu = ref([
     title: "我的订单",
     path: "/pages-order/list/index",
 
-    icon:  '/static/user/faq.png'
+    icon: '/static/user/faq.png'
   },
   /*  {
       title: "我的收藏",
@@ -131,7 +131,6 @@ const menu = ref([
 ]);
 
 
-
 const toPage = (item: any) => {
   checkLogin().then(() => {
     let {title, path} = item;
@@ -223,24 +222,51 @@ const removeListener = () => {
 }
 
 onShow(() => {
-  const userData = getApp<any>().globalData.user;
-  if (userData && userData.id) {
-    isLogin.value = true;
-    user.value = userData;
+  let gd =  getApp<any>().globalData;
+  if(gd.refresh){
+    refreshUserProfile()
+  }else{
+    //半小时前登录的刷新
+    if(gd.user){
+      if (new Date().getTime() - new Date(gd.user.lastLoginTime).getTime() > 1800 * 1000) {
+        refreshUserProfile()
+      }else{
+        isLogin.value = true;
+        user.value = gd.user;
+      }
+    }
   }
+  let currentPages = getCurrentPages();
+  if (currentPages.length > 1) {
+    let lastPage = currentPages[currentPages.length - 2]
+    console.log('last page', lastPage.route)
+  }
+
+
   // loginListen();
   addListener();
 });
 
-onHide(()=>{
+const refreshUserProfile = () => {
+  isLogin.value = true;
+  loadUserInfo().then(val => {
+    if (val && val.id) {
+      user.value = val;
+    }
+    getApp<any>().globalData.refresh = false;
+  })
+}
+
+onHide(() => {
   removeListener();
 })
 </script>
 
 <style lang="scss" scope>
-page{
+page {
   background-color: #fafafa;
 }
+
 .bg {
   position: absolute;
   left: 0;
@@ -294,7 +320,7 @@ page{
       font-size: 40rpx;
     }
 
-    .money-box{
+    .money-box {
       background: #EEB9BB;
       padding: 60rpx 20rpx;
       display: flex;
@@ -396,7 +422,7 @@ page{
   width: calc(100vw - 60rpx);
   margin: 60rpx auto;
 
-  &-wrap{
+  &-wrap {
     height: 80rpx;
     border-radius: 40rpx;
     font-size: 28rpx;

+ 9 - 8
src/utils/auth.ts

@@ -181,12 +181,13 @@ export function checkLogin() {
 
 export async function loadUserInfo() {
     getApp<any>().globalData.manualLogout = false;
-    get(`/user/me`).then((res: any) => {
-        // getApp<any>().globalData.user = res;
-        // getApp<any>().globalData.isLogin = true;
-        getApp<any>().globalData = Object.assign({}, {...getApp<any>().globalData},{user:res,isLogin:true,manualLogout:false})
+    return new Promise(async (resolve, reject) => {
+        let res = await get(`/user/me`);
+        getApp<any>().globalData = Object.assign({}, {...getApp<any>().globalData}, {user: res, isLogin: true, manualLogout: false})
         uni.$emit('login', {isLogin: true})
+        resolve(res)
     })
+
 }
 
 export function refresh(): Promise<string> {
@@ -247,20 +248,20 @@ export function setToken(token: string) {
     } else {
         console.log("set token", token)
     }
-    getApp<any>().globalData = Object.assign({}, {...getApp<any>().globalData},{token,isLogin:true})
+    getApp<any>().globalData = Object.assign({}, {...getApp<any>().globalData}, {token, isLogin: true})
     uni.setStorageSync("token", token)
 }
 
 export function clearToken() {
-    let device =  uni.getWindowInfo();
+    let device = uni.getWindowInfo();
     let initGlobalData = {
         token: "",
         user: {},
         isLogin: false,
         last: {},
         device: {
-            windowWidth:device.windowWidth,
-            windowHeight:device.windowHeight,
+            windowWidth: device.windowWidth,
+            windowHeight: device.windowHeight,
             screenTop: device.screenTop,
             windowTop: device.windowTop,
         },