Ver código fonte

页面基本完成 无修改

车主信用监管、企业服务监管、泊位基础情况、泊位使用情况、泊位营收情况、停车场情况、其他分析
烬玊 1 ano atrás
pai
commit
5a209e9da5

+ 1 - 1
src/components/lineChart.vue

@@ -4,7 +4,7 @@ smooth:encode.bool,<template>
4 4
 
5 5
 <script>
6 6
 import * as echarts from 'echarts'
7
-const colors = ["#00F5FC", "#D5920F", "#FA6894"];
7
+const colors = ["#00F5FC", "#D5920F", "#FA6894","#4cff37"];
8 8
 export default {
9 9
   props: {
10 10
     id: { type: String, required: true },

+ 126 - 138
src/pages/index/components/berths_information.vue

@@ -1,76 +1,75 @@
1 1
 <template>
2 2
   <div class="body-wrapper">
3
-    <div class="search-card">
4
-      <h5>泊位基础情况分析</h5>
5
-    </div>
3
+    <el-form class="form-wrapper" :inline="true" :model="formInline">
4
+      <el-form-item label="行政区">
5
+        <el-select v-model="formInline.region" placeholder="行政区" class="cur-select">
6
+          <el-option label="源汇区" value="源汇区"></el-option>
7
+          <el-option label="郾城区" value="郾城区"></el-option>
8
+          <el-option label="召陵区" value="召陵区"></el-option>
9
+        </el-select>
10
+      </el-form-item>
11
+      <el-form-item label="重点区域">
12
+        <el-select v-model="formInline.region2" placeholder="重点区域" class="cur-select">
13
+          <el-option label="违规停车高发区" value="违规停车高发区"></el-option>
14
+          <el-option label="事故高发区" value="事故高发区"></el-option>
15
+        </el-select>
16
+      </el-form-item>
17
+      <el-form-item label="道路">
18
+        <el-select v-model="formInline.region3" placeholder="道路" class="cur-select">
19
+          <el-option label="拥政路" value="拥政路"></el-option>
20
+          <el-option label="团结路" value="团结路"></el-option>
21
+          <el-option label="黄河中路" value="黄河中路"></el-option>
22
+        </el-select>
23
+      </el-form-item>
24
+      <el-form-item>
25
+        <el-button type="primary" @click="onSubmit">查询</el-button>
26
+      </el-form-item>
27
+    </el-form>
6 28
     <br>
7
-    <form id="form1" size="medium">
8
-      <el-select v-model="value" placeholder="行政区" class="sel">
9
-        <el-option
10
-          v-for="item in options"
11
-          :key="item.value"
12
-          :label="item.label"
13
-          :value="item.value">
14
-        </el-option>
15
-      </el-select>
16
-
17
-      <el-select v-model="value" placeholder="重点区域" class="sel">
18
-        <el-option
19
-          v-for="item in options2"
20
-          :key="item.value"
21
-          :label="item.label"
22
-          :value="item.value">
23
-        </el-option>
24
-      </el-select>
25
-
26
-      <el-select v-model="value" placeholder="道路" class="sel">
27
-        <el-option
28
-          v-for="item in options3"
29
-          :key="item.value"
30
-          :label="item.label"
31
-          :value="item.value">
32
-        </el-option>
33
-      </el-select>
34
-      <el-button class="btn_save" type="primary" @click="submitIntegrationConfig">查询</el-button>
35
-    </form>
36 29
     <br>
37
-    <div class="charts_all">
38
-      <div class="charts">
30
+    <br>
31
+    <div style="width: 100%;display: flex;justify-content: space-between;">
32
+      <div style="width: 33%;height: 400px;">
33
+        <h4 style="color: white">泊位数量</h4>
39 34
         <piechart
40 35
           class="model-pie-body"
41
-          :roseType="false"
42 36
           id="chart1"
43 37
           :radiusArr="['30%', '70%']"
38
+          :roseType = "false"
44 39
           :colorArr="modelPieColor"
45
-          :labelFormat="['{name|{b}}', '{sub|{@value}万元 {d}%}', '{hr|}']"
40
+          :labelFormat="['{name|{b}}', '{sub|{@value} {d}%}', '{hr|}']"
46 41
           :dataset="modelData.list"
47 42
           :encode="{ itemName: 'name', value: 'value' }"
48 43
         />
49 44
       </div>
50
-      <div class="charts">
45
+      <div style="width: 33%;height: 400px;">
46
+        <h4 style="color: white">充电桩</h4>
51 47
         <piechart
52 48
           class="model-pie-body"
53
-          :roseType="false"
54 49
           id="chart2"
55 50
           :radiusArr="['30%', '70%']"
56
-          :colorArr="modelPieColor"
57
-          :labelFormat="['{name|{b}}', '{sub|{@value}万元 {d}%}', '{hr|}']"
51
+          :roseType = "false"
52
+          :colorArr="modelPieColor2"
53
+          :labelFormat="['{name|{b}}', '{sub|{@value} {d}%}', '{hr|}']"
58 54
           :dataset="modelData2.list"
59 55
           :encode="{ itemName: 'name', value: 'value' }"
60 56
         />
61 57
       </div>
62
-      <div class="charts">
58
+
59
+      <div style="width: 33%;height: 400px;">
60
+        <h4 style="color: white">残疾车位</h4>
63 61
         <piechart
64 62
           class="model-pie-body"
65
-          :roseType="false"
66 63
           id="chart3"
67 64
           :radiusArr="['30%', '70%']"
68
-          :colorArr="modelPieColor"
69
-          :labelFormat="['{name|{b}}', '{sub|{@value}万元 {d}%}', '{hr|}']"
65
+          :roseType = "false"
66
+          :colorArr="modelPieColor3"
67
+          :labelFormat="['{name|{b}}', '{sub|{@value} {d}%}', '{hr|}']"
70 68
           :dataset="modelData3.list"
71 69
           :encode="{ itemName: 'name', value: 'value' }"
72 70
         />
73 71
       </div>
72
+      <br>
74 73
     </div>
75 74
 
76 75
   </div>
@@ -85,6 +84,7 @@ export default {
85 84
   },
86 85
   data() {
87 86
     return {
87
+<<<<<<< Updated upstream
88 88
       options: [{
89 89
         value: '源汇区',
90 90
         label: '源汇区'
@@ -108,17 +108,42 @@ export default {
108 108
       }],
109 109
       value: '',
110 110
       modelPieColor: ["#4382f6","#9078f8"],
111
+=======
112
+      columns: [
113
+        {
114
+          label: '日期',
115
+          key: 'resourceName'
116
+        },
117
+        {
118
+          label: '操作',
119
+          key: 'resourceType'
120
+        },
121
+        {
122
+          label: '用户',
123
+          key: 'userName'
124
+        },
125
+        {
126
+          label: '详情',
127
+          key: 'applyTypeText'
128
+        },
129
+        {
130
+          label: 'IP地址',
131
+          key: 'applyTypeText'
132
+        }
133
+      ],
134
+      modelPieColor: ["#2E8B57","#9078f8"],
135
+>>>>>>> Stashed changes
111 136
       modelData: {
112
-        list: [{name: '占用位', value: 100}, {name: '空闲位', value: 100}]
137
+        list: [{name: '空闲中', value: 600}, {name: '占用中', value: 800}]
113 138
       },
139
+      modelPieColor2: ["#2E8B57","#9078f8"],
114 140
       modelData2: {
115
-        list: [{name: '占用位', value: 200}, {name: '空闲位', value: 800}]
141
+        list: [{name: '空闲中', value: 600}, {name: '占用中', value: 800}]
116 142
       },
143
+      modelPieColor3: ["#2E8B57","#9078f8"],
117 144
       modelData3: {
118
-        list: [{name: '占用位', value: 100}, {name: '空闲位', value: 900}]
145
+        list: [{name: '空闲中', value: 600}, {name: '占用中', value: 800}]
119 146
       },
120
-      linedata: [{month: '11', lastYearAmount: 20, thisYearAmount: 30}, {month: '12', lastYearAmount: 40, thisYearAmount: 50}],
121
-      bardata: [{month: '01', hs: 100, cs: 200},{month: '02', hs: 300, cs: 200},{month: '03', hs: 400, cs: 200},],
122 147
       tableData: [],
123 148
       total: 0,
124 149
       pageSize: 10,
@@ -126,9 +151,12 @@ export default {
126 151
       radio: '2',
127 152
       dialogVisible: false,
128 153
       selRow: {},
129
-      searchWords: undefined,
130
-      searchWords2: undefined,
131
-      searchWords3: undefined
154
+      formInline: {
155
+        interfaceName: '',
156
+        region: '',
157
+        region2: '',
158
+        region3: ''
159
+      }
132 160
     }
133 161
   },
134 162
   mounted() {
@@ -140,62 +168,64 @@ export default {
140 168
     handlePageChange() {
141 169
       this.getTableData()
142 170
     },
143
-    handleAudit(row) {
171
+    handleDetail(row) {
144 172
       this.selRow = row
145 173
       this.dialogVisible = true
146 174
     },
147
-    handleCancelApply(row) {
148
-      console.log('enter handle cancel apply')
149
-    },
150
-    handleConfirm() {
151
-      const {id} = this.selRow
152
-      console.log('radio', this.radio)
153
-      api.applyResource({id, applyType: this.radio}).then(res => {
154
-        if(res.success) {
155
-          this.dialogVisible = false
156
-          this.$message({
157
-            message: '审核成功!',
158
-            type: 'success'
159
-          })
160
-          this.getTableData()
161
-        }
162
-      })
163
-    },
164 175
     getTableData() {
165 176
       const {pageNum, pageSize, searchWords} = this
166
-      api.applyList({pageNum, pageSize, resourceName: searchWords}).then(res => {
167
-        this.tableData = []
168
-        res.data.records.map((item, index) => {
169
-          const newItem = {...item}
170
-          newItem.applyTypeText = this.getApplyTypeText(item.applyType)
171
-          this.tableData.push(newItem)
172
-        })
177
+      api.applyList({pageNum, pageSize, interfaceName: this.formInline.interfaceName}).then(res => {
178
+        this.tableData = res.data.records
173 179
         this.total = res.data.total
174 180
       })
175 181
     },
176
-    getApplyTypeText(val) {
177
-      if (!val){
178
-        return '未申请'
179
-      }
180
-      const textMap = {
181
-        1: '待审批',
182
-        2: '审批通过',
183
-        3: '审批驳回'
184
-      }
185
-      return textMap[val]
186
-    },
187
-    handleSearch() {
188
-      this.pageNum = 1
189
-      this.getTableData()
182
+    onSubmit() {
183
+      console.log('submit!');
190 184
     }
191 185
   }
192 186
 }
193 187
 </script>
194 188
 <style  lang="scss" scoped>
189
+.form-wrapper {
190
+  margin-bottom: 20px;
191
+}
192
+/deep/ .el-input__inner {
193
+  background: #2d3744;
194
+  border: none;
195
+  border-radius: 0;
196
+}
197
+/deep/ .el-select {
198
+  height: 40px;
199
+  .el-input__inner {
200
+    height: 40px;
201
+  }
202
+  .el-input__prefix, .el-input__suffix {
203
+    height: 40px;
204
+  }
205
+
206
+  /* 下面设置右侧按钮居中 */
207
+  .el-input__suffix {
208
+    top: 0px;
209
+    display: flex;
210
+    justify-content: center;
211
+    align-items: center;
212
+    flex-wrap: nowrap;
213
+    flex-direction: row;
214
+    align-content: flex-start;
215
+  }
216
+  /* 输入框加上上下边是 32px + 2px =34px */
217
+  .el-input__icon {
218
+    line-height: 0px;
219
+  }
220
+}
221
+/deep/ .form-wrapper .el-button {
222
+  background: linear-gradient(90deg,#0158d9,#3c97e4);
223
+  width: 100px;
224
+  height: 40px;
225
+}
195 226
 .body-wrapper {
196 227
   padding: 20px;
197 228
   background: #0c0c0c;
198
-  width: 80%;
199 229
   .button-block{
200 230
     text-align: right;
201 231
     margin-bottom: 20px;
@@ -203,52 +233,6 @@ export default {
203 233
   .table-pagination{
204 234
     text-align: right;
205 235
   }
206
-  .search-card{
207
-    font-size: 24px;
208
-    font-weight: bold;
209
-    color: #3498db;
210
-    margin-bottom: 20px;
211
-    .input-wrapper{
212
-      width: 36%;
213
-    }
214
-  }
215
-}
216
-
217
-.charts_all{
218
-  display: flex;
219
-  justify-content: space-around;
220
-  width: 100%;
221
-  height: 320px;
222
-}
223
-
224
-.charts{
225
-  width: 30%;
226
-  height: 300px;
227
-}
228
-.btn_save{
229
-  background-color: #3498db;
230
-  color: #ffffff;
231
-  padding: 10px 20px;
232
-  cursor: pointer;
233
-  border: none;
234
-  border-radius: 4px;
235
-  font-size: 16px;
236
-  height: 40px;
237
-}
238
-
239
-.sel{
240
-  height: 200px;
241
-  margin-right: 10px;
242
-}
243
-
244
-.input-search{
245
-  width: 100%;
246
-  padding: 10px;
247
-  margin-bottom: 20px;
248
-  box-sizing: border-box;
249
-  background-color: #2a2a2a;
250
-  border: 1px solid #333;
251
-  color: #ffffff;
252 236
 }
253 237
 .audit-dialog{
254 238
   .mg-bt{
@@ -258,4 +242,8 @@ export default {
258 242
     text-align: right;
259 243
   }
260 244
 }
245
+/deep/ .el-textarea.is-disabled .el-textarea__inner {
246
+  background: #2a2a2a;
247
+  color: #fff;
248
+}
261 249
 </style>

Diferenças do arquivo suprimidas por serem muito extensas
+ 267 - 0
src/pages/index/components/berths_revenue.vue


Diferenças do arquivo suprimidas por serem muito extensas
+ 274 - 0
src/pages/index/components/berths_usage.vue


+ 156 - 0
src/pages/index/components/car_owner_credit.vue

@@ -1 +1,157 @@
1
+<template xmlns:piechart="http://www.w3.org/1999/html">
2
+  <div class="body-wrapper">
3
+    <div class="search-card">
4
+      <h5>车主停车欠费情况</h5>
5
+    </div>
6
+    <el-table :data="tableData" style="background: #2a2a2a;border-color: #333;">
7
+      <el-table-column v-for="(item, index) in columns" :key="index" :label="item.label" :prop="item.key">
8
+      </el-table-column>
9
+    </el-table>
10
+    <div class="table-pagination">
11
+      <el-pagination :background="false" layout="total, prev, pager, next" :total="total" @current-change="handlePageChange"
12
+                     :current-page.sync="pageNum5" :page-size.sync="pageSize5">
13
+      </el-pagination>
14
+    </div>
15
+    <br>
1 16
 
17
+
18
+  </div>
19
+</template>
20
+<script>
21
+import api from "@/api/audit.js";
22
+import piechart from "@/components/pieChart";
23
+
24
+export default {
25
+  components: {
26
+    piechart
27
+  },
28
+  data() {
29
+    return {
30
+      columns: [
31
+        {
32
+          label: '姓名',
33
+          key: 'resourceName'
34
+        },
35
+        {
36
+          label: '欠费金额',
37
+          key: 'resourceType'
38
+        } ,{
39
+          label: '信用分',
40
+          key: 'resourceName'
41
+        }
42
+      ],
43
+      tableData: [],
44
+      total: 0,
45
+      pageSize: 10,
46
+      pageNum: 1,
47
+      radio: '2',
48
+      dialogVisible: false,
49
+      selRow: {},
50
+      searchWords: undefined,
51
+      searchWords2: undefined,
52
+    }
53
+  },
54
+  mounted() {
55
+    this.getTableData()
56
+  },
57
+  watch: {
58
+  },
59
+  methods: {
60
+    handlePageChange() {
61
+      this.getTableData()
62
+    },
63
+    handleAudit(row) {
64
+      this.selRow = row
65
+      this.dialogVisible = true
66
+    },
67
+    handleCancelApply(row) {
68
+      console.log('enter handle cancel apply')
69
+    },
70
+    handleConfirm() {
71
+      const {id} = this.selRow
72
+      api.applyResource({id, applyType: this.radio}).then(res => {
73
+        if(res.success) {
74
+          this.dialogVisible = false
75
+          this.$message({
76
+            message: '审核成功!',
77
+            type: 'success'
78
+          })
79
+          this.getTableData()
80
+        }
81
+      })
82
+    },
83
+    getTableData() {
84
+      const {pageNum, pageSize, searchWords} = this
85
+      api.applyList({pageNum, pageSize, resourceName: searchWords}).then(res => {
86
+        this.tableData = []
87
+        res.data.records.map((item, index) => {
88
+          const newItem = {...item}
89
+          newItem.applyTypeText = this.getApplyTypeText(item.applyType)
90
+          this.tableData.push(newItem)
91
+        })
92
+        this.total = res.data.total
93
+      })
94
+    },
95
+    getTableData2() {
96
+      api.applyList({}).then(res => {
97
+        this.tableData2 =  res.data.data
98
+        this.total2 = res.data.total
99
+      })
100
+    },
101
+
102
+    getTableData3() {
103
+      api.applyList({pageNum: this.pageNum2, pageSize:this.pageSize2, resourceName: this.searchWords2}).then(res => {
104
+        this.tableData3 =  res.data.data
105
+        this.total3 = res.data.total
106
+      })
107
+    },
108
+
109
+
110
+    getApplyTypeText(val) {
111
+      if (!val){
112
+        return '未申请'
113
+      }
114
+      const textMap = {
115
+        1: '待审批',
116
+        2: '审批通过',
117
+        3: '审批驳回'
118
+      }
119
+      return textMap[val]
120
+    },
121
+    handleSearch() {
122
+      this.pageNum = 1
123
+      this.getTableData()
124
+    }
125
+  }
126
+}
127
+</script>
128
+<style  lang="scss" scoped>
129
+.body-wrapper {
130
+  padding: 20px;
131
+  background: #0c0c0c;
132
+  .button-block{
133
+    text-align: right;
134
+    margin-bottom: 20px;
135
+  }
136
+  .table-pagination{
137
+    text-align: right;
138
+  }
139
+  .search-card{
140
+    font-size: 24px;
141
+    font-weight: bold;
142
+    color: #3498db;
143
+    margin-bottom: 20px;
144
+    .input-wrapper{
145
+      width: 36%;
146
+    }
147
+  }
148
+}
149
+.audit-dialog{
150
+  .mg-bt{
151
+    margin-bottom: 24px;
152
+  }
153
+  .label{
154
+    text-align: right;
155
+  }
156
+}
157
+</style>

+ 1 - 3
src/pages/index/components/charge_price.vue

@@ -37,7 +37,7 @@
37 37
         </el-table>
38 38
         <div class="table-pagination">
39 39
           <el-pagination :background="false" layout="total, prev, pager, next" :total="total" @current-change="handlePageChange"
40
-                         :current-page.sync="pageNum5" :page-size.sync="pageSize5">
40
+                         :current-page.sync="pageNum" :page-size.sync="pageSize">
41 41
           </el-pagination>
42 42
         </div>
43 43
       </div>
@@ -100,8 +100,6 @@ export default {
100 100
       total: 0,
101 101
       pageSize: 10,
102 102
       pageNum: 1,
103
-      pageSize2: 10,
104
-      pageNum2: 1,
105 103
       radio: '2',
106 104
       dialogVisible: false,
107 105
       selRow: {},

+ 212 - 0
src/pages/index/components/enterprise_service.vue

@@ -0,0 +1,212 @@
1
+<template xmlns:piechart="http://www.w3.org/1999/html">
2
+  <div class="body-wrapper">
3
+    <div class="search-card">
4
+      <h5>车场综合服务评价</h5>
5
+    </div>
6
+    <br>
7
+    <div style="display: flex;justify-content: space-around;">
8
+      <div style="width: 33%;display: flex;">
9
+      <h4 class="h4font" data="tableData">贵弘停车场:</h4><h3 class="h4font" data="tableData2">5</h3><h4 class="h4font">个</h4>
10
+      </div>
11
+      <div style="width: 33%;display: flex;">
12
+        <h4 class="h4font" data="tableData3">裕泰停车场:</h4><h3 class="h4font" data="tableData4">5</h3><h4 class="h4font">个</h4>
13
+      </div>
14
+      <div style="width: 33%;display: flex;">
15
+        <h4 class="h4font" data="tableData5">强利停车场:</h4><h3 class="h4font" data="tableData6">5</h3><h4 class="h4font">个</h4>
16
+      </div>
17
+    </div>
18
+    <br>
19
+    <br>
20
+    <el-table :data="tableData7" style="background: #2a2a2a;border-color: #333;">
21
+      <el-table-column v-for="(item, index) in columns" :key="index" :label="item.label" :prop="item.key">
22
+      </el-table-column>
23
+    </el-table>
24
+    <div class="table-pagination">
25
+      <el-pagination :background="false" layout="total, prev, pager, next" :total="total" @current-change="handlePageChange"
26
+                     :current-page.sync="pageNum" :page-size.sync="pageSize">
27
+      </el-pagination>
28
+    </div>
29
+    <br>
30
+
31
+
32
+  </div>
33
+</template>
34
+<script>
35
+import api from "@/api/audit.js";
36
+import piechart from "@/components/pieChart";
37
+
38
+export default {
39
+  components: {
40
+    piechart
41
+  },
42
+  data() {
43
+    return {
44
+      columns: [
45
+        {
46
+          label: '姓名',
47
+          key: 'resourceName'
48
+        },
49
+        {
50
+          label: '综合评分',
51
+          key: 'resourceType'
52
+        }
53
+      ],
54
+      tableData: [],
55
+      tableData2: [],
56
+      tableData3: [],
57
+      tableData4: [],
58
+      tableData5: [],
59
+      tableData6: [],
60
+      tableData7: [],
61
+      total: 0,
62
+      total2: 0,
63
+      total3: 0,
64
+      total4: 0,
65
+      total5: 0,
66
+      total6: 0,
67
+      total7: 0,
68
+      pageSize: 10,
69
+      pageNum: 1,
70
+      radio: '2',
71
+      dialogVisible: false,
72
+      selRow: {},
73
+      searchWords: undefined,
74
+      searchWords2: undefined,
75
+    }
76
+  },
77
+  mounted() {
78
+    this.getTableData()
79
+    this.getTableData2()
80
+    this.getTableData3()
81
+    this.getTableData4()
82
+    this.getTableData5()
83
+    this.getTableData6()
84
+    this.getTableData7()
85
+  },
86
+  watch: {
87
+  },
88
+  methods: {
89
+    handlePageChange() {
90
+      this.getTableData()
91
+    },
92
+    handleAudit(row) {
93
+      this.selRow = row
94
+      this.dialogVisible = true
95
+    },
96
+    handleCancelApply(row) {
97
+      console.log('enter handle cancel apply')
98
+    },
99
+    handleConfirm() {
100
+      const {id} = this.selRow
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
+    getTableData2() {
125
+      api.applyList({}).then(res => {
126
+        this.tableData2 =  res.data.data
127
+        this.total2 = res.data.total
128
+      })
129
+    },
130
+    getTableData3() {
131
+      api.applyList({}).then(res => {
132
+        this.tableData3 =  res.data.data
133
+        this.total3 = res.data.total
134
+      })
135
+    },
136
+    getTableData4() {
137
+      api.applyList({}).then(res => {
138
+        this.tableData4 =  res.data.data
139
+        this.total4 = res.data.total
140
+      })
141
+    },
142
+    getTableData5() {
143
+      api.applyList({}).then(res => {
144
+        this.tableData5 =  res.data.data
145
+        this.total5 = res.data.total
146
+      })
147
+    },
148
+    getTableData6() {
149
+      api.applyList({}).then(res => {
150
+        this.tableData6 =  res.data.data
151
+        this.total6 = res.data.total
152
+      })
153
+    },
154
+    getTableData7() {
155
+      api.applyList({}).then(res => {
156
+        this.tableData7 =  res.data.data
157
+        this.total7 = res.data.total
158
+      })
159
+    },
160
+
161
+
162
+    getApplyTypeText(val) {
163
+      if (!val){
164
+        return '未申请'
165
+      }
166
+      const textMap = {
167
+        1: '待审批',
168
+        2: '审批通过',
169
+        3: '审批驳回'
170
+      }
171
+      return textMap[val]
172
+    },
173
+    handleSearch() {
174
+      this.pageNum = 1
175
+      this.getTableData()
176
+    }
177
+  }
178
+}
179
+</script>
180
+<style  lang="scss" scoped>
181
+.body-wrapper {
182
+  padding: 20px;
183
+  background: #0c0c0c;
184
+  .button-block{
185
+    text-align: right;
186
+    margin-bottom: 20px;
187
+  }
188
+  .table-pagination{
189
+    text-align: right;
190
+  }
191
+  .search-card{
192
+    font-size: 24px;
193
+    font-weight: bold;
194
+    color: #3498db;
195
+    margin-bottom: 20px;
196
+    .input-wrapper{
197
+      width: 36%;
198
+    }
199
+  }
200
+}
201
+.h4font{
202
+  color: #FFFFFF;
203
+}
204
+.audit-dialog{
205
+  .mg-bt{
206
+    margin-bottom: 24px;
207
+  }
208
+  .label{
209
+    text-align: right;
210
+  }
211
+}
212
+</style>

+ 15 - 4
src/pages/index/components/equipment_running.vue

@@ -30,9 +30,9 @@
30 30
           id="chart2"
31 31
           :radiusArr="['30%', '70%']"
32 32
           :roseType = "false"
33
-          :colorArr="modelPieColor"
33
+          :colorArr="modelPieColor2"
34 34
           :labelFormat="['{name|{b}}', '{sub|{@value}辆 {d}%}', '{hr|}']"
35
-          :dataset="modelData.list"
35
+          :dataset="modelData2.list"
36 36
           :encode="{ itemName: 'name', value: 'value' }"
37 37
         />
38 38
       </div>
@@ -44,9 +44,9 @@
44 44
           id="chart3"
45 45
           :radiusArr="['30%', '70%']"
46 46
           :roseType = "false"
47
-          :colorArr="modelPieColor"
47
+          :colorArr="modelPieColor3"
48 48
           :labelFormat="['{name|{b}}', '{sub|{@value}辆 {d}%}', '{hr|}']"
49
-          :dataset="modelData.list"
49
+          :dataset="modelData3.list"
50 50
           :encode="{ itemName: 'name', value: 'value' }"
51 51
         />
52 52
       </div>
@@ -80,6 +80,14 @@ export default {
80 80
       modelData: {
81 81
         list: [{name: '在线', value: 600}, {name: '离线', value: 800}]
82 82
       },
83
+      modelPieColor2: ["#2E8B57","#9078f8"],
84
+      modelData2: {
85
+        list: [{name: '在线', value: 600}, {name: '离线', value: 800}]
86
+      },
87
+      modelPieColor3: ["#2E8B57","#9078f8"],
88
+      modelData3: {
89
+        list: [{name: '在线', value: 600}, {name: '离线', value: 800}]
90
+      },
83 91
 
84 92
       tableData: [],
85 93
       tableData2: [],
@@ -104,6 +112,9 @@ export default {
104 112
   methods: {
105 113
     handlePageChange() {
106 114
       this.getTableData()
115
+      this.getTableData2()
116
+      this.getTableData3()
117
+      this.getTableDat4()
107 118
     },
108 119
     handleAudit(row) {
109 120
       this.selRow = row

+ 729 - 0
src/pages/index/components/other_analyse.vue

@@ -0,0 +1,729 @@
1
+<template>
2
+  <div class="body-wrapper">
3
+    <div class="search-card">
4
+      <h5>其他分析</h5>
5
+    </div>
6
+    <br>
7
+    <div class="charts">
8
+      <div style="width: 50%;height: 500px;">
9
+        <h4 style="color: white">区域分析</h4>
10
+        <br>
11
+        <barchart
12
+          class="side-chart"
13
+          :autoStop="false"
14
+          :colorArr="[ '#5d78ff']"
15
+          legendIcon="react"
16
+          :bottom="30"
17
+          :xlabelFormat="xLabelFormat"
18
+          :top="60"
19
+          yAxisName="(停车次数)"
20
+          :tooltip="tooltipFormat"
21
+          :dataset="bardata"
22
+          :encode="[
23
+            {x: 'month', y: 'dq'},
24
+            ]"
25
+          :labelSize="20"
26
+          id="qyfx"
27
+        />
28
+      </div>
29
+
30
+      <div style="width: 50%;height: 500px;">
31
+        <h4 style="color: white">车场数量</h4>
32
+        <br>
33
+        <piechart
34
+          class="model-pie-body"
35
+          id="ccsl"
36
+          :radiusArr="['30%', '70%']"
37
+          :roseType = "false"
38
+          :colorArr="ccsl"
39
+          :labelFormat="['{name|{b}}', '{sub|{@value} {d}%}', '{hr|}']"
40
+          :dataset="ccslvalue.list"
41
+          :encode="{ itemName: 'name', value: 'value' }"
42
+        />
43
+      </div>
44
+      <br>
45
+    </div>
46
+    <br>
47
+    <br>
48
+    <br>
49
+    <div class="charts">
50
+      <div style="width: 50%;height: 500px;">
51
+        <h4 style="color: white">停车分布分析</h4>
52
+        <br>
53
+        <barchart
54
+          class="side-chart"
55
+          :autoStop="false"
56
+          :colorArr="[ '#5d78ff','#00ff83']"
57
+          legendIcon="react"
58
+          :bottom="30"
59
+          :xlabelFormat="xLabelFormat"
60
+          :top="60"
61
+          yAxisName="(辆)"
62
+          :tooltip="tooltipFormat"
63
+          :dataset="tcfbfx"
64
+          :encode="[
65
+            {x: 'month', y: 'lwtc', seriesName: '路外停车'},
66
+            {x: 'month', y: 'lntc', seriesName: '路内停车'},
67
+            ]"
68
+          :labelSize="20"
69
+          id="tcfbfx"
70
+        />
71
+      </div>
72
+
73
+      <div style="width: 50%;height: 500px;">
74
+        <h4 style="color: white">余位分析</h4>
75
+        <br>
76
+        <barchart
77
+          class="side-chart"
78
+          :autoStop="false"
79
+          :colorArr="[ '#5d78ff','#00ff83']"
80
+          legendIcon="react"
81
+          :bottom="30"
82
+          :xlabelFormat="xLabelFormat"
83
+          :top="60"
84
+          yAxisName="(泊位)"
85
+          :tooltip="tooltipFormat"
86
+          :dataset="ywfx"
87
+          :encode="[
88
+            {x: 'month', y: 'lwtc', seriesName: '路外余位'},
89
+            {x: 'month', y: 'lntc', seriesName: '路内余位'},
90
+            ]"
91
+          :labelSize="20"
92
+          id="ywfx"
93
+        />
94
+      </div>
95
+
96
+      <br>
97
+    </div>
98
+    <br>
99
+    <br>
100
+    <br>
101
+    <br>
102
+    <br>
103
+    <div class="charts">
104
+      <div style="width: 50%;height: 500px;">
105
+        <h4 style="color: white">停车热点分析</h4>
106
+        <br>
107
+        <div class="bottom" id="map"></div>
108
+      </div>
109
+
110
+      <div style="width: 50%;height: 500px;">
111
+        <h4 style="color: white">车流量分析</h4>
112
+        <br>
113
+        <linechart
114
+          :autoStop="false"
115
+          :top="30"
116
+          :bottom="30"
117
+          :left="40"
118
+          :legendTop="0"
119
+          yAxisName=""
120
+          :dataset="cllfx"
121
+          :tooltipFormat="lineTooltipFormat"
122
+          :encode="[
123
+              { x: 'month', y: 'cll', seriesName: '车流量' },
124
+            ]"
125
+          id="cllfx"
126
+        />
127
+      </div>
128
+
129
+      <br>
130
+    </div>
131
+    <br>
132
+    <br>
133
+    <br>
134
+    <br>
135
+    <br>
136
+    <div class="charts">
137
+      <div style="width: 50%;height: 500px;">
138
+        <h4 style="color: white">低利用率停车场分析</h4>
139
+        <br>
140
+        <barchart
141
+          class="side-chart"
142
+          :autoStop="false"
143
+          :colorArr="[ '#5d78ff']"
144
+          legendIcon="react"
145
+          :bottom="30"
146
+          :xlabelFormat="xLabelFormat"
147
+          :top="60"
148
+          yAxisName=""
149
+          :tooltip="tooltipFormat"
150
+          :dataset="dlyltcc"
151
+          :encode="[
152
+            {x: 'month', y: 'dq'},
153
+            ]"
154
+          :labelSize="20"
155
+          id="dlyltcc"
156
+        />
157
+      </div>
158
+
159
+      <div style="width: 50%;height: 500px;">
160
+        <h4 style="color: white">高峰路线分析</h4>
161
+        <br>
162
+        <div id="ChinaLineMap"></div>
163
+      </div>
164
+      <br>
165
+    </div>
166
+    <br>
167
+    <br>
168
+    <br>
169
+    <br>
170
+    <br>
171
+    <div class="charts">
172
+      <div style="width: 50%;height: 500px;">
173
+        <h4 style="color: white">重点车辆进场占比</h4>
174
+        <br>
175
+      <piechart
176
+          class="model-pie-body"
177
+          id="chart1"
178
+          :roseType="false"
179
+          :radiusArr="['30%', '70%']"
180
+          :colorArr="modelPieColor"
181
+          :labelFormat="['{name|{b}}', '{sub|{d}%}', '{hr|}']"
182
+          :dataset="modelData.list"
183
+          :encode="{ itemName: 'name', value: 'value' }"
184
+        />
185
+    </div>
186
+
187
+      <div style="width: 50%;height: 500px;">
188
+        <h4 style="color: white">重点车辆进场占比</h4>
189
+        <br>
190
+        <div id="ChinaLineMap2"></div>
191
+      </div>
192
+    </div>
193
+
194
+  </div>
195
+</template>
196
+<script>
197
+import api from "@/api/audit.js";
198
+import piechart from "@/components/pieChart";
199
+import linechart from "@/components/lineChart";
200
+import barchart from "@/components/barChart";
201
+import * as echarts from 'echarts'
202
+import * as geoJson from '../../../util/411100.json'
203
+export default {
204
+  name: "chinaLineMap",
205
+  components: {
206
+    piechart,
207
+    linechart,
208
+    barchart
209
+  },
210
+  data() {
211
+    return {
212
+      options: [{
213
+        value: '源汇区',
214
+        label: '源汇区'
215
+      }, {
216
+        value: '召陵区',
217
+        label: '召陵区'
218
+      }],
219
+      options2: [{
220
+        value: '违规停车高发区',
221
+        label: '违规停车高发区'
222
+      }, {
223
+        value: '事故高发区',
224
+        label: '事故高发区'
225
+      }],
226
+      options3: [{
227
+        value: '团结路',
228
+        label: '团结路'
229
+      }, {
230
+        value: '人民东路',
231
+        label: '人民东路'
232
+      }],
233
+      ccsl: ["#ff8700","#9078f8","#ff0000","#4cff37","#4382f6"],
234
+      ccslvalue: {
235
+        list: [{name: '郾城区', value: 600}, {name: '临颍县', value: 800},{name: '舞阳县', value: 720}, {name: '源汇区', value: 840}, {name: '召陵区', value: 960}]
236
+      },
237
+      bardata: [{month: '郾城区', dq: 100},{month: '临颍县', dq: 120},{month: '舞阳县', dq: 115},{month: '源汇区', dq: 135},{month: '召陵区', dq: 150}],
238
+      tcfbfx: [{month: '郾城区', lwtc: 100,lntc:92},{month: '临颍县', lwtc: 120,lntc:80},{month: '舞阳县', lwtc: 110,lntc:65},{month: '源汇区', lwtc: 65,lntc:120},{month: '召陵区', lwtc: 70,lntc:95}],
239
+      ywfx: [{month: '郾城区', lwtc: 100,lntc:92},{month: '临颍县', lwtc: 120,lntc:80},{month: '舞阳县', lwtc: 110,lntc:65},{month: '源汇区', lwtc: 65,lntc:120},{month: '召陵区', lwtc: 70,lntc:95}],
240
+      cllfx: [{month: '郾城区', cll: 20}, {month: '临颍县', cll: 35},{month: '舞阳县', cll: 42},{month: '源汇区', cll: 31},{month: '召陵区', cll: 74},],
241
+      dlyltcc: [{month: '郾城区', dq: 100},{month: '临颍县', dq: 120},{month: '舞阳县', dq: 115},{month: '源汇区', dq: 135},{month: '召陵区', dq: 150}],
242
+      tableData: [],
243
+      tableData2: [],
244
+      tableData3: [],
245
+      tableData4: [],
246
+      dqIndex: -1,
247
+      timer: null,
248
+      option: {
249
+        visualMap: {
250
+          show: true,
251
+          type: "continuous",
252
+          left: "0%",
253
+          bottom: "0%",
254
+          calculable: true,
255
+          textStyle: {
256
+            color: "white",
257
+          },
258
+          text: ["(%)"],
259
+          min: 0,
260
+          max: 100,
261
+          inRange: {
262
+            color: ["#4FC9FB","#36ADFC","#1788D1","#0E6BAE","#1871A2","#0D4D7D"],
263
+          },
264
+        },
265
+        geo: {
266
+          map: "luohe",
267
+          // aspectScale: 1,
268
+          roam: false,
269
+          itemStyle: {
270
+            normal: {
271
+              borderColor: "#2ab8ff",
272
+              borderWidth: 2.5,
273
+              areaColor: "#12235c",
274
+            },
275
+            emphasis: {
276
+              areaColor: "#2AB8FF",
277
+              shadowColor: "rgba(42,184,255, 0.7)",
278
+              shadowOffsetY: 5,
279
+              shadowOffsetX: 5,
280
+              shadowBlur: 5,
281
+            },
282
+          },
283
+        },
284
+        tooltip: {
285
+          confine: true,
286
+          formatter: this.mapTooltip,
287
+          position: "inside",
288
+          backgroundColor: "transparent",
289
+        },
290
+        series: [
291
+          {
292
+            type: "map",
293
+            // roam: true,
294
+            label: {
295
+              normal: {
296
+                textStyle: {
297
+                  color: "#fff",
298
+                },
299
+              },
300
+              emphasis: {
301
+                show: false,
302
+                textStyle: {
303
+                  color: "#fff",
304
+                },
305
+              },
306
+            },
307
+            itemStyle: {
308
+              normal: {
309
+                borderColor: "#76bef5",
310
+                borderWidth: 1.5,
311
+                areaColor: "#4282de",
312
+              },
313
+              emphasis: {
314
+                areaColor: "#002aff",
315
+                borderWidth: 0,
316
+                color: "green",
317
+              },
318
+            },
319
+            roam: false,
320
+            map: "luohe", //使用
321
+            data: [],
322
+          },
323
+        ],
324
+      },
325
+      total: 0,
326
+      pageSize: 10,
327
+      pageNum: 1,
328
+      radio: '2',
329
+      dialogVisible: false,
330
+      selRow: {},
331
+      searchWords: undefined,
332
+      searchWords2: undefined,
333
+      searchWords3: undefined,
334
+      modelPieColor: ["#4382f6", "#9078f8", "#79a7db", "#FF9800"],
335
+      modelData: {
336
+        list: [{name: '建筑车', value: 23}, {name: '危险品车', value:5}, {name: '特种车', value:27}, {name: '残疾人车', value:45}]
337
+      },
338
+    }
339
+  },
340
+  mounted() {
341
+    this.loadChinaLineMap()
342
+    let arr = []
343
+    let dataSoure = {
344
+      '411102': {quyuName: '源汇区', zb: 40},
345
+      '411103': {quyuName: '郾城区', zb: 60},
346
+      '411104': {quyuName: '召陵区', zb: 40},
347
+      '411121': {quyuName: '舞阳县', zb: 50},
348
+      '411122': {quyuName: '临颍县', zb: 30}}
349
+    for (const key in dataSoure) {
350
+      if (key !== '411100') {
351
+        arr.push({
352
+          name: dataSoure[key].quyuName,
353
+          value: Number(dataSoure[key].zb),
354
+        });
355
+      }
356
+    }
357
+    let mapMax = Math.max(...arr.map(item => item.value))
358
+    let mapMin = Math.min(...arr.map(item => item.value))
359
+    console.log(mapMin, '111')
360
+    console.log(mapMax, '222')
361
+    let chart = echarts.init(document.getElementById("map"));
362
+    echarts.registerMap("luohe", geoJson);
363
+    this.option.series[0].data = arr;
364
+    this.option.visualMap.min = mapMin;
365
+    this.option.visualMap.max = mapMax;
366
+    chart.setOption(this.option);
367
+    this.dqIndex = -1;
368
+    this.setIntervalMap(chart);
369
+    //鼠标移入静止播放
370
+    chart.on("mouseover", (e) => {
371
+      clearInterval(this.timer);
372
+      chart.dispatchAction({
373
+        type: "showTip",
374
+        seriesIndex: 0,
375
+        dataIndex: e.dataIndex,
376
+      });
377
+    });
378
+    chart.on("mouseout", (e) => {
379
+      clearInterval(this.timer);
380
+      //鼠标移出后先把上次的高亮取消
381
+      chart.dispatchAction({
382
+        type: "downplay",
383
+        seriesIndex: 0,
384
+        dataIndex: e.dataIndex,
385
+      });
386
+      this.setIntervalMap(chart);
387
+    });
388
+  },
389
+  watch: {
390
+  },
391
+  methods: {
392
+    handlePageChange() {
393
+      this.getTableData()
394
+    },
395
+    handleAudit(row) {
396
+      this.selRow = row
397
+      this.dialogVisible = true
398
+    },
399
+    handleCancelApply(row) {
400
+      console.log('enter handle cancel apply')
401
+    },
402
+    handleConfirm() {
403
+      const {id} = this.selRow
404
+      console.log('radio', this.radio)
405
+      api.applyResource({id, applyType: this.radio}).then(res => {
406
+        if(res.success) {
407
+          this.dialogVisible = false
408
+          this.$message({
409
+            message: '审核成功!',
410
+            type: 'success'
411
+          })
412
+          this.getTableData()
413
+        }
414
+      })
415
+    },
416
+
417
+    mapTooltip(data) {
418
+      return `<div class="map-tooltip">
419
+        <div class="map-tooltip-name">${data.name}:<span class="map-tooltip-value">${data.value}%</span></div>
420
+      </div>`;
421
+    },
422
+    getTableData() {
423
+      const {pageNum, pageSize, searchWords} = this
424
+      api.applyList({}).then(res => {
425
+        this.tableData = []
426
+        res.data.records.map((item, index) => {
427
+          const newItem = {...item}
428
+          newItem.applyTypeText = this.getApplyTypeText(item.applyType)
429
+          this.tableData.push(newItem)
430
+        })
431
+        this.total = res.data.total
432
+      })
433
+    },
434
+    getTableData2() {
435
+      api.applyList({}).then(res => {
436
+        this.tableData2 =  res.data.data
437
+        this.total2 = res.data.total
438
+      })
439
+    },
440
+
441
+    getTableData3() {
442
+      api.applyList({}).then(res => {
443
+        this.tableData3 =  res.data.data
444
+        this.total3 = res.data.total
445
+      })
446
+    },
447
+
448
+    getTableData4() {
449
+      api.applyList({}).then(res => {
450
+        this.tableData4 =  res.data.data
451
+        this.total4 = res.data.total
452
+      })
453
+    },
454
+
455
+    getApplyTypeText(val) {
456
+      if (!val){
457
+        return '未申请'
458
+      }
459
+      const textMap = {
460
+        1: '待审批',
461
+        2: '审批通过',
462
+        3: '审批驳回'
463
+      }
464
+      return textMap[val]
465
+    },
466
+    handleSearch() {
467
+      this.pageNum = 1
468
+      this.getTableData()
469
+    },
470
+    zeroPadding(num, digit) {
471
+      var zero = '';
472
+      for(var i = 0; i < digit; i++) {
473
+        zero += '0';
474
+      }
475
+      return (zero + num).slice(-digit);
476
+    },
477
+    //加载中国飞线地图
478
+    loadChinaLineMap() {
479
+      echarts.registerMap('河南', geoJson);
480
+      var myCharts = echarts.init(document.getElementById('ChinaLineMap'));
481
+      var myCharts2 = echarts.init(document.getElementById('ChinaLineMap2'));
482
+      var geoCoordMap = {
483
+        '源汇区': [114.00647,33.55627],
484
+        '郾城区': [114.00694,33.58723],
485
+        '召陵区': [114.09399,33.58601],
486
+        '舞阳县': [113.59848,33.43243],
487
+        '临颍县': [113.93661,33.81123]
488
+      };
489
+      var chinaDatas = [
490
+        [{
491
+          name: '源汇区',
492
+          value: 0
493
+        }, {
494
+          name: '郾城区',
495
+          value: 20
496
+        }], [{
497
+          name: '郾城区',
498
+          value: 0
499
+        }, {
500
+          name: '召陵区',
501
+          value: 20
502
+        }], [{
503
+          name: '召陵区',
504
+          value: 0
505
+        }, {
506
+          name: '郾城区',
507
+          value: 20
508
+        }], [{
509
+          name: '舞阳县',
510
+          value: 1
511
+        }, {
512
+          name: '郾城区',
513
+          value: 20
514
+        }], [{
515
+          name: '临颍县',
516
+          value: 2
517
+        }, {
518
+          name: '郾城区',
519
+          value: 20
520
+        }]
521
+      ];
522
+      var convertData = function (data) {
523
+        var res = [];
524
+        for (var i = 0; i < data.length; i++) {
525
+          var dataItem = data[i];
526
+          var fromCoord = geoCoordMap[dataItem[0].name];
527
+          // var toCoord = [114.026405, 33.575855];
528
+          var toCoord = geoCoordMap[dataItem[1].name];
529
+          if (fromCoord && toCoord) {
530
+            res.push([{
531
+              coord: fromCoord,
532
+              value: dataItem[0].value
533
+            }, {
534
+              coord: toCoord,
535
+            }]);
536
+          }
537
+        }
538
+        return res;
539
+      };
540
+      //飞线数据
541
+      var series = [];
542
+      [['漯河市', chinaDatas]].forEach(function (item, i) {
543
+        console.log(item)
544
+        series.push({
545
+            type: 'lines',
546
+            zlevel: 2,
547
+            effect: {
548
+              show: true,
549
+              period: 4, //箭头指向速度,值越小速度越快
550
+              trailLength: 0.02, //特效尾迹长度[0,1]值越大,尾迹越长重
551
+              symbol: 'arrow', //箭头图标
552
+              symbolSize: 5, //图标大小
553
+            },
554
+            lineStyle: {
555
+              normal: {
556
+                color:'#EE5652',
557
+                width: 1, //尾迹线条宽度
558
+                opacity: 1, //尾迹线条透明度
559
+                curveness: .3 //尾迹线条曲直度
560
+              }
561
+            },
562
+            data: convertData(item[1])
563
+          }, {
564
+            type: 'effectScatter',
565
+            coordinateSystem: 'geo',
566
+            zlevel: 2,
567
+            rippleEffect: { //涟漪特效
568
+              period: 4, //动画时间,值越小速度越快
569
+              brushType: 'stroke', //波纹绘制方式 stroke, fill
570
+              scale: 4 //波纹圆环最大限制,值越大波纹越大
571
+            },
572
+            label: {
573
+              normal: {
574
+                show: true,
575
+                position: 'right', //显示位置
576
+                offset: [5, 0], //偏移设置
577
+                formatter: function (params) {//圆环显示文字
578
+                  return params.data.name;
579
+                },
580
+                color:'#FFD200',
581
+                fontSize: 16
582
+              },
583
+              emphasis: {
584
+                show: true
585
+              }
586
+            },
587
+            symbol: 'circle',
588
+            // symbolSize: function (val) {
589
+            // 	return 5 + val[2] * 5; //圆环大小
590
+            // },
591
+            itemStyle: {
592
+              normal: {
593
+                show: true,
594
+                color: '#ffffff'
595
+              }
596
+            },
597
+            data: item[1].map(function (dataItem) {
598
+              return {
599
+                name: dataItem[0].name,
600
+                value: geoCoordMap[dataItem[0].name].concat([dataItem[0].value])
601
+              };
602
+            }),
603
+          },
604
+        );
605
+      });
606
+      let option = {
607
+        backgroundColor: "#0c0c0c",
608
+        geo: [
609
+          {
610
+            map: '河南',
611
+            aspectScale: 1,
612
+            roam: false, // 是否允许缩放
613
+            zoom: 1.2, // 默认显示级别
614
+            layoutSize: '95%',
615
+            layoutCenter: ['55%', '51.5%'],
616
+            itemStyle: {
617
+              areaColor: 'rgba(0,27,95,0.4)',
618
+              borderColor: '#004db5',
619
+              borderWidth: 1
620
+            },
621
+            zlevel: 1,
622
+            silent: true
623
+          }
624
+        ],
625
+        series: series
626
+      };
627
+      //var max = Math.max.apply(Math, newarray);
628
+      //option.visualMap.max = max;
629
+      myCharts.clear();
630
+      myCharts.setOption(option);
631
+      myCharts2.clear();
632
+      myCharts2.setOption(option);
633
+      // myChart.setOption(option);
634
+
635
+    }
636
+  }
637
+}
638
+</script>
639
+<style  lang="scss" scoped>
640
+.body-wrapper {
641
+  padding: 20px;
642
+  background: #0c0c0c;
643
+  width: 80%;
644
+  .button-block{
645
+    text-align: right;
646
+    margin-bottom: 20px;
647
+  }
648
+  .table-pagination{
649
+    text-align: right;
650
+  }
651
+  .search-card{
652
+    font-size: 24px;
653
+    font-weight: bold;
654
+    color: #3498db;
655
+    margin-bottom: 20px;
656
+    .input-wrapper{
657
+      width: 36%;
658
+    }
659
+  }
660
+}
661
+#ChinaLineMap{
662
+  width: 100%;
663
+  height:calc(100% - 7vh);
664
+}
665
+#ChinaLineMap2{
666
+  width: 100%;
667
+  height:calc(100% - 7vh);
668
+}
669
+.charts{
670
+  width: 100%;
671
+  display: flex;
672
+  justify-content: space-between;
673
+}
674
+.btn_save{
675
+  background-color: #3498db;
676
+  color: #ffffff;
677
+  padding: 10px 20px;
678
+  cursor: pointer;
679
+  border: none;
680
+  border-radius: 4px;
681
+  font-size: 16px;
682
+  height: 40px;
683
+}
684
+
685
+.sel{
686
+  height: 200px;
687
+  margin-right: 10px;
688
+}
689
+
690
+.input-search{
691
+  width: 100%;
692
+  padding: 10px;
693
+  margin-bottom: 20px;
694
+  box-sizing: border-box;
695
+  background-color: #2a2a2a;
696
+  border: 1px solid #333;
697
+  color: #ffffff;
698
+}
699
+.bottom {
700
+  height: 90%;
701
+  width: 100%;
702
+}
703
+.audit-dialog{
704
+  .mg-bt{
705
+    margin-bottom: 24px;
706
+  }
707
+  .label{
708
+    text-align: right;
709
+  }
710
+}
711
+/deep/.map-tooltip {
712
+  font-size: 18px;
713
+  padding: 10px 20px;
714
+  background: url("../../../../static/img/u231.png");
715
+  background-size: 100% 100%;
716
+  .map-tooltip-name {
717
+    color: #00e4ff;
718
+  }
719
+  .map-tooltip-value {
720
+    color: white;
721
+    margin-left: 20px;
722
+  }
723
+}
724
+
725
+.model-pie-body {
726
+  width: 100%;
727
+  height: 99%;
728
+}
729
+</style>

+ 223 - 0
src/pages/index/components/parking_lot_situation.vue

@@ -0,0 +1,223 @@
1
+<template xmlns:piechart="http://www.w3.org/1999/html">
2
+  <div class="body-wrapper">
3
+    <div class="search-card">
4
+      <h5>停车场情况</h5>
5
+    </div>
6
+    <br>
7
+    <div style="display: flex;justify-content: space-around;">
8
+      <div style="width: 25%;display: flex;">
9
+      <h4 class="h4font" data="tableData">泊位数量:</h4><h3 class="h4font" data="tableData2">5</h3>
10
+      </div>
11
+      <div style="width: 25%;display: flex;">
12
+        <h4 class="h4font" data="tableData3">实时余位:</h4><h3 class="h4font" data="tableData4">5</h3>
13
+      </div>
14
+      <div style="width: 25%;display: flex;">
15
+        <h4 class="h4font" data="tableData5">实时进场:</h4><h3 class="h4font" data="tableData6">5</h3>
16
+      </div>
17
+      <div style="width: 25%;display: flex;">
18
+        <h4 class="h4font" data="tableData5">实时出场:</h4><h3 class="h4font" data="tableData6">5</h3>
19
+      </div>
20
+    </div>
21
+    <br>
22
+    <br>
23
+    <el-table :data="tableData7" style="background: #2a2a2a;border-color: #333;">
24
+      <el-table-column v-for="(item, index) in columns" :key="index" :label="item.label" :prop="item.key">
25
+      </el-table-column>
26
+    </el-table>
27
+    <div class="table-pagination">
28
+      <el-pagination :background="false" layout="total, prev, pager, next" :total="total" @current-change="handlePageChange"
29
+                     :current-page.sync="pageNum" :page-size.sync="pageSize">
30
+      </el-pagination>
31
+    </div>
32
+    <br>
33
+
34
+
35
+  </div>
36
+</template>
37
+<script>
38
+import api from "@/api/audit.js";
39
+import piechart from "@/components/pieChart";
40
+
41
+export default {
42
+  components: {
43
+    piechart
44
+  },
45
+  data() {
46
+    return {
47
+      columns: [
48
+        {
49
+          label: '编号',
50
+          key: 'resourceName'
51
+        },
52
+        {
53
+          label: '停车场',
54
+          key: 'resourceType'
55
+        },
56
+        {
57
+          label: '泊位',
58
+          key: 'resourceType'
59
+        },
60
+        {
61
+          label: '余位',
62
+          key: 'resourceType'
63
+        }
64
+      ],
65
+      tableData: [],
66
+      tableData2: [],
67
+      tableData3: [],
68
+      tableData4: [],
69
+      tableData5: [],
70
+      tableData6: [],
71
+      tableData7: [],
72
+      total: 0,
73
+      total2: 0,
74
+      total3: 0,
75
+      total4: 0,
76
+      total5: 0,
77
+      total6: 0,
78
+      total7: 0,
79
+      pageSize: 10,
80
+      pageNum: 1,
81
+      radio: '2',
82
+      dialogVisible: false,
83
+      selRow: {},
84
+      searchWords: undefined,
85
+      searchWords2: undefined,
86
+    }
87
+  },
88
+  mounted() {
89
+    this.getTableData()
90
+    this.getTableData2()
91
+    this.getTableData3()
92
+    this.getTableData4()
93
+    this.getTableData5()
94
+    this.getTableData6()
95
+    this.getTableData7()
96
+  },
97
+  watch: {
98
+  },
99
+  methods: {
100
+    handlePageChange() {
101
+      this.getTableData()
102
+    },
103
+    handleAudit(row) {
104
+      this.selRow = row
105
+      this.dialogVisible = true
106
+    },
107
+    handleCancelApply(row) {
108
+      console.log('enter handle cancel apply')
109
+    },
110
+    handleConfirm() {
111
+      const {id} = this.selRow
112
+      api.applyResource({id, applyType: this.radio}).then(res => {
113
+        if(res.success) {
114
+          this.dialogVisible = false
115
+          this.$message({
116
+            message: '审核成功!',
117
+            type: 'success'
118
+          })
119
+          this.getTableData()
120
+        }
121
+      })
122
+    },
123
+    getTableData() {
124
+      const {pageNum, pageSize, searchWords} = this
125
+      api.applyList({pageNum, pageSize, resourceName: searchWords}).then(res => {
126
+        this.tableData = []
127
+        res.data.records.map((item, index) => {
128
+          const newItem = {...item}
129
+          newItem.applyTypeText = this.getApplyTypeText(item.applyType)
130
+          this.tableData.push(newItem)
131
+        })
132
+        this.total = res.data.total
133
+      })
134
+    },
135
+    getTableData2() {
136
+      api.applyList({}).then(res => {
137
+        this.tableData2 =  res.data.data
138
+        this.total2 = res.data.total
139
+      })
140
+    },
141
+    getTableData3() {
142
+      api.applyList({}).then(res => {
143
+        this.tableData3 =  res.data.data
144
+        this.total3 = res.data.total
145
+      })
146
+    },
147
+    getTableData4() {
148
+      api.applyList({}).then(res => {
149
+        this.tableData4 =  res.data.data
150
+        this.total4 = res.data.total
151
+      })
152
+    },
153
+    getTableData5() {
154
+      api.applyList({}).then(res => {
155
+        this.tableData5 =  res.data.data
156
+        this.total5 = res.data.total
157
+      })
158
+    },
159
+    getTableData6() {
160
+      api.applyList({}).then(res => {
161
+        this.tableData6 =  res.data.data
162
+        this.total6 = res.data.total
163
+      })
164
+    },
165
+    getTableData7() {
166
+      api.applyList({}).then(res => {
167
+        this.tableData7 =  res.data.data
168
+        this.total7 = res.data.total
169
+      })
170
+    },
171
+
172
+
173
+    getApplyTypeText(val) {
174
+      if (!val){
175
+        return '未申请'
176
+      }
177
+      const textMap = {
178
+        1: '待审批',
179
+        2: '审批通过',
180
+        3: '审批驳回'
181
+      }
182
+      return textMap[val]
183
+    },
184
+    handleSearch() {
185
+      this.pageNum = 1
186
+      this.getTableData()
187
+    }
188
+  }
189
+}
190
+</script>
191
+<style  lang="scss" scoped>
192
+.body-wrapper {
193
+  padding: 20px;
194
+  background: #0c0c0c;
195
+  .button-block{
196
+    text-align: right;
197
+    margin-bottom: 20px;
198
+  }
199
+  .table-pagination{
200
+    text-align: right;
201
+  }
202
+  .search-card{
203
+    font-size: 24px;
204
+    font-weight: bold;
205
+    color: #3498db;
206
+    margin-bottom: 20px;
207
+    .input-wrapper{
208
+      width: 36%;
209
+    }
210
+  }
211
+}
212
+.h4font{
213
+  color: #FFFFFF;
214
+}
215
+.audit-dialog{
216
+  .mg-bt{
217
+    margin-bottom: 24px;
218
+  }
219
+  .label{
220
+    text-align: right;
221
+  }
222
+}
223
+</style>

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

@@ -67,6 +67,7 @@ export default {
67 67
         {name: '区域停车主题', url: '/parking_area'},
68 68
         {name: '设备运营主题', url: '/service_operations'},
69 69
         {name: '操作日志', url: '/operation_log'},
70
+<<<<<<< Updated upstream
70 71
         {name: '停车饱和预警', url: '/saturation_warning'},
71 72
         {name: '停车缺口分析', url: '/gap_analysis'},
72 73
         {name: '停车难易指数', url: '/park_easy'},
@@ -77,6 +78,12 @@ export default {
77 78
         {name: '服务发布功能', url: '/service_publish'},
78 79
         {name: '公告功能', url: '/announcement_function'},
79 80
         {name: '消息中心功能', url: '/message'},
81
+=======
82
+        {name: '泊位使用情况', url: '/berths_usage'},
83
+        {name: '泊位营收情况', url: '/berths_revenue'},
84
+        {name: '泊位营收情况', url: '/parking_lot_situation'},
85
+        {name: '其他分析', url: '/other_analyse'},
86
+>>>>>>> Stashed changes
80 87
       ]
81 88
     }
82 89
   },

+ 21 - 0
src/router/index.js

@@ -175,6 +175,7 @@ export default new Router({
175 175
           component: () => import("../pages/index/components/operation_log.vue")
176 176
         },
177 177
         {
178
+<<<<<<< Updated upstream
178 179
           name: "saturation_warning",
179 180
           path: "/saturation_warning",
180 181
           component: () => import("../pages/index/components/saturation_warning.vue")
@@ -223,6 +224,26 @@ export default new Router({
223 224
           name: "message",
224 225
           path: "/message",
225 226
           component: () => import("../pages/index/components/message.vue")
227
+=======
228
+          name: "berths_usage",
229
+          path: "/berths_usage",
230
+          component: () => import("../pages/index/components/berths_usage.vue")
231
+        },
232
+        {
233
+          name: "berths_revenue",
234
+          path: "/berths_revenue",
235
+          component: () => import("../pages/index/components/berths_revenue.vue")
236
+        },
237
+        {
238
+          name: "parking_lot_situation",
239
+          path: "/parking_lot_situation",
240
+          component: () => import("../pages/index/components/parking_lot_situation.vue")
241
+        },
242
+        {
243
+          name: "other_analyse",
244
+          path: "/other_analyse",
245
+          component: () => import("../pages/index/components/other_analyse.vue")
246
+>>>>>>> Stashed changes
226 247
         },
227 248
       ]
228 249
     }