用户模块-会员信息展示,猜你喜欢分页加载,设置页分包,预下载,退出登录
1
// src/pages/my/my.vue <script setup lang="ts"> // 获取屏幕边界到安全区域距离 const { safeAreaInsets } = uni.getSystemInfoSync() // 订单选项 const orderTypes = [ { type: 1, text: '待付款', icon: 'icon-currency' }, { type: 2, text: '待发货', icon: 'icon-gift' }, { type: 3, text: '待收货', icon: 'icon-check' }, { type: 4, text: '待评价', icon: 'icon-comment' }, ] </script> <template> <scroll-view class="viewport" scroll-y enable-back-to-top> <!-- 个人资料 --> <view class="profile" :style="{ paddingTop: safeAreaInsets!.top + 'px' }"> <!-- 情况1:已登录 --> <view class="overview" v-if="false"> <navigator url="/pagesMember/profile/profile" hover-class="none"> <image class="avatar" mode="aspectFill" src="https://pcapi-xiaotuxian-front-devtest.itheima.net/miniapp/uploads/avatar_3.jpg" ></image> </navigator> <view class="meta"> <view class="nickname"> 黑马程序员 </view> <navigator class="extra" url="/pagesMember/profile/profile" hover-class="none"> <text class="update">更新头像昵称</text> </navigator> </view> </view> <!-- 情况2:未登录 --> <view class="overview" v-else> <navigator url="/pages/login/login" hover-class="none"> <image class="avatar gray" mode="aspectFill" src="http://yjy-xiaotuxian-dev.oss-cn-beijing.aliyuncs.com/picture/2021-04-06/db628d42-88a7-46e7-abb8-659448c33081.png" ></image> </navigator> <view class="meta"> <navigator url="/pages/login/login" hover-class="none" class="nickname"> 未登录 </navigator> <view class="extra"> <text class="tips">点击登录账号</text> </view> </view> </view> <navigator class="settings" url="/pagesMember/settings/settings" hover-class="none"> 设置 </navigator> </view> <!-- 我的订单 --> <view class="orders"> <view class="title"> 我的订单 <navigator class="navigator" url="/pagesOrder/list/list?type=0" hover-class="none"> 查看全部订单<text class="icon-right"></text> </navigator> </view> <view class="section"> <!-- 订单 --> <navigator v-for="item in orderTypes" :key="item.type" :class="item.icon" :url="`/pagesOrder/list/list?type=${item.type}`" class="navigator" hover-class="none" > {{ item.text }} </navigator> <!-- 客服 --> <button class="contact icon-handset" open-type="contact">售后</button> </view> </view> <!-- 猜你喜欢 --> <view class="guess"> <XtxGuess ref="guessRef" /> </view> </scroll-view> </template> <style lang="scss"> page { height: 100%; overflow: hidden; background-color: #f7f7f8; } .viewport { height: 100%; background-repeat: no-repeat; background-image: url(https://pcapi-xiaotuxian-front-devtest.itheima.net/miniapp/images/center_bg.png); background-size: 100% auto; } /* 用户信息 */ .profile { margin-top: 20rpx; position: relative; .overview { display: flex; height: 120rpx; padding: 0 36rpx; color: #fff; } .avatar { width: 120rpx; height: 120rpx; border-radius: 50%; background-color: #eee; } .gray { filter: grayscale(100%); } .meta { display: flex; flex-direction: column; justify-content: center; align-items: flex-start; line-height: 30rpx; padding: 16rpx 0; margin-left: 20rpx; } .nickname { max-width: 350rpx; margin-bottom: 16rpx; font-size: 30rpx; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .extra { display: flex; font-size: 20rpx; } .tips { font-size: 22rpx; } .update { padding: 3rpx 10rpx 1rpx; color: rgba(255, 255, 255, 0.8); border: 1rpx solid rgba(255, 255, 255, 0.8); margin-right: 10rpx; border-radius: 30rpx; } .settings { position: absolute; bottom: 0; right: 40rpx; font-size: 30rpx; color: #fff; } } /* 我的订单 */ .orders { position: relative; z-index: 99; padding: 30rpx; margin: 50rpx 20rpx 0; background-color: #fff; border-radius: 10rpx; box-shadow: 0 4rpx 6rpx rgba(240, 240, 240, 0.6); .title { height: 40rpx; line-height: 40rpx; font-size: 28rpx; color: #1e1e1e; .navigator { font-size: 24rpx; color: #939393; float: right; } } .section { width: 100%; display: flex; justify-content: space-between; padding: 40rpx 20rpx 10rpx; .navigator, .contact { text-align: center; font-size: 24rpx; color: #333; &::before { display: block; font-size: 60rpx; color: #ff9545; } } .contact { padding: 0; margin: 0; border: 0; background-color: transparent; line-height: inherit; } } } /* 猜你喜欢 */ .guess { background-color: #f7f7f8; margin-top: 20rpx; } </style>
看一下现在的效果
渲染:
猜你喜欢分页加载
这里发现猜你喜欢有个地方没有完善不能跳转到商品页面
我们呢现在把获取组件和滚动触底, 加载分页数据封装一下
分包预下载
我们不推荐直接再pages里分包, 在src下新建一个包再分包,好的我们现在看一下建完在哪里能看到
<script setup lang="ts"> // </script> <template> <view class="viewport"> <!-- 列表1 --> <view class="list" v-if="true"> <navigator url="/pagesMember/address/address" hover-class="none" class="item arrow"> 我的收货地址 </navigator> </view> <!-- 列表2 --> <view class="list"> <button hover-class="none" class="item arrow" open-type="openSetting">授权管理</button> <button hover-class="none" class="item arrow" open-type="feedback">问题反馈</button> <button hover-class="none" class="item arrow" open-type="contact">联系我们</button> </view> <!-- 列表3 --> <view class="list"> <navigator hover-class="none" class="item arrow" url=" ">关于小兔鲜儿</navigator> </view> <!-- 操作按钮 --> <view class="action"> <view class="button">退出登录</view> </view> </view> </template> <style lang="scss"> page { background-color: #f4f4f4; } .viewport { padding: 20rpx; } /* 列表 */ .list { padding: 0 20rpx; background-color: #fff; margin-bottom: 20rpx; border-radius: 10rpx; .item { line-height: 90rpx; padding-left: 10rpx; font-size: 30rpx; color: #333; border-top: 1rpx solid #ddd; position: relative; text-align: left; border-radius: 0; background-color: #fff; &::after { width: auto; height: auto; left: auto; border: none; } &:first-child { border: none; } &::after { right: 5rpx; } } .arrow::after { content: '\e6c2'; position: absolute; top: 50%; color: #ccc; font-family: 'erabbit' !important; font-size: 32rpx; transform: translateY(-50%); } } /* 操作按钮 */ .action { text-align: center; line-height: 90rpx; margin-top: 40rpx; font-size: 32rpx; color: #333; .button { background-color: #fff; margin-bottom: 20rpx; border-radius: 10rpx; } } </style> 退出登录 设置页需实现以下业务: 退出登录,清理用户信息,返回上一页。 根据登录状态,按需展示页面内容。 参考效果 登录状态 参考代码 // src/pagesMember/settings/settings.vue <script setup lang="ts"> import { useMemberStore } from '@/stores' const memberStore = useMemberStore() // 退出登录 const onLogout = () => { // 模态弹窗 uni.showModal({ content: '是否退出登录?', success: (res) => { if (res.confirm) { // 清理用户信息 memberStore.clearProfile() // 返回上一页 uni.navigateBack() } }, }) } </script> <template> <view class="viewport"> <!-- 列表1 --> <view class="list" v-if="memberStore.profile"> <navigator url="./address/address" hover-class="none" class="item arrow"> 我的收货地址 </navigator> </view> <!-- 列表2 --> <view class="list"> <button hover-class="none" class="item arrow" open-type="openSetting">授权管理</button> <button hover-class="none" class="item arrow" open-type="feedback">问题反馈</button> <button hover-class="none" class="item arrow" open-type="contact">联系我们</button> </view> <!-- 列表3 --> <view class="list"> <navigator hover-class="none" class="item arrow" url=" ">关于小兔鲜儿</navigator> </view> <!-- 操作按钮 --> <view class="action" v-if="memberStore.profile"> <view @tap="onLogout" class="button">退出登录</view> </view> </view> </template>
看一下效果
预下载
看一下效果
退出登录: