cash-out.vue 7.58 KB
Newer Older
1 2
<template>
  <div class="cash-out">
leiqingsong's avatar
leiqingsong committed
3
    <van-cell-group style="margin-bottom: 10px">
leiqingsong's avatar
leiqingsong committed
4
      <van-cell is-link title="所属银行" :value="bank" @click="jumpToBank" />
5 6 7
    </van-cell-group>
    <div class="detail">
      <p style="font-size: 24px">提现金额</p>
leiqingsong's avatar
leiqingsong committed
8 9 10 11 12 13
      <van-field
        v-model="money"
        type="number"
        label="¥"
        class="money"
        @blur="onFillMoneyBlur"
14
        @input="inputClick"
leiqingsong's avatar
leiqingsong committed
15
      />
16 17 18 19
      <div class="remain">
        <span style="color: #666666"
          >可提现金额{{ remainMoney.toFixed(2) }}</span
        >
leiqingsong's avatar
leiqingsong committed
20
        <span v-if="remainMoney > 0" class="all" @click="allIn">全部提现</span>
21 22 23 24
      </div>
      <div class="real">
        <p class="real-item">
          <span>实际到账</span>
leiqingsong's avatar
leiqingsong committed
25
          <span>{{ account }}</span>
26 27 28
        </p>
        <p class="real-item">
          <span>税款</span>
leiqingsong's avatar
leiqingsong committed
29
          <span>{{ rate }}</span>
30 31 32 33
        </p>
        <p class="explain">
          <span>扣税说明</span>
          <img
34
            @click="taxtClick"
35 36 37 38 39
            class="explain-img"
            src="@/assets/images/explain.png"
            alt="解释"
          />
        </p>
40
        <p class="explain">
leiqingsong's avatar
leiqingsong committed
41
          <span>{{ this.textName }}</span>
42
        </p>
43 44
      </div>
    </div>
leiqingsong's avatar
leiqingsong committed
45 46 47 48 49
    <div style="padding: 10px 16px">
      <van-button type="primary" size="large" @click="onCashOut"
        >提现</van-button
      >
    </div>
50 51 52 53 54 55
    <base-dialog
      base-dialog-title="提现"
      base-dialog-btn="提交"
      :base-dialog-show="validCodeDialogShow"
      :base-dialog-show-close="true"
      @onClick="onSubmit"
全球's avatar
全球 committed
56
      @onClose="onCloseDialog"
57 58
    >
      <div slot="content">
leiqingsong's avatar
leiqingsong committed
59
        <p class="content-text">请输入手机号{{ userPhone }}的动态验证码</p>
60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86
        <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>
87 88 89 90
  </div>
</template>

