vxe-pc-ui 3.13.11 → 3.13.13

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 (674) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +134 -134
  3. package/es/icon/style.css +1 -1
  4. package/es/style.css +1 -1
  5. package/es/style.min.css +1 -1
  6. package/es/tag/style.css +1 -3
  7. package/es/tag/style.min.css +1 -1
  8. package/es/ui/index.js +1 -1
  9. package/es/ui/src/log.js +1 -1
  10. package/es/vxe-tag/style.css +1 -3
  11. package/es/vxe-tag/style.min.css +1 -1
  12. package/lib/components.js +2 -1
  13. package/lib/components.min.js +1 -1
  14. package/lib/drawer/index.js +2 -1
  15. package/lib/drawer/index.min.js +1 -1
  16. package/lib/icon/style/style.css +1 -1
  17. package/lib/icon/style/style.min.css +1 -1
  18. package/lib/index.common.js +2 -1
  19. package/lib/index.umd.js +7962 -8834
  20. package/lib/index.umd.min.js +1 -1
  21. package/lib/modal/index.js +2 -1
  22. package/lib/modal/index.min.js +1 -1
  23. package/lib/style.css +1 -1
  24. package/lib/style.min.css +1 -1
  25. package/lib/tag/style/style.css +1 -3
  26. package/lib/tag/style/style.min.css +1 -1
  27. package/lib/ui/index.js +1 -1
  28. package/lib/ui/index.min.js +1 -1
  29. package/lib/ui/src/log.js +1 -1
  30. package/lib/ui/src/log.min.js +1 -1
  31. package/lib/vxe-alert/index.js +2 -1
  32. package/lib/vxe-alert/index.min.js +1 -1
  33. package/lib/vxe-anchor/index.js +2 -1
  34. package/lib/vxe-anchor/index.min.js +1 -1
  35. package/lib/vxe-anchor-link/index.js +2 -1
  36. package/lib/vxe-anchor-link/index.min.js +1 -1
  37. package/lib/vxe-avatar/index.js +2 -1
  38. package/lib/vxe-avatar/index.min.js +1 -1
  39. package/lib/vxe-backtop/index.js +2 -1
  40. package/lib/vxe-backtop/index.min.js +1 -1
  41. package/lib/vxe-badge/index.js +2 -1
  42. package/lib/vxe-badge/index.min.js +1 -1
  43. package/lib/vxe-breadcrumb/index.js +2 -1
  44. package/lib/vxe-breadcrumb/index.min.js +1 -1
  45. package/lib/vxe-breadcrumb-item/index.js +2 -1
  46. package/lib/vxe-breadcrumb-item/index.min.js +1 -1
  47. package/lib/vxe-button/index.js +2 -1
  48. package/lib/vxe-button/index.min.js +1 -1
  49. package/lib/vxe-button-group/index.js +2 -1
  50. package/lib/vxe-button-group/index.min.js +1 -1
  51. package/lib/vxe-calendar/index.js +2 -1
  52. package/lib/vxe-calendar/index.min.js +1 -1
  53. package/lib/vxe-card/index.js +2 -1
  54. package/lib/vxe-card/index.min.js +1 -1
  55. package/lib/vxe-carousel/index.js +2 -1
  56. package/lib/vxe-carousel/index.min.js +1 -1
  57. package/lib/vxe-carousel-item/index.js +2 -1
  58. package/lib/vxe-carousel-item/index.min.js +1 -1
  59. package/lib/vxe-cascader/index.js +2 -1
  60. package/lib/vxe-cascader/index.min.js +1 -1
  61. package/lib/vxe-checkbox/index.js +2 -1
  62. package/lib/vxe-checkbox/index.min.js +1 -1
  63. package/lib/vxe-checkbox-button/index.js +2 -1
  64. package/lib/vxe-checkbox-button/index.min.js +1 -1
  65. package/lib/vxe-checkbox-group/index.js +2 -1
  66. package/lib/vxe-checkbox-group/index.min.js +1 -1
  67. package/lib/vxe-col/index.js +2 -1
  68. package/lib/vxe-col/index.min.js +1 -1
  69. package/lib/vxe-collapse/index.js +2 -1
  70. package/lib/vxe-collapse/index.min.js +1 -1
  71. package/lib/vxe-collapse-pane/index.js +2 -1
  72. package/lib/vxe-collapse-pane/index.min.js +1 -1
  73. package/lib/vxe-color-picker/index.js +2 -1
  74. package/lib/vxe-color-picker/index.min.js +1 -1
  75. package/lib/vxe-context-menu/index.js +2 -1
  76. package/lib/vxe-context-menu/index.min.js +1 -1
  77. package/lib/vxe-countdown/index.js +2 -1
  78. package/lib/vxe-countdown/index.min.js +1 -1
  79. package/lib/vxe-date-panel/index.js +2 -1
  80. package/lib/vxe-date-panel/index.min.js +1 -1
  81. package/lib/vxe-date-picker/index.js +2 -1
  82. package/lib/vxe-date-picker/index.min.js +1 -1
  83. package/lib/vxe-date-range-picker/index.js +2 -1
  84. package/lib/vxe-date-range-picker/index.min.js +1 -1
  85. package/lib/vxe-drawer/index.js +2 -1
  86. package/lib/vxe-drawer/index.min.js +1 -1
  87. package/lib/vxe-empty/index.js +2 -1
  88. package/lib/vxe-empty/index.min.js +1 -1
  89. package/lib/vxe-form/index.js +2 -1
  90. package/lib/vxe-form/index.min.js +1 -1
  91. package/lib/vxe-form-gather/index.js +2 -1
  92. package/lib/vxe-form-gather/index.min.js +1 -1
  93. package/lib/vxe-form-group/index.js +2 -1
  94. package/lib/vxe-form-group/index.min.js +1 -1
  95. package/lib/vxe-form-item/index.js +2 -1
  96. package/lib/vxe-form-item/index.min.js +1 -1
  97. package/lib/vxe-icon/index.js +2 -1
  98. package/lib/vxe-icon/index.min.js +1 -1
  99. package/lib/vxe-icon-picker/index.js +2 -1
  100. package/lib/vxe-icon-picker/index.min.js +1 -1
  101. package/lib/vxe-image/index.js +2 -1
  102. package/lib/vxe-image/index.min.js +1 -1
  103. package/lib/vxe-image-group/index.js +2 -1
  104. package/lib/vxe-image-group/index.min.js +1 -1
  105. package/lib/vxe-image-preview/index.js +2 -1
  106. package/lib/vxe-image-preview/index.min.js +1 -1
  107. package/lib/vxe-input/index.js +2 -1
  108. package/lib/vxe-input/index.min.js +1 -1
  109. package/lib/vxe-layout-aside/index.js +2 -1
  110. package/lib/vxe-layout-aside/index.min.js +1 -1
  111. package/lib/vxe-layout-body/index.js +2 -1
  112. package/lib/vxe-layout-body/index.min.js +1 -1
  113. package/lib/vxe-layout-container/index.js +2 -1
  114. package/lib/vxe-layout-container/index.min.js +1 -1
  115. package/lib/vxe-layout-footer/index.js +2 -1
  116. package/lib/vxe-layout-footer/index.min.js +1 -1
  117. package/lib/vxe-layout-header/index.js +2 -1
  118. package/lib/vxe-layout-header/index.min.js +1 -1
  119. package/lib/vxe-link/index.js +2 -1
  120. package/lib/vxe-link/index.min.js +1 -1
  121. package/lib/vxe-list/index.js +2 -1
  122. package/lib/vxe-list/index.min.js +1 -1
  123. package/lib/vxe-loading/index.js +2 -1
  124. package/lib/vxe-loading/index.min.js +1 -1
  125. package/lib/vxe-mention/index.js +2 -1
  126. package/lib/vxe-mention/index.min.js +1 -1
  127. package/lib/vxe-menu/index.js +2 -1
  128. package/lib/vxe-menu/index.min.js +1 -1
  129. package/lib/vxe-modal/index.js +2 -1
  130. package/lib/vxe-modal/index.min.js +1 -1
  131. package/lib/vxe-notice-bar/index.js +2 -1
  132. package/lib/vxe-notice-bar/index.min.js +1 -1
  133. package/lib/vxe-number-input/index.js +2 -1
  134. package/lib/vxe-number-input/index.min.js +1 -1
  135. package/lib/vxe-optgroup/index.js +2 -1
  136. package/lib/vxe-optgroup/index.min.js +1 -1
  137. package/lib/vxe-option/index.js +2 -1
  138. package/lib/vxe-option/index.min.js +1 -1
  139. package/lib/vxe-pager/index.js +2 -1
  140. package/lib/vxe-pager/index.min.js +1 -1
  141. package/lib/vxe-password-input/index.js +2 -1
  142. package/lib/vxe-password-input/index.min.js +1 -1
  143. package/lib/vxe-print/index.js +2 -1
  144. package/lib/vxe-print/index.min.js +1 -1
  145. package/lib/vxe-print-page-break/index.js +2 -1
  146. package/lib/vxe-print-page-break/index.min.js +1 -1
  147. package/lib/vxe-pulldown/index.js +2 -1
  148. package/lib/vxe-pulldown/index.min.js +1 -1
  149. package/lib/vxe-radio/index.js +2 -1
  150. package/lib/vxe-radio/index.min.js +1 -1
  151. package/lib/vxe-radio-button/index.js +2 -1
  152. package/lib/vxe-radio-button/index.min.js +1 -1
  153. package/lib/vxe-radio-group/index.js +2 -1
  154. package/lib/vxe-radio-group/index.min.js +1 -1
  155. package/lib/vxe-rate/index.js +2 -1
  156. package/lib/vxe-rate/index.min.js +1 -1
  157. package/lib/vxe-result/index.js +2 -1
  158. package/lib/vxe-result/index.min.js +1 -1
  159. package/lib/vxe-row/index.js +2 -1
  160. package/lib/vxe-row/index.min.js +1 -1
  161. package/lib/vxe-segmented/index.js +2 -1
  162. package/lib/vxe-segmented/index.min.js +1 -1
  163. package/lib/vxe-select/index.js +2 -1
  164. package/lib/vxe-select/index.min.js +1 -1
  165. package/lib/vxe-slider/index.js +2 -1
  166. package/lib/vxe-slider/index.min.js +1 -1
  167. package/lib/vxe-split/index.js +2 -1
  168. package/lib/vxe-split/index.min.js +1 -1
  169. package/lib/vxe-split-pane/index.js +2 -1
  170. package/lib/vxe-split-pane/index.min.js +1 -1
  171. package/lib/vxe-splitter/index.js +2 -1
  172. package/lib/vxe-splitter/index.min.js +1 -1
  173. package/lib/vxe-splitter-panel/index.js +2 -1
  174. package/lib/vxe-splitter-panel/index.min.js +1 -1
  175. package/lib/vxe-steps/index.js +2 -1
  176. package/lib/vxe-steps/index.min.js +1 -1
  177. package/lib/vxe-switch/index.js +2 -1
  178. package/lib/vxe-switch/index.min.js +1 -1
  179. package/lib/vxe-tab-pane/index.js +2 -1
  180. package/lib/vxe-tab-pane/index.min.js +1 -1
  181. package/lib/vxe-table-select/index.js +2 -1
  182. package/lib/vxe-table-select/index.min.js +1 -1
  183. package/lib/vxe-tabs/index.js +2 -1
  184. package/lib/vxe-tabs/index.min.js +1 -1
  185. package/lib/vxe-tag/index.js +2 -1
  186. package/lib/vxe-tag/index.min.js +1 -1
  187. package/lib/vxe-tag/style/style.css +1 -3
  188. package/lib/vxe-tag/style/style.min.css +1 -1
  189. package/lib/vxe-text/index.js +2 -1
  190. package/lib/vxe-text/index.min.js +1 -1
  191. package/lib/vxe-text-ellipsis/index.js +2 -1
  192. package/lib/vxe-text-ellipsis/index.min.js +1 -1
  193. package/lib/vxe-textarea/index.js +2 -1
  194. package/lib/vxe-textarea/index.min.js +1 -1
  195. package/lib/vxe-timeline/index.js +2 -1
  196. package/lib/vxe-timeline/index.min.js +1 -1
  197. package/lib/vxe-timeline-item/index.js +2 -1
  198. package/lib/vxe-timeline-item/index.min.js +1 -1
  199. package/lib/vxe-tip/index.js +2 -1
  200. package/lib/vxe-tip/index.min.js +1 -1
  201. package/lib/vxe-tooltip/index.js +2 -1
  202. package/lib/vxe-tooltip/index.min.js +1 -1
  203. package/lib/vxe-tour/index.js +2 -1
  204. package/lib/vxe-tour/index.min.js +1 -1
  205. package/lib/vxe-tree/index.js +2 -1
  206. package/lib/vxe-tree/index.min.js +1 -1
  207. package/lib/vxe-tree-select/index.js +2 -1
  208. package/lib/vxe-tree-select/index.min.js +1 -1
  209. package/lib/vxe-u-i/index.js +2 -1
  210. package/lib/vxe-u-i/index.min.js +1 -1
  211. package/lib/vxe-ui/index.js +2 -1
  212. package/lib/vxe-ui/index.min.js +1 -1
  213. package/lib/vxe-upload/index.js +2 -1
  214. package/lib/vxe-upload/index.min.js +1 -1
  215. package/lib/vxe-watermark/index.js +2 -1
  216. package/lib/vxe-watermark/index.min.js +1 -1
  217. package/package.json +89 -89
  218. package/packages/alert/index.ts +16 -16
  219. package/packages/alert/src/alert.ts +106 -106
  220. package/packages/anchor/index.ts +16 -16
  221. package/packages/anchor/src/anchor-link.ts +158 -158
  222. package/packages/anchor/src/anchor.ts +267 -267
  223. package/packages/anchor/src/util.ts +23 -23
  224. package/packages/anchor-link/index.ts +16 -16
  225. package/packages/avatar/index.ts +16 -16
  226. package/packages/avatar/src/avatar.ts +141 -141
  227. package/packages/backtop/index.ts +16 -16
  228. package/packages/backtop/src/backtop.ts +330 -330
  229. package/packages/badge/index.ts +16 -16
  230. package/packages/badge/src/badge.ts +87 -87
  231. package/packages/breadcrumb/index.ts +16 -16
  232. package/packages/breadcrumb/src/breadcrumb-item.ts +118 -118
  233. package/packages/breadcrumb/src/breadcrumb.ts +89 -89
  234. package/packages/breadcrumb-item/index.ts +16 -16
  235. package/packages/button/index.ts +16 -16
  236. package/packages/button/src/button-group.ts +113 -113
  237. package/packages/button/src/button.ts +955 -955
  238. package/packages/button-group/index.ts +16 -16
  239. package/packages/calendar/index.ts +16 -16
  240. package/packages/calendar/src/calendar.ts +1527 -1527
  241. package/packages/card/index.ts +16 -16
  242. package/packages/card/src/card.ts +162 -162
  243. package/packages/carousel/index.ts +16 -16
  244. package/packages/carousel/src/carousel-item.ts +117 -117
  245. package/packages/carousel/src/carousel.ts +460 -460
  246. package/packages/carousel/src/util.ts +21 -21
  247. package/packages/carousel-item/index.ts +16 -16
  248. package/packages/cascader/index.ts +16 -16
  249. package/packages/cascader/src/cascader.ts +941 -941
  250. package/packages/checkbox/index.ts +16 -16
  251. package/packages/checkbox/src/button.ts +185 -185
  252. package/packages/checkbox/src/checkbox.ts +189 -189
  253. package/packages/checkbox/src/group.ts +259 -259
  254. package/packages/checkbox-button/index.ts +16 -16
  255. package/packages/checkbox-group/index.ts +16 -16
  256. package/packages/col/index.ts +16 -16
  257. package/packages/collapse/index.ts +16 -16
  258. package/packages/collapse/src/collapse-pane.ts +136 -136
  259. package/packages/collapse/src/collapse.ts +259 -259
  260. package/packages/collapse/src/util.ts +21 -21
  261. package/packages/collapse-pane/index.ts +16 -16
  262. package/packages/color-picker/index.ts +16 -16
  263. package/packages/color-picker/src/color-picker.ts +1277 -1277
  264. package/packages/color-picker/src/util.ts +198 -198
  265. package/packages/components.ts +307 -307
  266. package/packages/context-menu/index.ts +54 -54
  267. package/packages/context-menu/src/context-menu.ts +709 -709
  268. package/packages/countdown/index.ts +16 -16
  269. package/packages/countdown/src/countdown.ts +276 -276
  270. package/packages/date-panel/index.ts +16 -16
  271. package/packages/date-panel/src/date-panel.ts +2024 -2024
  272. package/packages/date-panel/src/util.ts +244 -244
  273. package/packages/date-picker/index.ts +17 -17
  274. package/packages/date-picker/src/date-picker.ts +1238 -1238
  275. package/packages/date-range-picker/index.ts +16 -16
  276. package/packages/date-range-picker/src/date-range-picker.ts +1466 -1466
  277. package/packages/drawer/index.ts +87 -87
  278. package/packages/drawer/src/drawer.ts +767 -767
  279. package/packages/dynamics/index.ts +125 -125
  280. package/packages/empty/index.ts +16 -16
  281. package/packages/empty/src/empty.ts +80 -80
  282. package/packages/form/index.ts +16 -16
  283. package/packages/form/render/index.ts +617 -617
  284. package/packages/form/src/form-config-item.ts +86 -86
  285. package/packages/form/src/form-group.ts +125 -125
  286. package/packages/form/src/form-item.ts +217 -217
  287. package/packages/form/src/form.ts +1032 -1032
  288. package/packages/form/src/itemInfo.ts +80 -80
  289. package/packages/form/src/render.ts +398 -398
  290. package/packages/form/src/util.ts +92 -92
  291. package/packages/form-gather/index.ts +18 -18
  292. package/packages/form-group/index.ts +16 -16
  293. package/packages/form-item/index.ts +16 -16
  294. package/packages/icon/index.ts +16 -16
  295. package/packages/icon/src/icon.ts +75 -75
  296. package/packages/icon-picker/index.ts +16 -16
  297. package/packages/icon-picker/src/icon-picker.ts +752 -752
  298. package/packages/image/index.ts +16 -16
  299. package/packages/image/src/group.ts +162 -162
  300. package/packages/image/src/image.ts +286 -286
  301. package/packages/image/src/preview.ts +737 -737
  302. package/packages/image/src/util.ts +62 -62
  303. package/packages/image-group/index.ts +16 -16
  304. package/packages/image-preview/index.ts +19 -19
  305. package/packages/index.ts +8 -8
  306. package/packages/input/index.ts +16 -16
  307. package/packages/input/src/input.ts +3187 -3187
  308. package/packages/language/ar-EG.ts +832 -832
  309. package/packages/language/de-DE.ts +832 -832
  310. package/packages/language/en-US.ts +832 -832
  311. package/packages/language/es-ES.ts +832 -832
  312. package/packages/language/fr-FR.ts +832 -832
  313. package/packages/language/hu-HU.ts +832 -832
  314. package/packages/language/hy-AM.ts +832 -832
  315. package/packages/language/id-ID.ts +832 -832
  316. package/packages/language/it-IT.ts +832 -832
  317. package/packages/language/ja-JP.ts +832 -832
  318. package/packages/language/ko-KR.ts +832 -832
  319. package/packages/language/ms-MY.ts +832 -832
  320. package/packages/language/nb-NO.ts +832 -832
  321. package/packages/language/pt-BR.ts +832 -832
  322. package/packages/language/ru-RU.ts +832 -832
  323. package/packages/language/th-TH.ts +832 -832
  324. package/packages/language/ug-CN.ts +832 -832
  325. package/packages/language/uk-UA.ts +832 -832
  326. package/packages/language/uz-UZ.ts +832 -832
  327. package/packages/language/vi-VN.ts +832 -832
  328. package/packages/language/zh-CHT.ts +832 -832
  329. package/packages/language/zh-CN.ts +832 -832
  330. package/packages/language/zh-HK.ts +3 -3
  331. package/packages/language/zh-MO.ts +3 -3
  332. package/packages/language/zh-TC.ts +3 -3
  333. package/packages/language/zh-TW.ts +3 -3
  334. package/packages/layout-aside/index.ts +16 -16
  335. package/packages/layout-aside/src/layout-aside.ts +115 -115
  336. package/packages/layout-body/index.ts +16 -16
  337. package/packages/layout-body/src/layout-body.ts +137 -137
  338. package/packages/layout-container/index.ts +16 -16
  339. package/packages/layout-container/src/layout-container.ts +65 -65
  340. package/packages/layout-footer/index.ts +16 -16
  341. package/packages/layout-footer/src/layout-footer.ts +53 -53
  342. package/packages/layout-header/index.ts +16 -16
  343. package/packages/layout-header/src/layout-header.ts +49 -49
  344. package/packages/link/index.ts +16 -16
  345. package/packages/link/src/link.ts +153 -153
  346. package/packages/list/index.ts +16 -16
  347. package/packages/list/src/list.ts +492 -492
  348. package/packages/loading/index.ts +34 -34
  349. package/packages/loading/src/loading.ts +162 -162
  350. package/packages/mention/index.ts +16 -16
  351. package/packages/mention/src/mention.ts +54 -54
  352. package/packages/menu/index.ts +16 -16
  353. package/packages/menu/src/menu.ts +632 -632
  354. package/packages/modal/index.ts +150 -150
  355. package/packages/modal/src/modal.ts +1657 -1657
  356. package/packages/notice-bar/index.ts +16 -16
  357. package/packages/notice-bar/src/notice-bar.ts +182 -182
  358. package/packages/number-input/index.ts +16 -16
  359. package/packages/number-input/src/number-input.ts +1255 -1255
  360. package/packages/number-input/src/util.ts +12 -12
  361. package/packages/optgroup/index.ts +16 -16
  362. package/packages/option/index.ts +16 -16
  363. package/packages/pager/index.ts +16 -16
  364. package/packages/pager/src/pager.ts +913 -913
  365. package/packages/password-input/index.ts +16 -16
  366. package/packages/password-input/src/password-input.ts +466 -466
  367. package/packages/print/index.ts +18 -18
  368. package/packages/print/src/page-break.ts +78 -78
  369. package/packages/print/src/print.ts +266 -266
  370. package/packages/print/src/util.ts +284 -284
  371. package/packages/print-page-break/index.ts +14 -14
  372. package/packages/pulldown/index.ts +16 -16
  373. package/packages/pulldown/src/pulldown.ts +532 -532
  374. package/packages/radio/index.ts +16 -16
  375. package/packages/radio/src/button.ts +221 -221
  376. package/packages/radio/src/group.ts +252 -252
  377. package/packages/radio/src/radio.ts +228 -228
  378. package/packages/radio-button/index.ts +16 -16
  379. package/packages/radio-group/index.ts +16 -16
  380. package/packages/rate/index.ts +16 -16
  381. package/packages/rate/src/rate.ts +199 -199
  382. package/packages/result/index.ts +16 -16
  383. package/packages/result/src/result.ts +93 -93
  384. package/packages/row/index.ts +16 -16
  385. package/packages/row/src/col.ts +130 -130
  386. package/packages/row/src/row.ts +106 -106
  387. package/packages/segmented/index.ts +16 -16
  388. package/packages/segmented/src/segmented.ts +281 -281
  389. package/packages/select/index.ts +16 -16
  390. package/packages/select/src/optgroup.ts +107 -107
  391. package/packages/select/src/option-info.ts +20 -20
  392. package/packages/select/src/option.ts +103 -103
  393. package/packages/select/src/select.ts +2000 -2000
  394. package/packages/select/src/util.ts +47 -47
  395. package/packages/slider/index.ts +16 -16
  396. package/packages/slider/src/slider.ts +332 -332
  397. package/packages/split/index.ts +16 -16
  398. package/packages/split-pane/index.ts +17 -17
  399. package/packages/splitter/index.ts +16 -16
  400. package/packages/splitter/src/splitter-panel.ts +171 -171
  401. package/packages/splitter/src/splitter.ts +1032 -1032
  402. package/packages/splitter/src/util.ts +21 -21
  403. package/packages/splitter-panel/index.ts +16 -16
  404. package/packages/steps/index.ts +16 -16
  405. package/packages/steps/src/steps.ts +57 -57
  406. package/packages/switch/index.ts +16 -16
  407. package/packages/switch/src/switch.ts +279 -279
  408. package/packages/tab-pane/index.ts +16 -16
  409. package/packages/table-select/index.ts +16 -16
  410. package/packages/table-select/src/table-select.ts +903 -903
  411. package/packages/tabs/index.ts +16 -16
  412. package/packages/tabs/src/tab-pane.ts +137 -137
  413. package/packages/tabs/src/tabs.ts +1014 -1014
  414. package/packages/tabs/src/util.ts +21 -21
  415. package/packages/tag/index.ts +16 -16
  416. package/packages/tag/src/tag.ts +195 -195
  417. package/packages/text/index.ts +16 -16
  418. package/packages/text/src/text.ts +267 -267
  419. package/packages/text-ellipsis/index.ts +16 -16
  420. package/packages/text-ellipsis/src/text-ellipsis.ts +291 -291
  421. package/packages/textarea/index.ts +16 -16
  422. package/packages/textarea/src/textarea.ts +436 -436
  423. package/packages/timeline/index.ts +16 -16
  424. package/packages/timeline/src/timeline-item.ts +41 -41
  425. package/packages/timeline/src/timeline.ts +54 -54
  426. package/packages/timeline-item/index.ts +16 -16
  427. package/packages/tip/index.ts +19 -19
  428. package/packages/tip/src/tip.ts +112 -112
  429. package/packages/tooltip/index.ts +16 -16
  430. package/packages/tooltip/src/tooltip.ts +641 -641
  431. package/packages/tour/index.ts +16 -16
  432. package/packages/tour/src/tour.ts +54 -54
  433. package/packages/tree/index.ts +16 -16
  434. package/packages/tree/src/store.ts +15 -15
  435. package/packages/tree/src/tree.ts +3080 -3080
  436. package/packages/tree/src/util.ts +44 -44
  437. package/packages/tree-select/index.ts +16 -16
  438. package/packages/tree-select/src/tree-select.ts +1115 -1115
  439. package/packages/ui/index.ts +695 -695
  440. package/packages/ui/src/anime.ts +52 -52
  441. package/packages/ui/src/comp.ts +3 -3
  442. package/packages/ui/src/dom.ts +263 -263
  443. package/packages/ui/src/log.ts +6 -6
  444. package/packages/ui/src/utils.ts +49 -49
  445. package/packages/ui/src/vn.ts +60 -60
  446. package/packages/upload/index.ts +20 -20
  447. package/packages/upload/src/upload.ts +2127 -2127
  448. package/packages/upload/src/util.ts +109 -109
  449. package/packages/vxe-u-i/index.ts +4 -4
  450. package/packages/watermark/index.ts +31 -31
  451. package/packages/watermark/src/util.ts +176 -176
  452. package/packages/watermark/src/watermark.ts +166 -166
  453. package/styles/all.scss +90 -90
  454. package/styles/base.scss +16 -16
  455. package/styles/components/alert.scss +101 -101
  456. package/styles/components/anchor.scss +44 -44
  457. package/styles/components/avatar.scss +115 -115
  458. package/styles/components/backtop.scss +82 -82
  459. package/styles/components/badge.scss +45 -45
  460. package/styles/components/breadcrumb.scss +29 -29
  461. package/styles/components/button-group.scss +30 -30
  462. package/styles/components/button.scss +415 -415
  463. package/styles/components/calendar.scss +471 -471
  464. package/styles/components/card.scss +121 -121
  465. package/styles/components/carousel.scss +184 -184
  466. package/styles/components/cascader.scss +140 -140
  467. package/styles/components/checkbox-button.scss +57 -57
  468. package/styles/components/checkbox.scss +81 -81
  469. package/styles/components/collapse.scss +56 -56
  470. package/styles/components/color-picker.scss +409 -409
  471. package/styles/components/context-menu.scss +102 -102
  472. package/styles/components/countdown.scss +35 -35
  473. package/styles/components/date-panel.scss +505 -505
  474. package/styles/components/date-picker.scss +247 -247
  475. package/styles/components/date-range-picker.scss +252 -252
  476. package/styles/components/drawer.scss +298 -298
  477. package/styles/components/empty.scss +79 -79
  478. package/styles/components/form.scss +668 -668
  479. package/styles/components/icon-picker.scss +211 -211
  480. package/styles/components/icon.scss +1044 -1044
  481. package/styles/components/image-group.scss +2 -2
  482. package/styles/components/image-preview.scss +215 -215
  483. package/styles/components/image.scss +16 -16
  484. package/styles/components/input.scss +846 -846
  485. package/styles/components/layout-aside.scss +22 -22
  486. package/styles/components/layout-body.scss +14 -14
  487. package/styles/components/layout-container.scss +13 -13
  488. package/styles/components/layout-footer.scss +14 -14
  489. package/styles/components/layout-header.scss +11 -11
  490. package/styles/components/link.scss +115 -115
  491. package/styles/components/list.scss +40 -40
  492. package/styles/components/loading.scss +137 -137
  493. package/styles/components/menu.scss +150 -150
  494. package/styles/components/modal.scss +480 -480
  495. package/styles/components/notice-bar.scss +91 -91
  496. package/styles/components/number-input.scss +283 -283
  497. package/styles/components/old-icon.scss +4 -4
  498. package/styles/components/pager.scss +282 -282
  499. package/styles/components/password-input.scss +374 -374
  500. package/styles/components/print.scss +3 -3
  501. package/styles/components/pulldown.scss +75 -75
  502. package/styles/components/radio-button.scss +57 -57
  503. package/styles/components/radio.scss +79 -79
  504. package/styles/components/rate.scss +76 -76
  505. package/styles/components/result.scss +91 -91
  506. package/styles/components/row.scss +69 -69
  507. package/styles/components/segmented.scss +215 -215
  508. package/styles/components/select.scss +244 -244
  509. package/styles/components/slider.scss +139 -139
  510. package/styles/components/split.scss +1 -1
  511. package/styles/components/splitter.scss +318 -318
  512. package/styles/components/switch.scss +128 -128
  513. package/styles/components/table-select.scss +105 -105
  514. package/styles/components/tabs.scss +745 -745
  515. package/styles/components/tag.scss +184 -184
  516. package/styles/components/text-ellipsis.scss +130 -130
  517. package/styles/components/text.scss +123 -123
  518. package/styles/components/textarea.scss +106 -106
  519. package/styles/components/tip.scss +97 -97
  520. package/styles/components/tooltip.scss +140 -140
  521. package/styles/components/tree-select.scss +166 -166
  522. package/styles/components/tree.scss +294 -294
  523. package/styles/components/upload.scss +497 -497
  524. package/styles/components/watermark.scss +26 -26
  525. package/styles/helpers/baseMixin.scss +95 -95
  526. package/styles/helpers/baseVar.scss +3 -3
  527. package/styles/helpers/placement.scss +38 -38
  528. package/styles/theme/base.scss +214 -214
  529. package/styles/theme/dark.scss +119 -119
  530. package/styles/theme/light.scss +118 -118
  531. package/styles/variable.scss +111 -111
  532. package/types/all.d.ts +328 -328
  533. package/types/components/alert.d.ts +80 -80
  534. package/types/components/anchor-link.d.ts +84 -84
  535. package/types/components/anchor.d.ts +84 -84
  536. package/types/components/avatar.d.ts +81 -81
  537. package/types/components/backtop.d.ts +115 -115
  538. package/types/components/badge.d.ts +69 -69
  539. package/types/components/breadcrumb-item.d.ts +73 -73
  540. package/types/components/breadcrumb.d.ts +80 -80
  541. package/types/components/button-group.d.ts +113 -113
  542. package/types/components/button.d.ts +314 -314
  543. package/types/components/calendar.d.ts +254 -254
  544. package/types/components/card.d.ts +86 -86
  545. package/types/components/carousel-item.d.ts +68 -68
  546. package/types/components/carousel.d.ts +126 -126
  547. package/types/components/cascader.d.ts +242 -242
  548. package/types/components/checkbox-button.d.ts +93 -93
  549. package/types/components/checkbox-group.d.ts +135 -135
  550. package/types/components/checkbox.d.ts +115 -115
  551. package/types/components/col.d.ts +73 -73
  552. package/types/components/colgroup.d.ts +131 -131
  553. package/types/components/collapse-pane.d.ts +82 -82
  554. package/types/components/collapse.d.ts +115 -115
  555. package/types/components/color-picker.d.ts +127 -127
  556. package/types/components/column.d.ts +852 -852
  557. package/types/components/context-menu.d.ts +300 -300
  558. package/types/components/countdown.d.ts +99 -99
  559. package/types/components/date-panel.d.ts +269 -269
  560. package/types/components/date-picker.d.ts +302 -302
  561. package/types/components/date-range-picker.d.ts +316 -316
  562. package/types/components/drawer.d.ts +295 -295
  563. package/types/components/empty.d.ts +71 -71
  564. package/types/components/flow-design.d.ts +78 -78
  565. package/types/components/flow-view.d.ts +78 -78
  566. package/types/components/form-design.d.ts +364 -364
  567. package/types/components/form-gather.d.ts +72 -72
  568. package/types/components/form-group.d.ts +63 -63
  569. package/types/components/form-item.d.ts +405 -405
  570. package/types/components/form-view.d.ts +175 -175
  571. package/types/components/form.d.ts +463 -463
  572. package/types/components/gantt-module/gantt-view.d.ts +170 -170
  573. package/types/components/gantt-module/index.d.ts +1 -1
  574. package/types/components/gantt-plugins/extend-gantt-chart.d.ts +114 -114
  575. package/types/components/gantt-plugins/index.d.ts +1 -1
  576. package/types/components/gantt.d.ts +1129 -1129
  577. package/types/components/grid.d.ts +1030 -1030
  578. package/types/components/icon-picker.d.ts +181 -181
  579. package/types/components/icon.d.ts +80 -80
  580. package/types/components/image-group.d.ts +120 -120
  581. package/types/components/image-preview.d.ts +159 -159
  582. package/types/components/image.d.ts +158 -158
  583. package/types/components/input.d.ts +425 -425
  584. package/types/components/layout-aside.d.ts +73 -73
  585. package/types/components/layout-body.d.ts +84 -84
  586. package/types/components/layout-container.d.ts +66 -66
  587. package/types/components/layout-footer.d.ts +66 -66
  588. package/types/components/layout-header.d.ts +64 -64
  589. package/types/components/link.d.ts +104 -104
  590. package/types/components/list-design.d.ts +177 -177
  591. package/types/components/list-view.d.ts +190 -190
  592. package/types/components/list.d.ts +196 -196
  593. package/types/components/loading.d.ts +96 -96
  594. package/types/components/mention.d.ts +70 -70
  595. package/types/components/menu.d.ts +203 -203
  596. package/types/components/modal.d.ts +540 -540
  597. package/types/components/notice-bar.d.ts +95 -95
  598. package/types/components/number-input.d.ts +300 -300
  599. package/types/components/optgroup.d.ts +81 -81
  600. package/types/components/option.d.ts +95 -95
  601. package/types/components/pager.d.ts +322 -322
  602. package/types/components/password-input.d.ts +129 -129
  603. package/types/components/print-page-break.d.ts +62 -62
  604. package/types/components/print.d.ts +199 -199
  605. package/types/components/pulldown.d.ts +222 -222
  606. package/types/components/radio-button.d.ts +104 -104
  607. package/types/components/radio-group.d.ts +136 -136
  608. package/types/components/radio.d.ts +121 -121
  609. package/types/components/rate.d.ts +75 -75
  610. package/types/components/result.d.ts +77 -77
  611. package/types/components/row.d.ts +72 -72
  612. package/types/components/segmented.d.ts +117 -117
  613. package/types/components/select.d.ts +515 -515
  614. package/types/components/slider.d.ts +117 -117
  615. package/types/components/split-pane.d.ts +135 -135
  616. package/types/components/split.d.ts +318 -318
  617. package/types/components/splitter-panel.d.ts +98 -98
  618. package/types/components/splitter.d.ts +283 -283
  619. package/types/components/steps.d.ts +61 -61
  620. package/types/components/switch.d.ts +124 -124
  621. package/types/components/tab-pane.d.ts +107 -107
  622. package/types/components/table-module/custom.d.ts +111 -111
  623. package/types/components/table-module/edit.d.ts +244 -244
  624. package/types/components/table-module/export.d.ts +96 -96
  625. package/types/components/table-module/filter.d.ts +140 -140
  626. package/types/components/table-module/index.d.ts +7 -7
  627. package/types/components/table-module/keyboard.d.ts +26 -26
  628. package/types/components/table-module/menu.d.ts +26 -26
  629. package/types/components/table-module/validator.d.ts +53 -53
  630. package/types/components/table-plugins/extend-cell-area.d.ts +734 -734
  631. package/types/components/table-plugins/extend-pivot-table.d.ts +62 -62
  632. package/types/components/table-plugins/filters-combination.d.ts +15 -15
  633. package/types/components/table-plugins/filters-complex-input.d.ts +9 -9
  634. package/types/components/table-plugins/index.d.ts +4 -4
  635. package/types/components/table-select.d.ts +212 -212
  636. package/types/components/table.d.ts +7222 -7206
  637. package/types/components/tabs.d.ts +324 -324
  638. package/types/components/tag.d.ts +107 -107
  639. package/types/components/text-ellipsis.d.ts +105 -105
  640. package/types/components/text.d.ts +115 -115
  641. package/types/components/textarea.d.ts +237 -237
  642. package/types/components/timeline-item.d.ts +68 -68
  643. package/types/components/timeline.d.ts +70 -70
  644. package/types/components/tip.d.ts +76 -76
  645. package/types/components/toolbar.d.ts +329 -329
  646. package/types/components/tooltip.d.ts +165 -165
  647. package/types/components/tour.d.ts +70 -70
  648. package/types/components/tree-select.d.ts +295 -295
  649. package/types/components/tree.d.ts +826 -826
  650. package/types/components/upload.d.ts +432 -432
  651. package/types/components/watermark.d.ts +113 -113
  652. package/types/index.d.ts +4 -4
  653. package/types/ui/commands.d.ts +57 -57
  654. package/types/ui/formats.d.ts +62 -62
  655. package/types/ui/global-config.d.ts +254 -254
  656. package/types/ui/global-icon.d.ts +292 -292
  657. package/types/ui/hooks.d.ts +11 -11
  658. package/types/ui/index.d.ts +95 -95
  659. package/types/ui/interceptor.d.ts +54 -54
  660. package/types/ui/menus.d.ts +77 -77
  661. package/types/ui/renderer.d.ts +1042 -1042
  662. package/types/ui/validators.d.ts +38 -38
  663. /package/es/icon/{iconfont.1773972997530.ttf → iconfont.1774240783948.ttf} +0 -0
  664. /package/es/icon/{iconfont.1773972997530.woff → iconfont.1774240783948.woff} +0 -0
  665. /package/es/icon/{iconfont.1773972997530.woff2 → iconfont.1774240783948.woff2} +0 -0
  666. /package/es/{iconfont.1773972997530.ttf → iconfont.1774240783948.ttf} +0 -0
  667. /package/es/{iconfont.1773972997530.woff → iconfont.1774240783948.woff} +0 -0
  668. /package/es/{iconfont.1773972997530.woff2 → iconfont.1774240783948.woff2} +0 -0
  669. /package/lib/icon/style/{iconfont.1773972997530.ttf → iconfont.1774240783948.ttf} +0 -0
  670. /package/lib/icon/style/{iconfont.1773972997530.woff → iconfont.1774240783948.woff} +0 -0
  671. /package/lib/icon/style/{iconfont.1773972997530.woff2 → iconfont.1774240783948.woff2} +0 -0
  672. /package/lib/{iconfont.1773972997530.ttf → iconfont.1774240783948.ttf} +0 -0
  673. /package/lib/{iconfont.1773972997530.woff → iconfont.1774240783948.woff} +0 -0
  674. /package/lib/{iconfont.1773972997530.woff2 → iconfont.1774240783948.woff2} +0 -0
