vxe-table 4.6.14 → 4.6.15-beta.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 (133) hide show
  1. package/es/all.js +3 -0
  2. package/es/drawer/index.d.ts +4 -0
  3. package/es/drawer/index.js +62 -0
  4. package/es/drawer/src/modal.js +377 -0
  5. package/es/drawer/style.css +203 -0
  6. package/es/dynamics/index.js +16 -6
  7. package/es/icon/style.css +1 -1
  8. package/es/locale/lang/en-US.js +3 -0
  9. package/es/locale/lang/es-ES.js +3 -0
  10. package/es/locale/lang/ja-JP.js +3 -0
  11. package/es/locale/lang/pt-BR.js +3 -0
  12. package/es/locale/lang/zh-CN.js +3 -0
  13. package/es/locale/lang/zh-TC.js +3 -0
  14. package/es/modal/index.js +4 -4
  15. package/es/modal/src/modal.js +55 -55
  16. package/es/style.css +1 -1
  17. package/es/style.min.css +1 -1
  18. package/es/table/src/emits.js +1 -0
  19. package/es/table/src/table.js +9 -7
  20. package/es/tools/log.js +1 -1
  21. package/es/ui/index.d.ts +4 -0
  22. package/es/ui/index.js +3 -0
  23. package/es/v-x-e-table/index.js +2 -1
  24. package/es/v-x-e-table/src/conf.js +8 -0
  25. package/es/vxe-drawer/index.d.ts +4 -0
  26. package/es/vxe-drawer/index.js +3 -0
  27. package/es/vxe-drawer/style.css +203 -0
  28. package/lib/all.js +13 -1
  29. package/lib/all.min.js +1 -1
  30. package/lib/drawer/index.d.ts +4 -0
  31. package/lib/drawer/index.js +70 -0
  32. package/lib/drawer/index.min.js +1 -0
  33. package/lib/drawer/src/modal.js +481 -0
  34. package/lib/drawer/src/modal.min.js +1 -0
  35. package/lib/drawer/style/index.js +1 -0
  36. package/lib/drawer/style/style.css +203 -0
  37. package/lib/drawer/style/style.min.css +1 -0
  38. package/lib/dynamics/index.js +8 -4
  39. package/lib/dynamics/index.min.js +1 -1
  40. package/lib/icon/style/style.css +1 -1
  41. package/lib/icon/style/style.min.css +1 -1
  42. package/lib/index.umd.js +637 -70
  43. package/lib/index.umd.min.js +1 -1
  44. package/lib/locale/lang/en-US.js +3 -0
  45. package/lib/locale/lang/en-US.min.js +1 -1
  46. package/lib/locale/lang/en-US.umd.js +3 -0
  47. package/lib/locale/lang/es-ES.js +3 -0
  48. package/lib/locale/lang/es-ES.min.js +1 -1
  49. package/lib/locale/lang/es-ES.umd.js +3 -0
  50. package/lib/locale/lang/ja-JP.js +3 -0
  51. package/lib/locale/lang/ja-JP.min.js +1 -1
  52. package/lib/locale/lang/ja-JP.umd.js +3 -0
  53. package/lib/locale/lang/pt-BR.js +3 -0
  54. package/lib/locale/lang/pt-BR.min.js +1 -1
  55. package/lib/locale/lang/pt-BR.umd.js +3 -0
  56. package/lib/locale/lang/zh-CN.js +3 -0
  57. package/lib/locale/lang/zh-CN.min.js +1 -1
  58. package/lib/locale/lang/zh-CN.umd.js +3 -0
  59. package/lib/locale/lang/zh-HK.min.js +1 -1
  60. package/lib/locale/lang/zh-HK.umd.js +3 -0
  61. package/lib/locale/lang/zh-MO.min.js +1 -1
  62. package/lib/locale/lang/zh-MO.umd.js +3 -0
  63. package/lib/locale/lang/zh-TC.js +3 -0
  64. package/lib/locale/lang/zh-TC.min.js +1 -1
  65. package/lib/locale/lang/zh-TC.umd.js +3 -0
  66. package/lib/locale/lang/zh-TW.min.js +1 -1
  67. package/lib/locale/lang/zh-TW.umd.js +3 -0
  68. package/lib/modal/index.js +3 -3
  69. package/lib/modal/index.min.js +1 -1
  70. package/lib/modal/src/modal.js +53 -53
  71. package/lib/modal/src/modal.min.js +1 -1
  72. package/lib/style.css +1 -1
  73. package/lib/style.min.css +1 -1
  74. package/lib/table/src/emits.js +1 -1
  75. package/lib/table/src/emits.min.js +1 -1
  76. package/lib/table/src/table.js +9 -7
  77. package/lib/table/src/table.min.js +1 -1
  78. package/lib/tools/log.js +1 -1
  79. package/lib/tools/log.min.js +1 -1
  80. package/lib/ui/index.d.ts +4 -0
  81. package/lib/ui/index.js +22 -0
  82. package/lib/ui/index.min.js +1 -0
  83. package/lib/v-x-e-table/index.js +5 -3
  84. package/lib/v-x-e-table/index.min.js +1 -1
  85. package/lib/v-x-e-table/src/conf.js +8 -0
  86. package/lib/v-x-e-table/src/conf.min.js +1 -1
  87. package/lib/vxe-drawer/index.d.ts +4 -0
  88. package/lib/vxe-drawer/index.js +22 -0
  89. package/lib/vxe-drawer/index.min.js +1 -0
  90. package/lib/vxe-drawer/style/index.js +1 -0
  91. package/lib/vxe-drawer/style/style.css +203 -0
  92. package/lib/vxe-drawer/style/style.min.css +1 -0
  93. package/package.json +1 -1
  94. package/packages/all.ts +3 -0
  95. package/packages/drawer/index.d.ts +4 -0
  96. package/packages/drawer/index.ts +73 -0
  97. package/packages/drawer/src/modal.ts +429 -0
  98. package/packages/dynamics/index.ts +17 -7
  99. package/packages/locale/lang/en-US.ts +3 -0
  100. package/packages/locale/lang/es-ES.ts +3 -0
  101. package/packages/locale/lang/ja-JP.ts +3 -0
  102. package/packages/locale/lang/pt-BR.ts +3 -0
  103. package/packages/locale/lang/zh-CN.ts +3 -0
  104. package/packages/locale/lang/zh-TC.ts +3 -0
  105. package/packages/modal/index.ts +6 -6
  106. package/packages/modal/src/modal.ts +62 -62
  107. package/packages/table/src/emits.ts +1 -0
  108. package/packages/table/src/table.ts +9 -7
  109. package/packages/ui/index.d.ts +4 -0
  110. package/packages/ui/index.ts +4 -0
  111. package/packages/v-x-e-table/index.ts +2 -0
  112. package/packages/v-x-e-table/src/conf.ts +8 -0
  113. package/styles/all.scss +1 -1
  114. package/styles/drawer.scss +215 -0
  115. package/styles/modules.scss +1 -0
  116. package/styles/theme/dark.scss +5 -0
  117. package/styles/theme/default.scss +5 -0
  118. package/types/all.d.ts +3 -0
  119. package/types/drawer.d.ts +244 -0
  120. package/types/table.d.ts +14 -0
  121. package/types/v-x-e-table/index.d.ts +10 -3
  122. /package/es/icon/style/{iconfont.1716171821307.ttf → iconfont.1716214400519.ttf} +0 -0
  123. /package/es/icon/style/{iconfont.1716171821307.woff → iconfont.1716214400519.woff} +0 -0
  124. /package/es/icon/style/{iconfont.1716171821307.woff2 → iconfont.1716214400519.woff2} +0 -0
  125. /package/es/{iconfont.1716171821307.ttf → iconfont.1716214400519.ttf} +0 -0
  126. /package/es/{iconfont.1716171821307.woff → iconfont.1716214400519.woff} +0 -0
  127. /package/es/{iconfont.1716171821307.woff2 → iconfont.1716214400519.woff2} +0 -0
  128. /package/lib/icon/style/{iconfont.1716171821307.ttf → iconfont.1716214400519.ttf} +0 -0
  129. /package/lib/icon/style/{iconfont.1716171821307.woff → iconfont.1716214400519.woff} +0 -0
  130. /package/lib/icon/style/{iconfont.1716171821307.woff2 → iconfont.1716214400519.woff2} +0 -0
  131. /package/lib/{iconfont.1716171821307.ttf → iconfont.1716214400519.ttf} +0 -0
  132. /package/lib/{iconfont.1716171821307.woff → iconfont.1716214400519.woff} +0 -0
  133. /package/lib/{iconfont.1716171821307.woff2 → iconfont.1716214400519.woff2} +0 -0
