@meethive/components 0.0.3 → 0.0.5

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 (111) hide show
  1. package/es/AutoComplete/AutoComplete.js +71 -80
  2. package/es/BadgeStatus/Badge.js +38 -47
  3. package/es/CardSelect/CardSelect.js +115 -137
  4. package/es/CheckButton/CheckButton.js +102 -118
  5. package/es/ConfigProvider/ConfigProvider.js +44 -68
  6. package/es/DragModal/DragModal.js +191 -212
  7. package/es/EditTable/Body.js +158 -189
  8. package/es/EditTable/CellRender.js +10 -12
  9. package/es/EditTable/EditTable.js +385 -434
  10. package/es/EditTable/FormItem.js +140 -169
  11. package/es/EditTable/Group.js +171 -204
  12. package/es/EditTable/Header.js +57 -63
  13. package/es/EditTable/HeaderRender.js +10 -12
  14. package/es/EditTable/components/ContextMenu/Menu.js +78 -86
  15. package/es/EditTable/components/Search/Search.js +151 -163
  16. package/es/EditTable/components/Search/Sort.js +104 -119
  17. package/es/Ellipsis/Ellipsis.js +144 -148
  18. package/es/Empty/Empty.js +51 -57
  19. package/es/FullPage/FullPage.js +20 -19
  20. package/es/Icon/Icon.js +42 -49
  21. package/es/LocaleProvider/LocaleProvider.js +32 -38
  22. package/es/Markdown/Markdown.js +101 -118
  23. package/es/PermissionButton/PermissionButton.js +118 -118
  24. package/es/ProLayout/Basic/BasicLayout.js +361 -418
  25. package/es/ProLayout/Basic/Header.js +97 -111
  26. package/es/ProLayout/PageContainer/index.js +298 -344
  27. package/es/ProLayout/SiderMenu/BaseMenu.js +233 -240
  28. package/es/ProTable/Alert.js +39 -40
  29. package/es/ProTable/Content.js +84 -97
  30. package/es/ProTable/Header.js +32 -33
  31. package/es/ProTable/Pagination.js +56 -55
  32. package/es/ProTable/ProTable.js +256 -276
  33. package/es/RadioButton/RadioButton.js +48 -53
  34. package/es/Scrollbar/Bar.js +65 -76
  35. package/es/Scrollbar/Scrollbar.js +129 -161
  36. package/es/Scrollbar/Thumb.js +101 -150
  37. package/es/Search/Item.js +208 -236
  38. package/es/Search/Search.js +90 -90
  39. package/es/Skeleton/Skeleton.js +26 -27
  40. package/es/Skeleton/components/DashBoardCard.js +26 -27
  41. package/es/Skeleton/components/DashBoardChart.js +26 -27
  42. package/es/Skeleton/components/Detail.js +26 -27
  43. package/es/Skeleton/components/Drawer.js +26 -27
  44. package/es/Skeleton/components/Item.js +55 -54
  45. package/es/Skeleton/components/List.js +29 -27
  46. package/es/Skeleton/components/ListCard.js +28 -28
  47. package/es/Skeleton/components/ListCardItem.js +20 -20
  48. package/es/Skeleton/components/ListTable.js +26 -27
  49. package/es/Skeleton/components/Page.js +27 -26
  50. package/es/Skeleton/components/Search.js +16 -16
  51. package/es/Skeleton/components/Tree.js +26 -27
  52. package/es/TimeFormat/TimeFormat.js +32 -36
  53. package/es/Title/Title.js +23 -26
  54. package/es/ValueItem/ValueItem.js +100 -113
  55. package/es/VirtualTable/VirtualTable.js +235 -271
  56. package/lib/AutoComplete/AutoComplete.js +71 -80
  57. package/lib/BadgeStatus/Badge.js +38 -47
  58. package/lib/CardSelect/CardSelect.js +115 -137
  59. package/lib/CheckButton/CheckButton.js +102 -118
  60. package/lib/ConfigProvider/ConfigProvider.js +44 -68
  61. package/lib/DragModal/DragModal.js +191 -212
  62. package/lib/EditTable/Body.js +158 -189
  63. package/lib/EditTable/CellRender.js +10 -12
  64. package/lib/EditTable/EditTable.js +385 -434
  65. package/lib/EditTable/FormItem.js +140 -169
  66. package/lib/EditTable/Group.js +171 -204
  67. package/lib/EditTable/Header.js +57 -63
  68. package/lib/EditTable/HeaderRender.js +10 -12
  69. package/lib/EditTable/components/ContextMenu/Menu.js +78 -86
  70. package/lib/EditTable/components/Search/Search.js +151 -163
  71. package/lib/EditTable/components/Search/Sort.js +104 -119
  72. package/lib/Ellipsis/Ellipsis.js +144 -148
  73. package/lib/Empty/Empty.js +51 -57
  74. package/lib/FullPage/FullPage.js +20 -19
  75. package/lib/Icon/Icon.js +42 -49
  76. package/lib/LocaleProvider/LocaleProvider.js +32 -38
  77. package/lib/Markdown/Markdown.js +101 -118
  78. package/lib/PermissionButton/PermissionButton.js +118 -118
  79. package/lib/ProLayout/Basic/BasicLayout.js +361 -418
  80. package/lib/ProLayout/Basic/Header.js +97 -111
  81. package/lib/ProLayout/PageContainer/index.js +298 -344
  82. package/lib/ProLayout/SiderMenu/BaseMenu.js +233 -240
  83. package/lib/ProTable/Alert.js +39 -40
  84. package/lib/ProTable/Content.js +84 -97
  85. package/lib/ProTable/Header.js +32 -33
  86. package/lib/ProTable/Pagination.js +56 -55
  87. package/lib/ProTable/ProTable.js +256 -276
  88. package/lib/RadioButton/RadioButton.js +48 -53
  89. package/lib/Scrollbar/Bar.js +65 -76
  90. package/lib/Scrollbar/Scrollbar.js +129 -161
  91. package/lib/Scrollbar/Thumb.js +101 -150
  92. package/lib/Search/Item.js +208 -236
  93. package/lib/Search/Search.js +90 -90
  94. package/lib/Skeleton/Skeleton.js +26 -27
  95. package/lib/Skeleton/components/DashBoardCard.js +26 -27
  96. package/lib/Skeleton/components/DashBoardChart.js +26 -27
  97. package/lib/Skeleton/components/Detail.js +26 -27
  98. package/lib/Skeleton/components/Drawer.js +26 -27
  99. package/lib/Skeleton/components/Item.js +55 -54
  100. package/lib/Skeleton/components/List.js +29 -27
  101. package/lib/Skeleton/components/ListCard.js +28 -28
  102. package/lib/Skeleton/components/ListCardItem.js +20 -20
  103. package/lib/Skeleton/components/ListTable.js +26 -27
  104. package/lib/Skeleton/components/Page.js +27 -26
  105. package/lib/Skeleton/components/Search.js +16 -16
  106. package/lib/Skeleton/components/Tree.js +26 -27
  107. package/lib/TimeFormat/TimeFormat.js +32 -36
  108. package/lib/Title/Title.js +23 -26
  109. package/lib/ValueItem/ValueItem.js +100 -113
  110. package/lib/VirtualTable/VirtualTable.js +235 -271
  111. package/package.json +1 -1
