Files
2026-02-14 13:17:05 +08:00

80 lines
2.3 KiB
JavaScript

import request from '../../../../utils/request';
Page({
data: {
levels: [],
currentSunlight: 0,
currentLevel: 0
},
onLoad(options) {
let sunlight;
if (options.sunlight !== undefined) {
sunlight = parseInt(options.sunlight, 10);
if (!isNaN(sunlight)) {
this.setData({ currentSunlight: sunlight });
} else {
sunlight = undefined;
}
}
this.fetchData(sunlight);
},
async fetchData(passedSunlight) {
wx.showLoading({ title: '加载中...' });
try {
// Fetch levels
const levelRes = await request.get('/config/level/list');
let list = [];
if (levelRes) {
if (Array.isArray(levelRes)) {
list = levelRes;
} else if (Array.isArray(levelRes.list)) {
list = levelRes.list;
} else if (levelRes.data && Array.isArray(levelRes.data.list)) {
list = levelRes.data.list;
} else if (levelRes.data && Array.isArray(levelRes.data)) {
list = levelRes.data;
}
}
list.sort((a, b) => a.minSunlight - b.minSunlight);
// Fetch profile if sunlight not passed
let currentSunlight = passedSunlight;
if (currentSunlight === undefined) {
const profileRes = await request.get('/profile/detail');
currentSunlight = profileRes.totalSunlight || 0;
this.setData({ currentSunlight });
}
// Calculate current level
let currentLevel = 0;
// Iterate finding the highest level where minSunlight <= currentSunlight
for (let i = list.length - 1; i >= 0; i--) {
if (currentSunlight >= list[i].minSunlight) {
currentLevel = list[i].level;
break;
}
}
this.setData({
levels: list,
currentLevel
});
} catch (e) {
console.error('Fetch level detail failed', e);
wx.showToast({ title: '数据加载失败', icon: 'none' });
} finally {
wx.hideLoading();
}
}
});