You've already forked guangan-mp
303 lines
6.2 KiB
Vue
303 lines
6.2 KiB
Vue
<template>
|
|
<view class="flex flex-column" style="width: 100vw;">
|
|
<view style="height: 300rpx;" v-if="bannerList.length > 0">
|
|
<swiper interval="5000" :autoplay="true" :circular="true">
|
|
<swiper-item class="flex" v-for="(item, index) in bannerList" :key="index">
|
|
<image :src="item.image" mode="aspectFill" style="height: 300rpx;width: 100%;"></image>
|
|
</swiper-item>
|
|
</swiper>
|
|
</view>
|
|
<i-loading v-if="loading" />
|
|
<view class="icon-container">
|
|
<view class="icon-block" @click="gotoUserShare">
|
|
<image src="/static/images/icon-photograph.png" alt="随手拍" class="icon-img"></image>
|
|
<text class="icon-text">随手拍</text>
|
|
</view>
|
|
<view class="icon-block" @click="gotoShop" v-if="shopEnable">
|
|
<image src="/static/images/icon-store.png" alt="" class="icon-img"></image>
|
|
<text class="icon-text">积分商城</text>
|
|
</view>
|
|
<view class="icon-block" @click="gotoTutorial">
|
|
<image src="/static/images/icon-guide.png" alt="办事指南" class="icon-img"></image>
|
|
<text class="icon-text">办事指南</text>
|
|
</view>
|
|
<view class="icon-block" @click="gotoThumbsUp">
|
|
<image src="/static/images/icon-city.png" alt="" class="icon-img"></image>
|
|
<text class="icon-text">点赞城市</text>
|
|
</view>
|
|
</view>
|
|
<view class="flex flex-column flex-1">
|
|
<view>
|
|
<scroll-view class="flex-1" :scroll-y="true" :refresher-enabled="true"
|
|
:refresher-triggered="refresh" @refresherrefresh="refreshData" @scrolltolower="loadData">
|
|
<view class="px-2">
|
|
<i-news-list :resdata="newsList" />
|
|
</view>
|
|
<uni-load-more :status="more_status" @clickLoadMore="loadData"></uni-load-more>
|
|
</scroll-view>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
</template>
|
|
|
|
<script>
|
|
import {
|
|
TaAjax
|
|
} from '@/common/ajax';
|
|
import {
|
|
friendlyDate
|
|
} from '@/common/util';
|
|
|
|
export default {
|
|
computed: {
|
|
more_status() {
|
|
if (this.finish) {
|
|
return 'no-more';
|
|
} else if (this.loading) {
|
|
return 'loading';
|
|
} else {
|
|
return 'more';
|
|
}
|
|
},
|
|
},
|
|
data() {
|
|
return {
|
|
bannerList: [],
|
|
tabBars: [{
|
|
id: '',
|
|
name: '全部'
|
|
}],
|
|
shopEnable: false,
|
|
tabIndex: 0,
|
|
newsList: [],
|
|
curPage: 1,
|
|
loading: false,
|
|
refresh: false,
|
|
finish: false
|
|
}
|
|
},
|
|
created() {
|
|
TaAjax.get('/cms/api.category/index').then((res) => {
|
|
const data = res.data;
|
|
data.forEach((item) => {
|
|
this.tabBars.push(item)
|
|
})
|
|
}).finally(() => {
|
|
this.loading = false;
|
|
})
|
|
TaAjax.get('/cms/api.banner/index').then((res) => {
|
|
const data = res.data;
|
|
data.forEach((item) => {
|
|
this.bannerList.push(item)
|
|
})
|
|
})
|
|
TaAjax.get('/points_mall/api.goods/enable').then((res) => {
|
|
this.shopEnable = res.data;
|
|
})
|
|
},
|
|
onReady() {
|
|
this.refreshData();
|
|
},
|
|
methods: {
|
|
changeTab(index) {
|
|
this.tabIndex = index
|
|
},
|
|
loadData() {
|
|
if (this.refresh) {
|
|
this.newsList.length = 0;
|
|
this.finish = false;
|
|
}
|
|
if (this.finish) {
|
|
return;
|
|
}
|
|
if (this.loading) {
|
|
return;
|
|
}
|
|
TaAjax.get('/cms/api.article/index', {
|
|
cid: this.tabBars[this.tabIndex].id,
|
|
page: this.curPage
|
|
}).then((result) => {
|
|
const data = result.data;
|
|
const data_list = data.data.map((news) => {
|
|
news.publish_at = friendlyDate(new Date(news.publish_at.replace(/\-/g, '/'))
|
|
.getTime())
|
|
news.imgs = news.thumb ? [news.thumb] : [];
|
|
return news;
|
|
});
|
|
if (this.refresh) {
|
|
this.newsList.length = 0;
|
|
}
|
|
this.newsList = this.newsList.concat(data_list);
|
|
this.finish = data.total <= this.newsList.length;
|
|
this.curPage++;
|
|
}).catch((e) => {
|
|
console.warn(e)
|
|
if (this.newsList.length == 0) {
|
|
this.finish = true;
|
|
}
|
|
}).finally(() => {
|
|
this.refresh = false;
|
|
this.loading = false;
|
|
});
|
|
},
|
|
refreshData() {
|
|
this.finish = false;
|
|
this.refresh = true;
|
|
this.curPage = 1;
|
|
this.loadData();
|
|
},
|
|
swiperChange(e) {
|
|
this.tabIndex = e.detail.current
|
|
this.refreshData()
|
|
},
|
|
gotoShop() {
|
|
uni.navigateTo({
|
|
url: "/pages/points-mall/index",
|
|
})
|
|
},
|
|
gotoTutorial() {
|
|
uni.switchTab({
|
|
url: "/pages/tutorial/tutorial"
|
|
})
|
|
},
|
|
gotoUserShare() {
|
|
uni.navigateTo({
|
|
url: "/pages/user-share/user-share"
|
|
})
|
|
},
|
|
gotoThumbsUp() {
|
|
uni.navigateTo({
|
|
url: "/pages/thumb/thumb"
|
|
})
|
|
},
|
|
}
|
|
}
|
|
</script>
|
|
|
|
<style>
|
|
page {
|
|
width: 100%;
|
|
min-height: 100%;
|
|
display: flex;
|
|
}
|
|
|
|
.tabs {
|
|
flex: 1;
|
|
flex-direction: column;
|
|
overflow: hidden;
|
|
background-color: #ffffff;
|
|
/* #ifdef MP-ALIPAY || MP-BAIDU */
|
|
height: 100vh;
|
|
/* #endif */
|
|
}
|
|
|
|
.tab-bar {
|
|
position: sticky;
|
|
top: 0;
|
|
height: 42px;
|
|
flex-direction: row;
|
|
white-space: nowrap;
|
|
}
|
|
|
|
/* #ifndef APP-NVUE */
|
|
.tab-bar ::-webkit-scrollbar {
|
|
display: none;
|
|
width: 0 !important;
|
|
height: 0 !important;
|
|
-webkit-appearance: none;
|
|
background: transparent;
|
|
}
|
|
|
|
/* #endif */
|
|
|
|
.scroll-view-indicator {
|
|
position: relative;
|
|
height: 2px;
|
|
background-color: transparent;
|
|
}
|
|
|
|
.scroll-view-underline {
|
|
position: absolute;
|
|
top: 0;
|
|
bottom: 0;
|
|
width: 0;
|
|
background-color: #007AFF;
|
|
}
|
|
|
|
.scroll-view-animation {
|
|
transition-duration: 0.2s;
|
|
transition-property: left;
|
|
}
|
|
|
|
.tab-bar-line {
|
|
height: 1px;
|
|
background-color: #cccccc;
|
|
}
|
|
|
|
.tab-box {
|
|
flex: 1;
|
|
}
|
|
|
|
.uni-tab-item {
|
|
/* #ifndef APP-PLUS */
|
|
display: inline-block;
|
|
/* #endif */
|
|
flex-wrap: nowrap;
|
|
padding-left: 20px;
|
|
padding-right: 20px;
|
|
}
|
|
|
|
.uni-tab-item-title {
|
|
color: #555;
|
|
font-size: 15px;
|
|
height: 40px;
|
|
line-height: 40px;
|
|
flex-wrap: nowrap;
|
|
/* #ifndef APP-PLUS */
|
|
white-space: nowrap;
|
|
/* #endif */
|
|
}
|
|
|
|
.uni-tab-item-title-active {
|
|
color: #007AFF;
|
|
}
|
|
|
|
.swiper-item {
|
|
flex: 1;
|
|
flex-direction: column;
|
|
}
|
|
|
|
.page-item {
|
|
flex: 1;
|
|
flex-direction: row;
|
|
position: absolute;
|
|
left: 0;
|
|
top: 0;
|
|
right: 0;
|
|
bottom: 0;
|
|
}
|
|
|
|
.icon-container {
|
|
height: 160rpx;
|
|
display: flex;
|
|
flex-direction: row;
|
|
justify-content: space-around;
|
|
}
|
|
.icon-block {
|
|
display: flex;
|
|
flex-direction: column;
|
|
flex: 1;
|
|
justify-content: center;
|
|
align-items: center;
|
|
gap: 12rpx;
|
|
}
|
|
.icon-img {
|
|
border-radius:16rpx;
|
|
height: 100rpx;
|
|
width: 100rpx;
|
|
}
|
|
.icon-text {
|
|
font-size: 24rpx;
|
|
color: #555;
|
|
}
|
|
</style> |