You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
170 lines
4.8 KiB
170 lines
4.8 KiB
<script lang="ts" setup>
|
|
import type { FormInstance } from 'element-plus'
|
|
import { useSettingStore } from '@/stores/settingStore'
|
|
import { syncSendCmd } from 'apis/system'
|
|
import SoftKeyboard from 'components/common/SoftKeyboard/index.vue'
|
|
import { FtMessage } from 'libs/message'
|
|
import { ref, watchEffect } from 'vue'
|
|
|
|
const emits = defineEmits(['refresh'])
|
|
const settingStore = useSettingStore()
|
|
const visible = ref(settingStore.addUserVisible)
|
|
const modalType = ref(settingStore.userModalState)
|
|
const inputValue = ref<string>('')
|
|
const keyboardVisible = ref(false)
|
|
const keyboardType = ref<'text' | 'number'>('text')
|
|
const softKeyboardRef = ref()
|
|
const userFormRef = ref()
|
|
const focusedInput = ref<string | null>(null)
|
|
const modalTitle = ref('新增用户')
|
|
const userForm = ref<Record<string, any>>({
|
|
name: '',
|
|
passwd: '',
|
|
confirmPasswd: '',
|
|
roleType: '',
|
|
})
|
|
|
|
watchEffect(() => {
|
|
modalType.value = settingStore.userModalState
|
|
if (settingStore.userModalState === 'edit') {
|
|
modalTitle.value = '修改密码'
|
|
}
|
|
if (settingStore.currentEditUser) {
|
|
userForm.value = settingStore.currentEditUser
|
|
}
|
|
else {
|
|
modalTitle.value = '新增用户'
|
|
}
|
|
visible.value = settingStore.addUserVisible
|
|
if (focusedInput.value) {
|
|
userForm.value[focusedInput.value] = inputValue.value
|
|
}
|
|
})
|
|
|
|
const onSave = (formRef: FormInstance | undefined) => {
|
|
if (!formRef) {
|
|
return
|
|
}
|
|
formRef.validate((valid) => {
|
|
if (valid) {
|
|
if (userForm.value.id) {
|
|
doEdit()
|
|
}
|
|
else {
|
|
doSave()
|
|
}
|
|
}
|
|
else {
|
|
console.log('error submit!')
|
|
}
|
|
})
|
|
onClose()
|
|
}
|
|
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 doEdit = () => {
|
|
}
|
|
const doSave = () => {
|
|
const name = userForm.value.name
|
|
const passwd = userForm.value.passwd
|
|
const confirmPasswd = userForm.value.confirmPasswd
|
|
const roleType = userForm.value.roleType
|
|
if (passwd !== confirmPasswd) {
|
|
FtMessage.error('输入的密码不一致')
|
|
return
|
|
}
|
|
const saveParams = {
|
|
className: 'UserMgrService',
|
|
fnName: 'addUser',
|
|
params: {
|
|
name,
|
|
passwd,
|
|
roleType: roleType ? 'admin' : 'maintainer',
|
|
},
|
|
}
|
|
|
|
syncSendCmd(saveParams).then((res) => {
|
|
if (res.ackcode === 0) {
|
|
FtMessage.success('成功')
|
|
emits('refresh')
|
|
}
|
|
})
|
|
}
|
|
const onClose = () => {
|
|
settingStore.updateVisible(false)
|
|
}
|
|
const handleConfirm = (value: string) => {
|
|
console.log('确认输入:', value)
|
|
}
|
|
</script>
|
|
|
|
<template>
|
|
<FtDialog v-model="visible" :title="modalTitle" :ok-handle="() => { onSave(userFormRef) }" @cancel="onClose">
|
|
<div>
|
|
<el-form ref="userFormRef" :model="userForm" label-width="auto" style="max-width: 400px">
|
|
<el-form-item
|
|
v-if="!userForm.id"
|
|
label="登录名:"
|
|
prop="name"
|
|
:rules="[{
|
|
required: true,
|
|
message: '输入登录名',
|
|
trigger: ['blur', 'change'],
|
|
}]"
|
|
>
|
|
<el-input v-model="userForm.name" v-prevent-keyboard name="name" @focus="openKeyboard" placeholder="登录名" />
|
|
</el-form-item>
|
|
<div>
|
|
<el-form-item
|
|
label="密码:"
|
|
prop="passwd"
|
|
:rules="{
|
|
required: true,
|
|
message: '输入密码',
|
|
trigger: ['blur', 'change'],
|
|
}"
|
|
>
|
|
<el-input v-model="userForm.passwd" v-prevent-keyboard name="passwd" @focus="openKeyboard" type="password" placeholder="密码" />
|
|
</el-form-item>
|
|
<el-form-item
|
|
label="确认密码:"
|
|
prop="confirmPasswd"
|
|
:rules="{
|
|
required: true,
|
|
message: '输入密码',
|
|
trigger: ['blur', 'change'],
|
|
}"
|
|
>
|
|
<el-input v-model="userForm.confirmPasswd" v-prevent-keyboard name="confirmPasswd" @focus="openKeyboard" type="password" placeholder="确认密码" />
|
|
</el-form-item>
|
|
</div>
|
|
<el-form-item
|
|
label="是否管理员:"
|
|
>
|
|
<el-checkbox v-model="userForm.roleType" size="small" />
|
|
</el-form-item>
|
|
</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>
|
|
</FtDialog>
|
|
</template>
|
|
|
|
<style lang="scss" scoped>
|
|
</style>
|