Browse Source

提交页面

duwendi 1 year ago
parent
commit
781f8df911

+ 14 - 14
src/pages/index/components/city_arrears.vue

@@ -2,20 +2,20 @@
2 2
   <div class="body-wrapper">
3 3
     <h2 style="color: #3498db;">欠费历史分析</h2>
4 4
     <br>
5
-    <el-form class="form-wrapper" :inline="true" :model="formInline">
6
-      <el-form-item label="">
7
-        <el-select clearable v-model="formInline.comType" placeholder="全部" popper-class="cur-select">
8
-          <el-option label="全部" value=""></el-option>
9
-          <el-option label="经营服务类停车问题" value="经营服务类停车问题"></el-option>
10
-          <el-option label="非法经营停车问题" value="非法经营停车问题"></el-option>
11
-          <el-option label="不提供税票" value="不提供税票"></el-option>
12
-          <el-option label="设备问题" value="设备问题"></el-option>
13
-        </el-select>
14
-      </el-form-item>
15
-      <el-form-item>
16
-        <el-button type="primary" @click="onSubmit">查询</el-button>
17
-      </el-form-item>
18
-    </el-form>
5
+<!--    <el-form class="form-wrapper" :inline="true" :model="formInline">-->
6
+<!--      <el-form-item label="">-->
7
+<!--        <el-select clearable v-model="formInline.comType" placeholder="全部" popper-class="cur-select">-->
8
+<!--          <el-option label="全部" value=""></el-option>-->
9
+<!--          <el-option label="经营服务类停车问题" value="经营服务类停车问题"></el-option>-->
10
+<!--          <el-option label="非法经营停车问题" value="非法经营停车问题"></el-option>-->
11
+<!--          <el-option label="不提供税票" value="不提供税票"></el-option>-->
12
+<!--          <el-option label="设备问题" value="设备问题"></el-option>-->
13
+<!--        </el-select>-->
14
+<!--      </el-form-item>-->
15
+<!--      <el-form-item>-->
16
+<!--        <el-button type="primary" @click="onSubmit">查询</el-button>-->
17
+<!--      </el-form-item>-->
18
+<!--    </el-form>-->
19 19
     <br>
20 20
     <br>
21 21
       <div style="width: 100%; height: 600px">

+ 140 - 0
src/pages/index/components/city_contrast.vue

