From cb8e6eeb1357c28a43d4dda6d0477018445924c9 Mon Sep 17 00:00:00 2001 From: woody Date: Thu, 3 Jul 2025 16:44:18 +0800 Subject: [PATCH] =?UTF-8?q?feat(pay/success):=20=E6=94=AF=E4=BB=98?= =?UTF-8?q?=E6=88=90=E5=8A=9F=E9=80=BB=E8=BE=91=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- App.vue | 11 +++++----- package-lock.json | 50 +++++++++++++++++++++++++++++++++++++++++++ package.json | 1 + pages/pay/success.vue | 49 ++++++++++++++++++++++++++---------------- 4 files changed, 87 insertions(+), 24 deletions(-) diff --git a/App.vue b/App.vue index 406fe7e..5acc5a1 100644 --- a/App.vue +++ b/App.vue @@ -1,4 +1,3 @@ - diff --git a/package-lock.json b/package-lock.json index c5ac26d..60403a1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -17,6 +17,7 @@ "js-cookie": "^3.0.5", "qrcodejs2": "0.0.2", "swiper": "^3.4.2", + "vconsole": "^3.15.1", "vue-clipboard2": "^0.3.3", "vue-i18n": "^9.2.2", "vue-tree-color": "^2.3.2", @@ -62,6 +63,15 @@ "node": ">=6.0.0" } }, + "node_modules/@babel/runtime": { + "version": "7.27.6", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.27.6.tgz", + "integrity": "sha512-vbavdySgbTTrmFE+EsiqUTzlOr5bzlnJtUv9PynGCAKvfQqjIXbvFdumPM/GxMDfyuGMJaJAU6TO4zc1Jf1i8Q==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/types": { "version": "7.27.0", "resolved": "https://mirrors.cloud.tencent.com/npm/@babel/types/-/types-7.27.0.tgz", @@ -1819,6 +1829,29 @@ "node": ">=0.10.0" } }, + "node_modules/copy-text-to-clipboard": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/copy-text-to-clipboard/-/copy-text-to-clipboard-3.2.0.tgz", + "integrity": "sha512-RnJFp1XR/LOBDckxTib5Qjr/PMfkatD0MUCQgdpqS8MdKiNUzBjAQBEN6oUy+jW7LI93BBG3DtMB2KOOKpGs2Q==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/core-js": { + "version": "3.43.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.43.0.tgz", + "integrity": "sha512-N6wEbTTZSYOY2rYAn85CuvWWkCK6QweMn7/4Nr3w+gDBeBhk/x4EJeY6FPo4QzDoJZxVTv8U7CMvgWk6pOHHqA==", + "hasInstallScript": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, "node_modules/core-util-is": { "version": "1.0.3", "resolved": "https://mirrors.cloud.tencent.com/npm/core-util-is/-/core-util-is-1.0.3.tgz", @@ -4349,6 +4382,11 @@ "dev": true, "peer": true }, + "node_modules/mutation-observer": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/mutation-observer/-/mutation-observer-1.0.3.tgz", + "integrity": "sha512-M/O/4rF2h776hV7qGMZUH3utZLO/jK7p8rnNgGkjKUw8zCGjRQPxB8z6+5l8+VjRUQ3dNYu4vjqXYLr+U8ZVNA==" + }, "node_modules/nan": { "version": "2.22.2", "resolved": "https://mirrors.cloud.tencent.com/npm/nan/-/nan-2.22.2.tgz", @@ -6455,6 +6493,18 @@ "base64-arraybuffer": "^1.0.2" } }, + "node_modules/vconsole": { + "version": "3.15.1", + "resolved": "https://registry.npmjs.org/vconsole/-/vconsole-3.15.1.tgz", + "integrity": "sha512-KH8XLdrq9T5YHJO/ixrjivHfmF2PC2CdVoK6RWZB4yftMykYIaXY1mxZYAic70vADM54kpMQF+dYmvl5NRNy1g==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.17.2", + "copy-text-to-clipboard": "^3.0.1", + "core-js": "^3.11.0", + "mutation-observer": "^1.0.3" + } + }, "node_modules/vm-browserify": { "version": "1.1.2", "resolved": "https://mirrors.cloud.tencent.com/npm/vm-browserify/-/vm-browserify-1.1.2.tgz", diff --git a/package.json b/package.json index 832d13c..fa975b2 100644 --- a/package.json +++ b/package.json @@ -12,6 +12,7 @@ "js-cookie": "^3.0.5", "qrcodejs2": "0.0.2", "swiper": "^3.4.2", + "vconsole": "^3.15.1", "vue-clipboard2": "^0.3.3", "vue-i18n": "^9.2.2", "vue-tree-color": "^2.3.2", diff --git a/pages/pay/success.vue b/pages/pay/success.vue index 9830317..bd027a5 100644 --- a/pages/pay/success.vue +++ b/pages/pay/success.vue @@ -45,7 +45,8 @@ import { mapGetters } from 'vuex' import { payStatus, registerInfo } from '@/config/pay.js' import successDialog from '@/components/successDialog.vue' -let setTimeoutFlag = null +let paySetTimeoutFlag = null +let getRegisterInfoTimeoutFlag = null export default { name: 'PaySuccess', components: { @@ -76,38 +77,50 @@ export default { this.specialArea = extParam.specialArea this.isRecharge = extParam.source this.orderCode = extParam.orderCode || '' - this.orderCode && this.pollingPayStatus(this.orderCode) + if (this.orderCode) { + setTimeout(() => { + this.pollingPayStatus(this.orderCode) + }, 500) + } // 设置导航栏 uni.setNavigationBarTitle({ title: '支付成功', }) }, onUnload() { - clearTimeout(setTimeoutFlag) + clearTimeout(paySetTimeoutFlag) + clearTimeout(getRegisterInfoTimeoutFlag) }, methods: { + getRegisterInfo() { + registerInfo(this.orderCode).then(res => { + if (res.data) { + uni.hideLoading() + this.$refs.successDialog.showSuccess(res.data) + } else { + getRegisterInfoTimeoutFlag = setTimeout(() => { + this.getRegisterInfo() + }, 3000) + } + }) + }, pollingPayStatus(orderCode) { payStatus({ businessCode: orderCode }).then(res => { if (res.data == 1) { - // 清除定时器 - clearTimeout(setTimeoutFlag) + clearTimeout(paySetTimeoutFlag) if ([1, 7, 24].includes(Number(this.specialArea))) { + uni.showLoading({ + title: '注册信息加载中...', + mask: false, + }) setTimeout(() => { - registerInfo(orderCode).then(res => { - this.$refs.successDialog.showSuccess(res.data) - }) - }, 300) + this.getRegisterInfo() + }, 2000) } } else { - payStatus({ businessCode: orderCode }).then(res => { - if (res.data == 0) { - setTimeoutFlag = setTimeout(() => { - this.pollingPayStatus(orderCode) - }, 1000) - } else { - clearTimeout(setTimeoutFlag) - } - }) + paySetTimeoutFlag = setTimeout(() => { + this.pollingPayStatus(orderCode) + }, 1000) } }) },