{"version":3,"file":"Crud.mjs","sources":["../../../../../packages/element/crud/src/Crud.tsx"],"sourcesContent":["import { ElAlert, ElButton, ElDrawer, ElWatermark, useAttrs } from 'element-plus'\nimport { omit } from 'lodash-unified'\nimport { Delete, Download, Plus } from '@element-plus/icons-vue'\nimport { isFunction, isObject, isString } from '@ideaz/utils'\nimport type { ComponentInternalInstance } from 'vue'\nimport { withKeys } from 'vue'\nimport { useFormMethods } from '../../form/src/hooks'\nimport {\n  useTableMethods,\n} from '../../table/src/hooks'\nimport ZFilterForm from '../../form/src/FilterForm'\nimport ZDescription from '../../descriptions/src/index'\nimport ZDialog from '../../dialog/src/index'\nimport ZForm from '../../form/src/BaseForm'\nimport ZTable from '../../table/src/Table'\nimport type { Pagination } from '../../types'\nimport { useDataRequest, useDescriptions, useDialogConfig, useDrawerConfig, useFormColumns, useSelectionData } from './hooks'\nimport type { AlertConfig } from './props'\nimport { EXCLUDE_FORM_PROPS_KEYS, crudProps, crudProvideKey } from './props'\n\nexport default defineComponent({\n  name: 'ZCrud',\n  props: crudProps,\n  emits: ['update:formData', 'update:pagination', 'search', 'reset', 'refresh', 'operate-submit', 'operate-delete', 'operate-view', 'operate-cancel', 'sort-change', 'update:data', 'update:editFormData', 'update:addFormData', 'update:selectionData', 'update:loading', 'selection-change', 'radio-change'],\n  setup(props, { emit, slots, expose }) {\n    const attrs = useAttrs()\n    const {\n      setCurrentRow,\n      toggleRowSelection,\n      clearSelection,\n      clearFilter,\n      toggleAllSelection,\n      toggleRowExpansion,\n      clearSort,\n      toggleRadioSelection,\n      sort,\n    } = useTableMethods()\n    const {\n      resetFields,\n      validate,\n      validateField,\n      clearValidate,\n      scrollToField,\n    } = useFormMethods()\n    const {\n      handleSearch,\n      tableProps,\n      handleReset,\n      handleKeyDown,\n      handlePaginationChange,\n      handleSortChange,\n      middleFormData,\n      handleRadioChange,\n      handleExport,\n      getTableData,\n      isShowDialog,\n      rowData,\n      currentMode,\n      isShowDrawer,\n      refreshAfterRequest,\n    } = useDataRequest(props, emit)\n    const { selectionData, isSelection, handleCheckboxChange, handleCloseAlert, handleMultipleDelete } = useSelectionData(props, emit, tableProps, refreshAfterRequest, getTableData)\n    const { addFormColumns, editFormColumns, searchFormColumns, detailColumns } = useFormColumns(props)\n    const {\n      dialogProps,\n      dialogFormData,\n      dialogForm,\n      isOperateFormLoading,\n      handleCancel,\n      handleConfirm,\n      handleDialogClosed,\n      handleDialogOpen,\n    } = useDialogConfig(props, emit, currentMode, isShowDialog, rowData)\n    const { drawerProps, isDescLoading, viewData, handleDrawerOpen } = useDrawerConfig(props)\n    const { descriptionColumns, descriptionProps } = useDescriptions(props)\n    const ns = useNamespace('crud')\n    const { t } = useLocale()\n    const size = useFormSize()\n\n    provide(crudProvideKey, computed(() => {\n      return {\n        ...toRefs(props),\n        size: tableProps.value.size,\n      }\n    }))\n\n    provide(crudProvideKey, computed(() => {\n      return {\n        ...toRefs(props),\n        size: tableProps.value.size,\n      }\n    }))\n\n    expose({\n      resetFields,\n      validate,\n      validateField,\n      clearValidate,\n      scrollToField,\n\n      setCurrentRow,\n      toggleRowSelection,\n      clearSelection,\n      clearFilter,\n      toggleAllSelection,\n      toggleRowExpansion,\n      clearSort,\n      toggleRadioSelection,\n      sort,\n      getTableData,\n    })\n\n    const { proxy: ctx } = getCurrentInstance() as ComponentInternalInstance\n\n    const renderDecorator = (decoratorProps: any) => {\n      const nativeTags = ['div', 'span', 'p', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6']\n      const isNativeTag = nativeTags.includes(decoratorProps.name)\n      const name = decoratorProps.name ? isNativeTag ? decoratorProps.name : resolveComponent(decoratorProps.name) : resolveComponent('el-card')\n      return h(name, omit(decoratorProps, ['children', 'name']), isNativeTag ? decoratorProps.children() : decoratorProps.children)\n    }\n\n    const renderAlert = () => {\n      const { alert } = props\n      if (isFunction(alert))\n        return alert(selectionData.value)\n      if (isFunction(slots.alert))\n        return slots.alert({ selectionData: selectionData.value })\n\n      const alertProps = omit(props.alert, ['title', 'description']) as Omit<AlertConfig, 'title' | 'description'>\n      return (\n        <ElAlert\n          type=\"success\"\n          close-text={t('crud.unselect')}\n          onClose={handleCloseAlert}\n          class={ns.b('alert')}\n          {...alertProps}\n          v-slots={{\n            title: isFunction(alert.title)\n              ? () => (alert.title as Function)(selectionData.value, ctx!.$refs.zTableRef)\n              : () => (alert.title || t('crud.selected') + selectionData.value.length + t('crud.term')),\n            default: isFunction(alert.description) ? () => (alert.description as Function)(selectionData.value, ctx!.$refs.zTableRef) : () => (alert.description || ''),\n          }}\n        />\n      )\n    }\n\n    const renderTable = () => {\n      return renderDecorator({\n        ...props.tableDecorator,\n        class: ns.be('table', 'container'),\n        children: () => {\n          return (\n            <ZTable\n              ref=\"zTableRef\"\n              {...{ size: size.value, ...tableProps.value }}\n              v-slots={{\n                ...slots,\n                toolBarLeft: () => {\n                  return (\n                    <>\n                      {slots.toolBarLeft && slots.toolBarLeft()}\n                      {props.action && props.add && (\n                        <ElButton\n                          size={size.value}\n                          type=\"primary\"\n                          icon={Plus}\n                          onClick={() => {\n                            currentMode.value = 'add'\n                            isShowDialog.value = true\n                          }}\n                        >\n                          {t('crud.add')}\n                        </ElButton>\n                      )}\n                      {!!props.export && <ElButton size={size.value} type=\"primary\" icon={Download} class={ns.e('export')} onClick={handleExport}>{t('crud.export')}</ElButton>}\n                      {!!isSelection.value && props.delete && props.action && (\n                        <ElButton\n                          plain\n                          size={size.value}\n                          type=\"danger\"\n                          class={ns.e('multiple-delete')}\n                          icon={Delete}\n                          onClick={handleMultipleDelete}\n                        >\n                          {t('crud.multipleDelete')}\n                        </ElButton>\n                      )}\n                    </>\n                  )\n                },\n                toolBarBottom: () => {\n                  if (isSelection.value && props.action && props.alert)\n                    return renderAlert()\n\n                  return slots.toolBarBottom?.()\n                },\n              }}\n              onUpdate:pagination={(pagination: Pagination) => emit('update:pagination', pagination)}\n              onRefresh={handlePaginationChange}\n              onSort-change={handleSortChange}\n              onSelection-change={handleCheckboxChange}\n              onRadio-change={handleRadioChange}\n            >\n            </ZTable>\n          )\n        },\n      })\n    }\n\n    const renderSearchForm = () => {\n      return searchFormColumns.value?.length > 0 && renderDecorator({\n        ...props.formDecorator,\n        style: {\n          marginBottom: '16px',\n          ...props.formDecorator?.style,\n        },\n        class: ns.be('filter-form', 'container'),\n        children: () => (\n          <>\n            {isFunction(slots.formTop) ? slots.formTop() : null}\n            <ZFilterForm\n              ref=\"formRef\"\n              {...{\n                size: size.value,\n                labelWidth: '60px',\n                ...omit(props.search || {}, EXCLUDE_FORM_PROPS_KEYS),\n                columns: searchFormColumns.value,\n                ...attrs.value,\n                searchButtonLoading: tableProps.value.loading,\n              }}\n              options={props.options}\n              modelValue={middleFormData.value}\n              onUpdate:modelValue={(val: any) => { middleFormData.value = val }}\n              onSearch={handleSearch}\n              onReset={handleReset}\n              onKeydown={withKeys((e: KeyboardEvent) => handleKeyDown(e), ['enter'])}\n              v-slots={slots}\n            >\n            </ZFilterForm>\n            {isFunction(slots.formBottom) ? slots.formBottom() : null}\n          </>\n        ),\n      })\n    }\n\n    const renderOperateForm = () => {\n      const columns = currentMode.value === 'add' ? addFormColumns.value : currentMode.value === 'edit' ? editFormColumns.value : detailColumns.value\n      // const formData = currentMode.value === 'add' ? props.addFormData : currentMode.value === 'edit' ? props.editFormData : rowData.value\n      const formProps = omit(props.form || {}, EXCLUDE_FORM_PROPS_KEYS)\n      const operateFormProps = currentMode.value === 'add' ? omit(props.add || {}, EXCLUDE_FORM_PROPS_KEYS) : omit(props.edit || {}, EXCLUDE_FORM_PROPS_KEYS)\n      return (\n        <ZForm\n          {...{ size: size.value, labelWidth: '60px', ...formProps, ...operateFormProps }}\n          ref={dialogForm}\n          columns={columns}\n          options={props.options}\n          modelValue={dialogFormData.value}\n          onUpdate:modelValue={(val: any) => { dialogFormData.value = val }}\n          v-loading={isOperateFormLoading.value}\n          v-slots={slots}\n        >\n\n        </ZForm>\n      )\n    }\n\n    const renderDialog = () => {\n      return (\n        <ZDialog\n          modelValue={isShowDialog.value}\n          onUpdate:modelValue={(val: boolean) => isShowDialog.value = val}\n          {...dialogProps.value}\n          onOpen={handleDialogOpen}\n          onClosed={handleDialogClosed}\n          onConfirm={handleConfirm}\n          onCancel={handleCancel}\n        >\n          {renderOperateForm()}\n        </ZDialog>\n      )\n    }\n\n    const renderDrawer = () => {\n      return (\n        <ElDrawer\n          modelValue={isShowDrawer.value}\n          onUpdate:modelValue={(val: boolean) => isShowDrawer.value = val}\n          {...drawerProps.value}\n          onOpen={() => handleDrawerOpen(rowData.value)}\n        >\n          <ZDescription v-loading={isDescLoading.value} columns={descriptionColumns.value} detail={viewData.value} {...{ size: size.value, ...descriptionProps.value }} />\n        </ElDrawer>\n      )\n    }\n\n    const renderMiddleContent = () => {\n      return isFunction(slots.crudMiddle) ? slots.crudMiddle() : null\n    }\n\n    const renderCrudDecorator = () => {\n      const content = () => (\n        <>\n          {renderSearchForm()}\n          {renderMiddleContent()}\n          {renderTable()}\n        </>\n      )\n      if (isString(props.watermark)) {\n        return (\n          <ElWatermark content={props.watermark}>\n            {content()}\n          </ElWatermark>\n        )\n      }\n      if (isObject(props.watermark)) {\n        return (\n          <ElWatermark {...{ ...props.watermark }}>\n            {content()}\n          </ElWatermark>\n        )\n      }\n      return content()\n    }\n\n    return () => {\n      // eslint-disable-next-line no-console\n      console.log('刷新')\n      return (\n        <div ref=\"crudRef\" class={ns.b('')}>\n          {renderCrudDecorator()}\n          {renderDialog()}\n          {renderDrawer()}\n        </div>\n      )\n    }\n  },\n})\n"],"names":["_isSlot","s","isVNode","Crud","defineComponent","name","props","emits","expose","attrs","useAttrs","sort","scrollToField","refreshAfterRequest","useDataRequest","emit","handleMultipleDelete","useSelectionData","tableProps","getTableData","detailColumns","useFormColumns","handleDialogOpen","useDialogConfig","currentMode","isShowDialog","rowData","handleDrawerOpen","useDrawerConfig","descriptionProps","useDescriptions","ns","useNamespace","t","size","useFormSize","provide","proxy","alert","alertProps","omit","createVNode","ElAlert","mergeProps","handleCloseAlert","title","default","renderDecorator","ZTable","pagination","handlePaginationChange","handleSortChange","handleCheckboxChange","slots","_slot","_slot2","_slot3","Plus","Download","isSelection","ElButton","Delete","renderAlert","_a","style","marginBottom","labelWidth","searchButtonLoading","val","handleSearch","handleReset","isFunction","formProps","EXCLUDE_FORM_PROPS_KEYS","operateFormProps","withDirectives","ZForm","dialogForm","columns","resolveDirective","isOperateFormLoading","_slot4","Dialog","handleDialogClosed","handleConfirm","ElDrawer","isShowDrawer","viewData","isDescLoading","content","Fragment","renderSearchForm","renderMiddleContent","renderTable","isString","_slot5","isObject","_slot6"],"mappings":"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"}