login-form-banner.vue 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  1. <template>
  2. <div class="fx-row fx-end-cen login-form-container" style="padding: 40px 0;"
  3. :style="{backgroundImage: `url(${bannerSrc})`} ">
  4. <div class="bg-white rd8 login-form-block">
  5. <el-image style="height: 70px" fit="contain" :src="require('@/assets/logo/logo.png')"/>
  6. <div class="f-primary text-center mt15 mb20 bold f18" style="letter-spacing: 10px;">
  7. WELCOME
  8. </div>
  9. <el-form v-if="!isLogin" ref="loginForm" :model="loginForm" :rules="loginRules" class="login-form"
  10. style="width: auto;">
  11. <el-form-item prop="username">
  12. <el-input v-model="loginForm.username" type="text" auto-complete="off" placeholder="账号">
  13. <svg-icon slot="prefix" icon-class="user" class="el-input__icon input-icon"/>
  14. </el-input>
  15. </el-form-item>
  16. <el-form-item prop="password">
  17. <el-input
  18. v-model="loginForm.password"
  19. type="password"
  20. auto-complete="off"
  21. placeholder="密码"
  22. @keyup.enter.native="login"
  23. >
  24. <svg-icon slot="prefix" icon-class="password" class="el-input__icon input-icon"/>
  25. </el-input>
  26. </el-form-item>
  27. <div class="fx-row fx-end-cen mb20">
  28. <label class="pointer f-999 f14" @click="handleForgetPwd">忘记密码?</label>
  29. </div>
  30. <el-form-item style="width:100%;">
  31. <el-button :loading="loading" size="medium" type="primary" style="width:100%;"
  32. @click.native.prevent="login">
  33. <span v-if="!loading">登 录</span>
  34. <span v-else>登 录 中...</span>
  35. </el-button>
  36. </el-form-item>
  37. </el-form>
  38. <div v-if="isLogin">
  39. <div class="text-center">
  40. <div class="user-info-head">
  41. <img src="@/assets/images/profile.jpg" tclass="img-circle img-lg"
  42. style="border-radius:50%;width:80px;"/>
  43. </div>
  44. </div>
  45. <div>
  46. <div class="text-center mt20 mb10">
  47. {{ currentUser.userName }}
  48. </div>
  49. <p class="text-center" style="color:#999;font-size:14px">
  50. <span>{{ currentUser.nickName }} {{ schoolName }}</span>
  51. </p>
  52. </div>
  53. <div class="mt15 fx-row fx-bet-cen f13">
  54. <div v-if="false" class="fx-row ai-cen">
  55. <img class="icon16 mr5" src="@/assets/images/icon_jifen.png" alt/>
  56. {{ currentUser.points || 0 }}积分
  57. </div>
  58. <div class="fx-row ai-cen pointer f-blue" @click="handleGoUserCenter">
  59. <img class="icon16 mr5" src="@/assets/images/icon_user.png" alt/>
  60. 个人中心
  61. </div>
  62. <div class="fx-row ai-cen pointer f-red" @click="logout">
  63. <img class="icon16 mr5" src="@/assets/images/icon_back.png" alt/>
  64. 退出
  65. </div>
  66. </div>
  67. </div>
  68. </div>
  69. </div>
  70. </template>
  71. <script>
  72. /* TODO: 22.8.23 hht 这里为节省时间,全部由依赖注入主导,没有做逻辑分割 */
  73. import {mapGetters} from 'vuex'
  74. import loginCheckMixin from '@/views/index/blocks/index-login-interceptor-mixin'
  75. export default {
  76. mixins: [loginCheckMixin],
  77. name: 'login-form-banner',
  78. props: ['loginForm', 'loading'],
  79. inject: ['login', 'logout', 'handleForgetPwd'],
  80. data() {
  81. return {
  82. bannerSrc: require('@/assets/images/banner/index-banner.png'),
  83. loginRules: {
  84. relation: [
  85. {
  86. required: true,
  87. trigger: 'blur',
  88. message: '请选择学生端或者老师端'
  89. }
  90. ],
  91. grade: [
  92. {
  93. required: true,
  94. trigger: 'blur',
  95. message: '请选择学校类别'
  96. }
  97. ],
  98. username: [
  99. {
  100. required: true,
  101. trigger: 'blur',
  102. message: '用户名不能为空'
  103. }
  104. ],
  105. password: [
  106. {
  107. required: true,
  108. trigger: 'blur',
  109. message: '密码不能为空'
  110. }
  111. ],
  112. code: [
  113. {
  114. required: true,
  115. trigger: 'change',
  116. message: '验证码不能为空'
  117. }
  118. ]
  119. }
  120. }
  121. },
  122. computed: {
  123. ...mapGetters(['currentUser', 'schoolName', 'isLogin'])
  124. },
  125. methods: {
  126. validate: function (cb) {
  127. return this.$refs.loginForm.validate(cb)
  128. },
  129. async handleGoUserCenter() {
  130. await this.loginCheck()
  131. this.$router.push('/user/info/userinfo')
  132. }
  133. }
  134. }
  135. </script>
  136. <style scoped>
  137. .login-form-container {
  138. background: no-repeat center center;
  139. background-size: cover;
  140. }
  141. .login-form-block {
  142. width: 350px;
  143. height: 360px;
  144. padding: 15px 40px;
  145. margin-right: calc(50vw - 600px);
  146. }
  147. </style>