From c0c0d75b2ed0191877d8cadfb39dedad6eabb407 Mon Sep 17 00:00:00 2001
From: chenzeping <ChenZeping02609@163.com>
Date: 星期二, 30 三月 2021 21:33:00 +0800
Subject: [PATCH] Merge branch 'develop' of http://xearth.cn:6600/r/wuyushui/SewerAndRainNetwork into develop

---
 src/api/mapApi.js                                                      |    9 
 src/components/BaseNav/WasteWater/WasteWater.js                        |   21 
 src/assets/images/map-pages/basenav/flugas/exhaust/fq_orange.png       |    0 
 .env.test                                                              |    2 
 src/utils/tools.js                                                     |   11 
 src/assets/images/map-pages/basenav/flugas/exhaust/fq_green_xc.png     |    0 
 src/api/index.js                                                       |    5 
 src/assets/images/map-pages/basenav/flugas/exhaust/fq_green.png        |    0 
 src/utils/axios.js                                                     |   19 
 src/components/BaseNav/PublicBounced/GasComponents/GasTable.vue        |    0 
 src/router/map.js                                                      |    4 
 src/assets/images/map-pages/basenav/flugas/exhaust/fq_blue.png         |    0 
 src/store/modules/user.js                                              |  149 +++++++++++
 src/utils/navigation.js                                                |  167 ++++++++++++
 src/api/host.js                                                        |    6 
 src/assets/images/map-pages/basenav/flugas/exhaust/fq_gray.png         |    0 
 src/store/index.js                                                     |    4 
 src/components/BaseNav/PublicBounced/GasComponents/GasECharts.vue      |  194 +++++++++-----
 .env                                                                   |    2 
 src/assets/images/login-page/page1.jpg                                 |    0 
 src/api/mapUrl.js                                                      |    8 
 src/components/BaseNav/PublicBounced/PublicBounced.vue                 |    1 
 src/router/index.js                                                    |   29 +
 src/views/Login.vue                                                    |  124 +++++++++
 src/assets/images/map-pages/basenav/flugas/exhaust/fq_bright_green.png |    0 
 src/main.js                                                            |    3 
 .env.production                                                        |    2 
 src/assets/images/map-pages/basenav/flugas/exhaust/fq_yellow.png       |    0 
 src/app.config.js                                                      |    2 
 src/assets/images/map-pages/basenav/flugas/exhaust/fq_red.png          |    0 
 30 files changed, 639 insertions(+), 123 deletions(-)

diff --git a/.env b/.env
index 7b05847..d4d1f4c 100644
--- a/.env
+++ b/.env
@@ -2,7 +2,7 @@
 NODE_ENV=development
 #vue椤圭洰 灞炴�у悕蹇呴』浠UE_APP_寮�澶达紝姣斿VUE_APP_XXX
 VUE_APP_MOCK=true
-VUE_APP_API_HOST=http://localhost:8080/
+VUE_APP_API_HOST=http://xearth.cn:3000
 VUE_APP_API_TOKEN_URL=https://auth.uat.siam.sinopec.com/
 VUE_APP_API_BASE_URL=/api
 VUE_APP_CLIENT_ID=no_apply
diff --git a/.env.production b/.env.production
index eccd272..75961f6 100644
--- a/.env.production
+++ b/.env.production
@@ -1,7 +1,7 @@
 # .env
 NODE_ENV=production
 VUE_APP_MOCK=false
-VUE_APP_API_HOST=http://localhost:8080/
+VUE_APP_API_HOST=http://localhost:3000/
 VUE_APP_API_BASE_URL=/api
 VUE_APP_API_TOKEN_URL=https://oauth.siam.sinopec.com/
 VUE_APP_CLIENT_ID=no_apply
diff --git a/.env.test b/.env.test
index dc697e7..f5a8555 100644
--- a/.env.test
+++ b/.env.test
@@ -1,7 +1,7 @@
 # .env
 NODE_ENV=test
 VUE_APP_MOCK=false
-VUE_APP_API_HOST=http://localhost:8080/
+VUE_APP_API_HOST=http://localhost:3000/
 VUE_APP_API_TOKEN_URL=https://auth.uat.siam.sinopec.com/
 VUE_APP_API_BASE_URL=/api
 VUE_APP_CLIENT_ID=no_apply
diff --git a/src/api/host.js b/src/api/host.js
new file mode 100644
index 0000000..d2b8228
--- /dev/null
+++ b/src/api/host.js
@@ -0,0 +1,6 @@
+/**
+ * 鏈嶅姟HOST瀹氫箟
+ */
+import { getSchemeHost } from '../utils/tools'
+
+export const $HOST = getSchemeHost()
diff --git a/src/api/index.js b/src/api/index.js
index 1df9919..62f9063 100644
--- a/src/api/index.js
+++ b/src/api/index.js
@@ -1,7 +1,4 @@
 import * as mapApi from './mapApi'
 import * as mapUrl from './mapUrl'
 
-export default {
-  mapApi,
-  mapUrl
-}
+export default Object.assign({}, mapApi, mapUrl)
diff --git a/src/api/mapApi.js b/src/api/mapApi.js
index 3cde8cb..7376708 100644
--- a/src/api/mapApi.js
+++ b/src/api/mapApi.js
@@ -3,13 +3,12 @@
 // const $HOST = 'http://10.238.221.113'
 // 娴嬭瘯鐜IP锛歨ttp://10.238.221.113
 import axios from '@utils/axios'
