yitisheng-mini-app/pages/zyb/article/list2.vue

259 lines
7.8 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>
<view class="background-white">
<scroll-view class="top-menu-view" scroll-x="true" scroll-with-animation :scroll-left="scrollLeft">
<view class="menu-topic-view" v-for="(item,index) in tabs" :id="'tabNum'+item.id" :key="index"
@click="swichMenu(index)">
<view class="" style="transition: 3s all" :class="currentTab===index ? 'menu-topic-act' : 'menu-topic'">
<text class="menu-topic-text">{{ item.name }}</text>
<view class="menu-topic-bottom">
<view class="menu-topic-bottom-color"></view>
</view>
</view>
</view>
</scroll-view>
<!-- <view class="banner" @click="goDetail(banner)">
<image class="banner-img" :src="banner.cover"></image>
<view class="banner-title">{{ banner.title }}</view>
</view>-->
<!--招生章程搜索-->
<view class="search-view">
<view style="display: flex;height: 100rpx;border-bottom: 1px solid #f5f5f5;">
<view style="width: 90%">
<uni-search-bar class="uni-mt-10" radius="100"
:placeholder="this.tabs[this.currentTab].id===1?'请输入院校名称':'请输入标题'" v-model="title"
@clear="clearTitleInput" cancelButton="none" @confirm="searchTitleClick"/>
</view>
<view style="width: 10%;line-height: 100rpx">
<text @click="searchTitleClick">搜索</text>
</view>
</view>
</view>
<block v-for="(value, index) in tabs[currentTab].list" :key="index">
<view class="uni-list-cell" hover-class="uni-list-cell-hover" @click="gotoArticle(value)">
<view class="uni-media-list">
<!--<image class="uni-media-list-logo" :src="value.cover"></image>-->
<view class="uni-media-list-body">
<view class="uni-media-list-text-top">{{ value.title }}</view>
<view class="uni-media-list-text-bottom">
<text>{{ value.schoolName }}</text>
<text>{{ value.releaseTime }}</text>
</view>
</view>
</view>
</view>
</block>
<view class="container" @click="loadMore">
<uni-load-more :status="tabs[currentTab].status" :content-text="contentText"/>
</view>
<view class="top" :style="{'display':(topFlag===true? 'block':'none')}">
<uni-icons class="topc" type="arrowthinup" size="40" @click="clickTop"></uni-icons>
</view>
</view>
</template>
<script>
import {dateUtils} from '@/common/util';
import ApiConstant from "@/common/ApiConstant";
import Request from "@/common/request";
import StaticConstant from "@/common/StaticConstant";
import ImagesConstant from '@/common/ImagesConstant';
let request = new Request()
export default {
computed:{
ImagesConstant(){
return ImagesConstant
}
},
data() {
return {
banner: {
cover: ImagesConstant.jxywtj,
},
current: 1,
pageSize: 10,
listData: [],
last_id: '',
reload: false,
contentText: StaticConstant.loadContentText,
scrollLeft: 0,
topFlag: false,
title: '',
tabs: [
{id: 1, name: '招生章程', list: [], current: 1, pageSize: 10, status: 'more'},
{id: 2, name: '高考动态', list: [], current: 1, pageSize: 10, status: 'more'},
{id: 3, name: '校内资讯', list: [], current: 1, pageSize: 10, status: 'noMore'}
],
currentTab: 0,
};
},
onLoad() {
//this.getBanner();
this.getAdmissionsRegulationsList(0);
this.getAdmissionsRegulationsList(1);
this.getAdmissionsRegulationsList(2);
},
onPullDownRefresh() {
this.reload = true;
this.last_id = '';
//this.getBanner();
this.current = 1
this.getList();
},
onReachBottom() {
if (this.tabs[this.currentTab].id === 1) {
this.loadMore();
}
},
onPageScroll(e) { //根据距离顶部距离是否显示回到顶部按钮
//当距离大于600时显示回到顶部按钮//当距离小于600时隐藏回到顶部按钮
this.topFlag = e.scrollTop > 600;
},
onShareAppMessage() {
return {
title: '招生章程', //分享标题
path: "/pages/zyb/article/list"
}
},
// 分享到微信朋友圈
onShareTimeline(res) {
return {
title: '招生章程', //分享标题
path: "/pages/zyb/article/list"
}
},
methods: {
/*跳转到文章页面*/
gotoArticle(e) {
uni.navigateTo({
url: '/pages/zyb/article/detail?articleId=' + e.id
})
},
getBanner() {
let data = {
column: 'id,post_id,title,author_name,cover,published_at' //需要的字段名
};
uni.request({
url: 'https://unidemo.dcloud.net.cn/api/banner/36kr',
data: data,
success: data => {
uni.stopPullDownRefresh();
if (data.statusCode == 200) {
this.banner = data.data;
}
},
fail: (data, code) => {
console.log('fail' + JSON.stringify(data));
}
});
},
/*招生章程*/
getAdmissionsRegulationsList(index) {
this.setStatus(index,'loading')
let params = {
title: this.title,
type: this.tabs[index||this.currentTab].id,
pageNum: this.tabs[this.currentTab].current,
pageSize: this.tabs[this.currentTab].pageSize
}
request.get(ApiConstant.Article.articlePage, params).then(res => {
console.log(res)
if (res.success) {
this.tabs[index||this.currentTab].current = res.result.current
this.tabs[index||this.currentTab].pages = res.result.pages
//追加到列表数据中
this.tabs[index||this.currentTab].list = [...this.tabs[index||this.currentTab].list, ...res.result.records]
console.log(this.tabs)
if (res.result.current >= res.result.pages) {
this.setStatus(index,'noMore')
} else {
this.setStatus(index,'more')
}
} else {
}
}).catch(err => {
}).finally(() => {
});
},
//搜索招生章程
searchTitleClick() {
this.tabs[this.currentTab].current = 1
this.tabs[this.currentTab].list = []
this.getAdmissionsRegulationsList()
},
clearTitleInput() {
this.title = ''
this.tabs[this.currentTab].current = 1
this.tabs[this.currentTab].list = []
this.getAdmissionsRegulationsList()
},
setStatus(index,status) {
this.tabs[index||this.currentTab].status = status
},
loadMore() {
if (this.tabs[this.currentTab].status === 'noMore') {
return;
}
console.log('加载中')
this.tabs[this.currentTab].current++;
this.getAdmissionsRegulationsList()
},
/*回到顶部*/
clickTop() {
uni.pageScrollTo({
scrollTop: 0,
duration: 300
});
},
setTime: function (items) {
var newItems = [];
items.forEach(e => {
newItems.push({
schoolName: e.schoolName,
cover: e.cover,
id: e.id,
releaseTime: e.releaseTime ? dateUtils.format(e.releaseTime) : '',
title: e.title
});
});
return newItems;
},
swichMenu(id) {
this.currentTab = id
console.log(id)
//this.tabCurrent = 'tabNum'+ id
// 滑动swiper后每个选项距离其父元素最左侧的距离
this.scrollLeft = 0;
for (let i = 0; i < id; i++) {
this.scrollLeft += 120
console.log(this.scrollLeft, 60, id)
}
},
aderror(e) {
console.log("aderror: " + JSON.stringify(e.detail));
}
}
};
</script>
<style>
.uni-media-list-body {
height: auto;
justify-content: space-around;
}
.uni-media-list-text-top {
height: 74rpx;
font-size: 28rpx;
overflow: hidden;
}
.uni-media-list-text-bottom {
display: flex;
flex-direction: row;
justify-content: space-between;
}
</style>