|
@@ -24,10 +24,13 @@ Page({
|
|
|
usage: 87
|
|
|
},
|
|
|
showKeyboard: false,
|
|
|
- selectedAmount: null,
|
|
|
+ selectedAmount: 0,
|
|
|
customAmount: '',
|
|
|
inputFocus: false,
|
|
|
zdId:"",
|
|
|
+ amount: 0,
|
|
|
+ actualAmount: 0,
|
|
|
+ balance: 0
|
|
|
},
|
|
|
onLoad(options) {
|
|
|
const _this=this;
|
|
@@ -44,11 +47,12 @@ Page({
|
|
|
wx.hideLoading();
|
|
|
let apiReturnData = res.data;
|
|
|
_this.setData({
|
|
|
- amount: apiReturnData.data.yj, // 默认实缴金额为应缴金额
|
|
|
actualAmount: apiReturnData.data.yj, // 设置应缴金额
|
|
|
- balance: apiReturnData.data.ye, //余额
|
|
|
- zdId: apiReturnData.data.zdId // 对应的账单记录
|
|
|
+ balance: apiReturnData.data.ye, //余额
|
|
|
+ zdId: apiReturnData.data.zdId // 对应的账单记录
|
|
|
});
|
|
|
+ // 计算默认实缴金额
|
|
|
+ _this.calculateDefaultAmount();
|
|
|
},
|
|
|
fail(error) {
|
|
|
wx.hideLoading();
|
|
@@ -81,23 +85,61 @@ Page({
|
|
|
this.fetchPaymentData();
|
|
|
},
|
|
|
|
|
|
+ // 计算默认实缴金额
|
|
|
+ calculateDefaultAmount: function() {
|
|
|
+ const { actualAmount, balance } = this.data;
|
|
|
+ const difference = actualAmount - balance;
|
|
|
+
|
|
|
+ if (difference <= 0) {
|
|
|
+ this.setData({
|
|
|
+ amount: 0
|
|
|
+ });
|
|
|
+ } else {
|
|
|
+ this.setData({
|
|
|
+ amount: difference
|
|
|
+ });
|
|
|
+ }
|
|
|
+ },
|
|
|
+
|
|
|
+ // 验证实缴金额
|
|
|
+ validateAmount: function(amount) {
|
|
|
+ const { actualAmount, balance } = this.data;
|
|
|
+ const difference = actualAmount - balance;
|
|
|
+
|
|
|
+ if (difference <= 0) {
|
|
|
+ return amount > 0;
|
|
|
+ } else {
|
|
|
+ return amount >= difference;
|
|
|
+ }
|
|
|
+ },
|
|
|
+
|
|
|
// 选择快捷金额
|
|
|
selectAmount: function(e) {
|
|
|
- const amount = e.currentTarget.dataset.amount;
|
|
|
+ const amount = parseFloat(e.currentTarget.dataset.amount);
|
|
|
this.setData({
|
|
|
- amount: parseFloat(amount),
|
|
|
- selectedAmount: parseFloat(amount),
|
|
|
- customAmount: '' // 清空自定义金额
|
|
|
+ selectedAmount: amount,
|
|
|
+ amount: amount,
|
|
|
+ customAmount: ''
|
|
|
});
|
|
|
},
|
|
|
|
|
|
// 立即缴费
|
|
|
payNow: function() {
|
|
|
- if (this.data.amount <= 0) {
|
|
|
+ const { amount, actualAmount, balance } = this.data;
|
|
|
+
|
|
|
+ if (amount <= 0) {
|
|
|
wx.showToast({
|
|
|
title: '请输入缴费金额',
|
|
|
- icon: 'none',
|
|
|
- duration: 2000
|
|
|
+ icon: 'none'
|
|
|
+ });
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (actualAmount > 0 && amount + balance < actualAmount) {
|
|
|
+ const minPayment = actualAmount - balance;
|
|
|
+ wx.showToast({
|
|
|
+ title: '最低缴费金额:'+ minPayment + '元',
|
|
|
+ icon: 'none'
|
|
|
});
|
|
|
return;
|
|
|
}
|
|
@@ -120,7 +162,6 @@ Page({
|
|
|
dskey: app.globalData.currentAccountInfo.dsKey
|
|
|
},
|
|
|
success: res => {
|
|
|
- debugger
|
|
|
if(res.data.code === '200'){
|
|
|
wx.hideLoading();
|
|
|
console.log('预下单', res);
|
|
@@ -149,28 +190,13 @@ Page({
|
|
|
// const payStatus = parts[1];
|
|
|
wx.showToast({
|
|
|
title: errorMessage,
|
|
|
- icon: 'none', // 不显示图标
|
|
|
+ icon: 'none',
|
|
|
duration: 2000 // 持续2秒
|
|
|
});
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
})
|
|
|
- // 模拟支付
|
|
|
- // setTimeout(() => {
|
|
|
- // wx.hideLoading();
|
|
|
- // wx.showToast({
|
|
|
- // title: '缴费成功',
|
|
|
- // icon: 'success',
|
|
|
- // duration: 2000,
|
|
|
- // success: () => {
|
|
|
- // // 支付成功后返回首页
|
|
|
- // setTimeout(() => {
|
|
|
- // wx.navigateBack();
|
|
|
- // }, 2000);
|
|
|
- // }
|
|
|
- // });
|
|
|
- // }, 1500);
|
|
|
},
|
|
|
|
|
|
// 返回上一页
|
|
@@ -237,26 +263,78 @@ Page({
|
|
|
});
|
|
|
},
|
|
|
|
|
|
+ // 自定义金额输入
|
|
|
+ onCustomAmountInput: function(e) {
|
|
|
+ let value = e.detail.value;
|
|
|
+
|
|
|
+ // 只允许输入数字和小数点
|
|
|
+ value = value.replace(/[^\d.]/g, '');
|
|
|
+
|
|
|
+ // 处理前导零
|
|
|
+ if (value.startsWith('0')) {
|
|
|
+ // 如果只有一个0,保持不变
|
|
|
+ if (value.length === 1) {
|
|
|
+ // 保持原样
|
|
|
+ } else if (value.startsWith('0.')) {
|
|
|
+ // 如果是0.开头,保持原样
|
|
|
+ } else {
|
|
|
+ // 移除前导零,但保留单个0
|
|
|
+ value = value.replace(/^0+/, '');
|
|
|
+ if (value === '') value = '0';
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 处理小数点
|
|
|
+ if (value.includes('.')) {
|
|
|
+ const parts = value.split('.');
|
|
|
+ // 只保留第一个小数点
|
|
|
+ if (parts.length > 2) {
|
|
|
+ value = parts[0] + '.' + parts.slice(1).join('');
|
|
|
+ }
|
|
|
+ // 限制小数点后两位
|
|
|
+ if (parts[1].length > 2) {
|
|
|
+ value = parts[0] + '.' + parts[1].substring(0, 2);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ const amount = parseFloat(value) || 0;
|
|
|
+
|
|
|
+ this.setData({
|
|
|
+ customAmount: value,
|
|
|
+ amount: amount,
|
|
|
+ selectedAmount: 0
|
|
|
+ });
|
|
|
+ },
|
|
|
+
|
|
|
// 输入数字
|
|
|
inputNumber: function(e) {
|
|
|
const number = e.currentTarget.dataset.number;
|
|
|
let customAmount = this.data.customAmount;
|
|
|
|
|
|
// 处理小数点
|
|
|
- if (number === '.' && customAmount.includes('.')) {
|
|
|
- return;
|
|
|
- }
|
|
|
-
|
|
|
- // 限制小数点后两位
|
|
|
- if (customAmount.includes('.') && customAmount.split('.')[1].length >= 2 && number !== '.') {
|
|
|
- return;
|
|
|
- }
|
|
|
-
|
|
|
- // 处理首位为0的情况
|
|
|
- if (customAmount === '0' && number !== '.') {
|
|
|
- customAmount = number;
|
|
|
+ if (number === '.') {
|
|
|
+ if (customAmount.includes('.')) {
|
|
|
+ return; // 已经有小数点了,不能再输入
|
|
|
+ }
|
|
|
+ if (customAmount === '') {
|
|
|
+ customAmount = '0.'; // 如果直接输入小数点,前面补0
|
|
|
+ } else {
|
|
|
+ customAmount += '.';
|
|
|
+ }
|
|
|
} else {
|
|
|
- customAmount += number;
|
|
|
+ // 处理首位为0的情况
|
|
|
+ if (customAmount === '0' && number !== '.') {
|
|
|
+ customAmount = number;
|
|
|
+ } else {
|
|
|
+ // 限制小数点后两位
|
|
|
+ if (customAmount.includes('.')) {
|
|
|
+ const parts = customAmount.split('.');
|
|
|
+ if (parts[1].length >= 2) {
|
|
|
+ return; // 小数点后已经有两位了,不能再输入
|
|
|
+ }
|
|
|
+ }
|
|
|
+ customAmount += number;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
// 更新金额
|
|
@@ -291,47 +369,6 @@ Page({
|
|
|
});
|
|
|
},
|
|
|
|
|
|
- // 添加自定义金额输入处理函数
|
|
|
- onCustomAmountInput: function(e) {
|
|
|
- let value = e.detail.value;
|
|
|
-
|
|
|
- // 只允许数字和小数点,且小数点后最多两位
|
|
|
- if (value) {
|
|
|
- // 移除非数字和小数点字符
|
|
|
- value = value.replace(/[^\d.]/g, '');
|
|
|
-
|
|
|
- // 确保只有一个小数点
|
|
|
- const parts = value.split('.');
|
|
|
- if (parts.length > 2) {
|
|
|
- value = parts[0] + '.' + parts.slice(1).join('');
|
|
|
- }
|
|
|
-
|
|
|
- // 处理前导零
|
|
|
- if (parts[0]) {
|
|
|
- parts[0] = parts[0].replace(/^0+/, '') || '0';
|
|
|
- }
|
|
|
-
|
|
|
- // 限制小数点后最多两位
|
|
|
- if (parts.length === 2 && parts[1].length > 2) {
|
|
|
- parts[1] = parts[1].substring(0, 2);
|
|
|
- }
|
|
|
-
|
|
|
- // 重新组合数字
|
|
|
- value = parts.join('.');
|
|
|
-
|
|
|
- // 限制总长度小于8位(包含小数点)
|
|
|
- if (value.length > 7) {
|
|
|
- value = value.substring(0, 7);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- this.setData({
|
|
|
- customAmount: value,
|
|
|
- selectedAmount: 0, // 清除其他金额选择
|
|
|
- amount: value || '0.00' // 更新显示金额
|
|
|
- });
|
|
|
- },
|
|
|
-
|
|
|
// 输入框获得焦点
|
|
|
onInputFocus: function() {
|
|
|
this.setData({
|