瀏覽代碼

张彬彬页面备份

张彬彬页面备份
烬玊 1 年之前
父節點
當前提交
20b6efc419

+ 2 - 1
src/components/lineChart.vue

@@ -1,4 +1,4 @@
1
-<template>
1
+smooth:encode.bool,<template>
2 2
   <div class="chart" :id="id" @mouseenter="handleMouseEnter"></div>
3 3
 </template>
4 4
 
@@ -129,6 +129,7 @@ export default {
129 129
       option.series.push({
130 130
         name: encode.seriesName,
131 131
         type: "line",
132
+        smooth:encode.bool,
132 133
         symbol: "circle",
133 134
         symbolSize: this.symbolSize,
134 135
         markLine: this.markLine,

+ 109 - 460
src/pages/index/components/berth_road.vue

@@ -2,78 +2,102 @@
2 2
   <div class="body-wrapper">
3 3
     <div style="display: flex; justify-content: space-between;">
4 4
       <div style="width: 50%; height: 300px">
5
+        <div align="center" style="color: white">泊位饱和度</div>
6
+        <barchart
7
+          class="side-chart"
8
+          :autoStop="false"
9
+          :colorArr="['#ffd201', '#00eacb', '#01b4ff', '#5d78ff']"
10
+          legendIcon="react"
11
+          :bottom="30"
12
+          :xlabelFormat="xLabelFormat"
13
+          :top="60"
14
+          yAxisName="(个)"
15
+          :tooltip="tooltipFormat"
16
+          :dataset="bardata"
17
+          :encode="[
18
+            {x: 'month', y: 'hs', seriesName: '占用'},
19
+            {x: 'month', y: 'cs', seriesName: '空闲'}]"
20
+          :labelSize="15"
21
+          id="fxdqhszzt"
22
+        />
23
+      </div>
24
+      <div style="width: 50%; height: 300px">
25
+        <div align="center" style="color: white">路段泊位周转率</div>
5 26
         <linechart
6 27
           :autoStop="false"
7 28
           :top="30"
8 29
           :bottom="30"
9 30
           :left="40"
10 31
           :legendTop="0"
11
-          yAxisName="(停车数)"
12
-          :dataset="linedata"
13
-          :tooltipFormat="lineTooltipFormat"
32
+          yAxisName="(%)"
33
+          :dataset="linedata1"
34
+          :tooltipFormat="lineTooltipFormat1"
14 35
           :encode="[
15
-              { x: 'month', y: 'lastAmount', seriesName: '泊位盈余情况' },
36
+              { x: 'month', y: 'lastAmount', seriesName: '泊位周转率',bool:'true' },
16 37
             ]"
17
-          id="sxcyfzqk"
38
+          id="sxcyfzqk1"
18 39
         />
19 40
       </div>
20
-      <div style="width: 50%; height: 300px">
21
-        <vtable
22
-          :showIdx="true"
23
-          class="tax-table"
24
-          :columns="riskColumns"
25
-          :datas="riskData"
26
-          :isAutoScroll="true"
41
+    </div>
42
+    <div style="display: flex; justify-content: space-between;margin-top: 5%">
43
+      <div style="width: 50%; height: 300px;">
44
+        <div align="center" style="color: white">特殊车辆进场占比</div>
45
+        <piechart
46
+          class="model-pie-body"
47
+          id="chart1"
48
+          :roseType="false"
49
+          :radiusArr="['30%', '70%']"
50
+          :colorArr="modelPieColor"
51
+          :labelFormat="['{name|{b}}', '{sub|{d}%}', '{hr|}']"
52
+          :dataset="modelData.list"
53
+          :encode="{ itemName: 'name', value: 'value' }"
27 54
         />
28 55
       </div>
29
-    </div>
30
-    <div style="display: flex; justify-content: space-between;">
31 56
       <div style="width: 50%; height: 300px">
57
+        <div align="center" style="color: white">路段泊位营收分析</div>
32 58
         <linechart
33 59
           :autoStop="false"
34 60
           :top="30"
35 61
           :bottom="30"
36 62
           :left="40"
37 63
           :legendTop="0"
38
-          yAxisName="(亿元)"
64
+          yAxisName="(元)"
39 65
           :dataset="linedata"
40 66
           :tooltipFormat="lineTooltipFormat"
41 67
           :encode="[
42
-              { x: 'month', y: 'lastYearAmount', seriesName: '去年' },
43
-              { x: 'month', y: 'thisYearAmount', seriesName: '当年' },
68
+              { x: 'month', y: 'lastYearAmount', seriesName: '泊位收入' },
69
+              { x: 'month', y: 'thisYearAmount', seriesName: '总体收入' },
44 70
             ]"
45 71
           id="sxcyfzqk"
46 72
         />
47 73
       </div>
48
-      <div style="width: 50%; height: 300px">
49
-        <barchart
50
-          class="side-chart"
74
+    </div>
75
+    <div style="display: flex; justify-content: space-between;margin-top: 5%">
76
+      <div style="width: 50%; height: 300px;padding-left: 25px">
77
+        <div align="center" style="color: white">车辆进出场趋势</div>
78
+        <linechart
51 79
           :autoStop="false"
52
-          :colorArr="['#ffd201', '#00eacb', '#01b4ff', '#5d78ff']"
53
-          legendIcon="react"
80
+          :top="30"
54 81
           :bottom="30"
55
-          :xlabelFormat="xLabelFormat"
56
-          :top="60"
57
-          yAxisName="()"
58
-          :tooltip="tooltipFormat"
59
-          :dataset="bardata"
82
+          :left="40"
83
+          :legendTop="0"
84
+          yAxisName="(%)"
85
+          :dataset="linedata2"
86
+          :tooltipFormat="lineTooltipFormat2"
60 87
           :encode="[
61
-            {x: 'month', y: 'hs', seriesName: '户数'},
62
-            {x: 'month', y: 'cs', seriesName: '次数'}]"
63
-          :labelSize="20"
64
-          id="fxdqhszzt"
88
+              { x: 'month', y: 'lastYearAmount', seriesName: '进流率',bool:'true' },
89
+              { x: 'month', y: 'thisYearAmount', seriesName: '出流率',bool:'true' },
90
+            ]"
91
+          id="sxcyfzqk2"
65 92
         />
66 93
       </div>
67
-    </div>
68
-    <div style="width: 100%; height: 400px">
69
-      <!--      <emap style="width: 100%; height: 100%;"/>-->
70
-      <emap
71
-        class="map"
72
-        :labelFormat="mapLabelFormat"
73
-        :mapData="mapData"
74
-        id="map"
75
-        :tooltip="mapTooltipFormat"
76
-      />
94
+      <div style="width: 50%; height: 300px;margin-top: 5%;">
95
+        <div align="center" style="font-family: Arial, Helvetica, sans-serif">
96
+          <h4 style="color: rgb(47, 178, 77);">路段泊位饱和度合理性分析</h4>
97
+          <p style="margin-top: 5px;color: rgb(49, 97, 0);">根据泊位饱和度分析,周末泊位饱和度较高,</p>
98
+          <p style="color: rgb(49, 97, 0);">建议周末乘坐公共车辆或步行出门,响应绿色环保</p>
99
+        </div>
100
+      </div>
77 101
     </div>
78 102
   </div>
79 103
 </template>
@@ -82,8 +106,6 @@ import piechart from "@/components/pieChart";
82 106
 import linechart from "@/components/lineChart";
83 107
 import barchart from "@/components/barChart";
84 108
 import vtable from "@/components/vtableNew";
85
-import emap from "@/components/emap";
86
-import api from "@/api/audit.js";
87 109
 
88 110
 