+import * as mapUrl from './mapUrl'
 /**
  * 璇ユ柟娉曢厤缃�
  */
-class MapAPI {
-  getToken (param) {
-    axios.get(param.url, param.option)
+export default {
+  getUser (data) {
+    return axios.get(mapUrl.GetUser, data)
   }
 }
-
-export default new MapAPI()
diff --git a/src/api/mapUrl.js b/src/api/mapUrl.js
index bc905e4..f5f7815 100644
--- a/src/api/mapUrl.js
+++ b/src/api/mapUrl.js
@@ -1,10 +1,6 @@
 /**
  * 璇ユ枃浠堕厤缃帴鍙g殑URL鍦板潃
  */
-class ApiURLs {
-  constructor () {
-    this.APIURL_HELLOWORLD = 'http://www.baidu.com'
-  }
-}
+import { $HOST } from './host'
 
-export default new ApiURLs()
+export const GetUser = $HOST + '/user/getUser'
diff --git a/src/app.config.js b/src/app.config.js
index cf2a95f..295d938 100644
--- a/src/app.config.js
+++ b/src/app.config.js
@@ -11,7 +11,7 @@
       developmentOff: true // 璁句负true鍚庡湪寮�鍙戠幆澧冧笉浼氭敹闆嗛敊璇俊鎭�
     }
   },
-  homeRouterName: 'Home',
+  homeRouterName: 'mapTemplate',
   loginRouteName: 'Login',
   routeMode: 'history',
   tagNavCache: false,
diff --git a/src/assets/images/login-page/page1.jpg b/src/assets/images/login-page/page1.jpg
new file mode 100644
index 0000000..96be519
--- /dev/null
+++ b/src/assets/images/login-page/page1.jpg
Binary files differ
diff --git a/src/assets/images/map-pages/basenav/flugas/exhaust/fq_blue.png b/src/assets/images/map-pages/basenav/flugas/exhaust/fq_blue.png
new file mode 100644
index 0000000..93edcb3
--- /dev/null
+++ b/src/assets/images/map-pages/basenav/flugas/exhaust/fq_blue.png
Binary files differ
diff --git a/src/assets/images/map-pages/basenav/flugas/exhaust/fq_bright_green.png b/src/assets/images/map-pages/basenav/flugas/exhaust/fq_bright_green.png
new file mode 100644
index 0000000..19b0397
--- /dev/null
+++ b/src/assets/images/map-pages/basenav/flugas/exhaust/fq_bright_green.png
Binary files differ
diff --git a/src/assets/images/map-pages/basenav/flugas/exhaust/fq_gray.png b/src/assets/images/map-pages/basenav/flugas/exhaust/fq_gray.png
new file mode 100644
index 0000000..590b183
--- /dev/null
+++ b/src/assets/images/map-pages/basenav/flugas/exhaust/fq_gray.png
Binary files differ
diff --git a/src/assets/images/map-pages/basenav/flugas/exhaust/fq_green.png b/src/assets/images/map-pages/basenav/flugas/exhaust/fq_green.png
new file mode 100644
index 0000000..08e8a59
--- /dev/null
+++ b/src/assets/images/map-pages/basenav/flugas/exhaust/fq_green.png
Binary files differ
diff --git a/src/assets/images/map-pages/basenav/flugas/exhaust/fq_green_xc.png b/src/assets/images/map-pages/basenav/flugas/exhaust/fq_green_xc.png
new file mode 100644
index 0000000..acc7c10
--- /dev/null
+++ b/src/assets/images/map-pages/basenav/flugas/exhaust/fq_green_xc.png
Binary files differ
diff --git a/src/assets/images/map-pages/basenav/flugas/exhaust/fq_orange.png b/src/assets/images/map-pages/basenav/flugas/exhaust/fq_orange.png
new file mode 100644
index 0000000..718f237
--- /dev/null
+++ b/src/assets/images/map-pages/basenav/flugas/exhaust/fq_orange.png
Binary files differ
diff --git a/src/assets/images/map-pages/basenav/flugas/exhaust/fq_red.png b/src/assets/images/map-pages/basenav/flugas/exhaust/fq_red.png
new file mode 100644
index 0000000..5f93934
--- /dev/null
+++ b/src/assets/images/map-pages/basenav/flugas/exhaust/fq_red.png
Binary files differ
diff --git a/src/assets/images/map-pages/basenav/flugas/exhaust/fq_yellow.png b/src/assets/images/map-pages/basenav/flugas/exhaust/fq_yellow.png
new file mode 100644
index 0000000..169ce4d
--- /dev/null
+++ b/src/assets/images/map-pages/basenav/flugas/exhaust/fq_yellow.png
Binary files differ
diff --git a/src/components/BaseNav/PublicBounced/GasComponents/GasECharts.vue b/src/components/BaseNav/PublicBounced/GasComponents/GasECharts.vue
index 9084a18..675b787 100644
--- a/src/components/BaseNav/PublicBounced/GasComponents/GasECharts.vue
+++ b/src/components/BaseNav/PublicBounced/GasComponents/GasECharts.vue
@@ -7,10 +7,12 @@
     <div class="border_corner border_corner_left_bottom"></div>
     <div class="border_corner border_corner_right_bottom"></div>
     <div class="main">
