|
|
@@ -120,13 +120,11 @@ import StockListItem from '../../components/StockListItem.vue'
|
|
|
const isLoggedIn = ref(false)
|
|
|
const myStocks = ref([])
|
|
|
const viewMode = ref('list') // 'list' 或 'table'
|
|
|
+const isLoading = ref(false) // 加载状态
|
|
|
+const lastLoadTime = ref(0) // 上次加载时间
|
|
|
+const CACHE_DURATION = 5000 // 缓存有效期5秒
|
|
|
|
|
|
-// 切换视图模式
|
|
|
-const toggleViewMode = () => {
|
|
|
- viewMode.value = viewMode.value === 'list' ? 'table' : 'list'
|
|
|
-}
|
|
|
-
|
|
|
-// 设置视图模式(只切换显示,不重新加载数据)
|
|
|
+// 设置视图模式
|
|
|
const setViewMode = (mode) => {
|
|
|
viewMode.value = mode
|
|
|
}
|
|
|
@@ -200,8 +198,8 @@ const getMarketClass = (code) => {
|
|
|
}
|
|
|
|
|
|
// 加载我的股票列表(从服务器数据库查询)
|
|
|
-const loadMyStocks = async () => {
|
|
|
- console.log('[我的股票] loadMyStocks 开始执行, isLoggedIn=', isLoggedIn.value)
|
|
|
+const loadMyStocks = async (forceRefresh = false) => {
|
|
|
+ console.log('[我的股票] loadMyStocks 开始执行, isLoggedIn=', isLoggedIn.value, 'forceRefresh=', forceRefresh)
|
|
|
|
|
|
if (!isLoggedIn.value) {
|
|
|
myStocks.value = []
|
|
|
@@ -209,11 +207,32 @@ const loadMyStocks = async () => {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
+ // 如果正在加载中,跳过
|
|
|
+ if (isLoading.value) {
|
|
|
+ console.log('[我的股票] 正在加载中,跳过')
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ // 如果有缓存数据且未过期,只刷新行情不重新加载列表
|
|
|
+ const now = Date.now()
|
|
|
+ if (!forceRefresh && myStocks.value.length > 0 && (now - lastLoadTime.value) < CACHE_DURATION) {
|
|
|
+ console.log('[我的股票] 使用缓存数据,只刷新行情')
|
|
|
+ // 只刷新行情数据
|
|
|
+ await fetchIndexData()
|
|
|
+ await refreshAllQuotes()
|
|
|
+ startAutoRefresh()
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
try {
|
|
|
- // 显示加载提示
|
|
|
- uni.showLoading({ title: '加载中...' })
|
|
|
+ isLoading.value = true
|
|
|
+
|
|
|
+ // 只有首次加载或强制刷新时显示loading
|
|
|
+ if (myStocks.value.length === 0 || forceRefresh) {
|
|
|
+ uni.showLoading({ title: '加载中...' })
|
|
|
+ }
|
|
|
|
|
|
- // 从服务器获取用户自选股票(每次都从数据库查询)
|
|
|
+ // 从服务器获取用户自选股票
|
|
|
console.log('[我的股票] 调用 getUserStocks 接口')
|
|
|
const res = await getUserStocks()
|
|
|
console.log('[我的股票] 服务器返回:', JSON.stringify(res))
|
|
|
@@ -233,6 +252,7 @@ const loadMyStocks = async () => {
|
|
|
changePercent: item.changePercent,
|
|
|
trendData: item.trendData
|
|
|
}))
|
|
|
+ lastLoadTime.value = Date.now()
|
|
|
console.log('[我的股票] 加载完成, 股票数量:', myStocks.value.length)
|
|
|
} else {
|
|
|
myStocks.value = []
|
|
|
@@ -252,8 +272,13 @@ const loadMyStocks = async () => {
|
|
|
} catch (e) {
|
|
|
uni.hideLoading()
|
|
|
console.error('[我的股票] 加载失败:', e)
|
|
|
- myStocks.value = []
|
|
|
+ // 加载失败时不清空已有数据
|
|
|
+ if (myStocks.value.length === 0) {
|
|
|
+ myStocks.value = []
|
|
|
+ }
|
|
|
startAutoRefresh()
|
|
|
+ } finally {
|
|
|
+ isLoading.value = false
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -390,14 +415,22 @@ const removeStock = async (idx) => {
|
|
|
onLoad(() => {
|
|
|
console.log('[我的股票] onLoad 触发')
|
|
|
isLoggedIn.value = checkLoginStatus()
|
|
|
- loadMyStocks()
|
|
|
+ loadMyStocks(true) // 首次加载强制刷新
|
|
|
})
|
|
|
|
|
|
onShow(() => {
|
|
|
console.log('[我的股票] onShow 触发')
|
|
|
+ const wasLoggedIn = isLoggedIn.value
|
|
|
isLoggedIn.value = checkLoginStatus()
|
|
|
- // 每次页面显示时都从数据库重新加载
|
|
|
- loadMyStocks()
|
|
|
+
|
|
|
+ // 如果登录状态变化了,强制刷新
|
|
|
+ if (wasLoggedIn !== isLoggedIn.value) {
|
|
|
+ loadMyStocks(true)
|
|
|
+ } else {
|
|
|
+ // 否则使用缓存策略
|
|
|
+ loadMyStocks(false)
|
|
|
+ }
|
|
|
+
|
|
|
uni.setNavigationBarTitle({ title: '量化交易大师' })
|
|
|
})
|
|
|
|