@dt-frames/ui 1.0.13 → 1.0.17

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 (214) hide show
  1. package/es/components/curd/src/components/dialog.d.ts +20 -21
  2. package/es/components/curd/src/components/props.d.ts +2 -1
  3. package/es/components/curd/src/hooks/useCurd.d.ts +1 -0
  4. package/es/components/curd/src/types/curd.type.d.ts +2 -2
  5. package/es/components/forms/src/components/formButton.d.ts +1 -2
  6. package/es/components/forms/src/components/formIcon.d.ts +15 -15
  7. package/es/components/forms/src/hooks/helper.d.ts +2 -0
  8. package/es/components/forms/src/hooks/useFormActions.d.ts +2 -2
  9. package/es/components/forms/src/index.d.ts +2 -3
  10. package/es/components/forms/src/types/form.type.d.ts +3 -17
  11. package/es/components/index.d.ts +1 -1
  12. package/es/components/modal/src/components/modal.d.ts +2 -2
  13. package/es/components/modal/src/components/modalFooter.d.ts +1 -1
  14. package/es/components/modal/src/index.d.ts +15 -15
  15. package/es/components/modal/src/props.d.ts +1 -1
  16. package/es/components/source/src/hooks/useFetch.d.ts +1 -1
  17. package/es/components/table/src/components/editable/EditTableCell.d.ts +3 -0
  18. package/es/components/table/src/components/editable/index.d.ts +1 -1
  19. package/es/components/table/src/index.d.ts +6 -3
  20. package/es/components/table/src/props.d.ts +1 -2
  21. package/es/components/table/src/types/table.type.d.ts +2 -0
  22. package/es/components/tree/src/props.d.ts +8 -1
  23. package/es/components/upload/src/upload.d.ts +6 -3
  24. package/es/index.js +196 -39
  25. package/es/style/components/icons/index.less +1 -1
  26. package/es/style/components/table/index.less +4 -0
  27. package/package.json +1 -10
  28. package/vite.config.js +10 -0
  29. package/es/components/upload/src/index.d.ts +0 -2811
  30. package/src/assets/data/icons/actions.ts +0 -427
  31. package/src/assets/data/icons/code.ts +0 -10
  32. package/src/assets/data/icons/commuticate.ts +0 -190
  33. package/src/assets/data/icons/currency.ts +0 -46
  34. package/src/assets/data/icons/devices.ts +0 -128
  35. package/src/assets/data/icons/edit.ts +0 -165
  36. package/src/assets/data/icons/file.ts +0 -104
  37. package/src/assets/data/icons/math.ts +0 -53
  38. package/src/assets/data/icons/message.ts +0 -75
  39. package/src/assets/data/icons/navigate.ts +0 -181
  40. package/src/assets/data/icons/other.ts +0 -333
  41. package/src/assets/data/icons.ts +0 -58
  42. package/src/assets/imgs/header/avatar.png +0 -0
  43. package/src/assets/imgs/logo/logo.png +0 -0
  44. package/src/assets/locales/en_US.json +0 -3
  45. package/src/assets/locales/zh_CN.json +0 -3
  46. package/src/assets/style/index.less +0 -10
  47. package/src/assets/style/reset.less +0 -17
  48. package/src/components/container/index.less +0 -85
  49. package/src/components/container/index.ts +0 -8
  50. package/src/components/container/src/bar.ts +0 -107
  51. package/src/components/container/src/lazy-container.vue +0 -9
  52. package/src/components/container/src/scroll-bar.vue +0 -117
  53. package/src/components/container/src/scroll-container.vue +0 -61
  54. package/src/components/curd/index.ts +0 -5
  55. package/src/components/curd/src/components/dialog.vue +0 -73
  56. package/src/components/curd/src/components/props.ts +0 -32
  57. package/src/components/curd/src/hooks/useCurd.tsx +0 -87
  58. package/src/components/curd/src/types/curd.type.ts +0 -32
  59. package/src/components/excel/index.ts +0 -6
  60. package/src/components/excel/src/export2Excel.ts +0 -44
  61. package/src/components/forms/index.less +0 -107
  62. package/src/components/forms/index.ts +0 -11
  63. package/src/components/forms/src/componentMap.ts +0 -46
  64. package/src/components/forms/src/components/formButton.vue +0 -150
  65. package/src/components/forms/src/components/formIcon.vue +0 -51
  66. package/src/components/forms/src/components/formInputUseDialog.vue +0 -43
  67. package/src/components/forms/src/components/formItem.vue +0 -420
  68. package/src/components/forms/src/components/radioButton.vue +0 -58
  69. package/src/components/forms/src/const/form.const.ts +0 -7
  70. package/src/components/forms/src/hooks/helper.ts +0 -70
  71. package/src/components/forms/src/hooks/useForm.ts +0 -130
  72. package/src/components/forms/src/hooks/useFormActions.ts +0 -63
  73. package/src/components/forms/src/hooks/useFormEvents.ts +0 -248
  74. package/src/components/forms/src/hooks/useFormValue.ts +0 -49
  75. package/src/components/forms/src/hooks/useFormValues.ts +0 -131
  76. package/src/components/forms/src/hooks/useLabelWidth.ts +0 -57
  77. package/src/components/forms/src/index.vue +0 -310
  78. package/src/components/forms/src/prop.ts +0 -80
  79. package/src/components/forms/src/types/form.type.ts +0 -275
  80. package/src/components/icons/index.less +0 -101
  81. package/src/components/icons/index.ts +0 -7
  82. package/src/components/icons/src/pick-icon.vue +0 -119
  83. package/src/components/icons/src/svg-icon.vue +0 -117
  84. package/src/components/iframe/index.less +0 -3
  85. package/src/components/iframe/index.ts +0 -5
  86. package/src/components/iframe/src/index.less +0 -3
  87. package/src/components/iframe/src/index.vue +0 -38
  88. package/src/components/index.ts +0 -53
  89. package/src/components/modal/index.less +0 -60
  90. package/src/components/modal/index.ts +0 -8
  91. package/src/components/modal/src/components/close-icon.vue +0 -46
  92. package/src/components/modal/src/components/modal-wrap.vue +0 -128
  93. package/src/components/modal/src/components/modal.tsx +0 -30
  94. package/src/components/modal/src/components/modalFooter.vue +0 -46
  95. package/src/components/modal/src/hooks/useDrag.ts +0 -107
  96. package/src/components/modal/src/hooks/useFullScreen.ts +0 -29
  97. package/src/components/modal/src/hooks/useModal.ts +0 -200
  98. package/src/components/modal/src/index.vue +0 -184
  99. package/src/components/modal/src/props.ts +0 -44
  100. package/src/components/modal/src/types/modal.type.ts +0 -30
  101. package/src/components/router/base-router.vue +0 -11
  102. package/src/components/router/index.ts +0 -3
  103. package/src/components/source/index.ts +0 -1
  104. package/src/components/source/src/hooks/useFetch.ts +0 -42
  105. package/src/components/source/src/hooks/usePage.ts +0 -3
  106. package/src/components/source/src/hooks/useSource.ts +0 -214
  107. package/src/components/source/src/index.ts +0 -5
  108. package/src/components/source/src/types/source.type.ts +0 -58
  109. package/src/components/source/src/types/table.type.ts +0 -8
  110. package/src/components/table/index.less +0 -179
  111. package/src/components/table/index.ts +0 -7
  112. package/src/components/table/src/components/TableActions.vue +0 -108
  113. package/src/components/table/src/components/TableHeader.vue +0 -78
  114. package/src/components/table/src/components/TableRender.vue +0 -76
  115. package/src/components/table/src/components/editable/CellComponent.ts +0 -57
  116. package/src/components/table/src/components/editable/EditTableCell.vue +0 -181
  117. package/src/components/table/src/components/editable/componentMap.ts +0 -18
  118. package/src/components/table/src/components/editable/index.ts +0 -58
  119. package/src/components/table/src/components/setting/Column.vue +0 -354
  120. package/src/components/table/src/components/setting/Download.vue +0 -55
  121. package/src/components/table/src/components/setting/Fullscreen.vue +0 -43
  122. package/src/components/table/src/components/setting/Size.vue +0 -42
  123. package/src/components/table/src/components/setting/index.vue +0 -64
  124. package/src/components/table/src/const.ts +0 -13
  125. package/src/components/table/src/hooks/useColumns.ts +0 -326
  126. package/src/components/table/src/hooks/useCustomRow.ts +0 -86
  127. package/src/components/table/src/hooks/useDataSource.ts +0 -97
  128. package/src/components/table/src/hooks/useHeaderCode.ts +0 -89
  129. package/src/components/table/src/hooks/useLoading.ts +0 -29
  130. package/src/components/table/src/hooks/usePagination.ts +0 -76
  131. package/src/components/table/src/hooks/useRowSelection.ts +0 -145
  132. package/src/components/table/src/hooks/useRows.ts +0 -30
  133. package/src/components/table/src/hooks/useTable.ts +0 -90
  134. package/src/components/table/src/hooks/useTableHeader.ts +0 -48
  135. package/src/components/table/src/hooks/useTableInstance.ts +0 -29
  136. package/src/components/table/src/hooks/useTableScroll.ts +0 -229
  137. package/src/components/table/src/index.vue +0 -212
  138. package/src/components/table/src/props.ts +0 -160
  139. package/src/components/table/src/types/table.type.ts +0 -160
  140. package/src/components/table/src/types/tableHeader.type.ts +0 -27
  141. package/src/components/tree/index.less +0 -41
  142. package/src/components/tree/index.ts +0 -5
  143. package/src/components/tree/src/components/TreeHeader.vue +0 -97
  144. package/src/components/tree/src/hooks/useTree.ts +0 -239
  145. package/src/components/tree/src/index.vue +0 -392
  146. package/src/components/tree/src/props.ts +0 -133
  147. package/src/components/tree/src/type/tree.ts +0 -105
  148. package/src/components/tree/src/utils/tree.ts +0 -73
  149. package/src/components/type.ts +0 -0
  150. package/src/components/upload/index.less +0 -35
  151. package/src/components/upload/index.ts +0 -5
  152. package/src/components/upload/src/helper.ts +0 -60
  153. package/src/components/upload/src/props.ts +0 -51
  154. package/src/components/upload/src/upload.vue +0 -191
  155. package/src/directives/icon.ts +0 -36
  156. package/src/directives/index.ts +0 -26
  157. package/src/directives/permission.ts +0 -20
  158. package/src/global.d.ts +0 -8
  159. package/src/index.ts +0 -4
  160. package/src/theme/content/index.vue +0 -37
  161. package/src/theme/feature/back-top.vue +0 -11
  162. package/src/theme/feature/index.vue +0 -7
  163. package/src/theme/footer/index.less +0 -16
  164. package/src/theme/footer/index.vue +0 -24
  165. package/src/theme/header/components/bread-crumb.vue +0 -26
  166. package/src/theme/header/components/fullscreen.vue +0 -12
  167. package/src/theme/header/components/handler.ts +0 -81
  168. package/src/theme/header/components/index.ts +0 -21
  169. package/src/theme/header/components/lang-picker.vue +0 -36
  170. package/src/theme/header/components/logo.vue +0 -35
  171. package/src/theme/header/components/menu-search.vue +0 -62
  172. package/src/theme/header/components/notify.vue +0 -22
  173. package/src/theme/header/components/setting-theme.vue +0 -123
  174. package/src/theme/header/components/theme-drawer/enum.ts +0 -12
  175. package/src/theme/header/components/theme-drawer/feature.vue +0 -75
  176. package/src/theme/header/components/theme-drawer/index.ts +0 -7
  177. package/src/theme/header/components/theme-drawer/menu-type.vue +0 -40
  178. package/src/theme/header/components/theme-drawer/select-item.vue +0 -46
  179. package/src/theme/header/components/theme-drawer/switch-item.vue +0 -39
  180. package/src/theme/header/components/theme-drawer/theme-color.vue +0 -26
  181. package/src/theme/header/components/trigger.vue +0 -14
  182. package/src/theme/header/components/user-info.vue +0 -60
  183. package/src/theme/header/const/index.ts +0 -40
  184. package/src/theme/header/helper/menu-tree.ts +0 -64
  185. package/src/theme/header/index.less +0 -442
  186. package/src/theme/header/index.ts +0 -0
  187. package/src/theme/header/index.vue +0 -96
  188. package/src/theme/header/multiple-header.vue +0 -67
  189. package/src/theme/header/set-theme.less +0 -68
  190. package/src/theme/index.ts +0 -3
  191. package/src/theme/sider/components/basic-menu/basic-menu-item.vue +0 -14
  192. package/src/theme/sider/components/basic-menu/basic-menu.vue +0 -122
  193. package/src/theme/sider/components/basic-menu/basic-sub-menu-item.vue +0 -46
  194. package/src/theme/sider/components/basic-menu/menu-item-content.vue +0 -13
  195. package/src/theme/sider/components/drag-bar.vue +0 -26
  196. package/src/theme/sider/components/layout-menu.vue +0 -132
  197. package/src/theme/sider/components/props.ts +0 -97
  198. package/src/theme/sider/components/sider-trigger.vue +0 -24
  199. package/src/theme/sider/helper/sider.ts +0 -52
  200. package/src/theme/sider/helper/split-menu.ts +0 -146
  201. package/src/theme/sider/hooks/useDragLine.ts +0 -86
  202. package/src/theme/sider/hooks/useOpenKeys.ts +0 -57
  203. package/src/theme/sider/index.less +0 -203
  204. package/src/theme/sider/index.vue +0 -88
  205. package/src/theme/tabs/components/TabContent.vue +0 -36
  206. package/src/theme/tabs/components/TabRedo.vue +0 -18
  207. package/src/theme/tabs/hooks/useMultifyTabs.ts +0 -96
  208. package/src/theme/tabs/hooks/useTabDropdown.ts +0 -89
  209. package/src/theme/tabs/index.less +0 -165
  210. package/src/theme/tabs/index.vue +0 -98
  211. package/src/theme/tabs/types/tabs.type.ts +0 -8
  212. package/src/theme/theme.less +0 -67
  213. package/src/theme/theme.vue +0 -90
  214. package/src/theme/transition.less +0 -99
