index.vue 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255
  1. <template>
  2. <div class="login">
  3. <main class="login-container">
  4. <div class="title">登录</div>
  5. <el-form ref="loginForm" :model="form" :rules="rules" label-position="right">
  6. <el-form-item prop="server_address" label="服务器地址">
  7. <el-input v-model="form.server_address" placeholder="请输入服务器地址" @change="updateServerAddress" />
  8. </el-form-item>
  9. <el-form-item prop="user_name" label="用户名">
  10. <el-input v-model="form.user_name" />
  11. </el-form-item>
  12. <el-form-item prop="password" label="密码">
  13. <el-input v-model="form.password" type="password" show-password />
  14. </el-form-item>
  15. <el-form-item prop="user_type" label="用户类型">
  16. <el-radio-group v-model="form.user_type">
  17. <el-radio label="USER">机构用户</el-radio>
  18. <el-radio label="ORG_MANAGER">机构管理员</el-radio>
  19. <el-radio label="ADMIN">系统管理员</el-radio>
  20. </el-radio-group>
  21. </el-form-item>
  22. <el-form-item>
  23. <el-button class="submit" type="primary" @click="signIn">登录</el-button>
  24. </el-form-item>
  25. <el-form-item>
  26. <div class="protocol">
  27. <span>
  28. <el-checkbox v-model="isAgree" /> 我已阅读并同意<span
  29. style="color: #4d78ff; cursor: pointer"
  30. @click="viewUserAgreement"
  31. >《用户协议》</span
  32. >
  33. </span>
  34. <span style="color: #4d78ff; cursor: pointer">忘记密码?| <a @click="goRegister">注册</a></span>
  35. </div>
  36. </el-form-item>
  37. </el-form>
  38. </main>
  39. <el-dialog
  40. :visible.sync="showUseragreement"
  41. width="80%"
  42. append-to-body
  43. :show-close="false"
  44. :close-on-click-modal="false"
  45. class="login-userAgree"
  46. >
  47. <userAgreement class="userAgree-login" :change-agreement="changeAgreement" />
  48. </el-dialog>
  49. </div>
  50. </template>
  51. <script>
  52. import md5 from 'md5';
  53. import { GetLogo } from '@/api/app';
  54. import { setConfig, getLocalStore, setLocalStore } from '@/utils/auth';
  55. import { getUserTypeToJump } from '@/router/guard';
  56. import { updateBaseURL } from '@/utils/http';
  57. import UserAgreement from './userAgreement.vue';
  58. export default {
  59. name: 'LoginPage',
  60. components: { UserAgreement },
  61. data() {
  62. return {
  63. isAgree: false, // 是否同意用户协议
  64. form: {
  65. user_type: 'USER',
  66. user_name: '',
  67. password: '',
  68. is_password_md5: 'true',
  69. server_address: getLocalStore('server_address') || '', // 服务器地址
  70. },
  71. rules: {
  72. user_name: [
  73. {
  74. required: true,
  75. message: '请输入用户名',
  76. trigger: 'blur',
  77. },
  78. ],
  79. password: [
  80. {
  81. required: true,
  82. message: '请输入密码',
  83. trigger: 'blur',
  84. },
  85. ],
  86. },
  87. image_content_base64: '',
  88. showUseragreement: false,
  89. };
  90. },
  91. created() {
  92. this.getLogo();
  93. },
  94. methods: {
  95. getLogo() {
  96. GetLogo().then((res) => {
  97. setConfig(res);
  98. });
  99. },
  100. signIn() {
  101. this.$refs.loginForm.validate((valid) => {
  102. if (!valid) return false;
  103. if (!this.isAgree) {
  104. // "阅读并同意用户协议"
  105. this.$message.warning('阅读并同意用户协议');
  106. return;
  107. }
  108. let _form = { ...this.form, password: md5(this.form.password).toUpperCase() };
  109. this.$store
  110. .dispatch('user/login', _form)
  111. .then((user_type) => {
  112. this.$router.push({ path: getUserTypeToJump(user_type) });
  113. })
  114. .catch(() => {});
  115. });
  116. },
  117. // 注册
  118. goRegister() {
  119. this.$router.push({ path: '/register' });
  120. },
  121. viewUserAgreement() {
  122. this.showUseragreement = true;
  123. },
  124. changeAgreement(flag) {
  125. this.isAgree = flag;
  126. this.showUseragreement = false;
  127. },
  128. updateServerAddress() {
  129. setLocalStore('server_address', this.form.server_address);
  130. updateBaseURL();
  131. },
  132. },
  133. };
  134. </script>
  135. <style lang="scss" scoped>
  136. .login {
  137. position: relative;
  138. width: 100%;
  139. height: 100%;
  140. overflow: hidden;
  141. background: #2148c0 url('~@/assets/login/login-bg.png') no-repeat center center / cover;
  142. &-container {
  143. position: absolute;
  144. top: 50%;
  145. left: 50%;
  146. margin-top: -350px;
  147. margin-left: -200px;
  148. .title {
  149. margin-bottom: 28px;
  150. font-size: 24px;
  151. color: #fff;
  152. text-align: center;
  153. }
  154. :deep .el-form {
  155. max-width: 400px;
  156. padding: 24px 32px;
  157. margin: 0 auto;
  158. background-color: #fff;
  159. border-radius: 16px;
  160. &-item {
  161. &__label {
  162. margin-bottom: 4px;
  163. font-size: 18px;
  164. font-weight: bold;
  165. color: #000;
  166. &::before {
  167. display: none;
  168. }
  169. }
  170. }
  171. .el-input {
  172. &__inner {
  173. height: 40px;
  174. line-height: 40px;
  175. background-color: #fff;
  176. }
  177. }
  178. .verification-code {
  179. display: flex;
  180. flex-direction: column;
  181. label {
  182. text-align: left;
  183. }
  184. .el-input {
  185. width: calc(100% - 112px);
  186. margin-right: 10px;
  187. }
  188. .el-image {
  189. height: 38px;
  190. vertical-align: bottom;
  191. cursor: pointer;
  192. }
  193. }
  194. .submit {
  195. width: 100%;
  196. }
  197. .protocol {
  198. display: flex;
  199. justify-content: space-between;
  200. font-size: 12px;
  201. color: #000;
  202. }
  203. .el-form-item--small.el-form-item:last-child {
  204. margin-bottom: 0;
  205. }
  206. }
  207. .not-tips {
  208. margin-top: 20px;
  209. font-size: 12px;
  210. color: #fff;
  211. text-align: center;
  212. cursor: pointer;
  213. }
  214. }
  215. }
  216. </style>
  217. <style lang="scss">
  218. .login-userAgree {
  219. .el-dialog {
  220. height: 70%;
  221. border-radius: 8px;
  222. }
  223. .el-dialog__header {
  224. padding: 0;
  225. }
  226. .el-dialog__body {
  227. height: 100%;
  228. padding: 0;
  229. border-radius: 8px;
  230. box-shadow: 0 4px 4px rgba(0, 0, 0, 25%);
  231. }
  232. }
  233. </style>