zhulizhen 5 years ago
parent
commit
b212b52f60
7 changed files with 286 additions and 3 deletions
  1. 89 0
      src/store/index.js
  2. 6 0
      src/tools/formatTime.js
  3. 28 0
      src/utils/axios.js
  4. 110 0
      src/utils/httputils.js
  5. 16 0
      src/utils/query.js
  6. 33 0
      src/utils/storage.js
  7. 4 3
      src/views/audit/index.vue

+ 89 - 0
src/store/index.js

@@ -0,0 +1,89 @@
+import Vue from 'vue'
+import Vuex from 'vuex'
+import { store as firstPage } from '../modules/firstPage'
+import { store as sacilitiedAndStaff } from '../modules/facilitiesAndStaff'
+import { store as environment } from '../modules/environment'
+import { store as safety } from '../modules/safety'
+import { store as energyConsumption } from '../modules/energyConsumption'
+import { store as performance } from '../modules/performance'
+import storage from '../utils/storage'
+import axios from 'axios'
+
+Vue.use(Vuex)
+const KEY_LAST_ROUTE = 'last_route'
+
+const store = new Vuex.Store({
+  state: {
+    name: '这里是全局的',
+    projects: [
+    ],
+    projectId: 'Pj4419000005',
+    comeUrl: '',
+    flag: 'wanke',
+    token: null,
+    lastRoute: null,
+    userInfo: {
+     
+    }
+  },
+  getters: {
+    flag: state => state.flag,
+    token: state => state.token,
+    lastRoute: state => {
+        if (!state.lastRoute) {
+            let lastRoute = storage.get(KEY_LAST_ROUTE)
+            if (lastRoute) {
+                state.lastRoute = lastRoute
+            }
+        }
+        return state.lastRoute
+    }
+  },
+  mutations: {
+    setProjects(state,projects){
+      state.projects = projects
+    },
+    setProId (state, projectId) {
+      console.log('yyyyyyyyyyyyyyyyy', projectId)
+      state.projectId = projectId
+    },
+    setComeUrl (state, comeUrl) {
+      state.comeUrl = comeUrl
+    },
+    setSsoToken: (state, val) => (state.token = val),
+    setLastRoute: (state, val) => {
+          state.lastRoute = val
+          storage.set(KEY_LAST_ROUTE, val)
+    },
+    setUserInfo(state, {userInfo}) {
+      state.userInfo = userInfo
+    }
+  },
+  actions: {
+    async loadUserInfo(context,{token}){
+      let res = await axios.get('/info-mng-backend/user/login', {params: {token: token}})
+      console.log(res)
+        if(res.data.result == 'success') {
+          // commit 到vuex, 供全局使用
+          context.commit('setUserInfo', {userInfo: res.data.data.user})
+          context.commit('setProjects', {projects: res.data.data.projects})
+          sessionStorage.setItem('token', token)
+        } else {
+          let ssoServer = 'http://sso.sagacloud.cn'
+          // let redirectUrl = 'http://47.94.89.44:8011/home/main'
+          let redirectUrl = window.location.protocol + '//' + window.location.host +'/home/main'
+          window.location.href = `${ssoServer}/login?redirectUrl=${redirectUrl}`
+        }
+    }
+  },
+  modules: {
+    firstPage,
+    sacilitiedAndStaff,
+    environment,
+    safety,
+    energyConsumption,
+    performance
+  }
+})
+
+export default store

+ 6 - 0
src/tools/formatTime.js

@@ -0,0 +1,6 @@
+const formatTime = (str) => {
+  return str.split("/")[0] + (str.split('/')[1] > 10 ? str.split('/')[1] : 0 + str.split('/')[1] )
+}
+module.exports = {
+    formatTime 
+}

+ 28 - 0
src/utils/axios.js

@@ -0,0 +1,28 @@
+import axios from 'axios'
+import store from '../store'
+// 添加请求拦截器
+axios.interceptors.request.use(function (config) {
+  // 在发送请求之前做些什么
+  config.withCredentials = true // 允许携带token ,这个是解决跨域产生的相关问题
+        let token = store.getters['token']
+        if (token) {
+            config.headers = {
+                'sso-token': token
+            }
+        }
+    return config
+}, function (error) {
+  // 对请求错误做些什么
+  return Promise.reject(error);
+});
+
+// 添加响应拦截器
+axios.interceptors.response.use(function (response) {
+  // 对响应数据做点什么
+  return response;
+}, function (error) {
+  // 对响应错误做点什么
+  return Promise.reject(error);
+});
+
+export default axios

+ 110 - 0
src/utils/httputils.js

