Browse Source

fix: 设置-用户管理虚拟键盘替换; 修改密码自动赋值的问题

master
guoapeng 2 weeks ago
parent
commit
eae89659b6
  1. 104
      src/components/setting/AddUser.vue
  2. 55
      src/components/setting/ModifyPwd.vue

104
src/components/setting/AddUser.vue

@ -1,6 +1,5 @@
<script lang="ts" setup> <script lang="ts" setup>
import { syncSendCmd } from 'apis/system' import { syncSendCmd } from 'apis/system'
import SoftKeyboard from 'components/common/SoftKeyboard/index.vue'
import type { FormInstance, FormRules } from 'element-plus' import type { FormInstance, FormRules } from 'element-plus'
import { FtMessage } from 'libs/message' import { FtMessage } from 'libs/message'
import { reactive, ref, watchEffect } from 'vue' import { reactive, ref, watchEffect } from 'vue'
@ -12,9 +11,6 @@ const settingStore = useSettingStore()
const visible = ref(settingStore.addUserVisible) const visible = ref(settingStore.addUserVisible)
const modalType = ref(settingStore.userModalState) const modalType = ref(settingStore.userModalState)
const inputValue = ref<string>('') const inputValue = ref<string>('')
const keyboardVisible = ref(false)
const keyboardType = ref<'text' | 'number'>('text')
const softKeyboardRef = ref()
const userFormRef = ref() const userFormRef = ref()
const focusedInput = ref<string | null>(null) const focusedInput = ref<string | null>(null)
const modalTitle = ref('新增用户') const modalTitle = ref('新增用户')
@ -31,6 +27,7 @@ watchEffect(() => {
modalTitle.value = '修改密码' modalTitle.value = '修改密码'
if (settingStore.currentEditUser) { if (settingStore.currentEditUser) {
userForm.value = settingStore.currentEditUser userForm.value = settingStore.currentEditUser
userForm.value.passwd = ''
} }
} }
else { else {
@ -60,17 +57,8 @@ const onSave = (formRef: FormInstance | undefined) => {
} }
}) })
} }
const openKeyboard = (e: any) => {
setTimeout(() => {
keyboardVisible.value = true
const labelName = e.target.name
const formValue = userForm.value[labelName]
inputValue.value = formValue ? formValue.toString() : ''
focusedInput.value = e.target.name
}, 100)
}
const doEdit = () => {
}
const doEdit = () => {}
const doSave = () => { const doSave = () => {
const name = userForm.value.name const name = userForm.value.name
const passwd = userForm.value.passwd const passwd = userForm.value.passwd
@ -111,9 +99,7 @@ const onClose = () => {
focusedInput.value = null focusedInput.value = null
settingStore.updateVisible(false) settingStore.updateVisible(false)
} }
const handleConfirm = (value: string) => {
console.log('确认输入:', value)
}
interface UserForm { interface UserForm {
name: string name: string
passwd: string passwd: string
@ -160,57 +146,67 @@ const validateConfirmPasswd = (rule: any, value: string, callback: any) => {
} }
} }
const rules = reactive<FormRules<UserForm>>({ const rules = reactive<FormRules<UserForm>>({
name: [{ required: true, message: '输入登录名', trigger: 'blur' }, { min: 4, max: 10, message: '长度4-10', trigger: 'blur' }, { validator: validateUser, trigger: 'blur' }],
passwd: [{ required: true, message: '输入密码', trigger: 'blur' }, { min: 4, max: 10, message: '长度4-10', trigger: 'blur' }, { validator: validatePasswd, trigger: 'blur' }],
confirmPasswd: [{ required: true, message: '输入密码', trigger: 'blur' }, { min: 4, max: 10, message: '长度4-10', trigger: 'blur' }, { validator: validateConfirmPasswd, trigger: 'blur' }],
name: [
{ required: true, message: '输入登录名', trigger: 'blur' },
{ min: 4, max: 10, message: '长度4-10', trigger: 'blur' },
{ validator: validateUser, trigger: 'blur' },
],
passwd: [
{ required: true, message: '输入密码', trigger: 'blur' },
{ min: 4, max: 10, message: '长度4-10', trigger: 'blur' },
{ validator: validatePasswd, trigger: 'blur' },
],
confirmPasswd: [
{ required: true, message: '输入密码', trigger: 'blur' },
{ min: 4, max: 10, message: '长度4-10', trigger: 'blur' },
{ validator: validateConfirmPasswd, trigger: 'blur' },
],
}) })
</script> </script>
<template> <template>
<FtDialog v-if="visible" v-model="visible" :title="modalTitle" :ok-handle="() => { onSave(userFormRef) }" @cancel="onClose">
<FtDialog
v-if="visible"
v-model="visible"
:title="modalTitle"
:ok-handle="
() => {
onSave(userFormRef);
}
"
@cancel="onClose"
>
<div> <div>
<el-form ref="userFormRef" :model="userForm" :rules="rules" label-width="auto" style="max-width: 400px"> <el-form ref="userFormRef" :model="userForm" :rules="rules" label-width="auto" style="max-width: 400px">
<el-form-item
v-if="!userForm.id"
label="登录名:"
prop="name"
>
<el-input v-model="userForm.name" v-prevent-keyboard name="name" placeholder="登录名" @focus="openKeyboard" />
<el-form-item v-if="!userForm.id" label="登录名:" prop="name">
<ft-input v-model="userForm.name" name="name" placeholder="登录名" />
</el-form-item> </el-form-item>
<div> <div>
<el-form-item
label="密码:"
prop="passwd"
>
<el-input v-model="userForm.passwd" v-prevent-keyboard name="passwd" type="password" placeholder="密码" @focus="openKeyboard" />
<el-form-item label="密码:" prop="passwd">
<ft-input
v-model="userForm.passwd"
autocomplete="new-password"
name="passwd"
type="password"
placeholder="密码"
/>
</el-form-item> </el-form-item>
<el-form-item
label="确认密码:"
prop="confirmPasswd"
>
<el-input v-model="userForm.confirmPasswd" v-prevent-keyboard name="confirmPasswd" type="password" placeholder="确认密码" @focus="openKeyboard" />
<el-form-item label="确认密码:" prop="confirmPasswd">
<ft-input
v-model="userForm.confirmPasswd"
autocomplete="new-password"
name="confirmPasswd"
type="password"
placeholder="确认密码"
/>
</el-form-item> </el-form-item>
</div> </div>
<el-form-item
label="是否管理员:"
>
<el-form-item label="是否管理员:">
<el-checkbox v-model="userForm.roleType" size="small" /> <el-checkbox v-model="userForm.roleType" size="small" />
</el-form-item> </el-form-item>
</el-form> </el-form>
<Teleport to="body">
<SoftKeyboard
ref="softKeyboardRef"
v-model="inputValue"
:is-visible="keyboardVisible"
:keyboard-type="keyboardType"
@update-keyboard-visible="(visible) => keyboardVisible = visible"
@confirm="handleConfirm"
@close="keyboardVisible = false"
/>
</Teleport>
</div> </div>
</FtDialog> </FtDialog>
</template> </template>
<style lang="scss" scoped>
</style>
<style lang="scss" scoped></style>

