Files
dvcp_v2_wxcp_app/src/apps/AppInfotainment/newLIst.vue
shijingjing 93a636bca7 宣传资讯
2022-04-24 17:42:09 +08:00

361 lines
8.5 KiB
Vue
Raw 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>
<div class="newList">
<div class="header">
<div class="header-tab">
<img src="https://cdn.cunwuyun.cn/dvcp/live/dh.png" alt="" class="more-icon" @click="toSelect()">
<u-tabs :list="tabList" :current="currIndex" @change="changeTab" style="width:650rpx" :font-size="26"></u-tabs>
<!-- <div v-for="(item, index) in tabList" :key="index" @click="changeTab(index)" v-if="index < 5" :class="currIndex == index ? 'tab-item active-item' : 'tab-item'">{{item}}<span class="active-line" v-if="currIndex == index"></span></div> -->
</div>
</div>
<div class="news-list">
<div class="item" hover-class="bg-hover" v-for="(item, index) in newsList" :key="index" @click="toDetail(item)">
<div class="item-wrapper solid" :style="{display: type === '1' ? 'block' : 'flex'}">
<div class="item-left flex1">
<h2 :style="{marginBottom: item.type === '1' ? '16rpx' : '30rpx'}" v-if="item.type != '1'">{{ item.title }}</h2>
<div class="item-video" v-if="item.type === '1'">
<p class="item-title">{{item.title}}</p>
<image class="play-btn" src="https://cdn.cunwuyun.cn/dvcp/pay-btn.png" />
<div class="mask"></div>
<image class="cover" :src="item.coverFile" mode="aspectFill" />
</div>
<div class="item-left__bottom item-active" :class="[item.photo ? 'item-active' : '']">
<span class="top-text" v-if="item.top == 1">置顶</span>
<span>{{tabList[item.detailType].name || ''}}</span>
<span>{{ item.createTime ? item.createTime.split(' ')[0] : '' }}</span>
</div>
</div>
<image v-if="item.type === '0'" :src="item.coverFile" mode="aspectFill" />
</div>
</div>
<AiEmpty v-if="!newsList.length && isShowEmpty"/>
<div class="noMore" v-if="isMore && current !== 0">没有更多了噢</div>
</div>
</div>
</template>
<script>
export default {
name: 'newList',
data () {
return {
currIndex: 0,
title: '',
isLoading: false,
newsList: [],
isShowEmpty: false,
isMore: false,
current: 0,
areaId: '',
tabList: [{name: '全部'}, {name: '通知公告'}, {name: '工作动态'},
{name: '惠民政策'}, {name: '中央精神'},{name: '旅游故事'},{name: '特色农产品'}]
}
},
onLoad (params) {
// this.areaId = params.areaId
// uni.setStorageSync('newTypeIndex', '')
// this.$loading()
// this.getNewsList()
// uni.setNavigationBarTitle({
// title: params.title || '乡村资讯', //页面标题
// })
},
onShow() {
// if(uni.getStorageSync('newTypeIndex')) {
// this.currIndex = uni.getStorageSync('newTypeIndex')
// this.getListInit()
// }
},
methods: {
toSelect() {
// this.$linkTo(`./select?index=${this.currIndex}`)
uni.navigateTo({url: './select'})
},
changeTab(index) {
this.currIndex = index
this.getListInit()
},
onConfirm () {
this.isMore = false
this.current = 0
// this.$loading()
this.$nextTick(() => {
this.getNewsList(this.areaId)
})
},
getListInit() {
this.isMore = false
this.current = 0
this.newsList = []
// this.$loading()
this.getNewsList()
},
getNewsList() {
if (this.isMore || this.isLoading) return
var type = this.currIndex
if(this.currIndex == 0) {
type = ''
}
this.isLoading = true
this.$instance.post(`/app/appnewscenterinfo/listForWxNew?current=${this.current + 1}&type=${type}&size=10&title=${this.title}&areaId=${this.areaId}`, null, {
withoutToken: 1
}).then(res => {
if (res.code === 0) {
this.isShowEmpty = true
// this.$hideLoading()
if (this.current === 0) {
this.newsList = []
}
if (!res.data.records.length) {
this.isMore = true
this.isLoading = false
this.$nextTick(() => {
this.pageShow = true
})
return false
}
const data = res.data.records
this.newsList.push(...data)
this.current = this.current + 1
this.isLoading = false
this.$nextTick(() => {
this.pageShow = true
})
} else {
// this.$hideLoading()
}
}).catch(() => {
// this.$hideLoading()
this.isShowEmpty = true
this.isLoading = false
})
},
toDetail(item) {
if(item.detailType == 6 || item.detailType == 5) { //特色农产品 旅游故事
this.$linkTo(`/subPages/live/products?id=${item.id}&detailType=${item.detailType}`)
}else {
this.$linkTo(`/subPages/live/newsDetail?id=${item.id}&areaId=${this.areaId}&type=${this.currIndex}`)
}
},
},
onReachBottom () {
this.getNewsList(this.areaId)
}
}
</script>
<style lang="scss" scoped>
.header-tab{
background-color: #fff;
position: relative;
padding: 0 100rpx 0 0;
.more-icon{
position: absolute;
width: 40rpx;
height: 38rpx;
right: 32rpx;
top: 20rpx;
}
.tab-item{
color: #666;
}
.active-item{
color: #3376FD;
}
.active-line{
background-color: #3376FD;
}
}
.news-list{
padding-top: 20rpx;
}
.news {
min-height: 100vh;
padding-top: 96rpx;
background: #fff;
}
.item-video {
position: relative;
height: 388rpx;
margin-bottom: 24rpx;
.mask {
position: absolute;
width: 100%;
height: 100%;
z-index: 11;
background: rgba(0, 0, 0, 0.16);
}
.play-btn {
position: absolute;
top: 50%;
left: 50%;
z-index: 121;
width: 80rpx;
height: 80rpx;
margin: 0;
transform: translate(-50%, -50%);
}
.item-title{
width: 100%;
padding: 0 30rpx 10rpx;
font-size: 28rpx;
font-weight: 500;
color: #FFF;
line-height: 40rpx;
position: absolute;
bottom: 0;
left: 0;
word-break: break-all;
text-overflow: -o-ellipsis-lastline;
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
background: rgba(0, 0, 0, .4);
box-sizing: border-box;
}
.cover {
display: block;
width: 100%!important;
height: 388rpx!important;
margin-left: 0!important;
}
}
div {
box-sizing: border-box;
}
.noMore {
line-height: 90rpx;
text-align: center;
color: #999;
font-size: 26rpx;
}
.news {
background: #fff;
}
.header {
position: fixed;
left: 0;
top: 0;
z-index: 10000;
width: 100%;
padding: 8rpx 0;
background: #fff;
.header-search {
display: flex;
align-items: center;
width: 690rpx;
height: 60rpx;
margin: 0 auto 8rpx;
padding: 0 32rpx;
background: #0D6DDC;
border-radius: 30rpx;
image {
flex-shrink: 1;
width: 32rpx;
height: 32px;
margin-right: 12rpx;
}
input {
flex: 1;
height: 100%;
font-size: 28rpx;
color: #fff;
}
}
}
.item {
padding: 0 30rpx;
&:first-child {
.item-wrapper {
padding-top: 0!important;
}
}
.item-wrapper {
padding: 30rpx 0 20rpx;
display: flex;
align-items: center;
}
.item-left {
flex: 1;
h2 {
margin-bottom: 32rpx;
color: #333333;
font-size: 30rpx;
font-weight: 700;
}
.item-left__bottom {
display: flex;
span {
margin-right: 10rpx;
color: #999999;
font-size: 22rpx;
&:last-child {
margin-right: 0;
}
}
.top-text{
font-size: 22rpx;
color: #EF4645;
margin-right: 16rpx;
}
}
}
image {
flex-shrink: 0;
width: 224rpx;
height: 140rpx;
// margin-left: 46rpx;
}
}
.no-more {
margin-top: 20rpx;
text-align: center;
color: #999;
image {
width: 400rpx;
height: 240rpx;
}
p {
text-align: center;
color: #999;
font-size: 28rpx;
}
}
</style>