-      <div class="main-echarts">
-        <div id="echarts" style="width:100%;height:100%" ref="main"></div>
+        <div id="echarts" ref="main"></div>
+        <div class="border_corner border_corner_left_top"></div>
+        <div class="border_corner border_corner_right_top"></div>
+        <div class="border_corner border_corner_left_bottom"></div>
+        <div class="border_corner border_corner_right_bottom"></div>
       </div>
-    </div>
   </div>
 </template>
 
@@ -22,18 +24,27 @@
       const myChart = this.$echarts.init(this.$refs.main)
       const option = {
         title: {
-          text: '鎶樼嚎鍥惧爢鍙�'
+          // text: '鎶樼嚎鍥惧爢鍙�'
         },
-        // color: '#fff',
+        color: ['#5470c6', '#91CC75', '#EE6666', '#FF0087'],
         tooltip: {
-          trigger: 'axis'
+          trigger: 'axis',
+          axisPointer: {
+            type: 'cross',
+            label: {
+              color: '#1a4245'
+            }
+          }
         },
-        // legend: {
-        //   data: ['閭欢钀ラ攢', '鑱旂洘骞垮憡', '瑙嗛骞垮憡', '鐩存帴璁块棶', '鎼滅储寮曟搸']
-        // },
+        legend: {
+          data: ['姘哀鍖栫墿', '浜屾哀鍖栫~', '鐑熷皹', '搴熸皵娴侀噺']
+          // pageTextStyle: {
+          //   color: '#fff'
+          // }
+        },
         grid: {
           left: '3%',
-          right: '4%',
+          right: '3%',
           bottom: '3%',
           containLabel: true
         },
@@ -42,63 +53,98 @@
             saveAsImage: {}
           }
         },