55
src/components/setting/ModifyPwd.vue

@ -28,6 +28,7 @@ watchEffect(() => {
visible.value = settingStore.modifyPwdVisible visible.value = settingStore.modifyPwdVisible
if (settingStore.currentEditUser && settingStore.currentEditUser.id !== userForm.value.id) { if (settingStore.currentEditUser && settingStore.currentEditUser.id !== userForm.value.id) {
userForm.value = settingStore.currentEditUser userForm.value = settingStore.currentEditUser
userForm.value.newpasswd = ''
} }
if (focusedInput.value) { if (focusedInput.value) {
userForm.value[focusedInput.value] = inputValue.value userForm.value[focusedInput.value] = inputValue.value
@ -47,15 +48,6 @@ const onSave = (formRef: FormInstance | undefined) => {
} }
}) })
} }
const openKeyboard = (e: any) => {
setTimeout(() => {
keyboardVisible.value = true
const labelName = e.target.name
const formValue = userForm.value[labelName as keyof typeof userForm.value]
inputValue.value = formValue ? formValue.toString() : ''
focusedInput.value = e.target.name
}, 100)
}
const doSave = () => { const doSave = () => {
const passwd = userForm.value.passwd const passwd = userForm.value.passwd
const newpasswd = userForm.value.newpasswd const newpasswd = userForm.value.newpasswd
@ -122,14 +114,35 @@ const validateConfirmPasswd = (rule: any, value: string, callback: any) => {
} }
} }
const rules = reactive<FormRules>({ const rules = reactive<FormRules>({
passwd: [{ required: true, message: '输入旧密码', trigger: 'blur' }, { min: 4, max: 10, message: '长度4-10', trigger: 'blur' }, { validator: validatePasswd, trigger: 'blur' }],
newpasswd: [{ required: true, message: '输入新密码', trigger: 'blur' }, { min: 4, max: 10, message: '长度4-10', trigger: 'blur' }, { validator: validatePasswd, trigger: 'blur' }],
confirmPasswd: [{ required: true, message: '输入新密码', trigger: 'blur' }, { min: 4, max: 10, message: '长度4-10', trigger: 'blur' }, { validator: validateConfirmPasswd, trigger: 'blur' }],
passwd: [
{ required: true, message: '输入旧密码', trigger: 'blur' },
{ min: 4, max: 10, message: '长度4-10', trigger: 'blur' },
{ validator: validatePasswd, trigger: 'blur' },
],
newpasswd: [
{ required: true, message: '输入新密码', trigger: 'blur' },
{ min: 4, max: 10, message: '长度4-10', trigger: 'blur' },
{ validator: validatePasswd, trigger: 'blur' },
],
confirmPasswd: [
{ required: true, message: '输入新密码', trigger: 'blur' },
{ min: 4, max: 10, message: '长度4-10', trigger: 'blur' },
{ validator: validateConfirmPasswd, trigger: 'blur' },
],
}) })
</script> </script>
<template> <template>
<FtDialog v-model="visible" :title="modalTitle" :ok-handle="() => { onSave(userFormRef) }" @cancel="onClose">
<FtDialog
v-model="visible"
:title="modalTitle"
:ok-handle="
() => {
onSave(userFormRef);
}
"
@cancel="onClose"
>
<div> <div>
<el-form ref="userFormRef" :model="userForm" label-width="auto" style="max-width: 400px" :rules="rules"> <el-form ref="userFormRef" :model="userForm" label-width="auto" style="max-width: 400px" :rules="rules">
<div> <div>
@ -143,7 +156,7 @@ const rules = reactive<FormRules>({
trigger: ['blur', 'change'], trigger: ['blur', 'change'],
}" }"
> >
<el-input v-model="userForm.passwd" v-prevent-keyboard name="passwd" type="password" placeholder="密码" @focus="openKeyboard" />
<ft-input v-model="userForm.passwd" name="passwd" type="password" placeholder="密码" />
</el-form-item> </el-form-item>
<el-form-item <el-form-item
label="新密码:" label="新密码:"
@ -154,7 +167,7 @@ const rules = reactive<FormRules>({
trigger: ['blur', 'change'], trigger: ['blur', 'change'],
}" }"
> >
<el-input v-model="userForm.newpasswd" v-prevent-keyboard name="newpasswd" type="password" placeholder="密码" @focus="openKeyboard" />
<ft-input v-model="userForm.newpasswd" name="newpasswd" type="password" placeholder="密码" />
</el-form-item> </el-form-item>
<el-form-item <el-form-item
label="确认新密码:" label="确认新密码:"
@ -165,7 +178,12 @@ const rules = reactive<FormRules>({
trigger: ['blur', 'change'], trigger: ['blur', 'change'],
}" }"
> >
<el-input v-model="userForm.confirmNewPasswd" v-prevent-keyboard name="confirmNewPasswd" type="password" placeholder="确认密码" @focus="openKeyboard" />
<ft-input
v-model="userForm.confirmNewPasswd"
name="confirmNewPasswd"
type="password"
placeholder="确认密码"
/>
</el-form-item> </el-form-item>
</div> </div>
</el-form> </el-form>
@ -175,7 +193,7 @@ const rules = reactive<FormRules>({
v-model="inputValue" v-model="inputValue"
:is-visible="keyboardVisible" :is-visible="keyboardVisible"
:keyboard-type="keyboardType" :keyboard-type="keyboardType"
@update-keyboard-visible="(visible) => keyboardVisible = visible"
@update-keyboard-visible="visible => (keyboardVisible = visible)"
@confirm="handleConfirm" @confirm="handleConfirm"
@close="keyboardVisible = false" @close="keyboardVisible = false"
/> />
@ -184,5 +202,4 @@ const rules = reactive<FormRules>({
</FtDialog> </FtDialog>
</template> </template>
<style lang="scss" scoped>
</style>
<style lang="scss" scoped></style>
Loading…
Cancel
Save