{"version":3,"file":"crud2.mjs","sources":["../../../../../../../packages/components/crud/src/crud.vue"],"sourcesContent":["<script lang=\"ts\" setup>\r\nimport { computed, nextTick, onMounted, ref, useSlots, watch } from 'vue'\r\nimport { ElMessageBox } from 'element-plus'\r\nimport { cloneDeep, get, set } from 'lodash-unified'\r\nimport { useGlobalConfig } from '@m-eleplus-crud/components'\r\nimport { useLocale } from '@m-eleplus-crud/hooks'\r\nimport { crudEmits, crudProps } from './crud'\r\nimport type { ISearchColumn, ISearchOption, SearchInstance } from '../../search'\r\nimport type { ITableColumn, ITableOption, TableInstance } from '../../table'\r\nimport type { ICrudColumn, ICrudOption } from './crud'\r\nimport type { FormInstance, IFormColumn, IFormOption } from '../../form'\r\n\r\nconst COMPONENT_NAME = 'MCrud'\r\ndefineOptions({\r\n  name: COMPONENT_NAME,\r\n})\r\n\r\nconst props = defineProps(crudProps)\r\nconst emit = defineEmits(crudEmits)\r\n\r\n// 插槽信息\r\nconst slots = useSlots() as any\r\n\r\n// 全局配置\r\nconst globalConfig = useGlobalConfig()\r\n\r\n// 国际化配置\r\nconst { t } = useLocale()\r\n\r\n// 搜索插槽\r\nconst searchSlots = computed(() => {\r\n  const keys = Object.keys(slots)\r\n  const result: any = {}\r\n  for (const key of keys) {\r\n    if (key.endsWith('Search')) {\r\n      result[key.replace('Search', '')] = slots[key]\r\n    }\r\n  }\r\n  return result\r\n})\r\n\r\n// 表单插槽\r\nconst formSlots = computed(() => {\r\n  const keys = Object.keys(slots)\r\n  const result: any = {}\r\n  for (const key of keys) {\r\n    if (key.endsWith('Form')) {\r\n      result[key.replace('Form', '')] = slots[key]\r\n    }\r\n  }\r\n  return result\r\n})\r\n\r\n// 列表插槽\r\nconst tableSlots = computed(() => {\r\n  const whites = ['topLeft', 'topRight', 'addBtn']\r\n  const keys = Object.keys(slots)\r\n  const result: any = {}\r\n  for (const key of keys) {\r\n    if (\r\n      !whites.includes(key) &&\r\n      !key.endsWith('Search') &&\r\n      !key.endsWith('Form')\r\n    ) {\r\n      result[key] = slots[key]\r\n    }\r\n  }\r\n  return result\r\n})\r\n\r\n/**\r\n * @description crud配置项\r\n */\r\nconst crudOption = ref<ICrudOption>({\r\n  // 默认显示添加按钮\r\n  addBtn: true,\r\n  // 默认显示编辑按钮\r\n  editBtn: true,\r\n  // 默认显示删除按钮\r\n  delBtn: true,\r\n  // 添加按钮文字\r\n  addBtnText: t('m.crud.addBtnText'),\r\n  // 添加按钮图标\r\n  addBtnIcon: 'Plus',\r\n  // 添加对话框标题\r\n  addDialogTitle: t('m.crud.addDialogTitle'),\r\n  // 编辑对话框标题\r\n  editDialogTitle: t('m.crud.editDialogTitle'),\r\n  // 查看对话框标题\r\n  viewDialogTitle: t('m.crud.viewDialogTitle'),\r\n  // 对话框宽度\r\n  dialogWidth: '800px',\r\n\r\n  column: [],\r\n})\r\n\r\n/**\r\n * @description 对话框类型\r\n */\r\nconst dialogType = ref<'add' | 'edit' | 'view'>('add')\r\n\r\n/**\r\n * @description 搜索ref\r\n */\r\nconst searchRef = ref<SearchInstance>()\r\n\r\n/**\r\n * @description 表单ref\r\n */\r\nconst formRef = ref<FormInstance>()\r\n\r\n/**\r\n * @description 表格ref\r\n */\r\nconst tableRef = ref<TableInstance>()\r\n\r\n/**\r\n * @description 对话框显示状态\r\n */\r\nconst dialogVisible = ref(false)\r\n\r\n/**\r\n * @description 表格高度\r\n */\r\nconst tableHeight = ref<any>(undefined)\r\n\r\n// 备份modelForm\r\nconst _modelForm = ref<any>()\r\n\r\n// 备份列表index\r\nconst _rowIndex = ref(-1)\r\n\r\n/**\r\n * @description 对话框标题\r\n */\r\nconst dialogTitle = computed(() => {\r\n  if (dialogType.value === 'add') {\r\n    return crudOption.value.addDialogTitle\r\n  }\r\n  if (dialogType.value === 'edit') {\r\n    return crudOption.value.editDialogTitle\r\n  }\r\n  return crudOption.value.viewDialogTitle\r\n})\r\n\r\n/**\r\n * @description 表单数据\r\n */\r\nconst modelForm = computed({\r\n  get() {\r\n    return props.modelValue\r\n  },\r\n  set(value: any) {\r\n    emit('update:modelValue', value)\r\n  },\r\n})\r\n\r\n// 备份第一次的modelForm\r\nconst __firstModelForm = ref<any>({})\r\n__firstModelForm.value = props.modelValue\r\n\r\n/**\r\n * @description table配置项\r\n */\r\nconst tableOption = ref<ITableOption>({\r\n  // 默认显示操作栏\r\n  menu: true,\r\n\r\n  column: [],\r\n})\r\n\r\n/**\r\n * @description search配置项\r\n */\r\nconst searchOption = ref<ISearchOption>({\r\n  column: [],\r\n})\r\n\r\n/**\r\n * @description form配置项\r\n */\r\nconst formOption = computed<IFormOption>(() => {\r\n  let option: IFormOption = {\r\n    column: [],\r\n  }\r\n  option = transFormOption(\r\n    Object.assign({}, option, copyObjectExcept(crudOption.value, ['column']))\r\n  )\r\n  for (let i = 0; i < crudOption.value.column.length; i++) {\r\n    const item = cloneDeep(crudOption.value.column[i])\r\n    const formColumn: IFormColumn = transFormColumn(item)\r\n\r\n    if (['index', 'single', 'selection'].includes(item.type || '')) {\r\n      continue\r\n    }\r\n\r\n    if (dialogType.value === 'add') {\r\n      // 新增模式\r\n      if (!item.addHide) {\r\n        option.column.push(formColumn)\r\n      }\r\n    } else if (dialogType.value === 'edit') {\r\n      // 编辑模式\r\n      if (!item.editHide) {\r\n        option.column.push(formColumn)\r\n      }\r\n    } else {\r\n      // 查看模式\r\n      if (!item.viewHide) {\r\n        option.column.push(formColumn)\r\n      }\r\n    }\r\n  }\r\n\r\n  return option\r\n})\r\n\r\n/**\r\n * @description 搜索代理\r\n */\r\nconst searchProxys = new Proxy(props.search, {\r\n  get(target, key) {\r\n    return get(target, key)\r\n  },\r\n  set(target, key, value) {\r\n    set(target, key, value)\r\n    return true\r\n  },\r\n})\r\n\r\n/**\r\n * @description 选择的数据\r\n */\r\nconst selectData = computed({\r\n  get() {\r\n    return props.select\r\n  },\r\n  set(value: any) {\r\n    emit('update:select', value)\r\n  },\r\n})\r\n\r\n/**\r\n * 转换search列\r\n * @param option 列配置\r\n */\r\nconst transSearchColumn = (column: ICrudColumn): ISearchColumn => {\r\n  const result: ISearchColumn = cloneDeep(column) as ISearchColumn\r\n  // 转换排序\r\n  if (column.searchOrder) {\r\n    result.order = column.searchOrder\r\n  } else {\r\n    delete result.order\r\n  }\r\n  // 转换默认值\r\n  if (column.searchValue) {\r\n    result.value = column.searchValue\r\n  } else {\r\n    delete result.value\r\n  }\r\n  // 转换占位符\r\n  if (column.searchPlaceholder) {\r\n    result.placeholder = column.searchPlaceholder\r\n  } else {\r\n    delete result.placeholder\r\n  }\r\n  // 转换表单校验规则\r\n  if (column.searchRules) {\r\n    result.rules = column.searchRules\r\n  } else {\r\n    delete result.rules\r\n  }\r\n  // 转换栅格\r\n  if (column.searchSpan) {\r\n    result.span = column.searchSpan\r\n  } else {\r\n    delete result.span\r\n  }\r\n  // 转换labelWidth\r\n  if (column.searchLabelWidth) {\r\n    result.labelWidth = column.searchLabelWidth\r\n  } else {\r\n    delete result.labelWidth\r\n  }\r\n  // 转换clearable\r\n  if (column.searchClearable) {\r\n    result.clearable = column.searchClearable\r\n  } else {\r\n    delete result.clearable\r\n  }\r\n\r\n  return result\r\n}\r\n\r\n/**\r\n * 转换form列\r\n * @param column 列配置\r\n * @param type 类型\r\n */\r\nconst transFormColumn = (column: ICrudColumn): IFormColumn => {\r\n  const result: IFormColumn = cloneDeep(column) as IFormColumn\r\n  // 转换排序\r\n  if (column.formOrder) {\r\n    result.order = column.formOrder\r\n  } else {\r\n    delete result.order\r\n  }\r\n  // 转换默认值\r\n  if (column.formValue) {\r\n    result.value = column.formValue\r\n  } else {\r\n    delete result.value\r\n  }\r\n  // 转换占位符\r\n  if (column.formPlaceholder) {\r\n    result.placeholder = column.formPlaceholder\r\n  } else {\r\n    delete result.placeholder\r\n  }\r\n  // 转换表单校验规则\r\n  if (column.formRules) {\r\n    result.rules = column.formRules\r\n  } else {\r\n    delete result.rules\r\n  }\r\n  // 转换labelWidth\r\n  if (column.formLabelWidth) {\r\n    result.labelWidth = column.formLabelWidth\r\n  } else {\r\n    delete result.labelWidth\r\n  }\r\n  // 转换clearable\r\n  if (column.formClearable) {\r\n    result.clearable = column.formClearable\r\n  } else {\r\n    delete result.clearable\r\n  }\r\n  // 转换栅格\r\n  if (column.formSpan || column.addSpan || column.editSpan || column.viewSpan) {\r\n    if (column.formSpan) {\r\n      result.span = column.formSpan\r\n    }\r\n    if (dialogType.value === 'add' && column.addSpan) {\r\n      result.span = column.addSpan\r\n    } else if (dialogType.value === 'edit' && column.editSpan) {\r\n      result.span = column.editSpan\r\n    } else if (dialogType.value === 'view' && column.viewSpan) {\r\n      result.span = column.viewSpan\r\n    }\r\n  } else {\r\n    delete result.span\r\n  }\r\n  if (column.addDisabled || column.editDisabled) {\r\n    if (dialogType.value === 'add' && column.addDisabled) {\r\n      result.disabled = column.addDisabled\r\n    } else if(dialogType.value === 'edit' && column.editDisabled) {\r\n      result.disabled = column.editDisabled\r\n    }\r\n  }\r\n\r\n  return result\r\n}\r\n\r\n/**\r\n * 转换search option\r\n * @param option crud option\r\n */\r\nconst transSearchOption = (option: ICrudOption): ISearchOption => {\r\n  const result: ISearchOption = cloneDeep(option) as ISearchOption\r\n  // 转换labelWidth\r\n  if (option.searchLabelWidth) {\r\n    result.labelWidth = option.searchLabelWidth\r\n  } else {\r\n    delete result.labelWidth\r\n  }\r\n\r\n  return result\r\n}\r\n\r\n/**\r\n * 转换form option\r\n * @param option crud option\r\n */\r\nconst transFormOption = (option: ICrudOption): IFormOption => {\r\n  const result: IFormOption = cloneDeep(option) as IFormOption\r\n  // 转换labelWidth\r\n  if (option.formLabelWidth) {\r\n    result.labelWidth = option.formLabelWidth\r\n  } else {\r\n    delete result.labelWidth\r\n  }\r\n\r\n  return result\r\n}\r\n\r\n/**\r\n * @description 当前页发生改变\r\n */\r\nconst currentPageChange = (page: number) => {\r\n  searchRef.value?.search(page)\r\n}\r\n\r\n/**\r\n * @description 页大小发生变化\r\n */\r\nconst pageSizeChange = (pageSize: number) => {\r\n  searchProxys.limit = pageSize\r\n  searchRef.value?.search()\r\n}\r\n\r\n/**\r\n * @description 搜索事件\r\n * @param form 搜索表单值\r\n * @param done 完成回调\r\n */\r\nconst handleSearch = (form: any) => {\r\n  tableRef.value?.clearSelection()\r\n  emit('search', form)\r\n}\r\n\r\n/**\r\n * @description 重置搜索\r\n */\r\nconst handleReset = () => {\r\n  tableRef.value?.clearSelection()\r\n  emit('reset')\r\n}\r\n\r\n/**\r\n * @description 获取表格高度\r\n */\r\nconst setTableHeight = () => {\r\n  nextTick(() => {\r\n    // 自动高度\r\n    if (crudOption.value.height === 'auto') {\r\n      // 表格style对象\r\n      const tableStyle = tableRef.value?.$el\r\n      // 分页对象\r\n      // const pageStyle: any = document.querySelector('.m-pagination-box')\r\n      // 额外可控制高度参数\r\n      const calcHeight: number =\r\n        crudOption.value.calcHeight || globalConfig.value?.calcHeight || 0\r\n      tableHeight.value =\r\n        document.documentElement.clientHeight -\r\n        (tableStyle?.offsetTop || 0) -\r\n        72 -\r\n        calcHeight\r\n    } else {\r\n      tableHeight.value = crudOption.value.height\r\n    }\r\n  })\r\n}\r\n\r\n/**\r\n * 打开新增对话框\r\n */\r\nconst rowAdd = () => {\r\n  dialogType.value = 'add'\r\n  dialogVisible.value = true\r\n}\r\n\r\n/**\r\n * @description 打开编辑修改\r\n */\r\nconst rowEdit = (row: any, index: number) => {\r\n  // 备份数据\r\n  _modelForm.value = cloneDeep(row)\r\n  _rowIndex.value = index\r\n\r\n  // 弹窗类型\r\n  dialogType.value = 'edit'\r\n  modelForm.value = cloneDeep(row)\r\n  // 弹窗状态\r\n  dialogVisible.value = true\r\n}\r\n\r\n/**\r\n * @description 打开详情\r\n */\r\nconst rowView = (row: any, index: number) => {\r\n  // 备份数据\r\n  _modelForm.value = cloneDeep(row)\r\n  _rowIndex.value = index\r\n\r\n  // 弹窗类型\r\n  dialogType.value = 'view'\r\n  modelForm.value = cloneDeep(row)\r\n  // 弹窗状态\r\n  dialogVisible.value = true\r\n}\r\n\r\n/**\r\n * @description 打开删除\r\n */\r\nconst rowDel = (row: any, index: number) => {\r\n  ElMessageBox.confirm('此操作将删除该数据, 是否继续?', '提示', {\r\n    confirmButtonText: '确定',\r\n    cancelButtonText: '取消',\r\n    type: 'warning',\r\n  })\r\n    .then(() => {\r\n      emit('rowDel', row, index)\r\n    })\r\n    .catch(() => {})\r\n}\r\n\r\n/**\r\n * 对话框确认事件\r\n * @param done 完成\r\n * @param loading 结束加载\r\n */\r\nconst dialogEnter = async (done: () => void, loading: () => void) => {\r\n  const valid = await formRef.value!.validForm()\r\n  // 校验不通过\r\n  if (!valid) {\r\n    loading()\r\n    return\r\n  }\r\n\r\n  // 表单前校验\r\n  if (props.beforeEnter && !(await props.beforeEnter())) {\r\n    loading()\r\n    return\r\n  }\r\n\r\n  if (dialogType.value === 'add') {\r\n    // 新增\r\n    emit('rowSave', modelForm.value, done, loading)\r\n  } else if (dialogType.value === 'edit') {\r\n    // 修改\r\n    emit('rowEdit', modelForm.value, done, loading)\r\n  }\r\n}\r\n\r\nconst dialogCancel = () => {\r\n  emit('rowCancel', _modelForm.value || {}, _rowIndex.value, dialogType.value)\r\n}\r\n\r\n/**\r\n * @description 弹窗关闭\r\n */\r\nconst dialogClose = () => {\r\n  // 清空备份\r\n  _modelForm.value = null\r\n  _rowIndex.value = -1\r\n\r\n  if (formRef.value) {\r\n    formRef.value.clear()\r\n    modelForm.value = cloneDeep(__firstModelForm.value)\r\n  } else {\r\n    emit('update:modelValue', cloneDeep(__firstModelForm.value))\r\n  }\r\n}\r\n\r\n/**\r\n * 复制对象到新对象，排除指定key\r\n * @param sourceObj 源对象\r\n * @param excludeKeys 排除的key\r\n */\r\nconst copyObjectExcept = (sourceObj: any, excludeKeys: string[] = []) => {\r\n  const result: any = {}\r\n  Object.keys(sourceObj).forEach((key) => {\r\n    if (!excludeKeys.includes(key)) {\r\n      result[key] = sourceObj[key]\r\n    }\r\n  })\r\n  return result\r\n}\r\n\r\n/**\r\n * 排序变化\r\n * @param data \r\n */\r\nconst sortChange = (data: {column: any, prop: string, order: any }) => {\r\n  emit('sortChange', data)\r\n}\r\n\r\nwatch(\r\n  () => props.option as ICrudOption,\r\n  (newVal: ICrudOption) => {\r\n    if (newVal) {\r\n      // crud配置项\r\n      crudOption.value = Object.assign({}, crudOption.value, newVal)\r\n      // table配置项\r\n      tableOption.value = Object.assign(\r\n        {},\r\n        tableOption.value,\r\n        copyObjectExcept(crudOption.value, ['column'])\r\n      )\r\n      // search配置项\r\n      searchOption.value = transSearchOption(\r\n        Object.assign(\r\n          {},\r\n          searchOption.value,\r\n          copyObjectExcept(crudOption.value, ['column'])\r\n        )\r\n      )\r\n\r\n      const searchColumns: ISearchColumn[] = []\r\n      const tableColumns: ITableColumn[] = []\r\n      if (newVal.column && newVal.column.length) {\r\n        for (let i = 0; i < newVal.column.length; i++) {\r\n          const item = newVal.column[i]\r\n          // 处理搜索列\r\n          if (\r\n            item.search &&\r\n            !['index', 'single', 'selection'].includes(item.type || '')\r\n          ) {\r\n            searchColumns.push(transSearchColumn(item))\r\n          }\r\n          // 列表\r\n          if (!item.hide) {\r\n            tableColumns.push(item)\r\n          }\r\n        }\r\n        searchOption.value.column = searchColumns\r\n        tableOption.value.column = tableColumns\r\n      }\r\n    }\r\n  },\r\n  {\r\n    immediate: true,\r\n    deep: true,\r\n  }\r\n)\r\n\r\nonMounted(() => {\r\n  // 设置表格高度\r\n  if (crudOption.value.height) {\r\n    setTableHeight()\r\n  }\r\n})\r\n\r\ndefineExpose({\r\n  /**\r\n   * @description 新增\r\n   */\r\n  rowAdd,\r\n  /**\r\n   * @description 编辑\r\n   */\r\n  rowEdit,\r\n  /**\r\n   * @description 查看\r\n   */\r\n  rowView,\r\n  /**\r\n   * @description 删除\r\n   */\r\n  rowDel,\r\n})\r\n</script>\r\n\r\n<template>\r\n  <div class=\"m-crud\">\r\n    <MSearch\r\n      ref=\"searchRef\"\r\n      :model=\"searchProxys\"\r\n      :option=\"searchOption\"\r\n      :size=\"size || globalConfig.size\"\r\n      :permission=\"permission\"\r\n      @search=\"handleSearch\"\r\n      @reset=\"handleReset\"\r\n    >\r\n      <!-- 搜索插槽 -->\r\n      <template\r\n        v-for=\"(slotKey, index) in Object.keys(searchSlots)\"\r\n        :key=\"index\"\r\n        #[slotKey]=\"scope\"\r\n      >\r\n        <slot :name=\"slotKey + 'Search'\" v-bind=\"scope\" />\r\n      </template>\r\n      <!---->\r\n    </MSearch>\r\n    <!--顶部操作区域-->\r\n    <div v-if=\"crudOption.addBtn || slots.topLeft || slots.topRight\" class=\"m-search-top\">\r\n      <div v-if=\"crudOption.addBtn || slots.topLeft\" class=\"m-search-left\">\r\n        <el-button\r\n          v-if=\"crudOption.addBtn && !slots.addBtn && permission['add'] !== false\"\r\n          :size=\"size || globalConfig.size\"\r\n          type=\"primary\"\r\n          :icon=\"crudOption.addBtnIcon\"\r\n          @click=\"rowAdd()\"\r\n        >\r\n          {{ crudOption.addBtnText }}\r\n        </el-button>\r\n        <slot name=\"addBtn\" v-if=\"permission['add'] !== false\" v-bind=\"{ size: size || globalConfig.size }\" />\r\n        <slot name=\"topLeft\" v-bind=\"{ size: size || globalConfig.size }\" />\r\n      </div>\r\n      <div class=\"m-search-left\" v-else></div>\r\n      <div class=\"m-search-right\">\r\n        <slot name=\"topRight\" v-bind=\"{ size: size || globalConfig.size }\" />\r\n      </div>\r\n    </div>\r\n    <!---->\r\n    <!--表格-->\r\n    <MTable\r\n      ref=\"tableRef\"\r\n      v-model:select=\"selectData\"\r\n      :data=\"data\"\r\n      :size=\"size || globalConfig.size\"\r\n      :loading=\"loading\"\r\n      :permission=\"permission\"\r\n      :option=\"tableOption\"\r\n      :height=\"tableHeight\"\r\n      :max-height=\"tableHeight\"\r\n      @sort-change=\"sortChange\"\r\n    >\r\n      <!-- 列表插槽 -->\r\n      <template\r\n        v-for=\"(slotKey, index) in Object.keys(tableSlots)\"\r\n        :key=\"index\"\r\n        #[slotKey]=\"scope\"\r\n      >\r\n        <slot :name=\"slotKey\" v-bind=\"scope\" />\r\n      </template>\r\n      <!---->\r\n      <!--操作栏-->\r\n      <template #menu=\"scope\">\r\n        <el-link\r\n          v-if=\"crudOption.editBtn && !slots.editBtn && permission['edit'] !== false\"\r\n          class=\"m-control-btns\"\r\n          type=\"primary\"\r\n          :size=\"size || globalConfig.size\"\r\n          underline=\"never\"\r\n          icon=\"Edit\"\r\n          @click=\"rowEdit(scope.row, scope.$index)\"\r\n        >\r\n          {{ t('m.crud.editBtnText') }}\r\n        </el-link>\r\n        <slot\r\n          v-if=\"crudOption.editBtn && slots.editBtn && permission['edit'] !== false\"\r\n          name=\"editBtn\"\r\n          v-bind=\"scope\"\r\n        />\r\n        <el-link\r\n          v-if=\"crudOption.delBtn && !slots.delBtn && permission['del'] !== false\"\r\n          class=\"m-control-btns\"\r\n          type=\"primary\"\r\n          underline=\"never\"\r\n          :size=\"size || globalConfig.size\"\r\n          icon=\"Delete\"\r\n          @click=\"rowDel(scope.row, scope.$index)\"\r\n        >\r\n          {{ t('m.crud.delBtnText') }}\r\n        </el-link>\r\n        <slot\r\n          v-if=\"crudOption.delBtn && slots.delBtn && permission['del'] !== false\"\r\n          name=\"delBtn\"\r\n          v-bind=\"scope\"\r\n        />\r\n        <slot\r\n          v-if=\"\r\n            crudOption.menu && slots.menu && !(slots.editBtn || slots.delBtn)\r\n          \"\r\n          name=\"menu\"\r\n          v-bind=\"scope\"\r\n        />\r\n      </template>\r\n      <!---->\r\n    </MTable>\r\n    <!---->\r\n    <!--分页区域-->\r\n    <div v-if=\"searchProxys.page && total\" class=\"m-pagination-box\">\r\n      <m-pagination\r\n        :small=\"(size || globalConfig.size) === 'small'\"\r\n        :total=\"total\"\r\n        :current-page=\"searchProxys.page\"\r\n        :page-size=\"searchProxys.limit\"\r\n        :disabled=\"loading\"\r\n        @current-page=\"currentPageChange\"\r\n        @page-size=\"pageSizeChange\"\r\n      />\r\n    </div>\r\n    <!--新增/编辑/查看对话框-->\r\n    <MDialog\r\n      v-model=\"dialogVisible\"\r\n      :size=\"size || globalConfig.size\"\r\n      :title=\"dialogTitle\"\r\n      :width=\"crudOption.dialogWidth\"\r\n      :save-btn=\"dialogType !== 'view'\"\r\n      :cancel-btn=\"dialogType !== 'view'\"\r\n      :save-btn-text=\"t('m.crud.dialogSaveBtnText')\"\r\n      :cancel-btn-text=\"t('m.crud.dialogCancelBtnText')\"\r\n      :save-btn-icon=\"dialogType === 'add' ? 'CirclePlus' : 'CircleCheck'\"\r\n      @enter=\"dialogEnter\"\r\n      @cancel=\"dialogCancel\"\r\n      @close=\"dialogClose\"\r\n    >\r\n      <template #default=\"{ loading }\">\r\n        <!--所有类型顶部-->\r\n        <slot\r\n          name=\"allTop\"\r\n          v-bind=\"{ size: size || globalConfig.size, loading: loading }\"\r\n        />\r\n        <!---->\r\n        <!--新增/编辑类型顶部-->\r\n        <slot\r\n          v-if=\"dialogType !== 'view'\"\r\n          name=\"formTop\"\r\n          v-bind=\"{ size: size || globalConfig.size, loading: loading }\"\r\n        />\r\n        <!---->\r\n        <!--新增类型顶部-->\r\n        <slot\r\n          v-if=\"dialogType === 'add'\"\r\n          name=\"addTop\"\r\n          v-bind=\"{ size: size || globalConfig.size, loading: loading }\"\r\n        />\r\n        <!---->\r\n        <!--编辑类型顶部-->\r\n        <slot\r\n          v-if=\"dialogType === 'edit'\"\r\n          name=\"editTop\"\r\n          v-bind=\"{ size: size || globalConfig.size, loading: loading }\"\r\n        />\r\n        <!---->\r\n        <!--查看类型顶部-->\r\n        <slot\r\n          v-if=\"dialogType === 'view'\"\r\n          name=\"viewTop\"\r\n          v-bind=\"{ size: size || globalConfig.size, loading: loading }\"\r\n        />\r\n        <!---->\r\n        <MForm\r\n          ref=\"formRef\"\r\n          :loading=\"loading\"\r\n          :size=\"size || globalConfig.size\"\r\n          :option=\"formOption\"\r\n          :model=\"modelForm\"\r\n          :readonly=\"dialogType === 'view'\"\r\n        >\r\n          <!-- 表单插槽 -->\r\n          <template\r\n            v-for=\"(slotKey, index) in Object.keys(formSlots)\"\r\n            :key=\"index\"\r\n            #[slotKey]=\"scope\"\r\n          >\r\n            <slot :name=\"slotKey + 'Form'\" v-bind=\"scope\" />\r\n          </template>\r\n          <!---->\r\n        </MForm>\r\n        <!--所有类型底部-->\r\n        <slot\r\n          name=\"allBottom\"\r\n          v-bind=\"{ size: size || globalConfig.size, loading: loading }\"\r\n        />\r\n        <!---->\r\n        <!--新增/编辑类型底部-->\r\n        <slot\r\n          v-if=\"dialogType !== 'view'\"\r\n          name=\"formBottom\"\r\n          v-bind=\"{ size: size || globalConfig.size, loading: loading }\"\r\n        />\r\n        <!---->\r\n        <!--新增类型底部-->\r\n        <slot\r\n          v-if=\"dialogType === 'add'\"\r\n          name=\"addBottom\"\r\n          v-bind=\"{ size: size || globalConfig.size, loading: loading }\"\r\n        />\r\n        <!---->\r\n        <!--编辑类型底部-->\r\n        <slot\r\n          v-if=\"dialogType === 'edit'\"\r\n          name=\"editBottom\"\r\n          v-bind=\"{ size: size || globalConfig.size, loading: loading }\"\r\n        />\r\n        <!---->\r\n        <!--查看类型底部-->\r\n        <slot\r\n          v-if=\"dialogType === 'view'\"\r\n          name=\"viewBottom\"\r\n          v-bind=\"{ size: size || globalConfig.size, loading: loading }\"\r\n        />\r\n        <!---->\r\n      </template>\r\n    </MDialog>\r\n    <!---->\r\n  </div>\r\n</template>\r\n"],"names":["DO_defineComponent"],"mappings":"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"}