UNPKG

ideaz-element

Version:

<p align="center"> <a href="" target="_blank" rel="noopener noreferrer"> <img src="./docs/public/logo.svg" alt="Ideaz Element" width="180" style="width: 180px;" /> </a> </p>

1 lines 14.5 kB
{"version":3,"file":"Table.cjs","sources":["../../../../../packages/element/table/src/Table.tsx"],"sourcesContent":["import { cloneDeep } from 'lodash-es'\nimport { Plus } from '@element-plus/icons-vue'\nimport { isFunction, isObject, isString } from '@ideaz/utils'\nimport { ElButton, ElForm, ElPagination, ElTable, ElWatermark } from 'element-plus'\nimport { getCurrentInstance } from 'vue'\nimport type { ComponentInternalInstance } from 'vue'\nimport { draggable, sticky } from '../../../directives'\nimport {\n useDraggable,\n usePagination,\n useTableColumns,\n useTableMethods,\n useTableSlots,\n useMergeCells,\n} from './hooks'\nimport TableColumn from './TableColumn'\nimport ToolBar from './ToolBar'\nimport { tableProps, tableProvideKey } from './props'\n\nexport default defineComponent({\n name: 'ZTable',\n components: { TableColumn, ToolBar },\n directives: { draggable, sticky },\n inheritAttrs: false,\n props: tableProps,\n emits: ['refresh', 'radio-change', 'update:data', 'update:pagination', 'drag-sort-end', 'drag-column-end'],\n setup(props, { emit, slots, expose }) {\n const { proxy: ctx } = getCurrentInstance() as ComponentInternalInstance\n const {\n setCurrentRow,\n toggleRowSelection,\n clearSelection,\n clearFilter,\n toggleAllSelection,\n toggleRowExpansion,\n clearSort,\n toggleRadioSelection,\n sort,\n } = useTableMethods()\n\n expose({\n setCurrentRow,\n toggleRowSelection,\n clearSelection,\n clearFilter,\n toggleAllSelection,\n toggleRowExpansion,\n clearSort,\n toggleRadioSelection,\n sort,\n })\n const {\n pagination,\n paginationAttrs,\n tableAttributes,\n tableData,\n addTableData,\n handleCurrentChange,\n handleSizeChange,\n handleRefresh,\n } = usePagination(props, emit)\n const {\n formatTableCols,\n middleTableCols,\n sortTableCols,\n originFormatTableCols,\n tableKey,\n zTableFormRef,\n } = useTableColumns(props, emit, tableData)\n const { scopedSlots, tableSlots } = useTableSlots(formatTableCols, slots)\n const { draggableOptions, dragging } = useDraggable(emit, tableData, middleTableCols)\n const { spanMethod } = useMergeCells(props)\n const ns = useNamespace('table')\n const { t } = useLocale()\n const size = ref(props.size)\n\n provide(tableProvideKey, computed(() => {\n return {\n ...toRefs(props),\n size: size.value,\n }\n }))\n\n const renderPagination = () => {\n const paginationAlign = isObject(pagination.value) ? pagination.value.align || 'right' : 'right'\n const paginationDom = (\n <ElPagination\n class={ns.e('pagination')}\n background\n size=\"small\"\n {...paginationAttrs.value}\n currentPage={pagination.value.page}\n total={pagination.value.total}\n onUpdate:current-page={handleCurrentChange}\n onUpdate:page-size={handleSizeChange}\n />\n )\n return pagination.value.pageSize\n ? (\n <div class={ns.be('pagination', 'container')}>\n <div class={ns.bm('pagination', 'top')}>\n {isFunction(slots.paginationTop) ? slots.paginationTop() : null}\n </div>\n <div class={[ns.bm('pagination', 'middle')]}>\n <div class={ns.bm('pagination', 'left')}>\n {isFunction(slots.paginationLeft) ? slots.paginationLeft() : null}\n {paginationAlign === 'left' && paginationDom}\n </div>\n <div class={[ns.bm('pagination', 'center')]}>\n {paginationAlign === 'center' && paginationDom}\n </div>\n <div class={[ns.bm('pagination', 'right')]}>\n {paginationAlign === 'right' && paginationDom}\n {isFunction(slots.paginationRight) ? slots.paginationRight() : null}\n </div>\n </div>\n <div class={ns.bm('pagination', 'bottom')}>\n {isFunction(slots.paginationBottom) ? slots.paginationBottom() : null}\n </div>\n </div>\n )\n : null\n }\n\n const renderToolBar = () => {\n const { toolBar, title } = props\n const tableTitle = slots.tableTitle?.() || (isFunction(title) ? title() : title) || null\n\n return (\n <div\n class={ns.be('tool-bar', 'container')}\n style={{\n marginBottom: (toolBar || isFunction(slots.tableTop)) ? '16px' : 0,\n }}\n >\n <div class={ns.bm('tool-bar', 'center')}>\n <div class={ns.bm('tool-bar', 'center-content')}>\n <div class={ns.e('title')}>\n {tableTitle}\n </div>\n <div class={ns.bm('tool-bar', 'left')}>\n {isFunction(slots.toolBarLeft) ? slots.toolBarLeft() : null}\n </div>\n </div>\n {toolBar && (\n <ToolBar\n formatTableCols={formatTableCols.value}\n middleTableCols={middleTableCols.value}\n originFormatTableCols={originFormatTableCols.value}\n sortTableCols={sortTableCols.value}\n size={size.value}\n toolBar={props.toolBar}\n tableProps={{ ...props, fullScreenElement: props.fullScreenElement || (() => ctx!.$refs.containerRef as HTMLElement) }}\n onColumns-change={(data) => {\n middleTableCols.value = cloneDeep(data)\n tableKey.value = new Date().valueOf()\n }}\n onSize-change={(val) => {\n size.value = val\n }}\n onTable-cols-change={(val) => {\n sortTableCols.value = cloneDeep(val)\n tableKey.value = new Date().valueOf()\n }}\n onRefresh={() => handleRefresh()}\n />\n )}\n <div class={ns.bm('tool-bar', 'right')}>\n {isFunction(slots.toolBarRight) ? slots.toolBarRight() : null}\n </div>\n </div>\n <div class={ns.bm('tool-bar', 'bottom')}>\n {isFunction(slots.toolBarBottom) ? slots.toolBarBottom() : null}\n </div>\n </div>\n )\n }\n\n const renderTable = () => {\n const { loading, editable } = props\n return (\n <ElTable\n ref=\"zTableRef\"\n v-loading={loading}\n class={[editable && ns.b('editable'), dragging.value && 'z-table-dragging']}\n v-slots={tableSlots}\n key={tableKey.value}\n v-draggable={draggableOptions}\n v-sticky={isObject(props.sticky) ? { top: '50px', zIndex: 100, ...props.sticky } : undefined}\n {...{ ...tableAttributes.value, spanMethod: tableAttributes.value.spanMethod || spanMethod, data: tableData.value, size: size.value }}\n >\n {formatTableCols.value.map((item, index) => {\n return (\n <TableColumn\n ref={`zTableColumn${index}`}\n column={item}\n size={size.value}\n key={item.__uid}\n tableProps={tableAttributes.value}\n onRadio-change={(row: any) => emit('radio-change', row)}\n onUpdate:data={(data: any) => emit('update:data', data)}\n columnIndex={index}\n columnsLength={formatTableCols.value.length}\n v-slots={{ ...slots, ...scopedSlots }}\n />\n )\n })}\n </ElTable>\n )\n }\n\n const renderTableDecorator = () => {\n if (isString(props.watermark)) {\n return (\n <ElWatermark content={props.watermark}>\n {renderTable()}\n </ElWatermark>\n )\n }\n if (isObject(props.watermark)) {\n return (\n <ElWatermark {...{ ...props.watermark }}>\n {renderTable()}\n </ElWatermark>\n )\n }\n return renderTable()\n }\n\n const renderContent = () => {\n const { editable } = props\n const position = isObject(editable) ? (editable.position || 'bottom') : 'bottom'\n const maxLength = isObject(editable) ? (editable.maxLength || undefined) : undefined\n if (editable) {\n return (\n <>\n <ElForm\n ref={zTableFormRef}\n model={{ tableData: tableData.value }}\n >\n {renderTableDecorator()}\n </ElForm>\n {position === 'bottom'\n && maxLength !== tableData.value.length\n && (\n <ElButton\n icon={Plus}\n class=\"mt-2 w-full\"\n onClick={() => addTableData()}\n >\n {t('table.addData')}\n </ElButton>\n )}\n </>\n )\n }\n return renderTableDecorator()\n }\n\n const renderTableBottom = () => {\n return <div class={ns.e('bottom')}>{isFunction(slots.tableBottom) ? slots.tableBottom() : null}</div>\n }\n\n const renderTableTop = () => {\n const { toolBar } = props\n return (\n <div class={toolBar ? ns.bm('tool-bar', 'top') : ns.e('top')}>\n {isFunction(slots.tableTop) ? slots.tableTop() : null}\n {!!toolBar && isFunction(slots.toolBarTop) ? slots.toolBarTop() : null}\n </div>\n )\n }\n\n return () => {\n return (\n <div class={ns.b('')} ref=\"containerRef\">\n {renderTableTop()}\n {renderToolBar()}\n {renderContent()}\n {renderPagination()}\n {renderTableBottom()}\n </div>\n )\n }\n },\n})\n"],"names":["_isSlot","s","vue","ZTable","name","components","ToolBar","directives","sticky","inheritAttrs","props","emits","expose","proxy","sort","handleRefresh","usePagination","props$1","emit","zTableFormRef","tableSlots","useTableSlots","formatTableCols","slots","dragging","spanMethod","useMergeCells","ns","useNamespace","t","size","provide","paginationAlign","is","pagination","paginationDom","elementPlus","handleCurrentChange","title","toolBar","data","middleTableCols","val","sortTableCols","editable","tableKey","default","item","row","index","loading","draggableOptions","top","zIndex","_slot","_slot2","position","maxLength","tableData","iconsVue","renderTableTop","renderToolBar","renderContent","renderPagination","renderTableBottom"],"mappings":"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"}