index.vue 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. <template>
  2. <div class="login-container relative h-full overflow-hidden">
  3. <Bg>
  4. <template #header>
  5. <div class="login-h w-full absolute left-0 top-0 flex justify-between">
  6. <h2
  7. class="text-4xl tracking-2 font-[yb-font] text-#8ac5ff opacity-10"
  8. >
  9. 全景布控球
  10. </h2>
  11. <h2
  12. class="text-4xl tracking-2 font-[yb-font] text-#8ac5ff opacity-10"
  13. >
  14. 欢迎回来
  15. </h2>
  16. </div>
  17. </template>
  18. <div
  19. class="flex flex-col items-center absolute top-1/2 left-1/2 transform -translate-x-1/2 -translate-y-14"
  20. >
  21. <van-form @submit="onSubmit" class="login-form w-80">
  22. <van-cell-group inset>
  23. <van-field
  24. v-model="form.user"
  25. name="user"
  26. label="用户名"
  27. placeholder="用户名"
  28. :rules="[{ required: true, message: '请填写用户名' }]"
  29. :disabled="loading"
  30. />
  31. <van-field
  32. v-model="form.password"
  33. type="password"
  34. name="password"
  35. label="密码"
  36. placeholder="密码"
  37. :rules="[{ required: true, message: '请填写密码' }]"
  38. :disabled="loading"
  39. />
  40. </van-cell-group>
  41. <div class="my-4">
  42. <van-checkbox
  43. class="text-12px"
  44. v-model="checked"
  45. :disabled="loading"
  46. >
  47. <!-- 我已阅读并同意<span class="text-blue">《用户使用条款》</span
  48. >和<span class="text-blue">《隐私政策》</span> -->
  49. 记住密码
  50. </van-checkbox>
  51. </div>
  52. <van-button
  53. block
  54. type="primary"
  55. native-type="submit"
  56. :loading="loading"
  57. loading-text="登录中,请等待..."
  58. >
  59. 登录
  60. </van-button>
  61. </van-form>
  62. </div>
  63. </Bg>
  64. </div>
  65. </template>
  66. <script setup>
  67. import { getFingerprint, getENCPwd } from "@/utils";
  68. import Bg from "./components/bg.vue";
  69. import storage from "@/utils/storage";
  70. import { msgE } from "@/utils";
  71. import { useOutsideSystemStore } from "@/stores/modules/system.js";
  72. const useSystem = useOutsideSystemStore();
  73. const { API_LOGIN_POST } = useRequest();
  74. const router = useRouter();
  75. const form = ref({
  76. user: "",
  77. password: "",
  78. // key: ''
  79. });
  80. const loading = ref(false);
  81. const checked = ref(true);
  82. const onSubmit = (values) => {
  83. // if (!checked.value) {
  84. // msgE("请阅读并同意用户使用条款和隐私政策");
  85. // return;
  86. // }
  87. loading.value = true;
  88. if (checked.value) {
  89. // 记住密码,存7天
  90. storage.cookie.set("mp", `${form.value.user}:${form.value.password}`, {
  91. expires: 7,
  92. });
  93. } else {
  94. storage.cookie.remove("mp");
  95. }
  96. getENCPwd(form.value.password).then((pwd) => {
  97. getFingerprint().then(({ fingerprint, components }) => {
  98. const params = {
  99. User: form.value.user,
  100. Password: pwd,
  101. Fingerprint: fingerprint,
  102. components,
  103. };
  104. API_LOGIN_POST(params)
  105. .then((res) => {
  106. useSystem.token = res.Token;
  107. storage.local.set("t", res.Token);
  108. loading.value = false;
  109. router.replace({ name: "Home" });
  110. })
  111. .catch(() => {
  112. loading.value = false;
  113. });
  114. });
  115. });
  116. };
  117. onMounted(() => {
  118. const mp = storage.cookie.get("mp");
  119. if (mp) {
  120. const [user, password] = mp.split(":");
  121. form.value.user = user;
  122. form.value.password = password;
  123. }
  124. });
  125. </script>