116 lines
3.4 KiB
JavaScript
Raw Normal View History

2026-04-24 17:51:19 +08:00
// subpackage/parent/fitness-detail/fitness-detail.js
import uCharts from '../../../utils/chart/u-charts';
var uChartsInstance = {};
Page({
data: {
item: null, // 当前指标完整数据
name: '',
unit: '',
// canvas尺寸
lineCWidth: 300,
lineCHeight: 220,
pixelRatio: 2,
},
onLoad() {
const item = wx.getStorageSync('fitnessDetailItem') || null
if (item) {
2026-04-28 14:20:44 +08:00
const fmt = v => (v != null && !isNaN(v)) ? Number(v).toFixed(1) : v
const formattedItem = {
...item,
2026-04-28 16:50:36 +08:00
lastScore: fmt(item.scoreTrendChart.axisY.slice(-1)[0]),
2026-04-28 14:20:44 +08:00
classAvgScore: fmt(item.classAvgScore),
schoolAvgScore: fmt(item.schoolAvgScore),
}
this.setData({ item: formattedItem, name: item.name, unit: item.unit || '' })
2026-04-24 17:51:19 +08:00
wx.setNavigationBarTitle({ title: item.name + '详情' })
}
},
onReady() {
const info = wx.getWindowInfo()
const pixelRatio = info.pixelRatio
const lineCWidth = info.windowWidth * 0.86
const lineCHeight = info.windowWidth * 0.58
this.setData({ lineCWidth, lineCHeight, pixelRatio }, () => {
this.drawLineChart()
})
},
drawLineChart() {
const that = this
const item = that.data.item
const trend = item && item.scoreTrendChart
if (!trend || !trend.axisX || trend.axisX.length === 0) return
const query = wx.createSelectorQuery().in(that)
query.select('#lineCanvas').fields({ node: true, size: true }).exec(res => {
if (!res[0]) return
const canvas = res[0].node
const ctx = canvas.getContext('2d')
canvas.width = res[0].width * that.data.pixelRatio
canvas.height = res[0].height * that.data.pixelRatio
uChartsInstance['lineCanvas'] = new uCharts({
type: 'line',
context: ctx,
width: that.data.lineCWidth * that.data.pixelRatio,
height: that.data.lineCHeight * that.data.pixelRatio,
categories: trend.axisX,
series: [{ name: that.data.name, data: trend.axisY, color: '#4A90E2' }],
pixelRatio: that.data.pixelRatio,
animation: true,
background: '#FFFFFF',
color: ['#4A90E2'],
padding: [20, 20, 10, 0],
enableScroll: true,
legend: { show: false },
xAxis: {
disableGrid: true,
itemCount: 4,
scrollShow: true,
fontSize: 11,
fontColor: '#666',
axisLineColor: '#eee',
scrollColor: '#e8f4ff',
scrollBackgroundColor: '#f5f5f5',
},
yAxis: {
gridType: 'dash',
gridColor: '#f1f1f1',
fontSize: 11,
fontColor: '#666',
},
extra: {
line: {
type: 'curve',
width: 3,
activeType: 'hollow',
onShadow: true,
linearType: 'custom',
},
tooltip: { showBox: true },
},
})
})
},
tapLine(e) {
if (uChartsInstance['lineCanvas']) {
uChartsInstance['lineCanvas'].showToolTip(e)
}
},
touchstartLine(e) {
if (uChartsInstance['lineCanvas']) uChartsInstance['lineCanvas'].scrollStart(e)
},
touchmoveLine(e) {
if (uChartsInstance['lineCanvas']) uChartsInstance['lineCanvas'].scroll(e)
},
touchendLine(e) {
if (uChartsInstance['lineCanvas']) {
uChartsInstance['lineCanvas'].scrollEnd(e)
uChartsInstance['lineCanvas'].showToolTip(e)
}
},
})