123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306 |
- /* eslint-disable arrow-parens */
- import { getHeaderHeight } from '../../utils';
- import { connect } from 'herculex';
- import { createSubscribe } from 'applet-page-component';
- import { initMallData, updateGlobalData } from '../../utils/initMallList';
- import { updateCar, queryForCarList, queryForGoodsList, queryForStartTip } from './service';
- import showToast from '../../utils/showToast';
- Component(createSubscribe({
- onShow() {
- const {
- globalShopId
- } = this.data;
- const {
- globalShopId: stateShopId
- } = this.$store.stateConfig.$global;
- if (globalShopId === stateShopId) {
- this.initWithLoading();
- }
- },
- onPageScroll() {// this.isArriveTop();
- }
- })(connect({
- mapStateToProps: {
- globalTabs: state => state.globalTabs || [],
- globalGoodsList: state => state.globalGoodsList || [],
- globalCar: state => state.$global.globalCar || [],
- globalShopId: state => state.$global.globalShopId || '',
- headB2bHight: state => state.$global.headB2bHight || 0,
- userInfo: state => state.$global.userInfo || {},
- jumpSkuId: state => state.$global.jumpSkuId || '',
- memberLevel: state => state.$global.memberLevel || ''
- }
- })({
- props: {
- componentData: {}
- },
- async didUpdate(preProps, preData) {
- if (preData.globalShopId !== this.data.globalShopId && this.data.globalShopId !== '') {
- this.setData({
- hasLocation: true
- });
- this.initWithLoading();
- }
- },
- didMount() {},
- data: {
- hasLocation: false,
- activeTab: 0,
- headerHight: getHeaderHeight(),
- carTotalNum: 0,
- scrollArriveTop: false,
- tabBarHight: 0,
- jumpId: '',
- // jumpItem: [tabIndex, index]
- jumpItem: [0, 0],
- extraTotalHight: 0,
- showFlag: false,
- startDeliveryAmount: 0,
- emptyImage: 'https://gw.alipayobjects.com/mdn/rms_0e8a29/afts/img/A*uhaRQLLUyZ0AAAAAAAAAAAAAARQnAQ'
- },
- methods: {
- // saveRef 调用子组件click
- saveRef(ref) {
- // 存储自定义组件实例,方便以后调用
- this.childClickFunc = ref;
- },
- // saveCarRef 调用购物车 子组件方法
- saveCarRef(ref) {
- // 存储自定义组件实例,方便以后调用
- this.carRef = ref;
- },
- // 将自组件的确认方法 放到确认按钮
- handleConfirm() {
- this.carRef.handelCreateOrder();
- },
- // 将自组件的打开购物车方法 放到购物车按钮
- handleCarClick() {
- this.carRef.openPopup();
- },
- // 刷新界面
- refreshPage() {
- my.navigateTo({
- url: './index'
- });
- },
- // init with loading
- async initWithLoading() {
- my.showLoading();
- try {
- await this.initGoodsList();
- my.hideLoading(); // 获取底部 头部高度
- this.queryHight();
- const {
- jumpId,
- globalGoodsList
- } = this.data;
- if (jumpId) {
- globalGoodsList.some((tabItem, tabIndex) => {
- return tabItem.list.some((item, index) => {
- if (item.skuId === jumpId) {
- this.setData({
- jumpItem: [tabIndex, index]
- });
- return true;
- }
- return false;
- });
- });
- }
- const [jumpActive, jumpIndex] = this.data.jumpItem;
- this.setData({
- activeTab: jumpActive
- });
- const distance = await this.queryScrollDistance(jumpIndex);
- jumpId ? this.childClickFunc.handleGotoItem(jumpActive, distance) : this.childClickFunc.clickRef(jumpActive); // 获取配送提示
- // 获取配送提示栏高度
- this.extraComponentHight();
- } catch (err) {
- my.hideLoading();
- showToast({
- content: err.msg,
- type: 'none'
- });
- }
- },
- // init
- async initGoodsList() {
- const {
- jumpSkuId = ''
- } = this.data; // 是跳转过来的
- this.setData({
- jumpId: jumpSkuId
- });
- this.commitGlobal && this.commitGlobal({
- jumpSkuId: ''
- });
- const {
- globalShopId
- } = this.data; // 获取商品列表数据
- const list = await queryForGoodsList({
- shopId: globalShopId
- }); // 获取购物车数据
- const car = await queryForCarList({
- shopId: globalShopId
- }); // 查询起送信息
- const {
- showFlag,
- startDeliveryAmount
- } = await queryForStartTip({
- shopId: globalShopId
- }); // 初始化数据
- const {
- leftTabs,
- goodsList
- } = initMallData({
- tabs: list,
- carList: car.carts
- });
- this.commitGlobal && this.commitGlobal({
- globalCar: car
- });
- this.commit && this.commit({
- globalTabs: leftTabs,
- globalGoodsList: goodsList
- }); // header 高度
- this.setData({
- activeTab: 0,
- showFlag,
- startDeliveryAmount
- });
- },
- // 点击左侧栏目
- // handleChange(index) {
- // this.setData({
- // activeTab: index,
- // });
- // },
- // // 滑动右侧
- onChange(index) {
- this.setData({
- activeTab: index
- });
- },
- /**
- * 某个goodsItem 被点击
- * @params { skuId, number: value ,type: ADD | SUBTRACT }
- */
- async handelItemChange(e) {
- const {
- skuId,
- number,
- type
- } = e;
- const {
- globalShopId
- } = this.data; // 发起请求 更新购物车
- try {
- // @param shopId skuId num type
- my.showLoading();
- await updateCar({
- shopId: globalShopId,
- skuId,
- num: number,
- type
- }); // 发起请求 查询购物车
- const car = await queryForCarList({
- shopId: globalShopId
- });
- my.hideLoading();
- updateGlobalData.call(this, car);
- } catch (err) {
- my.hideLoading();
- showToast({
- content: err.msg
- });
- }
- },
- extraComponentHight() {
- my.createSelectorQuery().select('.shop-deliver-info').boundingClientRect().exec(ret => {
- ret && this.setData({
- extraTotalHight: ret.reduce((total, item) => total + (item ? item.height : 0), 0)
- });
- });
- },
- isArriveTop() {
- my.createSelectorQuery().selectAll('.group-text').boundingClientRect().select('.mall-index-container').boundingClientRect().exec(ret => {
- const {
- top: rightTop
- } = ret[0][0];
- const {
- top: totalTop
- } = ret[1]; // 到达顶部
- if (getHeaderHeight() - totalTop > 0) {
- // 往下滑
- if (this.preRightTop - rightTop > 0) {
- this.setData({
- scrollArriveTop: true
- });
- } else {
- // 往上滑
- this.setData({
- scrollArriveTop: !(totalTop - rightTop <= 1)
- });
- }
- }
- this.preRightTop = rightTop;
- });
- },
- // 获取商品高度
- queryScrollDistance(itemIndex) {
- return new Promise(resolve => {
- my.createSelectorQuery().select('.goods-item-container').boundingClientRect().select('.group-text').boundingClientRect().exec(ret => {
- const goodsItemHeight = ret[0] ? ret[0].height : 0;
- const titleHeight = ret[1] ? ret[1].height : 0;
- console.log(titleHeight, goodsItemHeight, 'Height');
- console.log(ret[0], ret[1], 'ret');
- resolve(titleHeight + goodsItemHeight * itemIndex);
- });
- });
- },
- // 获取tabbar高度
- queryHight() {
- my.createSelectorQuery().select('.tabbar-box.fixed').boundingClientRect().exec(ret => {
- const tabBarHight = ret[0] ? ret[0].height : 0;
- this.setData({
- tabBarHight
- });
- });
- }
- }
- })));
|