gi-component 0.0.48 → 0.0.50

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 (262) hide show
  1. package/README.md +2 -0
  2. package/dist/components/button/index.d.ts +2 -1
  3. package/dist/components/button/index.d.ts.map +1 -0
  4. package/dist/components/button/src/{button.vue.d.ts → button.d.ts} +5 -3
  5. package/dist/components/button/src/button.d.ts.map +1 -0
  6. package/dist/components/button/src/type.d.ts +1 -0
  7. package/dist/components/button/src/type.d.ts.map +1 -0
  8. package/dist/components/card/index.d.ts +2 -1
  9. package/dist/components/card/index.d.ts.map +1 -0
  10. package/dist/components/card/src/card.d.ts +37 -0
  11. package/dist/components/card/src/card.d.ts.map +1 -0
  12. package/dist/components/card/src/type.d.ts +1 -0
  13. package/dist/components/card/src/type.d.ts.map +1 -0
  14. package/dist/components/descriptions/index.d.ts +2 -2
  15. package/dist/components/descriptions/index.d.ts.map +1 -0
  16. package/dist/components/descriptions/src/descriptions.d.ts +25 -0
  17. package/dist/components/descriptions/src/descriptions.d.ts.map +1 -0
  18. package/dist/components/descriptions/src/type.d.ts +25 -11
  19. package/dist/components/descriptions/src/type.d.ts.map +1 -0
  20. package/dist/components/dialog/index.d.ts +2 -1
  21. package/dist/components/dialog/index.d.ts.map +1 -0
  22. package/dist/components/dialog/src/dialog-content.d.ts +11 -0
  23. package/dist/components/dialog/src/dialog-content.d.ts.map +1 -0
  24. package/dist/components/dialog/src/dialog.d.ts +16 -0
  25. package/dist/components/dialog/src/dialog.d.ts.map +1 -0
  26. package/dist/components/dialog/src/type.d.ts +1 -0
  27. package/dist/components/dialog/src/type.d.ts.map +1 -0
  28. package/dist/components/dot/index.d.ts +2 -1
  29. package/dist/components/dot/index.d.ts.map +1 -0
  30. package/dist/components/dot/src/dot.d.ts +9 -0
  31. package/dist/components/dot/src/dot.d.ts.map +1 -0
  32. package/dist/components/dot/src/type.d.ts +1 -0
  33. package/dist/components/dot/src/type.d.ts.map +1 -0
  34. package/dist/components/drawer/index.d.ts +2 -1
  35. package/dist/components/drawer/index.d.ts.map +1 -0
  36. package/dist/components/drawer/src/drawer.d.ts +1 -0
  37. package/dist/components/drawer/src/drawer.d.ts.map +1 -0
  38. package/dist/components/drawer/src/type.d.ts +1 -0
  39. package/dist/components/drawer/src/type.d.ts.map +1 -0
  40. package/dist/components/edit-table/index.d.ts +2 -1
  41. package/dist/components/edit-table/index.d.ts.map +1 -0
  42. package/dist/components/edit-table/src/type.d.ts +1 -0
  43. package/dist/components/edit-table/src/type.d.ts.map +1 -0
  44. package/dist/components/flex/index.d.ts +2 -1
  45. package/dist/components/flex/index.d.ts.map +1 -0
  46. package/dist/components/flex/src/{flex.vue.d.ts → flex.d.ts} +5 -2
  47. package/dist/components/flex/src/flex.d.ts.map +1 -0
  48. package/dist/components/flex/src/type.d.ts +3 -0
  49. package/dist/components/flex/src/type.d.ts.map +1 -0
  50. package/dist/components/form/index.d.ts +2 -1
  51. package/dist/components/form/index.d.ts.map +1 -0
  52. package/dist/components/form/src/type.d.ts +1 -0
  53. package/dist/components/form/src/type.d.ts.map +1 -0
  54. package/dist/components/grid/index.d.ts +3 -2
  55. package/dist/components/grid/index.d.ts.map +1 -0
  56. package/dist/components/grid/src/context.d.ts +1 -0
  57. package/dist/components/grid/src/context.d.ts.map +1 -0
  58. package/dist/components/grid/src/{grid-item.vue.d.ts → grid-item.d.ts} +9 -8
  59. package/dist/components/grid/src/grid-item.d.ts.map +1 -0
  60. package/dist/components/grid/src/{grid.vue.d.ts → grid.d.ts} +7 -6
  61. package/dist/components/grid/src/grid.d.ts.map +1 -0
  62. package/dist/components/grid/src/hook/use-index.d.ts +3 -2
  63. package/dist/components/grid/src/hook/use-index.d.ts.map +1 -0
  64. package/dist/components/grid/src/hook/use-responsive-state.d.ts +3 -2
  65. package/dist/components/grid/src/hook/use-responsive-state.d.ts.map +1 -0
  66. package/dist/components/grid/src/hook/use-responsive-value.d.ts +3 -2
  67. package/dist/components/grid/src/hook/use-responsive-value.d.ts.map +1 -0
  68. package/dist/components/grid/src/interface.d.ts +1 -0
  69. package/dist/components/grid/src/interface.d.ts.map +1 -0
  70. package/dist/components/grid/src/type.d.ts +1 -0
  71. package/dist/components/grid/src/type.d.ts.map +1 -0
  72. package/dist/components/grid/src/utils/global-config.d.ts +1 -0
  73. package/dist/components/grid/src/utils/global-config.d.ts.map +1 -0
  74. package/dist/components/grid/src/utils/index.d.ts +1 -0
  75. package/dist/components/grid/src/utils/index.d.ts.map +1 -0
  76. package/dist/components/grid/src/utils/is.d.ts +1 -0
  77. package/dist/components/grid/src/utils/is.d.ts.map +1 -0
  78. package/dist/components/grid/src/utils/responsive-observe.d.ts +1 -0
  79. package/dist/components/grid/src/utils/responsive-observe.d.ts.map +1 -0
  80. package/dist/components/input-group/index.d.ts +2 -1
  81. package/dist/components/input-group/index.d.ts.map +1 -0
  82. package/dist/components/input-group/src/{input-group.vue.d.ts → input-group.d.ts} +3 -1
  83. package/dist/components/input-group/src/input-group.d.ts.map +1 -0
  84. package/dist/components/input-group/src/type.d.ts +1 -0
  85. package/dist/components/input-group/src/type.d.ts.map +1 -0
  86. package/dist/components/input-search/index.d.ts +2 -1
  87. package/dist/components/input-search/index.d.ts.map +1 -0
  88. package/dist/components/input-search/src/{input-search.vue.d.ts → input-search.d.ts} +6 -4
  89. package/dist/components/input-search/src/input-search.d.ts.map +1 -0
  90. package/dist/components/input-search/src/type.d.ts +1 -0
  91. package/dist/components/input-search/src/type.d.ts.map +1 -0
  92. package/dist/components/nav-tabs/index.d.ts +2 -1
  93. package/dist/components/nav-tabs/index.d.ts.map +1 -0
  94. package/dist/components/nav-tabs/src/{nav-tabs.vue.d.ts → nav-tabs.d.ts} +6 -4
  95. package/dist/components/nav-tabs/src/nav-tabs.d.ts.map +1 -0
  96. package/dist/components/nav-tabs/src/type.d.ts +1 -0
  97. package/dist/components/nav-tabs/src/type.d.ts.map +1 -0
  98. package/dist/components/page-layout/index.d.ts +2 -1
  99. package/dist/components/page-layout/index.d.ts.map +1 -0
  100. package/dist/components/page-layout/src/page-layout.d.ts +219 -0
  101. package/dist/components/page-layout/src/page-layout.d.ts.map +1 -0
  102. package/dist/components/page-layout/src/{split-button.vue.d.ts → split-button.d.ts} +5 -3
  103. package/dist/components/page-layout/src/split-button.d.ts.map +1 -0
  104. package/dist/components/page-layout/src/type.d.ts +12 -0
  105. package/dist/components/page-layout/src/type.d.ts.map +1 -0
  106. package/dist/components/page-layout/src/useAutoCollapse.d.ts +12 -0
  107. package/dist/components/page-layout/src/useAutoCollapse.d.ts.map +1 -0
  108. package/dist/components/table/index.d.ts +5 -2
  109. package/dist/components/table/index.d.ts.map +1 -0
  110. package/dist/components/table/src/{TableColumn.vue.d.ts → table-column.d.ts} +1 -0
  111. package/dist/components/table/src/table-column.d.ts.map +1 -0
  112. package/dist/components/table/src/type.d.ts +7 -6
  113. package/dist/components/table/src/type.d.ts.map +1 -0
  114. package/dist/components/tabs/index.d.ts +2 -1
  115. package/dist/components/tabs/index.d.ts.map +1 -0
  116. package/dist/components/tabs/src/{tabs.vue.d.ts → tabs.d.ts} +16 -14
  117. package/dist/components/tabs/src/tabs.d.ts.map +1 -0
  118. package/dist/components/tabs/src/type.d.ts +1 -0
  119. package/dist/components/tabs/src/type.d.ts.map +1 -0
  120. package/dist/components/tag/index.d.ts +2 -1
  121. package/dist/components/tag/index.d.ts.map +1 -0
  122. package/dist/components/tag/src/{tag.vue.d.ts → tag.d.ts} +7 -5
  123. package/dist/components/tag/src/tag.d.ts.map +1 -0
  124. package/dist/components/tag/src/type.d.ts +1 -0
  125. package/dist/components/tag/src/type.d.ts.map +1 -0
  126. package/dist/components/tree-transfer/index.d.ts +2 -1
  127. package/dist/components/tree-transfer/index.d.ts.map +1 -0
  128. package/dist/components/tree-transfer/src/tree-transfer.d.ts +14438 -0
  129. package/dist/components/tree-transfer/src/tree-transfer.d.ts.map +1 -0
  130. package/dist/components/tree-transfer/src/type.d.ts +1 -0
  131. package/dist/components/tree-transfer/src/type.d.ts.map +1 -0
  132. package/dist/components/tree-transfer/src/utils.d.ts +1 -0
  133. package/dist/components/tree-transfer/src/utils.d.ts.map +1 -0
  134. package/dist/gi.css +1 -1
  135. package/dist/global.d.ts +26 -0
  136. package/dist/hooks/index.d.ts +1 -0
  137. package/dist/hooks/index.d.ts.map +1 -0
  138. package/dist/hooks/useBemClass.d.ts +1 -0
  139. package/dist/hooks/useBemClass.d.ts.map +1 -0
  140. package/dist/hooks/useNavTabs.d.ts +1 -0
  141. package/dist/hooks/useNavTabs.d.ts.map +1 -0
  142. package/dist/index.d.ts +3 -2
  143. package/dist/index.d.ts.map +1 -0
  144. package/dist/index.es.js +148 -47
  145. package/dist/index.es.js.map +1 -1
  146. package/dist/index.umd.js +1 -1
  147. package/dist/index.umd.js.map +1 -1
  148. package/dist/types/tool.d.ts +1 -0
  149. package/dist/types/tool.d.ts.map +1 -0
  150. package/dist/utils/createSelectDialog.d.ts +1 -0
  151. package/dist/utils/createSelectDialog.d.ts.map +1 -0
  152. package/dist/utils/index.d.ts +1 -0
  153. package/dist/utils/index.d.ts.map +1 -0
  154. package/package.json +7 -6
  155. package/dist/components/card/src/card.vue.d.ts +0 -35
  156. package/dist/components/descriptions/src/descriptions.vue.d.ts +0 -20
  157. package/dist/components/dialog/src/dialog-content.vue.d.ts +0 -9
  158. package/dist/components/dialog/src/dialog.vue.d.ts +0 -43
  159. package/dist/components/dot/src/dot.vue.d.ts +0 -7
  160. package/dist/components/drawer/src/drawer.vue.d.ts +0 -47
  161. package/dist/components/page-layout/src/page-layout.vue.d.ts +0 -19
  162. package/dist/components/plus-tabs/index.d.ts +0 -8
  163. package/dist/components/plus-tabs/src/context.d.ts +0 -26
  164. package/dist/components/plus-tabs/src/plus-tab-pane.vue.d.ts +0 -39
  165. package/dist/components/plus-tabs/src/plus-tabs.vue.d.ts +0 -78
  166. package/dist/components/plus-tabs/src/type.d.ts +0 -5
  167. package/dist/components/tab/index.d.ts +0 -2
  168. package/dist/components/tab/src/context.d.ts +0 -10
  169. package/dist/components/tab/src/tab-item.vue.d.ts +0 -26
  170. package/dist/components/tab/src/tab.vue.d.ts +0 -44
  171. package/dist/components/tab/src/type.d.ts +0 -21
  172. package/dist/components/tab/src/use-nav-tabs.d.ts +0 -2
  173. package/dist/components/tab/src/use-tabs.d.ts +0 -13
  174. package/dist/components/table/src/table.d.ts +0 -4
  175. package/dist/components/table/src/table.vue.d.ts +0 -4
  176. package/dist/components/table-pro/index.d.ts +0 -4
  177. package/dist/components/table-pro/src/table-pro-column-setting.vue.d.ts +0 -13
  178. package/dist/components/table-pro/src/type.d.ts +0 -5
  179. package/dist/components/tree-transfer/src/tree-transfer.vue.d.ts +0 -14436
  180. package/dist/components.d.ts +0 -27
  181. package/packages/components/button/index.ts +0 -5
  182. package/packages/components/button/src/button.vue +0 -60
  183. package/packages/components/button/src/type.ts +0 -15
  184. package/packages/components/card/index.ts +0 -5
  185. package/packages/components/card/src/card.vue +0 -171
  186. package/packages/components/card/src/type.ts +0 -12
  187. package/packages/components/descriptions/index.ts +0 -5
  188. package/packages/components/descriptions/src/descriptions.vue +0 -72
  189. package/packages/components/descriptions/src/type.ts +0 -44
  190. package/packages/components/dialog/index.ts +0 -6
  191. package/packages/components/dialog/src/dialog-content.vue +0 -40
  192. package/packages/components/dialog/src/dialog.ts +0 -131
  193. package/packages/components/dialog/src/dialog.vue +0 -114
  194. package/packages/components/dialog/src/type.ts +0 -16
  195. package/packages/components/dot/index.ts +0 -5
  196. package/packages/components/dot/src/dot.vue +0 -107
  197. package/packages/components/dot/src/type.ts +0 -6
  198. package/packages/components/drawer/index.ts +0 -6
  199. package/packages/components/drawer/src/drawer.ts +0 -84
  200. package/packages/components/drawer/src/drawer.vue +0 -114
  201. package/packages/components/drawer/src/type.ts +0 -15
  202. package/packages/components/edit-table/index.ts +0 -5
  203. package/packages/components/edit-table/src/edit-table.vue +0 -201
  204. package/packages/components/edit-table/src/type.ts +0 -51
  205. package/packages/components/flex/index.ts +0 -5
  206. package/packages/components/flex/src/flex.vue +0 -82
  207. package/packages/components/flex/src/type.ts +0 -16
  208. package/packages/components/form/index.ts +0 -5
  209. package/packages/components/form/src/form.vue +0 -424
  210. package/packages/components/form/src/type.ts +0 -85
  211. package/packages/components/grid/index.ts +0 -8
  212. package/packages/components/grid/src/context.ts +0 -30
  213. package/packages/components/grid/src/grid-item.vue +0 -143
  214. package/packages/components/grid/src/grid.vue +0 -151
  215. package/packages/components/grid/src/hook/use-index.ts +0 -63
  216. package/packages/components/grid/src/hook/use-responsive-state.ts +0 -66
  217. package/packages/components/grid/src/hook/use-responsive-value.ts +0 -36
  218. package/packages/components/grid/src/interface.ts +0 -74
  219. package/packages/components/grid/src/type.ts +0 -0
  220. package/packages/components/grid/src/utils/global-config.ts +0 -6
  221. package/packages/components/grid/src/utils/index.ts +0 -73
  222. package/packages/components/grid/src/utils/is.ts +0 -9
  223. package/packages/components/grid/src/utils/responsive-observe.ts +0 -135
  224. package/packages/components/input-group/index.ts +0 -5
  225. package/packages/components/input-group/src/input-group.vue +0 -79
  226. package/packages/components/input-group/src/type.ts +0 -1
  227. package/packages/components/input-search/index.ts +0 -5
  228. package/packages/components/input-search/src/input-search.vue +0 -48
  229. package/packages/components/input-search/src/type.ts +0 -6
  230. package/packages/components/nav-tabs/index.ts +0 -8
  231. package/packages/components/nav-tabs/src/nav-tabs.vue +0 -235
  232. package/packages/components/nav-tabs/src/type.ts +0 -24
  233. package/packages/components/page-layout/index.ts +0 -5
  234. package/packages/components/page-layout/src/page-layout.vue +0 -170
  235. package/packages/components/page-layout/src/split-button.vue +0 -107
  236. package/packages/components/page-layout/src/type.ts +0 -12
  237. package/packages/components/table/index.ts +0 -5
  238. package/packages/components/table/src/TableColumn.vue +0 -43
  239. package/packages/components/table/src/table.vue +0 -89
  240. package/packages/components/table/src/type.ts +0 -24
  241. package/packages/components/tabs/index.ts +0 -5
  242. package/packages/components/tabs/src/tabs.vue +0 -139
  243. package/packages/components/tabs/src/type.ts +0 -15
  244. package/packages/components/tag/index.ts +0 -5
  245. package/packages/components/tag/src/tag.vue +0 -355
  246. package/packages/components/tag/src/type.ts +0 -38
  247. package/packages/components/tree-transfer/index.ts +0 -5
  248. package/packages/components/tree-transfer/src/tree-transfer.vue +0 -225
  249. package/packages/components/tree-transfer/src/type.ts +0 -7
  250. package/packages/components/tree-transfer/src/utils.ts +0 -23
  251. package/packages/components.d.ts +0 -34
  252. package/packages/hooks/index.ts +0 -2
  253. package/packages/hooks/useBemClass.ts +0 -11
  254. package/packages/hooks/useNavTabs.ts +0 -497
  255. package/packages/index.ts +0 -118
  256. package/packages/styles/el.scss +0 -90
  257. package/packages/styles/index.scss +0 -141
  258. package/packages/styles/var.scss +0 -1
  259. package/packages/types/global.d.ts +0 -7
  260. package/packages/types/tool.ts +0 -14
  261. package/packages/utils/createSelectDialog.ts +0 -74
  262. package/packages/utils/index.ts +0 -1
