index.js 4.49 KB
import {get} from 'lodash';
import Vue from 'vue';
import queryString from 'querystring';

function getJumpUrl(qs = {}) {
  return `//m.yohobuy.com/?${queryString.stringify(qs)}`;
}

export default function() {
  return {
    namespaced: true,
    state: {
      categoryParent: [],
      categorySubList: [],
    },
    mutations: {
      addCategoryParentList(state, {data}) {
        let categoryParent = [];
        let brand = {
          id: '-1',
          name: '品牌',
          image: '',
          linkType: '',
          index: 0,
          isSelect: true,
        };

        categoryParent.push(brand);
        if (data && data.length) {
          data.forEach((val, index) => {
            val.isSelect = false;
            val.index = index + 1;
            categoryParent.push(val);
          });
        }
        state.categoryParent = categoryParent;

      },

      addCategorySubList(state, {data}) {
        if(data && data.category){

            data.category.forEach((val, index) => {
                if(val && val.sub){
                    val.index = index + 1;
                    val.sub.forEach(item => {
                        if(item.linkType === 'h5'){
                            item.isShow = true;
                            item.url = item.link;
                        } else {
                          item.isShow = false;
                          item.url = getJumpUrl({
                            pagename: 'productList',
                            title: item.name,
                            [item.linkType]: item.link
                          });
                        }

                    })
                }
            });
            state.categorySubList = data.category;
        }
      },
      addBrandList(state, {data}){
          if(data && data.brand_list){
            let sub = [];
            let size = data.brand_list.length;

            data.brand_list.forEach((val, index) => {
                val.isSelect = false;

                let isShowBottomBordor = (size - index) > 3;
                let right = index % 3 !== 2 ? '-right' : '';
                let bottom = isShowBottomBordor ? '-bottom' : '';
                let subItem = {
                    id: val.id,
                    name: val.brand_name,
                    image: val.brand_logo,
                    linkType: 'brand',
                    link: val.id,
                    url: getJumpUrl({
                      pagename: 'productList',
                      title: val.brand_name,
                      brand: val.id,
                    }),
                    isShow: false,
                }

                sub.push(subItem);
            });
            let category = [{
                id: '0',
                image:'',
                type: 'brand',
                linkType:'brand',
                name:'全部品牌',
                index: 0,
                sub: sub,
            }];
            state.categorySubList = category;

          }
      },
      updateCategoryParentList(state, {id}) {
        if (id) {
            state.categoryParent.forEach((val, index) => {
                if(id === val.id){
                    val.isSelect = true;
                }else {
                    val.isSelect = false;
                }
                Vue.set(state.categoryParent, index, val);
            });
        }
      }
    },
    actions: {
      async fetchCategoryParentList({commit, state}) {

        const result = await this.$api.get('/api/ufo/category/saleCategory');
        if (result.code === 200) {
          commit('addCategoryParentList', {data: result.data});
        }

        return result.data ? result.data.length : 0;
      },
      async fetchBrandList({commit, state}, {id}) {
        if(id){
        commit('updateCategoryParentList', {id: id});
        }

        const result = await this.$api.get('/api/ufo/category/search/brandList');

        console.log(result);
        if (result.code === 200) {
          commit('addBrandList', {data: result.data});
        }

        return result.data ? result.data.length : 0;
      },
      async fetchCategorySubList({commit, state},{id, name}) {
        console.log(id+"===="+name)

        commit('updateCategoryParentList', {id: id});
        const result = await this.$api.get('/api/ufo/category/saleCategoryDetail',{ id });

        console.log(result);
        if (result.code === 200) {
          commit('addCategorySubList', {data: result.data});
        }

        return result.data ? result.data.length : 0;
      },
    },
  };
}