@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,30 +0,0 @@
1
- import { defineComponent, toRefs, unref } from "vue";
2
- import { Modal } from 'ant-design-vue';
3
- import { useAttrs, useSlots } from '@dt-frames/core';
4
- import { basicProps } from '../props';
5
- import { useDragMove } from "../hooks/useDrag";
6
-
7
-
8
- export default defineComponent({
9
- name: 'Modal',
10
- inheritAttrs: false,
11
- props: basicProps,
12
- emits: ['cancel'],
13
- setup( props, { slots } ){
14
- const { visible, draggable, destroyOnClose } = toRefs(props);
15
- const attrs = useAttrs();
16
-
17
- useDragMove({
18
- visible,
19
- destroyOnClose,
20
- draggable,
21
- })
22
-
23
- const { extendSlots } = useSlots();
24
-
25
- return () => {
26
- const propsData = { ...unref(attrs), ...props, destroyOnClose: true } as any;
27
- return <Modal {...propsData}>{extendSlots(slots as any)}</Modal>;
28
- };
29
- }
30
- })
@@ -1,46 +0,0 @@
1
- <template>
2
- <slot name="appendFooter"></slot>
3
- <FormButtons
4
- :mode="'dialog'"
5
- :buttonList="buttonList"
6
- @handle-method="handleMethod($event)"
7
- ></FormButtons>
8
- </template>
9
-
10
- <script lang="ts" setup>
11
- import { PropType, computed } from 'vue'
12
- import { FormButtons, ButtonProps } from '../../../forms'
13
-
14
- const emits = defineEmits([
15
- 'handleSave',
16
- 'handleCancel'
17
- ])
18
-
19
- const props = defineProps({
20
- buttons: Object as PropType<ButtonProps[]>,
21
- showSave: {
22
- type: Boolean,
23
- default: true
24
- }
25
- })
26
-
27
- const buttonActions: ButtonProps[] = [
28
- { name: '保存', preIcon: 'mdi:content-save', type: 'primary', flag: 'OK' },
29
- { name: '关闭', preIcon: 'mdi:close', flag: 'CANCEL' },
30
- ]
31
-
32
- const buttonList = computed(() => {
33
- if( props.buttons && props.buttons.length ) return props.buttons
34
-
35
- return buttonActions
36
- })
37
-
38
- // 处理按钮点击事件
39
- function handleMethod(item: ButtonProps) {
40
- switch( item.flag ) {
41
- case 'OK': emits('handleSave'); break
42
- case 'CANCEL': emits('handleCancel'); break
43
- }
44
- }
45
-
46
- </script>
@@ -1,107 +0,0 @@
1
- import { Ref, unref, watchEffect } from 'vue';
2
- import { useTimeoutFn } from '@dt-frames/core';
3
-
4
- export interface UseModalDragMoveContext {
5
- draggable: Ref<boolean>;
6
- destroyOnClose: Ref<boolean | undefined> | undefined;
7
- visible: Ref<boolean>;
8
- }
9
-
10
- export function useDragMove(context: UseModalDragMoveContext) {
11
- const getStyle = (dom: any, attr: any) => {
12
- return getComputedStyle(dom)[attr];
13
- };
14
- const drag = (wrap: any) => {
15
- if (!wrap) return;
16
- wrap.setAttribute('data-drag', unref(context.draggable));
17
- const dialogHeaderEl = wrap.querySelector('.ant-modal-header');
18
- const dragDom = wrap.querySelector('.ant-modal');
19
-
20
- if (!dialogHeaderEl || !dragDom || !unref(context.draggable)) return;
21
-
22
- dialogHeaderEl.style.cursor = 'move';
23
-
24
- dialogHeaderEl.onmousedown = (e: any) => {
25
- if (!e) return;
26
- // 鼠标按下,计算当前元素距离可视区的距离
27
- const disX = e.clientX;
28
- const disY = e.clientY;
29
- const screenWidth = document.body.clientWidth; // body当前宽度
30
- const screenHeight = document.documentElement.clientHeight; // 可见区域高度(应为body高度,可某些环境下无法获取)
31
-
32
- const dragDomWidth = dragDom.offsetWidth; // 对话框宽度
33
- const dragDomheight = dragDom.offsetHeight; // 对话框高度
34
-
35
- const minDragDomLeft = dragDom.offsetLeft;
36
-
37
- const maxDragDomLeft = screenWidth - dragDom.offsetLeft - dragDomWidth;
38
- const minDragDomTop = dragDom.offsetTop;
39
- const maxDragDomTop = screenHeight - dragDom.offsetTop - dragDomheight;
40
- // 获取到的值带px 正则匹配替换
41
- const domLeft = getStyle(dragDom, 'left');
42
- const domTop = getStyle(dragDom, 'top');
43
- let styL = +domLeft;
44
- let styT = +domTop;
45
-
46
- // 注意在ie中 第一次获取到的值为组件自带50% 移动之后赋值为px
47
- if (domLeft.includes('%')) {
48
- styL = +document.body.clientWidth * (+domLeft.replace(/%/g, '') / 100);
49
- styT = +document.body.clientHeight * (+domTop.replace(/%/g, '') / 100);
50
- } else {
51
- styL = +domLeft.replace(/px/g, '');
52
- styT = +domTop.replace(/px/g, '');
53
- }
54
-
55
- document.onmousemove = function (e) {
56
- // 通过事件委托,计算移动的距离
57
- let left = e.clientX - disX;
58
- let top = e.clientY - disY;
59
-
60
- // 边界处理
61
- if (-left > minDragDomLeft) {
62
- left = -minDragDomLeft;
63
- } else if (left > maxDragDomLeft) {
64
- left = maxDragDomLeft;
65
- }
66
-
67
- if (-top > minDragDomTop) {
68
- top = -minDragDomTop;
69
- } else if (top > maxDragDomTop) {
70
- top = maxDragDomTop;
71
- }
72
-
73
- // 移动当前元素
74
- dragDom.style.cssText += `;left:${left + styL}px;top:${top + styT}px;`;
75
- };
76
-
77
- document.onmouseup = () => {
78
- document.onmousemove = null;
79
- document.onmouseup = null;
80
- };
81
- };
82
- };
83
-
84
- const handleDrag = () => {
85
- const dragWraps = document.querySelectorAll('.ant-modal-wrap');
86
- for (const wrap of Array.from(dragWraps)) {
87
- if (!wrap) continue;
88
- const display = getStyle(wrap, 'display');
89
- const draggable = wrap.getAttribute('data-drag');
90
- if (display !== 'none') {
91
- // 拖拽位置
92
- if (draggable === null || unref(context.destroyOnClose)) {
93
- drag(wrap);
94
- }
95
- }
96
- }
97
- };
98
-
99
- watchEffect(() => {
100
- if (!unref(context.visible) || !unref(context.draggable)) {
101
- return;
102
- }
103
- useTimeoutFn(() => {
104
- handleDrag();
105
- }, 30);
106
- });
107
- }
@@ -1,29 +0,0 @@
1
- import { ref, Ref, unref, computed } from "vue"
2
- import { dispatchResize } from '@dt-frames/core'
3
-
4
- interface FullScreenOptions{
5
- wrapClassName: Ref<string | undefined>;
6
- modalWrapperRef: Ref<any>;
7
- extHeightRef: Ref<number>;
8
- }
9
-
10
- export function useFullScreen(options: FullScreenOptions) {
11
- const fullScreenRef = ref(false);
12
-
13
- const getWrapClassName = computed(() => {
14
- const clsName = unref(options.wrapClassName) || '';
15
- return unref(fullScreenRef) ? `fullscreen-modal ${clsName} ` : unref(clsName);
16
- });
17
-
18
- function toggleFullScreen(e: Event) {
19
- e && e.stopPropagation();
20
- fullScreenRef.value = !unref(fullScreenRef);
21
- dispatchResize()
22
- }
23
-
24
- return {
25
- fullScreenRef,
26
- getWrapClassName,
27
- toggleFullScreen
28
- }
29
- }
@@ -1,200 +0,0 @@
1
- import { error, isFunction, Nullable, Recordable } from "@dt-frames/core";
2
- import { ModalProps } from "@dt-frames/core"
3
- import { isEqual } from 'lodash-es'
4
- import { tryOnUnmounted } from '@vueuse/core'
5
- import { ModalMethods, ReturnInnerMethods, ReturnMethods, UseModalInnerReturnType, UseModalReturnType } from '../types/modal.type';
6
- import { computed, getCurrentInstance, nextTick, onUnmounted, reactive, ref, toRaw, unref, watch, watchEffect } from "vue";
7
-
8
- const dataTransfer = reactive<any>({})
9
- const cbTransfer = reactive<any>({})
10
- const visibleData = reactive<{ [key: number]: boolean }>({})
11
-
12
- export function useModalOut(): UseModalReturnType{
13
- const modal = ref<Nullable<ModalMethods>>(null)
14
- const loaded = ref<Nullable<boolean>>(true)
15
- const uid = ref<string>('')
16
-
17
- function register(modalMethod: ModalMethods, uuid: string) {
18
- if( !getCurrentInstance() ) {
19
- throw new Error('useModal只能在setup()或者函数中使用')
20
- }
21
-
22
- uid.value = uuid
23
-
24
- onUnmounted(() => {
25
- modal.value = null
26
- loaded.value = false
27
- dataTransfer[unref(uid)] = null
28
- cbTransfer[unref(uid)] = (rsp?: Recordable) => { }
29
- })
30
-
31
- if( unref(loaded) && modalMethod === unref(modal) ) return
32
-
33
- modal.value = modalMethod
34
- loaded.value = true
35
- modalMethod.emitVisible = (visible: boolean, uid: number) => {
36
- visibleData[uid] = visible
37
- }
38
- }
39
-
40
- const getInstance = () => {
41
- const instance = unref( modal )
42
-
43
- if( !instance ) {
44
- error('useModalOut 实例未定义')
45
- }
46
-
47
- return instance
48
- }
49
-
50
- const methods: ReturnMethods = {
51
- // 设置弹框属性
52
- setModalProps: ( props: Partial<ModalProps> ) => {
53
- getInstance()?.setModalProps(props)
54
- },
55
-
56
- getVisible: computed(() => {
57
- return visibleData[~~unref(uid)]
58
- }),
59
-
60
- redoModalHeight: () => {
61
- getInstance()?.redoModalHeight?.()
62
- },
63
-
64
- openModal: (
65
- params?: {
66
- data?: Recordable,
67
- afterClose?: ( data: Recordable ) => void
68
- },
69
- openOnSet = true
70
- ) => {
71
- getInstance()?.setModalProps({
72
- visible: true
73
- })
74
-
75
- const { data, afterClose } = params || {}
76
-
77
- const id = unref(uid)
78
-
79
- // 设置回调
80
- cbTransfer[unref(uid)] = (rsp?: Recordable) => {
81
- if( afterClose && isFunction(afterClose)) {
82
- afterClose(rsp)
83
- }
84
- }
85
-
86
- if( !data ) return
87
-
88
- if( openOnSet ) {
89
- dataTransfer[id] = toRaw(data);
90
-
91
- return
92
- }
93
-
94
- const equal = isEqual(toRaw(dataTransfer[id]), toRaw(data))
95
- if (!equal) {
96
- dataTransfer[id] = toRaw(data);
97
- }
98
- },
99
-
100
- closeModal: () => {
101
- getInstance()?.setModalProps({ visible: false })
102
- }
103
- }
104
-
105
- return [register, methods]
106
- }
107
-
108
-
109
- export function useModal(props?: Partial<ModalProps>,callbackFn?: Function): UseModalInnerReturnType {
110
- const modalInstanceRef = ref<Nullable<ModalMethods>>(null)
111
- const currentInstance = getCurrentInstance()
112
- const uidRef = ref<string>('')
113
-
114
- const getInstance = () => {
115
- const instance = unref(modalInstanceRef)
116
- if( !instance ) {
117
- error('useModal 实例未定义')
118
- }
119
-
120
- return instance
121
- }
122
-
123
- const register = ( modalInstance: ModalMethods, uuid: string) => {
124
- tryOnUnmounted(() => {
125
- modalInstanceRef.value = null;
126
- })
127
-
128
- uidRef.value = uuid
129
- modalInstanceRef.value = modalInstance
130
-
131
- /**
132
- * 深度监听props的变化,首次监听
133
- * 动态更改表单实例
134
- */
135
- watch(
136
- () => props,
137
- () => props && modalInstance.setModalProps(props),
138
- {
139
- immediate: true,
140
- deep: true
141
- }
142
- )
143
-
144
- currentInstance?.emit('register', modalInstance, uuid)
145
- }
146
-
147
- watchEffect(() => {
148
- const data = dataTransfer[unref(uidRef)]
149
- if (!data) return
150
- if (!callbackFn || !isFunction(callbackFn)) return
151
- nextTick(() => {
152
- callbackFn(data);
153
- })
154
- })
155
-
156
- const methods: ReturnInnerMethods = {
157
- changeLoading: (loading = true) => {
158
- getInstance()?.setModalProps({ loading })
159
- },
160
-
161
- getVisible: computed(() => visibleData[~~unref(uidRef)]),
162
-
163
- // 关闭弹框进行回调
164
- closeModal: (rsp?: Recordable) => {
165
- if(cbTransfer[unref(uidRef)]) cbTransfer[unref(uidRef)](rsp)
166
- getInstance()?.setModalProps({ visible: false })
167
- },
168
-
169
- openModal: <T = any>(visable = true, data?: T, openOnSet = true) => {
170
- getInstance()?.setModalProps({
171
- visible: visable
172
- })
173
-
174
- if( !data ) return
175
-
176
- const id = unref(uidRef)
177
-
178
- if( openOnSet ) {
179
- dataTransfer[id] = toRaw(data);
180
- return;
181
- }
182
-
183
- const equal = isEqual(toRaw(dataTransfer[id]), toRaw(data))
184
- if (!equal) {
185
- dataTransfer[id] = toRaw(data);
186
- }
187
- },
188
-
189
- setModalProps: (props: Partial<ModalProps>) => {
190
- getInstance()?.setModalProps(props);
191
- },
192
-
193
- redoModalHeight: () => {
194
- const callRedo = getInstance()?.redoModalHeight;
195
- callRedo && callRedo();
196
- },
197
- }
198
-
199
- return [register, methods]
200
- }
@@ -1,184 +0,0 @@
1
- <template>
2
- <Modal v-bind="getBindValue" @cancel="handleCancel">
3
- <template #closeIcon v-if="!$slots.closeIcon">
4
- <CloseIcon
5
- :canFullscreen="getBindValue.canFullscreen"
6
- :fullScreen="fullScreenRef"
7
- @cancel="handleCancel"
8
- @fullscreen="toggleFullScreen"
9
- />
10
- </template>
11
-
12
- <template #title v-if="!$slots.title">
13
- {{ getMergeProps.title }}
14
- </template>
15
-
16
- <template #footer v-if="!$slots.footer">
17
- <!-- 默认的footer内容 -->
18
- <ModalFooter :buttons="(propsRef.footer as any)" :showSave="getBindValue.showSave" @handle-save="handleSave" @handle-cancel="handleCancel">
19
- <template #[item]="data" v-for="item in Object.keys($slots)">
20
- <slot :name="item" v-bind="data || {}"></slot>
21
- </template>
22
- </ModalFooter>
23
- </template>
24
-
25
- <ModalWrapper
26
- :useWrapper="getBindValue.useWrapper"
27
- :footerOffset="wrapperFooterOffset"
28
- :fullScreen="fullScreenRef"
29
- ref="modalWrapperRef"
30
- :loading="getBindValue.loading"
31
- :loading-tip="getBindValue.loadingTip"
32
- :minHeight="getBindValue.minHeight"
33
- :height="getWrapperHeight"
34
- :visible="visibleRef"
35
- :modalFooterHeight="modalFooterHeight"
36
- v-bind="omit(getBindValue.wrapperProps, 'visible', 'height', 'modalFooterHeight')"
37
- @ext-height="handleExtHeight"
38
- @height-change="handleHeightChange"
39
- >
40
- <slot></slot>
41
- </ModalWrapper>
42
-
43
- <template #[item]="data" v-for="item in Object.keys(omit($slots, 'default'))">
44
- <slot :name="item" v-bind="data || {}"></slot>
45
- </template>
46
- </Modal>
47
- </template>
48
-
49
- <script lang="ts" setup>
50
- import { computed, unref, ref, watch, getCurrentInstance, nextTick } from 'vue';
51
- import Modal from './components/modal';
52
- import { omit } from 'lodash-es';
53
- import { useFullScreen } from './hooks/useFullScreen';
54
- import { basicProps } from './props';
55
- import ModalWrapper from './components/modal-wrap.vue';
56
- import ModalFooter from './components/modalFooter.vue'
57
-
58
- import CloseIcon from './components/close-icon.vue';
59
- import { isFunction, deepMerge, ModalProps, ModalMethods, isArray } from '@dt-frames/core';
60
-
61
- const visibleRef = ref(false);
62
- const propsRef = ref<Partial<ModalProps>>();
63
- const modalWrapperRef = ref(null);
64
- const extHeightRef = ref(0);
65
-
66
- const props = defineProps( basicProps );
67
- const emits = defineEmits(['visible-change', 'height-change', 'cancel', 'save', 'register', 'update:visible'])
68
-
69
- const modalFooterHeight = computed(() => {
70
- if( isArray(props.footer) ) {
71
- return (unref(propsRef).footer as any).length ? 0 : undefined
72
- }
73
- return props.footer !== undefined && !props.footer ? 0 : undefined
74
- })
75
-
76
- const modalMethods: ModalMethods = {
77
- setModalProps,
78
- emitVisible: undefined,
79
- redoModalHeight: () => {
80
- nextTick(() => {
81
- if (unref(modalWrapperRef)) {
82
- (unref(modalWrapperRef) as any).setModalHeight();
83
- }
84
- });
85
- },
86
- }
87
-
88
- const { getWrapClassName, toggleFullScreen, fullScreenRef } = useFullScreen({
89
- wrapClassName: computed(() => (unref(propsRef) as any)?.wrapClassName),
90
- extHeightRef,
91
- modalWrapperRef
92
- });
93
-
94
- const getMergeProps = computed(() => {
95
- return {
96
- ...props,
97
- ...(unref(propsRef) as any)
98
- }
99
- })
100
-
101
- const getBindValue = computed(() => {
102
- const bindValue = {
103
- ...unref(getMergeProps),
104
- ...(unref(propsRef) as any),
105
- visible: unref(visibleRef),
106
- wrapClassName: unref(getWrapClassName)
107
- }
108
-
109
- let omitArr = unref(fullScreenRef) ? ['height', 'title'] : ['title']
110
-
111
- if( isArray( unref(propsRef).footer ) ) {
112
- omitArr.push( 'footer' )
113
- }
114
-
115
- return omit(bindValue, omitArr);
116
- });
117
-
118
- const getWrapperHeight = computed(() => {
119
- if (unref(fullScreenRef)) return undefined;
120
- return unref(getBindValue).height;
121
- });
122
-
123
- const instance = getCurrentInstance();
124
- if (instance) { emits('register', modalMethods, instance.uid); }
125
-
126
- watch(() => unref(visibleRef), (v) => {
127
- emits('visible-change', v);
128
- emits('update:visible', v);
129
- instance && modalMethods.emitVisible?.(v, instance.uid);
130
- nextTick(() => {
131
- if (props.scrollTop && v && unref(modalWrapperRef)) {
132
- (unref(modalWrapperRef).$el as any).scrollTop = 0;
133
- }
134
- });
135
- },{
136
- immediate: false,
137
- })
138
-
139
- function handleHeightChange(height: string) {
140
- emits('height-change', height);
141
- }
142
-
143
- function handleExtHeight(height: number) {
144
- extHeightRef.value = height;
145
- }
146
-
147
- function setModalProps(props: Partial<ModalProps>) {
148
-
149
- propsRef.value = deepMerge(unref(propsRef) || ({} as any), props);
150
-
151
- if (Reflect.has(props, 'visible')) {
152
- visibleRef.value = !!props.visible;
153
- }
154
- if (Reflect.has(props, 'defaultFullscreen')) {
155
- fullScreenRef.value = !!props.defaultFullscreen;
156
- }
157
- }
158
-
159
- // 弹框保存
160
- function handleSave() {
161
- emits('save')
162
- // handleCancel()
163
- }
164
-
165
- // 弹框关闭
166
- async function handleCancel(e: Event = null) {
167
- if( e ) {
168
- e?.stopPropagation();
169
-
170
- // 过滤自定义关闭按钮的空白区域
171
- if ((e.target as HTMLElement)?.classList?.contains('dt-basic-modal-close--custom')) return;
172
-
173
- if (props.closeFunc && isFunction(props.closeFunc)) {
174
- const isClose: boolean = await props.closeFunc();
175
- visibleRef.value = !isClose;
176
- return;
177
- }
178
- }
179
-
180
- visibleRef.value = false;
181
-
182
- emits('cancel', e)
183
- }
184
- </script>
@@ -1,44 +0,0 @@
1
- import { CSSProperties, PropType, VNodeChild } from "vue"
2
- import { ButtonProps } from "../../forms"
3
-
4
- // 支持设置的属性
5
- const modalProps = {
6
- visible : { type: Boolean },
7
- scrollTop : { type: Boolean, default: true },
8
- height : { type: Number },
9
- minHeight : { type: Number },
10
- draggable : { type: Boolean, default: true },
11
- closeFunc : Function
12
- };
13
-
14
- export const basicProps = Object.assign({}, modalProps, {
15
- defaultFullscreen : { type: Boolean },
16
- canFullscreen : { type: Boolean, default: true },
17
- wrapperFooterOffset : { type: Number, default: 0 },
18
- useWrapper : { type: Boolean, default: true },
19
- loading : { type: Boolean },
20
- loadingTip : { type: String },
21
- closable : { type: Boolean, default: true },
22
- destroyOnClose : { type: Boolean },
23
- title : { type: String },
24
- visible : { type: Boolean },
25
- width : { type: String as PropType<Number | String> },
26
- wrapClassName : { type: String },
27
- zIndex : { type: Number },
28
- centered : { type: Boolean },
29
- showSave : { type: Boolean },
30
-
31
- // 掩膜
32
- mask : { type: Boolean, default: true },
33
- maskClosable : { type: Boolean, default: true },
34
- keyboard : { type: Boolean, default: true },
35
- maskStyle : Object as PropType<CSSProperties>,
36
-
37
- footer : Object as PropType<VNodeChild | JSX.Element | ButtonProps[]>,
38
-
39
- bodyStyle : Object as PropType<CSSProperties>,
40
-
41
- wrapperProps : Object,
42
- afterClose : Function,
43
- getContainer : Function as PropType<() => any>
44
- })
@@ -1,30 +0,0 @@
1
- import { ModalProps, Recordable } from "@dt-frames/core"
2
- import { ComputedRef } from "vue"
3
-
4
- export type ModalMethods = {
5
- setModalProps: ( props: Partial<ModalProps> ) => void
6
- emitVisible?: ( visable: boolean, uid: number ) => void
7
- redoModalHeight?: () => void
8
- }
9
-
10
- export interface ReturnMethods extends ModalMethods{
11
- openModal: (data?: {
12
- data?: Recordable,
13
- afterClose?: ( data: Recordable ) => void
14
- }, openOnSet?: boolean) => void
15
- closeModal: () => void
16
- getVisible?: ComputedRef<boolean>
17
- }
18
-
19
- export interface ReturnInnerMethods extends ModalMethods {
20
- openModal: <T = any>(props?: boolean, data?: T, openOnSet?: boolean) => void
21
- closeModal: (rsp?: Recordable) => void
22
- changeLoading: (loading: boolean) => void
23
- getVisible?: ComputedRef<boolean>
24
- redoModalHeight: () => void
25
- }
26
-
27
- export type RegisterFn = (modalMethods: ModalMethods, uuid?: string) => void
28
-
29
- export type UseModalReturnType = [RegisterFn, ReturnMethods]
30
- export type UseModalInnerReturnType = [RegisterFn, ReturnInnerMethods];
@@ -1,11 +0,0 @@
1
- <template>
2
- <router-view></router-view>
3
- </template>
4
-
5
- <script lang="ts">
6
- import { defineComponent } from 'vue'
7
-
8
- export default defineComponent({
9
- name: 'dt-base-router'
10
- })
11
- </script>
@@ -1,3 +0,0 @@
1
- import DtBaseRouter from './base-router.vue'
2
-
3
- export { DtBaseRouter }
@@ -1 +0,0 @@
1
- export * from './src/index'