index.vue 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. <template>
  2. <div class="login flex justify-center items-center h-full">
  3. <div class="login-box">
  4. <t-form
  5. ref="form"
  6. :data="formData"
  7. :label-width="0"
  8. class="login-form"
  9. :rules="rules"
  10. >
  11. <t-form-item name="loginName">
  12. <t-input
  13. v-model="formData.loginName"
  14. clearable
  15. placeholder="账号"
  16. size="large"
  17. >
  18. <template #prefix-icon>
  19. <desktop-icon />
  20. </template>
  21. </t-input>
  22. </t-form-item>
  23. <t-form-item name="password">
  24. <t-input
  25. v-model="formData.password"
  26. type="password"
  27. clearable
  28. placeholder="密码"
  29. size="large"
  30. >
  31. <template #prefix-icon>
  32. <lock-on-icon />
  33. </template>
  34. </t-input>
  35. </t-form-item>
  36. </t-form>
  37. <t-button
  38. block
  39. class="m-t-30px"
  40. @click="loginHandle"
  41. size="large"
  42. theme="success"
  43. >登 录</t-button
  44. >
  45. </div>
  46. </div>
  47. <!-- <button @click="loginHandle" class="m-t-10px">登录!</button> -->
  48. </template>
  49. <script setup name="Login">
  50. import { ref, reactive, computed, watch } from 'vue';
  51. import { DesktopIcon, LockOnIcon } from 'tdesign-icons-vue-next';
  52. import { useRoute, useRouter } from 'vue-router';
  53. import { useUserStore } from '@/store';
  54. import { MessagePlugin } from 'tdesign-vue-next';
  55. import { getBase64 } from '@/utils/crypto';
  56. const form = ref(null);
  57. const route = useRoute();
  58. const router = useRouter();
  59. const formData = reactive({
  60. loginName: 'sysadmin',
  61. password: '123456',
  62. });
  63. const rules = {
  64. loginName: [
  65. { required: true, message: '请输入账号', type: 'error', trigger: 'change' },
  66. ],
  67. password: [
  68. { required: true, message: '请输入密码', type: 'error', trigger: 'change' },
  69. ],
  70. };
  71. const userStore = useUserStore();
  72. const loginHandle = () => {
  73. form.value.validate().then(async (result) => {
  74. const redirect = route.query.redirect;
  75. // ? route.query.redirect
  76. // : '/my-workbenches';
  77. if (result === true) {
  78. await userStore.login({
  79. loginName: formData.loginName,
  80. password: getBase64(formData.password),
  81. type: 'ACCOUNT',
  82. });
  83. await userStore.requestUserMenu();
  84. if (redirect) {
  85. router.push(redirect);
  86. } else {
  87. router.push({ name: userStore.menus[0].name });
  88. }
  89. }
  90. });
  91. };
  92. </script>
  93. <style lang="less" scoped>
  94. .login {
  95. background: rgba(26, 188, 156, 1);
  96. .login-box {
  97. width: 350px;
  98. background: #fff;
  99. box-shadow: rgba(0, 0, 0, 0.35) 0px 0px 10px;
  100. border-radius: 10px;
  101. padding: 24px;
  102. }
  103. }
  104. </style>