172 lines
4.8 KiB
Vue
172 lines
4.8 KiB
Vue
<template>
|
||
<view id="home" :style="[pageStyle]" class="smallBox" :data-theme="theme">
|
||
<diy-page ref="diyComponentRef" :merId="merId" :isSmallPage="isSmallPage" :regionIds="regionIds"
|
||
:isScrolled="isScrolled" :componentData="componentData" v-if="componentData && componentData.value"
|
||
@getDiyData="getDiyData" :fromTo="fromTo" :merMemberInfo="merMemberInfo" @updateMemberInfo="updateMemberInfo"></diy-page>
|
||
<page-footer :merId="merId" v-if="fromTo" :fromTo="fromTo"></page-footer>
|
||
</view>
|
||
</template>
|
||
<script>
|
||
import {
|
||
getDiy
|
||
} from '@/api/api.js';
|
||
import {
|
||
mapGetters
|
||
} from "vuex";
|
||
import diyPage from "@/subPackage/pages/diyPage/index.vue";
|
||
import pageFooter from "../../../components/pageFooter";
|
||
let app = getApp();
|
||
export default {
|
||
data() {
|
||
return {
|
||
merMemberInfo: {}, //会员信息
|
||
theme: app.globalData.theme,
|
||
isSmallPage: true, //是否是微页面,true是,false不是
|
||
bgPic: '',
|
||
bgTabVal: '',
|
||
pageStyle: null,
|
||
diyId: 0, //diyid
|
||
domOffsetTop: 50,
|
||
isScrolled: false,
|
||
merId: 0,
|
||
regionIds: '', // 圈层ID集合,逗号分隔,传递给goodList组件
|
||
componentData: {},
|
||
fromTo: '' //页面来源
|
||
}
|
||
},
|
||
components: {
|
||
diyPage,
|
||
pageFooter
|
||
},
|
||
computed: mapGetters(['bottomNavigationIsCustom', 'merchantAPPInfo','isLogin']),
|
||
watch: {
|
||
regionIds: {
|
||
handler(newValue, oldValue) {
|
||
if (newValue && newValue !== oldValue) {
|
||
this.getDiyData(this.diyId);
|
||
}
|
||
},
|
||
immediate: true
|
||
}
|
||
},
|
||
onShow() {
|
||
// 更新圈层ID(从圈层选择页面返回时)
|
||
this.initRegionIds();
|
||
if(this.merId && this.isLogin)this.getMemberInfo()
|
||
// 通知组件位置可能已变化
|
||
if(this.regionIds){
|
||
this.$nextTick(() => {
|
||
uni.$emit('locationChanged');
|
||
});
|
||
}
|
||
},
|
||
onLoad(options) {
|
||
if (options.scene) {
|
||
let value = this.$util.getUrlParams(decodeURIComponent(options.scene));
|
||
if (value.id) this.diyId = Number(value.id);
|
||
if (value.merId) this.merId = Number(value.merId);
|
||
if (value.fromTo) this.fromTo = value.fromTo;
|
||
}
|
||
if (options.id) {
|
||
this.diyId = Number(options.id);
|
||
}
|
||
if (options.merId) {
|
||
this.merId = Number(options.merId);
|
||
}
|
||
if (options.fromTo) {
|
||
this.fromTo = options.fromTo;
|
||
}
|
||
this.getDiyData(this.diyId)
|
||
},
|
||
// 滚动监听
|
||
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
|
||
});
|
||
},
|
||
// 初始化圈层ID参数
|
||
initRegionIds() {
|
||
try {
|
||
const areasInfo = uni.getStorageSync('areas_info') || [];
|
||
if (Array.isArray(areasInfo) && areasInfo.length > 0) {
|
||
// 提取所有圈层ID,用逗号分隔
|
||
this.regionIds = areasInfo
|
||
.filter(area => area.id) // 过滤掉没有id的项
|
||
.map(area => area.id)
|
||
.join(',');
|
||
} else {
|
||
this.regionIds = '';
|
||
}
|
||
} catch (error) {
|
||
this.regionIds = '';
|
||
}
|
||
},
|
||
async getDiyData(id) {
|
||
this.componentData = null
|
||
uni.showLoading({
|
||
title: '加载中...'
|
||
});
|
||
try {
|
||
const {
|
||
data
|
||
} = await getDiy({
|
||
id: id,
|
||
circleIds: this.regionIds
|
||
});
|
||
this.componentData = data
|
||
uni.setNavigationBarTitle({
|
||
title: data.title
|
||
});
|
||
uni.setNavigationBarColor({
|
||
//必须要16进制小写
|
||
frontColor: data.titleColor,
|
||
backgroundColor: data.titleBgColor.toString().toLowerCase(),
|
||
})
|
||
uni.hideLoading();
|
||
this.pageStyle = {
|
||
'background-color': data.isBgColor === 1 ? data.colorPicker : '',
|
||
'background-image': data.isBgPic === 1 ? `url(${data.bgPic})` : '',
|
||
'background-repeat': data.bgTabVal === 1 ? 'repeat-y' : 'no-repeat',
|
||
'background-size': data.bgTabVal === 2 ? 'cover' : 'contain'
|
||
};
|
||
setTimeout(() => {
|
||
this.isNodes++;
|
||
}, 100);
|
||
} catch (err) {
|
||
uni.hideLoading();
|
||
return this.$util.Tips({
|
||
title: err
|
||
});
|
||
}
|
||
},
|
||
},
|
||
onReachBottom() {
|
||
this.$refs.diyComponentRef.getRecommend();
|
||
}
|
||
}
|
||
</script>
|
||
|
||
<style lang="scss" scoped>
|
||
.smallBox {
|
||
padding-bottom: calc(130rpx+ constant(safe-area-inset-bottom)); ///兼容 IOS<11.2/
|
||
padding-bottom: calc(130rpx + env(safe-area-inset-bottom)); ///兼容 IOS>11.2/
|
||
}
|
||
</style> |