@@ -0,0 +1,140 @@
1
+<template>
2
+  <div class="body-wrapper">
3
+    <h2 style="color: #3498db;">各城市实收对比</h2>
4
+    <br>
5
+<!--    <el-form class="form-wrapper" :inline="true" :model="formInline">-->
6
+<!--      <el-form-item label="">-->
7
+<!--        <el-select clearable v-model="formInline.comType" placeholder="全部" popper-class="cur-select">-->
8
+<!--          <el-option label="全部" value=""></el-option>-->
9
+<!--          <el-option label="经营服务类停车问题" value="经营服务类停车问题"></el-option>-->
10
+<!--          <el-option label="非法经营停车问题" value="非法经营停车问题"></el-option>-->
11
+<!--          <el-option label="不提供税票" value="不提供税票"></el-option>-->
12
+<!--          <el-option label="设备问题" value="设备问题"></el-option>-->
13
+<!--        </el-select>-->
14
+<!--      </el-form-item>-->
15
+<!--      <el-form-item>-->
16
+<!--        <el-button type="primary" @click="onSubmit">查询</el-button>-->
17
+<!--      </el-form-item>-->
18
+<!--    </el-form>-->
19
+<!--    <br>-->
20
+<!--    <br>-->
21
+      <div style="width: 100%; height: 600px">
22
+        <linechart
23
+          :autoStop="false"
24
+          :top="30"
25
+          :bottom="30"
26
+          :left="40"
27
+          :legendTop="0"
28
+          yAxisName="(元)"
29
+          :dataset="linedata"
30
+          :tooltipFormat="lineTooltipFormat"
31
+          :encode="[
32
+              { x: 'mouth', y: 'lastAmount', seriesName: '',bool:'true' },
33
+            ]"
34
+          id="axstj"
35
+        />
36
+      </div>
37
+  </div>
38
+</template>
39
+<script>
40
+import piechart from "@/components/pieChart";
41
+import linechart from "@/components/lineChart";
42
+import barchart from "@/components/barChart";
43
+import api from "@/api/article_liao";
44
+
45
+export default {
46
+  components: {
47
+    piechart,
48
+    barchart,
49
+    linechart
50
+  },
51
+  data() {
52
+    return {
53
+      formInline: {
54
+        comType: ''
55
+      },
56
+      modelPieColor: ["#4382f6","#9078f8", "#79a7db", "#FF9800", "#9C27B0"],
57
+      modelPieColor1: ["#4382f6","#9078f8", "#6aa1e1", "#FF9800", "#9C27B0"],
58
+      modelData: {
59
+        list: [],
60
+        list1: []
61
+      },
62
+      bardata: [],
63
+      linedata: []
64
+    }
65
+  },
66
+  mounted() {
67
+    this.businessAnalysisStat()
68
+    this.businessAnalysisStat2()
69
+    this.businessAnalysisStat3()
70
+  },
71
+  watch: {
72
+
73
+  },
74
+  methods: {
75
+    tooltipFormat(params) {
76
+      const type = params[0].seriesType;
77
+      const data = params[0].data;
78
+      return `<div class="line-tooltip">
79
+<div>${params[0].seriesName}: ${
80
+        params[0].data.hs || "--"}元</div>
81
+<div>${params[1].seriesName}: ${
82
+        params[0].data.cs || "--"}元</div>
83
+</div>`;
84
+    },
85
+    lineTooltipFormat(params) {
86
+      return `<div class="line-tooltip">
87
+        <div style="color: ${params[0].color}">${params[0].data.mouth} : ${
88
+        params[0].data.lastAmount  || "--"
89
+      }元</div>`;
90
+    },
91
+    onSubmit() {
92
+      this.pageNum = 1
93
+      this.getTableData()
94
+    },
95
+    businessAnalysisStat(){
96
+      api.businessAnalysisStat().then(res =>{
97
+        this.bardata = res.data
98
+      })
99
+    },
100
+    businessAnalysisStat2(){
101
+      api.businessAnalysisStat2().then(res =>{
102
+        this.modelData.list = res.data
103
+      })
104
+    },
105
+    businessAnalysisStat3(){
106
+      api.businessAnalysisStat3().then(res =>{
107
+        this.modelData.list1 = res.data
108
+      })
109
+    },
110
+    xLabelFormat(name) {
111
+      const nameArr = []
112
+      for(let i=0; i<name.length; i+=7) {
113
+        nameArr.push(name.substring(i, i+7))
114
+      }
115
+      return nameArr.join('\n');
116
+    }
117
+  }
118
+}
119
+</script>
120
+<style  lang="scss" scoped>
121
+.body-wrapper {
122
+  width: 100%;
123
+  height: 100%;
124
+  box-sizing: border-box;
125
+  background: #0c0c0c;
126
+
127
+}
128
+.model-pie-body {
129
+  width: 100%;
130
+  height: 99%;
131
+}
132
+/deep/ .el-select {
133
+  height: 40px;
134
+
135
+  .el-input__inner {
136
+    height: 40px;
137
+  }
138
+}
139
+
140
+</style>

+ 140 - 0
src/pages/index/components/city_pay.vue