+        // 鍥炬爣缂╂斁璁剧疆
+        dataZoom: [{
+          type: 'inside',
+          start: 0,
+          end: 100
+        }, {
+          start: 0,
+          end: 100,
+          show: false,
+          // handleIcon: 'M10.7,11.9v-1.3H9.3v1.3c-4.9,0.3-8.8,4.4-8.8,9.4c0,5,3.9,9.1,8.8,9.4v1.3h1.3v-1.3c4.9-0.3,8.8-4.4,8.8-9.4C19.5,16.3,15.6,12.2,10.7,11.9z M13.3,24.4H6.7V23h6.6V24.4z M13.3,19.6H6.7v-1.4h6.6V19.6z',
+          handleSize: '80%',
+          handleStyle: {
+            color: '#fff',
+            shadowBlur: 3,
+            shadowColor: 'rgba(0, 0, 0, 0.6)',
+            shadowOffsetX: 2,
+            shadowOffsetY: 2
+          }
+        }],
+        // x杞寸殑璁剧疆
         xAxis: {
           type: 'category',
           boundaryGap: false,
-          data: ['鍛ㄤ竴', '鍛ㄤ簩', '鍛ㄤ笁', '鍛ㄥ洓', '鍛ㄤ簲', '鍛ㄥ叚', '鍛ㄦ棩'],
-          axisLabel: {
+          data: ['12:00:01', '12:00:02', '12:00:03', '12:00:04', '12:00:05', '12:00:06', '12:00:07'],
+          axisLabel: { // x杞村叏閮ㄦ樉绀�
+            rotate: 20,
+            interval: 0,
             textStyle: {
-              color: '#7edae8' // 鍧愭爣鐨勫瓧浣撻鑹�
+              color: '#fff'
             }
           },
-          axisLine: {
-            show: false, // 闅愯棌鍧愭爣杞�
+          splitLine: { // 缃戞牸鍨傜洿绾夸负铏氱嚎
+            show: true,
             lineStyle: {
-              color: '#00eeff' // 鍧愭爣杞寸殑棰滆壊
+              type: 'dashed'
+            }
+          },
+          axisTick: { // x 杞村埢搴︽樉绀�
+            show: false
+          },
+          axisLine: {
+            lineStyle: {
+              color: '#FFFFFF',
+              width: 1 // 杩欓噷鏄负浜嗙獊鍑烘樉绀哄姞涓婄殑
             }
           }
         },
+        // Y 杞寸殑璁剧疆
         yAxis: [{
           type: 'value',
+          // name: yname, // 鍚庢湡鍥炬爣Y杞存樉绀哄崟浣�
+          name: '娴撳害(mg/m鲁)',
           axisLabel: {
+            formatter: '{value}',
             textStyle: {
-              color: '#7edae8' // 鍧愭爣鐨勫瓧浣撻鑹�
+              color: '#fff' // 鍧愭爣鐨勫瓧浣撻鑹�
             }
           },
+          axisPointer: {
+            snap: true // 鑷姩鍚搁檮鏈�杩戠殑鐐�
+          },
+          splitLine: {
+            show: false // y杞� 缃戞牸绾夸笉鏄剧ず
+          },
           axisLine: {
-            show: false, // 闅愯棌鍧愭爣杞�
             lineStyle: {
-              color: '#00eeff' // 鍧愭爣杞寸殑棰滆壊
+              color: '#ffffff', // 鍧愭爣杞寸殑棰滆壊
+              width: 1
             }
           }
         }],
         series: [
           {
-            name: '閭欢钀ラ攢',
+            name: '姘哀鍖栫墿',
             type: 'line',
             stack: '鎬婚噺',
             data: [120, 132, 101, 134, 90, 230, 210]
           },
           {
-            name: '鑱旂洘骞垮憡',
-            type: 'line',
-            stack: '鎬婚噺',
-            data: [220, 182, 191, 234, 290, 330, 310]
-          },
-          {
-            name: '瑙嗛骞垮憡',
+            name: '浜屾哀鍖栫~',
             type: 'line',
             stack: '鎬婚噺',
             data: [150, 232, 201, 154, 190, 330, 410]
           },
           {
-            name: '鐩存帴璁块棶',
+            name: '鐑熷皹',
             type: 'line',
             stack: '鎬婚噺',
             data: [320, 332, 301, 334, 390, 330, 320]
           },
           {
-            name: '鎼滅储寮曟搸',
+            name: '搴熸皵娴侀噺',
             type: 'line',
             stack: '鎬婚噺',
             data: [820, 932, 901, 934, 1290, 1330, 1320]
@@ -115,50 +161,48 @@
 </script>
 
 <style scoped lang="less">
-.win {
-  width: 100%;
-  height: 100%;
-  position: relative;
-  //display: inline-block;
-  background-color: rgba(33, 41, 69,0.9);
-}
-.border_corner{
-  z-index: 2500;
-  position: absolute;
-  width: 10px;
-  height: 10px;
-  background: rgba(0,0,0,0);
-  border: 1.5px solid #47d5ea;
-}
-.border_corner_left_top{
-  top: 0;
-  left: 0;
-  border-right: none;
-  border-bottom: none;
-}
-.border_corner_right_top{
-  top: 0;
-  right: 0;
-  border-left: none;
-  border-bottom: none;
-}
-.border_corner_left_bottom{
-  bottom: 0;
-  left: 0;
-  border-right: none;
-  border-top: none;
-}
-.border_corner_right_bottom{
-  bottom: 0;
-  right: 0;
-  border-left: none;
-  border-top: none;
-}
-.main {
-  width: 100%;
-  height: 100%;
-  .main-echarts{
-    border: 1px solid #396d83;
-  }
-}
+    .win {
+        /*width: 100%;*/
+        /*height: 100%;*/
+        position: relative;
+        //display: inline-block;
+        background-color: rgba(33, 41, 69,0.9);
+    }
+    #echarts{
+        width: 600px;
+        height: 260px;
+    }
+    .border_corner{
+        z-index: 2500;
+        position: absolute;
+        width: 14px;
+        height: 14px;
+        background: rgba(0,0,0,0);
+        border: 2px solid #47d5ea;
+    }
+    .border_corner_left_top{
+        top: 0;
+        left: 0;
+        border-right: none;
+        border-bottom: none;
+    }
+    .border_corner_right_top{
+        top: 0;
+        right: 0;
+        border-left: none;
+        border-bottom: none;
+    }
+    .border_corner_left_bottom{
+        bottom: 0;
+        left: 0;
+        border-right: none;
+        border-top: none;
+        border-bottom-left-radius: 4px;
+    }
+    .border_corner_right_bottom{
+        bottom: 0;
+        right: 0;
+        border-left: none;
+        border-top: none;
+    }
 </style>
diff --git a/src/components/BaseNav/PublicBounced/GasComponents/GasTable.vue b/src/components/BaseNav/PublicBounced/GasComponents/GasTable.vue
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/src/components/BaseNav/PublicBounced/GasComponents/GasTable.vue
diff --git a/src/components/BaseNav/PublicBounced/PublicBounced.vue b/src/components/BaseNav/PublicBounced/PublicBounced.vue
index 0b78c9c..fbc8c8c 100644
--- a/src/components/BaseNav/PublicBounced/PublicBounced.vue
+++ b/src/components/BaseNav/PublicBounced/PublicBounced.vue
@@ -98,6 +98,5 @@
       height: 100%;
     }
   }
-
 }
 </style>
diff --git a/src/components/BaseNav/WasteWater/WasteWater.js b/src/components/BaseNav/WasteWater/WasteWater.js
index c2f3d6b..05f7b50 100644
--- a/src/components/BaseNav/WasteWater/WasteWater.js
+++ b/src/components/BaseNav/WasteWater/WasteWater.js
@@ -52,16 +52,17 @@
       const Icon = new WasteWaterIcon({ iconUrl: iconUrl })
       // let url = Icon.options.iconUrl
 
-      const marker = this.L.marker.magic([positionX, positionY], { icon: Icon, magic: 'vanishIn' })
+      // const marker = this.L.marker.magic([positionX, positionY], { icon: Icon, magic: 'vanishIn' }) // 甯︽樉绀哄姩鐢�
+      const marker = this.L.marker([positionX, positionY], { icon: Icon })
 
