@wzyjs/uis 0.3.29 → 0.3.31

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 (222) hide show
  1. package/dist/advanced/Com2Canvas/index.d.ts +8 -0
  2. package/dist/advanced/Com2Canvas/index.js +39 -0
  3. package/dist/advanced/Crud/components/CardList/index.d.ts +2 -0
  4. package/dist/advanced/Crud/components/CardList/index.js +90 -0
  5. package/dist/advanced/Crud/components/CreateUpdate/index.d.ts +2 -0
  6. package/dist/advanced/Crud/components/CreateUpdate/index.js +78 -0
  7. package/dist/advanced/Crud/components/ListTabs/index.d.ts +8 -0
  8. package/dist/advanced/Crud/components/ListTabs/index.js +7 -0
  9. package/dist/advanced/Crud/components/Provider/index.d.ts +7 -0
  10. package/dist/advanced/Crud/components/Provider/index.js +42 -0
  11. package/dist/advanced/Crud/components/QuickFilters/index.d.ts +8 -0
  12. package/dist/advanced/Crud/components/QuickFilters/index.js +20 -0
  13. package/dist/advanced/Crud/components/Remove/index.d.ts +2 -0
  14. package/dist/advanced/Crud/components/Remove/index.js +18 -0
  15. package/dist/advanced/Crud/components/index.d.ts +6 -0
  16. package/dist/advanced/Crud/components/index.js +6 -0
  17. package/dist/advanced/Crud/hooks/index.d.ts +5 -0
  18. package/dist/advanced/Crud/hooks/index.js +5 -0
  19. package/dist/advanced/Crud/hooks/useColumns.d.ts +11 -0
  20. package/dist/advanced/Crud/hooks/useColumns.js +111 -0
  21. package/dist/advanced/Crud/hooks/useList.d.ts +12 -0
  22. package/dist/advanced/Crud/hooks/useList.js +53 -0
  23. package/dist/advanced/Crud/hooks/useListFilters.d.ts +11 -0
  24. package/dist/advanced/Crud/hooks/useListFilters.js +159 -0
  25. package/dist/advanced/Crud/hooks/useOrderable.d.ts +15 -0
  26. package/dist/advanced/Crud/hooks/useOrderable.js +75 -0
  27. package/dist/advanced/Crud/hooks/useRequest.d.ts +13 -0
  28. package/dist/advanced/Crud/hooks/useRequest.js +27 -0
  29. package/dist/advanced/Crud/index.d.ts +3 -0
  30. package/dist/advanced/Crud/index.js +46 -0
  31. package/dist/advanced/Crud/types/index.d.ts +176 -0
  32. package/dist/advanced/Crud/types/index.js +1 -0
  33. package/dist/advanced/Crud/utils/index.d.ts +7 -0
  34. package/dist/advanced/Crud/utils/index.js +80 -0
  35. package/dist/advanced/Crud/utils/query.d.ts +3 -0
  36. package/dist/advanced/Crud/utils/query.js +34 -0
  37. package/dist/advanced/MindMap/context.d.ts +12 -0
  38. package/dist/advanced/MindMap/context.js +12 -0
  39. package/dist/advanced/MindMap/hooks/useAlignmentSnap.d.ts +15 -0
  40. package/dist/advanced/MindMap/hooks/useAlignmentSnap.js +164 -0
  41. package/dist/advanced/MindMap/hooks/useCopyPaste.d.ts +11 -0
  42. package/dist/advanced/MindMap/hooks/useCopyPaste.js +209 -0
  43. package/dist/advanced/MindMap/hooks/useDropToReparent.d.ts +21 -0
  44. package/dist/advanced/MindMap/hooks/useDropToReparent.js +216 -0
  45. package/dist/advanced/MindMap/hooks/useExpandCollapse.d.ts +18 -0
  46. package/dist/advanced/MindMap/hooks/useExpandCollapse.js +108 -0
  47. package/dist/advanced/MindMap/hooks/useMoveDescendants.d.ts +12 -0
  48. package/dist/advanced/MindMap/hooks/useMoveDescendants.js +98 -0
  49. package/dist/advanced/MindMap/hooks/useUndoRedo.d.ts +14 -0
  50. package/dist/advanced/MindMap/hooks/useUndoRedo.js +181 -0
  51. package/dist/advanced/MindMap/index.d.ts +29 -0
  52. package/dist/advanced/MindMap/index.js +52 -0
  53. package/dist/advanced/index.d.ts +5 -0
  54. package/dist/advanced/index.js +5 -0
  55. package/dist/antd/index.d.ts +6 -0
  56. package/dist/antd/index.js +5 -0
  57. package/dist/buttons/ButtonGroup/index.d.ts +8 -0
  58. package/dist/buttons/ButtonGroup/index.js +13 -0
  59. package/dist/buttons/ConfirmButton/index.d.ts +5 -0
  60. package/dist/buttons/ConfirmButton/index.js +9 -0
  61. package/dist/buttons/CopyButton/index.d.ts +6 -0
  62. package/dist/buttons/CopyButton/index.js +26 -0
  63. package/dist/buttons/DrawerButton/index.d.ts +6 -0
  64. package/dist/buttons/DrawerButton/index.js +13 -0
  65. package/dist/buttons/ProgressButton/index.css +63 -0
  66. package/dist/buttons/ProgressButton/index.d.ts +17 -0
  67. package/dist/buttons/ProgressButton/index.js +31 -0
  68. package/dist/buttons/SectorButton/index.d.ts +20 -0
  69. package/dist/buttons/SectorButton/index.js +130 -0
  70. package/dist/buttons/index.d.ts +6 -0
  71. package/dist/buttons/index.js +6 -0
  72. package/dist/display/CodeView/index.d.ts +26 -0
  73. package/dist/display/CodeView/index.js +60 -0
  74. package/dist/display/EnumTag/index.d.ts +12 -0
  75. package/dist/display/EnumTag/index.js +10 -0
  76. package/dist/display/HtmlDataRenderer/index.d.ts +6 -0
  77. package/dist/display/HtmlDataRenderer/index.js +15 -0
  78. package/dist/display/HtmlView/index.d.ts +6 -0
  79. package/dist/display/HtmlView/index.js +6 -0
  80. package/dist/display/IframePro/index.d.ts +8 -0
  81. package/dist/display/IframePro/index.js +24 -0
  82. package/dist/display/JsonSchemaRenderer/index.d.ts +11 -0
  83. package/dist/display/JsonSchemaRenderer/index.js +62 -0
  84. package/dist/display/JsonView/index.d.ts +3 -0
  85. package/dist/display/JsonView/index.js +7 -0
  86. package/dist/display/MarkdownView/index.d.ts +7 -0
  87. package/dist/display/MarkdownView/index.js +80 -0
  88. package/dist/display/MarkdownView/style.d.ts +1 -0
  89. package/{src/components/Markdown/style.ts → dist/display/MarkdownView/style.js} +1 -1
  90. package/dist/display/VideoPro/index.d.ts +9 -0
  91. package/dist/display/VideoPro/index.js +15 -0
  92. package/dist/display/index.d.ts +9 -0
  93. package/dist/display/index.js +9 -0
  94. package/dist/inputs/CheckboxButton/index.css +22 -0
  95. package/dist/inputs/CheckboxButton/index.d.ts +12 -0
  96. package/dist/inputs/CheckboxButton/index.js +9 -0
  97. package/dist/inputs/DateSwitcher/index.css +10 -0
  98. package/dist/inputs/DateSwitcher/index.d.ts +8 -0
  99. package/dist/inputs/DateSwitcher/index.js +29 -0
  100. package/dist/inputs/FetchSelect/index.d.ts +3 -0
  101. package/dist/inputs/FetchSelect/index.js +121 -0
  102. package/dist/inputs/FetchSelect/types.d.ts +33 -0
  103. package/dist/inputs/FetchSelect/types.js +1 -0
  104. package/dist/inputs/FetchSelect/utils.d.ts +21 -0
  105. package/dist/inputs/FetchSelect/utils.js +67 -0
  106. package/dist/inputs/FileUploader/index.d.ts +22 -0
  107. package/dist/inputs/FileUploader/index.js +79 -0
  108. package/dist/inputs/IconSelect/index.d.ts +89 -0
  109. package/dist/inputs/IconSelect/index.js +54 -0
  110. package/dist/inputs/ImageUploader/index.d.ts +12 -0
  111. package/dist/inputs/ImageUploader/index.js +192 -0
  112. package/dist/inputs/RadioButton/index.d.ts +15 -0
  113. package/dist/inputs/RadioButton/index.js +11 -0
  114. package/dist/inputs/RangeInput/index.d.ts +8 -0
  115. package/dist/inputs/RangeInput/index.js +17 -0
  116. package/dist/inputs/TextInput/index.d.ts +6 -0
  117. package/dist/inputs/TextInput/index.js +30 -0
  118. package/dist/inputs/index.d.ts +9 -0
  119. package/dist/inputs/index.js +9 -0
  120. package/dist/layout/DragSort/index.d.ts +16 -0
  121. package/dist/layout/DragSort/index.js +12 -0
  122. package/dist/layout/FoldCard/index.d.ts +9 -0
  123. package/dist/layout/FoldCard/index.js +69 -0
  124. package/dist/layout/PageBase/index.d.ts +6 -0
  125. package/dist/layout/PageBase/index.js +6 -0
  126. package/dist/layout/ResizableGridLayout/index.d.ts +11 -0
  127. package/dist/layout/ResizableGridLayout/index.js +13 -0
  128. package/dist/layout/SideMenu/index.d.ts +27 -0
  129. package/dist/layout/SideMenu/index.js +40 -0
  130. package/dist/layout/TabsPro/index.d.ts +9 -0
  131. package/dist/layout/TabsPro/index.js +87 -0
  132. package/dist/layout/index.d.ts +6 -0
  133. package/dist/layout/index.js +6 -0
  134. package/dist/web.css +363 -0
  135. package/dist/web.d.ts +7 -0
  136. package/dist/web.js +7 -0
  137. package/package.json +34 -12
  138. package/src/antd/form/CheckboxButton/index.module.scss +0 -24
  139. package/src/antd/form/CheckboxButton/index.tsx +0 -31
  140. package/src/antd/form/FileUploader/index.tsx +0 -163
  141. package/src/antd/form/RadioButton/index.tsx +0 -32
  142. package/src/antd/form/Upload/index.tsx +0 -65
  143. package/src/antd/form/UploadImage/index.tsx +0 -338
  144. package/src/antd/form/index.ts +0 -6
  145. package/src/antd/index.ts +0 -46
  146. package/src/antd/pro/FoldCard/index.tsx +0 -131
  147. package/src/antd/pro/RangeInput/index.tsx +0 -46
  148. package/src/antd/pro/Tabs/index.tsx +0 -135
  149. package/src/antd/pro/Typography/components/String.tsx +0 -72
  150. package/src/antd/pro/Typography/index.tsx +0 -9
  151. package/src/antd/pro/buttons/ButtonGroup.tsx +0 -26
  152. package/src/antd/pro/buttons/ConfirmButton.tsx +0 -24
  153. package/src/antd/pro/buttons/CopyButton.tsx +0 -47
  154. package/src/antd/pro/buttons/DrawerButton.tsx +0 -37
  155. package/src/antd/pro/buttons/index.tsx +0 -4
  156. package/src/antd/pro/index.ts +0 -5
  157. package/src/components/BottomBar/index.tsx +0 -28
  158. package/src/components/CodeView/index.tsx +0 -85
  159. package/src/components/Collapse/index.tsx +0 -26
  160. package/src/components/Com2Canvas/index.tsx +0 -60
  161. package/src/components/CompileHtml/index.tsx +0 -26
  162. package/src/components/Crud/components/CardList/index.tsx +0 -174
  163. package/src/components/Crud/components/CreateUpdate/index.tsx +0 -179
  164. package/src/components/Crud/components/Provider/index.tsx +0 -83
  165. package/src/components/Crud/components/Remove/index.tsx +0 -56
  166. package/src/components/Crud/components/index.ts +0 -4
  167. package/src/components/Crud/hooks/index.ts +0 -4
  168. package/src/components/Crud/hooks/useColumns.tsx +0 -169
  169. package/src/components/Crud/hooks/useList.ts +0 -65
  170. package/src/components/Crud/hooks/useOrderable.tsx +0 -107
  171. package/src/components/Crud/hooks/useRequest.ts +0 -41
  172. package/src/components/Crud/index.tsx +0 -91
  173. package/src/components/Crud/types/index.ts +0 -188
  174. package/src/components/Crud/utils/index.ts +0 -87
  175. package/src/components/DateSwitcher/index.module.scss +0 -10
  176. package/src/components/DateSwitcher/index.tsx +0 -75
  177. package/src/components/DownloadLink/index.tsx +0 -36
  178. package/src/components/DragSort/index.tsx +0 -77
  179. package/src/components/DynamicSelect/index.tsx +0 -76
  180. package/src/components/DynamicSelect/types.ts +0 -8
  181. package/src/components/DynamicSelect/utils.ts +0 -47
  182. package/src/components/EnumTag/index.tsx +0 -24
  183. package/src/components/FetchSelect/index.tsx +0 -57
  184. package/src/components/FormPro/index.tsx +0 -28
  185. package/src/components/GroupLayout/index.tsx +0 -45
  186. package/src/components/HtmlPro/index.tsx +0 -18
  187. package/src/components/IframePro/index.tsx +0 -52
  188. package/src/components/JsonRenderer/index.tsx +0 -114
  189. package/src/components/JsonView/index.tsx +0 -21
  190. package/src/components/Markdown/index.tsx +0 -152
  191. package/src/components/MindMap/context.tsx +0 -29
  192. package/src/components/MindMap/hooks/useAlignmentSnap.ts +0 -220
  193. package/src/components/MindMap/hooks/useCopyPaste.ts +0 -272
  194. package/src/components/MindMap/hooks/useDropToReparent.ts +0 -288
  195. package/src/components/MindMap/hooks/useExpandCollapse.ts +0 -146
  196. package/src/components/MindMap/hooks/useMoveDescendants.ts +0 -136
  197. package/src/components/MindMap/hooks/useUndoRedo.ts +0 -232
  198. package/src/components/MindMap/index.tsx +0 -117
  199. package/src/components/MultiImageDisplay/index.tsx +0 -63
  200. package/src/components/ProgressButton/index.module.scss +0 -65
  201. package/src/components/ProgressButton/index.tsx +0 -96
  202. package/src/components/SectorButton/index.tsx +0 -247
  203. package/src/components/TextInput/index.tsx +0 -61
  204. package/src/components/TimelineBar/components/CurrentWeekHighlight/index.tsx +0 -64
  205. package/src/components/TimelineBar/components/Guides/index.tsx +0 -61
  206. package/src/components/TimelineBar/components/Ticks/index.tsx +0 -56
  207. package/src/components/TimelineBar/components/TodayIndicator/index.tsx +0 -54
  208. package/src/components/TimelineBar/components/index.ts +0 -4
  209. package/src/components/TimelineBar/const.ts +0 -3
  210. package/src/components/TimelineBar/hooks/index.ts +0 -5
  211. package/src/components/TimelineBar/hooks/useHighlightRange.ts +0 -21
  212. package/src/components/TimelineBar/hooks/useMonthGuides.ts +0 -40
  213. package/src/components/TimelineBar/hooks/useTickValues.ts +0 -18
  214. package/src/components/TimelineBar/hooks/useVisibleRange.ts +0 -43
  215. package/src/components/TimelineBar/hooks/useWeekGuides.ts +0 -39
  216. package/src/components/TimelineBar/index.tsx +0 -63
  217. package/src/components/TimelineBar/utils.ts +0 -27
  218. package/src/components/Video/index.tsx +0 -37
  219. package/src/components/index.ts +0 -26
  220. package/src/rn.ts +0 -1
  221. package/src/rns/index.ts +0 -0
  222. package/src/web.ts +0 -2