@@ -0,0 +1,140 @@
1
+<template>
2
+  <div class="body-wrapper">
3
+    <h2 style="color: #3498db;">各城市欠费追缴分析</h2>
4
+    <br>
5
+<!--    <el-form class="form-wrapper" :inline="true" :model="formInline">-->
6
+<!--      <el-form-item label="">-->
7
+<!--        <el-select clearable v-model="formInline.comType" placeholder="全部" popper-class="cur-select">-->
8
+<!--          <el-option label="全部" value=""></el-option>-->
9
+<!--          <el-option label="经营服务类停车问题" value="经营服务类停车问题"></el-option>-->
10
+<!--          <el-option label="非法经营停车问题" value="非法经营停车问题"></el-option>-->
11
+<!--          <el-option label="不提供税票" value="不提供税票"></el-option>-->
12
+<!--          <el-option label="设备问题" value="设备问题"></el-option>-->
13
+<!--        </el-select>-->
14
+<!--      </el-form-item>-->
15
+<!--      <el-form-item>-->
16
+<!--        <el-button type="primary" @click="onSubmit">查询</el-button>-->
17
+<!--      </el-form-item>-->
18
+<!--    </el-form>-->
19
+    <br>
20
+    <br>
21
+      <div style="width: 100%; height: 600px">
22
+        <linechart
23
+          :autoStop="false"
24
+          :top="30"
25
+          :bottom="30"
26
+          :left="40"
27
+          :legendTop="0"
28
+          yAxisName="(元)"
29
+          :dataset="linedata"
30
+          :tooltipFormat="lineTooltipFormat"
31
+          :encode="[
32
+              { x: 'mouth', y: 'lastAmount', seriesName: '',bool:'true' },
33
+            ]"
34
+          id="axstj"
35
+        />
36
+      </div>
37
+  </div>
38
+</template>
39
+<script>
40
+import piechart from "@/components/pieChart";
41
+import linechart from "@/components/lineChart";
42
+import barchart from "@/components/barChart";
43
+import api from "@/api/article_liao";
44
+
45
+export default {
46
+  components: {
47
+    piechart,
48
+    barchart,
49
+    linechart
50
+  },
51
+  data() {
52
+    return {
53
+      formInline: {
54
+        comType: ''
55
+      },
56
+      modelPieColor: ["#4382f6","#9078f8", "#79a7db", "#FF9800", "#9C27B0"],
57
+      modelPieColor1: ["#4382f6","#9078f8", "#6aa1e1", "#FF9800", "#9C27B0"],
58
+      modelData: {
59
+        list: [],
60
+        list1: []
61
+      },
62
+      bardata: [],
63
+      linedata: []
64
+    }
65
+  },
66
+  mounted() {
67
+    this.businessAnalysisStat()
68
+    this.businessAnalysisStat2()
69
+    this.businessAnalysisStat3()
70
+  },
71
+  watch: {
72
+
73
+  },
74
+  methods: {
75
+    tooltipFormat(params) {
76
+      const type = params[0].seriesType;
77
+      const data = params[0].data;
78
+      return `<div class="line-tooltip">
79
+<div>${params[0].seriesName}: ${
80
+        params[0].data.hs || "--"}元</div>
81
+<div>${params[1].seriesName}: ${
82
+        params[0].data.cs || "--"}元</div>
83
+</div>`;
84
+    },
85
+    lineTooltipFormat(params) {
86
+      return `<div class="line-tooltip">
87
+        <div style="color: ${params[0].color}">${params[0].data.mouth} : ${
88
+        params[0].data.lastAmount  || "--"
89
+      }元</div>`;
90
+    },
91
+    onSubmit() {
92
+      this.pageNum = 1
93
+      this.getTableData()
94
+    },
95
+    businessAnalysisStat(){
96
+      api.businessAnalysisStat().then(res =>{
97
+        this.bardata = res.data
98
+      })
99
+    },
100
+    businessAnalysisStat2(){
101
+      api.businessAnalysisStat2().then(res =>{
102
+        this.modelData.list = res.data
103
+      })
104
+    },
105
+    businessAnalysisStat3(){
106
+      api.businessAnalysisStat3().then(res =>{
107
+        this.modelData.list1 = res.data
108
+      })
109
+    },
110
+    xLabelFormat(name) {
111
+      const nameArr = []
112
+      for(let i=0; i<name.length; i+=7) {
113
+        nameArr.push(name.substring(i, i+7))
114
+      }
115
+      return nameArr.join('\n');
116
+    }
117
+  }
118
+}
119
+</script>
120
+<style  lang="scss" scoped>
121
+.body-wrapper {
122
+  width: 100%;
123
+  height: 100%;
124
+  box-sizing: border-box;
125
+  background: #0c0c0c;
126
+
127
+}
128
+.model-pie-body {
129
+  width: 100%;
130
+  height: 99%;
131
+}
132
+/deep/ .el-select {
133
+  height: 40px;
134
+
135
+  .el-input__inner {
136
+    height: 40px;
137
+  }
138
+}
139
+
140
+</style>

+ 180 - 0
src/pages/index/components/customer_price_analysis.vue

