431 lines
10 KiB
Vue
431 lines
10 KiB
Vue
<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> |