order.js 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  1. "use strict";
  2. const common_vendor = require("../../common/vendor.js");
  3. const utils_auth = require("../../utils/auth.js");
  4. const utils_api = require("../../utils/api.js");
  5. const _sfc_main = {
  6. __name: "order",
  7. setup(__props) {
  8. const orders = common_vendor.ref([]);
  9. const loading = common_vendor.ref(false);
  10. const isLoggedIn = common_vendor.ref(false);
  11. let refreshTimer = null;
  12. const startAutoRefresh = () => {
  13. stopAutoRefresh();
  14. if (!isLoggedIn.value)
  15. return;
  16. refreshTimer = setInterval(() => {
  17. if (isLoggedIn.value) {
  18. loadOrders();
  19. }
  20. }, 3e4);
  21. };
  22. const stopAutoRefresh = () => {
  23. if (refreshTimer) {
  24. clearInterval(refreshTimer);
  25. refreshTimer = null;
  26. }
  27. };
  28. const checkLogin = () => {
  29. isLoggedIn.value = utils_auth.isLoggedIn();
  30. };
  31. const handleBack = () => {
  32. const pages = getCurrentPages();
  33. pages.length > 1 ? common_vendor.index.navigateBack() : common_vendor.index.switchTab({ url: "/pages/mine/mine" });
  34. };
  35. const loadOrders = async () => {
  36. if (!isLoggedIn.value)
  37. return;
  38. loading.value = true;
  39. try {
  40. const res = await utils_api.getUserOrders();
  41. if (res.code === 200) {
  42. orders.value = res.data || [];
  43. }
  44. } catch (e) {
  45. console.error("加载订单记录失败:", e);
  46. } finally {
  47. loading.value = false;
  48. }
  49. };
  50. const pollOrderStatus = async (orderNo, maxRetries = 5, interval = 1e3) => {
  51. for (let i = 0; i < maxRetries; i++) {
  52. try {
  53. const res = await utils_api.queryOrder(orderNo);
  54. if (res.code === 200 && res.data && res.data.orderStatus === 1) {
  55. return true;
  56. }
  57. } catch (e) {
  58. console.log("查询订单状态失败:", e);
  59. }
  60. if (i < maxRetries - 1) {
  61. await new Promise((r) => setTimeout(r, interval));
  62. }
  63. }
  64. return false;
  65. };
  66. const handlePay = async (order) => {
  67. try {
  68. common_vendor.index.showLoading({ title: "正在支付..." });
  69. const res = await utils_api.repayOrder(order.orderNo);
  70. if (res.code !== 200) {
  71. throw new Error(res.message || "获取支付参数失败");
  72. }
  73. await utils_api.wxPay(res.data);
  74. common_vendor.index.showLoading({ title: "确认支付结果..." });
  75. const confirmed = await pollOrderStatus(order.orderNo);
  76. if (confirmed) {
  77. common_vendor.index.showToast({ title: "支付成功", icon: "success" });
  78. } else {
  79. common_vendor.index.showToast({ title: "支付处理中,请稍后查看", icon: "none" });
  80. }
  81. setTimeout(() => loadOrders(), 1500);
  82. } catch (e) {
  83. common_vendor.index.showToast({ title: e.message || "支付失败", icon: "none" });
  84. } finally {
  85. common_vendor.index.hideLoading();
  86. }
  87. };
  88. const getStatusClass = (status) => {
  89. switch (status) {
  90. case 0:
  91. return "status-pending";
  92. case 1:
  93. return "status-paid";
  94. case 2:
  95. return "status-cancelled";
  96. default:
  97. return "status-closed";
  98. }
  99. };
  100. common_vendor.onLoad(() => checkLogin());
  101. common_vendor.onMounted(() => {
  102. if (isLoggedIn.value)
  103. loadOrders();
  104. });
  105. common_vendor.onShow(() => {
  106. checkLogin();
  107. if (isLoggedIn.value)
  108. loadOrders();
  109. startAutoRefresh();
  110. });
  111. common_vendor.onHide(() => {
  112. stopAutoRefresh();
  113. });
  114. common_vendor.onUnmounted(() => {
  115. stopAutoRefresh();
  116. });
  117. return (_ctx, _cache) => {
  118. return common_vendor.e({
  119. a: common_vendor.o(handleBack),
  120. b: loading.value
  121. }, loading.value ? {} : orders.value.length === 0 ? {} : {
  122. d: common_vendor.f(orders.value, (order, index, i0) => {
  123. return common_vendor.e({
  124. a: common_vendor.t(order.poolType === 1 ? "⚡" : "📈"),
  125. b: common_vendor.t(order.poolName || (order.poolType === 1 ? "超短池" : "强势池")),
  126. c: common_vendor.n(order.poolType === 1 ? "tag-orange" : "tag-purple"),
  127. d: common_vendor.t(order.orderStatusName),
  128. e: common_vendor.n(getStatusClass(order.orderStatus)),
  129. f: common_vendor.t(order.orderNo),
  130. g: common_vendor.t(order.amount),
  131. h: order.expireTime
  132. }, order.expireTime ? {
  133. i: common_vendor.t(order.expireTime)
  134. } : {}, {
  135. j: common_vendor.t(order.createTime),
  136. k: order.orderStatus === 0
  137. }, order.orderStatus === 0 ? {
  138. l: common_vendor.o(($event) => handlePay(order), order.orderNo)
  139. } : {}, {
  140. m: order.orderNo,
  141. n: index === orders.value.length - 1 ? 1 : ""
  142. });
  143. })
  144. }, {
  145. c: orders.value.length === 0
  146. });
  147. };
  148. }
  149. };
  150. const MiniProgramPage = /* @__PURE__ */ common_vendor._export_sfc(_sfc_main, [["__scopeId", "data-v-88bf5328"], ["__file", "D:/program/gupiao/gupiao-wx/src/pages/order/order.vue"]]);
  151. wx.createPage(MiniProgramPage);