You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
shengxian/pages/index/user/userinfo-card.vue

408 lines
9.3 KiB

<template>
<view>
<view class="sh-userinfo-box">
<view class="head-wrap"
style="background:#17C161;padding-bottom: 120rpx;">
<!-- 标题栏 -->
<shopro-navbar backIconName="" backText="个人中心" :backTextStyle="{
color: '#fff',
fontSize: '36rpx',
fontWeight: '500'
}" :background="navBackground">
<view slot="right" class="u-flex u-row-center u-col-center u-m-r-20" v-if="userOtherData.is_store"
@tap="goStore">
<button class="u-reset-button merchant-btn">切换商家版</button>
</view>
</shopro-navbar>
<view class="user-head u-flex u-row-between" @tap="$Router.push('/pages/user/info')">
<view class="u-flex">
<!-- 个人信息 -->
<view class="info-box">
<view class="u-flex" @tap="$Router.push('/pages/user/info')">
<view class="head-img-wrap">
<image class="head-img" :src="userInfo.avatar || $IMG_URL + '/imgs/base_avatar.png'"
mode="aspectFill"></image>
<!-- 同步信息 -->
<block v-if="showRefresh">
<button @tap.stop="showModal = true"
class="u-reset-button u-flex u-row-center u-col-center refresh-btn">
<view class="u-iconfont uicon-reload" style="color: #fff;font-size: 24rpx;">
</view>
</button>
</block>
</view>
<view class="">
<text class="user-name u-ellipsis-1">{{ userInfo.nickname || '请登录~' }}</text>
<view class="id">
用户ID:{{userInfo.id}}
</view>
</view>
</view>
</view>
<!-- 等级 -->
<!-- <view v-if="userInfo.group" class="grade-tag tag-box u-flex">
<image v-if="userInfo.group.image" class="tag-img" :src="userInfo.group.image" mode="">
</image>
<text class="tag-title">{{ userInfo.group.name }}</text>
</view> -->
</view>
<view class="u-flex" v-if="userInfo.nickname">
<button class=" u-reset-button code-btn">
<u-icon name="setting" color="#ffffff" size="44"></u-icon>
</button>
</view>
</view>
<view class="userInfo">
<view class="infoItem" @tap="jump('/pages/user/wallet/index')">
<view class="infoTitle">{{ userInfo.money || '0.00' }}</view>
<view class="infoDesc">余额</view>
</view>
<view class="infoItem" @tap="jump('/pages/user/wallet/score-balance')">
<view class="infoTitle">{{ userInfo.score || '0' }}</view>
<view class="infoDesc">积分</view>
</view>
<view class="infoItem" @tap="jump('/pages/app/coupon/list')">
<view class="infoTitle">{{ userOtherData.coupons_num || '0' }}</view>
<view class="infoDesc">优惠券</view>
</view>
<view class="infoItem" @tap="jump('/pages/user/favorite')">
<view class="infoTitle">{{total}}</view>
<view class="infoDesc">收藏</view>
</view>
</view>
</view>
</view>
<!-- 绑定手机 -->
<view class="notice-box u-flex u-row-between u-p-30"
v-if="userInfo.verification && !userInfo.verification.mobile" @tap="bindMobile">
<view class="notice-detail">点击绑定手机号,确保账户安全</view>
<button class="u-reset-button bindPhone">去绑定</button>
</view>
<!-- 更新信息 -->
<view class="cu-modal" :class="{ show: showModal }" @tap="showModal = false">
<view class="cu-dialog" style="width: 600rpx;">
<view class="modal-box">
<view class="modal-head">提示</view>
<view class="modal-content">更新微信信息?</view>
<view class="modal-bottom u-flex u-col-center">
<button class="u-reset-button modal-btn cancel-btn" :hover-stay-time="100"
hover-class="btn-hover" @tap="showModal = false">取消</button>
<button class="u-reset-button modal-btn save-btn" :hover-stay-time="100"
hover-class="btn-hover" @tap="refreshWechatUser">确定</button>
</view>
</view>
</view>
</view>
</view>
</template>
<script>
/**
* 自定义之个人信息
* @property {Object} detail - 个人信息
*/
import { mapMutations, mapActions, mapState, mapGetters } from 'vuex';
import wechat from '@/shopro/wechat/wechat';
export default {
components: {},
data() {
return {
showModal: false,
platform: this.$platform.get(), //当前平台。
isFixed: false,
navBackground: {
background: 'none'
},
total:0
};
},
mounted() {
this.getFavoriteList()
},
props: {
detail: {},
scrollTop: {
type: Number,
default: 0
}
},
watch: {
scrollTop(val) {
let backgroundText = this.detail.image ? `url(${this.detail.image})` : this.detail.color;
this.isFixed = val > 50 ? true : false;
this.navBackground.background = val > 50 ? backgroundText : 'none';
}
},
computed: {
...mapGetters(['isLogin', 'userInfo', 'userOtherData']),
showRefresh() {
if (this.isLogin) {
if (this.platform === 'wxOfficialAccount') {
return this.userInfo.verification?.wxOfficialAccount;
}
// if (this.platform === 'wxMiniProgram') {
// return this.userInfo.verification.wxMiniProgram;
// }
if (this.platform === 'App') {
return this.userInfo.verification.wxOpenPlatform;
}
}
return false;
}
},
methods: {
...mapActions(['getUserInfo', 'showAuthModal']),
jump(path, query) {
this.$Router.push({
path: path,
query: query
});
},
getFavoriteList() {
let that = this;
that.$http('user.favoriteList', {
pre_page: 10,
page: 1
}).then(res => {
if (res.code === 1) {
that.total = res.data.total;
}
});
},
// 点击分享
onShare() {
this.$emit('onShare');
},
// 同步用户信息
async refreshWechatUser() {
this.showModal = false;
let token = await wechat.refresh();
token && this.getUserInfo(token);
},
// 跳转门店
goStore() {
if (this.userOtherData.store_id) {
uni.setStorageSync('storeId', this.userOtherData.store_id);
this.jump('/pages/app/merchant/index', { storeId: this.userOtherData.store_id });
} else {
if (uni.getStorageSync('storeId')) {
this.jump('/pages/app/merchant/index');
} else {
this.jump('/pages/app/merchant/list');
}
}
// #ifdef MP-WEIXIN
this.$store.commit('subscribeMessage', 'store');
// #endif
},
// 绑定手机号
bindMobile() {
this.showAuthModal('bindMobile');
}
}
};
</script>
<style lang="scss">
// 更新信息
.modal-box {
width: 600rpx;
.btn-hover {
background-color: rgb(230, 230, 230);
}
.modal-head {
padding-top: 48rpx;
font-weight: 500;
text-align: center;
color: $u-main-color;
}
.modal-content {
padding: 48rpx;
font-size: 30rpx;
text-align: center;
color: $u-content-color;
}
.modal-bottom {
.modal-btn {
flex: 1;
height: 100rpx;
line-height: 100rpx;
font-size: 32rpx;
box-sizing: border-box;
cursor: pointer;
text-align: center;
border-radius: 4rpx;
}
.cancel-btn {
color: #666666;
}
.save-btn {
color: #17C161;
}
}
}
.sh-userinfo-box {
position: relative;
// height: calc(var(--status-bar-height) + 300rpx);
.head-wrap {
powidth: 100%;
height: 100%;
.merchant-btn {
width: 178rpx;
height: 64rpx;
line-height: 64rpx;
background: #ffffff;
border-radius: 32rpx;
font-size: 26rpx;
font-weight: 500;
color: #a8700d;
}
}
.userInfo{
margin-top: 32rpx;
display:flex;
.infoItem{
flex:1;
text-align: center;
.infoTitle{
font-size: 36rpx;
font-family: PingFang SC;
font-weight: bold;
color: #FFFFFF;
line-height: 36rpx;
}
.infoDesc{
font-size: 28rpx;
font-family: PingFang SC;
font-weight: 500;
color: #FFFFFF;
line-height: 36rpx;
margin-top:25rpx;
}
}
}
.user-head {
width: 100%;
padding-top: 30rpx;
.info-box {
padding-left: 30rpx;
.head-img-wrap {
position: relative;
.refresh-btn {
position: absolute;
padding: 0;
background: none;
width: 40rpx;
height: 40rpx;
border-radius: 50%;
background: #c9912c;
top: -10rpx;
right: 10rpx;
}
}
.head-img {
width: 110rpx;
height: 110rpx;
border-radius: 50%;
background: #ccc;
margin-right: 25rpx;
overflow: hidden;
}
.user-name {
font-size: 34rpx;
font-weight: 500;
color: #fff;
line-height: 30rpx;
width: 180rpx;
}
.id{
font-size: 24rpx;
color:#ffffff;
margin-top:23rpx;
}
}
.tag-box {
background: rgba(0, 0, 0, 0.2);
border-radius: 22rpx;
margin-left: 10rpx;
.tag-img {
width: 40rpx;
height: 40rpx;
display: inline-block;
border-radius: 50%;
}
.tag-title {
font-size: 20rpx;
font-weight: 500;
color: rgba(255, 255, 255, 1);
line-height: 40rpx;
padding: 0 10rpx;
}
}
.code-btn {
padding: 30rpx;
.icon-qrcode {
font-size: 50rpx;
color: #fff;
}
}
}
.wallet {
font-size: 20rpx;
padding-left: 140rpx;
.money {
margin-right: 40rpx;
}
}
}
// 绑定微信公众号
.notice-box {
width: 750rpx;
height: 70rpx;
background: rgba(253, 239, 216, 1);
padding: 0 35rpx;
.notice-detail {
font-size: 24rpx;
font-weight: 400;
color: rgba(204, 149, 59, 1);
}
.bindPhone {
width: 135rpx;
line-height: 52rpx;
background: linear-gradient(90deg, rgba(233, 180, 97, 1), rgba(238, 204, 137, 1));
border-radius: 26rpx;
padding: 0;
font-size: 26rpx;
font-weight: 500;
color: rgba(255, 255, 255, 1);
}
}
</style>