package/es/all.js CHANGED
@@ -24,6 +24,7 @@ import { VxeTextarea } from './textarea';
24
24
  import { VxeButton } from './button';
25
25
  import { VxeButtonGroup } from './button-group';
26
26
  import { VxeModal } from './modal';
27
+ import { VxeDrawer } from './drawer';
27
28
  import { VxeTooltip } from './tooltip';
28
29
  import { VxeForm } from './form';
29
30
  import { VxeFormItem } from './form-item';
@@ -63,6 +64,7 @@ const components = [
63
64
  VxeButton,
64
65
  VxeButtonGroup,
65
66
  VxeModal,
67
+ VxeDrawer,
66
68
  VxeTooltip,
67
69
  VxeForm,
68
70
  VxeFormItem,
@@ -117,6 +119,7 @@ export * from './textarea';
117
119
  export * from './button';
118
120
  export * from './button-group';
119
121
  export * from './modal';
122
+ export * from './drawer';
120
123
  export * from './tooltip';
121
124
  export * from './form';
122
125
  export * from './form-item';
@@ -0,0 +1,4 @@
1
+ import { VxeDrawer } from '../../types/drawer'
2
+
3
+ export * from '../../types/drawer'
4
+ export default VxeDrawer
@@ -0,0 +1,62 @@
1
+ import XEUtils from 'xe-utils';
2
+ import VxeDrawerComponent, { allActiveDrawers } from './src/modal';
3
+ import { VXETable } from '../v-x-e-table';
4
+ import { dynamicApp, dynamicStore, checkDynamic } from '../dynamics';
5
+ function openDrawer(options) {
6
+ // 使用动态组件渲染动态弹框
7
+ checkDynamic();
8
+ return new Promise(resolve => {
9
+ if (options && options.id && allActiveDrawers.some(comp => comp.props.id === options.id)) {
10
+ resolve('exist');
11
+ }
12
+ else {
13
+ const _onHide = options.onHide;
14
+ const drawerOpts = Object.assign(options, {
15
+ key: XEUtils.uniqueId(),
16
+ modelValue: true,
17
+ onHide(params) {
18
+ const drawerList = dynamicStore.drawers;
19
+ if (_onHide) {
20
+ _onHide(params);
21
+ }
22
+ dynamicStore.drawers = drawerList.filter(item => item.key !== drawerOpts.key);
23
+ resolve(params.type);
24
+ }
25
+ });
26
+ dynamicStore.drawers.push(drawerOpts);
27
+ }
28
+ });
29
+ }
30
+ function getDrawer(id) {
31
+ return XEUtils.find(allActiveDrawers, $drawer => $drawer.props.id === id);
32
+ }
33
+ /**
34
+ * 全局关闭动态的活动窗口(只能用于关闭动态的创建的活动窗口)
35
+ * 如果传 id 则关闭指定的窗口
36
+ * 如果不传则关闭所有窗口
37
+ */
38
+ function closeDrawer(id) {
39
+ const drawers = id ? [getDrawer(id)] : allActiveDrawers;
40
+ const restPromises = [];
41
+ drawers.forEach($drawer => {
42
+ if ($drawer) {
43
+ restPromises.push($drawer.close());
44
+ }
45
+ });
46
+ return Promise.all(restPromises);
47
+ }
48
+ const DrawerController = {
49
+ get: getDrawer,
50
+ close: closeDrawer,
51
+ open: openDrawer
52
+ };
53
+ export const drawer = DrawerController;
54
+ export const VxeDrawer = Object.assign(VxeDrawerComponent, {
55
+ install: function (app) {
56
+ app.component(VxeDrawerComponent.name, VxeDrawerComponent);
57
+ VXETable.drawer = DrawerController;
58
+ }
59
+ });
60
+ dynamicApp.component(VxeDrawerComponent.name, VxeDrawerComponent);
61
+ export const Drawer = VxeDrawer;
62
+ export default VxeDrawer;
@@ -0,0 +1,377 @@
1
+ import { defineComponent, h, Teleport, ref, reactive, nextTick, watch, onMounted, onUnmounted } from 'vue';
2
+ import XEUtils from 'xe-utils';
3
+ import { useSize } from '../../hooks/size';
4
+ import { getLastZIndex, nextZIndex, getFuncText } from '../../tools/utils';
5
+ import { GlobalEvent, hasEventKey, EVENT_KEYS } from '../../tools/event';
6
+ import GlobalConfig from '../../v-x-e-table/src/conf';
7
+ import VxeButtonComponent from '../../button/src/button';
8
+ import VxeLoadingComponent from '../../loading/index';
9
+ import { getSlotVNs } from '../../tools/vn';
10
+ export const allActiveDrawers = [];
11
+ export default defineComponent({
12
+ name: 'VxeDrawer',
13
+ props: {
14
+ modelValue: Boolean,
15
+ id: String,
16
+ title: String,
17
+ loading: { type: Boolean, default: null },
18
+ className: String,
19
+ position: [String, Object],
20
+ lockView: { type: Boolean, default: () => GlobalConfig.drawer.lockView },
21
+ lockScroll: Boolean,
22
+ mask: { type: Boolean, default: () => GlobalConfig.drawer.mask },
23
+ maskClosable: { type: Boolean, default: () => GlobalConfig.drawer.maskClosable },
24
+ escClosable: { type: Boolean, default: () => GlobalConfig.drawer.escClosable },
25
+ showHeader: { type: Boolean, default: () => GlobalConfig.drawer.showHeader },
26
+ showFooter: { type: Boolean, default: () => GlobalConfig.drawer.showFooter },
27
+ showClose: { type: Boolean, default: () => GlobalConfig.drawer.showClose },
28
+ content: [Number, String],
29
+ showCancelButton: { type: Boolean, default: null },
30
+ cancelButtonText: { type: String, default: () => GlobalConfig.drawer.cancelButtonText },
31
+ showConfirmButton: { type: Boolean, default: () => GlobalConfig.drawer.showConfirmButton },
32
+ confirmButtonText: { type: String, default: () => GlobalConfig.drawer.confirmButtonText },
33
+ destroyOnClose: { type: Boolean, default: () => GlobalConfig.drawer.destroyOnClose },
34
+ showTitleOverflow: { type: Boolean, default: () => GlobalConfig.drawer.showTitleOverflow },
35
+ width: [Number, String],
36
+ height: [Number, String],
37
+ zIndex: Number,
38
+ transfer: { type: Boolean, default: () => GlobalConfig.drawer.transfer },
39
+ size: { type: String, default: () => GlobalConfig.drawer.size || GlobalConfig.size },
40
+ beforeHideMethod: { type: Function, default: () => GlobalConfig.drawer.beforeHideMethod },
41
+ slots: Number
42
+ },
43
+ emits: [
44
+ 'update:modelValue',
45
+ 'show',
46
+ 'hide',
47
+ 'before-hide',
48
+ 'close',
49
+ 'confirm',
50
+ 'cancel'
51
+ ],
52
+ setup(props, context) {
53
+ const { slots, emit } = context;
54
+ const xID = XEUtils.uniqueId();
55
+ const computeSize = useSize(props);
56
+ const refElem = ref();
57
+ const refDrawerBox = ref();
58
+ const refConfirmBtn = ref();
59
+ const refCancelBtn = ref();
60
+ const reactData = reactive({
61
+ inited: false,
62
+ visible: false,
63
+ contentVisible: false,
64
+ drawerZIndex: 0,
65
+ firstOpen: true
66
+ });
67
+ const refMaps = {
68
+ refElem
69
+ };
70
+ const computeMaps = {};
71
+ const $xeDrawer = {
72
+ xID,
73
+ props,
74
+ context,
75
+ reactData,
76
+ getRefMaps: () => refMaps,
77
+ getComputeMaps: () => computeMaps
78
+ };
79
+ const getBox = () => {
80
+ const boxElem = refDrawerBox.value;
81
+ return boxElem;
82
+ };
83
+ const recalculate = () => {
84
+ const { width, height } = props;
85
+ const boxElem = getBox();
86
+ boxElem.style.width = `${width ? (isNaN(width) ? width : `${width}px`) : ''}`;
87
+ boxElem.style.height = `${height ? (isNaN(height) ? height : `${height}px`) : ''}`;
88
+ return nextTick();
89
+ };
90
+ const updateZindex = () => {
91
+ const { zIndex } = props;
92
+ const { drawerZIndex } = reactData;
93
+ if (zIndex) {
94
+ reactData.drawerZIndex = zIndex;
95
+ }
96
+ else if (drawerZIndex < getLastZIndex()) {
97
+ reactData.drawerZIndex = nextZIndex();
98
+ }
99
+ };
100
+ const updatePosition = () => {
101
+ return nextTick().then(() => {
102
+ });
103
+ };
104
+ const closeDrawer = (type) => {
105
+ const { beforeHideMethod } = props;
106
+ const { visible } = reactData;
107
+ const params = { type };
108
+ if (visible) {
109
+ Promise.resolve(beforeHideMethod ? beforeHideMethod(params) : null).then((rest) => {
110
+ if (!XEUtils.isError(rest)) {
111
+ reactData.contentVisible = false;
112
+ XEUtils.remove(allActiveDrawers, item => item === $xeDrawer);
113
+ drawerMethods.dispatchEvent('before-hide', params);
114
+ setTimeout(() => {
115
+ reactData.visible = false;
116
+ emit('update:modelValue', false);
117
+ drawerMethods.dispatchEvent('hide', params);
118
+ }, 200);
119
+ }
120
+ }).catch(e => e);
121
+ }
122
+ return nextTick();
123
+ };
124
+ const closeEvent = (evnt) => {
125
+ const type = 'close';
126
+ drawerMethods.dispatchEvent(type, { type }, evnt);
127
+ closeDrawer(type);
128
+ };
129
+ const confirmEvent = (evnt) => {
130
+ const type = 'confirm';
131
+ drawerMethods.dispatchEvent(type, { type }, evnt);
132
+ closeDrawer(type);
133
+ };
134
+ const cancelEvent = (evnt) => {
135
+ const type = 'cancel';
136
+ drawerMethods.dispatchEvent(type, { type }, evnt);
137
+ closeDrawer(type);
138
+ };
139
+ const openDrawer = () => {
140
+ const { showFooter } = props;
141
+ const { inited, visible } = reactData;
142
+ if (!inited) {
143
+ reactData.inited = true;
144
+ }
145
+ if (!visible) {
146
+ recalculate();
147
+ reactData.visible = true;
148
+ reactData.contentVisible = false;
149
+ updateZindex();
150
+ allActiveDrawers.push($xeDrawer);
151
+ setTimeout(() => {
152
+ reactData.contentVisible = true;
153
+ nextTick(() => {
154
+ if (showFooter) {
155
+ const confirmBtn = refConfirmBtn.value;
156
+ const cancelBtn = refCancelBtn.value;
157
+ const operBtn = confirmBtn || cancelBtn;
158
+ if (operBtn) {
159
+ operBtn.focus();
160
+ }
161
+ }
162
+ const type = '';
163
+ const params = { type };
164
+ emit('update:modelValue', true);
165
+ drawerMethods.dispatchEvent('show', params);
166
+ });
167
+ }, 10);
168
+ nextTick(() => {
169
+ const { firstOpen } = reactData;
170
+ if (firstOpen) {
171
+ updatePosition().then(() => {
172
+ setTimeout(() => updatePosition(), 20);
173
+ });
174
+ }
175
+ if (firstOpen) {
176
+ reactData.firstOpen = false;
177
+ }
178
+ });
179
+ }
180
+ return nextTick();
181
+ };
182
+ const drawerMethods = {
183
+ dispatchEvent(type, params, evnt) {
184
+ emit(type, Object.assign({ $drawer: $xeDrawer, $event: evnt }, params));
185
+ },
186
+ open: openDrawer,
187
+ close() {
188
+ return closeDrawer('close');
189
+ },
190
+ getBox
191
+ };
192
+ const selfClickEvent = (evnt) => {
193
+ const el = refElem.value;
194
+ if (props.maskClosable && evnt.target === el) {
195
+ const type = 'mask';
196
+ closeDrawer(type);
197
+ }
198
+ };
199
+ const handleGlobalKeydownEvent = (evnt) => {
200
+ const isEsc = hasEventKey(evnt, EVENT_KEYS.ESCAPE);
201
+ if (isEsc) {
202
+ const lastDrawer = XEUtils.max(allActiveDrawers, (item) => item.reactData.drawerZIndex);
203
+ // 多个时,只关掉最上层的窗口
204
+ if (lastDrawer) {
205
+ setTimeout(() => {
206
+ if (lastDrawer === $xeDrawer && lastDrawer.props.escClosable) {
207
+ closeDrawer('exit');
208
+ }
209
+ }, 10);
210
+ }
211
+ }
212
+ };
213
+ const boxMousedownEvent = () => {
214
+ const { drawerZIndex } = reactData;
215
+ if (allActiveDrawers.some(comp => comp.reactData.visible && comp.reactData.drawerZIndex > drawerZIndex)) {
216
+ updateZindex();
217
+ }
218
+ };
219
+ const formDesignPrivateMethods = {};
220
+ Object.assign($xeDrawer, drawerMethods, formDesignPrivateMethods);
221
+ const renderTitles = () => {
222
+ const { slots: propSlots = {}, showClose, title } = props;
223
+ const titleSlot = slots.title || propSlots.title;
224
+ const cornerSlot = slots.corner || propSlots.corner;
225
+ const titVNs = [
226
+ h('div', {
227
+ class: 'vxe-drawer--header-title'
228
+ }, titleSlot ? getSlotVNs(titleSlot({ $drawer: $xeDrawer })) : (title ? getFuncText(title) : GlobalConfig.i18n('vxe.alert.title')))
229
+ ];
230
+ const rightVNs = [];
231
+ if (cornerSlot) {
232
+ rightVNs.push(h('span', {
233
+ class: 'vxe-drawer--corner-wrapper'
234
+ }, getSlotVNs(cornerSlot({ $drawer: $xeDrawer }))));
235
+ }
236
+ if (showClose) {
237
+ rightVNs.push(h('i', {
238
+ class: ['vxe-drawer--close-btn', 'trigger--btn', GlobalConfig.icon.MODAL_CLOSE],
239
+ title: GlobalConfig.i18n('vxe.drawer.close'),
240
+ onClick: closeEvent
241
+ }));
242
+ }
243
+ titVNs.push(h('div', {
244
+ class: 'vxe-drawer--header-right'
245
+ }, rightVNs));
246
+ return titVNs;
247
+ };
248
+ const renderHeader = () => {
249
+ const { slots: propSlots = {}, showTitleOverflow } = props;
250
+ const headerSlot = slots.header || propSlots.header;
251
+ const headVNs = [];
252
+ if (props.showHeader) {
253
+ headVNs.push(h('div', {
254
+ class: ['vxe-drawer--header', {
255
+ 'is--ellipsis': showTitleOverflow
256
+ }]
257
+ }, headerSlot
258
+ ? (!reactData.inited || (props.destroyOnClose && !reactData.visible) ? [] : getSlotVNs(headerSlot({ $drawer: $xeDrawer })))
259
+ : renderTitles()));
260
+ }
261
+ return headVNs;
262
+ };
263
+ const renderBody = () => {
264
+ const { slots: propSlots = {}, content } = props;
265
+ const defaultSlot = slots.default || propSlots.default;
266
+ return [
267
+ h('div', {
268
+ class: 'vxe-drawer--body'
269
+ }, [
270
+ h('div', {
271
+ class: 'vxe-drawer--content'
272
+ }, defaultSlot ? (!reactData.inited || (props.destroyOnClose && !reactData.visible) ? [] : getSlotVNs(defaultSlot({ $drawer: $xeDrawer }))) : getFuncText(content)),
273
+ h(VxeLoadingComponent, {
274
+ class: 'vxe-drawer--loading',
275
+ modelValue: props.loading
276
+ })
277
+ ])
278
+ ];
279
+ };
280
+ const renderBtns = () => {
281
+ const { showCancelButton, showConfirmButton } = props;
282
+ const btnVNs = [];
283
+ if (showCancelButton) {
284
+ btnVNs.push(h(VxeButtonComponent, {
285
+ key: 1,
286
+ ref: refCancelBtn,
287
+ content: props.cancelButtonText || GlobalConfig.i18n('vxe.button.cancel'),
288
+ onClick: cancelEvent
289
+ }));
290
+ }
291
+ if (showConfirmButton) {
292
+ btnVNs.push(h(VxeButtonComponent, {
293
+ key: 2,
294
+ ref: refConfirmBtn,
295
+ status: 'primary',
296
+ content: props.confirmButtonText || GlobalConfig.i18n('vxe.button.confirm'),
297
+ onClick: confirmEvent
298
+ }));
299
+ }
300
+ return btnVNs;
301
+ };
302
+ const renderFooter = () => {
303
+ const { slots: propSlots = {} } = props;
304
+ const footerSlot = slots.footer || propSlots.footer;
305
+ const footVNs = [];
306
+ if (props.showFooter) {
307
+ footVNs.push(h('div', {
308
+ class: 'vxe-drawer--footer'
309
+ }, footerSlot
310
+ ? (!reactData.inited || (props.destroyOnClose && !reactData.visible) ? [] : getSlotVNs(footerSlot({ $drawer: $xeDrawer })))
311
+ : renderBtns()));
312
+ }
313
+ return footVNs;
314
+ };
315
+ const renderVN = () => {
316
+ const { className, position, loading, lockScroll, lockView, mask } = props;
317
+ const { inited, contentVisible, visible } = reactData;
318
+ const vSize = computeSize.value;
319
+ return h(Teleport, {
320
+ to: 'body',
321
+ disabled: props.transfer ? !inited : true
322
+ }, [
323
+ h('div', {
324
+ ref: refElem,
325
+ class: ['vxe-drawer--wrapper', `pos--${position}`, className || '', {
326
+ [`size--${vSize}`]: vSize,
327
+ 'lock--scroll': lockScroll,
328
+ 'lock--view': lockView,
329
+ 'is--mask': mask,
330
+ 'is--visible': contentVisible,
331
+ 'is--active': visible,
332
+ 'is--loading': loading
333
+ }],
334
+ style: {
335
+ zIndex: reactData.drawerZIndex
336
+ },
337
+ onClick: selfClickEvent
338
+ }, [
339
+ h('div', {
340
+ ref: refDrawerBox,
341
+ class: 'vxe-drawer--box',
342
+ onMousedown: boxMousedownEvent
343
+ }, renderHeader().concat(renderBody(), renderFooter()))
344
+ ])
345
+ ]);
346
+ };
347
+ $xeDrawer.renderVN = renderVN;
348
+ watch(() => props.width, recalculate);
349
+ watch(() => props.height, recalculate);
350
+ watch(() => props.modelValue, (value) => {
351
+ if (value) {
352
+ openDrawer();
353
+ }
354
+ else {
355
+ closeDrawer('model');
356
+ }
357
+ });
358
+ onMounted(() => {
359
+ nextTick(() => {
360
+ if (props.modelValue) {
361
+ openDrawer();
362
+ }
363
+ recalculate();
364
+ });
365
+ if (props.escClosable) {
366
+ GlobalEvent.on($xeDrawer, 'keydown', handleGlobalKeydownEvent);
367
+ }
368
+ });
369
+ onUnmounted(() => {
370
+ GlobalEvent.off($xeDrawer, 'keydown');
371
+ });
372
+ return $xeDrawer;
373
+ },
374
+ render() {
375
+ return this.renderVN();
376
+ }
377
+ });
@@ -0,0 +1,203 @@
1
+ /*font*/
2
+ /*size*/
3
+ /*icon*/
4
+ /*color*/
5
+ /*input/radio/checkbox*/
6
+ /*popup*/
7
+ /*table*/
8
+ /*filter*/
9
+ /*menu*/
10
+ /*loading*/
11
+ /*validate*/
12
+ /*grid*/
13
+ /*toolbar*/
14
+ /*tooltip*/
15
+ /*pager*/
16
+ /*modal*/
17
+ /*checkbox*/
18
+ /*radio*/
19
+ /*button*/
20
+ /*input*/
21
+ /*textarea*/
22
+ /*form*/
23
+ /*select*/
24
+ /*switch*/
25
+ /*pulldown*/
26
+ .vxe-drawer--wrapper {
27
+ display: none;
28
+ position: fixed;
29
+ top: 0;
30
+ left: 0;
31
+ line-height: 1.5;
32
+ width: calc(100% + 18px);
33
+ height: calc(100% + 18px);
34
+ color: var(--vxe-font-color);
35
+ font-family: var(--vxe-font-family);
36
+ }
37
+ .vxe-drawer--wrapper.is--active {
38
+ display: block;
39
+ }
40
+ .vxe-drawer--wrapper.is--visible.is--mask:before {
41
+ background-color: rgba(0, 0, 0, 0.5);
42
+ }
43
+ .vxe-drawer--wrapper.is--visible.pos--left .vxe-drawer--box {
44
+ left: 0;
45
+ }
46
+ .vxe-drawer--wrapper.is--visible.pos--right .vxe-drawer--box {
47
+ right: 0;
48
+ }
49
+ .vxe-drawer--wrapper.is--visible.pos--top .vxe-drawer--box {
50
+ top: 0;
51
+ }
52
+ .vxe-drawer--wrapper.is--visible.pos--bottom .vxe-drawer--box {
53
+ bottom: 0;
54
+ }
55
+ .vxe-drawer--wrapper.is--visible .vxe-drawer--box {
56
+ opacity: 1;
57
+ }
58
+ .vxe-drawer--wrapper.is--loading .vxe-drawer--header,
59
+ .vxe-drawer--wrapper.is--loading .vxe-drawer--footer {
60
+ position: relative;
61
+ border-bottom-color: var(--vxe-loading-background-color);
62
+ }
63
+ .vxe-drawer--wrapper.is--loading .vxe-drawer--header:before,
64
+ .vxe-drawer--wrapper.is--loading .vxe-drawer--footer:before {
65
+ content: "";
66
+ position: absolute;
67
+ top: 0;
68
+ left: 0;
69
+ width: 100%;
70
+ height: 100%;
71
+ z-index: 1;
72
+ -webkit-user-select: none;
73
+ -moz-user-select: none;
74
+ user-select: none;
75
+ background-color: var(--vxe-loading-background-color);
76
+ }
77
+ .vxe-drawer--wrapper:not(.lock--view) {
78
+ pointer-events: none;
79
+ }
80
+ .vxe-drawer--wrapper.lock--scroll {
81
+ overflow: hidden;
82
+ }
83
+ .vxe-drawer--wrapper:not(.lock--scroll) {
84
+ overflow: auto;
85
+ }
86
+ .vxe-drawer--wrapper.lock--view:before, .vxe-drawer--wrapper.is--mask:before {
87
+ content: "";
88
+ position: fixed;
89
+ top: 0;
90
+ left: 0;
91
+ width: 100%;
92
+ height: 100%;
93
+ z-index: -1;
94
+ pointer-events: auto;
95
+ }
96
+ .vxe-drawer--wrapper.is--mask:before {
97
+ background-color: rgba(0, 0, 0, 0);
98
+ transition: background-color 0.2s ease-in-out;
99
+ }
100
+ .vxe-drawer--wrapper.pos--left .vxe-drawer--box {
101
+ top: 0;
102
+ left: -100%;
103
+ box-shadow: 2px 0 10px 0 rgba(0, 0, 0, 0.2);
104
+ }
105
+ .vxe-drawer--wrapper.pos--right .vxe-drawer--box {
106
+ top: 0;
107
+ right: -100%;
108
+ box-shadow: -2px 0 10px 0 rgba(0, 0, 0, 0.2);
109
+ }
110
+ .vxe-drawer--wrapper.pos--top .vxe-drawer--box {
111
+ top: -100%;
112
+ left: 0;
113
+ box-shadow: 0 2px 10px 0 rgba(0, 0, 0, 0.2);
114
+ }
115
+ .vxe-drawer--wrapper.pos--bottom .vxe-drawer--box {
116
+ bottom: -100%;
117
+ left: 0;
118
+ box-shadow: 0 -2px 10px 0 rgba(0, 0, 0, 0.2);
119
+ }
120
+ .vxe-drawer--wrapper.pos--left .vxe-drawer--box, .vxe-drawer--wrapper.pos--right .vxe-drawer--box {
121
+ width: 30%;
122
+ height: 100%;
123
+ }
124
+ .vxe-drawer--wrapper.pos--top .vxe-drawer--box, .vxe-drawer--wrapper.pos--bottom .vxe-drawer--box {
125
+ width: 100%;
126
+ height: 30%;
127
+ }
128
+ .vxe-drawer--wrapper .vxe-drawer--box {
129
+ display: flex;
130
+ flex-direction: column;
131
+ position: fixed;
132
+ background-color: var(--vxe-drawer-body-background-color);
133
+ border: 1px solid var(--vxe-drawer-border-color);
134
+ text-align: left;
135
+ pointer-events: auto;
136
+ opacity: 0;
137
+ transition: all 0.3s ease-in-out;
138
+ }
139
+ .vxe-drawer--wrapper .vxe-drawer--content {
140
+ flex-grow: 1;
141
+ padding: 0.8em 1em;
142
+ white-space: pre-line;
143
+ }
144
+ .vxe-drawer--wrapper .vxe-drawer--header,
145
+ .vxe-drawer--wrapper .vxe-drawer--body,
146
+ .vxe-drawer--wrapper .vxe-drawer--footer {
147
+ position: relative;
148
+ }
149
+ .vxe-drawer--wrapper .vxe-drawer--body {
150
+ display: flex;
151
+ flex-grow: 1;
152
+ overflow: auto;
153
+ }
154
+ .vxe-drawer--wrapper .vxe-drawer--body .vxe-drawer--content {
155
+ overflow: auto;
156
+ }
157
+ .vxe-drawer--wrapper .vxe-drawer--header {
158
+ display: flex;
159
+ flex-direction: row;
160
+ flex-shrink: 0;
161
+ font-size: 1.1em;
162
+ font-weight: 700;
163
+ border-bottom: 1px solid var(--vxe-drawer-border-color);
164
+ background-color: var(--vxe-drawer-header-background-color);
165
+ }
166
+ .vxe-drawer--wrapper .vxe-drawer--header.is--ellipsis .vxe-drawer--header-title {
167
+ overflow: hidden;
168
+ text-overflow: ellipsis;
169
+ white-space: nowrap;
170
+ }
171
+ .vxe-drawer--wrapper .vxe-drawer--header-title {
172
+ flex-grow: 1;
173
+ padding: 0.6em 0 0.6em 1em;
174
+ }
175
+ .vxe-drawer--wrapper .vxe-drawer--header-right {
176
+ flex-shrink: 0;
177
+ padding: 0.6em 1em 0.6em 0;
178
+ }
179
+ .vxe-drawer--wrapper .vxe-drawer--close-btn {
180
+ cursor: pointer;
181
+ margin-left: 0.6em;
182
+ }
183
+ .vxe-drawer--wrapper .vxe-drawer--close-btn:hover {
184
+ color: var(--vxe-primary-color);
185
+ }
186
+ .vxe-drawer--wrapper .vxe-drawer--footer {
187
+ flex-shrink: 0;
188
+ text-align: right;
189
+ padding: 0.4em 1em 0.8em 1em;
190
+ }
191
+
192
+ .vxe-drawer--wrapper {
193
+ font-size: var(--vxe-font-size);
194
+ }
195
+ .vxe-drawer--wrapper.size--medium {
196
+ font-size: var(--vxe-font-size-medium);
197
+ }
198
+ .vxe-drawer--wrapper.size--small {
199
+ font-size: var(--vxe-font-size-small);
200
+ }
201
+ .vxe-drawer--wrapper.size--mini {
202
+ font-size: var(--vxe-font-size-mini);
203
+ }