123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146 |
- <template>
- <view class="mobile-login-page">
- <view class="login-top">
- <img class="login-logo" :src="systemLogo">
- <text class="login-text">
- {{systemName}}
- </text>
- </view>
- <view class="login-body">
- <view class="input-container">
- <icon class="login-body-icon user-icon"></icon>
- <input type="text" v-model="userName" placeholder="请输入用户名" class="login-body-input" />
- </view>
- <view class="input-container">
- <icon class="login-body-icon mm-icon"></icon>
- <input type="password" v-model="password" placeholder="请输入密码" class="login-body-input" />
- </view>
- <view class="login-change">
- <checkbox-group @change="rememberBtn" class="remember-checkbox-group">
- <checkbox value="remember" color="#0550e5" checked="true" style="transform:scale(0.9)"/>记住此账号
- </checkbox-group>
- <text class="checkbox-zhanghao" @click="forgetPassword"> 忘记密码?</text>
- </view>
- <button class="login-btn" @click="handleLogin">登录</button>
- </view>
- </view>
- </template>
- <script setup>
- import CryptoJS from 'crypto-js';
- import {toast} from "@/utils/common";
- import {onLoad} from "@dcloudio/uni-app";
- import {getAppConfig,login} from '@/api/login.js'
- import cacheManager from '@/utils/cacheManager.js'
- import JSEncrypt from 'jsencrypt';
- import {ref} from 'vue';
- const passLLiRef = ref(null)
- let systemName = ref('')
- let systemLogo = ref('../static/images/login/login-logo-sj.png')
- let userName = ref('')
- let password = ref('')
- let configData = ref(null)
- let encryptedPassword = ref(''); // 用于存储加密后的密码
- let rememberFlag = ref('remember');
-
- // 密钥和偏移量(IV),需要转换为CryptoJS的WordArray格式
- const key = CryptoJS.enc.Utf8.parse('ax58bc32hp54kt68');
- const iv = CryptoJS.enc.Utf8.parse('cf46xy53kb64wt25');
- // 加密算法:AES/CBC 偏移:PKCS5Padding
- function encryptPassword(plainText) {
- const ciphertext = CryptoJS.AES.encrypt(plainText, key, {
- iv: iv,
- mode: CryptoJS.mode.CBC,
- padding: CryptoJS.pad.Pkcs7
- });
- return ciphertext.toString();
- }
-
- onLoad(() => {
- getLoginInit()
- })
-
- // 记住密码
- function geiRemember(){
- if(rememberFlag.value ==='remember'){
- if(cacheManager.get('auth').userInfo){
- userName.value = cacheManager.get('auth').userInfo.userName;
- password.value = cacheManager.get('auth').userInfo.password;
- }
- }
- }
- function rememberBtn(data){
- rememberFlag.value = data.detail.value.toString();
- }
-
- function getLoginInit(){
- getLoginConfig();
- geiRemember();
- }
-
- function getLoginConfig(){
- getAppConfig().then(res => {
- console.log(res.data,'res');
- systemName.value = res.data.name;
- systemLogo.value = res.data.logo;
- configData.value = res.data;
- })
- }
-
- function handleLogin(){
- if(userName.value.length ===0){
- toast('请输入手机号!')
- return
- }
-
- if(password.value.length ===0){
- toast('请输入密码!')
- return
- }
-
- encryptedPassword.value = encryptPassword(password.value.trim());
- // 去除 userName 两端的空格
- const trimmedUserName = userName.value.trim();
-
- let req = {
- userName: trimmedUserName,
- password: encryptedPassword.value,
- }
- login(req).then(res => {
- // 接口数据记缓存
- if(rememberFlag.value ==='remember'){
- let userInfo = {
- userName: trimmedUserName,
- password: password.value.trim(),
- }
- let mergedData = {...res.data, ...configData.value,userInfo};
- cacheManager.set('auth', mergedData)
- }else{
- let mergedData = {...res.data, ...configData.value};
- cacheManager.set('auth', mergedData)
- }
-
-
- // 待补充----判断checked信息,记缓存用户信息
-
- // 待补充根据后台返回值跳转不同页面
- if(res.data.modules ==='1'){
- // 考试
- uni.switchTab({
- url: '/pages/index/index'
- });
- }else{
- // 培训
- uni.switchTab({
- url: '/pages/index/index'
- });
- }
-
- })
- }
-
- function forgetPassword(){
- toast('请联系管理员修改密码!');
- }
- </script>
|