app_tree_planting/pages/news/index.vue
2023-02-07 17:55:09 +08:00

665 lines
15 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="page">
<view class="status-bar"></view>
<view class="content">
<!-- Banner -->
<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"
:circular="true">
<swiper-item v-for="(item, index) in slider" :key="index">
<navigator class="item" hover-class="none"
:url="'/pages/news/newsdetail?url='+baseurl+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>
</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 util from '@/common/util.js';
export default {
components: {
articleList,
pageLoading,
scroller,
iconfont
},
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,
};
},
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(plus.runtime.versionCode)
this.startDownloadApk()
// #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
}
console.log(getApp().globalData.userInfo)
},
complete: res => {
}
})
},
getAppVersion(version) {
this.$app.request({
url: this.$api.common.getAppVersion,
method: "GET",
success: res => {
if (res) {
if (res.data > version) {
this.startDownloadApk()
}
}
},
complete: res => {
}
});
},
startDownloadApk() {
//开始下载Apk
console.log("开始下载Apk")
// #ifdef APP-PLUS
const dtask = plus.downloader.createDownload(this.$api.common.appDownloadUrl, {
force: true
}, function(d, status) {
console.log(status)
// 下载完成
if (status == 200) {
var path = (d.filename); //文件安装路径
plus.runtime.install(path, {}, function() {
plus.nativeUI.closeWaiting(); //关闭系统等待对话框
if (name == 'wgt') {
console.log("安装wgt文件成功");
} else {
console.log("安装apk文件成功")
}
plus.nativeUI.alert("引用资源更新完成!", function() {
plus.runtime.restart();
})
}, function(e) {
plus.nativeUI.closeWaiting(); //关闭系统等待对话框
if (name == 'wgt') {
console.log("安装wgt文件失败[" + e.code + "]" + e.message);
plus.nativeUI.alert("安装wgt文件失败[" + e.code + "]" + e.message);
} else {
console.log("安装apk文件失败[" + e.code + "]" + e.message);
plus.nativeUI.alert("安装apk文件失败[" + e.code + "]" + e.message);
}
})
} else {
alert("Download failed" + status);
}
})
// #endif
},
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: 350rpx;
margin: 14rpx 24rpx 0;
image {
height: 350rpx;
width: 100%;
border-radius: 15rpx;
//box-shadow: 0 0 12px #dddee1;
}
.current {
width: 98%;
height: 350rpx;
margin: 1.0% 1.0%;
transition: all 0.2s ease-in 0s;
}
.item {
position: relative;
.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>