929 lines
23 KiB
Vue
929 lines
23 KiB
Vue
|
<template>
|
|||
|
<view :class="bgTabVal==2?'fullsize noRepeat':bgTabVal==1?'repeat ysize':'noRepeat ysize'"
|
|||
|
:style="'overflow-x:hidden;background-color:'+bgColor+';background-image: url('+bgPic+');min-height:'+windowHeight+'px;'">
|
|||
|
<skeleton :show="showSkeleton" :isNodes="isNodes" ref="skeleton" loading="chiaroscuro" selector="skeleton" bgcolor="#FFF"></skeleton>
|
|||
|
<view v-if="!errorNetwork" :style="{visibility: showSkeleton ? 'hidden' : 'visible'}">
|
|||
|
<view class="page-index skeleton">
|
|||
|
<block>
|
|||
|
<!-- #ifdef H5 -->
|
|||
|
<view v-for="(item, index) in styleConfig" :key="index">
|
|||
|
<block v-if="item.name != 'headerSerch' && item.name != 'tabNav'">
|
|||
|
<component
|
|||
|
:is="item.name"
|
|||
|
:index="index"
|
|||
|
:isFixed="isFixed"
|
|||
|
:dataConfig="item"
|
|||
|
:tempArr="tempArr"
|
|||
|
:userInfo="userInfo"
|
|||
|
:tabTitle="navTop"
|
|||
|
:merId="mer_id"
|
|||
|
:navIndex="navIndex"
|
|||
|
:communityStatus="community_status"
|
|||
|
@detail="goDetail"
|
|||
|
></component>
|
|||
|
</block>
|
|||
|
<block v-if="item.name == 'headerSerch'">
|
|||
|
<headerSerch
|
|||
|
:is="'headerSerch'"
|
|||
|
:isFixed="isFixed"
|
|||
|
:dataConfig="item"
|
|||
|
:tempArr="tempArr"
|
|||
|
:userInfo="userInfo"
|
|||
|
:tabTitle="navTop"
|
|||
|
:merId="mer_id"
|
|||
|
@detail="goDetail"
|
|||
|
></headerSerch>
|
|||
|
</block>
|
|||
|
<block v-if="item.name == 'tabNav'">
|
|||
|
<tabNav
|
|||
|
:is="'tabNav'"
|
|||
|
:isFixed="isFixed"
|
|||
|
:dataConfig="item"
|
|||
|
:tempArr="tempArr"
|
|||
|
:merId="mer_id"
|
|||
|
:userInfo="userInfo"
|
|||
|
:tabTitle="navTop"
|
|||
|
@detail="goDetail"
|
|||
|
></tabNav>
|
|||
|
</block>
|
|||
|
</view>
|
|||
|
<!-- #endif -->
|
|||
|
<!-- #ifdef MP || APP-PLUS-->
|
|||
|
<block v-for="(item, index) in styleConfig" :key="index" >
|
|||
|
<view v-show="navIndex == 0">
|
|||
|
<activeParty v-if="item.name == 'activeParty'" :merId="mer_id" :dataConfig="item"></activeParty>
|
|||
|
<articleList v-if="item.name == 'articleList'" :merId="mer_id" :dataConfig="item"></articleList>
|
|||
|
<bargain v-if="item.name == 'bargain'" :merId="mer_id" :dataConfig="item"></bargain>
|
|||
|
<blankPage v-if="item.name == 'blankPage'" :merId="mer_id" :dataConfig="item"></blankPage>
|
|||
|
<combination v-if="item.name == 'combination'" :merId="mer_id" :dataConfig="item"></combination>
|
|||
|
<topic v-if="item.name == 'topic'" :merId="mer_id" :dataConfig="item"></topic>
|
|||
|
<coupon v-if="item.name == 'coupon'" :merId="mer_id" :dataConfig="item"></coupon>
|
|||
|
<customerService v-if="item.name == 'customerService'" :merId="mer_id" :dataConfig="item"></customerService>
|
|||
|
<goodList v-if="item.name == 'goodList'" :merId="mer_id" :dataConfig="item" @detail="goDetail"></goodList>
|
|||
|
<guide v-if="item.name == 'guide'" :merId="mer_id" :dataConfig="item"></guide>
|
|||
|
<liveBroadcast v-if="item.name == 'liveBroadcast'" :merId="mer_id" :dataConfig="item"></liveBroadcast>
|
|||
|
<menus v-if="item.name == 'menus'" :merId="mer_id" :dataConfig="item"></menus>
|
|||
|
<news v-if="item.name == 'news'" :merId="mer_id" :dataConfig="item"></news>
|
|||
|
<presellList v-if="item.name == 'presellList'" :merId="mer_id" :dataConfig="item"></presellList>
|
|||
|
<promotionList v-if="item.name == 'promotionList'" :merId="mer_id" :dataConfig="item" :tempArr="tempArr" @detail="goDetail"></promotionList>
|
|||
|
<richText v-if="item.name == 'richText'" :merId="mer_id" :dataConfig="item"></richText>
|
|||
|
<seckill v-if="item.name == 'seckill'" :merId="mer_id" :dataConfig="item"></seckill>
|
|||
|
<swiperBg v-if="item.name == 'swiperBg'" :merId="mer_id" :dataConfig="item"></swiperBg>
|
|||
|
<pictureCube v-if="item.name == 'pictureCube'" :merId="mer_id" :dataConfig="item"></pictureCube>
|
|||
|
<swipers v-if="item.name == 'swipers'" :merId="mer_id" :dataConfig="item"></swipers>
|
|||
|
<titles v-if="item.name == 'titles'" :merId="mer_id" :dataConfig="item"></titles>
|
|||
|
</view>
|
|||
|
|
|||
|
<headerSerch v-if="item.name == 'headerSerch'" :merId="mer_id" :dataConfig="item" :userInfo="userInfo"></headerSerch>
|
|||
|
<tabNav v-if="item.name == 'tabNav'" :merId="mer_id" :dataConfig="item" class="tabNav" :tabTitle="navTop"
|
|||
|
@bindHeight="bindHeighta" :isFixed="isFixed"></tabNav>
|
|||
|
</block>
|
|||
|
<!-- #endif -->
|
|||
|
<view>
|
|||
|
<view class="loadingicon acea-row row-center-wrapper" v-if="tempArr.length && styleConfig[styleConfig.length - 1].name == 'promotionList'">
|
|||
|
<text class="loading iconfont icon-jiazai" :hidden="loading == false"></text>
|
|||
|
{{ loadTitle }}
|
|||
|
</view>
|
|||
|
</view>
|
|||
|
</block>
|
|||
|
</view>
|
|||
|
</view>
|
|||
|
<authorize @onLoadFun="onLoadFun" :isAuto="isAuto" :isShowAuth="isShowAuth" @authColse="authColse" :isGoIndex="false"></authorize>
|
|||
|
</view>
|
|||
|
</template>
|
|||
|
<script>
|
|||
|
// +----------------------------------------------------------------------
|
|||
|
// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
|
|||
|
// +----------------------------------------------------------------------
|
|||
|
// | Copyright (c) 2016~2021 https://www.crmeb.com All rights reserved.
|
|||
|
// +----------------------------------------------------------------------
|
|||
|
// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
|
|||
|
// +----------------------------------------------------------------------
|
|||
|
// | Author: CRMEB Team <admin@crmeb.com>
|
|||
|
// +----------------------------------------------------------------------
|
|||
|
var statusBarHeight = uni.getSystemInfoSync().statusBarHeight + 'px';
|
|||
|
let app = getApp();
|
|||
|
import { getUserInfo } from '@/api/user.js';
|
|||
|
import { getDiy, getIndexData, getAppVersion } from '@/api/api.js';
|
|||
|
// #ifdef MP-WEIXIN
|
|||
|
import { getTemlIds } from '@/api/api.js';
|
|||
|
import { SUBSCRIBE_MESSAGE, TIPS_KEY } from '@/config/cache';
|
|||
|
// #endif
|
|||
|
import { getShare, follow } from '@/api/public.js';
|
|||
|
import { goShopDetail } from '@/libs/order.js';
|
|||
|
import { mapGetters } from 'vuex';
|
|||
|
import { getProductslist, getMerProductHot, getStoreCategory } from '@/api/store.js';
|
|||
|
import { initiateAssistApi } from '@/api/activity.js';
|
|||
|
import { spread } from '@/api/user.js';
|
|||
|
import mConfig from './component/index.js';
|
|||
|
import authorize from '@/components/Authorize';
|
|||
|
// #ifdef MP || APP-PLUS
|
|||
|
import activeParty from '../index/component/activeParty';
|
|||
|
import headerSerch from '../index/component/headerSerch';
|
|||
|
import coupon from '../index/component/coupon';
|
|||
|
import bargain from '../index/component/bargain';
|
|||
|
import blankPage from '../index/component/blankPage';
|
|||
|
import combination from '../index/component/combination';
|
|||
|
import customerService from '../index/component/customerService';
|
|||
|
import goodList from '../index/component/goodList';
|
|||
|
import guide from '../index/component/guide';
|
|||
|
import liveBroadcast from '../index/component/liveBroadcast';
|
|||
|
import menus from '../index/component/menus';
|
|||
|
import news from '../index/component/news';
|
|||
|
import topic from '../index/component/topic';
|
|||
|
import presellList from '../index/component/presellList';
|
|||
|
import richText from '../index/component/richText';
|
|||
|
import seckill from '../index/component/seckill';
|
|||
|
import swiperBg from '../index/component/swiperBg';
|
|||
|
import pictureCube from '../index/component/pictureCube'
|
|||
|
import tabNav from '../index/component/tabNav';
|
|||
|
import titles from '../index/component/titles';
|
|||
|
// #endif
|
|||
|
import { silenceBindingSpread, configMap } from '@/utils';
|
|||
|
import history from '@/mixins/history';
|
|||
|
import shareScence from '@/libs/spread';
|
|||
|
import easyLoadimage from '@/components/easy-loadimage/easy-loadimage.vue';
|
|||
|
export default {
|
|||
|
computed: configMap({hide_mer_status:0,community_status:0,share_title:''},
|
|||
|
mapGetters(['isLogin', 'uid'])),
|
|||
|
mixins: [history],
|
|||
|
components: {
|
|||
|
easyLoadimage,
|
|||
|
...mConfig,
|
|||
|
authorize,
|
|||
|
// #ifdef MP || APP-PLUS
|
|||
|
activeParty,
|
|||
|
headerSerch,
|
|||
|
bargain,
|
|||
|
coupon,
|
|||
|
blankPage,
|
|||
|
combination,
|
|||
|
customerService,
|
|||
|
goodList,
|
|||
|
liveBroadcast,
|
|||
|
menus,
|
|||
|
news,
|
|||
|
topic,
|
|||
|
presellList,
|
|||
|
richText,
|
|||
|
seckill,
|
|||
|
swiperBg,
|
|||
|
pictureCube,
|
|||
|
tabNav,
|
|||
|
titles
|
|||
|
// #endif
|
|||
|
},
|
|||
|
data() {
|
|||
|
return {
|
|||
|
styleConfig: [],
|
|||
|
showSkeleton: true, //骨架屏显示隐藏
|
|||
|
isNodes: 0, //控制什么时候开始抓取元素节点,只要数值改变就重新抓取
|
|||
|
errorNetwork: false,
|
|||
|
ad: {home_ad_pic: ''},
|
|||
|
userInfo: {},
|
|||
|
loading: false,
|
|||
|
isAuto: false, //没有授权的不会自动授权
|
|||
|
isShowAuth: false, //是否隐藏授权
|
|||
|
statusBarHeight: statusBarHeight,
|
|||
|
navTop: [],
|
|||
|
subscribe: false,
|
|||
|
itemNew: [],
|
|||
|
menus: [{url:'',pic:'',id: '',name:''},{url:'',pic:'',id: '',name:''},{url:'',pic:'',id: '',name:''},{url:'',pic:'',id: '',name:''},{url:'',pic:'',id: '',name:''},{url:'',pic:'',id: '',name:''},{url:'',pic:'',id: '',name:''},{url:'',pic:'',id: '',name:''},{url:'',pic:'',id: '',name:''},{url:'',pic:'',id: '',name:''}],
|
|||
|
window: false,
|
|||
|
iShidden: false,
|
|||
|
couponList: [],
|
|||
|
lovely: [],
|
|||
|
marTop: 0,
|
|||
|
datatime: 0,
|
|||
|
mer_id: '',
|
|||
|
loadend: false,
|
|||
|
loading: false,
|
|||
|
loadTitle: '加载更多',
|
|||
|
sortProduct: [],
|
|||
|
where: {
|
|||
|
pid: 0,
|
|||
|
page: 1,
|
|||
|
limit: 6
|
|||
|
},
|
|||
|
hostProduct: [],
|
|||
|
hotPage: 1,
|
|||
|
hotLimit: 30,
|
|||
|
hotScroll: true,
|
|||
|
hotLoading: false,
|
|||
|
hotTitle: '加载更多',
|
|||
|
prodeuctTop: 0,
|
|||
|
pinkInfo: '',
|
|||
|
searchH: 0,
|
|||
|
domOffsetTop: 50,
|
|||
|
// #ifdef APP-PLUS || MP
|
|||
|
isFixed: true,
|
|||
|
// #endif
|
|||
|
// #ifdef H5
|
|||
|
isFixed: false,
|
|||
|
// #endif
|
|||
|
goodScroll: true, //精品推荐开关
|
|||
|
params: {
|
|||
|
//精品推荐分页
|
|||
|
page: 1,
|
|||
|
limit: 10
|
|||
|
},
|
|||
|
tempArr: [], //精品推荐临时数组
|
|||
|
numConfig: 0,
|
|||
|
swiperCur: 0,
|
|||
|
brandList: [],
|
|||
|
d: '',
|
|||
|
h: '',
|
|||
|
m: '',
|
|||
|
s: '',
|
|||
|
sum_h: '',
|
|||
|
sortMarTop: 0,
|
|||
|
// #ifdef MP || APP-PLUS
|
|||
|
mpHeight: 108,
|
|||
|
// #endif
|
|||
|
// #ifndef MP || APP-PLUS
|
|||
|
mpHeight: 0,
|
|||
|
// #endif
|
|||
|
currSpid: '',
|
|||
|
mer_id: '',
|
|||
|
navIndex: 0,
|
|||
|
_options:{},
|
|||
|
activity_banner: true,
|
|||
|
activityData: [],
|
|||
|
sortMpTop: 0,
|
|||
|
isHeaderSerch: false,
|
|||
|
bgColor: '',
|
|||
|
bgPic: '',
|
|||
|
bgTabVal: '',
|
|||
|
windowHeight: 0,
|
|||
|
};
|
|||
|
},
|
|||
|
/**
|
|||
|
* 用户点击右上角分享
|
|||
|
*/
|
|||
|
// #ifdef MP
|
|||
|
onShareAppMessage: function() {
|
|||
|
let that = this;
|
|||
|
wx.showShareMenu({
|
|||
|
withShareTicket: true,
|
|||
|
menus: ['shareAppMessage', 'shareTimeline']
|
|||
|
});
|
|||
|
return {
|
|||
|
title: that.share_title,
|
|||
|
path: '/pages/store/home/index?id='+ that.mer_id +'&spid='+ that.uid
|
|||
|
};
|
|||
|
},
|
|||
|
onShareTimeline: function() {
|
|||
|
let that = this;
|
|||
|
return {
|
|||
|
title: that.share_title,
|
|||
|
query: {
|
|||
|
spid: that.uid
|
|||
|
},
|
|||
|
imageUrl: ''
|
|||
|
};
|
|||
|
},
|
|||
|
// #endif
|
|||
|
onLoad(options) {
|
|||
|
let that = this;
|
|||
|
this._options = options;
|
|||
|
this.mer_id = this._options.id
|
|||
|
// #ifdef APP-PLUS
|
|||
|
const pages = getCurrentPages();
|
|||
|
const page = pages[pages.length - 1];
|
|||
|
this.isSupport = !this.isSupport;
|
|||
|
// #endif
|
|||
|
that.$nextTick(function() {
|
|||
|
uni.getSystemInfo({
|
|||
|
success: function(res) {
|
|||
|
that.windowHeight = res.windowHeight;
|
|||
|
}
|
|||
|
});
|
|||
|
})
|
|||
|
this.pageLoad(options);
|
|||
|
setTimeout(() => {
|
|||
|
this.isNodes++;
|
|||
|
}, 100);
|
|||
|
},
|
|||
|
onShow() {
|
|||
|
|
|||
|
},
|
|||
|
onHide() {
|
|||
|
|
|||
|
},
|
|||
|
onReady() {
|
|||
|
|
|||
|
},
|
|||
|
watch: {
|
|||
|
},
|
|||
|
onPullDownRefresh(){
|
|||
|
setTimeout(()=> {
|
|||
|
uni.stopPullDownRefresh();
|
|||
|
}, 100);
|
|||
|
},
|
|||
|
methods: {
|
|||
|
pageLoad(options){
|
|||
|
let that = this;
|
|||
|
if (options.spid) {
|
|||
|
that.currSpid = options.spid;
|
|||
|
app.globalData.spid = options.spid;
|
|||
|
}
|
|||
|
// #ifdef MP
|
|||
|
if (options.scene) {
|
|||
|
let value = that.$util.getUrlParams(decodeURIComponent(options.scene));
|
|||
|
if (value.id) options.id = value.id;
|
|||
|
//记录推广人uid
|
|||
|
if (value.spid) {
|
|||
|
that.currSpid = value.spid;
|
|||
|
app.globalData.spid = value.spid;
|
|||
|
}
|
|||
|
}
|
|||
|
// #endif
|
|||
|
shareScence(that.currSpid, that.isLogin);
|
|||
|
this.isLogin && silenceBindingSpread();
|
|||
|
this.getIndexConfig()
|
|||
|
Promise.all([
|
|||
|
this.diyData()
|
|||
|
]);
|
|||
|
if (this.isLogin) {
|
|||
|
this.getUserInfo();
|
|||
|
}
|
|||
|
},
|
|||
|
bindHeighta(data) {
|
|||
|
// #ifdef APP-PLUS
|
|||
|
this.sortMpTop = data.top + data.height;
|
|||
|
// #endif
|
|||
|
},
|
|||
|
// 对象转数组
|
|||
|
objToArr(data) {
|
|||
|
let obj = Object.keys(data).sort();
|
|||
|
let m = obj.map(key => data[key]);
|
|||
|
return m;
|
|||
|
},
|
|||
|
diyData() {
|
|||
|
let that = this;
|
|||
|
getDiy({id: this.mer_id}).then(res => {
|
|||
|
setTimeout(() => {
|
|||
|
that.isNodes++;
|
|||
|
}, 0);
|
|||
|
that.errorNetwork = false
|
|||
|
let data = res.data;
|
|||
|
if (data.is_bg_color) {
|
|||
|
that.bgColor = data.color_picker
|
|||
|
}
|
|||
|
if (data.is_bg_pic) {
|
|||
|
that.bgPic = data.bg_pic
|
|||
|
that.bgTabVal = data.bg_tab_val
|
|||
|
}
|
|||
|
uni.setNavigationBarTitle({
|
|||
|
title: res.data.title
|
|||
|
});
|
|||
|
if(!res.data.value || res.data.value==""){
|
|||
|
uni.redirectTo({
|
|||
|
url: '/pages/store/home/index?id=' + that.mer_id
|
|||
|
});
|
|||
|
}else{
|
|||
|
that.styleConfig = that.objToArr(res.data.value);
|
|||
|
that.styleConfig.forEach((item, index, arr) => {
|
|||
|
if (item.name == 'headerSerch') {
|
|||
|
that.isHeaderSerch = true
|
|||
|
}
|
|||
|
});
|
|||
|
}
|
|||
|
}).catch(err => {
|
|||
|
uni.showToast({
|
|||
|
title: err,
|
|||
|
icon: 'none'
|
|||
|
});
|
|||
|
});
|
|||
|
},
|
|||
|
// 微信登录回调
|
|||
|
onLoadFun: function(e) {
|
|||
|
this.isShowAuth = false;
|
|||
|
},
|
|||
|
// 菜单详情
|
|||
|
goMenuDetail(item) {
|
|||
|
if (item.url == '/pages/goods_cate/goods_cate') {
|
|||
|
let data = this.$util.stringIntercept(item.url, 1, '\?');
|
|||
|
data = this.$util.stringIntercept(data, 1, '\=');
|
|||
|
uni.setStorageSync('storeIndex', data);
|
|||
|
uni.switchTab({
|
|||
|
url: '/pages/goods_cate/goods_cate'
|
|||
|
});
|
|||
|
} else {
|
|||
|
uni.navigateTo({
|
|||
|
url: item.url
|
|||
|
});
|
|||
|
}
|
|||
|
},
|
|||
|
goDetails(item) {
|
|||
|
goShopDetail(item, this.uid).then(res => {
|
|||
|
if (this.isLogin) {
|
|||
|
initiateAssistApi(item.activity_id)
|
|||
|
.then(res => {
|
|||
|
let id = res.data.product_assist_set_id;
|
|||
|
uni.hideLoading();
|
|||
|
uni.navigateTo({
|
|||
|
url: '/pages/activity/assist_detail/index?id=' + id
|
|||
|
});
|
|||
|
})
|
|||
|
.catch(err => {
|
|||
|
uni.showToast({
|
|||
|
title: err,
|
|||
|
icon: 'none'
|
|||
|
});
|
|||
|
});
|
|||
|
} else {
|
|||
|
this.isAuto = true;
|
|||
|
this.isShowAuth = true
|
|||
|
}
|
|||
|
});
|
|||
|
},
|
|||
|
/**
|
|||
|
* 获取个人用户信息
|
|||
|
*/
|
|||
|
getUserInfo: function() {
|
|||
|
let that = this;
|
|||
|
getUserInfo().then(res => {
|
|||
|
that.userInfo = res.data;
|
|||
|
});
|
|||
|
},
|
|||
|
//分类产品
|
|||
|
get_product_list: function() {
|
|||
|
let that = this;
|
|||
|
// if (!that.loadend) return;
|
|||
|
if (that.loading) return;
|
|||
|
that.loading = true;
|
|||
|
that.loadTitle = '';
|
|||
|
getProductslist(that.where)
|
|||
|
.then(res => {
|
|||
|
let list = res.data.list;
|
|||
|
let productList = that.$util.SplitArray(list, that.sortProduct);
|
|||
|
let loadend = list.length < that.where.limit;
|
|||
|
that.loadend = loadend;
|
|||
|
that.loading = false;
|
|||
|
that.loadTitle = loadend ? '已全部加载' : '加载更多';
|
|||
|
that.$set(that, 'sortProduct', productList);
|
|||
|
that.$set(that.where, 'page', that.where.page + 1);
|
|||
|
})
|
|||
|
.catch(err => {
|
|||
|
that.loading = false;
|
|||
|
that.loadTitle = '加载更多';
|
|||
|
});
|
|||
|
},
|
|||
|
// 首页数据
|
|||
|
getIndexConfig: function() {
|
|||
|
let that = this;
|
|||
|
getStoreCategory(this.mer_id).then(res => {
|
|||
|
that.$set(that, 'menus', res.data.menu);
|
|||
|
res.data.unshift({
|
|||
|
cate_name: '首页'
|
|||
|
});
|
|||
|
that.$set(that, 'navTop', res.data);
|
|||
|
that.reloadData();
|
|||
|
});
|
|||
|
},
|
|||
|
reloadData() {
|
|||
|
setTimeout(() => {
|
|||
|
this.showSkeleton = false
|
|||
|
}, 500)
|
|||
|
},
|
|||
|
// 授权关闭
|
|||
|
authColse: function(e) {
|
|||
|
this.isShowAuth = e;
|
|||
|
},
|
|||
|
// 首发新品详情
|
|||
|
goDetail(item) {
|
|||
|
if (item.activity && item.activity.type === '2' && !this.isLogin) {
|
|||
|
// #ifdef H5
|
|||
|
uni.showModal({
|
|||
|
title: '提示',
|
|||
|
content: '您未登录,请登录!',
|
|||
|
success: function(res) {
|
|||
|
if (res.confirm) {
|
|||
|
uni.navigateTo({
|
|||
|
url: '/pages/users/login/index'
|
|||
|
});
|
|||
|
} else if (res.cancel) {
|
|||
|
}
|
|||
|
}
|
|||
|
});
|
|||
|
// #endif
|
|||
|
// #ifdef MP
|
|||
|
this.$set(this, 'isAuto', true);
|
|||
|
this.$set(this, 'isShowAuth', true);
|
|||
|
// #endif
|
|||
|
return;
|
|||
|
} else {
|
|||
|
goShopDetail(item, this.uid).then(res => {
|
|||
|
uni.navigateTo({
|
|||
|
url: `/pages/goods_details/index?id=${item.id}`
|
|||
|
});
|
|||
|
});
|
|||
|
}
|
|||
|
},
|
|||
|
// 分类详情
|
|||
|
godDetail(item) {
|
|||
|
uni.navigateTo({
|
|||
|
url: `/pages/goods_details/index?id=${item.id}`
|
|||
|
});
|
|||
|
},
|
|||
|
//拼团详情
|
|||
|
goCombinDetail(item) {
|
|||
|
uni.navigateTo({
|
|||
|
url: `/pages/activity/combination_details/index?id=${item.product_group_id}`
|
|||
|
});
|
|||
|
},
|
|||
|
countTime: function() {
|
|||
|
// 获取当前时间
|
|||
|
var date = new Date();
|
|||
|
var now = date.getTime();
|
|||
|
//设置截止时间
|
|||
|
var endDate = new Date('2020-10-22 23:23:23');
|
|||
|
var end = endDate.getTime();
|
|||
|
//时间差
|
|||
|
var leftTime = end - now;
|
|||
|
//定义变量 d,h,m,s保存倒计时的时间
|
|||
|
if (leftTime >= 0) {
|
|||
|
this.d = Math.floor(leftTime / 1000 / 60 / 60 / 24);
|
|||
|
this.h = Math.floor((leftTime / 1000 / 60 / 60) % 24);
|
|||
|
this.m = Math.floor((leftTime / 1000 / 60) % 60);
|
|||
|
this.s = Math.floor((leftTime / 1000) % 60);
|
|||
|
this.sum_h = this.d * 24 + this.h;
|
|||
|
}
|
|||
|
//递归每秒调用countTime方法,显示动态时间效果
|
|||
|
setTimeout(this.countTime, 1000);
|
|||
|
},
|
|||
|
|
|||
|
},
|
|||
|
mounted() {
|
|||
|
|
|||
|
},
|
|||
|
// 滚动到底部
|
|||
|
onReachBottom() {
|
|||
|
|
|||
|
},
|
|||
|
// 滚动监听
|
|||
|
onPageScroll(e) {
|
|||
|
// #ifdef H5
|
|||
|
if (this.isHeaderSerch) {
|
|||
|
if (e.scrollTop > this.domOffsetTop) {
|
|||
|
this.isFixed = true;
|
|||
|
}
|
|||
|
if (e.scrollTop < this.domOffsetTop) {
|
|||
|
this.$nextTick(() => {
|
|||
|
this.isFixed = false;
|
|||
|
});
|
|||
|
}
|
|||
|
} else {
|
|||
|
this.isFixed = false
|
|||
|
}
|
|||
|
// #endif
|
|||
|
// 传入scrollTop值并触发所有easy-loadimage组件下的滚动监听事件
|
|||
|
uni.$emit('scroll');
|
|||
|
}
|
|||
|
};
|
|||
|
</script>
|
|||
|
<style lang="scss">
|
|||
|
page {
|
|||
|
display: flex;
|
|||
|
flex-direction: column;
|
|||
|
}
|
|||
|
.main {
|
|||
|
padding: 0 20rpx;
|
|||
|
}
|
|||
|
.colum0{
|
|||
|
white-space: nowrap;
|
|||
|
display: flex;
|
|||
|
}
|
|||
|
.ysize {
|
|||
|
background-size: 100%;
|
|||
|
}
|
|||
|
.fullsize {
|
|||
|
background-size: 100% 100%;
|
|||
|
}
|
|||
|
.repeat {
|
|||
|
background-repeat: repeat;
|
|||
|
}
|
|||
|
.noRepeat {
|
|||
|
background-repeat: no-repeat;
|
|||
|
}
|
|||
|
.area-row {
|
|||
|
overflow: hidden;
|
|||
|
text-overflow: ellipsis;
|
|||
|
white-space: nowrap;
|
|||
|
display: block;
|
|||
|
width: 100%;
|
|||
|
text-align: center;
|
|||
|
}
|
|||
|
.page-index {
|
|||
|
display: flex;
|
|||
|
flex-direction: column;
|
|||
|
min-height: 100%;
|
|||
|
.page_content {
|
|||
|
/* #ifdef MP || APP-PLUS */
|
|||
|
padding-top: 270rpx;
|
|||
|
/* #endif */
|
|||
|
.page_bg{
|
|||
|
background: linear-gradient(180deg, #fff 0%, #f5f5f5 100%);
|
|||
|
}
|
|||
|
.nav {
|
|||
|
padding: 0 0rpx 30rpx;
|
|||
|
flex-wrap: wrap;
|
|||
|
/* #ifdef MP */
|
|||
|
margin-top: 0;
|
|||
|
/* #endif */
|
|||
|
/* #ifdef H5 */
|
|||
|
margin-top: 0;
|
|||
|
/* #endif */
|
|||
|
.item {
|
|||
|
display: flex;
|
|||
|
flex-direction: column;
|
|||
|
align-items: center;
|
|||
|
justify-content: center;
|
|||
|
width: 20%;
|
|||
|
margin-top: 30rpx;
|
|||
|
image {
|
|||
|
width: 82rpx;
|
|||
|
height: 82rpx;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
.index-product-wrapper {
|
|||
|
.nav-bd {
|
|||
|
display: flex;
|
|||
|
align-items: center;
|
|||
|
.item {
|
|||
|
display: flex;
|
|||
|
flex-direction: column;
|
|||
|
align-items: center;
|
|||
|
justify-content: center;
|
|||
|
width: 25%;
|
|||
|
.txt {
|
|||
|
font-size: 32rpx;
|
|||
|
color: #282828;
|
|||
|
}
|
|||
|
.label {
|
|||
|
display: flex;
|
|||
|
align-items: center;
|
|||
|
justify-content: center;
|
|||
|
width: 124rpx;
|
|||
|
height: 32rpx;
|
|||
|
margin-top: 5rpx;
|
|||
|
font-size: 24rpx;
|
|||
|
color: #999;
|
|||
|
}
|
|||
|
&.active {
|
|||
|
color: $theme-color;
|
|||
|
.label {
|
|||
|
background: linear-gradient(90deg, $bg-star 0%, $bg-end 100%);
|
|||
|
border-radius: 16rpx;
|
|||
|
color: #fff;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
.list-box {
|
|||
|
display: flex;
|
|||
|
flex-wrap: wrap;
|
|||
|
justify-content: space-between;
|
|||
|
.item {
|
|||
|
width: 345rpx;
|
|||
|
margin-bottom: 20rpx;
|
|||
|
background-color: #fff;
|
|||
|
border-radius: 10px;
|
|||
|
overflow: hidden;
|
|||
|
image {
|
|||
|
width: 100%;
|
|||
|
height: 345rpx;
|
|||
|
}
|
|||
|
.text-info {
|
|||
|
padding: 10rpx 20rpx 15rpx;
|
|||
|
.title {
|
|||
|
color: #222222;
|
|||
|
}
|
|||
|
.old-price {
|
|||
|
margin-top: 8rpx;
|
|||
|
font-size: 26rpx;
|
|||
|
color: #aaaaaa;
|
|||
|
text-decoration: line-through;
|
|||
|
text {
|
|||
|
margin-right: 2px;
|
|||
|
font-size: 20rpx;
|
|||
|
}
|
|||
|
}
|
|||
|
.price {
|
|||
|
display: flex;
|
|||
|
align-items: flex-end;
|
|||
|
color: $theme-color;
|
|||
|
font-size: 34rpx;
|
|||
|
font-weight: 800;
|
|||
|
text {
|
|||
|
padding-bottom: 4rpx;
|
|||
|
font-size: 24rpx;
|
|||
|
font-weight: normal;
|
|||
|
}
|
|||
|
.txt {
|
|||
|
display: flex;
|
|||
|
align-items: center;
|
|||
|
justify-content: center;
|
|||
|
width: 28rpx;
|
|||
|
height: 28rpx;
|
|||
|
margin-left: 15rpx;
|
|||
|
margin-bottom: 10rpx;
|
|||
|
border: 1px solid $theme-color;
|
|||
|
border-radius: 4rpx;
|
|||
|
font-size: 22rpx;
|
|||
|
font-weight: normal;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
&.on {
|
|||
|
display: flex;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
.productList {
|
|||
|
background-color: #f1f1f1;
|
|||
|
min-height: 70vh;
|
|||
|
.sort {
|
|||
|
width: 710rpx;
|
|||
|
max-height: 380rpx;
|
|||
|
background: rgba(255, 255, 255, 1);
|
|||
|
border-radius: 16rpx;
|
|||
|
padding: 8rpx 0rpx 30rpx;
|
|||
|
flex-wrap: wrap;
|
|||
|
margin: 25rpx auto 0 auto;
|
|||
|
&.no_pad {
|
|||
|
padding: 0;
|
|||
|
}
|
|||
|
.item {
|
|||
|
width: 20%;
|
|||
|
margin-top: 30rpx;
|
|||
|
text-align: center;
|
|||
|
.pictrues {
|
|||
|
width: 90rpx;
|
|||
|
height: 90rpx;
|
|||
|
background: rgba(248, 248, 248, 1);
|
|||
|
border-radius: 50%;
|
|||
|
margin: 0 auto;
|
|||
|
}
|
|||
|
image {
|
|||
|
width: 90rpx;
|
|||
|
height: 90rpx;
|
|||
|
}
|
|||
|
.text {
|
|||
|
color: #272727;
|
|||
|
font-size: 24rpx;
|
|||
|
margin-top: 10rpx;
|
|||
|
overflow: hidden;
|
|||
|
white-space: nowrap;
|
|||
|
text-overflow: ellipsis;
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
.productList .list {
|
|||
|
padding: 0 20rpx;
|
|||
|
}
|
|||
|
.productList .list.on {
|
|||
|
background-color: #fff;
|
|||
|
border-top: 1px solid #f6f6f6;
|
|||
|
}
|
|||
|
.productList .list .item {
|
|||
|
width: 345rpx;
|
|||
|
margin-top: 20rpx;
|
|||
|
background-color: #fff;
|
|||
|
border-radius: 10rpx;
|
|||
|
.name{
|
|||
|
display: flex;
|
|||
|
align-items: center;
|
|||
|
.name_text{
|
|||
|
display: inline-block;
|
|||
|
max-width: 200rpx;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
.productList .list .item.on {
|
|||
|
width: 100%;
|
|||
|
display: flex;
|
|||
|
border-bottom: 1px solid #f6f6f6;
|
|||
|
padding: 30rpx 0;
|
|||
|
margin: 0;
|
|||
|
}
|
|||
|
.productList .list .item .pictrue {
|
|||
|
position: relative;
|
|||
|
width: 100%;
|
|||
|
height: 345rpx;
|
|||
|
}
|
|||
|
.productList .list .item .pictrue.on {
|
|||
|
width: 180rpx;
|
|||
|
height: 180rpx;
|
|||
|
}
|
|||
|
.productList .list .item .pictrue image,
|
|||
|
.productList .list .item .pictrue uni-image,
|
|||
|
.productList .list .item .pictrue .easy-loadimage{
|
|||
|
width: 100%;
|
|||
|
height: 100%;
|
|||
|
border-radius: 10rpx 10rpx 0 0;
|
|||
|
}
|
|||
|
.productList .list .item .pictrue image.on {
|
|||
|
border-radius: 6rpx;
|
|||
|
}
|
|||
|
.productList .list .item .text {
|
|||
|
padding: 14rpx 17rpx 26rpx 17rpx;
|
|||
|
font-size: 28rpx;
|
|||
|
color: #212121;
|
|||
|
}
|
|||
|
.productList .list .item .text.on {
|
|||
|
width: 508rpx;
|
|||
|
padding: 0 0 0 22rpx;
|
|||
|
}
|
|||
|
.productList .list .item .text .money {
|
|||
|
font-size: 26rpx;
|
|||
|
font-weight: bold;
|
|||
|
margin-top: 8rpx;
|
|||
|
}
|
|||
|
.productList .list .item .text .coupon {
|
|||
|
background: rgba(255, 248, 247, 1);
|
|||
|
border: 1px solid rgba(233, 51, 35, 1);
|
|||
|
border-radius: 4rpx;
|
|||
|
font-size: 20rpx;
|
|||
|
margin-left: 18rpx;
|
|||
|
padding: 1rpx 4rpx;
|
|||
|
}
|
|||
|
.productList .list .item .text .money.on {
|
|||
|
margin-top: 50rpx;
|
|||
|
}
|
|||
|
.productList .list .item .text .money .num {
|
|||
|
font-size: 34rpx;
|
|||
|
}
|
|||
|
.productList .list .item .text .vip {
|
|||
|
font-size: 22rpx;
|
|||
|
color: #aaa;
|
|||
|
margin-top: 7rpx;
|
|||
|
}
|
|||
|
.productList .list .item .text .vip.on {
|
|||
|
margin-top: 12rpx;
|
|||
|
}
|
|||
|
.productList .list .item .text .vip .vip-money {
|
|||
|
font-size: 24rpx;
|
|||
|
color: #282828;
|
|||
|
font-weight: bold;
|
|||
|
}
|
|||
|
|
|||
|
.productList .list .item .text .vip .vip-money image {
|
|||
|
width: 46rpx;
|
|||
|
height: 21rpx;
|
|||
|
margin-left: 4rpx;
|
|||
|
}
|
|||
|
.pictrue {
|
|||
|
position: relative;
|
|||
|
}
|
|||
|
// .fixed {
|
|||
|
// z-index: 100;
|
|||
|
// position: fixed;
|
|||
|
// left: 0;
|
|||
|
// top: 0;
|
|||
|
// background-color: #fff;
|
|||
|
// box-shadow: 0 10rpx 20rpx -5rpx rgba(0, 0, 0, 0.06);
|
|||
|
// }
|
|||
|
.combination-item {
|
|||
|
width: 328rpx;
|
|||
|
height: 180rpx;
|
|||
|
display: inline-block;
|
|||
|
background-size: 100%;
|
|||
|
position: relative;
|
|||
|
background-size: cover;
|
|||
|
border-radius: 16rpx;
|
|||
|
.img-box {
|
|||
|
width: 122rpx;
|
|||
|
height: 122rpx;
|
|||
|
position: absolute;
|
|||
|
image,.easy-loadimage,uni-image {
|
|||
|
width: 122rpx;
|
|||
|
height: 122rpx;
|
|||
|
}
|
|||
|
}
|
|||
|
.name {
|
|||
|
font-size: 30rpx;
|
|||
|
color: #333333;
|
|||
|
font-weight: bold;
|
|||
|
line-height: 32rpx;
|
|||
|
}
|
|||
|
.price {
|
|||
|
display: block;
|
|||
|
font-size: 30rpx;
|
|||
|
font-weight: bold;
|
|||
|
margin-top: 8rpx;
|
|||
|
color: #e93323;
|
|||
|
text {
|
|||
|
font-size: 20rpx;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
</style>
|