From ebd0ec4f51288042b6fc5bf714b1febbb63cfacc Mon Sep 17 00:00:00 2001
From: chenyao <1219716595@qq.com>
Date: Fri, 09 Jan 2026 18:03:49 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 uniapps/work-app/src/subPackages/userDetail/password/index.vue |  215 ++++++++++++++++++++++++++++++++++++++++++-----------
 1 files changed, 169 insertions(+), 46 deletions(-)

diff --git a/uniapps/work-app/src/subPackages/userDetail/password/index.vue b/uniapps/work-app/src/subPackages/userDetail/password/index.vue
index 222e282..f81baf7 100644
--- a/uniapps/work-app/src/subPackages/userDetail/password/index.vue
+++ b/uniapps/work-app/src/subPackages/userDetail/password/index.vue
@@ -4,23 +4,32 @@
 		<view class="detailBox">
 			<div class="detailCon">
 				<div class="orderRow">
-					<div class="rowTitle">原始密码</div>
-					<input type="password" v-model="passwordForm.oldPassword" placeholder="请输入" class="input-item" />
+					<div class="rowTitle">账号</div>
+					<input type="text" v-model="passwordForm.username" placeholder="请输入账号" class="input-item" />
 				</div>
 				<div class="orderRow">
-					<div class="rowTitle">新密码</div>
-					<input type="password" v-model="passwordForm.newPassword" placeholder="请输入" class="input-item" />
+					<div class="rowTitle">密码</div>
+					<input type="password" v-model="passwordForm.password" placeholder="请输入" class="input-item" />
 
 				</div>
 				<div class="orderRow">
 					<div class="rowTitle">确认密码</div>
-					<input type="password" v-model="passwordForm.newPassword1" placeholder="请输入" class="input-item" />
+					<input type="password" v-model="passwordForm.password2" placeholder="请输入" class="input-item" />
+				</div>
+				<div class="orderRow">
+					<div class="rowTitle">验证码</div>
+					<div class="code-container">
+						<input type="text" v-model="passwordForm.code" placeholder="请输入验证码" class="input-item code-input" />
+						<u-button :disabled="countDown > 0" @click="sendVerificationCode" class="send-code-btn">
+							{{ countDown > 0 ? `${countDown}s后重发` : '发送验证码' }}
+						</u-button>
+					</div>
 				</div>
 			</div>
 		</view>
 		<view class="btngroup">
-			<u-button color="#AEAEAE" class="custom-style" shape="circle" @click="reset">重置</u-button>
-			<u-button color="#1D6FE9" class="custom-style" shape="circle" @click="submit">提交</u-button>
+			<u-button color="#AEAEAE" class="custom-style"  @click="reset">重置</u-button>
+			<u-button color="#1D6FE9" class="custom-style"  @click="submit">提交</u-button>
 		</view>
 	</view>
 </template>
@@ -30,21 +39,25 @@
 		useUserStore
 	} from "@/store/index.js";
 	import md5 from "js-md5";
-	import {
-		getUserInfo,
-		updateInfo,
-		updatePassword
-	} from '@/api/user/index.js';
+	import { getUserInfo,
+	updateInfo,
+	updatePassword,
+	sendResetCode,
+	resetPassword
+} from '@/api/user/index.js';
 	const passwordIcon = {
 		show: 'fas fa-eye', // 显示密码时的图标
 		hide: 'fas fa-eye-slash' // 隐藏密码时的图标
 	}
 	const userStore = useUserStore();
-	const passwordForm = ref({
-		oldPassword: '',
-		newPassword: '',
-		newPassword1: '',
-	});
+const passwordForm = ref({
+	username: '',
+	password: '',
+	password2: '',
+	code: ''
+});
+const countDown = ref(0);
+let timer = null;
 	// 校验密码不能包含中文
 	const validatePasswordNoChinese = (password) => {
 		const chineseRegex = /[\u4e00-\u9fa5]/;
@@ -80,30 +93,82 @@
 	};
 	const clearForm = () => {
 		passwordForm.value = {
-			oldPassword: '',
-			newPassword: '',
-			newPassword1: '',
+			username: '',
+			password: '',
+			password2: '',
+			code: ''
 		};
+		countDown.value = 0;
+		if (timer) {
+			clearInterval(timer);
+			timer = null;
+		}
 	};
