Login.vue 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. <!--登录界面-->
  2. <template>
  3. <div class="login" :style="{backgroundColor: `#${loginJson[0].BrackgroupStr.slice(3)}`}">
  4. <section class="login-content"
  5. :style="{
  6. width: loginJson[0].Width + 'px',
  7. height: loginJson[0].Height + 'px',
  8. left:loginJson[0].Left + 'px',
  9. top:loginJson[0].Top + 'px',
  10. zIndex: loginJson[0].ZIndex,
  11. border: `1px solid #${loginJson[0].BorderStr.slice(3)}`,
  12. backgroundColor: `#${loginJson[0].ForegroundStr.slice(3)}`}"
  13. >
  14. <h2>用户登录</h2>
  15. <el-form :model="ruleForm" status-icon :rules="rules" ref="ruleForm" label-width="55px" class="login-form">
  16. <el-form-item label="账号" prop="username">
  17. <el-input v-model="ruleForm.username" prefix-icon="el-icon-user"></el-input>
  18. </el-form-item>
  19. <el-form-item label="密码" prop="password">
  20. <el-input type="password" v-model="ruleForm.password" autocomplete="off" prefix-icon="el-icon-lock"></el-input>
  21. </el-form-item>
  22. <el-form-item>
  23. <el-button :style="{backgroundColor: `#${loginJson[0].BTNForegroundStr.slice(3)}`}" type="primary" @click="submitForm('ruleForm')">提交</el-button>
  24. <el-button :style="{backgroundColor: `#${loginJson[0].BTNForegroundStr.slice(3)}`}" type="primary" @click="resetForm('ruleForm')">重置</el-button>
  25. </el-form-item>
  26. </el-form>
  27. </section>
  28. </div>
  29. </template>
  30. <script>
  31. import {mapState} from 'vuex'
  32. import {reqLogin} from "../api"
  33. import storageUtils from "../../utils/storageUtils"
  34. export default {
  35. data() {
  36. const checkUsername = (rule, value, callback) => {
  37. if (!value) {
  38. return callback(new Error('用户名不能为空'))
  39. }
  40. }
  41. const validatePasswrod = (rule, value, callback) => {
  42. if (value === '') {
  43. callback(new Error('请输入密码'))
  44. }
  45. }
  46. return {
  47. ruleForm: {
  48. username: '',
  49. password: '',
  50. },
  51. rules: {
  52. username: [
  53. { validator: checkUsername, trigger: 'blur' }
  54. ],
  55. password: [
  56. { validator: validatePasswrod, trigger: 'blur' }
  57. ]
  58. }
  59. }
  60. },
  61. computed: {
  62. ...mapState(['loginJson'])
  63. },
  64. methods: {
  65. async submitForm() {
  66. const {username,password} = this.ruleForm
  67. if(username === '' || password === ''){
  68. this.$message.warning('请输入用户名和密码!')
  69. return
  70. }
  71. const userInfo = {name:username,password}
  72. // 模拟登录
  73. /*if(username === 'admin' && password === '123'){
  74. // 将user保存到vuex的state,同时保存到本地
  75. this.$store.dispatch('saveUser', userInfo)
  76. // 跳转到管理界面
  77. this.$router.replace('/admin')
  78. }else {
  79. this.$message.error('用户名或密码错误!')
  80. }*/
  81. // 请求登录
  82. const res = await reqLogin(userInfo)
  83. if(res.token){
  84. // 将user保存到vuex的state,同时保存到本地
  85. this.$store.dispatch('saveUser', userInfo)
  86. // 将token保存到会议存储
  87. storageUtils.saveToken(res.token)
  88. // 跳转到管理界面
  89. this.$router.replace('/admin')
  90. }else {
  91. this.$message.error('用户名或密码错误!')
  92. }
  93. },
  94. resetForm(formName) {
  95. this.$refs[formName].resetFields()
  96. }
  97. }
  98. }
  99. </script>
  100. <style lang="less">
  101. html,body {
  102. margin:0;
  103. padding:0;
  104. .login {
  105. width:100vw;
  106. height: 100vh;
  107. background-size: 100% 100%;
  108. position: relative;
  109. .login-content {
  110. position: absolute;
  111. h2 {
  112. text-align: center;
  113. font-weight:bold;
  114. margin-bottom: 20px;
  115. }
  116. .el-input {
  117. width:90%;
  118. }
  119. .login-form {
  120. .login-form-button {
  121. width: 100%;
  122. }
  123. }
  124. }
  125. }
  126. }
  127. </style>