Files
MER-2.2_2601/mer_uniapp/subPackage/pages/diyPage/memberCard.vue
2026-03-08 20:07:52 +08:00

431 lines
10 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>
<view v-if="configObj" class="member-card-container" :style="[boxStyle]">
<!-- 顶部会员信息栏 -->
<view v-if="isLogin && merMemberInfo.isMerchantMember" class="member-header acea-row justify-between" :style="[bgImgStyle]">
<view class="member-brand">
<img v-if="configObj.logoConfig.url && logoShow" :src="configObj.logoConfig.url" alt="品牌logo"
class="brand-image" />
<span class="brand-name" :style="[merNameColor]">{{ configObj.titleConfig.val }}</span>
<span v-if="levelShow" class="member-level" :style="[memNameColor]">{{merMemberInfo.levelName}}</span>
</view>
<view v-if="ruleShow" @click="handleRules" class="member-rule" :style="[rulesNameColor]">会员规则</view>
<!-- 购物余额信息 -->
<view class="balance-section">
<view>
<view v-if="priceShow" class="balance-info" :style="[moneyColor]">
<span class="balance-label f-s-24">购物余额</span>
<span class="balance-amount line-heightOne f-s-36 fw-600 semiBold">¥ {{merMemberInfo.shoppingCreditsBalance}}</span>
<navigator :url="`/pages/member/shoppingFund_details/index?merId=${merId}`" hover-class="none">
<i :style="[moneyColor]" class="iconfont icon-ic_rightarrow"></i>
</navigator>
</view>
</view>
<view v-show="btnShow" class="recharge-btn-box" @click="handleMore">
<view class="recharge-btn" :style="[btnColorStyle]">充值</view>
</view>
</view>
</view>
<view v-else class="member-header flex-column flex-y-center" :style="[bgImgStyleShip]">
<view class="f-s-32 text--w111-fff">邀您加入店铺会员</view>
<view class="text--w111-fff f-s-28 mt-12 mb-28">-0元入会尊享丰富会员特权-</view>
<view class="bg--w111-fff w-264 rd-8rpx" @click="handleMemberShip">
<view :style="[btnColorStyle]" class="h-64 flex-center">立即加入会员</view>
</view>
</view>
</view>
</view>
</template>
<script>
// +----------------------------------------------------------------------
// | CRMEB [ CRMEB赋能开发者助力企业发展 ]
// +----------------------------------------------------------------------
// | Copyright (c) 2016~2026 https://www.crmeb.com All rights reserved.
// +----------------------------------------------------------------------
// | Licensed CRMEB并不是自由软件未经许可不能去掉CRMEB相关版权
// +----------------------------------------------------------------------
// | Author: CRMEB Team <admin@crmeb.com>
// +----------------------------------------------------------------------
import {
setThemeColor,
themeRgba
} from "../../../utils/setTheme";
import { mapGetters } from "vuex";
import {toLogin} from "../../../libs/login";
let app = getApp();
export default {
name: "memberCard",
props: {
merMemberInfo:{ //店铺会员信息
type: Object,
default: () => {}
},
merId: { // 商户id
type: Number,
default: 0
},
configObj: {
type: Object,
default: () => {}
}
},
data() {
return {
urlDomain: this.$Cache.get("imgHost"),
themeColor: setThemeColor(),
themeRgba: themeRgba()
};
},
computed: {
...mapGetters(['isLogin']),
bgImgUrl() {
return this.configObj.cardLogoConfig.url ? this.configObj.cardLogoConfig.url :
`${this.urlDomain}+'crmebimage/presets/cardBg.png'`;
},
//背景图片
bgImgStyleShip() {
return {
'background-image': `linear-gradient(rgba(0, 0, 0, 0.4), rgba(0, 0, 0, 0.4)), url(${this.bgImgUrl})`,
'border-radius': this.configObj.contentStyle.val ? 2 * this.configObj.contentStyle.val + 'rpx' : '0',
};
},
//背景图片
bgImgStyle() {
return {
'background-image': `url(${this.bgImgUrl})`,
'border-radius': this.configObj.contentStyle.val ? 2 * this.configObj.contentStyle.val + 'rpx' : '0',
};
},
//最外层盒子的样式
boxStyle() {
return {
background: `linear-gradient(${this.configObj.bgColor.color[0].item}, ${this.configObj.bgColor.color[1].item})`,
'border-radius': this.configObj.bgStyle.val ? 2 * this.configObj.bgStyle.val + 'rpx' : '0',
margin: 2 * this.configObj.mbConfig.val + 'rpx' + ' ' + 2 * this.configObj.lrConfig.val + 'rpx' + ' ' + 0,
padding: 2 * this.configObj.upConfig.val + 'rpx' + ' ' + '20rpx' + ' ' + 2 * this.configObj.downConfig.val + 'rpx'
}
},
themeStyle() {
return this.configObj.themeStyleConfig.tabVal
},
// 领取按钮
btnColorStyle() {
return {
background: this.themeStyle ? this.configObj.btnColor.color[0].item : this.themeRgba,
color: this.themeStyle ? this.configObj.itemBgColor.color[0].item : this.themeColor,
}
},
// 店铺名称
merNameColor() {
return {
color: this.configObj.merNameColor.color[0].item
};
},
// 会员文字
memNameColor() {
return {
color: this.configObj.memNameColor ? this.configObj.memNameColor.color[0].item : '',
backgroundColor: 'rgba(0, 0, 0, 0.3)'
};
},
// 规则文字
rulesNameColor() {
return {
color: this.configObj.rulesNameColor.color[0].item
};
},
// 购物金文字
moneyColor() {
return {
color: this.configObj.moneyColor.color[0].item
};
},
logoShow() {
if (this.configObj.typeConfig.activeValue.indexOf(0) !== -1) {
return true;
} else {
return false;
}
},
levelShow() {
//等级
if (this.configObj.typeConfig.activeValue.indexOf(1) !== -1) {
return true;
} else {
return false;
}
},
ruleShow() {
//规则
if (this.configObj.typeConfig.activeValue.indexOf(2) !== -1) {
return true;
} else {
return false;
}
},
btnShow() {
//充值按钮
if (this.configObj.typeConfig.activeValue.indexOf(3) !== -1) {
return true;
} else {
return false;
}
},
priceShow() {
//购物金
if (this.configObj.typeConfig.activeValue.indexOf(4) !== -1) {
return true;
} else {
return false;
}
},
// 会员权益列表
benefitList() {
return [{
name: '会员专享价',
icon: '💎'
},
{
name: '充值赠送',
icon: '💰'
},
{
name: '会员专享券',
icon: '🎫'
},
{
name: '入会有礼',
icon: '🎁'
},
];
},
},
methods: {
handleMore(){ //去充值
this.$util.navigateTo(`/pages/member/recharge_amount/index?merId=${this.merId}`)
},
// 会员规则
handleRules(){
this.$util.navigateTo(`/pages/member/membership_rules/index?merId=${this.merId}&level=${this.merMemberInfo.level}`)
},
handleMemberShip(){
if(this.isLogin){
this.$emit('activate-membership')
}else{
toLogin();
}
},
}
}
</script>
<style scoped lang="scss">
.member-card-container {
overflow: hidden;
}
.member-header {
background-repeat: no-repeat;
background-size: 100% 100%;
color: #ffffff;
padding: 28rpx 0 28rpx 28rpx;
position: relative;
height: 250rpx;
overflow: hidden;
}
.member-brand {
display: flex;
z-index: 1;
height: 48rpx;
align-items: center;
}
.brand-image {
width: 44rpx;
height: 44rpx;
margin-right: 14rpx;
border-radius: 8rpx;
}
.brand-name {
font-size: 28rpx;
font-weight: 500;
margin-right: 18rpx;
}
.member-box {
height: 34rpx;
border-radius: 8rpx;
}
.member-level {
display: inline-block;
line-height: 34rpx;
font-size: 20rpx;
height: 34rpx;
padding: 0 8rpx;
border-radius: 8rpx;
}
.member-rule {
font-size: 24rpx;
z-index: 1;
width: 136rpx;
height: 48rpx;
text-align: center;
line-height: 48rpx;
background-color: rgba(0, 0, 0, 0.3);
border-radius: 24rpx 0 0 24rpx;
}
.balance-section {
position: absolute;
bottom: 0;
left: 0;
right: 0;
padding: 28rpx;
display: flex;
justify-content: space-between;
align-items: center;
background: rgba(0, 0, 0, 0.3);
}
.balance-info {
display: flex;
align-items: center;
height: 52rpx;
}
.recharge-btn-box {
background-color: #fff;
border-radius: 8rpx;
line-height: 54rpx;
height: 52rpx;
.recharge-btn {
padding: 0 20rpx;
border-radius: 8rpx;
font-size: 28rpx;
}
}
.level-progress {
padding: 40rpx 24rpx;
background-color: #ffffff;
}
.level-dots {
display: flex;
justify-content: space-between;
align-items: center;
position: relative;
padding: 0;
}
.level-dots::before {
content: '';
position: absolute;
top: 20rpx;
left: 0;
right: 0;
height: 4rpx;
background-color: #e8e8e8;
z-index: 0;
}
.level-dot {
position: relative;
z-index: 1;
display: flex;
flex-direction: column;
align-items: center;
font-size: 24rpx;
color: #999;
width: 20%;
}
.level-dot::before {
content: '';
width: 24px;
height: 24px;
border-radius: 50%;
background-color: #e8e8e8;
margin-bottom: 8rpx;
transition: all 0.3s ease;
position: relative;
}
.level-dot.current::before {
background-color: #ff4d4f;
box-shadow: 0 0 0 6rpx rgba(255, 77, 79, 0.2);
width: 32rpx;
height: 32rpx;
top: -4rpx;
}
.level-dot.current::after {
content: '当前';
position: absolute;
top: -50rpx;
left: 50%;
transform: translateX(-50%);
background-color: #ff4d4f;
color: #ffffff;
padding: 8rpx 20rpx;
border-radius: 30rpx;
font-size: 24rpx;
font-weight: bold;
white-space: nowrap;
}
.level-dot.current {
color: #ff4d4f;
font-weight: bold;
}
.member-benefits {
display: flex;
justify-content: space-around;
padding: 32rpx 0;
background-color: #ffffff;
border-top: 2rpx solid #f0f0f0;
}
.benefit-item {
display: flex;
flex-direction: column;
align-items: center;
cursor: pointer;
width: 25%;
}
.benefit-icon {
width: 120rpx;
height: 120rpx;
background-color: #fff5f5;
border-radius: 50%;
display: flex;
justify-content: center;
align-items: center;
margin-bottom: 16rpx;
transition: all 0.3s ease;
}
.benefit-icon-content {
font-size: 56rpx;
color: #ff4d4f;
}
.benefit-name {
font-size: 24rpx;
color: #666;
text-align: center;
word-break: keep-all;
}
.benefit-item:hover .benefit-icon {
transform: scale(1.1);
}
</style>