@@ -1,133 +0,0 @@
1
- import { Recordable } from "@dt-frames/core";
2
- import { TreeDataItem } from "ant-design-vue/lib/tree";
3
- import { PropType } from "vue";
4
- import { CheckKeys, ContextMenuItem, FieldNames, TreeActionItem, TreeItem } from "./type/tree"
5
-
6
- export const BasicProps = {
7
- loading: {
8
- type: Boolean,
9
- default: false,
10
- },
11
- // 粘性选择
12
- checkStrictly: Boolean,
13
- // 展开的key值
14
- expandedKeys: {
15
- type: Array as PropType<KeyType[]>,
16
- default: () => []
17
- },
18
- // 设置选中的key
19
- selectedKeys: {
20
- type: Array as PropType<KeyType[]>,
21
- default: () => []
22
- },
23
- // 选中的节点
24
- checkedKeys: {
25
- type: Array as PropType<CheckKeys>,
26
- default: () => []
27
- },
28
-
29
- // 定义树节点的lable title children 名称
30
- fieldNames: {
31
- type: Object as PropType<FieldNames>,
32
- },
33
-
34
- beforeRightClick: {
35
- type: Function as PropType<(...arg: any) => ContextMenuItem[]>,
36
- default: undefined,
37
- },
38
-
39
- rightMenuList: {
40
- type: Array as PropType<ContextMenuItem[]>,
41
- },
42
-
43
- //
44
- renderIcon: {
45
- type: Function as PropType<(params: Recordable) => string>,
46
- },
47
-
48
- // 高亮搜索值,仅高亮具体匹配值(通过title)值为true时使用默认色值,值为#xxx时使用此值替代且高亮开启
49
- highlight: {
50
- type: [Boolean, String] as PropType<Boolean | String>,
51
- default: false,
52
- },
53
-
54
- actionList: {
55
- type: Array as PropType<TreeActionItem[]>,
56
- default: () => [],
57
- },
58
-
59
- clickRowToExpand: {
60
- type: Boolean,
61
- default: false,
62
- },
63
-
64
- searchValue: {
65
- type: String,
66
- default: ''
67
- },
68
-
69
- filterFn: {
70
- type: Function as PropType< (searchValue: any, node: TreeItem, fieldNames: FieldNames) => boolean >,
71
- default: undefined,
72
- },
73
-
74
- checkable: Boolean,
75
-
76
- // 搜索完成时自动展开结果
77
- expandOnSearch: Boolean,
78
-
79
- // 搜索完成自动选中所有结果,当且仅当 checkable===true 时生效
80
- checkOnSearch: Boolean,
81
-
82
- // 搜索完成自动select所有结果
83
- selectedOnSearch: Boolean,
84
-
85
- // 树数据
86
- treeData: {
87
- type: Array as PropType<TreeDataItem[]>
88
- },
89
-
90
- value: {
91
- type: [Object, Array] as PropType<KeyType[] | CheckKeys>
92
- },
93
-
94
- title: {
95
- type: String,
96
- default: '',
97
- },
98
-
99
- toolbar: Boolean,
100
- search: Boolean,
101
-
102
- }
103
-
104
- export const searchProps = {
105
- title: {
106
- type: String,
107
- default: '',
108
- },
109
- toolbar: {
110
- type: Boolean,
111
- default: false,
112
- },
113
- checkable: {
114
- type: Boolean,
115
- default: false,
116
- },
117
- search: {
118
- type: Boolean,
119
- default: false,
120
- },
121
- searchText: {
122
- type: String,
123
- default: '',
124
- },
125
- checkAll: {
126
- type: Function,
127
- default: undefined,
128
- },
129
- expandAll: {
130
- type: Function,
131
- default: undefined,
132
- },
133
- }
@@ -1,105 +0,0 @@
1
- import { Recordable } from "@dt-frames/core";
2
- import { Fn } from "@vueuse/core"
3
- import { TreeDataItem } from "ant-design-vue/lib/tree"
4
-
5
-
6
- export enum ToolbarEnum {
7
- SELECT_ALL,
8
- UN_SELECT_ALL,
9
- EXPAND_ALL,
10
- UN_EXPAND_ALL,
11
- CHECK_STRICTLY,
12
- CHECK_UN_STRICTLY,
13
- }
14
-
15
- export type KeyType = string | number
16
-
17
- export type CheckKeys =
18
- | KeyType[]
19
- | {
20
- checked: string[] | number[];
21
- halfChecked: string[] | number[]
22
- }
23
-
24
- export interface TreeState {
25
- expandedKeys: KeyType[]
26
- selectedKeys: KeyType[]
27
- checkedKeys: CheckKeys
28
- checkStrictly: boolean
29
- }
30
-
31
- export interface FieldNames {
32
- children?: string
33
- title?: string
34
- key?: string
35
- }
36
-
37
- export interface TreeItem extends TreeDataItem {
38
- icon?: any
39
- }
40
-
41
- export interface CreateContextOptions {
42
- event: MouseEvent
43
- icon?: string
44
- styles?: any
45
- items?: ContextMenuItem[]
46
- }
47
-
48
- export interface InsertNodeParams {
49
- parentKey: string | null
50
- node: TreeDataItem
51
- list?: TreeDataItem[]
52
- push?: 'push' | 'unshift'
53
- }
54
-
55
- export interface ContextMenuItem {
56
- label: string
57
- icon?: string
58
- hidden?: boolean
59
- disabled?: boolean
60
- handler?: Fn
61
- divider?: boolean
62
- children?: ContextMenuItem[]
63
- }
64
-
65
- export interface TreeActionItem {
66
- render: (record: Recordable) => any
67
- show?: boolean | ((record: Recordable) => boolean)
68
- }
69
-
70
- export interface InsertNodeParams {
71
- parentKey: string | null
72
- node: TreeDataItem
73
- list?: TreeDataItem[]
74
- push?: 'push' | 'unshift'
75
- }
76
-
77
- export interface TreeHelperConfig {
78
- id: string;
79
- children: string;
80
- pid: string;
81
- }
82
-
83
- export interface TreeActionType {
84
- checkAll: (checkAll: boolean) => void
85
- expandAll: (expandAll: boolean) => void
86
- setExpandedKeys: (keys: KeyType[]) => void
87
- getExpandedKeys: () => KeyType[]
88
- setSelectedKeys: (keys: KeyType[]) => void
89
- getSelectedKeys: () => KeyType[]
90
- setCheckedKeys: (keys: CheckKeys) => void
91
- getCheckedKeys: () => CheckKeys
92
- filterByLevel: (level: number) => void
93
- insertNodeByKey: (opt: InsertNodeParams) => void
94
- insertNodesByKey: (opt: InsertNodeParams) => void
95
- deleteNodeByKey: (key: string) => void
96
- updateNodeByKey: (key: string, node: Omit<TreeDataItem, 'key'>) => void
97
- setSearchValue: (value: string) => void
98
- getSearchValue: () => string
99
- onStrictlyChange: ( strictly: boolean ) => void
100
- getSelectedNode: (
101
- key: KeyType,
102
- treeList?: TreeItem[],
103
- selectNode?: TreeItem | null,
104
- ) => TreeItem | null
105
- }
@@ -1,73 +0,0 @@
1
- import { TreeHelperConfig } from "../type/tree"
2
-
3
- /**
4
- * 递归遍历树结构
5
- * @param treeDatas 树数据
6
- * @param callBack 回调
7
- * @param parentNode 父节点
8
- */
9
- export function eachTree(treeDatas: any[], callBack: Function, parentNode = {}) {
10
- treeDatas.forEach( el => {
11
- const newNode = callBack(el, parentNode) || el
12
-
13
- if (el.children) {
14
- eachTree( el.children, callBack, newNode )
15
- }
16
- } )
17
- }
18
-
19
-
20
- // 返回true就终止遍历,避免大量节点场景下无意义循环,引起浏览器卡顿
21
- export function forEach<T = any>(
22
- tree: T[],
23
- func: (n: T) => any,
24
- config: Partial<TreeHelperConfig> = {},
25
- ): void {
26
- const list: any[] = [...tree]
27
- const { children = 'children' } = config
28
-
29
- for (let i = 0; i < list.length; i++) {
30
- if (func(list[i])) {
31
- return
32
- }
33
- children && list[i][children] && list.splice(i + 1, 0, ...list[i][children])
34
- }
35
- }
36
-
37
- export function filter<T = any>(
38
- tree: T[],
39
- func: (n: T) => boolean,
40
- config: Partial<TreeHelperConfig> = {},
41
- ): T[] {
42
- // 获取配置
43
- const children = config.children as string || 'children';
44
-
45
- function listFilter(list: T[]) {
46
- return list
47
- .map((node: any) => ({ ...node }))
48
- .filter((node) => {
49
-
50
- // 递归调用 对含有children项 进行再次调用自身函数 listFilter
51
- node[children] = node[children] && listFilter(node[children]);
52
-
53
- // 执行传入的回调 func 进行过滤
54
- return func(node) || (node[children] && node[children].length);
55
- });
56
- }
57
-
58
- return listFilter(tree);
59
- }
60
-
61
- export function treeToList<T = any>(tree: any, config: Partial<TreeHelperConfig> = {}): T {
62
- const { children = 'children' } = config
63
-
64
- const result: any = [...tree]
65
-
66
- for (let i = 0; i < result.length; i++) {
67
- if (!result[i][children!]) continue
68
- result.splice(i + 1, 0, ...result[i][children!])
69
- }
70
-
71
- return result
72
- }
73
-
File without changes
@@ -1,35 +0,0 @@
1
- .dt-file {
2
- td.orange{
3
- color: orange;
4
- }
5
- }
6
-
7
- .file-header{
8
- display: flex;
9
- flex-direction: row;
10
- justify-content: space-between;
11
- &>div{
12
- display: flex;
13
- flex-direction: row;
14
- button{
15
- margin-right: 10px;
16
- }
17
- }
18
- }
19
-
20
- .file-type-tips{
21
- line-height: 24px;
22
- padding: 5px 10px;
23
- font-size: 12px;
24
- display: flex;
25
- margin: 10px 0;
26
- border: 1px dashed @primary-color;
27
- cursor: inherit;
28
- span i{
29
- color: @primary-color;
30
- margin-right: 7px;
31
- }
32
- i{
33
- color: #666;
34
- }
35
- }
@@ -1,5 +0,0 @@
1
- import DtUpload from './src/upload.vue'
2
-
3
- export {
4
- DtUpload
5
- }
@@ -1,60 +0,0 @@
1
- import { computed, Ref, unref } from "vue"
2
-
3
- export function useHelpers(
4
- acceptRef: Ref<string[]>,
5
- helpTextRef: Ref<string>,
6
- maxNumberRef: Ref<number>,
7
- maxSizeRef: Ref<number>
8
- ) {
9
- // 文件类型
10
- const getAccept = computed(() => {
11
- const accept = unref(acceptRef);
12
- if (accept && accept.length > 0) {
13
- return accept;
14
- }
15
- return [];
16
- })
17
-
18
- const getStringAccept = computed(() => {
19
- return unref(getAccept)
20
- .map((item) => {
21
- if (item.indexOf('/') > 0 || item.startsWith('.')) {
22
- return item
23
- }
24
- return `.${item}`
25
- })
26
- .join(',')
27
- })
28
-
29
- const getHelpText = computed(() => {
30
- const helpText = unref(helpTextRef)
31
- if (helpText) {
32
- return helpText
33
- }
34
-
35
- const helpTexts: string[] = []
36
-
37
- const accept = unref(acceptRef)
38
- if (accept.length > 0) {
39
- helpTexts.push(`支持${ accept.join(',') }格式`)
40
- }
41
-
42
- const maxSize = unref(maxSizeRef)
43
- if (maxSize) {
44
- helpTexts.push(`不超过${ maxSize }M`)
45
- }
46
-
47
- const maxNumber = unref(maxNumberRef)
48
- if (maxNumber && maxNumber !== Infinity) {
49
- helpTexts.push(`最多可选择${ maxNumber }个文件`);
50
- }
51
-
52
- return helpTexts.join(',') || '请上传pptx、doc、jpg、jpeg、png、bmp、gif、xls、xlsx、txt、rar、zip、7z、tar、gz格式文件'
53
-
54
- })
55
-
56
- return {
57
- getStringAccept,
58
- getHelpText
59
- }
60
- }
@@ -1,51 +0,0 @@
1
- import { Fn } from "@vueuse/core"
2
- import { PropType } from "vue"
3
-
4
- export type FileType = {
5
- fileName: String
6
- [key: string]: any
7
- }
8
-
9
- export const basicUploadProps = {
10
- // 是否显示模板下载
11
- showTemplateDownload: {
12
- type: Boolean,
13
- default: false,
14
- },
15
- // 模板下载
16
- templateDownload: {
17
- type: Function as PropType<Fn>,
18
- default: () => {}
19
- },
20
- helpText: {
21
- type: String as PropType<string>,
22
- default: '',
23
- },
24
- // 是否支持批量上传
25
- multiple: {
26
- type: Boolean as PropType<boolean>,
27
- default: true,
28
- },
29
- // 文件支持的类型
30
- accept: {
31
- type: Array as PropType<string[]>,
32
- default: () => [],
33
- },
34
- // 文件最大多少MB
35
- maxSize: {
36
- type: Number as PropType<number>,
37
- },
38
- // 最大数量的文件,Infinity不限制
39
- maxNumber: {
40
- type: Number as PropType<number>,
41
- default: Infinity,
42
- },
43
- defaultFiles: {
44
- type: Array as PropType<FileType[]>,
45
- default: []
46
- },
47
- showView: {
48
- type: Boolean,
49
- default: false
50
- }
51
- }
@@ -1,191 +0,0 @@
1
- <template>
2
- <div class="dt-file">
3
- <div class="file-header">
4
- <div>
5
- <Upload
6
- :accept="getStringAccept"
7
- :multiple="multiple"
8
- :before-upload="beforeUpload"
9
- :show-upload-list="false"
10
- >
11
- <Button type="primary">
12
- <span v-icon="'ic:baseline-file-upload'"></span>
13
- 文件上传
14
- </Button>
15
- </Upload>
16
- <Button type="primary" v-if="showTemplateDownload" @click="templateDownload">
17
- <span v-icon="'ic:baseline-file-download'"></span>
18
- 模板下载
19
- </Button>
20
- </div>
21
- <slot></slot>
22
- </div>
23
-
24
- <div class="file-type-tips ant-alert-info">
25
- <span v-icon="'ant-design:info-circle-outlined'"></span>
26
- <i>{{ getHelpText }}</i>
27
- </div>
28
-
29
- <DtTable @register="registerTable"></DtTable>
30
-
31
- <Image
32
- :width="200"
33
- :style="{ display: 'none' }"
34
- :preview="{
35
- visible: imgVisable,
36
- onVisibleChange: setImgVisible,
37
- }"
38
- :src="imgSrcRef"
39
- ></Image>
40
-
41
- </div>
42
-
43
- </template>
44
-
45
- <script lang="ts" setup>
46
- import { h, ref, toRefs, watchEffect, watch, computed } from 'vue'
47
- import { Button, Upload, Image } from 'ant-design-vue'
48
- import { DtTable, useTable } from '../../table'
49
- import { basicUploadProps } from './props'
50
- import { useHelpers } from './helper'
51
- import { useMessage } from '@dt-frames/core'
52
- import * as SparkMD5 from 'spark-md5'
53
-
54
-
55
- const { message } = useMessage()
56
-
57
- const filesRef = ref([])
58
- const historyFilesRef = ref([])
59
- const allFilesRef = computed(() => {
60
- return [...historyFilesRef.value, ...filesRef.value ]
61
- })
62
-
63
- // 控制图片预览显示隐藏
64
- const imgVisable = ref( false )
65
- const imgSrcRef = ref()
66
- const setImgVisible = (value) => imgVisable.value = value
67
-
68
- const props = defineProps( basicUploadProps )
69
-
70
- const { accept, helpText, maxNumber, maxSize } = toRefs(props)
71
- const {
72
- getStringAccept,
73
- getHelpText
74
- } = useHelpers( accept, helpText, maxNumber, maxSize )
75
-
76
- const isImage = (fileType: string) => ['pdf', 'jpg', 'jpeg', 'png', 'bmp', 'gif'].includes( fileType )
77
-
78
- const [registerTable] = useTable({
79
- tableSetting: false,
80
- pagination: false,
81
- dataSource: allFilesRef,
82
- columns: [
83
- { title: '文件名称', dataIndex: 'fileName' },
84
- { title: '上传状态', dataIndex: 'fileStatue', className: 'orange' },
85
- ],
86
- operations: {
87
- expand: true,
88
- btns: [
89
- { title: '预览', icon: 'ic:baseline-remove-red-eye',
90
- ifShow(row) {
91
- if( !props.showView ) return false
92
- return isImage( row.fileName.split('.').pop() )
93
- },
94
- action: ({ row }) => {
95
- if( isImage( row.fileName.split('.').pop() ) ) {
96
- setImgVisible(true)
97
- }
98
- }
99
- },
100
- { title: '删除', icon: 'mdi:delete-outline', action: ({row}) => {
101
- if( !row.status ) historyFilesRef.value = historyFilesRef.value.filter( it => it.fileId !== row.fileId )
102
- else {
103
- filesRef.value = filesRef.value.filter( it => it.fileId !== row.fileId )
104
- }
105
- } }
106
- ]
107
- }
108
- })
109
-
110
- watch(
111
- () => props.defaultFiles,
112
- v => {
113
- if( v ) {
114
- historyFilesRef.value = props.defaultFiles.map((file, index) => {
115
- return {
116
- ...file,
117
- fileId: file.id || index,
118
- fileName: file.fileName,
119
- status: 0,
120
- fileStatue: '历史上传'
121
- }
122
- })
123
- }
124
- },
125
- {
126
- immediate: true
127
- }
128
- )
129
-
130
-
131
- function beforeUpload(file: File) {
132
- const { maxSize } = props
133
-
134
- if( maxSize && file.size / 1024 / 1024 >= maxSize ) {
135
- message.error(`只能上传不超过${ maxSize }MB的文件!`)
136
- return false
137
- }
138
-
139
- addFile( file )
140
-
141
- return false
142
- }
143
-
144
- // 添加文件
145
- function addFile(file: File) {
146
- let blobSlice = File.prototype.slice || (File.prototype as any).mozSlice || (File.prototype as any).webkitSlice
147
- let chunkSize = 2097152,
148
- chunks = Math.ceil(file.size / chunkSize),
149
- currentChunk = 0,
150
- spark = new SparkMD5.ArrayBuffer(),
151
- fileReader = new FileReader()
152
-
153
- fileReader.onload = function (e) {
154
- spark.append(e.target['result']);
155
- currentChunk++;
156
-
157
- if (currentChunk < chunks) {
158
- loadNext();
159
- } else {
160
- let fileObj = {
161
- fileName: file.name,
162
- fileId: spark.end(),
163
- file,
164
- status: 1,
165
- fileStatue: '待上传'
166
- }
167
-
168
- if( props.multiple ) {
169
- filesRef.value.push(fileObj)
170
- } else {
171
- historyFilesRef.value = []
172
- filesRef.value = [fileObj]
173
- }
174
- }
175
- }
176
-
177
- function loadNext() {
178
- var start = currentChunk * chunkSize,
179
- end = ((start + chunkSize) >= file.size) ? file.size : start + chunkSize
180
-
181
- fileReader.readAsArrayBuffer(blobSlice.call(file, start, end))
182
- }
183
-
184
- loadNext()
185
- }
186
-
187
-
188
- defineExpose({
189
- allFilesRef
190
- })
191
- </script>
@@ -1,36 +0,0 @@
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
- };