index.js 2.85 KB
import {
    FETCH_HOME_REQUEST,
    FETCH_HOME_FAILURE,
    FETCH_HOME_SUCCESS,
    FETCH_CHANNEL_REQUEST,
    FETCH_CHANNEL_SUCCESS,
    FETCH_CHANNEL_FAILURE
} from './types';
import {
    HOME_CONTENT_CODE,
    CHANNEL_MAN_CONTENT_CODE,
    CHANNEL_WOMEN_CONTENT_CODE
} from '../content-code';
import _ from 'lodash';

export default {
    state: {
        home: {},
        gender: 'men',
        men: {
            sort: {},
            data: {},
            isFetching: false
        },
        women: {
            sort: {},
            data: {},
            isFetching: false
        },
        fethingHome: false,
    },
    mutations: {
        [FETCH_HOME_REQUEST](state) {
            state.fethingHome = true;
        },
        [FETCH_HOME_FAILURE](state) {
            state.fethingHome = false;
        },
        [FETCH_HOME_SUCCESS](state, {data}) {
            state.fethingHome = false;
            state.home = data;
        },
        [FETCH_CHANNEL_REQUEST](state, gender) {
            state.gender = gender;
            state[gender].isFetching = true;
        },
        [FETCH_CHANNEL_FAILURE](state) {
            state[state.gender].isFetching = false;
        },
        [FETCH_CHANNEL_SUCCESS](state, {data, sort}) {
            const keyCvt = {
                men: 'MEN男士',
                women: 'WOMEN女士',
            };

            state[state.gender].isFetching = false;

            // mock data
            data.splice(1, 0 , {
                category: true
            });
            state[state.gender].data = data;
            state[state.gender].sort = sort[keyCvt[state.gender]];
        },
    },
    actions: {
        async [FETCH_HOME_REQUEST]({commit, state}) {
            // if (!_.isEmpty(state.home)) {
            //     return Promise.resolve(state.home);
            // }
            commit(FETCH_HOME_REQUEST);
            try {
                const result = await this.$api.get('/resource/get', {content_code: HOME_CONTENT_CODE});

                commit(FETCH_HOME_SUCCESS, result);
                return result;
            } catch (e) {
                console.error(e);
                commit(FETCH_HOME_FAILURE);
            }
        },
        async [FETCH_CHANNEL_REQUEST]({commit}, gender) {
            commit(FETCH_CHANNEL_REQUEST, gender);

            try {
                const result = await this.$api.get('/resource/get', {
                    content_code: gender === 'men' ? CHANNEL_MAN_CONTENT_CODE : CHANNEL_WOMEN_CONTENT_CODE
                });

                const sort = await this.$api.get('/sort/list', {
                    channel: gender
                });

                commit(FETCH_CHANNEL_SUCCESS, {data: result.data, sort: sort.data});
                return result;
            } catch (e) {
                console.error(e);
                commit(FETCH_CHANNEL_FAILURE);
            }
        }
    }
};