<script>
leiqingsong's avatar
leiqingsong committed
91
import { getWithdrawalAmount } from "@/api/wallet";
leiqingsong's avatar
leiqingsong committed
92
import { getUserBankInfo, sendSms, cashOut, getTaxRate } from "@/api/bank";
93
import BaseDialog from "@/components/BaseDialog.vue";
94
export default {
95
  components: { BaseDialog },
96 97 98
  name: "CashOut",
  data() {
    return {
leiqingsong's avatar
leiqingsong committed
99
      userPhone:JSON.parase(localStorage.getItem('user')).userId,
100
      bank: "",
leiqingsong's avatar
leiqingsong committed
101
      money: null,
leiqingsong's avatar
leiqingsong committed
102 103
      account: 0,
      rate: 0,
leiqingsong's avatar
leiqingsong committed
104
      remainMoney: 100,
105 106 107 108
      resultDialogTitle: "",
      resultDialogTip: "",
      resultDialogImg: "",
      resultDialog: false,
leiqingsong's avatar
leiqingsong committed
109
      textName: "",
leiqingsong's avatar
leiqingsong committed
110 111
      validCodeDialogShow: false,
      validCode: null
112 113
    };
  },
leiqingsong's avatar
leiqingsong committed
114 115
  created() {
    this.getUserInfo();
leiqingsong's avatar
leiqingsong committed
116
    this.canCashOut();
leiqingsong's avatar
leiqingsong committed
117
  },
118
  methods: {
leiqingsong's avatar
leiqingsong committed
119 120
    onFillMoneyBlur(e) {
      if (e.target.value > this.remainMoney) {
leiqingsong's avatar
leiqingsong committed
121 122
        this.$toast.fail("输入超过可提现金额,请重新输入");
        return false;
leiqingsong's avatar
leiqingsong committed
123 124
      }
    },
leiqingsong's avatar
leiqingsong committed
125 126 127 128
    inputClick() {
      this.rate = this.money * 0.02;
      this.account = this.money - this.rate;
    },
leiqingsong's avatar
leiqingsong committed
129 130
    canCashOut() {
      const params = {
leiqingsong's avatar
leiqingsong committed
131
        userId:JSON.parase(localStorage.getItem('user')).userId
leiqingsong's avatar
leiqingsong committed
132 133 134 135 136 137 138 139
      };
      getWithdrawalAmount(params).then(res => {
        if (res.code === 0) {
          this.remainMoney = res.data.currentMoneyCan;
        } else {
          this.remainMoney = 100;
        }
      });
leiqingsong's avatar
leiqingsong committed
140
      getWithdrawalAmount;
leiqingsong's avatar
leiqingsong committed
141
    },
leiqingsong's avatar
leiqingsong committed
142 143 144 145 146
    jumpToBank() {
      console.log("1");
      this.$router.push("/bank");
    },
    // 全部提现
147 148
    allIn() {
      this.money = this.remainMoney;
leiqingsong's avatar
leiqingsong committed
149
    },
leiqingsong's avatar
leiqingsong committed
150
    // 点击提现
leiqingsong's avatar
leiqingsong committed
151 152 153 154 155
    onCashOut() {
      if (!this.money) {
        this.$toast.fail("未输入提现金额");
        return;
      }
leiqingsong's avatar
leiqingsong committed
156
      if (this.money > this.remainMoney) {
leiqingsong's avatar
leiqingsong committed
157 158
        this.$toast.fail("输入超过可提现金额,请重新输入");
        return;
leiqingsong's avatar
leiqingsong committed
159
      }
leiqingsong's avatar
leiqingsong committed
160
      const params = {
leiqingsong's avatar
leiqingsong committed
161
        userId:JSON.parase(localStorage.getItem('user')).userId
leiqingsong's avatar
leiqingsong committed
162 163
      };
      sendSms(params).then();
leiqingsong's avatar
leiqingsong committed
164 165
      this.validCode = null;
      this.validCodeDialogShow = true;
166
    },
leiqingsong's avatar
leiqingsong committed
167 168 169 170 171 172 173 174 175 176
    taxtClick() {
      const params = {
        money: 1
      };
      getTaxRate(params).then(res => {
        if (res.code === 0) {
          this.textName = res.data.taxDesc;
        }
      });
    },
leiqingsong's avatar
leiqingsong committed
177 178
    getUserInfo() {
      const params = {
leiqingsong's avatar
leiqingsong committed
179
        userId:JSON.parase(localStorage.getItem('user')).userId
leiqingsong's avatar
leiqingsong committed
180 181 182
      };
      getUserBankInfo(params).then(res => {
        if (res.code === 0) {
leiqingsong's avatar
leiqingsong committed
183 184 185 186 187
          if (res.data.bankName) {
            this.bank = res.data.bankName;
          } else {
            this.bank = "";
          }
leiqingsong's avatar
leiqingsong committed
188 189 190
        }
      });
    },
leiqingsong's avatar
leiqingsong committed
191 192 193
    onCloseDialog() {
      this.validCodeDialogShow = false;
    },
194 195
    onSubmit() {
      this.validCodeDialogShow = false;
leiqingsong's avatar
leiqingsong committed
196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215
      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);
        });
216 217 218
    },
    onSuccess() {
      this.resultDialog = false;
219 220 221 222 223 224 225 226
    }
  }
};
</script>

<style lang="scss" scoped>
.cash-out {
  padding: 10px 0;
leiqingsong's avatar
leiqingsong committed
227
  font-family: PingFang-SC-Medium;
228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292
  .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;
        }
      }
    }
  }
}
293 294 295 296
.content-text {
  width: 185px;
  margin: 25px auto;
  text-align: center;
leiqingsong's avatar
leiqingsong committed
297
  font-family: PingFang-SC-Medium;
298 299 300
  font-size: 14px;
  color: #333333;
}
leiqingsong's avatar
leiqingsong committed
301 302 303 304 305
.validCodeInput {
  width: 245px;
  margin: 10px auto;
  background-color: #f9f9f9;
  border-radius: 20px;
306 307 308 309
  .van-field__left-icon {
    display: flex;
    align-items: center;
  }
leiqingsong's avatar
leiqingsong committed
310 311 312 313 314
  .valid-code {
    width: 16px;
    height: 18px;
  }
}
315
</style>