多租户商城-商户小程序端
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

341 lines
6.2 KiB

<template>
<div class="hom-page home_page_content">
<!-- 头部 -->
<FixedHead>
<category-list @tabChange="tabChange"></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 {
loading: true,
isFirst: true,
classifyId: 0, // 分类ID
terminal: API.terminal,
activeTab: 0,
componentsData: [],
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)
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
>
.header {
background: #fff;
.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>