@dt-frames/ui 1.0.2 → 1.0.5

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 (233) hide show
  1. package/README.md +1 -15
  2. package/es/assets/imgs/header/avatar.png +0 -0
  3. package/es/assets/style/reset.less +0 -3
  4. package/es/components/curd/src/components/dialog.d.ts +21 -58
  5. package/es/components/curd/src/types/curd.type.d.ts +2 -1
  6. package/es/components/dialog/index.d.ts +2 -0
  7. package/es/components/dialog/src/hooks/useDialog.d.ts +3 -0
  8. package/es/components/forms/index.d.ts +2 -2
  9. package/es/components/forms/src/components/formIcon.d.ts +4 -47
  10. package/es/components/forms/src/index.d.ts +2 -6
  11. package/es/components/iframe/index.d.ts +2 -2
  12. package/es/components/index.d.ts +3 -2
  13. package/es/components/modal/src/components/close-icon.d.ts +0 -43
  14. package/es/components/modal/src/index.d.ts +0 -43
  15. package/es/components/source/src/types/table.type.d.ts +1 -1
  16. package/es/components/table/index.d.ts +1 -1
  17. package/es/components/table/src/components/setting/Column.d.ts +6 -5
  18. package/es/components/table/src/hooks/useColumns.d.ts +1 -1
  19. package/es/components/table/src/hooks/useDataSource.d.ts +1 -3
  20. package/es/components/table/src/hooks/useHeaderCode.d.ts +2 -0
  21. package/es/components/table/src/hooks/useRowSelection.d.ts +2 -3
  22. package/es/components/table/src/index.d.ts +15 -3
  23. package/es/components/table/src/props.d.ts +7 -1
  24. package/es/index.js +284 -271
  25. package/es/style/assets/style/reset.less +0 -3
  26. package/es/style/components/forms/{src/index.less → index.less} +2 -0
  27. package/es/style/components/icons/index.less +1 -0
  28. package/es/style/components/iframe/index.less +3 -0
  29. package/es/style/components/modal/{src/index.less → index.less} +0 -0
  30. package/es/style/components/table/{src/index.less → index.less} +12 -1
  31. package/es/style/theme/header/index.less +8 -4
  32. package/es/style/theme/sider/index.less +25 -25
  33. package/es/style/theme/theme.less +2 -1
  34. package/es/theme/header/components/logo.d.ts +43 -0
  35. package/es/theme/header/components/notify.d.ts +0 -1
  36. package/package.json +50 -40
  37. package/src/assets/data/icons/actions.ts +427 -0
  38. package/src/assets/data/icons/code.ts +10 -0
  39. package/src/assets/data/icons/commuticate.ts +190 -0
  40. package/src/assets/data/icons/currency.ts +46 -0
  41. package/src/assets/data/icons/devices.ts +128 -0
  42. package/src/assets/data/icons/edit.ts +165 -0
  43. package/src/assets/data/icons/file.ts +104 -0
  44. package/src/assets/data/icons/math.ts +53 -0
  45. package/src/assets/data/icons/message.ts +75 -0
  46. package/src/assets/data/icons/navigate.ts +181 -0
  47. package/src/assets/data/icons/other.ts +333 -0
  48. package/src/assets/data/icons.ts +58 -0
  49. package/src/assets/imgs/header/avatar.png +0 -0
  50. package/src/assets/imgs/logo/logo.png +0 -0
  51. package/src/assets/locales/en_US.json +3 -0
  52. package/src/assets/locales/zh_CN.json +3 -0
  53. package/src/assets/style/index.less +10 -0
  54. package/src/assets/style/reset.less +17 -0
  55. package/src/components/container/index.less +85 -0
  56. package/src/components/container/index.ts +8 -0
  57. package/src/components/container/src/bar.ts +107 -0
  58. package/src/components/container/src/lazy-container.vue +9 -0
  59. package/src/components/container/src/scroll-bar.vue +117 -0
  60. package/src/components/container/src/scroll-container.vue +61 -0
  61. package/src/components/curd/index.ts +5 -0
  62. package/src/components/curd/src/components/dialog.vue +71 -0
  63. package/src/components/curd/src/components/props.ts +32 -0
  64. package/src/components/curd/src/hooks/useCurd.tsx +87 -0
  65. package/src/components/curd/src/types/curd.type.ts +31 -0
  66. package/src/components/dialog/index.ts +5 -0
  67. package/src/components/dialog/src/hooks/useDialog.ts +85 -0
  68. package/src/components/excel/index.ts +6 -0
  69. package/src/components/excel/src/export2Excel.ts +44 -0
  70. package/src/components/forms/index.less +84 -0
  71. package/src/components/forms/index.ts +11 -0
  72. package/src/components/forms/src/componentMap.ts +44 -0
  73. package/src/components/forms/src/components/formButton.vue +150 -0
  74. package/src/components/forms/src/components/formIcon.vue +50 -0
  75. package/src/components/forms/src/components/formItem.vue +407 -0
  76. package/src/components/forms/src/components/radioButton.vue +58 -0
  77. package/src/components/forms/src/const/form.const.ts +7 -0
  78. package/src/components/forms/src/hooks/helper.ts +70 -0
  79. package/src/components/forms/src/hooks/useForm.ts +130 -0
  80. package/src/components/forms/src/hooks/useFormActions.ts +63 -0
  81. package/src/components/forms/src/hooks/useFormEvents.ts +247 -0
  82. package/src/components/forms/src/hooks/useFormValue.ts +49 -0
  83. package/src/components/forms/src/hooks/useFormValues.ts +131 -0
  84. package/src/components/forms/src/hooks/useLabelWidth.ts +57 -0
  85. package/src/components/forms/src/index.vue +306 -0
  86. package/src/components/forms/src/prop.ts +80 -0
  87. package/src/components/forms/src/types/form.type.ts +269 -0
  88. package/{es/style/components/icons/src → src/components/icons}/index.less +1 -0
  89. package/src/components/icons/index.ts +7 -0
  90. package/src/components/icons/src/pick-icon.vue +117 -0
  91. package/src/components/icons/src/svg-icon.vue +117 -0
  92. package/src/components/iframe/index.less +3 -0
  93. package/src/components/iframe/index.ts +5 -0
  94. package/src/components/iframe/src/index.less +3 -0
  95. package/src/components/iframe/src/index.vue +38 -0
  96. package/src/components/index.ts +48 -0
  97. package/src/components/modal/index.less +60 -0
  98. package/src/components/modal/index.ts +8 -0
  99. package/src/components/modal/src/components/close-icon.vue +47 -0
  100. package/src/components/modal/src/components/modal-wrap.vue +118 -0
  101. package/src/components/modal/src/components/modal.tsx +30 -0
  102. package/src/components/modal/src/components/modalFooter.vue +38 -0
  103. package/src/components/modal/src/hooks/useDrag.ts +107 -0
  104. package/src/components/modal/src/hooks/useFullScreen.ts +27 -0
  105. package/src/components/modal/src/hooks/useModal.ts +176 -0
  106. package/src/components/modal/src/index.vue +173 -0
  107. package/src/components/modal/src/props.ts +43 -0
  108. package/src/components/modal/src/types/modal.type.ts +27 -0
  109. package/src/components/router/base-router.vue +11 -0
  110. package/src/components/router/index.ts +3 -0
  111. package/src/components/source/index.ts +1 -0
  112. package/src/components/source/src/hooks/useFetch.ts +69 -0
  113. package/src/components/source/src/hooks/usePage.ts +3 -0
  114. package/src/components/source/src/hooks/useSource.ts +179 -0
  115. package/src/components/source/src/index.ts +5 -0
  116. package/src/components/source/src/types/source.type.ts +68 -0
  117. package/src/components/source/src/types/table.type.ts +8 -0
  118. package/src/components/table/index.less +173 -0
  119. package/src/components/table/index.ts +7 -0
  120. package/src/components/table/src/components/TableActions.vue +108 -0
  121. package/src/components/table/src/components/TableHeader.vue +77 -0
  122. package/src/components/table/src/components/TableRender.vue +76 -0
  123. package/src/components/table/src/components/setting/Column.vue +354 -0
  124. package/src/components/table/src/components/setting/Download.vue +55 -0
  125. package/src/components/table/src/components/setting/Fullscreen.vue +43 -0
  126. package/src/components/table/src/components/setting/Size.vue +42 -0
  127. package/src/components/table/src/components/setting/index.vue +64 -0
  128. package/src/components/table/src/const.ts +13 -0
  129. package/src/components/table/src/hooks/useColumns.ts +319 -0
  130. package/{es/assets/app-antd-dark-theme-style.e3b0c442.css → src/components/table/src/hooks/useCustomRow.ts} +0 -0
  131. package/src/components/table/src/hooks/useDataSource.ts +99 -0
  132. package/src/components/table/src/hooks/useHeaderCode.ts +82 -0
  133. package/src/components/table/src/hooks/useLoading.ts +29 -0
  134. package/src/components/table/src/hooks/usePagination.ts +76 -0
  135. package/src/components/table/src/hooks/useRowSelection.ts +145 -0
  136. package/src/components/table/src/hooks/useRows.ts +30 -0
  137. package/src/components/table/src/hooks/useTable.ts +89 -0
  138. package/src/components/table/src/hooks/useTableHeader.ts +48 -0
  139. package/src/components/table/src/hooks/useTableInstance.ts +29 -0
  140. package/src/components/table/src/hooks/useTableScroll.ts +229 -0
  141. package/src/components/table/src/index.vue +197 -0
  142. package/src/components/table/src/props.ts +157 -0
  143. package/src/components/table/src/types/table.type.ts +133 -0
  144. package/src/components/table/src/types/tableHeader.type.ts +27 -0
  145. package/{es/assets/app-theme-style.e3b0c442.css → src/components/type.ts} +0 -0
  146. package/src/directives/icon.ts +36 -0
  147. package/src/directives/index.ts +26 -0
  148. package/src/directives/permission.ts +20 -0
  149. package/src/global.d.ts +8 -0
  150. package/src/index.ts +4 -0
  151. package/src/theme/content/index.vue +37 -0
  152. package/src/theme/feature/back-top.vue +11 -0
  153. package/src/theme/feature/index.vue +7 -0
  154. package/src/theme/footer/index.less +16 -0
  155. package/src/theme/footer/index.vue +24 -0
  156. package/src/theme/header/components/bread-crumb.vue +26 -0
  157. package/src/theme/header/components/fullscreen.vue +12 -0
  158. package/src/theme/header/components/handler.ts +81 -0
  159. package/src/theme/header/components/index.ts +21 -0
  160. package/src/theme/header/components/lang-picker.vue +36 -0
  161. package/src/theme/header/components/logo.vue +35 -0
  162. package/src/theme/header/components/menu-search.vue +62 -0
  163. package/src/theme/header/components/notify.vue +22 -0
  164. package/src/theme/header/components/setting-theme.vue +123 -0
  165. package/src/theme/header/components/theme-drawer/enum.ts +12 -0
  166. package/src/theme/header/components/theme-drawer/feature.vue +75 -0
  167. package/src/theme/header/components/theme-drawer/index.ts +7 -0
  168. package/src/theme/header/components/theme-drawer/menu-type.vue +40 -0
  169. package/src/theme/header/components/theme-drawer/select-item.vue +46 -0
  170. package/src/theme/header/components/theme-drawer/switch-item.vue +39 -0
  171. package/src/theme/header/components/theme-drawer/theme-color.vue +26 -0
  172. package/src/theme/header/components/trigger.vue +14 -0
  173. package/src/theme/header/components/user-info.vue +60 -0
  174. package/src/theme/header/const/index.ts +40 -0
  175. package/src/theme/header/helper/menu-tree.ts +64 -0
  176. package/src/theme/header/index.less +442 -0
  177. package/{es/theme/theme.d.ts → src/theme/header/index.ts} +0 -0
  178. package/src/theme/header/index.vue +96 -0
  179. package/src/theme/header/multiple-header.vue +67 -0
  180. package/src/theme/header/set-theme.less +68 -0
  181. package/src/theme/index.ts +3 -0
  182. package/src/theme/sider/components/basic-menu/basic-menu-item.vue +14 -0
  183. package/src/theme/sider/components/basic-menu/basic-menu.vue +122 -0
  184. package/src/theme/sider/components/basic-menu/basic-sub-menu-item.vue +46 -0
  185. package/src/theme/sider/components/basic-menu/menu-item-content.vue +13 -0
  186. package/src/theme/sider/components/drag-bar.vue +26 -0
  187. package/src/theme/sider/components/layout-menu.vue +132 -0
  188. package/src/theme/sider/components/props.ts +97 -0
  189. package/src/theme/sider/components/sider-trigger.vue +24 -0
  190. package/src/theme/sider/helper/sider.ts +52 -0
  191. package/src/theme/sider/helper/split-menu.ts +146 -0
  192. package/src/theme/sider/hooks/useDragLine.ts +86 -0
  193. package/src/theme/sider/hooks/useOpenKeys.ts +57 -0
  194. package/src/theme/sider/index.less +203 -0
  195. package/src/theme/sider/index.vue +88 -0
  196. package/src/theme/tabs/components/TabContent.vue +36 -0
  197. package/src/theme/tabs/components/TabRedo.vue +18 -0
  198. package/src/theme/tabs/hooks/useMultifyTabs.ts +96 -0
  199. package/src/theme/tabs/hooks/useTabDropdown.ts +89 -0
  200. package/src/theme/tabs/index.less +165 -0
  201. package/src/theme/tabs/index.vue +98 -0
  202. package/src/theme/tabs/types/tabs.type.ts +8 -0
  203. package/src/theme/theme.less +67 -0
  204. package/src/theme/theme.vue +90 -0
  205. package/src/theme/transition.less +99 -0
  206. package/es/assets/data/icon.d.ts +0 -4
  207. package/es/assets/data/icon.ts +0 -69
  208. package/es/assets/data/icon11.ts +0 -69
  209. package/es/assets/style/var.less +0 -42
  210. package/es/components/icons/pick-icon.d.ts +0 -529
  211. package/es/components/icons/svg-icon.d.ts +0 -44
  212. package/es/components/table/src/hooks/useFormat.d.ts +0 -2
  213. package/es/components/table/src/hooks/useVirtualScroll.d.ts +0 -5
  214. package/es/components/table/src/utils/format.d.ts +0 -1
  215. package/es/index.css +0 -1
  216. package/es/style/assets/style/var.less +0 -42
  217. package/es/theme/content/index.d.ts +0 -29
  218. package/es/theme/header/components/menu-search.d.ts +0 -528
  219. package/es/theme/header/components/setting-theme.d.ts +0 -2550
  220. package/es/theme/header/components/user-info.d.ts +0 -452
  221. package/es/theme/header/index.d.ts +0 -4369
  222. package/es/theme/header/multiple-header.d.ts +0 -2001
  223. package/es/theme/styles/hooks/changeTheme.d.ts +0 -1
  224. package/es/theme/styles/hooks/generate.d.ts +0 -13
  225. package/es/theme/styles/index.d.ts +0 -2
  226. package/es/theme/tabs/components/TabRedo.d.ts +0 -49
  227. package/es/theme/tabs/index.d.ts +0 -1399
  228. package/es/theme/theme/initTheme.d.ts +0 -3
  229. package/es/theme/theme/util.d.ts +0 -5
  230. package/es/themes/generate.ts +0 -74
  231. package/es/themes/index.ts +0 -10
  232. package/es/themes/modifyVars.ts +0 -33
  233. package/es/themes/themePlugiin.ts +0 -74