@@ -1,87 +0,0 @@
1
- import type { PaginationState, ProColumnsPro } from '../types'
2
-
3
- export const transformPagination = (pagination: PaginationState) => {
4
- return {
5
- skip: (pagination.current - 1) * pagination.pageSize,
6
- take: pagination.pageSize,
7
- }
8
- }
9
-
10
- export const transformOrder = (sort: Record<string, 'ascend' | 'descend'>) => {
11
- const orderByFields: Array<Record<string, 'asc' | 'desc'>> = []
12
-
13
- Object.keys(sort).forEach((key) => {
14
- if (sort[key]) {
15
- orderByFields.push({
16
- [key]: sort[key] === 'ascend' ? 'asc' : 'desc',
17
- })
18
- }
19
- })
20
-
21
- // 始终返回数组格式以支持多重排序
22
- return orderByFields.length > 0 ? orderByFields : undefined
23
- }
24
-
25
- export const transformWhere = (filter: Record<string, (string | number)[] | null>, columns: ProColumnsPro[]) => {
26
- const where: Record<string, any> = {}
27
-
28
- Object.keys(filter).forEach((key) => {
29
- const value = filter[key]
30
- if (value !== null && value !== undefined) {
31
- const column = columns.find(col => col.dataIndex === key)
32
-
33
- // 根据字段类型转换过滤条件
34
- if (column) {
35
- switch (column.valueType) {
36
- case 'text':
37
- case 'textarea':
38
- // 文本类型使用 contains 搜索
39
- if (typeof value === 'string') {
40
- where[key] = { contains: value }
41
- }
42
- break
43
- case 'select':
44
- case 'option':
45
- if ((column?.fieldProps as any)?.multiple) {
46
- where[key] = { in: value }
47
- } else {
48
- where[key] = { equals: value }
49
- }
50
- break
51
- case 'dateRange':
52
- case 'dateTimeRange':
53
- // 日期范围搜索
54
- if (value.length >= 2) {
55
- where[key] = {
56
- gte: value[0],
57
- lte: value[1],
58
- }
59
- }
60
- break
61
- case 'digit':
62
- case 'money':
63
- // 数字类型
64
- if (typeof value === 'number') {
65
- where[key] = { equals: value }
66
- }
67
- break
68
- case 'switch':
69
- // 布尔类型
70
- if (typeof value === 'boolean') {
71
- where[key] = { equals: value }
72
- }
73
- break
74
- case 'tags':
75
- where[key] = { equals: value }
76
- break
77
- default:
78
- where[key] = { equals: value }
79
- }
80
- } else {
81
- where[key] = { equals: value }
82
- }
83
- }
84
- })
85
-
86
- return Object.keys(where).length > 0 ? where : undefined
87
- }
@@ -1,10 +0,0 @@
1
- .picker {
2
- display: flex;
3
- align-items: center;
4
- gap: 0.5rem;
5
-
6
- :global(.ant-picker-input input) {
7
- text-align: center !important;
8
- cursor: pointer;
9
- }
10
- }
@@ -1,75 +0,0 @@
1
- 'use client'
2
-
3
- import React, { useState } from 'react'
4
-
5
- import { DatePicker, Button } from 'antd'
6
- import { LeftOutlined, RightOutlined } from '@ant-design/icons'
7
-
8
- import { dayjs, type Dayjs } from '@wzyjs/utils/web'
9
-
10
- import styles from './index.module.scss'
11
-
12
- interface DateSwitcherProps {
13
- value?: Dayjs
14
- onChange?: (date: Dayjs) => void
15
- }
16
-
17
- export const DateSwitcher = (props: DateSwitcherProps) => {
18
- const { value = dayjs(), onChange } = props
19
-
20
- const [selectedDate, setSelectedDate] = useState(value)
21
-
22
- const handleDateChange = (date: Dayjs | null) => {
23
- if (date) {
24
- setSelectedDate(date)
25
- onChange?.(date)
26
- }
27
- }
28
-
29
- const handlePrevDay = () => {
30
- const newDate = selectedDate.subtract(1, 'day')
31
- handleDateChange(newDate)
32
- }
33
-
34
- const handleNextDay = () => {
35
- const newDate = selectedDate.add(1, 'day')
36
- handleDateChange(newDate)
37
- }
38
-
39
- const isToday = selectedDate.isSame(dayjs(), 'day')
40
-
41
- return (
42
- <div className={styles.picker}>
43
- <Button
44
- type='text'
45
- icon={<LeftOutlined />}
46
- onClick={handlePrevDay}
47
- className='flex items-center justify-center'
48
- />
49
- <DatePicker
50
- value={selectedDate}
51
- onChange={handleDateChange}
52
- allowClear={false}
53
- suffixIcon={null}
54
- className='w-40 text-center cursor-pointer'
55
- style={{ border: 'none' }}
56
- components={{
57
- input: props => (
58
- <div {...props} className={isToday ? 'text-green-600' : ''}>
59
- <span>{selectedDate.format('YYYY-MM-DD')}</span>
60
- <span style={{ marginLeft: 5 }}>
61
- (周{['日', '一', '二', '三', '四', '五', '六'][dayjs(selectedDate).day()]})
62
- </span>
63
- </div>
64
- ),
65
- }}
66
- />
67
- <Button
68
- type='text'
69
- icon={<RightOutlined />}
70
- onClick={handleNextDay}
71
- className='flex items-center justify-center'
72
- />
73
- </div>
74
- )
75
- }
@@ -1,36 +0,0 @@
1
- 'use client'
2
-
3
- import React from 'react'
4
-
5
- interface DownloadLinkProps {
6
- url: string
7
- filename?: string
8
- }
9
-
10
- export const DownloadLink = ({ url, filename }: DownloadLinkProps) => {
11
- const handleDownload = (e: any) => {
12
- e.preventDefault()
13
- fetch(url, { method: 'GET' })
14
- .then(response => response.blob())
15
- .then(blob => {
16
- const downloadUrl = window.URL.createObjectURL(blob)
17
- const a = document.createElement('a')
18
- a.href = downloadUrl
19
- a.download = filename || '下载文件'
20
- document.body.appendChild(a)
21
- a.click()
22
- a.remove()
23
- window.URL.revokeObjectURL(downloadUrl)
24
- })
25
- .catch((err) => {
26
- console.log(666, err)
27
- alert('下载失败')
28
- })
29
- }
30
-
31
- return (
32
- <a href={url} onClick={handleDownload}>
33
- 下载
34
- </a>
35
- )
36
- }
@@ -1,77 +0,0 @@
1
- 'use client'
2
-
3
- import React from 'react'
4
-
5
- import { Space } from 'antd'
6
- import {
7
- DragDropContext,
8
- Draggable,
9
- Droppable,
10
- type OnDragEndResponder,
11
- type DraggableProvided,
12
- } from 'react-beautiful-dnd'
13
-
14
- interface DragSortProps<T> {
15
- direction?: 'vertical' | 'horizontal'
16
- droppableId?: string
17
- list?: T[]
18
- children: (item: T, provided: DraggableProvided) => React.ReactNode
19
- lastChildren?: React.ReactNode
20
- onDragEnd?: OnDragEndResponder
21
- hasContext?: boolean
22
- dropType?: string
23
- }
24
-
25
- export { type DropResult, type DraggableProvided } from 'react-beautiful-dnd'
26
-
27
- export const DragSort = <T extends { id: string }>(props: DragSortProps<T>) => {
28
- const {
29
- dropType,
30
- direction = 'vertical',
31
- droppableId = 'list',
32
- list,
33
- children,
34
- hasContext = true,
35
- lastChildren,
36
- onDragEnd = () => undefined,
37
- } = props
38
-
39
- const content = (
40
- <Droppable
41
- type={dropType}
42
- droppableId={droppableId}
43
- direction={direction}
44
- isDropDisabled={false}
45
- isCombineEnabled={false}
46
- ignoreContainerClipping
47
- >
48
- {provided => (
49
- <div ref={provided.innerRef} {...provided.droppableProps}>
50
- <Space orientation={direction} wrap style={{ width: '100%' }}>
51
- {list?.map((item, index) => (
52
- <Draggable key={item.id} disableInteractiveElementBlocking draggableId={item.id.toString()} index={index}>
53
- {provided => (
54
- <div ref={provided.innerRef} {...provided.draggableProps} >
55
- {children(item, provided)}
56
- </div>
57
- )}
58
- </Draggable>
59
- ))}
60
- {provided.placeholder}
61
- {lastChildren}
62
- </Space>
63
- </div>
64
- )}
65
- </Droppable>
66
- )
67
-
68
- if (!hasContext) {
69
- return content
70
- }
71
-
72
- return (
73
- <DragDropContext onDragEnd={onDragEnd}>
74
- {content}
75
- </DragDropContext>
76
- )
77
- }
@@ -1,76 +0,0 @@
1
- import React from 'react'
2
- import { AutoComplete, Button, Space } from 'antd'
3
-
4
- import type { Option } from './types'
5
-
6
- interface DynamicSelectProps {
7
- value?: string[]
8
- onChange?: (value: string[]) => void
9
- options?: Option[]
10
- }
11
-
12
- export const DynamicSelect = (props: DynamicSelectProps) => {
13
- const { value = [''], onChange, options = [] } = props
14
-
15
- const removeOption = (index: number) => {
16
- const newOptions = [...value]
17
- newOptions.splice(index, 1)
18
- onChange?.(newOptions)
19
- }
20
-
21
- const handleChange = (index: number, val: string) => {
22
- const newValue = [...[...value].slice(0, index), val]
23
- onChange?.(newValue)
24
-
25
- if (newValue.every(item => item)) {
26
- onChange?.([...newValue, ''])
27
- }
28
- }
29
-
30
- const getOptions = (options: Option[], index: number): Option[] => {
31
- if (index === 0) {
32
- return options
33
- }
34
-
35
- const currentValue = value[value.length - 1 - index]
36
- if (!currentValue) return []
37
-
38
- return getOptions(
39
- options.find(item => item.value === currentValue)?.children || [],
40
- index - 1,
41
- )
42
- }
43
-
44
- return (
45
- <Space size={8} align='center'>
46
- {value.map((val, index) => (
47
- <Space key={index} size={4} align='center'>
48
- <AutoComplete
49
- style={{
50
- minWidth: '120px',
51
- maxWidth: '300px',
52
- width: 'auto',
53
- }}
54
- value={val}
55
- onChange={val => handleChange(index, val)}
56
- options={getOptions(options, index)}
57
- placeholder={`请选择第 ${index + 1} 级`}
58
- />
59
- {index !== 0 && (
60
- <Button
61
- type='text'
62
- danger
63
- size='small'
64
- onClick={() => removeOption(index)}
65
- >
66
- 删除
67
- </Button>
68
- )}
69
- {index < value.length - 1 && (
70
- <span style={{ color: '#999' }}>/</span>
71
- )}
72
- </Space>
73
- ))}
74
- </Space>
75
- )
76
- }
@@ -1,8 +0,0 @@
1
- export type OptionValue = string | number | boolean
2
-
3
- export interface Option<V extends OptionValue = OptionValue> {
4
- label: string
5
- value: V
6
- children?: Option<V>[]
7
- extra?: Record<string, any>
8
- }
@@ -1,47 +0,0 @@
1
- import type { Option } from './types'
2
-
3
- export const transformOptions = (data: string[][]): Option[] => {
4
- const result: Option[] = []
5
-
6
- data.forEach((item = []) => {
7
- let currentNode: Option | undefined
8
- let parentNode: Option | undefined
9
-
10
- for (let i = 0; i < item.length; i++) {
11
- const currentValue = item[i]
12
- if (!currentValue) continue
13
-
14
- if (i === 0) {
15
- currentNode = result.find(r => r.value === currentValue)
16
-
17
- if (!currentNode) {
18
- currentNode = {
19
- label: currentValue,
20
- value: currentValue,
21
- }
22
- result.push(currentNode)
23
- }
24
-
25
- parentNode = currentNode
26
- } else {
27
- currentNode = parentNode?.children?.find((c: Option) => c.value === currentValue)
28
-
29
- if (!currentNode) {
30
- currentNode = {
31
- label: currentValue,
32
- value: currentValue,
33
- }
34
- if (!parentNode) {
35
- return
36
- }
37
- parentNode.children = parentNode.children || []
38
- parentNode.children.push(currentNode)
39
- }
40
-
41
- parentNode = currentNode
42
- }
43
- }
44
- })
45
-
46
- return result
47
- }
@@ -1,24 +0,0 @@
1
- import React from 'react'
2
-
3
- import { Tag } from 'antd'
4
-
5
- type EnumTagProps = {
6
- value: string
7
- map: Map<string, { label: string; value: string; extra?: { color?: string } }>
8
- }
9
-
10
- export const EnumTag = (props: EnumTagProps) => {
11
- const { value, map } = props
12
-
13
- const enumItem = map.get(value)
14
-
15
- if (!enumItem) {
16
- return <Tag>{value}</Tag>
17
- }
18
-
19
- return (
20
- <Tag color={enumItem.extra?.color}>
21
- {enumItem.label}
22
- </Tag>
23
- )
24
- }
@@ -1,57 +0,0 @@
1
- 'use client'
2
-
3
- import { useImperativeHandle } from 'react'
4
- import { Select, SelectProps, Spin } from 'antd'
5
- import { useRequest } from '@wzyjs/hooks/web'
6
-
7
- export interface FetchSelectProps<I> extends SelectProps {
8
- selectRef?: any,
9
- isDetail?: boolean, // 只返回id 还是返回整个信息
10
- searchApi: (params: { search: string }) => Promise<any>,
11
- convertData?: (data: I[]) => any[],
12
- onChange?: (value: any) => void
13
- }
14
-
15
- export interface FetchSelectRef {
16
- refresh: () => void
17
- }
18
-
19
- export const FetchSelect = <I extends { id: string | number }, >(props: FetchSelectProps<I>) => {
20
- const { searchApi, convertData, onChange, isDetail = false, selectRef, ...other } = props
21
-
22
- const { data, run, loading, refresh } = useRequest(searchApi, {
23
- debounceWait: 100,
24
- })
25
-
26
- const onSearch = (value: string) => {
27
- run({ search: value })
28
- }
29
-
30
- useImperativeHandle(selectRef, () => ({
31
- refresh,
32
- }))
33
-
34
- return (
35
- <Select
36
- showSearch
37
- defaultActiveFirstOption={false}
38
- popupMatchSelectWidth={false}
39
- suffixIcon={null}
40
- filterOption={false}
41
- notFoundContent={loading ? <Spin size='small' /> : null}
42
- loading={loading}
43
- {...other}
44
-
45
- options={convertData ? convertData(data?.data || []) : data?.data}
46
- onSearch={onSearch}
47
- onChange={value => {
48
- if (isDetail) {
49
- const detail = data?.data?.find(item => item.id === value)
50
- onChange?.(detail)
51
- } else {
52
- onChange?.(value)
53
- }
54
- }}
55
- />
56
- )
57
- }
@@ -1,28 +0,0 @@
1
- 'use client'
2
-
3
- import React, { useImperativeHandle, useRef } from 'react'
4
- import { BetaSchemaForm, ProFormInstance } from '@ant-design/pro-components'
5
- import { FormSchema } from '@ant-design/pro-form/es/components/SchemaForm'
6
-
7
- export type { ProFormColumnsType, ProFormInstance } from '@ant-design/pro-components'
8
-
9
- export type FormProProps<T, ValueType> = FormSchema<T, ValueType>
10
-
11
- export const FormPro = <T, ValueType>(props: FormProProps<T, ValueType>) => {
12
-
13
- const formRef = useRef<ProFormInstance>(null)
14
- useImperativeHandle(props.formRef, () => formRef?.current, [formRef])
15
-
16
- // useEffect(() => {
17
- // if (props.value) {
18
- // formRef.current?.setFieldsValue(props.value)
19
- // }
20
- // }, [JSON.stringify(props.value)])
21
-
22
- return (
23
- <BetaSchemaForm
24
- {...props}
25
- formRef={formRef}
26
- />
27
- )
28
- }
@@ -1,45 +0,0 @@
1
- import { CSSProperties, ReactNode } from 'react'
2
-
3
- import GridLayout, { Layout } from 'react-grid-layout'
4
- import 'react-grid-layout/css/styles.css'
5
-
6
- export type { Layout as GridLayoutItem } from 'react-grid-layout'
7
-
8
- interface GridLayoutProps<I> {
9
- layout: I[]
10
- style?: CSSProperties
11
- onChange?: (layout: I[]) => void
12
- renderItem?: (item: I) => ReactNode
13
- }
14
-
15
- export const GroupLayout = <I extends Layout>(props: GridLayoutProps<I>) => {
16
- const { style, layout, onChange, renderItem = item => item.i } = props
17
-
18
- const onLayoutChange = (items: Layout[]) => {
19
- onChange?.(items.map(item => ({
20
- ...layout.find(i => i.i === item.i),
21
- ...item,
22
- }) as I))
23
- }
24
-
25
- return (
26
- <GridLayout
27
- layout={layout}
28
- cols={24}
29
- rowHeight={50}
30
- width={1200}
31
- useCSSTransforms={false}
32
- containerPadding={[0, 0]}
33
- style={{ width: '100%', height: '100%', userSelect: 'none', ...style }}
34
- draggableHandle='.drag-handle'
35
- resizeHandles={['se']}
36
- onLayoutChange={onLayoutChange}
37
- >
38
- {layout.map(item => (
39
- <div key={item.i}>
40
- {renderItem(item)}
41
- </div>
42
- ))}
43
- </GridLayout>
44
- )
45
- }
@@ -1,18 +0,0 @@
1
- 'use client'
2
-
3
- import React, { CSSProperties } from 'react'
4
-
5
- export interface HtmlProProps {
6
- html: string;
7
- style?: CSSProperties
8
- }
9
-
10
- export const HtmlPro = (props: HtmlProProps) => {
11
- const { html, style = {} } = props
12
- return (
13
- <div
14
- style={{ minWidth: '100%', ...style }}
15
- dangerouslySetInnerHTML={{ __html: html }}
16
- />
17
- )
18
- }
@@ -1,52 +0,0 @@
1
- 'use client'
2
-
3
- import React, { useEffect, CSSProperties } from 'react'
4
- import { Spin } from 'antd'
5
- import { useBoolean } from '@wzyjs/hooks/web'
6
-
7
- export interface IframeProProps {
8
- url: string;
9
- errMessage?: string;
10
- style?: CSSProperties;
11
- isShowLoading?: boolean;
12
- }
13
-
14
- export const IframePro = (props: IframeProProps) => {
15
- const { url, style, errMessage = '', isShowLoading = false } = props
16
-
17
- const [loading, { setTrue, setFalse }] = useBoolean(true)
18
-
19
- useEffect(() => {
20
- setTrue()
21
- }, [url])
22
-
23
- if (!url) {
24
- return (
25
- <span
26
- style={{
27
- ...style,
28
- color: '#ccc',
29
- fontSize: 14,
30
- display: 'flex',
31
- flexDirection: 'column',
32
- justifyContent: 'center',
33
- alignItems: 'center',
34
- }}
35
- >
36
- {errMessage || '没有url'}
37
- </span>
38
- )
39
- }
40
-
41
- return (
42
- <Spin spinning={loading && isShowLoading}>
43
- <iframe
44
- src={url}
45
- width='100%'
46
- height='100%'
47
- style={style}
48
- onLoad={setFalse}
49
- />
50
- </Spin>
51
- )
52
- }