三十一 首页-请求部分使用封装的request代码,

88 阅读1分钟

修改的部分: image.png

image.png

image.png

完整代码:

<template>
        <view class="index">
                <!-- 顶部导航栏部分 -->
                <!-- #ifdef MP-WEIXIN -->
                <view class="wx-nav">
                        <view class="iconfont icon-fangdajing">
                        </view>
                        <text>百年奥莱</text>
                        <view class="iconfont icon-xiaoxi">
                        </view>
                </view>
                <!-- #endif -->
                <!-- topBar -->
                <scroll-view scroll-x="true" class="scroll-content" :scroll-into-view="scrollTop">
                        <view :id="'top'+index" class="scroll-item" v-for="(item,index) in topBar" :key="index"
                                @tap="changeTap(index)">
                                <text :class="currentIndex === index ? 'f-active-color':'f-color'">{{item.name}}</text>
                        </view>
                </scroll-view>
                <!-- swriper  :style="{height:clentHeight+'px'}" -->
                <swiper @change="changeSwiper" :current="currentIndex" :style="{height:clentHeight+'px'}">
                        <swiper-item v-for="(item,index) in newTopBar" :key="index">
                                <scroll-view scroll-y="true" :style="{height:clentHeight+'px'}" @scrolltolower="loaderMore(index)">
                                        <block v-if="item.data.length > 0">
                                                <block v-for="(i,n) in item.data" :key="n">
                                                        <!-- 首页 -->
                                                        <indexSwiper v-if="i.type === 'swiperList'" :indexSwiperList='i.swiperList'>
                                                        </indexSwiper>
                                                        <template v-if="i.type === 'recommendedList'">
                                                                <recommended :recommendedList='i.recommendedList'>
                                                                </recommended>
                                                                <card name="展示"></card>
                                                        </template>

                                                        <!--运动户外和 其他模块 -->
                                                        <banner v-if="i.type=== 'banner'" :bannerList='i.imgUrl'></banner>
                                                        <template v-if="i.type === 'icons'">
                                                                <icons :iconList='i.iconsList'></icons>
                                                                <card name="热销商品"></card>
                                                        </template>

                                                        <template v-if="i.type === 'hot'">
                                                                <hot :hotList='i.hotList'></hot>
                                                                <card name="推荐店铺"></card>
                                                        </template>

                                                        <template v-if="i.type === 'shop'">
                                                                <shop :shopList='i.shopList'></shop>
                                                                <card name="为您推荐"></card>
                                                        </template>

                                                        <commodity-list v-if="i.type === 'commodityList'" :commodityList='i.commodityList'>
                                                        </commodity-list>

                                                </block>
                                        </block>
                                        <view class="" v-else>
                                                暂无数据。。。
                                        </view>
                                        <!-- 上拉加载更多数据 -->
                                        <view class="f-load f-color">
                                                {{item.loadText}}
                                        </view>
                                </scroll-view>
                        </swiper-item>
                </swiper>
                <!-- 首页内容 -->
                <!-- swiper部分 -->
                <!-- <indexSwiper></indexSwiper>
                <recommended></recommended>
                <card name="展示"></card>
                <commodity-list></commodity-list> -->

                <!-- 其他模块:户外运动 -->
                <!-- <banner></banner>
                <icons></icons>
                <card name="热销商品"></card>
                <hot></hot>
                <card name="推荐店铺"></card>
                <shop></shop>
                <card name="为您推荐"></card>
                <commodity-list></commodity-list> -->
        </view>
</template>

