@dt-frames/ui 1.0.0 → 1.0.1

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 (165) hide show
  1. package/package.json +1 -10
  2. package/src/assets/data/icons/actions.ts +0 -427
  3. package/src/assets/data/icons/code.ts +0 -10
  4. package/src/assets/data/icons/commuticate.ts +0 -190
  5. package/src/assets/data/icons/currency.ts +0 -46
  6. package/src/assets/data/icons/devices.ts +0 -128
  7. package/src/assets/data/icons/edit.ts +0 -165
  8. package/src/assets/data/icons/file.ts +0 -104
  9. package/src/assets/data/icons/math.ts +0 -53
  10. package/src/assets/data/icons/message.ts +0 -75
  11. package/src/assets/data/icons/navigate.ts +0 -181
  12. package/src/assets/data/icons/other.ts +0 -333
  13. package/src/assets/data/icons.ts +0 -58
  14. package/src/assets/imgs/logo/logo.png +0 -0
  15. package/src/assets/locales/en_US.json +0 -3
  16. package/src/assets/locales/zh_CN.json +0 -3
  17. package/src/assets/style/index.less +0 -10
  18. package/src/assets/style/reset.less +0 -20
  19. package/src/components/container/index.less +0 -85
  20. package/src/components/container/index.ts +0 -8
  21. package/src/components/container/src/bar.ts +0 -107
  22. package/src/components/container/src/lazy-container.vue +0 -9
  23. package/src/components/container/src/scroll-bar.vue +0 -117
  24. package/src/components/container/src/scroll-container.vue +0 -61
  25. package/src/components/curd/index.ts +0 -5
  26. package/src/components/curd/src/components/dialog.vue +0 -65
  27. package/src/components/curd/src/components/props.ts +0 -32
  28. package/src/components/curd/src/hooks/useCurd.tsx +0 -72
  29. package/src/components/curd/src/types/curd.type.ts +0 -29
  30. package/src/components/excel/index.ts +0 -6
  31. package/src/components/excel/src/export2Excel.ts +0 -44
  32. package/src/components/forms/index.ts +0 -12
  33. package/src/components/forms/src/componentMap.ts +0 -44
  34. package/src/components/forms/src/components/formButton.vue +0 -150
  35. package/src/components/forms/src/components/formIcon.vue +0 -50
  36. package/src/components/forms/src/components/formItem.vue +0 -407
  37. package/src/components/forms/src/components/radioButton.vue +0 -58
  38. package/src/components/forms/src/const/form.const.ts +0 -7
  39. package/src/components/forms/src/hooks/helper.ts +0 -70
  40. package/src/components/forms/src/hooks/useForm.ts +0 -130
  41. package/src/components/forms/src/hooks/useFormActions.ts +0 -63
  42. package/src/components/forms/src/hooks/useFormEvents.ts +0 -247
  43. package/src/components/forms/src/hooks/useFormValue.ts +0 -49
  44. package/src/components/forms/src/hooks/useFormValues.ts +0 -131
  45. package/src/components/forms/src/hooks/useLabelWidth.ts +0 -57
  46. package/src/components/forms/src/index.less +0 -82
  47. package/src/components/forms/src/index.vue +0 -306
  48. package/src/components/forms/src/prop.ts +0 -80
  49. package/src/components/forms/src/types/form.type.ts +0 -269
  50. package/src/components/icons/index.ts +0 -7
  51. package/src/components/icons/src/index.less +0 -96
  52. package/src/components/icons/src/pick-icon.vue +0 -117
  53. package/src/components/icons/src/svg-icon.vue +0 -117
  54. package/src/components/iframe/index.ts +0 -5
  55. package/src/components/iframe/src/index.less +0 -3
  56. package/src/components/iframe/src/index.vue +0 -38
  57. package/src/components/index.ts +0 -46
  58. package/src/components/modal/index.ts +0 -8
  59. package/src/components/modal/src/components/close-icon.vue +0 -47
  60. package/src/components/modal/src/components/modal-wrap.vue +0 -118
  61. package/src/components/modal/src/components/modal.tsx +0 -30
  62. package/src/components/modal/src/components/modalFooter.vue +0 -38
  63. package/src/components/modal/src/hooks/useDrag.ts +0 -107
  64. package/src/components/modal/src/hooks/useFullScreen.ts +0 -27
  65. package/src/components/modal/src/hooks/useModal.ts +0 -177
  66. package/src/components/modal/src/index.less +0 -60
  67. package/src/components/modal/src/index.vue +0 -173
  68. package/src/components/modal/src/props.ts +0 -43
  69. package/src/components/modal/src/types/modal.type.ts +0 -27
  70. package/src/components/router/base-router.vue +0 -11
  71. package/src/components/router/index.ts +0 -3
  72. package/src/components/source/index.ts +0 -1
  73. package/src/components/source/src/hooks/useFetch.ts +0 -70
  74. package/src/components/source/src/hooks/usePage.ts +0 -3
  75. package/src/components/source/src/hooks/useSource.ts +0 -178
  76. package/src/components/source/src/index.ts +0 -5
  77. package/src/components/source/src/types/source.type.ts +0 -68
  78. package/src/components/source/src/types/table.type.ts +0 -8
  79. package/src/components/table/index.ts +0 -7
  80. package/src/components/table/src/components/TableActions.vue +0 -108
  81. package/src/components/table/src/components/TableHeader.vue +0 -77
  82. package/src/components/table/src/components/TableRender.vue +0 -76
  83. package/src/components/table/src/components/setting/Column.vue +0 -355
  84. package/src/components/table/src/components/setting/Download.vue +0 -55
  85. package/src/components/table/src/components/setting/Fullscreen.vue +0 -43
  86. package/src/components/table/src/components/setting/Size.vue +0 -42
  87. package/src/components/table/src/components/setting/index.vue +0 -64
  88. package/src/components/table/src/const.ts +0 -13
  89. package/src/components/table/src/hooks/useColumns.ts +0 -319
  90. package/src/components/table/src/hooks/useCustomRow.ts +0 -0
  91. package/src/components/table/src/hooks/useDataSource.ts +0 -99
  92. package/src/components/table/src/hooks/useLoading.ts +0 -29
  93. package/src/components/table/src/hooks/usePagination.ts +0 -76
  94. package/src/components/table/src/hooks/useRowSelection.ts +0 -146
  95. package/src/components/table/src/hooks/useRows.ts +0 -30
  96. package/src/components/table/src/hooks/useTable.ts +0 -77
  97. package/src/components/table/src/hooks/useTableHeader.ts +0 -48
  98. package/src/components/table/src/hooks/useTableInstance.ts +0 -29
  99. package/src/components/table/src/hooks/useTableScroll.ts +0 -227
  100. package/src/components/table/src/index.less +0 -162
  101. package/src/components/table/src/index.vue +0 -198
  102. package/src/components/table/src/props.ts +0 -152
  103. package/src/components/table/src/types/table.type.ts +0 -133
  104. package/src/components/table/src/types/tableHeader.type.ts +0 -27
  105. package/src/components/type.ts +0 -0
  106. package/src/directives/icon.ts +0 -36
  107. package/src/directives/index.ts +0 -26
  108. package/src/directives/permission.ts +0 -21
  109. package/src/global.d.ts +0 -8
  110. package/src/index.ts +0 -4
  111. package/src/theme/content/index.vue +0 -37
  112. package/src/theme/feature/back-top.vue +0 -11
  113. package/src/theme/feature/index.vue +0 -7
  114. package/src/theme/footer/index.less +0 -16
  115. package/src/theme/footer/index.vue +0 -24
  116. package/src/theme/header/components/bread-crumb.vue +0 -26
  117. package/src/theme/header/components/fullscreen.vue +0 -14
  118. package/src/theme/header/components/handler.ts +0 -81
  119. package/src/theme/header/components/index.ts +0 -21
  120. package/src/theme/header/components/lang-picker.vue +0 -36
  121. package/src/theme/header/components/logo.vue +0 -33
  122. package/src/theme/header/components/menu-search.vue +0 -62
  123. package/src/theme/header/components/notify.vue +0 -23
  124. package/src/theme/header/components/setting-theme.vue +0 -123
  125. package/src/theme/header/components/theme-drawer/enum.ts +0 -12
  126. package/src/theme/header/components/theme-drawer/feature.vue +0 -75
  127. package/src/theme/header/components/theme-drawer/index.ts +0 -7
  128. package/src/theme/header/components/theme-drawer/menu-type.vue +0 -40
  129. package/src/theme/header/components/theme-drawer/select-item.vue +0 -46
  130. package/src/theme/header/components/theme-drawer/switch-item.vue +0 -39
  131. package/src/theme/header/components/theme-drawer/theme-color.vue +0 -26
  132. package/src/theme/header/components/trigger.vue +0 -14
  133. package/src/theme/header/components/user-info.vue +0 -43
  134. package/src/theme/header/const/index.ts +0 -40
  135. package/src/theme/header/helper/menu-tree.ts +0 -67
  136. package/src/theme/header/index.less +0 -438
  137. package/src/theme/header/index.ts +0 -0
  138. package/src/theme/header/index.vue +0 -96
  139. package/src/theme/header/multiple-header.vue +0 -67
  140. package/src/theme/header/set-theme.less +0 -68
  141. package/src/theme/index.ts +0 -3
  142. package/src/theme/sider/components/basic-menu/basic-menu-item.vue +0 -14
  143. package/src/theme/sider/components/basic-menu/basic-menu.vue +0 -122
  144. package/src/theme/sider/components/basic-menu/basic-sub-menu-item.vue +0 -46
  145. package/src/theme/sider/components/basic-menu/menu-item-content.vue +0 -13
  146. package/src/theme/sider/components/drag-bar.vue +0 -26
  147. package/src/theme/sider/components/layout-menu.vue +0 -132
  148. package/src/theme/sider/components/props.ts +0 -97
  149. package/src/theme/sider/components/sider-trigger.vue +0 -24
  150. package/src/theme/sider/helper/sider.ts +0 -52
  151. package/src/theme/sider/helper/split-menu.ts +0 -147
  152. package/src/theme/sider/hooks/useDragLine.ts +0 -86
  153. package/src/theme/sider/hooks/useOpenKeys.ts +0 -57
  154. package/src/theme/sider/index.less +0 -203
  155. package/src/theme/sider/index.vue +0 -88
  156. package/src/theme/tabs/components/TabContent.vue +0 -37
  157. package/src/theme/tabs/components/TabRedo.vue +0 -18
  158. package/src/theme/tabs/hooks/useMultifyTabs.ts +0 -96
  159. package/src/theme/tabs/hooks/useTabDropdown.ts +0 -89
  160. package/src/theme/tabs/index.less +0 -165
  161. package/src/theme/tabs/index.vue +0 -98
  162. package/src/theme/tabs/types/tabs.type.ts +0 -8
  163. package/src/theme/theme.less +0 -66
  164. package/src/theme/theme.vue +0 -89
  165. package/src/theme/transition.less +0 -99