89 111
 export default {
@@ -91,74 +113,27 @@ export default {
91 113
     piechart,
92 114
     linechart,
93 115
     barchart,
94
-    vtable,
95
-    emap
116
+    vtable
96 117
   },
97 118
   data() {
98 119
     return {
99
-      modelPieColor: ["#4382f6","#9078f8"],
120
+      modelPieColor: ["#4382f6", "#9078f8", "#79a7db", "#FF9800"],
100 121
       modelData: {
101
-        list: [{name: '占用位', value: 100}, {name: '空闲位', value: 100}]
122
+        list: [{name: '建筑车', value: 30}, {name: '危险品车', value:4}, {name: '特种车', value:32}, {name: '残疾人车', value:34}]
102 123
       },
103
-      linedata: [{month: '11', lastYearAmount: 20, thisYearAmount: 30}, {month: '12', lastYearAmount: 40, thisYearAmount: 50}],
104
-      bardata: [{month: '01', hs: 100, cs: 200},{month: '02', hs: 300, cs: 200},{month: '03', hs: 400, cs: 200},],
105
-      riskColumns: [
106
-        { name: "", rowIdx: "name", width: "40%" },
107
-        { name: "任务数(户)", rowIdx: "rws", origin: true },
108
-        { name: "已完成(户)", rowIdx: "ywc", origin: true },
109
-        { name: "风险命中率", rowIdx: "mzl" },
110
-        { name: "入库税款(万元)", rowIdx: "rksk" },
111
-      ],
112
-      riskData: [{
113
-        name: '1号',
114
-        rws: 222,
115
-        ywc: 333,
116
-        mzl: 444,
117
-        rksk: 555
118
-      },{
119
-        name: '2号',
120
-        rws: 222,
121
-        ywc: 333,
122
-        mzl: 444,
123
-        rksk: 555
124
-      },{
125
-        name: '3号',
126
-        rws: 222,
127
-        ywc: 333,
128
-        mzl: 444,
129
-        rksk: 555
130
-      },{
131
-        name: '4号',
132
-        rws: 222,
133
-        ywc: 333,
134
-        mzl: 444,
135
-        rksk: 555
136
-      },{
137
-        name: '5号',
138
-        rws: 222,
139
-        ywc: 333,
140
-        mzl: 444,
141
-        rksk: 555
142
-      },{
143
-        name: '6号',
144
-        rws: 222,
145
-        ywc: 333,
146
-        mzl: 444,
147
-        rksk: 555
148
-      },{
149
-        name: '7号',
150
-        rws: 222,
151
-        ywc: 333,
152
-        mzl: 444,
153
-        rksk: 555
154
-      },{
155
-        name: '8号',
156
-        rws: 222,
157
-        ywc: 333,
158
-        mzl: 444,
159
-        rksk: 555
160
-      }],
161
-      mapData: {}
124
+      linedata: [{month: '星期一',lastYearAmount: 44, thisYearAmount: 440}, {month: '星期二', lastYearAmount:55, thisYearAmount:505}
125
+        , {month: '星期三', lastYearAmount:71, thisYearAmount:414}, {month: '星期四', lastYearAmount:67, thisYearAmount:301}, {month: '星期五', lastYearAmount:52, thisYearAmount:327}
126
+        , {month: '星期六', lastYearAmount:103, thisYearAmount:413}, {month: '星期天', lastYearAmount:89, thisYearAmount:671}],
127
+      linedata1: [{month: '星期一', lastAmount: 40}, {month: '星期二', lastAmount:31}
128
+        , {month: '星期三', lastAmount:43}, {month: '星期四', lastAmount:20}, {month: '星期五', lastAmount:51}
129
+        , {month: '星期六', lastAmount:25}, {month: '星期天', lastAmount:39}],
130
+      linedata2: [{month: '星期一',lastYearAmount: 21, thisYearAmount: 31}, {month: '星期二', lastYearAmount:38, thisYearAmount:32}
131
+        , {month: '星期三', lastYearAmount:27, thisYearAmount:43}, {month: '星期四', lastYearAmount:43, thisYearAmount:45}, {month: '星期五', lastYearAmount:42, thisYearAmount:44}
132
+        , {month: '星期六', lastYearAmount:78, thisYearAmount:52}, {month: '星期天', lastYearAmount:90, thisYearAmount:67}],
133
+      bardata: [{month: '星期一', hs: 120, cs: 200},{month: '星期二', hs: 115, cs: 200}
134
+        ,{month: '星期三', hs:107, cs: 200},{month: '星期四', hs:97, cs: 300},{month: '星期五', hs:87, cs:300}
135
+        ,{month: '星期六', hs: 180, cs: 110},{month: '星期天', hs: 185, cs: 140},],
136
+
162 137
     }
163 138
   },
164 139
   mounted() {
@@ -167,54 +142,34 @@ export default {
167 142
 
168 143
   },
169 144
   methods: {
170
-    mapLabelFormat() {
171
-      return {
172
-        show: true,
173
-        formatter: (param) => {
174
-          const data = this.mapData[param.data.code]
175
-          return [`{name|${param.name}}`, `{value|${data.shje}亿元}  {${data.tb>=0?'tbUp':'tbDown'}|${Math.abs(data.tb)}%}{${data.tb>=0?'up':'down'}|}`].join('\n')
176
-        },
177
-        padding: [5, 5],
178
-        // backgroundColor: {
179
-        //   image: '../../../../static/img/u231.png'
180
-        // },
181
-        rich: {
182
-          name: {color: '#ffffff', padding: [2,2,10,2]},
183
-          value: {color: '#FFD074'},
184
-          tbUp: {color: '#FF0060'},
185
-          tbDown: {color: '#66CC33'},
186
-          up: {backgroundColor: {image: '../../../../static/img/arrow-up.png'}, width: 30, height: 30},
187
-          down: {backgroundColor: {image: '../../../../static/img/arrow-down.png'}, width: 30, height: 30}
188
-        }
189
-      }
190
-    },
191 145
 
192
-    mapTooltipFormat({ data }) {
193
-      return ''
194
-      //   const zoneData = this.mapData[data.code];
195
-      //   return `<div class='map-tooltip back-mid-map-tooltip'>
196
-      //     <div class='zone-name'>${data.name}</div>
197
-      //     <div class="zone-value">
198
-      //       <div class="je-value">${zoneData.shje}万元</div>
199
-      //       <div class=${zoneData.tb >= 0 ? "red" : "green"}>${Math.abs(
200
-      //     zoneData.tb
201
-      //   )}%<img src=${
202
-      //     zoneData.tb >= 0
203
-      //       ? "../../../../static/img/arrow-up.png"
204
-      //       : "../../../../static/img/arrow-down.png"
205
-      //   } /></div>
206
-      //     </div>
207
-      //   </div>`;
146
+    lineTooltipFormat1(params) {
147
+      const data = params[0].data;
148
+      return `<div class="line-tooltip">
149
+        <div style="color: ${params[0].color}">${params[0].seriesName}: ${
150
+        params[0].data.lastAmount || "--"
151
+      }(%)</div>`;
208 152
     },
209 153
     lineTooltipFormat(params) {
210 154
       const data = params[0].data;
211 155
       return `<div class="line-tooltip">
156
+        <div style="color: ${params[1].color}">${params[1].seriesName}: ${
157
+        params[0].data.thisYearAmount || "--"
158
+      }(元)</div>
212 159
         <div style="color: ${params[0].color}">${params[0].seriesName}: ${
213 160
         params[0].data.lastYearAmount || "--"
214
-      }(件)</div>
161
+      }(元)</div>
162
+      </div>`;
163
+    },
164
+    lineTooltipFormat2(params) {
165
+      const data = params[0].data;
166
+      return `<div class="line-tooltip">
215 167
         <div style="color: ${params[1].color}">${params[1].seriesName}: ${
216 168
         params[0].data.thisYearAmount || "--"
217
-      }(件)</div>
169
+      }(%)</div>
170
+        <div style="color: ${params[0].color}">${params[0].seriesName}: ${
171
+        params[0].data.lastYearAmount || "--"
172
+      }(%)</div>
218 173
       </div>`;
219 174
     },
220 175
     xLabelFormat(name) {
@@ -228,73 +183,13 @@ export default {
228 183
       const type = params[0].seriesType;
229 184
       const data = params[0].data;
230 185
       // ${params[0].name || "--"}月:
231
-      return `<div class="${type==='bar' ? 'bar-tooltip-dz' : type==='line' ? 'line-tooltip-dz' : ''}">${data.hs || "--"}张</div>`;
232
-    },
233
-    format(percentage, num) {
234
-      return num
235
-    },
236
-    getResourceData() {
237
-      api.resourceData().then(res => {
238
-        if (res.success) {
239
-          this.menus[0].new = res.data.themeAdd
240
-          this.menus[0].history = res.data.themeTotal
241
-          this.menus[1].new = res.data.specialSubjectAdd
242
-          this.menus[1].history = res.data.specialSubjectTotal
243
-          this.menus[2].new = res.data.indexAdd
244
-          this.menus[2].history = res.data.indexTotal
245
-          this.menus[3].new = res.data.serviceAdd
246
-          this.menus[3].history = res.data.serviceTotal
247
-        }
248
-      })
249
-    },
250
-    getCollectTotal() {
251
-      api.collectTotal().then(res => {
252
-        if (res.success) {
253
-          this.collectTotal = res.data
254
-        }
255
-      })
256
-    },
257
-    getThemeSpecialIndex() {
258
-      api.themeSpecialIndex({resourceType: 'theme'}).then(res => {
259
-        if (res.success) {
260
-          this.barData = res.data
261
-        }
262
-      })
263
-      api.themeSpecialIndex({resourceType: 'specialSubject'}).then(res => {
264
-        if (res.success) {
265
-          this.specialAssetsData = res.data
266
-        }
267
-      })
268
-      api.themeSpecialIndex({resourceType: 'index'}).then(res => {
269
-        if (res.success) {
270
-          this.indicatorStatData = res.data
271
-        }
272
-      })
273
-    },
274
-    getApiRankData() {
275
-      api.apiRank().then(res => {
276
-        if (res.success) {
277
-          this.rankData = res.data
278
-        }
279
-      })
280
-    },
281
-    jumpToFilePage() {
282
-      this.$router.push({
283
-        name: "file",path: "/file"
284
-      });
285
-    },
286
-    jumpToApplyPage() {
287
-      this.$router.push({
288
-        name: "apply", path: "/apply"
289
-      });
186
+      return `<div class="line-tooltip">
187
+<div>${params[0].seriesName}: ${
188
+        params[0].data.hs || "--"}个</div>
189
+<div>${params[1].seriesName}: ${
190
+        params[0].data.cs || "--"}个</div>
191
+</div>`;
290 192
     },
291
-    getVisitsData() {
292
-      api.visits({}).then(res => {
293
-        if(res.success) {
294
-          this.visits = res.data
295
-        }
296
-      })
297
-    }
298 193
   }
299 194
 }
300 195
 </script>
@@ -304,258 +199,12 @@ export default {
304 199
   height: 100%;
305 200
   box-sizing: border-box;
306 201
   background: #0c0c0c;
307
-
308
-  .airport-logo {
309
-    width: 43%;
310
-    margin-left: -42px;
311
-    margin-top: 86px;
312
-  }
313
-
314
-  .input-wrapper {
315
-    width: 36%;
316
-    height: 53px;
317
-
318
-    /deep/ .el-input__inner {
319
-      height: 53px;
320
-    }
321
-
322
-    /deep/ .el-input-group__append {
323
-      background-color: #fff;
324
-      color: #80c2f7;
325
-      font-size: 18px;
326
-      font-weight: bold;
327
-    }
328
-  }
329
-
330
-  .header-row {
331
-    padding-top: 10px;
332
-    .data-repository, .my-collect{
333
-      float: left;
334
-    }
335
-    .data-repository{
336
-      width: 80%;
337
-      background: #fff;
338
-      padding: 20px 20px;
339
-      border-right: 1px solid #f2f2f2;
340
-      box-sizing: border-box;
341
-      .data-repo-title{
342
-        margin-bottom: 5px;
343
-        .icon{
344
-          display: inline-block;
345
-          width: 11px;
346
-          height: 25px;
347
-          background: #8bb2ff;
348
-          vertical-align: middle;
349
-        }
350
-      }
351
-      .data-repo-wrap{
352
-        display: flex;
353
-        justify-content: space-between;
354
-        padding-left: 14px;
355
-      }
356
-    }
357
-    .my-collect{
358
-      padding-top: 50px;
359
-      padding-right: 10px;
360
-      width: 20%;
361
-      box-sizing: border-box;
362
-      .menu-btn{
363
-        float: right;
364
-      }
365
-    }
366
-    .menu-btn {
367
-      height: 138px;
368
-      width: 100%;
369
-      padding: 20px;
370
-      box-shadow: 2px 5px 10px #ddd;
371
-      background: #fff;
372
-      border-radius: 5px;
373
-      >p {
374
-        font-size: 24px;
375
-        font-weight: bold;
376
-      }
377
-      .circle {
378
-        width: 10px;
379
-        height: 10px;
380
-        border-radius: 50%;
381
-        margin-right: 5px;
382
-      }
383
-      .circle1 {
384
-        border: 3px solid #084FC0;
385
-      }
386
-      .circle2 {
387
-        border: 3px solid #BE5205;
388
-      }
389
-      .circle3 {
390
-        border: 3px solid #58C627;
391
-      }
392
-      .circle4 {
393
-        border: 3px solid #BF44FF;
394
-      }
395
-      .sub-title {
396
-        display: flex;
397
-        align-items: center;
398
-      }
399
-      .middle-flex{
400
-        display: flex;
401
-        align-items: center;
402
-        justify-content: center;
403
-      }
404
-    }
405
-  }
406
-
407
-  .chart-wrap {
408
-    //margin-top: 10px;
409
-    padding: 20px;
410
-    height: 700px;
411
-    background: #fff;
412
-    display: flex;
413
-    flex-wrap: wrap;
414
-    flex-direction: row;
415
-    justify-content: space-between;
416
-    .chart-card {
417
-      width: 49.5%;
418
-      height: 30px;
419
-      .title {
420
-        font-size: 18px;
421
-        margin-bottom: 10px;
422
-      }
423
-      .chart {
424
-        width: 100%;
425
-        height: 280px;
426
-        box-shadow: 2px 5px 10px #ddd;
427
-      }
428
-      .rank-chart{
429
-        text-align: center;
430
-        box-sizing: border-box;
431
-        padding: 10px 20px 0;
432
-      }
433
-      .rank-block{
434
-        height: 238px;
435
-        overflow-y: auto;
436
-        scrollbar-width: none; /* firefox */
437
-      }
438
-      .rank-block::-webkit-scrollbar {
439
-        display: none; /* Chrome Safari */
440
-      }
441
-      .rank-item{
442
-        margin-bottom: 10px;
443
-        .icon, .right-block, .icon-three{
444
-          float: left;
445
-        }
446
-        .icon{
447
-          width: 18px;
448
-          height: 18px;
449
-          background: url('../../../assets/image/u211.svg');
450
-          font-size: 12px;
451
-          color: #FFFFFF;
452
-          line-height: 18px;
453
-        }
454
-        .icon-three{
455
-          width: 18px;
456
-          height: 26px;
457
-        }
458
-        .icon0{
459
-          background: url('../../../assets/image/u218.svg');
460
-          background-size: 100% 100%;
461
-        }
462
-        .icon1{
463
-          background: url('../../../assets/image/u219.svg');
464
-          background-size: 100% 100%;
465
-        }
466
-        .icon2{
467
-          background: url('../../../assets/image/u220.svg');
468
-          background-size: 100% 100%;
469
-        }
470
-        .right-block{
471
-          width: calc(100% - 18px);
472
-          .name-unit{
473
-            padding: 0 10px;
474
-            margin-bottom: 5px;
475
-          }
476
-          .name{
477
-            float: left;
478
-          }
479
-          .unit{
480
-            float: right;
481
-          }
482
-        }
483
-        /deep/ .progress .el-progress-bar__inner {
484
-          background-image: linear-gradient(
485
-              to right,
486
-              #00c8ff,
487
-              #009bff
488
-          );
489
-        }
490
-        /deep/ .progress0 .el-progress-bar__inner {
491
-          background-image: linear-gradient(
492
-              to right,
493
-              #ec5a48,
494
-              #d566d7
495
-          );
496
-        }
497
-        /deep/ .progress1 .el-progress-bar__inner {
498
-          background-image: linear-gradient(
499
-              to right,
500
-              #f9b101,
501
-              #ff6a62
502
-          );
503
-        }
504
-        /deep/ .progress2 .el-progress-bar__inner {
505
-          background-image: linear-gradient(
506
-              to right,
507
-              #00f576,
508
-              #009df7
509
-          );
510
-        }
511
-      }
512
-    }
513
-  }
514
-  .btn-space{
515
-    margin-left: 20px;
516
-  }
517
-  .visits-num{
518
-    padding: 20px;
519
-  }
520
-}
521
-.chart-body {
522
-  width: 100%;
523
-  height: calc(100% - 40px);
524
-  position: relative;
525
-  top: 35px;
526 202
 }
203
+
527 204
 .model-pie-body {
528 205
   width: 100%;
529
-  height: 70%;
530
-}
531
-.bar-tooltip-dz {
532
-  padding: 5px 10px;
533
-  background: url("../../../../static/img/u261.png");
534
-  background-size: 100% 100%;
535
-  color: #333;
536
-  position: absolute;
537
-  top: 0;
538
-}
539
-.tax-table {
540
-  tbody {
541
-    tr {
542
-      &:nth-child(1),
543
-      &:nth-child(2),
544
-      &:nth-child(3) {
545
-        td {
546
-          &:nth-child(2) {
547
-            color: #ffd074;
548
-          }
549
-        }
550
-      }
551
-    }
552
-  }
553
-}
554
-.map {
555
-  margin-top: 20px;
556
-  width: 100%;
557
-  flex: 1;
558
-  height: 100%;
206
+  height: 99%;
559 207
 }
560 208
 
209
+
561 210
 </style>

+ 210 - 0
src/pages/index/components/berth_road_out.vue

@@ -0,0 +1,210 @@
1
+<template>
2
+  <div class="body-wrapper">
3
+    <div style="display: flex; justify-content: space-between;">
4
+      <div style="width: 50%; height: 300px">
5
+        <div align="center" style="color: white">泊位饱和度</div>
6
+        <barchart
7
+          class="side-chart"
8
+          :autoStop="false"
9
+          :colorArr="['#ffd201', '#00eacb', '#01b4ff', '#5d78ff']"
10
+          legendIcon="react"
11
+          :bottom="30"
12
+          :xlabelFormat="xLabelFormat"
13
+          :top="60"
14
+          yAxisName="(个)"
15
+          :tooltip="tooltipFormat"
16
+          :dataset="bardata"
17
+          :encode="[
18
+            {x: 'month', y: 'hs', seriesName: '占用'},
19
+            {x: 'month', y: 'cs', seriesName: '空闲'}]"
20
+          :labelSize="15"
21
+          id="fxdqhszzt"
22
+        />
23
+      </div>
24
+      <div style="width: 50%; height: 300px">
25
+        <div align="center" style="color: white">泊位周转率</div>
26
+        <linechart
27
+          :autoStop="false"
28
+          :top="30"
29
+          :bottom="30"
30
+          :left="40"
31
+          :legendTop="0"
32
+          yAxisName="(%)"
33
+          :dataset="linedata1"
34
+          :tooltipFormat="lineTooltipFormat1"
35
+          :encode="[
36
+              { x: 'month', y: 'lastAmount', seriesName: '泊位周转率',bool:'true' },
37
+            ]"
38
+          id="sxcyfzqk1"
39
+        />
40
+      </div>
41
+    </div>
42
+    <div style="display: flex; justify-content: space-between;margin-top: 5%">
43
+      <div style="width: 50%; height: 300px;">
44
+        <div align="center" style="color: white">特殊车辆进场占比</div>
45
+        <piechart
46
+          class="model-pie-body"
47
+          id="chart1"
48
+          :roseType="false"
49
+          :radiusArr="['30%', '70%']"
50
+          :colorArr="modelPieColor"
51
+          :labelFormat="['{name|{b}}', '{sub|{d}%}', '{hr|}']"
52
+          :dataset="modelData.list"
53
+          :encode="{ itemName: 'name', value: 'value' }"
54
+        />
55
+      </div>
56
+      <div style="width: 50%; height: 300px">
57
+        <div align="center" style="color: white">泊位营收分析</div>
58
+        <linechart
59
+          :autoStop="false"
60
+          :top="30"
61
+          :bottom="30"
62
+          :left="40"
63
+          :legendTop="0"
64
+          yAxisName="(元)"
65
+          :dataset="linedata"
66
+          :tooltipFormat="lineTooltipFormat"
67
+          :encode="[
68
+              { x: 'month', y: 'lastYearAmount', seriesName: '泊位收入' },
69
+              { x: 'month', y: 'thisYearAmount', seriesName: '总体收入' },
70
+            ]"
71
+          id="sxcyfzqk"
72
+        />
73
+      </div>
74
+    </div>
75
+    <div style="display: flex; justify-content: space-between;margin-top: 5%">
76
+      <div style="width: 50%; height: 300px;padding-left: 25px">
77
+        <div align="center" style="color: white">车辆进出场趋势</div>
78
+        <linechart
79
+          :autoStop="false"
80
+          :top="30"
81
+          :bottom="30"
82
+          :left="40"
83
+          :legendTop="0"
84
+          yAxisName="(%)"
85
+          :dataset="linedata2"
86
+          :tooltipFormat="lineTooltipFormat2"
87
+          :encode="[
88
+              { x: 'month', y: 'lastYearAmount', seriesName: '进流率',bool:'true' },
89
+              { x: 'month', y: 'thisYearAmount', seriesName: '出流率',bool:'true' },
90
+            ]"
91
+          id="sxcyfzqk2"
92
+        />
93
+      </div>
94
+      <div style="width: 50%; height: 300px;margin-top: 5%;">
95
+        <div align="center" style="font-family: Arial, Helvetica, sans-serif">
96
+          <h4 style="color: rgb(47, 178, 77);">路段泊位饱和度合理性分析</h4>
97
+          <h5 style="margin-top: 5px;color: rgb(49, 97, 0);">检测到周末泊位较饱和,建议适当增加泊位</h5>
98
+          <h5  style="margin-top: 5px;color: rgb(49, 97, 0);">检测到周末泊位周转率低,建议适当增加长时段停车费用</h5>
99
+        </div>
100
+      </div>
101
+    </div>
102
+  </div>
103
+</template>
104
+<script>
105
+import piechart from "@/components/pieChart";
106
+import linechart from "@/components/lineChart";
107
+import barchart from "@/components/barChart";
108
+import vtable from "@/components/vtableNew";
109
+
110
+
111
+export default {
112
+  components: {
113
+    piechart,
114
+    linechart,
115
+    barchart,
116
+    vtable
117
+  },
118
+  data() {
119
+    return {
120
+      modelPieColor: ["#4382f6", "#9078f8", "#79a7db", "#FF9800"],
121
+      modelData: {
122
+        list: [{name: '建筑车', value: 23}, {name: '危险品车', value:5}, {name: '特种车', value:27}, {name: '残疾人车', value:45}]
123
+      },
124
+      linedata: [{month: '星期一',lastYearAmount: 2300, thisYearAmount: 4740}, {month: '星期二', lastYearAmount:3050, thisYearAmount:5600}
125
+        , {month: '星期三', lastYearAmount:2710, thisYearAmount:3781}, {month: '星期四', lastYearAmount:2670, thisYearAmount:4737}, {month: '星期五', lastYearAmount:3200, thisYearAmount:5252}
126
+        , {month: '星期六', lastYearAmount:4030, thisYearAmount:6160}, {month: '星期天', lastYearAmount:4890, thisYearAmount:6979}],
127
+      linedata1: [{month: '星期一', lastAmount: 38}, {month: '星期二', lastAmount:41}
128
+        , {month: '星期三', lastAmount:33}, {month: '星期四', lastAmount:23}, {month: '星期五', lastAmount:35}
129
+        , {month: '星期六', lastAmount:45}, {month: '星期天', lastAmount:59}],
130
+      linedata2: [{month: '星期一',lastYearAmount: 21, thisYearAmount: 51}, {month: '星期二', lastYearAmount:38, thisYearAmount:42}
131
+        , {month: '星期三', lastYearAmount:27, thisYearAmount:25}, {month: '星期四', lastYearAmount:23, thisYearAmount:20}, {month: '星期五', lastYearAmount:52, thisYearAmount:34}
132
+        , {month: '星期六', lastYearAmount:58, thisYearAmount:32}, {month: '星期天', lastYearAmount:67, thisYearAmount:37}],
133
+      bardata: [{month: '星期一', hs: 1200, cs: 600},{month: '星期二', hs:1100, cs:700}
134
+        ,{month: '星期三', hs:1070, cs:730},{month: '星期四', hs:1130, cs:670},{month: '星期五', hs:1070, cs:730}
135
+        ,{month: '星期六', hs:1610, cs:190},{month: '星期天', hs:1690, cs:110},],
136
+
137
+    }
138
+  },
139
+  mounted() {
140
+  },
141
+  watch: {
142
+
143
+  },
144
+  methods: {
145
+
146
+    lineTooltipFormat1(params) {
147
+      const data = params[0].data;
148
+      return `<div class="line-tooltip">
149
+        <div style="color: ${params[0].color}">${params[0].seriesName}: ${
150
+        params[0].data.lastAmount || "--"
151
+      }(%)</div>`;
152
+    },
153
+    lineTooltipFormat(params) {
154
+      const data = params[0].data;
155
+      return `<div class="line-tooltip">
156
+        <div style="color: ${params[1].color}">${params[1].seriesName}: ${
157
+        params[0].data.thisYearAmount || "--"
158
+      }(元)</div>
159
+        <div style="color: ${params[0].color}">${params[0].seriesName}: ${
160
+        params[0].data.lastYearAmount || "--"
161
+      }(元)</div>
162
+      </div>`;
163
+    },
164
+    lineTooltipFormat2(params) {
165
+      const data = params[0].data;
166
+      return `<div class="line-tooltip">
167
+        <div style="color: ${params[1].color}">${params[1].seriesName}: ${
168
+        params[0].data.thisYearAmount || "--"
169
+      }(%)</div>
170
+        <div style="color: ${params[0].color}">${params[0].seriesName}: ${
171
+        params[0].data.lastYearAmount || "--"
172
+      }(%)</div>
173
+      </div>`;
174
+    },
175
+    xLabelFormat(name) {
176
+      const nameArr = []
177
+      for(let i=0; i<name.length; i+=7) {
178
+        nameArr.push(name.substring(i, i+7))
179
+      }
180
+      return nameArr.join('\n');
181
+    },
182
+    tooltipFormat(params) {
183
+      const type = params[0].seriesType;
184
+      const data = params[0].data;
185
+      // ${params[0].name || "--"}月:
186
+      return `<div class="line-tooltip">
187
+<div>${params[0].seriesName}: ${
188
+        params[0].data.hs || "--"}个</div>
189
+<div>${params[1].seriesName}: ${
190
+        params[0].data.cs || "--"}个</div>
191
+</div>`;
192
+    },
193
+  }
194
+}
195
+</script>
196
+<style  lang="scss" scoped>
197
+.body-wrapper {
198
+  width: 100%;
199
+  height: 100%;
200
+  box-sizing: border-box;
201
+  background: #0c0c0c;
202
+}
203
+
204
+.model-pie-body {
205
+  width: 100%;
206
+  height: 99%;
207
+}
208
+
209
+
210
+</style>

