UNPKG

ivue-material-plus

Version:

A high quality UI components Library with Vue.js

1 lines 12.9 kB
{"version":3,"file":"index.mjs","sources":["../../../../../../src/components/ivue-table/table-column/index.ts"],"sourcesContent":["import {\r\n defineComponent,\r\n h,\r\n getCurrentInstance,\r\n ref,\r\n computed,\r\n onMounted,\r\n onBeforeMount,\r\n Fragment,\r\n onBeforeUnmount,\r\n} from 'vue';\r\nimport { isString } from '@vue/shared';\r\n\r\nimport defaultProps from './defaults';\r\n\r\nimport useRender from './render';\r\nimport useWatcher from './watcher';\r\n\r\nimport { cellStyles, mergeOptions, compose } from '../config';\r\n\r\n// type\r\nimport type { TableColumn, TableColumnCtx } from './defaults';\r\nimport type { Table } from '../table/defaults';\r\n\r\nconst prefixCls = 'ivue-table-column';\r\nlet columnIdSeed = 1;\r\n\r\nexport default defineComponent({\r\n name: prefixCls,\r\n props: defaultProps,\r\n setup(props: TableColumnCtx, { slots }) {\r\n const vm = getCurrentInstance() as TableColumn;\r\n\r\n // data\r\n\r\n // 列参数\r\n const columnConfig = ref<Partial<TableColumnCtx>>({});\r\n\r\n // computed\r\n\r\n // 获取父级元素\r\n const parentDom = computed(() => {\r\n let parent = vm.parent as Table;\r\n\r\n // 没有表格id\r\n while (parent && !parent.tableId) {\r\n parent = parent.parent;\r\n }\r\n\r\n return parent;\r\n });\r\n\r\n // methods\r\n\r\n // 初始化\r\n const initData = () => {\r\n // 是否是嵌套的子列 获取 hiddenColumns 节点\r\n const children = isSubColumn.value\r\n ? parent.vnode.el.children\r\n : parent.refs.hiddenColumns?.children;\r\n\r\n // 获取当前行index\r\n const getColumnIndex = () => {\r\n return getColumnDomIndex(children || [], vm.vnode.el);\r\n };\r\n\r\n // 列参数\r\n columnConfig.value.getColumnIndex = getColumnIndex;\r\n\r\n // 插入列\r\n const columnIndex = getColumnIndex();\r\n\r\n // 存在列组件插入列节点\r\n if (columnIndex > -1) {\r\n parentDom.value.store.commit(\r\n 'insertColumn',\r\n columnConfig.value,\r\n isSubColumn.value ? parent.columnConfig.value : null\r\n );\r\n }\r\n };\r\n\r\n // 在挂载开始之前被调用\r\n const initBeforeMount = () => {\r\n // 是否是嵌套的子列 父级不相等\r\n isSubColumn.value = parentDom.value !== parent;\r\n\r\n // 对应列的类型\r\n const type = props.type || 'default';\r\n\r\n // 对应列是否可以排序\r\n const sortable = props.sortable === '' ? true : props.sortable;\r\n\r\n // 默认参数\r\n const defaults = {\r\n // 行样式\r\n ...cellStyles[type],\r\n // id\r\n id: columnId.value,\r\n // 对应列的类型\r\n type,\r\n // 对应列内容的字段名\r\n property: props.prop || props.property,\r\n // 对齐方式\r\n align: align,\r\n // 表头对齐方式\r\n headerAlign: headerAlign,\r\n // 表头对齐方式\r\n showOverflowTooltip: props.showOverflowTooltip,\r\n // filter 相关属性\r\n filterable: props.filters || props.filterMethod,\r\n // 过滤弹出框的定位\r\n filterPlacement: '',\r\n // 过滤开启\r\n filterOpened: false,\r\n // 是否是嵌套的子列\r\n isSubColumn: false,\r\n // 对应列是否可以排序\r\n sortable,\r\n // index 列\r\n index: props.index,\r\n // <column key=\"xxx\" />\r\n // 列 vode key\r\n rawColumnKey: vm.vnode.key,\r\n // 选中的数据过滤项\r\n filteredValue: [],\r\n };\r\n\r\n // 基础 props\r\n const basicProps = [\r\n 'columnKey',\r\n 'label',\r\n 'className',\r\n 'labelClassName',\r\n 'type',\r\n 'renderHeader',\r\n 'formatter',\r\n 'fixed',\r\n 'resizable',\r\n ];\r\n\r\n // 排序 props\r\n const sortProps = ['sortMethod', 'sortBy', 'sortOrders'];\r\n // 多选 props\r\n const selectProps = ['selectable', 'reserveSelection'];\r\n // 过滤 props\r\n const filterProps = [\r\n 'filterMethod',\r\n 'filters',\r\n 'filterMultiple',\r\n 'filterOpened',\r\n 'filteredValue',\r\n 'filterPlacement',\r\n ];\r\n\r\n // 获取props值\r\n let column = getPropsData(\r\n basicProps,\r\n sortProps,\r\n selectProps,\r\n filterProps\r\n );\r\n\r\n // 合并props值\r\n column = mergeOptions(defaults, column);\r\n\r\n // 合并函数\r\n const chains = compose(\r\n // 列渲染函数\r\n columnRender,\r\n // 设置列宽度\r\n setColumnWidth,\r\n // 设置列 props\r\n setColumnProps\r\n );\r\n\r\n column = chains(column);\r\n\r\n // 列参数\r\n columnConfig.value = column;\r\n\r\n // 注册 watcher\r\n\r\n // 注册普通观察者\r\n registerNormalWatchers();\r\n registerComplexWatchers();\r\n };\r\n\r\n // onBeforeMount\r\n onBeforeMount(() => {\r\n // 在挂载开始之前被调用\r\n initBeforeMount();\r\n });\r\n\r\n // onMounted\r\n onMounted(() => {\r\n // 初始化\r\n initData();\r\n });\r\n\r\n // onBeforeUnmount\r\n onBeforeUnmount(() => {\r\n parentDom.value.store.commit(\r\n 'removeColumn',\r\n columnConfig.value,\r\n isSubColumn.value ? parent.columnConfig.value : null\r\n );\r\n });\r\n\r\n // 开始渲染\r\n const {\r\n // data\r\n columnId,\r\n isSubColumn,\r\n align,\r\n headerAlign,\r\n\r\n // computed\r\n columnParent,\r\n\r\n // methods\r\n getPropsData,\r\n getColumnDomIndex,\r\n columnRender,\r\n setColumnWidth,\r\n setColumnProps,\r\n } = useRender(props, slots, parentDom);\r\n\r\n const { registerNormalWatchers, registerComplexWatchers } = useWatcher(\r\n parentDom,\r\n props\r\n );\r\n\r\n // 获取父级\r\n const parent = columnParent.value;\r\n // 设置列id\r\n columnId.value = `${\r\n parent.tableId || parent.columnId\r\n }-column-${columnIdSeed++}`;\r\n\r\n // 设置列id\r\n vm.columnId = columnId.value;\r\n\r\n // 列参数\r\n vm.columnConfig = columnConfig;\r\n },\r\n render() {\r\n try {\r\n const slotsList = this.$slots.default?.({\r\n row: {},\r\n column: {},\r\n $index: -1,\r\n });\r\n\r\n const slot = [];\r\n\r\n // 有插槽\r\n if (Array.isArray(slotsList)) {\r\n for (const childNode of slotsList) {\r\n // ivue-table-column 或者 函数组件 ((FUNCTIONAL_COMPONENT = 1 << 1) = 2) & 2 === 1\r\n if (childNode.type?.name === prefixCls || childNode.shapeFlag & 2) {\r\n slot.push(childNode);\r\n }\r\n // 是否是片段 Fragment 多个根节点\r\n else if (\r\n childNode.type === Fragment &&\r\n Array.isArray(childNode.children)\r\n ) {\r\n childNode.children.forEach((vnode) => {\r\n /**\r\n * vnode为动态槽或文本时不渲染\r\n *\r\n * 1024\r\n * 表示具有动态插槽的组件(例如,引用 v-for 的插槽\r\n * 迭代值或动态插槽名称)。\r\n * 带有这个标志的组件总是被强制更新。\r\n */\r\n if (vnode?.patchFlag !== 1024 && !isString(vnode?.children)) {\r\n slot.push(vnode);\r\n }\r\n });\r\n }\r\n }\r\n }\r\n\r\n const vnode = h('div', slot);\r\n\r\n return vnode;\r\n } catch {\r\n return h('div', []);\r\n }\r\n },\r\n});\r\n"],"names":["parent","vnode"],"mappings":";;;;;;;AAwBA,MAAM,SAAY,GAAA,mBAAA,CAAA;AAClB,IAAI,YAAe,GAAA,CAAA,CAAA;AAEnB,kBAAe,eAAgB,CAAA;AAAA,EAC7B,IAAM,EAAA,SAAA;AAAA,EACN,KAAO,EAAA,YAAA;AAAA,EACP,KAAM,CAAA,KAAA,EAAuB,EAAE,KAAA,EAAS,EAAA;AACtC,IAAA,MAAM,KAAK,kBAAmB,EAAA,CAAA;AAK9B,IAAM,MAAA,YAAA,GAAe,GAA6B,CAAA,EAAE,CAAA,CAAA;AAKpD,IAAM,MAAA,SAAA,GAAY,SAAS,MAAM;AAC/B,MAAA,IAAIA,UAAS,EAAG,CAAA,MAAA,CAAA;AAGhB,MAAOA,OAAAA,OAAAA,IAAU,CAACA,OAAAA,CAAO,OAAS,EAAA;AAChC,QAAAA,UAASA,OAAO,CAAA,MAAA,CAAA;AAAA,OAClB;AAEA,MAAOA,OAAAA,OAAAA,CAAAA;AAAA,KACR,CAAA,CAAA;AAKD,IAAA,MAAM,WAAW,MAAM;AAvD3B,MAAA,IAAA,EAAA,CAAA;AAyDM,MAAM,MAAA,QAAA,GAAW,WAAY,CAAA,KAAA,GACzB,MAAO,CAAA,KAAA,CAAM,GAAG,QAChB,GAAA,CAAA,EAAA,GAAA,MAAA,CAAO,IAAK,CAAA,aAAA,KAAZ,IAA2B,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,QAAA,CAAA;AAG/B,MAAA,MAAM,iBAAiB,MAAM;AAC3B,QAAA,OAAO,kBAAkB,QAAY,IAAA,EAAI,EAAA,EAAA,CAAG,MAAM,EAAE,CAAA,CAAA;AAAA,OACtD,CAAA;AAGA,MAAA,YAAA,CAAa,MAAM,cAAiB,GAAA,cAAA,CAAA;AAGpC,MAAA,MAAM,cAAc,cAAe,EAAA,CAAA;AAGnC,MAAA,IAAI,cAAc,CAAI,CAAA,EAAA;AACpB,QAAA,SAAA,CAAU,MAAM,KAAM,CAAA,MAAA;AAAA,UACpB,cAAA;AAAA,UACA,YAAa,CAAA,KAAA;AAAA,UACb,WAAY,CAAA,KAAA,GAAQ,MAAO,CAAA,YAAA,CAAa,KAAQ,GAAA,IAAA;AAAA,SAClD,CAAA;AAAA,OACF;AAAA,KACF,CAAA;AAGA,IAAA,MAAM,kBAAkB,MAAM;AAE5B,MAAY,WAAA,CAAA,KAAA,GAAQ,UAAU,KAAU,KAAA,MAAA,CAAA;AAGxC,MAAM,MAAA,IAAA,GAAO,MAAM,IAAQ,IAAA,SAAA,CAAA;AAG3B,MAAA,MAAM,QAAW,GAAA,KAAA,CAAM,QAAa,KAAA,EAAA,GAAK,OAAO,KAAM,CAAA,QAAA,CAAA;AAGtD,MAAA,MAAM,QAAW,GAAA;AAAA,QAEf,GAAG,UAAW,CAAA,IAAA,CAAA;AAAA,QAEd,IAAI,QAAS,CAAA,KAAA;AAAA,QAEb,IAAA;AAAA,QAEA,QAAA,EAAU,KAAM,CAAA,IAAA,IAAQ,KAAM,CAAA,QAAA;AAAA,QAE9B,KAAA;AAAA,QAEA,WAAA;AAAA,QAEA,qBAAqB,KAAM,CAAA,mBAAA;AAAA,QAE3B,UAAA,EAAY,KAAM,CAAA,OAAA,IAAW,KAAM,CAAA,YAAA;AAAA,QAEnC,eAAiB,EAAA,EAAA;AAAA,QAEjB,YAAc,EAAA,KAAA;AAAA,QAEd,WAAa,EAAA,KAAA;AAAA,QAEb,QAAA;AAAA,QAEA,OAAO,KAAM,CAAA,KAAA;AAAA,QAGb,YAAA,EAAc,GAAG,KAAM,CAAA,GAAA;AAAA,QAEvB,eAAe,EAAC;AAAA,OAClB,CAAA;AAGA,MAAA,MAAM,UAAa,GAAA;AAAA,QACjB,WAAA;AAAA,QACA,OAAA;AAAA,QACA,WAAA;AAAA,QACA,gBAAA;AAAA,QACA,MAAA;AAAA,QACA,cAAA;AAAA,QACA,WAAA;AAAA,QACA,OAAA;AAAA,QACA,WAAA;AAAA,OACF,CAAA;AAGA,MAAA,MAAM,SAAY,GAAA,CAAC,YAAc,EAAA,QAAA,EAAU,YAAY,CAAA,CAAA;AAEvD,MAAM,MAAA,WAAA,GAAc,CAAC,YAAA,EAAc,kBAAkB,CAAA,CAAA;AAErD,MAAA,MAAM,WAAc,GAAA;AAAA,QAClB,cAAA;AAAA,QACA,SAAA;AAAA,QACA,gBAAA;AAAA,QACA,cAAA;AAAA,QACA,eAAA;AAAA,QACA,iBAAA;AAAA,OACF,CAAA;AAGA,MAAA,IAAI,MAAS,GAAA,YAAA;AAAA,QACX,UAAA;AAAA,QACA,SAAA;AAAA,QACA,WAAA;AAAA,QACA,WAAA;AAAA,OACF,CAAA;AAGA,MAAS,MAAA,GAAA,YAAA,CAAa,UAAU,MAAM,CAAA,CAAA;AAGtC,MAAA,MAAM,MAAS,GAAA,OAAA;AAAA,QAEb,YAAA;AAAA,QAEA,cAAA;AAAA,QAEA,cAAA;AAAA,OACF,CAAA;AAEA,MAAA,MAAA,GAAS,OAAO,MAAM,CAAA,CAAA;AAGtB,MAAA,YAAA,CAAa,KAAQ,GAAA,MAAA,CAAA;AAKrB,MAAuB,sBAAA,EAAA,CAAA;AACvB,MAAwB,uBAAA,EAAA,CAAA;AAAA,KAC1B,CAAA;AAGA,IAAA,aAAA,CAAc,MAAM;AAElB,MAAgB,eAAA,EAAA,CAAA;AAAA,KACjB,CAAA,CAAA;AAGD,IAAA,SAAA,CAAU,MAAM;AAEd,MAAS,QAAA,EAAA,CAAA;AAAA,KACV,CAAA,CAAA;AAGD,IAAA,eAAA,CAAgB,MAAM;AACpB,MAAA,SAAA,CAAU,MAAM,KAAM,CAAA,MAAA;AAAA,QACpB,cAAA;AAAA,QACA,YAAa,CAAA,KAAA;AAAA,QACb,WAAY,CAAA,KAAA,GAAQ,MAAO,CAAA,YAAA,CAAa,KAAQ,GAAA,IAAA;AAAA,OAClD,CAAA;AAAA,KACD,CAAA,CAAA;AAGD,IAAM,MAAA;AAAA,MAEJ,QAAA;AAAA,MACA,WAAA;AAAA,MACA,KAAA;AAAA,MACA,WAAA;AAAA,MAGA,YAAA;AAAA,MAGA,YAAA;AAAA,MACA,iBAAA;AAAA,MACA,YAAA;AAAA,MACA,cAAA;AAAA,MACA,cAAA;AAAA,KACE,GAAA,SAAA,CAAU,KAAO,EAAA,KAAA,EAAO,SAAS,CAAA,CAAA;AAErC,IAAM,MAAA,EAAE,sBAAwB,EAAA,uBAAA,EAA4B,GAAA,UAAA;AAAA,MAC1D,SAAA;AAAA,MACA,KAAA;AAAA,KACF,CAAA;AAGA,IAAA,MAAM,SAAS,YAAa,CAAA,KAAA,CAAA;AAE5B,IAAA,QAAA,CAAS,KAAQ,GAAA,CAAA,EACf,MAAO,CAAA,OAAA,IAAW,OAAO,QAChB,CAAA,QAAA,EAAA,YAAA,EAAA,CAAA,CAAA,CAAA;AAGX,IAAA,EAAA,CAAG,WAAW,QAAS,CAAA,KAAA,CAAA;AAGvB,IAAA,EAAA,CAAG,YAAe,GAAA,YAAA,CAAA;AAAA,GACpB;AAAA,EACA,MAAS,GAAA;AAtPX,IAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,CAAA;AAuPI,IAAI,IAAA;AACF,MAAA,MAAM,SAAY,GAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA,CAAK,MAAO,EAAA,OAAA,KAAZ,IAAsB,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,CAAA,EAAA,EAAA;AAAA,QACtC,KAAK,EAAC;AAAA,QACN,QAAQ,EAAC;AAAA,QACT,MAAQ,EAAA,CAAA,CAAA;AAAA,OACV,CAAA,CAAA;AAEA,MAAA,MAAM,OAAO,EAAC,CAAA;AAGd,MAAI,IAAA,KAAA,CAAM,OAAQ,CAAA,SAAS,CAAG,EAAA;AAC5B,QAAA,KAAA,MAAW,aAAa,SAAW,EAAA;AAEjC,UAAA,IAAA,CAAA,CAAI,eAAU,IAAV,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAgB,UAAS,SAAa,IAAA,SAAA,CAAU,YAAY,CAAG,EAAA;AACjE,YAAA,IAAA,CAAK,KAAK,SAAS,CAAA,CAAA;AAAA,WACrB,MAAA,IAGE,UAAU,IAAS,KAAA,QAAA,IACnB,MAAM,OAAQ,CAAA,SAAA,CAAU,QAAQ,CAChC,EAAA;AACA,YAAU,SAAA,CAAA,QAAA,CAAS,OAAQ,CAAA,CAACC,MAAU,KAAA;AASpC,cAAIA,IAAAA,CAAAA,MAAAA,IAAA,IAAAA,GAAAA,KAAAA,CAAAA,GAAAA,MAAAA,CAAO,SAAc,MAAA,IAAA,IAAQ,CAAC,QAAA,CAASA,MAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAAA,MAAO,CAAA,QAAQ,CAAG,EAAA;AAC3D,gBAAA,IAAA,CAAK,KAAKA,MAAK,CAAA,CAAA;AAAA,eACjB;AAAA,aACD,CAAA,CAAA;AAAA,WACH;AAAA,SACF;AAAA,OACF;AAEA,MAAM,MAAA,KAAA,GAAQ,CAAE,CAAA,KAAA,EAAO,IAAI,CAAA,CAAA;AAE3B,MAAO,OAAA,KAAA,CAAA;AAAA,aACD,CAAN,EAAA;AACA,MAAO,OAAA,CAAA,CAAE,KAAO,EAAA,EAAE,CAAA,CAAA;AAAA,KACpB;AAAA,GACF;AACF,CAAC,CAAA;;;;"}