| New file |
| | |
| | | <script setup lang="ts"> |
| | | import { reactive, ref } from 'vue' |
| | | import type { FormProps,FormInstance, FormRules } from 'element-plus' |
| | | import {ElMessage,ElMessageBox} from "element-plus"; |
| | | import request from "@/utils/request"; |
| | | import {Avatar, UserFilled} from "@element-plus/icons-vue"; |
| | | import useUserInfoStore from "@/stores/userInfo"; |
| | | import {useRoute, useRouter} from "vue-router"; |
| | | import {useI18n} from "vue-i18n"; |
| | | |
| | | const router = useRouter() |
| | | const route = useRoute() |
| | | const { t } = useI18n() |
| | | const userStore = useUserInfoStore() |
| | | //注册用户参数 |
| | | const register = reactive({ |
| | | userId: userStore.user.id, |
| | | oldPassword: '', |
| | | password: '', |
| | | confirmPassword:'' |
| | | }) |
| | | |
| | | |
| | | const oldPassword = (rule: any, value: any, callback: any) => { |
| | | if (value.trim() === '') { |
| | | callback(new Error(t('user.OldPasswordCannotBeEmpty'))) |
| | | }else{ |
| | | callback() |
| | | } |
| | | } |
| | | |
| | | const checkPassword = (rule: any, value: any, callback: any) => { |
| | | if (value.trim() === '') { |
| | | callback(new Error(t('user.TheNewPasswordCannotBeEmpty'))) |
| | | }else if(value.length>16 || value.length<6){ |
| | | callback(new Error(t('user.ThePasswordLengthCannotBeLessThan6OrMoreThan16'))) |
| | | }else{ |
| | | callback() |
| | | } |
| | | } |
| | | |
| | | const checkConfirmPassword = (rule: any, value: any, callback: any) => { |
| | | if (value.trim() === '') { |
| | | callback(new Error(t('user.ConfirmPasswordCannotBeEmpty'))) |
| | | }else if(value !== register.password){ |
| | | callback(new Error(t('user.ConfirmPasswordCannotBeEmpty'))) |
| | | }else if(value.length>16 || value.length<6){ |
| | | callback(new Error(t('user.TheTwoPasswordsAreNotTheSame'))) |
| | | }else{ |
| | | callback() |
| | | } |
| | | } |
| | | const ruleFormRef = ref<FormInstance>() |
| | | const rules = reactive<FormRules<typeof register>>({ |
| | | password:[{ validator: checkPassword, trigger: 'blur' }], |
| | | confirmPassword:[{ validator: checkConfirmPassword, trigger: 'blur' }] |
| | | // loginName: [{ validator: validateString, trigger: 'blur' }] |
| | | }) |
| | | |
| | | |
| | | const submitForm = (formEl: FormInstance | undefined) => { |
| | | if (!formEl) return |
| | | formEl.validate((valid) => { |
| | | if (valid) { |
| | | register.password = btoa(register.password) |
| | | register.oldPassword = btoa(register.oldPassword) |
| | | request.post('/user/updatePassWord', register).then((res) => { |
| | | if (res.data === true) { |
| | | ElMessage.success(t('basicData.msg.saveSuccess')) |
| | | router.push("/login") |
| | | } else { |
| | | ElMessage.error(t('user.OldPasswordError')) |
| | | return false |
| | | } |
| | | }).catch(error => { |
| | | ElMessage.error(t('basicData.msg.ServerConnectionError')) |
| | | return false |
| | | }) |
| | | } |
| | | }) |
| | | } |
| | | |
| | | </script> |
| | | |
| | | <template> |
| | | <div id="main-div"> |
| | | |
| | | <div id="register"> |
| | | <el-form |
| | | label-width="100px" |
| | | :model="register" |
| | | ref="ruleFormRef" |
| | | status-icon |
| | | :rules="rules" |
| | | > |
| | | <el-form-item :label="$t('user.OldPassword')" prop="oldPassword"> |
| | | <el-input autocomplete="off" type="text" style="-webkit-text-security: disc" v-model="register.oldPassword" /> |
| | | </el-form-item> |
| | | <el-form-item :label="$t('user.TheNewPassword')" prop="password"> |
| | | <el-input autocomplete="off" type="text" style="-webkit-text-security: disc" v-model="register.password" /> |
| | | </el-form-item> |
| | | <el-form-item :label="$t('user.ConfirmPassword')" prop="confirmPassword"> |
| | | <el-input autocomplete="off" type="text" style="-webkit-text-security: disc" v-model="register.confirmPassword" /> |
| | | </el-form-item> |
| | | <el-form-item > |
| | | <el-button |
| | | type="primary" |
| | | @click="submitForm(ruleFormRef)" |
| | | >{{ $t('basicData.save') }} |
| | | </el-button> |
| | | </el-form-item> |
| | | </el-form> |
| | | </div> |
| | | </div> |
| | | </template> |
| | | |
| | | <style scoped> |
| | | #main-div{ |
| | | width: 1000px; |
| | | height: 600px; |
| | | margin: auto; |
| | | } |
| | | h2{ |
| | | text-align: center; |
| | | width: 100vw; |
| | | margin-top: 10vh; |
| | | } |
| | | #register{ |
| | | background-color: #FAFAFA; |
| | | width: 50vw; |
| | | height: 50vh; |
| | | border-radius: 12px; |
| | | box-shadow: 0 8px 16px 0 rgba(0,0,0,0), 0 6px 5px 0 rgba(0,0,0,0.19); |
| | | display:flex; |
| | | align-items:center; |
| | | justify-content:center; |
| | | min-height: 280px; |
| | | } |
| | | .el-form{ |
| | | max-width: 300px; |
| | | } |
| | | </style> |