商城首页新增博客展示,活动配置首页数据独立组件

master
gongfuxiang 2022-01-24 18:44:47 +08:00
parent 37657373bf
commit bad5a7affc
12 changed files with 294 additions and 174 deletions

View File

@ -641,6 +641,37 @@ button[disabled].bg-gray {
font-size: 36rpx;
font-weight: bold;
color: #333;
}
/**
*
*/
.floor-list .goods-list .goods {
width: calc(50% - 10rpx);
float: left;
padding-bottom: 10rpx;
margin-bottom: 20rpx;
}
.floor-list .goods-list .goods:nth-of-type(2n + 1) {
margin-right: 10rpx;
}
.floor-list .goods-list .goods:nth-of-type(2n) {
margin-left: 10rpx;
}
.floor-list .goods-list .goods .goods-img {
width: 100%;
height: 380rpx !important;
}
/**
*
*/
.word-list .word-icon:not(:last-child) {
margin-right: 20rpx;
}
.word-list image {
max-width: 100%;
margin: 0 auto;
}
/**

View File

@ -134,4 +134,48 @@
-moz-filter: grayscale(100%);
-ms-filter: grayscale(100%);
-o-filter: grayscale(100%);
}
/**
* -
*/
.plugins-blog-list .blog-img {
width: 200rpx !important;
height: 170rpx !important;
}
.plugins-blog-list .base {
width: calc(100% - 220rpx);
}
/*
* -
*/
.plugins-blog-rolling-list swiper,
.plugins-blog-rolling-list .item .blog-img {
height: 180rpx !important;
}
.plugins-blog-rolling-list .item .blog-title {
left: 0;
bottom: 0;
width: calc(100% - 36rpx);
background-color: rgba(0,0,0,.5);
}
/**
* -
*/
.plugins-blog-grid-list .item {
width: calc(50% - 10rpx);
float: left;
padding-bottom: 10rpx;
margin-bottom: 20rpx;
}
.plugins-blog-grid-list .item:nth-of-type(2n + 1) {
margin-right: 10rpx;
}
.plugins-blog-grid-list .item:nth-of-type(2n) {
margin-left: 10rpx;
}
.plugins-blog-grid-list .item .blog-img {
width: 100%;
height: 230rpx !important;
}

View File

@ -0,0 +1,85 @@
<template>
<view>
<view v-if="(propData || []).length > 0">
<block v-for="(floor, index) in propData" :key="index">
<block v-if="floor.goods_list.length > 0 && floor.home_data_location == propLocation">
<view class="spacing-nav-title">
<text class="text-wrapper" :style="'color:'+(floor.color || '#333')+';'">{{floor.title}}</text>
<text v-if="(floor.vice_title || null) != null" class="vice-name margin-left-lg cr-gray">{{floor.vice_title}}</text>
<navigator :url="'/pages/plugins/activity/detail/detail?id=' + floor.id" hover-class="none" class="arrow-right padding-right-xxxl cr-gray fr">更多</navigator>
</view>
<view class="floor-list wh-auto oh pr">
<view v-if="floor.keywords_arr.length > 0" class="word-list scroll-view-horizontal margin-bottom-lg">
<scroll-view scroll-x>
<block v-for="(kv, ki) in floor.keywords_arr" :key="ki">
<navigator :url="'/pages/goods-search/goods-search?keywords=' + kv" hover-class="none" class="word-icon dis-inline-block bg-main-light text-size-xs cr-main round padding-top-xs padding-bottom-xs padding-left padding-right">{{kv}}</navigator>
</block>
</scroll-view>
</view>
<view class="goods-list">
<view v-for="(goods, index2) in floor.goods_list" :key="index2" class="goods bg-white border-radius-main oh pr">
<!-- 商品主体内容 -->
<navigator :url="'/pages/goods-detail/goods-detail?goods_id=' + goods.id" hover-class="none">
<image class="goods-img dis-block" :src="goods.images" mode="aspectFit"></image>
<view class="goods-base padding-horizontal-main margin-top-sm">
<view class="goods-title multi-text margin-bottom-sm">{{goods.title}}</view>
<view class="sales-price">{{propCurrencySymbol}}{{goods.min_price}}</view>
</view>
</navigator>
<!-- 标签插件 -->
<view v-if="(propLabel || null) != null && propLabel.data.length > 0" :class="'plugins-label oh pa plugins-label-'+((propLabel.base.is_user_goods_label_icon || 0) == 0 ? 'text' : 'img')+' plugins-label-'+(propLabel.base.user_goods_show_style || 'top-left')">
<block v-for="(lv,li) in propLabel.data" :key="li">
<view v-if="lv.goods_ids.indexOf(goods.id) != -1" class="lv dis-inline-block va-m" :data-value="((propLabel.base.is_user_goods_label_url || 0) == 1) ? (lv.url || '') : ''" @tap="url_event">
<view v-if="(propLabel.base.is_user_goods_label_icon || 0) == 0" class="round cr-white bg-main text-size-xs fl" :style="((lv.bg_color || null) != null ? 'background-color:'+ lv.bg_color+' !important;' : '')+((lv.text_color || null) != null ? 'color:'+ lv.text_color+' !important;' : '')">{{lv.name}}</view>
<image v-else class="dis-block" :src="lv.icon" mode="scaleToFill"></image>
</view>
</block>
</view>
</view>
</view>
</view>
</block>
</block>
</view>
</view>
</template>
<script>
const app = getApp();
export default {
data() {
return {};
},
components: {},
props: {
propCurrencySymbol: {
type: String,
default: app.globalData.data.currency_symbol
},
propLocation: {
type: [String,Number],
default: 0
},
propConfig: {
type: [String,Object],
default: null
},
propData: {
type: Array,
default: []
},
propLabel: {
type: [Array,Object,String],
default: null
}
},
methods: {
// url
url_event(e) {
app.globalData.url_event(e);
}
}
};
</script>
<style>
</style>

