| <template> | 
|   <ProDialog | 
|     :title="innerForm.title" | 
|     v-model="innerVisible" | 
|     @close="onDialogClose" | 
|     destroy-on-close | 
|     draggable | 
|   > | 
|     <ProForm :model="innerForm" ref="dialogForm" label-width="90px"> | 
|       <ProFormItemV2 label="姓名" prop="name" :check-rules="[{ message: '请输入姓名' }]"> | 
|         <ProFormText placeholder="请输入姓名" v-model.trim="innerForm.name"></ProFormText> | 
|       </ProFormItemV2> | 
|       <ProFormItemV2 | 
|         label="手机号" | 
|         prop="phoneNumber" | 
|         :check-rules="[{ message: '请输入手机号', type: 'phone' }]" | 
|       > | 
|         <ProFormText placeholder="请输入手机号" v-model.trim="innerForm.phoneNumber"></ProFormText> | 
|       </ProFormItemV2> | 
|       <ProFormItemV2 label="用户名" prop="userName" :check-rules="[{ message: '请输入用户名' }]"> | 
|         <ProFormText placeholder="请输入用户名" v-model.trim="innerForm.userName"></ProFormText> | 
|       </ProFormItemV2> | 
|       <ProFormItemV2 | 
|         v-if="!isEdit" | 
|         label="密码" | 
|         prop="password" | 
|         :check-rules="[{ message: '请输入密码' }]" | 
|       > | 
|         <ProFormText placeholder="请输入密码" v-model.trim="innerForm.password"></ProFormText> | 
|       </ProFormItemV2> | 
|       <ProFormItemV2 | 
|         v-if="!isEdit" | 
|         label="操作密码" | 
|         prop="operatorPassword" | 
|         :check-rules="[ | 
|           { message: '请输入操作密码' }, | 
|           { | 
|             message: '请输入6位数字', | 
|             pattern: /\b\d{6}\b/, | 
|           }, | 
|         ]" | 
|       > | 
|         <ProFormText | 
|           placeholder="请输入操作密码" | 
|           v-model.trim="innerForm.operatorPassword" | 
|         ></ProFormText> | 
|       </ProFormItemV2> | 
|       <ProFormItemV2 label="角色" prop="roleIds" :check-rules="[{ message: '请选择角色' }]"> | 
|         <ProFormCheckbox | 
|           v-model="innerForm.roleIds" | 
|           :value-enum="userInfoRoles" | 
|           enumLabelKey="name" | 
|           enum-value-key="id" | 
|         ></ProFormCheckbox> | 
|       </ProFormItemV2> | 
|       <ProFormItemV2 label="备注:" prop="remark"> | 
|         <ProFormTextArea | 
|           v-model="innerForm.remark" | 
|           placeholder="请输入备注" | 
|           show-word-limit | 
|           :maxlength="2000" | 
|         ></ProFormTextArea> | 
|       </ProFormItemV2> | 
|     </ProForm> | 
|     <template #footer> | 
|       <span class="dialog-footer"> | 
|         <el-button @click="emit('onCancel')">取 消</el-button> | 
|         <el-button type="primary" @click="handleConfirm">确 定</el-button> | 
|       </span> | 
|     </template> | 
|   </ProDialog> | 
| </template> | 
|   | 
| <script setup lang="ts"> | 
| import { FormRules, FormInstance } from 'element-plus'; | 
| import { | 
|   ProDialog, | 
|   ProForm, | 
|   ProFormItemV2, | 
|   ProFormText, | 
|   ProFormTextArea, | 
|   ProFormCheckbox, | 
|   ProFormSelect, | 
| } from '@bole-core/components'; | 
| import { BoleRegExp } from '@bole-core/core'; | 
| import { useUserInfoRoles } from '@/hooks'; | 
|   | 
| defineOptions({ | 
|   name: 'AddOrEditUserDialog', | 
| }); | 
|   | 
| type Props = { | 
|   modelValue: boolean; | 
|   form: { | 
|     name: string; | 
|     title?: string; | 
|     id: string; | 
|     userName: string; | 
|     phoneNumber: string; | 
|     remark: string; | 
|     roleIds: string[]; | 
|     password?: string; | 
|     operatorPassword?: string; | 
|   }; | 
| }; | 
|   | 
| const props = withDefaults(defineProps<Props>(), { | 
|   modelValue: false, | 
| }); | 
|   | 
| const { userInfoRoles } = useUserInfoRoles({ | 
|   userInfoId: toRef(props.form, 'id'), | 
|   userType: EnumUserType.Enterprise, | 
|   clientType: EnumClientType.PcWeb, | 
| }); | 
|   | 
| const isEdit = computed(() => !!props.form.id); | 
|   | 
| const emit = defineEmits<{ | 
|   (e: 'update:modelValue', value: boolean): void; | 
|   (e: 'update:form', value: Props['form']): void; | 
|   (e: 'onConfirm'): void; | 
|   (e: 'onCancel'): void; | 
| }>(); | 
|   | 
| const dialogForm = ref<FormInstance>(); | 
|   | 
| const innerVisible = computed({ | 
|   get() { | 
|     return props.modelValue; | 
|   }, | 
|   set(val) { | 
|     emit('update:modelValue', val); | 
|   }, | 
| }); | 
|   | 
| const innerForm = computed({ | 
|   get() { | 
|     return props.form; | 
|   }, | 
|   set(val) { | 
|     emit('update:form', val); | 
|   }, | 
| }); | 
|   | 
| function onDialogClose() { | 
|   if (!dialogForm.value) return; | 
|   dialogForm.value.resetFields(); | 
| } | 
|   | 
| function handleConfirm() { | 
|   if (!dialogForm.value) return; | 
|   dialogForm.value.validate((valid) => { | 
|     if (valid) { | 
|       emit('onConfirm'); | 
|     } else { | 
|       return; | 
|     } | 
|   }); | 
| } | 
| </script> |