123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226 |
- <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>
|