123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259 |
- <template>
- <moduleEnclosure title="趋势图">
- <template v-slot:rightce>
- <div class="classbtns">
- <div @click="cindex = 0" :class="{
- select: cindex === 0,
- }">
- 浏览量(PV)
- </div>
- <div @click="cindex = 1" :class="{
- select: cindex === 1,
- }">
- 访客量(UV)
- </div>
- </div>
- </template>
- <div style="width: 100%; height: 100%">
- <div :id="`chartmain_fkell`" style="width: 100%; height: 100%"></div>
- </div>
- </moduleEnclosure>
- </template>
- <script>
- import { bigGetLarge3 } from '@/api/common.js';
- import moduleEnclosure from '@/components/moduleEnclosure.vue';
- import * as echarts from 'echarts';
- import { csize } from '@/utils/const.js';
- export default {
- components: {
- moduleEnclosure,
- },
- data() {
- return {
- cindex: 0,
- };
- },
- mounted() {
- this.getbigGetLarge3()
- },
- beforeUnmount() {
- },
- watch: {
- cindex(){
- this.getbigGetLarge3()
- }
- },
- methods: {
- getbigGetLarge3() {
- bigGetLarge3().then(res => {
- this.eac(res.data)
- })
- },
- eac(value) {
- var that = this
- if (that.myChart) {
- that.myChart.dispose();
- }
- var times = value.map((item) => {
- var str1 = item.dstr.split(' ')[0];
- return str1.slice(5);
- });
- var data = value.map((item) => {
- return item[["num", "userNum"][this.cindex]];
- });
- // 计算刻度的间隔
- var interval = Math.ceil((Math.max(...data) - Math.min(...data)) / 2); // 确保有 3 个刻度
- interval = interval < 1 ? 1 : interval
- // 计算 y 轴的最大值和最小值
- var maxY = Math.ceil(Math.max(...data) / interval) * interval;
- maxY = maxY < 3 ? 3 : maxY
- var minY = Math.floor(Math.min(...data) / interval) * interval;
- minY = minY < 1 ? 1 : minY
- var option = {
- tooltip: {
- trigger: 'axis',
- formatter: function (params) {
- var res = '' + params[1].name + ' : ' + params[1].value;
- return `<div style="color:#fff;">${res}</div>`;
- },
- transitionDuration: 0,
- backgroundColor: '#092a66',
- borderColor: '#0462b5',
- borderRadius: 8,
- borderWidth: 2,
- padding: [5, 10],
- axisPointer: {
- type: 'line',
- lineStyle: {
- type: 'dashed',
- color: '#8AB1DC',
- },
- },
- },
- title: {
- text: '',
- subtext: '',
- },
- grid: {
- x: csize(40),
- y: csize(40),
- x2: csize(20),
- y2: csize(20),
- },
- xAxis: {
- data: times,
- axisLabel: {
- interval: Math.floor(times.length / 15),
- showMinLabel: true, //是否显示最小 tick 的 label
- showMaxLabel: true, //是否显示最大 tick 的 label
- fontSize: csize(12),
- },
- axisTick: {
- show: false,
- },
- axisLine: {
- show: false,
- symbol: ['none', 'arrow'],
- symbolOffset: 12,
- lineStyle: {
- fontSize: csize(12),
- color: '#8AB1DC',
- },
- },
- boundaryGap: false,
- },
- yAxis: [
- {
- min: minY,
- max: maxY,
- interval: interval,
- type: 'value',
- name: '人(次)',
- nameTextStyle: {
- fontSize: csize(16),
- },
- axisLine: {
- show: false,
- lineStyle: {
- color: '#8AB1DC',
- },
- },
- axisLabel: {
- margin: 10,
- textStyle: {
- fontSize: csize(12),
- },
- },
- splitLine: {
- lineStyle: {
- color: '#364D95',
- },
- },
- axisTick: {
- show: false,
- },
- },
- ],
- dataZoom: [
- {
- type: 'inside',
- },
- ],
- series: [
- {
- // For shadow
- type: 'line',
- barWidth: 10,
- smooth: true, // 设置平滑曲线
- symbol: 'none', // 隐藏节点
- itemStyle: {
- color: 'rgba(0,0,0,0.05)',
- },
- barGap: '-100%',
- barCategoryGap: '40%',
- data: data,
- animation: false,
- },
- {
- type: 'line',
- barWidth: 10,
- smooth: true, // 设置平滑曲线
- symbol: 'none', // 隐藏节点
- itemStyle: {
- color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
- { offset: 0, color: '#0efdff' },
- { offset: 0.5, color: '#188df0' },
- { offset: 1, color: '#188df0' },
- ]),
- barBorderRadius: 5,
- },
- areaStyle: { // 设置阴影样式
- color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [{ // 线性渐变,从上到下
- offset: 0,
- color: 'rgba(45,77,149,1)' // 阴影起始颜色
- }, { // 线性渐变,从上到下
- offset: 0.5,
- color: 'rgba(45,77,149,.5)' // 阴影起始颜色
- }, {
- offset: 1,
- color: 'rgba(45,77,149,.2)' // 阴影结束颜色
- }])
- },
- emphasis: {
- itemStyle: {
- color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
- { offset: 0, color: '#2378f7' },
- { offset: 0.7, color: '#2378f7' },
- { offset: 1, color: '#0efdff' },
- ]),
- barBorderRadius: 5,
- },
- },
- data: data,
- },
- ],
- };
- that.myChart = new echarts.init(document.getElementById('chartmain_fkell'));
- that.myChart.setOption(option);
- },
- },
- };
- </script>
- <style scoped lang="scss">
- .classbtns {
- width: 200px;
- height: 30px;
- display: flex;
- flex-direction: row;
- justify-content: space-between;
- align-items: center;
- cursor: pointer;
- div:nth-child(1),
- div:nth-child(2) {
- width: 48%;
- height: 100%;
- text-align: center;
- line-height: 28px;
- border: 1px solid #0e72e6;
- position: relative;
- }
- div:nth-child(1) {
- border-right: 1px solid #0e72e6;
- }
- .select {
- background: #0e72e6;
- color: #bbd4ff;
- }
- }
- ::v-deep .el-carousel__arrow,
- ::v-deep .el-carousel__indicators {
- display: none;
- }
- </style>
|