浏览代码

[EF] 登录页

chenxr3 4 年之前
父节点
当前提交
c56ba6a186

+ 13 - 0
security-protection-platform/src/api/login/index.js

@ -0,0 +1,13 @@
1
import http from '@/http'
2
3
const { $default } = http
4
5
const api = {
6
  // 出勤(饼状图)
7
  doLogin (data) {
8
    return $default.post('/sp/login/login', data).then(resp => {
9
      return resp.data
10
    })
11
  }
12
}
13
export default api

二进制
security-protection-platform/src/assets/images/loginbg.png


二进制
security-protection-platform/src/assets/images/verifiyCode.jpg


+ 3 - 1
security-protection-platform/src/conf/axios.config.js

@ -39,7 +39,9 @@ const conf = {
39 39
  },
40 40
  root: {
41 41
    default: {
42
      baseURL: 'http://10.19.90.34:8018'
42
      // baseURL: 'http://10.19.90.34:8018'
43
      // baseURL: 'http://localhost:8018'
44
      baseURL: '/'
43 45
    },
44 46
    picurl: {
45 47
      baseURL: 'http://10.19.90.34:19000/tool-image/'

+ 154 - 0
security-protection-platform/src/modules/login/index.vue

@ -0,0 +1,154 @@
1
<template>
2
  <div :style="`background-image: url(${loginbg})`" class="index" style="overflow:hidden;" @keydown.enter="onLoginButtonClick">
3
    <div class="user-form-box">
4
      <div class="from">
5
        <h2 class="hello">
6
          您好,
7
        </h2>
8
        <h3 class="welcome">欢迎登录 <span class="system-name">AISI安防一体化管理平台</span></h3>
9
        <t-form ref="loginForm" :model="loginForm" :rules="loginFormRules">
10
          <t-form-item prop="userName">
11
            <t-input v-model="loginForm.userName" placeholder="admin" icon="user-outline" >
12
            </t-input>
13
          </t-form-item>
14
          <t-form-item prop="password">
15
            <t-input v-model="loginForm.password" placeholder="Abc@1234" type="password" icon="lock-outline" >
16
            </t-input>
17
          </t-form-item>
18
          <t-form-item prop="verifyCode">
19
            <t-input v-model="loginForm.verifyCode"
20
                     placeholder="请输入验证码" >
21
              <img slot="append"
22
                   :src="verifiyCode"
23
                   title="点击以刷新验证码"
24
                   style="height:30px; margin: 0 -12px;cursor:pointer"
25
                   @click="onVerifiyCodeClick"/>
26
            </t-input>
27
          </t-form-item>
28
          <t-form-item class="mb-0">
29
            <t-button :loading="loging"
30
                      color="primary"
31
                      block
32
                      @click="onLoginButtonClick">
33
              <span v-if="!loging">登录</span>
34
              <span v-else>正在登录...</span>
35
            </t-button>
36
          </t-form-item>
37
        </t-form>
38
      </div>
39
    </div>
40
  </div>
41
</template>
42
43
<script>
44
import loginbg from '@/assets/images/loginbg.png'
45
import verifiyCode from '@/assets/images/verifiyCode.jpg'
46
import loginapi from '@/api/login'
47
48
export default {
49
  filters: {
50
  },
51
  components: {
52
  },
53
  data() {
54
    return {
55
      loginbg: loginbg,
56
      loging: false,
57
      rememberMe: false,
58
      verifiyCode: verifiyCode,
59
      loginForm: {
60
        userName: 'admin',
61
        password: 'Abc@1234',
62
        verifyCode: 'zubk'
63
      },
64
      loginFormRules: {
65
        userName: [
66
          { required: true, message: '用户名不能为空', trigger: 'blur' }
67
        ],
68
        password: [
69
          { required: true, message: '密码不能为空', trigger: 'blur' }
70
        ],
71
        verifyCode: [
72
          { required: true, message: '验证码不能为空', trigger: 'blur' }
73
        ]
74
      }
75
    }
76
  },
77
  computed: {
78
  },
79
  mounted () {
80
  },
81
  methods: {
82
    onVerifiyCodeClick() {
83
    },
84
    onLoginButtonClick () {
85
      if (this.loging) {
86
        return
87
      }
88
      this.loging = true
89
      this.$refs.loginForm.validate((valid) => {
90
        if (valid) {
91
          loginapi.doLogin({userCode: this.loginForm.userName, passWord: this.loginForm.password}).then((data) => {
92
            this.$store.commit('setLogged', true)
93
            if (this.rememberMe) {
94
              localStorage.setItem('userName', data.userName)
95
            } else {
96
              localStorage.removeItem('userName')
97
            }
98
            this.$router.push({ name: 'dashboard' })
99
          }).catch((e) => {
100
            this.loging = false
101
            this.$Message.danger(e)
102
          })
103
        } else {
104
          this.loging = false
105
          this.$Message.danger(this.$t('aidp.common.input_incorrect', { field: this.$t('aidp.account.username') + this.$t('aidp.common.or') + this.$t('aidp.account.password') }))
106
        }
107
      })
108
    }
109
  }
110
}
111
</script>
112
113
<style lang="scss">
114
.index{
115
  height:100vh;
116
  -moz-background-size:100% 100%;
117
  background-size:100% 100%;
118
  .user-form-box{
119
    padding: 20px 40px 20px 40px;
120
    background-color: #003561;
121
    position:fixed;
122
    left:70%;
123
    top:20%;
124
    width: 25%;
125
    height: 65%;
126
    .from{
127
      width: 100%;
128
      height: 100%;
129
      .hello {
130
        height:36px;
131
        font-size:26px;
132
        font-weight:500;
133
        color: white;
134
        line-height:36px;
135
        margin-bottom: 4px;
136
      }
137
      .welcome {
138
        height:36px;
139
        font-size:14px;
140
        font-weight:500;
141
        color:rgba(0,0,0,1);
142
        line-height:36px;
143
        margin-bottom: 24px;
144
        color: white;
145
      }
146
      .system-name {
147
        font-size: 14px;
148
        font-weight: 500;
149
        color: #0079BE;
150
      }
151
    }
152
  }
153
}
154
</style>

+ 12 - 12
security-protection-platform/src/modules/videoSurveillance/index.vue

@ -86,19 +86,19 @@ export default {
86 86
        let start = document.getElementsByClassName('vjs-play-control vjs-control vjs-button')
87 87
        let volume = document.getElementsByClassName('vjs-volume-panel vjs-control vjs-volume-panel-horizontal')
88 88
        let text = document.getElementsByClassName('vjs-live-control vjs-control')
89
        time.forEach(item => {
90
          item.remove()
91
        })
92
        start.forEach(item => {
93
          item.remove()
94
        })
95
        volume.forEach(item => {
96
          item.remove()
97
        })
98
        text.forEach(item => {
99
          item.remove()
100
        })
101 89
        bars.forEach((item, index) => {
90
          time.forEach(item => {
91
            item.remove()
92
          })
93
          start.forEach(item => {
94
            item.remove()
95
          })
96
          volume.forEach(item => {
97
            item.remove()
98
          })
99
          text.forEach(item => {
100
            item.remove()
101
          })
102 102
          let txt = document.createElement('span')
103 103
          txt.innerHTML = '集控室(人脸识别)'
104 104
          txt.style.marginLeft = '12px'

+ 26 - 1
security-protection-platform/src/router.js

@ -27,7 +27,32 @@ export default () => {
27 27
  router.beforeEach(async(to, from, next) => {
28 28
    // TGlobalLoading.start()
29 29
    // const accessRoutes = await store.dispatch('permission/generateRoutes', 'user')
30
    next()
30
    /*
31
     * 在每次视图切换时检查当前用户是否处于登
32
     * 录状态,如果没有登录则跳转到登录视图
33
     * 注意此时是调用getter中的isLogged获
34
     * 取客户端缓存的登录状态。
35
     * 真实登录状态仅在应用初始化和每次服务
36
     * 调用时检查即可,在视图(路由)切换时,
37
     * 为了提升视图切换性能(少请求一次服务),
38
     * 只需要调用getter中的isLogged进行简
39
     * 单客户端判断。
40
     * 参见src/frame.vue和src/store.js文件中的逻辑。
41
     */
42
    let isLogged = router.app.$options.store.getters.getLogged
43
    if (to.meta.ignoreAuth === true) {
44
      if (isLogged === true && to.path === '/login') {
45
        router.replace({ name: 'dashboard' })
46
      } else {
47
        next()
48
      }
49
    } else {
50
      if (isLogged === false) {
51
        router.replace({ name: 'login' })
52
      } else {
53
        next()
54
      }
55
    }
31 56
  })
32 57
33 58
  router.afterEach(() => {

+ 7 - 0
security-protection-platform/src/routes.js

@ -18,6 +18,13 @@ export const constantRoutes = [
18 18
    hidden: true
19 19
  },
20 20
  {
21
    name: 'login',
22
    path: '/login',
23
    component: () => import('./modules/login'),
24
    meta: { title: '登录页', icon: 'home', ignoreAuth: true},
25
    hidden: true
26
  },
27
  {
21 28
    name: 'dashboard',
22 29
    path: '/dashboard',
23 30
    redirect: '/',

+ 2 - 1
security-protection-platform/src/store/getters.js

@ -2,6 +2,7 @@ const getters = {
2 2
  sidebar: state => state.app.sidebar,
3 3
  size: state => state.app.size,
4 4
  device: state => state.app.device,
5
  permission_routes: state => state.permission.routes
5
  permission_routes: state => state.permission.routes,
6
  getLogged: state => state.isLogged
6 7
}
7 8
export default getters

+ 18 - 1
security-protection-platform/src/store/index.js

@ -21,7 +21,24 @@ export default () => {
21 21
  console.log(getters, modules)
22 22
  const store = new Vuex.Store({
23 23
    modules,
24
    getters
24
    getters,
25
    state: {
26
      currentTitle: '',
27
      screenIsLocked: false,
28
      lang: 'zh-CN',
29
      gistoken: '',
30
      map_param: {
31
        center: [33.597844, 123.647472],
32
        zoom: 11
33
      },
34
      reLoad: false,
35
      isLogged: false
36
    },
37
    mutations: {
38
      setLogged(state, token) {
39
        state.isLogged = token
40
      }
41
    }
25 42
  })
26 43
  console.log(store)
27 44
  return store