diff --git a/packageA/pages/personalInfo/personalInfo.vue b/packageA/pages/personalInfo/personalInfo.vue
index e67daa0..12ed6c8 100644
--- a/packageA/pages/personalInfo/personalInfo.vue
+++ b/packageA/pages/personalInfo/personalInfo.vue
@@ -17,6 +17,19 @@
姓名
+
+ 设置密码
+
+ {{ passwordError }}
+ ✓ 密码格式正确
+
性别
@@ -160,6 +173,7 @@ const state = reactive({
});
const fromValue = reactive({
name: '',
+ ytjPassword: '', // 新增密码字段
sex: 0,
birthDate: '',
education: '',
@@ -167,6 +181,9 @@ const fromValue = reactive({
idCard: '',
phone: ''
});
+
+// 输入校验相关
+const passwordError = ref('');
// 移除重复的onLoad定义,已在上方实现
// 在onLoad中初始化数据,确保页面加载时就能获取技能信息
@@ -240,6 +257,7 @@ function initLoad() {
const currentUserInfo = userInfo.value && Object.keys(userInfo.value).length > 0 ? userInfo.value : cachedUserInfo;
fromValue.name = currentUserInfo.name || '';
+ fromValue.ytjPassword = ''; // 密码输入框默认为空,不加载已有密码
fromValue.sex = currentUserInfo.sex !== undefined ? Number(currentUserInfo.sex) : 0;
fromValue.phone = currentUserInfo.phone || '';
fromValue.birthDate = currentUserInfo.birthDate || '';
@@ -356,6 +374,12 @@ const confirm = () => {
return $api.msg('请输入正确手机号');
}
+ // 密码校验
+ validatePassword();
+ if (fromValue.ytjPassword && passwordError.value) {
+ return $api.msg(passwordError.value);
+ }
+
// 构建appSkillsList数据结构 - 使用新的技能数据结构,包含id字段
const appSkillsList = state.skills
.filter(skill => skill.name && skill.name.trim() !== '')
@@ -613,6 +637,54 @@ const changeSex = (sex) => {
fromValue.sex = sex;
};
+// 密码实时校验
+const validatePassword = () => {
+ const password = (fromValue.ytjPassword || '').trim();
+
+ // 如果为空,清除错误信息
+ if (!password) {
+ passwordError.value = '';
+ return;
+ }
+
+ // 校验规则:长度8位,包含大小写字母和数字,至少各有一个
+ if (password.length !== 8) {
+ passwordError.value = '密码长度必须为8位';
+ return;
+ }
+
+ // 检查是否包含大写字母
+ const hasUpperCase = /[A-Z]/.test(password);
+ // 检查是否包含小写字母
+ const hasLowerCase = /[a-z]/.test(password);
+ // 检查是否包含数字
+ const hasNumber = /[0-9]/.test(password);
+
+ if (!hasUpperCase) {
+ passwordError.value = '密码必须包含至少一个大写字母';
+ return;
+ }
+
+ if (!hasLowerCase) {
+ passwordError.value = '密码必须包含至少一个小写字母';
+ return;
+ }
+
+ if (!hasNumber) {
+ passwordError.value = '密码必须包含至少一个数字';
+ return;
+ }
+
+ // 检查是否只包含字母和数字
+ if (!/^[A-Za-z0-9]+$/.test(password)) {
+ passwordError.value = '密码只能包含大小写字母和数字';
+ return;
+ }
+
+ // 校验通过
+ passwordError.value = '';
+};
+
const changePoliticalAffiliation = () => {
openSelectPopup({
title: '政治面貌',
@@ -770,6 +842,19 @@ function getDatePickerIndexes(dateStr) {
height: 80rpx;
border-bottom: 2rpx solid #EBEBEB
position: relative;
+ .error-message
+ color: #ff4757;
+ font-size: 24rpx;
+ margin-top: 10rpx;
+ line-height: 1.4;
+ .success-message
+ color: #2ed573;
+ font-size: 24rpx;
+ margin-top: 10rpx;
+ line-height: 1.4;
+ .input-error
+ .input-con
+ border-bottom-color: #ff4757;
.triangle::before
position: absolute;
right: 20rpx;