Sfoglia il codice sorgente

修改加密算法,加密算法改为:AES/CBC 偏移:PKCS5Padding,
密钥:ax58bc32hp54kt68,
偏移量:cf46xy53kb64wt25
网址:https://the-x.cn/cryptography/Aes.aspx

tanxue 1 mese fa
parent
commit
27fb2408f7
4 ha cambiato i file con 223 aggiunte e 90 eliminazioni
  1. 1 0
      package.json
  2. 58 16
      pages/login.vue
  3. 150 66
      pages/my/index.vue
  4. 14 8
      unpackage/dist/cache/.vite/deps/_metadata.json

+ 1 - 0
package.json

@@ -5,6 +5,7 @@
   "main": "main.js",
   "dependencies": {
     "axios": "^1.7.2",
+    "crypto-js": "^4.2.0",
     "jsencrypt": "^3.3.2",
     "pinia": "^2.1.7",
     "ts-md5": "^1.3.1"

+ 58 - 16
pages/login.vue

@@ -1,7 +1,7 @@
 <template>
 	<view class="mobile-login-page">
 		<view class="login-top">
-			<img class="login-logo" src="../static/images/login/login-logo-sj.png">
+			<img class="login-logo" :src="systemLogo">
 			<text class="login-text">
 				{{systemName}}
 			</text>
@@ -25,25 +25,53 @@
 			</view>
 			<button class="login-btn" @click="handleLogin">登录</button>
 		</view>
-		<passwordLli ref="passLLiRef" :password="password" @lli-password="onLliPassword" />
 	</view>
 </template>
 
 <script setup>
+	import CryptoJS from 'crypto-js';
 	import {toast} from "@/utils/common";
-	import {getAppConfig,login,kaoshiList} from '@/api/login.js'
+	import {onLoad} from "@dcloudio/uni-app";
+	import {getAppConfig,login} from '@/api/login.js'
 	import passwordLli from "@/components/password-lli/password-lli.vue";
 	import JSEncrypt from 'jsencrypt';
 	import {ref} from 'vue';
 	const passLLiRef = ref(null)
-	let systemName = ref('麦塔考试系统')
+	let systemName = ref('')
+	let systemLogo = ref('../static/images/login/login-logo-sj.png')
 	let userName = ref('')
 	let password = ref('')
-	const lliPassword = ref('') // 加密后的密码
-	// 加密
-	function onLliPassword(password) {
-		console.log('onLliPassword',password)
-		lliPassword.value = password;
+	let configData = ref(null)
+	let encryptedPassword = ref(''); // 用于存储加密后的密码
+	 
+	// 密钥和偏移量(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 getLoginInit(){
+		getLoginConfig();
+	}
+	
+	function getLoginConfig(){
+		/* config().then(res => {
+			// console.log(res.data,'res');
+			// systemName.value = res.data.name;
+			// systemLogo.value = res.data.logo;
+			// configData.value = res.data;
+		}) */
 	}
 	
 	function handleLogin(){
@@ -57,25 +85,39 @@
 			return
 		}
 		
+		encryptedPassword.value = encryptPassword(password.value.trim());
 		// 去除 userName 两端的空格
 		const trimmedUserName = userName.value.trim();
-		const trimmedPassword = lliPassword.value.trim();
 		
 		let req = {
 			userName: trimmedUserName,
-			password: trimmedPassword,
+			password: encryptedPassword.value,
 		}
 
+
 		login(req).then(res => {
+			// 接口数据记缓存
 			let obj = JSON.stringify(res.data)
-			console.log(obj)
+			console.log(obj,'obj');
 			uni.setStorage({
 				key: 'Mta-Auth',
-				data: obj // 假设 this.userInputValue 是用户输入的数据
-			});
-			uni.switchTab({
-				url: '/pages/index/index'
+				data: obj 
 			});
+			// 待补充----判断checked信息,记缓存用户信息
+			
+			// 待补充根据后台返回值跳转不同页面
+			if(res.data.modules ==='1'){
+				// 考试
+				uni.switchTab({
+					url: '/pages/index/index'
+				});
+			}else{
+				// 培训
+				uni.switchTab({
+					url: '/pages/index/index'
+				});
+			}
+			
 		})
 	}
 	

+ 150 - 66
pages/my/index.vue

