286 lines
7.7 KiB
Vue
286 lines
7.7 KiB
Vue
<template>
|
||
<view id="stores" class="store" :style="[isHome?contentStyle:'']">
|
||
<view class='pictrue' :style="[isHome || isHomeComb?logoStyleRadius:'']">
|
||
<image :src="merchantInfo.avatar" class=""></image>
|
||
</view>
|
||
<view class="text">
|
||
<navigator :url="`/pages/merchant/${type}/index?merId=${merId}`" hover-class="none">
|
||
<view class="flex merchantInfo">
|
||
<text class="name" :style="!isHome?'color: #FFFFFF;':''">{{merchantInfo.name}}</text>
|
||
<text v-if="isShowTypeId" class="iconfont icon-ic_rightarrow" :style="!isHome?'color: #FFFFFF;':''"></text>
|
||
</view>
|
||
</navigator>
|
||
<view class="score">
|
||
<text v-if="merchantInfo.isSelf" :class="marketingType !== ProductMarketingTypeEnum.Groupbuying && marketingType !== ProductMarketingTypeEnum.Seckill?'bg-color bg-color':'bg-red'" class="bt-color mr10 self_min merType">自营</text>
|
||
<text v-if="isShowTypeId && merchantInfo.typeId"
|
||
class="bt-color mr10 merType color-FAAD14">{{merchantInfo.typeId | merchantTypeFilter}}</text>
|
||
<view class='starsList'>
|
||
<block v-for="(itemn, indexn) in merchantInfo.starLevel" :key="indexn">
|
||
<text class='iconfont icon-ic_star1 mr-4' :class="marketingType !== ProductMarketingTypeEnum.Groupbuying && marketingType !== ProductMarketingTypeEnum.Seckill?'font-color':'font-red'"></text>
|
||
</block>
|
||
<block v-show="Number(merchantInfo.starLevel)<5">
|
||
<text v-for="(itemn, indexn) in noStarLevel" :key="indexn"
|
||
class='iconfont icon-ic_star1 noCheck'></text>
|
||
</block>
|
||
</view>
|
||
</view>
|
||
</view>
|
||
<button v-if="type!=='home'" hover-class="none" class="merCollect merCollectBg"
|
||
:class="merchantInfoNew.isCollect ? 'care' : ''" @click="followToggle" :style="[(isHome || isHomeComb) && merchantInfoNew.isCollect ? followColor : '']">
|
||
<view v-if="!merchantInfoNew.isCollect" class="iconfont icon-ic_love"></view>
|
||
<view class="line-heightOne">{{ merchantInfoNew.isCollect ? '已关注' : '关注' }}</view>
|
||
</button>
|
||
<navigator v-if="!isShowTypeId" :url="`/pages/merchant/${type}/index?merId=${merId}`" hover-class="none">
|
||
<button class="merCollect" :class="marketingType !== ProductMarketingTypeEnum.Groupbuying && marketingType !== ProductMarketingTypeEnum.Seckill?'merCollectBg':'bg-red'" hover-class="none">进店</button>
|
||
</navigator>
|
||
</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 {
|
||
getMerCollectAddApi,
|
||
getMerCollectCancelApi
|
||
} from '@/api/merchant.js';
|
||
import {
|
||
followMer
|
||
} from '@/libs/follow.js';
|
||
import {
|
||
mapGetters
|
||
} from "vuex";
|
||
import {
|
||
toLogin
|
||
} from '@/libs/login.js';
|
||
import {ProductMarketingTypeEnum} from "../../enums/productEnums";
|
||
export default {
|
||
computed: {
|
||
...mapGetters(["merchantClassify", "merchantType", 'isLogin', 'uid']),
|
||
//最外层盒子的样式
|
||
boxStyle() {
|
||
return [];
|
||
},
|
||
//头像圆角
|
||
logoStyleRadius() {
|
||
if (this.dataConfig) {
|
||
return {
|
||
'borderRadius': this.dataConfig.logoStyleRadius.val ? this.dataConfig.logoStyleRadius
|
||
.val + 'px' : '0'
|
||
}
|
||
}
|
||
|
||
},
|
||
contentStyle() {
|
||
if (this.dataConfig) {
|
||
return {
|
||
'background-color': '#fff',
|
||
'border-radius': this.dataConfig.bgStyle ? 2 * this.dataConfig.bgStyle.val + 'rpx' : '0',
|
||
'margin': this.dataConfig.mbConfig ? 2 * this.dataConfig.mbConfig.val + 'rpx' + ' ' + 2 * this.dataConfig.lrConfig
|
||
.val +
|
||
'rpx' +
|
||
' ' + 0 : '0',
|
||
|
||
'padding': this.dataConfig.upConfig ? 2 * this.dataConfig.upConfig.val + 'rpx' + ' ' + '20rpx' + ' ' + 2 * this
|
||
.dataConfig
|
||
.downConfig
|
||
.val + 'rpx' : '0'
|
||
}
|
||
}
|
||
},
|
||
// 关注颜色
|
||
followColor() {
|
||
if (this.dataConfig) {
|
||
return {
|
||
border: '1px solid',
|
||
color: this.dataConfig.followColor.color[0].item,
|
||
background: '#fff'
|
||
}
|
||
}
|
||
}
|
||
},
|
||
props: {
|
||
// 商品类型:0-普通,1-秒杀seckill,2-拼团
|
||
marketingType: {
|
||
type: Number,
|
||
default: () => 0
|
||
},
|
||
// 店铺diy中设置的数据,店铺首页diy中使用
|
||
dataConfig: {
|
||
type: Object,
|
||
default: () => {}
|
||
},
|
||
merchantInfo: {
|
||
type: Object,
|
||
default: () => {}
|
||
},
|
||
// 商户id
|
||
merId: {
|
||
type: Number,
|
||
default: () => 0
|
||
},
|
||
type: {
|
||
type: String,
|
||
default: () => 'detail'
|
||
},
|
||
isShowTypeId: {
|
||
type: Boolean,
|
||
default: () => true
|
||
},
|
||
//是否是首页展示,true是,false不是
|
||
isHome: {
|
||
type: Boolean,
|
||
default: () => false
|
||
},
|
||
//店铺主页是否是头部组件中使用的diy
|
||
isHomeComb: {
|
||
type: Boolean,
|
||
default: () => false
|
||
}
|
||
},
|
||
data() {
|
||
return {
|
||
ProductMarketingTypeEnum: ProductMarketingTypeEnum,
|
||
skeletonShow: true,
|
||
isShow: true,
|
||
avatar: '',
|
||
merchantInfoNew: {
|
||
...this.merchantInfo
|
||
},
|
||
noStarLevel: 0
|
||
}
|
||
},
|
||
watch: {
|
||
merchantInfo: {
|
||
handler(newValue, oldValue) {
|
||
this.merchantInfoNew = newValue
|
||
this.getnoStarLevel()
|
||
},
|
||
immediate: true
|
||
}
|
||
},
|
||
methods: {
|
||
getnoStarLevel: function(nVal, oVal) {
|
||
if (parseInt(this.merchantInfoNew.starLevel) < 5) this.noStarLevel = 5 - parseInt(this.merchantInfoNew
|
||
.starLevel);
|
||
},
|
||
// 设置是否关注
|
||
followToggle: function() {
|
||
if (this.isLogin === false) {
|
||
toLogin();
|
||
} else {
|
||
followMer(this.merchantInfoNew.isCollect, this.merId).then(() => {
|
||
this.$set(this.merchantInfoNew, 'isCollect', !this.merchantInfoNew.isCollect);
|
||
this.$store.commit('MERCHANTJINFO', {
|
||
...this.merchantInfoNew
|
||
});
|
||
});
|
||
}
|
||
}
|
||
}
|
||
};
|
||
</script>
|
||
|
||
<style lang="scss" scoped>
|
||
.noCheck {
|
||
color: rgba(204, 204, 204, .5);
|
||
}
|
||
|
||
.care {
|
||
border: 1px solid #FFFFFF;
|
||
background: inherit !important;
|
||
}
|
||
|
||
.iconfont {
|
||
//font-size: 24rpx !important;
|
||
}
|
||
|
||
.icon-pingweifen {
|
||
color: #ccc;
|
||
}
|
||
|
||
.merchantInfo {
|
||
align-items: center;
|
||
margin-bottom: 16rpx;
|
||
}
|
||
|
||
.store {
|
||
position: relative;
|
||
// z-index: 5;
|
||
display: flex;
|
||
align-items: center;
|
||
padding: 24rpx;
|
||
//width: 100%;
|
||
|
||
// top:12rpx;
|
||
.pictrue {
|
||
width: 80rpx;
|
||
height: 80rpx;
|
||
border-radius: 50%;
|
||
overflow: hidden;
|
||
}
|
||
|
||
.easy-loadimage,
|
||
image,
|
||
uni-image {
|
||
width: 100%;
|
||
height: 100%;
|
||
}
|
||
|
||
.text {
|
||
flex: 1;
|
||
min-width: 0;
|
||
margin-right: 20rpx;
|
||
margin-left: 12rpx;
|
||
|
||
navigator {
|
||
// display: inline-flex;
|
||
align-items: center;
|
||
max-width: 100%;
|
||
|
||
.name {
|
||
min-width: 0;
|
||
overflow: hidden;
|
||
white-space: nowrap;
|
||
text-overflow: ellipsis;
|
||
font-weight: bold;
|
||
font-size: 30rpx;
|
||
line-height: 1;
|
||
}
|
||
|
||
.iconfont {
|
||
margin-left: 10rpx;
|
||
font-size: 24rpx;
|
||
}
|
||
}
|
||
|
||
.score {
|
||
display: flex;
|
||
align-items: center;
|
||
margin-top: 8rpx;
|
||
font-weight: 500;
|
||
font-size: 24rpx;
|
||
line-height: 1;
|
||
|
||
.iconfont {
|
||
font-size: 26rpx;
|
||
}
|
||
}
|
||
}
|
||
|
||
}
|
||
|
||
.self_min {
|
||
text-align: center;
|
||
}
|
||
|
||
.starsList {
|
||
padding-bottom: 4rpx;
|
||
}
|
||
</style> |