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
5.7 KiB
226 lines
5.7 KiB
<template> |
|
<view > |
|
<view style="height: 750rpx; position: relative"> |
|
<l-echart ref="chart" @finished="init"></l-echart> |
|
<view class="customTooltips" :style="{left: position[0] + 'px',top: position[1] + 'px'}" v-if="params.length && position.length && showTip"> |
|
<view>这是个自定的tooltips</view> |
|
<view>{{params[0]['axisValue']}}</view> |
|
<view v-for="item in params"> |
|
<view> |
|
<text>{{item.seriesName}}</text> |
|
<text>{{item.value}}</text> |
|
</view> |
|
</view> |
|
</view> |
|
</view> |
|
</view> |
|
</template> |
|
|
|
<script> |
|
// nvue 不需要引入 |
|
// #ifdef VUE2 |
|
import * as echarts from '@/uni_modules/lime-echart/static/echarts.min'; |
|
// #endif |
|
// #ifdef VUE3 |
|
// #ifdef MP |
|
// 由于vue3 使用vite 不支持umd格式的包,小程序依然可以使用,但需要使用require |
|
const echarts = require('../../static/echarts.min'); |
|
// #endif |
|
// #ifndef MP |
|
// 由于 vue3 使用vite 不支持umd格式的包,故引入npm的包 |
|
import * as echarts from 'echarts/dist/echarts.esm'; |
|
// #endif |
|
// #endif |
|
export default { |
|
data() { |
|
return { |
|
showTip: false, |
|
position: [], |
|
params: [], |
|
option: { |
|
tooltip: { |
|
trigger: 'axis', |
|
// shadowBlur: 0, |
|
textStyle: { |
|
textShadowBlur : 0 |
|
}, |
|
renderMode: 'richText', |
|
position: (point, params, dom, rect, size) => { |
|
// 假设自定义的tooltips尺寸 |
|
const box = [170, 170] |
|
// 偏移 |
|
const offsetX = point[0] < size.viewSize[0] / 2 ? 20 : -box[0] - 20; |
|
const offsetY = point[1] < size.viewSize[1] / 2 ? 20 : -box[1] - 20; |
|
const x = point[0] + offsetX; |
|
const y = point[1] + offsetY; |
|
|
|
this.position = [x, y] |
|
this.params = params |
|
}, |
|
formatter: (params, ticket, callback) => { |
|
|
|
} |
|
}, |
|
legend: { |
|
data: ['邮件营销', '联盟广告', '视频广告', '直接访问', '搜索引擎'] |
|
}, |
|
grid: { |
|
left: '3%', |
|
right: '4%', |
|
bottom: '3%', |
|
containLabel: true |
|
}, |
|
xAxis: { |
|
type: 'category', |
|
boundaryGap: false, |
|
data: ['周一', '周二', '周三', '周四', '周五', '周六', '周日'] |
|
}, |
|
yAxis: { |
|
type: 'value' |
|
}, |
|
series: [ |
|
{ |
|
name: '邮件营销', |
|
type: 'line', |
|
stack: '总量', |
|
data: [120, 132, 101, 134, 90, 230, 210] |
|
}, |
|
{ |
|
name: '联盟广告', |
|
type: 'line', |
|
stack: '总量', |
|
data: [220, 182, 191, 234, 290, 330, 310] |
|
}, |
|
{ |
|
name: '视频广告', |
|
type: 'line', |
|
stack: '总量', |
|
data: [150, 232, 201, 154, 190, 330, 410] |
|
}, |
|
{ |
|
name: '直接访问', |
|
type: 'line', |
|
stack: '总量', |
|
data: [320, 332, 301, 334, 390, 330, 320] |
|
}, |
|
{ |
|
name: '搜索引擎', |
|
type: 'line', |
|
stack: '总量', |
|
data: [820, 932, 901, 934, 1290, 1330, 1320] |
|
} |
|
] |
|
} |
|
} |
|
}, |
|
|
|
methods: { |
|
init() { |
|
// init(echarts, theme?:string, opts?:{}, chart => {}) |
|
// echarts 必填, 非nvue必填,nvue不用填 |
|
// theme 可选,应用的主题,目前只支持名称,如:'dark' |
|
// opts = { // 可选 |
|
// locale?: string // 从 `5.0.0` 开始支持 |
|
// } |
|
// chart => {} , callback 返回图表实例 |
|
// setTimeout(()=>{ |
|
// this.$refs.chart.init(echarts, chart => { |
|
// chart.setOption(this.option); |
|
// }); |
|
// },300) |
|
this.$refs.chart.init(echarts, chart => { |
|
chart.setOption(this.option); |
|
|
|
// 监听tooltip显示事件 |
|
chart.on('showTip', (params) => { |
|
this.showTip = true |
|
console.log('showTip::') |
|
}); |
|
chart.on('hideTip', (params) => { |
|
setTimeout(() => { |
|
this.showTip = false |
|
},300) |
|
}); |
|
|
|
setTimeout(()=>{ |
|
const option = { |
|
tooltip: { |
|
trigger: 'axis', |
|
// shadowBlur: 0, |
|
textStyle: { |
|
textShadowBlur: 0 |
|
}, |
|
renderMode: 'richText', |
|
}, |
|
legend: { |
|
data: ['邮件营销', '联盟广告', '视频广告', '直接访问', '搜索引擎'] |
|
}, |
|
grid: { |
|
left: '3%', |
|
right: '4%', |
|
bottom: '3%', |
|
containLabel: true |
|
}, |
|
xAxis: { |
|
type: 'category', |
|
boundaryGap: false, |
|
data: ['周一', '周二', '周三', '周四', '周五', '周六', '周日'] |
|
}, |
|
yAxis: { |
|
type: 'value' |
|
}, |
|
series: [ |
|
{ |
|
name: '邮件营销', |
|
type: 'line', |
|
stack: '总量', |
|
data: [1120, 132, 101, 134, 90, 230, 210] |
|
}, |
|
{ |
|
name: '联盟广告', |
|
type: 'line', |
|
stack: '总量', |
|
data: [220, 182, 191, 234, 290, 330, 310] |
|
}, |
|
{ |
|
name: '视频广告', |
|
type: 'line', |
|
stack: '总量', |
|
data: [150, 632, 201, 154, 190, 330, 410] |
|
}, |
|
{ |
|
name: '直接访问', |
|
type: 'line', |
|
stack: '总量', |
|
data: [820, 332, 301, 334, 390, 330, 320] |
|
}, |
|
{ |
|
name: '搜索引擎', |
|
type: 'line', |
|
stack: '总量', |
|
data: [820, 932, 901, 934, 1290, 1330, 1320] |
|
} |
|
] |
|
} |
|
chart.setOption(option); |
|
},1000) |
|
|
|
}); |
|
}, |
|
save() { |
|
this.$refs.chart.canvasToTempFilePath({ |
|
success(res) { |
|
console.log('res::::', res) |
|
} |
|
}) |
|
} |
|
} |
|
} |
|
</script> |
|
<style> |
|
.customTooltips { |
|
position: absolute; |
|
background-color: rgba(255, 255, 255, 0.8); |
|
padding: 20rpx; |
|
} |
|
</style> |