login.vue 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. <template>
  2. <div class="login">
  3. <div class="mo">
  4. <el-image
  5. style="width: 400px; height: 158px; margin-bottom: 10em"
  6. :src="logo"
  7. fit="fill"
  8. >
  9. <template #error>
  10. <div class="image-slot">
  11. <el-icon><Picture /></el-icon>
  12. </div>
  13. </template>
  14. </el-image>
  15. <el-form
  16. ref="formEle"
  17. :model="form"
  18. size="large"
  19. class="from"
  20. :rules="rules"
  21. >
  22. <el-form-item label="账号" prop="name">
  23. <el-input
  24. placeholder="请输入账号"
  25. @keyup.enter="onSubmit"
  26. v-model="form.name"
  27. />
  28. </el-form-item>
  29. <el-form-item label="密码" prop="pwd">
  30. <el-input
  31. @keyup.enter="onSubmit"
  32. placeholder="请输入密码"
  33. type="password"
  34. v-model="form.pwd"
  35. />
  36. </el-form-item>
  37. <el-form-item>
  38. <el-button type="primary" @click="onSubmit"> 登 录 </el-button>
  39. </el-form-item>
  40. </el-form>
  41. </div>
  42. </div>
  43. </template>
  44. <script setup>
  45. import { reactive, ref } from 'vue';
  46. import sha256 from 'sha256';
  47. import { useRouter, useRoute } from 'vue-router';
  48. import { login, getInfo } from '../../api/index';
  49. import logo from '../../assets/img/logo.png';
  50. const router = useRouter();
  51. const route = useRoute();
  52. const formEle = ref(null);
  53. const form = reactive({
  54. name: '',
  55. pwd: '',
  56. });
  57. const rules = {
  58. name: [{ required: true, message: '请输入用户名', trigger: 'blur' }],
  59. pwd: [{ required: true, message: '请输入密码', trigger: 'blur' }],
  60. };
  61. document.title = '陕西广电融媒体集团';
  62. async function onSubmit() {
  63. await formEle.value.validate((valid, fields) => {
  64. if (!valid) return console.log('error submit!', fields);
  65. login({
  66. data: {
  67. loginName: form.name,
  68. loginPassword: sha256(form.pwd),
  69. },
  70. }).then(r => {
  71. localStorage.setItem('token', r.token);
  72. getInfo({}).then(res => {
  73. let rule = res && res.userRole ? res.userRole.menus || [] : [];
  74. localStorage.setItem('menu', JSON.stringify(rule));
  75. router.replace({
  76. path: rule[0] ? rule[0].path : '',
  77. query: {
  78. ...route.query,
  79. },
  80. });
  81. });
  82. });
  83. });
  84. }
  85. </script>
  86. <style scoped>
  87. .login * {
  88. box-sizing: border-box;
  89. }
  90. .login {
  91. width: 100%;
  92. height: 100%;
  93. font-weight: 500;
  94. font-size: 12px;
  95. background-image: url(../../assets/img/0.jpg);
  96. background-size: 100% 100%;
  97. background-repeat: no-repeat;
  98. }
  99. .login .mo {
  100. float: right;
  101. height: 100%;
  102. width: 35%;
  103. max-width: 500px;
  104. text-align: center;
  105. background: #fff;
  106. padding: 5.5em 1.5em 1.5em 1.5em;
  107. }
  108. .login .el-form-item:last-child {
  109. margin: 0;
  110. }
  111. </style>
  112. <style>
  113. .login .el-form-item__label {
  114. height: 55px;
  115. color: #333;
  116. line-height: 55px;
  117. }
  118. .login .el-form-item__content .el-button {
  119. width: 100%;
  120. }
  121. </style>