order-list.js 3.84 KB
const initailData = () => ({
  page: 1,
  pageSize: 10,
  pagetotal: 0,
  orderList: [], // 订单列表
  // scroll 组件参数,是否触发上拉事件
  pullUpLoad: true,

  // 当前查询订单状态
  currentStatus: 1,
  isShowEmpty: false,
});

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

        state.isShowEmpty = page === 1 && data.length === 0;
        state.page = ++page;
        state.pagetotal = pagetotal;
        state.orderList = state.orderList.concat(data);

        // 分页结束
        if (page > pagetotal) {
          state.pullUpLoad = false;
        }
      },
      filterOrderList(state, orderCode) {
        state.orderList = state.orderList.filter(
          order => order.orderCode !== orderCode,
        );
        state.isShowEmpty = state.orderList.length === 0;
      },
      setOrderStatus(state, currentStatus) {
        if (currentStatus) {
          state.currentStatus = +currentStatus;
        }
      },
      resetPartialData(state) {
        state.page = 1;
        state.orderList = [];
        state.pagetotal = 0;
        state.pullUpLoad = true;
      },
      resetData(state) {
        const s = initailData();

        Object.keys(s).forEach(key => {
          if (key !== 'currentStatus') {
            state[key] = s[key];
          }
        });
      },
    },
    actions: {
      /**
       *  获取订单列表
       * @param {*}  param0 vue store context
       * @param {
       *  owner: 订单来源
       *  status: 订单状态 默认全部
       * }
       * r
       */
      async fetchOrderList(
        {
          commit,
          state: { page, currentStatus },
        },
        param = {},
      ) {
        const { owner, status } = param;
        const res = await this.$api.get('/api/order/list', {
          tabType: owner,
          type: status || currentStatus,
          page,
        });

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

      /**
       * 删除订单
       * @param {
       * orderCode: 订单编码
       * owner: 订单来源 buy | sell
       * } param1
       */
      async deleteOrder({ commit }, { orderCode, owner }) {
        // owner: ownType
        const res = await this.$api.get(`/api/${owner}/order/delete`, {
          orderCode,
        });
        const { code, data } = res;

        // data 为true时删除成功
        if (code === 200) {
          if (data) {
            commit('filterOrderList', orderCode);
          }
        }
        return data;
      },

      /**
       * 取消订单
       * 买家取消购买
       * 卖家取消出售
       *  @param {
       *   orderCode: 订单编码
       *   owner: 订单来源 buy | sell
       *  } param1
       */
      async cancelTrade(_, { orderCode, owner }) {
        const res = await this.$api.get(`/api/${owner}/trade/cancel`, {
          orderCode,
        });
        const isOk = res.code === 200 ? res.data : false;

        return isOk;
      },

      /**
       * 取消订单 提示信息
       * 买家取消购买
       * 卖家取消出售
       *  @param {
       *   orderCode: 订单编码
       *   owner: 订单来源 buy | sell
       *  } param1
       */
      async cancelTradeConfirmInfo(_, { orderCode, owner }) {
        const res = await this.$api.get(
          `/api/${owner}/trade/cancel/confirm/info`,
          { orderCode },
        );

        return res.code === 200 ? res.data : null;
      },

      /**
       * 确认收货
       */
      async confirmReceipt(_, { orderCode }) {
        const res = await this.$api.post('/api/buy/confirm/receipt', {
          orderCode,
        });

        return res.code === 200 ? res.data : null;
      },
    },
    getters: {},
  };
}