tabBox.vue 3.25 KB
<template>
  <div class="tabBox">
      <!-- 主内容区域 -->
      <van-tabs @change="onChange" swipeable v-model="active">
          <van-tab v-for="(item,index) in tabbar" :key="index" :title="item.title">
              <div class="tabBox_main">
                  <div class="tabbar" v-for="(item, index) in tabbaromponents.ads" :key="index">
                  <!-- 关爱屋简介 -->
                  <html-box
                      v-if="item.style == '14'"
                      :htmls="item.content">
                  </html-box>
                  <!-- 精品推荐 -->
                  <img-list-box
                      v-if="item.style == '1'"
                      @detail="toDetail"
                      :imgLists="item.img">
                  </img-list-box>
                  <!-- 商品推荐 -->
                  <column-commodity-list-box
                      v-if="item.style == '15'"
                      @detail="toCommodityDetail"
                      :columnLists="item">
                  </column-commodity-list-box>
                      <!--优惠专区-->
                      <discountZone v-if="item.style == '1'" @more="toDetail" @toDetail="toDetail"
                                    :discountZoneInfo="item">
                      </discountZone>
                  </div>
              </div>
          </van-tab>
      </van-tabs>
  </div>
</template>

<script>
    import htmlBox from "@/components/htmlBox/htmlBox";
    import imgListBox from "@/components/imgListBox/imgListBox";
    import columnCommodityListBox from "@/components/columnCommodityListBox/columnCommodityListBox";
    import discountZone from "@/components/discountZone/discountZone";
  export default {
    name: 'name',
    data () {
      return {
          active: 0,
          tabbaromponents: null, // 组件库
      }
    },
    props:["tabbar"],
    components: {
        htmlBox,
        imgListBox,
        columnCommodityListBox,
        discountZone
    },
    created(){
        // 初始化的时选中关爱屋
        this.tabbaromponents = this.tabbar.find((item)=>{
            return item.title === "关爱屋"
        });
        console.log(this.tabbaromponents)
    },
    methods: {
        onChange(name, title) {
            // 切换tab时判断展示哪个组件
            this.tabbaromponents = this.tabbar.find((item)=>{
                return item.title === title
            });
        },
        /**
         * 调用通用跳转
         * @param {object} item [通用跳转对象]
         */
        toDetail(item) {

            // 判断是否有通用跳转函数
            if (typeof this.$parent.gotoDetail === "function") {

                // 调用通用跳转
                this.$parent.gotoDetail(item);
            }
        },
        /**
         * 特定跳转商品详情
         * @param {object} item [跳转对象]
         */
        toCommodityDetail(item) {

            // 设置跳转参数
            Object.assign(item, {
                type: "2",
                to: item.id
            });

            // 调用通用跳转
            this.toDetail(item);
        },
    }
  }
</script>

<!-- Add "scoped" attribute to limit CSS to this component only -->
<style rel="stylesheet/less" lang="less">
    @import './tabBox';
</style>