Browse Source

Merge remote-tracking branch 'origin/master'

# Conflicts:
#	src/pages/index/layouts/indexLayout.vue
烬玊 1 year ago
parent
commit
b9cc86ab70

+ 2 - 1
config/index.js

@@ -11,7 +11,8 @@ module.exports = {
11 11
     assetsPublicPath: "/",
12 12
 
13 13
     // Various Dev Server settings
14
-    host: process.env.HOST || "localhost", // can be overwritten by process.env.HOST
14
+    host: '0.0.0.0', // can be overwritten by process.env.HOST
15
+    // host: process.env.HOST || "localhost", // can be overwritten by process.env.HOST
15 16
     port: process.env.PORT || 8080, // can be overwritten by process.env.PORT, if port is in use, a free one will be determined
16 17
     autoOpenBrowser: false,
17 18
     errorOverlay: true,

+ 45 - 3
src/pages/index/components/announcement_function.vue

@@ -2,7 +2,7 @@
2 2
   <div class="body-wrapper">
3 3
     <div>
4 4
       <h2 style="color: white;margin-bottom: 20px;display: inline-block;width: 90%">公告信息</h2>
5
-      <el-button type="primary">发布公告</el-button>
5
+      <el-button type="primary" @click="handleAdd">发布公告</el-button>
6 6
     </div>
7 7
     <el-table :data="tableData" style="background: #2a2a2a;border-color: #333;">
8 8
       <el-table-column v-for="(item, index) in columns" :key="index" :label="item.label" :prop="item.key">
@@ -13,6 +13,26 @@
13 13
                      :current-page.sync="pageNum" :page-size.sync="pageSize">
14 14
       </el-pagination>
15 15
     </div>
16
+    <el-dialog
17
+      :title="title"
18
+      :visible.sync="dialogVisible"
19
+      width="50%"
20
+      custom-class="audit-dialog">
21
+      <div style="height: 100px" class="form-div">
22
+        <el-form label-position="left" label-width="80px" :model="formLabelAlign">
23
+          <el-form-item label="发布标题">
24
+            <el-input v-model="formLabelAlign.publicTitle"></el-input>
25
+          </el-form-item>
26
+          <el-form-item label="发布人">
27
+            <el-input v-model="formLabelAlign.publicPerson"></el-input>
28
+          </el-form-item>
29
+        </el-form>
30
+      </div>
31
+      <span slot="footer" class="dialog-footer">
32
+            <el-button @click="dialogVisible = false">取 消</el-button>
33
+            <el-button type="primary" @click="handleConfirm">确 定</el-button>
34
+        </span>
35
+    </el-dialog>
16 36
   </div>
17 37
 </template>
18 38
 <script>
@@ -45,7 +65,13 @@ export default {
45 65
       radio: '2',
46 66
       dialogVisible: false,
47 67
       selRow: {},
48
-      searchWords: undefined
68
+      searchWords: undefined,
69
+      formLabelAlign: {
70
+        publicTitle: '',
71
+        // publicTime: '',
72
+        publicPerson: ''
73
+      },
74
+      title: ''
49 75
     }
50 76
   },