View File

@ -0,0 +1,92 @@
<template>
<view>
<view v-if="(propConfig || null) != null && (propData || []).length > 0">
<block v-for="(floor, index) in propData" :key="index">
<block v-if="floor.blog_list.length > 0 && floor.home_data_location == propLocation">
<view class="spacing-nav-title">
<text class="text-wrapper" :style="'color:'+(floor.color || '#333')+';'">{{floor.title}}</text>
<text v-if="(floor.vice_title || null) != null" class="vice-name margin-left-lg cr-gray">{{floor.vice_title}}</text>
<navigator :url="'/pages/plugins/blog/search/search?id=' + floor.more_category_id" hover-class="none" class="arrow-right padding-right-xxxl cr-gray fr">更多</navigator>
</view>
<view class="wh-auto oh pr">
<view v-if="floor.keywords_arr.length > 0" class="word-list scroll-view-horizontal margin-bottom-lg">
<scroll-view scroll-x>
<block v-for="(kv, ki) in floor.keywords_arr" :key="ki">
<navigator :url="'/pages/plugins/blog/search/search?keywords=' + kv" hover-class="none" class="word-icon dis-inline-block bg-main-light text-size-xs cr-main round padding-top-xs padding-bottom-xs padding-left padding-right">{{kv}}</navigator>
</block>
</scroll-view>
</view>
<block v-if="floor.style_type == 0">
<view v-if="floor.blog_list.length > 0" class="plugins-blog-list">
<view v-for="(item, index) in floor.blog_list" class="item oh padding-main border-radius-main bg-white spacing-mb">
<navigator :url="item.url" hover-class="none">
<image class="blog-img fl radius" :src="item.cover" mode="aspectFill"></image>
<view class="base fr">
<view class="single-text">{{item.title}}</view>
<view class="cr-gray margin-top-sm">{{item.add_time_date_cn}}</view>
<view class="cr-grey multi-text margin-top-sm">{{item.describe}}</view>
</view>
</navigator>
</view>
</view>
</block>
<block v-else-if="floor.style_type == 1">
<view v-if="floor.blog_list.length > 0" class="plugins-blog-grid-list">
<view v-for="(item, index) in floor.blog_list" class="item oh border-radius-main bg-white spacing-mb">
<navigator :url="item.url" hover-class="none">
<image class="blog-img dis-block" :src="item.cover" mode="aspectFit"></image>
<view class="base padding-horizontal-main margin-top-sm">
<view class="goods-title multi-text margin-bottom-sm">{{item.title}}</view>
<view class="cr-grey">{{item.add_time_date_cn}}</view>
</view>
</navigator>
</view>
</view>
</block>
<block v-else-if="floor.style_type == 2">
<view class="plugins-blog-rolling-list scroll-view-horizontal border-radius-main oh">
<swiper :vertical="false" :autoplay="(propConfig.is_home_hot_auto_play || 0) == 1" :circular="true" :display-multiple-items="floor.blog_list.length < 3 ? floor.blog_list.length : 3" interval="3000">
<block v-for="(item, index) in floor.blog_list" :key="index">
<swiper-item class="padding-right-main">
<view class="item bg-white border-radius-main oh pr ht-auto pr">
<navigator :url="item.url" hover-class="none">
<image class="blog-img dis-block wh-auto" :src="item.cover" mode="aspectFill"></image>
<view class="blog-title pa single-text cr-white padding-horizontal-main padding-top-sm padding-bottom-sm">{{item.title}}</view>
</navigator>
</view>
</swiper-item>
</block>
</swiper>
</view>
</block>
</view>
</block>
</block>
</view>
</view>
</template>
<script>
export default {
data() {
return {};
},
components: {},
props: {
propLocation: {
type: [String,Number],
default: 0
},
propConfig: {
type: [String,Object],
default: null
},
propData: {
type: Array,
default: []
}
},
methods: {}
};
</script>
<style>
</style>

