dl_mer_uniapp/components/homeIndex/merchant.vue
2025-03-04 16:03:38 +08:00

306 lines
7.5 KiB
Vue
Raw Permalink 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 class='indexList tui-skeleton' :style="[boxStyle]" v-if="merList.length>0">
<view class='title acea-row row-between-wrapper'>
<view class='text line1 tui-skeleton-rect acea-row'>
<image :src="logoUrl"></image>
<text class='label' :style="[titleColor]">{{dataConfig.titleConfig.val}}</text>
</view>
<view class='more tui-skeleton-rect' :style="[moreColor]" hover-class="none" @click="more()">
更多
<text class="iconfont icon-jiantou"></text>
</view>
</view>
<view class='tips mb20'>Good brand store</view>
<view class='merList' :style="[gridGap]" v-if="listStyle == 0">
<view class='item' v-for="(item,index) in merList" :key='index'>
<navigator :url="`/pages/merchant/home/index?id=${item.id}`" hover-class="none">
<view class='pic tui-skeleton-rect'>
<easy-loadimage :image-src="item.coverImage"
:radius="dataConfig.contentStyle.val"></easy-loadimage>
</view>
<image class="lines left" :src="urlDomain+'crmebimage/presets/lianjie.png'"></image>
<view v-show="logoShow" class='logo tui-skeleton-rect'>
<image :src='item.rectangleLogo'></image>
</view>
<image class="lines right" :src="urlDomain+'crmebimage/presets/lianjie.png'"></image>
<view class='merName tui-skeleton-rect'>
<view class='neme line1 line-heightOne' v-show="nameShow" :style="[nameColor]">{{item.name}}</view>
<view v-show="typeShow"><text class='label'
:style="[labelColor]">{{item.typeId | merchantTypeFilter}}</text></view>
</view>
</navigator>
</view>
</view>
<view v-if="listStyle == 1">
<mer-card :merchantList="merList" :merchantStyle="merchantStyle" :isShowHome="isShowHome" :isStreet="true" :isHome="true"></mer-card>
</view>
</view>
</view>
</template>
<script>
// +----------------------------------------------------------------------
// | CRMEB [ CRMEB赋能开发者助力企业发展 ]
// +----------------------------------------------------------------------
// | Copyright (c) 2016~2024 https://www.crmeb.com All rights reserved.
// +----------------------------------------------------------------------
// | Licensed CRMEB并不是自由软件未经许可不能去掉CRMEB相关版权
// +----------------------------------------------------------------------
// | Author: CRMEB Team <admin@crmeb.com>
// +----------------------------------------------------------------------
import {
indexMerListApi,
getDiyMerListApi,
getMerListbyidsApi
} from '@/api/merchant.js';
import merCard from '@/components/merchantList/index.vue'
import easyLoadimage from '@/components/base/easy-loadimage.vue';
let app = getApp()
export default {
name: 'merchantList',
props: {
dataConfig: {
type: Object,
default: () => {}
},
},
data() {
return {
urlDomain: this.$Cache.get("imgHost"),
merList: [],
isShowHome: {} ,//首页中展示字段判断
merchantStyle: null //样式二中的样式集合
}
},
components: {
merCard,
easyLoadimage
},
computed: {
//店铺数据类型0默认1自定义
listConfig(){
return this.dataConfig.listConfig.tabVal
},
//店铺数据自定义选中商户的id集合
activeValueMer(){
return this.dataConfig.activeValueMer.activeValue
},
//样式类型01
listStyle() {
return this.dataConfig.tabConfig.tabVal
},
//最外层盒子的样式
boxStyle() {
return {
borderRadius: this.dataConfig.bgStyle.val * 2 + 'rpx',
background: `linear-gradient(${this.dataConfig.bgColor.color[0].item}, ${this.dataConfig.bgColor.color[1].item})`,
margin: this.dataConfig.mbConfig.val * 2 + 'rpx' + ' ' + '20rpx' + ' ' + 0,
padding: this.dataConfig.upConfig.val * 2 + 'rpx' + ' ' + '10px' + ' ' + this.dataConfig.downConfig
.val * 2 + 'rpx'
}
},
//图片样式
contentStyle() {
return {
'border-radius': this.dataConfig.contentStyle.val + 'px',
}
},
//内容间距
gridGap() {
return {
'grid-gap': this.dataConfig.contentConfig.val + 'px'
}
},
//标题颜色
titleColor() {
return {
'color': this.dataConfig.titleColor.color[0].item
}
},
//名称颜色
nameColor() {
return {
'color': this.dataConfig.nameColor.color[0].item
}
},
//更多颜色
moreColor() {
return {
'color': this.dataConfig.moreColor.color[0].item
}
},
//标题图片
logoUrl() {
return this.dataConfig.logoConfig.url
},
//标签
labelColor() {
return {
'backgroundColor': this.dataConfig.labelColor.color[0].item,
'color': this.dataConfig.labelFontColor.color[0].item
}
},
//店铺名称
nameShow() {
if (this.dataConfig.typeConfig.activeValue.indexOf(0) !== -1) {
return true;
} else {
return false;
}
},
//店铺logo
logoShow() {
if (this.dataConfig.typeConfig.activeValue.indexOf(1) !== -1) {
return true;
} else {
return false;
}
},
//店铺类型
typeShow() {
if (this.dataConfig.typeConfig.activeValue.indexOf(2) !== -1) {
return true;
} else {
return false;
}
},
//店铺数量
numConfig(){
return this.dataConfig.numConfig.val
}
},
mounted() {
this.merchantStyle = {
contentStyle: this.contentStyle,
nameColor: this.nameColor,
labelColor: this.labelColor
}
this.$store.dispatch('MerCategoryList');
this.$store.dispatch('MerTypeList');
if(this.listConfig === 0){
this.getMerList();
}else{
this.getMerListbyids();
}
this.isShowHome = {
typeShow: this.typeShow,
nameShow: this.nameShow,
logoShow: this.logoShow
}
},
methods: {
more() {
this.$util.navigateTo(this.dataConfig.linkConfig.val)
},
//默认店铺数据
getMerList() {
getDiyMerListApi(this.numConfig).then((res) => {
this.merList = res.data.list;
});
},
//自定义店铺数据
getMerListbyids(){
getMerListbyidsApi(this.activeValueMer.join(',')).then((res) => {
this.merList = res.data;
});
}
}
}
</script>
<style lang="scss" scoped>
.indexList {}
.merList {
display: grid;
grid-template-columns: repeat(3, 1fr);
grid-template-rows: auto;
width: 100%;
.item {
position: relative;
.lines {
width: 8rpx;
height: 34rpx;
position: absolute;
z-index: 1;
}
.left {
left: 14rpx;
top: 204rpx;
}
.right {
right: 14rpx;
top: 204rpx;
}
.pic {
width: 100%;
height: 220rpx;
overflow: hidden;
image {
width: 100%;
height: 100%;
}
}
.logo {
width: 150rpx;
height: 44rpx;
background: #FFFFFF;
box-shadow: 0rpx 3rpx 6rpx 1rpx rgba(0, 0, 0, 0.1000);
border-radius: 33rpx;
opacity: 1;
margin: auto;
position: absolute;
z-index: 1;
left: 16%;
top: 59%;
image {
margin: auto;
width: 130rpx;
height: 44rpx;
display: block;
}
}
.merName {
width: 100%;
height: 110rpx;
background: #FFFFFF;
border-radius: 14rpx;
opacity: 1;
padding: 30rpx 0 14rpx 0;
display: flex;
flex-direction: column;
align-items: center;
.neme {
font-weight: bold;
color: #333333;
font-size: 22rpx;
text-align: center;
margin-bottom: 4rpx;
width: 210rpx;
}
.label {
height: 28rpx;
line-height: 28rpx;
border-radius: 14rpx;
opacity: 1;
text-align: center;
font-size: 18rpx;
padding: 0 12rpx;
}
}
}
}
</style>