"use strict"; const common_vendor = require("../../common/vendor.js"); const utils_auth = require("../../utils/auth.js"); const utils_api = require("../../utils/api.js"); const _sfc_main = { __name: "rank", setup(__props) { const isLoggedIn = common_vendor.ref(false); const myStocks = common_vendor.ref([]); let refreshTimer = null; const loadMyStocks = async () => { if (!isLoggedIn.value) { myStocks.value = []; stopAutoRefresh(); return; } try { const stocks = common_vendor.index.getStorageSync("my_stocks") || []; myStocks.value = stocks; console.log("[我的股票] 加载股票列表:", stocks.length, "只"); if (stocks.length === 0) { stopAutoRefresh(); return; } await refreshAllQuotes(); } catch (e) { console.error("加载股票列表失败:", e); myStocks.value = []; stopAutoRefresh(); } }; const refreshAllQuotes = async () => { if (myStocks.value.length === 0) { console.log("[我的股票] 股票列表为空,停止定时刷新"); stopAutoRefresh(); return; } try { const codes = myStocks.value.map((stock) => stock.code).join(","); console.log("[我的股票] 刷新行情:", codes); const quoteRes = await utils_api.getStockQuotes(codes); console.log("[我的股票] API返回:", JSON.stringify(quoteRes)); if (quoteRes.code === 200 && quoteRes.data && quoteRes.data.length > 0) { quoteRes.data.forEach((quoteData) => { const index = myStocks.value.findIndex((stock) => stock.code === quoteData.stockCode); if (index !== -1) { myStocks.value[index].priceChange = quoteData.priceChange; myStocks.value[index].changePercent = quoteData.changePercent; myStocks.value[index].stockName = quoteData.stockName || myStocks.value[index].name; } }); common_vendor.index.setStorageSync("my_stocks", myStocks.value); console.log("[我的股票] 刷新成功"); } else { console.error("[我的股票] 刷新失败:", quoteRes); } } catch (e) { console.error("[我的股票] 刷新异常:", e.message); } }; const startAutoRefresh = () => { stopAutoRefresh(); const scheduleNextRefresh = () => { const delay = 2e3 + Math.random() * 1e3; console.log(`[我的股票] 下次刷新将在 ${Math.round(delay)}ms 后执行`); refreshTimer = setTimeout(async () => { await refreshAllQuotes(); scheduleNextRefresh(); }, delay); }; scheduleNextRefresh(); }; const stopAutoRefresh = () => { if (refreshTimer) { clearTimeout(refreshTimer); refreshTimer = null; console.log("[我的股票] 停止自动刷新"); } }; const goToLogin = () => { common_vendor.index.navigateTo({ url: "/pages/login/login" }); }; const removeStock = (index) => { common_vendor.index.showModal({ title: "确认删除", content: `确定要删除 ${myStocks.value[index].name} 吗?`, confirmText: "删除", cancelText: "取消", success: (res) => { if (res.confirm) { myStocks.value.splice(index, 1); common_vendor.index.setStorageSync("my_stocks", myStocks.value); common_vendor.index.showToast({ title: "删除成功", icon: "success" }); if (myStocks.value.length === 0) { stopAutoRefresh(); } } } }); }; const getChangeClass = (value) => { if (!value || value === "--") return ""; if (value.startsWith("+") || value.match(/^[\d.]/) && !value.startsWith("-")) { return "change-up"; } if (value.startsWith("-")) { return "change-down"; } return ""; }; const formatDate = (timestamp) => { const date = new Date(timestamp); const year = date.getFullYear(); const month = String(date.getMonth() + 1).padStart(2, "0"); const day = String(date.getDate()).padStart(2, "0"); const hours = String(date.getHours()).padStart(2, "0"); const minutes = String(date.getMinutes()).padStart(2, "0"); return `${year}-${month}-${day} ${hours}:${minutes}`; }; common_vendor.onLoad(() => { isLoggedIn.value = utils_auth.isLoggedIn(); console.log("[我的股票] 登录状态:", isLoggedIn.value); console.log("[我的股票] Token:", common_vendor.index.getStorageSync("user_token")); loadMyStocks(); }); common_vendor.onShow(() => { isLoggedIn.value = utils_auth.isLoggedIn(); console.log("[我的股票] 登录状态:", isLoggedIn.value); console.log("[我的股票] Token:", common_vendor.index.getStorageSync("user_token")); loadMyStocks(); common_vendor.index.setNavigationBarTitle({ title: "量化交易大师" }); if (isLoggedIn.value && myStocks.value.length > 0) { startAutoRefresh(); } else { stopAutoRefresh(); } }); common_vendor.onHide(() => { stopAutoRefresh(); }); common_vendor.onUnload(() => { stopAutoRefresh(); }); return (_ctx, _cache) => { return common_vendor.e({ a: myStocks.value.length > 0 }, myStocks.value.length > 0 ? { b: common_vendor.f(myStocks.value, (stock, index, i0) => { return { a: common_vendor.t(stock.name), b: common_vendor.t(stock.code), c: common_vendor.o(($event) => removeStock(index), index), d: common_vendor.t(stock.priceChange || "--"), e: common_vendor.n(getChangeClass(stock.priceChange)), f: common_vendor.t(stock.changePercent || "--"), g: common_vendor.n(getChangeClass(stock.changePercent)), h: common_vendor.t(formatDate(stock.addTime)), i: index }; }) } : {}, { c: !isLoggedIn.value ? 1 : "", d: !isLoggedIn.value }, !isLoggedIn.value ? { e: common_vendor.o(goToLogin) } : {}); }; } }; const MiniProgramPage = /* @__PURE__ */ common_vendor._export_sfc(_sfc_main, [["__file", "D:/program/gupiao-wx/src/pages/rank/rank.vue"]]); wx.createPage(MiniProgramPage);