View File

@ -85,36 +85,6 @@
height: 40rpx;
}
/**
*
*/
.floor-list {
position: relative;
}
.floor-list .word .word-icon:not(:last-child) {
margin-right: 20rpx;
}
.floor-list .word image {
max-width: 100%;
margin: 0 auto;
}
.floor-list .goods-list .goods {
width: calc(50% - 10rpx);
float: left;
padding-bottom: 10rpx;
margin-bottom: 20rpx;
}
.floor-list .goods-list .goods:nth-of-type(2n + 1) {
margin-right: 10rpx;
}
.floor-list .goods-list .goods:nth-of-type(2n) {
margin-left: 10rpx;
}
.floor-list .goods-list .goods .goods-img {
width: 100%;
height: 380rpx !important;
}
/*
* -
*/

View File

@ -67,7 +67,7 @@
<image class="dis-block wh-auto border-radius-main" :src="item.images" mode="widthFix"></image>
</view>
</view>
<!-- 限时秒杀 - 插件 -->
<view v-if="plugins_seckill_is_valid == 1 && plugins_seckill_data.goods.length > 0" class="seckill spacing-mb">
<view class="spacing-nav-title">
@ -108,51 +108,18 @@
</block>
</swiper>
</view>
</view>
</view>
<!-- 活动配置-楼层顶部 - 插件 -->
<block v-if="(plugins_activity_data || null) != null && plugins_activity_data.length > 0">
<component-activity-list :propData="plugins_activity_data" propLocation="0" :propLabel="plugins_label_data" :propCurrencySymbol="currency_symbol"></component-activity-list>
</block>
<!-- 博客-楼层顶部 - 插件 -->
<block v-if="(plugins_blog_data || null) != null">
<component-blog-list :propConfig="plugins_blog_data.base" :propData="plugins_blog_data.data" propLocation="0"></component-blog-list>
</block>
<!-- 活动信息-楼层顶部 - 插件 -->
<view v-if="(plugins_activity_data || null) != null && plugins_activity_data.length > 0" class="activity">
<block v-for="(floor, index) in plugins_activity_data" :key="index">
<view v-if="floor.goods_list.length > 0 && (floor.home_data_location || 0) == 0" class="floor">
<view class="spacing-nav-title">
<text class="text-wrapper" :style="'color:'+(floor.color || '#333')+';'">{{floor.title}}</text>
<text v-if="(floor.vice_title || null) != null" class="vice-name margin-left-lg cr-gray">{{floor.vice_title}}</text>
<navigator :url="'/pages/plugins/activity/detail/detail?id=' + floor.id" hover-class="none" class="arrow-right padding-right-xxxl cr-gray fr">更多</navigator>
</view>
<view class="floor-list wh-auto oh">
<view v-if="floor.keywords_arr.length > 0" class="word scroll-view-horizontal">
<scroll-view scroll-x>
<block v-for="(kv, ki) in floor.keywords_arr" :key="ki">
<navigator :url="'/pages/goods-search/goods-search?keywords=' + kv" hover-class="none" class="word-icon dis-inline-block bg-main-light text-size-xs cr-main round padding-top-xs padding-bottom-xs padding-left padding-right">{{kv}}</navigator>
</block>
</scroll-view>
</view>
<view class="goods-list margin-top-lg">
<view v-for="(goods, index2) in floor.goods_list" :key="index2" class="goods bg-white border-radius-main oh pr">
<!-- 商品主体内容 -->
<navigator :url="'/pages/goods-detail/goods-detail?goods_id=' + goods.id" hover-class="none">
<image class="goods-img dis-block" :src="goods.images" mode="aspectFit"></image>
<view class="goods-base padding-horizontal-main margin-top-sm">
<view class="goods-title multi-text margin-bottom-sm">{{goods.title}}</view>
<view class="sales-price">{{currency_symbol}}{{goods.min_price}}</view>
</view>
</navigator>
<!-- 标签插件 -->
<view v-if="(plugins_label_data || null) != null && plugins_label_data.data.length > 0" :class="'plugins-label oh pa plugins-label-'+((plugins_label_data.base.is_user_goods_label_icon || 0) == 0 ? 'text' : 'img')+' plugins-label-'+(plugins_label_data.base.user_goods_show_style || 'top-left')">
<block v-for="(lv,li) in plugins_label_data.data" :key="li">
<view v-if="lv.goods_ids.indexOf(goods.id) != -1" class="lv dis-inline-block va-m" :data-value="((plugins_label_data.base.is_user_goods_label_url || 0) == 1) ? (lv.url || '') : ''" @tap="url_event">
<view v-if="(plugins_label_data.base.is_user_goods_label_icon || 0) == 0" class="round cr-white bg-main text-size-xs fl" :style="((lv.bg_color || null) != null ? 'background-color:'+ lv.bg_color+' !important;' : '')+((lv.text_color || null) != null ? 'color:'+ lv.text_color+' !important;' : '')">{{lv.name}}</view>
<image v-else class="dis-block" :src="lv.icon" mode="scaleToFill"></image>
</view>
</block>
</view>
</view>
</view>
</view>
</view>
</block>
</view>
<!-- 楼层数据 -->
<block v-if="(data_list || nul) != null && data_list.length > 0">
<!-- 数据模式0,1自动+手动2拖拽 -->
@ -168,15 +135,15 @@
<text v-if="(floor.describe || null) != null" class="vice-name margin-left-lg cr-gray">{{floor.describe}}</text>
<navigator :url="'/pages/goods-search/goods-search?category_id=' + floor.id" hover-class="none" class="arrow-right padding-right-xxxl cr-gray fr">更多</navigator>
</view>
<view class="floor-list wh-auto oh">
<view v-if="floor.items.length > 0" class="word scroll-view-horizontal">
<view class="floor-list wh-auto oh pr">
<view v-if="floor.items.length > 0" class="word-list scroll-view-horizontal margin-bottom-lg">
<scroll-view scroll-x>
<block v-for="(icv, icx) in floor.items" :key="icx">
<navigator :url="'/pages/goods-search/goods-search?category_id=' + icv.id" hover-class="none" class="word-icon dis-inline-block bg-main-light text-size-xs cr-main round padding-top-xs padding-bottom-xs padding-left padding-right">{{icv.name}}</navigator>
</block>
</scroll-view>
</view>
<view v-if="floor.goods.length > 0" class="goods-list margin-top-lg">
<view v-if="floor.goods.length > 0" class="goods-list">
<view v-for="(goods, index2) in floor.goods" :key="index2" class="goods bg-white border-radius-main oh pr">
<!-- 商品主体内容 -->
<navigator :url="'/pages/goods-detail/goods-detail?goods_id=' + goods.id" hover-class="none">
@ -201,49 +168,16 @@
</view>
</block>
</block>
<!-- 活动信息-楼层底部 - 插件 -->
<view v-if="(plugins_activity_data || null) != null && plugins_activity_data.length > 0" class="activity">
<block v-for="(floor, index) in plugins_activity_data" :key="index">
<view v-if="floor.goods_list.length > 0 && (floor.home_data_location || 0) == 1" class="floor">
<view class="spacing-nav-title">
<text class="text-wrapper" :style="'color:'+(floor.color || '#333')+';'">{{floor.title}}</text>
<text v-if="(floor.vice_title || null) != null" class="vice-name margin-left-lg cr-gray">{{floor.vice_title}}</text>
<navigator :url="'/pages/plugins/activity/detail/detail?id=' + floor.id" hover-class="none" class="arrow-right padding-right-xxxl cr-gray fr">更多</navigator>
</view>
<view class="floor-list wh-auto oh">
<view v-if="floor.keywords_arr.length > 0" class="word scroll-view-horizontal">
<scroll-view scroll-x>
<block v-for="(kv, ki) in floor.keywords_arr" :key="ki">
<navigator :url="'/pages/goods-search/goods-search?keywords=' + kv" hover-class="none" class="word-icon dis-inline-block bg-main-light text-size-xs cr-main round padding-top-xs padding-bottom-xs padding-left padding-right">{{kv}}</navigator>
</block>
</scroll-view>
</view>
<view class="goods-list margin-top-lg">
<view v-for="(goods, index2) in floor.goods_list" :key="index2" class="goods bg-white border-radius-main oh pr">
<!-- 商品主体内容 -->
<navigator :url="'/pages/goods-detail/goods-detail?goods_id=' + goods.id" hover-class="none">
<image class="goods-img dis-block" :src="goods.images" mode="aspectFit"></image>
<view class="goods-base padding-horizontal-main margin-top-sm">
<view class="goods-title multi-text margin-bottom-sm">{{goods.title}}</view>
<view class="sales-price">{{currency_symbol}}{{goods.min_price}}</view>
</view>
</navigator>
<!-- 标签插件 -->
<view v-if="(plugins_label_data || null) != null && plugins_label_data.data.length > 0" :class="'plugins-label oh pa plugins-label-'+((plugins_label_data.base.is_user_goods_label_icon || 0) == 0 ? 'text' : 'img')+' plugins-label-'+(plugins_label_data.base.user_goods_show_style || 'top-left')">
<block v-for="(lv,li) in plugins_label_data.data" :key="li">
<view v-if="lv.goods_ids.indexOf(goods.id) != -1" class="lv dis-inline-block va-m" :data-value="((plugins_label_data.base.is_user_goods_label_url || 0) == 1) ? (lv.url || '') : ''" @tap="url_event">
<view v-if="(plugins_label_data.base.is_user_goods_label_icon || 0) == 0" class="round cr-white bg-main text-size-xs fl" :style="((lv.bg_color || null) != null ? 'background-color:'+ lv.bg_color+' !important;' : '')+((lv.text_color || null) != null ? 'color:'+ lv.text_color+' !important;' : '')">{{lv.name}}</view>
<image v-else class="dis-block" :src="lv.icon" mode="scaleToFill"></image>
</view>
</block>
</view>
</view>
</view>
</view>
</view>
</block>
</view>
<!-- 活动配置-楼层底部 - 插件 -->
<block v-if="(plugins_activity_data || null) != null && plugins_activity_data.length > 0">
<component-activity-list :propData="plugins_activity_data" propLocation="1" :propLabel="plugins_label_data" :propCurrencySymbol="currency_symbol"></component-activity-list>
</block>
<!-- 博客-楼层底部 - 插件 -->
<block v-if="(plugins_blog_data || null) != null">
<component-blog-list :propConfig="plugins_blog_data.base" :propData="plugins_blog_data.data" propLocation="1"></component-blog-list>
</block>
<!--- 底部购买记录 - 插件 -->
<view v-if="(plugins_salerecords_data || null) != null && (plugins_salerecords_data.data || null) != null && plugins_salerecords_data.data.length > 0" class="spacing-mb plugins-salerecords">
@ -325,7 +259,9 @@
import componentNoData from "../../components/no-data/no-data";
import componentBottomLine from "../../components/bottom-line/bottom-line";
import componentCopyright from "../../components/copyright/copyright";
import componentOnlineService from "../../components/online-service/online-service";
import componentOnlineService from "../../components/online-service/online-service";
import componentActivityList from "../../components/activity-list/activity-list";
import componentBlogList from "../../components/blog-list/blog-list";
var common_static_url = app.globalData.get_static_url('common');
var static_url = app.globalData.get_static_url('home');
@ -359,7 +295,9 @@
// +
top_content_style: 'background-image: url("'+static_url+'nav-top.png");'+'padding-top:'+(bar_height+8)+'px;',
search_style: '',
search_is_fixed: 0,
search_is_fixed: 0,
//
is_single_page: app.globalData.is_current_single_page() || 0,
//
plugins_seckill_is_valid: 0,
plugins_seckill_data: null,
@ -378,8 +316,8 @@
plugins_popupscreen_timer: null,
//
plugins_mourning_data: 0,
//
is_single_page: app.globalData.is_current_single_page() || 0
//
plugins_blog_data: null
};
},
@ -394,7 +332,9 @@
componentNoData,
componentBottomLine,
componentCopyright,
componentOnlineService
componentOnlineService,
componentActivityList,
componentBlogList
},
props: {},
@ -470,7 +410,8 @@
plugins_label_data: (data.plugins_label_data || null) == null || (data.plugins_label_data.base || null) == null || (data.plugins_label_data.data || null) == null || data.plugins_label_data.data.length <= 0 ? null : data.plugins_label_data,
plugins_homemiddleadv_data: (data.plugins_homemiddleadv_data || null) == null || data.plugins_homemiddleadv_data.length <= 0 ? null : data.plugins_homemiddleadv_data,
plugins_popupscreen_data: data.plugins_popupscreen_data || null,
plugins_mourning_data: data.plugins_mourning_data || 0
plugins_mourning_data: data.plugins_mourning_data || 0,
plugins_blog_data: data.plugins_blog_data || null
});
// 广

