• uniapp-提现功能(demo)


    页面布局
    提现页面 有一个输入框 一个提现按钮 一段提现全部的文字

    首先用v-model 和data内的数据双向绑定

    输入框逻辑分析
    输入框的逻辑 为了符合日常输出 所以要对输入框加一些条件限制

    因为是提现 所以对输入的字符做筛选,只允许出现小数点和数字 这里用正则实现的
    小数点后只能输入两位小数, 超过两位的去除掉 因为提现的最小金额是两位数
    .前面如果没有数字 就自动补零(首个字符为.的时候)
    只能输入一个小数点
    输入的金额要小于等于余额 如果大于,就把余额赋值给提现的金额
    点击全部提现,也是把余额赋值给提现金额

    1. "number" step="0.01" min="0" v-model="withdrawMoney" @input="validateInput">
    2. <view class="btn" @click="apply">提现申请view>
    3. // 对输入的金额做处理
    4. validateInput(e) {
    5. let inputValue = e.detail.value;
    6. let integerPart = parseInt(inputValue); // 整数
    7. let decimalPart = inputValue - parseInt(inputValue); // 小数
    8. // 移除非数字和小数点以外的字符
    9. inputValue = inputValue.replace(/[^0-9.]/g, '');
    10. // 小数点只能输入两位小数,并去除多余的
    11. if (inputValue.includes('.')) {
    12. if (inputValue.indexOf('.') === inputValue.length - 1) {
    13. decimalPart = '.'
    14. } else if (inputValue.indexOf('.') === inputValue.length - 2) {
    15. if (decimalPart == 0) {
    16. decimalPart = '.0'
    17. } else {
    18. decimalPart = parseFloat(decimalPart);
    19. }
    20. } else {
    21. decimalPart = inputValue.substr(inputValue.indexOf('.') + 1, 2);
    22. decimalPart = parseFloat(decimalPart / 100)
    23. console.log(decimalPart)
    24. }
    25. }
    26. // 整数部分补0,只针对第一位数字为0的情况
    27. if (inputValue.length === 1 && inputValue === '0') {
    28. inputValue = '';
    29. console.log(integerPart)
    30. } else if (inputValue[0] === '.') {
    31. integerPart = ''
    32. console.log(integerPart, decimalPart, inputValue)
    33. } else if (inputValue[0] !== '.') {
    34. inputValue = inputValue
    35. console.log(integerPart, decimalPart, inputValue)
    36. if (integerPart[0] === '0' && integerPart.length >= 1) {
    37. integerPart = integerPart.substr(1);
    38. console.log(integerPart)
    39. }
    40. }
    41. // // 整数部分补0,只针对没有其他整数的情况
    42. if (integerPart === '' && decimalPart === '') {
    43. integerPart = '0';
    44. } else if (integerPart === '' && decimalPart !== '') {
    45. integerPart = 0;
    46. }
    47. // 如果输入的值大于余额,则强制转换为余额值
    48. if (parseFloat(inputValue) > this.amount) {
    49. inputValue = this.amount;
    50. } else {
    51. console.log(integerPart, decimalPart)
    52. inputValue = integerPart + decimalPart; // 重新组合整数部分和小数部分,并更新v-model的值
    53. }
    54. this.$nextTick(() => {
    55. console.log(inputValue)
    56. this.withdrawMoney = inputValue
    57. });
    58. },
    59. // 全部提现
    60. handleAllWithdraw () {
    61. this.withdrawMoney = this.amount
    62. },
    63. // 提现
    64. async apply() {
    65. const data = {
    66. amount: this.withdrawMoney,
    67. type: "weixin"
    68. }
    69. await takeMoney(data)
    70. .then(result => {
    71. // 成功
    72. this.amount = this.amount - this.withdrawMoney
    73. this.withdrawMoney = ''
    74. uni.showToast({
    75. title: '申请提现成功',
    76. icon: 'success',
    77. duration: 1000
    78. });
    79. })
    80. .catch(error => {
    81. // 失败
    82. this.withdrawMoney = ''
    83. uni.showToast({
    84. title: '申请提现失败',
    85. icon: 'none',
    86. duration: 2000
    87. });
    88. })
    89. }

  • 相关阅读:
    webrtc部分手机黑屏的原因排查
    【AREngine BUG & 解决方法】无法获取有效的相机图像尺寸
    2023国庆自驾游:山东
    PowerShell系列(十二):PowerShell Cmdlet高级参数介绍(二)
    河北安新复合型水稻 国稻种芯·中国水稻节:雄安生态示范区
    静态 友元 常量
    把函数放在线程中执行碰到的问题及解决:
    Prometheus的Pushgateway快速部署及使用
    SSM+基于Vue框架的在线投票系统的设计与实现 毕业设计-附源码221604
    leetcode-每日一题-813-最大平均值和的分组(中等,dp)
  • 原文地址:https://blog.csdn.net/weixin_57031986/article/details/136238717