@@ -1,114 +0,0 @@
1
- <template>
2
- <ElDialog v-bind="dialogProps" v-model="visible" :class="getClass" :title="props.title"
3
- :style="{ maxWidth: !props.fullscreen ? '480px' : '100%', ...props.style }">
4
- <slot>
5
- <template v-if="typeof props.content === 'string'">
6
- <p>{{ props.content }}</p>
7
- </template>
8
- <template v-if="typeof props.content === 'function'">
9
- <component :is="props?.content?.()"></component>
10
- </template>
11
- </slot>
12
- <template v-if="props.footer" #footer>
13
- <slot name="footer">
14
- <template v-if="typeof props.footer === 'boolean'">
15
- <ElSpace :size="10">
16
- <ElButton v-bind="props.cancelButtonProps" @click="handleCancel">
17
- {{ props.cancelText }}
18
- </ElButton>
19
- <ElButton type="primary" v-bind="props.okButtonProps" :loading="okLoading" @click="handleOk">
20
- {{ props.okText }}
21
- </ElButton>
22
- </ElSpace>
23
- </template>
24
- <template v-else>
25
- <component :is="props.footer()"></component>
26
- </template>
27
- </slot>
28
- </template>
29
- </ElDialog>
30
- </template>
31
-
32
- <script lang="ts" setup>
33
- import type { VNode } from 'vue'
34
- import type { DialogProps } from './type'
35
- import { ElButton, ElDialog, ElSpace } from 'element-plus'
36
- import { computed, ref } from 'vue'
37
- import { useBemClass } from '../../../hooks'
38
-
39
- const visible = defineModel('modelValue', {
40
- type: Boolean,
41
- default: false
42
- })
43
-
44
- const props = withDefaults(defineProps<DialogProps>(), {
45
- closeOnClickModal: true,
46
- showClose: true,
47
- footer: true,
48
- okText: '确认',
49
- cancelText: '取消',
50
- width: 'calc(100% - 20px)',
51
- alignCenter: true,
52
- lockScroll: true
53
- })
54
-
55
- defineSlots<{
56
- title: () => VNode
57
- footer: () => VNode
58
- default: () => VNode
59
- }>()
60
-
61
- const { b } = useBemClass()
62
-
63
- const getClass = computed(() => {
64
- const arr: string[] = [b('dialog')]
65
- if (props.simple) {
66
- arr.push(b('dialog--simple'))
67
- }
68
- return arr.join(' ')
69
- })
70
-
71
- const dialogProps = computed(() => {
72
- return {
73
- ...props,
74
- content: undefined,
75
- footer: undefined,
76
- okText: undefined,
77
- cancelText: undefined,
78
- okButtonProps: undefined,
79
- cancelButtonProps: undefined,
80
- onOk: undefined,
81
- onBeforeOk: undefined,
82
- onCancel: undefined,
83
- simple: undefined
84
- }
85
- })
86
-
87
- const okLoading = ref(false)
88
-
89
- const handleCancel = () => {
90
- props.onCancel?.()
91
- visible.value = false
92
- }
93
-
94
- const handleOk = async () => {
95
- if (props.onBeforeOk) {
96
- try {
97
- okLoading.value = true
98
- const flag = await props.onBeforeOk()
99
- okLoading.value = false
100
- if (flag) {
101
- visible.value = false
102
- }
103
- } catch (error) {
104
- console.error('error', error)
105
- okLoading.value = false
106
- }
107
- } else {
108
- props.onOk?.()
109
- visible.value = false
110
- }
111
- }
112
- </script>
113
-
114
- <style lang="scss" scoped></style>
@@ -1,16 +0,0 @@
1
- import type { ButtonProps, DialogProps as ElDialogProps } from 'element-plus'
2
- import type { CSSProperties, VNode } from 'vue'
3
-
4
- export interface DialogProps extends Partial<ElDialogProps> {
5
- content?: string | (() => VNode)
6
- footer?: boolean | (() => VNode)
7
- okText?: string
8
- cancelText?: string
9
- okButtonProps?: Partial<ButtonProps>
10
- cancelButtonProps?: Partial<ButtonProps>
11
- style?: CSSProperties
12
- simple?: boolean // 简单模式
13
- onOk?: () => void
14
- onBeforeOk?: () => Promise<boolean>
15
- onCancel?: () => void
16
- }
@@ -1,5 +0,0 @@
1
- import Dot from './src/dot.vue'
2
-
3
- export type DotInstance = InstanceType<typeof Dot>
4
- export * from './src/type'
5
- export default Dot
@@ -1,107 +0,0 @@
1
- <template>
2
- <span :class="getClass" :style="getStyle"></span>
3
- </template>
4
-
5
- <script setup lang="ts">
6
- import type { CSSProperties } from 'vue'
7
- import type { DotProps } from './type.ts'
8
- import { computed } from 'vue'
9
- import { useBemClass } from '../../../hooks'
10
-
11
- const props = withDefaults(defineProps<DotProps>(), {
12
- type: 'circle',
13
- size: 6,
14
- color: 'primary'
15
- })
16
-
17
- const { b } = useBemClass()
18
-
19
- const getClass = computed(() => {
20
- const arr = [b('dot'), b(`dot--${props.type}`)]
21
- if (['primary', 'success', 'danger', 'warning', 'info'].includes(props.color)) {
22
- arr.push(b(`dot--${props.color}`))
23
- }
24
- if (props.animation) {
25
- arr.push(b('dot--animation'))
26
- }
27
- return arr.join(' ')
28
- })
29
-
30
- const getStyle = computed(() => {
31
- const obj: CSSProperties = {}
32
- if (props.color && !['primary', 'success', 'danger', 'warning', 'info'].includes(props.color)) {
33
- obj.backgroundColor = props.color
34
- }
35
- if (props.size) {
36
- obj.width = `${props.size}px`
37
- obj.height = `${props.size}px`
38
- }
39
- return obj
40
- })
41
- </script>
42
-
43
- <style scoped lang="scss">
44
- @use '../../../styles/var.scss' as a;
45
-
46
- .#{a.$prefix}-dot {
47
- display: inline-flex;
48
- border-radius: 100px;
49
- background-color: var(--el-color-info);
50
- }
51
-
52
- .#{a.$prefix}-dot--square {
53
- border-radius: 0;
54
- }
55
-
56
- .#{a.$prefix}-dot--primary {
57
- background-color: var(--el-color-primary);
58
- }
59
-
60
- .#{a.$prefix}-dot--success {
61
- background-color: var(--el-color-success);
62
- }
63
-
64
- .#{a.$prefix}-dot--danger {
65
- background-color: var(--el-color-danger);
66
- }
67
-
68
- .#{a.$prefix}-dot--warning {
69
- background-color: var(--el-color-warning);
70
- }
71
-
72
- .#{a.$prefix}-dot--info {
73
- background-color: var(--el-color-info);
74
- }
75
-
76
- .#{a.$prefix}-dot--animation {
77
- position: relative;
78
-
79
- &::after {
80
- position: absolute;
81
- top: 0;
82
- left: 0;
83
- width: 100%;
84
- height: 100%;
85
- content: '';
86
- background: inherit;
87
- border-radius: 50%;
88
- animation: dot-animation 1.2s ease-in-out infinite;
89
- }
90
- }
91
-
92
- @keyframes dot-animation {
93
- 0% {
94
- opacity: 1;
95
- transform: scale(0.5);
96
- }
97
-
98
- 30% {
99
- opacity: 0.7;
100
- }
101
-
102
- 100% {
103
- opacity: 0;
104
- transform: scale(2.5);
105
- }
106
- }
107
- </style>
@@ -1,6 +0,0 @@
1
- export interface DotProps {
2
- type?: 'circle' | 'square'
3
- size?: number
4
- color?: string | 'primary' | 'success' | 'warning' | 'danger' | 'info'
5
- animation?: boolean
6
- }
@@ -1,6 +0,0 @@
1
- import Drawer from './src/drawer.vue'
2
-
3
- export type DrawerInstance = InstanceType<typeof Drawer>
4
- export * from './src/drawer'
5
- export * from './src/type'
6
- export default Drawer
@@ -1,84 +0,0 @@
1
- import type { DrawerInstance } from '../index'
2
- import ElementPlus from 'element-plus'
3
- import { createApp, h, ref } from 'vue'
4
- import GiDrawer from './drawer.vue'
5
-
6
- export type DrawerOptions = Partial<DrawerInstance['$props']>
7
-
8
- export interface DrawerReturnObject {
9
- close: () => void
10
- update: (newProps?: Record<string, any>) => void
11
- }
12
-
13
- const DEF_OPTIONS: DrawerOptions = {
14
-
15
- }
16
-
17
- export function createDrawer() {
18
- const Drawer = {
19
- _context: {},
20
- // 核心创建方法
21
- create(options: DrawerOptions): DrawerReturnObject {
22
- const mergedOptions = { ...DEF_OPTIONS, ...options }
23
- // 创建容器
24
- const container = document.createElement('div')
25
- document.body.appendChild(container)
26
-
27
- // 状态管理
28
- const visible = ref(true)
29
- const dialogOptions = ref(mergedOptions || {})
30
-
31
- // 创建弹窗应用
32
- const drawerApp = createApp({
33
- setup() {
34
- // 关闭处理
35
- const closed = () => {
36
- drawerApp.unmount()
37
- container.remove()
38
- }
39
-
40
- return () =>
41
- h(GiDrawer, {
42
- ...dialogOptions.value,
43
- 'modelValue': visible.value,
44
- 'onUpdate:modelValue': (val: boolean) => (visible.value = val),
45
- 'onClosed': () => closed()
46
- })
47
- }
48
- })
49
-
50
- drawerApp.use(ElementPlus)
51
-
52
- // 继承主应用的上下文
53
- Object.assign(drawerApp._context, Drawer._context)
54
-
55
- // 挂载
56
- drawerApp.mount(container)
57
-
58
- return {
59
- /** 关闭抽屉 */
60
- close: () => {
61
- visible.value = false
62
- setTimeout(() => {
63
- drawerApp.unmount()
64
- container.remove()
65
- }, 300)
66
- },
67
- /** 更新抽屉 */
68
- update: (newProps?: Record<string, any>) => {
69
- dialogOptions.value = { ...dialogOptions.value, ...newProps }
70
- }
71
- }
72
- },
73
-
74
- /** 抽屉-打开 */
75
- open(options: DrawerOptions) {
76
- return this.create(options)
77
- }
78
- }
79
-
80
- return Drawer
81
- }
82
-
83
- // 默认导出实例
84
- export const Drawer = createDrawer()
@@ -1,114 +0,0 @@
1
- <template>
2
- <ElDrawer v-bind="dialogProps" v-model="visible" :class="getClass" :title="props.title" :style="{ ...props.style }">
3
- <slot>
4
- <template v-if="typeof props.content === 'string'">
5
- <p>{{ props.content }}</p>
6
- </template>
7
- <template v-if="typeof props.content === 'function'">
8
- <component :is="props?.content?.()"></component>
9
- </template>
10
- </slot>
11
- <template v-if="props.footer" #footer>
12
- <slot name="footer">
13
- <template v-if="typeof props.footer === 'boolean'">
14
- <ElSpace :size="10">
15
- <ElButton v-bind="props.cancelButtonProps" @click="handleCancel">
16
- {{ props.cancelText }}
17
- </ElButton>
18
- <ElButton type="primary" v-bind="props.okButtonProps" :loading="okLoading" @click="handleOk">
19
- {{ props.okText }}
20
- </ElButton>
21
- </ElSpace>
22
- </template>
23
- <template v-else>
24
- <component :is="props.footer()"></component>
25
- </template>
26
- </slot>
27
- </template>
28
- </ElDrawer>
29
- </template>
30
-
31
- <script lang="ts" setup>
32
- import type { VNode } from 'vue'
33
- import type { DrawerProps } from './type'
34
- import { ElButton, ElDrawer, ElSpace } from 'element-plus'
35
- import { computed, ref } from 'vue'
36
- import { useBemClass } from '../../../hooks'
37
-
38
- const visible = defineModel('modelValue', {
39
- type: Boolean,
40
- default: false
41
- })
42
-
43
- const props = withDefaults(defineProps<DrawerProps>(), {
44
- title: '',
45
- withHeader: true,
46
- closeOnClickModal: true,
47
- closeOnPressEscape: true,
48
- lockScroll: true,
49
- modal: true,
50
- showClose: true,
51
- footer: true,
52
- okText: '确认',
53
- cancelText: '取消',
54
- size: '300px',
55
- appendTo: 'body'
56
- })
57
-
58
- defineSlots<{
59
- title: () => VNode
60
- footer: () => VNode
61
- default: () => VNode
62
- }>()
63
-
64
- const { b } = useBemClass()
65
-
66
- const getClass = computed(() => {
67
- const arr: string[] = [b('drawer')]
68
- return arr.join(' ')
69
- })
70
-
71
- const dialogProps = computed(() => {
72
- return {
73
- ...props,
74
- content: undefined,
75
- footer: undefined,
76
- okText: undefined,
77
- cancelText: undefined,
78
- okButtonProps: undefined,
79
- cancelButtonProps: undefined,
80
- onOk: undefined,
81
- onBeforeOk: undefined,
82
- onCancel: undefined,
83
- simple: undefined
84
- }
85
- })
86
-
87
- const okLoading = ref(false)
88
-
89
- const handleCancel = () => {
90
- props.onCancel?.()
91
- visible.value = false
92
- }
93
-
94
- const handleOk = async () => {
95
- if (props.onBeforeOk) {
96
- try {
97
- okLoading.value = true
98
- const flag = await props.onBeforeOk()
99
- okLoading.value = false
100
- if (flag) {
101
- visible.value = false
102
- }
103
- } catch (error) {
104
- console.error('error', error)
105
- okLoading.value = false
106
- }
107
- } else {
108
- props.onOk?.()
109
- visible.value = false
110
- }
111
- }
112
- </script>
113
-
114
- <style lang="scss" scoped></style>
@@ -1,15 +0,0 @@
1
- import type { ButtonProps, DrawerProps as ElDrawerProps } from 'element-plus'
2
- import type { CSSProperties, VNode } from 'vue'
3
-
4
- export interface DrawerProps extends Partial<ElDrawerProps> {
5
- content?: string | (() => VNode)
6
- footer?: boolean | (() => VNode)
7
- okText?: string
8
- cancelText?: string
9
- okButtonProps?: Partial<ButtonProps>
10
- cancelButtonProps?: Partial<ButtonProps>
11
- style?: CSSProperties
12
- onOk?: () => void
13
- onBeforeOk?: () => Promise<boolean>
14
- onCancel?: () => void
15
- }
@@ -1,5 +0,0 @@
1
- import EditTable from './src/edit-table.vue'
2
-
3
- export type EditTableInstance = InstanceType<typeof EditTable>
4
- export * from './src/type'
5
- export default EditTable
@@ -1,201 +0,0 @@
1
- <template>
2
- <ElForm ref="formRef" :model="form" :class="b('edit-table')">
3
- <ElTable :data="form.tableData" border v-bind="attrs">
4
- <ElTableColumn v-for="(column, index) in props.columns" :key="column.prop + index" :width="column.width"
5
- v-bind="column.columnProps" :prop="column.prop" :label="column.label"
6
- :label-class-name="getLabelClassName(column)">
7
- <template #default="scope">
8
- <ElFormItem v-bind="column.formItemProps" :label="column.label"
9
- :prop="`tableData[${scope.$index}].${column.prop}`" :rules="getFormItemRules(column)">
10
- <template v-if="column.slotName">
11
- <slot :name="column.slotName" v-bind="scope"></slot>
12
- </template>
13
- <template v-else-if="!column.type">
14
- {{ scope.row[column.prop] }}
15
- </template>
16
- <component :is="COMP_MAP[column.type] || column.type" v-else v-bind="getComponentBindProps(column)"
17
- v-model="scope.row[column.prop]" class="w-full" :disabled="isDisabled(scope)" />
18
- </ElFormItem>
19
- </template>
20
- </ElTableColumn>
21
- </ElTable>
22
- </ElForm>
23
- </template>
24
-
25
- <script lang="ts" setup>
26
- import type { FormInstance } from 'element-plus'
27
- import type { EditTableColumnItem, EditTableColumnItemType } from './type'
28
- import type { EditTableProps } from './type.ts'
29
- import * as El from 'element-plus'
30
- import { ElForm, ElFormItem, ElTable, ElTableColumn } from 'element-plus'
31
- import { computed, ref, useAttrs } from 'vue'
32
- import { useBemClass } from '../../../hooks'
33
- import InputSearch from '../../input-search'
34
-
35
- const props = withDefaults(defineProps<EditTableProps>(), {
36
- rowKey: 'id',
37
- data: () => [],
38
- columns: () => []
39
- })
40
-
41
- const attrs = useAttrs()
42
- const { b } = useBemClass()
43
-
44
- const COMP_MAP: Record<EditTableColumnItemType, any> = {
45
- 'input': El.ElInput,
46
- 'textarea': El.ElInput,
47
- 'input-number': El.ElInputNumber,
48
- 'input-tag': El.ElInputTag,
49
- 'select': El.ElSelect,
50
- 'select-v2': El.ElSelectV2,
51
- 'tree-select': El.ElTreeSelect,
52
- 'cascader': El.ElCascader,
53
- 'slider': El.ElSlider,
54
- 'switch': El.ElSwitch,
55
- 'rate': El.ElRate,
56
- 'checkbox-group': El.ElCheckboxGroup,
57
- 'checkbox': El.ElCheckbox,
58
- 'radio-group': El.ElRadioGroup,
59
- 'radio': El.ElRadio,
60
- 'date-picker': El.ElDatePicker,
61
- 'time-picker': El.ElTimePicker,
62
- 'time-select': El.ElTimeSelect,
63
- 'color-picker': El.ElColorPicker,
64
- 'transfer': El.ElTransfer,
65
- 'autocomplete': El.ElAutocomplete,
66
- 'upload': El.ElUpload,
67
- 'input-search': InputSearch,
68
- 'slot': undefined
69
- }
70
-
71
- const formRef = ref<FormInstance | null>()
72
-
73
- /** 表单数据 */
74
- const form = computed(() => ({ tableData: props.data }))
75
-
76
- const clearable = false
77
- /** 组件静态配置 */
78
- const STATIC_PROPS = new Map([
79
- ['input', { clearable, maxlength: 20 }],
80
- [
81
- 'textarea',
82
- {
83
- clearable,
84
- type: 'textarea',
85
- rows: 1,
86
- maxlength: 200,
87
- showWordLimit: true
88
- }
89
- ],
90
- ['input-number', {}],
91
- ['input-tag', { clearable }],
92
- ['select', { clearable }],
93
- ['select-v2', { clearable }],
94
- ['tree-select', { clearable }],
95
- ['cascader', { clearable }],
96
- ['slider', {}],
97
- ['switch', {}],
98
- ['rate', {}],
99
- ['checkbox-group', {}],
100
- ['checkbox', {}],
101
- ['radio-group', {}],
102
- ['radio', {}],
103
- ['date-picker', { clearable }],
104
- ['time-picker', { clearable }],
105
- ['time-select', { clearable }],
106
- ['color-picker', {}],
107
- ['transfer', {}],
108
- ['autocomplete', {}],
109
- ['upload', {}],
110
- ['title', {}]
111
- ])
112
-
113
- /** 占位符文本映射 */
114
- const PLACEHOLDER_MAP = new Map<EditTableColumnItemType, (label?: string) => string | undefined>([
115
- ['input', (label) => `请输入${label}`],
116
- ['input-number', (label) => `请输入${label}`],
117
- ['input-tag', (label) => `请输入${label}`],
118
- ['textarea', (label) => `请填写${label}`],
119
- ['select', (label) => `请选择${label}`],
120
- ['select-v2', (label) => `请选择${label}`],
121
- ['tree-select', (label) => `请选择${label}`],
122
- ['cascader', (label) => `请选择${label}`],
123
- ['time-select', (label) => `请选择${label}`],
124
- ['input-search', (label) => `请选择${label}`],
125
- ['date-picker', () => '请选择日期'],
126
- ['time-picker', () => '请选择时间']
127
- ])
128
-
129
- /** 获取占位文本 */
130
- const getPlaceholder = (item: EditTableColumnItem): string | undefined => {
131
- if (!item.type) return undefined
132
- const placeholderFn = PLACEHOLDER_MAP.get(item.type)
133
- return placeholderFn ? placeholderFn(item.label) : undefined
134
- }
135
-
136
- /** 组件的默认props配置 */
137
- function getComponentBindProps(item: EditTableColumnItem) {
138
- // 获取默认配置
139
- const defaultProps: Record<string, any> = { ...(STATIC_PROPS.get(item.type || '') || {}) }
140
- const placeholder = getPlaceholder(item)
141
- if (placeholder) {
142
- defaultProps.placeholder = placeholder
143
- }
144
- // 日期选择器格式化
145
- if (item.type === 'date-picker') {
146
- defaultProps.valueFormat = item?.componentProps?.type === 'datetime' ? 'YYYY-MM-DD HH:mm:ss' : 'YYYY-MM-DD'
147
- }
148
- // 合并默认配置和自定义配置
149
- return { ...defaultProps, ...(item?.componentProps || {}) }
150
- }
151
-
152
- /** 表单项校验规则 */
153
- function getFormItemRules(item: EditTableColumnItem) {
154
- const rules = Array.isArray(item.rules) ? item.rules : []
155
- if (item.required) {
156
- return [
157
- { required: true, message: `${item.label}为必填项` },
158
- ...rules
159
- ]
160
- }
161
- return item.rules
162
- }
163
-
164
- /** 表头标题样式 */
165
- function getLabelClassName(item: EditTableColumnItem) {
166
- if (item.required) return 'column-required'
167
- return ''
168
- }
169
-
170
- /** 判断是否禁用 */
171
- const isDisabled = (scope: any): boolean => {
172
- if (typeof props?.cellDisabled === 'function') {
173
- return props.cellDisabled(scope)
174
- }
175
- return false
176
- }
177
-
178
- defineExpose({ formRef })
179
- </script>
180
-
181
- <style lang="scss" scoped>
182
- :deep(.el-form-item) {
183
- margin-bottom: 0;
184
-
185
- .el-form-item__label {
186
- display: none;
187
- }
188
- }
189
-
190
- :deep(.column-required) {
191
- .cell {
192
- position: relative;
193
-
194
- &::after {
195
- content: '*';
196
- color: red;
197
- margin-left: 2px;
198
- }
199
- }
200
- }
201
- </style>