Files
lucky_shop/components/diy-components/diy-member-info.vue
2025-10-27 15:55:29 +08:00

1466 lines
37 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<template>
<view class="container" :style="warpCss">
<!-- 会员信息 -->
<view class="common-wrap info-wrap" :class="[`data-style-${value.style}`]">
<view class="member-info" :style="memberInfoStyle">
<view class="info-wrap" :style="infoStyle" v-if="memberInfo">
<view class="headimg" @click="getWxAuth">
<image :src="memberInfo.headimg ? $util.img(memberInfo.headimg) : $util.getDefaultImage().head" mode="widthFix" @error="memberInfo.headimg = $util.getDefaultImage().head"/>
</view>
<view class="info">
<!-- #ifdef MP -->
<block v-if="(memberInfo.nickname.indexOf('u_') != -1 && memberInfo.nickname == memberInfo.username) || memberInfo.nickname == memberInfo.mobile">
<view class="nickname"><text class="name" @click="getWxAuth">点击授权头像昵称</text></view>
</block>
<view class="nickname" v-else>
<text class="name" @click="getWxAuth">{{ memberInfo.nickname }}</text>
<view class="member-level" v-if="(value.style == 1 || value.style == 2) && memberInfo.member_level" >
<!-- <text class="icondiy icon-system-huangguan"></text> -->
<text class="level-name">{{ memberInfo.member_level_name }}</text>
</view>
</view>
<view class="member-level" v-if="value.style == 3 && memberInfo.member_level" >
<!-- <image :src="$util.img('public/uniapp/member/supervip_icon.png')" mode="widthFix" class="level-icon"/> -->
<view class="level-name">{{ memberInfo.member_level_name }}</view>
</view>
<view class="member-level" v-if="value.style == 4 && memberInfo.member_level" >
<image :src="$util.img('app/component/view/member_info/img/style_4_vip_tag.png')" mode="widthFix" class="level-icon"/>
<text class="level-name">{{ memberInfo.member_level_name }}</text>
</view>
<!-- #endif -->
<!-- #ifdef H5 -->
<block v-if="$util.isWeiXin() && ((memberInfo.nickname.indexOf('u_') != -1 && memberInfo.nickname == memberInfo.username) || memberInfo.nickname == memberInfo.mobile) ">
<view class="nickname"><text class="name" @click="getWxAuth">点击获取微信头像</text></view>
</block>
<view class="nickname" v-else>
<text class="name" @click="redirect('/pages_tool/member/info')">{{ memberInfo.nickname }}</text>
<view class="member-level" v-if="(value.style == 1 || value.style == 2) && memberInfo.member_level">
<!-- <text class="icondiy icon-system-huangguan"></text> -->
<text class="level-name">{{ memberInfo.member_level_name }}VIP1</text>
</view>
</view>
<view class="member-level" v-if="value.style == 3 && memberInfo.member_level" >
<!-- <image :src="$util.img('public/uniapp/member/supervip_icon.png')" mode="widthFix" class="level-icon"/> -->
<view class="level-name">{{ memberInfo.member_level_name }}</view>
</view>
<view class="member-level" v-if="value.style == 4 && memberInfo.member_level" ><image :src="$util.img('app/component/view/member_info/img/style_4_vip_tag.png')" mode="widthFix" class="level-icon"/>
<text class="level-name">{{ memberInfo.member_level_name }}</text>
</view>
<!-- #endif -->
</view>
<view v-if="ischina == 1" style="background: #fff;height: 60rpx;width: 60rpx;border-radius: 50rpx;line-height:65rpx;text-align: center;color:#000" @click.stop="modifyInfo()">{{langIndex == 0?'CN':'EN'}}</view>
</view>
<view class="info-wrap" v-else :style="infoStyle" @click="redirect('/pages/member/index')">
<view class="headimg">
<image :src="$util.getDefaultImage().head" mode="widthFix"></image>
</view>
<view class="info">
<view class="nickname"><text class="name">{{$lang('login')}}</text></view>
<view class="desc">{{$lang('loginTpis')}}</view>
</view>
<view v-if="ischina == 1" style="background: #fff;height: 60rpx;width: 60rpx;border-radius: 50rpx;line-height:65rpx;text-align: center;color:#000" @click.stop="modifyInfo()">{{langIndex == 0?'CN':'EN'}}</view>
</view>
<view class="account-info" v-show="value.style == 1" :style="{ 'margin-left': parseInt(value.infoMargin) * 2 + 'rpx', 'margin-right': parseInt(value.infoMargin) * 2 + 'rpx' }">
<view class="account-item" @click="redirect('/pages_tool/member/balance')">
<view class="value price-font">
{{ memberInfo ? (parseFloat(memberInfo.balance) + parseFloat(memberInfo.balance_money)).toFixed(2) : '--' }}
</view>
<view class="title">{{ $lang('balance') }}</view>
</view>
<view class="solid"></view>
<view class="account-item" @click="redirect('/pages_tool/member/point_detail')">
<view class="value price-font">{{ memberInfo ? parseFloat(memberInfo.point) : '--' }}</view>
<view class="title">{{ $lang('point') }}</view>
</view>
<view class="solid"></view>
<view class="account-item" @click="redirect('/pages_tool/member/coupon')">
<view class="value price-font">
{{ memberInfo && memberInfo.coupon_num != undefined ? memberInfo.coupon_num : '--' }}
</view>
<view class="title">{{ $lang('coupon') }}</view>
</view>
</view>
<!--
<view class="super-member"
v-if="superMember && (value.style == 1 || value.style == 2 || value.style == 3)"
:style="superMemberStyle">
<block v-if="value.style == 1 || value.style == 2">
<view class="super-info">
<text class="icondiy icon-system-huangguan"></text>
<text>超级会员</text>
</view>
<view class="super-text">
<text class="see" v-if="memberInfo && memberInfo.member_level_type" @click="redirectBeforeAuth('/pages_tool/member/card')">查看特权</text>
<text class="see" v-else @click="redirectBeforeAuth('/pages_tool/member/card_buy')">会员可享更多权益</text>
<text class="iconfont icon-right"></text>
</view>
</block>
<block v-if="value.style == 3">
<view class="super-info">
<image :src="$util.img('public/uniapp/member/open_member.png')" class="title" mode="heightFix" />
<view class="desc">开通可享更多权益</view>
</view>
<view class="super-text">
<text class="see" v-if="memberInfo && memberInfo.member_level_type" @click="redirectBeforeAuth('/pages_tool/member/card')">查看特权</text>
<text class="see" v-else @click="redirectBeforeAuth('/pages_tool/member/card_buy')">立即开通</text>
</view>
</block>
</view>
<view class="member-info-style4" v-show="value.style == 4">
<view class="super-member" v-if="superMember" :style="superMemberStyle">
<view class="super-info">
<image :src="$util.img('app/component/view/member_info/img/style_4_vip_huangguan.png')" class="title" mode="widthFix" />
<view class="desc">开通可享更多权益</view>
</view>
<view class="super-text" :class="{ 'more' : memberInfo && memberInfo.member_level_type }">
<text class="see" v-if="memberInfo && memberInfo.member_level_type" @click="redirectBeforeAuth('/pages_tool/member/card')">查看更多权益</text>
<text class="see" v-else @click="redirectBeforeAuth('/pages_tool/member/card_buy')">立即开通</text>
</view>
</view>
<view class="account-info" :style="{ 'margin-left': parseInt(value.infoMargin) * 2 + 'rpx', 'margin-right': parseInt(value.infoMargin) * 2 + 'rpx' }">
<view class="account-item" @click="redirect('/pages_tool/member/balance_detail')">
<view class="value price-font">
{{ memberInfo ? (parseFloat(memberInfo.balance) + parseFloat(memberInfo.balance_money)).toFixed(2) : '--' }}
</view>
<view class="title">余额</view>
</view>
<view class="solid"></view>
<view class="account-item" @click="redirect('/pages_tool/member/point_detail')">
<view class="value price-font">{{ memberInfo ? parseFloat(memberInfo.point) : '--' }}
</view>
<view class="title">积分</view>
</view>
<view class="solid"></view>
<view class="account-item" @click="redirect('/pages_tool/member/coupon')">
<view class="value price-font">
{{ memberInfo && memberInfo.coupon_num != undefined ? memberInfo.coupon_num : '--' }}
</view>
<view class="title">优惠券</view>
</view>
</view>
<view class="style4-other">
<view class="style4-btn-wrap">
<view @click="redirect('/pages_tool/recharge/list')" class="recharge-btn">余额充值</view>
</view>
</view>
</view> -->
</view>
<view class="account-info" v-show="value.style == 2" :style="{ 'margin-left': parseInt(value.infoMargin) * 2 + 'rpx', 'margin-right': parseInt(value.infoMargin) * 2 + 'rpx' }">
<view class="account-item" @click="redirect('/pages_tool/member/balance')">
<view class="value price-font">{{ memberInfo ? (parseFloat(memberInfo.balance) + parseFloat(memberInfo.balance_money)).toFixed(2) : '--' }}</view>
<view class="title">{{ $lang('balance') }}</view>
</view>
<view class="solid"></view>
<view class="account-item" @click="redirect('/pages_tool/member/point_detail')">
<view class="value price-font">{{ memberInfo ? parseFloat(memberInfo.point) : '--' }}</view>
<view class="title">{{ $lang('point') }}</view>
</view>
<view class="solid"></view>
<view class="account-item" @click="redirect('/pages_tool/member/coupon')">
<view class="value price-font">
{{ memberInfo && memberInfo.coupon_num != undefined ? memberInfo.coupon_num : '--' }}
</view>
<view class="title">{{ $lang('coupon') }}</view>
</view>
</view>
</view>
<!-- 完善会员资料 -->
<view @touchmove.prevent.stop class="member-complete-info-popup">
<uni-popup ref="completeInfoPopup" type="bottom" :maskClick="false">
<view class="complete-info-wrap">
<view class="head">
<text class="title">获取您的昵称头像</text>
<text class="color-tip tips">获取用户头像昵称完善个人资料主要用于向用户提供具有辨识度的用户中心界面</text>
<text class="iconfont icon-close color-tip" @click="cancelCompleteInfo"></text>
</view>
<!-- #ifdef MP-WEIXIN -->
<view class="item-wrap">
<text class="label">头像</text>
<button open-type="chooseAvatar" @chooseavatar="onChooseAvatar">
<image :src="avatarUrl ? avatarUrl : $util.getDefaultImage().head" @error="avatarUrl = $util.getDefaultImage().head" mode="aspectFill"/>
<text class="iconfont icon-right color-tip"></text>
</button>
</view>
<view class="item-wrap">
<text class="label">昵称</text>
<input type="nickname" placeholder="请输入昵称" v-model="nickName" @blur="blurNickName" />
</view>
<!-- #endif -->
<!-- #ifdef MP-ALIPAY -->
<view class="item-wrap">
<text class="label">头像</text>
<button open-type="getAuthorize" scope="userInfo" @getAuthorize="aliappGetUserinfo" :plain="true" class="border-0">
<image :src="avatarUrl ? avatarUrl : $util.getDefaultImage().head" @error="avatarUrl = $util.getDefaultImage().head" mode="aspectFill"/>
<text class="iconfont icon-right color-tip"></text>
</button>
</view>
<view class="item-wrap">
<text class="label">昵称</text>
<input type="nickname" placeholder="请输入昵称" v-model="nickName" @blur="blurNickName" />
</view>
<!-- #endif -->
<button type="default" class="save-btn" @click="saveCompleteInfo" :disabled="isDisabled">保存</button>
</view>
</uni-popup>
</view>
<ns-login ref="login"></ns-login>
</view>
</template>
<script>
let menuButtonInfo = {};
// 如果是小程序,获取右上角胶囊的尺寸信息,避免导航栏右侧内容与胶囊重叠(支付宝小程序非本API尚未兼容)
// #ifdef MP-WEIXIN || MP-BAIDU || MP-TOUTIAO || MP-QQ
menuButtonInfo = uni.getMenuButtonBoundingClientRect();
// #endif
// 自定义会员中心——会员信息
import nsContact from '@/components/ns-contact/ns-contact.vue';
export default {
name: 'diy-member-info',
props: {
value: {
type: Object
},
global: {
type: Object,
default: () => {
return {};
}
}
},
components: {
nsContact
},
data() {
return {
info: null,
superMember: null,
memberCode: null,
avatarUrl: '', // 头像预览
headImg: '', // 头像保存
nickName: '',
completeInfoCallback: null,
menuButtonInfo: menuButtonInfo,
langList: [],
langIndex: 0,
ischina:0
};
},
options: {
styleIsolation: 'shared'
},
created() {
this.ischina = uni.getStorageSync('shopInfo').ischina
this.initLang()
this.init(false);
},
watch: {
storeToken(nVal, oVal) {
this.init();
},
// 组件刷新监听
componentRefresh: function(nval) {
this.init();
}
},
computed: {
memberInfoStyle() {
let style = {},
img = '',
backSize = 'contain';
if (this.global.navBarSwitch == false) {
// #ifdef MP
// this.menuButtonInfo.height + this.menuButtonInfo.top ==>是胶囊按钮到顶部的距离因为后台有可能设置margin.top,所以要减去
style['padding-top'] = this.menuButtonInfo.height + this.menuButtonInfo.top - this.value.margin
.top + 'px';
// #endif
}
if (this.value.style == 4) {
img = this.$util.img('app/component/view/member_info/img/style_4_bg.png');
backSize = 'cover';
} else if (this.value.style != 3) {
img = this.$util.img('public/static/img/diy_view/member_info_bg.png');
}
if (this.value.theme == 'default') {
style.background = `url('${img}') no-repeat bottom / ${backSize}, var(--base-color)`;
} else {
style.background =
`url('${img}') no-repeat bottom / ${backSize},linear-gradient(${this.value.gradientAngle}deg, ${this.value.bgColorStart} 0%, ${this.value.bgColorEnd} 100%)`;
}
return this.$util.objToStyle(style);
},
infoStyle() {
let style = {};
if (this.value.style == 4) {
if (this.superMember) {
style['padding-bottom'] = '276rpx';
} else {
style['padding-bottom'] = '166rpx';
}
}
return this.$util.objToStyle(style);
},
superMemberStyle() {
let style = {
'margin-left': parseInt(this.value.infoMargin) * 2 + 'rpx ',
'margin-right': parseInt(this.value.infoMargin) * 2 + 'rpx '
};
if (this.value.style == 3) {
style.background = `#292f45 url(` + this.$util.img('public/uniapp/member/supervip_bg.png') + `) no-repeat bottom / 100% 100%`;
} else if (this.value.style == 4) {
style = {};
style.background = `url(` + this.$util.img('app/component/view/member_info/img/super_vip_bg_4.png') + `) no-repeat bottom / contain`;
} else {
style.background = `url('` + this.$util.img('public/static/img/diy_view/super_member_bg.png') + `') no-repeat bottom / 100% 100%, linear-gradient(107deg, ` + this.themeStyle.super_member.super_member_start_bg + ` 0%, ` + this.themeStyle.super_member.super_member_end_bg + ` 100%)`;
}
return this.$util.objToStyle(style);
},
warpCss() {
var obj = '';
obj += 'background-color:' + this.value.componentBgColor + ';';
if (this.value.componentAngle == 'round') {
obj += 'border-top-left-radius:' + this.value.topAroundRadius * 2 + 'rpx;';
obj += 'border-top-right-radius:' + this.value.topAroundRadius * 2 + 'rpx;';
obj += 'border-bottom-left-radius:' + this.value.bottomAroundRadius * 2 + 'rpx;';
obj += 'border-bottom-right-radius:' + this.value.bottomAroundRadius * 2 + 'rpx;';
}
return obj;
},
isDisabled() {
if (this.nickName.length > 0) return false;
return true;
}
},
methods: {
initLang() {
//获取语言列表
this.langList = this.$langConfig.list();
if (!uni.getStorageSync("lang")) {
this.langIndex = 0;
} else {
for (let i = 0; i < this.langList.length; i++) {
if (this.langList[i].value == uni.getStorageSync("lang")) {
this.langIndex = i;
break;
}
}
}
},
modifyInfo(){
this.$langConfig.change(this.langIndex==1?'zh-cn':'en-us')
},
// isRefresh 是否刷新会员数据true刷新false不刷新
init(isRefresh = true) {
if (isRefresh) {
if (this.storeToken) this.getMemberInfo();
else this.$store.commit('setMemberInfo', '');
} else {
if (this.memberInfo) {
this.headImg = this.memberInfo.headimg;
this.nickName = this.memberInfo.nickname;
this.avatarUrl = this.headImg ? this.$util.img(this.headImg) : this.$util
.getDefaultImage().head;
/*
小程序用户头像昵称获取规则调整公告
https://developers.weixin.qq.com/community/develop/doc/00022c683e8a80b29bed2142b56c01
用于处理昵称将统一返回 “微信用户”
*/
if (this.nickName == '微信用户') {
this.openCompleteInfoPop();
}
this.getCouponNum();
}
}
this.getMemberCardInfo();
},
/**
* 查询会员信息
*/
getMemberInfo() {
this.$api.sendRequest({
url: '/api/member/info',
data: {},
success: res => {
if (res.code == 0) {
this.info = res.data;
this.headImg = this.info.headimg;
this.nickName = this.info.nickname;
this.avatarUrl = this.headImg ? this.$util.img(this.headImg) : this.$util
.getDefaultImage().head;
/*
小程序用户头像昵称获取规则调整公告
https://developers.weixin.qq.com/community/develop/doc/00022c683e8a80b29bed2142b56c01
用于处理昵称将统一返回 “微信用户”
*/
if (this.nickName == '微信用户') {
this.openCompleteInfoPop();
}
this.getCouponNum();
}
}
});
},
/**
* 查询优惠券数量
*/
getCouponNum() {
this.$api.sendRequest({
url: '/coupon/api/coupon/num',
success: res => {
if (res.code == 0) {
if (this.info) {
// 二次刷新数据
this.info.coupon_num = res.data;
this.$store.commit('setMemberInfo', this.info);
} else {
// 第一次赋值
this.memberInfo.coupon_num = res.data;
this.$forceUpdate();
this.$store.commit('setMemberInfo', this.memberInfo);
}
}
}
});
},
/**
* 查询超级会员信息
*/
getMemberCardInfo() {
this.$api.sendRequest({
url: '/supermember/api/membercard/firstcard',
success: res => {
if (res.code == 0 && res.data) {
this.superMember = res.data;
}
}
});
},
/**
* 跳转
* @param {Object} url
*/
redirect(url) {
if (!this.storeToken) {
this.$refs.login.open(url);
} else {
this.$util.redirectTo(url);
}
},
/**
* 显示会员码
*/
showMemberQrcode() {
if (!this.memberInfo.mobile && !this.memberInfo.member_code) {
uni.showModal({
title: '提示',
content: '使用会员码需先绑定手机号,是否绑定手机号?',
success: res => {
if (res.confirm) {
// #ifdef MP-WEIXIN
this.$util.redirectTo('/pages_tool/member/info_edit', {
action: 'bind_mobile'
});
// #endif
// #ifndef MP-WEIXIN
this.$util.redirectTo('/pages_tool/member/info_edit', {
action: 'mobile'
});
// #endif
}
}
});
return;
}
if (this.memberCode) {
this.$refs.erWeiPopup.open();
}
this.$api.sendRequest({
url: '/api/member/membereqrcode',
data: {
page: ''
},
success: res => {
if (res.code == 0) {
let time = new Date().getTime();
this.memberCode = {
barcode: res.bar_code + '?rand=' + time,
qrcode: res.data.path + '?rand=' + time,
member_code: res.member_code
};
this.$refs.erWeiPopup.open();
}
}
});
},
/**
* 关闭会员码
*/
closeMemberQrcode() {
this.$refs.erWeiPopup.close();
},
/**
* 跳转之前需先进行授权
* @param {Object} url
*/
redirectBeforeAuth(url) {
if (!this.storeToken) {
this.$refs.login.open('/pages/member/index');
return;
}
// #ifdef MP
if ((this.memberInfo.nickname.indexOf('u_') != -1 && this.memberInfo.nickname == this.memberInfo.username) || this.memberInfo.nickname == this.memberInfo.mobile) {
this.getWxAuth(() => {
this.$util.redirectTo(url);
});
} else {
this.$util.redirectTo(url);
}
// #endif
// #ifdef H5
if (this.$util.isWeiXin() && ((this.memberInfo.nickname.indexOf('u_') != -1 && this.memberInfo.nickname == this.memberInfo.username) || this.memberInfo.nickname == this.memberInfo.mobile)) {
this.getWxAuth();
} else {
this.$util.redirectTo(url);
}
// #endif
},
/**
* 获取微信授权
*/
getWxAuth(callback) {
// #ifdef MP
this.openCompleteInfoPop(() => {
typeof callback == 'function' && callback();
});
// #endif
// #ifdef H5
if (this.$util.isWeiXin()) {
this.$api.sendRequest({
url: '/wechat/api/wechat/authcode',
data: {
scopes: 'snsapi_userinfo',
redirect_url: this.$config.h5Domain + '/pages/member/index'
},
success: res => {
if (res.code >= 0) {
location.href = res.data;
}
}
});
}
// #endif
},
/**
* 修改昵称
* @param {Object} nickName
*/
modifyNickname(nickName) {
this.$api.sendRequest({
url: '/api/member/modifynickname',
data: {
nickname: nickName
},
success: res => {
if (res.code == 0) {
this.memberInfo.nickname = nickName;
this.$store.commit('setMemberInfo', this.memberInfo);
}
}
});
},
/**
* 修改头像
*/
modifyHeadimg(headimg) {
this.$api.sendRequest({
url: '/api/member/modifyheadimg',
data: {
headimg: headimg
},
success: res => {
if (res.code == 0) {
this.memberInfo.headimg = headimg;
this.$store.commit('setMemberInfo', this.memberInfo);
}
}
});
},
openCompleteInfoPop(callback) {
this.$refs.completeInfoPopup.open(() => {
this.$store.commit('setBottomNavHidden', false); //显示底部导航
});
this.$store.commit('setBottomNavHidden', true); // 隐藏底部导航
this.completeInfoCallback = callback;
},
saveCompleteInfo() {
if (this.nickName.length == 0) {
this.$util.showToast({
title: '请输入昵称'
});
return;
}
this.modifyNickname(this.nickName);
this.modifyHeadimg(this.headImg);
this.$refs.completeInfoPopup.close();
this.$store.commit('setBottomNavHidden', false); // 显示底部导航
typeof this.completeInfoCallback == 'function' && this.completeInfoCallback();
},
cancelCompleteInfo() {
this.$refs.completeInfoPopup.close();
this.$store.commit('setBottomNavHidden', false); // 显示底部导航
},
blurNickName(e) {
if (e.detail.value) this.nickName = e.detail.value;
},
onChooseAvatar(e) {
this.avatarUrl = e.detail.avatarUrl;
uni.getFileSystemManager().readFile({
filePath: this.avatarUrl, //选择图片返回的相对路径
encoding: 'base64', //编码格式
success: res => {
let base64 = 'data:image/jpeg;base64,' + res.data; //不加上这串字符,在页面无法显示的哦
this.$api.uploadBase64({
base64,
success: res => {
if (res.code == 0) {
this.headImg = res.data.pic_path;
} else {
this.$util.showToast({
title: res.message
});
}
},
fail: () => {
this.$util.showToast({
title: '上传失败'
});
}
})
}
});
},
splitFn(str) {
return str.replace(/(?=(\d{4})+$)/g, ' ');
},
// #ifdef MP-ALIPAY
aliappGetUserinfo() {
my.getOpenUserInfo({
success: (res) => {
let userInfo = JSON.parse(res.response).response
if (userInfo.code && userInfo.code == '10000') {
if (userInfo.avatar) {
this.avatarUrl = userInfo.avatar;
this.$api.pullImage({
path: this.avatarUrl,
success: res => {
if (res.code == 0) {
this.headImg = res.data.pic_path;
} else {
this.$util.showToast({
title: res.message
});
}
},
fail: () => {
this.$util.showToast({
title: '头像拉取失败'
});
}
})
}
this.nickName = userInfo.nickName
} else {
this.$util.showToast({
title: userInfo.subMsg
})
}
},
fail: (err) => {
this.$util.showToast({
title: err.subMsg
})
}
});
}
// #endif
}
};
</script>
<style lang="scss">
// 增加超出隐藏,是为样式四进行占位【样式四是有定位部分】,定位部分也可以设置颜色
.container {
overflow: hidden;
}
.common-wrap {
width: 100%;
box-sizing: border-box;
}
// 会员信息
.member-info {
.info-wrap {
padding: 44rpx 30rpx;
display: flex;
align-items: center;
view {
color: var(--btn-text-color);
}
.info {
flex: 1;
width: 0;
padding-right: 20rpx;
overflow: hidden;
}
}
.headimg {
width: 120rpx;
height: 120rpx;
overflow: hidden;
border-radius: 50%;
margin-right: 20rpx;
image {
width: 100%;
}
}
.nickname {
font-weight: bold;
white-space: nowrap;
margin-bottom: 0;
// display: flex;
align-items: center;
flex-wrap: wrap;
}
.name {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
font-size: 38rpx;
font-weight: 600;
}
.mobile {
font-size: 26rpx;
line-height: 1.5;
}
.desc {
font-size: 24rpx;
}
.member-code,
.user-info {
font-size: 40rpx;
margin-left: 20rpx;
line-height: 1;
color: var(--btn-text-color);
}
.member-level {
font-size: 24rpx;
background: none;
color: #f7c774 !important;
line-height: 40rpx;
height: 40rpx;
border-radius: 4rpx;
// padding: 0 16rpx;
// margin-left: 20rpx;
// display: flex;
align-items: center;
.icondiy {
line-height: 1;
font-size: 24rpx;
margin-right: 10rpx;
}
&.auth {
margin-left: 0;
}
.level-name{
background: #31312d;
color: rgb(242, 220, 172) !important;
padding: 6rpx 24rpx;
border-radius: 50rpx;
font-size: 24rpx;
font-weight: 500;
}
// .level-name {
// max-width: 240rpx;
// xword-break: break-all;
// text-overflow: ellipsis;
// overflow: hidden;
// display: -webkit-box;
// -webkit-line-clamp: 1;
// -webkit-box-orient: vertical;
// white-space: break-spaces;
// }
}
.super-member {
display: flex;
align-items: center;
justify-content: space-between;
height: 120rpx;
border-top-left-radius: 10rpx;
border-top-right-radius: 10rpx;
background: linear-gradient(107deg, #7c7878 0%, #201a18 100%);
padding: 30rpx 40rpx;
box-sizing: border-box;
.icon-huangguan {
margin-right: 10rpx;
font-size: 40rpx;
}
.super-info {
flex: 1;
width: 0;
font-size: 36rpx;
color: var(--super-member-start-text-color);
// background-image: linear-gradient(90deg, var(--super-member-start-text-color) 0%, var(--super-member-end-text-color) 100%);
// -webkit-background-clip: text;
// -webkit-text-fill-color: transparent;
display: flex;
align-items: center;
.icondiy {
margin-right: 10rpx;
}
}
.see {
line-height: 1;
font-size: 30rpx;
}
.icon-right {
font-size: 28rpx;
margin-left: 10rpx;
}
}
}
.account-info {
display: flex;
padding: 40rpx 0;
align-items: center;
justify-content: center;
view {
color: #fff;
}
.solid {
height: 70rpx;
width: 2rpx;
background: #fff;
border-radius: 2rpx;
}
.account-item {
flex: 1;
text-align: center;
.value {
font-size: 34rpx;
font-weight: bold !important;
margin-bottom: 4rpx;
line-height: 1.3;
}
.title {
font-size: 26rpx;
}
}
}
.data-style-1 {
.account-info {
padding: 20rpx 0;
}
.super-member {
height: 100rpx;
}
.super-text {
background-image: linear-gradient(90deg, #ffdba6 0%, #ffebca 49%, #f7c774 100%);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
display: flex;
align-items: center;
}
}
.data-style-2 {
.member-info {
// border-radius: 0 0 100% 100%/0 0 70rpx 70rpx;
overflow: hidden;
.member-level {
background: none;
.level-name{
background: #31312d;
color: rgb(242, 220, 172) !important;
padding: 6rpx 24rpx;
border-radius: 50rpx;
font-size: 24rpx;
font-weight: 500;
}
}
}
.account-info {
background: #fff;
margin: 20rpx 0 0 0;
color: #333;
border-radius: 18rpx;
.solid {
background: #f2f2f2;
}
.account-item {
.value {
color: #000000;
}
.title {
color: #666666;
}
}
}
.super-member {
color: #8d4b16;
background: linear-gradient(107deg, #fadcb5 0%, #f6bd74 100%);
border-top-left-radius: 18rpx;
border-top-right-radius: 18rpx;
.super-info {
color: var(--super-member-start-text-color);
// background-image: linear-gradient(90deg, var(--super-member-start-text-color) 0%, var(--super-member-end-text-color) 100%);
}
.see {
color: var(--super-member-start-text-color);
}
.icon-right {
color: var(--super-member-start-text-color);
}
}
}
.data-style-3 {
.info-wrap view {
color: #282c38;
}
.member-code,
.user-info {
color: #282c38;
font-weight: bold;
}
.member-code {
font-size: 36rpx;
}
.super-member {
border-radius: 22rpx;
.super-text {
.see {
width: 160rpx;
height: 56rpx;
line-height: 56rpx;
background: #e3c377;
border-radius: 56rpx;
color: #77413e;
text-align: center;
font-weight: bold;
font-size: 24rpx;
display: block;
}
}
.super-info {
flex-direction: column;
align-items: normal;
.title {
height: 36rpx;
width: auto;
margin-bottom: 14rpx;
}
.desc {
color: #e3c377;
line-height: 1;
}
}
}
.account-info {
.solid {
background: none;
}
}
.account-item {
.value {
color: #282c38;
font-size: 44rpx;
}
.title {
color: #aab0ba;
}
}
.member-level {
background: none;
padding: 0;
margin: 0;
height: auto;
display: flex;
align-items: center;
.level-icon {
width: 40rpx;
height: auto;
will-change: transform;
}
.level-name {
height: 36rpx;
line-height: 36rpx;
padding: 2rpx 20rpx;
color: #f2dcac;
background: #31312d;
font-size: 24rpx;
margin-left: 10rpx;
border-radius: 36rpx;
// border-bottom-left-radius: 0;
// border-top-left-radius: 40rpx;
// font-weight: bold;
}
}
}
.data-style-4 {
position: relative;
.info-wrap {
padding-bottom: 276rpx;
margin-bottom: 226rpx;
view {
color: #282c38;
}
.info {
display: flex;
flex-direction: column;
align-items: baseline;
.name,
.desc {
color: #fff;
}
}
}
.member-code,
.user-info {
color: #fff;
font-weight: bold;
font-size: 36rpx;
}
.member-level {
background: #474758;
padding: 0;
margin: 10rpx 0 0;
height: auto;
border-radius: 10px;
.level-icon {
width: 40rpx;
height: auto;
vertical-align: middle;
will-change: transform;
}
.level-name {
padding: 0 20rpx 0 6rpx;
color: #ddc095;
font-size: 24rpx;
}
}
.member-info-style4 {
position: absolute;
bottom: -226rpx;
left: 24rpx;
right: 24rpx;
padding: 30rpx;
background-color: #fff;
border-radius: 16rpx;
.account-info {
padding: 50rpx 0;
.account-item {
.value {
color: #282c38;
font-size: 38rpx;
}
.title {
color: #666666;
font-size: $font-size-tag;
}
}
}
.super-member {
border-radius: 22rpx;
height: 120rpx;
line-height: 100rpx;
padding: 20rpx;
.super-info {
display: flex;
align-items: center;
.title {
width: 80rpx;
height: auto;
will-change: transform;
margin-right: 20rpx;
}
.desc {
font-size: 30rpx;
color: #333;
font-weight: bold;
}
}
.super-text {
display: flex;
align-items: center;
justify-content: center;
background-color: #333;
border-radius: 26rpx;
width: 138rpx;
height: 52rpx;
&.more {
width: 180rpx;
}
.see {
color: #f6dcad;
font-size: $font-size-goods-tag;
}
}
}
.style4-other {
display: flex;
justify-content: space-between;
padding: 0 10rpx;
.style4-btn-wrap {
flex: 1;
display: flex;
.recharge-btn,
.kefu-btn {
margin: 0;
width: 200rpx;
height: 80rpx;
line-height: 84rpx;
border-radius: 44rpx;
text-align: center;
border: 2rpx solid transparent;
}
.recharge-btn {
margin-right: 30rpx;
background-color: $base-color;
color: #fff;
}
.kefu-btn {
color: $base-color;
border-color: $base-color;
}
.contact-wrap {
flex: 1;
}
}
.code {
width: 80rpx;
height: 80rpx;
padding: 20rpx;
background-color: $base-color;
border-radius: 50%;
box-sizing: border-box;
image {
width: 40rpx;
height: 40rpx;
}
}
}
}
}
.member-code-popup {
width: 100%;
min-height: 900rpx;
background: none;
.popup-top {
padding: 40rpx;
box-sizing: border-box;
width: 100%;
height: 800rpx;
background: #ffffff;
border-radius: 12rpx;
.popup-top-title {
display: flex;
align-items: center;
margin-bottom: 60rpx;
.popup-top-title-txt {
font-size: 30rpx;
margin-left: 16rpx;
}
}
.popup-top-tiao {
width: 480rpx;
height: 130rpx;
overflow: hidden;
margin: 0 auto 20rpx;
image {
width: 480rpx;
height: 160rpx;
max-height: unset !important;
}
}
.popup-top-code {
text-align: center;
color: #000;
font-size: 28rpx;
margin: 0 auto 20rpx;
line-height: 1;
}
.popup-top-tiaoJie {
text-align: center;
font-size: 28rpx;
color: rgb(153, 153, 153);
margin-bottom: 40rpx;
}
.popup-top-erwei {
width: 254rpx;
height: 254rpx;
margin: 0 auto 20rpx;
image {
width: 100%;
height: 100%;
}
}
.popup-top-shauxin {
width: 350rpx;
height: 80rpx;
border-radius: $border-radius;
background: rgb(245, 249, 247);
margin: 0 auto;
font-size: 30rpx;
text-align: center;
display: flex;
align-items: center;
justify-content: center;
.iconfont {
margin-left: 20rpx;
}
}
.popup-top-text {
text-align: center;
font-size: 18rpx;
color: rgb(153, 153, 153);
margin-top: 30rpx;
}
}
.popup-bottom {
display: flex;
align-items: center;
justify-content: center;
background: none !important;
.iconfont-delete {
font-size: 60rpx;
margin-top: 20rpx;
color: white;
}
}
}
/deep/ .uni-popup__wrapper.uni-custom .uni-popup__wrapper-box {
background: none !important;
}
/deep/ .member-info-style4 .uni-popup__wrapper.uni-custom .uni-popup__wrapper-box {
background: #fff !important;
}
.member-code-popup .popup-top {
height: auto;
}
.member-complete-info-popup {
.complete-info-wrap {
background: #fff;
padding: 50rpx 40rpx 40rpx;
padding-bottom: calc(40rpx + constant(safe-area-inset-bottom));
padding-bottom: calc(40rpx + env(safe-area-inset-bottom));
.head {
position: relative;
border-bottom: 2rpx solid $color-line;
padding-bottom: 20rpx;
.title {
font-size: $font-size-toolbar;
display: block;
}
.tips {
font-size: $font-size-base;
display: block;
}
.iconfont {
position: absolute;
right: 0;
top: -30rpx;
display: inline-block;
width: 56rpx;
height: 56rpx;
line-height: 56rpx;
text-align: right;
font-size: $font-size-toolbar;
font-weight: bold;
}
}
.item-wrap {
border-bottom: 2rpx solid $color-line;
display: flex;
align-items: center;
padding: 20rpx 0;
.label {
font-size: $font-size-toolbar;
margin-right: 40rpx;
}
button {
background: transparent;
margin: 0;
padding: 0;
border-radius: 0;
flex: 1;
text-align: left;
display: flex;
align-items: center;
font-size: $font-size-toolbar;
border: none;
image {
width: 100rpx;
height: 100rpx;
border-radius: 10rpx;
overflow: hidden;
}
}
.iconfont {
flex: 1;
text-align: right;
}
input {
flex: 1;
height: 80rpx;
box-sizing: border-box;
font-size: $font-size-toolbar;
}
}
.save-btn {
width: 280rpx;
height: 90rpx;
line-height: 90rpx;
background-color: #07c160;
color: #fff;
margin: 40rpx auto 20rpx;
}
}
}
</style>
<style scoped>
.member-complete-info-popup /deep/ .uni-popup__wrapper.bottom,
.member-complete-info-popup /deep/ .uni-popup__wrapper.bottom .uni-popup__wrapper-box {
border-top-left-radius: 30rpx !important;
border-top-right-radius: 30rpx !important;
}
</style>