51 77
   mounted() {
@@ -64,10 +90,17 @@ export default {
64 90
     handleCancelApply(row) {
65 91
       console.log('enter handle cancel apply')
66 92
     },
93
+    handleAdd () {
94
+      this.title = '发布公告'
95
+      this.formLabelAlign.publicTitle = ''
96
+      // this.formLabelAlign.publicTime = ''
97
+      this.formLabelAlign.publicPerson = ''
98
+      this.dialogVisible = true
99
+    },
67 100
     handleConfirm() {
68 101
       const {id} = this.selRow
69 102
       console.log('radio', this.radio)
70
-      api.applyResource({id, applyType: this.radio}).then(res => {
103
+      api.applyResource({id, applyType: this.formLabelAlign.publicTitle}).then(res => {
71 104
         if(res.success) {
72 105
           this.dialogVisible = false
73 106
           this.$message({
@@ -155,5 +188,14 @@ export default {
155 188
   .label{
156 189
     text-align: right;
157 190
   }
191
+  .form-div{
192
+    /deep/ .el-input__inner{
193
+      background: white;
194
+      height: 35px;
195
+      width: 90%;
196
+      border: 1px solid #a6a5a5;
197
+      color: black;
198
+    }
199
+  }
158 200
 }
159 201
 </style>

+ 30 - 1
src/pages/index/components/message.vue

@@ -8,7 +8,7 @@
8 8
       </el-table-column>
9 9
       <el-table-column label="操作" width="150">
10 10
       <div slot-scope="scope">
11
-        <el-button type="primary" size="mini">详情</el-button>
11
+        <el-button  @click="handleDetail(scope.row)" type="primary" size="mini">详情</el-button>
12 12
       </div>
13 13
     </el-table-column>
14 14
     </el-table>
@@ -17,6 +17,17 @@
17 17
                      :current-page.sync="pageNum" :page-size.sync="pageSize">
18 18
       </el-pagination>
19 19
     </div>
20
+    <el-dialog
21
+      title="详情"
22
+      :visible.sync="dialogVisible"
23
+      width="50%"
24
+      custom-class="audit-dialog">
25
+      <div class="form-div">
26
+        <el-input disabled v-model="selRow.title"></el-input>
27
+        <el-input type="textarea" disabled v-model="selRow.messageType"></el-input>
28
+        <el-input disabled v-model="selRow.publicTime"></el-input>
29
+      </div>
30
+    </el-dialog>
20 31
   </div>
21 32
 </template>
22 33
 <script>
@@ -68,6 +79,10 @@ export default {
68 79
     handleCancelApply(row) {
69 80
       console.log('enter handle cancel apply')
70 81
     },
82
+    handleDetail(row) {
83
+      this.selRow = row
84
+      this.dialogVisible = true
85
+    },
71 86
     handleConfirm() {
72 87
       const {id} = this.selRow
73 88
       console.log('radio', this.radio)
@@ -127,5 +142,19 @@ export default {
127 142
   .label{
128 143
     text-align: right;
129 144
   }
145
+  .form-div{
146
+    width: 90%;
147
+    /deep/ .el-input__inner{
148
+      background: white;
149
+      height: 35px;
150
+      color: black;
151
+      margin-bottom: 10px;
152
+    }
153
+    /deep/ .el-textarea.is-disabled .el-textarea__inner {
154
+      background: white;
155
+      color: black;
156
+      margin-bottom: 10px;
157
+    }
158
+  }
130 159
 }
131 160
 </style>

+ 85 - 49
src/pages/index/components/parking_fee.vue

@@ -25,13 +25,12 @@
25 25
       <el-table-column v-for="(item, index) in columns" :key="index" :label="item.label" :prop="item.key">
26 26
       </el-table-column>
27 27
       <el-table-column label="操作" width="150">
28
-        <div slot-scope="scope">
29
-          <el-button
30
-            size="mini">编辑</el-button>
31
-          <el-button
32
-            size="mini"
33
-            type="danger">删除</el-button>
34
-        </div>
28
+        <template slot-scope="scope" style="display: inline-block">
29
+          <el-button type="primary" @click="handleAudit(scope.row)" slot="reference">修改</el-button>
30
+          <el-popconfirm title="确定删除吗?" @confirm="deleteRow(scope.row)">
31
+            <el-button type="danger" slot="reference">删除</el-button>
32
+          </el-popconfirm>
33
+        </template>
35 34
       </el-table-column>
36 35
     </el-table>
37 36
     <div class="table-pagination">
@@ -39,6 +38,44 @@
39 38
                      :current-page.sync="pageNum" :page-size.sync="pageSize">
40 39
       </el-pagination>
41 40
     </div>
41
+    <el-dialog
42
+      :title="title"
43
+      :visible.sync="dialogVisible"
44
+      width="50%"
45
+      custom-class="audit-dialog">
46
+      <div style="height: 350px" class="form-div">
47
+        <el-form label-position="left" label-width="80px" :model="formLabelAlign">
48
+          <el-form-item label="停车路段">
49
+            <el-input v-model="formLabelAlign.parkRoad"></el-input>
50
+          </el-form-item>
51
+          <el-form-item label="停车位置">
52
+            <el-input v-model="formLabelAlign.parkStall"></el-input>
53
+          </el-form-item>
54
+          <el-form-item label="车牌号">
55
+            <el-input v-model="formLabelAlign.plateCode"></el-input>
56
+          </el-form-item>
57
+          <el-form-item label="车牌类型">
58
+            <el-input v-model="formLabelAlign.plateType"></el-input>
59
+          </el-form-item>
60
+          <el-form-item label="停车时间">
61
+            <el-input v-model="formLabelAlign.parkTime"></el-input>
62
+          </el-form-item>
63
+          <el-form-item label="离开时间">
64
+            <el-input v-model="formLabelAlign.leaveTime"></el-input>
65
+          </el-form-item>
66
+          <el-form-item label="修改人">
67
+            <el-input v-model="formLabelAlign.revisePerson"></el-input>
68
+          </el-form-item>
69
+          <el-form-item label="修改时间">
70
+            <el-input v-model="formLabelAlign.reviseTime"></el-input>
71
+          </el-form-item>
72
+        </el-form>
73
+      </div>
74
+      <span slot="footer" class="dialog-footer">
75
+            <el-button @click="dialogVisible = false">取 消</el-button>
76
+            <el-button type="primary" @click="handleConfirm">确 定</el-button>
77
+        </span>
78
+    </el-dialog>
42 79
   </div>
43 80
 </template>
44 81
 <script>
@@ -95,7 +132,18 @@ export default {
95 132
       formInline: {
96 133
         searchTime: '',
97 134
         searchWord: ''
98
-      }
135
+      },
136
+      formLabelAlign: {
137
+        parkRoad: '',
138
+        parkStall: '',
139
+        plateCode: '',
140
+        plateType: '',
141
+        parkTime: '',
142
+        leaveTime: '',
143
+        revisePerson: '',
144
+        reviseTime: '',
145
+      },
146
+      title: ''
99 147
     }
100 148
   },
101 149
   mounted() {
@@ -104,6 +152,22 @@ export default {
104 152
   watch: {
105 153
   },
106 154
   methods: {
155
+    handleAudit(row) {
156
+      this.title = '修改停车收费取证'
157
+      this.formLabelAlign.parkRoad = row.resourceName
158
+      this.formLabelAlign.parkStall = row.resourceName
159
+      this.formLabelAlign.plateCode = row.resourceName
160
+      this.formLabelAlign.plateType = row.resourceName
161
+      this.formLabelAlign.parkTime = row.resourceName
162
+      this.formLabelAlign.leaveTime = row.resourceName
163
+      this.formLabelAlign.revisePerson = row.resourceName
164
+      this.formLabelAlign.reviseTime = row.resourceName
165
+      this.formLabelAlign=row
166
+      this.dialogVisible = true
167
+    },
168
+    deleteRow (record) {
169
+      console.log(record)
170
+    },
107 171
     handlePageChange() {
108 172
       this.getTableData()
109 173
     },
@@ -111,9 +175,7 @@ export default {
111 175
       console.log('enter handle cancel apply')
112 176
     },
113 177
     handleConfirm() {
114
-      const {id} = this.selRow
115
-      console.log('radio', this.radio)
116
-      api.applyResource({id, applyType: this.radio}).then(res => {
178
+      api.applyResource({id, applyType: this.formLabelAlign.parkRoad}).then(res => {
117 179
         if(res.success) {
118 180
           this.dialogVisible = false
119 181
           this.$message({
@@ -124,6 +186,9 @@ export default {
124 186
         }
125 187
       })
126 188
     },
189
+    onSubmit () {
190
+      this.getTableData()
191
+    },
127 192
     getTableData() {
128 193
       const {pageNum, pageSize, searchWords} = this
129 194
       api.applyList({pageNum, pageSize, resourceName: searchWords}).then(res => {
@@ -144,44 +209,6 @@ export default {
144 209
 }
145 210
 </script>
146 211
 <style  lang="scss" scoped>
147
-
148
-.form-wrapper {
149
-  margin-bottom: 20px;
150
-}
151
-/deep/ .el-input__inner {
152
-  background: #2d3744;
153
-  border: none;
154
-  border-radius: 0;
155
-}
156
-/deep/ .el-select {
157
-  height: 40px;
158
-  .el-input__inner {
159
-    height: 40px;
160
-  }
161
-  .el-input__prefix, .el-input__suffix {
162
-    height: 40px;
163
-  }
164
-
165
-  /* 下面设置右侧按钮居中 */
166
-  .el-input__suffix {
167
-    top: 0px;
168
-    display: flex;
169
-    justify-content: center;
170
-    align-items: center;
171
-    flex-wrap: nowrap;
172
-    flex-direction: row;
173
-    align-content: flex-start;
174
-  }
175
-  /* 输入框加上上下边是 32px + 2px =34px */
176
-  .el-input__icon {
177
-    line-height: 0px;
178
-  }
179
-}
180
-/deep/ .form-wrapper .el-button {
181
-  background: linear-gradient(90deg,#0158d9,#3c97e4);
182
-  width: 100px;
183
-  height: 40px;
184
-}
185 212
 .body-wrapper {
186 213
   padding: 20px;
187 214
   background: #0c0c0c;
@@ -208,5 +235,14 @@ export default {
208 235
   .label{
209 236
     text-align: right;
210 237
   }
238
+  .form-div{
239
+    /deep/ .el-input__inner{
240
+      background: white;
241
+      height: 35px;
242
+      width: 90%;
243
+      border: 1px solid #a6a5a5;
244
+      color: black;
245
+    }
246
+  }
211 247
 }
212 248
 </style>

+ 52 - 3
src/pages/index/components/service_publish.vue

@@ -2,7 +2,7 @@
2 2
   <div class="body-wrapper">
3 3
     <div>
4 4
       <h2 style="color: white;margin-bottom: 20px;display: inline-block;width: 90%">服务发布列表</h2>
5
-      <el-button type="primary">配置服务</el-button>
5
+      <el-button type="primary" @click="handleAdd">配置服务</el-button>
6 6
     </div>
7 7
     <el-table :data="tableData" style="background: #2a2a2a;border-color: #333;">
8 8
       <el-table-column v-for="(item, index) in columns" :key="index" :label="item.label" :prop="item.key">
@@ -13,6 +13,32 @@
13 13
                      :current-page.sync="pageNum" :page-size.sync="pageSize">
14 14
       </el-pagination>
15 15
     </div>
16
+    <el-dialog
17
+      :title="title"
18
+      :visible.sync="dialogVisible"
19
+      width="50%"
20
+      custom-class="audit-dialog">
21
+      <div style="height: 100px" class="form-div">
22
+        <el-form label-position="left" label-width="80px" :model="formLabelAlign">
23
+          <el-form-item label="接口名称">
24
+            <el-input v-model="formLabelAlign.interfaceName"></el-input>
25
+          </el-form-item>
26
+          <el-form-item label="接口地址">
27
+            <el-input v-model="formLabelAlign.interfaceAddress"></el-input>
28
+          </el-form-item>
29
+<!--          <el-form-item label="提交状态">-->
30
+<!--            <el-input v-model="formLabelAlign.submitState"></el-input>-->
31
+<!--          </el-form-item>-->
32
+<!--          <el-form-item label="发布状态">-->
33
+<!--            <el-input v-model="formLabelAlign.publicState"></el-input>-->
34
+<!--          </el-form-item>-->
35
+        </el-form>
36
+      </div>
37
+      <span slot="footer" class="dialog-footer">
38
+            <el-button @click="dialogVisible = false">取 消</el-button>
39
+            <el-button type="primary" @click="handleConfirm">确 定</el-button>
40
+        </span>
41
+    </el-dialog>
16 42
   </div>
17 43
 </template>
18 44
 <script>
@@ -49,7 +75,14 @@ export default {
49 75
       radio: '2',
50 76
       dialogVisible: false,
51 77
       selRow: {},
52
-      searchWords: undefined
78
+      searchWords: undefined,
79
+      formLabelAlign: {
80
+        interfaceName: '',
81
+        interfaceAddress: '',
82
+        // submitState: '',
83
+        // publicState: ''
84
+      },
85
+      title: ''
53 86
     }
54 87
   },
55 88
   mounted() {
@@ -68,10 +101,18 @@ export default {
68 101
     handleCancelApply(row) {
69 102
       console.log('enter handle cancel apply')
70 103
     },
104
+    handleAdd () {
105
+      this.title = '配置服务'
106
+      this.formLabelAlign.interfaceName = ''
107
+      this.formLabelAlign.interfaceAddress = ''
108
+      // this.formLabelAlign.submitState = ''
109
+      // this.formLabelAlign.publicState = ''
110
+      this.dialogVisible = true
111
+    },
71 112
     handleConfirm() {
72 113
       const {id} = this.selRow
73 114
       console.log('radio', this.radio)
74
-      api.applyResource({id, applyType: this.radio}).then(res => {
115
+      api.applyResource({id, applyType: this.formLabelAlign.interfaceName}).then(res => {
75 116
         if(res.success) {
76 117
           this.dialogVisible = false
77 118
           this.$message({
@@ -127,5 +168,13 @@ export default {
127 168
   .label{
128 169
     text-align: right;
129 170
   }
171
+  .form-div{
172
+    /deep/ .el-input__inner{
173
+      height: 35px;
174
+      width: 90%;
175
+      border: 1px solid #a6a5a5;
176
+      color: black;
177
+    }
178
+  }
130 179
 }
131 180
 </style>

+ 43 - 3
src/pages/index/components/support.vue

@@ -2,7 +2,7 @@
2 2
   <div class="body-wrapper">
3 3
     <div>
4 4
       <h2 style="color: white;margin-bottom: 20px;display: inline-block;width: 90%">技术支持</h2>
5
-      <el-button type="primary">申请技术支持</el-button>
5
+      <el-button type="primary" @click="handleAdd">申请技术支持</el-button>
6 6
     </div>
7 7
     <el-table :data="tableData" style="background: #2a2a2a;border-color: #333;">
8 8
       <el-table-column v-for="(item, index) in columns" :key="index" :label="item.label" :prop="item.key">
@@ -13,6 +13,28 @@
13 13
                      :current-page.sync="pageNum" :page-size.sync="pageSize">
14 14
       </el-pagination>
15 15
     </div>
16
+    <el-dialog
17
+      :title="title"
18
+      :visible.sync="dialogVisible"
19
+      width="50%"
20
+      custom-class="audit-dialog">
21
+      <div style="height: 100px" class="form-div">
22
+        <el-form label-position="left" label-width="80px" :model="formLabelAlign">
23
+          <el-form label-position="left" label-width="80px" :model="formLabelAlign">
24
+            <el-form-item label="申请名称">
25
+              <el-input v-model="formLabelAlign.requestTitle"></el-input>
26
+            </el-form-item>
27
+            <el-form-item label="支持渠道">
28
+              <el-input v-model="formLabelAlign.supportChannel"></el-input>
29
+            </el-form-item>
30
+          </el-form>
31
+        </el-form>
32
+      </div>
33
+      <span slot="footer" class="dialog-footer">
34
+            <el-button @click="dialogVisible = false">取 消</el-button>
35
+            <el-button type="primary" @click="handleConfirm">确 定</el-button>
36
+        </span>
37
+    </el-dialog>
16 38
   </div>
17 39
 </template>
18 40
 <script>
@@ -48,7 +70,11 @@ export default {
48 70
       radio: '2',
49 71
       dialogVisible: false,
50 72
       selRow: {},
51
-      searchWords: undefined
73
+      searchWords: undefined,
74
+      formLabelAlign: {
75
+        requestTitle: '',
76
+        supportChannel: ''
77
+      },
52 78
     }
53 79
   },
54 80
   mounted() {
@@ -67,10 +93,16 @@ export default {
67 93
     handleCancelApply(row) {
68 94
       console.log('enter handle cancel apply')
69 95
     },
96
+    handleAdd () {
97
+      this.title = '技术支持申请'
98
+      this.formLabelAlign.requestTitle = ''
99
+      this.formLabelAlign.supportChannel = ''
100
+      this.dialogVisible = true
101
+    },
70 102
     handleConfirm() {
71 103
       const {id} = this.selRow
72 104
       console.log('radio', this.radio)
73
-      api.applyResource({id, applyType: this.radio}).then(res => {
105
+      api.applyResource({id, applyType: this.formLabelAlign.requestTitle}).then(res => {
74 106
         if(res.success) {
75 107
           this.dialogVisible = false
76 108
           this.$message({
@@ -126,5 +158,13 @@ export default {
126 158
   .label{
127 159
     text-align: right;
128 160
   }
161
+  .form-div{
162
+    /deep/ .el-input__inner{
163
+      height: 35px;
164
+      width: 90%;
165
+      border: 1px solid #a6a5a5;
166
+      color: black;
167
+    }
168
+  }
129 169
 }
130 170
 </style>

+ 12 - 14
src/pages/index/layouts/indexLayout.vue

@@ -36,13 +36,10 @@ export default {
36 36
       isCollapse: false,//默认为不折叠菜单
37 37
       foldphoto: "el-icon-s-unfold",//菜单展开图标
38 38
       menu: [
39
-        {name: 'demo1', url: '/demo1'},
40
-        {name: 'demo2', url: '/demo2'},
41
-        {name: '车辆迁徒分析', url: '/bmap'},
42
-        {name: 'hot_map', url: '/hot_map'},
43
-        {name: 'heat_map', url: '/heat_map'},
44 39
         {name: '静态资源', url: '/static_resource'},
45 40
         {name: '记录查询', url: '/record_query'},
41
+        {name: '数据对接', url: '/data_docking'},
42
+        {name: '停车运行监管', url: '/park_monitor'},
46 43
         {name: '停车行为监测', url: '/park_bahavior'},
47 44
         {name: '设备运行监测', url: '/equipment_running'},
48 45
         {name: '从业人员资质', url: '/employee_qualification'},
@@ -50,15 +47,14 @@ export default {
50 47
         {name: '收费价格监管', url: '/charge_price'},
51 48
         {name: '车主信用监管', url: '/car_owner_credit'},
52 49
         {name: '企业服务监管', url: '/enterprise_service'},
53
-        {name: '数据对接', url: '/data_docking'},
54 50
         {name: '泊位基础情况', url: '/berths_information'},
51
+        {name: '泊位使用情况', url: '/berths_usage'},
52
+        {name: '泊位营收情况', url: '/berths_revenue'},
53
+        {name: '停车场情况', url: '/parking_lot_situation'},
55 54
         {name: '泊位运营分析', url: '/berth_peration_nalysis'},
56 55
         {name: '收费业务分析', url: '/charge_business_analysis'},
57 56
         {name: '接入数据分析', url: '/access_data_analysis'},
58 57
         {name: '道路(路内)泊位主题', url: '/berth_road'},
59
-        {name: '停车运行监管', url: '/park_monitor'},
60
-        {name: '停车行为检测', url: '/park_bahavior'},
61
-        {name: '设备运行检测', url: '/equipment_running'},
62 58
         {name: '经营性(路外)车场主题', url: '/berth_road_out'},
63 59
         {name: '停车收费取证主题', url: '/parking_fee'},
64 60
         {name: '车辆违规主题', url: '/vehicle_violations'},
@@ -66,26 +62,28 @@ export default {
66 62
         {name: '区域停车主题', url: '/parking_area'},
67 63
         {name: '设备运营主题', url: '/service_operations'},
68 64
         {name: '停车饱和预警', url: '/saturation_warning'},
65
+        {name: '车辆迁徒分析', url: '/bmap'},
69 66
         {name: '停车缺口分析', url: '/gap_analysis'},
70 67
         {name: '停车难易指数', url: '/park_easy'},
71 68
         {name: '全局停车诱导', url: '/park_guidance'},
72 69
         {name: '区域停车发展分析', url: '/park_development_analysis'},
73 70
         {name: '路内泊位设置推荐', url: '/berth_recommend'},
74
-        {name: '停车盲点挖招', url: '/blind_spot_digging'},
71
+        {name: '停车盲点挖掘', url: '/blind_spot_digging'},
72
+        {name: '其他分析', url: '/other_analyse'},
75 73
         {name: '服务发布功能', url: '/service_publish'},
76 74
         {name: '公告功能', url: '/announcement_function'},
77 75
         {name: '消息中心功能', url: '/message'},
78 76
         {name: '技术支持功能', url: '/support'},
79 77
         {name: '服务监控功能', url: '/service_monitor'},
80
-        {name: '泊位使用情况', url: '/berths_usage'},
81
-        {name: '泊位营收情况', url: '/berths_revenue'},
82
-        {name: '停车场情况', url: '/parking_lot_situation'},
83
-        {name: '其他分析', url: '/other_analyse'},
84 78
         {name: '凭证管理功能', url: '/credential_management_function'},
85 79
         {name: '服务订阅功能', url: '/service_subscription_function'},
86 80
         {name: 'IP白名单功能', url: '/ip_white_list'},
87 81
         {name: '服务调用功能', url: '/service_call_function'},
88 82
         {name: '操作日志功能', url: '/operation_log'},
83
+        {name: 'demo1', url: '/demo1'},
84
+        {name: 'demo2', url: '/demo2'},
85
+        {name: 'hot_map', url: '/hot_map'},
86
+        {name: 'heat_map', url: '/heat_map'},
89 87
       ]
90 88
     }
91 89
   },