From 56bc0990597bf3d9667b97b98bcfbb9092ad9df6 Mon Sep 17 00:00:00 2001 From: 黄何裕 <1053952480@qq.com> Date: 星期一, 15 七月 2024 16:46:35 +0800 Subject: [PATCH] 教学资源页面开发,分页,音频,类型图,下载,个人中心资料修改,密码修改,校验 --- src/views/personal-center/index.vue | 171 +++++++++++++++++++++++++++++++++++++++++++++++++++------ 1 files changed, 153 insertions(+), 18 deletions(-) diff --git a/src/views/personal-center/index.vue b/src/views/personal-center/index.vue index 0995cbf..d601d38 100644 --- a/src/views/personal-center/index.vue +++ b/src/views/personal-center/index.vue @@ -40,7 +40,7 @@ {{ userData.className.join(",") }} </el-form-item> <el-form-item label="娉ㄥ唽鏃堕棿"> - {{ timestampToDate(userData.createTime) }} + {{ userData.createTime }} </el-form-item> </el-form> </div> @@ -56,9 +56,10 @@ label-width="auto" style="max-width: 600px" :rules="informationRules" + ref="informationFormRef" > - <el-form-item label="鐪熷疄濮撳悕" prop="name"> - <el-input v-model="informationForm.name" /> + <el-form-item label="鐪熷疄濮撳悕" prop="realName"> + <el-input v-model="informationForm.realName" /> </el-form-item> <el-form-item label="骞撮緞"> <el-input v-model="informationForm.age" /> @@ -77,14 +78,19 @@ v-model="informationForm.birthDay" type="date" placeholder="Pick a day" - :size="size" /> </el-form-item> <el-form-item label="鎵嬫満" prop="phone"> <el-input v-model="informationForm.phone" /> </el-form-item> <el-form-item> - <el-button type="primary" @click="onSubmit">鏇存柊</el-button> + <div class="submit-box"> + <el-button + type="primary" + @click="informationSubmit(informationFormRef)" + >鏇存柊</el-button + > + </div> </el-form-item></el-form ></el-tab-pane > @@ -93,15 +99,38 @@ :model="passwordForm" label-width="auto" style="max-width: 600px" + :rules="passwordRules" + ref="passwordFormRef" > - <el-form-item label="鏃у瘑鐮�"> - <el-input v-model="passwordForm.name" /> + <el-form-item label="鏃у瘑鐮�" prop="oldPassword"> + <el-input + v-model="passwordForm.oldPassword" + type="password" + show-password + /> </el-form-item> - <el-form-item label="鏂板瘑鐮�"> - <el-input v-model="passwordForm.name" /> + <el-form-item label="鏂板瘑鐮�" prop="newPassword"> + <el-input + v-model="passwordForm.newPassword" + type="password" + show-password + /> </el-form-item> - <el-form-item label="纭瀵嗙爜"> - <el-input v-model="passwordForm.name" /> + <el-form-item label="纭瀵嗙爜" prop="newPasswordA"> + <el-input + v-model="passwordForm.newPasswordA" + type="password" + show-password + /> + </el-form-item> + <el-form-item> + <div class="submit-box"> + <el-button + type="primary" + @click="passwordSubmit(passwordFormRef)" + >淇濆瓨</el-button + > + </div> </el-form-item> </el-form> </el-tab-pane> @@ -115,17 +144,24 @@ <script setup> import { ref } from "vue"; -import { uploadImg } from "@/api/modules/personalCenter.js"; +import { uploadImg, userUpdate,passwordUpdate } from "@/api/modules/personalCenter.js"; import { ElMessage } from "element-plus"; const activeName = ref("information"); const userData = ref(JSON.parse(localStorage.getItem("user")).userInfo); +const informationFormRef = ref(); +const passwordFormRef = ref(); const informationForm = ref({ - name: userData.value.realName, + realName: userData.value.realName, sex: userData.value.sex, age: userData.value.age, phone: userData.value.phone, birthDay: userData.value.birthDay, +}); +const passwordForm = ref({ + oldPassword: "", + newPassword: "", + newPasswordA: "", }); // 鎵嬫満鍙烽獙璇侀�昏緫 const validatePhone = (rule, value, callback) => { @@ -136,15 +172,45 @@ callback(); } }; - +const validatePassword = (rule, value, callback) => { + if (!/[A-Z]/.test(value)) { + callback(new Error("瀵嗙爜蹇呴』鍖呭惈鑷冲皯涓�涓ぇ鍐欏瓧姣�")); + } else if (!/[a-z]/.test(value)) { + callback(new Error("瀵嗙爜蹇呴』鍖呭惈鑷冲皯涓�涓皬鍐欏瓧姣�")); + } else if (!/[0-9]/.test(value)) { + callback(new Error("瀵嗙爜蹇呴』鍖呭惈鑷冲皯涓�涓暟瀛�")); + } else { + callback(); + } +}; +const validatePasswordA = (rule, value, callback) => { + if (value !== passwordForm.value.newPassword) { + callback(new Error("涓ゆ杈撳叆瀵嗙爜涓嶅悓锛�")); + } else { + callback(); + } +}; const informationRules = { - name: [{ required: true, message: "璇峰~鍐欑湡瀹炲鍚�", trigger: "blur" }], + realName: [{ required: true, message: "璇峰~鍐欑湡瀹炲鍚�", trigger: "blur" }], phone: [ { validator: validatePhone, trigger: "blur" }, { required: true, message: "璇疯緭鍏ユ墜鏈哄彿", trigger: "blur" }, ], }; -const passwordForm = ref({ name: "" }); +const passwordRules = { + oldPassword: [ + { validator: validatePassword, trigger: "blur" }, + { required: true, message: "璇疯緭鍏ユ棫瀵嗙爜", trigger: "blur" }, + ], + newPassword: [ + { validator: validatePasswordA, trigger: "blur" }, + { required: true, message: "璇疯緭鍏ユ柊瀵嗙爜", trigger: "blur" }, + ], + newPasswordA: [ + { validator: validatePasswordA, trigger: "blur" }, + { required: true, message: "璇疯緭鍏ュ啀娆¤緭鍏ユ柊瀵嗙爜", trigger: "blur" }, + ], +}; //澶村儚涓婁紶 let formData = new FormData(); const uploadImage = () => { @@ -179,10 +245,73 @@ ); } }; +const informationSubmit = async (formEl) => { + if (!formEl) return; + await formEl.validate((valid, fields) => { + if (valid) { + informationForm.value.birthDay = timestampToDate( + informationForm.value.birthDay + ); + userUpdate(informationForm.value).then( + () => { + ElMessage({ + showClose: true, + message: "鏇存柊鎴愬姛", + type: "success", + }); + const newData = JSON.parse(localStorage.getItem("user")); + newData.userInfo.realName = informationForm.value.realName; + newData.userInfo.sex = informationForm.value.sex; + newData.userInfo.age = informationForm.value.age; + newData.userInfo.phone = informationForm.value.phone; + newData.userInfo.birthDay = informationForm.value.birthDay; + localStorage.setItem("user", JSON.stringify(newData)); + }, + (err) => { + ElMessage.error(err.data.errorMsg); + } + ); + } else { + console.log("error submit!", fields); + } + }); +}; +const passwordSubmit = async (formEl) => { + if (!formEl) return; + await formEl.validate((valid, fields) => { + if (valid) { + let data = { + userId:userData.value.id, + newPassword:passwordForm.value.newPassword, + oldPassword:passwordForm.value.oldPassword, + } + passwordUpdate(data).then( + () => { + ElMessage({ + showClose: true, + message: "淇敼鎴愬姛", + type: "success", + }); + }, + (err) => { + ElMessage.error(err.data.errorMsg); + } + ); + } else { + console.log("error submit!", fields); + } + }); +}; function timestampToDate(timestamp) { const date = new Date(timestamp); // 灏嗘椂闂存埑杞崲涓篋ate瀵硅薄 - const options = { year: "numeric", month: "long", day: "numeric" }; // 瀹氫箟鏃ユ湡鏍煎紡 - return new Intl.DateTimeFormat("zh-CN", options).format(date); // 浣跨敤Intl.DateTimeFormat杩涜鏍煎紡鍖� + const year = date.getFullYear(); + const month = date.getMonth() + 1; // 鏈堜唤浠�0寮�濮嬶紝鎵�浠ヨ鍔�1 + const day = date.getDate(); + const hours = date.getHours(); + const minutes = date.getMinutes(); + const seconds = date.getSeconds(); + const convertedTime = `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`; + return convertedTime; // 浣跨敤Intl.DateTimeFormat杩涜鏍煎紡鍖� } </script> @@ -213,4 +342,10 @@ overflow: hidden; object-fit: cover; } +.submit-box { + display: flex; + align-items: center; + justify-content: center; + width: 100%; +} </style> -- Gitblit v1.8.0