UNPKG

ivue-material-plus

Version:

A high quality UI components Library with Vue.js

1 lines 15.8 kB
{"version":3,"file":"index.mjs","sources":["../../../../../../src/components/ivue-table/store/index.ts"],"sourcesContent":["import { getCurrentInstance, unref, nextTick } from 'vue';\r\n\r\nimport useWatcher from './watcher';\r\nimport { throwError } from '../../../utils/error';\r\n\r\n// ts\r\nimport type { Ref } from 'vue';\r\nimport type { Table, Sort, Filter } from '../table/defaults';\r\nimport type { TableColumnCtx } from '../table-column/defaults';\r\n\r\n// 监听props的数据\r\ninterface WatcherPropsData {\r\n data: Ref<any[]>;\r\n rowKey: Ref<string>;\r\n}\r\n\r\n// 排序列\r\nfunction sortColumn(array: TableColumnCtx[]) {\r\n array.forEach((item) => {\r\n // 当前index\r\n item.currentIndex = item.getColumnIndex?.();\r\n\r\n // 有子节点\r\n if (item.children?.length) {\r\n sortColumn(item.children);\r\n }\r\n });\r\n\r\n // 排序\r\n array.sort((cur, pre) => cur.currentIndex - pre.currentIndex);\r\n}\r\n\r\n// 设置列数\r\nfunction replaceColumn(array: TableColumnCtx[], column: TableColumnCtx) {\r\n return array.map((item) => {\r\n // id是否相同返回当前列\r\n if (item.id === column.id) {\r\n return column;\r\n }\r\n // 有子列 获取子列的数据\r\n else if (item.children?.length) {\r\n item.children = replaceColumn(item.children, column);\r\n }\r\n\r\n return item;\r\n });\r\n}\r\n\r\nfunction useStore() {\r\n // 获取当前实例\r\n const vm = getCurrentInstance() as Table;\r\n\r\n // 监听函数\r\n const watcher = useWatcher();\r\n\r\n // ts\r\n // 状态 ts\r\n type states = typeof watcher.states;\r\n\r\n // 同步\r\n const mutations = {\r\n setData(states, data) {\r\n // 数据是否有改变\r\n const dataInstanceChanged = unref(states._data) !== data;\r\n\r\n states.data.value = data;\r\n states._data.value = data;\r\n\r\n // 根据 filters 与 sort 去过滤 data\r\n vm.store.handleExecQueryData();\r\n\r\n // 数据变化,更新部分数据。\r\n // 没有使用 computed,而是手动更新部分数据 https://github.com/vuejs/vue/issues/6660#issuecomment-331417140\r\n vm.store.updateCurrentRowData();\r\n\r\n // 更新展开行\r\n vm.store.updateExpandRows();\r\n\r\n // 更新树数据\r\n vm.store.updateTreeData(vm.store.states.defaultExpandAll.value);\r\n\r\n // 保存数据更新前选中的值\r\n if (unref(states.reserveSelection)) {\r\n // 检查 rowKey 是否存在\r\n vm.store.assertRowKey();\r\n // 更新多选框key\r\n vm.store.updateSelectionByRowKey();\r\n } else {\r\n // 数据变化,更新部分数据。\r\n if (dataInstanceChanged) {\r\n vm.store.clearSelection();\r\n }\r\n // 删除多余的数据(选择后当前表格中不存在的数据)\r\n else {\r\n vm.store.cleanRedundantSelection();\r\n }\r\n }\r\n\r\n // 更新是否选择全部行\r\n vm.store.updateAllSelected();\r\n\r\n // 初始化完成\r\n if (vm.$ready) {\r\n // 更新布局\r\n vm.store.scheduleLayout();\r\n }\r\n },\r\n // 用于多选表格,切换全选和全不选\r\n toggleAllSelection() {\r\n vm.store.toggleAllSelection();\r\n },\r\n // 设置当前行hover\r\n setHoverRow(states: states, row: TableColumnCtx) {\r\n states.hoverRow.value = row;\r\n },\r\n // 插入列\r\n insertColumn(\r\n states: states,\r\n column: TableColumnCtx,\r\n parent: TableColumnCtx\r\n ) {\r\n const array = unref(states._columns);\r\n\r\n let newColumns: TableColumnCtx[] = [];\r\n\r\n // 不是组合头部\r\n if (!parent) {\r\n array.push(column);\r\n\r\n newColumns = array;\r\n }\r\n // 组合头部\r\n else {\r\n if (parent && !parent.children) {\r\n parent.children = [];\r\n }\r\n\r\n // 设置子列\r\n parent.children && parent.children.push(column);\r\n\r\n // 设置为新的列\r\n newColumns = replaceColumn(array, parent);\r\n }\r\n\r\n // 排序列\r\n sortColumn(newColumns);\r\n\r\n // 记录当前列\r\n states._columns.value = newColumns;\r\n\r\n // 多选框\r\n if (column.type === 'selection') {\r\n // 仅对 type=selection 的列有效,类型为 Function,\r\n // Function 的返回值用来决定这一行的 CheckBox 是否可以勾选\r\n states.selectable.value = column.selectable;\r\n\r\n // 保存数据更新前选中的值\r\n states.reserveSelection.value = column.reserveSelection;\r\n }\r\n\r\n // 用于动态插入列\r\n if (vm.$ready) {\r\n // 更新列数据\r\n vm.store.updateColumns();\r\n // 更新 DOM\r\n vm.store.scheduleLayout();\r\n }\r\n },\r\n // 删除行\r\n removeColumn(\r\n states: states,\r\n column: TableColumnCtx,\r\n parent: TableColumnCtx\r\n ) {\r\n const array = unref(states._columns) || [];\r\n\r\n // 有父节点\r\n if (parent && parent.children) {\r\n const findIndex = parent.children.findIndex(\r\n (item) => item.id === column.id\r\n );\r\n\r\n // 移除当前行\r\n parent.children.splice(findIndex, 1);\r\n\r\n // 清空列表\r\n if (parent.children.length === 0) {\r\n delete parent.children;\r\n }\r\n\r\n states._columns.value = replaceColumn(array, parent);\r\n }\r\n // 没有父节点\r\n else {\r\n const index = array.indexOf(column);\r\n\r\n if (index > -1) {\r\n array.splice(index, 1);\r\n\r\n states._columns.value = array;\r\n }\r\n }\r\n\r\n // 用于动态插入列\r\n if (vm.$ready) {\r\n // 更新列数据\r\n vm.store.updateColumns();\r\n // 更新 DOM\r\n vm.store.scheduleLayout();\r\n }\r\n },\r\n // 单选选择当前行\r\n setCurrentRow(_states, row) {\r\n vm.store.updateCurrentRow(row);\r\n },\r\n // 多选\r\n rowSelectedChanged(_states, row) {\r\n vm.store.toggleRowSelection(row);\r\n vm.store.updateAllSelected();\r\n },\r\n // 改变排序\r\n changeSortCondition(states, options: Sort) {\r\n const { sortingColumn, sortProp, sortOrder } = states;\r\n\r\n // 没有排序\r\n if (unref(sortOrder) === null) {\r\n // 初始化需要排序的列\r\n states.sortingColumn.value = null;\r\n\r\n // 排序的key 对应列内容的字段名\r\n states.sortProp.value = null;\r\n }\r\n\r\n // 根据 filters 与 sort 去过滤 data\r\n vm.store.handleExecQueryData(false);\r\n\r\n // 没有选项不是初始化\r\n if (!options || !(options.silent || options.init)) {\r\n vm.emit('on-sort-change', {\r\n column: unref(sortingColumn),\r\n prop: unref(sortProp),\r\n order: unref(sortOrder),\r\n });\r\n }\r\n\r\n // 更新y轴滚动高度\r\n vm.store.updateTableScrollY();\r\n },\r\n // 初始化排序\r\n sort(states: states, options: Sort) {\r\n // 排序的key 对应列内容的字段名 | 排序顺序 | 是否初始化\r\n const { prop, order, init } = options;\r\n\r\n // 排序的key 对应列内容的字段名\r\n if (prop) {\r\n // 找到需要排序的列\r\n const column = unref(states.columns).find(\r\n (column) => column.property === prop\r\n );\r\n\r\n // 有需要排序的列\r\n if (column) {\r\n // 排序顺序\r\n column.order = order;\r\n\r\n vm.store.updateSort(column, prop, order);\r\n vm.store.commit('changeSortCondition', { init });\r\n }\r\n }\r\n },\r\n // 过滤改变\r\n filterChange(states: states, options: Filter) {\r\n const { column, values, silent } = options;\r\n\r\n const newFilters = vm.store.updateFilters(column, values);\r\n\r\n // 根据 filters 与 sort 去过滤 data\r\n vm.store.handleExecQueryData();\r\n\r\n // 是否不执行发送事件\r\n if (!silent) {\r\n vm.emit('on-filter-change', newFilters);\r\n }\r\n\r\n // 更新y轴滚动高度\r\n vm.store.updateTableScrollY();\r\n },\r\n };\r\n\r\n // 调用数据\r\n const commit = (name: keyof typeof mutations, ...args) => {\r\n const mutations = vm.store.mutations;\r\n\r\n // 判断 mutations 是否存在当前方法\r\n if (mutations[name]) {\r\n mutations[name].apply(vm, [vm.store.states].concat(args));\r\n }\r\n // 提示错误\r\n else {\r\n throwError('ivue-table', `Action not found: ${String(name)}`);\r\n }\r\n };\r\n\r\n // 更新y轴滚动高度\r\n const updateTableScrollY = () => {\r\n nextTick(() => {\r\n vm.layout.updateScrollY.apply(vm.layout);\r\n });\r\n };\r\n\r\n return {\r\n ...watcher,\r\n mutations,\r\n commit,\r\n updateTableScrollY,\r\n };\r\n}\r\n\r\nexport default useStore;\r\n\r\nclass HelperStore {\r\n Return = useStore();\r\n}\r\n\r\ntype Store = HelperStore['Return'];\r\ntype StoreFilter = Record<string, string[]>;\r\n\r\nexport type { Store, WatcherPropsData, StoreFilter };\r\n"],"names":["column","mutations"],"mappings":"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"}