|
@@ -1,29 +1,37 @@
|
|
|
<template>
|
|
|
<moduleEnclosure title="近30天累计工单统计">
|
|
|
- <div id="main4" style="width: 100%; height: 100%">
|
|
|
- <div class="mode mode1">
|
|
|
- <div class="title">工单类型</div>
|
|
|
- <div class="text">累计安装台数</div>
|
|
|
- <div class="text">累计维修台数</div>
|
|
|
- <div class="text">累计清洗台数</div>
|
|
|
- <div class="text">增值服务工单</div>
|
|
|
- <div class="text">维修工程工单</div>
|
|
|
- </div>
|
|
|
- <div class="mode mode2">
|
|
|
- <div class="title">数量</div>
|
|
|
- <div class="text">123412</div>
|
|
|
- <div class="text">1225</div>
|
|
|
- <div class="text">342</div>
|
|
|
- <div class="text">234234</div>
|
|
|
- <div class="text">6234</div>
|
|
|
- </div>
|
|
|
- <div class="mode mode3">
|
|
|
- <div class="title">占比</div>
|
|
|
- <div class="up">12%<i class="el-icon-top"></i></div>
|
|
|
- <div class="up">45%<i class="el-icon-top"></i></div>
|
|
|
- <div class="down">11%<i class="el-icon-bottom"></i></div>
|
|
|
- <div class="up">20%<i class="el-icon-top"></i></div>
|
|
|
- <div class="down">12%<i class="el-icon-bottom"></i></div>
|
|
|
+ <div class="all-container">
|
|
|
+ <div class="table-container">
|
|
|
+ <div class="th row">
|
|
|
+ <div>订单类型</div>
|
|
|
+ <div>数量</div>
|
|
|
+ <div>占比</div>
|
|
|
+ </div>
|
|
|
+ <div class="td row">
|
|
|
+ <div>累计安装台数</div>
|
|
|
+ <div>{{statsData.azgd || 0}}</div>
|
|
|
+ <div>{{statsData.azgdzb || 0}}%</div>
|
|
|
+ </div>
|
|
|
+ <div class="td row">
|
|
|
+ <div>累计维修台数</div>
|
|
|
+ <div>{{statsData.wxgd || 0}}</div>
|
|
|
+ <div>{{statsData.wxgdzb || 0}}%</div>
|
|
|
+ </div>
|
|
|
+ <div class="td row">
|
|
|
+ <div>累计清洗台数</div>
|
|
|
+ <div>{{statsData.qxgd || 0}}</div>
|
|
|
+ <div>{{statsData.qxgdzb || 0}}%</div>
|
|
|
+ </div>
|
|
|
+ <div class="td row">
|
|
|
+ <div>增值服务工单</div>
|
|
|
+ <div>{{statsData.zzgd || 0}}</div>
|
|
|
+ <div>{{statsData.zzgdzb || 0}}%</div>
|
|
|
+ </div>
|
|
|
+ <div class="td row">
|
|
|
+ <div>维保工程工单</div>
|
|
|
+ <div>{{statsData.wbgd || 0}}</div>
|
|
|
+ <div>{{statsData.wbgdzb || 0}}%</div>
|
|
|
+ </div>
|
|
|
</div>
|
|
|
</div>
|
|
|
</moduleEnclosure>
|
|
@@ -31,258 +39,71 @@
|
|
|
|
|
|
<script>
|
|
|
import moduleEnclosure from '@/components/moduleEnclosure.vue';
|
|
|
- import * as echarts from 'echarts';
|
|
|
- import {
|
|
|
- getQuery9
|
|
|
- } from '@/api/bigView.js';
|
|
|
- import {
|
|
|
- csize
|
|
|
- } from '@/utils/const.js';
|
|
|
- let myChart1;
|
|
|
+ import { getWorkorderStats } from '@/api/bigView.js';
|
|
|
+
|
|
|
export default {
|
|
|
components: {
|
|
|
moduleEnclosure,
|
|
|
},
|
|
|
data() {
|
|
|
return {
|
|
|
- myChart: null,
|
|
|
+ statsData: {},
|
|
|
};
|
|
|
},
|
|
|
+
|
|
|
mounted() {
|
|
|
- this.timeId = getQuery9((res) => {
|
|
|
- this.eac(res.data);
|
|
|
- }, 60000);
|
|
|
+ this.getData();
|
|
|
},
|
|
|
+
|
|
|
beforeUnmount() {
|
|
|
- this.timeId();
|
|
|
+
|
|
|
},
|
|
|
+
|
|
|
methods: {
|
|
|
- eac(value) {
|
|
|
- var names = [];
|
|
|
- var fz = 2000;
|
|
|
- var values1 = [...value].sort((a, b) => {
|
|
|
- return b.cut - a.cut;
|
|
|
- });
|
|
|
- var values2 = [...value].sort((a, b) => {
|
|
|
- return b.machine_num - a.machine_num;
|
|
|
- });
|
|
|
- for (var i = 0; i < 4; i++) {
|
|
|
- var name1 = values1[i].sales_type;
|
|
|
- var name2 = values2[i].sales_type;
|
|
|
- if (!~names.indexOf(name1)) {
|
|
|
- names.push(name1);
|
|
|
- }
|
|
|
- if (!~names.indexOf(name2)) {
|
|
|
- names.push(name2);
|
|
|
- }
|
|
|
- }
|
|
|
- var obj = {
|
|
|
- sales_type: '其他',
|
|
|
- cut: 0,
|
|
|
- machine_num: 0,
|
|
|
- };
|
|
|
- var list = value.filter((item) => {
|
|
|
- if (
|
|
|
- ~names.indexOf(item.sales_type) ||
|
|
|
- item.cut > fz ||
|
|
|
- item.machine_num > fz
|
|
|
- ) {
|
|
|
- return true;
|
|
|
- } else {
|
|
|
- obj.cut += item.cut;
|
|
|
- obj.machine_num += item.machine_num;
|
|
|
- return false;
|
|
|
- }
|
|
|
- });
|
|
|
- list.push(obj);
|
|
|
- var dataAxis = list.map((item) => item.sales_type);
|
|
|
- var data1 = list.map((item) => item.cut);
|
|
|
- var data2 = list.map((item) => item.machine_num);
|
|
|
- var option = {
|
|
|
- tooltip: {
|
|
|
- trigger: 'axis',
|
|
|
- formatter: function(params) {
|
|
|
- var res = '新增工单' + ' : ' + params[0].value + '<br/>';
|
|
|
- res += '设备总量' + ' : ' + params[1].value + '<br/>';
|
|
|
- return `<div style="color:#fff;"><div>${params[0].name}</div>${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: '',
|
|
|
- },
|
|
|
- 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: {
|
|
|
- data: dataAxis,
|
|
|
- axisLabel: {
|
|
|
- /*inside: true,*/
|
|
|
- interval: 0,
|
|
|
- textStyle: {
|
|
|
- fontSize: csize(16),
|
|
|
- },
|
|
|
- },
|
|
|
- axisTick: {
|
|
|
- show: false,
|
|
|
- },
|
|
|
- axisLine: {
|
|
|
- show: false,
|
|
|
- symbol: ['none', 'arrow'],
|
|
|
- symbolOffset: 12,
|
|
|
- lineStyle: {
|
|
|
- fontSize: csize(12),
|
|
|
- color: '#8AB1DC',
|
|
|
- },
|
|
|
- },
|
|
|
- },
|
|
|
- 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,
|
|
|
- },
|
|
|
- }, ],
|
|
|
- dataZoom: [{
|
|
|
- type: 'inside',
|
|
|
- }, ],
|
|
|
- series: [{
|
|
|
- name: '新增工单',
|
|
|
- type: 'bar',
|
|
|
- barGap: 0.2,
|
|
|
- barWidth: 8,
|
|
|
- itemStyle: {
|
|
|
- normal: {
|
|
|
- show: true,
|
|
|
- color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [{
|
|
|
- offset: 0,
|
|
|
- color: '#35d4cb',
|
|
|
- },
|
|
|
- {
|
|
|
- offset: 1,
|
|
|
- color: '#3cf8ed',
|
|
|
- },
|
|
|
- ]),
|
|
|
- barBorderRadius: 10,
|
|
|
- },
|
|
|
- },
|
|
|
- data: data1,
|
|
|
- },
|
|
|
- {
|
|
|
- name: '设备总量',
|
|
|
- type: 'bar',
|
|
|
- barGap: 0.2,
|
|
|
- barWidth: 8,
|
|
|
- itemStyle: {
|
|
|
- normal: {
|
|
|
- show: true,
|
|
|
- color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [{
|
|
|
- offset: 0,
|
|
|
- color: '#3077bd',
|
|
|
- },
|
|
|
- {
|
|
|
- offset: 1,
|
|
|
- color: '#3d99fd',
|
|
|
- },
|
|
|
- ]),
|
|
|
- barBorderRadius: 10,
|
|
|
- },
|
|
|
- },
|
|
|
- data: data2,
|
|
|
- },
|
|
|
- ],
|
|
|
- };
|
|
|
- if (myChart1) {
|
|
|
- myChart1.dispose();
|
|
|
- }
|
|
|
- myChart1 = new echarts.init(document.getElementById('main4'));
|
|
|
- myChart1.setOption(option);
|
|
|
+ getData() {
|
|
|
+ getWorkorderStats().then(res => {
|
|
|
+ this.statsData = res.data;
|
|
|
+ })
|
|
|
},
|
|
|
},
|
|
|
};
|
|
|
</script>
|
|
|
|
|
|
<style scoped lang="scss">
|
|
|
- #main4 {
|
|
|
- display: flex;
|
|
|
- padding-top: 20px;
|
|
|
- .mode {
|
|
|
- line-height: 34px;
|
|
|
- .title {
|
|
|
- font-size: 18px;
|
|
|
- color: #1a8dc8;
|
|
|
- }
|
|
|
-
|
|
|
- .text {
|
|
|
- color: #ffffff;
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- .up {
|
|
|
+.all-container {
|
|
|
+ width: 100%;
|
|
|
+ height: 100%;
|
|
|
+ box-sizing: border-box;
|
|
|
+ padding-top: 12px;
|
|
|
+ position: relative;
|
|
|
+}
|
|
|
+.table-container {
|
|
|
+ height: 100%;
|
|
|
+ display: flex;
|
|
|
+ flex-direction: column;
|
|
|
+ justify-content: space-between;
|
|
|
+ .row {
|
|
|
+ display: flex;
|
|
|
+ &.th {
|
|
|
+ font-weight: bold;
|
|
|
+ color: #26A3CE;
|
|
|
+ }
|
|
|
+ &.td {
|
|
|
+ color: #ffffff;
|
|
|
+ div:last-child {
|
|
|
color: #e4f824;
|
|
|
}
|
|
|
-
|
|
|
- .down {
|
|
|
- color: #c81637;
|
|
|
- }
|
|
|
- }
|
|
|
- .mode1{
|
|
|
- width: 40%;
|
|
|
- }
|
|
|
- .mode2{
|
|
|
- width: 40%;
|
|
|
- }
|
|
|
- .mode3{
|
|
|
- width: 20%;
|
|
|
- }
|
|
|
- }
|
|
|
+ }
|
|
|
+ div {
|
|
|
+ flex: 1;
|
|
|
+ font-size: 14px;
|
|
|
+ &:nth-child(2) {
|
|
|
+ text-align: center;
|
|
|
+ }
|
|
|
+ &:nth-child(3) {
|
|
|
+ text-align: right;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
</style>
|