-      marker.bindPopup(() => {
-        return this.WasteWaterPopup.$el
-      }, {
-        className: 's-map-popup',
-        minWidth: 1000,
-        closeButton: true,
-        autoClose: false
-      })
+      // marker.bindPopup(() => {
+      //   return this.WasteWaterPopup.$el
+      // }, {
+      //   className: 's-map-popup',
+      //   minWidth: 1000,
+      //   closeButton: true,
+      //   autoClose: false
+      // })
       // 鍒掕繃鍑虹幇 灞曠ず鏁版嵁
       marker.bindTooltip(data[i].Name, {
         permanent: true,
@@ -74,7 +75,7 @@
         try {
           // console.log(e)
           this.EffectOfPulse(e.target.getLatLng())
-          this.WasteWaterPopup.setDate(data[i])
+          this.WasteWaterPopup.setData(data[i])
           return this.WasteWaterPopup.$el
         } catch (error) {
           console.log(error)
diff --git a/src/main.js b/src/main.js
index e4615a1..653b668 100644
--- a/src/main.js
+++ b/src/main.js
@@ -15,12 +15,13 @@
 import '@/utils/dialogDrag.js'
 import '@components/plugin/leaflet-measure-path/leaflet-measure-path.css'
 import '@components/plugin/leaflet-measure-path/leaflet-measure-path'
-
+const appConfig = require('@/app.config')
 Vue.config.productionTip = false
 
 Vue.use(ElementUI)
 Vue.prototype.$cancels = []
 Vue.prototype.L = L
+Vue.prototype.$config = appConfig
 Vue.prototype.$echarts = echarts // 鎸傝浇echarts
 // 娉ㄥ唽鎸囦护7
 // registerDirectives(Vue)
diff --git a/src/router/index.js b/src/router/index.js
index 32dae04..6bc1550 100644
--- a/src/router/index.js
+++ b/src/router/index.js
@@ -1,10 +1,11 @@
 import Vue from 'vue'
 import Router from 'vue-router'
 import { routes } from './routes'
+import { getToken } from '@/utils/navigation'
 import 'nprogress/nprogress.css'
 const appConfig = require('@/app.config')
-const { routeMode } = appConfig
-
+const { homeRouterName, loginRouteName, routeMode } = appConfig
+const LOGIN_PAGE_ROUTE_NAME = loginRouteName
 Vue.use(Router)
 const baseName = process.env.NODE_ENV === 'production' ? `/${appConfig.projectName}/` : '/'
 const router = new Router({
@@ -17,12 +18,32 @@
     cancel()
   })
   Vue.prototype.$cancels = []
+  const token = getToken()
+  if (!token && to.name !== LOGIN_PAGE_ROUTE_NAME) {
+    // 鏈櫥褰曚笖瑕佽烦杞殑椤甸潰涓嶆槸鐧诲綍椤�
+    next({
+      name: LOGIN_PAGE_ROUTE_NAME // 璺宠浆鍒扮櫥褰曢〉
+    })
+  } else if (!token && to.name === LOGIN_PAGE_ROUTE_NAME) {
+    // 鏈櫥闄嗕笖瑕佽烦杞殑椤甸潰鏄櫥褰曢〉
+    next() // 璺宠浆
+  } else if (token && to.name === LOGIN_PAGE_ROUTE_NAME) {
+    // 宸茬櫥褰曚笖瑕佽烦杞殑椤甸潰鏄櫥褰曢〉
+    next({
+      name: homeRouterName // 璺宠浆鍒癶omeName椤�
+    })
+  } else if (!token) {
+    next({
+      name: LOGIN_PAGE_ROUTE_NAME // 璺宠浆鍒扮櫥褰曢〉
+    })
+  } else {
+    next()
+  }
   // 涓嶉渶瑕佺櫥褰曡璇佺殑璺敱
   if (Object.hasOwnProperty.call(to.meta, 'noLoginIdentify') && to.meta.noLoginIdentify) {
     next()
-    return
   }
-  next()
+  // next()
 })
 router.beforeResolve((to, from, next) => {
   next()
diff --git a/src/router/map.js b/src/router/map.js
index 9372783..328884b 100644
--- a/src/router/map.js
+++ b/src/router/map.js
@@ -9,8 +9,10 @@
  * }
  */
 const MapTemplate = (r) => require.ensure([], () => r(require('../views/MapTemplate')), 'frame')
+const Login = (r) => require.ensure([], () => r(require('../views/Login')), 'frame')
 const routes = [
-  { path: '/mapTemplate', name: 'MapTemplate', meta: { statusBgc: 0 }, component: MapTemplate }
+  { path: '/mapTemplate', name: 'MapTemplate', meta: { statusBgc: 0 }, component: MapTemplate },
+  { path: '/Login', name: 'Login', meta: { statusBgc: 0 }, component: Login }
 ]
 
 // 鎵�鏈変笂闈㈠畾涔夌殑璺敱閮借鍐欏湪涓嬮潰鐨剅outes閲�
diff --git a/src/store/index.js b/src/store/index.js
index 1b3e167..2d18c38 100644
--- a/src/store/index.js
+++ b/src/store/index.js
@@ -1,6 +1,7 @@
 import Vue from 'vue'
 import Vuex from 'vuex'
 import map from './modules/map'
+import user from './modules/user'
 // import app from './modules/app'
 Vue.use(Vuex)
 
@@ -13,6 +14,7 @@
   },
   modules: {
     // app,
-    map
+    map,
+    user
   }
 })
