|
@@ -1,5 +1,5 @@
|
|
|
<script setup lang="ts">
|
|
<script setup lang="ts">
|
|
|
-const dialogVisible = ref(false)
|
|
|
|
|
|
|
+const dialogVisible = ref(true)
|
|
|
|
|
|
|
|
const openDialog = () => {
|
|
const openDialog = () => {
|
|
|
dialogVisible.value = true
|
|
dialogVisible.value = true
|
|
@@ -10,6 +10,11 @@ const pwdData = ref({
|
|
|
newPassword: '',
|
|
newPassword: '',
|
|
|
confirmPassword: ''
|
|
confirmPassword: ''
|
|
|
})
|
|
})
|
|
|
|
|
+const loginError: any = ref({
|
|
|
|
|
+ oldPassword: false,
|
|
|
|
|
+ newPassword: false,
|
|
|
|
|
+ confirmPassword: false
|
|
|
|
|
+})
|
|
|
|
|
|
|
|
const handleUpdate = () => {
|
|
const handleUpdate = () => {
|
|
|
// if (pwdData.value.newPassword !== pwdData.value.confirmPassword) {
|
|
// if (pwdData.value.newPassword !== pwdData.value.confirmPassword) {
|
|
@@ -26,12 +31,28 @@ const handleUpdate = () => {
|
|
|
ElMessage.success('Password updated successfully')
|
|
ElMessage.success('Password updated successfully')
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+const hiddenError = (key: string) => {
|
|
|
|
|
+ loginError.value[key] = false
|
|
|
|
|
+}
|
|
|
|
|
+const confirmPwd = () => {
|
|
|
|
|
+ if (pwdData.value.confirmPassword !== pwdData.value.newPassword) {
|
|
|
|
|
+ loginError.value.confirmPassword = true
|
|
|
|
|
+ } else {
|
|
|
|
|
+ loginError.value.confirmPassword = false
|
|
|
|
|
+ }
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
const clearData = () => {
|
|
const clearData = () => {
|
|
|
pwdData.value = {
|
|
pwdData.value = {
|
|
|
oldPassword: '',
|
|
oldPassword: '',
|
|
|
newPassword: '',
|
|
newPassword: '',
|
|
|
confirmPassword: ''
|
|
confirmPassword: ''
|
|
|
}
|
|
}
|
|
|
|
|
+ loginError.value = {
|
|
|
|
|
+ oldPassword: false,
|
|
|
|
|
+ newPassword: false,
|
|
|
|
|
+ confirmPassword: false
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
defineExpose({
|
|
defineExpose({
|
|
|
openDialog
|
|
openDialog
|
|
@@ -50,30 +71,54 @@ defineExpose({
|
|
|
<div>
|
|
<div>
|
|
|
<div class="form-item">
|
|
<div class="form-item">
|
|
|
<span class="label">Old Password</span>
|
|
<span class="label">Old Password</span>
|
|
|
- <el-input v-model="pwdData.oldPassword" placeholder="Please input Old Password">
|
|
|
|
|
|
|
+ <el-input
|
|
|
|
|
+ v-model="pwdData.oldPassword"
|
|
|
|
|
+ type="password"
|
|
|
|
|
+ show-password
|
|
|
|
|
+ :class="{ 'is-error': loginError.oldPassword }"
|
|
|
|
|
+ placeholder="Please input Old Password"
|
|
|
|
|
+ @focus="hiddenError('oldPassword')"
|
|
|
|
|
+ >
|
|
|
<template #prefix>
|
|
<template #prefix>
|
|
|
<span class="font_family icon-icon_password_b"></span>
|
|
<span class="font_family icon-icon_password_b"></span>
|
|
|
</template>
|
|
</template>
|
|
|
</el-input>
|
|
</el-input>
|
|
|
|
|
+ <div class="error" v-if="loginError.oldPassword">Incorrect password. Please try again.</div>
|
|
|
</div>
|
|
</div>
|
|
|
<div class="form-item">
|
|
<div class="form-item">
|
|
|
<span class="label">New Password</span>
|
|
<span class="label">New Password</span>
|
|
|
<el-input
|
|
<el-input
|
|
|
v-model="pwdData.newPassword"
|
|
v-model="pwdData.newPassword"
|
|
|
|
|
+ type="password"
|
|
|
|
|
+ show-password
|
|
|
|
|
+ :class="{ 'is-error': loginError.newPassword }"
|
|
|
placeholder="New password must contain both letter and numeral"
|
|
placeholder="New password must contain both letter and numeral"
|
|
|
|
|
+ @focus="hiddenError('newPassword')"
|
|
|
>
|
|
>
|
|
|
<template #prefix>
|
|
<template #prefix>
|
|
|
<span class="font_family icon-icon_password_b"></span>
|
|
<span class="font_family icon-icon_password_b"></span>
|
|
|
</template>
|
|
</template>
|
|
|
</el-input>
|
|
</el-input>
|
|
|
|
|
+ <div class="error" v-if="loginError.newPassword">Incorrect password. Please try again.</div>
|
|
|
</div>
|
|
</div>
|
|
|
<div class="form-item">
|
|
<div class="form-item">
|
|
|
<span class="label">Confirm Password</span>
|
|
<span class="label">Confirm Password</span>
|
|
|
- <el-input v-model="pwdData.confirmPassword" placeholder="Please Confirm Password">
|
|
|
|
|
|
|
+ <el-input
|
|
|
|
|
+ v-model="pwdData.confirmPassword"
|
|
|
|
|
+ type="password"
|
|
|
|
|
+ show-password
|
|
|
|
|
+ :class="{ 'is-error': loginError.confirmPassword }"
|
|
|
|
|
+ placeholder="Please Confirm Password"
|
|
|
|
|
+ @focus="hiddenError('confirmPassword')"
|
|
|
|
|
+ @blur="confirmPwd"
|
|
|
|
|
+ >
|
|
|
<template #prefix>
|
|
<template #prefix>
|
|
|
<span class="font_family icon-icon_password_b"></span>
|
|
<span class="font_family icon-icon_password_b"></span>
|
|
|
</template>
|
|
</template>
|
|
|
</el-input>
|
|
</el-input>
|
|
|
|
|
+ <div class="error" v-if="loginError.confirmPassword">
|
|
|
|
|
+ The password does not match. Please try again.
|
|
|
|
|
+ </div>
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
|
<template #footer>
|
|
<template #footer>
|
|
@@ -97,6 +142,19 @@ defineExpose({
|
|
|
.label {
|
|
.label {
|
|
|
font-size: 12px;
|
|
font-size: 12px;
|
|
|
}
|
|
}
|
|
|
|
|
+ .error {
|
|
|
|
|
+ font-size: 12px;
|
|
|
|
|
+ color: var(--color-danger);
|
|
|
|
|
+ line-height: 14px;
|
|
|
|
|
+ }
|
|
|
|
|
+ .el-input {
|
|
|
|
|
+ height: 40px;
|
|
|
|
|
+ &.is-error {
|
|
|
|
|
+ .el-input__wrapper {
|
|
|
|
|
+ box-shadow: 0 0 0 1px var(--color-danger) inset;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
.el-button {
|
|
.el-button {
|
|
|
padding: 8px 24px;
|
|
padding: 8px 24px;
|