+ 113 - 0
src/pages/index/components/parking_area.vue

@@ -0,0 +1,113 @@
1
+<template>
2
+  <div class="body-wrapper">
3
+    <div style="display: flex; justify-content: space-between;">
4
+      <div style="width: 50%; height: 300px">
5
+        <div align="center" style="color: white">区域饱和度</div>
6
+        <barchart
7
+          class="side-chart"
8
+          :autoStop="false"
9
+          :colorArr="['#ffd201', '#00eacb', '#01b4ff', '#5d78ff']"
10
+          legendIcon="react"
11
+          :bottom="30"
12
+          :xlabelFormat="xLabelFormat"
13
+          :top="60"
14
+          yAxisName="(%)"
15
+          :tooltip="tooltipFormat"
16
+          :dataset="bardata"
17
+          :encode="[
18
+            {x: 'month', y: 'cs', seriesName: '饱和度'}]"
19
+          :labelSize="15"
20
+          id="fxdqhszzt"
21
+        />
22
+      </div>
23
+      <div style="width: 50%; height: 300px">
24
+        <div align="center" style="color: white">饱和度时段分析</div>
25
+        <linechart
26
+          :autoStop="false"
27
+          :top="30"
28
+          :bottom="30"
29
+          :left="40"
30
+          :legendTop="0"
31
+          yAxisName="(%)"
32
+          :dataset="linedata1"
33
+          :tooltipFormat="lineTooltipFormat1"
34
+          :encode="[
35
+              { x: 'month', y: 'lastAmount', seriesName: '饱和度',bool:'true' },
36
+            ]"
37
+          id="sxcyfzqk1"
38
+        />
39
+      </div>
40
+    </div>
41
+    <div style="display: flex; justify-content: space-between;margin-top: 5%">
42
+      <div style="width: 50%; height: 300px;">
43
+        <div align="center" style="color: white">停车热度时空分布</div>
44
+
45
+      </div>
46
+    </div>
47
+  </div>
48
+</template>
49
+<script>
50
+import linechart from "@/components/lineChart";
51
+import barchart from "@/components/barChart";
52
+
53
+
54
+export default {
55
+  components: {
56
+    linechart,
57
+    barchart,
58
+  },
59
+  data() {
60
+    return {
61
+      linedata1: [{month: '00:00', lastAmount: 68}, {month: '01:30', lastAmount:71}
62
+        , {month: '02:30', lastAmount:83}, {month: '03:30', lastAmount:87}, {month: '04:30', lastAmount:75}
63
+        , {month: '05:30', lastAmount:69}, {month: '06:30', lastAmount:59}],
64
+      bardata: [{month: '郾城区', cs: 80},{month: '临颍县', cs: 71}
65
+        ,{month: '舞阳县', cs:63},{month: '源汇区', cs:85},{month: '召陵区', cs:90},],
66
+    }
67
+  },
68
+  mounted() {
69
+  },
70
+  watch: {
71
+
72
+  },
73
+  methods: {
74
+
75
+    lineTooltipFormat1(params) {
76
+      const data = params[0].data;
77
+      return `<div class="line-tooltip">
78
+        <div style="color: ${params[0].color}">${params[0].seriesName}: ${
79
+        params[0].data.lastAmount || "--"
80
+      }(%)</div>`;
81
+    },
82
+
83
+    xLabelFormat(name) {
84
+      const nameArr = []
85
+      for(let i=0; i<name.length; i+=7) {
86
+        nameArr.push(name.substring(i, i+7))
87
+      }
88
+      return nameArr.join('\n');
89
+    },
90
+    tooltipFormat(params) {
91
+      const type = params[0].seriesType;
92
+      const data = params[0].data;
93
+      // ${params[0].name || "--"}月:
94
+      return `<div class="${type==='bar' ? 'bar-tooltip-dz' : type==='line' ? 'line-tooltip-dz' : ''}">${params[0].seriesName}:${data.cs || "--"}%</div>`;
95
+    },
96
+  }
97
+}
98
+</script>
99
+<style  lang="scss" scoped>
100
+.body-wrapper {
101
+  width: 100%;
102
+  height: 100%;
103
+  box-sizing: border-box;
104
+  background: #0c0c0c;
105
+}
106
+
107
+.model-pie-body {
108
+  width: 100%;
109
+  height: 99%;
110
+}
111
+
112
+
113
+</style>