diff --git a/src/store/modules/user.js b/src/store/modules/user.js
new file mode 100644
index 0000000..57ed576
--- /dev/null
+++ b/src/store/modules/user.js
@@ -0,0 +1,149 @@
+import $API from '../../api'
+import $http from '@/utils/axios'
+import { setToken, getToken, setAccount, getAccount } from '@/utils/navigation'
+// import { replaceUrlParams } from '@/utils/tools'
+
+const state = {
+  account: '',
+  userName: '',
+  userId: '',
+  avator: '',
+  orgUnitName: '',
+  orgUnitCode: '',
+  orgUnitLevel: '',
+  orgSectorName: '',
+  orgSectorCode: '',
+  isAdmin: null,
+  token: getToken(),
+  access: 0,
+  hasGetInfo: false
+}
+
+const mutations = {
+  setAvator (state, avator) {
+    state.avator = avator
+  },
+  setUserId (state, id) {
+    state.userId = id
+  },
+  setAccount (state, account) {
+    state.account = account
+    setAccount(account)
+  },
+  setUserName (state, name) {
+    state.userName = name
+  },
+  setOrgUnitName (state, orgUnitName) {
+    state.orgUnitName = orgUnitName
+  },
+  setOrgUnitCode (state, orgUnitCode) {
+    state.orgUnitCode = orgUnitCode
+  },
+  setOrgSectorName (state, orgSectorName) {
+    state.orgSectorName = orgSectorName
+  },
+  setOrgSectorCode (state, orgSectorCode) {
+    state.orgSectorCode = orgSectorCode
+  },
+  setOrgUnitLevel (state, orgUnitLevel) {
+    state.orgUnitLevel = orgUnitLevel
+  },
+  setAdmin (state, isAdmin) {
+    state.isAdmin = isAdmin
+  },
+  setAccess (state, access) {
+    state.access = access
+  },
+  setToken (state, token) {
+    state.token = token
+    setToken(token)
+  },
+  setHasGetInfo (state, status) {
+    state.hasGetInfo = status
+  }
+}
+
+const actions = {
+  // 鐧诲綍
+  handleLogin ({ commit }, { account, password }) {
+    return new Promise((resolve, reject) => {
+      $http.post($API.GetUser, {
+        userName: account,
+        passWord: password
+      }).then(data => {
+        console.log(data)
+        commit('setToken', '12345668')
+        commit('setAccount', account)
+        resolve()
+      }).catch(err => {
+        reject(err)
+      })
+    })
+  },
+  // 閫�鍑虹櫥褰�
+  handleLogOut ({ state, commit }) {
+    return new Promise((resolve, reject) => {
+      commit('setToken', '')
+      commit('setAccount', '')
+      commit('setAccess', 0)
+      resolve()
+    })
+  },
+  // 鑾峰彇鐢ㄦ埛淇℃伅
+  getUserInfo ({ state, commit, dispatch }) {
+    const account = getAccount() || 'admin'
+    return new Promise((resolve, reject) => {
+      try {
+        $http.get($API.AAA_GET_USER_INFO, {
+          token: state.token
+        }).then(response => {
+          const data = response.data
+          commit('setAvator', data.avator)
+          // commit('setOrgUnitName', data.orgUnitName)
+          // commit('setOrgUnitCode', data.orgUnitCode)
+          commit('setUserId', data.userId)
+          commit('setAccess', data.access)
+          commit('setHasGetInfo', true)
+          if (account === 'tianjun') {
+            // admin鐨勫満鏅蛋mock
+            commit('setAccount', data.account)
+            commit('setUserName', data.userName)
+            resolve(data)
+          } else {
+            $http.get($API.MDM_GET_USER_ACCOUNT_DETAIL, {
+              account: account
+            }).then(response => {
+              const d = response.data
+              if (d) {
+                commit('setAccount', d.unifiedIdentityAcc)
+                commit('setUserName', d.userName)
+                // 鑾峰彇鐢ㄦ埛鍚庯紝鑾峰彇缁勭粐鏈烘瀯
+                dispatch('getUserOrgInfo').then(() => {
+                  resolve(d)
+                }).catch(err => {
+                  alert('涓嶈兘鑾峰彇鐢ㄦ埛缁勭粐鏈烘瀯')
+                  reject(err)
+                })
+              } else {
+                commit('setToken', '')
+                commit('setAccount', '')
+                commit('setAccess', 0)
+                resolve(false)
+              }
+            })
+          }
+        }).catch(err => {
+          reject(err)
+        })
+      } catch (error) {
+        reject(error)
+      }
+    })
+  }
+}
+
+export default {
+  state,
+  mutations,
+  actions
+}
diff --git a/src/utils/axios.js b/src/utils/axios.js
index 7f944e8..d42baf4 100644
--- a/src/utils/axios.js
+++ b/src/utils/axios.js
@@ -83,8 +83,7 @@
 
 // 鍒涘缓axios瀹炰緥
 const Service = axios.create({
-  timeout: 5000,
-  baseURL: 'http://10.246.162.140:8080/'
+  timeout: 1000
 })
 
 const CancelToken = axios.CancelToken