@@ -1,76 +1,160 @@
 <template>
-	<view class="lli-develop-expect-page">
-			<button class="lli-btn" @click="quit">退出登录</button>
+	<view class="mobile-my-page">
+		<view class="user-info-box">
+		    <view class="user-img-box">
+		        <img class="head-img" :src="myInfoData.userImg" v-if="myInfoData.userImg">
+		        <icon class="phone-default-userImg" v-else></icon>
+		    </view>
+		    <view class="user-content-box">
+		        <view class="user-name">{{myInfoData.userName}}</view>
+		        <view class="user-info">
+		            <view>{{myInfoData.realName}}</view><text v-if="myInfoData.realName && mineInfo.orgName"></text>
+		            <view>{{myInfoData.orgName}}</view><text v-if="myInfoData.orgName && mineInfo.positionName"></text>
+		            <view>{{myInfoData.positionName}}</view>
+		        </view>
+		    </view>
+		</view>
+		
+		<view class="my-list-box">
+			<view class="list-row" @click="goToPage('xuefen')">
+				<icon class="list-icon xuefen-icon"></icon>
+				<text>学分</text>
+				<text class="row-content">{{myInfoData.credit}}分</text>
+			</view>
+			<view class="list-row" @click="goToPage('xiaoxi')">
+				<icon class="list-icon xiaoxi-icon"></icon>
+				<text>消息</text>
+				<text class="row-content">{{myInfoData.countNotice}}条</text>
+			</view>
+			<view class="list-row" @click="goToPage('zhengshu')">
+				<icon class="list-icon zhengshu-icon"></icon>
+				<text>证书</text>
+				<text class="row-content">{{myInfoData.countCert}}个</text>
+			</view>
+		</view>
+		<view class="my-list-box">
+			<view class="list-row" @click="goToPage('cuoti')">
+				<icon class="list-icon cuoti-icon"></icon>
+				<text>错题</text>
+			</view>
+			<view class="list-row" @click="goToPage('baoming')">
+				<icon class="list-icon baoming-icon"></icon>
+				<text>报名</text>
+			</view>
+			<view class="list-row" @click="goToPage('sxtcs')">
+				<icon class="list-icon sxtcs-icon"></icon>
+				<text>摄像头测试</text>
+			</view>
+			<view class="list-row" @click="goToPage('sxtsm')">
+				<icon class="list-icon sxtsm-icon"></icon>
+				<text>摄像头说明</text>
+			</view>
+			<view class="list-row" @click="goToPage('shezhi')">
+				<icon class="list-icon shezhi-icon"></icon>
+				<text>设置</text>
+			</view>
+		</view>
 	</view>
 </template>
 
 <script setup>
-	import {
-		logout
-	} from '@/api/login.js'
+	import {reactive,ref} from "vue";
+	import {toast} from "@/utils/common";
+	import {getMineInfo} from '@/api/my.js'
+	import {onLoad,onShow} from '@dcloudio/uni-app';
 	
+	let myInfoData = reactive({
+		userImg: '',
+		realName: '',
+		orgName: '',
+		userName: '',
+		positionName:'',
+		credit:'',
+		countCert:'',
+		countNotice:'',
+
+	});
 	
