@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,239 +0,0 @@
1
- import { TreeDataItem } from "ant-design-vue/lib/tree"
2
- import { ComputedRef, Ref, unref } from "vue"
3
- import { cloneDeep } from 'lodash-es'
4
- import { FieldNames, InsertNodeParams, TreeItem, KeyType } from "../type/tree"
5
- import { forEach } from "../utils/tree"
6
-
7
- export function useTree(
8
- treeDataRef: Ref<TreeDataItem[]>,
9
- getFieldNames: ComputedRef<FieldNames>
10
- ) {
11
-
12
- function getAllKeys(list?: TreeDataItem[]) {
13
- const keys: string[] = []
14
- const treeData = list || unref(treeDataRef)
15
- const { key: keyField, children: childrenField } = unref(getFieldNames)
16
-
17
- if (!childrenField || !keyField) return keys
18
-
19
- for (let index = 0; index < treeData.length; index++) {
20
- const node = treeData[index]
21
- keys.push(node[keyField]!)
22
-
23
- const children = node[childrenField]
24
-
25
- if (children && children.length) {
26
- keys.push(...(getAllKeys(children) as string[]))
27
- }
28
- }
29
-
30
- return keys as KeyType[]
31
- }
32
-
33
- function getEnabledKeys(list?: TreeDataItem[]) {
34
- const keys: string[] = []
35
- const treeData = list || unref(treeDataRef)
36
- const { key: keyField, children: childrenField } = unref(getFieldNames)
37
-
38
- if (!childrenField || !keyField) return keys
39
-
40
- for (let index = 0; index < treeData.length; index++) {
41
- const node = treeData[index]
42
- node.disabled !== true && node.selectable !== false && keys.push(node[keyField]!)
43
-
44
- const children = node[childrenField]
45
- if (children && children.length) {
46
- keys.push(...(getEnabledKeys(children) as string[]))
47
- }
48
- }
49
-
50
- return keys as KeyType[]
51
- }
52
-
53
- // 获取节点的keys
54
- function getChildrenKeys(nodeKey: string | number, list?: TreeDataItem[]) {
55
- const keys: KeyType[] = []
56
- const treeData = list || unref(treeDataRef)
57
- const { key: keyField, children: childrenField } = unref(getFieldNames)
58
-
59
- if (!childrenField || !keyField) return keys
60
-
61
- for (let index = 0; index < treeData.length; index++) {
62
- const node = treeData[index]
63
- const children = node[childrenField]
64
-
65
- if (nodeKey === node[keyField]) {
66
- keys.push(node[keyField]!)
67
-
68
- if (children && children.length) {
69
- keys.push(...(getAllKeys(children) as KeyType[]))
70
- }
71
- } else {
72
- if (children && children.length) {
73
- keys.push(...getChildrenKeys(nodeKey, children))
74
- }
75
- }
76
- }
77
-
78
- return keys as KeyType[]
79
- }
80
-
81
-
82
- function updateNodeByKey(key: string, node: TreeDataItem, list?: TreeDataItem[]) {
83
- if (!key) return
84
-
85
- const treeData = list || unref(treeDataRef)
86
- const { key: keyField, children: childrenField } = unref(getFieldNames)
87
-
88
- if (!childrenField || !keyField) return
89
-
90
- for (let index = 0; index < treeData.length; index++) {
91
- const element: any = treeData[index]
92
- const children = element[childrenField]
93
-
94
- if (element[keyField] === key) {
95
- treeData[index] = { ...treeData[index], ...node }
96
- break
97
- } else if (children && children.length) {
98
- updateNodeByKey(key, node, element[childrenField])
99
- }
100
- }
101
-
102
- }
103
-
104
-
105
- function filterByLevel(level = 1, list?: TreeDataItem[], currentLevel = 1) {
106
- if (!level) return []
107
-
108
- const res: (string | number)[] = []
109
- const data = list || unref(treeDataRef) || []
110
-
111
- for (let index = 0; index < data.length; index++) {
112
- const item = data[index]
113
-
114
- const { key: keyField, children: childrenField } = unref(getFieldNames)
115
- const key = keyField ? item[keyField] : ''
116
- const children = childrenField ? item[childrenField] : []
117
- res.push(key)
118
-
119
- if (children && children.length && currentLevel < level) {
120
- currentLevel += 1;
121
- res.push(...filterByLevel(level, children, currentLevel));
122
- }
123
- }
124
-
125
- return res as string[] | number[]
126
- }
127
-
128
- // 添加节点
129
- function insertNodeByKey({ parentKey = null, node, push = 'push' }: InsertNodeParams) {
130
- const treeData: any = cloneDeep(unref(treeDataRef))
131
-
132
- if (!parentKey) {
133
- treeData[push](node)
134
- treeDataRef.value = treeData
135
- return
136
- }
137
-
138
- const { key: keyField, children: childrenField } = unref(getFieldNames)
139
- if (!childrenField || !keyField) return
140
-
141
- forEach(treeData, (treeItem) => {
142
- if (treeItem[keyField] === parentKey) {
143
- treeItem[childrenField] = treeItem[childrenField] || []
144
- treeItem[childrenField][push](node)
145
- return true
146
- }
147
- })
148
- treeDataRef.value = treeData
149
- }
150
-
151
- // 批量添加节点
152
- function insertNodesByKey({ parentKey = null, list, push = 'push' }: InsertNodeParams) {
153
- const treeData: any = cloneDeep(unref(treeDataRef))
154
-
155
- if (!list || list.length < 1) return
156
-
157
- if (!parentKey) {
158
- for (let i = 0; i < list.length; i++) {
159
- treeData[push](list[i]);
160
- }
161
- } else {
162
- const { key: keyField, children: childrenField } = unref(getFieldNames)
163
- if (!childrenField || !keyField) return
164
-
165
- forEach(treeData, (treeItem) => {
166
- if (treeItem[keyField] === parentKey) {
167
- treeItem[childrenField] = treeItem[childrenField] || []
168
-
169
- for (let i = 0; i < list.length; i++) {
170
- treeItem[childrenField][push](list[i])
171
- }
172
-
173
- treeDataRef.value = treeData
174
-
175
- return true
176
- }
177
- })
178
- }
179
- }
180
-
181
- // 通过key 删除节点
182
- function deleteNodeByKey(key: string, list?: TreeDataItem[]) {
183
- if (!key) return
184
-
185
- const treeData = list || unref(treeDataRef)
186
- const { key: keyField, children: childrenField } = unref(getFieldNames)
187
-
188
- if (!childrenField || !keyField) return
189
-
190
- for (let index = 0; index < treeData.length; index++) {
191
- const element: any = treeData[index]
192
- const children = element[childrenField]
193
-
194
- if (element[keyField] === key) {
195
-
196
- treeData.splice(index, 1)
197
- break
198
-
199
- } else if (children && children.length) {
200
-
201
- deleteNodeByKey(key, element[childrenField])
202
-
203
- }
204
- }
205
- }
206
-
207
- function getSelectedNode(key: KeyType, list?: TreeItem[], selectedNode?: TreeItem | null) {
208
- if (!key && key !== 0) return null
209
-
210
- const treeData = list || unref(treeDataRef)
211
-
212
- treeData.forEach(item => {
213
- if (selectedNode?.key || selectedNode?.key === 0) return selectedNode
214
-
215
- if (item.key === key) {
216
- selectedNode = item
217
- return
218
- }
219
-
220
- if (item.children && item.children.length) {
221
- selectedNode = getSelectedNode(key, item.children, selectedNode)
222
- }
223
- })
224
-
225
- return selectedNode || null
226
- }
227
-
228
- return {
229
- getAllKeys,
230
- getEnabledKeys,
231
- getChildrenKeys,
232
- updateNodeByKey,
233
- filterByLevel,
234
- insertNodeByKey,
235
- insertNodesByKey,
236
- deleteNodeByKey,
237
- getSelectedNode
238
- }
239
- }
@@ -1,392 +0,0 @@
1
- <template>
2
- <div class="dt-tree">
3
- <template v-if="showTitle">
4
- <TreeHeader
5
- :title="title"
6
- :toolbar="toolbar"
7
- :search="search"
8
- :checkable="checkable"
9
- :searchText="searchState.searchText"
10
- :checkAll="checkAll"
11
- :expandAll="expandAll"
12
- @search="handleSearch"
13
- >
14
- {{ extendSlots(slots) }}
15
- </TreeHeader>
16
- </template>
17
-
18
- <Spin :spinning="loading" tip="加载中...">
19
- <div v-show="!getNotFound">
20
- <Tree
21
- v-bind="getBindValues"
22
- :showIcon="false"
23
- :treeData="treeData"
24
- ></Tree>
25
- </div>
26
- <Empty v-show="getNotFound"></Empty>
27
- </Spin>
28
- </div>
29
- </template>
30
-
31
- <script lang="tsx" setup>
32
- import { computed, reactive, ref, toRaw, unref, useAttrs, useSlots as vueUseSlots, watch, watchEffect } from 'vue'
33
- import { cloneDeep, omit, difference, get } from 'lodash-es'
34
- import { Spin, Empty, Tree } from 'ant-design-vue'
35
- import TreeHeader from './components/treeHeader.vue'
36
- import { BasicProps } from './props'
37
- import { CheckKeys, CreateContextOptions, FieldNames, TreeItem, TreeState, KeyType, TreeActionType } from './type/tree'
38
- import { isArray, isBoolean, isFunction, Recordable, isEmpty, useSlots } from '@dt-frames/core'
39
- import { eachTree, filter, treeToList } from './utils/tree'
40
- import { useTree } from './hooks/useTree'
41
-
42
- const props = defineProps( BasicProps )
43
- const attrs = useAttrs()
44
- const slots = vueUseSlots()
45
-
46
- const { getSlot, extendSlots } = useSlots()
47
-
48
- const emit = defineEmits([
49
- 'update:expandedKeys',
50
- 'update:selectedKeys',
51
- 'update:value',
52
- 'check',
53
- 'change',
54
- 'clickNode',
55
- 'update:searchValue'
56
- ])
57
-
58
-
59
- const state = reactive<TreeState>({
60
- checkStrictly: props.checkStrictly,
61
- expandedKeys: props.expandedKeys || [],
62
- selectedKeys: props.selectedKeys || [],
63
- checkedKeys: props.checkedKeys || [],
64
- })
65
-
66
- const searchState = reactive({
67
- startSearch: false,
68
- searchText: '',
69
- searchData: [] as TreeItem[],
70
- })
71
-
72
- const treeDataRef = ref<TreeItem[]>([])
73
-
74
- const getFieldNames = computed(() => {
75
- const { fieldNames } = props
76
- return {
77
- children: 'children',
78
- title: 'title',
79
- key: 'key',
80
- ...(fieldNames as FieldNames)
81
- }
82
- })
83
-
84
- const getTreeData = computed((): TreeItem[] => {
85
- return searchState.startSearch ? searchState.searchData : unref(treeDataRef)
86
- })
87
-
88
- const getNotFound = computed((): boolean => {
89
- return !getTreeData.value || getTreeData.value.length === 0;
90
- })
91
-
92
- const getIcon = (params: Recordable, icon?: string) => {
93
- if (!icon) {
94
- if ( props.renderIcon && isFunction( props.renderIcon ) ) {
95
- return props.renderIcon(params)
96
- }
97
- }
98
-
99
- return icon
100
- }
101
-
102
- const treeData = computed(() => {
103
- const data = cloneDeep(getTreeData.value)
104
-
105
- eachTree(data, ( item, _parent ) => {
106
- const searchText = searchState.searchText
107
-
108
- const { highlight } = unref(props)
109
- const { title: titleField, key: keyField, children: childrenField } = unref(getFieldNames)
110
-
111
- const icon = getIcon(item, item.icon)
112
- const title = get(item, titleField)
113
-
114
- const searchIdx = searchText ? title.indexOf(searchText) : -1
115
- const isHighlight = searchState.startSearch && !isEmpty(searchText) && highlight && searchIdx !== -1
116
- const highlightStyle = `color: ${isBoolean(highlight) ? '#f50' : highlight}`
117
-
118
- const titleDom = isHighlight ? (
119
- // 切割高亮的字
120
- <span class="tree-content">
121
- <span>{title.substr(0, searchIdx)}</span>
122
- <span style={ highlightStyle }>{ searchText }</span>
123
- <span>{ title.substr(searchIdx + (searchText as string).length) }</span>
124
- </span>
125
- ) : (
126
- title
127
- )
128
-
129
- item[titleField] = (
130
- <span
131
- class="tree-title"
132
- onClick={ handleClickNode.bind(null, item[keyField], item[childrenField], item) }
133
- >
134
- {slots?.title ? (
135
- getSlot(slots, 'title', item)
136
- ) : (
137
- <>
138
- {icon && <i class={ `i ${icon}`} />}
139
- {titleDom}
140
- <span class='tree-action'>{renderAction(item)}</span>
141
- </>
142
- )}
143
- </span>
144
- )
145
-
146
- })
147
-
148
- return data
149
- })
150
-
151
-
152
- const showTitle = computed(() => {
153
- return true
154
- })
155
-
156
- const getBindValues = computed(() => {
157
- let propsData = {
158
- blockNode: true,
159
- ...attrs,
160
- ...props,
161
- expandedKeys: state.expandedKeys,
162
- selectedKeys: state.selectedKeys,
163
- checkedKeys: state.checkedKeys,
164
- checkStrictly: state.checkStrictly,
165
- fieldNames: unref(getFieldNames),
166
- 'onUpdate:expandedKeys': (v: KeyType[]) => {
167
- state.expandedKeys = v;
168
- emit('update:expandedKeys', v);
169
- },
170
- 'onUpdate:selectedKeys': (v: KeyType[]) => {
171
- state.selectedKeys = v;
172
- emit('update:selectedKeys', v);
173
- },
174
- onCheck: (v: CheckKeys, e) => {
175
- let currentValue = toRaw( state.checkedKeys ) as KeyType[]
176
-
177
- if ( isArray( currentValue ) && searchState.startSearch ) {
178
- const { key } = unref(getFieldNames)
179
-
180
- currentValue = difference(currentValue, getChildrenKeys(e.node.$attrs.node[key]))
181
-
182
- if (e.checked) {
183
- currentValue.push(e.node.$attrs.node[key]);
184
- }
185
-
186
- state.checkedKeys = currentValue
187
- } else {
188
- state.checkedKeys = v;
189
- }
190
-
191
- const rawVal = toRaw(state.checkedKeys)
192
-
193
- emit('update:value', rawVal)
194
- emit('check', rawVal, e)
195
- }
196
- }
197
-
198
- return omit(propsData, 'treeData', 'class')
199
- })
200
-
201
- // 设置节点点击事件
202
- function handleClickNode(key: string, children: TreeItem[], node: TreeItem) {
203
- emit('clickNode', node)
204
-
205
- if (!props.clickRowToExpand || !children || children.length === 0) return
206
-
207
- if (!state.expandedKeys.includes(key)) {
208
- setExpandedKeys([...state.expandedKeys, key])
209
- } else {
210
- const keys = [...state.expandedKeys]
211
- const index = keys.findIndex((item) => item === key)
212
- if (index !== -1) {
213
- keys.splice(index, 1);
214
- }
215
-
216
- setExpandedKeys(keys)
217
- }
218
- }
219
-
220
- // 渲染操作栏
221
- function renderAction(node: TreeItem) {
222
- const { actionList } = props
223
- if (!actionList || actionList.length === 0) return
224
-
225
- return actionList.map((item, index) => {
226
- let nodeShow = true
227
-
228
- if (isFunction(item.show)) {
229
- nodeShow = item.show?.(node);
230
- } else if (isBoolean(item.show)) {
231
- nodeShow = item.show;
232
- }
233
-
234
- if (!nodeShow) return null
235
-
236
- return (
237
- <span key={index} class='tree-action'>
238
- { item.render(node) }
239
- </span>
240
- )
241
- })
242
-
243
- }
244
-
245
- const {
246
- deleteNodeByKey,
247
- insertNodeByKey,
248
- insertNodesByKey,
249
- filterByLevel,
250
- updateNodeByKey,
251
- getAllKeys,
252
- getChildrenKeys,
253
- getEnabledKeys,
254
- getSelectedNode,
255
- } = useTree( treeDataRef, getFieldNames )
256
-
257
- // 设置实例暴露的方法
258
- function setExpandedKeys(keys: KeyType[]) { state.expandedKeys = keys }
259
- function getExpandedKeys() { return state.expandedKeys }
260
-
261
- function setSelectedKeys( keys: KeyType[] ) { state.selectedKeys = keys }
262
- function getSelectedKeys() { return state.selectedKeys }
263
-
264
- function setCheckedKeys(keys: CheckKeys) { state.checkedKeys = keys }
265
- function getCheckedKeys() { return state.checkedKeys }
266
-
267
- function checkAll(checkAll: boolean) { state.checkedKeys = checkAll ? getEnabledKeys() : ([] as KeyType[]) }
268
- function expandAll(expandAll: boolean) { state.expandedKeys = expandAll ? getAllKeys() : ([] as KeyType[]) }
269
-
270
- function onStrictlyChange(strictly: boolean) { state.checkStrictly = strictly }
271
-
272
- const instance: TreeActionType = {
273
- setExpandedKeys,
274
- getExpandedKeys,
275
- setSelectedKeys,
276
- getSelectedKeys,
277
- setCheckedKeys,
278
- getCheckedKeys,
279
- insertNodeByKey,
280
- insertNodesByKey,
281
- deleteNodeByKey,
282
- updateNodeByKey,
283
- getSelectedNode,
284
- checkAll,
285
- expandAll,
286
- onStrictlyChange,
287
- filterByLevel: (level: number) => {
288
- state.expandedKeys = filterByLevel(level);
289
- },
290
- setSearchValue: (value: string) => {
291
- handleSearch(value);
292
- },
293
- getSearchValue: () => {
294
- return searchState.searchText;
295
- }
296
- }
297
-
298
- function handleSearch(searchValue: string) {
299
- if (searchValue !== searchState.searchText) searchState.searchText = searchValue
300
- emit('update:searchValue', searchValue)
301
-
302
- if (!searchValue) {
303
- searchState.startSearch = false
304
- return
305
- }
306
-
307
- const { filterFn, checkable, expandOnSearch, checkOnSearch, selectedOnSearch } = unref(props)
308
- const { title: titleField, key: keyField } = unref(getFieldNames)
309
- const matchedKeys: string[] = []
310
-
311
- searchState.startSearch = true
312
-
313
- searchState.searchData = filter(
314
- unref(treeDataRef),
315
- (node) => {
316
- const result = filterFn
317
- ? filterFn(searchValue, node, unref(getFieldNames))
318
- : node[titleField]?.includes(searchValue) ?? false
319
-
320
- if (result) {
321
- matchedKeys.push(node[keyField]);
322
- }
323
-
324
- return result;
325
- },
326
- unref(getFieldNames),
327
- )
328
-
329
- if (expandOnSearch) {
330
- const expandKeys = treeToList(searchState.searchData).map((val) => {
331
- return val[keyField]
332
- })
333
-
334
- if (expandKeys && expandKeys.length) {
335
- setExpandedKeys(expandKeys)
336
- }
337
- }
338
-
339
- if (checkOnSearch && checkable && matchedKeys.length) {
340
- setCheckedKeys(matchedKeys)
341
- }
342
-
343
- if (selectedOnSearch && matchedKeys.length) {
344
- setSelectedKeys(matchedKeys)
345
- }
346
- }
347
-
348
- watch(
349
- () => props.searchValue,
350
- (val) => {
351
- if (val !== searchState.searchText) {
352
- searchState.searchText = val
353
- }
354
- },
355
- { immediate: true }
356
- )
357
-
358
- watch(
359
- () => props.treeData,
360
- (val) => {
361
- if (val) {
362
- handleSearch(searchState.searchText)
363
- }
364
- }
365
- )
366
-
367
- watch(
368
- () => props.value,
369
- () => {
370
- state.checkedKeys = toRaw(props.value || [])
371
- },
372
- { immediate: true }
373
- )
374
-
375
- watch(
376
- () => state.checkedKeys,
377
- () => {
378
- const v = toRaw(state.checkedKeys)
379
- emit('update:value', v)
380
- emit('change', v)
381
- }
382
- )
383
-
384
- watchEffect(() => { treeDataRef.value = props.treeData as TreeItem[] })
385
- watchEffect(() => { state.expandedKeys = props.expandedKeys })
386
- watchEffect(() => { state.selectedKeys = props.selectedKeys })
387
- watchEffect(() => { state.checkedKeys = props.checkedKeys })
388
- watchEffect(() => { state.checkStrictly = props.checkStrictly })
389
-
390
- defineExpose(instance)
391
-
392
- </script>