hookehuyr

fix(api): 根据消息内容选择不同的提示方式

refactor(components): 添加加载状态禁用用户操作并优化协议检查逻辑

style(pages): 统一使用@tap替代@click事件绑定
......@@ -22,11 +22,21 @@ export const fn = (api) => {
} else {
// tslint:disable-next-line: no-console
console.warn(res);
Taro.showToast({
title: res.data.msg,
icon: 'none',
duration: 2000
});
// 如果res.data.msg里面文字包含计全付就使用 Taro.showModal显示
if (res.data.msg.includes('计全付')) {
Taro.showModal({
title: '提示',
content: res.data.msg,
showCancel: false,
confirmText: '关闭'
})
} else {
Taro.showToast({
title: res.data.msg,
icon: 'none',
duration: 2000
});
}
return false;
}
})
......
......@@ -44,13 +44,15 @@
<nut-button
type="default"
class="close-button"
:disabled="isLoading"
@click="handleClose"
>
关闭
</nut-button>
<nut-button
v-if="!hasAgreed"
:disabled="!isChecked"
:disabled="!isChecked || isLoading"
:loading="isLoading"
type="primary"
class="main-button"
color="orange"
......@@ -60,6 +62,8 @@
</nut-button>
<nut-button
v-else
:disabled="isLoading"
:loading="isLoading"
type="primary"
class="main-button"
color="orange"
......@@ -150,6 +154,9 @@ const bindStatus = ref({
auth_sign_url: ''
})
// loading状态
const isLoading = ref(false)
// 收款说明内容
const paymentDescription = ref('交易金额会在交易完成后的3个工作日内,入账至你登记的收款账户。')
......@@ -167,6 +174,7 @@ const protocolContent = ref(`
/**
* 检查用户是否已同意过协议
* @returns {Promise<boolean>} 返回用户是否已同意协议
*/
const checkAgreementStatus = async () => {
try {
......@@ -179,14 +187,17 @@ const checkAgreementStatus = async () => {
if (userStore.userInfo) {
userStore.userInfo.is_signed = result.data.is_signed
}
return hasAgreed.value
} else {
// 如果API调用失败,使用store中的数据作为备选
hasAgreed.value = userStore.userInfo?.is_signed || false
return hasAgreed.value
}
} catch (error) {
console.error('获取用户协议状态失败:', error)
// 如果API调用失败,使用store中的数据作为备选
hasAgreed.value = userStore.userInfo?.is_signed || false
return hasAgreed.value
}
}
......@@ -195,6 +206,9 @@ const checkAgreementStatus = async () => {
*/
const checkBindStatus = async () => {
try {
// 设置loading状态,禁用用户操作
isLoading.value = true
const result = await bindJeePayAPI()
if (result.code && result.data) {
......@@ -210,6 +224,9 @@ const checkBindStatus = async () => {
}
} catch (error) {
console.error('获取绑定状态失败:', error)
} finally {
// 重置loading状态,恢复用户操作
isLoading.value = false
}
}
......@@ -227,6 +244,9 @@ const handleAgree = async () => {
if (!isChecked.value) return
try {
// 设置loading状态
isLoading.value = true
// 调用API更新用户协议状态
const result = await updateProfileAPI({
is_signed: true
......@@ -244,6 +264,13 @@ const handleAgree = async () => {
}
} catch (error) {
console.error('更新协议状态失败:', error)
Taro.showToast({
title: '操作失败,请重试',
icon: 'none'
})
} finally {
// 重置loading状态
isLoading.value = false
}
}
......@@ -251,8 +278,18 @@ const handleAgree = async () => {
* 处理确认按钮点击
*/
const handleConfirm = async () => {
// 调用绑定接口
await handleBindJeePay()
try {
// 设置loading状态
isLoading.value = true
// 调用绑定接口
await handleBindJeePay()
} catch (error) {
console.error('确认操作失败:', error)
} finally {
// 重置loading状态
isLoading.value = false
}
}
/**
......@@ -334,6 +371,8 @@ const handleBindJeePay = async () => {
title: '网络错误,请重试',
icon: 'none'
})
// 重新抛出错误,让调用方处理loading状态
throw error
}
}
......@@ -344,10 +383,13 @@ const handleClose = () => {
emit('close')
}
// 组件挂载时检查协议状态绑定状态
// 组件挂载时检查协议状态,只有已同意协议才检查绑定状态
onMounted(async () => {
await checkAgreementStatus()
await checkBindStatus()
const isAgreed = await checkAgreementStatus()
// 只有用户已同意协议时才调用绑定接口
if (isAgreed) {
await checkBindStatus()
}
})
</script>
......
<!--
* @Date: 2022-09-19 14:11:06
* @LastEditors: hookehuyr hookehuyr@gmail.com
* @LastEditTime: 2025-08-07 15:36:39
* @LastEditTime: 2025-08-08 12:35:58
* @FilePath: /jgdl/src/pages/collectionSettings/index.vue
* @Description: 收款设置
-->
......@@ -186,11 +186,11 @@
@tap="previewIdcard1Img"
/>
<view class="idcard-img-actions">
<text class="change-img-btn" @click="changeIdcard1Img">重新上传</text>
<text class="delete-img-btn" @click="deleteIdcard1Img">删除</text>
<text class="change-img-btn" @tap="changeIdcard1Img">重新上传</text>
<text class="delete-img-btn" @tap="deleteIdcard1Img">删除</text>
</view>
</view>
<view v-else class="idcard-img-upload" @click="changeIdcard1Img">
<view v-else class="idcard-img-upload" @tap="changeIdcard1Img">
<text class="upload-icon">+</text>
<text class="upload-text">上传身份证人像面</text>
</view>
......@@ -209,11 +209,11 @@
@tap="previewIdcard2Img"
/>
<view class="idcard-img-actions">
<text class="change-img-btn" @click="changeIdcard2Img">重新上传</text>
<text class="delete-img-btn" @click="deleteIdcard2Img">删除</text>
<text class="change-img-btn" @tap="changeIdcard2Img">重新上传</text>
<text class="delete-img-btn" @tap="deleteIdcard2Img">删除</text>
</view>
</view>
<view v-else class="idcard-img-upload" @click="changeIdcard2Img">
<view v-else class="idcard-img-upload" @tap="changeIdcard2Img">
<text class="upload-icon">+</text>
<text class="upload-text">上传身份证国徽面</text>
</view>
......