miaofuhao 1 miesiąc temu
rodzic
commit
bd2133cc4a

+ 1 - 8
bigScreen3/.env.production

@@ -7,12 +7,5 @@ VITE_APP_ENV = 'production'
7 7
 # 若依管理系统/生产环境
8 8
 # VITE_APP_BASE_API = 'http://1.194.161.64:8120/'
9 9
 # VITE_APP_BASE_WS = 'ws://172.16.211.153:9000/ws'
10
-VITE_APP_BASE_API = 'http://176.16.109.194:8120/'
11
-VITE_APP_BASE_WS = 'ws://176.16.109.29:9000/ws'
10
+VITE_APP_BASE_API = 'http://39.164.159.226:9090/'  
12 11
 
13
-VITE_APP_PHONE_TYPE = 'PHONE'
14
-VITE_APP_CALL_TYPE = 'VIOCE'
15
-VITE_APP_SIP_URL = 'ws://192.168.1.19:5066'
16
-VITE_APP_SIP_IP = '192.168.1.19'
17
-VITE_APP_SIP_PASSWORD = '1234'
18
-VITE_APP_SIP_CONTACT_URL = "@192.168.1.19;transport=ws"

+ 0 - 12
bigScreen3/.env.staging

@@ -9,15 +9,3 @@ VITE_APP_ENV = 'staging'
9 9
 
10 10
 VITE_APP_BASE_API = 'http://222.139.29.127:8120/'
11 11
 # VITE_APP_BASE_API = 'http://39.164.159.226:8120/'
12
-
13
-# VITE_APP_BASE_WS = 'ws://192.168.1.19:9000/ws'
14
-VITE_APP_BASE_WS = 'ws://222.139.29.127:9000/ws'
15
-
16
-VITE_APP_PHONE_TYPE = 'PHONE'
17
-VITE_APP_CALL_TYPE = 'VIOCE'
18
-VITE_APP_SIP_URL = 'ws://192.168.1.19:5066'
19
-VITE_APP_SIP_IP = '192.168.1.19'
20
-VITE_APP_SIP_PASSWORD = '1234'
21
-VITE_APP_SIP_CONTACT_URL = "@192.168.1.19;transport=ws"
22
-# 是否在打包时开启压缩,支持 gzip 和 brotli
23
-VITE_BUILD_COMPRESS = gzip

+ 1 - 1
bigScreen3/src/api/index.js

@@ -34,7 +34,7 @@ export function createPageData(url, data) {
34 34
   return request({
35 35
     url,
36 36
     method: 'post',
37
-    data
37
+    data: {data}
38 38
   })
39 39
 }
40 40
 // 修改

+ 0 - 12
bigScreen3/src/router/index.js

@@ -1,7 +1,5 @@
1 1
 import { createRouter, createWebHistory } from 'vue-router';
2 2
 import Dashboard from '@/views/dashboard/Dashboard.vue';
3
-import ChildMap from '@/views/childMap/childMap.vue';
4
-import orderList from '@/views/orderList/orderList.vue';
5 3
 
6 4
 import ceshi from '@/views/ceshi.vue';
7 5
 
@@ -18,16 +16,6 @@ const routes = [
18 16
     component: Dashboard,
19 17
   },
