@dt-frames/ui 1.0.13 → 1.0.15

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 (208) hide show
  1. package/es/components/curd/src/components/dialog.d.ts +20 -20
  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/useFormActions.d.ts +2 -2
  8. package/es/components/forms/src/index.d.ts +2 -2
  9. package/es/components/forms/src/types/form.type.d.ts +3 -17
  10. package/es/components/index.d.ts +1 -1
  11. package/es/components/modal/src/components/modal.d.ts +2 -2
  12. package/es/components/modal/src/components/modalFooter.d.ts +1 -1
  13. package/es/components/modal/src/index.d.ts +15 -15
  14. package/es/components/modal/src/props.d.ts +1 -1
  15. package/es/components/source/src/hooks/useFetch.d.ts +1 -1
  16. package/es/components/table/src/index.d.ts +3 -3
  17. package/es/components/table/src/props.d.ts +1 -2
  18. package/es/components/tree/src/props.d.ts +8 -1
  19. package/es/components/upload/src/upload.d.ts +3 -3
  20. package/es/index.js +43 -19
  21. package/es/style/components/icons/index.less +1 -1
  22. package/package.json +1 -10
  23. package/vite.config.js +10 -0
  24. package/src/assets/data/icons/actions.ts +0 -427
  25. package/src/assets/data/icons/code.ts +0 -10
  26. package/src/assets/data/icons/commuticate.ts +0 -190
  27. package/src/assets/data/icons/currency.ts +0 -46
  28. package/src/assets/data/icons/devices.ts +0 -128
  29. package/src/assets/data/icons/edit.ts +0 -165
  30. package/src/assets/data/icons/file.ts +0 -104
  31. package/src/assets/data/icons/math.ts +0 -53
  32. package/src/assets/data/icons/message.ts +0 -75
  33. package/src/assets/data/icons/navigate.ts +0 -181
  34. package/src/assets/data/icons/other.ts +0 -333
  35. package/src/assets/data/icons.ts +0 -58
  36. package/src/assets/imgs/header/avatar.png +0 -0
  37. package/src/assets/imgs/logo/logo.png +0 -0
  38. package/src/assets/locales/en_US.json +0 -3
  39. package/src/assets/locales/zh_CN.json +0 -3
  40. package/src/assets/style/index.less +0 -10
  41. package/src/assets/style/reset.less +0 -17
  42. package/src/components/container/index.less +0 -85
  43. package/src/components/container/index.ts +0 -8
  44. package/src/components/container/src/bar.ts +0 -107
  45. package/src/components/container/src/lazy-container.vue +0 -9
  46. package/src/components/container/src/scroll-bar.vue +0 -117
  47. package/src/components/container/src/scroll-container.vue +0 -61
  48. package/src/components/curd/index.ts +0 -5
  49. package/src/components/curd/src/components/dialog.vue +0 -73
  50. package/src/components/curd/src/components/props.ts +0 -32
  51. package/src/components/curd/src/hooks/useCurd.tsx +0 -87
  52. package/src/components/curd/src/types/curd.type.ts +0 -32
  53. package/src/components/excel/index.ts +0 -6
  54. package/src/components/excel/src/export2Excel.ts +0 -44
  55. package/src/components/forms/index.less +0 -107
  56. package/src/components/forms/index.ts +0 -11
  57. package/src/components/forms/src/componentMap.ts +0 -46
  58. package/src/components/forms/src/components/formButton.vue +0 -150
  59. package/src/components/forms/src/components/formIcon.vue +0 -51
  60. package/src/components/forms/src/components/formInputUseDialog.vue +0 -43
  61. package/src/components/forms/src/components/formItem.vue +0 -420
  62. package/src/components/forms/src/components/radioButton.vue +0 -58
  63. package/src/components/forms/src/const/form.const.ts +0 -7
  64. package/src/components/forms/src/hooks/helper.ts +0 -70
  65. package/src/components/forms/src/hooks/useForm.ts +0 -130
  66. package/src/components/forms/src/hooks/useFormActions.ts +0 -63
  67. package/src/components/forms/src/hooks/useFormEvents.ts +0 -248
  68. package/src/components/forms/src/hooks/useFormValue.ts +0 -49
  69. package/src/components/forms/src/hooks/useFormValues.ts +0 -131
  70. package/src/components/forms/src/hooks/useLabelWidth.ts +0 -57
  71. package/src/components/forms/src/index.vue +0 -310
  72. package/src/components/forms/src/prop.ts +0 -80
  73. package/src/components/forms/src/types/form.type.ts +0 -275
  74. package/src/components/icons/index.less +0 -101
  75. package/src/components/icons/index.ts +0 -7
  76. package/src/components/icons/src/pick-icon.vue +0 -119
  77. package/src/components/icons/src/svg-icon.vue +0 -117
  78. package/src/components/iframe/index.less +0 -3
  79. package/src/components/iframe/index.ts +0 -5
  80. package/src/components/iframe/src/index.less +0 -3
  81. package/src/components/iframe/src/index.vue +0 -38
  82. package/src/components/index.ts +0 -53
  83. package/src/components/modal/index.less +0 -60
  84. package/src/components/modal/index.ts +0 -8
  85. package/src/components/modal/src/components/close-icon.vue +0 -46
  86. package/src/components/modal/src/components/modal-wrap.vue +0 -128
  87. package/src/components/modal/src/components/modal.tsx +0 -30
  88. package/src/components/modal/src/components/modalFooter.vue +0 -46
  89. package/src/components/modal/src/hooks/useDrag.ts +0 -107
  90. package/src/components/modal/src/hooks/useFullScreen.ts +0 -29
  91. package/src/components/modal/src/hooks/useModal.ts +0 -200
  92. package/src/components/modal/src/index.vue +0 -184
  93. package/src/components/modal/src/props.ts +0 -44
  94. package/src/components/modal/src/types/modal.type.ts +0 -30
  95. package/src/components/router/base-router.vue +0 -11
  96. package/src/components/router/index.ts +0 -3
  97. package/src/components/source/index.ts +0 -1
  98. package/src/components/source/src/hooks/useFetch.ts +0 -42
  99. package/src/components/source/src/hooks/usePage.ts +0 -3
  100. package/src/components/source/src/hooks/useSource.ts +0 -214
  101. package/src/components/source/src/index.ts +0 -5
  102. package/src/components/source/src/types/source.type.ts +0 -58
  103. package/src/components/source/src/types/table.type.ts +0 -8
  104. package/src/components/table/index.less +0 -179
  105. package/src/components/table/index.ts +0 -7
  106. package/src/components/table/src/components/TableActions.vue +0 -108
  107. package/src/components/table/src/components/TableHeader.vue +0 -78
  108. package/src/components/table/src/components/TableRender.vue +0 -76
  109. package/src/components/table/src/components/editable/CellComponent.ts +0 -57
  110. package/src/components/table/src/components/editable/EditTableCell.vue +0 -181
  111. package/src/components/table/src/components/editable/componentMap.ts +0 -18
  112. package/src/components/table/src/components/editable/index.ts +0 -58
  113. package/src/components/table/src/components/setting/Column.vue +0 -354
  114. package/src/components/table/src/components/setting/Download.vue +0 -55
  115. package/src/components/table/src/components/setting/Fullscreen.vue +0 -43
  116. package/src/components/table/src/components/setting/Size.vue +0 -42
  117. package/src/components/table/src/components/setting/index.vue +0 -64
  118. package/src/components/table/src/const.ts +0 -13
  119. package/src/components/table/src/hooks/useColumns.ts +0 -326
  120. package/src/components/table/src/hooks/useCustomRow.ts +0 -86
  121. package/src/components/table/src/hooks/useDataSource.ts +0 -97
  122. package/src/components/table/src/hooks/useHeaderCode.ts +0 -89
  123. package/src/components/table/src/hooks/useLoading.ts +0 -29
  124. package/src/components/table/src/hooks/usePagination.ts +0 -76
  125. package/src/components/table/src/hooks/useRowSelection.ts +0 -145
  126. package/src/components/table/src/hooks/useRows.ts +0 -30
  127. package/src/components/table/src/hooks/useTable.ts +0 -90
  128. package/src/components/table/src/hooks/useTableHeader.ts +0 -48
  129. package/src/components/table/src/hooks/useTableInstance.ts +0 -29
  130. package/src/components/table/src/hooks/useTableScroll.ts +0 -229
  131. package/src/components/table/src/index.vue +0 -212
  132. package/src/components/table/src/props.ts +0 -160
  133. package/src/components/table/src/types/table.type.ts +0 -160
  134. package/src/components/table/src/types/tableHeader.type.ts +0 -27
  135. package/src/components/tree/index.less +0 -41
  136. package/src/components/tree/index.ts +0 -5
  137. package/src/components/tree/src/components/TreeHeader.vue +0 -97
  138. package/src/components/tree/src/hooks/useTree.ts +0 -239
  139. package/src/components/tree/src/index.vue +0 -392
  140. package/src/components/tree/src/props.ts +0 -133
  141. package/src/components/tree/src/type/tree.ts +0 -105
  142. package/src/components/tree/src/utils/tree.ts +0 -73
  143. package/src/components/type.ts +0 -0
  144. package/src/components/upload/index.less +0 -35
  145. package/src/components/upload/index.ts +0 -5
  146. package/src/components/upload/src/helper.ts +0 -60
  147. package/src/components/upload/src/props.ts +0 -51
  148. package/src/components/upload/src/upload.vue +0 -191
  149. package/src/directives/icon.ts +0 -36
  150. package/src/directives/index.ts +0 -26
  151. package/src/directives/permission.ts +0 -20
  152. package/src/global.d.ts +0 -8
  153. package/src/index.ts +0 -4
  154. package/src/theme/content/index.vue +0 -37
  155. package/src/theme/feature/back-top.vue +0 -11
  156. package/src/theme/feature/index.vue +0 -7
  157. package/src/theme/footer/index.less +0 -16
  158. package/src/theme/footer/index.vue +0 -24
  159. package/src/theme/header/components/bread-crumb.vue +0 -26
  160. package/src/theme/header/components/fullscreen.vue +0 -12
  161. package/src/theme/header/components/handler.ts +0 -81
  162. package/src/theme/header/components/index.ts +0 -21
  163. package/src/theme/header/components/lang-picker.vue +0 -36
  164. package/src/theme/header/components/logo.vue +0 -35
  165. package/src/theme/header/components/menu-search.vue +0 -62
  166. package/src/theme/header/components/notify.vue +0 -22
  167. package/src/theme/header/components/setting-theme.vue +0 -123
  168. package/src/theme/header/components/theme-drawer/enum.ts +0 -12
  169. package/src/theme/header/components/theme-drawer/feature.vue +0 -75
  170. package/src/theme/header/components/theme-drawer/index.ts +0 -7
  171. package/src/theme/header/components/theme-drawer/menu-type.vue +0 -40
  172. package/src/theme/header/components/theme-drawer/select-item.vue +0 -46
  173. package/src/theme/header/components/theme-drawer/switch-item.vue +0 -39
  174. package/src/theme/header/components/theme-drawer/theme-color.vue +0 -26
  175. package/src/theme/header/components/trigger.vue +0 -14
  176. package/src/theme/header/components/user-info.vue +0 -60
  177. package/src/theme/header/const/index.ts +0 -40
  178. package/src/theme/header/helper/menu-tree.ts +0 -64
  179. package/src/theme/header/index.less +0 -442
  180. package/src/theme/header/index.ts +0 -0
  181. package/src/theme/header/index.vue +0 -96
  182. package/src/theme/header/multiple-header.vue +0 -67
  183. package/src/theme/header/set-theme.less +0 -68
  184. package/src/theme/index.ts +0 -3
  185. package/src/theme/sider/components/basic-menu/basic-menu-item.vue +0 -14
  186. package/src/theme/sider/components/basic-menu/basic-menu.vue +0 -122
  187. package/src/theme/sider/components/basic-menu/basic-sub-menu-item.vue +0 -46
  188. package/src/theme/sider/components/basic-menu/menu-item-content.vue +0 -13
  189. package/src/theme/sider/components/drag-bar.vue +0 -26
  190. package/src/theme/sider/components/layout-menu.vue +0 -132
  191. package/src/theme/sider/components/props.ts +0 -97
  192. package/src/theme/sider/components/sider-trigger.vue +0 -24
  193. package/src/theme/sider/helper/sider.ts +0 -52
  194. package/src/theme/sider/helper/split-menu.ts +0 -146
  195. package/src/theme/sider/hooks/useDragLine.ts +0 -86
  196. package/src/theme/sider/hooks/useOpenKeys.ts +0 -57
  197. package/src/theme/sider/index.less +0 -203
  198. package/src/theme/sider/index.vue +0 -88
  199. package/src/theme/tabs/components/TabContent.vue +0 -36
  200. package/src/theme/tabs/components/TabRedo.vue +0 -18
  201. package/src/theme/tabs/hooks/useMultifyTabs.ts +0 -96
  202. package/src/theme/tabs/hooks/useTabDropdown.ts +0 -89
  203. package/src/theme/tabs/index.less +0 -165
  204. package/src/theme/tabs/index.vue +0 -98
  205. package/src/theme/tabs/types/tabs.type.ts +0 -8
  206. package/src/theme/theme.less +0 -67
  207. package/src/theme/theme.vue +0 -90
  208. 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'