@@ -0,0 +1,180 @@
1
+<template>
2
+  <div class="body-wrapper">
3
+    <div class="search-card">
4
+      <h5>客单价分析</h5>
5
+    </div>
6
+    <br>
7
+    <div class="charts_all">
8
+      <div class="charts">
9
+        <piechart
10
+          class="model-pie-body"
11
+          :roseType="false"
12
+          id="chart1"
13
+          :radiusArr="['0%', '70%']"
14
+          :colorArr="modelPieColor"
15
+          :labelFormat="['{name|{b}}', '{sub|{@value}起 {d}%}', '{hr|}']"
16
+          :dataset="modelData"
17
+          :encode="{ itemName: 'name', value: 'value' }"
18
+        />
19
+      </div>
20
+    </div>
21
+  </div>
22
+</template>
23
+<script>
24
+import piechart from "@/components/pieChart";
25
+import api from "@/api/article_z";
26
+
27
+export default {
28
+  components: {
29
+    piechart
30
+  },
31
+  data() {
32
+    return {
33
+      modelPieColor: ["#4382f6","#9078f8","#C1FFC1","#1E90FF"],
34
+      modelData: [],
35
+      tableData: [],
36
+      total: 0,
37
+      pageSize: 10,
38
+      pageNum: 1,
39
+      radio: '2',
40
+      dialogVisible: false,
41
+      formLabelAlign: {
42
+        mid: '',
43
+        searchWords:''
44
+      },
45
+      selRow: undefined,
46
+      searchWords: undefined,
47
+      title: ''
48
+    }
49
+  },
50
+  mounted() {
51
+    this.getModelDataData()
52
+  },
53
+  watch: {
54
+  },
55
+  methods: {
56
+    getModelDataData(){
57
+      api.queryCustomerComplaint_Ksfx().then(res=>{
58
+        this.modelData = res.data;
59
+      })
60
+    },
61
+  }
62
+}
63
+</script>
64
+<style  lang="scss" scoped>
65
+.form-wrapper {
66
+  margin-bottom: 20px;
67
+}
68
+/deep/ .el-input__inner {
69
+  background: #2d3744;
70
+  border: none;
71
+  border-radius: 0;
72
+}
73
+/deep/ .el-select {
74
+  height: 40px;
75
+  .el-input__inner {
76
+    height: 40px;
77
+  }
78
+  .el-input__prefix, .el-input__suffix {
79
+    height: 40px;
80
+  }
81
+
82
+  /* 下面设置右侧按钮居中 */
83
+  .el-input__suffix {
84
+    top: 0px;
85
+    display: flex;
86
+    justify-content: center;
87
+    align-items: center;
88
+    flex-wrap: nowrap;
89
+    flex-direction: row;
90
+    align-content: flex-start;
91
+  }
92
+  /* 输入框加上上下边是 32px + 2px =34px */
93
+  .el-input__icon {
94
+    line-height: 0px;
95
+  }
96
+}
97
+/deep/ .form-wrapper .el-button {
98
+  background: linear-gradient(90deg,#0158d9,#3c97e4);
99
+  width: 100px;
100
+  height: 40px;
101
+}
102
+.body-wrapper {
103
+  padding: 20px;
104
+  background: #0c0c0c;
105
+  width: 100%;
106
+  .button-block{
107
+    text-align: right;
108
+    margin-bottom: 20px;
109
+  }
110
+  .table-pagination{
111
+    text-align: right;
112
+  }
113
+  .search-card{
114
+    font-size: 24px;
115
+    font-weight: bold;
116
+    color: #3498db;
117
+    margin-bottom: 20px;
118
+    .input-wrapper{
119
+      width: 36%;
120
+    }
121
+  }
122
+}
123
+
124
+.charts_all{
125
+  display: flex;
126
+  justify-content: space-around;
127
+  width: 100%;
128
+  height: 400px;
129
+}
130
+
131
+.charts{
132
+  width: 30%;
133
+  height: 300px;
134
+}
135
+.btn_save{
136
+  background-color: #3498db;
137
+  color: #ffffff;
138
+  padding: 10px 20px;
139
+  cursor: pointer;
140
+  border: none;
141
+  border-radius: 4px;
142
+  font-size: 16px;
143
+  height: 40px;
144
+}
145
+
146
+.sel{
147
+  height: 200px;
148
+  margin-right: 10px;
149
+}
150
+
151
+.input-search{
152
+  width: 100%;
153
+  padding: 10px;
154
+  margin-bottom: 20px;
155
+  box-sizing: border-box;
156
+  background-color: #2a2a2a;
157
+  border: 1px solid #333;
158
+  color: #ffffff;
159
+}
160
+.audit-dialog{
161
+  .mg-bt{
162
+    margin-bottom: 24px;
163
+  }
164
+  .label{
165
+    text-align: right;
166
+  }
167
+  .form-div{
168
+    /deep/ .el-input__inner{
169
+      height: 35px;
170
+      width: 100%;
171
+      border: 1px solid #a6a5a5;
172
+      color: #fff;
173
+      background: #2d3744;
174
+    }
175
+    /deep/ .el-input__icon {
176
+      line-height: 35px;
177
+    }
178
+  }
179
+}
180
+</style>

+ 86 - 0
src/pages/index/components/device_report.vue

@@ -0,0 +1,86 @@
1
+<template>
2
+  <div class="body-wrapper">
3
+    <h2 style="color: #3498db;">设备运行统计</h2>
4
+    <br>
5
+    <br>
6
+      <div style="width: 100%; height: 600px">
7
+        <linechart
8
+          :autoStop="false"
9
+          :top="30"
10
+          :bottom="30"
11
+          :left="40"
12
+          :legendTop="0"
13
+          yAxisName="(元)"
14
+          :dataset="linedata"
15
+          :tooltipFormat="lineTooltipFormat"
16
+          :encode="[
17
+              { x: 'mouth', y: 'lastAmount', seriesName: '',bool:'true' },
18
+            ]"
19
+          id="axstj"
20
+        />
21
+      </div>
22
+  </div>
23
+</template>
24
+<script>
25
+import piechart from "@/components/pieChart";
26
+import linechart from "@/components/lineChart";
27
+import barchart from "@/components/barChart";
28
+import api from "@/api/article_liao";
29
+
30
+export default {
31
+  components: {
32
+    piechart,
33
+    barchart,
34
+    linechart
35
+  },
36
+  data() {
37
+    return {
38
+      linedata: []
39
+    }
40
+  },
41
+  mounted() {
42
+    this.businessAnalysisStat()
43
+  },
44
+  watch: {
45
+
46
+  },
47
+  methods: {
48
+    tooltipFormat(params) {
49
+      const type = params[0].seriesType;
50
+      const data = params[0].data;
51
+      return `<div class="line-tooltip">
52
+<div>${params[0].seriesName}: ${
53
+        params[0].data.hs || "--"}元</div>
54
+<div>${params[1].seriesName}: ${
55
+        params[0].data.cs || "--"}元</div>
56
+</div>`;
57
+    },
58
+    businessAnalysisStat(){
59
+      api.businessAnalysisStat().then(res =>{
60
+        this.linedata = res.data
61
+      })
62
+    },
63
+  }
64
+}
65
+</script>
66
+<style  lang="scss" scoped>
67
+.body-wrapper {
68
+  width: 100%;
69
+  height: 100%;
70
+  box-sizing: border-box;
71
+  background: #0c0c0c;
72
+
73
+}
74
+.model-pie-body {
75
+  width: 100%;
76
+  height: 99%;
77
+}
78
+/deep/ .el-select {
79
+  height: 40px;
80
+
81
+  .el-input__inner {
82
+    height: 40px;
83
+  }
84
+}
85
+
86
+</style>

