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

  // 当前查询订单状态
  currentStatus: null,
  routeParamStatus: null,
  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) {
        state.currentStatus = +currentStatus;
      },
      setRouteParamStatus(state, status = 1) {
        state.routeParamStatus = +status;
      },
      resetPartialData(state) {
        state.page = 1;
        state.orderList = [];
        state.pagetotal = 0;
        state.pullUpLoad = true;
      },
      resetData(state) {
        const s = initailData();
        const keyList = Object.keys(s);
        const keyBlackList = ['currentStatus', 'routeParamStatus'];

        for (const key of keyList) {
          if (!keyBlackList.includes(key)) {
            state[key] = s[key];
          }
        }
      },
    },
    actions: {
      /**
       *  获取订单列表
       * @param {*}  param0 vue store context
       * @param {
       *  owner: 订单来源
       *  status: 订单状态 默认全部
       * }
       * r
       */
      async fetchOrderList(
        {
          commit,
          state: { page, currentStatus, routeParamStatus },
        },
        param = {},
      ) {
        const { owner } = param;
        const res = await this.$api.get('/api/order/list', {
          tabType: owner,
          type: currentStatus || routeParamStatus || 1, // 1表示我的订单全部
          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;
      },

      // 买家调价计算
      async computeChangePrice(_, { orderCode, price }) {
        const res = await this.$api.get(
          '/api/order/buyerask/computechangeprice',
          {
            orderCode: `${orderCode}`,
            price: +price,
          },
        );

        return res.code === 200 ? res.data : res.message || '';
      },

      // 买家调价
      async confirmChangePrice(_, { orderCode, price }) {
        const res = await this.$api.post('/api/order/buyerask/changeprice', {
          orderCode: `${orderCode}`,
          price: +price,
        });

        if (res.code === 200) {
          return { errMsg: '', isOk: true , bidData: res.data};
        } else {
          return { errMsg: res.message, isOk: false };
        }
      },
    },
    getters: {},
  };
}