+ 158 - 0
src/pages/index/components/parking_fee.vue

@@ -0,0 +1,158 @@
1
+<template>
2
+  <div class="body-wrapper">
3
+    <div class="search-card">
4
+      <el-input class="input-wrapper" v-model="searchWords" placeholder="请输入关键时间节点">
5
+        <el-button style="color: white" slot="append" class="searchbtn" @click="handleSearch">
6
+        </el-button>
7
+      </el-input>
8
+      <el-input class="input-wrapper" v-model="searchWords" placeholder="请输入关键字">
9
+        <el-button style="color: white" slot="append" class="searchbtn" @click="handleSearch">
10
+        </el-button>
11
+      </el-input>
12
+    </div>
13
+    <el-table :data="tableData" style="background: #2a2a2a;border-color: #333;">
14
+      <el-table-column v-for="(item, index) in columns" :key="index" :label="item.label" :prop="item.key">
15
+      </el-table-column>
16
+      <el-table-column label="操作" width="150">
17
+        <div slot-scope="scope">
18
+          <el-button
19
+            size="mini">编辑</el-button>
20
+          <el-button
21
+            size="mini"
22
+            type="danger">删除</el-button>
23
+        </div>
24
+      </el-table-column>
25
+    </el-table>
26
+    <div class="table-pagination">
27
+      <el-pagination :background="false" layout="total, prev, pager, next" :total="total" @current-change="handlePageChange"
28
+                     :current-page.sync="pageNum" :page-size.sync="pageSize">
29
+      </el-pagination>
30
+    </div>
31
+  </div>
32
+</template>
33
+<script>
34
+import api from "@/api/audit.js";
35
+
36
+export default {
37
+  components: {},
38
+  data() {
39
+    return {
40
+      columns: [
41
+        {
42
+          label: '停车路段',
43
+          key: 'parkRoad'
44
+        },
45
+        {
46
+          label: '停车位置',
47
+          key: 'parkStall'
48
+        },
49
+        {
50
+          label: '车牌号',
51
+          key: 'plateCode'
52
+        },
53
+        {
54
+          label: '车牌类型',
55
+          key: 'plateType'
56
+        },
57
+        {
58
+          label: '停车时间',
59
+          key: 'parkTime'
60
+        },
61
+        {
62
+          label: '离开时间',
63
+          key: 'leaveTime'
64
+        },
65
+        {
66
+          label: '修改人',
67
+          key: 'revisePerson'
68
+        },
69
+        {
70
+          label: '修改时间',
71
+          key: 'reviseTime'
72
+        }
73
+      ],
74
+      tableData: [{"parkRoad":'老街街道',"parkStall":'路边',"plateCode":'豫L0Q985',"plateType":'本地车',"parkTime":'2023-12-31 08:30:00',"leaveTime":'2024-12-31 10:15:00',"revisePerson":'无',"reviseTime":'',}
75
+        ,{"parkRoad":'马路街街道',"parkStall":'过道口',"plateCode":'豫A71XL1',"plateType":'本地车',"parkTime":'2023-12-31 09:35:00',"leaveTime":'2023-12-31 11:25:00',"revisePerson":'无',"reviseTime":'',}
76
+        ,{"parkRoad":'顺河街街道',"parkStall":'十字路口',"plateCode":'浙GJG272',"plateType":'外地车',"parkTime":'2023-12-31 14:52:00',"leaveTime":'2023-12-31 14:15:00',"revisePerson":'无',"reviseTime":'',}],
77
+      total: 3,
78
+      pageSize: 10,
79
+      pageNum: 1,
80
+      radio: '2',
81
+      dialogVisible: false,
82
+      selRow: {},
83
+      searchWords: undefined
84
+    }
85
+  },
86
+  mounted() {
87
+    this.getTableData()
88
+  },
89
+  watch: {
90
+  },
91
+  methods: {
92
+    handlePageChange() {
93
+      this.getTableData()
94
+    },
95
+    handleCancelApply(row) {
96
+      console.log('enter handle cancel apply')
97
+    },
98
+    handleConfirm() {
99
+      const {id} = this.selRow
100
+      console.log('radio', this.radio)
101
+      api.applyResource({id, applyType: this.radio}).then(res => {
102
+        if(res.success) {
103
+          this.dialogVisible = false
104
+          this.$message({
105
+            message: '审核成功!',
106
+            type: 'success'
107
+          })
108
+          this.getTableData()
109
+        }
110
+      })
111
+    },
112
+    getTableData() {
113
+      const {pageNum, pageSize, searchWords} = this
114
+      api.applyList({pageNum, pageSize, resourceName: searchWords}).then(res => {
115
+        this.tableData = []
116
+        res.data.records.map((item, index) => {
117
+          const newItem = {...item}
118
+          newItem.applyTypeText = this.getApplyTypeText(item.applyType)
119
+          this.tableData.push(newItem)
120
+        })
121
+        this.total = res.data.total
122
+      })
123
+    },
124
+    handleSearch() {
125
+      this.pageNum = 1
126
+      this.getTableData()
127
+    },
128
+  }
129
+}
130
+</script>
131
+<style  lang="scss" scoped>
132
+.body-wrapper {
133
+  padding: 20px;
134
+  background: #0c0c0c;
135
+  .button-block{
136
+    text-align: right;
137
+    margin-bottom: 20px;
138
+  }
139
+  .table-pagination{
140
+    text-align: right;
141
+  }
142
+  .search-card{
143
+    margin-bottom: 20px;
144
+    text-align: center;
145
+    .input-wrapper{
146
+      width: 36%;
147
+    }
148
+  }
149
+}
150
+.audit-dialog{
151
+  .mg-bt{
152
+    margin-bottom: 24px;
153
+  }
154
+  .label{
155
+    text-align: right;
156
+  }
157
+}
158
+</style>