@@ -1,422 +1,365 @@
1
- function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
2
- import { defineComponent, computed, reactive, watchEffect, toRefs, provide, h, Fragment } from 'vue'
3
- import { pick } from 'lodash-es'
4
- import { Layout, LayoutContent, Breadcrumb, Tabs } from 'ant-design-vue'
5
- import SiderMenu, { siderMenuProps } from '../SiderMenu/SiderMenu'
6
- import { defaultSettingProps, LayoutType } from '../defaultSettings'
7
- import { baseHeaderProps } from '../TopHeader'
8
- import Header, { headerViewProps } from './Header.js'
9
- import { defaultRouteContext, routeContextInjectKey } from '../RouteContext'
10
- import { getMenuFirstChildren, getSlot } from '../util'
11
- import useProLayoutStyle from '../style'
12
-
13
- export const basicLayoutProps = {
14
- ...defaultSettingProps,
15
- ...siderMenuProps,
16
- ...baseHeaderProps,
17
- ...headerViewProps,
18
- pure: Boolean,
19
- loading: Boolean,
20
- locale: {
21
- type: [Function, Boolean],
22
- default: () => (s) => s
23
- },
1
+ import { defineComponent, computed, reactive, watchEffect, toRefs, provide, h, Fragment, mergeProps as _mergeProps, createVNode as _createVNode, Fragment as _Fragment } from 'vue';
2
+ import { pick } from 'lodash-es';
3
+ import { Layout, LayoutContent, Breadcrumb, Tabs } from 'ant-design-vue';
4
+ import SiderMenu, { siderMenuProps } from '../SiderMenu/SiderMenu';
5
+ import { defaultSettingProps, LayoutType } from '../defaultSettings';
6
+ import { baseHeaderProps } from '../TopHeader';
7
+ import Header, { headerViewProps } from './Header.js';
8
+ import { defaultRouteContext, routeContextInjectKey } from '../RouteContext';
9
+ import { getMenuFirstChildren, getSlot } from '../util';
10
+ import useProLayoutStyle from '../style';
11
+ export const basicLayoutProps = {
12
+ ...defaultSettingProps,
13
+ ...siderMenuProps,
14
+ ...baseHeaderProps,
15
+ ...headerViewProps,
16
+ pure: Boolean,
17
+ loading: Boolean,
18
+ locale: {
19
+ type: [Function, Boolean],
20
+ default: () => s => s
21
+ },
24
22
  /**
25
23
  * 是否禁用移动端模式,有的管理系统不需要移动端模式,此属性设置为true即可
26
- */
27
- disableMobile: {
28
- type: Boolean,
29
- required: false
30
- },
31
- isChildrenLayout: {
32
- type: Boolean,
33
- required: false
34
- },
24
+ */
25
+ disableMobile: {
26
+ type: Boolean,
27
+ required: false
28
+ },
29
+ isChildrenLayout: {
30
+ type: Boolean,
31
+ required: false
32
+ },
35
33
  /**
36
34
  * 兼用 content 的 margin
37
- */
38
- disableContentMargin: {
39
- type: Boolean,
40
- required: false
41
- },
42
- colSize: {
43
- type: Number,
44
- required: false
45
- },
46
- contentStyle: {
47
- type: [String, Object],
48
- default: () => null
49
- },
50
- breadcrumb: {
51
- type: [Object, Function],
52
- default: () => null
53
- },
54
- collapsedButtonRender: {
55
- type: [Function, Object, Boolean],
56
- default: () => undefined
57
- },
58
- breadcrumbRender: {
59
- type: [Object, Function, Boolean],
60
- default: () => null
61
- },
62
- headerContentRender: {
63
- type: [Function, Object, Boolean],
64
- default: () => undefined
65
- },
66
- headerRender: {
67
- type: [Object, Function, Boolean],
68
- default: () => undefined
69
- }
70
- }
71
-
72
- export default defineComponent({
73
- name: 'JProLayout',
74
- inheritAttrs: false,
75
- props: basicLayoutProps ,
76
- emits: [
77
- 'update:collapsed',
78
- 'update:open-keys',
79
- 'update:selected-keys',
80
- 'update:active-key',
81
- 'collapse',
82
- 'openKeys',
83
- 'select',
84
- 'menuHeaderClick',
85
- 'menuClick',
86
- 'backClick',
87
- 'historyTabClick',
88
- 'historyTabEdit',
89
- 'appMenuClick'
90
- ],
91
- setup(props, { emit, attrs, slots }) {
92
- const prefixCls = computed(() => 'ant-layout')
93
-
94
- const isTop = computed(() => props.layout === 'top')
95
- const hasSide = computed(() => props.layout === 'mix' || props.layout === 'side' || false)
96
- const hasSplitMenu = computed(() => props.layout === 'mix' && props.splitMenus)
97
- const hasFlatMenu = computed(() => hasSide.value && hasSplitMenu.value)
98
-
99
- const siderWidth = computed(() => {
100
- if (props.layoutType === LayoutType.PAD) {
101
- return props.collapsed ? 0 : props.siderWidth
102
- }
103
- return props.collapsed ? props.collapsedWidth : props.siderWidth
104
- })
105
-
106
- const stylePrefixCls = computed(() => 'pro-layout')
107
- const [wrapSSR, hashId] = useProLayoutStyle(stylePrefixCls)
108
-
109
- const onCollapse = (collapsed) => {
110
- emit('update:collapsed', collapsed)
111
- emit('collapse', collapsed)
112
- }
113
-
114
- const onOpenKeys = (openKeys) => {
115
- emit('update:open-keys', openKeys)
116
- emit('openKeys', openKeys)
117
- }
118
-
119
- const onSelect = (selectedKeys) => {
120
- emit('update:selected-keys', selectedKeys)
121
- emit('select', selectedKeys)
122
- }
123
-
124
- const onMenuHeaderClick = (e) => {
125
- emit('menuHeaderClick', e)
126
- }
127
-
128
- const onMenuClick = (args) => {
129
- emit('menuClick', args)
130
- }
131
-
132
- const onBack = (args) => {
133
- emit('backClick', args)
134
- }
135
-
136
- const onTabClick = (args) => {
137
- emit('historyTabClick', args)
138
- }
139
-
140
- const onTabEdit = (args) => {
141
- emit('historyTabEdit', args)
142
- }
143
-
144
- const onAppMenuClick = (args) => {
145
- emit('appMenuClick', args)
146
- }
147
-
148
- const onTabChange = (key) => {
149
- emit('update:active-key', key)
150
- }
151
-
152
- const baseClassName = computed(() => `${props.prefixCls}-basicLayout`)
153
-
154
- const className = computed(() => ({
155
- [baseClassName.value]: true,
156
- [`${baseClassName.value}-top-menu`]: isTop.value,
157
- [`${baseClassName.value}-is-children`]: props.isChildrenLayout,
158
- [`${baseClassName.value}-fix-siderbar`]: props.fixSiderbar,
159
- [`${baseClassName.value}-${props.layout}`]: props.layout,
160
- [`${baseClassName.value}-${props.layoutType}`]: props.layoutType,
161
- [hashId.value]: true
162
- }))
163
-
164
- const genLayoutStyle = reactive({
165
- position: 'relative'
166
- })
167
-
168
- watchEffect(() => {
169
- if (props.isChildrenLayout || (props.contentStyle && (props.contentStyle ).minHeight)) {
170
- (genLayoutStyle ).minHeight = 0
171
- }
172
- })
173
-
174
- const headerRender = (p, matchMenuKeys) => {
175
- if (p.headerRender === false || p.pure) {
176
- return null
177
- }
178
- return h(Header, {
179
- ...p,
180
- matchMenuKeys: matchMenuKeys || []
181
- })
182
- }
183
-
184
- const breadcrumb = computed(() => ({
185
- ...props.breadcrumb,
186
- itemRender: getSlot(slots, props, 'breadcrumbRender')
187
- }))
188
-
189
- const flatMenuData = computed(() => {
190
- return (hasFlatMenu.value && props.selectedKeys && getMenuFirstChildren(props.menuData, props.selectedKeys[0])) || []
191
- })
192
-
193
- const layoutType = computed(() => props.layoutType)
194
-
195
- const routeContext = reactive({
196
- ...defaultRouteContext,
197
- ...pick(toRefs(props), [
198
- 'pure',
199
- 'locale',
200
- 'menuData',
201
- 'openKeys',
202
- 'selectedKeys',
203
- 'contentWidth',
204
- 'disableMobile',
205
- 'fixSiderbar',
206
- 'fixedHeader',
207
- 'headerHeight',
208
- 'collapsedWidth',
209
- 'headerLeftWidth'
210
- ]),
211
- siderWidth,
212
- breadcrumb,
213
- flatMenuData,
214
- hasSide,
215
- back: onBack,
216
- hasHeader: true,
217
- flatMenu: hasFlatMenu,
218
- layoutType
219
- })
220
-
221
- console.log(toRefs(props))
222
- provide(routeContextInjectKey, routeContext)
223
-
224
- return () => {
225
- const {
226
- pure,
227
- onCollapse: propsOnCollapse,
228
- onOpenKeys: propsOnOpenKeys,
229
- onSelect: propsOnSelect,
230
- onMenuClick: propsOnMenuClick,
231
- ...restProps
232
- } = props
233
-
234
- const collapsedButtonRender = getSlot(slots, props, 'collapsedButtonRender')
235
- const headerContentRender = getSlot(slots, props, 'headerContentRender')
236
- const rightContentRender = getSlot(slots, props, 'rightContentRender')
237
- const customHeaderRender = getSlot(slots, props, 'headerRender')
238
- // menu
239
- const menuHeaderRender = getSlot(slots, props, 'menuHeaderRender')
240
- const menuExtraRender = getSlot(slots, props, 'menuExtraRender')
241
- const menuContentRender = getSlot(slots, props, 'menuContentRender')
242
- const menuItemRender = getSlot(slots, props, 'menuItemRender')
243
- const subMenuItemRender = getSlot(slots, props, 'subMenuItemRender')
244
- const linksRender = getSlot(slots, props, 'linksRender')
245
- const logoRender = getSlot(slots, props, 'logoRender')
246
- const historyRender = getSlot(slots, props, 'historyRender')
247
- const topHeaderMenuRender = getSlot(slots, props, 'topHeaderMenuRender')
248
-
249
- const headerDom = computed(() => {
250
- return headerRender(
251
- {
252
- ...props,
253
- menuItemRender,
254
- subMenuItemRender,
255
- hasSiderMenu: !isTop.value,
256
- menuData: props.menuData,
257
- onCollapse,
258
- onOpenKeys,
259
- onSelect,
260
- onMenuHeaderClick,
261
- rightContentRender,
262
- collapsedButtonRender,
263
- headerTitleRender: menuHeaderRender,
264
- menuExtraRender,
265
- menuContentRender,
266
- headerContentRender,
267
- logo: logoRender || props.logo,
268
- headerRender: customHeaderRender,
269
- topHeaderMenuRender,
270
- theme: ((props.theme || 'dark').toLocaleLowerCase().includes('dark') ? 'dark' : 'light')
271
- },
272
- props.matchMenuKeys
273
- )
274
- })
275
-
276
- routeContext.hasHeader = !!headerDom.value
277
-
278
- const contentClassName = computed(() => ({
279
- [`${baseClassName.value}-content`]: true,
280
- [`${baseClassName.value}-has-header`]: headerDom,
281
- [`${baseClassName.value}-content-disable-margin`]: props.disableContentMargin
282
- }))
283
-
284
- if (pure) {
285
- return _optionalChain([slots, 'access', _ => _.default, 'optionalCall', _2 => _2()])
286
- }
287
-
288
- if (props.layoutType === LayoutType.LIST) {
289
- return (
290
- React.createElement(Fragment, null
291
- , React.createElement('div', { class: className.value,}
292
- , React.createElement(Layout, { style: { minHeight: '100vh', ...(attrs.style || {}) },}
293
- , headerDom.value
294
- , React.createElement(Layout, { style: genLayoutStyle, class: prefixCls.value,}
295
- , !isTop.value && (
296
- React.createElement(SiderMenu, {
297
- ...restProps,
298
- logo: logoRender || restProps.logo,
299
- menuHeaderRender: menuHeaderRender,
300
- menuExtraRender: menuExtraRender,
301
- menuContentRender: menuContentRender,
302
- menuItemRender: menuItemRender,
303
- subMenuItemRender: subMenuItemRender,
304
- collapsedButtonRender: collapsedButtonRender,
305
- onCollapse: onCollapse,
306
- onSelect: onSelect,
307
- onOpenKeys: onOpenKeys,
308
- onMenuClick: onMenuClick,}
309
- )
310
- )
311
- , React.createElement(Layout, null
312
- , React.createElement(LayoutContent, null
313
- , _optionalChain([slots, 'access', _3 => _3.default, 'optionalCall', _4 => _4()])
314
- )
315
- )
316
- )
317
- )
318
- )
319
- )
320
- )
321
- } else if (props.layoutType === LayoutType.PAD) {
322
- return (
323
- React.createElement('div', { class: className.value,}
324
- , React.createElement(Layout, { style: { minHeight: '100vh', ...(attrs.style || {}) },}
325
- , React.createElement(SiderMenu, {
326
- ...restProps,
327
- logo: logoRender || restProps.logo,
328
- collapsedWidth: 0,
329
- headerHeight: 0,
330
- menuHeaderRender: menuHeaderRender,
331
- menuExtraRender: menuExtraRender,
332
- menuContentRender: menuContentRender,
333
- menuItemRender: menuItemRender,
334
- subMenuItemRender: subMenuItemRender,
335
- collapsedButtonRender: collapsedButtonRender,
336
- onCollapse: onCollapse,
337
- onSelect: onSelect,
338
- onOpenKeys: onOpenKeys,
339
- onMenuClick: onMenuClick,}
340
- )
341
- , React.createElement(Layout, { style: genLayoutStyle, class: prefixCls.value,}
342
- , headerDom.value
343
- , React.createElement(LayoutContent, null
344
- , _optionalChain([slots, 'access', _5 => _5.default, 'optionalCall', _6 => _6()])
345
- )
346
- )
347
- )
348
- )
349
- )
350
- } else {
351
- // CARD layout
352
- return (
353
- React.createElement(Fragment, null
354
- , React.createElement('div', { class: className.value,}
355
- , React.createElement(Layout, null
356
- , React.createElement(SiderMenu, {
357
- ...restProps,
358
- logo: logoRender || restProps.logo,
359
- siderWidth: props.cardSiderWidth,
360
- headerHeight: 0,
361
- menuHeaderRender: menuHeaderRender,
362
- menuExtraRender: menuExtraRender,
363
- linksRender: linksRender,
364
- menuContentRender: menuContentRender,
365
- menuItemRender: menuItemRender,
366
- subMenuItemRender: subMenuItemRender,
367
- onCollapse: onCollapse,
368
- onSelect: onSelect,
369
- onOpenKeys: onOpenKeys,
370
- onMenuClick: onMenuClick,
371
- onAppMenuClick: onAppMenuClick,}
372
- )
373
- , React.createElement(Layout, null
374
- , React.createElement(Layout.Header, {
375
- style: {
376
- background: 'transparent',
377
- padding: 0,
378
- height: '40px',
379
- ...(props.pageHeaderStyle || {})
380
- },}
381
-
382
- , React.createElement(Tabs, {
383
- 'hide-add': true,
384
- type: "editable-card",
385
- class: "history-tabs",
386
- id: "history-route-tabs",
387
- tabBarStyle: { margin: 0 },
388
- onTabClick: onTabClick,
389
- onEdit: onTabEdit,
390
- activeKey: props.historyActive,
391
- onChange: onTabChange,}
392
-
393
- , historyRender
394
- ? historyRender()
395
- : props.historyRoutes.map((item) => (
396
- React.createElement(Tabs.TabPane, {
397
- key: item.name,
398
- tab: item.label,
399
- closable: true,}
400
- )
401
- ))
402
- )
403
- )
404
- , React.createElement(LayoutContent, { style: { flex: '1 1 0', overflow: 'auto' },}
405
- , _optionalChain([slots, 'access', _7 => _7.default, 'optionalCall', _8 => _8()])
406
- )
407
- , React.createElement(Layout.Footer, { style: { padding: '11px 24px', ...(props.pageFooterStyle || {}) },}
408
- , React.createElement(Breadcrumb, { routes: breadcrumb.value.routes,}
409
- , {
410
- itemRender: breadcrumb.value.itemRender
411
- }
412
- )
413
- )
414
- )
415
- )
416
- )
417
- )
418
- )
419
- }
420
- }
421
- }
422
- })
35
+ */
36
+ disableContentMargin: {
37
+ type: Boolean,
38
+ required: false
39
+ },
40
+ colSize: {
41
+ type: Number,
42
+ required: false
43
+ },
44
+ contentStyle: {
45
+ type: [String, Object],
46
+ default: () => null
47
+ },
48
+ breadcrumb: {
49
+ type: [Object, Function],
50
+ default: () => null
51
+ },
52
+ collapsedButtonRender: {
53
+ type: [Function, Object, Boolean],
54
+ default: () => undefined
55
+ },
56
+ breadcrumbRender: {
57
+ type: [Object, Function, Boolean],
58
+ default: () => null
59
+ },
60
+ headerContentRender: {
61
+ type: [Function, Object, Boolean],
62
+ default: () => undefined
63
+ },
64
+ headerRender: {
65
+ type: [Object, Function, Boolean],
66
+ default: () => undefined
67
+ }
68
+ };
69
+ export default defineComponent({
70
+ name: 'JProLayout',
71
+ inheritAttrs: false,
72
+ props: basicLayoutProps,
73
+ emits: ['update:collapsed', 'update:open-keys', 'update:selected-keys', 'update:active-key', 'collapse', 'openKeys', 'select', 'menuHeaderClick', 'menuClick', 'backClick', 'historyTabClick', 'historyTabEdit', 'appMenuClick'],
74
+ setup(props, {
75
+ emit,
76
+ attrs,
77
+ slots
78
+ }) {
79
+ const prefixCls = computed(() => 'ant-layout');
80
+ const isTop = computed(() => props.layout === 'top');
81
+ const hasSide = computed(() => props.layout === 'mix' || props.layout === 'side' || false);
82
+ const hasSplitMenu = computed(() => props.layout === 'mix' && props.splitMenus);
83
+ const hasFlatMenu = computed(() => hasSide.value && hasSplitMenu.value);
84
+ const siderWidth = computed(() => {
85
+ if (props.layoutType === LayoutType.PAD) {
86
+ return props.collapsed ? 0 : props.siderWidth;
87
+ }
88
+ return props.collapsed ? props.collapsedWidth : props.siderWidth;
89
+ });
90
+ const stylePrefixCls = computed(() => 'pro-layout');
91
+ const [wrapSSR, hashId] = useProLayoutStyle(stylePrefixCls);
92
+ const onCollapse = collapsed => {
93
+ emit('update:collapsed', collapsed);
94
+ emit('collapse', collapsed);
95
+ };
96
+ const onOpenKeys = openKeys => {
97
+ emit('update:open-keys', openKeys);
98
+ emit('openKeys', openKeys);
99
+ };
100
+ const onSelect = selectedKeys => {
101
+ emit('update:selected-keys', selectedKeys);
102
+ emit('select', selectedKeys);
103
+ };
104
+ const onMenuHeaderClick = e => {
105
+ emit('menuHeaderClick', e);
106
+ };
107
+ const onMenuClick = args => {
108
+ emit('menuClick', args);
109
+ };
110
+ const onBack = args => {
111
+ emit('backClick', args);
112
+ };
113
+ const onTabClick = args => {
114
+ emit('historyTabClick', args);
115
+ };
116
+ const onTabEdit = args => {
117
+ emit('historyTabEdit', args);
118
+ };
119
+ const onAppMenuClick = args => {
120
+ emit('appMenuClick', args);
121
+ };
122
+ const onTabChange = key => {
123
+ emit('update:active-key', key);
124
+ };
125
+ const baseClassName = computed(() => `${props.prefixCls}-basicLayout`);
126
+ const className = computed(() => ({
127
+ [baseClassName.value]: true,
128
+ [`${baseClassName.value}-top-menu`]: isTop.value,
129
+ [`${baseClassName.value}-is-children`]: props.isChildrenLayout,
130
+ [`${baseClassName.value}-fix-siderbar`]: props.fixSiderbar,
131
+ [`${baseClassName.value}-${props.layout}`]: props.layout,
132
+ [`${baseClassName.value}-${props.layoutType}`]: props.layoutType,
133
+ [hashId.value]: true
134
+ }));
135
+ const genLayoutStyle = reactive({
136
+ position: 'relative'
137
+ });
138
+ watchEffect(() => {
139
+ if (props.isChildrenLayout || props.contentStyle && props.contentStyle.minHeight) {
140
+ genLayoutStyle.minHeight = 0;
141
+ }
142
+ });
143
+ const headerRender = (p, matchMenuKeys) => {
144
+ if (p.headerRender === false || p.pure) {
145
+ return null;
146
+ }
147
+ return h(Header, {
148
+ ...p,
149
+ matchMenuKeys: matchMenuKeys || []
150
+ });
151
+ };
152
+ const breadcrumb = computed(() => ({
153
+ ...props.breadcrumb,
154
+ itemRender: getSlot(slots, props, 'breadcrumbRender')
155
+ }));
156
+ const flatMenuData = computed(() => {
157
+ return hasFlatMenu.value && props.selectedKeys && getMenuFirstChildren(props.menuData, props.selectedKeys[0]) || [];
158
+ });
159
+ const layoutType = computed(() => props.layoutType);
160
+ const routeContext = reactive({
161
+ ...defaultRouteContext,
162
+ ...pick(toRefs(props), ['pure', 'locale', 'menuData', 'openKeys', 'selectedKeys', 'contentWidth', 'disableMobile', 'fixSiderbar', 'fixedHeader', 'headerHeight', 'collapsedWidth', 'headerLeftWidth']),
163
+ siderWidth,
164
+ breadcrumb,
165
+ flatMenuData,
166
+ hasSide,
167
+ back: onBack,
168
+ hasHeader: true,
169
+ flatMenu: hasFlatMenu,
170
+ layoutType
171
+ });
172
+ console.log(toRefs(props));
173
+ provide(routeContextInjectKey, routeContext);
174
+ return () => {
175
+ const {
176
+ pure,
177
+ onCollapse: propsOnCollapse,
178
+ onOpenKeys: propsOnOpenKeys,
179
+ onSelect: propsOnSelect,
180
+ onMenuClick: propsOnMenuClick,
181
+ ...restProps
182
+ } = props;
183
+ const collapsedButtonRender = getSlot(slots, props, 'collapsedButtonRender');
184
+ const headerContentRender = getSlot(slots, props, 'headerContentRender');
185
+ const rightContentRender = getSlot(slots, props, 'rightContentRender');
186
+ const customHeaderRender = getSlot(slots, props, 'headerRender');
187
+ // menu
188
+ const menuHeaderRender = getSlot(slots, props, 'menuHeaderRender');
189
+ const menuExtraRender = getSlot(slots, props, 'menuExtraRender');
190
+ const menuContentRender = getSlot(slots, props, 'menuContentRender');
191
+ const menuItemRender = getSlot(slots, props, 'menuItemRender');
192
+ const subMenuItemRender = getSlot(slots, props, 'subMenuItemRender');
193
+ const linksRender = getSlot(slots, props, 'linksRender');
194
+ const logoRender = getSlot(slots, props, 'logoRender');
195
+ const historyRender = getSlot(slots, props, 'historyRender');
196
+ const topHeaderMenuRender = getSlot(slots, props, 'topHeaderMenuRender');
197
+ const headerDom = computed(() => {
198
+ return headerRender({
199
+ ...props,
200
+ menuItemRender,
201
+ subMenuItemRender,
202
+ hasSiderMenu: !isTop.value,
203
+ menuData: props.menuData,
204
+ onCollapse,
205
+ onOpenKeys,
206
+ onSelect,
207
+ onMenuHeaderClick,
208
+ rightContentRender,
209
+ collapsedButtonRender,
210
+ headerTitleRender: menuHeaderRender,
211
+ menuExtraRender,
212
+ menuContentRender,
213
+ headerContentRender,
214
+ logo: logoRender || props.logo,
215
+ headerRender: customHeaderRender,
216
+ topHeaderMenuRender,
217
+ theme: (props.theme || 'dark').toLocaleLowerCase().includes('dark') ? 'dark' : 'light'
218
+ }, props.matchMenuKeys);
219
+ });
220
+ routeContext.hasHeader = !!headerDom.value;
221
+ const contentClassName = computed(() => ({
222
+ [`${baseClassName.value}-content`]: true,
223
+ [`${baseClassName.value}-has-header`]: headerDom,
224
+ [`${baseClassName.value}-content-disable-margin`]: props.disableContentMargin
225
+ }));
226
+ if (pure) {
227
+ return slots.default?.();
228
+ }
229
+ if (props.layoutType === LayoutType.LIST) {
230
+ return _createVNode(_Fragment, null, [_createVNode("div", {
231
+ "class": className.value
232
+ }, [_createVNode(Layout, {
233
+ "style": {
234
+ minHeight: '100vh',
235
+ ...(attrs.style || {})
236
+ }
237
+ }, {
238
+ default: () => [headerDom.value, _createVNode(Layout, {
239
+ "style": genLayoutStyle,
240
+ "class": prefixCls.value
241
+ }, {
242
+ default: () => [!isTop.value && _createVNode(SiderMenu, _mergeProps(restProps, {
243
+ "logo": logoRender || restProps.logo,
244
+ "menuHeaderRender": menuHeaderRender,
245
+ "menuExtraRender": menuExtraRender,
246
+ "menuContentRender": menuContentRender,
247
+ "menuItemRender": menuItemRender,
248
+ "subMenuItemRender": subMenuItemRender,
249
+ "collapsedButtonRender": collapsedButtonRender,
250
+ "onCollapse": onCollapse,
251
+ "onSelect": onSelect,
252
+ "onOpenKeys": onOpenKeys,
253
+ "onMenuClick": onMenuClick
254
+ }), null), _createVNode(Layout, null, {
255
+ default: () => [_createVNode(LayoutContent, null, {
256
+ default: () => [slots.default?.()]
257
+ })]
258
+ })]
259
+ })]
260
+ })])]);
261
+ } else if (props.layoutType === LayoutType.PAD) {
262
+ return _createVNode("div", {
263
+ "class": className.value
264
+ }, [_createVNode(Layout, {
265
+ "style": {
266
+ minHeight: '100vh',
267
+ ...(attrs.style || {})
268
+ }
269
+ }, {
270
+ default: () => [_createVNode(SiderMenu, _mergeProps(restProps, {
271
+ "logo": logoRender || restProps.logo,
272
+ "collapsedWidth": 0,
273
+ "headerHeight": 0,
274
+ "menuHeaderRender": menuHeaderRender,
275
+ "menuExtraRender": menuExtraRender,
276
+ "menuContentRender": menuContentRender,
277
+ "menuItemRender": menuItemRender,
278
+ "subMenuItemRender": subMenuItemRender,
279
+ "collapsedButtonRender": collapsedButtonRender,
280
+ "onCollapse": onCollapse,
281
+ "onSelect": onSelect,
282
+ "onOpenKeys": onOpenKeys,
283
+ "onMenuClick": onMenuClick
284
+ }), null), _createVNode(Layout, {
285
+ "style": genLayoutStyle,
286
+ "class": prefixCls.value
287
+ }, {
288
+ default: () => [headerDom.value, _createVNode(LayoutContent, null, {
289
+ default: () => [slots.default?.()]
290
+ })]
291
+ })]
292
+ })]);
293
+ } else {
294
+ // CARD layout
295
+ return _createVNode(_Fragment, null, [_createVNode("div", {
296
+ "class": className.value
297
+ }, [_createVNode(Layout, null, {
298
+ default: () => [_createVNode(SiderMenu, _mergeProps(restProps, {
299
+ "logo": logoRender || restProps.logo,
300
+ "siderWidth": props.cardSiderWidth,
301
+ "headerHeight": 0,
302
+ "menuHeaderRender": menuHeaderRender,
303
+ "menuExtraRender": menuExtraRender,
304
+ "linksRender": linksRender,
305
+ "menuContentRender": menuContentRender,
306
+ "menuItemRender": menuItemRender,
307
+ "subMenuItemRender": subMenuItemRender,
308
+ "onCollapse": onCollapse,
309
+ "onSelect": onSelect,
310
+ "onOpenKeys": onOpenKeys,
311
+ "onMenuClick": onMenuClick,
312
+ "onAppMenuClick": onAppMenuClick
313
+ }), null), _createVNode(Layout, null, {
314
+ default: () => [_createVNode(Layout.Header, {
315
+ "style": {
316
+ background: 'transparent',
317
+ padding: 0,
318
+ height: '40px',
319
+ ...(props.pageHeaderStyle || {})
320
+ }
321
+ }, {
322
+ default: () => [_createVNode(Tabs, {
323
+ "hide-add": true,
324
+ "type": "editable-card",
325
+ "class": "history-tabs",
326
+ "id": "history-route-tabs",
327
+ "tabBarStyle": {
328
+ margin: 0
329
+ },
330
+ "onTabClick": onTabClick,
331
+ "onEdit": onTabEdit,
332
+ "activeKey": props.historyActive,
333
+ "onChange": onTabChange
334
+ }, {
335
+ default: () => [historyRender ? historyRender() : props.historyRoutes.map(item => _createVNode(Tabs.TabPane, {
336
+ "key": item.name,
337
+ "tab": item.label,
338
+ "closable": true
339
+ }, null))]
340
+ })]
341
+ }), _createVNode(LayoutContent, {
342
+ "style": {
343
+ flex: '1 1 0',
344
+ overflow: 'auto'
345
+ }
346
+ }, {
347
+ default: () => [slots.default?.()]
348
+ }), _createVNode(Layout.Footer, {
349
+ "style": {
350
+ padding: '11px 24px',
351
+ ...(props.pageFooterStyle || {})
352
+ }
353
+ }, {
354
+ default: () => [_createVNode(Breadcrumb, {
355
+ "routes": breadcrumb.value.routes
356
+ }, {
357
+ itemRender: breadcrumb.value.itemRender
358
+ })]
359
+ })]
360
+ })]
361
+ })])]);
362
+ }
363
+ };
364
+ }
365
+ });