in-sale-order-list.js 3.12 KB
const initailData = () => ({
  entryOrder: {
    page: 1,
    pageSize: 10,
    pagetotal: 0,
    list: [], // 订单列表
    pullUpLoad: true,
  },
  notEntryOrder: {
    page: 1,
    pageSize: 10,
    pagetotal: 0,
    list: [], // 订单列表
    pullUpLoad: true,
  },
  isShowEmpty: false,
});

export default function() {
  return {
    namespaced: true,
    state: initailData,
    mutations: {
      setEntryOrder(state, res) {
        let { page, pagetotal, data = [] } = res;

        state.entryOrder.page = ++page;
        state.entryOrder.pagetotal = pagetotal;
        state.entryOrder.list = state.entryOrder.list.concat(data);

        // 分页结束
        if (page > pagetotal) {
          state.entryOrder.pullUpLoad = false;
        }
      },
      setNotEntryOrder(state, res) {
        let { page, pagetotal, data = [] } = res;

        state.isShowEmpty =
          state.entryOrder.list.length === 0 && page === 1 && data.length === 0;

        state.notEntryOrder.page = ++page;
        state.notEntryOrder.pagetotal = pagetotal;
        state.notEntryOrder.list = state.notEntryOrder.list.concat(data);

        // 分页结束
        if (page > pagetotal) {
          state.notEntryOrder.pullUpLoad = false;
        }
      },
      filterInSaleOrderList(state, orderCode) {
        state.entryOrder.list = state.entryOrder.list.filter(
          order => order.orderCode !== orderCode,
        );
        state.notEntryOrder.list = state.notEntryOrder.list.filter(
          order => order.orderCode !== orderCode,
        );

        state.isShowEmpty =
          state.entryOrder.list.length === 0 &&
          state.notEntryOrder.list.length === 0;
      },
      resetData(state) {
        const s = initailData();

        Object.keys(s).forEach(key => {
          state[key] = s[key];
        });
      },
    },
    getters: {
      // scroll 组件参数,是否触发上拉事件
      pullUpLoad: state =>
        state.entryOrder.pullUpLoad || state.notEntryOrder.pullUpLoad,
      orderList: state => {
        const {
          entryOrder: { list: entryOrderList },
          notEntryOrder: { list: notEntryOrderList },
        } = state;

        return entryOrderList.concat(notEntryOrderList);
      },
    },
    actions: {
      async fetchEntryOrderList({ dispatch, commit, state: { entryOrder } }) {
        const { page } = entryOrder;
        const res = await this.$api.post('/api/ufo/seller/entryPrdList', {
          page,

          // TODO 注释type含义
          type: 1,
        });

        if (res.code === 200) {
          const { data } = res;

          commit('setEntryOrder', data);
          const { pagetotal } = data;

          if (pagetotal === 0 || page > pagetotal) {
            return dispatch('fetchNotEntryOrderList');
          }
        }
      },
      async fetchNotEntryOrderList({ commit, state: { notEntryOrder } }) {
        const { page } = notEntryOrder;
        const res = await this.$api.post('/api/ufo/seller/notEntryPrdList', {
          page,
          type: 1,
        });

        if (res.code === 200) {
          commit('setNotEntryOrder', res.data);
        }
      },
    },
  };
}