Files
MER-2.2_2601/mer_uniapp/pages/merchant/home/index.vue

319 lines
9.8 KiB
Vue
Raw Normal View History

<template>
<view id="home" :data-theme="theme" :style="[pageStyle]">
<tui-skeleton v-if="showSkeleton"></tui-skeleton>
<!-- 有网内容 -->
<view class="page-index tui-skeleton page_count" :class="{'bgf':navIndex >0}"
:style="{visibility: showSkeleton ? 'hidden' : 'visible'}">
<diy-page ref="diyComponentRef" :merId="merId" :merMemberInfo="merMemberInfo" @updateMemberInfo="updateMemberInfo"
:isScrolled="isScrolled" :componentData="componentData" v-if="componentData && componentData.value"></diy-page>
<!-- 底部导航距离做兼容处理的-->
<view class="footerBottom"></view>
</view>
<coupon-and-classify v-if="tabActive >0 && merId" :tabActive="tabActive" :merId="merId"></coupon-and-classify>
<page-footer :merId="merId" v-if="merId" fromTo="merHome"></page-footer>
<!-- <view class="footer">-->
<!-- <view v-for="(item, index) in tabs" :key="index" :class="{ active: tabActive === index }" class="item"-->
<!-- @click="handleChangetab(index)">-->
<!-- <view :class="['iconfont', item.icon]"></view>-->
<!-- <view>{{ item.name }}</view>-->
<!-- </view>-->
<!-- <view class="item" @click="handleCustomer">-->
<!-- <view class="iconfont icon-ic_customerservice"></view>-->
<!-- <view>联系客服</view>-->
<!-- </view>-->
<!-- <view class="item" @click="handleMembership">-->
<!-- <view class="iconfont icon-ic_customerservice"></view>-->
<!-- <view>加入会员</view>-->
<!-- </view>-->
<!-- <view class="item" @click="handleShoppingCredit">-->
<!-- <view class="iconfont icon-ic_customerservice"></view>-->
<!-- <view>购物金</view>-->
<!-- </view>-->
<!-- <view class="item" @click="handleRules">-->
<!-- <view class="iconfont icon-ic_customerservice"></view>-->
<!-- <view>会员规则</view>-->
<!-- </view>-->
<!-- </view>-->
</view>
</template>
<script>
// +----------------------------------------------------------------------
// | CRMEB [ CRMEB赋能开发者助力企业发展 ]
// +----------------------------------------------------------------------
// | Copyright (c) 2016~2026 https://www.crmeb.com All rights reserved.
// +----------------------------------------------------------------------
// | Licensed CRMEB并不是自由软件未经许可不能去掉CRMEB相关版权
// +----------------------------------------------------------------------
// | Author: CRMEB Team <admin@crmeb.com>
// +----------------------------------------------------------------------
import {
chatConfig
} from '@/utils/consumerType.js'
import tuiSkeleton from '@/components/base/tui-skeleton.vue';
import couponAndClassify from '../components/couponAndClassify/index.vue';
import {
getMerIndexInfoApi,
} from '@/api/merchant.js';
import {
mapGetters
} from "vuex";
import {
silenceBindingSpread,
} from '@/utils/index.js';
import {getMerDiyInfoApi} from "../../../api/merchant";
import diyPage from "@/subPackage/pages/diyPage/index.vue";
import {memberUserInfoApi} from "../../member/memberApi";
import pageFooter from "../../../components/pageFooter";
const arrTemp = ["beforePay", "afterPay", "createBargain", "pink"];
var statusBarHeight = uni.getSystemInfoSync().statusBarHeight + 'px';
let app = getApp();
export default {
computed: mapGetters(['isLogin', 'uid', 'globalData', 'bottomNavigationIsCustom']),
components: {
pageFooter,
tuiSkeleton,
diyPage,
couponAndClassify
},
data() {
return {
merMemberInfo: {}, //会员信息
componentData: {},
isScrolled: false, //是否开始滚动
showSkeleton: true, //骨架屏显示隐藏
isNodes: 0, //控制什么时候开始抓取元素节点,只要数值改变就重新抓取
statusBarHeight: statusBarHeight,
navIndex: 0, //判断首页显示内容1显示分类页和商品0首页
site_name: '', //首页title
configApi: {}, //分享类容配置
theme: app.globalData.theme,
// #ifdef APP-PLUS || MP
isFixed: true,
// #endif
// #ifdef H5
isFixed: false,
// #endif
domOffsetTop: 50,
diyId: 0, //DIYID
bgPic: '', //背景图片
bgTabVal: '', //背景图片样式
pageStyle: {},
merchantInfo: {},
merId: 0,
// 底部菜单
tabs: [{
icon: 'icon-ic_mall',
name: '首页',
},
{
icon: 'icon-a-ic_Picturearrangement',
name: '分类'
},
{
icon: 'icon-ic_coupon',
name: '领券'
}
],
tabActive: 0, // 底部切换
}
},
onLoad(options) {
// 仅仅小程序扫码进入获取商品id商品类型
if (options.scene) {
let value = this.$util.getUrlParams(decodeURIComponent(options.scene));
this.diyId = value.id ? value.id : 0;
this.merId = value.merId ? value.merId : 0;
if (value.sd) this.$store.commit('Change_Spread', value.sd);
}else{
this.merId = options.merId ? parseInt(options.merId) : 0;
this.diyId = options.id ? parseInt(options.id) : 0;
if (options.sd) this.$store.commit('Change_Spread', options.sd); //分享id
}
this.getMerIndexInfo()
this.diyData();
},
// #ifdef MP
/**
* 用户点击右上角分享到朋友圈
*/
onShareTimeline() {
return {
title: this.merchantInfo.name,
imageUrl: this.merchantInfo.avatar,
query: `merId=${this.merId}&sd=${this.uid}`
};
},
/**
* 用户点击右上角分享
*/
onShareAppMessage() {
return {
title: this.merchantInfo.name,
imageUrl: this.merchantInfo.avatar,
path: `/pages/merchant/home/index?merId=${this.merId}&sd=${this.uid}`
};
},
// #endif
// 滚动监听
onPageScroll(e) {
// 传入scrollTop值并触发所有easy-loadimage组件下的滚动监听事件
uni.$emit('scroll');
if (e.scrollTop > this.domOffsetTop) {
this.isScrolled = true;
}
if (e.scrollTop < this.domOffsetTop) {
this.$nextTick(() => {
this.isScrolled = false;
});
}
},
methods: {
// 加入会员后的调用
updateMemberInfo(){
this.getMemberInfo()
},
//店铺会员信息
getMemberInfo(){
this.$store.dispatch("getMerMemberInfo", this.merId).then(data => {
this.merMemberInfo = data
});
},
//购物金
handleShoppingCredit(){
this.$util.navigateTo(`/pages/member/recharge_amount/index?merId=${this.merId}`)
},
// 会员规则
handleRules(){
this.$util.navigateTo(`/pages/member/membership_rules/index?merId=${this.merId}`)
},
handleMembership(){
this.$refs.membershipRef.open()
},
/**
* 获取DIY
* @param {number} id
* @param {boolean} type 区分是否是微页面
*/
diyData() {
let that = this;
uni.showLoading({
title: '加载中...'
});
getMerDiyInfoApi(this.merId, this.diyId).then(res => {
uni.setNavigationBarTitle({
title: res.data.title
});
let data = res.data;
this.componentData = data
this.reloadData();
that.styleConfig = that.$util.objToArr(res.data.value);
that.pageStyle = {
'background-color': data.isBgColor === 1 ? res.data.colorPicker : '',
'background-image': data.isBgPic === 1 ? `url(${res.data.bgPic})` : '',
'background-repeat': res.data.bgTabVal === 1 ? 'repeat-y' : 'no-repeat',
'background-size': res.data.bgTabVal === 2 ? 'cover' : 'contain'
};
uni.hideLoading();
setTimeout(() => {
that.isNodes++;
}, 100);
}).catch(err => {
return that.$util.Tips({
title: err
});
uni.hideLoading();
});
},
//客服跳转
handleCustomer: function() {
chatConfig(this.merchantInfo);
},
//商户信息
getMerIndexInfo() {
let that = this;
getMerIndexInfoApi(this.merId).then(res => {
this.merchantInfo = res.data
uni.setNavigationBarTitle({
title: res.data.name
})
this.$store.commit('MERCHANTJINFO', res.data);
this.skeletonShow = false;
}).catch(err => {
that.loading = false;
that.loadTitle = '加载更多';
this.skeletonShow = false;
});
},
//底部切换
handleChangetab(param) {
this.tabActive = param;
},
//清除骨架屏
reloadData() {
this.showSkeleton = false;
},
// 关闭优惠券弹窗
closeCouponPop() {
this.$refs.couponRef.close();
},
},
onShow() {
if(this.merId && this.isLogin)this.getMemberInfo()
//分销绑定
silenceBindingSpread(this.isLogin, this.globalData.spread);
},
mounted() {
},
onReachBottom() {
// this.$refs.recommendIndex.get_host_product();
}
}
</script>
<style>
page {
height: auto;
display: flex;
flex-direction: column;
height: 100%;
/* #ifdef H5 */
//background-color: #fff;
/* #endif */
}
</style>
<style lang="scss" scoped>
.footer {
position: fixed;
bottom: 0;
left: 0;
z-index: 1;
display: flex;
width: 100%;
padding-top: 12rpx;
padding-bottom: constant(safe-area-inset-bottom); ///兼容 IOS<11.2/
padding-bottom: env(safe-area-inset-bottom); ///兼容 IOS>11.2/
background-color: #FFFFFF;
opacity: 0.96;
.item {
flex: 1;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
font-weight: 500;
font-size: 20rpx;
color: #282828;
.iconfont {
font-size: 43rpx !important;
}
}
.active {
@include main_color(theme);
}
}
</style>