app_tree_planting/pages/news/index.vue
2023-02-08 17:59:16 +08:00

647 lines
14 KiB
Vue

<template>
<view class="page">
<view class="status-bar"></view>
<view class="content">
<scroller @init="initScroller" @down="refreshData" @up="getData" :up="optUp"
@scroll="navFloatShow(scroller)" :fixed="false">
<!-- 搜索框 -->
<view class="search">
<view class="search-content">
<image src="../../static/images/ic_search.png" class="icon" mode="scaleToFill"></image>
<input @input="onSearchInput" placeholder="请输入关键字搜索" />
</view>
<view class="btn" @click="doSearch">搜索</view>
</view>
<!-- 轮播图 -->
<swiper v-if="slider.length > 0" class="swiper" :indicator-dots="true" :autoplay="true"
indicator-color="#E4E4E4" indicator-active-color="#009749" :circular="true">
<swiper-item v-for="(item, index) in slider" :key="index">
<navigator class="swiper-item" hover-class="none"
:url="'/pages/news/newsdetail?url='+item.templateRecordUrl">
<image :lazy-load="true" :src="item.imageUrl" mode="scaleToFill"></image>
</navigator>
</swiper-item>
</swiper>
<!-- 新闻列表 -->
<articleList :list="list" />
</scroller>
</view>
<pageLoading v-if="showPageLoading"></pageLoading>
<yomol-upgrade :type="upgradeType" :url="upgradeUrl" title="发现新版本" :content="upgradeContent" ref="yomolUpgrade">
</yomol-upgrade>
</view>
</template>
<script>
import scroller from '@/components/scroller/scroller.vue';
import articleList from '@/components/article/list.vue';
import pageLoading from '@/components/loading/pageLoading.vue';
import iconfont from '@/components/iconfont/iconfont.vue';
import yomolUpgrade from '@/components/yomol-upgrade/yomol-upgrade.vue'
import util from '@/common/util.js';
export default {
components: {
articleList,
pageLoading,
scroller,
iconfont,
yomolUpgrade
},
data() {
return {
scroller: {},
optUp: {
auto: true,
onScroll: true,
page: {
num: 0, //当前页 默认0,回调之前会加1; 即callback(page)会从1开始
size: 10 //每页数据条数,默认10
},
empty: {
tip: '暂无文章~'
}
},
category_id: 1,
category_index: 0,
scroll_category_id: 'scroll_category_id_0',
currentSliderIndex: 0,
category: [],
showMenu: false,
slider: [],
list: [],
showNoData: false,
showPageLoading: true,
showNavFloat: false,
navBarHeight: '',
token: "",
searchContent: "",
baseurl: this.$api.common.baseUrl,
upgradeType: 'pkg', //pkg 整包 wgt 升级包
upgradeContent: '', //更新内容
upgradeUrl: '', //更新地址
};
},
onShow() {
this.$initPageTitle(); //初始化页面标题
console.log("page=onShow")
/*导航栏高度*/
if (this.navBarHeight == '') {
this.navBarHeight = this.$app.getNaviBarHeight();
}
// /*来源是登录时更新*/
// let source = uni.getStorageSync('source');
// console.log(source)
// if (source == 'login') {
// uni.removeStorageSync('source');
// this.loadData();
// }
this.token = getApp().globalData.token
let userInfo = getApp().globalData.userInfo
if (this.token && this.token != '' && userInfo.name == undefined) {
this.getUserInfo()
}
},
onShareAppMessage() {
return {
path: '/pages/article/index',
success: function(e) {},
title: '全民植树'
};
},
onLoad(e) {
// #ifdef APP-PLUS
this.getAppVersion()
// #endif
this.getBannerList();
},
onPullDownRefresh() {
uni.showLoading({
title: '刷新中'
});
this.loadData();
},
methods: {
onSearchInput: function(event) {
this.searchContent = event.target.value
console.log(event.target.value)
if (event.target.value == "") {
this.refreshData()
}
},
openLogin() {
uni.navigateTo({
url: '/pages/user/login'
})
},
/*初始化滚动*/
initScroller(scroller) {
this.scroller = scroller;
this.loadData();
},
/*刷新数据*/
refreshData() {
uni.showLoading({
title: '刷新中'
});
this.scroller.resetUpScroll();
this.getBannerList();
},
/*加载数据*/
loadData() {
this.slider = [];
this.list = [];
this.currentSliderIndex = 0;
this.scroller.resetUpScroll();
},
/*获取子类别数据*/
getCategory() {
console.log("获取类别")
this.$app.request({
url: this.$api.news.getMainFun,
method: 'GET',
data: {
'newsDirectoriesId': this.$api.news.NEWS_MAIN_TAB
},
dataType: 'json',
success: res => {
if (res != undefined && res.length > 0) {
this.category = res;
if (this.category_index > -1) {
let nextIndex = this.category_index - 1;
nextIndex = nextIndex <= 0 ? 0 : nextIndex;
this.scroll_category_id = `category_id-${nextIndex}`; //动画滚动,滚动至中心位置
}
} else {
this.$alert(res.msg);
}
},
complete: res => {}
});
},
/*获取数据*/
getData() {
this.$app.request({
url: this.$api.news.getNewsList,
data: {
newsDirectoriesId: this.$api.news.NEWS_MAIN_ID,
page: this.scroller.num,
rows: this.scroller.size,
keywords: this.searchContent
},
method: 'GET',
dataType: 'json',
success: res => {
if (res.rows != undefined) {
if (this.scroller.num == 1) {
this.list = [];
}
this.list = this.list.concat(res.rows);
this.scroller.endBySize(res.rows.length, res.rows.total);
this.showPageLoading = false;
} else {
this.scroller.endSuccess();
this.$alert(res.msg);
}
},
fail: res => {
this.scroller.endErr();
},
complete: res => {
uni.stopPullDownRefresh();
uni.hideLoading();
}
});
},
/*切换导航*/
categoryChange(category_id, index) {
this.showMenu = false;
this.category_index = index;
this.category_id = category_id;
var nextIndex = index - 1;
nextIndex = nextIndex <= 0 ? 0 : nextIndex;
this.scroll_category_id = `category_id-${nextIndex}`; //动画滚动,滚动至中心位置
this.loadData();
// #ifdef H5
// uni.navigateTo({
// url: '/pages/article/list?category_id=' + this.category_id + '&category_index=' + this.category_index
// });
// #endif
},
/*广告切换*/
sliderChange: function(e) {
this.currentSliderIndex = e.detail.current;
},
/*滚动时导航栏浮动*/
navFloatShow(scroller) {
if (scroller) {
if (scroller.scrollTop > 60) {
if (!this.showNavFloat) {
this.showNavFloat = true;
}
} else {
if (this.showNavFloat) {
this.showNavFloat = false;
}
}
}
},
/*菜单框展示*/
menuShow(value) {
this.showMenu = value;
},
/*隐藏导航浮动*/
navFloatHide() {
this.showNavFloat = false;
},
/*获取banner*/
getBannerList() {
this.$app.request({
url: this.$api.news.getNewsList,
method: 'GET',
data: {
'newsDirectoriesId': this.$api.news.NEWS_BANNER_ID,
'rows': '5',
'page': '1'
},
dataType: 'json',
success: res => {
if (res.rows != undefined && res.rows.length > 0) {
for (var i = 0; i < res.rows.length; i++) {
res.rows[i].imageUrl = this.$api.news.imgUrl + res.rows[i]
.newsContentCoverList[0]
.contentCoverId
}
this.showPageLoading = false;
this.scroller.endSuccess();
this.slider = res.rows
}
},
complete: res => {
this.scroller.endBySize(1, 1);
uni.stopPullDownRefresh();
uni.hideLoading();
this.showPageLoading = false;
}
});
},
getUserInfo() {
this.$app.request({
url: this.$api.user.getUserInfo,
method: 'GET',
header: {
token: this.token
},
success: res => {
if (res) {
getApp().globalData.userInfo = res;
uni.setStorageSync("userInfo", res);
}
},
complete: res => {
}
})
},
getAppVersion(version) {
var _self = this;
var versionUrl = _self.$api.common.getAppVersion;
var downloadUrl = _self.$api.common.appDownloadUrl
uni.request({
url: versionUrl,
success(res) {
plus.runtime.getProperty(plus.runtime.appid, (wgtinfo) => {
var appId = wgtinfo.appid;
var appVersion = wgtinfo.versionCode;
if (res.data.data && res.data.data > appVersion) {
_self.upgradeType = 'pkg'
_self.upgradeContent = "新增部分更能,请更新;"
_self.upgradeUrl = downloadUrl
_self.$refs.yomolUpgrade.show()
} else {}
});
},
fail(error) {}
})
},
doSearch() {
uni.hideKeyboard()
if (this.searchContent == "") {
this.$alert("请输入关键字");
}
this.refreshData()
}
}
};
</script>
<style scoped lang="scss">
page {
height: 100%;
}
.page {
display: flex;
flex: 1;
flex-direction: column;
overflow: hidden;
height: 100%;
}
.content {
flex: 1;
width: 100%;
height: 100rpx;
}
/*头部*/
.top {
/*页面标题*/
.page-title {
display: flex;
justify-content: center;
align-items: center;
height: 90rpx;
text-align: center;
border-bottom: 1rpx solid #efefef;
z-index: 9999;
line-height: 1;
image {
height: 50rpx;
width: 280rpx;
margin-left: -35rpx;
}
}
/* 顶部navbar */
.navbar {
/*分类*/
.menu {
position: relative;
height: 80rpx;
white-space: nowrap;
padding: 15rpx 0 6rpx;
z-index: 10;
display: flex;
align-items: center;
justify-content: space-between;
/*分类*/
.category {
width: 650rpx;
margin-left: 30rpx;
white-space: nowrap;
position: relative;
scroll-view {
width: auto;
.item {
position: relative;
display: inline-block;
margin: 0 10rpx 0;
height: 80rpx;
text-align: left;
padding-top: 7rpx;
//line-height: 80rpx;
&:first-child {
margin-left: 10rpx;
}
&:after {
content: '';
width: 0;
height: 0;
position: absolute;
left: 50%;
bottom: 0;
transform: translateX(-50%);
transition: 0.3s;
}
.text {
position: relative;
width: auto;
height: auto;
line-height: auto;
display: inline-block;
text {
font-size: 36rpx;
font-weight: bold;
color: #555;
}
image {
position: absolute;
top: 16rpx;
right: -14rpx;
width: 50rpx;
height: 50rpx;
display: none;
}
}
}
.current {
&:after {
width: 50%;
}
.text {
text {
font-size: 40rpx;
font-weight: bold;
color: #262626;
}
image {
display: block;
}
border-bottom: 6rpx solid #8cc7b5;
}
}
}
}
.list {
width: 70rpx;
display: flex;
align-items: center;
justify-content: center;
//box-shadow: -4rpx 0 0 #e9ebee;
//box-shadow: -2px 0 0 #262626;
/deep/ .icon {
font-size: 36rpx;
margin-top: -6rpx;
}
}
}
}
}
.menu-block {
position: absolute;
top: 0;
left: 0;
background: #fff;
border-bottom: 1rpx solid #f5f5f5;
padding: 20rpx 0 50rpx;
z-index: 100;
width: 100%;
//box-shadow: 0 15rpx 10rpx -15rpx #e9ebee;
.list {
padding-left: 10rpx;
text {
background: #f5f7fa;
border-radius: 8rpx;
font-size: 32rpx;
margin: 12rpx 20rpx;
display: inline-block;
height: 72rpx;
width: 144rpx;
line-height: 72rpx;
text-align: center;
}
.current {
color: #fff;
background: #8cc7b5;
//font-size: 32rpx;
}
}
}
.scroll {
height: 100%;
}
/*幻灯片广告 */
.swiper {
height: 450rpx;
margin: 14rpx 24rpx 0;
image {
height: 410rpx;
width: 100%;
border-radius: 15rpx;
//box-shadow: 0 0 12px #dddee1;
}
.current {
width: 98%;
height: 380rpx;
margin: 1.0% 1.0%;
transition: all 0.2s ease-in 0s;
}
.swiper-item {
position: relative;
image {
height: 410rpx;
width: 100%;
border-radius: 15rpx;
//box-shadow: 0 0 12px #dddee1;
}
.title {
position: absolute;
left: 0;
bottom: 0;
display: flex;
justify-content: center;
width: 100%;
text {
margin: 7% 6%;
display: flex;
align-items: center;
//background-image: linear-gradient(to right, rgba(0, 0, 0, 0.3), rgba(0, 0, 0, 0.3));
//background-image: linear-gradient(90deg,rgba(255, 181, 19,.8),rgba(255, 181, 19,.2));
color: #fff;
display: -webkit-box;
text-overflow: ellipsis;
word-break: break-all;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
overflow: hidden;
font-size: 34rpx;
padding: 14rpx 20rpx;
max-width: 610rpx;
line-height: 1.3;
border-radius: 5rpx;
}
}
}
}
/*浮动navbar*/
.floatbar {
//border-bottom: 1rpx solid #e8e8e8;
box-shadow: 0px 2px 2px -2px #e8e8e8;
padding-bottom: 12rpx;
}
/deep/ .no-data {
margin-top: 200rpx;
}
/*搜索*/
.search {
padding: 10rpx 24rpx 10rpx 24rpx;
display: flex;
justify-content: space-between;
align-items: center;
.search-content {
background: #f2f2f2;
border-radius: 15px;
padding: 10rpx 24rpx 10rpx 24rpx;
margin-right: 15rpx;
flex: 1;
display: flex;
align-items: center;
}
/deep/.input {
color: #8cc7b5;
}
.icon {
width: 30rpx;
height: 30rpx;
margin-right: 15rpx;
}
.btn {
color: #b3b3b3;
}
}
</style>