20 18
   {
21
-    path: '/childMap',
22
-    name: 'ChildMap',
23
-    component: ChildMap,
24
-  },
25
-  {
26
-    path: '/orderList',
27
-    name: 'OrderList',
28
-    component: orderList,
29
-  },
30
-  {
31 19
     path: '/ceshi',
32 20
     name: 'Ceshi',
33 21
     component: ceshi,

+ 26 - 11
bigScreen3/src/utils/request.js

@@ -32,15 +32,17 @@ const service = axios.create({
32 32
 })
33 33
 
34 34
 // request拦截器
35
-service.interceptors.request.use(
36
-  (config) => {
37
-    // 是否需要设置 token
38
-    const isToken = (config.headers || {}).isToken === false
39
-    // 是否需要防止数据重复提交
40
-    const isRepeatSubmit = (config.headers || {}).repeatSubmit === false
41
-    if (getToken() && !isToken) {
42
-      config.headers['token'] =  getToken() // 让每个请求携带自定义token 请根据实际情况自行修改
43
-    }
35
+  service.interceptors.request.use(
36
+    (config) => {
37
+      // 是否需要设置 token
38
+      const isToken = (config.headers || {}).isToken === false
39
+      // 是否需要防止数据重复提交
40
+      const isRepeatSubmit = (config.headers || {}).repeatSubmit === false
41
+      if (getToken() && !isToken) {
42
+        config.headers['token'] =  getToken() // 让每个请求携带自定义token 请根据实际情况自行修改
43
+      }
44
+      // 添加fsource头部
45
+      config.headers['fsource'] = 2
44 46
     // 添加缓存控制头,避免304 Not Modified问题
45 47
     // config.headers['Cache-Control'] = 'no-cache, no-store, must-revalidate'
46 48
     // config.headers['Pragma'] = 'no-cache'
@@ -103,9 +105,22 @@ service.interceptors.request.use(
103 105
 service.interceptors.response.use(
104 106
   (res) => {
105 107
     // 未设置状态码则默认成功状态
106
-    const code = res.data.code || 200
108
+    console.log('res', res)
109
+    const code = res.data.status || 200
107 110
     // 获取错误信息
108
-    const msg = errorCode[code] || res.data.msg || errorCode['default']
111
+    const msg = errorCode[code] || res.data.message || errorCode['default']
112
+    
113
+    // 处理状态码600且消息为"当前请求中无token,请先登录"的情况
114
+    if (code === 600 && msg === '当前请求中无token,请先登录') {
115
+      ElMessage.error(msg)
116
+      // 清除token和用户信息
117
+      localStorage.removeItem('token')
118
+      sessionStorage.removeItem('token')
119
+      // 跳转到登录页面
120
+      router.push('/login')
121
+      return Promise.reject(new Error(msg))
122
+    }
123
+    
109 124
     // 二进制数据则直接返回
110 125
     if (
111 126
       res.request.responseType === 'blob' ||

+ 0 - 420
bigScreen3/src/views/childMap/childMap.vue

@@ -1,420 +0,0 @@
1
-<template>
2
-    <div class="dashboard">
3
-        <!-- 标题区域 -->
4
-        <header class="dashboard-header">
5
-            <!-- <h1>智慧城市数据大屏</h1> -->
6
-            <div class="child_title_text" style="font-size: 1.8vw; margin-top: 1vh;">12356心理援助热线大数据信息平台</div>
7
-            <!-- <div class="time">{{ currentTime }}</div> -->
8
-        </header>
9
-
10
-        <!-- 数据展示区域 -->
11
-        <div class="child-content">
12
-            <div class="child-title">
13
-                <div class="child_title_text">{{areaName}}各地区数据分析</div>
14
-                
15
-            </div>
16
-            <div class="child-warp">
17
-                <div class="left-section">
18
-                    <div class="left-title">
19
-                        <div class="tit_left">
20
-                            <span style="cursor: pointer;" @click="goToPage('/')">郑州市</span> /
21
-                            <span style="cursor: pointer;" @click="goToPage('/childMap')">{{ areaName }}</span>
22
-                        </div>
23
-                        <div class="tit_right">2024-03-25</div>
24
-                    </div>
25
-                    <div class="left-item1">
26
-                        <div class="center_item2_tit">
27
-                            <el-button class="btn_tit">工单类型</el-button>
28
-                        </div>
29
-                        <div class="item2_con">
30
-                            <div class="item2_con_tit">
31
-                                <div style="width: 50%;">工单类别</div>
32
-                                <div style="width: 25%;">数量</div>
33
-                                <div style="width: 25%;">百分比</div>
34
-                            </div>
35
-                            <div class="scroll-container item2_con_con" ref="scrollContainerRef"
36
-                                @mouseenter="pauseScroll" @mouseleave="resumeScroll">
37
-                                <div class="con_list" v-for="item in orderTypeData" :key="item.id">
38
-                                    <div style="width: 50%; color: #50AEF8;">{{ item.name }}</div>
39
-                                    <div style="width: 25%;">{{ item.number }}</div>
40
-                                    <div style="width: 25%;">{{ item.rate }}</div>
41
-                                </div>
42
-                            </div>
43
-                        </div>
44
-                    </div>
45
-                    <div class="left_item2">
46
-
47
-                        <div class="item_left">
48
-                            <div class="center_item2_tit">
49
-                                <el-button class="btn_tit">关键词</el-button>
50
-                            </div>
51
-                            <VueWordCloud style="width: 86%; height: 23vh; margin: 5% 7%;" :words="keyWordData"
52
-                                :color="getColorByWeight" />
53
-                        </div>
54
-                        <div class="item_right">
55
-                            <div class="item_right_tit"></div>
56
-                            <div class="item_right_con">
57
-
58
-                                <div class="item2_con_con">
59
-                                    <div class="con_list" v-for="(item, index) in wordData" :key="item.id">
60
-                                        <div style="width: 15%; color: #ffffff;">
61
-                                            
62
-                                            <div class="sort_bj" v-if="index<3">{{ index + 1 }}</div>
63
-                                            <div class="sort_default"  v-else>{{ index + 1 }}</div>
64
-                                        </div>
65
-                                        <div style="width: 60%;">{{item.name}}</div>
66
-                                        <div style="width: 25%;">{{item.number}}</div>
67
-                                    </div>
68
-                                </div>
69
-                            </div>
70
-                        </div>
71
-                    </div>
72
-                </div>
73
-                <div class="right-section">
74
-                    <ChildMapChart ></ChildMapChart>
75
-                </div>
76
-            </div>
77
-        </div>
78
-    </div>
79
-</template>
80
-
81
-<script setup>
82
-import { ref, onMounted } from 'vue'
83
-import { useDataStore } from '@/stores/data'
84
-import { getPageListData } from '@/api/index.js'
85
-import VueWordCloud from 'vuewordcloud';
86
-import ChildMapChart from '@/views/childMap/cpns/child-map-chart.vue'
87
-import { useRouter, useRoute } from 'vue-router';
88
-
89
-
90
-
91
-const router = useRouter()
92
-const route = useRoute();
93
-const areaName = ref(route.query.area || '');
94
-const areaId = ref(route.query.areaId || '');
95
-const dataStore = useDataStore()
96
-const currentTime = ref('')
97
-
98
-// 实时时钟
99
-let timer = null
100
-const updateTime = () => {
101
-    currentTime.value = new Date().toLocaleString()
102
-}
103
-
104
-// 初始化数据
105
-onMounted(() => {
106
-    init()
107
-    timer = setInterval(updateTime, 1000)
108
-    dataStore.fetchRealTimeData()
109
-})
110
-function init() {
111
-    getOrderType()
112
-    getWordData()
113
-}
114
-// 工单类型
115
-const orderTypeData = ref({})
116
-function getOrderType() {
117
-    const params = {
118
-        area: areaId.value,
119
-    }
120
-    getPageListData('/DataAnalysis/selectBusinessType/0', params).then((res) => {
121
-        if (res.state === 'success') {
122
-            orderTypeData.value = res.data.slice(0, 5)
123
-        }
124
-    })
125
-}
126
-
127
-//关键词
128
-const wordData = ref([]);
129
-const keyWordData = ref([])
130
-function getWordData() {
131
-    const params = {
132
-        area: areaId.value,
133
-    }
134
-    getPageListData('/DataAnalysis/selectAreaKeywordCount/0', params).then((res) => {
135
-        if (res.state === 'success') {
136
-            wordData.value = res.data
137
-            keyWordData.value = []
138
-            res.data.map(item => {
139
-                const obj ={}
140
-                obj.text = item.name
141
-                obj.weight = item.number
142
-                keyWordData.value.push(obj)
143
-            })
144
-        }
145
-    })
146
-}
147
-const corlorData = ref(['#FF3333','#FF6600','#FFCC00','#99CC33','#33CCFF','#0066CC','#9933CC','#336633','#663300','#1A1A1A'])
148
-const getColorByWeight = (word, index) => {
149
-    return corlorData.value[index];
150
-};
151
-
152
-// 跳转链接
153
-function goToPage(params) {
154
-    router.push({
155
-        path: params,
156
-        // query: {
157
-        //     callNumber:telWSData.Number,
158
-        //     callid: telWSData.CallID,
159
-        // }
160
-    });
161
-}
162
-</script>
163
-
164
-<style lang="scss" scoped>
165
-.child_title_text{
166
-    font-weight: bold;
167
-    font-size: 1.3vw;
168
-    background: linear-gradient(to bottom, #07B9FF, #F3FDFF);
169
-    /* 将背景裁剪到文字区域,-webkit- 前缀用于兼容 Safari 等浏览器 */
170
-    -webkit-background-clip: text;
171
-    background-clip: text;
172
-    /* 使文字颜色透明,显示出渐变背景,-webkit- 前缀用于兼容 Safari 等浏览器 */
173
-    -webkit-text-fill-color: transparent;
174
-    text-fill-color: transparent;
175
-}
176
-.dashboard {
177
-    height: 100vh;
178
-    display: grid;
179
-    grid-template-rows: 8.5vh 1fr;
180
-    padding: 1vh;
181
-    gap: 1vh;
182
-    background: url('@/assets/bj.png') no-repeat;
183
-    background-size: 100% 100%;
184
-
185
-    .dashboard-header {
186
-        /* width: 89%; */
187
-        background: url('@/assets/title_bg_child.png') no-repeat;
188
-        background-size: 100% 100%;
189
-
190
-        .title_text {
191
-            background: url('@/assets/title_text_bg.png') no-repeat;
192
-            background-size: 100% 100%;
193
-            width: 33%;
194
-            height: 4vh;
195
-            margin: 0 auto;
196
-            margin-top: 2vh;
197
-        }
198
-
199
-        .time {
200
-            text-align: left;
201
-            font-size: 0.8vw;
202
-            color: #ffffff;
203
-            margin-left: 4%;
204
-            margin-top: -2.5vh;
205
-        }
206
-    }
207
-
208
-    .child-content {
209
-        .child-title {
210
-            background: url('@/assets/child_title_bg.png') no-repeat;
211
-            background-size: 100% 100%;
212
-            height: 5vh;
213
-            line-height: 5vh;
214
-
215
-            .title_text {
216
-                background: url('@/assets/title_text_bg.png') no-repeat;
217
-                background-size: 100% 100%;
218
-                width: 33%;
219
-                height: 4vh;
220
-                margin: 0 auto;
221
-                margin-top: 2vh;
222
-            }
223
-        }
224
-
225
-        .child-warp {
226
-            background: url('@/assets/child_border_bj.png') no-repeat;
227
-            background-size: 100% 100%;
228
-            display: flex;
229
-            width: 96%;
230
-            margin: 0 auto;
231
-
232
-            .left-section {
233
-                text-align: left;
234
-                width: 30%;
235
-                margin: 0 auto;
236
-
237
-                .left-title {
238
-                    font-size: 1vw;
239
-                    color: #ffffff;
240
-                    line-height: 5vh;
241
-                    display: flex;
242
-                    width: 96%;
243
-                    margin: 0 auto;
244
-
245
-                    .tit_left {
246
-                        width: 50%;
247
-                    }
248
-
249
-                    .tit_right {
250
-                        width: 50%;
251
-                        text-align: right;
252
-                    }
253
-                }
254
-
255
-                .center_item2_tit {
256
-                    font-size: 0.9vw;
257
-                    color: #FEFFFF;
258
-                    text-align: left;
259
-                    margin-left: 1%;
260
-                    line-height: 5vh;
261
-                    height: 5vh;
262
-
263
-                    // 
264
-                    .btn_tit {
265
-                        background: url('@/assets/childBtn_bj.png') no-repeat;
266
-                        color: #ffffff;
267
-                        background-size: cover;
268
-                        border: none;
269
-                        width: 120px;
270
-                    }
271
-                }
272
-
273
-
274
-                .left-item1 {
275
-                    background: url('@/assets/orderTypeBoder.png') no-repeat;
276
-                    background-size: 100% 100%;
277
-                    width: 98%;
278
-                    margin: 0 auto;
279
-                    height: 40vh;
280
-                    padding: 1%;
281
-
282
-
283
-                    .item2_con {
284
-                        .item2_con_tit {
285
-                            background: url('@/assets/order_type_tit_bg.png') no-repeat;
286
-                            background-size: 100% 100%;
287
-                            font-size: 0.8vw;
288
-                            line-height: 3.6vh;
289
-                            height: 3.6vh;
290
-                            overflow: hidden;
291
-                            /* display: flex; */
292
-                            width: 100%;
293
-
294
-                            div {
295
-                                float: left;
296
-                                background: #102648;
297
-                                background: url('@/assets/con_list_div.png') no-repeat;
298
-                                background-size: 100% 100%;
299
-                                line-height: 3vh;
300
-                                height: 3vh;
301
-                                text-align: center;
302
-                                /* white-space: nowrap;  
303
-                                overflow: hidden;
304
-                                text-overflow: ellipsis; */
305
-                            }
306
-                        }
307
-
308
-                        .item2_con_con {
309
-                            font-size: 0.7vw;
310
-
311
-                            .con_list {
312
-                                width: 100%;
313
-                                overflow: hidden;
314
-                                /* display: flex; */
315
-                                border-bottom: 1px solid #4B5D7D;
316
-
317
-                                div {
318
-                                    float: left;
319
-                                    line-height: 6vh;
320
-                                    height: 6vh;
321
-                                    text-align: center;
322
-                                    // white-space: nowrap;
323
-                                    // overflow: hidden;
324
-                                    // text-overflow: ellipsis;
325
-                                }
326
-                            }
327
-
328
-                            .con_list:last-child {
329
-                                border-bottom: none;
330
-                            }
331
-                        }
332
-
333
-                    }
334
-                }
335
-
336
-                .left_item2 {
337
-                    background: url('@/assets/keys_border.png') no-repeat;
338
-                    background-size: 100% 100%;
339
-                    width: 98%;
340
-                    margin: 0 auto;
341
-                    height: 35vh;
342
-                    padding: 1%;
343
-                    display: flex;
344
-
345
-                    .item_left {
346
-                        width: 70%;
347
-                    }
348
-
349
-                    .item_right {
350
-                        width: 28%;
351
-                        margin-top: 1vh;
352
-                        height: 32vh;
353
-                        background: url('@/assets/key_bj.png') no-repeat;
354
-                        background-size: 100% 100%;
355
-
356
-                        .item_right_tit {
357
-                            background: url('@/assets/keys_top10.png') no-repeat;
358
-                            background-size: 100% 100%;
359
-                            width: 65%;
360
-                            margin-left: 5%;
361
-                            margin-top: 0.6vh;
362
-                            height: 2vh;
363
-                        }
364
-
365
-                        .item_right_con {
366
-                            .item2_con_con {
367
-                                font-size: 0.7vw;
368
-
369
-                                .con_list {
370
-                                    width: 90%;
371
-                                    margin: 0 auto;
372
-                                    overflow: hidden;
373
-                                    /* display: flex; */
374
-                                    // border-bottom: 1px solid #4B5D7D;
375
-
376
-                                    div {
377
-                                        float: left;
378
-                                        line-height: 3vh;
379
-                                        height: 2.9vh;
380
-                                        text-align: center;
381
-                                        // white-space: nowrap;
382
-                                        // overflow: hidden;
383
-                                        // text-overflow: ellipsis;
384
-                                        .sort_bj{
385
-                                            margin-top: 0.5vh;
386
-                                            width: 20px;
387
-                                            height: 20px;
388
-                                            line-height: 20px;
389
-                                            text-align: center;
390
-                                            background: url('@/assets/sort_bj.png') no-repeat;
391
-                                            background-size: 100% 100%;
392
-                                        }
393
-                                        .sort_default{
394
-                                            width: 20px;
395
-                                            height: 20px;
396
-                                            line-height: 3vh;
397
-                                            text-align: center;
398
-                                        }
399
-                                    }
400
-                                }
401
-
402
-                                .con_list:last-child {
403
-                                    border-bottom: none;
404
-                                }
405
-                            }
406
-
407
-                        }
408
-                    }
409
-                }
410
-            }
411
-
412
-            .right-section {
413
-                width: 66%;
414
-                margin: 0 auto;
415
-            }
416
-        }
417
-
418
-    }
419
-}
420
-</style>

+ 0 - 376
bigScreen3/src/views/childMap/cpns/child-map-chart.vue

@@ -1,376 +0,0 @@
1
-<template>
2
-  <div style="position: relative;width: 100%; height: 70vh;">
3
-    <div ref="mapRef" style="width: 100%; height: 70vh;"></div>
4
-  </div>
5
-</template>
6
-
7
-<script setup>
8
-import { onMounted, ref,onBeforeUnmount } from 'vue';
9
-import * as echarts from 'echarts';
10
-
11
-import { dengfengmapData } from '@/assets/json/dengfeng.js' // 登封市 1755
12
-import { erqiqumapData } from '@/assets/json/erqiqu.js' // 二七区 1745 
13
-import { gaoxinmapData } from '@/assets/json/gaoxinqu.js' // 高新区 1757
14
-import { gongyishimapData } from '@/assets/json/gongyishi.js' // 巩义市 1751
15
-import { guanchengqumapData } from '@/assets/json/guanchengqu.js' // 管城回族区 1746 
16
-import { huijiqumapData } from '@/assets/json/huijiqu.js' // 惠济区 1749 
17
-import { jinshuiqumapData } from '@/assets/json/jinshuiqu.js' // 金水区 1747 
18
-import { shangjiequmapData } from '@/assets/json/shangjiequ.js' // 上街区  1748  
19
-import { xingyangmapData } from '@/assets/json/xingyang.js' // 荥阳市 1752 
20
-import { xinmishimapData } from '@/assets/json/xinmishi.js' //  新密市 1753     
21
-import { xinzhengshimapData } from '@/assets/json/xinzhengshi.js' // 新郑市  1754
22
-import { zhengdongxinqumapData } from '@/assets/json/zhengdongxinqu.js' // 郑东新区 1756
23
-import { zhongmuxianmapData } from '@/assets/json/zhongmuxian.js' // 中牟县  1750
24
-import { zhongyuanqumapData } from '@/assets/json/zhongyuanqu.js' // 中原区 1744
25
-
26
-import { jingkaiqumapData } from '@/assets/json/jingkaiqu.js' // 经济开发区  410171
27
-import { hangkonggangqumapData } from '@/assets/json/hangkonggangqu.js' // 航空港区 410173
28
-
29
-import { getPageListData } from '@/api/index.js'
30
-import { useRouter, useRoute } from 'vue-router';
31
-
32
-const mapRef = ref(null);
33
-const callRegionData = ref([])
34
-const orderCountData = ref([])
35
-let myChart = null
36
-const router = useRouter()
37
-const route = useRoute()
38
-const parentAreaName = ref(route.query.area)
39
-const parentAreaId = ref(route.query.areaId)
40
-const mapData = ref([])
41
-let timerChildChart = null
42
-
43
-onMounted(async () => {
44
-  
45
-  myChart = echarts.init(mapRef.value);
46
-  // 加载区县地图数据,这里假设地图文件名为
47
-  console.log(getMapData(parentAreaId.value))
48
-  echarts.registerMap('districtMap', getMapData(parentAreaId.value));
49
-  getSelectRegionOrderCount(0)
50
-  timerChildChart = setInterval(()=>{
51
-    getSelectRegionOrderCount(0)
52
-  },60*1000)
53
-  
54
-});
55
-onBeforeUnmount(() => {
56
-    clearInterval(timerChildChart)
57
-})
58
-function getMapData(key) {
59
-  let resultData 
60
-  console.log(key)
61
-  switch (key*1) {
62
-    case 1755: // 登封市 1755
63
-      resultData = dengfengmapData
64
-      break;
65
-    case 1745: // 二七区 1745 
66
-      resultData = erqiqumapData
67
-      break;
68
-    case 1757: // 高新区 1757
69
-      resultData = gaoxinmapData
70
-      break;
71
-    case 1751: // 巩义市 1751
72
-      resultData = gongyishimapData
73
-      break;
74
-    case 1746: // 管城回族区 1746 
75
-      resultData = guanchengqumapData
76
-      break;
77
-      case 1749: // 惠济区 1749 
78
-      resultData = huijiqumapData
79
-      break;
80
-    case 1747: // 金水区 1747 
81
-      resultData = jinshuiqumapData
82
-      break;
83
-    case 1748: // 上街区  1748
84
-      resultData = shangjiequmapData
85
-      break;
86
-    case 1752: // 荥阳市 1752
87
-      resultData = xingyangmapData
88
-      break;
89
-    case 1753: //  新密市 1753
90
-      resultData = xinmishimapData
91
-      break;
92
-      case 1754: // 新郑市  1754
93
-      resultData = xinzhengshimapData
94
-      break;
95
-    case 1756: // 郑东新区 1756
96
-      resultData = zhengdongxinqumapData
97
-      break;
98
-    case 1750: // 中牟县  1750
99
-      resultData = zhongmuxianmapData
100
-      break;
101
-    case 1744: // 中原区 1744
102
-      resultData = zhongyuanqumapData
103
-      break;
104
-    case 49346: // 经济开发区  49346
105
-      resultData = jingkaiqumapData
106
-      break;
107
-    case 49347: // 航空港区 49347
108
-      resultData = hangkonggangqumapData
109
-      break;
110
-  }
111
-  return resultData
112
-}
113
-const callRegionType = ref(0)
114
-function dataTypeHandle(e) {
115
-  callRegionType.value = e
116
-  getSelectRegionOrderCount(e)
117
-}
118
- // 话务统计
119
- const maxDataValue = ref(1)
120
-function getSelectRegionOrderCount(type) {
121
-  const params ={
122
-    area: parentAreaId.value,
123
-  }
124
-  getPageListData('/DataAnalysis/selectRegionOrderCount/'+type,params ).then((res)=>{
125
-      if (res.state === 'success') {
126
-        callRegionData.value = []
127
-        if (res.data.length>0) {
128
-          orderCountData.value = res.data
129
-          maxDataValue.value = getMaxByProperty(res.data, 'number').number
130
-          res.data.map(item => {
131
-            const obj ={}
132
-            obj.value = item.number
133
-            obj.name = item.name
134
-            callRegionData.value.push(obj)
135
-          })
136
-          setOptionHandle()
137
-        }
138
-        
139
-      }
140
-  })
141
-}
142
-function getMaxByProperty(arr, prop) {
143
-  if (!Array.isArray(arr) || arr.length === 0) return null;
144
-  
145
-  let max = -Infinity;
146
-  let result = null;
147
-
148
-  for (const item of arr) {
149
-    const value = Number(item[prop]);
150
-    if (!isNaN(value) && value > max) {
151
-      max = value;
152
-      result = item; // 保留完整对象
153
-    }
154
-  }
155
-
156
-  return result; // 返回最大值对象(或根据需要返回 max)
157
-}
158
-
159
-function setOptionHandle() {
160
-  // 模拟各区县的数量数据
161
-  const districtData = [
162
-    { name: '城关乡', value: 20 },
163
-    { name: '索河街道', value: 150 },
164
-    { name: '高村乡', value: 15 },
165
-    { name: '王村镇', value: 10 },
166
-    { name: '泗水镇', value: 20 },
167
-    { name: '广武镇', value: 10 },
168
-    { name: '刘河镇', value: 150 },
169
-    { name: '崔庙镇', value: 10 },
170
-    { name: '贾峪镇', value: 10 },
171
-    { name: '乔楼镇', value: 20 },
172
-    { name: '金寨回族乡', value: 15 },
173
-    { name: '高山镇', value: 10 },
174
-    { name: '豫龙街道', value: 5 },
175
-  ];
176
-  const option = {
177
-    // tooltip: {
178
-    //   trigger: 'item'
179
-    // },
180
-    tooltip: {
181
-				trigger: 'item',
182
-				textStyle: {
183
-					color: '#fff',
184
-					fontSize: '16',
185
-					fontWeight: '600'
186
-				},
187
-				position: 'top',
188
-				backgroundColor: 'rgba(250,250,250,0)',
189
-				transitionDuration: 0.4,
190
-				formatter: function(params) {
191
-					let str=''
192
-					orderCountData.value.forEach(function(v,n){
193
-						if(v.name==params.name){
194
-							str='<div class="wrapp">'+
195
-                    '<p>'+ v.name+ '</p>'+
196
-                    '<ul class="mapWrap">'+
197
-                      '<li><label>工单量:</label>'+v.number +'</li>'+
198
-                      '<li><label>电话量:</label>'+v.callNumber +'</li>'+
199
-                      '<li><label>回访量:</label>'+v.visitNumber +'</li>'+
200
-                      '<li><label>满意度:</label>'+v.mydRate+'</li>'+
201
-                    '</ul>'+
202
-                  '</div>'
203
-						}
204
-					})
205
-					return str
206
-				}
207
-			},
208
-    visualMap: {
209
-      min: 0,
210
-      max: maxDataValue.value,
211
-      text: ['高', '低'],
212
-      realtime: false,
213
-      calculable: true,
214
-      inRange: {
215
-        color: ['#04B8D6', '#3079D5', '#9E2650']
216
-      },
217
-      right: '2%', // 距离右侧 10%
218
-      bottom: '-0%' // 距离底部 10%
219
-    },
220
-    series: [
221
-      {
222
-        name: '区县数量热力图',
223
-        type: 'map',
224
-        map: 'districtMap',
225
-        top: '15%', // 让地图整体靠下,距离顶部 10%
226
-        label: {
227
-          show: true, // 显示文字标签
228
-          color: '#fff', // 文字颜色
229
-          fontSize: 12, // 文字大小
230
-          fontWeight: 'normal', // 文字粗细
231
-          formatter: '{b}', // 显示区域名称({b} 是区域名称)
232
-        },
233
-        data: callRegionData.value,
234
-        // data: districtData,
235
-        // 设置选中(点击)时的样式
236
-        selectedMode: 'single',
237
-        itemStyle: {
238
-            selected: {
239
-                areaColor: 'red'
240
-            },
241
-            emphasis: {
242
-               // 鼠标悬停时的背景色
243
-							areaColor: '#052F59',
244
-              label: {
245
-                show: true, // 鼠标悬停时显示文字标签
246
-                color: '#ffffff', // 悬浮时文字颜色(设置为橙色)
247
-              },
248
-						},
249
-        },
250
-      }
251
-    ]
252
-  };
253
-
254
-  myChart.setOption(option);
255
-
256
-  // 监听地图的点击事件
257
-  myChart.on('click', function (params) {
258
-      // params 包含了点击区域的详细信息
259
-      console.log(params)
260
-      console.log('点击的地区名称:', params.name);
261
-      console.log('点击地区对应的值:', params.value);
262
-      console.log(params.name)
263
-      let paramsObj = {}
264
-      orderCountData.value.map(item => {
265
-        if (item.name === params.name) {
266
-            paramsObj = item
267
-        }
268
-      })
269
-      router.push({
270
-          path: '/orderList',
271
-          query: {
272
-              pName: parentAreaName.value,
273
-              pId: parentAreaId.value,
274
-              area: params.name,
275
-              areaId: paramsObj.region,
276
-          }
277
-      });
278
-  });
279
-}
280
-</script>
281
-<style>
282
-.wrapp{
283
-  background: url('@/assets/map_frame.png') no-repeat;
284
-	position: absolute;
285
-	width: 230px;
286
-	height: 224px;
287
-	padding: 8px 20px ;
288
-	z-index: 800000000000000000;
289
-	background-size: 100% 100%;
290
-	color: #fff;
291
-	top: -115px ;
292
-	left: -100px;
293
-}
294
-.mapWrap{
295
-	width: 145px;
296
-	height: 97px;
297
-	position: absolute;
298
-	top:69px;
299
-	left: 49px;
300
-	font-size: 15px;
301
-  text-align: left;
302
-}
303
-.mapWrap li,.mapWrap{
304
-  list-style: none;
305
-  
306
-}
307
-.wrapp p{
308
-	position: absolute;
309
-	top:42px;
310
-	left: 98px;
311
-}
312
-</style>
313
-
314
-<style scoped  lang="scss">
315
-
316
-/* 可按需添加样式 */
317
-.btnCen{
318
-    z-index: 111;
319
-    text-align: left;
320
-    margin-top: 1.5vh;
321
-    position: absolute;
322
-    top: 0vh;
323
-    right: 2%;
324
-    width: 90%;
325
-    display: flex;
326
-    .cenItem{
327
-      width: 33%;
328
-      display: flex;
329
-      .cenItemImg {
330
-        width: 28%;
331
-        height: 5vh;
332
-        background: url(/src/assets/con_right.png) no-repeat;
333
-        background-size: 100% 100%;
334
-      }
335
-    }
336
-    .btnCen1{
337
-        background: url('@/assets/btnCen1.png') no-repeat; 
338
-        color: #ffffff;
339
-        background-size: cover;
340
-        border: none;
341
-    }
342
-    .btnCen2{
343
-        background: url('@/assets/btnCen2.png') no-repeat; 
344
-        color: #ffffff;
345
-        background-size: cover;
346
-        border: none;
347
-    }
348
-}
349
-.mapSelect{
350
-  height: 10vh;
351
-  background: url('@/assets/mapSelect.png') no-repeat;
352
-  background-size: 100% 100%;
353
-  width: 20%;
354
-  position: absolute;
355
-  right: 2%;
356
-  bottom: -3vh;
357
-  .select_bj{
358
-    width: 100%;
359
-    height: 2.5vh;
360
-    line-height: 2.5vh;
361
-    background: url('@/assets/select_bj.png') no-repeat;
362
-    background-size: 100% 100%;
363
-    font-size: 0.6vw;
364
-    text-align: left;
365
-    padding-left: 8%;
366
-  }
367
-  .select_item{
368
-      color: #D0DEEE;
369
-      font-size: 0.5vw;
370
-      padding-left: 8%;
371
-      text-align: left;
372
-      height: 2.5vh;
373
-      line-height: 2.5vh;
374
-    }
375
-}
376
-</style>

+ 1 - 1
bigScreen3/src/views/dashboard/cpns/SmartOperation.vue

@@ -1263,7 +1263,7 @@ onBeforeUnmount(() => {
1263 1263
   // 设备运维选项卡样式
1264 1264
   .maintenance-tabs {
1265 1265
     position: absolute;
1266
-    top: 12vh;
1266
+    top: 15vh;
1267 1267
     left: 1vh;
1268 1268
     z-index: 100;
1269 1269
     display: flex;

+ 58 - 9
bigScreen3/src/views/dashboard/dashboard.vue

@@ -146,10 +146,10 @@
146 146
 
147 147
 <script setup>
148 148
     import { ref, onMounted, onBeforeUnmount } from 'vue'
149
-    import { ElDropdown, ElDropdownMenu, ElDropdownItem } from 'element-plus'
149
+    import { useRouter } from 'vue-router'
150
+    import { ElDropdown, ElDropdownMenu, ElDropdownItem, ElMessage, ElMessageBox } from 'element-plus'
150 151
     import { loadAMap } from '@/utils/amap.js'
151 152
 
152
-    import { useDataStore } from '@/stores/data'
153 153
     import { getPageListData, createPageData } from '@/api/index'
154 154
     import icon1_1 from '@/assets/icon1.1.png'
155 155
     import icon1_2 from '@/assets/icon1.2.png'
@@ -183,7 +183,7 @@
183 183
     import weatherQingIcon from '@/assets/weatherimgs/icon_qing.png'    
184 184
 
185 185
 
186
-    const dataStore = useDataStore()
186
+    const router = useRouter()
187 187
     
188 188
     // 静态数据
189 189
     const weatherDesc = ref('多云')
@@ -248,9 +248,59 @@
248 248
         }
249 249
     }
250 250
     // 退出登录
251
-    const handleLogout = () => {
252
-        // 退出逻辑
253
-        console.log('退出登录')
251
+    const handleLogout = async () => {
252
+        try {
253
+            // 显示确认对话框
254
+            const confirmResult = await ElMessageBox.confirm(
255
+                '确定要退出登录吗?',
256
+                '退出登录确认',
257
+                {
258
+                    confirmButtonText: '确定',
259
+                    cancelButtonText: '取消',
260
+                    type: 'warning'
261
+                }
262
+            )
263
+            
264
+            // 用户点击确定后执行退出逻辑
265
+            if (confirmResult === 'confirm') {
266
+                // 1. 调用后端退出登录API
267
+                const response = await createPageData('/syslogin/loginOut', {})
268
+                if (response && response.status === 200) {
269
+                    // 2. 清除本地存储的用户信息和token
270
+                    localStorage.removeItem('token')
271
+                    localStorage.removeItem('userInfo')
272
+                    sessionStorage.removeItem('token')
273
+                    sessionStorage.removeItem('userInfo')
274
+                }
275
+                
276
+                // 3. 显示退出成功提示
277
+                ElMessage.success('退出登录成功')
278
+                
279
+                // 4. 跳转到登录页面
280
+                setTimeout(() => {
281
+                    router.replace('/login')
282
+                }, 1000)
283
+            }
284
+            
285
+        } catch (error) {
286
+            // 如果是用户取消操作,则不执行任何操作
287
+            if (error === 'cancel') {
288
+                return
289
+            }
290
+            
291
+            console.error('退出登录失败:', error)
292
+            ElMessage.error('退出登录失败,请重试')
293
+            
294
+            // 即使API调用失败,也要清理本地信息并跳转
295
+            localStorage.removeItem('token')
296
+            localStorage.removeItem('userInfo')
297
+            sessionStorage.removeItem('token')
298
+            sessionStorage.removeItem('userInfo')
299
+            
300
+            setTimeout(() => {
301
+                router.replace('/login')
302
+            }, 1000)
303
+        }
254 304
     }
255 305
     
256 306
     // 处理项目选择
@@ -284,7 +334,6 @@
284 334
         timer = setInterval(updateTime, 1000)
285 335
         fetchProjectList() // 获取项目列表
286 336
         getWeatherByCity() // 获取天气信息
287
-        // dataStore.fetchRealTimeData()
288 337
     })
289 338
 
290 339
     onBeforeUnmount(() => {
@@ -431,13 +480,13 @@
431 480
                 .center_item1{
432 481
                     height: 46vh;
433 482
                     margin-top: 1vh;
434
-                    background: url('@/assets/center_bg.png') no-repeat;
483
+                    // background: url('@/assets/center_bg.png') no-repeat;
435 484
                     background-size: 100% 100%;
436 485
                 }
437 486
                 
438 487
                 .center_item2{
439 488
                     height: 35vh;
440
-                    background: url('@/assets/center_item2.png') no-repeat;
489
+                    // background: url('@/assets/center_item2.png') no-repeat;
441 490
                     background-size: 100% 100%;
442 491
                     width: 100%;
443 492
                     margin: 0 auto;

+ 0 - 442
bigScreen3/src/views/orderList/orderList.vue

@@ -1,442 +0,0 @@
1
-<template>
2
-    <div class="dashboard">
3
-        <!-- 标题区域 -->
4
-        <header class="dashboard-header">
5
-            <!-- <h1>智慧城市数据大屏</h1> -->
6
-            <div class="child_title_text" style="font-size: 1.8vw; margin-top: 1vh;">12356心理援助热线大数据信息平台</div>
7
-            <!-- <div class="time">{{ currentTime }}</div> -->
8
-        </header>
9
-
10
-        <!-- 数据展示区域 -->
11
-        <!-- <LineChart :values="values" :xLabels="xLabels" color="#00FF87" auto-resize theme="dark" @chart-click="handleChartClick" /> -->
12
-        <div class="child-content">
13
-            <div class="child-title">
14
-                <div class="child_title_text">郑州市12356热线工单</div>
15
-            </div>
16
-            <div class="child-warp">
17
-                <div class="center_item2_tit">
18
-                    <span class="btn_tit" @click="goToPage('/')">郑州市</span> /
19
-                    <span class="btn_tit" @click="goToPage('/childMap')">{{ parentName }}</span>/
20
-                    <span class="btn_tit">{{ areaName }} 区域工单</span>
21
-                </div>
22
-                <div class="center_item2_search">
23
-                    <el-input class="search_item" v-model="queryParams.workordercode" placeholder="请输入编号" clearable
24
-                        @blur="getWorkorder" />
25
-                    <el-input class="search_item" v-model="queryParams.createusername" placeholder="请输入受理人姓名" clearable
26
-                        @blur="getWorkorder" />
27
-                    <el-cascader v-model="queryParams.workordercate" :options="orderTypes" placeholder="请选择工单类型"
28
-                        :props="{ value: 'id', children: 'children', }" @change="getWorkorder" clearable />
29
-
30
-                    <el-date-picker class="search_item" v-model="searchTimes" type="datetimerange" range-separator="至"
31
-                        start-placeholder="开始时间" end-placeholder="结束时间" clearable @change="timeChange" />
32
-                </div>
33
-                <div class="item2_con">
34
-                    <div class="item2_con_tit" style="width: 100%;">
35
-                        <div style="width: 200px;">工单编号</div>
36
-                        <div style="width: 180px;">工单类型</div>
37
-                        <div style="width: calc(100vw - 780px);">工单内容</div>
38
-                        <div style="width: 100px;">受理人</div>
39
-                        <div style="width: 150px;">受理时间</div>
40
-                    </div>
41
-                    <div class="scroll-container item2_con_con" ref="scrollContainerRef" @mouseenter="pauseScroll"
42
-                        @mouseleave="resumeScroll">
43
-                        <div class="con_list" v-for="item in WorkordeData" :key="item.id">
44
-                            <div style="width: 200px; color: #50AEF8;">{{ item.workordercode }}</div>
45
-                            <div style="width: 180px;">{{ item.workordercatename }}</div>
46
-                            <div style="width: calc(100vw - 780px);">{{ item.content }}</div>
47
-                            <div style="width: 100px;">{{ item.createusername }}</div>
48
-                            <div style="width: 150px;">{{ item.createtime }}</div>
49
-                        </div>
50
-                        <el-empty :image-size="60" v-if="!WorkordeData.length" />
51
-                    </div>
52
-                </div>
53
-                <el-pagination :background="false" class="pageEle" v-show="total > 0" :total="total"
54
-                    v-model:current-page="queryParams.pageNum" v-model:page-size="queryParams.pageSize"
55
-                    @change="getWorkorder"
56
-                    @pagination="getWorkorder" />
57
-            </div>
58
-
59
-        </div>
60
-    </div>
61
-</template>
62
-
63
-<script setup>
64
-import { ref, onMounted } from 'vue'
65
-import { useDataStore } from '@/stores/data'
66
-import { getPageListData } from '@/api/index.js'
67
-import { useRouter, useRoute } from 'vue-router';
68
-import moment from 'moment'
69
-
70
-const router = useRouter()
71
-// const dataStore = useDataStore()
72
-const currentTime = ref('')
73
-
74
-const route = useRoute()
75
-const parentName = ref(route.query.pName || '')
76
-const parentId = ref(route.query.pId || '')
77
-const areaName = ref(route.query.area || '')
78
-const areaId = ref(route.query.areaId || '')
79
-
80
-
81
-// 实时时钟
82
-let timer = null
83
-const updateTime = () => {
84
-    currentTime.value = new Date().toLocaleString()
85
-}
86
-
87
-const orderTypes = ref([])
88
-
89
-// 初始化数据
90
-onMounted(() => {
91
-    init()
92
-    timer = setInterval(updateTime, 1000)
93
-    // dataStore.initDictorys()
94
-
95
-    orderTypes.value = useDataStore().orderTypes
96
-    console.log(orderTypes.value, 'orderTypes')
97
-})
98
-function init() {
99
-    getWorkorder()
100
-}
101
-// 工单列表
102
-const queryParams = ref({
103
-    starttime: '',
104
-    endtime: '',
105
-    workordercate: '',
106
-    createusername: '',
107
-    workordercode: '',
108
-    pageNum: 1,
109
-    pageSize: 10,
110
-})
111
-const total = ref(0)
112
-const WorkordeData = ref({})
113
-function getWorkorder() {
114
-    const params = {
115
-        area: areaId.value,//areaId.value,
116
-        pageNum: queryParams.value.pageNum,
117
-        pageSize: queryParams.value.pageSize,
118
-        listType: 0
119
-    }
120
-
121
-    if (queryParams.value.workordercode) {
122
-        params.workordercode = queryParams.value.workordercode
123
-    }
124
-
125
-    if (queryParams.value.createusername) {
126
-        params.createusername = queryParams.value.createusername
127
-    }
128
-
129
-    if (queryParams.value.workordercate) {
130
-        params.workordercate = queryParams.value.workordercate[queryParams.value.workordercate.length - 1]
131
-    }
132
-
133
-    if (queryParams.value.createtime) {
134
-        params.createtime = queryParams.value.createtime
135
-    }
136
-    if (queryParams.value.endtime) {
137
-        params.endtime = queryParams.value.endtime
138
-    }
139
-
140
-    getPageListData('/order/workorder', params).then((res) => {
141
-        if (res.state === 'success') {
142
-            WorkordeData.value = res.data
143
-            total.value = res.total
144
-        }
145
-    })
146
-}
147
-// 跳转链接 
148
-function goToPage(value) {
149
-    const params = {}
150
-    if (value === '/childMap') {
151
-        params.area = parentName.value
152
-        params.areaId = parentId.value
153
-    }
154
-    router.push({
155
-        path: value,
156
-        query: params
157
-    });
158
-}
159
-const searchTimes = ref([])
160
-const timeChange = (val) => {
161
-    console.log(val, 'val')
162
-    if (val?.length === 2) {
163
-        queryParams.value.createtime = moment(val[0]).format('YYYY-MM-DD HH:mm:ss')
164
-        queryParams.value.endtime = moment(val[1]).format('YYYY-MM-DD HH:mm:ss')
165
-    } else {
166
-        queryParams.value.createtime = ''
167
-        queryParams.value.endtime = ''
168
-    }
169
-
170
-    getWorkorder();
171
-}
172
-</script>
173
-
174
-<style lang="scss" scoped>
175
-/* 使用 :deep() 穿透作用域样式 */
176
-
177
-:deep() {
178
-
179
-    .el-cascader,
180
-    .el-date-editor {
181
-        margin-left: 1%;
182
-        margin-bottom: 1.5vh;
183
-    }
184
-
185
-    /* 输入框通用样式 */
186
-    .el-cascader,
187
-    .el-input,
188
-    .el-select,
189
-    .el-date-editor {
190
-        --el-input-bg-color: transparent;
191
-        /* 背景透明 */
192
-        --el-input-text-color: white;
193
-        /* 文字颜色 */
194
-        --el-input-border-color: rgba(255, 255, 255, 0.3);
195
-        /* 边框颜色 */
196
-        --el-input-hover-border-color: white;
197
-        /* 悬停边框 */
198
-        --el-input-focus-border-color: white;
199
-        /* 聚焦边框 */
200
-        --el-input-placeholder-color: #aaa;
201
-        /* 提示文字颜色 */
202
-    }
203
-
204
-    /* 下拉箭头颜色 */
205
-    .el-select .el-input__suffix,
206
-    .el-date-editor .el-input__suffix {
207
-        .el-icon {
208
-            color: white !important;
209
-        }
210
-    }
211
-
212
-    /* 下拉菜单样式(需额外处理) */
213
-    .el-select-dropdown,
214
-    .el-picker-panel {
215
-        --el-bg-color: #333;
216
-        /* 下拉背景 */
217
-        --el-text-color-regular: white;
218
-        /* 下拉文字 */
219
-        border: 1px solid rgba(255, 255, 255, 0.1) !important;
220
-    }
221
-}
222
-
223
-/* 使用 :deep() 穿透作用域 */
224
-:deep(.pageEle.el-pagination) {
225
-    /* 全局文字颜色 */
226
-    --el-text-color-regular: white;
227
-
228
-    /* 分页按钮 */
229
-    .btn-prev,
230
-    .btn-next,
231
-    .number {
232
-        color: white !important;
233
-        background: transparent !important;
234
-        /* 透明背景 */
235
-
236
-        &:hover {
237
-            color: #409eff !important;
238
-            /* 悬停颜色 */
239
-        }
240
-
241
-        &.active {
242
-            color: #409eff !important;
243
-            /* 当前页颜色 */
244
-            background: transparent !important;
245
-        }
246
-
247
-        &.disabled {
248
-            color: #666 !important;
249
-            /* 禁用状态颜色 */
250
-        }
251
-    }
252
-
253
-    /* 输入框 */
254
-    .el-pagination__editor {
255
-        color: white !important;
256
-        background: transparent !important;
257
-        border-color: rgba(255, 255, 255, 0.3) !important;
258
-
259
-        .el-input__inner {
260
-            color: white !important;
261
-        }
262
-    }
263
-}
264
-
265
-.dashboard {
266
-    height: 100vh;
267
-    display: grid;
268
-    grid-template-rows: 8.5vh 1fr;
269
-    padding: 1vh;
270
-    gap: 1vh;
271
-    background: url('@/assets/bj.png') no-repeat;
272
-    background-size: 100% 100%;
273
-
274
-    .child_title_text {
275
-        font-weight: bold;
276
-        font-size: 1.3vw;
277
-        background: linear-gradient(to bottom, #07B9FF, #F3FDFF);
278
-        /* 将背景裁剪到文字区域,-webkit- 前缀用于兼容 Safari 等浏览器 */
279
-        -webkit-background-clip: text;
280
-        background-clip: text;
281
-        /* 使文字颜色透明,显示出渐变背景,-webkit- 前缀用于兼容 Safari 等浏览器 */
282
-        -webkit-text-fill-color: transparent;
283
-        text-fill-color: transparent;
284
-    }
285
-
286
-    .dashboard-header {
287
-        /* width: 89%; */
288
-        background: url('@/assets/title_bg_child.png') no-repeat;
289
-        background-size: 100% 100%;
290
-
291
-        .title_text {
292
-            background: url('@/assets/title_text_bg.png') no-repeat;
293
-            background-size: 100% 100%;
294
-            width: 33%;
295
-            height: 4vh;
296
-            margin: 0 auto;
297
-            margin-top: 2vh;
298
-        }
299
-
300
-        .time {
301
-            text-align: left;
302
-            font-size: 0.8vw;
303
-            color: #ffffff;
304
-            margin-left: 4%;
305
-            margin-top: -2.5vh;
306
-        }
307
-    }
308
-
309
-    .child-content {
310
-        .child-title {
311
-            background: url('@/assets/child_title_bg.png') no-repeat;
312
-            background-size: 100% 100%;
313
-            height: 5vh;
314
-            line-height: 5vh;
315
-            margin-bottom: 2vh;
316
-
317
-
318
-
319
-            .title_text {
320
-                background: url('@/assets/title_text_bg.png') no-repeat;
321
-                background-size: 100% 100%;
322
-                width: 33%;
323
-                height: 4vh;
324
-                margin: 0 auto;
325
-                margin-top: 2vh;
326
-            }
327
-        }
328
-
329
-        .child-warp {
330
-            background: url('@/assets/order_border_b.png') no-repeat;
331
-            background-size: 100% 100%;
332
-            width: 96%;
333
-            margin: 0 auto;
334
-            height: 78vh;
335
-
336
-            .left-title {
337
-                font-size: 1vw;
338
-                color: #ffffff;
339
-                line-height: 5vh;
340
-                display: flex;
341
-                width: 96%;
342
-                margin: 0 auto;
343
-
344
-                .tit_left {
345
-                    width: 50%;
346
-                }
347
-
348
-                .tit_right {
349
-                    width: 50%;
350
-                    text-align: right;
351
-                }
352
-            }
353
-
354
-            .center_item2_tit {
355
-                font-size: 0.9vw;
356
-                color: #FEFFFF;
357
-                text-align: left;
358
-                margin-left: 1%;
359
-                line-height: 5vh;
360
-                height: 5vh;
361
-
362
-                // 
363
-                .btn_tit {
364
-
365
-                    cursor: pointer;
366
-                }
367
-            }
368
-
369
-            .center_item2_search {
370
-                text-align: left;
371
-
372
-                .search_item {
373
-                    width: 240px;
374
-                    margin-left: 1%;
375
-                    margin-bottom: 1.5vh;
376
-                }
377
-            }
378
-
379
-            .item2_con {
380
-                .item2_con_tit {
381
-                    background: url('@/assets/order_type_tit_bg.png') no-repeat;
382
-                    background-size: 100% 100%;
383
-                    font-size: 0.8vw;
384
-                    line-height: 5.5vh;
385
-                    height: 5.5vh;
386
-                    overflow: hidden;
387
-                    /* display: flex; */
388
-                    width: 100%;
389
-
390
-                    div {
391
-                        float: left;
392
-                        background: #102648;
393
-                        background: url('@/assets/con_list_div.png') no-repeat;
394
-                        background-size: 100% 100%;
395
-                        line-height: 5.5vh;
396
-                        height: 5.5vh;
397
-                        text-align: center;
398
-                        /* white-space: nowrap;  
399
-                        overflow: hidden;
400
-                        text-overflow: ellipsis; */
401
-                    }
402
-                }
403
-
404
-                .item2_con_con {
405
-                    font-size: 0.7vw;
406
-
407
-                    .con_list {
408
-                        width: 100%;
409
-                        overflow: hidden;
410
-                        /* display: flex; */
411
-                        border-bottom: 1px solid #4B5D7D;
412
-
413
-                        div {
414
-                            float: left;
415
-                            line-height: 5.5vh;
416
-                            height: 5.5vh;
417
-                            text-align: center;
418
-                            // white-space: nowrap;
419
-                            // overflow: hidden;
420
-                            // text-overflow: ellipsis;
421
-                        }
422
-                    }
423
-
424
-                    .con_list:last-child {
425
-                        border-bottom: none;
426
-                    }
427
-                }
428
-
429
-            }
430
-
431
-            .pageEle {
432
-                margin-top: 1vh;
433
-                margin-left: 2%;
434
-                width: 96%;
435
-                background-color: unset;
436
-            }
437
-
438
-        }
439
-
440
-    }
441
-}
442
-</style>

+ 1 - 0
web/src/store/modules/user.js

@@ -69,6 +69,7 @@ const user = {
69 69
     LogOut({ commit }) {
70 70
       return new Promise((resolve, reject) => {
71 71
         logout().then(res => {
72
+          
72 73
           logOut(commit)
73 74
           resolve()
74 75
         }).catch(error => {