login.vue 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231
  1. <template>
  2. <div style="text-align: center">
  3. 系统加载中
  4. </div>
  5. </template>
  6. <script setup>
  7. import {getCodeImg} from "@/api/login"
  8. import Cookies from "js-cookie"
  9. import {encrypt, decrypt} from "@/utils/jsencrypt"
  10. import useUserStore from '@/store/modules/user'
  11. const title = import.meta.env.VITE_APP_TITLE
  12. const userStore = useUserStore()
  13. const route = useRoute()
  14. const router = useRouter()
  15. const {proxy} = getCurrentInstance()
  16. const params = route.query
  17. const loginForm = ref({
  18. username: "xjc_customer",
  19. password: "123456",
  20. loginType: "1",
  21. rememberMe: false,
  22. code: "",
  23. uuid: ""
  24. })
  25. const loginRules = {
  26. username: [{required: true, trigger: "blur", message: "请输入您的账号"}],
  27. password: [{required: true, trigger: "blur", message: "请输入您的密码"}],
  28. code: [{required: true, trigger: "change", message: "请输入验证码"}]
  29. }
  30. const codeUrl = ref("")
  31. const loading = ref(false)
  32. // 验证码开关
  33. const captchaEnabled = ref(true)
  34. // 注册开关
  35. const register = ref(false)
  36. const redirect = ref(undefined)
  37. watch(route, (newRoute) => {
  38. redirect.value = newRoute.query && newRoute.query.redirect
  39. }, {immediate: true})
  40. function handleLogin() {
  41. proxy.$refs.loginRef.validate(valid => {
  42. if (valid) {
  43. loading.value = true
  44. // 勾选了需要记住密码设置在 cookie 中设置记住用户名和密码
  45. if (loginForm.value.rememberMe) {
  46. Cookies.set("username", loginForm.value.username, {expires: 30})
  47. Cookies.set("password", encrypt(loginForm.value.password), {expires: 30})
  48. Cookies.set("rememberMe", loginForm.value.rememberMe, {expires: 30})
  49. } else {
  50. // 否则移除
  51. Cookies.remove("username")
  52. Cookies.remove("password")
  53. Cookies.remove("rememberMe")
  54. }
  55. // 调用action的登录方法
  56. loginForm.value.loginType = "1"
  57. userStore.login(loginForm.value).then(() => {
  58. const query = route.query
  59. const otherQueryParams = Object.keys(query).reduce((acc, cur) => {
  60. if (cur !== "redirect") {
  61. acc[cur] = query[cur]
  62. }
  63. return acc
  64. }, {})
  65. router.push({path: redirect.value || "/", query: otherQueryParams})
  66. }).catch(() => {
  67. loading.value = false
  68. // 重新获取验证码
  69. if (captchaEnabled.value) {
  70. getCode()
  71. }
  72. })
  73. }
  74. })
  75. }
  76. function getCode() {
  77. getCodeImg().then(res => {
  78. captchaEnabled.value = res.captchaEnabled === undefined ? true : res.captchaEnabled
  79. if (captchaEnabled.value) {
  80. codeUrl.value = "data:image/gif;base64," + res.img
  81. loginForm.value.uuid = res.uuid
  82. }
  83. })
  84. }
  85. function getCookie() {
  86. const username = Cookies.get("username")
  87. const password = Cookies.get("password")
  88. const rememberMe = Cookies.get("rememberMe")
  89. loginForm.value = {
  90. username: username === undefined ? loginForm.value.username : username,
  91. password: password === undefined ? loginForm.value.password : decrypt(password),
  92. rememberMe: rememberMe === undefined ? false : Boolean(rememberMe)
  93. }
  94. }
  95. getCode()
  96. getCookie()
  97. function handleLogin2() {
  98. if(params.modulePath == undefined || params.redirect=='/index'){
  99. //默认来的
  100. }else{
  101. //注册后来的
  102. loginForm.value.username = params.userName
  103. loginForm.value.password = params.password
  104. }
  105. loading.value = true
  106. // 调用action的登录方法
  107. loginForm.value.loginType = "1"
  108. userStore.login(loginForm.value).then(() => {
  109. const query = route.query
  110. const otherQueryParams = Object.keys(query).reduce((acc, cur) => {
  111. if (cur !== "redirect") {
  112. acc[cur] = query[cur]
  113. }
  114. return acc
  115. }, {})
  116. //-------------孙一石修改
  117. if(params.modulePath == undefined || params.redirect=='/index'){
  118. router.push({path: redirect.value || "/", query: otherQueryParams})
  119. }else{
  120. //注册后来的
  121. router.push({
  122. path : params.modulePath
  123. })
  124. }
  125. }).catch(() => {
  126. loading.value = false
  127. // 重新获取验证码
  128. if (captchaEnabled.value) {
  129. getCode()
  130. }
  131. })
  132. }
  133. function handleLogin3() {
  134. router.push({path: "/xjc_index"})
  135. }
  136. handleLogin2()
  137. </script>
  138. <style lang='scss' scoped>
  139. .login {
  140. display: flex;
  141. justify-content: center;
  142. align-items: center;
  143. height: 100%;
  144. background-image: url("../assets/images/login-background.jpg");
  145. background-size: cover;
  146. }
  147. .title {
  148. margin: 0px auto 30px auto;
  149. text-align: center;
  150. color: #707070;
  151. }
  152. .login-form {
  153. border-radius: 6px;
  154. background: #ffffff;
  155. width: 400px;
  156. padding: 25px 25px 5px 25px;
  157. z-index: 1;
  158. .el-input {
  159. height: 40px;
  160. input {
  161. height: 40px;
  162. }
  163. }
  164. .input-icon {
  165. height: 39px;
  166. width: 14px;
  167. margin-left: 0px;
  168. }
  169. }
  170. .login-tip {
  171. font-size: 13px;
  172. text-align: center;
  173. color: #bfbfbf;
  174. }
  175. .login-code {
  176. width: 33%;
  177. height: 40px;
  178. float: right;
  179. img {
  180. cursor: pointer;
  181. vertical-align: middle;
  182. }
  183. }
  184. .el-login-footer {
  185. height: 40px;
  186. line-height: 40px;
  187. position: fixed;
  188. bottom: 0;
  189. width: 100%;
  190. text-align: center;
  191. color: #fff;
  192. font-family: Arial;
  193. font-size: 12px;
  194. letter-spacing: 1px;
  195. }
  196. .login-code-img {
  197. height: 40px;
  198. padding-left: 12px;
  199. }
  200. </style>