rank.js 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. "use strict";
  2. const common_vendor = require("../../common/vendor.js");
  3. const utils_api = require("../../utils/api.js");
  4. const utils_auth = require("../../utils/auth.js");
  5. const _sfc_main = {
  6. __name: "rank",
  7. setup(__props) {
  8. const isLoggedIn = common_vendor.ref(false);
  9. const portfolio = common_vendor.ref({
  10. balance: 1e5,
  11. profit: 0,
  12. profitRate: 0
  13. });
  14. const myRank = common_vendor.ref({
  15. rank: 5,
  16. rate: 0
  17. });
  18. const mockLeaderboard = [
  19. { rank: 1, name: "量化王者 ***", rate: 35.2 },
  20. { rank: 2, name: "短线猎手 ***", rate: 28.9 },
  21. { rank: 3, name: "趋势追踪者 ***", rate: 22.1 },
  22. { rank: 4, name: "稳健投资 ***", rate: 18.5 },
  23. { rank: 5, name: "价值发现 ***", rate: 15.3 }
  24. ];
  25. const leaderboard = common_vendor.ref(mockLeaderboard);
  26. const formatAmount = (amount) => {
  27. return amount.toLocaleString("zh-CN");
  28. };
  29. const formatProfit = (profit) => {
  30. return Math.abs(profit).toLocaleString("zh-CN");
  31. };
  32. const formatRate = (rate) => {
  33. return rate.toFixed(2);
  34. };
  35. const getRankClass = (rank) => {
  36. if (rank === 1)
  37. return "rank-first";
  38. if (rank === 2)
  39. return "rank-second";
  40. if (rank === 3)
  41. return "rank-third";
  42. return "";
  43. };
  44. const checkLoginAndLoadData = () => {
  45. isLoggedIn.value = utils_auth.isLoggedIn();
  46. console.log("[模拟排名] 登录状态:", isLoggedIn.value);
  47. if (isLoggedIn.value) {
  48. loadRealData();
  49. } else {
  50. leaderboard.value = mockLeaderboard;
  51. }
  52. };
  53. const goToLogin = () => {
  54. common_vendor.index.navigateTo({
  55. url: "/pages/login/login"
  56. });
  57. };
  58. const loadRealData = async () => {
  59. try {
  60. const portfolioRes = await utils_api.getUserPortfolio();
  61. if (portfolioRes.code === 0 && portfolioRes.data) {
  62. portfolio.value = portfolioRes.data;
  63. }
  64. } catch (err) {
  65. console.error("获取资产数据失败:", err);
  66. }
  67. try {
  68. const leaderboardRes = await utils_api.getLeaderboard();
  69. if (leaderboardRes.code === 0 && leaderboardRes.data) {
  70. leaderboard.value = leaderboardRes.data.list || [];
  71. myRank.value = leaderboardRes.data.myRank || { rank: 5, rate: 0 };
  72. }
  73. } catch (err) {
  74. console.error("获取排行榜数据失败:", err);
  75. }
  76. };
  77. common_vendor.onMounted(() => {
  78. checkLoginAndLoadData();
  79. });
  80. common_vendor.onShow(() => {
  81. checkLoginAndLoadData();
  82. common_vendor.index.setNavigationBarTitle({ title: "量化交易大师" });
  83. });
  84. return (_ctx, _cache) => {
  85. return common_vendor.e({
  86. a: common_vendor.t(formatAmount(portfolio.value.balance)),
  87. b: common_vendor.t(formatProfit(portfolio.value.profit)),
  88. c: common_vendor.t(formatRate(portfolio.value.profitRate)),
  89. d: common_vendor.n(portfolio.value.profitRate >= 0 ? "profit-positive" : "profit-negative"),
  90. e: common_vendor.t(myRank.value.rank),
  91. f: common_vendor.t(myRank.value.rate >= 0 ? "+" : ""),
  92. g: common_vendor.t(myRank.value.rate),
  93. h: common_vendor.n(myRank.value.rate >= 0 ? "rate-positive" : "rate-negative"),
  94. i: common_vendor.f(leaderboard.value, (item, index, i0) => {
  95. return {
  96. a: common_vendor.t(item.rank),
  97. b: common_vendor.n(getRankClass(item.rank)),
  98. c: common_vendor.t(item.name),
  99. d: common_vendor.t(item.rate >= 0 ? "+" : ""),
  100. e: common_vendor.t(item.rate),
  101. f: common_vendor.n(item.rate >= 0 ? "rate-positive" : "rate-negative"),
  102. g: index
  103. };
  104. }),
  105. j: !isLoggedIn.value ? 1 : "",
  106. k: !isLoggedIn.value
  107. }, !isLoggedIn.value ? {
  108. l: common_vendor.o(goToLogin)
  109. } : {});
  110. };
  111. }
  112. };
  113. const MiniProgramPage = /* @__PURE__ */ common_vendor._export_sfc(_sfc_main, [["__file", "D:/program/gupiao-wx/src/pages/rank/rank.vue"]]);
  114. wx.createPage(MiniProgramPage);