+ 236 - 0
src/pages/index/components/parking_operate.vue

@@ -0,0 +1,236 @@
1
+<template>
2
+  <div class="body-wrapper">
3
+    <div style="display: flex; justify-content: space-between;">
4
+      <div style="width: 50%; height: 300px">
5
+        <div align="center" style="color: white">停车饱和度</div>
6
+        <barchart
7
+          class="side-chart"
8
+          :autoStop="false"
9
+          :colorArr="['#ffd201', '#00eacb', '#01b4ff', '#5d78ff']"
10
+          legendIcon="react"
11
+          :bottom="30"
12
+          :xlabelFormat="xLabelFormat"
13
+          :top="60"
14
+          yAxisName="(个)"
15
+          :tooltip="tooltipFormat"
16
+          :dataset="bardata"
17
+          :encode="[
18
+            {x: 'month', y: 'hs', seriesName: '占用'},
19
+            {x: 'month', y: 'cs', seriesName: '空闲'}]"
20
+          :labelSize="15"
21
+          id="fxdqhszzt"
22
+        />
23
+      </div>
24
+      <div style="width: 50%; height: 300px">
25
+        <div align="center" style="color: white">停车场周转率分析</div>
26
+        <linechart
27
+          :autoStop="false"
28
+          :top="30"
29
+          :bottom="30"
30
+          :left="40"
31
+          :legendTop="0"
32
+          yAxisName="(%)"
33
+          :dataset="linedata1"
34
+          :tooltipFormat="lineTooltipFormat1"
35
+          :encode="[
36
+              { x: 'month', y: 'lastAmount', seriesName: '停车场周转率',bool:'true' },
37
+            ]"
38
+          id="sxcyfzqk1"
39
+        />
40
+      </div>
41
+    </div>
42
+    <div style="display: flex; justify-content: space-between;margin-top: 5%">
43
+      <div style="width: 50%; height: 300px;">
44
+        <div align="center" style="color: white">停车场营收分析</div>
45
+        <linechart
46
+          :autoStop="false"
47
+          :top="30"
48
+          :bottom="30"
49
+          :left="40"
50
+          :legendTop="0"
51
+          yAxisName="(元)"
52
+          :dataset="linedata"
53
+          :tooltipFormat="lineTooltipFormat"
54
+          :encode="[
55
+              { x: 'month', y: 'lastYearAmount', seriesName: '泊位收入' },
56
+              { x: 'month', y: 'thisYearAmount', seriesName: '总体收入' },
57
+            ]"
58
+          id="sxcyfzqk"
59
+        />
60
+      </div>
61
+      <div style="width: 50%; height: 300px">
62
+        <div align="center" style="color: white">特殊车辆进场占比</div>
63
+        <piechart
64
+          class="model-pie-body"
65
+          id="chart1"
66
+          :roseType="false"
67
+          :radiusArr="['30%', '70%']"
68
+          :colorArr="modelPieColor"
69
+          :labelFormat="['{name|{b}}', '{sub|{d}%}', '{hr|}']"
70
+          :dataset="modelData.list"
71
+          :encode="{ itemName: 'name', value: 'value' }"
72
+        />
73
+      </div>
74
+    </div>
75
+    <div style="display: flex; justify-content: space-between;margin-top: 5%">
76
+      <div style="width: 50%; height: 300px;padding-left: 25px">
77
+        <div align="center" style="color: white">车辆进出场趋势</div>
78
+        <linechart
79
+          :autoStop="false"
80
+          :top="30"
81
+          :bottom="30"
82
+          :left="40"
83
+          :legendTop="0"
84
+          yAxisName="(%)"
85
+          :dataset="linedata2"
86
+          :tooltipFormat="lineTooltipFormat2"
87
+          :encode="[
88
+              { x: 'month', y: 'lastYearAmount', seriesName: '进流率',bool:'true' },
89
+              { x: 'month', y: 'thisYearAmount', seriesName: '出流率',bool:'true' },
90
+            ]"
91
+          id="sxcyfzqk2"
92
+        />
93
+      </div>
94
+      <div style="width: 50%; height: 300px;">
95
+        <div align="center" style="color: white">停车场营收对比分析</div>
96
+        <linechart
97
+          :autoStop="false"
98
+          :top="30"
99
+          :bottom="30"
100
+          :left="40"
101
+          :legendTop="0"
102
+          yAxisName="(元)"
103
+          :dataset="linedata3"
104
+          :tooltipFormat="lineTooltipFormat3"
105
+          :encode="[
106
+              { x: 'month', y: 'lastYearAmount', seriesName: '建材市场南侧停车场',bool:'true' },
107
+              { x: 'month', y: 'thisYearAmount', seriesName: '市民之家东侧停车场',bool:'true' },
108
+            ]"
109
+          id="sxcyfzqk3"
110
+        />
111
+      </div>
112
+    </div>
113
+  </div>
114
+</template>
115
+<script>
116
+import piechart from "@/components/pieChart";
117
+import linechart from "@/components/lineChart";
118
+import barchart from "@/components/barChart";
119
+import vtable from "@/components/vtableNew";
120
+
121
+
122
+export default {
123
+  components: {
124
+    piechart,
125
+    linechart,
126
+    barchart,
127
+    vtable
128
+  },
129
+  data() {
130
+    return {
131
+      modelPieColor: ["#4382f6", "#9078f8", "#79a7db", "#FF9800"],
132
+      modelData: {
133
+        list: [{name: '建筑车', value: 23}, {name: '危险品车', value:5}, {name: '特种车', value:27}, {name: '残疾人车', value:45}]
134
+      },
135
+      linedata: [{month: '星期一',lastYearAmount: 2300, thisYearAmount: 4740}, {month: '星期二', lastYearAmount:3050, thisYearAmount:5600}
136
+        , {month: '星期三', lastYearAmount:2710, thisYearAmount:3781}, {month: '星期四', lastYearAmount:2670, thisYearAmount:4737}, {month: '星期五', lastYearAmount:3200, thisYearAmount:5252}
137
+        , {month: '星期六', lastYearAmount:4030, thisYearAmount:6160}, {month: '星期天', lastYearAmount:4890, thisYearAmount:6979}],
138
+      linedata1: [{month: '星期一', lastAmount: 38}, {month: '星期二', lastAmount:41}
139
+        , {month: '星期三', lastAmount:33}, {month: '星期四', lastAmount:23}, {month: '星期五', lastAmount:35}
140
+        , {month: '星期六', lastAmount:45}, {month: '星期天', lastAmount:59}],
141
+      linedata2: [{month: '星期一',lastYearAmount: 21, thisYearAmount: 51}, {month: '星期二', lastYearAmount:38, thisYearAmount:42}
142
+        , {month: '星期三', lastYearAmount:27, thisYearAmount:25}, {month: '星期四', lastYearAmount:23, thisYearAmount:20}, {month: '星期五', lastYearAmount:52, thisYearAmount:34}
143
+        , {month: '星期六', lastYearAmount:58, thisYearAmount:32}, {month: '星期天', lastYearAmount:68, thisYearAmount:37}],
144
+      linedata3: [{month: '二月',lastYearAmount: 5000, thisYearAmount: 4500}, {month: '三月', lastYearAmount:6000, thisYearAmount:5200}
145
+        , {month: '四月', lastYearAmount:5500, thisYearAmount:4800}, {month: '五月', lastYearAmount:6200, thisYearAmount:5100}
146
+        , {month: '六月', lastYearAmount:5800, thisYearAmount:4900}, {month: '七月', lastYearAmount:5500, thisYearAmount:4800}
147
+        , {month: '八月', lastYearAmount:6000, thisYearAmount:5100}, {month: '九月', lastYearAmount:5900, thisYearAmount:5000}
148
+        , {month: '十月', lastYearAmount:5700, thisYearAmount:4700}],
149
+      bardata: [{month: '星期一', hs: 1200, cs: 600},{month: '星期二', hs: 1100, cs: 700}
150
+        ,{month: '星期三', hs:1070, cs: 730},{month: '星期四', hs:1130, cs: 670},{month: '星期五', hs:1070, cs:730}
151
+        ,{month: '星期六', hs: 1310, cs: 490},{month: '星期天', hs: 1390, cs: 410},],
152
+    }
153
+  },
154
+  mounted() {
155
+  },
156
+  watch: {
157
+
158
+  },
159
+  methods: {
160
+
161
+    lineTooltipFormat1(params) {
162
+      const data = params[0].data;
163
+      return `<div class="line-tooltip">
164
+        <div style="color: ${params[0].color}">${params[0].seriesName}: ${
165
+        params[0].data.lastAmount || "--"
166
+      }(%)</div>`;
167
+    },
168
+    lineTooltipFormat(params) {
169
+      const data = params[0].data;
170
+      return `<div class="line-tooltip">
171
+        <div style="color: ${params[1].color}">${params[1].seriesName}: ${
172
+        params[0].data.thisYearAmount || "--"
173
+      }(元)</div>
174
+        <div style="color: ${params[0].color}">${params[0].seriesName}: ${
175
+        params[0].data.lastYearAmount || "--"
176
+      }(元)</div>
177
+      </div>`;
178
+    },
179
+    lineTooltipFormat2(params) {
180
+      const data = params[0].data;
181
+      return `<div class="line-tooltip">
182
+        <div style="color: ${params[1].color}">${params[1].seriesName}: ${
183
+        params[0].data.thisYearAmount || "--"
184
+      }(%)</div>
185
+        <div style="color: ${params[0].color}">${params[0].seriesName}: ${
186
+        params[0].data.lastYearAmount || "--"
187
+      }(%)</div>
188
+      </div>`;
189
+    },
190
+    lineTooltipFormat3(params) {
191
+      const data = params[0].data;
192
+      return `<div class="line-tooltip">
193
+        <div style="color: ${params[0].color}">${params[0].seriesName}: ${
194
+        params[0].data.lastYearAmount || "--"
195
+      }(元)</div>
196
+        <div style="color: ${params[1].color}">${params[1].seriesName}: ${
197
+        params[0].data.thisYearAmount || "--"
198
+      }(元)</div>
199
+      </div>`;
200
+    },
201
+    xLabelFormat(name) {
202
+      const nameArr = []
203
+      for(let i=0; i<name.length; i+=7) {
204
+        nameArr.push(name.substring(i, i+7))
205
+      }
206
+      return nameArr.join('\n');
207
+    },
208
+    tooltipFormat(params) {
209
+      const type = params[0].seriesType;
210
+      const data = params[0].data;
211
+      // ${params[0].name || "--"}月:
212
+      return `<div class="line-tooltip">
213
+<div>${params[0].seriesName}: ${
214
+        params[0].data.hs || "--"}个</div>
215
+<div>${params[1].seriesName}: ${
216
+        params[0].data.cs || "--"}个</div>
217
+</div>`;
218
+    },
219
+  }
220
+}
221
+</script>
222
+<style  lang="scss" scoped>
223
+.body-wrapper {
224
+  width: 100%;
225
+  height: 100%;
226
+  box-sizing: border-box;
227
+  background: #0c0c0c;
228
+}
229
+
230
+.model-pie-body {
231
+  width: 100%;
232
+  height: 99%;
233
+}
234
+
235
+
236
+</style>

