<template> <view class="container"> <view class="vheigh"></view> <view class="top-image"><image src="../../static/img/user-top.png" mode=""></image></view> <view class="" style="height: 80rpx;"></view> <view class="user-box"> <image class="avatar" :src="userInfo.avatar" mode="" v-if="userInfo.avatar"></image> <image class="avatar" src="../../static/error/missing-face.png" mode="" v-else></image> <!-- <view class="user-name">{{ userInfo.phone | phone }}</view> --> <view class="user-name">{{ userInfo.nickname }}</view> <view class="user-shop flex"> <view class="user-shop-item" v-if="userInfo.alliance == 1"> <image class="user-shop-icon" src="../../static/img/level.png" mode=""></image> <view class="user-shopname">老师</view> </view> <view class="user-shop-item" v-if="userInfo.shopkeeper == 1"> <image class="user-shop-icon" src="../../static/img/level.png" mode=""></image> <view class="user-shopname">店家</view> </view> <view class="user-shop-item" v-if="userInfo.provinces == 1"> <image class="user-shop-icon" src="../../static/img/level.png" mode=""></image> <view class="user-shopname">省盟</view> </view> <view class="user-shop-item" v-if="userInfo.group == 1"> <image class="user-shop-icon" src="../../static/img/level.png" mode=""></image> <view class="user-shopname">团长</view> </view> </view> <view class="user-money flex"> <view class="user-money-item" @click="navTo('/pages/user/yue')"> <view class="user-money-num">{{ userInfo.now_money || 0 }}</view> <view class="user-money-font">我的余额</view> </view> <view class="user-xian"></view> <view class="user-money-item" @click="navTo('/pages/user/award')"> <view class="user-money-num">{{ userInfo.brokerage_price || 0 }}</view> <view class="user-money-font">我的收益</view> </view> <view class="user-xian"></view> <view class="user-money-item" @click="navTo('/pages/user/extension')"> <view class="user-money-num">{{ total || 0 }}</view> <view class="user-money-font">我的推广</view> </view> </view> </view> <view class="shop flex" @click="navTo('/pages/shop/order')" v-if="userInfo.shopkeeper == 1"> <view class="shop-bg"><image src="../../static/img/shop.png" mode=""></image></view> <view class="shop-left">商家中心(进货/出货)</view> <view class="shop-right">立即进入</view> </view> <!-- 我的订单 --> <view class="order-box"> <view class="my-order flex" @click="navTo('/pages/order/order')"> <view class="order">我的订单</view> <view class="my-order-right"> <view class="my-order-right-font">全部</view> <image src="../../static/img/xiangxia.png" mode="scaleToFill"></image> </view> </view> <!-- 订单栏 --> <view class="order-section"> <view class="order-item" @click="navTo('/pages/order/order?state=0')"> <image src="../../static/img/img19.png" mode="scaleToFill"></image> <view class="text">待付款</view> </view> <view class="order-item" @click="navTo('/pages/order/order?state=1')"> <image src="../../static/img/img20.png" mode="scaleToFill"></image> <view class="text">待发货</view> </view> <view class="order-item" @click="navTo('/pages/order/order?state=2')"> <image src="../../static/img/img21.png" mode="scaleToFill"></image> <view class="text">待收货</view> </view> <view class="order-item" @click="navTo('/pages/order/order?state=4')"> <image src="../../static/img/img22.png" mode="scaleToFill"></image> <view class="text">已完成</view> </view> </view> </view> <!-- 我的工具 --> <view class="my-tool flex" @click="navTo('/pages/user/shareQrCode')"> <view class="my-tool-left"> <image class="my-tool-image1" src="../../static/icon/u1.png" mode=""></image> <view class="my-tool-font">推广海报</view> </view> <image class="my-tool-right" src="../../static/img/img39.png" mode=""></image> </view> <view class="my-tool flex" @click="navTo('/pages/set/address')"> <view class="my-tool-left"> <image class="my-tool-image2" src="../../static/icon/u2.png" mode=""></image> <view class="my-tool-font">收货地址</view> </view> <image class="my-tool-right" src="../../static/img/img39.png" mode=""></image> </view> <view class="my-tool flex" v-if="userInfo.pay_count > 0" @click="navTo('/pages/user/vip')"> <view class="my-tool-left"> <image class="my-tool-image3" src="../../static/icon/u3.png" mode=""></image> <view class="my-tool-font">身份认证</view> </view> <image class="my-tool-right" src="../../static/img/img39.png" mode=""></image> </view> <view class="my-tool flex" @click="openPopup"> <view class="my-tool-left"> <image class="my-tool-image4" src="../../static/icon/u4.png" mode=""></image> <view class="my-tool-font">客服</view> </view> <image class="my-tool-right" src="../../static/img/img39.png" mode=""></image> </view> <view class="my-tool flex" @click="navTo('/pages/set/set')"> <view class="my-tool-left"> <image class="my-tool-image5" src="../../static/icon/u5.png" mode=""></image> <view class="my-tool-font">设置</view> </view> <image class="my-tool-right" src="../../static/img/img39.png" mode=""></image> </view> <uni-popup ref="popup" type="center"> <view class="popup-box"> <view class="img"><image src="../../static/img/img009.png" mode=""></image></view> <view class="mian"> <view class="delivery"> <view class="title">已经为您定制专属客服</view> <image src="../../static/img/img010.png" mode=""></image> </view> <view class="nocancel">客服VX:{{ text }}</view> <view class="comfirm-box"> <view class="cancel" @click="cancel">取消</view> <view class="comfirm" @click="comfirm(text)">复制微信</view> </view> </view> </view> </uni-popup> </view> </template> <script> import uniCopy from '@/utils/uni-copy.js'; import { mapState, mapMutations } from 'vuex'; import uniList from '@/components/uni-list/uni-list.vue'; import uniListItem from '@/components/uni-list-item/uni-list-item.vue'; import { orderData, getUserInfo, repurchase, getSpreadPeople } from '@/api/user.js'; import { saveUrl, interceptor } from '@/utils/loginUtils.js'; let startY = 0, moveY = 0, pageAtTop = true; export default { components: { uniList, uniListItem }, // filters: { // phone(val) { // let str = ''; // if (val) { // val = '' + val; // str = val.substr(0, 3) + '****' + val.substr(7); // } // return str; // } // }, data() { return { total: '', coverTransform: 'translateY(0px)', coverTransition: '0s', moving: false, userDowm: 0, //卡片升级专属高度 userMaxDowm: 0, //卡片最高高度 text: '123456' }; }, onShow() { // 判断是否已经登录 if (this.hasLogin) { this.loadBaseData(); } }, onReady() { // 初始化获取页面宽度 uni.createSelectorQuery() .select('.container') .fields( { size: true }, data => { // 计算最多下拉的高度 this.userDowm = Math.floor((data.width / 750) * 185); // 计算最大触发修改高度事件 this.userMaxDowm = Math.floor((data.width / 750) * 250); } ) .exec(); }, computed: { ...mapState('user', ['userInfo', 'orderInfo', 'hasLogin']) }, methods: { ...mapMutations('user', ['setUserInfo', 'setOrderInfo']), // 加载初始数据 loadBaseData() { getSpreadPeople({ page: 1, limit: 1 }) .then(({ data }) => { this.total = data.total; }) .catch(e => { console.log(e); }); getUserInfo({}) .then(({ data }) => { this.setUserInfo(data); // 获取用户数据完毕后在获取订单数据防止多次跳转到登录页 orderData({}) .then(({ data }) => { this.setOrderInfo(data); }) .catch(e => { this.setOrderInfo({ complete_count: 0, //完成 received_count: 0, //待收货 unshipped_count: 0, //待发货 order_count: 0, //订单总数 unpaid_count: 0 //待付款 }); }); }) .catch(e => { console.log(e); }); }, /** * 统一跳转接口,拦截未登录路由 * navigator标签现在默认没有转场动画,所以用view */ navTo(url) { if (!this.hasLogin) { // 保存地址 saveUrl(); // 登录拦截 interceptor(); } else { uni.navigateTo({ url }); } }, openPopup() { this.$refs.popup.open(); }, // 客服弹窗 - 复制微信 comfirm(value) { let content = value; //需要复制的内容 console.log('复制的内容:', content); // content = typeof content === 'string' ? content : content.toString(); // 复制内容,必须字符串,数字需要转换为字符串 const result = uniCopy({ content }); if (result === false) { uni.showToast({ title: '不支持' }); } else { uni.showToast({ title: '复制成功', icon: 'none' }); } this.$refs.popup.close(); }, // 客服弹窗 - 取消 cancel() { this.$refs.popup.close(); } } }; </script> <style lang="scss"> page { min-height: 100%; height: auto; } %flex-center { display: flex; flex-direction: column; justify-content: center; align-items: center; } %section { display: flex; justify-content: space-around; align-content: center; background: #fff; border-radius: 10rpx; } .container { min-height: 100%; height: auto; background-color: $page-color-base; } .vheigh { height: var(--status-bar-height); background-color: $base-color; } .top-image { position: absolute; top: 0; left: 0; right: 0; height: 230rpx; image { width: 100%; height: 100%; } } .user-box { position: relative; z-index: 2; width: 690rpx; margin: 0 auto; background: #ffffff; box-shadow: 0px 4rpx 13rpx 0px rgba(229, 229, 229, 0.46); border-radius: 20rpx; display: flex; flex-direction: column; align-items: center; padding: 54rpx 0 30rpx; line-height: 1; .avatar { border-radius: 50%; width: 132rpx; height: 132rpx; } .user-name { margin-top: 14rpx; font-size: 30rpx; font-family: PingFang SC; font-weight: bold; color: #333333; } .user-shop { margin-top: 10rpx; display: flex; justify-content: center; align-items: center; .user-shop-item { position: relative; margin: 0 10rpx; width: 105rpx; height: 42rpx; .user-shop-icon { position: absolute; top: 0; left: 0; right: 0; width: 105rpx; height: 42rpx; } .user-shopname { padding-left: 18rpx; position: relative; z-index: 2; font-size: 20rpx; font-family: PingFang SC; font-weight: 500; color: #977843; line-height: 42rpx; text-align: center; } } } .user-money { width: 100%; margin-top: 50rpx; justify-content: center; .user-money-item { width: 50%; display: flex; flex-direction: column; justify-content: center; align-items: center; .user-money-num { font-size: 36rpx; font-family: PingFang SC; font-weight: bold; color: #333333; } .user-money-font { margin-top: 20rpx; font-size: 22rpx; font-family: PingFang SC; font-weight: 500; color: #666666; } } .user-xian { width: 1px; height: 77rpx; background: #eeeeee; } } } .shop { width: 690rpx; height: 90rpx; margin: 18rpx auto 0; position: relative; padding: 0 20rpx 0 70rpx; .shop-bg { position: absolute; left: 0; right: 0; top: 0; width: 690rpx; height: 90rpx; image { width: 100%; height: 100%; } } .shop-left { position: relative; z-index: 2; font-size: 30rpx; font-family: PingFang SC; font-weight: bolder; color: #6a4714; } .shop-right { position: relative; z-index: 2; width: 148rpx; height: 50rpx; background: linear-gradient(-90deg, #8c5f1d 0%, #8c5f1c 77%, #875916 99%); border-radius: 25rpx; line-height: 50rpx; text-align: center; font-size: 28rpx; font-family: PingFang SC; font-weight: 500; color: #f0e1c9; } } .order-box { width: 690rpx; height: 221rpx; background: #ffffff; box-shadow: 0rpx 0rpx 20rpx 0rpx rgba(50, 50, 52, 0.06); border-radius: 20rpx; margin: 15rpx auto 0; .my-order { height: 73rpx; width: 100%; border-bottom: 2rpx solid #f5f5f5; padding: 0 26rpx; .order { font-size: 30rpx; font-family: PingFang SC; font-weight: bold; color: #333333; } .my-order-right { display: flex; align-items: center; .my-order-right-font { font-size: 26rpx; font-family: SourceHanSansCN; font-weight: 400; color: #666666; margin-right: 10rpx; } image { width: 12rpx; height: 22rpx; } } } .order-section { display: flex; align-items: center; justify-content: space-between; .order-item { flex: 1; display: flex; flex-direction: column; align-items: center; justify-content: center; margin-top: 30rpx; image { width: 42rpx; height: 42rpx; } .text { margin-top: 20rpx; font-size: 24rpx; color: #333333; } } } } .my-tool { width: 690rpx; background: #ffffff; box-shadow: 0px 0px 20rpx 0px rgba(50, 50, 52, 0.06); border-radius: 28rpx; padding: 34rpx 24rpx; margin: 15rpx auto 0; .my-tool-left { display: flex; align-items: center; .my-tool-image1 { width: 41rpx; height: 35rpx; } .my-tool-image2 { width: 43rpx; height: 40rpx; } .my-tool-image3 { width: 42rpx; height: 37rpx; } .my-tool-image4 { width: 38rpx; height: 40rpx; } .my-tool-image5 { width: 42rpx; height: 39rpx; } .my-tool-font { font-size: 29rpx; font-family: PingFang SC; font-weight: bold; color: #5d5d5d; margin-left: 14rpx; } } .my-tool-right { width: 18rpx; height: 22rpx; } } .popup-box { width: 522rpx; height: 605rpx; background-color: #ffffff; border-radius: 20rpx; position: relative; .img { position: relative; top: -56rpx; left: 0; width: 522rpx; height: 132rpx; display: flex; justify-content: center; image { border-radius: 20rpx 20rpx 0 0; width: 450rpx; height: 132rpx; } } .mian { margin-top: -44rpx; display: flex; flex-direction: column; align-items: center; // padding: 32rpx 32rpx; background-color: #ffffff; border-radius: 0 0 20rpx 20rpx; text-align: center; .delivery { font-size: 40rpx; color: #333333; display: flex; align-items: center; flex-direction: column; .title { } image { margin-top: 48rpx; width: 172rpx; height: 160rpx; } } .nocancel { font-size: 32rpx; color: #333333; margin-top: 14rpx; } .comfirm-box { margin-top: 52rpx; display: flex; // margin-bottom: 32rpx; // justify-content: space-around; .cancel { display: flex; align-items: center; justify-content: center; width: 197rpx; height: 74rpx; border: 1px solid #dcc786; border-radius: 38rpx; font-size: 32rpx; color: #605128; } .comfirm { margin-left: 32rpx; display: flex; align-items: center; justify-content: center; width: 197rpx; height: 74rpx; background: linear-gradient(-90deg, #d1ba77 0%, #f7e8ad 100%); border-radius: 38px; font-size: 32rpx; color: #605128; } } } } </style>