From 609aa04aba8b09bfd2a247ca954ee4dd9bbace7f Mon Sep 17 00:00:00 2001 From: ssongliu <73214554+ssongliu@users.noreply.github.com> Date: Thu, 19 Oct 2023 21:54:44 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E7=B3=BB=E7=BB=9F=E7=94=A8=E6=88=B7?= =?UTF-8?q?=E5=90=8D=E3=80=81=E5=AF=86=E7=A0=81=E5=A2=9E=E5=8A=A0=E7=A9=BA?= =?UTF-8?q?=E6=A0=BC=E6=A0=A1=E9=AA=8C=20(#2604)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Refs #2602 --- frontend/src/global/form-rules.ts | 13 ++++ frontend/src/lang/modules/en.ts | 1 + frontend/src/lang/modules/tw.ts | 1 + frontend/src/lang/modules/zh.ts | 1 + frontend/src/views/setting/expired.vue | 63 ++++++++----------- .../views/setting/panel/password/index.vue | 16 ++--- .../views/setting/panel/username/index.vue | 17 +++-- 7 files changed, 65 insertions(+), 47 deletions(-) diff --git a/frontend/src/global/form-rules.ts b/frontend/src/global/form-rules.ts index b90ac8c76..997865695 100644 --- a/frontend/src/global/form-rules.ts +++ b/frontend/src/global/form-rules.ts @@ -1,6 +1,13 @@ import i18n from '@/lang'; import { FormItemRule } from 'element-plus'; +const checkNoSpace = (rule: any, value: any, callback: any) => { + if (value.indexOf(' ') !== -1) { + return callback(new Error(i18n.global.t('setting.noSpace'))); + } + callback(); +}; + const checkIp = (rule: any, value: any, callback: any) => { if (value === '' || typeof value === 'undefined' || value == null) { callback(new Error(i18n.global.t('commons.rule.requiredInput'))); @@ -431,6 +438,7 @@ interface CommonRule { requiredInput: FormItemRule; requiredSelect: FormItemRule; requiredSelectBusiness: FormItemRule; + noSpace: FormItemRule; name: FormItemRule; userName: FormItemRule; simpleName: FormItemRule; @@ -484,6 +492,11 @@ export const Rules: CommonRule = { message: i18n.global.t('commons.rule.requiredSelect'), trigger: 'change', }, + noSpace: { + required: true, + validator: checkNoSpace, + trigger: 'blur', + }, simpleName: { required: true, validator: checkSimpleName, diff --git a/frontend/src/lang/modules/en.ts b/frontend/src/lang/modules/en.ts index 7c806e7bc..dfcfbd9e2 100644 --- a/frontend/src/lang/modules/en.ts +++ b/frontend/src/lang/modules/en.ts @@ -1050,6 +1050,7 @@ const message = { oldPassword: 'Original password', newPassword: 'New password', retryPassword: 'Confirm password', + noSpace: 'Input information cannot include space characters', duplicatePassword: 'The new password cannot be the same as the original password, please re-enter!', diskClean: 'Cache Clean', diff --git a/frontend/src/lang/modules/tw.ts b/frontend/src/lang/modules/tw.ts index 352be17fe..004ca44ed 100644 --- a/frontend/src/lang/modules/tw.ts +++ b/frontend/src/lang/modules/tw.ts @@ -1006,6 +1006,7 @@ const message = { oldPassword: '原密碼', newPassword: '新密碼', retryPassword: '確認密碼', + noSpace: '輸入信息不能包括空格符號', duplicatePassword: '新密碼不能與原始密碼一致,請重新輸入!', diskClean: '缓存清理', diff --git a/frontend/src/lang/modules/zh.ts b/frontend/src/lang/modules/zh.ts index 4be57f888..4b8de1cd4 100644 --- a/frontend/src/lang/modules/zh.ts +++ b/frontend/src/lang/modules/zh.ts @@ -1006,6 +1006,7 @@ const message = { oldPassword: '原密码', newPassword: '新密码', retryPassword: '确认密码', + noSpace: '输入信息不能包含空格符', duplicatePassword: '新密码不能与原始密码一致,请重新输入!', diskClean: '缓存清理', diff --git a/frontend/src/views/setting/expired.vue b/frontend/src/views/setting/expired.vue index a1c1e799d..ac9c3393e 100644 --- a/frontend/src/views/setting/expired.vue +++ b/frontend/src/views/setting/expired.vue @@ -16,30 +16,22 @@ label-position="left" label-width="160px" > - <el-form-item :label="$t('setting.oldPassword')" prop="oldPassword"> - <el-input type="password" show-password clearable v-model="passForm.oldPassword" /> + <el-form-item :label="$t('setting.oldPassword')" prop="oldPass"> + <el-input type="password" show-password clearable v-model.trim="passForm.oldPass" /> </el-form-item> - <el-form-item - v-if="settingForm?.complexityVerification === 'disable'" - :label="$t('setting.newPassword')" - prop="newPassword" - > - <el-input type="password" show-password clearable v-model="passForm.newPassword" /> + <el-form-item v-if="!isComplexity" :label="$t('setting.newPassword')" prop="newPass"> + <el-input type="password" show-password clearable v-model.trim="passForm.newPass" /> </el-form-item> - <el-form-item - v-if="settingForm?.complexityVerification === 'enable'" - :label="$t('setting.newPassword')" - prop="newPasswordComplexity" - > + <el-form-item v-if="isComplexity" :label="$t('setting.newPassword')" prop="newPassComplexity"> <el-input type="password" show-password clearable - v-model="passForm.newPasswordComplexity" + v-model.trim="passForm.newPassComplexity" /> </el-form-item> - <el-form-item :label="$t('setting.retryPassword')" prop="retryPassword"> - <el-input type="password" show-password clearable v-model="passForm.retryPassword" /> + <el-form-item :label="$t('setting.retryPassword')" prop="rePass"> + <el-input type="password" show-password clearable v-model.trim="passForm.rePass" /> </el-form-item> <el-form-item> <el-button type="primary" @click="submitChangePassword(passFormRef)"> @@ -61,30 +53,31 @@ import i18n from '@/lang'; import { Rules } from '@/global/form-rules'; import router from '@/routers'; import { MsgError, MsgSuccess } from '@/utils/message'; -let settingForm = ref(); + +let isComplexity = ref(false); type FormInstance = InstanceType<typeof ElForm>; const passFormRef = ref<FormInstance>(); const passRules = reactive({ - oldPassword: [Rules.requiredInput], - newPassword: [ + oldPass: [Rules.noSpace, Rules.requiredInput], + newPass: [ Rules.requiredInput, + Rules.noSpace, { min: 6, message: i18n.global.t('commons.rule.commonPassword'), trigger: 'blur' }, ], - newPasswordComplexity: [Rules.requiredInput, Rules.password], - retryPassword: [Rules.requiredInput, { validator: checkPassword, trigger: 'blur' }], + newPassComplexity: [Rules.requiredInput, Rules.noSpace, Rules.password], + rePass: [Rules.requiredInput, Rules.noSpace, { validator: checkPasswordSame, trigger: 'blur' }], }); const passForm = reactive({ - oldPassword: '', - newPassword: '', - newPasswordComplexity: '', - retryPassword: '', + oldPass: '', + newPass: '', + newPassComplexity: '', + rePass: '', }); -function checkPassword(rule: any, value: any, callback: any) { - let password = - settingForm.value.complexityVerification === 'disable' ? passForm.newPassword : passForm.newPasswordComplexity; - if (password !== passForm.retryPassword) { +function checkPasswordSame(rule: any, value: any, callback: any) { + let password = !isComplexity.value ? passForm.newPass : passForm.newPassComplexity; + if (password !== passForm.rePass) { return callback(new Error(i18n.global.t('commons.rule.rePassword'))); } callback(); @@ -94,22 +87,20 @@ const submitChangePassword = async (formEl: FormInstance | undefined) => { if (!formEl) return; formEl.validate(async (valid) => { if (!valid) return; - let password = - settingForm.value.complexityVerification === 'disable' - ? passForm.newPassword - : passForm.newPasswordComplexity; - if (password === passForm.oldPassword) { + let password = !isComplexity.value ? passForm.newPass : passForm.newPassComplexity; + if (password === passForm.oldPass) { MsgError(i18n.global.t('setting.duplicatePassword')); return; } - await handleExpired({ oldPassword: passForm.oldPassword, newPassword: password }); + await handleExpired({ oldPassword: passForm.oldPass, newPassword: password }); MsgSuccess(i18n.global.t('commons.msg.operationSuccess')); router.push({ name: 'home' }); }); }; const search = async () => { const res = await getSettingInfo(); - settingForm.value = res.data; + let settingForm = res.data; + isComplexity.value = settingForm?.complexityVerification === 'enable'; }; onMounted(() => { diff --git a/frontend/src/views/setting/panel/password/index.vue b/frontend/src/views/setting/panel/password/index.vue index eb6f1057a..e7d11f5e7 100644 --- a/frontend/src/views/setting/panel/password/index.vue +++ b/frontend/src/views/setting/panel/password/index.vue @@ -8,14 +8,14 @@ <el-row type="flex" justify="center"> <el-col :span="22"> <el-form-item :label="$t('setting.oldPassword')" prop="oldPassword"> - <el-input type="password" show-password clearable v-model="passForm.oldPassword" /> + <el-input type="password" show-password clearable v-model.trim="passForm.oldPassword" /> </el-form-item> <el-form-item v-if="complexityVerification === 'disable'" :label="$t('setting.newPassword')" prop="newPassword" > - <el-input type="password" show-password clearable v-model="passForm.newPassword" /> + <el-input type="password" show-password clearable v-model.trim="passForm.newPassword" /> </el-form-item> <el-form-item v-if="complexityVerification === 'enable'" @@ -26,11 +26,11 @@ type="password" show-password clearable - v-model="passForm.newPasswordComplexity" + v-model.trim="passForm.newPasswordComplexity" /> </el-form-item> <el-form-item :label="$t('setting.retryPassword')" prop="retryPassword"> - <el-input type="password" show-password clearable v-model="passForm.retryPassword" /> + <el-input type="password" show-password clearable v-model.trim="passForm.retryPassword" /> </el-form-item> </el-col> </el-row> @@ -64,14 +64,16 @@ import { logOutApi } from '@/api/modules/auth'; const globalStore = GlobalStore(); const passFormRef = ref<FormInstance>(); const passRules = reactive({ - oldPassword: [Rules.requiredInput], + oldPassword: [Rules.noSpace, Rules.requiredInput], newPassword: [ Rules.requiredInput, + Rules.noSpace, { min: 6, message: i18n.global.t('commons.rule.commonPassword'), trigger: 'blur' }, ], - newPasswordComplexity: [Rules.requiredInput, Rules.password], - retryPassword: [Rules.requiredInput, { validator: checkPassword, trigger: 'blur' }], + newPasswordComplexity: [Rules.requiredInput, Rules.noSpace, Rules.password], + retryPassword: [Rules.requiredInput, Rules.noSpace, { validator: checkPassword, trigger: 'blur' }], }); + const loading = ref(false); const passwordVisible = ref<boolean>(false); const passForm = reactive({ diff --git a/frontend/src/views/setting/panel/username/index.vue b/frontend/src/views/setting/panel/username/index.vue index 3b451f6ad..6a13a1ed1 100644 --- a/frontend/src/views/setting/panel/username/index.vue +++ b/frontend/src/views/setting/panel/username/index.vue @@ -4,11 +4,18 @@ <template #header> <DrawerHeader :header="$t('commons.login.username')" :back="handleClose" /> </template> - <el-form ref="formRef" label-position="top" :model="form" @submit.prevent v-loading="loading"> + <el-form + ref="formRef" + label-position="top" + :model="form" + @submit.prevent + v-loading="loading" + :rules="rules" + > <el-row type="flex" justify="center"> <el-col :span="22"> - <el-form-item :label="$t('commons.login.username')" prop="userName" :rules="Rules.userName"> - <el-input clearable v-model="form.userName" /> + <el-form-item :label="$t('commons.login.username')" prop="userName"> + <el-input clearable v-model.trim="form.userName" /> </el-form-item> </el-col> </el-row> @@ -46,7 +53,9 @@ const loading = ref(); const form = reactive({ userName: '', }); - +const rules = reactive({ + userName: [Rules.userName, Rules.noSpace], +}); const formRef = ref<FormInstance>(); const acceptParams = (params: DialogProps): void => {