cash-out.vue 6.82 KB
<template>
  <div class="cash-out">
    <van-cell-group style="margin-bottom: 10px">
      <van-cell is-link title="所属银行" :value="bank" @click="jumpToBank" />
    </van-cell-group>
    <div class="detail">
      <p style="font-size: 24px">提现金额</p>
      <van-field
        v-model="money"
        type="number"
        label="¥"
        class="money"
        @blur="onFillMoneyBlur"
      />
      <div class="remain">
        <span style="color: #666666"
          >可提现金额{{ remainMoney.toFixed(2) }}</span
        >
        <span v-if="remainMoney > 0" class="all" @click="allIn">全部提现</span>
      </div>
      <div class="real">
        <p class="real-item">
          <span>实际到账</span>
          <span>94.19</span>
        </p>
        <p class="real-item">
          <span>税款</span>
          <span>6.34</span>
        </p>
        <p class="explain">
          <span>扣税说明</span>
          <img
            class="explain-img"
            src="@/assets/images/explain.png"
            alt="解释"
          />
        </p>
      </div>
    </div>
    <div style="padding: 10px 16px">
      <van-button type="primary" size="large" @click="onCashOut"
        >提现</van-button
      >
    </div>
    <base-dialog
      base-dialog-title="提现"
      base-dialog-btn="提交"
      :base-dialog-show="validCodeDialogShow"
      :base-dialog-show-close="true"
      @onClick="onSubmit"
    >
      <div slot="content">
        <p class="content-text">请输入手机号{{ userPhone }}的动态验证码</p>
        <van-field
          v-model="validCode"
          type="number"
          class="validCodeInput"
          placeholder="请输入"
        >
          <img
            slot="left-icon"
            class="valid-code"
            src="@/assets/images/验证码.png"
          />
        </van-field>
      </div>
    </base-dialog>
    <base-dialog
      :base-dialog-title="resultDialogTitle"
      :base-dialog-show="resultDialog"
      @onClick="onSuccess"
    >
      <div slot="content" style="text-align:center">
        <img :src="resultDialogImg" style="width: 70px; height: 76px" alt />
        <p style="margin:0;font-size:14px;color:#999999">
          {{ resultDialogTip }}
        </p>
      </div>
      <div></div>
    </base-dialog>
  </div>
</template>

<script>
import { getWithdrawalAmount } from "@/api/wallet";
import { getUserBankInfo, sendSms, cashOut } from "@/api/bank";
import BaseDialog from "@/components/BaseDialog.vue";
export default {
  components: { BaseDialog },
  name: "CashOut",
  data() {
    return {
      userPhone: this.$userId,
      bank: "",
      money: null,
      remainMoney: 100,
      resultDialogTitle: "",
      resultDialogTip: "",
      resultDialogImg: "",
      resultDialog: false,
      validCodeDialogShow: false,
      validCode: null
    };
  },
  created() {
    this.getUserInfo();
    this.canCashOut();
  },
  methods: {
    onFillMoneyBlur(e) {
      if (e.target.value > this.remainMoney) {
        this.$toast.fail("输入超过可提现金额,请重新输入");
        return false;
      }
    },
    canCashOut() {
      const params = {
        userId: this.$userId
      };
      getWithdrawalAmount(params).then(res => {
        if (res.code === 0) {
          this.remainMoney = res.data.currentMoneyCan;
        } else {
          this.remainMoney = 100;
        }
      });
      getWithdrawalAmount;
    },
    jumpToBank() {
      console.log("1");
      this.$router.push("/bank");
    },
    // 全部提现
    allIn() {
      this.money = this.remainMoney;
    },
    // 点击提现
    onCashOut() {
      if (!this.money) {
        this.$toast.fail("未输入提现金额");
        return;
      }
      if (this.money > this.remainMoney) {
        this.$toast.fail("输入超过可提现金额,请重新输入");
        return;
      }
      const params = {
        userId: this.$userId
      };
      sendSms(params).then();
      this.validCode = null;
      this.validCodeDialogShow = true;
    },
    getUserInfo() {
      const params = {
        userId: this.$userId
      };
      getUserBankInfo(params).then(res => {
        if (res.code === 0) {
          if (res.data.bankName) {
            this.bank = res.data.bankName;
          } else {
            this.bank = "";
          }
        }
      });
    },
    onSubmit() {
      this.validCodeDialogShow = false;
      const params = {
        code: this.validCode,
        money: this.money
      };
      cashOut(params)
        .then(res => {
          this.resultDialog = true;
          if (res.code === 0) {
            this.resultDialogTitle = "提现成功";
            this.resultDialogTip = "提现成功,请及时查收";
            this.resultDialogImg = require("@/assets/images/成功.png");
          } else {
            this.resultDialogTitle = "提现失败";
            this.resultDialogTip = "提现失败,验证码错误";
            this.resultDialogImg = require("@/assets/images/叉号.png");
          }
        })
        .catch(err => {
          this.$toast.fail(err.response.data.error);
        });
    },
    onSuccess() {
      this.resultDialog = false;
    }
  }
};
</script>

<style lang="scss" scoped>
.cash-out {
  padding: 10px 0;
  font-family: PingFang-SC-Medium;
  .bank {
    ::v-deep .van-field__control {
      text-align: right;
    }
  }
  .detail {
    height: 380px;
    padding: 10px 16px;
    background-color: #ffffff;

    .money {
      box-sizing: border-box;
      margin: 0 0 10px;
      border-bottom: 1px solid #eeeeee;
      ::v-deep .van-field__label {
        width: 16px;
        height: 21px;
        font-size: 28px;
        line-height: 20px;
        color: #333333;
      }

      ::v-deep .van-field__control {
        font-size: 23px;
        color: #333333;
      }
    }

    .remain {
      padding: 10px 16px;
      font-size: 12px;

      .all {
        padding-left: 20px;
        color: #88c678;
      }
    }

    .real {
      padding: 10px 16px;
      font-size: 14px;
      background-color: #f9f9f9;
      .real-item {
        display: flex;
        flex-wrap: nowrap;
        justify-content: space-between;
        align-items: center;
      }
      .explain {
        position: relative;
        span {
          color: #999999;
        }
        .explain-img {
          position: absolute;
          top: 50%;
          transform: translateY(-50%);
          width: 14px;
          height: 14px;
          margin-left: 8px;
        }
      }
    }
  }
}
.content-text {
  width: 185px;
  margin: 25px auto;
  text-align: center;
  font-family: PingFang-SC-Medium;
  font-size: 14px;
  color: #333333;
}
.validCodeInput {
  width: 245px;
  margin: 10px auto;
  background-color: #f9f9f9;
  border-radius: 20px;
  .van-field__left-icon {
    display: flex;
    align-items: center;
  }
  .valid-code {
    width: 16px;
    height: 18px;
  }
}
</style>