rank.js 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. "use strict";
  2. const common_vendor = require("../../common/vendor.js");
  3. const utils_api = require("../../utils/api.js");
  4. const _sfc_main = {
  5. __name: "rank",
  6. setup(__props) {
  7. const portfolio = common_vendor.ref({
  8. balance: 1e5,
  9. profit: 0,
  10. profitRate: 0
  11. });
  12. const myRank = common_vendor.ref({
  13. rank: 5,
  14. rate: 0
  15. });
  16. const leaderboard = common_vendor.ref([
  17. { rank: 1, name: "量化王者 608", rate: 35.2 },
  18. { rank: 2, name: "短线猎手 012", rate: 28.9 },
  19. { rank: 3, name: "趋势追踪者", rate: 22.1 }
  20. ]);
  21. const formatAmount = (amount) => {
  22. return amount.toLocaleString("zh-CN");
  23. };
  24. const formatProfit = (profit) => {
  25. return Math.abs(profit).toLocaleString("zh-CN");
  26. };
  27. const formatRate = (rate) => {
  28. return rate.toFixed(2);
  29. };
  30. const getRankClass = (rank) => {
  31. if (rank === 1)
  32. return "rank-first";
  33. if (rank === 2)
  34. return "rank-second";
  35. if (rank === 3)
  36. return "rank-third";
  37. return "";
  38. };
  39. const loadData = async () => {
  40. try {
  41. const portfolioRes = await utils_api.getUserPortfolio();
  42. if (portfolioRes.code === 0 && portfolioRes.data) {
  43. portfolio.value = portfolioRes.data;
  44. }
  45. } catch (err) {
  46. console.error("获取资产数据失败:", err);
  47. }
  48. try {
  49. const leaderboardRes = await utils_api.getLeaderboard();
  50. if (leaderboardRes.code === 0 && leaderboardRes.data) {
  51. leaderboard.value = leaderboardRes.data.list || [];
  52. myRank.value = leaderboardRes.data.myRank || { rank: 5, rate: 0 };
  53. }
  54. } catch (err) {
  55. console.error("获取排行榜数据失败:", err);
  56. }
  57. };
  58. common_vendor.onMounted(() => {
  59. loadData();
  60. });
  61. return (_ctx, _cache) => {
  62. return {
  63. a: common_vendor.t(formatAmount(portfolio.value.balance)),
  64. b: common_vendor.t(formatProfit(portfolio.value.profit)),
  65. c: common_vendor.t(formatRate(portfolio.value.profitRate)),
  66. d: common_vendor.n(portfolio.value.profitRate >= 0 ? "profit-positive" : "profit-negative"),
  67. e: common_vendor.t(myRank.value.rank),
  68. f: common_vendor.t(myRank.value.rate >= 0 ? "+" : ""),
  69. g: common_vendor.t(myRank.value.rate),
  70. h: common_vendor.n(myRank.value.rate >= 0 ? "rate-positive" : "rate-negative"),
  71. i: common_vendor.f(leaderboard.value, (item, index, i0) => {
  72. return {
  73. a: common_vendor.t(item.rank),
  74. b: common_vendor.n(getRankClass(item.rank)),
  75. c: common_vendor.t(item.name),
  76. d: common_vendor.t(item.rate >= 0 ? "+" : ""),
  77. e: common_vendor.t(item.rate),
  78. f: common_vendor.n(item.rate >= 0 ? "rate-positive" : "rate-negative"),
  79. g: index
  80. };
  81. })
  82. };
  83. };
  84. }
  85. };
  86. const MiniProgramPage = /* @__PURE__ */ common_vendor._export_sfc(_sfc_main, [["__file", "D:/program/miniprogram-1/src/pages/rank/rank.vue"]]);
  87. wx.createPage(MiniProgramPage);