From 01ebf3e418fc2278cefd877914c4f23457571609 Mon Sep 17 00:00:00 2001
From: 张含笑 <zhx18749296735@163.com>
Date: Fri, 07 Nov 2025 13:54:06 +0800
Subject: [PATCH] feat:记住密码

---
 src/pages/login/index.vue |   64 +++++++++++++++++++++++++------
 1 files changed, 51 insertions(+), 13 deletions(-)

diff --git a/src/pages/login/index.vue b/src/pages/login/index.vue
index c434423..4495aca 100644
--- a/src/pages/login/index.vue
+++ b/src/pages/login/index.vue
@@ -6,17 +6,24 @@
 		<div class="user-name">
 			<image :src="usernameSvg" />
 			<input v-model="loginForm.username" placeholder="请输入用户名" />
-
 		</div>
 		<div class="pass-word">
 			<image :src="passwordSvg" />
 			<input v-model="loginForm.password" type="password" placeholder="请输入密码" />
 		</div>
+		<div class="remember-password">
+			<label>
+				<checkbox-group @change="toggleRemember">
+					<checkbox :checked="rememberPassword" color="#1D6FE9" style="transform:scale(0.7)" />
+				</checkbox-group>
+				记住密码
+			</label>
+		</div>
 
 		<button class="login-btn" :style="[inputStyle]" @tap="submit">
 			登录
 		</button>
-
+		
 		<image class="lowerRightCorner" :src="droneSvg" />
 	</view>
 </template>
@@ -38,12 +45,14 @@
 		LOGIN_PATH,
 		removeQueryString
 	} from "@/router";
+	import { onMounted } from 'vue';
 
 	const userStore = useUserStore();
 	const loginForm = ref({
 		username: "",
 		password: "",
 	});
+	const rememberPassword = ref(false);
 	const inputStyle = computed(() => {
 		const style = {};
 		if (loginForm.value.username && loginForm.value.password) {
@@ -53,6 +62,9 @@
 		return style;
 	});
 	let redirect = HOME_PATH;
+	function toggleRemember(e) {
+		rememberPassword.value = e.detail.value.length > 0;
+	}
 
 	async function submit() {
 		let userInfo = {
@@ -65,6 +77,16 @@
 			code: "",
 			key: "",
 		};
+
+		if (rememberPassword.value) {
+			uni.setStorageSync('rememberedUser', {
+				username: loginForm.value.username,
+				password: loginForm.value.password
+			});
+		} else {
+			uni.removeStorageSync('rememberedUser');
+		}
+		
 		try {
 			const res = await loginByUsername(
 				userInfo.tenantId,
@@ -87,15 +109,24 @@
 				icon: "none",
 				duration: 2000
 			});
-
 		}
 	}
-
+	// 从本地存储加载记住的密码
+	onMounted(() => {
+		const savedUserInfo = uni.getStorageSync('rememberedUser');
+		console.log('记住密码',savedUserInfo)
+		if (savedUserInfo) {
+			loginForm.value.username = savedUserInfo.username;
+			loginForm.value.password = savedUserInfo.password;
+			rememberPassword.value = true;
+		}
+	});
 	onLoad((options) => {
 		if (options.redirect && removeQueryString(options.redirect) !== LOGIN_PATH) {
 			redirect = decodeURIComponent(options.redirect);
 		}
 	});
+	
 </script>
 
 <style lang="scss" scoped>
@@ -164,13 +195,24 @@
 				color: #E3E3E3;
 				font-weight: 500;
 			}
-
-			//:deep(.uni-input-input) {
-			//  top: 10px !important;
-			//}
 		}
 
-		.pass-word {}
+		.remember-password {
+			display: flex;
+			justify-content: flex-end;
+			align-items: center;
+			margin-left: 62rpx;
+			margin-right: 58rpx;
+			margin-top: 20rpx;
+	
+			color: #666;
+			font-size: 28rpx;
+			
+			label {
+				display: flex;
+				align-items: center;
+			}
+		}
 
 		input {
 			@apply pb-6rpx mb-10rpx text-left;
@@ -178,7 +220,6 @@
 
 		.tips {
 			@apply mt-8rpx mb-60rpx;
-
 			color: $u-info;
 		}
 
@@ -199,7 +240,6 @@
 
 		.alternative {
 			@apply flex justify-between mt-30rpx;
-
 			color: $u-tips-color;
 		}
 	}
@@ -209,14 +249,12 @@
 
 		.item {
 			@apply flex items-center flex-col text-28rpx;
-
 			color: $u-content-color;
 		}
 	}
 
 	.hint {
 		@apply px-40rpx py-20rpx text-24rpx;
-
 		color: $u-tips-color;
 
 		.link {

--
Gitblit v1.9.3