+ 273 - 0
src/pages/index/components/parking.vue

@@ -0,0 +1,273 @@
1
+<template>
2
+  <div class="middle-map">
3
+    <div class="top">
4
+      <div class="title">停车热度时空分布</div>
5
+    </div>
6
+    <div class="bottom" id="map"></div>
7
+  </div>
8
+</template>
9
+
10
+<script>
11
+import * as echarts from 'echarts'
12
+import * as geoJson from '../../../util/411100.json'
13
+
14
+export default {
15
+  data() {
16
+    return {
17
+      dqIndex: -1,
18
+      timer: null,
19
+      option: {
20
+        visualMap: {
21
+          show: true,
22
+          type: "continuous",
23
+          left: "0%",
24
+          bottom: "0%",
25
+          calculable: true,
26
+          textStyle: {
27
+            color: "white",
28
+          },
29
+          text: ["(辆)"],
30
+          min: 0,
31
+          max: 100,
32
+          inRange: {
33
+            color: ["#4FC9FB","#36ADFC","#1788D1","#0E6BAE","#1871A2","#0D4D7D"],
34
+          },
35
+        },
36
+        geo: {
37
+          map: "luohe",
38
+          // aspectScale: 1,
39
+          roam: false,
40
+          itemStyle: {
41
+            normal: {
42
+              borderColor: "#2ab8ff",
43
+              borderWidth: 2.5,
44
+              areaColor: "#12235c",
45
+            },
46
+            emphasis: {
47
+              areaColor: "#2AB8FF",
48
+              shadowColor: "rgba(42,184,255, 0.7)",
49
+              shadowOffsetY: 5,
50
+              shadowOffsetX: 5,
51
+              shadowBlur: 5,
52
+            },
53
+          },
54
+        },
55
+        tooltip: {
56
+          confine: true,
57
+          formatter: this.mapTooltip,
58
+          position: "inside",
59
+          backgroundColor: "transparent",
60
+        },
61
+        series: [
62
+          {
63
+            type: "map",
64
+            // roam: true,
65
+            label: {
66
+              normal: {
67
+                textStyle: {
68
+                  color: "#fff",
69
+                },
70
+              },
71
+              emphasis: {
72
+                show: false,
73
+                textStyle: {
74
+                  color: "#fff",
75
+                },
76
+              },
77
+            },
78
+            itemStyle: {
79
+              normal: {
80
+                borderColor: "#76bef5",
81
+                borderWidth: 1.5,
82
+                areaColor: "#4282de",
83
+              },
84
+              emphasis: {
85
+                areaColor: "#002aff",
86
+                borderWidth: 0,
87
+                color: "green",
88
+              },
89
+            },
90
+            roam: false,
91
+            map: "luohe", //使用
92
+            data: [],
93
+          },
94
+        ],
95
+      },
96
+      curData: {},
97
+      dataSource: null,
98
+      totalAll: '0',
99
+    };
100
+  },
101
+  methods: {
102
+    setIntervalMap(chart) {
103
+      this.timer = setInterval(() => {
104
+        chart.dispatchAction({
105
+          type: "showTip",
106
+          seriesIndex: 0,
107
+          dataIndex: this.dqIndex + 1,
108
+        });
109
+        this.dqIndex++;
110
+        if (this.dqIndex > 4) {
111
+          this.dqIndex = -1;
112
+        }
113
+      }, 3000);
114
+    },
115
+    mapTooltip(data) {
116
+      return `<div class="map-tooltip">
117
+        <div class="map-tooltip-name">${data.name}:<span class="map-tooltip-value">${data.value}%</span></div>
118
+      </div>`;
119
+    },
120
+  },
121
+  mounted() {
122
+    let arr = []
123
+    let dataSoure = {
124
+      '411102': {quyuName: '源汇区', zb: 40},
125
+      '411103': {quyuName: '郾城区', zb: 60},
126
+      '411104': {quyuName: '召陵区', zb: 40},
127
+      '411121': {quyuName: '舞阳县', zb: 50},
128
+      '411122': {quyuName: '临颍县', zb: 30}}
129
+    for (const key in dataSoure) {
130
+      if (key !== '411100') {
131
+        arr.push({
132
+          name: dataSoure[key].quyuName,
133
+          value: Number(dataSoure[key].zb),
134
+        });
135
+      }
136
+    }
137
+    let mapMax = Math.max(...arr.map(item => item.value))
138
+    let mapMin = Math.min(...arr.map(item => item.value))
139
+    let chart = echarts.init(document.getElementById("map"));
140
+    echarts.registerMap("luohe", geoJson);
141
+    this.option.series[0].data = arr;
142
+    this.option.visualMap.min = mapMin;
143
+    this.option.visualMap.max = mapMax;
144
+    chart.setOption(this.option);
145
+    this.dqIndex = -1;
146
+    this.setIntervalMap(chart);
147
+    //鼠标移入静止播放
148
+    chart.on("mouseover", (e) => {
149
+      clearInterval(this.timer);
150
+      chart.dispatchAction({
151
+        type: "showTip",
152
+        seriesIndex: 0,
153
+        dataIndex: e.dataIndex,
154
+      });
155
+    });
156
+    chart.on("mouseout", (e) => {
157
+      clearInterval(this.timer);
158
+      //鼠标移出后先把上次的高亮取消
159
+      chart.dispatchAction({
160
+        type: "downplay",
161
+        seriesIndex: 0,
162
+        dataIndex: e.dataIndex,
163
+      });
164
+      this.setIntervalMap(chart);
165
+    });
166
+  },
167
+};
168
+</script>
169
+
170
+<style lang="less" scoped>
171
+.middle-map {
172
+  width: 100%;
173
+  height: 100%;
174
+  .top {
175
+    height: 10%;
176
+    // padding: 50px 50px 0 50px;
177
+    display: flex;
178
+    flex-direction: column;
179
+    justify-content: space-between;
180
+    font-family: "PingFangSC-Semibold", "PingFang SC Semibold", "PingFang SC";
181
+    .total-detail {
182
+      display: flex;
183
+      margin-top: 10px;
184
+      align-items: center;
185
+      justify-content: center;
186
+      .total-value {
187
+        font-size: 41px;
188
+      }
189
+      .total-unit {
190
+        margin-left: 20px;
191
+        font-size: 20px;
192
+      }
193
+    }
194
+    .title {
195
+      font-weight: 650;
196
+      font-style: normal;
197
+      color: #ffffff;
198
+      font-size: 18px;
199
+    }
200
+    .dq {
201
+      font-weight: 650;
202
+      color: #ffcc00;
203
+      font-size: 24px;
204
+      text-align: center;
205
+    }
206
+    .num-container {
207
+      height: 180px;
208
+      margin-top: 20px;
209
+      display: flex;
210
+      justify-content: space-between;
211
+      width: 100%;
212
+      padding: 0 20px;
213
+      .num-item {
214
+        display: flex;
215
+        flex-direction: column;
216
+        justify-content: space-around;
217
+        // width: 28%;
218
+        .label-box {
219
+          display: flex;
220
+          align-items: center;
221
+          // justify-content: space-between;
222
+          .label {
223
+            font-weight: 650;
224
+            color: #ffcc00;
225
+            font-size: 28px;
226
+          }
227
+          .rate {
228
+            margin-left: 30px;
229
+            font-weight: 650;
230
+            color: #ffcc00;
231
+            font-size: 18px;
232
+          }
233
+        }
234
+        .num-box {
235
+          display: flex;
236
+          justify-content: space-between;
237
+          justify-content: left;
238
+          font-family: "Arial-BoldMT", "Arial Bold", "Arial";
239
+          font-weight: 700;
240
+          .money {
241
+            color: #fff;
242
+            font-size: 22px;
243
+            .num {
244
+              color: #ffcc00;
245
+            }
246
+          }
247
+          .rate {
248
+            color: #008000;
249
+            font-size: 32px;
250
+          }
251
+        }
252
+      }
253
+    }
254
+  }
255
+  .bottom {
256
+    height: 90%;
257
+    width: 100%;
258
+  }
259
+  /deep/.map-tooltip {
260
+    font-size: 18px;
261
+    padding: 10px 20px;
262
+    background: url("../../../../static/img/u231.png");
263
+    background-size: 100% 100%;
264
+    .map-tooltip-name {
265
+      color: #00e4ff;
266
+    }
267
+    .map-tooltip-value {
268
+      color: white;
269
+      margin-left: 20px;
270
+    }
271
+  }
272
+}
273
+</style>