@@ -140,14 +139,14 @@
 // respone鎷︽埅鍣�
 Service.interceptors.response.use(
   response => {
-    // const res = response.data
-    // if (Number(res.code) !== 200 && Number(res.code) !== 0) {
-    //   $T.warning(res.message)
-    //   return Promise.reject(res.message)
-    // } else {
-    //   return res
-    // }
-    return response.data
+    const res = response.data
+    /* if (Number(res.code) !== 200 && Number(res.code) !== 0) {
+      $T.warning(res.message)
+      return Promise.reject(res.message)
+    } else {
+      return res
+    } */
+    return res
   },
   error => {
     if (error.message && error.message.includes('timeout')) {
diff --git a/src/utils/navigation.js b/src/utils/navigation.js
new file mode 100644
index 0000000..1c09633
--- /dev/null
+++ b/src/utils/navigation.js
@@ -0,0 +1,167 @@
+import Cookies from 'js-cookie'
+const appConfig = require('@/app.config')
+const { cookieExpires } = appConfig
+
+export const TOKEN_KEY = 'token'
+export const ACCOUNT_KEY = 'account'
+export const setToken = (token) => {
+  Cookies.set(TOKEN_KEY, token, { expires: cookieExpires || 1 })
+}
+
+export const getToken = () => {
+  const token = Cookies.get(TOKEN_KEY)
+  if (token !== 'undefined') return token
+  else return false
+}
+
+export const setAccount = (account) => {
+  Cookies.set(ACCOUNT_KEY, account, { expires: cookieExpires || 1 })
+}
+
+export const getAccount = () => {
+  const account = Cookies.get(ACCOUNT_KEY)
+  if (account) return account
+  else return false
+}
+
+export const hasChild = (item) => {
+  return item.children && item.children.length !== 0
+}
+
+/**
+ * @description 鏈湴瀛樺偍鍜岃幏鍙栨爣绛惧鑸垪琛�
+ */
+export const setTagNavListToLocalstorage = list => {
+  localStorage.tagNaveList = JSON.stringify(list)
+}
+
+/**
+ * @returns {Array} 鍏朵腑鐨勬瘡涓厓绱犲彧鍖呭惈璺敱鍘熶俊鎭腑鐨刵ame, path, meta涓夐」
+ */
+export const getTagNavListFromLocalstorage = () => {
+  const list = localStorage.tagNaveList
+  return list ? JSON.parse(list) : []
+}
+
+/**
+ * @param {Array} routers 璺敱鍒楄〃鏁扮粍
+ * @description 鐢ㄤ簬鎵惧埌璺敱鍒楄〃涓璶ame涓篽ome鐨勫璞�
+ */
+export const getHomeRouter = (routers, homeName = 'Home') => {
+  let i = -1
+  const len = routers.length
+  let homeRoute = {}
+  while (++i < len) {
+    const item = routers[i]
+    if (item.children && item.children.length) {
+      const res = getHomeRouter(item.children, homeName)
+      if (res.name) return res
+    } else {
+      if (item.name === homeName) homeRoute = item
+    }
+  }
+  return homeRoute
+}
+
+/**
+ * @param {*} list 鐜版湁鏍囩瀵艰埅鍒楄〃
+ * @param {*} newRoute 鏂版坊鍔犵殑璺敱鍘熶俊鎭璞�
+ * @description 濡傛灉璇ewRoute宸茬粡瀛樺湪鍒欎笉鍐嶆坊鍔�
+ */
+export const getNewTagList = (list, newRoute) => {
+  const { name, path, meta } = newRoute
+  const newList = [...list]
+  if (newList.findIndex(item => item.name === name) >= 0) return newList
+  else newList.push({ name, path, meta })
+  return newList
+}
+
+/**
+ * @param {Number} times 鍥炶皟鍑芥暟闇�瑕佹墽琛岀殑娆℃暟
+ * @param {Function} callback 鍥炶皟鍑芥暟
+ */
+export const doCustomTimes = (times, callback) => {
+  let i = -1
+  while (++i < times) {
+    callback(i)
+  }
+}
+
+export const findNodeUpper = (ele, tag) => {
+  if (ele.parentNode) {
+    if (ele.parentNode.tagName === tag.toUpperCase()) {
+      return ele.parentNode
+    } else {
+      return findNodeUpper(ele.parentNode, tag)
+    }
+  }
+}
+
+export const findNodeUpperByClasses = (ele, classes) => {
+  const parentNode = ele.parentNode
+  if (parentNode) {
+    const classList = parentNode.classList
+    if (classList && classes.every(className => classList.contains(className))) {
+      return parentNode
+    } else {
+      return findNodeUpperByClasses(parentNode, classes)
+    }
+  }
+}
+
+export const findNodeDownward = (ele, tag) => {
+  const tagName = tag.toUpperCase()
+  if (ele.childNodes.length) {
+    let i = -1
+    const len = ele.childNodes.length
+    while (++i < len) {
+      const child = ele.childNodes[i]
+      if (child.tagName === tagName) return child
+      else return findNodeDownward(child, tag)
+    }
+  }
+}
+
+export const localSave = (key, value) => {
+  localStorage.setItem(key, value)
+}
+
+export const localRead = (key) => {
+  return localStorage.getItem(key) || ''
+}
+
+// scrollTop animation
+export const scrollTop = (el, from = 0, to, duration = 500, endCallback) => {
+  if (!window.requestAnimationFrame) {
+    window.requestAnimationFrame = (
+      window.webkitRequestAnimationFrame ||
+      window.mozRequestAnimationFrame ||
+      window.msRequestAnimationFrame ||
+      function (callback) {
+        return window.setTimeout(callback, 1000 / 60)
+      }
+    )
+  }
+  const difference = Math.abs(from - to)
+  const step = Math.ceil(difference / duration * 50)
+
+  const scroll = (start, end, step) => {
+    if (start === end) {
+      endCallback && endCallback()
+      return
+    }
+
+    let d = (start + step > end) ? end : start + step
+    if (start > end) {
+      d = (start - step < end) ? end : start - step
+    }
+
+    if (el === window) {
+      window.scrollTo(d, d)
+    } else {
+      el.scrollTop = d
+    }
+    window.requestAnimationFrame(() => scroll(d, end, step))
+  }
+  scroll(from, to, step)
+}
diff --git a/src/utils/tools.js b/src/utils/tools.js
index 0838a7f..f47703e 100644
--- a/src/utils/tools.js
+++ b/src/utils/tools.js
@@ -25,7 +25,16 @@
   })
   return arr
 }