-	const reset = () => {
-		clearForm();
-	};
-	const submit = () => {
-		// 原始密码校验
-		if (!passwordForm.value.oldPassword) {
 
+	// 发送验证码
+	const sendVerificationCode = () => {
+		const { username } = passwordForm.value;
+		if (!username) {
 			uni.showToast({
-				title: '请输入原始密码',
+				title: '请先输入账号',
 				icon: 'none',
 				duration: 2000
 			});
 			return;
 		}
-		// 中文校验
-		if (!validatePasswordNoChinese(passwordForm.value.newPassword)) return;
-		// 新密码校验
-		if (!passwordForm.value.newPassword) {
 
+		// 这里假设账号就是手机号,实际项目中可能需要验证格式
+		sendResetCode(username).then(res => {
+			if (res.data.code === 200) {
+				uni.showToast({
+					title: '验证码发送成功',
+					icon: 'success',
+					duration: 2000
+				});
+
+				// 开始倒计时
+				countDown.value = 60;
+				timer = setInterval(() => {
+					countDown.value--;
+					if (countDown.value <= 0) {
+						clearInterval(timer);
+						timer = null;
+					}
+				}, 1000);
+			} else {
+				uni.showToast({
+					title: res.data.msg || '验证码发送失败',
+					icon: 'none',
+					duration: 2000
+				});
+			}
+		}).catch(err => {
+			uni.showToast({
+				title: '网络错误,请稍后重试',
+				icon: 'none',
+				duration: 2000
+			});
+		});
+	};
+	const reset = () => {
+		clearForm();
+	};
+
+	const submit = () => {
+		const { username, password, password2, code } = passwordForm.value;
+
+		// 账号校验
+		if (!username) {
+			uni.showToast({
+				title: '请输入账号',
+				icon: 'none',
+				duration: 2000
+			});
+			return;
+		}
+
+		// 新密码校验
+		if (!password) {
 			uni.showToast({
 				title: '请输入新密码',
 				icon: 'none',
@@ -111,9 +176,12 @@
 			});
 			return;
 		}
-		// 确认密码校验
-		if (passwordForm.value.newPassword !== passwordForm.value.newPassword1) {
 
+		// 中文校验
+		if (!validatePasswordNoChinese(password)) return;
+
+		// 确认密码校验
+		if (password !== password2) {
 			uni.showToast({
 				title: '两次输入的新密码不一致',
 				icon: 'none',
@@ -122,34 +190,56 @@
 			return;
 		}
 
+		// 验证码校验
+		if (!code) {
+			uni.showToast({
+				title: '请输入验证码',
+				icon: 'none',
+				duration: 2000
+			});
+			return;
+		}
+
 		// 复杂度校验
-		if (!validatePasswordStrength(passwordForm.value.newPassword)) return;
-		updatePassword(md5(passwordForm.value.oldPassword),
-			md5(passwordForm.value.newPassword),
-			md5(passwordForm.value.newPassword1)).then(res => {
+		if (!validatePasswordStrength(password)) return;
+
+		// 调用重置密码接口
+		const resetData = {
+			username,
+			// password: md5(password),
+			// confirmPassword: md5(password2),
+      password: password,
+      password2: password2,
+			code
+		};
+    console.log('canshu',resetData)
+		resetPassword(resetData).then(res => {
 			if (res.data.code === 200) {
 				uni.showToast({
-					title: '修改信息成功',
+					title: '密码修改成功',
 					icon: 'none',
 					duration: 2000
 				});
 				clearForm();
-				userStore.setUserInfo(null)
+				userStore.setUserInfo(null);
 				uni.removeStorageSync('rememberedUser');
 				uni.reLaunch({
 					url: '/pages/login/index'
-				})
-
+				});
 			} else {
 				uni.showToast({
-					title: res.msg,
+					title: res.data.msg || '密码修改失败',
 					icon: 'none',
 					duration: 2000
 				});
 			}
-
+		}).catch(err => {
+			uni.showToast({
+				title: '网络错误,请稍后重试',
+				icon: 'none',
+				duration: 2000
+			});
 		});
-
 	};
 	onShow(async () => {
 		clearForm();
@@ -215,6 +305,36 @@
 			input.input-item::placeholder {
 				font-size: 30rpx;
 			}
+
+			.code-container {
+				display: flex;
+				align-items: center;
+				justify-content: flex-end;
+				width: 100%;
+			}
+
+			.code-input {
+				flex: 1;
+				max-width: 400rpx;
+				margin-right: 20rpx;
+			}
+
+			.send-code-btn {
+				width: 200rpx;
+				height: 70rpx;
+				line-height: 70rpx;
+				font-size: 26rpx;
+				background: #f5f5f5;
+				color: #666;
+				border-radius: 8rpx;
+				text-align: center;
+				border: none;
+			}
+
+			.send-code-btn:disabled {
+				background: #e0e0e0;
+				color: #999;
+			}
 		}
 	}
 
@@ -230,10 +350,13 @@
 
 	.custom-style {
 		width: 276rpx;
-		height: 76rpx;
+		height: 100rpx;
+		  font-family: "Source Han Sans CN";
+		font-weight: 400;
+		font-size: 36rpx;
 	}
 	:deep(.u-button.data-v-461e713c){
 		width: 276rpx !important;
-		height: 76rpx !important;
+		height: 100rpx !important;
 	}
 </style>

--
Gitblit v1.9.3