You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

226 lines
6.0 KiB

1 week ago
const app = getApp<IAppOption>()
const echarts = require('@/components/ec-canvas/echarts.js')
Page({
data: {
popupShow: false,
popupType: '',
popupParams: {
position: 'bottom',
} as any,
tab: 1,
offsetTop: 0,
},
ecDataTrendComponent: null as any,
onLoad() {
this.ecDataTrendComponent = this.selectComponent('#chart1')
this.initChart()
app.waitLogin({ type: 0 }).then(() => {})
},
onReady() {
const { statusBarHeight } = wx.getSystemInfoSync()
const navBarHeight = 44
this.setData({ offsetTop: statusBarHeight + navBarHeight })
},
initChart() {
const arr = ['2026-06-01', '2026-06-02', '2026-06-03', '2026-06-04', '2026-06-05', '2026-06-06', '2026-06-07']
this.ecDataTrendComponent.init((canvas, width, height, dpr) => {
let chart = echarts.init(canvas, null, {
width: width,
height: height,
devicePixelRatio: dpr,
})
canvas.setChart(chart)
var option = {
dataZoom: [
{
type: 'inside',
startValue: 0,
endValue: 6, // 修正:数组下标0~6,原来7会越界
xAxisIndex: [0],
},
],
tooltip: {
trigger: 'axis',
axisPointer: {
type: 'shadow',
},
confine: true,
backgroundColor: 'rgba(0, 0, 0, 0.5)',
textStyle: {
color: '#fff',
fontSize: 10,
},
order: 'seriesDesc',
},
// 双图例自定义样式,匹配原图空心绿圈+实心红点
legend: {
bottom: 0,
padding: 0,
itemGap: 10,
itemWidth: 8,
itemHeight: 8,
left: 'center',
data: [
{
name: '正常心率',
icon: 'circle',
itemStyle: {
color: '#fff',
borderColor: '#46bc70',
borderWidth: 2,
},
},
{
name: '发作心率',
icon: 'circle',
itemStyle: {
color: '#d62828',
borderColor: '#d62828',
},
},
],
},
grid: {
top: '10',
left: '0',
right: '0',
bottom: '14',
containLabel: true,
},
xAxis: {
type: 'category',
axisLabel: {
color: 'rgba(148, 163, 184, 1)',
formatter: function (value) {
const [_year, month, day] = value.split('-')
return `${month}/${day}`
},
},
axisTick: {
show: false,
},
axisLine: {
show: false,
},
splitLine: {
show: false,
},
data: arr,
},
yAxis: [
{
type: 'value',
nameTextStyle: {
align: 'right',
},
position: 'right',
axisLabel: {
color: 'rgba(148, 163, 184, 1)',
},
splitLine: {
show: true,
showMinLine: false,
lineStyle: {
type: 'solid',
color: 'rgba(241, 245, 249, 1)',
},
},
},
],
series: [
{
// 单条主线,所有点位都有数值,折线完整连续无断点
name: '心率',
type: 'line',
symbol: 'circle',
symbolSize: 8,
lineStyle: { color: '#46bc70', width: 2 },
// 每个点位单独配置样式,发作点红色实心,其余白色空心绿边框
data: [
{ value: 62, itemStyle: { color: '#fff', borderColor: '#46bc70', borderWidth: 2 } },
{ value: 60, itemStyle: { color: '#fff', borderColor: '#46bc70', borderWidth: 2 } },
{ value: 61, itemStyle: { color: '#fff', borderColor: '#46bc70', borderWidth: 2 } },
{ value: 66, itemStyle: { color: '#d62828', borderColor: '#fff' } }, // 发作红点
{ value: 63, itemStyle: { color: '#fff', borderColor: '#46bc70', borderWidth: 2 } },
{ value: 69, itemStyle: { color: '#d62828', borderColor: '#fff' } }, // 发作红点
{ value: 64, itemStyle: { color: '#fff', borderColor: '#46bc70', borderWidth: 2 } },
],
},
],
}
chart.setOption(option)
return chart
})
},
handlePopupOk() {
const { popupType } = this.data
if (popupType === 'argument') {
wx.ajax({
method: 'POST',
url: '?r=wtx/user/agree-guest-privacy',
data: {
WorkerId: app.globalData.scene?.workerId || '',
},
}).then(() => {
this.setData({
popupShow: false,
popupType: '',
popupParams: {},
})
const waitBindDoctorId = app.globalData.waitBindDoctorId
if (waitBindDoctorId) {
this.handleBindDoctor(waitBindDoctorId)
}
})
}
if (popupType === 'conformBindDoctorConform') {
this.setData({
popupShow: false,
})
wx.ajax({
method: 'POST',
url: '?r=wtx/account/wait-bind-doctor',
data: {
doctorId: app.globalData.waitBindDoctorId,
},
}).then(() => {
wx.navigateTo({
url: `/patient/pages/login/index`,
})
})
}
},
handlePopupCancel() {
const { popupType } = this.data
if (popupType === 'argument') {
wx.exitMiniProgram()
}
if (popupType === 'conformBindDoctorConform') {
this.setData({
popupShow: false,
})
wx.ajax({
method: 'POST',
url: '?r=wtx/account/wait-bind-doctor',
data: {
doctorId: app.globalData.waitBindDoctorId,
},
}).then(() => {
app.globalData.waitBindDoctorId = ''
})
}
},
handleDetail() {
wx.navigateTo({
url: '/pages/wallDetail/index',
})
},
})
export {}