You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

248 lines
6.6 KiB

<template>
<!-- 咨询模块 -->
<view :style="colorStyle">
<view class='newsList'>
<view class="w-full h-392 relative" v-if="imgUrls.length > 0">
<swiper
indicator-dots="true"
autoplay
circular
:interval="3000"
:duration="500"
indicator-color="rgba(255,255,255,0.1)"
indicator-active-color="#fff"
class="w-full h-392 relative">
<block v-for="(item,index) in imgUrls" :key="index">
<swiper-item>
<navigator :url="'/pages/extension/news_details/index?id='+item.id">
<image :src="item.image_input[0]" class="w-full h-392" mode="aspectFill" />
</navigator>
</swiper-item>
</block>
</swiper>
</view>
<view class="bg--w111-f5f5f5 relative rd-t-32rpx pt-12 content">
<view class="nab-box w-full flex-between-center">
<scroll-view scroll-x="true"
scroll-with-animation :scroll-left="scrollLeft"
class="white-nowrap vertical-middle w-662 pl-32"
show-scrollbar="false">
<view class="inline-block fs-30 h-88 lh-88rpx mr-40 "
v-for="(item, index) in navList" :key="index"
:class="active == item.id ? 'active' : 'text--w111-999'"
@tap="tabSelect(item.id,index)">{{item.title}}</view>
</scroll-view>
<view class="h-88 w-88 flex-center" @tap="checkGrid">
<text class="iconfont icon-a-ic_Imageandtextsorting fs-32 text--w111-999"></text>
</view>
</view>
<view class="mt-24 grid-column-2 grid-gap-18rpx px-24" v-show="grid">
<view v-for="(item,index) in articleList" :key="index" @tap="getDetail(item.id)">
<easy-loadimage
mode="widthFix"
:image-src="item.image_input[0]"
width="100%"
height="216rpx"
borderRadius="16rpx 16rpx 0 0"></easy-loadimage>
<view class="bg--w111-fff rd-b-16rpx p-20">
<view class="w-full fs-28 h-80 lh-40rpx line2">{{item.title}}</view>
<view class="flex-between-center mt-12 fs-24 text--w111-999">
<text>{{item.add_time}}</text>
<view class="flex-y-center">
<text class="iconfont icon-ic_Eyes fs-28"></text>
<text class="pl-8">{{item.visit}}</text>
</view>
</view>
</view>
</view>
</view>
<view class="mt-24 px-24" v-show="!grid">
<view class="flex justify-between mb-40" v-for="(item,index) in articleList" :key="index"
@tap="getDetail(item.id)">
<!-- <image :src="item.image_input[0]" class="w-240 h-152 rd-16rpx block"></image> -->
<easy-loadimage
mode="widthFix"
:image-src="item.image_input[0]"
width="240rpx"
height="152rpx"
borderRadius="16rpx"></easy-loadimage>
<view class="flex-1 pl-24 h-152 flex-col justify-between">
<view class="w-full line2 fs-30 lh-42rpx h-84">{{item.title}}</view>
<view class="flex-between-center mt-12 fs-24 text--w111-999">
<text>{{item.add_time}}</text>
<view class="flex-y-center">
<text class="iconfont icon-ic_Eyes fs-28"></text>
<text class="pl-8">{{item.visit}}</text>
</view>
</view>
</view>
</view>
</view>
<view class='px-20' v-if="!articleList.length">
<emptyPage title="暂无新闻信息~" src="/statics/images/noNews.gif"></emptyPage>
</view>
</view>
</view>
</view>
</template>
<script>
import {
getArticleCategoryList,
getArticleList,
getArticleHotList,
getArticleBannerList
} from '@/api/api.js';
import colors from "@/mixins/color";
import {HTTP_REQUEST_URL} from '@/config/app';
import emptyPage from '@/components/emptyPage.vue';
export default {
components: {
emptyPage
},
mixins: [colors],
data() {
return {
imgUrls: [],
articleList: [],
navList: [],
active: 0,
page: 1,
limit: 8,
status: false,
scrollLeft: 0,
imgHost:HTTP_REQUEST_URL,
grid:true,
};
},
onLoad(){
this.getArticleHot();
this.getArticleBanner();
this.getArticleCate();
},
/**
* 页面上拉触底事件的处理函数
*/
onReachBottom: function () {
this.getCidArticle();
},
onPageScroll(object) {
uni.$emit('scroll');
},
methods: {
getDetail(id){
uni.navigateTo({
url:'/pages/extension/news_details/index?id=' + id
})
},
checkGrid(){
this.grid = !this.grid;
},
getArticleHot: function() {
let that = this;
getArticleHotList().then(res => {
that.$set(that, 'articleList', res.data);
});
},
getArticleBanner: function() {
let that = this;
getArticleBannerList().then(res => {
that.imgUrls = res.data;
});
},
getCidArticle: function() {
let that = this;
if (that.active == 0) return;
let articleList = that.articleList;
if (that.status) return;
getArticleList(that.active, {
page: that.page,
limit: that.limit
}).then(res => {
let len = res.data.length;
that.articleList = that.articleList.concat(res.data);
that.page++;
that.status = that.limit > len;
});
},
getArticleCate: function() {
let that = this;
getArticleCategoryList().then(res => {
that.$set(that, 'navList', res.data);
});
},
tabSelect(active,e) {
this.active = active;
this.scrollLeft = e * 60;
// this.scrollLeft = (active - 1) * 50;
if (this.active == 0) this.getArticleHot();
else {
this.$set(this, 'articleList', []);
this.page = 1;
this.status = false;
this.getCidArticle();
}
}
}
}
</script>
<style lang="scss">
.h-392{
height: 392rpx;
}
.content{
left: 0;
top: -32rpx;
}
.active{
color: #333;
font-size: 32rpx;
font-weight: 500;
position: relative;
&::after{
position: absolute;
content: '';
width: 36rpx;
height: 10rpx;
background-image: url('@/static/images/titleBg.png');
background-repeat: no-repeat;
background-size: 100% 100%;
left:50%;
bottom: 10rpx;
margin-left: -18rpx;
}
}
// #ifdef APP-PLUS || H5
.newsList /deep/uni-swiper .uni-swiper-dots-horizontal{
bottom: 50rpx;
}
.newsList /deep/uni-swiper .uni-swiper-dots-horizontal .uni-swiper-dot{
width: 10rpx;
height: 10rpx;
border-radius: 50%;
}
.newsList /deep/uni-swiper .uni-swiper-dots-horizontal .uni-swiper-dot-active{
width: 18rpx;
height: 10rpx;
border-radius: 6rpx;
background-color: #fff;
}
.newsList .swiper /deep/.uni-swiper-dot ~ .uni-swiper-dot {
margin-left: 5rpx;
}
// #endif
// #ifdef MP
.newsList /deep/wx-swiper .wx-swiper-dots-horizontal{
bottom: 50rpx;
}
.newsList .swiper /deep/.wx-swiper-dot~.wx-swiper-dot {
width: 10rpx;
height: 10rpx;
border-radius: 50%;
margin-left: 5rpx;
}
// #endif
</style>