+ 130 - 0
src/pages/index/components/urban_statisics.vue

@@ -0,0 +1,130 @@
1
+<template>
2
+  <div class="body-wrapper">
3
+    <h2 style="color: #3498db;">城市统计分析</h2>
4
+    <br>
5
+<!--    <el-form class="form-wrapper" :inline="true" :model="formInline">-->
6
+<!--      <el-form-item label="">-->
7
+<!--        <el-select clearable v-model="formInline.comType" placeholder="全部" popper-class="cur-select">-->
8
+<!--          <el-option label="全部" value=""></el-option>-->
9
+<!--          <el-option label="经营服务类停车问题" value="经营服务类停车问题"></el-option>-->
10
+<!--          <el-option label="非法经营停车问题" value="非法经营停车问题"></el-option>-->
11
+<!--          <el-option label="不提供税票" value="不提供税票"></el-option>-->
12
+<!--          <el-option label="设备问题" value="设备问题"></el-option>-->
13
+<!--        </el-select>-->
14
+<!--      </el-form-item>-->
15
+<!--      <el-form-item>-->
16
+<!--        <el-button type="primary" @click="onSubmit">查询</el-button>-->
17
+<!--      </el-form-item>-->
18
+<!--    </el-form>-->
19
+    <br>
20
+    <br>
21
+      <div style="width: 100%; height: 400px">
22
+        <linechart
23
+          :autoStop="false"
24
+          :top="30"
25
+          :bottom="30"
26
+          :left="40"
27
+          :legendTop="0"
28
+          yAxisName="(元)"
29
+          :dataset="linedata"
30
+          :tooltipFormat="lineTooltipFormat"
31
+          :encode="[
32
+              { x: 'mouth', y: 'lastAmount', seriesName: '',bool:'true' },
33
+            ]"
34
+          id="axstj"
35
+        />
36
+      </div>
37
+    <el-table :data="tableData" style="background: #2a2a2a;border-color: #333;">
38
+      <el-table-column v-for="(item, index) in columns" :key="index" :label="item.label" :prop="item.key">
39
+      </el-table-column>
40
+    </el-table>
41
+  </div>
42
+</template>
43
+<script>
44
+import linechart from "@/components/lineChart";
45
+import api from "@/api/article_liao";
46
+
47
+export default {
48
+  components: {
49
+    linechart
50
+  },
51
+  data() {
52
+    return {
53
+      formInline: {
54
+        comType: ''
55
+      },
56
+      columns: [
57
+        {
58
+          label: '地区',
59
+          key: 'area'
60
+        },
61
+        {
62
+          label: '实缴率',
63
+          key: 'rate'
64
+        }
65
+      ],
66
+      linedata: [],
67
+    }
68
+  },
69
+  mounted() {
70
+    this.businessAnalysisStat()
71
+  },
72
+  watch: {
73
+
74
+  },
75
+  methods: {
76
+    indexMethod(index) {
77
+      return this.pageSize * (this.pageNum - 1) + index + 1
78
+    },
79
+    tooltipFormat(params) {
80
+      const type = params[0].seriesType;
81
+      const data = params[0].data;
82
+      return `<div class="line-tooltip">
83
+<div>${params[0].seriesName}: ${
84
+        params[0].data.hs || "--"}元</div>
85
+<div>${params[1].seriesName}: ${
86
+        params[0].data.cs || "--"}元</div>
87
+</div>`;
88
+    },
89
+    lineTooltipFormat(params) {
90
+      return `<div class="line-tooltip">
91
+        <div style="color: ${params[0].color}">${params[0].data.mouth} : ${
92
+        params[0].data.lastAmount  || "--"
93
+      }元</div>`;
94
+    },
95
+    businessAnalysisStat(){
96
+      api.businessAnalysisStat().then(res =>{
97
+        this.linedata = res.data
98
+      })
99
+    },
100
+    xLabelFormat(name) {
101
+      const nameArr = []
102
+      for(let i=0; i<name.length; i+=7) {
103
+        nameArr.push(name.substring(i, i+7))
104
+      }
105
+      return nameArr.join('\n');
106
+    }
107
+  }
108
+}
109
+</script>
110
+<style  lang="scss" scoped>
111
+.body-wrapper {
112
+  width: 100%;
113
+  height: 100%;
114
+  box-sizing: border-box;
115
+  background: #0c0c0c;
116
+
117
+}
118
+.model-pie-body {
119
+  width: 100%;
120
+  height: 99%;
121
+}
122
+/deep/ .el-select {
123
+  height: 40px;
124
+
125
+  .el-input__inner {
126
+    height: 40px;
127
+  }
128
+}
129
+
130
+</style>

