|
|
<template> <div class="hom-page home_page_content"> <!-- 头部 --> <FixedHead v-if="isShowCavansHead" :componentContent="headComponentsData.componentContent"> <category-list @tabChange="tabChange" v-if="false"></category-list> </FixedHead> <!-- 首页画布骨架屏 -->
<Skeleton v-if="isFirst" :loading="loading" :isFirst="isFirst" /> <template v-if="!isFirst"> <!-- 首页画布 --> <view id="home_canvas_page" v-if="activeTab===0" > <canvas-page ref="canvasPage" :componentsData="componentsData" :terminal="terminal" :typeId="1" /> </view>
<!-- 其他分类 --> <category-show ref="categoryShow" v-else :classifyId="classifyId" />
<ListBottomTips :loading="false" v-if="activeTab===0 && scrollTop>400" />
<Agreement />
<global-loading />
<AdWindow ref="adWindow" :triggerCondition="1" />
</template>
</div> </template>
<script> import AdWindow from "@/components/adWindow"; import api from '@/components/canvasShow/config/api' import CategoryList from "@/components/basics/categoryList.vue" import CategoryShow from "@/components/basics/categoryShow.vue" import canvasPage from '@/components/canvasShow/canvasShowPage.vue' import FixedHead from "./component/FixedHead"; import ListBottomTips from "@/components/ListBottomTips"; import Agreement from "./component/Agreement"; import Skeleton from "./component/Skeleton";
const NET = require('@/utils/request') const API = require('../../../config/api') export default { components: { AdWindow, CategoryList, CategoryShow, canvasPage, FixedHead, ListBottomTips, Agreement, Skeleton }, data() { return { isShowCavansHead:true, loading: true, isFirst: true, classifyId: 0, // 分类ID
terminal: API.terminal, activeTab: 0, componentsData: [], headComponentsData : { title: '', iconClass: 'icon-dianputoubu', type: 'header', undraggable: true, // 不可拖动
onlyAdmin: true, // 平台端显示
onlyApp: true, // 只在app显示
componentContent: { logoType:1, imageUrl: '', title: '', fontSizeNum: '', textFontW: 'normal', titColor: '#CD5353', showTitle: 1, useSelfTitle : 2, } }, typeId: 1, scrollTop: 0 } }, onReachBottom() { this.HandleLoadMoreProduct() }, onLoad() { this.$nextTick(async () => { await this.handleGetCanvas() if(this.$refs.adWindow){ this.$refs.adWindow.getAd() } }) }, onPageScroll(e) { this.scrollTop = e.scrollTop }, methods: { // 读取画布
async handleGetCanvas() { this.loading = true const apiUrl = api.getCanvas + '?terminal=' + this.terminal + '&type=' + this.typeId const {data} = await NET.request(apiUrl, {}, 'GET') if (JSON.stringify(data) !== '{}') { this.componentsData = JSON.parse(data.json) let headIndex = this.componentsData.findIndex(item => item.type==='header') this.headComponentsData = {} if(headIndex >= 0){ this.headComponentsData = this.componentsData[headIndex] this.componentsData.splice(headIndex, 1) } if(!this.headComponentsData.title){ this.headComponentsData = { title: '商城头部', iconClass: 'icon-dianputoubu', type: 'header', undraggable: true, // 不可拖动
onlyAdmin: true, // 平台端显示
onlyApp: true, // 只在app显示
componentContent: { logoType:1, imageUrl: '', title: '', fontSizeNum: '', textFontW: 'normal', titColor: '#CD5353', showTitle: 1, useSelfTitle : 2, } } } this.isShowCavansHead = true this.isFirst = false this.loading = false } }, // 分享到朋友圈
onShareTimeline: function () { return { title: this.miniHomeRemark, imageUrl: this.miniHomeImg, path: 'pages/tabbar/index/index', } }, // 分享好友
onShareAppMessage: function () { return { title: this.miniHomeRemark, imageUrl: this.miniHomeImg, path: 'pages/tabbar/index/index', } }, /** * 请求非首页的子组件的下一页 * */ HandleLoadMoreProduct() { if (this.activeTab !== 0) { let pitchOnPage = this.$refs.categoryShow if (pitchOnPage.total !== 0 && pitchOnPage.productList.length < pitchOnPage.total) { pitchOnPage.page++ pitchOnPage.handleGetProductData() } } },
tabChange(index, id) { this.activeTab = index this.classifyId = id },
} }; </script>
<style lang="scss" scoped > .home_page_content{ background: #FAFAFA; } .header { background: #FAFAFA;
.toLive { height: 40px; color: #FFF; background-color: #333; }
.topBox { display: flex; align-items: center; justify-content: space-between; width: 100%; height: 100%; }
.logo { width: 280rpx; height: 100%; //margin-top: -40rpx;
// margin-left: 30rpx;
}
.search-btn { height: 66rpx; background: rgba(255, 255, 255, 1); border-radius: 33rpx; display: flex; flex-direction: row; align-items: center; margin-right: 30rpx;
.search-icon { width: 60rpx; height: 60rpx; // margin-left: 33rpx;
}
.search-word { font-size: 26rpx; font-weight: 400; color: rgba(153, 153, 153, 1); margin-left: 10rpx; } }
.tabs-nav-warp { margin-top: 20rpx; padding: 0 30rpx; }
.tabs-nav { .ul { display: flex;
.li { flex: 1 0 auto; margin-left: 36rpx; font-size: 30rpx; color: #999999; position: relative; padding-bottom: 18rpx;
&:first-child { margin-left: 0; }
&.on { &:after { content: ''; width: 100%; height: 4rpx; background: #C5AA7B; position: absolute; left: 0; bottom: 0; }
font-weight: bold; } } } } }
.weiXinBox { width: 100%; //position: fixed;
background: #FFFFFF; //z-index: 99;
}
.wxBtnBg { padding: 0 20rpx;
.weiXinBoxBtn { display: flex; align-items: center; padding: 10rpx 0 10rpx 15rpx; width: 100%; background: #F3F4F5; opacity: 1;
.search-icon { width: 50rpx; height: 50rpx; margin-right: 20rpx; }
text { color: #999999; } } }
.terminal1 { .header { .topBox { // justify-content: left;
.search-btn { .search-icon { margin-left: 0rpx; } } } } }
.topTitle { display: flex; justify-content: center; align-items: center; height: 100rpx; width: 100%;
.topText { text-align: center; color: #000000; font-size: 38rpx; font-weight: bold; } }
.topWap { padding-top: 30rpx;
.logo { margin-top: 0 !important; } }
.terminal2 { }
.terminal3 { }
// 触底样式
.reachBottom { margin-top: 30rpx; display: flex; flex-direction: column; align-items: center;
.reach-icon { width: 150rpx; height: 150rpx; }
.reach-text { margin: 20rpx 0; color: #CCCCCC; } }
// 优化兼容UI
.home_page_content { #home_canvas_page { width: 100%; position: relative; }
} </style>
|