@@ -0,0 +1,110 @@
+import axios from 'axios'
+import store from '@/store'
+
+var CancelToken = axios.CancelToken
+var cancel
+
+// 创建axios实例
+const axiosservice = axios.create({
+    timeout: 30000, // 请求超时时间
+    retry: 4, //重新请求次数
+    retryDelay: 1000, //重新请求的间隔
+    credentials: true, // 接口每次请求会跨域携带cookie
+    cancelToken: new CancelToken(function executor(c) {
+        // executor 函数接收一个 cancel 函数作为参数
+        cancel = c
+    })
+})
+
+axiosservice.interceptors.request.use(
+    config => {
+        config.withCredentials = true // 允许携带token ,这个是解决跨域产生的相关问题
+        let token = store.getters['token']
+        if (token) {
+            config.headers = {
+                'sso-token': token
+            }
+        }
+        return config
+    },
+    error => {
+        return Promise.reject(error)
+    }
+)
+
+axiosservice.interceptors.response.use(
+    function(res) {
+        //在这里对返回的数据进行处理
+        //console.log('axios interceptors res = ', res.status, res)
+        let resp = res.data
+        if (resp.result === 'unauthc') {
+            store.commit('logined', false)
+            this.$Modal.confirm({
+                title: '提示',
+                content: '<p>未登陆或登陆信息已失效, 是否重新登陆?</p>',
+                onOk: () => {
+                    this.$Message.info('重新登录');
+                },
+                onCancel: () => {
+                    this.$Message.info('取消重新登录');
+                }
+            })
+                .then(resp => {
+                    //console.log('--------------------------- confirm', resp)
+                    //router.push('/login')
+                    window.location.reload()
+                })
+                .catch(error => {
+                    //console.log('--------------------------- cancel', error)
+                    console.log('')
+                })
+        }
+        //console.log('axios interceptors resp2 = ', resp.success, resp.errorCode, resp.errorMessage, res)
+        return res
+    },
+    function(err) {
+        //Do something with response error
+        console.log('axios interceptors err = ', err)
+        return Promise.reject(err)
+    }
+)
+
+export default {
+    //获取cookie
+    getCookie(name) {
+        var arr,
+            reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)')
+        if ((arr = document.cookie.match(reg))) {
+            return unescape(arr[2])
+        } else {
+            /* 如果没有参数,那么就获取本域下的所有cookie */
+            return document.cookie
+        }
+    },
+
+    async getJson(url, params) {
+        try {
+            let response = await axiosservice({
+                url,
+                params,
+                method: 'get'
+            })
+            return response.data
+        } catch (err) {
+            throw err
+        }
+    },
+    async postJson(url, data) {
+        try {
+            let response = await axiosservice({
+                url,
+                data,
+                method: 'post'
+            })
+            return response.data
+        } catch (err) {
+            throw err
+        }
+    },
+    axios: axiosservice
+}

+ 16 - 0
src/utils/query.js

@@ -0,0 +1,16 @@
+function query(search) {
+  let obj = {}
+  const _search = search || location.search.split('?')[1]
+  if (_search) {
+    _search.split('&').forEach(i => {
+      let key = i.split('=')[0]
+      let value = i.split('=')[1]
+      obj[key] = value
+    })
+  }
+  return obj
+}
+
+export {
+  query
+}

+ 33 - 0
src/utils/storage.js

@@ -0,0 +1,33 @@
+const PREFIX = '_sagacloud_admin_store_'
+const sessionStorage = window.sessionStorage
+
+export default {
+    set(key, value, fn) {
+        let _value = null
+        try {
+            _value = JSON.stringify(value)
+        } catch (e) {
+            _value = value
+        }
+        sessionStorage.setItem(PREFIX + key, _value)
+        fn && fn()
+    },
+    get(key, fn) {
+        if (!key) {
+            return null
+        }
+        if (typeof key === 'object') {
+            throw new Error('key不能是一个对象。')
+        }
+        var _value = sessionStorage.getItem(PREFIX + key)
+        if (_value !== null) {
+            try {
+                return JSON.parse(_value)
+            } catch (e) {}
+        }
+        return _value
+    },
+    remove(key) {
+        sessionStorage.removeItem(PREFIX + key)
+    }
+}

+ 4 - 3
src/views/audit/index.vue

@@ -277,6 +277,7 @@ export default {
   }
   .appeal-right {
     flex: 1;
+    position: relative;
     .detailContainer {
       min-width: 762px;
       padding: 0 100px;
@@ -367,11 +368,11 @@ export default {
       }
     }
     .opinion {
+      width: 100%;
       background: rgba(247, 249, 250, 1);
       box-shadow: 0px -1px 8px 0px rgba(0, 0, 0, 0.08);
-      position: fixed;
-      bottom: 0;
-      right: 0;
+      position: absolute;
+      bottom:400px;
       padding: 16px 32px;
       .opinion-title {
         height: 24px;