index.js 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. import Vue from 'vue';
  2. import { VxeUI, renderEmptyElement } from '@vxe-ui/core';
  3. let dynamicContainerElem;
  4. export const DynamicApp = Vue.extend({
  5. data() {
  6. const modals = [];
  7. const drawers = [];
  8. return {
  9. modals,
  10. drawers,
  11. globalLoading: null,
  12. globalWatermark: null
  13. };
  14. },
  15. methods: {
  16. renderVN(h) {
  17. const VxeUIModalComponent = VxeUI.getComponent('vxe-modal');
  18. const VxeUIDrawerComponent = VxeUI.getComponent('vxe-drawer');
  19. const VxeUILoadingComponent = VxeUI.getComponent('vxe-loading');
  20. const VxeUIWatermarkComponent = VxeUI.getComponent('vxe-watermark');
  21. const { modals, drawers, globalLoading, globalWatermark } = this;
  22. return h('div', {}, [
  23. modals.length
  24. ? h('div', {
  25. key: 1,
  26. class: 'vxe-dynamics--modal'
  27. }, modals.map((item) => h(VxeUIModalComponent, {
  28. key: item.key,
  29. props: item.props,
  30. on: item.on
  31. })))
  32. : renderEmptyElement(this),
  33. drawers.length
  34. ? h('div', {
  35. key: 2,
  36. class: 'vxe-dynamics--drawer'
  37. }, drawers.map((item) => h(VxeUIDrawerComponent, {
  38. key: item.key,
  39. props: item.props,
  40. on: item.on
  41. })))
  42. : renderEmptyElement(this),
  43. globalWatermark
  44. ? h(VxeUIWatermarkComponent, {
  45. key: 'gw',
  46. props: globalWatermark
  47. })
  48. : renderEmptyElement(this),
  49. globalLoading
  50. ? h(VxeUILoadingComponent, {
  51. key: 'gl',
  52. props: globalLoading
  53. })
  54. : renderEmptyElement(this)
  55. ]);
  56. }
  57. },
  58. render(h) {
  59. return this.renderVN(h);
  60. }
  61. });
  62. export const dynamicApp = DynamicApp;
  63. export const dynamicStore = new DynamicApp();
  64. export function checkDynamic() {
  65. if (!dynamicContainerElem) {
  66. dynamicContainerElem = document.createElement('div');
  67. dynamicContainerElem.className = 'vxe-dynamics';
  68. document.body.appendChild(dynamicContainerElem);
  69. dynamicStore.$mount(dynamicContainerElem);
  70. }
  71. }