@dt-frames/ui 1.0.11 → 1.0.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (219) hide show
  1. package/es/components/curd/src/components/dialog.d.ts +34 -25
  2. package/es/components/curd/src/components/props.d.ts +6 -5
  3. package/es/components/curd/src/hooks/useCurd.d.ts +1 -0
  4. package/es/components/curd/src/types/curd.type.d.ts +4 -3
  5. package/es/components/forms/src/components/formButton.d.ts +1 -2
  6. package/es/components/forms/src/components/formIcon.d.ts +16 -11
  7. package/es/components/forms/src/components/formInputUseDialog.d.ts +903 -0
  8. package/es/components/forms/src/hooks/useFormActions.d.ts +2 -2
  9. package/es/components/forms/src/index.d.ts +2 -2
  10. package/es/components/forms/src/types/form.type.d.ts +6 -18
  11. package/es/components/index.d.ts +2 -2
  12. package/es/components/modal/src/components/modal.d.ts +2 -2
  13. package/es/components/modal/src/components/modalFooter.d.ts +10 -5
  14. package/es/components/modal/src/index.d.ts +16 -11
  15. package/es/components/modal/src/props.d.ts +2 -1
  16. package/es/components/modal/src/types/modal.type.d.ts +4 -1
  17. package/es/components/source/src/hooks/useFetch.d.ts +1 -1
  18. package/es/components/table/src/hooks/useCustomRow.d.ts +19 -0
  19. package/es/components/table/src/hooks/useTable.d.ts +2 -2
  20. package/es/components/table/src/index.d.ts +24 -5
  21. package/es/components/table/src/props.d.ts +5 -2
  22. package/es/components/table/src/types/table.type.d.ts +2 -2
  23. package/es/components/tree/src/props.d.ts +8 -1
  24. package/es/components/upload/index.d.ts +1 -2
  25. package/es/components/upload/src/helper.d.ts +1 -0
  26. package/es/components/upload/src/index.d.ts +34 -11
  27. package/es/components/upload/src/props.d.ts +4 -1
  28. package/es/components/upload/src/upload.d.ts +42 -11
  29. package/es/index.js +356 -200
  30. package/es/style/components/forms/index.less +23 -0
  31. package/es/style/components/icons/index.less +1 -1
  32. package/es/style/components/upload/index.less +3 -11
  33. package/package.json +1 -10
  34. package/vite.config.js +10 -0
  35. package/src/assets/data/icons/actions.ts +0 -427
  36. package/src/assets/data/icons/code.ts +0 -10
  37. package/src/assets/data/icons/commuticate.ts +0 -190
  38. package/src/assets/data/icons/currency.ts +0 -46
  39. package/src/assets/data/icons/devices.ts +0 -128
  40. package/src/assets/data/icons/edit.ts +0 -165
  41. package/src/assets/data/icons/file.ts +0 -104
  42. package/src/assets/data/icons/math.ts +0 -53
  43. package/src/assets/data/icons/message.ts +0 -75
  44. package/src/assets/data/icons/navigate.ts +0 -181
  45. package/src/assets/data/icons/other.ts +0 -333
  46. package/src/assets/data/icons.ts +0 -58
  47. package/src/assets/imgs/header/avatar.png +0 -0
  48. package/src/assets/imgs/logo/logo.png +0 -0
  49. package/src/assets/locales/en_US.json +0 -3
  50. package/src/assets/locales/zh_CN.json +0 -3
  51. package/src/assets/style/index.less +0 -10
  52. package/src/assets/style/reset.less +0 -17
  53. package/src/components/container/index.less +0 -85
  54. package/src/components/container/index.ts +0 -8
  55. package/src/components/container/src/bar.ts +0 -107
  56. package/src/components/container/src/lazy-container.vue +0 -9
  57. package/src/components/container/src/scroll-bar.vue +0 -117
  58. package/src/components/container/src/scroll-container.vue +0 -61
  59. package/src/components/curd/index.ts +0 -5
  60. package/src/components/curd/src/components/dialog.vue +0 -73
  61. package/src/components/curd/src/components/props.ts +0 -32
  62. package/src/components/curd/src/hooks/useCurd.tsx +0 -87
  63. package/src/components/curd/src/types/curd.type.ts +0 -31
  64. package/src/components/excel/index.ts +0 -6
  65. package/src/components/excel/src/export2Excel.ts +0 -44
  66. package/src/components/forms/index.less +0 -84
  67. package/src/components/forms/index.ts +0 -11
  68. package/src/components/forms/src/componentMap.ts +0 -44
  69. package/src/components/forms/src/components/formButton.vue +0 -150
  70. package/src/components/forms/src/components/formIcon.vue +0 -51
  71. package/src/components/forms/src/components/formItem.vue +0 -420
  72. package/src/components/forms/src/components/radioButton.vue +0 -58
  73. package/src/components/forms/src/const/form.const.ts +0 -7
  74. package/src/components/forms/src/hooks/helper.ts +0 -70
  75. package/src/components/forms/src/hooks/useForm.ts +0 -130
  76. package/src/components/forms/src/hooks/useFormActions.ts +0 -63
  77. package/src/components/forms/src/hooks/useFormEvents.ts +0 -248
  78. package/src/components/forms/src/hooks/useFormValue.ts +0 -49
  79. package/src/components/forms/src/hooks/useFormValues.ts +0 -131
  80. package/src/components/forms/src/hooks/useLabelWidth.ts +0 -57
  81. package/src/components/forms/src/index.vue +0 -310
  82. package/src/components/forms/src/prop.ts +0 -80
  83. package/src/components/forms/src/types/form.type.ts +0 -269
  84. package/src/components/icons/index.less +0 -101
  85. package/src/components/icons/index.ts +0 -7
  86. package/src/components/icons/src/pick-icon.vue +0 -119
  87. package/src/components/icons/src/svg-icon.vue +0 -117
  88. package/src/components/iframe/index.less +0 -3
  89. package/src/components/iframe/index.ts +0 -5
  90. package/src/components/iframe/src/index.less +0 -3
  91. package/src/components/iframe/src/index.vue +0 -38
  92. package/src/components/index.ts +0 -54
  93. package/src/components/modal/index.less +0 -60
  94. package/src/components/modal/index.ts +0 -8
  95. package/src/components/modal/src/components/close-icon.vue +0 -46
  96. package/src/components/modal/src/components/modal-wrap.vue +0 -128
  97. package/src/components/modal/src/components/modal.tsx +0 -30
  98. package/src/components/modal/src/components/modalFooter.vue +0 -38
  99. package/src/components/modal/src/hooks/useDrag.ts +0 -107
  100. package/src/components/modal/src/hooks/useFullScreen.ts +0 -29
  101. package/src/components/modal/src/hooks/useModal.ts +0 -194
  102. package/src/components/modal/src/index.vue +0 -173
  103. package/src/components/modal/src/props.ts +0 -43
  104. package/src/components/modal/src/types/modal.type.ts +0 -27
  105. package/src/components/router/base-router.vue +0 -11
  106. package/src/components/router/index.ts +0 -3
  107. package/src/components/source/index.ts +0 -1
  108. package/src/components/source/src/hooks/useFetch.ts +0 -42
  109. package/src/components/source/src/hooks/usePage.ts +0 -3
  110. package/src/components/source/src/hooks/useSource.ts +0 -214
  111. package/src/components/source/src/index.ts +0 -5
  112. package/src/components/source/src/types/source.type.ts +0 -58
  113. package/src/components/source/src/types/table.type.ts +0 -8
  114. package/src/components/table/index.less +0 -179
  115. package/src/components/table/index.ts +0 -7
  116. package/src/components/table/src/components/TableActions.vue +0 -108
  117. package/src/components/table/src/components/TableHeader.vue +0 -78
  118. package/src/components/table/src/components/TableRender.vue +0 -76
  119. package/src/components/table/src/components/editable/CellComponent.ts +0 -57
  120. package/src/components/table/src/components/editable/EditTableCell.vue +0 -181
  121. package/src/components/table/src/components/editable/componentMap.ts +0 -18
  122. package/src/components/table/src/components/editable/index.ts +0 -58
  123. package/src/components/table/src/components/setting/Column.vue +0 -354
  124. package/src/components/table/src/components/setting/Download.vue +0 -55
  125. package/src/components/table/src/components/setting/Fullscreen.vue +0 -43
  126. package/src/components/table/src/components/setting/Size.vue +0 -42
  127. package/src/components/table/src/components/setting/index.vue +0 -64
  128. package/src/components/table/src/const.ts +0 -13
  129. package/src/components/table/src/hooks/useColumns.ts +0 -326
  130. package/src/components/table/src/hooks/useCustomRow.ts +0 -0
  131. package/src/components/table/src/hooks/useDataSource.ts +0 -97
  132. package/src/components/table/src/hooks/useHeaderCode.ts +0 -89
  133. package/src/components/table/src/hooks/useLoading.ts +0 -29
  134. package/src/components/table/src/hooks/usePagination.ts +0 -76
  135. package/src/components/table/src/hooks/useRowSelection.ts +0 -145
  136. package/src/components/table/src/hooks/useRows.ts +0 -30
  137. package/src/components/table/src/hooks/useTable.ts +0 -90
  138. package/src/components/table/src/hooks/useTableHeader.ts +0 -48
  139. package/src/components/table/src/hooks/useTableInstance.ts +0 -29
  140. package/src/components/table/src/hooks/useTableScroll.ts +0 -229
  141. package/src/components/table/src/index.vue +0 -200
  142. package/src/components/table/src/props.ts +0 -157
  143. package/src/components/table/src/types/table.type.ts +0 -160
  144. package/src/components/table/src/types/tableHeader.type.ts +0 -27
  145. package/src/components/tree/index.less +0 -41
  146. package/src/components/tree/index.ts +0 -5
  147. package/src/components/tree/src/components/TreeHeader.vue +0 -97
  148. package/src/components/tree/src/hooks/useTree.ts +0 -239
  149. package/src/components/tree/src/index.vue +0 -392
  150. package/src/components/tree/src/props.ts +0 -133
  151. package/src/components/tree/src/type/tree.ts +0 -105
  152. package/src/components/tree/src/utils/tree.ts +0 -73
  153. package/src/components/type.ts +0 -0
  154. package/src/components/upload/index.less +0 -43
  155. package/src/components/upload/index.ts +0 -7
  156. package/src/components/upload/src/helper.ts +0 -32
  157. package/src/components/upload/src/index.vue +0 -38
  158. package/src/components/upload/src/props.ts +0 -48
  159. package/src/components/upload/src/upload.vue +0 -166
  160. package/src/directives/icon.ts +0 -36
  161. package/src/directives/index.ts +0 -26
  162. package/src/directives/permission.ts +0 -20
  163. package/src/global.d.ts +0 -8
  164. package/src/index.ts +0 -4
  165. package/src/theme/content/index.vue +0 -37
  166. package/src/theme/feature/back-top.vue +0 -11
  167. package/src/theme/feature/index.vue +0 -7
  168. package/src/theme/footer/index.less +0 -16
  169. package/src/theme/footer/index.vue +0 -24
  170. package/src/theme/header/components/bread-crumb.vue +0 -26
  171. package/src/theme/header/components/fullscreen.vue +0 -12
  172. package/src/theme/header/components/handler.ts +0 -81
  173. package/src/theme/header/components/index.ts +0 -21
  174. package/src/theme/header/components/lang-picker.vue +0 -36
  175. package/src/theme/header/components/logo.vue +0 -35
  176. package/src/theme/header/components/menu-search.vue +0 -62
  177. package/src/theme/header/components/notify.vue +0 -22
  178. package/src/theme/header/components/setting-theme.vue +0 -123
  179. package/src/theme/header/components/theme-drawer/enum.ts +0 -12
  180. package/src/theme/header/components/theme-drawer/feature.vue +0 -75
  181. package/src/theme/header/components/theme-drawer/index.ts +0 -7
  182. package/src/theme/header/components/theme-drawer/menu-type.vue +0 -40
  183. package/src/theme/header/components/theme-drawer/select-item.vue +0 -46
  184. package/src/theme/header/components/theme-drawer/switch-item.vue +0 -39
  185. package/src/theme/header/components/theme-drawer/theme-color.vue +0 -26
  186. package/src/theme/header/components/trigger.vue +0 -14
  187. package/src/theme/header/components/user-info.vue +0 -60
  188. package/src/theme/header/const/index.ts +0 -40
  189. package/src/theme/header/helper/menu-tree.ts +0 -64
  190. package/src/theme/header/index.less +0 -442
  191. package/src/theme/header/index.ts +0 -0
  192. package/src/theme/header/index.vue +0 -96
  193. package/src/theme/header/multiple-header.vue +0 -67
  194. package/src/theme/header/set-theme.less +0 -68
  195. package/src/theme/index.ts +0 -3
  196. package/src/theme/sider/components/basic-menu/basic-menu-item.vue +0 -14
  197. package/src/theme/sider/components/basic-menu/basic-menu.vue +0 -122
  198. package/src/theme/sider/components/basic-menu/basic-sub-menu-item.vue +0 -46
  199. package/src/theme/sider/components/basic-menu/menu-item-content.vue +0 -13
  200. package/src/theme/sider/components/drag-bar.vue +0 -26
  201. package/src/theme/sider/components/layout-menu.vue +0 -132
  202. package/src/theme/sider/components/props.ts +0 -97
  203. package/src/theme/sider/components/sider-trigger.vue +0 -24
  204. package/src/theme/sider/helper/sider.ts +0 -52
  205. package/src/theme/sider/helper/split-menu.ts +0 -146
  206. package/src/theme/sider/hooks/useDragLine.ts +0 -86
  207. package/src/theme/sider/hooks/useOpenKeys.ts +0 -57
  208. package/src/theme/sider/index.less +0 -203
  209. package/src/theme/sider/index.vue +0 -88
  210. package/src/theme/tabs/components/TabContent.vue +0 -36
  211. package/src/theme/tabs/components/TabRedo.vue +0 -18
  212. package/src/theme/tabs/hooks/useMultifyTabs.ts +0 -96
  213. package/src/theme/tabs/hooks/useTabDropdown.ts +0 -89
  214. package/src/theme/tabs/index.less +0 -165
  215. package/src/theme/tabs/index.vue +0 -98
  216. package/src/theme/tabs/types/tabs.type.ts +0 -8
  217. package/src/theme/theme.less +0 -67
  218. package/src/theme/theme.vue +0 -90
  219. package/src/theme/transition.less +0 -99