@@ -1,8 +0,0 @@
1
- import { useModal, useModalOut } from './src/hooks/useModal'
2
- import DtModal from './src/index.vue'
3
-
4
- export {
5
- DtModal,
6
- useModal,
7
- useModalOut
8
- }
@@ -1,47 +0,0 @@
1
- <template>
2
- <div :class="getClass">
3
- <template v-if="canFullscreen">
4
- <Tooltip title="退出全屏" placement="bottom" v-if="fullScreen">
5
- <i v-icon="'ic:baseline-fullscreen-exit'" @click="handleFullScreen" />
6
- </Tooltip>
7
- <Tooltip title="全屏" placement="bottom" v-else>
8
- <i v-icon="'ic:baseline-fullscreen'" @click="handleFullScreen" />
9
- </Tooltip>
10
- </template>
11
-
12
- <DtIcon icon-class="mdi:close" @click="handleCancel" />
13
- </div>
14
- </template>
15
-
16
- <script lang="ts" setup>
17
- import { computed } from 'vue';
18
- import { Tooltip } from 'ant-design-vue';
19
- import { DtIcon } from '../../../icons';
20
-
21
- const props = defineProps({
22
- canFullscreen: { type: Boolean, default: true },
23
- fullScreen: { type: Boolean }
24
- });
25
-
26
- const emit = defineEmits(['cancel', 'fullscreen']);
27
-
28
- const getClass = computed(() => {
29
- return [
30
- 'dt-basic-modal-close',
31
- `dt-basic-modal-close--custom`,
32
- {
33
- [`dt-basic-modal-close--can-full`]: props.canFullscreen,
34
- }
35
- ]
36
- });
37
-
38
- function handleCancel(e: Event) {
39
- emit('cancel', e);
40
- }
41
-
42
- function handleFullScreen(e: Event) {
43
- e?.stopPropagation();
44
- e?.preventDefault();
45
- emit('fullscreen');
46
- }
47
- </script>
@@ -1,118 +0,0 @@
1
- <template>
2
- <ScrollContainer ref="wrapperRef">
3
- <div ref="spinRef" :style="spinStyle">
4
- <slot></slot>
5
- </div>
6
- </ScrollContainer>
7
- </template>
8
-
9
- <script setup lang="ts">
10
- import { ref, unref, computed, onMounted, watchEffect, watch, nextTick } from 'vue';
11
- import { ScrollContainer } from '../../../container';
12
- import { windowResizeFn } from '@dt-frames/core';
13
-
14
- const wrapperRef = ref(null);
15
- const spinRef = ref(null);
16
- const realHeightRef = ref(0);
17
- const minRealHeightRef = ref(0);
18
- let realHeight = 0;
19
-
20
- const props = defineProps({
21
- loading : { type: Boolean },
22
- useWrapper : { type: Boolean, default: true },
23
- modalHeaderHeight : { type: Number, default: 55 },
24
- modalFooterHeight : { type: Number, default: 58 },
25
- minHeight : { type: Number, default: 200 },
26
- height : { type: Number },
27
- footerOffset : { type: Number, default: 0 },
28
- visible : { type: Boolean },
29
- fullScreen : { type: Boolean },
30
- loadingTip : { type: String },
31
- });
32
-
33
- const emits = defineEmits(['ext-height', 'height-change']);
34
-
35
- const spinStyle = computed(() => {
36
- return {
37
- minHeight: `${props.minHeight}px`,
38
- [props.fullScreen ? 'height' : 'maxHeight']: `${unref(realHeightRef)}px`,
39
- };
40
- });
41
-
42
- onMounted(() => {
43
- const { modalHeaderHeight, modalFooterHeight } = props;
44
- emits('ext-height', modalHeaderHeight + modalFooterHeight);
45
- });
46
-
47
- async function setModalHeight() {
48
- if (!props.visible) return;
49
- const wrapperRefDom = unref(wrapperRef);
50
- if (!wrapperRefDom) return;
51
-
52
- const bodyDom = wrapperRefDom.$el.parentElement;
53
- if (!bodyDom) return;
54
- bodyDom.style.padding = '0';
55
- await nextTick();
56
-
57
- try {
58
- const modalDom = bodyDom.parentElement && bodyDom.parentElement.parentElement;
59
- if (!modalDom) return;
60
-
61
- const modalRect = getComputedStyle(modalDom as Element).top;
62
- const modalTop = Number.parseInt(modalRect);
63
-
64
- let maxHeight =
65
- window.innerHeight -
66
- modalTop * 2 +
67
- (props.footerOffset! || 0) -
68
- props.modalFooterHeight -
69
- props.modalHeaderHeight;
70
-
71
- // 距离顶部过进会出现滚动条
72
- if (modalTop < 40) {
73
- maxHeight -= 26;
74
- }
75
- await nextTick();
76
- const spinEl = unref(spinRef);
77
-
78
- if (!spinEl) return;
79
- await nextTick();
80
- realHeight = spinEl.scrollHeight;
81
-
82
- if (props.fullScreen) {
83
- console.log(props.modalFooterHeight,props.modalHeaderHeight)
84
- realHeightRef.value =
85
- window.innerHeight - props.modalFooterHeight - props.modalHeaderHeight;
86
- } else {
87
- realHeightRef.value = props.height
88
- ? props.height
89
- : realHeight > maxHeight
90
- ? maxHeight
91
- : realHeight;
92
- }
93
- emits('height-change', unref(realHeightRef));
94
- } catch (error) {
95
- console.log(error);
96
- }
97
-
98
- }
99
-
100
- windowResizeFn(setModalHeight.bind(null, false));
101
-
102
- watchEffect(() => {
103
- props.useWrapper && setModalHeight();
104
- });
105
-
106
- watch(
107
- () => props.fullScreen,
108
- (v) => {
109
- setModalHeight();
110
- if (!v) {
111
- realHeightRef.value = minRealHeightRef.value;
112
- } else {
113
- minRealHeightRef.value = realHeightRef.value;
114
- }
115
- },
116
- );
117
-
118
- </script>
@@ -1,30 +0,0 @@
1
- import { defineComponent, Slots, 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 } as any;
27
- return <Modal {...propsData}>{extendSlots(slots as any)}</Modal>;
28
- };
29
- }
30
- })
@@ -1,38 +0,0 @@
1
- <template>
2
- <slot name="appendFooter"></slot>
3
- <FormButtons
4
- :mode="'dialog'"
5
- :buttonList="buttonActions"
6
- @handle-method="handleMethod($event)"
7
- ></FormButtons>
8
- </template>
9
-
10
- <script lang="ts" setup>
11
- import { FormButtons, ButtonProps } from '../../../forms';
12
-
13
- const emits = defineEmits([
14
- 'handleSave',
15
- 'handleCancel'
16
- ])
17
-
18
- const props = defineProps({
19
- showSave: {
20
- type: Boolean,
21
- default: true
22
- }
23
- })
24
-
25
- const buttonActions: ButtonProps[] = [
26
- { name: '保存', preIcon: 'mdi:content-save', type: 'primary', flag: 'OK', show: props.showSave },
27
- { name: '关闭', preIcon: 'mdi:close', flag: 'CANCEL' },
28
- ]
29
-
30
- // 处理按钮点击事件
31
- function handleMethod(item: ButtonProps) {
32
- switch( item.flag ) {
33
- case 'OK': emits('handleSave'); break
34
- case 'CANCEL': emits('handleCancel'); break
35
- }
36
- }
37
-
38
- </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,27 +0,0 @@
1
- import { ref, Ref, unref, computed } from "vue";
2
-
3
- interface FullScreenOptions{
4
- wrapClassName: Ref<string | undefined>;
5
- modalWrapperRef: Ref<any>;
6
- extHeightRef: Ref<number>;
7
- }
8
-
9
- export function useFullScreen(options: FullScreenOptions) {
10
- const fullScreenRef = ref(false);
11
-
12
- const getWrapClassName = computed(() => {
13
- const clsName = unref(options.wrapClassName) || '';
14
- return unref(fullScreenRef) ? `fullscreen-modal ${clsName} ` : unref(clsName);
15
- });
16
-
17
- function toggleFullScreen(e: Event) {
18
- e && e.stopPropagation();
19
- fullScreenRef.value = !unref(fullScreenRef);
20
- }
21
-
22
- return {
23
- fullScreenRef,
24
- getWrapClassName,
25
- toggleFullScreen
26
- }
27
- }
@@ -1,177 +0,0 @@
1
- import { error, isFunction, Nullable } 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 { basicProps } from '../props'
6
- import { ModalMethods, ReturnInnerMethods, ReturnMethods, UseModalInnerReturnType, UseModalReturnType } from '../types/modal.type';
7
- import { computed, ExtractPropTypes, getCurrentInstance, nextTick, onUnmounted, reactive, ref, toRaw, unref, watch, watchEffect } from "vue";
8
-
9
- const dataTransfer = 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
- })
29
-
30
- if( unref(loaded) && modalMethod === unref(modal) ) return
31
-
32
- modal.value = modalMethod
33
- loaded.value = true
34
- modalMethod.emitVisible = (visible: boolean, uid: number) => {
35
- visibleData[uid] = visible
36
- }
37
- }
38
-
39
- const getInstance = () => {
40
- const instance = unref( modal )
41
-
42
- if( !instance ) {
43
- error('useModalOut 实例未定义')
44
- }
45
-
46
- return instance
47
- }
48
-
49
- const methods: ReturnMethods = {
50
- // 设置弹框属性
51
- setModalProps: ( props: Partial<ModalProps> ) => {
52
- getInstance()?.setModalProps(props)
53
- },
54
-
55
- getVisible: computed(() => {
56
- return visibleData[~~unref(uid)]
57
- }),
58
-
59
- redoModalHeight: () => {
60
- getInstance()?.redoModalHeight?.()
61
- },
62
-
63
- openModal: <T = any>(visable = true, data?: T, openOnSet = true) => {
64
- getInstance()?.setModalProps({
65
- visible: visable
66
- })
67
-
68
- if( !data ) return
69
-
70
- const id = unref(uid)
71
-
72
- if( openOnSet ) {
73
- dataTransfer[id] = toRaw(data);
74
- return;
75
- }
76
-
77
- const equal = isEqual(toRaw(dataTransfer[id]), toRaw(data))
78
- if (!equal) {
79
- dataTransfer[id] = toRaw(data);
80
- }
81
- },
82
-
83
- closeModal: () => {
84
- getInstance()?.setModalProps({ visible: false })
85
- }
86
- }
87
-
88
- return [register, methods]
89
- }
90
-
91
-
92
- export function useModal(props?: Partial<ModalProps>,callbackFn?: Function): UseModalInnerReturnType {
93
- const modalInstanceRef = ref<Nullable<ModalMethods>>(null)
94
- const currentInstance = getCurrentInstance()
95
- const uidRef = ref<string>('')
96
-
97
- const getInstance = () => {
98
- const instance = unref(modalInstanceRef)
99
- if( !instance ) {
100
- error('useModal 实例未定义')
101
- }
102
-
103
- return instance
104
- }
105
-
106
- const register = ( modalInstance: ModalMethods, uuid: string) => {
107
- tryOnUnmounted(() => {
108
- modalInstanceRef.value = null;
109
- })
110
-
111
- uidRef.value = uuid
112
- modalInstanceRef.value = modalInstance
113
-
114
- /**
115
- * 深度监听props的变化,首次监听
116
- * 动态更改表单实例
117
- */
118
- watch(
119
- () => props,
120
- () => props && modalInstance.setModalProps(props),
121
- {
122
- immediate: true,
123
- deep: true
124
- }
125
- )
126
-
127
- currentInstance?.emit('register', modalInstance, uuid)
128
- }
129
-
130
- watchEffect(() => {
131
- const data = dataTransfer[unref(uidRef)]
132
- if (!data) return
133
- if (!callbackFn || !isFunction(callbackFn)) return
134
- nextTick(() => {
135
- callbackFn(data);
136
- })
137
- })
138
-
139
- const methods: ReturnInnerMethods = {
140
- changeLoading: (loading = true) => {
141
- getInstance()?.setModalProps({ loading })
142
- },
143
- getVisible: computed(() => visibleData[~~unref(uidRef)]),
144
- closeModal: () => {
145
- getInstance()?.setModalProps({ visible: false });
146
- },
147
- openModal: <T = any>(visable = true, data?: T, openOnSet = true) => {
148
- getInstance()?.setModalProps({
149
- visible: visable
150
- })
151
-
152
- if( !data ) return
153
-
154
- const id = unref(uidRef)
155
-
156
- if( openOnSet ) {
157
- dataTransfer[id] = toRaw(data);
158
- return;
159
- }
160
-
161
- const equal = isEqual(toRaw(dataTransfer[id]), toRaw(data))
162
- if (!equal) {
163
- dataTransfer[id] = toRaw(data);
164
- }
165
- },
166
- setModalProps: (props: Partial<ModalProps>) => {
167
- getInstance()?.setModalProps(props);
168
- },
169
-
170
- redoModalHeight: () => {
171
- const callRedo = getInstance()?.redoModalHeight;
172
- callRedo && callRedo();
173
- },
174
- }
175
-
176
- return [register, methods]
177
- }
@@ -1,60 +0,0 @@
1
- .fullscreen-modal {
2
- overflow: hidden;
3
-
4
- .ant-modal {
5
- top: 0 !important;
6
- right: 0 !important;
7
- bottom: 0 !important;
8
- left: 0 !important;
9
- width: 100% !important;
10
- height: 100%;
11
- padding: 0;
12
-
13
- &-content {
14
- height: 100%;
15
- }
16
- }
17
- }
18
-
19
- .dt-basic-modal-close {
20
- display: flex;
21
- height: 95%;
22
- align-items: center;
23
- justify-content: space-around;
24
-
25
- > span {
26
- margin-left: 48px;
27
- font-size: 16px;
28
- }
29
-
30
- &--can-full {
31
- margin-right: 15px;
32
- > i {
33
- padding-right: 15px;
34
- width: 40px;
35
- }
36
- }
37
-
38
- &:not(&--can-full) {
39
- > i:nth-child(1) {
40
- &:hover {
41
- font-weight: 700;
42
- }
43
- }
44
-
45
- &>i:nth-child(1) {
46
- display: inline-block;
47
- padding: 10px;
48
-
49
- &:hover {
50
- color: @primary-color;
51
- }
52
- }
53
-
54
- &>i:last-child {
55
- &:hover {
56
- color: @error-color;
57
- }
58
- }
59
- }
60
- }