yuang-framework-ui-pc 1.1.11 → 1.1.12

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.
@@ -0,0 +1,135 @@
1
+ import { PropType, ExtractPropTypes } from 'vue';
2
+ import { dialogProps } from 'element-plus';
3
+ import { StyleValue } from '../ele-app/types';
4
+ import { Resizable, MoveOut, Position } from './types';
5
+
6
+ /**
7
+ * 属性
8
+ */
9
+ export declare const modalProps: {
10
+ appendToBody: {
11
+ type: BooleanConstructor;
12
+ default: boolean;
13
+ };
14
+ draggable: {
15
+ type: BooleanConstructor;
16
+ default: boolean;
17
+ };
18
+ /** 是否可以拖出边界 */
19
+ moveOut: PropType<MoveOut>;
20
+ /** 是否可以拉伸 */
21
+ resizable: PropType<Resizable>;
22
+ /** 初始位置 */
23
+ position: PropType<Position>;
24
+ /** 是否在弹窗关闭后重置位置和大小 */
25
+ resetOnClose: {
26
+ type: BooleanConstructor;
27
+ default: boolean;
28
+ };
29
+ /** 是否显示最大化切换按钮 */
30
+ maxable: BooleanConstructor;
31
+ /** 是否支持打开多个 */
32
+ multiple: BooleanConstructor;
33
+ /** 是否限制在主体内部 */
34
+ inner: BooleanConstructor;
35
+ /** 最小拉伸宽度 */
36
+ minWidth: {
37
+ type: NumberConstructor;
38
+ default: number;
39
+ };
40
+ /** 最小拉伸高度 */
41
+ minHeight: {
42
+ type: NumberConstructor;
43
+ default: number;
44
+ };
45
+ /** 标题栏样式 */
46
+ headerStyle: PropType<StyleValue>;
47
+ /** 标题样式 */
48
+ titleStyle: PropType<StyleValue>;
49
+ /** 主体样式 */
50
+ bodyStyle: PropType<StyleValue>;
51
+ /** 底栏样式 */
52
+ footerStyle: PropType<StyleValue>;
53
+ /** 自定义关闭按钮样式 */
54
+ closeBtnStyle: PropType<StyleValue>;
55
+ /** 自定义全屏按钮样式 */
56
+ fullscreenBtnStyle: PropType<StyleValue>;
57
+ /** 拉伸图标样式 */
58
+ resizeIconStyle: PropType<StyleValue>;
59
+ /** 是否开启响应式 */
60
+ responsive: {
61
+ type: BooleanConstructor;
62
+ default: null;
63
+ };
64
+ /** 是否是表单弹窗 */
65
+ form: BooleanConstructor;
66
+ appendTo: import('element-plus/es/utils/index').EpPropFinalized<(new (...args: any[]) => (string | HTMLElement) & {}) | (() => string | HTMLElement) | ((new (...args: any[]) => (string | HTMLElement) & {}) | (() => string | HTMLElement))[], unknown, unknown, "body", boolean>;
67
+ beforeClose: {
68
+ readonly type: import('vue').PropType<import('element-plus').DialogBeforeCloseFn>;
69
+ readonly required: false;
70
+ readonly validator: ((val: unknown) => boolean) | undefined;
71
+ __epPropKey: true;
72
+ };
73
+ destroyOnClose: BooleanConstructor;
74
+ closeOnClickModal: import('element-plus/es/utils/index').EpPropFinalized<BooleanConstructor, unknown, unknown, true, boolean>;
75
+ closeOnPressEscape: import('element-plus/es/utils/index').EpPropFinalized<BooleanConstructor, unknown, unknown, true, boolean>;
76
+ lockScroll: import('element-plus/es/utils/index').EpPropFinalized<BooleanConstructor, unknown, unknown, true, boolean>;
77
+ modal: import('element-plus/es/utils/index').EpPropFinalized<BooleanConstructor, unknown, unknown, true, boolean>;
78
+ openDelay: import('element-plus/es/utils/index').EpPropFinalized<NumberConstructor, unknown, unknown, 0, boolean>;
79
+ closeDelay: import('element-plus/es/utils/index').EpPropFinalized<NumberConstructor, unknown, unknown, 0, boolean>;
80
+ top: {
81
+ readonly type: import('vue').PropType<string>;
82
+ readonly required: false;
83
+ readonly validator: ((val: unknown) => boolean) | undefined;
84
+ __epPropKey: true;
85
+ };
86
+ modelValue: BooleanConstructor;
87
+ modalClass: StringConstructor;
88
+ width: {
89
+ readonly type: import('vue').PropType<import('element-plus/es/utils/index').EpPropMergeType<readonly [StringConstructor, NumberConstructor], unknown, unknown>>;
90
+ readonly required: false;
91
+ readonly validator: ((val: unknown) => boolean) | undefined;
92
+ __epPropKey: true;
93
+ };
94
+ zIndex: {
95
+ readonly type: import('vue').PropType<number>;
96
+ readonly required: false;
97
+ readonly validator: ((val: unknown) => boolean) | undefined;
98
+ __epPropKey: true;
99
+ };
100
+ trapFocus: BooleanConstructor;
101
+ headerAriaLevel: import('element-plus/es/utils/index').EpPropFinalized<StringConstructor, unknown, unknown, "2", boolean>;
102
+ center: BooleanConstructor;
103
+ alignCenter: BooleanConstructor;
104
+ closeIcon: {
105
+ readonly type: import('vue').PropType<import('element-plus/es/utils/index').EpPropMergeType<(new (...args: any[]) => (string | import('vue').Component<any, any, any, import('vue').ComputedOptions, import('vue').MethodOptions>) & {}) | (() => string | import('vue').Component<any, any, any, import('vue').ComputedOptions, import('vue').MethodOptions>) | ((new (...args: any[]) => (string | import('vue').Component<any, any, any, import('vue').ComputedOptions, import('vue').MethodOptions>) & {}) | (() => string | import('vue').Component<any, any, any, import('vue').ComputedOptions, import('vue').MethodOptions>))[], unknown, unknown>>;
106
+ readonly required: false;
107
+ readonly validator: ((val: unknown) => boolean) | undefined;
108
+ __epPropKey: true;
109
+ };
110
+ overflow: BooleanConstructor;
111
+ fullscreen: BooleanConstructor;
112
+ showClose: import('element-plus/es/utils/index').EpPropFinalized<BooleanConstructor, unknown, unknown, true, boolean>;
113
+ title: import('element-plus/es/utils/index').EpPropFinalized<StringConstructor, unknown, unknown, "", boolean>;
114
+ ariaLevel: import('element-plus/es/utils/index').EpPropFinalized<StringConstructor, unknown, unknown, "2", boolean>;
115
+ };
116
+ export type ModalProps = ExtractPropTypes<typeof modalProps>;
117
+ /**
118
+ * 事件
119
+ */
120
+ export declare const modalEmits: {
121
+ /** 更新全屏状态 */
122
+ 'update:fullscreen': (_fullscreen: boolean) => boolean;
123
+ open: () => boolean;
124
+ opened: () => boolean;
125
+ close: () => boolean;
126
+ closed: () => boolean;
127
+ "update:modelValue": (value: boolean) => boolean;
128
+ openAutoFocus: () => boolean;
129
+ closeAutoFocus: () => boolean;
130
+ };
131
+ export type DialogPropKeys = Array<keyof typeof dialogProps>;
132
+ /**
133
+ * 弹窗组件属性名
134
+ */
135
+ export declare const dialogPropKeys: DialogPropKeys;
@@ -0,0 +1,71 @@
1
+ import { dialogProps, dialogEmits } from "element-plus";
2
+ const modalProps = {
3
+ ...dialogProps,
4
+ appendToBody: {
5
+ type: Boolean,
6
+ default: true
7
+ },
8
+ draggable: {
9
+ type: Boolean,
10
+ default: true
11
+ },
12
+ /** 是否可以拖出边界 */
13
+ moveOut: [Boolean, Array],
14
+ /** 是否可以拉伸 */
15
+ resizable: [Boolean, String],
16
+ /** 初始位置 */
17
+ position: [String, Object],
18
+ /** 是否在弹窗关闭后重置位置和大小 */
19
+ resetOnClose: {
20
+ type: Boolean,
21
+ default: true
22
+ },
23
+ /** 是否显示最大化切换按钮 */
24
+ maxable: Boolean,
25
+ /** 是否支持打开多个 */
26
+ multiple: Boolean,
27
+ /** 是否限制在主体内部 */
28
+ inner: Boolean,
29
+ /** 最小拉伸宽度 */
30
+ minWidth: {
31
+ type: Number,
32
+ default: 260
33
+ },
34
+ /** 最小拉伸高度 */
35
+ minHeight: {
36
+ type: Number,
37
+ default: 160
38
+ },
39
+ /** 标题栏样式 */
40
+ headerStyle: Object,
41
+ /** 标题样式 */
42
+ titleStyle: Object,
43
+ /** 主体样式 */
44
+ bodyStyle: Object,
45
+ /** 底栏样式 */
46
+ footerStyle: Object,
47
+ /** 自定义关闭按钮样式 */
48
+ closeBtnStyle: Object,
49
+ /** 自定义全屏按钮样式 */
50
+ fullscreenBtnStyle: Object,
51
+ /** 拉伸图标样式 */
52
+ resizeIconStyle: Object,
53
+ /** 是否开启响应式 */
54
+ responsive: {
55
+ type: Boolean,
56
+ default: null
57
+ },
58
+ /** 是否是表单弹窗 */
59
+ form: Boolean
60
+ };
61
+ const modalEmits = {
62
+ ...dialogEmits,
63
+ /** 更新全屏状态 */
64
+ "update:fullscreen": (_fullscreen) => true
65
+ };
66
+ const dialogPropKeys = Object.keys(dialogProps);
67
+ export {
68
+ dialogPropKeys,
69
+ modalEmits,
70
+ modalProps
71
+ };
@@ -0,0 +1,8 @@
1
+ @use '../../style/util.scss' as *;
2
+
3
+ /* 弹窗主题变量 */
4
+ @mixin set-modal-var($var) {
5
+ .ele-modal {
6
+ @include set-ele-var('modal', $var);
7
+ }
8
+ }
@@ -0,0 +1 @@
1
+
@@ -0,0 +1,3 @@
1
+ import "element-plus/es/components/dialog/style/index";
2
+ import "element-plus/es/components/icon/style/index";
3
+ import "./index.scss";
@@ -0,0 +1,259 @@
1
+ @use '../../style/themes/default.scss' as *;
2
+ @use '../../style/util.scss' as *;
3
+ @use './css-var.scss' as *;
4
+
5
+ @include set-modal-var($ele);
6
+
7
+ .ele-modal {
8
+ &.el-overlay {
9
+ height: auto;
10
+ }
11
+
12
+ & > .el-overlay-dialog {
13
+ position: absolute;
14
+ display: flex;
15
+ flex-direction: column;
16
+ justify-content: flex-start;
17
+ align-items: center;
18
+
19
+ & > .el-dialog {
20
+ padding: 0;
21
+ flex-shrink: 0;
22
+ position: relative;
23
+ background: eleVar('modal', 'bg');
24
+ border-radius: eleVar('modal', 'radius');
25
+ margin-bottom: eleVar('modal', 'mobile-space');
26
+
27
+ // 让 model 外层不出现滚动条
28
+ position: absolute!important;
29
+ left: 50%;
30
+ top: 50%;
31
+ margin-top: 0!important;
32
+ transform: translate(-50%,-50%);
33
+ max-height: calc(100% - 30px);
34
+ max-width: calc(100% - 30px);
35
+ display: flex;
36
+ flex-direction: column;
37
+
38
+ & > .el-dialog__header,
39
+ & > .el-dialog__footer {
40
+ flex-shrink: 0;
41
+ border: none;
42
+ padding: 0;
43
+ margin: 0;
44
+ }
45
+
46
+ & > .el-dialog__body {
47
+ padding: 0;
48
+ color: inherit;
49
+ font-size: inherit;
50
+
51
+ overflow: scroll;
52
+ }
53
+ }
54
+ }
55
+ }
56
+
57
+ /* header */
58
+ .ele-modal-header {
59
+ display: flex;
60
+ align-items: center;
61
+ box-sizing: border-box;
62
+ padding: eleVar('modal', 'header-padding');
63
+ border-bottom: eleVar('modal', 'header-border');
64
+ }
65
+
66
+ .ele-modal-title {
67
+ flex: 1;
68
+ color: eleVar('modal', 'header-color');
69
+ font-size: eleVar('modal', 'header-font-size');
70
+ line-height: eleVar('modal', 'header-line-height');
71
+ font-weight: eleVar('modal', 'header-font-weight');
72
+ box-sizing: border-box;
73
+ }
74
+
75
+ /* 图标按钮 */
76
+ .ele-modal-tool {
77
+ flex-shrink: 0;
78
+ display: flex;
79
+ align-items: center;
80
+ justify-content: center;
81
+ width: eleVar('modal', 'icon-size');
82
+ height: eleVar('modal', 'icon-size');
83
+ line-height: eleVar('modal', 'icon-size');
84
+ color: eleVar('modal', 'icon-color');
85
+ font-size: eleVar('modal', 'icon-font-size');
86
+ border-radius: eleVar('modal', 'icon-radius');
87
+ transition: (color $transition-base, background-color $transition-base);
88
+ box-sizing: border-box;
89
+ cursor: pointer;
90
+
91
+ &:hover {
92
+ color: eleVar('modal', 'icon-hover-color');
93
+ background: eleVar('modal', 'icon-hover-bg');
94
+ }
95
+
96
+ & + .ele-modal-tool {
97
+ margin-left: eleVar('modal', 'icon-space');
98
+ }
99
+ }
100
+
101
+ /* body */
102
+ .ele-modal-body {
103
+ padding: eleVar('modal', 'body-padding');
104
+ box-sizing: border-box;
105
+
106
+ &.is-form {
107
+ padding: eleVar('modal', 'form-body-padding');
108
+ }
109
+ }
110
+
111
+ /* footer */
112
+ .ele-modal-footer {
113
+ padding: eleVar('modal', 'footer-padding');
114
+ border-top: eleVar('modal', 'footer-border');
115
+ box-sizing: border-box;
116
+ }
117
+
118
+ /* 默认位置 */
119
+ .ele-modal-top > .el-overlay-dialog > .el-dialog {
120
+ margin: 0;
121
+ }
122
+
123
+ .ele-modal-center > .el-overlay-dialog > .el-dialog {
124
+ margin: auto;
125
+ }
126
+
127
+ .ele-modal-bottom > .el-overlay-dialog > .el-dialog {
128
+ margin: auto auto 0 auto;
129
+ }
130
+
131
+ .ele-modal-left > .el-overlay-dialog > .el-dialog {
132
+ margin: auto auto auto 0;
133
+ }
134
+
135
+ .ele-modal-right > .el-overlay-dialog > .el-dialog {
136
+ margin: auto 0 auto auto;
137
+ }
138
+
139
+ .ele-modal-left-top > .el-overlay-dialog > .el-dialog {
140
+ margin: 0 auto 0 0;
141
+ }
142
+
143
+ .ele-modal-left-bottom > .el-overlay-dialog > .el-dialog {
144
+ margin: auto auto 0 0;
145
+ }
146
+
147
+ .ele-modal-right-top > .el-overlay-dialog > .el-dialog {
148
+ margin: 0 0 0 auto;
149
+ }
150
+
151
+ .ele-modal-right-bottom > .el-overlay-dialog > .el-dialog {
152
+ margin: auto 0 0 auto;
153
+ }
154
+
155
+ /* 支持拖拽 */
156
+ .ele-modal-movable > .el-overlay-dialog > .el-dialog > .el-dialog__header {
157
+ cursor: move;
158
+ user-select: none;
159
+ }
160
+
161
+ /* 支持拉伸 */
162
+ .ele-modal-resize-icon {
163
+ position: absolute;
164
+ right: 2px;
165
+ bottom: 2px;
166
+ display: flex;
167
+ align-items: center;
168
+ justify-content: center;
169
+ color: eleVar('modal', 'icon-color');
170
+ font-size: 12px;
171
+ cursor: se-resize;
172
+
173
+ &.is-horizontal {
174
+ cursor: e-resize;
175
+ }
176
+
177
+ &.is-vertical {
178
+ cursor: s-resize;
179
+ }
180
+ }
181
+
182
+ .ele-modal-resizable > .el-overlay-dialog > .el-dialog,
183
+ .ele-modal-fullscreen > .el-overlay-dialog > .el-dialog {
184
+ display: flex;
185
+ flex-direction: column;
186
+
187
+ & > .el-dialog__body {
188
+ flex: auto;
189
+ overflow: auto;
190
+ }
191
+ }
192
+
193
+ /* 全屏 */
194
+ .ele-modal-fullscreen > .el-overlay-dialog > .el-dialog {
195
+ top: 0 !important;
196
+ left: 0 !important;
197
+ margin: 0 !important;
198
+ width: 100% !important;
199
+ height: 100% !important;
200
+ display: flex !important;
201
+ max-width: none !important;
202
+ min-width: auto !important;
203
+ max-height: none !important;
204
+ min-height: auto !important;
205
+ border-radius: 0 !important;
206
+
207
+ & > .el-dialog__header {
208
+ cursor: default;
209
+
210
+ & > .ele-modal-resize-icon {
211
+ display: none;
212
+ }
213
+ }
214
+ }
215
+
216
+ /* 同时打开多个 */
217
+ .ele-modal-container {
218
+ position: absolute;
219
+ top: 0;
220
+ left: 0;
221
+ right: 0;
222
+ bottom: 0;
223
+ width: 100%;
224
+ height: 100%;
225
+ pointer-events: none;
226
+ box-sizing: border-box;
227
+ z-index: elVar('index', 'popper');
228
+ overflow: hidden;
229
+ }
230
+
231
+ .ele-modal-multiple {
232
+ pointer-events: none !important;
233
+ position: absolute !important;
234
+
235
+ & > .el-overlay-dialog {
236
+ pointer-events: none;
237
+ overflow: hidden;
238
+
239
+ & > .el-dialog {
240
+ pointer-events: auto;
241
+ }
242
+ }
243
+ }
244
+
245
+ /* 失活状态 */
246
+ .ele-modal-hide {
247
+ display: none !important;
248
+ }
249
+
250
+ /* 最大宽度适应屏幕 */
251
+ .ele-modal-responsive > .el-overlay-dialog > .el-dialog {
252
+ max-width: calc(100% - #{eleVar('modal', 'mobile-space')} * 2);
253
+ }
254
+
255
+ /* 限制在主体区域 */
256
+ .ele-admin-modals > .ele-modal {
257
+ pointer-events: auto;
258
+ position: absolute !important;
259
+ }
@@ -0,0 +1,43 @@
1
+ /**
2
+ * 拉伸类型
3
+ */
4
+ export type Resizable = boolean | 'horizontal' | 'vertical';
5
+
6
+ /**
7
+ * 拖出边界字符类型
8
+ */
9
+ export type MoveOutValue = 'top' | 'left' | 'right' | 'bottom';
10
+
11
+ /**
12
+ * 拖出边界类型
13
+ */
14
+ export type MoveOut = boolean | MoveOutValue[];
15
+
16
+ /**
17
+ * 初始位置对象类型
18
+ */
19
+ export interface PositionObject {
20
+ top?: string | number;
21
+ left?: string | number;
22
+ bottom?: string | number;
23
+ right?: string | number;
24
+ }
25
+
26
+ /**
27
+ * 初始位置字符类型
28
+ */
29
+ export type PositionValue =
30
+ | 'top'
31
+ | 'bottom'
32
+ | 'left'
33
+ | 'right'
34
+ | 'leftTop'
35
+ | 'leftBottom'
36
+ | 'rightTop'
37
+ | 'rightBottom'
38
+ | 'center';
39
+
40
+ /**
41
+ * 初始位置类型
42
+ */
43
+ export type Position = PositionValue | PositionObject;
@@ -0,0 +1,52 @@
1
+ import { Ref } from 'vue';
2
+ import { ElDialogInstance } from '../ele-app/el';
3
+ import { ModalProps } from './props';
4
+
5
+ export declare const containerClass = "ele-modal-container";
6
+ export declare const wrapperClass = "ele-modal";
7
+ export declare const closedClass = "ele-modal-closed";
8
+ /**
9
+ * 获取弹窗容器
10
+ * @param inner 是否限制在主体内部
11
+ * @param multiple 是否支持同时打开多个
12
+ * @param appendTo 自定义插入的容器
13
+ * @param modalsEl 限制在主体内部时的容器
14
+ */
15
+ export declare function getModalContainer(inner?: boolean, multiple?: boolean, appendTo?: string | HTMLElement, modalsEl?: HTMLElement | null): HTMLElement | string;
16
+ /**
17
+ * 弹窗支持移动
18
+ * @param dialogRef 弹窗实例
19
+ * @param props 属性
20
+ * @param isFullscreen 全屏状态
21
+ */
22
+ export declare function useModalMove(dialogRef: Ref<ElDialogInstance>, props: ModalProps, isFullscreen: Ref<boolean>): {
23
+ handleHeaderMousedown: (e: MouseEvent) => void;
24
+ handleHeaderTouchstart: (e: TouchEvent) => void;
25
+ };
26
+ /**
27
+ * 弹窗支持拉伸
28
+ * @param dialogRef 弹窗实例
29
+ * @param props 属性
30
+ * @param isFullscreen 全屏状态
31
+ */
32
+ export declare function useModalResize(dialogRef: Ref<ElDialogInstance>, props: ModalProps, isFullscreen: Ref<boolean>): {
33
+ handleResizeMousedown: (e: MouseEvent) => void;
34
+ handleResizeTouchstart: (e: TouchEvent) => void;
35
+ };
36
+ /**
37
+ * 弹窗事件处理
38
+ * @param dialogRef 弹窗实例
39
+ * @param props 属性
40
+ * @param isFullscreen 全屏状态
41
+ */
42
+ export declare function useModalEvent(dialogRef: Ref<ElDialogInstance>, props: ModalProps, isFullscreen: Ref<boolean>): {
43
+ handleHeaderMousedown: (e: MouseEvent) => void;
44
+ handleHeaderTouchstart: (e: TouchEvent) => void;
45
+ handleResizeMousedown: (e: MouseEvent) => void;
46
+ handleResizeTouchstart: (e: TouchEvent) => void;
47
+ bindAutoTopEvent: () => void;
48
+ unbindAutoTopEvent: () => void;
49
+ topModal: (el?: HTMLElement) => void;
50
+ setInitPosition: () => void;
51
+ resetModalStyle: () => void;
52
+ };