@@ -1,1657 +1,1657 @@
1
- import { PropType, CreateElement, VNode } from 'vue'
2
- import { defineVxeComponent } from '../../ui/src/comp'
3
- import XEUtils from 'xe-utils'
4
- import { VxeUI, getConfig, getI18n, getIcon, createEvent, globalEvents, globalMixins, renderEmptyElement, GLOBAL_EVENT_KEYS } from '../../ui'
5
- import { getDomNode, getEventTargetNode, toCssUnit } from '../../ui/src/dom'
6
- import { getLastZIndex, nextZIndex, getSubLastZIndex, nextSubZIndex, getFuncText, handleBooleanDefaultValue } from '../../ui/src/utils'
7
- import VxeButtonComponent from '../../button/src/button'
8
- import VxeLoadingComponent from '../../loading/index'
9
- import { getSlotVNs } from '../../ui/src/vn'
10
- import { warnLog, errLog } from '../../ui/src/log'
11
-
12
- import type { VxeModalConstructor, VxeModalPropTypes, ModalReactData, ModalInternalData, VxeModalMethods, ModalEventTypes, VxeModalEmits, VxeComponentSizeType, VxeComponentPermissionInfo, ValueOf, VxeButtonConstructor, VxeDrawerConstructor, VxeDrawerMethods, VxeFormConstructor, VxeFormPrivateMethods } from '../../../types'
13
- import type { VxeTableConstructor, VxeTablePrivateMethods } from '../../../types/components/table'
14
-
15
- export const allActiveModals: VxeModalConstructor[] = []
16
- const msgQueue: VxeModalConstructor[] = []
17
- const notifyQueue: VxeModalConstructor[] = []
18
-
19
- const lockScrollAttrKey = 'data-vxe-lock-scroll'
20
- const lockScrollCssWidthKey = '--vxe-ui-modal-lock-scroll-view-width'
21
-
22
- export default /* define-vxe-component start */ defineVxeComponent({
23
- name: 'VxeModal',
24
- mixins: [
25
- globalMixins.sizeMixin,
26
- globalMixins.permissionMixin
27
- ],
28
- props: {
29
- value: Boolean as PropType<VxeModalPropTypes.ModelValue>,
30
- id: String as PropType<VxeModalPropTypes.ID>,
31
- type: {
32
- type: String as PropType<VxeModalPropTypes.Type>,
33
- default: 'modal'
34
- },
35
- loading: {
36
- type: Boolean as PropType<VxeModalPropTypes.Loading>,
37
- default: null
38
- },
39
- status: String as PropType<VxeModalPropTypes.Status>,
40
- iconStatus: String as PropType<VxeModalPropTypes.IconStatus>,
41
- className: String as PropType<VxeModalPropTypes.ClassName>,
42
- top: {
43
- type: [Number, String] as PropType<VxeModalPropTypes.Top>,
44
- default: () => getConfig().modal.top
45
- },
46
- position: [String, Object] as PropType<VxeModalPropTypes.Position>,
47
- title: String as PropType<VxeModalPropTypes.Title>,
48
- duration: {
49
- type: [Number, String] as PropType<VxeModalPropTypes.Duration>,
50
- default: () => getConfig().modal.duration
51
- },
52
- content: [Number, String] as PropType<VxeModalPropTypes.Content>,
53
- showCancelButton: {
54
- type: Boolean as PropType<VxeModalPropTypes.ShowCancelButton>,
55
- default: null
56
- },
57
- cancelButtonText: {
58
- type: String as PropType<VxeModalPropTypes.CancelButtonText>,
59
- default: () => getConfig().modal.cancelButtonText
60
- },
61
- showConfirmButton: {
62
- type: Boolean as PropType<VxeModalPropTypes.ShowConfirmButton>,
63
- default: () => getConfig().modal.showConfirmButton
64
- },
65
- confirmButtonText: {
66
- type: String as PropType<VxeModalPropTypes.ConfirmButtonText>,
67
- default: () => getConfig().modal.confirmButtonText
68
- },
69
- lockView: {
70
- type: Boolean as PropType<VxeModalPropTypes.LockView>,
71
- default: () => getConfig().modal.lockView
72
- },
73
- lockScroll: Boolean as PropType<VxeModalPropTypes.LockScroll>,
74
- mask: {
75
- type: Boolean as PropType<VxeModalPropTypes.Mask>,
76
- default: () => getConfig().modal.mask
77
- },
78
- maskClosable: {
79
- type: Boolean as PropType<VxeModalPropTypes.MaskClosable>,
80
- default: () => getConfig().modal.maskClosable
81
- },
82
- escClosable: {
83
- type: Boolean as PropType<VxeModalPropTypes.EscClosable>,
84
- default: () => getConfig().modal.escClosable
85
- },
86
- cancelClosable: {
87
- type: Boolean as PropType<VxeModalPropTypes.CancelClosable>,
88
- default: () => getConfig().modal.cancelClosable
89
- },
90
- confirmClosable: {
91
- type: Boolean as PropType<VxeModalPropTypes.ConfirmClosable>,
92
- default: () => getConfig().modal.confirmClosable
93
- },
94
- resize: Boolean as PropType<VxeModalPropTypes.Resize>,
95
- showHeader: {
96
- type: Boolean as PropType<VxeModalPropTypes.ShowHeader>,
97
- default: () => getConfig().modal.showHeader
98
- },
99
- showFooter: {
100
- type: Boolean as PropType<VxeModalPropTypes.ShowFooter>,
101
- default: () => getConfig().modal.showFooter
102
- },
103
- showZoom: Boolean as PropType<VxeModalPropTypes.ShowZoom>,
104
- zoomConfig: Object as PropType<VxeModalPropTypes.ZoomConfig>,
105
- showMaximize: {
106
- type: Boolean as PropType<VxeModalPropTypes.ShowMaximize>,
107
- default: () => handleBooleanDefaultValue(getConfig().modal.showMaximize)
108
- },
109
- showMinimize: {
110
- type: Boolean as PropType<VxeModalPropTypes.ShowMinimize>,
111
- default: () => handleBooleanDefaultValue(getConfig().modal.showMinimize)
112
- },
113
- showClose: {
114
- type: Boolean as PropType<VxeModalPropTypes.ShowClose>,
115
- default: () => getConfig().modal.showClose
116
- },
117
- dblclickZoom: {
118
- type: Boolean as PropType<VxeModalPropTypes.DblclickZoom>,
119
- default: () => getConfig().modal.dblclickZoom
120
- },
121
- width: [Number, String] as PropType<VxeModalPropTypes.Width>,
122
- height: [Number, String] as PropType<VxeModalPropTypes.Height>,
123
- minWidth: {
124
- type: [Number, String] as PropType<VxeModalPropTypes.MinWidth>,
125
- default: () => getConfig().modal.minWidth
126
- },
127
- minHeight: {
128
- type: [Number, String] as PropType<VxeModalPropTypes.MinHeight>,
129
- default: () => getConfig().modal.minHeight
130
- },
131
- zIndex: Number as PropType<VxeModalPropTypes.ZIndex>,
132
- marginSize: {
133
- type: [Number, String] as PropType<VxeModalPropTypes.MarginSize>,
134
- default: () => getConfig().modal.marginSize
135
- },
136
- fullscreen: Boolean as PropType<VxeModalPropTypes.Fullscreen>,
137
- draggable: {
138
- type: Boolean as PropType<VxeModalPropTypes.Draggable>,
139
- default: () => getConfig().modal.draggable
140
- },
141
- remember: {
142
- type: Boolean,
143
- default: () => getConfig().modal.remember
144
- },
145
- destroyOnClose: {
146
- type: Boolean as PropType<VxeModalPropTypes.DestroyOnClose>,
147
- default: () => getConfig().modal.destroyOnClose
148
- },
149
- showTitleOverflow: {
150
- type: Boolean as PropType<VxeModalPropTypes.ShowTitleOverflow>,
151
- default: () => getConfig().modal.showTitleOverflow
152
- },
153
- transfer: {
154
- type: Boolean as PropType<VxeModalPropTypes.Transfer>,
155
- default: () => getConfig().modal.transfer
156
- },
157
- storage: {
158
- type: Boolean as PropType<VxeModalPropTypes.Storage>,
159
- default: () => getConfig().modal.storage
160
- },
161
- storageKey: {
162
- type: String as PropType<VxeModalPropTypes.StorageKey>,
163
- default: () => getConfig().modal.storageKey
164
- },
165
- padding: {
166
- type: Boolean as PropType<VxeModalPropTypes.Padding>,
167
- default: () => getConfig().modal.padding
168
- },
169
- size: {
170
- type: String as PropType<VxeModalPropTypes.Size>,
171
- default: () => getConfig().modal.size || getConfig().size
172
- },
173
- beforeHideMethod: Function as PropType<VxeModalPropTypes.BeforeHideMethod>,
174
- slots: Object as PropType<VxeModalPropTypes.Slots>,
175
-
176
- /**
177
- * 已废弃
178
- * @deprecated
179
- */
180
- message: [Number, String] as PropType<VxeModalPropTypes.Message>,
181
- /**
182
- * 已废弃
183
- * @deprecated
184
- */
185
- animat: {
186
- type: Boolean as PropType<VxeModalPropTypes.Animat>,
187
- default: () => getConfig().modal.animat
188
- }
189
- },
190
- inject: {
191
- $xeParentModal: {
192
- from: '$xeModal',
193
- default: null
194
- },
195
- $xeDrawer: {
196
- default: null
197
- },
198
- $xeTable: {
199
- default: null
200
- },
201
- $xeForm: {
202
- default: null
203
- }
204
- },
205
- provide () {
206
- const $xeModal = this
207
- return {
208
- $xeModal
209
- }
210
- },
211
- data () {
212
- const xID = XEUtils.uniqueId()
213
- const reactData: ModalReactData = {
214
- initialized: false,
215
- visible: false,
216
- contentVisible: false,
217
- modalTop: 0,
218
- modalZindex: 0,
219
- prevZoomStatus: '',
220
- zoomStatus: '',
221
- revertLocat: null,
222
- prevLocat: null,
223
- firstOpen: true,
224
- resizeFlag: 1
225
- }
226
- const internalData: ModalInternalData = {
227
- msgTimeout: undefined
228
- }
229
- return {
230
- xID,
231
- reactData,
232
- internalData
233
- }
234
- },
235
- computed: {
236
- ...({} as {
237
- computePermissionInfo(): VxeComponentPermissionInfo
238
- computeSize(): VxeComponentSizeType
239
- $xeParentModal(): (VxeModalConstructor & VxeModalMethods) | null
240
- $xeDrawer(): (VxeDrawerConstructor & VxeDrawerMethods) | null
241
- $xeTable(): (VxeTableConstructor & VxeTablePrivateMethods) | null
242
- $xeForm(): (VxeFormConstructor & VxeFormPrivateMethods) | null
243
- }),
244
- computeBtnTransfer () {
245
- const $xeSelect = this
246
- const props = $xeSelect
247
- const $xeTable = $xeSelect.$xeTable
248
- const $xeParentModal = $xeSelect.$xeParentModal
249
- const $xeDrawer = $xeSelect.$xeDrawer
250
- const $xeForm = $xeSelect.$xeForm
251
-
252
- const { transfer } = props
253
- if (transfer === null) {
254
- const globalTransfer = getConfig().select.transfer
255
- if (XEUtils.isBoolean(globalTransfer)) {
256
- return globalTransfer
257
- }
258
- if ($xeTable || $xeParentModal || $xeDrawer || $xeForm) {
259
- return true
260
- }
261
- }
262
- return transfer
263
- },
264
- computeIsMsg () {
265
- const $xeModal = this
266
- const props = $xeModal
267
-
268
- return props.type === 'message' || props.type === 'notification'
269
- },
270
- computeIsMinimizeStatus () {
271
- const $xeModal = this
272
- const reactData = $xeModal.reactData as ModalReactData
273
-
274
- return reactData.zoomStatus === 'minimize'
275
- },
276
- computeIsMaximizeStatus () {
277
- const $xeModal = this
278
- const reactData = $xeModal.reactData as ModalReactData
279
-
280
- return reactData.zoomStatus === 'maximize'
281
- },
282
- computeZoomOpts () {
283
- const $xeModal = this
284
- const props = $xeModal
285
-
286
- return Object.assign({}, getConfig().modal.zoomConfig, props.zoomConfig)
287
- }
288
- },
289
- watch: {
290
- width () {
291
- const $xeModal = this
292
-
293
- $xeModal.recalculate()
294
- },
295
- height () {
296
- const $xeModal = this
297
-
298
- $xeModal.recalculate()
299
- },
300
- value (val) {
301
- const $xeModal = this
302
-
303
- if (val) {
304
- $xeModal.openModal()
305
- } else {
306
- $xeModal.closeModal('model')
307
- }
308
- }
309
- },
310
- methods: {
311
- //
312
- // Method
313
- //
314
- dispatchEvent (type: ValueOf<VxeModalEmits>, params: Record<string, any>, evnt: Event | null) {
315
- const $xeModal = this
316
- $xeModal.$emit(type, createEvent(evnt, { $modal: $xeModal }, params))
317
- },
318
- emitModel (value: any) {
319
- const $xeModal = this
320
-
321
- const { _events } = $xeModal as any
322
- $xeModal.$emit('input', value)
323
- if (_events && _events.modelValue) {
324
- $xeModal.$emit('modelValue', value)
325
- } else {
326
- $xeModal.$emit('model-value', value)
327
- }
328
- },
329
- callSlot (slotFunc: ((params: any, h: CreateElement) => any) | string | null, params: any, h: CreateElement) {
330
- const $xeModal = this
331
- const slots = $xeModal.$scopedSlots
332
-
333
- if (slotFunc) {
334
- if (XEUtils.isString(slotFunc)) {
335
- slotFunc = slots[slotFunc] || null
336
- }
337
- if (XEUtils.isFunction(slotFunc)) {
338
- return getSlotVNs(slotFunc.call($xeModal, params, h))
339
- }
340
- }
341
- return []
342
- },
343
- open () {
344
- const $xeModal = this
345
-
346
- return $xeModal.openModal()
347
- },
348
- close () {
349
- const $xeModal = this
350
-
351
- return $xeModal.closeModal('close')
352
- },
353
- getBox () {
354
- const $xeModal = this
355
-
356
- const boxElem = $xeModal.$refs.refModalBox as HTMLDivElement
357
- return boxElem
358
- },
359
- getPosition () {
360
- const $xeModal = this
361
-
362
- const isMsg = $xeModal.computeIsMsg
363
- if (!isMsg) {
364
- const boxElem = $xeModal.getBox()
365
- if (boxElem) {
366
- return {
367
- top: boxElem.offsetTop,
368
- left: boxElem.offsetLeft
369
- }
370
- }
371
- }
372
- return null
373
- },
374
- setPosition (top?: number, left?: number) {
375
- const $xeModal = this
376
-
377
- const isMsg = $xeModal.computeIsMsg
378
- if (!isMsg) {
379
- const boxElem = $xeModal.getBox()
380
- if (boxElem) {
381
- if (XEUtils.isNumber(top)) {
382
- boxElem.style.top = `${top}px`
383
- }
384
- if (XEUtils.isNumber(left)) {
385
- boxElem.style.left = `${left}px`
386
- }
387
- }
388
- }
389
- return $xeModal.$nextTick()
390
- },
391
- isMinimized () {
392
- const $xeModal = this
393
- const reactData = $xeModal.reactData
394
-
395
- return reactData.zoomStatus === 'minimize'
396
- },
397
- isMaximized () {
398
- const $xeModal = this
399
- const reactData = $xeModal.reactData
400
-
401
- return reactData.zoomStatus === 'maximize'
402
- },
403
- zoom () {
404
- const $xeModal = this
405
-
406
- return $xeModal.handleZoom()
407
- },
408
- minimize () {
409
- const $xeModal = this
410
- const reactData = $xeModal.reactData
411
-
412
- if (!reactData.visible) {
413
- return Promise.resolve({
414
- status: false
415
- })
416
- }
417
- return $xeModal.handleMinimize()
418
- },
419
- maximize () {
420
- const $xeModal = this
421
- const reactData = $xeModal.reactData
422
-
423
- if (!reactData.visible) {
424
- return Promise.resolve({
425
- status: false
426
- })
427
- }
428
- return $xeModal.handleMaximize()
429
- },
430
- revert () {
431
- const $xeModal = this
432
- const reactData = $xeModal.reactData
433
-
434
- if (!reactData.visible) {
435
- return Promise.resolve({
436
- status: false
437
- })
438
- }
439
- return $xeModal.handleRevert()
440
- },
441
- recalculate () {
442
- const $xeModal = this
443
- const props = $xeModal
444
-
445
- const { width, height } = props
446
- const boxElem = $xeModal.getBox()
447
- if (boxElem) {
448
- boxElem.style.width = width ? toCssUnit(width) : ''
449
- boxElem.style.height = height ? toCssUnit(height) : ''
450
- }
451
- return $xeModal.$nextTick()
452
- },
453
- updateZindex () {
454
- const $xeModal = this
455
- const props = $xeModal
456
- const reactData = $xeModal.reactData
457
-
458
- const { zIndex } = props
459
- const { modalZindex } = reactData
460
- if (zIndex) {
461
- reactData.modalZindex = zIndex
462
- } else {
463
- const isMsg = $xeModal.computeIsMsg
464
- if (isMsg) {
465
- if (modalZindex < getSubLastZIndex()) {
466
- reactData.modalZindex = nextSubZIndex()
467
- }
468
- } else {
469
- if (modalZindex < getLastZIndex()) {
470
- reactData.modalZindex = nextZIndex()
471
- }
472
- }
473
- }
474
- },
475
- updatePosition () {
476
- const $xeModal = this
477
- const props = $xeModal
478
-
479
- return $xeModal.$nextTick().then(() => {
480
- const { position } = props
481
- const marginSize = XEUtils.toNumber(props.marginSize)
482
- const boxElem = $xeModal.getBox()
483
- if (!boxElem) {
484
- return
485
- }
486
- const clientVisibleWidth = document.documentElement.clientWidth || document.body.clientWidth
487
- const clientVisibleHeight = document.documentElement.clientHeight || document.body.clientHeight
488
- const isPosCenter = position === 'center'
489
- const { top, left }: any = XEUtils.isString(position) ? { top: position, left: position } : Object.assign({}, position)
490
- const topCenter = isPosCenter || top === 'center'
491
- const leftCenter = isPosCenter || left === 'center'
492
- let posTop = ''
493
- let posLeft = ''
494
- if (left && !leftCenter) {
495
- posLeft = isNaN(left) ? left : `${left}px`
496
- } else {
497
- posLeft = `${Math.max(marginSize, clientVisibleWidth / 2 - boxElem.offsetWidth / 2)}px`
498
- }
499
- if (top && !topCenter) {
500
- posTop = isNaN(top) ? top : `${top}px`
501
- } else {
502
- posTop = `${Math.max(marginSize, clientVisibleHeight / 2 - boxElem.offsetHeight / 2)}px`
503
- }
504
- boxElem.style.top = posTop
505
- boxElem.style.left = posLeft
506
- })
507
- },
508
- updateStyle () {
509
- const $xeModal = this
510
- const props = $xeModal
511
-
512
- $xeModal.$nextTick(() => {
513
- const { type } = props
514
- const queueList = type === 'notification' ? notifyQueue : msgQueue
515
- let offsetTop = 0
516
- queueList.forEach(comp => {
517
- const boxElem = comp.getBox()
518
- if (boxElem) {
519
- offsetTop += XEUtils.toNumber(comp.top)
520
- comp.reactData.modalTop = offsetTop
521
- offsetTop += boxElem.clientHeight
522
- }
523
- })
524
- })
525
- },
526
- removeActiveQueue () {
527
- const $xeModal = this
528
-
529
- if (allActiveModals.indexOf($xeModal as VxeModalConstructor) > -1) {
530
- XEUtils.remove(allActiveModals, item => item === $xeModal)
531
- }
532
- },
533
- removeMsgQueue () {
534
- const $xeModal = this
535
- const props = $xeModal
536
-
537
- const { type } = props
538
- const queueList = type === 'notification' ? notifyQueue : msgQueue
539
- if (queueList.indexOf($xeModal as VxeModalConstructor) > -1) {
540
- XEUtils.remove(queueList, comp => comp === $xeModal)
541
- }
542
- $xeModal.updateStyle()
543
- },
544
- closeModal (type: ModalEventTypes) {
545
- const $xeModal = this
546
- const props = $xeModal
547
- const reactData = $xeModal.reactData
548
-
549
- const { remember } = props
550
- const { visible } = reactData
551
- const isMsg = $xeModal.computeIsMsg
552
- const beforeHideFn = props.beforeHideMethod || getConfig().modal.beforeHideMethod
553
- const params = { type }
554
- if (visible) {
555
- Promise.resolve(beforeHideFn ? beforeHideFn(params) : null).then((rest) => {
556
- if (!XEUtils.isError(rest)) {
557
- if (isMsg) {
558
- $xeModal.removeMsgQueue()
559
- }
560
- reactData.contentVisible = false
561
- if (!remember) {
562
- $xeModal.handleRevert()
563
- }
564
- $xeModal.removeActiveQueue()
565
- $xeModal.dispatchEvent('before-hide', params, null)
566
- setTimeout(() => {
567
- reactData.visible = false
568
- $xeModal.emitModel(false)
569
- $xeModal.dispatchEvent('hide', params, null)
570
- }, 200)
571
- $xeModal.removeBodyLockScroll()
572
- }
573
- }).catch(e => e)
574
- }
575
- return $xeModal.$nextTick()
576
- },
577
- closeEvent (evnt: Event) {
578
- const $xeModal = this
579
-
580
- const type = 'close'
581
- $xeModal.dispatchEvent(type, { type }, evnt)
582
- $xeModal.closeModal(type)
583
- },
584
- confirmEvent (evnt: Event) {
585
- const $xeModal = this
586
- const props = $xeModal
587
-
588
- const { confirmClosable } = props
589
- const type = 'confirm'
590
- $xeModal.dispatchEvent(type, { type }, evnt)
591
- if (confirmClosable) {
592
- $xeModal.closeModal(type)
593
- }
594
- },
595
- cancelEvent (evnt: Event) {
596
- const $xeModal = this
597
- const props = $xeModal
598
-
599
- const { cancelClosable } = props
600
- const type = 'cancel'
601
- $xeModal.dispatchEvent(type, { type }, evnt)
602
- if (cancelClosable) {
603
- $xeModal.closeModal(type)
604
- }
605
- },
606
- getStorageMap (key: string) {
607
- const version = getConfig().version
608
- const rest = XEUtils.toStringJSON(localStorage.getItem(key) || '')
609
- return rest && rest._v === version ? rest : { _v: version }
610
- },
611
- hasPosStorage () {
612
- const $xeModal = this
613
- const props = $xeModal
614
-
615
- const { id, storage, storageKey } = props
616
- return !!(id && storage && $xeModal.getStorageMap(storageKey)[id])
617
- },
618
- restorePosStorage () {
619
- const $xeModal = this
620
- const props = $xeModal
621
- const reactData = $xeModal.reactData
622
-
623
- const { id, storage, storageKey } = props
624
- if (id && storage) {
625
- const posStorage = $xeModal.getStorageMap(storageKey)[id]
626
- if (posStorage) {
627
- const boxElem = $xeModal.getBox()
628
- const [left, top, width, height, zoomLeft, zoomTop, zoomWidth, zoomHeight] = posStorage.split(',')
629
- if (boxElem) {
630
- if (left) {
631
- boxElem.style.left = `${left}px`
632
- }
633
- if (top) {
634
- boxElem.style.top = `${top}px`
635
- }
636
- if (width) {
637
- boxElem.style.width = `${width}px`
638
- }
639
- if (height) {
640
- boxElem.style.height = `${height}px`
641
- }
642
- }
643
- if (zoomLeft && zoomTop) {
644
- reactData.revertLocat = {
645
- left: zoomLeft,
646
- top: zoomTop,
647
- width: zoomWidth,
648
- height: zoomHeight
649
- }
650
- }
651
- }
652
- }
653
- },
654
- addMsgQueue () {
655
- const $xeModal = this
656
- const props = $xeModal
657
-
658
- const { type } = props
659
- const queueList = type === 'notification' ? notifyQueue : msgQueue
660
- if (queueList.indexOf($xeModal as VxeModalConstructor) === -1) {
661
- queueList.push($xeModal as VxeModalConstructor)
662
- }
663
- $xeModal.updateStyle()
664
- },
665
- savePosStorage () {
666
- const $xeModal = this
667
- const props = $xeModal
668
- const reactData = $xeModal.reactData
669
-
670
- const { id, storage, storageKey } = props
671
- const { zoomStatus, revertLocat } = reactData
672
- if (zoomStatus) {
673
- return
674
- }
675
- if (id && storage) {
676
- const boxElem = $xeModal.getBox()
677
- if (!boxElem) {
678
- return
679
- }
680
- const posStorageMap = $xeModal.getStorageMap(storageKey)
681
- posStorageMap[id] = ([
682
- boxElem.style.left,
683
- boxElem.style.top,
684
- boxElem.clientWidth,
685
- boxElem.clientHeight
686
- ] as (string | number)[]).concat(revertLocat
687
- ? [
688
- revertLocat.left,
689
- revertLocat.top,
690
- revertLocat.width,
691
- revertLocat.height
692
- ]
693
- : []).map(val => val ? XEUtils.toNumber(val) : '').join(',')
694
- localStorage.setItem(storageKey, XEUtils.toJSONString(posStorageMap))
695
- }
696
- },
697
- handleMinimize () {
698
- const $xeModal = this
699
- const reactData = $xeModal.reactData
700
-
701
- const zoomOpts = $xeModal.computeZoomOpts
702
- const { minimizeLayout, minimizeMaxSize, minimizeHorizontalOffset, minimizeVerticalOffset, minimizeOffsetMethod } = zoomOpts
703
- const isHorizontalLayout = minimizeLayout === 'horizontal'
704
- const prevZoomStatus = reactData.zoomStatus
705
- const hlMList: VxeModalConstructor[] = []
706
- const vlMList: VxeModalConstructor[] = []
707
- allActiveModals.forEach(item => {
708
- if (item.xID !== $xeModal.xID && item.type === 'modal' && item.reactData.zoomStatus === 'minimize') {
709
- const itemZoomOpts = item.computeZoomOpts
710
- if (itemZoomOpts.minimizeLayout === 'horizontal') {
711
- hlMList.push(item)
712
- } else {
713
- vlMList.push(item)
714
- }
715
- }
716
- })
717
- const mList = isHorizontalLayout ? hlMList : vlMList
718
- // 如果配置最小化最大数量
719
- if (minimizeMaxSize && mList.length >= minimizeMaxSize) {
720
- if (VxeUI.modal) {
721
- VxeUI.modal.message({
722
- status: 'error',
723
- content: getI18n('vxe.modal.miniMaxSize', [minimizeMaxSize])
724
- })
725
- }
726
- return Promise.resolve({
727
- status: false
728
- })
729
- }
730
- reactData.prevZoomStatus = prevZoomStatus
731
- reactData.zoomStatus = 'minimize'
732
- return $xeModal.$nextTick().then(() => {
733
- const boxElem = $xeModal.getBox()
734
- if (!boxElem) {
735
- return {
736
- status: false
737
- }
738
- }
739
- const headerEl = $xeModal.$refs.refHeaderElem as HTMLDivElement
740
- if (!headerEl) {
741
- return {
742
- status: false
743
- }
744
- }
745
- const { visibleHeight } = getDomNode()
746
- // 如果当前处于复原状态
747
- if (!prevZoomStatus) {
748
- reactData.revertLocat = {
749
- top: boxElem.offsetTop,
750
- left: boxElem.offsetLeft,
751
- width: boxElem.offsetWidth + (boxElem.style.width ? 0 : 1),
752
- height: boxElem.offsetHeight + (boxElem.style.height ? 0 : 1)
753
- }
754
- }
755
- const targetModal = XEUtils[isHorizontalLayout ? 'max' : 'min'](mList, ($modal) => {
756
- const boxElem = $modal.getBox()
757
- return boxElem ? XEUtils.toNumber(boxElem.style[isHorizontalLayout ? 'left' : 'top']) : 0
758
- })
759
- let targetTop = visibleHeight - headerEl.offsetHeight - 16
760
- let targetLeft = 16
761
- if (targetModal) {
762
- const minBoxElem = targetModal.getBox()
763
- if (minBoxElem) {
764
- const boxLeft = XEUtils.toNumber(minBoxElem.style.left)
765
- const boxTop = XEUtils.toNumber(minBoxElem.style.top)
766
- let offsetObj: {
767
- top?: number
768
- left?: number
769
- } = {}
770
- if (isHorizontalLayout) {
771
- offsetObj = Object.assign({}, minimizeHorizontalOffset)
772
- } else {
773
- offsetObj = Object.assign({}, minimizeVerticalOffset)
774
- }
775
- targetLeft = boxLeft + XEUtils.toNumber(offsetObj.left)
776
- targetTop = boxTop + XEUtils.toNumber(offsetObj.top)
777
- if (minimizeOffsetMethod) {
778
- offsetObj = minimizeOffsetMethod({
779
- $modal: $xeModal as VxeModalConstructor,
780
- left: targetLeft,
781
- top: targetTop
782
- })
783
- targetLeft = XEUtils.toNumber(offsetObj.left)
784
- targetTop = XEUtils.toNumber(offsetObj.top)
785
- }
786
- }
787
- }
788
- Object.assign(boxElem.style, {
789
- top: `${targetTop}px`,
790
- left: `${targetLeft}px`,
791
- width: '200px',
792
- height: `${headerEl.offsetHeight}px`
793
- })
794
- $xeModal.savePosStorage()
795
- return {
796
- status: true
797
- }
798
- })
799
- },
800
- handleMaximize () {
801
- const $xeModal = this
802
- const props = $xeModal
803
- const reactData = $xeModal.reactData
804
-
805
- const prevZoomStatus = reactData.zoomStatus
806
- reactData.prevZoomStatus = prevZoomStatus
807
- reactData.zoomStatus = 'maximize'
808
- return $xeModal.$nextTick().then(() => {
809
- const boxElem = $xeModal.getBox()
810
- if (boxElem) {
811
- // 如果当前处于复原状态
812
- if (!prevZoomStatus) {
813
- const marginSize = XEUtils.toNumber(props.marginSize)
814
- const clientVisibleWidth = document.documentElement.clientWidth || document.body.clientWidth
815
- const clientVisibleHeight = document.documentElement.clientHeight || document.body.clientHeight
816
- reactData.revertLocat = {
817
- top: Math.max(marginSize, clientVisibleHeight / 2 - boxElem.offsetHeight / 2),
818
- left: Math.max(marginSize, clientVisibleWidth / 2 - boxElem.offsetWidth / 2),
819
- width: boxElem.offsetWidth + (boxElem.style.width ? 0 : 1),
820
- height: boxElem.offsetHeight + (boxElem.style.height ? 0 : 1)
821
- }
822
- }
823
- Object.assign(boxElem.style, {
824
- top: '0',
825
- left: '0',
826
- width: '100%',
827
- height: '100%'
828
- })
829
- }
830
- $xeModal.savePosStorage()
831
- })
832
- },
833
- handleMsgAutoClose () {
834
- const $xeModal = this
835
- const props = $xeModal
836
- const internalData = $xeModal.internalData
837
-
838
- const { duration } = props
839
- if (duration !== -1) {
840
- internalData.msgTimeout = setTimeout(() => $xeModal.closeModal('close'), XEUtils.toNumber(duration))
841
- }
842
- },
843
- removeBodyLockScroll () {
844
- const $xeModal = this
845
- const xID = $xeModal.xID
846
-
847
- const htmlElem = document.documentElement
848
- const lockData = htmlElem.getAttribute(lockScrollAttrKey)
849
- if (lockData) {
850
- const lockList = lockData.split(',').filter(key => key !== xID)
851
- if (lockList.length) {
852
- htmlElem.setAttribute(lockScrollAttrKey, lockList.join(','))
853
- } else {
854
- htmlElem.removeAttribute(lockScrollAttrKey)
855
- htmlElem.style.removeProperty(lockScrollCssWidthKey)
856
- }
857
- }
858
- },
859
- addBodyLockScroll () {
860
- const $xeModal = this
861
- const props = $xeModal
862
- const xID = $xeModal.xID
863
-
864
- const { lockScroll } = props
865
- const isMsg = $xeModal.computeIsMsg
866
- if (lockScroll && !isMsg) {
867
- const htmlElem = document.documentElement
868
- const clientWidth = document.body.clientWidth
869
- const lockData = htmlElem.getAttribute(lockScrollAttrKey)
870
- const lockList = lockData ? lockData.split(',') : []
871
- if (!lockList.includes(xID)) {
872
- lockList.push(xID)
873
- htmlElem.setAttribute(lockScrollAttrKey, lockList.join(','))
874
- }
875
- htmlElem.style.setProperty(lockScrollCssWidthKey, `${clientWidth}px`)
876
- }
877
- },
878
- openModal () {
879
- const $xeModal = this
880
- const props = $xeModal
881
- const reactData = $xeModal.reactData
882
-
883
- const { remember, showFooter } = props
884
- const { initialized, visible } = reactData
885
- const isMsg = $xeModal.computeIsMsg
886
- const btnTransfer = $xeModal.computeBtnTransfer
887
- if (!initialized) {
888
- reactData.initialized = true
889
- if (btnTransfer) {
890
- const panelElem = $xeModal.$refs.refElem as HTMLDivElement
891
- document.body.appendChild(panelElem)
892
- }
893
- }
894
- if (!visible) {
895
- $xeModal.addBodyLockScroll()
896
- reactData.visible = true
897
- reactData.contentVisible = false
898
- $xeModal.updateZindex()
899
- allActiveModals.push($xeModal as VxeModalConstructor)
900
- setTimeout(() => {
901
- reactData.contentVisible = true
902
- $xeModal.$nextTick(() => {
903
- if (showFooter) {
904
- const confirmBtn = $xeModal.$refs.refConfirmBtn as unknown as VxeButtonConstructor
905
- const cancelBtn = $xeModal.$refs.refCancelBtn as unknown as VxeButtonConstructor
906
- const operBtn = confirmBtn || cancelBtn
907
- if (operBtn) {
908
- operBtn.focus()
909
- }
910
- }
911
- const type = ''
912
- const params = { type }
913
- $xeModal.emitModel(true)
914
- $xeModal.dispatchEvent('show', params, null)
915
- })
916
- }, 10)
917
- if (isMsg) {
918
- $xeModal.addMsgQueue()
919
- $xeModal.handleMsgAutoClose()
920
- } else {
921
- $xeModal.$nextTick(() => {
922
- const { fullscreen } = props
923
- const { firstOpen } = reactData
924
- if (firstOpen) {
925
- reactData.firstOpen = false
926
- if ($xeModal.hasPosStorage()) {
927
- $xeModal.restorePosStorage()
928
- } else {
929
- if (fullscreen) {
930
- $xeModal.$nextTick(() => $xeModal.handleMaximize())
931
- } else {
932
- $xeModal.recalculate()
933
- $xeModal.updatePosition().then(() => {
934
- setTimeout(() => $xeModal.updatePosition(), 20)
935
- })
936
- }
937
- }
938
- } else {
939
- if (!remember) {
940
- $xeModal.recalculate()
941
- $xeModal.updatePosition().then(() => {
942
- setTimeout(() => $xeModal.updatePosition(), 20)
943
- })
944
- }
945
- }
946
- })
947
- }
948
- }
949
- return $xeModal.$nextTick()
950
- },
951
- selfClickEvent (evnt: Event) {
952
- const $xeModal = this
953
- const props = $xeModal
954
-
955
- const el = $xeModal.$refs.refElem as HTMLDivElement
956
- if (props.maskClosable && evnt.target === el) {
957
- const type = 'mask'
958
- $xeModal.closeModal(type)
959
- }
960
- },
961
- selfMouseoverEvent () {
962
- const $xeModal = this
963
- const internalData = $xeModal.internalData
964
-
965
- const { msgTimeout } = internalData
966
- if (!msgTimeout) {
967
- return
968
- }
969
- const isMsg = $xeModal.computeIsMsg
970
- if (isMsg) {
971
- clearTimeout(msgTimeout)
972
- internalData.msgTimeout = undefined
973
- }
974
- },
975
- selfMouseoutEvent () {
976
- const $xeModal = this
977
- const internalData = $xeModal.internalData
978
-
979
- const { msgTimeout } = internalData
980
- if (!msgTimeout) {
981
- const isMsg = $xeModal.computeIsMsg
982
- if (isMsg) {
983
- $xeModal.handleMsgAutoClose()
984
- }
985
- }
986
- },
987
- handleGlobalKeydownEvent (evnt: KeyboardEvent) {
988
- const $xeModal = this
989
-
990
- const isEsc = globalEvents.hasKey(evnt, GLOBAL_EVENT_KEYS.ESCAPE)
991
- if (isEsc) {
992
- const lastModal = XEUtils.max(allActiveModals, (item) => item.reactData.modalZindex)
993
- // 多个时,只关掉最上层的窗口
994
- if (lastModal) {
995
- setTimeout(() => {
996
- if (lastModal === $xeModal && lastModal.escClosable) {
997
- const type = 'exit'
998
- $xeModal.dispatchEvent('close', { type }, evnt)
999
- $xeModal.closeModal(type)
1000
- }
1001
- }, 10)
1002
- }
1003
- }
1004
- },
1005
- handleRevert () {
1006
- const $xeModal = this
1007
- const reactData = $xeModal.reactData
1008
-
1009
- reactData.prevZoomStatus = reactData.zoomStatus
1010
- reactData.zoomStatus = ''
1011
- return $xeModal.$nextTick().then(() => {
1012
- const { revertLocat } = reactData
1013
- if (revertLocat) {
1014
- const boxElem = $xeModal.getBox()
1015
- reactData.revertLocat = null
1016
- if (boxElem) {
1017
- Object.assign(boxElem.style, {
1018
- top: `${revertLocat.top}px`,
1019
- left: `${revertLocat.left}px`,
1020
- width: `${revertLocat.width}px`,
1021
- height: `${revertLocat.height}px`
1022
- })
1023
- }
1024
- $xeModal.savePosStorage()
1025
- return $xeModal.$nextTick().then(() => {
1026
- return {
1027
- status: true
1028
- }
1029
- })
1030
- }
1031
- return {
1032
- status: false
1033
- }
1034
- })
1035
- },
1036
- handleZoom (type?: 'minimize' | 'revert' | 'maximize') {
1037
- const $xeModal = this
1038
- const reactData = $xeModal.reactData
1039
-
1040
- const { zoomStatus } = reactData
1041
- return new Promise(resolve => {
1042
- if (type) {
1043
- if (type === 'maximize') {
1044
- resolve($xeModal.handleMaximize())
1045
- return
1046
- }
1047
- if (type === 'minimize') {
1048
- resolve($xeModal.handleMinimize())
1049
- return
1050
- }
1051
- resolve($xeModal.handleRevert())
1052
- return
1053
- }
1054
- resolve(zoomStatus ? $xeModal.handleRevert() : $xeModal.handleMaximize())
1055
- }).then(() => {
1056
- return reactData.zoomStatus || 'revert'
1057
- })
1058
- },
1059
- toggleZoomMinEvent (evnt: Event) {
1060
- const $xeModal = this
1061
- const reactData = $xeModal.reactData
1062
-
1063
- const { zoomStatus, prevZoomStatus } = reactData
1064
- return $xeModal.handleZoom(zoomStatus === 'minimize' ? (prevZoomStatus || 'revert') : 'minimize').then((type) => {
1065
- const params = { type }
1066
- $xeModal.dispatchEvent('zoom', params, evnt)
1067
- })
1068
- },
1069
- toggleZoomMaxEvent (evnt: Event) {
1070
- const $xeModal = this
1071
-
1072
- return $xeModal.handleZoom().then((type) => {
1073
- const params = { type }
1074
- $xeModal.dispatchEvent('zoom', params, evnt)
1075
- })
1076
- },
1077
- boxMousedownEvent () {
1078
- const $xeModal = this
1079
- const reactData = $xeModal.reactData
1080
-
1081
- const { modalZindex } = reactData
1082
- if (allActiveModals.some(comp => comp.reactData.visible && comp.reactData.modalZindex > modalZindex)) {
1083
- $xeModal.updateZindex()
1084
- }
1085
- },
1086
- mousedownEvent (evnt: MouseEvent) {
1087
- const $xeModal = this
1088
- const props = $xeModal
1089
- const reactData = $xeModal.reactData
1090
-
1091
- const { storage } = props
1092
- const { zoomStatus } = reactData
1093
- const marginSize = XEUtils.toNumber(props.marginSize)
1094
- const boxElem = $xeModal.getBox()
1095
- if (!boxElem) {
1096
- return
1097
- }
1098
- if (zoomStatus !== 'maximize' && evnt.button === 0 && !getEventTargetNode(evnt, boxElem, 'trigger--btn').flag) {
1099
- evnt.preventDefault()
1100
- const disX = evnt.clientX - boxElem.offsetLeft
1101
- const disY = evnt.clientY - boxElem.offsetTop
1102
- const { visibleHeight, visibleWidth } = getDomNode()
1103
- document.onmousemove = evnt => {
1104
- evnt.preventDefault()
1105
- const offsetWidth = boxElem.offsetWidth
1106
- const offsetHeight = boxElem.offsetHeight
1107
- const minX = marginSize
1108
- const maxX = visibleWidth - offsetWidth - marginSize - 1
1109
- const minY = marginSize
1110
- const maxY = visibleHeight - offsetHeight - marginSize - 1
1111
- let left = evnt.clientX - disX
1112
- let top = evnt.clientY - disY
1113
- if (left > maxX) {
1114
- left = maxX
1115
- }
1116
- if (left < minX) {
1117
- left = minX
1118
- }
1119
- if (top > maxY) {
1120
- top = maxY
1121
- }
1122
- if (top < minY) {
1123
- top = minY
1124
- }
1125
- boxElem.style.left = `${left}px`
1126
- boxElem.style.top = `${top}px`
1127
- boxElem.className = boxElem.className.replace(/\s?is--drag/, '') + ' is--drag'
1128
- $xeModal.$emit('move', createEvent(evnt, { type: 'move' }))
1129
- reactData.resizeFlag++
1130
- }
1131
- document.onmouseup = () => {
1132
- document.onmousemove = null
1133
- document.onmouseup = null
1134
- if (storage) {
1135
- $xeModal.$nextTick(() => {
1136
- $xeModal.savePosStorage()
1137
- })
1138
- }
1139
- reactData.resizeFlag++
1140
- setTimeout(() => {
1141
- boxElem.className = boxElem.className.replace(/\s?is--drag/, '')
1142
- }, 50)
1143
- }
1144
- }
1145
- },
1146
- dragEvent (evnt: MouseEvent) {
1147
- const $xeModal = this
1148
- const props = $xeModal
1149
- const reactData = $xeModal.reactData
1150
-
1151
- evnt.preventDefault()
1152
- const { storage } = props
1153
- const { visibleHeight, visibleWidth } = getDomNode()
1154
- const marginSize = XEUtils.toNumber(props.marginSize)
1155
- const targetElem = evnt.target as HTMLSpanElement
1156
- const type = targetElem.getAttribute('type')
1157
- const minWidth = XEUtils.toNumber(props.minWidth)
1158
- const minHeight = XEUtils.toNumber(props.minHeight)
1159
- const maxWidth = visibleWidth
1160
- const maxHeight = visibleHeight
1161
- const boxElem = $xeModal.getBox()
1162
- const clientWidth = boxElem.clientWidth
1163
- const clientHeight = boxElem.clientHeight
1164
- const disX = evnt.clientX
1165
- const disY = evnt.clientY
1166
- const offsetTop = boxElem.offsetTop
1167
- const offsetLeft = boxElem.offsetLeft
1168
- const params = { type: 'resize' }
1169
- document.onmousemove = evnt => {
1170
- evnt.preventDefault()
1171
- let dragLeft
1172
- let dragTop
1173
- let width
1174
- let height
1175
- switch (type) {
1176
- case 'wl':
1177
- dragLeft = disX - evnt.clientX
1178
- width = dragLeft + clientWidth
1179
- if (offsetLeft - dragLeft > marginSize) {
1180
- if (width > minWidth) {
1181
- boxElem.style.width = `${width < maxWidth ? width : maxWidth}px`
1182
- boxElem.style.left = `${offsetLeft - dragLeft}px`
1183
- }
1184
- }
1185
- break
1186
- case 'swst':
1187
- dragLeft = disX - evnt.clientX
1188
- dragTop = disY - evnt.clientY
1189
- width = dragLeft + clientWidth
1190
- height = dragTop + clientHeight
1191
- if (offsetLeft - dragLeft > marginSize) {
1192
- if (width > minWidth) {
1193
- boxElem.style.width = `${width < maxWidth ? width : maxWidth}px`
1194
- boxElem.style.left = `${offsetLeft - dragLeft}px`
1195
- }
1196
- }
1197
- if (offsetTop - dragTop > marginSize) {
1198
- if (height > minHeight) {
1199
- boxElem.style.height = `${height < maxHeight ? height : maxHeight}px`
1200
- boxElem.style.top = `${offsetTop - dragTop}px`
1201
- }
1202
- }
1203
- break
1204
- case 'swlb':
1205
- dragLeft = disX - evnt.clientX
1206
- dragTop = evnt.clientY - disY
1207
- width = dragLeft + clientWidth
1208
- height = dragTop + clientHeight
1209
- if (offsetLeft - dragLeft > marginSize) {
1210
- if (width > minWidth) {
1211
- boxElem.style.width = `${width < maxWidth ? width : maxWidth}px`
1212
- boxElem.style.left = `${offsetLeft - dragLeft}px`
1213
- }
1214
- }
1215
- if (offsetTop + height + marginSize < visibleHeight) {
1216
- if (height > minHeight) {
1217
- boxElem.style.height = `${height < maxHeight ? height : maxHeight}px`
1218
- }
1219
- }
1220
- break
1221
- case 'st':
1222
- dragTop = disY - evnt.clientY
1223
- height = clientHeight + dragTop
1224
- if (offsetTop - dragTop > marginSize) {
1225
- if (height > minHeight) {
1226
- boxElem.style.height = `${height < maxHeight ? height : maxHeight}px`
1227
- boxElem.style.top = `${offsetTop - dragTop}px`
1228
- }
1229
- }
1230
- break
1231
- case 'wr':
1232
- dragLeft = evnt.clientX - disX
1233
- width = dragLeft + clientWidth
1234
- if (offsetLeft + width + marginSize < visibleWidth) {
1235
- if (width > minWidth) {
1236
- boxElem.style.width = `${width < maxWidth ? width : maxWidth}px`
1237
- }
1238
- }
1239
- break
1240
- case 'sest':
1241
- dragLeft = evnt.clientX - disX
1242
- dragTop = disY - evnt.clientY
1243
- width = dragLeft + clientWidth
1244
- height = dragTop + clientHeight
1245
- if (offsetLeft + width + marginSize < visibleWidth) {
1246
- if (width > minWidth) {
1247
- boxElem.style.width = `${width < maxWidth ? width : maxWidth}px`
1248
- }
1249
- }
1250
- if (offsetTop - dragTop > marginSize) {
1251
- if (height > minHeight) {
1252
- boxElem.style.height = `${height < maxHeight ? height : maxHeight}px`
1253
- boxElem.style.top = `${offsetTop - dragTop}px`
1254
- }
1255
- }
1256
- break
1257
- case 'selb':
1258
- dragLeft = evnt.clientX - disX
1259
- dragTop = evnt.clientY - disY
1260
- width = dragLeft + clientWidth
1261
- height = dragTop + clientHeight
1262
- if (offsetLeft + width + marginSize < visibleWidth) {
1263
- if (width > minWidth) {
1264
- boxElem.style.width = `${width < maxWidth ? width : maxWidth}px`
1265
- }
1266
- }
1267
- if (offsetTop + height + marginSize < visibleHeight) {
1268
- if (height > minHeight) {
1269
- boxElem.style.height = `${height < maxHeight ? height : maxHeight}px`
1270
- }
1271
- }
1272
- break
1273
- case 'sb':
1274
- dragTop = evnt.clientY - disY
1275
- height = dragTop + clientHeight
1276
- if (offsetTop + height + marginSize < visibleHeight) {
1277
- if (height > minHeight) {
1278
- boxElem.style.height = `${height < maxHeight ? height : maxHeight}px`
1279
- }
1280
- }
1281
- break
1282
- }
1283
- boxElem.className = boxElem.className.replace(/\s?is--drag/, '') + ' is--drag'
1284
- if (storage) {
1285
- $xeModal.savePosStorage()
1286
- }
1287
- $xeModal.dispatchEvent('resize', params, evnt)
1288
- }
1289
- document.onmouseup = () => {
1290
- reactData.revertLocat = null
1291
- document.onmousemove = null
1292
- document.onmouseup = null
1293
- setTimeout(() => {
1294
- boxElem.className = boxElem.className.replace(/\s?is--drag/, '')
1295
- }, 50)
1296
- }
1297
- },
1298
-
1299
- //
1300
- // Render
1301
- //
1302
- renderTitles (h: CreateElement) {
1303
- const $xeModal = this
1304
- const props = $xeModal
1305
- const slots = $xeModal.$scopedSlots
1306
- const reactData = $xeModal.reactData
1307
-
1308
- const { slots: propSlots = {}, showClose, showZoom, showMaximize, showMinimize, title } = props
1309
- const { zoomStatus } = reactData
1310
- const titleSlot = slots.title || propSlots.title
1311
- const cornerSlot = slots.corner || propSlots.corner
1312
- const isMinimizeStatus = $xeModal.computeIsMinimizeStatus
1313
- const isMaximizeStatus = $xeModal.computeIsMaximizeStatus
1314
- return [
1315
- h('div', {
1316
- class: 'vxe-modal--header-title'
1317
- }, titleSlot
1318
- ? $xeModal.callSlot(titleSlot, {
1319
- $modal: $xeModal,
1320
- minimized: isMinimizeStatus,
1321
- maximized: isMaximizeStatus
1322
- }, h)
1323
- : (title ? getFuncText(title) : getI18n('vxe.alert.title'))),
1324
- h('div', {
1325
- class: 'vxe-modal--header-right'
1326
- }, [
1327
- cornerSlot && !isMinimizeStatus
1328
- ? h('div', {
1329
- class: 'vxe-modal--corner-wrapper'
1330
- }, $xeModal.callSlot(cornerSlot, { $modal: $xeModal }, h))
1331
- : renderEmptyElement($xeModal),
1332
- (XEUtils.isBoolean(showMinimize) ? showMinimize : showZoom)
1333
- ? h('div', {
1334
- class: ['vxe-modal--zoom-btn', 'trigger--btn'],
1335
- attrs: {
1336
- title: getI18n(`vxe.modal.zoom${zoomStatus === 'minimize' ? 'Out' : 'Min'}`)
1337
- },
1338
- on: {
1339
- click: $xeModal.toggleZoomMinEvent
1340
- }
1341
- }, [
1342
- h('i', {
1343
- class: zoomStatus === 'minimize' ? getIcon().MODAL_ZOOM_REVERT : getIcon().MODAL_ZOOM_MIN
1344
- })
1345
- ])
1346
- : renderEmptyElement($xeModal),
1347
- (XEUtils.isBoolean(showMaximize) ? showMaximize : showZoom) && zoomStatus !== 'minimize'
1348
- ? h('div', {
1349
- class: ['vxe-modal--zoom-btn', 'trigger--btn'],
1350
- attrs: {
1351
- title: getI18n(`vxe.modal.zoom${zoomStatus === 'maximize' ? 'Out' : 'In'}`)
1352
- },
1353
- on: {
1354
- click: $xeModal.toggleZoomMaxEvent
1355
- }
1356
- }, [
1357
- h('i', {
1358
- class: zoomStatus === 'maximize' ? getIcon().MODAL_ZOOM_OUT : getIcon().MODAL_ZOOM_IN
1359
- })
1360
- ])
1361
- : renderEmptyElement($xeModal),
1362
- showClose
1363
- ? h('div', {
1364
- class: ['vxe-modal--close-btn', 'trigger--btn'],
1365
- attrs: {
1366
- title: getI18n('vxe.modal.close')
1367
- },
1368
- on: {
1369
- click: $xeModal.closeEvent
1370
- }
1371
- }, [
1372
- h('i', {
1373
- class: getIcon().MODAL_CLOSE
1374
- })
1375
- ])
1376
- : renderEmptyElement($xeModal)
1377
- ])
1378
- ]
1379
- },
1380
- renderHeader (h: CreateElement) {
1381
- const $xeModal = this
1382
- const props = $xeModal
1383
- const slots = $xeModal.$scopedSlots
1384
-
1385
- const { slots: propSlots = {}, showZoom, showMaximize, draggable } = props
1386
- const headerSlot = slots.header || propSlots.header
1387
- if (props.showHeader) {
1388
- const headerOns: Record<string, any> = {}
1389
- if (draggable) {
1390
- headerOns.mousedown = $xeModal.mousedownEvent
1391
- }
1392
- if ((XEUtils.isBoolean(showMaximize) ? showMaximize : showZoom) && props.dblclickZoom && props.type === 'modal') {
1393
- headerOns.dblclick = $xeModal.toggleZoomMaxEvent
1394
- }
1395
- return h('div', {
1396
- ref: 'refHeaderElem',
1397
- class: ['vxe-modal--header', {
1398
- 'is--ellipsis': props.showTitleOverflow
1399
- }],
1400
- on: headerOns
1401
- }, headerSlot ? $xeModal.callSlot(headerSlot, { $modal: $xeModal }, h) : $xeModal.renderTitles(h))
1402
- }
1403
- return renderEmptyElement($xeModal)
1404
- },
1405
- renderBody (h: CreateElement) {
1406
- const $xeModal = this
1407
- const props = $xeModal
1408
- const slots = $xeModal.$scopedSlots
1409
-
1410
- const { slots: propSlots = {}, status, message, iconStatus } = props
1411
- const content = props.content || message
1412
- const isMsg = $xeModal.computeIsMsg
1413
- const defaultSlot = slots.default || propSlots.default
1414
- const leftSlot = slots.left || propSlots.left
1415
- const rightSlot = slots.right || propSlots.right
1416
- const contVNs: VNode[] = []
1417
- if (!isMsg && (status || iconStatus)) {
1418
- contVNs.push(
1419
- h('div', {
1420
- class: 'vxe-modal--status-wrapper'
1421
- }, [
1422
- h('i', {
1423
- class: ['vxe-modal--status-icon', iconStatus || getIcon()[`MODAL_${status}`.toLocaleUpperCase() as 'MODAL_SUCCESS' | 'MODAL_ERROR']]
1424
- })
1425
- ])
1426
- )
1427
- }
1428
- contVNs.push(
1429
- h('div', {
1430
- class: 'vxe-modal--content'
1431
- }, defaultSlot ? $xeModal.callSlot(defaultSlot, { $modal: $xeModal }, h) : getFuncText(content))
1432
- )
1433
- return h('div', {
1434
- class: 'vxe-modal--body'
1435
- }, [
1436
- leftSlot
1437
- ? h('div', {
1438
- class: 'vxe-modal--body-left'
1439
- }, $xeModal.callSlot(leftSlot, { $modal: $xeModal }, h))
1440
- : renderEmptyElement($xeModal),
1441
- h('div', {
1442
- class: 'vxe-modal--body-default'
1443
- }, contVNs),
1444
- rightSlot
1445
- ? h('div', {
1446
- class: 'vxe-modal--body-right'
1447
- }, $xeModal.callSlot(rightSlot, { $modal: $xeModal }, h))
1448
- : renderEmptyElement($xeModal),
1449
- isMsg
1450
- ? renderEmptyElement($xeModal)
1451
- : h(VxeLoadingComponent, {
1452
- class: 'vxe-modal--loading',
1453
- props: {
1454
- value: props.loading
1455
- }
1456
- })
1457
- ])
1458
- },
1459
- renderDefaultFooter (h: CreateElement) {
1460
- const $xeModal = this
1461
- const props = $xeModal
1462
- const slots = $xeModal.$scopedSlots
1463
-
1464
- const { slots: propSlots = {}, showCancelButton, showConfirmButton, type, loading } = props
1465
- const lfSlot = slots.leftfoot || propSlots.leftfoot
1466
- const rfSlot = slots.rightfoot || propSlots.rightfoot
1467
- const btnVNs = []
1468
- if (XEUtils.isBoolean(showCancelButton) ? showCancelButton : type === 'confirm') {
1469
- btnVNs.push(
1470
- h(VxeButtonComponent, {
1471
- key: 1,
1472
- ref: 'refCancelBtn',
1473
- props: {
1474
- content: props.cancelButtonText || getI18n('vxe.button.cancel')
1475
- },
1476
- on: {
1477
- click: $xeModal.cancelEvent
1478
- }
1479
- })
1480
- )
1481
- }
1482
- if (XEUtils.isBoolean(showConfirmButton) ? showConfirmButton : (type === 'confirm' || type === 'alert')) {
1483
- btnVNs.push(
1484
- h(VxeButtonComponent, {
1485
- key: 2,
1486
- ref: 'refConfirmBtn',
1487
- props: {
1488
- status: 'primary',
1489
- loading: loading,
1490
- content: props.confirmButtonText || getI18n('vxe.button.confirm')
1491
- },
1492
- on: {
1493
- click: $xeModal.confirmEvent
1494
- }
1495
- })
1496
- )
1497
- }
1498
- return h('div', {
1499
- class: 'vxe-modal--footer-wrapper'
1500
- }, [
1501
- h('div', {
1502
- class: 'vxe-modal--footer-left'
1503
- }, lfSlot ? $xeModal.callSlot(lfSlot, { $modal: $xeModal }, h) : []),
1504
- h('div', {
1505
- class: 'vxe-modal--footer-right'
1506
- }, rfSlot ? $xeModal.callSlot(rfSlot, { $modal: $xeModal }, h) : btnVNs)
1507
- ])
1508
- },
1509
- renderFooter (h: CreateElement) {
1510
- const $xeModal = this
1511
- const props = $xeModal
1512
- const slots = $xeModal.$scopedSlots
1513
-
1514
- const { slots: propSlots = {} } = props
1515
- const footerSlot = slots.footer || propSlots.footer
1516
- if (props.showFooter) {
1517
- return h('div', {
1518
- class: 'vxe-modal--footer'
1519
- }, footerSlot ? $xeModal.callSlot(footerSlot, { $modal: $xeModal }, h) : [$xeModal.renderDefaultFooter(h)])
1520
- }
1521
- return renderEmptyElement($xeModal)
1522
- },
1523
- renderVN (h: CreateElement): VNode {
1524
- const $xeModal = this
1525
- const props = $xeModal
1526
- const slots = $xeModal.$scopedSlots
1527
- const reactData = $xeModal.reactData
1528
-
1529
- const { slots: propSlots = {}, className, type, animat, draggable, iconStatus, position, loading, destroyOnClose, status, lockScroll, padding, lockView, mask, resize } = props
1530
- const { initialized, modalTop, contentVisible, visible, zoomStatus } = reactData
1531
- const asideSlot = slots.aside || propSlots.aside
1532
- const vSize = $xeModal.computeSize
1533
- const isMsg = $xeModal.computeIsMsg
1534
- const isMinimizeStatus = $xeModal.computeIsMinimizeStatus
1535
- const ons: Record<string, any> = {}
1536
- if (isMsg) {
1537
- ons.mouseover = $xeModal.selfMouseoverEvent
1538
- ons.mouseout = $xeModal.selfMouseoutEvent
1539
- }
1540
- return h('div', {
1541
- ref: 'refElem',
1542
- class: ['vxe-modal--wrapper', `type--${type}`, `zoom--${zoomStatus || 'revert'}`, className || '', position ? `pos--${position}` : '', {
1543
- [`size--${vSize}`]: vSize,
1544
- [`status--${status}`]: status,
1545
- 'is--padding': padding,
1546
- 'is--animat': animat,
1547
- 'lock--scroll': lockScroll,
1548
- 'lock--view': lockView,
1549
- 'is--draggable': draggable,
1550
- 'is--resize': resize,
1551
- 'is--mask': mask,
1552
- 'is--visible': contentVisible,
1553
- 'is--active': visible,
1554
- 'is--loading': loading
1555
- }],
1556
- style: {
1557
- zIndex: reactData.modalZindex,
1558
- top: modalTop ? `${modalTop}px` : null
1559
- },
1560
- on: {
1561
- ...ons,
1562
- click: $xeModal.selfClickEvent
1563
- }
1564
- }, initialized
1565
- ? [
1566
- h('div', {
1567
- ref: 'refModalBox',
1568
- class: 'vxe-modal--box',
1569
- on: {
1570
- mousedown: $xeModal.boxMousedownEvent
1571
- }
1572
- }, [
1573
- (isMsg || asideSlot) && !isMinimizeStatus
1574
- ? h('div', {
1575
- class: 'vxe-modal--aside'
1576
- },
1577
- asideSlot
1578
- ? $xeModal.callSlot(asideSlot, { $modal: $xeModal }, h)
1579
- : [
1580
- status || iconStatus
1581
- ? h('div', {
1582
- class: 'vxe-modal--status-wrapper'
1583
- }, [
1584
- h('i', {
1585
- class: ['vxe-modal--status-icon', iconStatus || getIcon()[`MODAL_${status}`.toLocaleUpperCase() as 'MODAL_SUCCESS' | 'MODAL_ERROR']]
1586
- })
1587
- ])
1588
- : renderEmptyElement($xeModal)
1589
- ]
1590
- )
1591
- : renderEmptyElement($xeModal),
1592
- h('div', {
1593
- class: 'vxe-modal--container'
1594
- }, !reactData.initialized || (destroyOnClose && !reactData.visible)
1595
- ? []
1596
- : [
1597
- $xeModal.renderHeader(h),
1598
- $xeModal.renderBody(h),
1599
- $xeModal.renderFooter(h),
1600
- !isMsg && resize
1601
- ? h('span', {
1602
- class: 'vxe-modal--resize'
1603
- }, ['wl', 'wr', 'swst', 'sest', 'st', 'swlb', 'selb', 'sb'].map(type => {
1604
- return h('span', {
1605
- class: `${type}-resize`,
1606
- attrs: {
1607
- type: type
1608
- },
1609
- on: {
1610
- mousedown: $xeModal.dragEvent
1611
- }
1612
- })
1613
- }))
1614
- : renderEmptyElement($xeModal)
1615
- ])
1616
- ])
1617
- ]
1618
- : [])
1619
- }
1620
- },
1621
- mounted () {
1622
- const $xeModal = this
1623
- const slots = $xeModal.$scopedSlots
1624
- const props = $xeModal
1625
-
1626
- if (props.type === 'modal' && props.showFooter && !(props.showConfirmButton || props.showCancelButton || slots.footer)) {
1627
- warnLog('vxe.modal.footPropErr')
1628
- }
1629
- $xeModal.$nextTick(() => {
1630
- if (props.storage && !props.id) {
1631
- errLog('vxe.error.reqProp', ['[modal] id'])
1632
- }
1633
- if (props.value) {
1634
- $xeModal.openModal()
1635
- }
1636
- $xeModal.recalculate()
1637
- })
1638
- if (props.escClosable) {
1639
- globalEvents.on($xeModal, 'keydown', $xeModal.handleGlobalKeydownEvent)
1640
- }
1641
- },
1642
- beforeDestroy () {
1643
- const $xeModal = this
1644
-
1645
- const panelElem = $xeModal.$refs.refElem as HTMLDivElement
1646
- if (panelElem && panelElem.parentNode) {
1647
- panelElem.parentNode.removeChild(panelElem)
1648
- }
1649
- globalEvents.off($xeModal, 'keydown')
1650
- $xeModal.removeMsgQueue()
1651
- $xeModal.removeActiveQueue()
1652
- $xeModal.removeBodyLockScroll()
1653
- },
1654
- render (this: any, h) {
1655
- return this.renderVN(h)
1656
- }
1657
- }) /* define-vxe-component end */
1
+ import { PropType, CreateElement, VNode } from 'vue'
2
+ import { defineVxeComponent } from '../../ui/src/comp'
3
+ import XEUtils from 'xe-utils'
4
+ import { VxeUI, getConfig, getI18n, getIcon, createEvent, globalEvents, globalMixins, renderEmptyElement, GLOBAL_EVENT_KEYS } from '../../ui'
5
+ import { getDomNode, getEventTargetNode, toCssUnit } from '../../ui/src/dom'
6
+ import { getLastZIndex, nextZIndex, getSubLastZIndex, nextSubZIndex, getFuncText, handleBooleanDefaultValue } from '../../ui/src/utils'
7
+ import VxeButtonComponent from '../../button/src/button'
8
+ import VxeLoadingComponent from '../../loading/index'
9
+ import { getSlotVNs } from '../../ui/src/vn'
10
+ import { warnLog, errLog } from '../../ui/src/log'
11
+
12
+ import type { VxeModalConstructor, VxeModalPropTypes, ModalReactData, ModalInternalData, VxeModalMethods, ModalEventTypes, VxeModalEmits, VxeComponentSizeType, VxeComponentPermissionInfo, ValueOf, VxeButtonConstructor, VxeDrawerConstructor, VxeDrawerMethods, VxeFormConstructor, VxeFormPrivateMethods } from '../../../types'
13
+ import type { VxeTableConstructor, VxeTablePrivateMethods } from '../../../types/components/table'
14
+
15
+ export const allActiveModals: VxeModalConstructor[] = []
16
+ const msgQueue: VxeModalConstructor[] = []
17
+ const notifyQueue: VxeModalConstructor[] = []
18
+
19
+ const lockScrollAttrKey = 'data-vxe-lock-scroll'
20
+ const lockScrollCssWidthKey = '--vxe-ui-modal-lock-scroll-view-width'
21
+
22
+ export default /* define-vxe-component start */ defineVxeComponent({
23
+ name: 'VxeModal',
24
+ mixins: [
25
+ globalMixins.sizeMixin,
26
+ globalMixins.permissionMixin
27
+ ],
28
+ props: {
29
+ value: Boolean as PropType<VxeModalPropTypes.ModelValue>,
30
+ id: String as PropType<VxeModalPropTypes.ID>,
31
+ type: {
32
+ type: String as PropType<VxeModalPropTypes.Type>,
33
+ default: 'modal'
34
+ },
35
+ loading: {
36
+ type: Boolean as PropType<VxeModalPropTypes.Loading>,
37
+ default: null
38
+ },
39
+ status: String as PropType<VxeModalPropTypes.Status>,
40
+ iconStatus: String as PropType<VxeModalPropTypes.IconStatus>,
41
+ className: String as PropType<VxeModalPropTypes.ClassName>,
42
+ top: {
43
+ type: [Number, String] as PropType<VxeModalPropTypes.Top>,
44
+ default: () => getConfig().modal.top
45
+ },
46
+ position: [String, Object] as PropType<VxeModalPropTypes.Position>,
47
+ title: String as PropType<VxeModalPropTypes.Title>,
48
+ duration: {
49
+ type: [Number, String] as PropType<VxeModalPropTypes.Duration>,
50
+ default: () => getConfig().modal.duration
51
+ },
52
+ content: [Number, String] as PropType<VxeModalPropTypes.Content>,
53
+ showCancelButton: {
54
+ type: Boolean as PropType<VxeModalPropTypes.ShowCancelButton>,
55
+ default: null
56
+ },
57
+ cancelButtonText: {
58
+ type: String as PropType<VxeModalPropTypes.CancelButtonText>,
59
+ default: () => getConfig().modal.cancelButtonText
60
+ },
61
+ showConfirmButton: {
62
+ type: Boolean as PropType<VxeModalPropTypes.ShowConfirmButton>,
63
+ default: () => getConfig().modal.showConfirmButton
64
+ },
65
+ confirmButtonText: {
66
+ type: String as PropType<VxeModalPropTypes.ConfirmButtonText>,
67
+ default: () => getConfig().modal.confirmButtonText
68
+ },
69
+ lockView: {
70
+ type: Boolean as PropType<VxeModalPropTypes.LockView>,
71
+ default: () => getConfig().modal.lockView
72
+ },
73
+ lockScroll: Boolean as PropType<VxeModalPropTypes.LockScroll>,
74
+ mask: {
75
+ type: Boolean as PropType<VxeModalPropTypes.Mask>,
76
+ default: () => getConfig().modal.mask
77
+ },
78
+ maskClosable: {
79
+ type: Boolean as PropType<VxeModalPropTypes.MaskClosable>,
80
+ default: () => getConfig().modal.maskClosable
81
+ },
82
+ escClosable: {
83
+ type: Boolean as PropType<VxeModalPropTypes.EscClosable>,
84
+ default: () => getConfig().modal.escClosable
85
+ },
86
+ cancelClosable: {
87
+ type: Boolean as PropType<VxeModalPropTypes.CancelClosable>,
88
+ default: () => getConfig().modal.cancelClosable
89
+ },
90
+ confirmClosable: {
91
+ type: Boolean as PropType<VxeModalPropTypes.ConfirmClosable>,
92
+ default: () => getConfig().modal.confirmClosable
93
+ },
94
+ resize: Boolean as PropType<VxeModalPropTypes.Resize>,
95
+ showHeader: {
96
+ type: Boolean as PropType<VxeModalPropTypes.ShowHeader>,
97
+ default: () => getConfig().modal.showHeader
98
+ },
99
+ showFooter: {
100
+ type: Boolean as PropType<VxeModalPropTypes.ShowFooter>,
101
+ default: () => getConfig().modal.showFooter
102
+ },
103
+ showZoom: Boolean as PropType<VxeModalPropTypes.ShowZoom>,
104
+ zoomConfig: Object as PropType<VxeModalPropTypes.ZoomConfig>,
105
+ showMaximize: {
106
+ type: Boolean as PropType<VxeModalPropTypes.ShowMaximize>,
107
+ default: () => handleBooleanDefaultValue(getConfig().modal.showMaximize)
108
+ },
109
+ showMinimize: {
110
+ type: Boolean as PropType<VxeModalPropTypes.ShowMinimize>,
111
+ default: () => handleBooleanDefaultValue(getConfig().modal.showMinimize)
112
+ },
113
+ showClose: {
114
+ type: Boolean as PropType<VxeModalPropTypes.ShowClose>,
115
+ default: () => getConfig().modal.showClose
116
+ },
117
+ dblclickZoom: {
118
+ type: Boolean as PropType<VxeModalPropTypes.DblclickZoom>,
119
+ default: () => getConfig().modal.dblclickZoom
120
+ },
121
+ width: [Number, String] as PropType<VxeModalPropTypes.Width>,
122
+ height: [Number, String] as PropType<VxeModalPropTypes.Height>,
123
+ minWidth: {
124
+ type: [Number, String] as PropType<VxeModalPropTypes.MinWidth>,
125
+ default: () => getConfig().modal.minWidth
126
+ },
127
+ minHeight: {
128
+ type: [Number, String] as PropType<VxeModalPropTypes.MinHeight>,
129
+ default: () => getConfig().modal.minHeight
130
+ },
131
+ zIndex: Number as PropType<VxeModalPropTypes.ZIndex>,
132
+ marginSize: {
133
+ type: [Number, String] as PropType<VxeModalPropTypes.MarginSize>,
134
+ default: () => getConfig().modal.marginSize
135
+ },
136
+ fullscreen: Boolean as PropType<VxeModalPropTypes.Fullscreen>,
137
+ draggable: {
138
+ type: Boolean as PropType<VxeModalPropTypes.Draggable>,
139
+ default: () => getConfig().modal.draggable
140
+ },
141
+ remember: {
142
+ type: Boolean,
143
+ default: () => getConfig().modal.remember
144
+ },
145
+ destroyOnClose: {
146
+ type: Boolean as PropType<VxeModalPropTypes.DestroyOnClose>,
147
+ default: () => getConfig().modal.destroyOnClose
148
+ },
149
+ showTitleOverflow: {
150
+ type: Boolean as PropType<VxeModalPropTypes.ShowTitleOverflow>,
151
+ default: () => getConfig().modal.showTitleOverflow
152
+ },
153
+ transfer: {
154
+ type: Boolean as PropType<VxeModalPropTypes.Transfer>,
155
+ default: () => getConfig().modal.transfer
156
+ },
157
+ storage: {
158
+ type: Boolean as PropType<VxeModalPropTypes.Storage>,
159
+ default: () => getConfig().modal.storage
160
+ },
161
+ storageKey: {
162
+ type: String as PropType<VxeModalPropTypes.StorageKey>,
163
+ default: () => getConfig().modal.storageKey
164
+ },
165
+ padding: {
166
+ type: Boolean as PropType<VxeModalPropTypes.Padding>,
167
+ default: () => getConfig().modal.padding
168
+ },
169
+ size: {
170
+ type: String as PropType<VxeModalPropTypes.Size>,
171
+ default: () => getConfig().modal.size || getConfig().size
172
+ },
173
+ beforeHideMethod: Function as PropType<VxeModalPropTypes.BeforeHideMethod>,
174
+ slots: Object as PropType<VxeModalPropTypes.Slots>,
175
+
176
+ /**
177
+ * 已废弃
178
+ * @deprecated
179
+ */
180
+ message: [Number, String] as PropType<VxeModalPropTypes.Message>,
181
+ /**
182
+ * 已废弃
183
+ * @deprecated
184
+ */
185
+ animat: {
186
+ type: Boolean as PropType<VxeModalPropTypes.Animat>,
187
+ default: () => getConfig().modal.animat
188
+ }
189
+ },
190
+ inject: {
191
+ $xeParentModal: {
192
+ from: '$xeModal',
193
+ default: null
194
+ },
195
+ $xeDrawer: {
196
+ default: null
197
+ },
198
+ $xeTable: {
199
+ default: null
200
+ },
201
+ $xeForm: {
202
+ default: null
203
+ }
204
+ },
205
+ provide () {
206
+ const $xeModal = this
207
+ return {
208
+ $xeModal
209
+ }
210
+ },
211
+ data () {
212
+ const xID = XEUtils.uniqueId()
213
+ const reactData: ModalReactData = {
214
+ initialized: false,
215
+ visible: false,
216
+ contentVisible: false,
217
+ modalTop: 0,
218
+ modalZindex: 0,
219
+ prevZoomStatus: '',
220
+ zoomStatus: '',
221
+ revertLocat: null,
222
+ prevLocat: null,
223
+ firstOpen: true,
224
+ resizeFlag: 1
225
+ }
226
+ const internalData: ModalInternalData = {
227
+ msgTimeout: undefined
228
+ }
229
+ return {
230
+ xID,
231
+ reactData,
232
+ internalData
233
+ }
234
+ },
235
+ computed: {
236
+ ...({} as {
237
+ computePermissionInfo(): VxeComponentPermissionInfo
238
+ computeSize(): VxeComponentSizeType
239
+ $xeParentModal(): (VxeModalConstructor & VxeModalMethods) | null
240
+ $xeDrawer(): (VxeDrawerConstructor & VxeDrawerMethods) | null
241
+ $xeTable(): (VxeTableConstructor & VxeTablePrivateMethods) | null
242
+ $xeForm(): (VxeFormConstructor & VxeFormPrivateMethods) | null
243
+ }),
244
+ computeBtnTransfer () {
245
+ const $xeSelect = this
246
+ const props = $xeSelect
247
+ const $xeTable = $xeSelect.$xeTable
248
+ const $xeParentModal = $xeSelect.$xeParentModal
249
+ const $xeDrawer = $xeSelect.$xeDrawer
250
+ const $xeForm = $xeSelect.$xeForm
251
+
252
+ const { transfer } = props
253
+ if (transfer === null) {
254
+ const globalTransfer = getConfig().select.transfer
255
+ if (XEUtils.isBoolean(globalTransfer)) {
256
+ return globalTransfer
257
+ }
258
+ if ($xeTable || $xeParentModal || $xeDrawer || $xeForm) {
259
+ return true
260
+ }
261
+ }
262
+ return transfer
263
+ },
264
+ computeIsMsg () {
265
+ const $xeModal = this
266
+ const props = $xeModal
267
+
268
+ return props.type === 'message' || props.type === 'notification'
269
+ },
270
+ computeIsMinimizeStatus () {
271
+ const $xeModal = this
272
+ const reactData = $xeModal.reactData as ModalReactData
273
+
274
+ return reactData.zoomStatus === 'minimize'
275
+ },
276
+ computeIsMaximizeStatus () {
277
+ const $xeModal = this
278
+ const reactData = $xeModal.reactData as ModalReactData
279
+
280
+ return reactData.zoomStatus === 'maximize'
281
+ },
282
+ computeZoomOpts () {
283
+ const $xeModal = this
284
+ const props = $xeModal
285
+
286
+ return Object.assign({}, getConfig().modal.zoomConfig, props.zoomConfig)
287
+ }
288
+ },
289
+ watch: {
290
+ width () {
291
+ const $xeModal = this
292
+
293
+ $xeModal.recalculate()
294
+ },
295
+ height () {
296
+ const $xeModal = this
297
+
298
+ $xeModal.recalculate()
299
+ },
300
+ value (val) {
301
+ const $xeModal = this
302
+
303
+ if (val) {
304
+ $xeModal.openModal()
305
+ } else {
306
+ $xeModal.closeModal('model')
307
+ }
308
+ }
309
+ },
310
+ methods: {
311
+ //
312
+ // Method
313
+ //
314
+ dispatchEvent (type: ValueOf<VxeModalEmits>, params: Record<string, any>, evnt: Event | null) {
315
+ const $xeModal = this
316
+ $xeModal.$emit(type, createEvent(evnt, { $modal: $xeModal }, params))
317
+ },
318
+ emitModel (value: any) {
319
+ const $xeModal = this
320
+
321
+ const { _events } = $xeModal as any
322
+ $xeModal.$emit('input', value)
323
+ if (_events && _events.modelValue) {
324
+ $xeModal.$emit('modelValue', value)
325
+ } else {
326
+ $xeModal.$emit('model-value', value)
327
+ }
328
+ },
329
+ callSlot (slotFunc: ((params: any, h: CreateElement) => any) | string | null, params: any, h: CreateElement) {
330
+ const $xeModal = this
331
+ const slots = $xeModal.$scopedSlots
332
+
333
+ if (slotFunc) {
334
+ if (XEUtils.isString(slotFunc)) {
335
+ slotFunc = slots[slotFunc] || null
336
+ }
337
+ if (XEUtils.isFunction(slotFunc)) {
338
+ return getSlotVNs(slotFunc.call($xeModal, params, h))
339
+ }
340
+ }
341
+ return []
342
+ },
343
+ open () {
344
+ const $xeModal = this
345
+
346
+ return $xeModal.openModal()
347
+ },
348
+ close () {
349
+ const $xeModal = this
350
+
351
+ return $xeModal.closeModal('close')
352
+ },
353
+ getBox () {
354
+ const $xeModal = this
355
+
356
+ const boxElem = $xeModal.$refs.refModalBox as HTMLDivElement
357
+ return boxElem
358
+ },
359
+ getPosition () {
360
+ const $xeModal = this
361
+
362
+ const isMsg = $xeModal.computeIsMsg
363
+ if (!isMsg) {
364
+ const boxElem = $xeModal.getBox()
365
+ if (boxElem) {
366
+ return {
367
+ top: boxElem.offsetTop,
368
+ left: boxElem.offsetLeft
369
+ }
370
+ }
371
+ }
372
+ return null
373
+ },
374
+ setPosition (top?: number, left?: number) {
375
+ const $xeModal = this
376
+
377
+ const isMsg = $xeModal.computeIsMsg
378
+ if (!isMsg) {
379
+ const boxElem = $xeModal.getBox()
380
+ if (boxElem) {
381
+ if (XEUtils.isNumber(top)) {
382
+ boxElem.style.top = `${top}px`
383
+ }
384
+ if (XEUtils.isNumber(left)) {
385
+ boxElem.style.left = `${left}px`
386
+ }
387
+ }
388
+ }
389
+ return $xeModal.$nextTick()
390
+ },
391
+ isMinimized () {
392
+ const $xeModal = this
393
+ const reactData = $xeModal.reactData
394
+
395
+ return reactData.zoomStatus === 'minimize'
396
+ },
397
+ isMaximized () {
398
+ const $xeModal = this
399
+ const reactData = $xeModal.reactData
400
+
401
+ return reactData.zoomStatus === 'maximize'
402
+ },
403
+ zoom () {
404
+ const $xeModal = this
405
+
406
+ return $xeModal.handleZoom()
407
+ },
408
+ minimize () {
409
+ const $xeModal = this
410
+ const reactData = $xeModal.reactData
411
+
412
+ if (!reactData.visible) {
413
+ return Promise.resolve({
414
+ status: false
415
+ })
416
+ }
417
+ return $xeModal.handleMinimize()
418
+ },
419
+ maximize () {
420
+ const $xeModal = this
421
+ const reactData = $xeModal.reactData
422
+
423
+ if (!reactData.visible) {
424
+ return Promise.resolve({
425
+ status: false
426
+ })
427
+ }
428
+ return $xeModal.handleMaximize()
429
+ },
430
+ revert () {
431
+ const $xeModal = this
432
+ const reactData = $xeModal.reactData
433
+
434
+ if (!reactData.visible) {
435
+ return Promise.resolve({
436
+ status: false
437
+ })
438
+ }
439
+ return $xeModal.handleRevert()
440
+ },
441
+ recalculate () {
442
+ const $xeModal = this
443
+ const props = $xeModal
444
+
445
+ const { width, height } = props
446
+ const boxElem = $xeModal.getBox()
447
+ if (boxElem) {
448
+ boxElem.style.width = width ? toCssUnit(width) : ''
449
+ boxElem.style.height = height ? toCssUnit(height) : ''
450
+ }
451
+ return $xeModal.$nextTick()
452
+ },
453
+ updateZindex () {
454
+ const $xeModal = this
455
+ const props = $xeModal
456
+ const reactData = $xeModal.reactData
457
+
458
+ const { zIndex } = props
459
+ const { modalZindex } = reactData
460
+ if (zIndex) {
461
+ reactData.modalZindex = zIndex
462
+ } else {
463
+ const isMsg = $xeModal.computeIsMsg
464
+ if (isMsg) {
465
+ if (modalZindex < getSubLastZIndex()) {
466
+ reactData.modalZindex = nextSubZIndex()
467
+ }
468
+ } else {
469
+ if (modalZindex < getLastZIndex()) {
470
+ reactData.modalZindex = nextZIndex()
471
+ }
472
+ }
473
+ }
474
+ },
475
+ updatePosition () {
476
+ const $xeModal = this
477
+ const props = $xeModal
478
+
479
+ return $xeModal.$nextTick().then(() => {
480
+ const { position } = props
481
+ const marginSize = XEUtils.toNumber(props.marginSize)
482
+ const boxElem = $xeModal.getBox()
483
+ if (!boxElem) {
484
+ return
485
+ }
486
+ const clientVisibleWidth = document.documentElement.clientWidth || document.body.clientWidth
487
+ const clientVisibleHeight = document.documentElement.clientHeight || document.body.clientHeight
488
+ const isPosCenter = position === 'center'
489
+ const { top, left }: any = XEUtils.isString(position) ? { top: position, left: position } : Object.assign({}, position)
490
+ const topCenter = isPosCenter || top === 'center'
491
+ const leftCenter = isPosCenter || left === 'center'
492
+ let posTop = ''
493
+ let posLeft = ''
494
+ if (left && !leftCenter) {
495
+ posLeft = isNaN(left) ? left : `${left}px`
496
+ } else {
497
+ posLeft = `${Math.max(marginSize, clientVisibleWidth / 2 - boxElem.offsetWidth / 2)}px`
498
+ }
499
+ if (top && !topCenter) {
500
+ posTop = isNaN(top) ? top : `${top}px`
501
+ } else {
502
+ posTop = `${Math.max(marginSize, clientVisibleHeight / 2 - boxElem.offsetHeight / 2)}px`
503
+ }
504
+ boxElem.style.top = posTop
505
+ boxElem.style.left = posLeft
506
+ })
507
+ },
508
+ updateStyle () {
509
+ const $xeModal = this
510
+ const props = $xeModal
511
+
512
+ $xeModal.$nextTick(() => {
513
+ const { type } = props
514
+ const queueList = type === 'notification' ? notifyQueue : msgQueue
515
+ let offsetTop = 0
516
+ queueList.forEach(comp => {
517
+ const boxElem = comp.getBox()
518
+ if (boxElem) {
519
+ offsetTop += XEUtils.toNumber(comp.top)
520
+ comp.reactData.modalTop = offsetTop
521
+ offsetTop += boxElem.clientHeight
522
+ }
523
+ })
524
+ })
525
+ },
526
+ removeActiveQueue () {
527
+ const $xeModal = this
528
+
529
+ if (allActiveModals.indexOf($xeModal as VxeModalConstructor) > -1) {
530
+ XEUtils.remove(allActiveModals, item => item === $xeModal)
531
+ }
532
+ },
533
+ removeMsgQueue () {
534
+ const $xeModal = this
535
+ const props = $xeModal
536
+
537
+ const { type } = props
538
+ const queueList = type === 'notification' ? notifyQueue : msgQueue
539
+ if (queueList.indexOf($xeModal as VxeModalConstructor) > -1) {
540
+ XEUtils.remove(queueList, comp => comp === $xeModal)
541
+ }
542
+ $xeModal.updateStyle()
543
+ },
544
+ closeModal (type: ModalEventTypes) {
545
+ const $xeModal = this
546
+ const props = $xeModal
547
+ const reactData = $xeModal.reactData
548
+
549
+ const { remember } = props
550
+ const { visible } = reactData
551
+ const isMsg = $xeModal.computeIsMsg
552
+ const beforeHideFn = props.beforeHideMethod || getConfig().modal.beforeHideMethod
553
+ const params = { type }
554
+ if (visible) {
555
+ Promise.resolve(beforeHideFn ? beforeHideFn(params) : null).then((rest) => {
556
+ if (!XEUtils.isError(rest)) {
557
+ if (isMsg) {
558
+ $xeModal.removeMsgQueue()
559
+ }
560
+ reactData.contentVisible = false
561
+ if (!remember) {
562
+ $xeModal.handleRevert()
563
+ }
564
+ $xeModal.removeActiveQueue()
565
+ $xeModal.dispatchEvent('before-hide', params, null)
566
+ setTimeout(() => {
567
+ reactData.visible = false
568
+ $xeModal.emitModel(false)
569
+ $xeModal.dispatchEvent('hide', params, null)
570
+ }, 200)
571
+ $xeModal.removeBodyLockScroll()
572
+ }
573
+ }).catch(e => e)
574
+ }
575
+ return $xeModal.$nextTick()
576
+ },
577
+ closeEvent (evnt: Event) {
578
+ const $xeModal = this
579
+
580
+ const type = 'close'
581
+ $xeModal.dispatchEvent(type, { type }, evnt)
582
+ $xeModal.closeModal(type)
583
+ },
584
+ confirmEvent (evnt: Event) {
585
+ const $xeModal = this
586
+ const props = $xeModal
587
+
588
+ const { confirmClosable } = props
589
+ const type = 'confirm'
590
+ $xeModal.dispatchEvent(type, { type }, evnt)
591
+ if (confirmClosable) {
592
+ $xeModal.closeModal(type)
593
+ }
594
+ },
595
+ cancelEvent (evnt: Event) {
596
+ const $xeModal = this
597
+ const props = $xeModal
598
+
599
+ const { cancelClosable } = props
600
+ const type = 'cancel'
601
+ $xeModal.dispatchEvent(type, { type }, evnt)
602
+ if (cancelClosable) {
603
+ $xeModal.closeModal(type)
604
+ }
605
+ },
606
+ getStorageMap (key: string) {
607
+ const version = getConfig().version
608
+ const rest = XEUtils.toStringJSON(localStorage.getItem(key) || '')
609
+ return rest && rest._v === version ? rest : { _v: version }
610
+ },
611
+ hasPosStorage () {
612
+ const $xeModal = this
613
+ const props = $xeModal
614
+
615
+ const { id, storage, storageKey } = props
616
+ return !!(id && storage && $xeModal.getStorageMap(storageKey)[id])
617
+ },
618
+ restorePosStorage () {
619
+ const $xeModal = this
620
+ const props = $xeModal
621
+ const reactData = $xeModal.reactData
622
+
623
+ const { id, storage, storageKey } = props
624
+ if (id && storage) {
625
+ const posStorage = $xeModal.getStorageMap(storageKey)[id]
626
+ if (posStorage) {
627
+ const boxElem = $xeModal.getBox()
628
+ const [left, top, width, height, zoomLeft, zoomTop, zoomWidth, zoomHeight] = posStorage.split(',')
629
+ if (boxElem) {
630
+ if (left) {
631
+ boxElem.style.left = `${left}px`
632
+ }
633
+ if (top) {
634
+ boxElem.style.top = `${top}px`
635
+ }
636
+ if (width) {
637
+ boxElem.style.width = `${width}px`
638
+ }
639
+ if (height) {
640
+ boxElem.style.height = `${height}px`
641
+ }
642
+ }
643
+ if (zoomLeft && zoomTop) {
644
+ reactData.revertLocat = {
645
+ left: zoomLeft,
646
+ top: zoomTop,
647
+ width: zoomWidth,
648
+ height: zoomHeight
649
+ }
650
+ }
651
+ }
652
+ }
653
+ },
654
+ addMsgQueue () {
655
+ const $xeModal = this
656
+ const props = $xeModal
657
+
658
+ const { type } = props
659
+ const queueList = type === 'notification' ? notifyQueue : msgQueue
660
+ if (queueList.indexOf($xeModal as VxeModalConstructor) === -1) {
661
+ queueList.push($xeModal as VxeModalConstructor)
662
+ }
663
+ $xeModal.updateStyle()
664
+ },
665
+ savePosStorage () {
666
+ const $xeModal = this
667
+ const props = $xeModal
668
+ const reactData = $xeModal.reactData
669
+
670
+ const { id, storage, storageKey } = props
671
+ const { zoomStatus, revertLocat } = reactData
672
+ if (zoomStatus) {
673
+ return
674
+ }
675
+ if (id && storage) {
676
+ const boxElem = $xeModal.getBox()
677
+ if (!boxElem) {
678
+ return
679
+ }
680
+ const posStorageMap = $xeModal.getStorageMap(storageKey)
681
+ posStorageMap[id] = ([
682
+ boxElem.style.left,
683
+ boxElem.style.top,
684
+ boxElem.clientWidth,
685
+ boxElem.clientHeight
686
+ ] as (string | number)[]).concat(revertLocat
687
+ ? [
688
+ revertLocat.left,
689
+ revertLocat.top,
690
+ revertLocat.width,
691
+ revertLocat.height
692
+ ]
693
+ : []).map(val => val ? XEUtils.toNumber(val) : '').join(',')
694
+ localStorage.setItem(storageKey, XEUtils.toJSONString(posStorageMap))
695
+ }
696
+ },
697
+ handleMinimize () {
698
+ const $xeModal = this
699
+ const reactData = $xeModal.reactData
700
+
701
+ const zoomOpts = $xeModal.computeZoomOpts
702
+ const { minimizeLayout, minimizeMaxSize, minimizeHorizontalOffset, minimizeVerticalOffset, minimizeOffsetMethod } = zoomOpts
703
+ const isHorizontalLayout = minimizeLayout === 'horizontal'
704
+ const prevZoomStatus = reactData.zoomStatus
705
+ const hlMList: VxeModalConstructor[] = []
706
+ const vlMList: VxeModalConstructor[] = []
707
+ allActiveModals.forEach(item => {
708
+ if (item.xID !== $xeModal.xID && item.type === 'modal' && item.reactData.zoomStatus === 'minimize') {
709
+ const itemZoomOpts = item.computeZoomOpts
710
+ if (itemZoomOpts.minimizeLayout === 'horizontal') {
711
+ hlMList.push(item)
712
+ } else {
713
+ vlMList.push(item)
714
+ }
715
+ }
716
+ })
717
+ const mList = isHorizontalLayout ? hlMList : vlMList
718
+ // 如果配置最小化最大数量
719
+ if (minimizeMaxSize && mList.length >= minimizeMaxSize) {
720
+ if (VxeUI.modal) {
721
+ VxeUI.modal.message({
722
+ status: 'error',
723
+ content: getI18n('vxe.modal.miniMaxSize', [minimizeMaxSize])
724
+ })
725
+ }
726
+ return Promise.resolve({
727
+ status: false
728
+ })
729
+ }
730
+ reactData.prevZoomStatus = prevZoomStatus
731
+ reactData.zoomStatus = 'minimize'
732
+ return $xeModal.$nextTick().then(() => {
733
+ const boxElem = $xeModal.getBox()
734
+ if (!boxElem) {
735
+ return {
736
+ status: false
737
+ }
738
+ }
739
+ const headerEl = $xeModal.$refs.refHeaderElem as HTMLDivElement
740
+ if (!headerEl) {
741
+ return {
742
+ status: false
743
+ }
744
+ }
745
+ const { visibleHeight } = getDomNode()
746
+ // 如果当前处于复原状态
747
+ if (!prevZoomStatus) {
748
+ reactData.revertLocat = {
749
+ top: boxElem.offsetTop,
750
+ left: boxElem.offsetLeft,
751
+ width: boxElem.offsetWidth + (boxElem.style.width ? 0 : 1),
752
+ height: boxElem.offsetHeight + (boxElem.style.height ? 0 : 1)
753
+ }
754
+ }
755
+ const targetModal = XEUtils[isHorizontalLayout ? 'max' : 'min'](mList, ($modal) => {
756
+ const boxElem = $modal.getBox()
757
+ return boxElem ? XEUtils.toNumber(boxElem.style[isHorizontalLayout ? 'left' : 'top']) : 0
758
+ })
759
+ let targetTop = visibleHeight - headerEl.offsetHeight - 16
760
+ let targetLeft = 16
761
+ if (targetModal) {
762
+ const minBoxElem = targetModal.getBox()
763
+ if (minBoxElem) {
764
+ const boxLeft = XEUtils.toNumber(minBoxElem.style.left)
765
+ const boxTop = XEUtils.toNumber(minBoxElem.style.top)
766
+ let offsetObj: {
767
+ top?: number
768
+ left?: number
769
+ } = {}
770
+ if (isHorizontalLayout) {
771
+ offsetObj = Object.assign({}, minimizeHorizontalOffset)
772
+ } else {
773
+ offsetObj = Object.assign({}, minimizeVerticalOffset)
774
+ }
775
+ targetLeft = boxLeft + XEUtils.toNumber(offsetObj.left)
776
+ targetTop = boxTop + XEUtils.toNumber(offsetObj.top)
777
+ if (minimizeOffsetMethod) {
778
+ offsetObj = minimizeOffsetMethod({
779
+ $modal: $xeModal as VxeModalConstructor,
780
+ left: targetLeft,
781
+ top: targetTop
782
+ })
783
+ targetLeft = XEUtils.toNumber(offsetObj.left)
784
+ targetTop = XEUtils.toNumber(offsetObj.top)
785
+ }
786
+ }
787
+ }
788
+ Object.assign(boxElem.style, {
789
+ top: `${targetTop}px`,
790
+ left: `${targetLeft}px`,
791
+ width: '200px',
792
+ height: `${headerEl.offsetHeight}px`
793
+ })
794
+ $xeModal.savePosStorage()
795
+ return {
796
+ status: true
797
+ }
798
+ })
799
+ },
800
+ handleMaximize () {
801
+ const $xeModal = this
802
+ const props = $xeModal
803
+ const reactData = $xeModal.reactData
804
+
805
+ const prevZoomStatus = reactData.zoomStatus
806
+ reactData.prevZoomStatus = prevZoomStatus
807
+ reactData.zoomStatus = 'maximize'
808
+ return $xeModal.$nextTick().then(() => {
809
+ const boxElem = $xeModal.getBox()
810
+ if (boxElem) {
811
+ // 如果当前处于复原状态
812
+ if (!prevZoomStatus) {
813
+ const marginSize = XEUtils.toNumber(props.marginSize)
814
+ const clientVisibleWidth = document.documentElement.clientWidth || document.body.clientWidth
815
+ const clientVisibleHeight = document.documentElement.clientHeight || document.body.clientHeight
816
+ reactData.revertLocat = {
817
+ top: Math.max(marginSize, clientVisibleHeight / 2 - boxElem.offsetHeight / 2),
818
+ left: Math.max(marginSize, clientVisibleWidth / 2 - boxElem.offsetWidth / 2),
819
+ width: boxElem.offsetWidth + (boxElem.style.width ? 0 : 1),
820
+ height: boxElem.offsetHeight + (boxElem.style.height ? 0 : 1)
821
+ }
822
+ }
823
+ Object.assign(boxElem.style, {
824
+ top: '0',
825
+ left: '0',
826
+ width: '100%',
827
+ height: '100%'
828
+ })
829
+ }
830
+ $xeModal.savePosStorage()
831
+ })
832
+ },
833
+ handleMsgAutoClose () {
834
+ const $xeModal = this
835
+ const props = $xeModal
836
+ const internalData = $xeModal.internalData
837
+
838
+ const { duration } = props
839
+ if (duration !== -1) {
840
+ internalData.msgTimeout = setTimeout(() => $xeModal.closeModal('close'), XEUtils.toNumber(duration))
841
+ }
842
+ },
843
+ removeBodyLockScroll () {
844
+ const $xeModal = this
845
+ const xID = $xeModal.xID
846
+
847
+ const htmlElem = document.documentElement
848
+ const lockData = htmlElem.getAttribute(lockScrollAttrKey)
849
+ if (lockData) {
850
+ const lockList = lockData.split(',').filter(key => key !== xID)
851
+ if (lockList.length) {
852
+ htmlElem.setAttribute(lockScrollAttrKey, lockList.join(','))
853
+ } else {
854
+ htmlElem.removeAttribute(lockScrollAttrKey)
855
+ htmlElem.style.removeProperty(lockScrollCssWidthKey)
856
+ }
857
+ }
858
+ },
859
+ addBodyLockScroll () {
860
+ const $xeModal = this
861
+ const props = $xeModal
862
+ const xID = $xeModal.xID
863
+
864
+ const { lockScroll } = props
865
+ const isMsg = $xeModal.computeIsMsg
866
+ if (lockScroll && !isMsg) {
867
+ const htmlElem = document.documentElement
868
+ const clientWidth = document.body.clientWidth
869
+ const lockData = htmlElem.getAttribute(lockScrollAttrKey)
870
+ const lockList = lockData ? lockData.split(',') : []
871
+ if (!lockList.includes(xID)) {
872
+ lockList.push(xID)
873
+ htmlElem.setAttribute(lockScrollAttrKey, lockList.join(','))
874
+ }
875
+ htmlElem.style.setProperty(lockScrollCssWidthKey, `${clientWidth}px`)
876
+ }
877
+ },
878
+ openModal () {
879
+ const $xeModal = this
880
+ const props = $xeModal
881
+ const reactData = $xeModal.reactData
882
+
883
+ const { remember, showFooter } = props
884
+ const { initialized, visible } = reactData
885
+ const isMsg = $xeModal.computeIsMsg
886
+ const btnTransfer = $xeModal.computeBtnTransfer
887
+ if (!initialized) {
888
+ reactData.initialized = true
889
+ if (btnTransfer) {
890
+ const panelElem = $xeModal.$refs.refElem as HTMLDivElement
891
+ document.body.appendChild(panelElem)
892
+ }
893
+ }
894
+ if (!visible) {
895
+ $xeModal.addBodyLockScroll()
896
+ reactData.visible = true
897
+ reactData.contentVisible = false
898
+ $xeModal.updateZindex()
899
+ allActiveModals.push($xeModal as VxeModalConstructor)
900
+ setTimeout(() => {
901
+ reactData.contentVisible = true
902
+ $xeModal.$nextTick(() => {
903
+ if (showFooter) {
904
+ const confirmBtn = $xeModal.$refs.refConfirmBtn as unknown as VxeButtonConstructor
905
+ const cancelBtn = $xeModal.$refs.refCancelBtn as unknown as VxeButtonConstructor
906
+ const operBtn = confirmBtn || cancelBtn
907
+ if (operBtn) {
908
+ operBtn.focus()
909
+ }
910
+ }
911
+ const type = ''
912
+ const params = { type }
913
+ $xeModal.emitModel(true)
914
+ $xeModal.dispatchEvent('show', params, null)
915
+ })
916
+ }, 10)
917
+ if (isMsg) {
918
+ $xeModal.addMsgQueue()
919
+ $xeModal.handleMsgAutoClose()
920
+ } else {
921
+ $xeModal.$nextTick(() => {
922
+ const { fullscreen } = props
923
+ const { firstOpen } = reactData
924
+ if (firstOpen) {
925
+ reactData.firstOpen = false
926
+ if ($xeModal.hasPosStorage()) {
927
+ $xeModal.restorePosStorage()
928
+ } else {
929
+ if (fullscreen) {
930
+ $xeModal.$nextTick(() => $xeModal.handleMaximize())
931
+ } else {
932
+ $xeModal.recalculate()
933
+ $xeModal.updatePosition().then(() => {
934
+ setTimeout(() => $xeModal.updatePosition(), 20)
935
+ })
936
+ }
937
+ }
938
+ } else {
939
+ if (!remember) {
940
+ $xeModal.recalculate()
941
+ $xeModal.updatePosition().then(() => {
942
+ setTimeout(() => $xeModal.updatePosition(), 20)
943
+ })
944
+ }
945
+ }
946
+ })
947
+ }
948
+ }
949
+ return $xeModal.$nextTick()
950
+ },
951
+ selfClickEvent (evnt: Event) {
952
+ const $xeModal = this
953
+ const props = $xeModal
954
+
955
+ const el = $xeModal.$refs.refElem as HTMLDivElement
956
+ if (props.maskClosable && evnt.target === el) {
957
+ const type = 'mask'
958
+ $xeModal.closeModal(type)
959
+ }
960
+ },
961
+ selfMouseoverEvent () {
962
+ const $xeModal = this
963
+ const internalData = $xeModal.internalData
964
+
965
+ const { msgTimeout } = internalData
966
+ if (!msgTimeout) {
967
+ return
968
+ }
969
+ const isMsg = $xeModal.computeIsMsg
970
+ if (isMsg) {
971
+ clearTimeout(msgTimeout)
972
+ internalData.msgTimeout = undefined
973
+ }
974
+ },
975
+ selfMouseoutEvent () {
976
+ const $xeModal = this
977
+ const internalData = $xeModal.internalData
978
+
979
+ const { msgTimeout } = internalData
980
+ if (!msgTimeout) {
981
+ const isMsg = $xeModal.computeIsMsg
982
+ if (isMsg) {
983
+ $xeModal.handleMsgAutoClose()
984
+ }
985
+ }
986
+ },
987
+ handleGlobalKeydownEvent (evnt: KeyboardEvent) {
988
+ const $xeModal = this
989
+
990
+ const isEsc = globalEvents.hasKey(evnt, GLOBAL_EVENT_KEYS.ESCAPE)
991
+ if (isEsc) {
992
+ const lastModal = XEUtils.max(allActiveModals, (item) => item.reactData.modalZindex)
993
+ // 多个时,只关掉最上层的窗口
994
+ if (lastModal) {
995
+ setTimeout(() => {
996
+ if (lastModal === $xeModal && lastModal.escClosable) {
997
+ const type = 'exit'
998
+ $xeModal.dispatchEvent('close', { type }, evnt)
999
+ $xeModal.closeModal(type)
1000
+ }
1001
+ }, 10)
1002
+ }
1003
+ }
1004
+ },
1005
+ handleRevert () {
1006
+ const $xeModal = this
1007
+ const reactData = $xeModal.reactData
1008
+
1009
+ reactData.prevZoomStatus = reactData.zoomStatus
1010
+ reactData.zoomStatus = ''
1011
+ return $xeModal.$nextTick().then(() => {
1012
+ const { revertLocat } = reactData
1013
+ if (revertLocat) {
1014
+ const boxElem = $xeModal.getBox()
1015
+ reactData.revertLocat = null
1016
+ if (boxElem) {
1017
+ Object.assign(boxElem.style, {
1018
+ top: `${revertLocat.top}px`,
1019
+ left: `${revertLocat.left}px`,
1020
+ width: `${revertLocat.width}px`,
1021
+ height: `${revertLocat.height}px`
1022
+ })
1023
+ }
1024
+ $xeModal.savePosStorage()
1025
+ return $xeModal.$nextTick().then(() => {
1026
+ return {
1027
+ status: true
1028
+ }
1029
+ })
1030
+ }
1031
+ return {
1032
+ status: false
1033
+ }
1034
+ })
1035
+ },
1036
+ handleZoom (type?: 'minimize' | 'revert' | 'maximize') {
1037
+ const $xeModal = this
1038
+ const reactData = $xeModal.reactData
1039
+
1040
+ const { zoomStatus } = reactData
1041
+ return new Promise(resolve => {
1042
+ if (type) {
1043
+ if (type === 'maximize') {
1044
+ resolve($xeModal.handleMaximize())
1045
+ return
1046
+ }
1047
+ if (type === 'minimize') {
1048
+ resolve($xeModal.handleMinimize())
1049
+ return
1050
+ }
1051
+ resolve($xeModal.handleRevert())
1052
+ return
1053
+ }
1054
+ resolve(zoomStatus ? $xeModal.handleRevert() : $xeModal.handleMaximize())
1055
+ }).then(() => {
1056
+ return reactData.zoomStatus || 'revert'
1057
+ })
1058
+ },
1059
+ toggleZoomMinEvent (evnt: Event) {
1060
+ const $xeModal = this
1061
+ const reactData = $xeModal.reactData
1062
+
1063
+ const { zoomStatus, prevZoomStatus } = reactData
1064
+ return $xeModal.handleZoom(zoomStatus === 'minimize' ? (prevZoomStatus || 'revert') : 'minimize').then((type) => {
1065
+ const params = { type }
1066
+ $xeModal.dispatchEvent('zoom', params, evnt)
1067
+ })
1068
+ },
1069
+ toggleZoomMaxEvent (evnt: Event) {
1070
+ const $xeModal = this
1071
+
1072
+ return $xeModal.handleZoom().then((type) => {
1073
+ const params = { type }
1074
+ $xeModal.dispatchEvent('zoom', params, evnt)
1075
+ })
1076
+ },
1077
+ boxMousedownEvent () {
1078
+ const $xeModal = this
1079
+ const reactData = $xeModal.reactData
1080
+
1081
+ const { modalZindex } = reactData
1082
+ if (allActiveModals.some(comp => comp.reactData.visible && comp.reactData.modalZindex > modalZindex)) {
1083
+ $xeModal.updateZindex()
1084
+ }
1085
+ },
1086
+ mousedownEvent (evnt: MouseEvent) {
1087
+ const $xeModal = this
1088
+ const props = $xeModal
1089
+ const reactData = $xeModal.reactData
1090
+
1091
+ const { storage } = props
1092
+ const { zoomStatus } = reactData
1093
+ const marginSize = XEUtils.toNumber(props.marginSize)
1094
+ const boxElem = $xeModal.getBox()
1095
+ if (!boxElem) {
1096
+ return
1097
+ }
1098
+ if (zoomStatus !== 'maximize' && evnt.button === 0 && !getEventTargetNode(evnt, boxElem, 'trigger--btn').flag) {
1099
+ evnt.preventDefault()
1100
+ const disX = evnt.clientX - boxElem.offsetLeft
1101
+ const disY = evnt.clientY - boxElem.offsetTop
1102
+ const { visibleHeight, visibleWidth } = getDomNode()
1103
+ document.onmousemove = evnt => {
1104
+ evnt.preventDefault()
1105
+ const offsetWidth = boxElem.offsetWidth
1106
+ const offsetHeight = boxElem.offsetHeight
1107
+ const minX = marginSize
1108
+ const maxX = visibleWidth - offsetWidth - marginSize - 1
1109
+ const minY = marginSize
1110
+ const maxY = visibleHeight - offsetHeight - marginSize - 1
1111
+ let left = evnt.clientX - disX
1112
+ let top = evnt.clientY - disY
1113
+ if (left > maxX) {
1114
+ left = maxX
1115
+ }
1116
+ if (left < minX) {
1117
+ left = minX
1118
+ }
1119
+ if (top > maxY) {
1120
+ top = maxY
1121
+ }
1122
+ if (top < minY) {
1123
+ top = minY
1124
+ }
1125
+ boxElem.style.left = `${left}px`
1126
+ boxElem.style.top = `${top}px`
1127
+ boxElem.className = boxElem.className.replace(/\s?is--drag/, '') + ' is--drag'
1128
+ $xeModal.$emit('move', createEvent(evnt, { type: 'move' }))
1129
+ reactData.resizeFlag++
1130
+ }
1131
+ document.onmouseup = () => {
1132
+ document.onmousemove = null
1133
+ document.onmouseup = null
1134
+ if (storage) {
1135
+ $xeModal.$nextTick(() => {
1136
+ $xeModal.savePosStorage()
1137
+ })
1138
+ }
1139
+ reactData.resizeFlag++
1140
+ setTimeout(() => {
1141
+ boxElem.className = boxElem.className.replace(/\s?is--drag/, '')
1142
+ }, 50)
1143
+ }
1144
+ }
1145
+ },
1146
+ dragEvent (evnt: MouseEvent) {
1147
+ const $xeModal = this
1148
+ const props = $xeModal
1149
+ const reactData = $xeModal.reactData
1150
+
1151
+ evnt.preventDefault()
1152
+ const { storage } = props
1153
+ const { visibleHeight, visibleWidth } = getDomNode()
1154
+ const marginSize = XEUtils.toNumber(props.marginSize)
1155
+ const targetElem = evnt.target as HTMLSpanElement
1156
+ const type = targetElem.getAttribute('type')
1157
+ const minWidth = XEUtils.toNumber(props.minWidth)
1158
+ const minHeight = XEUtils.toNumber(props.minHeight)
1159
+ const maxWidth = visibleWidth
1160
+ const maxHeight = visibleHeight
1161
+ const boxElem = $xeModal.getBox()
1162
+ const clientWidth = boxElem.clientWidth
1163
+ const clientHeight = boxElem.clientHeight
1164
+ const disX = evnt.clientX
1165
+ const disY = evnt.clientY
1166
+ const offsetTop = boxElem.offsetTop
1167
+ const offsetLeft = boxElem.offsetLeft
1168
+ const params = { type: 'resize' }
1169
+ document.onmousemove = evnt => {
1170
+ evnt.preventDefault()
1171
+ let dragLeft
1172
+ let dragTop
1173
+ let width
1174
+ let height
1175
+ switch (type) {
1176
+ case 'wl':
1177
+ dragLeft = disX - evnt.clientX
1178
+ width = dragLeft + clientWidth
1179
+ if (offsetLeft - dragLeft > marginSize) {
1180
+ if (width > minWidth) {
1181
+ boxElem.style.width = `${width < maxWidth ? width : maxWidth}px`
1182
+ boxElem.style.left = `${offsetLeft - dragLeft}px`
1183
+ }
1184
+ }
1185
+ break
1186
+ case 'swst':
1187
+ dragLeft = disX - evnt.clientX
1188
+ dragTop = disY - evnt.clientY
1189
+ width = dragLeft + clientWidth
1190
+ height = dragTop + clientHeight
1191
+ if (offsetLeft - dragLeft > marginSize) {
1192
+ if (width > minWidth) {
1193
+ boxElem.style.width = `${width < maxWidth ? width : maxWidth}px`
1194
+ boxElem.style.left = `${offsetLeft - dragLeft}px`
1195
+ }
1196
+ }
1197
+ if (offsetTop - dragTop > marginSize) {
1198
+ if (height > minHeight) {
1199
+ boxElem.style.height = `${height < maxHeight ? height : maxHeight}px`
1200
+ boxElem.style.top = `${offsetTop - dragTop}px`
1201
+ }
1202
+ }
1203
+ break
1204
+ case 'swlb':
1205
+ dragLeft = disX - evnt.clientX
1206
+ dragTop = evnt.clientY - disY
1207
+ width = dragLeft + clientWidth
1208
+ height = dragTop + clientHeight
1209
+ if (offsetLeft - dragLeft > marginSize) {
1210
+ if (width > minWidth) {
1211
+ boxElem.style.width = `${width < maxWidth ? width : maxWidth}px`
1212
+ boxElem.style.left = `${offsetLeft - dragLeft}px`
1213
+ }
1214
+ }
1215
+ if (offsetTop + height + marginSize < visibleHeight) {
1216
+ if (height > minHeight) {
1217
+ boxElem.style.height = `${height < maxHeight ? height : maxHeight}px`
1218
+ }
1219
+ }
1220
+ break
1221
+ case 'st':
1222
+ dragTop = disY - evnt.clientY
1223
+ height = clientHeight + dragTop
1224
+ if (offsetTop - dragTop > marginSize) {
1225
+ if (height > minHeight) {
1226
+ boxElem.style.height = `${height < maxHeight ? height : maxHeight}px`
1227
+ boxElem.style.top = `${offsetTop - dragTop}px`
1228
+ }
1229
+ }
1230
+ break
1231
+ case 'wr':
1232
+ dragLeft = evnt.clientX - disX
1233
+ width = dragLeft + clientWidth
1234
+ if (offsetLeft + width + marginSize < visibleWidth) {
1235
+ if (width > minWidth) {
1236
+ boxElem.style.width = `${width < maxWidth ? width : maxWidth}px`
1237
+ }
1238
+ }
1239
+ break
1240
+ case 'sest':
1241
+ dragLeft = evnt.clientX - disX
1242
+ dragTop = disY - evnt.clientY
1243
+ width = dragLeft + clientWidth
1244
+ height = dragTop + clientHeight
1245
+ if (offsetLeft + width + marginSize < visibleWidth) {
1246
+ if (width > minWidth) {
1247
+ boxElem.style.width = `${width < maxWidth ? width : maxWidth}px`
1248
+ }
1249
+ }
1250
+ if (offsetTop - dragTop > marginSize) {
1251
+ if (height > minHeight) {
1252
+ boxElem.style.height = `${height < maxHeight ? height : maxHeight}px`
1253
+ boxElem.style.top = `${offsetTop - dragTop}px`
1254
+ }
1255
+ }
1256
+ break
1257
+ case 'selb':
1258
+ dragLeft = evnt.clientX - disX
1259
+ dragTop = evnt.clientY - disY
1260
+ width = dragLeft + clientWidth
1261
+ height = dragTop + clientHeight
1262
+ if (offsetLeft + width + marginSize < visibleWidth) {
1263
+ if (width > minWidth) {
1264
+ boxElem.style.width = `${width < maxWidth ? width : maxWidth}px`
1265
+ }
1266
+ }
1267
+ if (offsetTop + height + marginSize < visibleHeight) {
1268
+ if (height > minHeight) {
1269
+ boxElem.style.height = `${height < maxHeight ? height : maxHeight}px`
1270
+ }
1271
+ }
1272
+ break
1273
+ case 'sb':
1274
+ dragTop = evnt.clientY - disY
1275
+ height = dragTop + clientHeight
1276
+ if (offsetTop + height + marginSize < visibleHeight) {
1277
+ if (height > minHeight) {
1278
+ boxElem.style.height = `${height < maxHeight ? height : maxHeight}px`
1279
+ }
1280
+ }
1281
+ break
1282
+ }
1283
+ boxElem.className = boxElem.className.replace(/\s?is--drag/, '') + ' is--drag'
1284
+ if (storage) {
1285
+ $xeModal.savePosStorage()
1286
+ }
1287
+ $xeModal.dispatchEvent('resize', params, evnt)
1288
+ }
1289
+ document.onmouseup = () => {
1290
+ reactData.revertLocat = null
1291
+ document.onmousemove = null
1292
+ document.onmouseup = null
1293
+ setTimeout(() => {
1294
+ boxElem.className = boxElem.className.replace(/\s?is--drag/, '')
1295
+ }, 50)
1296
+ }
1297
+ },
1298
+
1299
+ //
1300
+ // Render
1301
+ //
1302
+ renderTitles (h: CreateElement) {
1303
+ const $xeModal = this
1304
+ const props = $xeModal
1305
+ const slots = $xeModal.$scopedSlots
1306
+ const reactData = $xeModal.reactData
1307
+
1308
+ const { slots: propSlots = {}, showClose, showZoom, showMaximize, showMinimize, title } = props
1309
+ const { zoomStatus } = reactData
1310
+ const titleSlot = slots.title || propSlots.title
1311
+ const cornerSlot = slots.corner || propSlots.corner
1312
+ const isMinimizeStatus = $xeModal.computeIsMinimizeStatus
1313
+ const isMaximizeStatus = $xeModal.computeIsMaximizeStatus
1314
+ return [
1315
+ h('div', {
1316
+ class: 'vxe-modal--header-title'
1317
+ }, titleSlot
1318
+ ? $xeModal.callSlot(titleSlot, {
1319
+ $modal: $xeModal,
1320
+ minimized: isMinimizeStatus,
1321
+ maximized: isMaximizeStatus
1322
+ }, h)
1323
+ : (title ? getFuncText(title) : getI18n('vxe.alert.title'))),
1324
+ h('div', {
1325
+ class: 'vxe-modal--header-right'
1326
+ }, [
1327
+ cornerSlot && !isMinimizeStatus
1328
+ ? h('div', {
1329
+ class: 'vxe-modal--corner-wrapper'
1330
+ }, $xeModal.callSlot(cornerSlot, { $modal: $xeModal }, h))
1331
+ : renderEmptyElement($xeModal),
1332
+ (XEUtils.isBoolean(showMinimize) ? showMinimize : showZoom)
1333
+ ? h('div', {
1334
+ class: ['vxe-modal--zoom-btn', 'trigger--btn'],
1335
+ attrs: {
1336
+ title: getI18n(`vxe.modal.zoom${zoomStatus === 'minimize' ? 'Out' : 'Min'}`)
1337
+ },
1338
+ on: {
1339
+ click: $xeModal.toggleZoomMinEvent
1340
+ }
1341
+ }, [
1342
+ h('i', {
1343
+ class: zoomStatus === 'minimize' ? getIcon().MODAL_ZOOM_REVERT : getIcon().MODAL_ZOOM_MIN
1344
+ })
1345
+ ])
1346
+ : renderEmptyElement($xeModal),
1347
+ (XEUtils.isBoolean(showMaximize) ? showMaximize : showZoom) && zoomStatus !== 'minimize'
1348
+ ? h('div', {
1349
+ class: ['vxe-modal--zoom-btn', 'trigger--btn'],
1350
+ attrs: {
1351
+ title: getI18n(`vxe.modal.zoom${zoomStatus === 'maximize' ? 'Out' : 'In'}`)
1352
+ },
1353
+ on: {
1354
+ click: $xeModal.toggleZoomMaxEvent
1355
+ }
1356
+ }, [
1357
+ h('i', {
1358
+ class: zoomStatus === 'maximize' ? getIcon().MODAL_ZOOM_OUT : getIcon().MODAL_ZOOM_IN
1359
+ })
1360
+ ])
1361
+ : renderEmptyElement($xeModal),
1362
+ showClose
1363
+ ? h('div', {
1364
+ class: ['vxe-modal--close-btn', 'trigger--btn'],
1365
+ attrs: {
1366
+ title: getI18n('vxe.modal.close')
1367
+ },
1368
+ on: {
1369
+ click: $xeModal.closeEvent
1370
+ }
1371
+ }, [
1372
+ h('i', {
1373
+ class: getIcon().MODAL_CLOSE
1374
+ })
1375
+ ])
1376
+ : renderEmptyElement($xeModal)
1377
+ ])
1378
+ ]
1379
+ },
1380
+ renderHeader (h: CreateElement) {
1381
+ const $xeModal = this
1382
+ const props = $xeModal
1383
+ const slots = $xeModal.$scopedSlots
1384
+
1385
+ const { slots: propSlots = {}, showZoom, showMaximize, draggable } = props
1386
+ const headerSlot = slots.header || propSlots.header
1387
+ if (props.showHeader) {
1388
+ const headerOns: Record<string, any> = {}
1389
+ if (draggable) {
1390
+ headerOns.mousedown = $xeModal.mousedownEvent
1391
+ }
1392
+ if ((XEUtils.isBoolean(showMaximize) ? showMaximize : showZoom) && props.dblclickZoom && props.type === 'modal') {
1393
+ headerOns.dblclick = $xeModal.toggleZoomMaxEvent
1394
+ }
1395
+ return h('div', {
1396
+ ref: 'refHeaderElem',
1397
+ class: ['vxe-modal--header', {
1398
+ 'is--ellipsis': props.showTitleOverflow
1399
+ }],
1400
+ on: headerOns
1401
+ }, headerSlot ? $xeModal.callSlot(headerSlot, { $modal: $xeModal }, h) : $xeModal.renderTitles(h))
1402
+ }
1403
+ return renderEmptyElement($xeModal)
1404
+ },
1405
+ renderBody (h: CreateElement) {
1406
+ const $xeModal = this
1407
+ const props = $xeModal
1408
+ const slots = $xeModal.$scopedSlots
1409
+
1410
+ const { slots: propSlots = {}, status, message, iconStatus } = props
1411
+ const content = props.content || message
1412
+ const isMsg = $xeModal.computeIsMsg
1413
+ const defaultSlot = slots.default || propSlots.default
1414
+ const leftSlot = slots.left || propSlots.left
1415
+ const rightSlot = slots.right || propSlots.right
1416
+ const contVNs: VNode[] = []
1417
+ if (!isMsg && (status || iconStatus)) {
1418
+ contVNs.push(
1419
+ h('div', {
1420
+ class: 'vxe-modal--status-wrapper'
1421
+ }, [
1422
+ h('i', {
1423
+ class: ['vxe-modal--status-icon', iconStatus || getIcon()[`MODAL_${status}`.toLocaleUpperCase() as 'MODAL_SUCCESS' | 'MODAL_ERROR']]
1424
+ })
1425
+ ])
1426
+ )
1427
+ }
1428
+ contVNs.push(
1429
+ h('div', {
1430
+ class: 'vxe-modal--content'
1431
+ }, defaultSlot ? $xeModal.callSlot(defaultSlot, { $modal: $xeModal }, h) : getFuncText(content))
1432
+ )
1433
+ return h('div', {
1434
+ class: 'vxe-modal--body'
1435
+ }, [
1436
+ leftSlot
1437
+ ? h('div', {
1438
+ class: 'vxe-modal--body-left'
1439
+ }, $xeModal.callSlot(leftSlot, { $modal: $xeModal }, h))
1440
+ : renderEmptyElement($xeModal),
1441
+ h('div', {
1442
+ class: 'vxe-modal--body-default'
1443
+ }, contVNs),
1444
+ rightSlot
1445
+ ? h('div', {
1446
+ class: 'vxe-modal--body-right'
1447
+ }, $xeModal.callSlot(rightSlot, { $modal: $xeModal }, h))
1448
+ : renderEmptyElement($xeModal),
1449
+ isMsg
1450
+ ? renderEmptyElement($xeModal)
1451
+ : h(VxeLoadingComponent, {
1452
+ class: 'vxe-modal--loading',
1453
+ props: {
1454
+ value: props.loading
1455
+ }
1456
+ })
1457
+ ])
1458
+ },
1459
+ renderDefaultFooter (h: CreateElement) {
1460
+ const $xeModal = this
1461
+ const props = $xeModal
1462
+ const slots = $xeModal.$scopedSlots
1463
+
1464
+ const { slots: propSlots = {}, showCancelButton, showConfirmButton, type, loading } = props
1465
+ const lfSlot = slots.leftfoot || propSlots.leftfoot
1466
+ const rfSlot = slots.rightfoot || propSlots.rightfoot
1467
+ const btnVNs = []
1468
+ if (XEUtils.isBoolean(showCancelButton) ? showCancelButton : type === 'confirm') {
1469
+ btnVNs.push(
1470
+ h(VxeButtonComponent, {
1471
+ key: 1,
1472
+ ref: 'refCancelBtn',
1473
+ props: {
1474
+ content: props.cancelButtonText || getI18n('vxe.button.cancel')
1475
+ },
1476
+ on: {
1477
+ click: $xeModal.cancelEvent
1478
+ }
1479
+ })
1480
+ )
1481
+ }
1482
+ if (XEUtils.isBoolean(showConfirmButton) ? showConfirmButton : (type === 'confirm' || type === 'alert')) {
1483
+ btnVNs.push(
1484
+ h(VxeButtonComponent, {
1485
+ key: 2,
1486
+ ref: 'refConfirmBtn',
1487
+ props: {
1488
+ status: 'primary',
1489
+ loading: loading,
1490
+ content: props.confirmButtonText || getI18n('vxe.button.confirm')
1491
+ },
1492
+ on: {
1493
+ click: $xeModal.confirmEvent
1494
+ }
1495
+ })
1496
+ )
1497
+ }
1498
+ return h('div', {
1499
+ class: 'vxe-modal--footer-wrapper'
1500
+ }, [
1501
+ h('div', {
1502
+ class: 'vxe-modal--footer-left'
1503
+ }, lfSlot ? $xeModal.callSlot(lfSlot, { $modal: $xeModal }, h) : []),
1504
+ h('div', {
1505
+ class: 'vxe-modal--footer-right'
1506
+ }, rfSlot ? $xeModal.callSlot(rfSlot, { $modal: $xeModal }, h) : btnVNs)
1507
+ ])
1508
+ },
1509
+ renderFooter (h: CreateElement) {
1510
+ const $xeModal = this
1511
+ const props = $xeModal
1512
+ const slots = $xeModal.$scopedSlots
1513
+
1514
+ const { slots: propSlots = {} } = props
1515
+ const footerSlot = slots.footer || propSlots.footer
1516
+ if (props.showFooter) {
1517
+ return h('div', {
1518
+ class: 'vxe-modal--footer'
1519
+ }, footerSlot ? $xeModal.callSlot(footerSlot, { $modal: $xeModal }, h) : [$xeModal.renderDefaultFooter(h)])
1520
+ }
1521
+ return renderEmptyElement($xeModal)
1522
+ },
1523
+ renderVN (h: CreateElement): VNode {
1524
+ const $xeModal = this
1525
+ const props = $xeModal
1526
+ const slots = $xeModal.$scopedSlots
1527
+ const reactData = $xeModal.reactData
1528
+
1529
+ const { slots: propSlots = {}, className, type, animat, draggable, iconStatus, position, loading, destroyOnClose, status, lockScroll, padding, lockView, mask, resize } = props
1530
+ const { initialized, modalTop, contentVisible, visible, zoomStatus } = reactData
1531
+ const asideSlot = slots.aside || propSlots.aside
1532
+ const vSize = $xeModal.computeSize
1533
+ const isMsg = $xeModal.computeIsMsg
1534
+ const isMinimizeStatus = $xeModal.computeIsMinimizeStatus
1535
+ const ons: Record<string, any> = {}
1536
+ if (isMsg) {
1537
+ ons.mouseover = $xeModal.selfMouseoverEvent
1538
+ ons.mouseout = $xeModal.selfMouseoutEvent
1539
+ }
1540
+ return h('div', {
1541
+ ref: 'refElem',
1542
+ class: ['vxe-modal--wrapper', `type--${type}`, `zoom--${zoomStatus || 'revert'}`, className || '', position ? `pos--${position}` : '', {
1543
+ [`size--${vSize}`]: vSize,
1544
+ [`status--${status}`]: status,
1545
+ 'is--padding': padding,
1546
+ 'is--animat': animat,
1547
+ 'lock--scroll': lockScroll,
1548
+ 'lock--view': lockView,
1549
+ 'is--draggable': draggable,
1550
+ 'is--resize': resize,
1551
+ 'is--mask': mask,
1552
+ 'is--visible': contentVisible,
1553
+ 'is--active': visible,
1554
+ 'is--loading': loading
1555
+ }],
1556
+ style: {
1557
+ zIndex: reactData.modalZindex,
1558
+ top: modalTop ? `${modalTop}px` : null
1559
+ },
1560
+ on: {
1561
+ ...ons,
1562
+ click: $xeModal.selfClickEvent
1563
+ }
1564
+ }, initialized
1565
+ ? [
1566
+ h('div', {
1567
+ ref: 'refModalBox',
1568
+ class: 'vxe-modal--box',
1569
+ on: {
1570
+ mousedown: $xeModal.boxMousedownEvent
1571
+ }
1572
+ }, [
1573
+ (isMsg || asideSlot) && !isMinimizeStatus
1574
+ ? h('div', {
1575
+ class: 'vxe-modal--aside'
1576
+ },
1577
+ asideSlot
1578
+ ? $xeModal.callSlot(asideSlot, { $modal: $xeModal }, h)
1579
+ : [
1580
+ status || iconStatus
1581
+ ? h('div', {
1582
+ class: 'vxe-modal--status-wrapper'
1583
+ }, [
1584
+ h('i', {
1585
+ class: ['vxe-modal--status-icon', iconStatus || getIcon()[`MODAL_${status}`.toLocaleUpperCase() as 'MODAL_SUCCESS' | 'MODAL_ERROR']]
1586
+ })
1587
+ ])
1588
+ : renderEmptyElement($xeModal)
1589
+ ]
1590
+ )
1591
+ : renderEmptyElement($xeModal),
1592
+ h('div', {
1593
+ class: 'vxe-modal--container'
1594
+ }, !reactData.initialized || (destroyOnClose && !reactData.visible)
1595
+ ? []
1596
+ : [
1597
+ $xeModal.renderHeader(h),
1598
+ $xeModal.renderBody(h),
1599
+ $xeModal.renderFooter(h),
1600
+ !isMsg && resize
1601
+ ? h('span', {
1602
+ class: 'vxe-modal--resize'
1603
+ }, ['wl', 'wr', 'swst', 'sest', 'st', 'swlb', 'selb', 'sb'].map(type => {
1604
+ return h('span', {
1605
+ class: `${type}-resize`,
1606
+ attrs: {
1607
+ type: type
1608
+ },
1609
+ on: {
1610
+ mousedown: $xeModal.dragEvent
1611
+ }
1612
+ })
1613
+ }))
1614
+ : renderEmptyElement($xeModal)
1615
+ ])
1616
+ ])
1617
+ ]
1618
+ : [])
1619
+ }
1620
+ },
1621
+ mounted () {
1622
+ const $xeModal = this
1623
+ const slots = $xeModal.$scopedSlots
1624
+ const props = $xeModal
1625
+
1626
+ if (props.type === 'modal' && props.showFooter && !(props.showConfirmButton || props.showCancelButton || slots.footer)) {
1627
+ warnLog('vxe.modal.footPropErr')
1628
+ }
1629
+ $xeModal.$nextTick(() => {
1630
+ if (props.storage && !props.id) {
1631
+ errLog('vxe.error.reqProp', ['[modal] id'])
1632
+ }
1633
+ if (props.value) {
1634
+ $xeModal.openModal()
1635
+ }
1636
+ $xeModal.recalculate()
1637
+ })
1638
+ if (props.escClosable) {
1639
+ globalEvents.on($xeModal, 'keydown', $xeModal.handleGlobalKeydownEvent)
1640
+ }
1641
+ },
1642
+ beforeDestroy () {
1643
+ const $xeModal = this
1644
+
1645
+ const panelElem = $xeModal.$refs.refElem as HTMLDivElement
1646
+ if (panelElem && panelElem.parentNode) {
1647
+ panelElem.parentNode.removeChild(panelElem)
1648
+ }
1649
+ globalEvents.off($xeModal, 'keydown')
1650
+ $xeModal.removeMsgQueue()
1651
+ $xeModal.removeActiveQueue()
1652
+ $xeModal.removeBodyLockScroll()
1653
+ },
1654
+ render (this: any, h) {
1655
+ return this.renderVN(h)
1656
+ }
1657
+ }) /* define-vxe-component end */