UNPKG

ivue-material-plus

Version:

A high quality UI components Library with Vue.js

1 lines 28.4 kB
{"version":3,"file":"utils.mjs","sources":["../../../../../src/components/ivue-table/utils.ts"],"sourcesContent":["import { createPopper } from '@popperjs/core';\r\nimport { get } from 'lodash-unified';\r\n\r\nimport { useZIndex } from '../../utils/helpers';\r\nimport { throwError } from '../../utils/error';\r\n\r\n// type\r\nimport type { TableColumnCtx } from './table-column/defaults';\r\nimport type { Store } from './store';\r\n\r\n// 是否是对象\r\nconst isObject = function (obj: unknown): boolean {\r\n return obj !== null && typeof obj === 'object';\r\n};\r\n\r\n// 获取数组的key\r\nexport const getKeysMap = function (\r\n array: any[],\r\n rowKey: string\r\n): Record<string, { row: any; index: number }> {\r\n const arrayMap = {};\r\n // arrayMap\r\n (array || []).forEach((row, index) => {\r\n // 获取rowKey对应的数据\r\n arrayMap[getRowIdentity(row, rowKey)] = { row, index };\r\n });\r\n\r\n return arrayMap;\r\n};\r\n\r\n// 获取rowKey对应的数据\r\nexport const getRowIdentity = (row, rowKey): string => {\r\n if (!row) {\r\n throwError('ivue-table', 'row is required when get row identity');\r\n }\r\n\r\n // 字符串\r\n if (typeof rowKey === 'string') {\r\n // 分割字符串成数组\r\n if (!rowKey.includes('.')) {\r\n return `${row[rowKey]}`;\r\n }\r\n\r\n const key = rowKey.split('.');\r\n\r\n let current = row;\r\n\r\n for (const element of key) {\r\n current = current[element];\r\n }\r\n\r\n return `${current}`;\r\n }\r\n // 函数\r\n else if (typeof rowKey === 'function') {\r\n return rowKey.call(null, row);\r\n }\r\n\r\n return '';\r\n};\r\n\r\n// 宽度判断\r\nexport function parseWidth(width: number | string): number | string {\r\n // 空字符串\r\n if (width === '') {\r\n return width;\r\n }\r\n\r\n // 没有宽度\r\n if (width !== undefined) {\r\n width = Number.parseInt(width as string, 10);\r\n\r\n if (Number.isNaN(width)) {\r\n width = '';\r\n }\r\n }\r\n\r\n return width;\r\n}\r\n\r\n// 最小宽度判断\r\nexport function parseMinWidth(minWidth: number | string): number | string {\r\n // 空字符串\r\n if (minWidth === '') {\r\n return minWidth;\r\n }\r\n\r\n // 没有宽度\r\n if (minWidth !== undefined) {\r\n minWidth = parseWidth(minWidth);\r\n if (Number.isNaN(minWidth)) {\r\n minWidth = 80;\r\n }\r\n }\r\n\r\n return minWidth;\r\n}\r\n\r\n// 固定列样式\r\nexport const getFixedColumnsClass = (\r\n namespace: string,\r\n index: number,\r\n fixed: string | boolean,\r\n store: any,\r\n columns?: TableColumnCtx[]\r\n) => {\r\n const classes: string[] = [];\r\n\r\n const { direction, start } = isFixedColumn(index, fixed, store, columns);\r\n\r\n // 有方向\r\n if (direction) {\r\n const isLeft = direction === 'left';\r\n\r\n // 方向\r\n classes.push(`${namespace}-fixed-column--${direction}`);\r\n\r\n // 左边固定列\r\n if (isLeft && start === store.states.fixedLeafColumnsLength.value - 1) {\r\n classes.push('is-last-column');\r\n }\r\n // 其他\r\n else if (\r\n !isLeft &&\r\n start ===\r\n store.states.columns.value.length -\r\n store.states.rightFixedLeafColumnsLength.value\r\n ) {\r\n classes.push('is-first-column');\r\n }\r\n }\r\n\r\n return classes;\r\n};\r\n\r\n// 是否是固定列\r\nexport const isFixedColumn = (\r\n index: number,\r\n fixed: string | boolean,\r\n store: any,\r\n realColumns?: TableColumnCtx[]\r\n) => {\r\n let start = 0;\r\n let after = index;\r\n\r\n // 有列\r\n if (realColumns) {\r\n // 判断是否是组合列\r\n if (realColumns[index].colSpan > 1) {\r\n return {};\r\n }\r\n\r\n for (let i = 0; i < index; i++) {\r\n start += realColumns[i].colSpan;\r\n }\r\n\r\n after = start + realColumns[index].colSpan - 1;\r\n }\r\n // 没有列\r\n else {\r\n start = index;\r\n }\r\n\r\n let fixedLayout;\r\n const columns = store.states.columns;\r\n\r\n switch (fixed) {\r\n // 左固定列\r\n case 'left':\r\n if (after < store.states.fixedLeafColumnsLength.value) {\r\n fixedLayout = 'left';\r\n }\r\n break;\r\n // 右固定列\r\n case 'right':\r\n if (\r\n start >=\r\n columns.value.length - store.states.rightFixedLeafColumnsLength.value\r\n ) {\r\n fixedLayout = 'right';\r\n }\r\n break;\r\n // 固定列默认值\r\n default:\r\n if (after < store.states.fixedLeafColumnsLength.value) {\r\n fixedLayout = 'left';\r\n } else if (\r\n start >=\r\n columns.value.length - store.states.rightFixedLeafColumnsLength.value\r\n ) {\r\n fixedLayout = 'right';\r\n }\r\n }\r\n\r\n return fixedLayout\r\n ? {\r\n direction: fixedLayout,\r\n start,\r\n after,\r\n }\r\n : {};\r\n};\r\n\r\n// 固定列偏移位置\r\nexport const getFixedColumnOffset = (\r\n index: number,\r\n fixed: string | boolean,\r\n store: Store,\r\n realColumns?: TableColumnCtx[]\r\n) => {\r\n const { direction, start = 0 } = isFixedColumn(\r\n index,\r\n fixed,\r\n store,\r\n realColumns\r\n );\r\n\r\n // 没有方向\r\n if (!direction) {\r\n return;\r\n }\r\n\r\n // styles\r\n const styles: {\r\n left?: string;\r\n right?: string;\r\n } = {};\r\n\r\n // 左边\r\n const isLeft = direction === 'left';\r\n\r\n const columns = store.states.columns.value;\r\n\r\n // 左边\r\n if (isLeft) {\r\n styles.left = columns.slice(0, index).reduce(getOffset, 0);\r\n }\r\n // 其他\r\n else {\r\n styles.right = columns\r\n .slice(start + 1)\r\n .reverse()\r\n .reduce(getOffset, 0);\r\n }\r\n\r\n return styles;\r\n};\r\n\r\n// 偏移的位置\r\nfunction getOffset(offset: number, column: TableColumnCtx) {\r\n return (\r\n offset +\r\n (column.columnWidth === null || Number.isNaN(column.columnWidth)\r\n ? Number(column.width)\r\n : column.columnWidth)\r\n );\r\n}\r\n\r\n// 设置定位位置\r\nexport const ensurePosition = (style: Record<any, string>, key: string) => {\r\n if (!style) {\r\n return;\r\n }\r\n\r\n if (!Number.isNaN(style[key])) {\r\n style[key] = `${style[key]}px`;\r\n }\r\n};\r\n\r\n// 修改当前行的状态\r\nexport function toggleRowStatus(\r\n statusArr: any[],\r\n row: any,\r\n newVal: boolean\r\n): boolean {\r\n let changed = false;\r\n\r\n // 当前选择的行列表中是否存在当前行\r\n const index = statusArr.indexOf(row);\r\n\r\n const included = index !== -1;\r\n\r\n // 添加行\r\n const addRow = () => {\r\n statusArr.push(row);\r\n changed = true;\r\n };\r\n\r\n // 删除行\r\n const removeRow = () => {\r\n statusArr.splice(index, 1);\r\n changed = true;\r\n };\r\n\r\n // boolean\r\n if (typeof newVal === 'boolean') {\r\n // 添加行\r\n if (newVal && !included) {\r\n addRow();\r\n }\r\n // 删除行\r\n else if (!newVal && included) {\r\n removeRow();\r\n }\r\n }\r\n // 不是 boolean\r\n else {\r\n if (included) {\r\n removeRow();\r\n } else {\r\n addRow();\r\n }\r\n }\r\n\r\n return changed;\r\n}\r\n\r\n// 获取当前单元格元素\r\nexport const getCell = (event: Event) => {\r\n return (event.target as HTMLElement)?.closest('td');\r\n};\r\n\r\n// 单元格\r\nexport const getColumnByCell = (\r\n table: {\r\n columns: TableColumnCtx[];\r\n },\r\n cell: HTMLElement,\r\n namespace: string\r\n): null | TableColumnCtx => {\r\n // 获取列id\r\n const matches = (cell.className || '').match(\r\n new RegExp(`${namespace}-[^\\\\s]+`, 'gm')\r\n );\r\n\r\n // ['ivue-table-1-column-3', 'ivue-table-cell']\r\n // 是否有列id\r\n if (matches) {\r\n return getColumnById(table, matches[0]);\r\n }\r\n return null;\r\n};\r\n\r\n// 通过id寻找对应的列数据\r\nexport const getColumnById = (\r\n // 列数组\r\n table: {\r\n columns: TableColumnCtx[];\r\n },\r\n // 列id\r\n columnId: string\r\n): null | TableColumnCtx => {\r\n let column: TableColumnCtx = null;\r\n\r\n // 根据id获取当前列\r\n table.columns.forEach((item) => {\r\n // 是否相同\r\n if (item.id === columnId) {\r\n column = item;\r\n }\r\n });\r\n\r\n return column;\r\n};\r\n\r\n// 通过key寻找对应的列数据\r\nexport const getColumnByKey = function (\r\n table: {\r\n columns: TableColumnCtx[];\r\n },\r\n columnKey: string\r\n): TableColumnCtx {\r\n let column: TableColumnCtx = null;\r\n\r\n for (let i = 0; i < table.columns.length; i++) {\r\n const item = table.columns[i];\r\n\r\n // 是否有相同的key->对应的列\r\n if (item.columnKey === columnKey) {\r\n column = item;\r\n\r\n break;\r\n }\r\n }\r\n\r\n // 没有设置columnKey\r\n if (!column) {\r\n throw 'column does not have columnKey set';\r\n }\r\n\r\n return column;\r\n};\r\n\r\nexport let removePopper;\r\n\r\n// 创建pooper\r\nexport const createTablePopper = (\r\n parentNode: HTMLElement | undefined,\r\n trigger: HTMLElement,\r\n popperContent: string,\r\n tooltipTheme,\r\n popperOptions: any\r\n) => {\r\n // 下一个zindex数值\r\n const { nextZIndex } = useZIndex();\r\n\r\n // 获取滚动dom\r\n const scrollContainer = parentNode?.querySelector('.ivue-scrollbar-wrapper');\r\n\r\n // 渲染三角形\r\n const renderArrow = (): HTMLDivElement => {\r\n // arrow\r\n const arrow = document.createElement('div');\r\n arrow.className = 'ivue-tooltip-arrow';\r\n\r\n return arrow;\r\n };\r\n\r\n // 渲染三角形\r\n const arrow = renderArrow();\r\n\r\n // 渲染内容\r\n const renderContent = (): HTMLDivElement => {\r\n // wrapper\r\n const wrapper = document.createElement('div');\r\n wrapper.className = `ivue-tooltip-popper ivue-tooltip-${tooltipTheme}`;\r\n wrapper.style.zIndex = String(nextZIndex());\r\n\r\n // content\r\n const content = document.createElement('div');\r\n content.className = 'ivue-tooltip-content';\r\n\r\n // 文本内容\r\n const inner = document.createElement('div');\r\n inner.className = 'ivue-tooltip-inner';\r\n inner.innerHTML = popperContent;\r\n\r\n // arrow\r\n content.appendChild(arrow);\r\n // inner\r\n content.appendChild(inner);\r\n\r\n wrapper.appendChild(content);\r\n\r\n // Avoid side effects caused by append to body\r\n parentNode?.appendChild(wrapper);\r\n\r\n return wrapper;\r\n };\r\n\r\n // 渲染内容\r\n const content = renderContent();\r\n\r\n let popperInstance = null;\r\n\r\n popperInstance = createPopper(trigger, content, {\r\n strategy: 'absolute',\r\n modifiers: [\r\n {\r\n name: 'offset',\r\n options: {\r\n offset: [0, 0],\r\n },\r\n },\r\n {\r\n name: 'arrow',\r\n options: {\r\n element: arrow,\r\n padding: 10,\r\n },\r\n },\r\n ],\r\n ...popperOptions,\r\n });\r\n\r\n // 显示popper\r\n const showPopper = () => {\r\n popperInstance && popperInstance.update();\r\n };\r\n\r\n // 删除popper\r\n removePopper = () => {\r\n // 销毁popper\r\n popperInstance && popperInstance.destroy();\r\n\r\n // 删除节点\r\n content && parentNode && parentNode?.removeChild(content);\r\n\r\n // 删除事件\r\n trigger.removeEventListener('mouseenter', showPopper);\r\n trigger.removeEventListener('mouseleave', removePopper);\r\n scrollContainer?.removeEventListener('scroll', removePopper);\r\n\r\n removePopper = undefined;\r\n };\r\n\r\n // 当前trigger移动\r\n trigger.addEventListener('mouseenter', showPopper);\r\n trigger.addEventListener('mouseleave', removePopper);\r\n scrollContainer?.addEventListener('scroll', removePopper);\r\n\r\n return popperInstance;\r\n};\r\n\r\n// 排序数据\r\nexport const orderBy = (\r\n array: any[],\r\n sortKey: string,\r\n reverse: string | number,\r\n sortMethod,\r\n sortBy: string | (string | ((a: any, b: any, array?: any[]) => number))[]\r\n) => {\r\n // 没有排序的key 对应列内容的字段名\r\n // 没有自定义排序方法\r\n // 没有指定数据按照哪个属性进行排序\r\n if (\r\n !sortKey &&\r\n !sortMethod &&\r\n (!sortBy || (Array.isArray(sortBy) && !sortBy.length))\r\n ) {\r\n return array;\r\n }\r\n\r\n // string\r\n if (typeof reverse === 'string') {\r\n reverse = reverse === 'descending' ? -1 : 1;\r\n } else {\r\n reverse = reverse && reverse < 0 ? -1 : 1;\r\n }\r\n\r\n // 获取key\r\n let getKey = null;\r\n\r\n // 没有自定义排序方法\r\n if (!sortMethod) {\r\n getKey = (value, index) => {\r\n // 指定数据按照哪个属性进行排序\r\n if (sortBy) {\r\n if (!Array.isArray(sortBy)) {\r\n sortBy = [sortBy];\r\n }\r\n\r\n return sortBy.map((by) => {\r\n // string\r\n if (typeof by === 'string') {\r\n // 获取对象中的属性\r\n return get(value, by);\r\n }\r\n // 函数\r\n else {\r\n return by(value, index, array);\r\n }\r\n });\r\n }\r\n\r\n // 排序的key对应列内容的字段名\r\n if (sortKey !== '$key') {\r\n if (isObject(value) && '$value' in value) {\r\n value = value.$value;\r\n }\r\n }\r\n\r\n // 对象 ?对象值 | 当前值\r\n return [isObject(value) ? get(value, sortKey) : value];\r\n };\r\n }\r\n\r\n // 排序方法\r\n const sort = (a, b) => {\r\n // 是否有自定义排序方法\r\n if (sortMethod) {\r\n return sortMethod(a.value, b.value);\r\n }\r\n\r\n for (let i = 0, length = a.key.length; i < length; i++) {\r\n // 第一个小于第二个\r\n if (a.key[i] < b.key[i]) {\r\n return -1;\r\n }\r\n\r\n // 第一个大于第二个\r\n if (a.key[i] > b.key[i]) {\r\n return 1;\r\n }\r\n }\r\n\r\n // 两个相等返回 0\r\n return 0;\r\n };\r\n\r\n return (\r\n array\r\n .map((value, index) => {\r\n return {\r\n value,\r\n index,\r\n // 当前行的数据 date\r\n key: getKey ? getKey(value, index) : null,\r\n };\r\n })\r\n // 排序\r\n .sort((a, b) => {\r\n let order = sort(a, b);\r\n\r\n // 是否需要排序\r\n if (!order) {\r\n // make stable https://en.wikipedia.org/wiki/Sorting_algorithm#Stability\r\n order = a.index - b.index;\r\n }\r\n\r\n return order * +reverse;\r\n })\r\n // 返回当前行值\r\n .map((item) => item.value)\r\n );\r\n};\r\n\r\n// 行树节点\r\nexport function walkTreeNode(\r\n root,\r\n cb,\r\n childrenKey = 'children',\r\n lazyKey = 'hasChildren'\r\n) {\r\n // 是否有值\r\n const isNull = (array) => !(Array.isArray(array) && array.length);\r\n\r\n // 递归方法检查是否还有嵌套的数据\r\n function walker(parent, children, level) {\r\n cb(parent, children, level);\r\n\r\n children.forEach((item) => {\r\n // 懒加载子节点数据\r\n if (item[lazyKey]) {\r\n cb(item, null, level + 1);\r\n\r\n return;\r\n }\r\n\r\n // 子节点数据\r\n const children = item[childrenKey];\r\n\r\n // 是否有值\r\n if (!isNull(children)) {\r\n walker(item, children, level + 1);\r\n }\r\n });\r\n }\r\n\r\n // 原始数据\r\n root.forEach((item) => {\r\n // 懒加载子节点数据\r\n if (item[lazyKey]) {\r\n cb(item, null, 0);\r\n\r\n return;\r\n }\r\n\r\n // 子节点数据\r\n const children = item[childrenKey];\r\n\r\n // 是否有值\r\n if (!isNull(children)) {\r\n // 递归执行\r\n walker(item, children, 0);\r\n }\r\n });\r\n}\r\n"],"names":["arrow","content","children"],"mappings":"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"}