modal.ts 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. import { createApp, h } from 'vue'
  2. import ModalComponent from '../src/components/Modal/ModalComponent.vue'
  3. import ModalFormComponent from '../src/components/Modal/ModalFormComponent.vue'
  4. import ModalSelectTableComponent from '../src/components/Modal/ModalSelectionTableComponent.vue'
  5. interface SearchFormProps {
  6. inputs: any[]
  7. showDefaultBtns?: boolean
  8. value?: object
  9. extraBtns?: Array<any>
  10. layout?: string
  11. }
  12. interface SearchTableProps {
  13. columns: any[]
  14. rowKey?: string
  15. tableProps?: object
  16. tableEvents?: object
  17. requestData: Function
  18. defaultPageSize?: number
  19. defaultPageSizeOptions?: Array<string>
  20. pagination?: boolean
  21. defaultDataSource?: Array<object>
  22. disableScroll?: boolean
  23. autoHeight?: boolean
  24. inModal?: boolean
  25. autoScrollX?: boolean
  26. popupScroll?: number
  27. }
  28. interface ModalProps {
  29. [key: string]: any
  30. title?: string
  31. modalProps?: object
  32. onOK?: Function
  33. }
  34. export function openModal(contentComp: any, modalProps: ModalProps, contentProps?: any = {}) {
  35. const newElement = document.createElement('div')
  36. document.getElementById('app')?.appendChild(newElement)
  37. const app = createApp({
  38. setup() {
  39. return () => {
  40. return h(ModalComponent, {
  41. isComp: contentComp,
  42. title: '弹框',
  43. props: {
  44. cancelText: '取消',
  45. okText: '确定',
  46. destroyOnClose: true,
  47. onCancel: () => {
  48. app.unmount()
  49. },
  50. ...modalProps
  51. },
  52. contentProps: {
  53. ...contentProps
  54. }
  55. })
  56. }
  57. }
  58. })
  59. app.mount(newElement)
  60. }
  61. export function openModalForm(modalProps: ModalProps, contentProps: any) {
  62. const newElement = document.createElement('div')
  63. document.getElementById('app')?.appendChild(newElement)
  64. const app = createApp({
  65. setup() {
  66. return () => {
  67. return h(ModalFormComponent, {
  68. title: '弹框',
  69. layout: 'horizontal',
  70. modalProps: { cancelText: '取消', okText: '确定', destroyOnClose: true, ...modalProps },
  71. contentProps: { value: contentProps?.value ?? {}, ...contentProps }
  72. })
  73. }
  74. }
  75. })
  76. app.mount(newElement)
  77. }
  78. export function openModalSelectTable(
  79. modalProps: ModalProps,
  80. contentProps: SearchFormProps & SearchTableProps
  81. ) {
  82. const newElement = document.createElement('div')
  83. document.getElementById('app')?.appendChild(newElement)
  84. const app = createApp({
  85. setup() {
  86. return () => {
  87. return h(ModalSelectTableComponent, {
  88. title: '弹框',
  89. modalProps: { cancelText: '取消', okText: '确定', destroyOnClose: true, ...modalProps },
  90. searchFormProps: {
  91. inputs: contentProps?.inputs,
  92. showDefaultBtns: contentProps?.showDefaultBtns ?? true,
  93. value: contentProps?.value,
  94. extraBtns: contentProps?.extraBtns,
  95. layout: contentProps?.layout ?? 'inline'
  96. },
  97. searchTableProps: {
  98. columns: contentProps.columns,
  99. rowKey: contentProps.rowKey,
  100. tableProps: contentProps?.tableProps,
  101. tableEvents: contentProps.tableEvents,
  102. requestData: contentProps.requestData,
  103. defaultPageSize: contentProps.defaultPageSize,
  104. defaultPageSizeOptions: contentProps.defaultPageSizeOptions,
  105. pagination: contentProps.pagination,
  106. defaultDataSource: contentProps.defaultDataSource,
  107. disableScroll: contentProps.disableScroll,
  108. autoHeight: contentProps.autoHeight,
  109. inModal: contentProps.inModal,
  110. autoScrollX: contentProps.autoScrollX,
  111. popupScroll: contentProps.popupScroll
  112. },
  113. onSearch: modalProps?.onSearch
  114. })
  115. }
  116. }
  117. })
  118. app.mount(newElement)
  119. }