-	const quitClick = ()=>{
-		uni.showModal({
-		        title: '提示',
-		        content: '你确定要执行这个操作吗?',
-		        success: (res) => {
-		          if (res.confirm) {
-		            // 用户点击了确定按钮,执行你的操作
-		            console.log('用户点击了确定');
-		           quit()
-		          } else if (res.cancel) {
-		            // 用户点击了取消按钮
-		            console.log('用户点击了取消');
-		          }
-		        }
-		      });
-		
-		 }
-	const quit = ()=>{
-			logout().then(res=>{
-				uni.removeStorage({
-					key: 'Mta-Auth',
-					success: function (res) {
-						console.log('success');
-						uni.navigateTo({
-							url: '/pages/login'
-						});
-					}
-				});
-			})
-		
-		 }
-		 
-	// import { ref, onMounted } from 'vue';
-	//
-	// const listData = ref([]);
-	// const page = ref(1);
-	// const pageSize = ref(10);
-	// const isLoading = ref(false);
-	// const noMoreData = ref(false);
-	//
-	// // 加载
-	// const loadData = async () => {
-	// 	if (isLoading.value || noMoreData.value) return;
-	// 	isLoading.value = true;
-	// 	const newData = await fetchData(page.value, pageSize.value); // 假设 fetchData 是你的请求函数
-	// 	if (newData.length > 0) {
-	// 		listData.value = listData.value.concat(newData);
-	// 		page.value++;
-	// 	} else {
-	// 		noMoreData.value = true;
-	// 	}
-	// 	isLoading.value = false;
-	// };
-	// onMounted(() => {
-	// 	loadData();
-	// });
-	//
-	// // 下拉加载更多
-	// const loadMore = () => {
-	// 	loadData();
-	// };
+	onLoad(() => {})
+	
+	onShow(() => {getMyInit()})
+	
+	function getMyInit() {
+		getUserInfo();
+	}
+	
+	function getUserInfo(){
+		getMineInfo({}).then(res => {
+			myInfoData.userImg= res.data.icon;
+			myInfoData.realName = res.data.realName;
+			myInfoData.orgName = res.data.orgName;
+			myInfoData.userName = res.data.userName;
+			myInfoData.positionName = res.data.positionName;
+			myInfoData.credit = res.data.credit;
+			myInfoData.countCert = res.data.countCert;
+			myInfoData.countNotice = res.data.countNotice;
+		})
+	}
+	
+	function goToPage(data){
+		switch (data) {
+			// 学分
+			case 'xuefen':
+			    uni.navigateTo({
+			    	url:'/pages/admin/my/myInfo?from=my'
+			    })
+			break;
+			
+			// 消息
+			case 'xiaoxi':
+			    uni.navigateTo({
+			    	url:'/pages/admin/my/myInfo?from=my'
+			    })
+			break;
+			
+			// 证书
+			case 'zhengshu':
+			    uni.navigateTo({
+			    	url:'/pages/admin/my/myInfo?from=my'
+			    })
+			break;
+			
+			// 错题
+			case 'cuoti':
+			    uni.navigateTo({
+			    	url:'/pages/admin/my/myInfo?from=my'
+			    })
+			break;
+			
+			// 报名
+			case 'baoming':
+			    uni.navigateTo({
+			    	url:'/pages/admin/my/myInfo?from=my'
+			    })
+			break;
+			
+			// 摄像头测试
+			case 'sxtcs':
+			    uni.navigateTo({
+			    	url:'/pages/admin/my/myInfo?from=my'
+			    })
+			break;
+			
+			// 摄像头说明
+			case 'sxtsm':
+			    uni.navigateTo({
+			    	url:'/pages/admin/my/myInfo?from=my'
+			    })
+			break;
+			
+			// 设置
+			case 'shezhi':
+			    uni.navigateTo({
+			    	url:'/pages/my/setting'
+			    })
+			break;
+		}
+	}
 </script>
 
 <style>

+ 14 - 8
unpackage/dist/cache/.vite/deps/_metadata.json

@@ -1,25 +1,31 @@
 {
-  "hash": "dbe0ab36",
-  "configHash": "5978ec27",
-  "lockfileHash": "e3b0c442",
-  "browserHash": "b8a21c0e",
+  "hash": "f126114c",
+  "configHash": "5539dff6",
+  "lockfileHash": "07bb1a63",
+  "browserHash": "9e4f8c39",
   "optimized": {
     "jsencrypt": {
       "src": "../../../../../node_modules/jsencrypt/lib/index.js",
       "file": "jsencrypt.js",
-      "fileHash": "7be2fe06",
+      "fileHash": "86b9d963",
       "needsInterop": false
     },
     "ts-md5/dist/md5": {
       "src": "../../../../../node_modules/ts-md5/dist/md5.js",
       "file": "ts-md5_dist_md5.js",
-      "fileHash": "dab4e432",
+      "fileHash": "cd24f8c2",
+      "needsInterop": true
+    },
+    "crypto-js": {
+      "src": "../../../../../node_modules/crypto-js/index.js",
+      "file": "crypto-js.js",
+      "fileHash": "2f57b087",
       "needsInterop": true
     }
   },
   "chunks": {
-    "chunk-Y2F7D3TJ": {
-      "file": "chunk-Y2F7D3TJ.js"
+    "chunk-TDUMLE5V": {
+      "file": "chunk-TDUMLE5V.js"
     }
   }
 }