| <template> | 
|   <el-dialog :title="editForm.title" draggable v-model="innerVisible" @close="onEditDialogClose"> | 
|     <el-form :rules="rules" :model="editForm" ref="editDialogForm" label-width="90px"> | 
|       <el-form-item label="编号" prop="enCode"> | 
|         <el-input placeholder="请输入编号" v-model.trim="editForm.enCode"></el-input> | 
|       </el-form-item> | 
|       <el-form-item label="名称" prop="name"> | 
|         <el-input placeholder="请输入名称" v-model.trim="editForm.name"></el-input> | 
|       </el-form-item> | 
|       <el-form-item v-if="editForm.showParentSelect" label="父级菜单" prop="parentId"> | 
|         <el-select v-model="editForm.parentId" placeholder="请选择父级菜单"> | 
|           <el-option | 
|             v-for="(item, index) in selectModuleList" | 
|             :key="index" | 
|             :label="item.data.name" | 
|             :value="item.data.id" | 
|           /> | 
|         </el-select> | 
|       </el-form-item> | 
|       <el-form-item v-if="editForm.showIconSelect" label="图片" prop="icon"> | 
|         <el-select v-model="editForm.icon" placeholder="请选择图片"> | 
|           <el-option v-for="(val, key) in MenuSvgIconMap" :key="key" :label="key" :value="val" /> | 
|         </el-select> | 
|       </el-form-item> | 
|       <el-form-item v-if="editForm.showSubMenuIconSelect" label="图片" prop="icon"> | 
|         <el-select v-model="editForm.icon" placeholder="请选择图片" clearable popper-class="popper"> | 
|           <GridSelectItem :optionsList="subMenuIconList"> | 
|             <template #default="{ gridItem }"> | 
|               <el-option | 
|                 v-for="item in gridItem" | 
|                 :key="item.icon_id" | 
|                 :label="item.font_class" | 
|                 :value="item.font_class" | 
|               > | 
|                 <span | 
|                   class="iconfont" | 
|                   style="font-size: 24px" | 
|                   :class="`icon-${item.font_class}`" | 
|                 ></span> | 
|               </el-option> | 
|             </template> | 
|           </GridSelectItem> | 
|         </el-select> | 
|       </el-form-item> | 
|       <el-form-item label="排序" prop="sortCode"> | 
|         <el-input-number | 
|           placeholder="请输入排序" | 
|           controls-position="right" | 
|           :min="0" | 
|           v-model="editForm.sortCode" | 
|         ></el-input-number> | 
|       </el-form-item> | 
|       <el-form-item label="路由" prop="path"> | 
|         <el-input placeholder="请输入路由地址" v-model.trim="editForm.path"></el-input> | 
|       </el-form-item> | 
|       <el-form-item v-if="editForm.showCacheSelect" label="缓存" prop="isCache"> | 
|         <el-switch v-model="editForm.isCache" /> | 
|       </el-form-item> | 
|       <el-form-item label="菜单" prop="isMenu"> | 
|         <el-switch v-model="editForm.isMenu" /> | 
|       </el-form-item> | 
|       <el-form-item label="有效" prop="enabledMark"> | 
|         <el-switch v-model="editForm.enabledMark" /> | 
|       </el-form-item> | 
|     </el-form> | 
|     <template #footer> | 
|       <span class="dialog-footer"> | 
|         <el-button @click="emit('onCancel')">取 消</el-button> | 
|         <el-button type="primary" @click="handleConfirm">确 定</el-button> | 
|       </span> | 
|     </template> | 
|   </el-dialog> | 
| </template> | 
|   | 
| <script setup lang="ts"> | 
| import { FormRules, FormInstance } from 'element-plus'; | 
| import { TreeModuleDtoGroupDto, TreeStore } from '@/utils'; | 
| import { MenuSvgIconMap } from '@/constants'; | 
| import { SubMenuManager, SubMenuIcon } from '@bole-core/theme'; | 
| import { GridSelectItem } from '@bole-core/components'; | 
|   | 
| defineOptions({ | 
|   name: 'AddOrEditModuleDialog', | 
| }); | 
|   | 
| type Props = { | 
|   modelValue: boolean; | 
|   form: { | 
|     enCode: string; | 
|     name: string; | 
|     icon: string; | 
|     parentId: string; | 
|     sortCode: number; | 
|     path: string; | 
|     isCache: boolean; | 
|     isMenu: boolean; | 
|     enabledMark: boolean; | 
|     showCacheSelect: boolean; | 
|     showIconSelect: boolean; | 
|     showSubMenuIconSelect: boolean; | 
|     showParentSelect: boolean; | 
|     title: string; | 
|   }; | 
|   currentAddingOrEditParentModule: TreeModuleDtoGroupDto; | 
|   moduleTreeStore: TreeStore<TreeModuleDtoGroupDto>; | 
| }; | 
|   | 
| const props = withDefaults(defineProps<Props>(), { | 
|   modelValue: false, | 
| }); | 
|   | 
| const subMenuIconList = ref<SubMenuIcon[]>([]); | 
|   | 
| onMounted(async () => { | 
|   let res = await SubMenuManager.getSubMenuIconList(); | 
|   subMenuIconList.value = res; | 
| }); | 
|   | 
| const selectModuleList = computed(() => { | 
|   const currentTreeNode = props.moduleTreeStore.getNode(props.currentAddingOrEditParentModule.id); | 
|   return currentTreeNode ? currentTreeNode.parent.childNodes : []; | 
| }); | 
|   | 
| const emit = defineEmits<{ | 
|   (e: 'update:modelValue', value: boolean): void; | 
|   (e: 'update:form', value: Props['form']): void; | 
|   (e: 'onConfirm'): void; | 
|   (e: 'onCancel'): void; | 
| }>(); | 
|   | 
| const editDialogForm = ref<FormInstance>(); | 
|   | 
| const innerVisible = computed({ | 
|   get() { | 
|     return props.modelValue; | 
|   }, | 
|   set(val) { | 
|     emit('update:modelValue', val); | 
|   }, | 
| }); | 
| const editForm = computed({ | 
|   get() { | 
|     return props.form; | 
|   }, | 
|   set(val) { | 
|     emit('update:form', val); | 
|   }, | 
| }); | 
|   | 
| const rules = reactive<FormRules>({ | 
|   enCode: [{ required: true, message: '请输入编号', trigger: 'blur' }], | 
|   name: [{ required: true, message: '请输入名称', trigger: 'blur' }], | 
|   // icon: [{ required: true, message: '请选择图片', trigger: 'change' }], | 
|   sortCode: [{ required: true, message: '请输入排序', trigger: 'blur' }], | 
|   path: [{ required: true, message: '请输入路由地址', trigger: 'blur' }], | 
| }); | 
|   | 
| function onEditDialogClose() { | 
|   if (!editDialogForm.value) return; | 
|   editDialogForm.value.resetFields(); | 
| } | 
|   | 
| function handleConfirm() { | 
|   if (!editDialogForm.value) return; | 
|   editDialogForm.value.validate((valid) => { | 
|     if (valid) { | 
|       emit('onConfirm'); | 
|     } else { | 
|       return; | 
|     } | 
|   }); | 
| } | 
| </script> |