View File

@ -1,14 +1,3 @@
/**
*
*/
.blog-list .blog-img {
width: 200rpx !important;
height: 170rpx !important;
}
.blog-list .base {
width: calc(100% - 220rpx);
}
/**
*
*/

View File

@ -19,7 +19,7 @@
</view>
<!-- 推荐博文 -->
<view v-if="right_list.length > 0" class="blog-list">
<view v-if="right_list.length > 0" class="plugins-blog-list">
<view class="spacing-nav-title">
<text class="text-wrapper">推荐博文</text>
<navigator url="/pages/plugins/blog/search/search" hover-class="none" class="arrow-right padding-right-xxxl cr-gray fr">更多</navigator>

View File

@ -7,31 +7,6 @@
width: calc(100% - 155rpx);
}
/**
*
*/
.blog-list .blog-img {
width: 200rpx !important;
height: 170rpx !important;
}
.blog-list .base {
width: calc(100% - 220rpx);
}
/*
*
*/
.hot-list swiper,
.hot-list .item .blog-img {
height: 180rpx !important;
}
.hot-list .item .blog-title {
left: 0;
bottom: 0;
width: calc(100% - 36rpx);
background-color: rgba(0,0,0,.5);
}
/**
*
*/

View File

@ -22,7 +22,7 @@
</view>
<!-- 博文列表 -->
<view v-if="data_list.length > 0" class="blog-list padding-horizontal-main">
<view v-if="data_list.length > 0" class="plugins-blog-list padding-horizontal-main">
<view v-for="(item, index) in data_list" class="item oh padding-main border-radius-main bg-white spacing-mb">
<navigator :url="item.url" hover-class="none">
<image class="blog-img fl radius" :src="item.cover" mode="aspectFill"></image>
@ -41,7 +41,7 @@
<text class="text-wrapper">热门博文</text>
<navigator url="/pages/plugins/blog/search/search" hover-class="none" class="arrow-right padding-right-xxxl cr-gray fr">更多</navigator>
</view>
<view class="hot-list scroll-view-horizontal border-radius-main oh">
<view class="plugins-blog-rolling-list scroll-view-horizontal border-radius-main oh">
<swiper :vertical="false" :autoplay="(data_base.is_home_hot_auto_play || 0) == 1" :circular="true" :display-multiple-items="hot_list.length < 3 ? hot_list.length : 3" interval="3000">
<block v-for="(item, index) in hot_list" :key="index">
<swiper-item class="padding-right-main">

View File

@ -28,11 +28,4 @@
*/
.scroll-box {
height: calc(100vh - 110rpx - 30px);
}
.blog-list .blog-img {
width: 200rpx !important;
height: 170rpx !important;
}
.blog-list .base {
width: calc(100% - 220rpx);
}

View File

@ -19,7 +19,7 @@
<!-- 列表 -->
<scroll-view :scroll-y="true" class="scroll-box" @scrolltolower="scroll_lower" lower-threshold="30">
<view v-if="(data_list || null) != null && data_list.length > 0" class="blog-list padding-horizontal-main padding-top-main oh">
<view v-if="(data_list || null) != null && data_list.length > 0" class="plugins-blog-list padding-horizontal-main padding-top-main oh">
<view v-for="(item, index) in data_list" class="item oh padding-main border-radius-main bg-white spacing-mb">
<navigator :url="item.url" hover-class="none">
<image class="blog-img fl radius" :src="item.cover" mode="aspectFill"></image>