From 5d28477db9f692f1bdfe9c354859f1e5ad8b1079 Mon Sep 17 00:00:00 2001 From: gyq <875626088@qq.com> Date: Sat, 17 Jan 2026 15:10:54 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E4=BB=A3=E5=AE=A2=E4=B8=8B?= =?UTF-8?q?=E5=8D=95=E6=89=AB=E7=A0=81=E6=94=AF=E4=BB=98=E8=AE=A2=E5=8D=95?= =?UTF-8?q?=E7=8A=B6=E6=80=81=E6=9F=A5=E8=AF=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/order/pay.ts | 2 - src/utils/request.ts | 2 +- src/views/order/index/components/detail.vue | 6 +- src/views/order/index/components/orderEnum.js | 6 +- src/views/tool/Instead/components/order.vue | 153 +++++++++++++++++- .../tool/Instead/components/scan-pay.vue | 34 ++-- 6 files changed, 175 insertions(+), 28 deletions(-) diff --git a/src/api/order/pay.ts b/src/api/order/pay.ts index 57419ae..9879f16 100644 --- a/src/api/order/pay.ts +++ b/src/api/order/pay.ts @@ -3,7 +3,6 @@ import { Order_BaseUrl } from "@/api/config"; const baseURL = Order_BaseUrl + "/pay"; const Api = { // h5支付 - h5Pay(data: h5PayRequest) { return request({ url: `${baseURL}/h5Pay`, @@ -67,7 +66,6 @@ const Api = { params }); }, - }; export default Api; diff --git a/src/utils/request.ts b/src/utils/request.ts index 651dc5e..33e9e8a 100644 --- a/src/utils/request.ts +++ b/src/utils/request.ts @@ -91,7 +91,7 @@ service.interceptors.response.use( return; } ElMessage.error(formatErrorMsg(msg || "Error")); - return Promise.reject(new Error(formatErrorMsg(msg || "Error"))); + return Promise.reject(response.data); }, async (error: any) => { diff --git a/src/views/order/index/components/detail.vue b/src/views/order/index/components/detail.vue index 7ebb59a..f22ec88 100644 --- a/src/views/order/index/components/detail.vue +++ b/src/views/order/index/components/detail.vue @@ -33,7 +33,7 @@
订单类型
- {{ sendTypeFilter(detail.sendType) }} + {{ sendTypeFilter(detail.dineMode) }}
@@ -46,12 +46,12 @@
下单时间
-
{{ timeFilter(detail.createdAt) }}
+
{{ timeFilter(detail.createTime) }}
支付时间
- {{ timeFilter(detail.createdAt) }} + {{ timeFilter(detail.paidTime) }}
diff --git a/src/views/order/index/components/orderEnum.js b/src/views/order/index/components/orderEnum.js index 6724cf7..43e8e95 100644 --- a/src/views/order/index/components/orderEnum.js +++ b/src/views/order/index/components/orderEnum.js @@ -51,15 +51,15 @@ export default { label: "快递", }, { - key: "takeaway", + key: "take-away", label: "外卖", }, { - key: "takeself", + key: "take-out", label: "自提", }, { - key: "table", + key: "dine-in", label: "堂食", }, ], diff --git a/src/views/tool/Instead/components/order.vue b/src/views/tool/Instead/components/order.vue index 3c1ec4b..b5851fe 100644 --- a/src/views/tool/Instead/components/order.vue +++ b/src/views/tool/Instead/components/order.vue @@ -220,6 +220,25 @@ + + +
+
+
+ + {{ closeStateTime }}秒后可重新扫码 + 重新扫码 + +
+
+ + {{ closeStateTime }}秒后可关闭 + 关闭 + +
+
+
@@ -243,6 +262,7 @@ import discount from "./discount.vue"; import { ElLoading } from "element-plus"; import { ElMessage, ElMessageBox } from "element-plus"; import { BigNumber } from "bignumber.js"; +import { onUnmounted } from 'vue' // 配置BigNumber精度 BigNumber.set({ @@ -751,7 +771,12 @@ async function payOrder(payType, isScan, guazhangren) { } carts.clear(); } catch (error) { - console.log(error); + console.log('payOrder===', error); + // 启动状态查询 + if (error.code == 211) { + showCheckPayStauts.value = true + autoCheckOrder() + } clearTimeout(payTimer); loading.close(); } @@ -762,6 +787,102 @@ async function payOrder(payType, isScan, guazhangren) { } } +function clearAutoCheckOrder() { + clearInterval(timer.value) + timer.value = null +} + +// 关闭查询 +function closeScanCode() { + showCheckPayStauts.value = false; + reset() +} + +// 重新扫码 +function resetScanCode() { + reset() + showCheckPayStauts.value = false; + clearInterval(timer.value) + timer.value = null + + clearInterval(closeStateTimer.value) + closeStateTimer.value = null + + setTimeout(() => { + refScanPay.value.open(returnPayParams(), "scanCode") + }, 500) +} + +const closeState = ref(false) +const closeStateTime = ref(5); +const closeStateTimer = ref(null) + +function closeStateTimerFuc() { + closeStateTimer.value = setInterval(() => { + closeStateTime.value-- + if (closeStateTime.value <= 0) { + clearInterval(closeStateTimer.value) + closeStateTimer.value = null + closeState.value = true + } + }, 1000) +} + +// 自动查询订单状态 +const timer = ref(null) +function autoCheckOrder() { + closeStateTimerFuc() + timer.value = setInterval(() => { + // 开始锁单 + // goodsStore.isOrderLock({ + // table_code: table_code.value + // }, 'pay_lock') + checkPayStauts(false) + }, 2000) +} + +function reset() { + checkPayStautsLoading.value = true; + closeState.value = false + closeStateTime.value = 5 +} + +// 查询订单支付状态 +const showCheckPayStauts = ref(false) +const checkPayStautsLoading = ref(true) +async function checkPayStauts(tips = true) { + try { + // 扫码下单 + const res = await payApi.queryOrderStatus({ orderId: props.orderInfo.id }); + if (res == "done") { + // 支付成功,解锁订单 + // await goodsStore.isOrderLock({ + // table_code: table_code.value + // }, 'pay_unlock') + + // userPayWait.value = false + checkPayStautsLoading.value = false; + // scanCode.value = ""; + showCheckPayStauts.value = false; + clearAutoCheckOrder() + paysuccess(); + return; + } + if (res == "unpaid") { + if (tips) { + ElMessage.warning("用户支付中..."); + } + return; + } else { + clearAutoCheckOrder() + ElMessage.warning(res.msg || ''); + return; + } + } catch (error) { + console.log(error); + } +} + function paysuccess() { clearTimeout(payTimer); ElMessage.success("支付成功"); @@ -822,6 +943,10 @@ watch( } ); +onUnmounted(() => { + clearAutoCheckOrder() +}) + onMounted(() => { carts.payParamsInit(); getPaytype(); @@ -899,4 +1024,30 @@ defineExpose({ color: #666; padding: 8px 10px 8px 20px; } + +.pay_status_content { + flex: 1; + padding: 0 var(--el-font-size-base); + height: 400px; + padding-bottom: 100px; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + + .loading { + width: 200px; + height: 200px; + --el-loading-spinner-size: 100px; + + :deep(.el-loading-text) { + font-size: 20px; + } + } + + .btn { + width: 200px; + padding-top: var(--el-font-size-base); + } +} \ No newline at end of file diff --git a/src/views/tool/Instead/components/scan-pay.vue b/src/views/tool/Instead/components/scan-pay.vue index 47f59c1..3ec29b9 100644 --- a/src/views/tool/Instead/components/scan-pay.vue +++ b/src/views/tool/Instead/components/scan-pay.vue @@ -2,12 +2,8 @@
- + {{ item.text }}
@@ -21,13 +17,8 @@ - +
取消 @@ -46,7 +37,9 @@
{{ form.money }}元
- + + + 等待用户支付
@@ -55,7 +48,8 @@
- - -