<script>
        import $http from '@/common/api/request.js'
        import indexSwiper from '@/components/index/indexSwiper.vue'
        import recommended from '@/components/index/recommended.vue'
        import card from '@/components/common/card.vue'
        import commodityList from '@/components/common/commodityList.vue'
        import banner from '@/components/index/banner.vue'
        import hot from '@/components/index/hot.vue'
        import shop from '@/components/index/shop.vue'
        import icons from '@/components/index/icons.vue'
        export default {
                components: {
                        indexSwiper,
                        recommended,
                        card,
                        commodityList,
                        banner,
                        hot,
                        shop,
                        icons
                },
                data() {
                        return {
                                currentIndex: 0, // 选中的索引
                                scrollTop: 'top0', // scroll的tab标签跟随swiper滚动而滚动索引的id值
                                clentHeight: 0, // 组件的高度
                                topBar: [],
                                newTopBar: []
                        }
                },
                onLoad() {
                        this.__init()
                },
                onReady() {
                        // 获取系统信息 设置可视区域的值
                        uni.getSystemInfo({
                                success: (res) => {
                                        this.clentHeight = res.windowHeight - this.getClientHeight();
                                        console.log(res.windowHeight);
                                }
                        })

                },
                methods: {
                        __init() {
                                $http.request({
                                        url: '/index_list/data'
                                }).then((res) => {
                                        this.topBar = res.topBar;
                                        this.newTopBar = this.initData(res);
                                }).catch(() => {
                                        uni.showTabBar({
                                                title: '请求失败',
                                                icon: 'none'
                                        })
                                })
                                // uni.request({
                                // 	url: 'http://192.168.31.62:3000/api/index_list/data',
                                // 	success: (res) => {
                                // 		let data = res.data.data;
                                // 		this.topBar = data.topBar;
                                // 		this.newTopBar = this.initData(data);
                                // 		console.log(this.newTopBar);
                                // 	}
                                // })
                        },
                        // 修改数据结构
                        initData(res) {
                                let arr = [];
                                for (let i = 0; i < this.topBar.length; i++) {
                                        let obj = {
                                                data: [],
                                                load: "first",
                                                loadText: '上拉加载更多。。。'
                                        }
                                        if (i == 0) {
                                                obj.data = res.data;
                                        }
                                        arr.push(obj)
                                }
                                return arr;
                        },


                        // 点击切换topBar,添加对应的样式
                        changeTap(index) {
                                if (this.currentIndex === index) return
                                this.currentIndex = index;
                                this.scrollTop = 'top' + index;
                                // 切换不同的页签内容 ,每一次滑动赋值判断
                                if (this.newTopBar[this.currentIndex].load === 'first') {
                                        this.addData();
                                }
                        },
                        // 滑动swiper,切换对应的topBar
                        changeSwiper(e) {
                                this.changeTap(e.detail.current)
                                // console.log(e.detail.current)
                        },
                        // 获取可视区域的高【兼容】
                        getClientHeight() {
                                let res = uni.getSystemInfoSync()
                                let platform = res.platform
                                if (platform == 'android') {
                                        return res.statusBarHeight - 4
                                } else if (platform == 'ios') {
                                        return 44 + res.statusBarHeight
                                } else {
                                        return uni.upx2px(250)
                                }
                        },
                        // 对应现实不同数据
                        addData(callback) {
                                // 拿到topBar对应的id
                                let index = this.currentIndex;
                                let id = this.topBar[index].id
                                // 请求不同的数据 
                                let page = Math.ceil(this.newTopBar[index].data.length / 5) + 1;

                                $http.request({
                                        url: `/index_list/${id}/data/${page}`,
                                }).then((res) => {
                                        this.newTopBar[index].data = [...this.newTopBar[index].data, ...res];
                                }).catch(() => {
                                        uni.showTabBar({
                                                title: '请求失败',
                                                icon: 'none'
                                        })
                                });
                                // uni.request({
                                // 	url: `http://192.168.31.62:3000/api/index_list/${id}/data/${page}`,

                                // 	success: (res) => {
                                // 		if (res.statusCode != 200) {
                                // 			return;
                                // 		} else {
                                // 			let data = res.data.data;
                                // 			console.log(data);
                                // 			this.newTopBar[index].data = [...this.newTopBar[index].data, ...data];
                                // 		};
                                // 	}
                                // });

                                // 当请求结束后重新赋值
                                this.newTopBar[index].load = 'last';
                                // 上拉加载更多请求数据
                                if (typeof callback === 'function') {
                                        callback();
                                }
                        },
                        // 上拉触底加载更多
                        loaderMore(index) {
                                this.newTopBar[index].loadText = '加..。'
                                // 请求完数据, 文字提示信息有换成【上拉加载更多】
                                this.addData(() => {
                                        this.newTopBar[index].loadText = '上拉加载更多...'
                                })
                        }
                }
        }
</script>

<style scoped>
        .wx-nav {
                display: flex;
                justify-content: space-between;
                width: 100%;
                height: 200rpx;
                line-height: 200rpx;
                font-size: 30rpx;
        }

        .wx-nav .iconfont {
                font-size: 20px;
                margin: 0 20rpx;
        }

        .scroll-content {
                width: 100%;
                height: 50rpx;
                white-space: nowrap;

        }

        .scroll-item {
                margin: 0 20rpx;
                display: inline-block;

        }

        .f-active-color {
                border-bottom: 6rpx solid #49BDFB;
        }

        .f-load {
                border-top: 2rpx solid #636263;
                line-height: 60rpx;
                text-align: center;
        }
</style>