|
@@ -2,91 +2,75 @@
|
|
|
<moduleEnclosure title="趋势图">
|
|
|
<template v-slot:rightce>
|
|
|
<div class="classbtns">
|
|
|
- <div
|
|
|
- @click="cindex = 0"
|
|
|
- :class="{
|
|
|
- select: cindex === 0,
|
|
|
- }"
|
|
|
- >
|
|
|
- 浏览量
|
|
|
+ <div @click="cindex = 0" :class="{
|
|
|
+ select: cindex === 0,
|
|
|
+ }">
|
|
|
+ 浏览量(PV)
|
|
|
</div>
|
|
|
- <div
|
|
|
- @click="cindex = 1"
|
|
|
- :class="{
|
|
|
- select: cindex === 1,
|
|
|
- }"
|
|
|
- >
|
|
|
- 访客量
|
|
|
+ <div @click="cindex = 1" :class="{
|
|
|
+ select: cindex === 1,
|
|
|
+ }">
|
|
|
+ 访客量(UV)
|
|
|
</div>
|
|
|
</div>
|
|
|
</template>
|
|
|
- <el-carousel
|
|
|
- height="100%"
|
|
|
- style="width: 100%; height: 100%"
|
|
|
- ref="elCarousel"
|
|
|
- :autoplay="false"
|
|
|
- >
|
|
|
- <el-carousel-item v-for="(item, index) in 2" :key="index">
|
|
|
- <div style="width: 100%; height: 100%">
|
|
|
- <div
|
|
|
- :id="`chartmain_${item}`"
|
|
|
- style="width: 100%; height: 100%"
|
|
|
- ></div>
|
|
|
- </div>
|
|
|
- </el-carousel-item>
|
|
|
- </el-carousel>
|
|
|
+ <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 { getQuery12 } from '@/api/bigView.js';
|
|
|
import { csize } from '@/utils/const.js';
|
|
|
-let myChart, myChart2;
|
|
|
export default {
|
|
|
components: {
|
|
|
moduleEnclosure,
|
|
|
},
|
|
|
data() {
|
|
|
return {
|
|
|
- cindex: -1,
|
|
|
- myChart: null,
|
|
|
- myChart2: null,
|
|
|
+ cindex: 0,
|
|
|
};
|
|
|
},
|
|
|
mounted() {
|
|
|
- // this.timeId = getQuery12((res) => {
|
|
|
- // this.eac(res.data);
|
|
|
- // this.init_myChart2(res.data);
|
|
|
- // }, 70000);
|
|
|
- this.cindex = 0;
|
|
|
+ this.getbigGetLarge3()
|
|
|
},
|
|
|
beforeUnmount() {
|
|
|
- this.timeId();
|
|
|
+
|
|
|
},
|
|
|
watch: {
|
|
|
- cindex(newVal, oldValue) {
|
|
|
- if (oldValue !== -1) {
|
|
|
- this.$refs.elCarousel.next();
|
|
|
- }
|
|
|
- if (this.timed) {
|
|
|
- clearTimeout(this.timed);
|
|
|
- }
|
|
|
- this.timed = setTimeout(() => {
|
|
|
- this.cindex = this.cindex ? 0 : 1;
|
|
|
- }, 30000);
|
|
|
- },
|
|
|
+ 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.ddate.split(' ')[0];
|
|
|
+ var str1 = item.dstr.split(' ')[0];
|
|
|
return str1.slice(5);
|
|
|
});
|
|
|
var data = value.map((item) => {
|
|
|
- return item.badapp;
|
|
|
+ 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',
|
|
@@ -113,10 +97,10 @@ export default {
|
|
|
subtext: '',
|
|
|
},
|
|
|
grid: {
|
|
|
- x: csize(65),
|
|
|
+ x: csize(40),
|
|
|
y: csize(40),
|
|
|
- x2: csize(30),
|
|
|
- y2: csize(30),
|
|
|
+ x2: csize(20),
|
|
|
+ y2: csize(20),
|
|
|
},
|
|
|
xAxis: {
|
|
|
data: times,
|
|
@@ -138,11 +122,15 @@ export default {
|
|
|
color: '#8AB1DC',
|
|
|
},
|
|
|
},
|
|
|
+ boundaryGap: false,
|
|
|
},
|
|
|
yAxis: [
|
|
|
{
|
|
|
+ min: minY,
|
|
|
+ max: maxY,
|
|
|
+ interval: interval,
|
|
|
type: 'value',
|
|
|
- name: '单位(单)',
|
|
|
+ name: '人(次)',
|
|
|
nameTextStyle: {
|
|
|
fontSize: csize(16),
|
|
|
},
|
|
@@ -176,8 +164,10 @@ export default {
|
|
|
series: [
|
|
|
{
|
|
|
// For shadow
|
|
|
- type: 'bar',
|
|
|
+ type: 'line',
|
|
|
barWidth: 10,
|
|
|
+ smooth: true, // 设置平滑曲线
|
|
|
+ symbol: 'none', // 隐藏节点
|
|
|
itemStyle: {
|
|
|
color: 'rgba(0,0,0,0.05)',
|
|
|
},
|
|
@@ -187,8 +177,10 @@ export default {
|
|
|
animation: false,
|
|
|
},
|
|
|
{
|
|
|
- type: 'bar',
|
|
|
+ type: 'line',
|
|
|
barWidth: 10,
|
|
|
+ smooth: true, // 设置平滑曲线
|
|
|
+ symbol: 'none', // 隐藏节点
|
|
|
itemStyle: {
|
|
|
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
|
|
|
{ offset: 0, color: '#0efdff' },
|
|
@@ -197,6 +189,18 @@ export default {
|
|
|
]),
|
|
|
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, [
|
|
@@ -211,248 +215,8 @@ export default {
|
|
|
},
|
|
|
],
|
|
|
};
|
|
|
- if (myChart) {
|
|
|
- myChart.dispose();
|
|
|
- }
|
|
|
- myChart = new echarts.init(document.getElementById('chartmain_1'));
|
|
|
- myChart.setOption(option);
|
|
|
- },
|
|
|
- init_myChart2(value) {
|
|
|
- var times = value.map((item) => {
|
|
|
- var str1 = item.ddate.split(' ')[0];
|
|
|
- return str1.slice(5);
|
|
|
- });
|
|
|
- var data = value.map((item) => {
|
|
|
- return item.goodrate;
|
|
|
- });
|
|
|
- var data1 = value.map((item) => {
|
|
|
- return item.insrate;
|
|
|
- });
|
|
|
- var data2 = value.map((item) => {
|
|
|
- return item.reprate;
|
|
|
- });
|
|
|
- if (myChart2) {
|
|
|
- myChart2.dispose();
|
|
|
- }
|
|
|
- myChart2 = new echarts.init(document.getElementById('chartmain_2'));
|
|
|
- myChart2.setOption({
|
|
|
- tooltip: {
|
|
|
- trigger: 'axis',
|
|
|
- formatter: function (params) {
|
|
|
- var res = '';
|
|
|
- for (var i = 0, l = params.length; i < l; i++) {
|
|
|
- res +=
|
|
|
- '' + params[i].seriesName + ' : ' + params[i].value + '<br>';
|
|
|
- }
|
|
|
- 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',
|
|
|
- },
|
|
|
- },
|
|
|
- },
|
|
|
- legend: {
|
|
|
- icon: 'circle',
|
|
|
- itemWidth: 8,
|
|
|
- itemHeight: 8,
|
|
|
- itemGap: 10,
|
|
|
- top: '16',
|
|
|
- right: '10',
|
|
|
- data: ['好评率', '安装评价率', '维修评价率'],
|
|
|
- textStyle: {
|
|
|
- fontSize: csize(16),
|
|
|
- color: '#8AB1DC',
|
|
|
- },
|
|
|
- },
|
|
|
- grid: {
|
|
|
- x: csize(65),
|
|
|
- y: csize(50),
|
|
|
- x2: csize(30),
|
|
|
- y2: csize(30),
|
|
|
- },
|
|
|
- xAxis: [
|
|
|
- {
|
|
|
- type: 'category',
|
|
|
- boundaryGap: false,
|
|
|
- axisLabel: {
|
|
|
- interval: Math.floor(times.length / 15),
|
|
|
- showMinLabel: true, //是否显示最小 tick 的 label
|
|
|
- showMaxLabel: true, //是否显示最大 tick 的 label
|
|
|
- fontSize: csize(12),
|
|
|
- },
|
|
|
- axisLine: {
|
|
|
- show: false,
|
|
|
- lineStyle: {
|
|
|
- color: '#8AB1DC',
|
|
|
- },
|
|
|
- },
|
|
|
- axisTick: {
|
|
|
- show: false,
|
|
|
- },
|
|
|
- data: times,
|
|
|
- },
|
|
|
- ],
|
|
|
- yAxis: [
|
|
|
- {
|
|
|
- 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,
|
|
|
- },
|
|
|
- },
|
|
|
- ],
|
|
|
- series: [
|
|
|
- {
|
|
|
- name: '好评率',
|
|
|
- type: 'line',
|
|
|
- smooth: true,
|
|
|
- showSymbol: false,
|
|
|
- lineStyle: {
|
|
|
- normal: {
|
|
|
- width: 2,
|
|
|
- },
|
|
|
- },
|
|
|
- areaStyle: {
|
|
|
- normal: {
|
|
|
- color: new echarts.graphic.LinearGradient(
|
|
|
- 0,
|
|
|
- 0,
|
|
|
- 0,
|
|
|
- 1,
|
|
|
- [
|
|
|
- {
|
|
|
- offset: 0,
|
|
|
- color: 'rgba(137, 189, 27, 0.3)',
|
|
|
- },
|
|
|
- {
|
|
|
- offset: 0.8,
|
|
|
- color: 'rgba(137, 189, 27, 0)',
|
|
|
- },
|
|
|
- ],
|
|
|
- false
|
|
|
- ),
|
|
|
- shadowColor: 'rgba(0, 0, 0, 0.1)',
|
|
|
- shadowBlur: 10,
|
|
|
- },
|
|
|
- },
|
|
|
- itemStyle: {
|
|
|
- normal: {
|
|
|
- color: '#F34799',
|
|
|
- },
|
|
|
- },
|
|
|
- data: data,
|
|
|
- },
|
|
|
- {
|
|
|
- name: '安装评价率',
|
|
|
- type: 'line',
|
|
|
- smooth: true,
|
|
|
- showSymbol: false,
|
|
|
- lineStyle: {
|
|
|
- normal: {
|
|
|
- width: 2,
|
|
|
- },
|
|
|
- },
|
|
|
- areaStyle: {
|
|
|
- normal: {
|
|
|
- color: new echarts.graphic.LinearGradient(
|
|
|
- 0,
|
|
|
- 0,
|
|
|
- 0,
|
|
|
- 1,
|
|
|
- [
|
|
|
- {
|
|
|
- offset: 0,
|
|
|
- color: 'rgba(137, 189, 27, 0.3)',
|
|
|
- },
|
|
|
- {
|
|
|
- offset: 0.8,
|
|
|
- color: 'rgba(137, 189, 27, 0)',
|
|
|
- },
|
|
|
- ],
|
|
|
- false
|
|
|
- ),
|
|
|
- shadowColor: 'rgba(0, 0, 0, 0.1)',
|
|
|
- shadowBlur: 10,
|
|
|
- },
|
|
|
- },
|
|
|
- itemStyle: {
|
|
|
- normal: {
|
|
|
- color: '#1cc840',
|
|
|
- },
|
|
|
- },
|
|
|
- data: data1,
|
|
|
- },
|
|
|
- {
|
|
|
- name: '维修评价率',
|
|
|
- type: 'line',
|
|
|
- smooth: true,
|
|
|
- showSymbol: false,
|
|
|
- lineStyle: {
|
|
|
- normal: {
|
|
|
- width: 2,
|
|
|
- },
|
|
|
- },
|
|
|
- areaStyle: {
|
|
|
- normal: {
|
|
|
- color: new echarts.graphic.LinearGradient(
|
|
|
- 0,
|
|
|
- 0,
|
|
|
- 0,
|
|
|
- 1,
|
|
|
- [
|
|
|
- {
|
|
|
- offset: 0,
|
|
|
- color: 'rgba(0, 136, 212, 0.3)',
|
|
|
- },
|
|
|
- {
|
|
|
- offset: 0.8,
|
|
|
- color: 'rgba(0, 136, 212, 0)',
|
|
|
- },
|
|
|
- ],
|
|
|
- false
|
|
|
- ),
|
|
|
- shadowColor: 'rgba(0, 0, 0, 0.1)',
|
|
|
- shadowBlur: 10,
|
|
|
- },
|
|
|
- },
|
|
|
- itemStyle: {
|
|
|
- normal: {
|
|
|
- color: '#43bbfb',
|
|
|
- },
|
|
|
- },
|
|
|
- data: data2,
|
|
|
- },
|
|
|
- ],
|
|
|
- });
|
|
|
+ that.myChart = new echarts.init(document.getElementById('chartmain_fkell'));
|
|
|
+ that.myChart.setOption(option);
|
|
|
},
|
|
|
},
|
|
|
};
|
|
@@ -460,27 +224,34 @@ export default {
|
|
|
|
|
|
<style scoped lang="scss">
|
|
|
.classbtns {
|
|
|
- width: 160px;
|
|
|
- height: 28px;
|
|
|
+ width: 200px;
|
|
|
+ height: 30px;
|
|
|
display: flex;
|
|
|
flex-direction: row;
|
|
|
+ justify-content: space-between;
|
|
|
align-items: center;
|
|
|
- border: 2px solid #0e72e6;
|
|
|
cursor: pointer;
|
|
|
- div {
|
|
|
- width: 50%;
|
|
|
+
|
|
|
+ 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: 2px solid #0e72e6;
|
|
|
+ border-right: 1px solid #0e72e6;
|
|
|
}
|
|
|
+
|
|
|
.select {
|
|
|
background: #0e72e6;
|
|
|
color: #bbd4ff;
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
::v-deep .el-carousel__arrow,
|
|
|
::v-deep .el-carousel__indicators {
|
|
|
display: none;
|