@@ -0,0 +1,197 @@
1
+
2
+
3
+ <template>
4
+ <Table
5
+ ref="tableElRef"
6
+ class="dt-table"
7
+ v-bind="getBind"
8
+ :rowClassName="getRowClassName"
9
+ @change="handleTableChange"
10
+ @resizeColumn="handleResizeColumn"
11
+ >
12
+ <template #[item]="data" v-for="item in Object.keys($slots)" :key="item">
13
+ <slot :name="item" v-bind="data || {}"></slot>
14
+ </template>
15
+
16
+ <template #bodyCell="{ column, record, index }">
17
+ <template v-if="column?.render">
18
+ <TableRender :column="column" :record="record" :index="index"></TableRender>
19
+ </template>
20
+ </template>
21
+ </Table>
22
+ </template>
23
+
24
+ <script lang="ts">
25
+ import { defineComponent, ref, unref, computed, ExtractPropTypes, toRaw } from "vue"
26
+ import { Table } from 'ant-design-vue'
27
+ import { TableProps } from './props'
28
+ import { BasicTableProps, SizeType, TableActionType } from "./types/table.type"
29
+ import { useRows } from './hooks/useRows'
30
+ import { Recordable } from "@dt-frames/core"
31
+ import { useLoading } from "./hooks/useLoading"
32
+ import { usePagination } from "./hooks/usePagination"
33
+ import { useDataSource } from "./hooks/useDataSource"
34
+ import { useRowSelection } from "./hooks/useRowSelection"
35
+ import TableHeader from './components/TableHeader.vue'
36
+ import TableRender from './components/TableRender.vue'
37
+ import { createTableInstance } from "./hooks/useTableInstance"
38
+ import { useColumns } from "./hooks/useColumns"
39
+ import { useTableHeader } from "./hooks/useTableHeader"
40
+ import { useTableScroll } from "./hooks/useTableScroll"
41
+
42
+
43
+ export default defineComponent({
44
+ name: 'dt-table',
45
+ props: TableProps,
46
+ components: {
47
+ Table,
48
+ TableHeader,
49
+ TableRender
50
+ },
51
+ emits: [
52
+ 'register',
53
+ 'columns-change',
54
+ 'selection-change'
55
+ ],
56
+ setup(props, { emit, attrs, slots }) {
57
+ // table实例
58
+ const tableElRef = ref(null)
59
+ const tableData = ref<Recordable[]>([])
60
+
61
+ // 修改后的props属性
62
+ const innerPropsRef = ref<BasicTableProps>()
63
+
64
+ const getProps = computed(() => {
65
+ return { ...props, ...unref(innerPropsRef) } as BasicTableProps
66
+ })
67
+
68
+
69
+ /**
70
+ * 重构loading状态
71
+ */
72
+ const { getLoading, setLoading } = useLoading( getProps )
73
+
74
+
75
+ /**
76
+ * 重构分页数据
77
+ */
78
+ const { getPaginationInfo, setPagination, getPagination, getShowPagination, setShowPagination } = usePagination( getProps )
79
+
80
+ // 关于列的控制
81
+ const {
82
+ getViewColumns,
83
+ getColumnsRef,
84
+ getColumns,
85
+ setColumns,
86
+ setCacheColumnsByField,
87
+ getCacheColumns
88
+ } = useColumns(getProps, getPaginationInfo)
89
+
90
+ const {
91
+ getRowSelectionRef,
92
+ clearSelectedRowKeys,
93
+ getRowSelection,
94
+ getSelectRows,
95
+ getSelectRowKeys,
96
+
97
+ } = useRowSelection(getProps, emit)
98
+
99
+ // 关于滚动条的设置
100
+ const { getScrollRef, filterSource } = useTableScroll(
101
+ getProps,
102
+ tableElRef,
103
+ getColumnsRef,
104
+ getRowSelectionRef,
105
+ )
106
+
107
+ function setProps(props: Partial<BasicTableProps>) {
108
+ innerPropsRef.value = { ...unref(innerPropsRef), ...props };
109
+ }
110
+
111
+ const tableAction: TableActionType = {
112
+ setProps,
113
+ setLoading,
114
+ getColumns,
115
+ setColumns,
116
+ getRowSelection,
117
+ setCacheColumnsByField,
118
+ getCacheColumns,
119
+ getSelectRows,
120
+ getSelectRowKeys,
121
+ getSize: () => {
122
+ return unref(getBind).size as SizeType;
123
+ }
124
+ }
125
+
126
+ const {
127
+ getRowClassName
128
+ } = useRows( getProps )
129
+
130
+ /**
131
+ * 表格改变
132
+ */
133
+ const {
134
+ handleTableChange
135
+ } = useDataSource(
136
+ getProps,
137
+ {
138
+ getPaginationInfo,
139
+ setPagination,
140
+ clearSelectedRowKeys
141
+ },
142
+ emit
143
+ )
144
+
145
+
146
+ const getBind = computed(() => {
147
+ return {
148
+ ...attrs,
149
+ ...unref(getProps),
150
+ ...unref(getHeaderProps),
151
+ scroll: unref(getScrollRef),
152
+ loading: unref( getLoading ),
153
+ dataSource: toRaw(unref(filterSource)),
154
+ pagination: toRaw(unref(getPaginationInfo)),
155
+ rowSelection: unref(getRowSelectionRef),
156
+ rowKey: unref(getProps).rowKey,
157
+ columns: unref(getViewColumns),
158
+ tableLayout: 'fixed'
159
+ }
160
+ })
161
+
162
+ // 创建实例
163
+ createTableInstance({ ...tableAction, tableElRef, getBind })
164
+
165
+ /**
166
+ * 处理表格头部内容
167
+ */
168
+ const handlers = {
169
+ onColumnsChange: (data: {
170
+ dataIndex: string
171
+ fixed: boolean | 'left' | 'right' | undefined
172
+ visible: boolean
173
+ }[]) => {
174
+ emit('columns-change', data)
175
+
176
+ unref(getProps).onColumnsChange?.(data)
177
+ }
178
+ }
179
+ const { getHeaderProps } = useTableHeader(getProps, slots, handlers)
180
+
181
+ emit('register', tableAction)
182
+
183
+ return {
184
+ tableElRef,
185
+ getBind,
186
+ getRowClassName,
187
+ handleTableChange,
188
+ getSelectRows,
189
+ handleResizeColumn: (w, col) => {
190
+ col.width = w
191
+ setCacheColumnsByField(col.dataIndex, col)
192
+ }
193
+ }
194
+ }
195
+ })
196
+ </script>
197
+
@@ -0,0 +1,157 @@
1
+ import { Recordable } from '@dt-frames/core'
2
+ import { PropType } from 'vue'
3
+ import { DEFAULT_SORT_FN } from './const'
4
+ import type { PaginationProps } from 'ant-design-vue/lib/pagination'
5
+ import type { TableRowSelection } from 'ant-design-vue/lib/table/interface'
6
+ import { ActionType, BasicColumn, BtnsType, CellFormat, SizeType } from './types/table.type'
7
+ import { ButtonProps } from '../../forms'
8
+ import { DownloadType } from './types/tableHeader.type'
9
+
10
+ export const TableProps = {
11
+ // 点击行是否选中数据
12
+ clickRowSelect: { type: Boolean, default: false },
13
+
14
+ // 表格设置
15
+ tableSetting: {type: Array, default: ['redo', 'size', 'setting', 'fullscreen']},
16
+
17
+ // 是否显示斑马条纹
18
+ striped: { type: Boolean, default: true },
19
+
20
+ // 是否支持拖拽排序
21
+ canColDrag: { type: Boolean, default: true },
22
+
23
+ // 是否支持拖拽改变列宽
24
+ resizable: { type: Boolean, default: true },
25
+ // 最小拖拽宽度
26
+ minWidth: { type: Number },
27
+ // 最大拖拽宽度
28
+ maxWidth: { type: Number },
29
+
30
+ // 是否需要虚拟滚动
31
+ virtual: { type: Boolean, default: false },
32
+
33
+ // 排序
34
+ sortFn: { type: Function, default: DEFAULT_SORT_FN },
35
+
36
+ // 过滤
37
+ filterFn: {
38
+ type: Function as PropType<(data: Partial<Recordable<string[]>>) => any>,
39
+ default: (data: Partial<Recordable<string[]>>) => {
40
+ return data;
41
+ }
42
+ },
43
+
44
+ // 数据的key值
45
+ rowKey: {
46
+ type: String,
47
+ default: 'id'
48
+ },
49
+
50
+ // 默认的排序
51
+ defSort: { type: Object as PropType<Recordable>, default: null },
52
+
53
+ // 列code编码
54
+ columnCode: { type: String },
55
+ // 列自定义的模板
56
+ templates: { type: Object as PropType<CellFormat> },
57
+
58
+ // 列
59
+ columns: { type: [Array] as PropType<BasicColumn[]>, default: () => [] },
60
+
61
+ // 超出部分是否已省略号显示
62
+ ellipsis: { type: Boolean, default: true },
63
+
64
+ // 需要渲染的数据
65
+ dataSource: { type: Array as PropType<Recordable[]>, default: null },
66
+
67
+ // 表格是否需要边框
68
+ bordered: { type: Boolean, default: true },
69
+
70
+ // 分页数据
71
+ pagination: {
72
+ type: [Object, Boolean] as PropType<PaginationProps | boolean>,
73
+ default: {}
74
+ },
75
+
76
+ // 是否处于加载中
77
+ loading: { type: Boolean, default: false },
78
+
79
+ // 动态定义行class
80
+ rowClassName: { type: Function as PropType<(record: any, index: number) => string> },
81
+
82
+ // 定义何时出现滚动条
83
+ scroll: {
84
+ type: Object as PropType<{ x?: number | true; y?: number }>,
85
+ default: {},
86
+ },
87
+
88
+ size: {
89
+ type: String as PropType<SizeType>,
90
+ default: 'small',
91
+ },
92
+
93
+ // 分页、排序、筛选变化时触发
94
+ onTableChange: {
95
+ type: Function,
96
+ default: () => {}
97
+ },
98
+
99
+ // 下载
100
+ onDownload: {
101
+ type: Function,
102
+ default: (excelData: DownloadType) => {}
103
+ },
104
+
105
+ // 选中的行数据
106
+ rowSelection: {
107
+ type: Object as PropType<TableRowSelection | null>,
108
+ default: null,
109
+ },
110
+
111
+ /**
112
+ * 设置行属性
113
+ * 用法:
114
+ * ( record ) => {
115
+ onClick: (event) => {},
116
+ onDblclick: (event) => {},
117
+ onContextmenu: (event) => {},
118
+ onMouseenter: (event) => {}, // 鼠标移入行
119
+ onMouseleave: (event) => {}
120
+ * }
121
+ */
122
+ customRow: {
123
+ type: Function as PropType<( record, index ) => void>,
124
+ default: () => {}
125
+ },
126
+
127
+ childrenColumnName: {
128
+ type: String,
129
+ default: 'children'
130
+ },
131
+
132
+ showIndexColumn: {
133
+ type: Boolean,
134
+ default: false
135
+ },
136
+
137
+ indexColumnProps: {
138
+ type: [Array] as PropType<BasicColumn[]>,
139
+ default: () => [],
140
+ },
141
+
142
+ isTreeTable: {
143
+ type: Boolean,
144
+ default: false
145
+ },
146
+
147
+ // 操作栏
148
+ operations: {
149
+ type: Object as PropType<ActionType | BtnsType[]>,
150
+ },
151
+
152
+ // 工具栏按钮
153
+ toolbar: {
154
+ type: Array as PropType<ButtonProps[]>
155
+ }
156
+
157
+ }
@@ -0,0 +1,133 @@
1
+ import { DictType, Recordable } from '@dt-frames/core'
2
+ import type { ColumnProps } from 'ant-design-vue/lib/table'
3
+ import type { TableRowSelection as ITableRowSelection } from 'ant-design-vue/lib/table/interface'
4
+ import { ExtractPropTypes, VNode, DefineComponent } from 'vue'
5
+ import { TableProps } from '../props'
6
+ import { SetColumnsParams } from './tableHeader.type'
7
+
8
+ export interface TableRowSelection<T = any> extends ITableRowSelection {
9
+ // table选择发生改变
10
+ onChange?: (selectedRowKeys: string[] | number[], selectedRows: T[]) => any
11
+
12
+ // 触发一行选择
13
+ onSelect?: (record: T, selected: boolean, selectedRows: Object[], nativeEvent: Event) => any
14
+
15
+ // 全选
16
+ onSelectAll?: (selected: boolean, selectedRows: T[], changeRows: T[]) => any
17
+
18
+ // 反选
19
+ onSelectInvert?: (selectedRows: string[] | number[]) => any
20
+ }
21
+
22
+ export type TableSetting = {
23
+ // 表格刷新
24
+ redo?: boolean
25
+ // 表格的尺寸
26
+ size?: boolean
27
+ // 是否显示列控制
28
+ setting?: boolean
29
+ // 全屏按钮
30
+ fullscreen?: boolean
31
+ }
32
+
33
+ export type ColumnChangeParam = {
34
+ dataIndex: string
35
+ fixed: boolean | 'left' | 'right' | undefined
36
+ visible: boolean
37
+ }
38
+
39
+ export type BasicTableProps = ExtractPropTypes<typeof TableProps> & {
40
+ onColumnsChange?: (data: ColumnChangeParam[]) => void
41
+ }
42
+
43
+ export type SizeType = 'default' | 'middle' | 'small'
44
+
45
+ export type SorterResult = {
46
+ column: ColumnProps
47
+ order: 'ascend' | 'descend'
48
+ field: string
49
+ columnKey: string
50
+ }
51
+
52
+ export type CellFormat =
53
+ | ((text: string, record: Recordable, index: number) => any)
54
+ | { dict: DictType }
55
+ | { number: string }
56
+ | { date: string }
57
+ | { percent: string }
58
+ | { [key: string]: Recordable }
59
+ | VNode
60
+ | JSX.Element
61
+
62
+ export type BtnsType = {
63
+ title?: string
64
+ icon?: string
65
+ auth?: string
66
+ color?: string
67
+ type?: 'primary' | 'ghost' | 'dashed' | 'link' | 'text' | 'default'
68
+ size?: 'large' | 'middle' | 'small'
69
+ loading?: boolean
70
+ disabled?: boolean
71
+ ifShow?: boolean | ((column: BasicColumn) => boolean)
72
+ action?: (data: {
73
+ row: Recordable,
74
+ index: number
75
+ }) => void
76
+ }
77
+
78
+
79
+ export type ActionType = {
80
+ title?: string
81
+ // 操作栏宽度
82
+ width?: number | string
83
+ // 图标是否展开
84
+ expand?: boolean
85
+ // 操作栏固定位置
86
+ fixed?: 'left' | 'right' | 'auto'
87
+ // 按钮设置
88
+ btns?: BtnsType[]
89
+ }
90
+
91
+
92
+ export interface BasicColumn extends ColumnProps {
93
+ // 子元素
94
+ children?: BasicColumn[]
95
+
96
+ // 默认是否显示
97
+ defaultHidden?: boolean;
98
+
99
+ // 业务控制是否显示
100
+ ifShow?: boolean | ((row: Recordable) => boolean)
101
+
102
+ // 列标识
103
+ flag?: 'INDEX' | 'DEFAULT' | 'CHECKBOX' | 'RADIO' | 'ACTION'
104
+
105
+ // 过滤器转换
106
+ render?: CellFormat
107
+
108
+ edit?: boolean
109
+ editRow?: boolean
110
+ // editable?: boolean
111
+
112
+ // 是否显示序号列
113
+ showIndexColumn?: boolean
114
+
115
+ // 是否展开按钮组 只针对ACTION
116
+ expand?: boolean
117
+
118
+ }
119
+
120
+
121
+ // table相关的操作
122
+ export type TableActionType = {
123
+ setProps: (props: Partial<BasicTableProps>) => void
124
+ setLoading: ( loading: boolean ) => void
125
+ getColumns: (opt?: SetColumnsParams) => BasicColumn[]
126
+ setColumns: (columns: BasicColumn[] | string[]) => void
127
+ getSize: () => SizeType
128
+ getRowSelection: () => TableRowSelection<Recordable>
129
+ getCacheColumns: () => BasicColumn[]
130
+ setCacheColumnsByField?: (dataIndex: string | undefined, value: BasicColumn) => void
131
+ getSelectRows: ( ) => void
132
+ getSelectRowKeys: ( ) => void
133
+ }
@@ -0,0 +1,27 @@
1
+ import { Recordable } from "@dt-frames/core"
2
+ import { BasicColumn } from "./table.type"
3
+
4
+ export type ColumnStateType = {
5
+ checkAll: boolean
6
+ isInit?: boolean
7
+ checkedList: string[]
8
+ defaultCheckList: string[]
9
+ }
10
+
11
+ export type ColumnOptionsType = {
12
+ label: string
13
+ value: string
14
+ fixed?: boolean | 'left' | 'right'
15
+ }
16
+
17
+ export type SetColumnsParams = {
18
+ ignoreIndex?: boolean
19
+ ignoreAction?: boolean
20
+ sort?: boolean
21
+ }
22
+
23
+ export type DownloadType = {
24
+ type: 'current' | 'select' | 'all',
25
+ columns?: BasicColumn[],
26
+ rows?: Recordable<any>[]
27
+ }
@@ -0,0 +1,36 @@
1
+ /**
2
+ * 字体图标指令,目前支持awesome、ant-design以及assets/icons/下的svg图标
3
+ * 使用方法: <span v-icon="'fa fa-user'" :color="'red'" :fontSize="12"></span>
4
+ *
5
+ * 动态设置ant-design 图标
6
+ * https://blog.csdn.net/weixin_45803990/article/details/116270387
7
+ */
8
+ import { DirectiveBinding, h, render, VNode } from "vue";
9
+ import { Nullable } from '@dt-frames/core'
10
+ import { DtIcon } from "../components";
11
+
12
+
13
+ function setIconHTML( el: Element, binding: any, props: any ) {
14
+ const value = binding.value;
15
+ if (!value) return;
16
+
17
+ let vm: Nullable<VNode> = null;
18
+
19
+ vm = h(DtIcon, {
20
+ iconClass: value,
21
+ size: props?.size,
22
+ color: props?.color || null,
23
+ style: {
24
+ display: 'block'
25
+ }
26
+ });
27
+
28
+ if( vm ) {
29
+ render(vm, document.createElement('div'));
30
+ el.appendChild(vm.el as HTMLElement);
31
+ }
32
+ }
33
+
34
+ export const iconMounted = (el: Element, binding: DirectiveBinding<any>, props: any) => {
35
+ setIconHTML(el, binding, props.props);
36
+ };
@@ -0,0 +1,26 @@
1
+
2
+ import { App } from 'vue'
3
+ import { authMounted } from './permission'
4
+ import { iconMounted } from './icon'
5
+
6
+
7
+ const dtDirectives = [
8
+ { name: 'auth', directive: authMounted },
9
+ { name: 'icon', directive: iconMounted },
10
+ ];
11
+
12
+
13
+ // 初始化所有组件
14
+ export function initDirectives() {
15
+ return {
16
+ install(app: App) {
17
+ dtDirectives.forEach( comp => app.directive(comp.name, {
18
+ mounted: comp.directive
19
+ }));
20
+ }
21
+ }
22
+ }
23
+
24
+
25
+ export * from './permission'
26
+ export * from './icon'
@@ -0,0 +1,20 @@
1
+ /**
2
+ * 权限控制,不使用传统的通过css隐藏dom元素
3
+ * 使用方法: v-auth="'ADD'"
4
+ */
5
+ import { CacheKey, DtCache } from '@dt-frames/core';
6
+ import type { DirectiveBinding } from 'vue';
7
+
8
+
9
+ function hasAuth( el: Element, binding: any ) {
10
+ const value = binding.value;
11
+ if (!value) return;
12
+
13
+ if(!DtCache.getLocal(CacheKey.AUTHS).includes( value )) {
14
+ el.parentNode?.removeChild(el);
15
+ }
16
+ }
17
+
18
+ export const authMounted = (el: Element, binding: DirectiveBinding<any>) => {
19
+ hasAuth(el, binding);
20
+ };
@@ -0,0 +1,8 @@
1
+ // 主要解决文件后缀引入后 代码报错的问题
2
+ declare module '*.vue' {
3
+ import { DefineComponent } from 'vue';
4
+ const Component: DefineComponent<{}, {}, any>;
5
+ export default Component;
6
+ }
7
+
8
+ declare module 'lodash-es';
package/src/index.ts ADDED
@@ -0,0 +1,4 @@
1
+ export * from './components'
2
+ export * from './theme'
3
+ export * from './directives'
4
+
@@ -0,0 +1,37 @@
1
+ <template>
2
+ <div id="dt-layout-content" :class="['dt-layout-content', getLayoutContentMode]" :loading="getPageLoading && getOpenPageLoading">
3
+ <LayoutContent>
4
+ <router-view #default="{ Component, route}">
5
+ <transition :name="getTransitionName(route)">
6
+ <keep-alive v-if="!route.meta.hideTab && getCanCache" :include="getCaches">
7
+ <component :is="Component" :key="route.path" />
8
+ </keep-alive>
9
+
10
+ <component v-else :is="Component" />
11
+ </transition>
12
+ </router-view>
13
+ </LayoutContent>
14
+ </div>
15
+ </template>
16
+
17
+ <script setup lang="ts">
18
+ import { unref, computed } from 'vue';
19
+ import { LayoutContent } from 'ant-design-vue';
20
+ import { useTheme, useApp, RouteReuseStore, useMultipleTab } from '@dt-frames/core';
21
+ import { RouteRecordRaw } from 'vue-router';
22
+
23
+ const { getTransitionMode, getOpenPageLoading } = useApp()
24
+ const { getLayoutContentMode, getPageLoading } = useTheme()
25
+ const { getCanCache } = useMultipleTab()
26
+
27
+ const tabStore = RouteReuseStore()
28
+
29
+ // 返回动画name
30
+ function getTransitionName( route: RouteRecordRaw ): string | undefined {
31
+ return (route.meta.transitionName || unref(getTransitionMode)) as string;
32
+ }
33
+
34
+ const getCaches = computed((): string[] => {
35
+ return tabStore.getCachedTabList
36
+ })
37
+ </script>
@@ -0,0 +1,11 @@
1
+ <template>
2
+ <BackTop v-if="getShowBackToTop" :target="getTarget" :visibilityHeight="300" />
3
+ </template>
4
+
5
+ <script lang="ts" setup>
6
+ import { BackTop } from 'ant-design-vue'
7
+ import { useTheme } from '@dt-frames/core'
8
+
9
+ const getTarget = () => document.getElementById('dt-layout-content')
10
+ const { getShowBackToTop } = useTheme()
11
+ </script>
@@ -0,0 +1,7 @@
1
+ <template>
2
+ <DtBackTop />
3
+ </template>
4
+
5
+ <script lang="ts" setup>
6
+ import DtBackTop from './back-top.vue'
7
+ </script>
@@ -0,0 +1,16 @@
1
+ .dt-theme-footer{
2
+ text-align: center;
3
+ padding: 0;
4
+ width: 100%;
5
+ display: block;
6
+ position: absolute;
7
+ right: 0;
8
+ bottom: 0;
9
+ z-index: 1;
10
+ background: #ebeff5;
11
+ color: #b5b5b5;
12
+ border-top: 1px solid #e7e7e7;
13
+ span:first-of-type{
14
+ padding-right: 10px;
15
+ }
16
+ }