-
+/**
+ * 鏍规嵁涓嶅悓鐨勫崗璁紝鏇挎崲env閰嶇疆鏂囦欢涓殑URL鍗忚
+ *
+ * @return {String}
+ */
+export function getSchemeHost () {
+  const protocol = window.location.protocol
+  const host = process.env.VUE_APP_API_HOST
+  return host.replace(/scheme/g, protocol)
+}
 /**
  * collection鏁版嵁杞崲涓烘爣鍑咼SON
  * @param obj collection鏁版嵁
diff --git a/src/views/Login.vue b/src/views/Login.vue
new file mode 100644
index 0000000..6d8a076
--- /dev/null
+++ b/src/views/Login.vue
@@ -0,0 +1,124 @@
+<template>
+    <div class="login-wrap" @keydown.enter="handleSubmit">
+        <div class="content">
+            <el-card class="box-card">
+                <div slot="header" class="login-title clearfix">
+                    <el-icon name="star-on"></el-icon>
+                    <span>娆㈣繋鐧诲綍</span>
+                </div>
+
+                <div class="form-content">
+                    <el-form :model="form" :rules="formRules" ref="loginForm" class="demo-ruleForm">
+                        <el-form-item prop="account">
+                            <el-input size="small" v-model="form.account" placeholder="璇疯緭鍏ョ敤鎴峰悕">
+                                <el-button slot="prepend" icon="el-icon-search" style="padding: 12px 10px;"></el-button>
+                            </el-input>
+                        </el-form-item>
+                        <el-form-item prop="password">
+                            <el-input size="small" type="password" v-model="form.password" auto-complete="off"
+                                      placeholder="璇疯緭鍏ュ瘑鐮�">
+                                <el-button slot="prepend" icon="el-icon-search" style="padding: 12px 10px;"></el-button>
+                            </el-input>
+                        </el-form-item>
+                        <el-form-item>
+                            <el-button size="small" type="primary" @click="handleSubmit" style="width: 100%">鐧诲綍
+                            </el-button>
+                        </el-form-item>
+                    </el-form>
+                </div>
+                <p class="login-tip">杈撳叆浠绘剰鐢ㄦ埛鍚嶅拰瀵嗙爜鍗冲彲</p>
+            </el-card>
+        </div>
+    </div>
+</template>
+
+<script>
+import { mapActions } from 'vuex'
+
+export default {
+  name: 'Login',
+  components: {},
+  data () {
+    return {
+      form: {
+        account: 'admin',
+        password: 'admin'
+      },
+      formRules: {
+        account: [
+          { required: true, message: '璐﹀彿涓嶈兘涓虹┖', trigger: 'blur' }
+        ],
+        password: [
+          { required: true, message: '瀵嗙爜涓嶈兘涓虹┖', trigger: 'blur' }
+        ]
+      }
+    }
+  },
+  methods: {
+    ...mapActions([
+      'handleLogin',
+      'getUserInfo'
+    ]),
+    handleSubmit () {
+      this.$refs.loginForm.validate((valid) => {
+        if (valid) {
+          this.handleLogin({
+            account: this.form.account,
+            password: this.form.password
+          }).then(response => {
+            this.$router.push({
+              name: this.$config.homeRouterName
+            })
+          })
+        }
+      })
+    }
+  }
+}
+</script>
+
+<style lang="less">
+    .login-wrap {
+        position: relative;
+        background-image: url('../assets/images/login-page/page1.jpg');
+        background-size: cover;
+        background-position: center;
+        width: 100%;
+        height: 100%;
+        overflow: hidden;
+
+        .content {
+            position: absolute;
+            right: 160px;
+            top: 25%;
+        }
+        .box-card {
+            width: 300px;
+        }
+        .clearfix:before,
+        .clearfix:after {
+            display: table;
+            content: "";
+        }
+        .clearfix:after {
+            clear: both
+        }
+        .form-content {
+            padding: 10px 0 0;
+        }
+        .login-title {
+            width: 100%;
+            font-size: 14px;
+            color: #1c2438;
+            font-weight: 700;
+            overflow: hidden;
+            text-overflow: ellipsis;
+            white-space: nowrap;
+        }
+        .login-tip {
+            font-size: 10px;
+            text-align: center;
+            color: #c3c3c3;
+        }
+    }
+</style>

--
Gitblit v1.8.0