brand-product-list.vue 1.62 KB
<template>
  <layout-app title="商品列表" class="brand-product-list">
    <div class="scroll-view" ref="scroll">
      <div class="list-wrapper" v-if="brandProductList != null">
        <product-list :list="brandProductList" priceKey="price"/>
      </div>
    </div>
  </layout-app>
</template>

<script>
import { createNamespacedHelpers } from 'vuex';
import ScrollView from 'components/layout/scroll-view';
import ProductList from '../list/components/productList';

const STORE_PATH = 'product';
const { mapActions, mapState } = createNamespacedHelpers(STORE_PATH);

export default {
  name: 'BrandProductList',
  props: ['productId'],
  components: {
    ProductList,
    ScrollView,
  },
  data() {
    return {
      inLoading: false,
      scrollOption: {
        pullDownRefresh: {
          threshold: 70,
          stop: 90,
          txt: '更新成功'
        },
        observeDOM: false,
        pullUpLoad: false,
      },
    };
  },
  computed: {
    ...mapState(['topLists']),
    brandProductList() {
      return this.topLists[this.$route.params.productId];
    },
  },
  asyncData({store, router}) {
    return store.dispatch(`${STORE_PATH}/fetchBrandTop`, {productId: router.params.productId});
  },
  activated() {
    if (this.$refs.scroll) {
      this.$refs.scroll.scrollTop = 0;
    }
  },
  methods: {
    ...mapActions(['fetchBrandTop']),
    onPullingDown() {
      this.fetchBrandTop({productId: this.productId});
    },
  },
};
</script>

<style lang="scss" scoped>
  .brand-product-list .scroll-view {
    background: #f5f5f5;
    height: 100%;
    overflow: auto;
    -webkit-overflow-scrolling: touch;
  }
</style>