+ 6 - 0
src/pages/index/layouts/indexLayout.vue

@@ -104,6 +104,12 @@ export default {
104 104
         {name: '欠费总分析 ', url: '/arrears_total'},
105 105
         {name: '欠费历史分析 ', url: '/arrears_trend'},
106 106
         {name: '城市欠费分析 ', url: '/city_arrears'},
107
+        {name: '欠费追缴分析 ', url: '/city_pay'},
108
+        {name: '城市收入统计 ', url: '/city_contrast'},
109
+        {name: '城市统计分析 ', url: '/urban_statisics'},
110
+        {name: '客单价分析 ', url: '/customer_price_analysis'},
111
+        {name: '设备运行统计 ', url: '/device_report'},
112
+        {name: '停车分析 ', url: '/parking'},
107 113
       ]
108 114
     }
109 115
   },

+ 30 - 0
src/router/index.js

@@ -358,6 +358,36 @@ export default new Router({
358 358
           path: "/city_arrears",
359 359
           component: () => import("../pages/index/components/city_arrears.vue")
360 360
         },
361
+        {
362
+          name: "city_pay",
363
+          path: "/city_pay",
364
+          component: () => import("../pages/index/components/city_pay.vue")
365
+        },
366
+        {
367
+          name: "city_contrast",
368
+          path: "/city_contrast",
369
+          component: () => import("../pages/index/components/city_contrast.vue")
370
+        },
371
+        {
372
+          name: "urban_statisics",
373
+          path: "/urban_statisics",
374
+          component: () => import("../pages/index/components/urban_statisics.vue")
375
+        },
376
+        {
377
+          name: "customer_price_analysis",
378
+          path: "/customer_price_analysis",
379
+          component: () => import("../pages/index/components/customer_price_analysis.vue")
380
+        },
381
+        {
382
+          name: "device_report",
383
+          path: "/device_report",
384
+          component: () => import("../pages/index/components/device_report.vue")
385
+        },
386
+        {
387
+          name: "parking",
388
+          path: "/parking",
389
+          component: () => import("../pages/index/components/parking.vue")
390
+        },
361 391
       ]
362 392
     }
363 393
   ]