+ 0 - 0
src/pages/index/components/service_operations.vue


+ 127 - 0
src/pages/index/components/vehicle_violations.vue

@@ -0,0 +1,127 @@
1
+<template>
2
+  <div class="body-wrapper">
3
+    <div style="display: flex; justify-content: space-between;">
4
+      <div style="width: 50%; height: 300px">
5
+        <div align="center" style="color: white">非法车辆类型占比</div>
6
+        <piechart
7
+          class="model-pie-body"
8
+          id="chart1"
9
+          :roseType="false"
10
+          :radiusArr="['30%', '70%']"
11
+          :colorArr="modelPieColor"
12
+          :labelFormat="['{name|{b}}', '{sub|{d}%}', '{hr|}']"
13
+          :dataset="modelData.list"
14
+          :encode="{ itemName: 'name', value: 'value' }"
15
+        />
16
+      </div>
17
+      <div style="width: 50%; height: 300px">
18
+        <div align="center" style="color: white">车辆违规停放行为占比</div>
19
+        <piechart
20
+          class="model-pie-body"
21
+          id="chart2"
22
+          :roseType="false"
23
+          :radiusArr="['30%', '70%']"
24
+          :colorArr="modelPieColor1"
25
+          :labelFormat="['{name|{b}}', '{sub|{d}%}', '{hr|}']"
26
+          :dataset="modelData1.list"
27
+          :encode="{ itemName: 'name', value: 'value' }"
28
+        />
29
+      </div>
30
+    </div>
31
+    <div style="display: flex; justify-content: space-between;margin-top: 5%">
32
+      <div style="width: 50%; height: 300px;">
33
+        <div align="center" style="color: white">车辆异常行为分析</div>
34
+        <barchart
35
+          class="side-chart"
36
+          :autoStop="false"
37
+          :colorArr="['#ffd201', '#00eacb', '#01b4ff', '#5d78ff']"
38
+          legendIcon="react"
39
+          :bottom="30"
40
+          :xlabelFormat="xLabelFormat"
41
+          :top="60"
42
+          yAxisName="(个)"
43
+          :tooltip="tooltipFormat"
44
+          :dataset="bardata"
45
+          :encode="[
46
+            {x: 'month', y: 'hs', seriesName: '行驶'},
47
+            {x: 'month', y: 'cs', seriesName: '停车'}]"
48
+          :labelSize="15"
49
+          id="fxdqhszzt"
50
+        />
51
+      </div>
52
+      <div style="width: 50%; height: 300px">
53
+
54
+      </div>
55
+    </div>
56
+  </div>
57
+</template>
58
+<script>
59
+import piechart from "@/components/pieChart";
60
+import linechart from "@/components/lineChart";
61
+import barchart from "@/components/barChart";
62
+import vtable from "@/components/vtableNew";
63
+
64
+
65
+export default {
66
+  components: {
67
+    piechart,
68
+    linechart,
69
+    barchart,
70
+    vtable
71
+  },
72
+  data() {
73
+    return {
74
+      modelPieColor: ["#4382f6", "#9078f8", "#79a7db", "#FF9800"],
75
+      modelData: {
76
+        list: [{name: '微型车', value: 17}, {name: '小型车', value:45}, {name: '中型车', value:30}, {name: '大型车', value:8}]
77
+      },
78
+      modelPieColor1: ["#4382f6", "#9078f8", "#79a7db", "#FF9800"],
79
+      modelData1: {
80
+        list: [{name: '消防通道', value: 17}, {name: '残疾人车位', value:30}, {name: '其他行为', value:45}, {name: '占用急救车通道', value:8}]
81
+      },
82
+      bardata: [{month: '刮蹭', hs: 24, cs: 10},{month: '不规律行驶', hs:30, cs:15}
83
+        ,{month: '疲劳驾驶', hs:25, cs:8},{month: '超车', hs:35, cs:20},{month: '套牌', hs:15, cs:11},],
84
+    }
85
+  },
86
+  mounted() {
87
+  },
88
+  watch: {
89
+
90
+  },
91
+  methods: {
92
+    xLabelFormat(name) {
93
+      const nameArr = []
94
+      for(let i=0; i<name.length; i+=7) {
95
+        nameArr.push(name.substring(i, i+7))
96
+      }
97
+      return nameArr.join('\n');
98
+    },
99
+    tooltipFormat(params) {
100
+      const type = params[0].seriesType;
101
+      const data = params[0].data;
102
+      // ${params[0].name || "--"}月:
103
+      return `<div class="line-tooltip">
104
+<div>${params[0].seriesName}: ${
105
+        params[0].data.hs || "--"}个</div>
106
+<div>${params[1].seriesName}: ${
107
+        params[0].data.cs || "--"}个</div>
108
+</div>`;
109
+    },
110
+  }
111
+}
112
+</script>
113
+<style  lang="scss" scoped>
114
+.body-wrapper {
115
+  width: 100%;
116
+  height: 100%;
117
+  box-sizing: border-box;
118
+  background: #0c0c0c;
119
+}
120
+
121
+.model-pie-body {
122
+  width: 100%;
123
+  height: 99%;
124
+}
125
+
126
+
127
+</style>

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

