order-in-sale-action.js 2.88 KB
/* eslint-disable operator-linebreak */
/* eslint-disable space-before-function-paren */
import { orderActionsMap, ownType } from 'constants/order-constants';
import { createNamespacedHelpers } from 'vuex';
import DialogConfirmInfo from '../components/dialog-confirm-info';

const { mapActions } = createNamespacedHelpers('order/orderList');
const { mapMutations: inSaleMapMutations } = createNamespacedHelpers(
  'order/inSaleOrderList',
);

export default {
  methods: {
    ...mapActions(['cancelTradeConfirmInfo', 'cancelTrade']),
    ...inSaleMapMutations(['filterInSaleOrderList']),
    async onInSaleOrderAction({
      action,
      order,
      isDetail = false, // 是否是详情
      isInSale = false, // 是否是出售中
    } = {}) {
      const { owner = ownType.SELL, status } = this.$route.params;
      const { orderCode, earnestMoney = 0 } = order;

      switch (action.name) {
        case orderActionsMap.NOT_SOLD.name: {
          const confirmInfo = await this.cancelTradeConfirmInfo({
            orderCode,
            owner,
          });

          const confirmBtnText = confirmInfo.needPenalty
            ? '赔付并取消订单'
            : '不卖了';

          this.$createConfirmDialog(
            {
              confirmBtn: { text: confirmBtnText, style: { color: '#D0021B' } },
              cancelBtn: { text: '继续出售', active: true },
              onConfirm: async () => {
                const isOk = await this.cancelTrade({
                  orderCode,
                  owner,
                });

                if (isOk) {
                  if (isDetail) {
                    this.fetchOrderDetail(this.$route.params);
                  } else {
                    if (isInSale) {
                      this.filterInSaleOrderList(orderCode);
                    } else {
                      this.filterOrderList({
                        orderCode,
                        owner,
                        status,
                      });
                    }
                  }
                }
              },
            },
            createElement => {
              return [
                createElement(DialogConfirmInfo, {
                  props: { info: confirmInfo },
                  slot: 'content',
                }),
              ];
            },
          ).show();
          break;
        }
        case orderActionsMap.PAY_EARNESTMONEY.name: {
          const pageBackName = isDetail ? 'sellOrderDetail' : 'InSaleOrderList';

          this.$createOrderPayType({
            orderCode,
            price: parseFloat(`${earnestMoney}`).toFixed(2),
            desc: '保证金',

            // 支付成功会跳route
            extra: JSON.stringify({
              forward: {
                name: pageBackName,
              },
            }),
          }).show();
          break;
        }
        default:
          return;
      }
    },
  },
};