@@ -1,145 +0,0 @@
1
- /**
2
- * 处理表格选中事件
3
- */
4
-
5
- import { isFunction, Recordable } from "@dt-frames/core";
6
- import type { TableRowSelection } from 'ant-design-vue/lib/table/interface'
7
- import { computed, ComputedRef, ref, Ref, toRaw, unref, watch, nextTick } from "vue"
8
- import { BasicTableProps } from "../types/table.type"
9
-
10
- interface TreeHelperConfig {
11
- id: string;
12
- children: string;
13
- pid: string;
14
- }
15
-
16
- const DEFAULT_CONFIG: TreeHelperConfig = {
17
- id: 'id',
18
- children: 'children',
19
- pid: 'pid',
20
- }
21
-
22
- export function useRowSelection(
23
- propsRef: ComputedRef<BasicTableProps>,
24
- emit
25
- ) {
26
- // 选中的节点 不包含子节点
27
- const selectedRowKeysRef = ref<string[]>([])
28
- // 选中的节点 包含子节点
29
- const selectedRowRef = ref<Recordable[]>([])
30
-
31
- // 获取选中的行数据
32
- const getRowSelectionRef = computed((): TableRowSelection | null => {
33
- const { rowSelection } = unref(propsRef)
34
-
35
- if (!rowSelection) {
36
- return null;
37
- }
38
-
39
- return {
40
- ...rowSelection,
41
- selectedRowKeys: toRaw(unref(selectedRowKeysRef)),
42
- onChange: (selectedRowKeys: string[]) => {
43
- setSelectedRowKeys(selectedRowKeys)
44
- },
45
- }
46
- })
47
-
48
- watch(
49
- () => unref(propsRef).rowSelection?.selectedRowKeys,
50
- (v: string[]) => {
51
- setSelectedRowKeys(v);
52
- },
53
- )
54
-
55
- watch(
56
- () => unref(selectedRowKeysRef),
57
- () => {
58
- nextTick(() => {
59
- const { rowSelection } = unref(propsRef)
60
-
61
- if (rowSelection){
62
- const { onChange } = rowSelection
63
- if (onChange && isFunction(onChange)) onChange(getSelectRowKeys(), getSelectRows())
64
- }
65
-
66
- emit('selection-change', {
67
- keys: getSelectRowKeys(),
68
- rows: getSelectRows(),
69
- })
70
- })
71
- },
72
- { deep: true }
73
- )
74
-
75
- // 设置树节点的选中
76
- function findeNodeAll(
77
- tree: any,
78
- func: Function,
79
- config: Partial<TreeHelperConfig> = {}
80
- ) {
81
- config = Object.assign({}, DEFAULT_CONFIG, config)
82
- const { children } = config
83
-
84
- const result: any[] = []
85
- const list = [...tree]
86
-
87
- for (const node of list) {
88
- func(node) && result.push(node);
89
- node.children && list.push(...node.children);
90
- }
91
-
92
- return result
93
- }
94
-
95
- // 设置选中的key
96
- function setSelectedRowKeys( rowKeys: string[] ) {
97
- selectedRowKeysRef.value = rowKeys
98
-
99
- const allSelectedRows = findeNodeAll(
100
- toRaw(unref(propsRef).dataSource).concat(toRaw(unref(selectedRowRef))),
101
- (item) => rowKeys.includes(item[ unref( propsRef ).rowKey]),
102
- {
103
- children: propsRef.value.childrenColumnName ?? 'children',
104
- },
105
- )
106
-
107
- const trueSelectedRows: any[] = []
108
-
109
- rowKeys.forEach( (key: string) => {
110
- const found = allSelectedRows.find((item) => item[ unref( propsRef ).rowKey] === key)
111
- found && trueSelectedRows.push(found)
112
- } )
113
-
114
- selectedRowRef.value = trueSelectedRows
115
- }
116
-
117
-
118
- // 清除所有的选中数据
119
- function clearSelectedRowKeys() {
120
- selectedRowKeysRef.value = []
121
- selectedRowRef.value = []
122
- }
123
-
124
- // 获取选中的行数据
125
- function getRowSelection() {
126
- return unref( getRowSelectionRef )
127
- }
128
-
129
- function getSelectRowKeys() {
130
- return unref(selectedRowKeysRef);
131
- }
132
-
133
- function getSelectRows() {
134
- return unref(selectedRowRef)
135
- }
136
-
137
- return {
138
- getRowSelectionRef,
139
- clearSelectedRowKeys,
140
- getRowSelection,
141
- getSelectRowKeys,
142
- getSelectRows,
143
- setSelectedRowKeys
144
- }
145
- }
@@ -1,30 +0,0 @@
1
- import { isFunction } from "@dt-frames/core";
2
- import { ComputedRef, unref } from "vue";
3
- import { BasicTableProps } from "../types/table.type";
4
-
5
-
6
- export function useRows(propsRef: ComputedRef<BasicTableProps>) {
7
- /**
8
- * 获取行的class
9
- */
10
- function getRowClassName(record: any, index: number) {
11
-
12
- const { striped, rowClassName } = unref(propsRef)
13
- const classNames: string[] = []
14
-
15
- if( striped ) {
16
- classNames.push( index % 2 === 1 ? 'table-striped' : '' )
17
- }
18
-
19
- if( rowClassName && isFunction(rowClassName) ) {
20
- classNames.push( rowClassName( record, index ) )
21
- }
22
-
23
- return classNames.join(' ')
24
- }
25
-
26
- return {
27
- getRowClassName
28
- }
29
-
30
- }
@@ -1,90 +0,0 @@
1
- import { DynamicProps, Nullable, getDynamicProps, error, Recordable } from '@dt-frames/core'
2
- import { onUnmounted, ref, toRaw, unref, watch } from 'vue'
3
- import { BasicColumn, BasicTableProps, TableActionType } from '../types/table.type'
4
- import { useHeaderCode } from './useHeaderCode'
5
-
6
-
7
- type Props = Partial<DynamicProps<BasicTableProps>>
8
-
9
- export function useTable(tableProps?: Props) {
10
- const tableRef = ref<Nullable<TableActionType>>(null)
11
- const loadedRef = ref<Nullable<boolean>>(false)
12
-
13
- function registerTable( instance: TableActionType ) {
14
- onUnmounted(() => {
15
- tableRef.value = null;
16
- loadedRef.value = null;
17
- })
18
-
19
- if( unref(loadedRef) && instance === unref(tableRef) ) return
20
-
21
- tableRef.value = instance
22
-
23
- if( tableProps.columnCode ) {
24
- useHeaderCode(
25
- tableProps.columnCode as string,
26
- tableProps.templates as Recordable,
27
- (columns: BasicColumn[]) => {
28
- tableProps.columns = columns
29
-
30
- instance.setProps(getDynamicProps(tableProps))
31
- }
32
- )
33
- }
34
-
35
-
36
- watch(
37
- () => tableProps,
38
- () => {
39
- tableProps && instance.setProps(getDynamicProps(tableProps));
40
- },
41
- {
42
- immediate: true,
43
- deep: true,
44
- },
45
- )
46
-
47
- }
48
-
49
- function getTableInstance(): TableActionType {
50
- const table = unref(tableRef);
51
- if (!table) {
52
- error('没有table表单实例');
53
- }
54
-
55
- return table as TableActionType;
56
- }
57
-
58
- const methods: TableActionType = {
59
- setProps: (props: Partial<BasicTableProps>) => {
60
- getTableInstance().setProps(props);
61
- },
62
- setLoading: (loading: boolean) => {
63
- getTableInstance().setLoading( loading )
64
- },
65
- getColumns: ({ ignoreIndex = false }: { ignoreIndex?: boolean } = {}) => {
66
- const columns = getTableInstance().getColumns({ ignoreIndex }) || []
67
- return toRaw(columns);
68
- },
69
- setColumns: (columns: BasicColumn[]) => {
70
- getTableInstance().setColumns(columns)
71
- },
72
- getRowSelection: () => {
73
- return toRaw(getTableInstance().getRowSelection())
74
- },
75
- getCacheColumns: () => {
76
- return toRaw(getTableInstance().getCacheColumns())
77
- },
78
- getSize: () => {
79
- return toRaw(getTableInstance().getSize())
80
- },
81
- getSelectRowKeys: () => {
82
- return getTableInstance().getSelectRowKeys()
83
- },
84
- getSelectRows: () => {
85
- return getTableInstance().getSelectRows()
86
- }
87
- }
88
-
89
- return [registerTable as any, methods]
90
- }
@@ -1,48 +0,0 @@
1
- import { Recordable, useSlots } from "@dt-frames/core"
2
- import { computed, ComputedRef, h, Slots, unref } from "vue"
3
- import TableHeader from '../components/TableHeader.vue'
4
- import { BasicTableProps, ColumnChangeParam } from "../types/table.type";
5
-
6
- export function useTableHeader(
7
- propsRef: ComputedRef<BasicTableProps>,
8
- slots: Slots,
9
- handlers: { onColumnsChange: (data: ColumnChangeParam[]) => void }
10
- ) {
11
- const getHeaderProps = computed((): Recordable => {
12
- const { tableSetting, toolbar = [] } = unref(propsRef)
13
-
14
- const { getSlot } = useSlots()
15
- const hideTitle = !toolbar.length && !slots.toolbar && !slots.headerTop && !tableSetting
16
-
17
- return {
18
- title: hideTitle
19
- ? null
20
- : () =>
21
- h(
22
- TableHeader,
23
- {
24
- tableTools: tableSetting,
25
- toolbar,
26
- onColumnsChange: handlers.onColumnsChange
27
- } as Recordable,
28
- {
29
- ...(slots.toolbar
30
- ? {
31
- toolbar: () => getSlot(slots, 'toolbar'),
32
- }
33
- : {}),
34
- ...(slots.headerTop
35
- ? {
36
- headerTop: () => getSlot(slots, 'headerTop'),
37
- }
38
- : {}),
39
- },
40
- )
41
- }
42
-
43
- })
44
-
45
- return {
46
- getHeaderProps
47
- }
48
- }
@@ -1,29 +0,0 @@
1
- /** ======================================
2
- * 保存table实例对象
3
- * ======================================*/
4
-
5
- import { Nullable, Recordable } from "@dt-frames/core"
6
- import { ComputedRef, inject, provide, Ref } from "vue"
7
- import { BasicTableProps, TableActionType } from "../types/table.type"
8
-
9
-
10
- const tableKey = Symbol('dt-page')
11
-
12
- type Instance = TableActionType & {
13
- tableElRef: Ref<Nullable<HTMLElement>>
14
- getBind: ComputedRef<Recordable>
15
- }
16
-
17
- type RetInstance = Omit<Instance, 'getBind'> & {
18
- getBind: ComputedRef<BasicTableProps>
19
- }
20
-
21
- // 创建table实例
22
- export function createTableInstance(instance: Instance) {
23
- provide(tableKey, instance)
24
- }
25
-
26
- // 获取table实例
27
- export function getTableInstance(): RetInstance {
28
- return inject(tableKey) as RetInstance
29
- }
@@ -1,229 +0,0 @@
1
- import { isBoolean, windowResizeFn } from "@dt-frames/core"
2
- import { useDebounceFn } from "@vueuse/core"
3
- import { ComputedRef, ref, Ref, nextTick, watch, computed, unref, onMounted, h } from "vue"
4
- import { TABLE_SIZE_HEIGHT } from "../const"
5
- import { BasicColumn, BasicTableProps, TableRowSelection } from "../types/table.type"
6
-
7
- /**
8
- * 计算table横向和纵向的滚动条
9
- */
10
- export function useTableScroll(
11
- propsRef: ComputedRef<BasicTableProps>,
12
- tableElRef: Ref<HTMLDivElement & {$el: any} | null>,
13
- columnsRef: ComputedRef<BasicColumn[]>,
14
- rowSelectionRef: ComputedRef<TableRowSelection | null>
15
- ) {
16
- // 默认表格的高度
17
- const tableHeightRef = ref(0)
18
- const filterSource = ref([])
19
-
20
- const debounceRedoHeight = useDebounceFn( redoHeight, 100 )
21
-
22
- watch(
23
- () => propsRef.value.dataSource,
24
- (v) => {
25
- debounceRedoHeight()
26
- },
27
- {
28
- deep: true,
29
- flush: 'post' // 在dom渲染之后监听
30
- }
31
- )
32
-
33
- windowResizeFn(calcTableHeight, 280)
34
-
35
- function redoHeight() {
36
- nextTick(() => {
37
- calcTableHeight()
38
- })
39
- }
40
-
41
- let footerEl: HTMLElement | null
42
- let bodyEl: HTMLElement | null
43
-
44
- function setHeight(height: number) {
45
- tableHeightRef.value = height
46
- }
47
-
48
- async function calcTableHeight() {
49
- const { pagination, virtual } = unref(propsRef)
50
-
51
- const table = unref(tableElRef)
52
-
53
- if( !table ) return
54
-
55
- const tableEl = table?.$el
56
-
57
- if( !bodyEl ) {
58
- bodyEl = tableEl.querySelector('.ant-table-body')
59
- if( !bodyEl ) return
60
- }
61
-
62
- const hasScrollBarY = bodyEl.scrollHeight > bodyEl.clientHeight
63
- const hasScrollBarX = bodyEl.scrollWidth > bodyEl.clientWidth
64
-
65
- if( hasScrollBarY ) {
66
- tableEl.classList.contains('hide-scrollbar-y') && tableEl.classList.remove('hide-scrollbar-y')
67
- } else {
68
- !tableEl.classList.contains('hide-scrollbar-y') && tableEl.classList.add('hide-scrollbar-y')
69
- }
70
-
71
- if (hasScrollBarX) {
72
- tableEl.classList.contains('hide-scrollbar-x') && tableEl.classList.remove('hide-scrollbar-x')
73
- } else {
74
- !tableEl.classList.contains('hide-scrollbar-x') && tableEl.classList.add('hide-scrollbar-x')
75
- }
76
-
77
- bodyEl!.style.height = 'unset'
78
- if( unref(propsRef).dataSource.length === 0 ) return
79
-
80
- await nextTick()
81
-
82
- let
83
- headerHeight = 0,
84
- paginationHeight = 2,
85
- footerHeight = 0,
86
- titleHeight = (tableEl.querySelector('.ant-table-title') as HTMLElement)?.offsetHeight ?? 0,
87
- marginHeight = 15
88
-
89
- const headEl = tableEl.querySelector('.ant-table-thead ')
90
- if( headEl ) {
91
- headerHeight = (headEl as HTMLElement).offsetHeight
92
- }
93
-
94
- if( !isBoolean(pagination) ) {
95
- let paginationEl = tableEl.querySelector('.ant-pagination') as HTMLElement
96
-
97
- if( paginationEl ) {
98
- const offsetHeight = paginationEl.offsetHeight
99
- paginationHeight += offsetHeight || 0
100
- } else {
101
- paginationHeight += 24
102
- }
103
-
104
- if( !footerEl ) {
105
- footerEl = tableEl.querySelector('.ant-table-footer') as HTMLElement
106
- } else {
107
- const offsetHeight = footerEl.offsetHeight
108
- footerHeight += offsetHeight || 0
109
- }
110
-
111
- } else {
112
- paginationHeight = -8
113
- }
114
-
115
- const tableHeight = table?.$el?.offsetHeight ?? 0
116
-
117
- let height = tableHeight - paginationHeight - footerHeight - headerHeight - titleHeight - marginHeight
118
- height = Math.max(height, 167)
119
-
120
- setHeight(height)
121
-
122
- bodyEl!.style.height = `${height}px`
123
-
124
- // 表格虚拟滚动
125
- virtual ? calcTableScroll( ) : filterSource.value = unref(propsRef)?.dataSource
126
- }
127
-
128
- onMounted(() => {
129
- calcTableHeight();
130
- nextTick(() => {
131
- debounceRedoHeight();
132
- });
133
- });
134
-
135
- const getScrollX = computed(() => {
136
- let width = 0
137
-
138
- // 如果有复选框或者单选框
139
- if( unref(rowSelectionRef) ) {
140
- width += 32
141
- }
142
-
143
- const NORMAL_WIDTH = 120
144
-
145
- const columns = unref(columnsRef).filter((item) => !item.defaultHidden)
146
-
147
- columns.forEach( item => {
148
- width += Number.parseInt(item.width as string) || NORMAL_WIDTH
149
- } )
150
-
151
- const table = unref(tableElRef)
152
- const tableWidth = table?.$el?.offsetWidth ?? 0
153
-
154
- return tableWidth > width ? '100%' : width
155
- })
156
-
157
- const getScrollRef = computed(() => {
158
- const tableHeight = unref(tableHeightRef)
159
- const { scroll } = unref(propsRef)
160
-
161
- return {
162
- x: unref(getScrollX),
163
- y: tableHeight,
164
- scrollToFirstRowOnChange: false,
165
- ...scroll,
166
- };
167
- })
168
-
169
- // 创建滚动元素
170
- function createScrollWrap(el: Element) {
171
- let data = unref(propsRef)?.dataSource?.length
172
- const { size } = unref(propsRef)
173
- const rowHeight = TABLE_SIZE_HEIGHT[size]
174
-
175
- let scrollWrap = el.querySelector('.tableScrollWrap')
176
- let wrapHeight = data * rowHeight + 'px'
177
-
178
- if( scrollWrap ) {
179
- (scrollWrap as any).style.height = wrapHeight
180
- } else {
181
- let div = document.createElement('div')
182
- div.className = 'tableScrollWrap'
183
- div.style.height = wrapHeight
184
- el.insertBefore(div, el.querySelector('table')[0])
185
- }
186
- }
187
-
188
- async function calcTableScroll() {
189
- const tableEl = unref(tableElRef)?.$el
190
- bodyEl = tableEl.querySelector('.ant-table-body')
191
-
192
- // 添加一个滚动div元素
193
- createScrollWrap(bodyEl)
194
-
195
- calcScroll(bodyEl)
196
-
197
- bodyEl.addEventListener('scroll', (e) => {
198
- // 这里做一个节流
199
- useDebounceFn( () => { calcScroll(bodyEl) }, 100 )()
200
- })
201
- }
202
-
203
- async function calcScroll(el: Element) {
204
- const { size } = unref(propsRef)
205
- const rowHeight = TABLE_SIZE_HEIGHT[size]
206
- const scrollTop = el.scrollTop
207
-
208
- // 留闲高度,默认留3个表格高度
209
- const remainCount = 3
210
- const remainH = remainCount * rowHeight
211
-
212
- // 最小高度
213
- const minItemHeight = scrollTop > remainH ? Math.floor((scrollTop - remainH) / rowHeight) * rowHeight : 0
214
-
215
- // 最小索引
216
- const minIndex = minItemHeight / rowHeight
217
- // 最大索引
218
- const maxIndex = minIndex + Math.ceil(tableHeightRef.value / rowHeight) + (minItemHeight && remainCount) + remainCount * 2
219
-
220
- bodyEl.querySelector('table').style.transform = `translateY(${minItemHeight}px)`
221
-
222
- filterSource.value = unref(propsRef)?.dataSource.slice(minIndex, maxIndex)
223
- }
224
-
225
- return {
226
- getScrollRef,
227
- filterSource
228
- }
229
- }