login.vue 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. <template>
  2. <view class="mobile-login-page">
  3. <view class="login-top">
  4. <img class="login-logo" :src="systemLogo">
  5. <text class="login-text">
  6. {{systemName}}
  7. </text>
  8. </view>
  9. <view class="login-body">
  10. <view class="input-container">
  11. <icon class="login-body-icon user-icon"></icon>
  12. <input type="text" v-model="userName" placeholder="请输入用户名" class="login-body-input" />
  13. </view>
  14. <view class="input-container">
  15. <icon class="login-body-icon mm-icon"></icon>
  16. <input type="password" v-model="password" placeholder="请输入密码" class="login-body-input" />
  17. </view>
  18. <view class="login-change">
  19. <checkbox-group @change="rememberBtn" class="remember-checkbox-group">
  20. <checkbox value="remember" color="#0550e5" checked="true" style="transform:scale(0.9)"/>记住此账号
  21. </checkbox-group>
  22. <text class="checkbox-zhanghao" @click="forgetPassword"> 忘记密码?</text>
  23. </view>
  24. <button class="login-btn" @click="handleLogin">登录</button>
  25. </view>
  26. </view>
  27. </template>
  28. <script setup>
  29. import CryptoJS from 'crypto-js';
  30. import {toast} from "@/utils/common";
  31. import {onLoad} from "@dcloudio/uni-app";
  32. import {getAppConfig,login} from '@/api/login.js'
  33. import cacheManager from '@/utils/cacheManager.js'
  34. import JSEncrypt from 'jsencrypt';
  35. import {ref} from 'vue';
  36. const passLLiRef = ref(null)
  37. let systemName = ref('')
  38. let systemLogo = ref('../static/images/login/login-logo-sj.png')
  39. let userName = ref('')
  40. let password = ref('')
  41. let configData = ref(null)
  42. let encryptedPassword = ref(''); // 用于存储加密后的密码
  43. let rememberFlag = ref('remember');
  44. // 密钥和偏移量(IV),需要转换为CryptoJS的WordArray格式
  45. const key = CryptoJS.enc.Utf8.parse('ax58bc32hp54kt68');
  46. const iv = CryptoJS.enc.Utf8.parse('cf46xy53kb64wt25');
  47. // 加密算法:AES/CBC 偏移:PKCS5Padding
  48. function encryptPassword(plainText) {
  49. const ciphertext = CryptoJS.AES.encrypt(plainText, key, {
  50. iv: iv,
  51. mode: CryptoJS.mode.CBC,
  52. padding: CryptoJS.pad.Pkcs7
  53. });
  54. return ciphertext.toString();
  55. }
  56. onLoad(() => {
  57. getLoginInit()
  58. })
  59. // 记住密码
  60. function geiRemember(){
  61. if(rememberFlag.value ==='remember'){
  62. if(cacheManager.get('auth').userInfo){
  63. userName.value = cacheManager.get('auth').userInfo.userName;
  64. password.value = cacheManager.get('auth').userInfo.password;
  65. }
  66. }
  67. }
  68. function rememberBtn(data){
  69. rememberFlag.value = data.detail.value.toString();
  70. }
  71. function getLoginInit(){
  72. getLoginConfig();
  73. geiRemember();
  74. }
  75. function getLoginConfig(){
  76. getAppConfig().then(res => {
  77. console.log(res.data,'res');
  78. systemName.value = res.data.name;
  79. systemLogo.value = res.data.logo;
  80. configData.value = res.data;
  81. })
  82. }
  83. function handleLogin(){
  84. if(userName.value.length ===0){
  85. toast('请输入手机号!')
  86. return
  87. }
  88. if(password.value.length ===0){
  89. toast('请输入密码!')
  90. return
  91. }
  92. encryptedPassword.value = encryptPassword(password.value.trim());
  93. // 去除 userName 两端的空格
  94. const trimmedUserName = userName.value.trim();
  95. let req = {
  96. userName: trimmedUserName,
  97. password: encryptedPassword.value,
  98. }
  99. login(req).then(res => {
  100. // 接口数据记缓存
  101. if(rememberFlag.value ==='remember'){
  102. let userInfo = {
  103. userName: trimmedUserName,
  104. password: password.value.trim(),
  105. }
  106. let mergedData = {...res.data, ...configData.value,userInfo};
  107. cacheManager.set('auth', mergedData)
  108. }else{
  109. let mergedData = {...res.data, ...configData.value};
  110. cacheManager.set('auth', mergedData)
  111. }
  112. // 待补充----判断checked信息,记缓存用户信息
  113. // 待补充根据后台返回值跳转不同页面
  114. if(res.data.modules ==='1'){
  115. // 考试
  116. uni.switchTab({
  117. url: '/pages/index/index'
  118. });
  119. }else{
  120. // 培训
  121. uni.switchTab({
  122. url: '/pages/index/index'
  123. });
  124. }
  125. })
  126. }
  127. function forgetPassword(){
  128. toast('请联系管理员修改密码!');
  129. }
  130. </script>