123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196 |
- <template>
- <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="uni-list">
- <block v-for="(value, index) in listData" :key="index">
- <view class="uni-list-cell" hover-class="uni-list-cell-hover" @click="goDetail(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.author_name }}</text>
- <text>{{ value.published_at }}</text>
- </view>
- </view>
- </view>
- </view>
- <!-- #ifdef APP-PLUS -->
- <view class="ad-view" v-if="(index > 0 && (index+1) % 10 == 0)">
- <ad :adpid="adpid" @error="aderror"></ad>
- </view>
- <!-- #endif -->
- </block>
- </view>
- <uni-load-more :status="status" :icon-size="16" :content-text="contentText" />
- </view>
- </template>
- <script>
- import { dateUtils } from '../../../common/util.js';
- export default {
- data() {
- return {
- banner: {},
- listData: [],
- last_id: '',
- reload: false,
- status: 'more',
- adpid: '',
- contentText: {
- contentdown: '上拉加载更多',
- contentrefresh: '加载中',
- contentnomore: '没有更多'
- }
- };
- },
- onLoad() {
- this.adpid = this.$adpid;
- this.getBanner();
- this.getList();
- },
- onPullDownRefresh() {
- this.reload = true;
- this.last_id = '';
- this.getBanner();
- this.getList();
- },
- onReachBottom() {
- this.status = 'more';
- this.getList();
- },
- methods: {
- 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));
- }
- });
- },
- getList() {
- var data = {
- column: 'id,post_id,title,author_name,cover,published_at' //需要的字段名
- };
- if (this.last_id) {
- //说明已有数据,目前处于上拉加载
- this.status = 'loading';
- data.minId = this.last_id;
- data.time = new Date().getTime() + '';
- data.pageSize = 10;
- }
- uni.request({
- url: 'https://unidemo.dcloud.net.cn/api/news',
- data: data,
- success: data => {
- if (data.statusCode == 200) {
- let list = this.setTime(data.data);
- this.listData = this.reload ? list : this.listData.concat(list);
- this.last_id = list[list.length - 1].id;
- this.reload = false;
- }
- },
- fail: (data, code) => {
- console.log('fail' + JSON.stringify(data));
- }
- });
- },
- goDetail: function(e) {
- // if (!/前|刚刚/.test(e.published_at)) {
- // e.published_at = dateUtils.format(e.published_at);
- // }
- let detail = {
- author_name: e.author_name,
- cover: e.cover,
- id: e.id,
- post_id: e.post_id,
- published_at: e.published_at,
- title: e.title
- };
- uni.navigateTo({
- url: '../list2detail-detail/list2detail-detail?detailDate=' + encodeURIComponent(JSON.stringify(detail))
- });
- },
- setTime: function(items) {
- var newItems = [];
- items.forEach(e => {
- newItems.push({
- author_name: e.author_name,
- cover: e.cover,
- id: e.id,
- post_id: e.post_id,
- published_at: dateUtils.format(e.published_at),
- title: e.title
- });
- });
- return newItems;
- },
- aderror(e) {
- console.log("aderror: " + JSON.stringify(e.detail));
- }
- }
- };
- </script>
- <style>
- .banner {
- height: 360rpx;
- overflow: hidden;
- position: relative;
- background-color: #ccc;
- }
- .banner-img {
- width: 100%;
- }
- .banner-title {
- max-height: 84rpx;
- overflow: hidden;
- position: absolute;
- left: 30rpx;
- bottom: 30rpx;
- width: 90%;
- font-size: 32rpx;
- font-weight: 400;
- line-height: 42rpx;
- color: white;
- z-index: 11;
- }
- .uni-media-list-logo {
- width: 180rpx;
- height: 140rpx;
- }
- .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>
|