@@ -57,6 +57,12 @@ export default {
57 57
         {name: '停车运行监管', url: '/park_monitor'},
58 58
         {name: '停车行为检测', url: '/park_bahavior'},
59 59
         {name: '设备运行检测', url: '/equipment_running'},
60
+        {name: '经营性(路外)车场主题', url: '/berth_road_out'},
61
+        {name: '停车收费取证主题', url: '/parking_fee'},
62
+        {name: '车辆违规主题', url: '/vehicle_violations'},
63
+        {name: '运营停车场主题', url: '/parking_operate'},
64
+        {name: '区域停车主题', url: '/parking_area'},
65
+        {name: '设备运营主题', url: '/service_operations'},
60 66
       ]
61 67
     }
62 68
   },

+ 30 - 0
src/router/index.js

@@ -129,6 +129,36 @@ export default new Router({
129 129
           path: "/equipment_running",
130 130
           component: () => import("../pages/index/components/equipment_running.vue")
131 131
         },
132
+        {
133
+          name: "berth_road_out",
134
+          path: "/berth_road_out",
135
+          component: () => import("../pages/index/components/berth_road_out.vue")
136
+        },
137
+        {
138
+          name: "parking_fee",
139
+          path: "/parking_fee",
140
+          component: () => import("../pages/index/components/parking_fee.vue")
141
+        },
142
+        {
143
+          name: "vehicle_violations",
144
+          path: "/vehicle_violations",
145
+          component: () => import("../pages/index/components/vehicle_violations.vue")
146
+        },
147
+        {
148
+          name: "parking_operate",
149
+          path: "/parking_operate",
150
+          component: () => import("../pages/index/components/parking_operate.vue")
151
+        },
152
+        {
153
+          name: "parking_area",
154
+          path: "/parking_area",
155
+          component: () => import("../pages/index/components/parking_area.vue")
156
+        },
157
+        {
158
+          name: "service_operations",
159
+          path: "/service_operations",
160
+          component: () => import("../pages/index/components/service_operations.vue")
161
+        },
132 162
       ]
133 163
     }
134 164
   ]