login.vue 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. <template>
  2. <div class="login-layout">
  3. <div class="login-content">
  4. <div class="header">
  5. <img src="/favicon.ico" />
  6. <p>实景三维</p>
  7. </div>
  8. <div class="body">
  9. <ui-input
  10. type="text"
  11. placeholder="请输入账号"
  12. v-model="username"
  13. style="width: 100%"
  14. />
  15. <br />
  16. <ui-input
  17. type="password"
  18. placeholder="请输入密码"
  19. v-model="password"
  20. style="width: 100%; margin-top: 20px"
  21. />
  22. <br />
  23. <ui-input
  24. type="checkbox"
  25. @click.stop
  26. label="记住密码"
  27. style="margin-top: 20px"
  28. :modelValue="mark"
  29. @update:modelValue="(select: any) => mark = select"
  30. />
  31. </div>
  32. <div class="bottom">
  33. <ui-button type="submit" @click="login(username, password)">登录</ui-button>
  34. </div>
  35. </div>
  36. </div>
  37. </template>
  38. <script lang="ts" setup>
  39. import { ref } from "vue";
  40. import { encodePwd } from "@/utils";
  41. import GAxios from "axios";
  42. import { setToken } from "@/api";
  43. import { Message } from "bill/expose-common";
  44. const username = ref(localStorage.getItem("fuse-username") || "");
  45. const password = ref(localStorage.getItem("fuse-password") || "");
  46. const mark = ref(!!localStorage.getItem("fuse-mark"));
  47. const login = (username: string, password: string) => {
  48. if (!username) {
  49. return Message.error("账号不能为空");
  50. }
  51. if (!password) {
  52. return Message.error("密码不能为空");
  53. }
  54. GAxios.post("/service/manage/login", {
  55. password: encodePwd(password),
  56. userName: username,
  57. username: username,
  58. }).then((res) => {
  59. if (res.data.code !== 0) {
  60. return Message.error(res.data.message);
  61. }
  62. setToken(res.data.data.token);
  63. setTimeout(() => {
  64. const p = new URLSearchParams(location.search);
  65. p.delete("token");
  66. location.search = "?" + p.toString();
  67. setTimeout(() => location.reload(), 100);
  68. }, 100);
  69. if (mark.value) {
  70. localStorage.setItem("fuse-username", username);
  71. localStorage.setItem("fuse-password", password);
  72. localStorage.setItem("fuse-mark", "1");
  73. } else {
  74. localStorage.removeItem("fuse-username");
  75. localStorage.removeItem("fuse-password");
  76. localStorage.removeItem("fuse-mark");
  77. }
  78. });
  79. };
  80. if (import.meta.env.DEV) {
  81. login("super-admin", "Aa123456");
  82. }
  83. </script>
  84. <style lang="scss" scoped>
  85. .login-layout {
  86. position: fixed;
  87. inset: 0;
  88. z-index: 99;
  89. background: url("/images/login-backimage.png") no-repeat center center;
  90. background-size: cover;
  91. display: flex;
  92. align-items: center;
  93. justify-content: center;
  94. }
  95. .login-content {
  96. width: 400px;
  97. .header {
  98. display: flex;
  99. flex-direction: column;
  100. align-items: center;
  101. justify-content: center;
  102. margin-bottom: 64px;
  103. img {
  104. width: 80px;
  105. height: 80px;
  106. margin-bottom: 10px;
  107. }
  108. p {
  109. font-weight: bold;
  110. font-size: 32px;
  111. color: #000000;
  112. line-height: 48px;
  113. letter-spacing: 12px;
  114. text-align: center;
  115. font-style: normal;
  116. text-transform: none;
  117. }
  118. }
  119. .body {
  120. margin-bottom: 48px;
  121. }
  122. }
  123. </style>
  124. <style lang="scss" scoped>
  125. .login-content {
  126. .ui-input,
  127. .ui-button {
  128. --colors-color: #d9d9d9;
  129. --base-border-color: #d9d9d9;
  130. --colors-content-color: #000000;
  131. --colors-primary-base: #d9d9d9;
  132. --colors-normal-back: #ffffff;
  133. --colors-primary-base: #0960bd;
  134. --color-main-normal: #0960bd;
  135. }
  136. .ui-button {
  137. color: #fff !important;
  138. border: 1px solid var(--color-main-normal) !important;
  139. background: var(--color-main-normal) !important;
  140. }
  141. }
  142. </style>