vxe-pc-ui 3.14.5 → 3.14.6

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 (474) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +134 -134
  3. package/es/tree/src/tree.js +40 -5
  4. package/es/tree-select/src/tree-select.js +2 -0
  5. package/es/ui/index.js +1 -1
  6. package/es/ui/src/log.js +1 -1
  7. package/lib/index.umd.js +8406 -8476
  8. package/lib/index.umd.min.js +1 -1
  9. package/lib/tree/src/tree.js +40 -5
  10. package/lib/tree/src/tree.min.js +1 -1
  11. package/lib/tree-select/src/tree-select.js +2 -0
  12. package/lib/tree-select/src/tree-select.min.js +1 -1
  13. package/lib/ui/index.js +1 -1
  14. package/lib/ui/index.min.js +1 -1
  15. package/lib/ui/src/log.js +1 -1
  16. package/lib/ui/src/log.min.js +1 -1
  17. package/package.json +89 -89
  18. package/packages/alert/index.ts +16 -16
  19. package/packages/alert/src/alert.ts +106 -106
  20. package/packages/anchor/index.ts +16 -16
  21. package/packages/anchor/src/anchor-link.ts +158 -158
  22. package/packages/anchor/src/anchor.ts +267 -267
  23. package/packages/anchor/src/util.ts +23 -23
  24. package/packages/anchor-link/index.ts +16 -16
  25. package/packages/avatar/index.ts +16 -16
  26. package/packages/avatar/src/avatar.ts +141 -141
  27. package/packages/backtop/index.ts +16 -16
  28. package/packages/backtop/src/backtop.ts +330 -330
  29. package/packages/badge/index.ts +16 -16
  30. package/packages/badge/src/badge.ts +87 -87
  31. package/packages/breadcrumb/index.ts +16 -16
  32. package/packages/breadcrumb/src/breadcrumb-item.ts +118 -118
  33. package/packages/breadcrumb/src/breadcrumb.ts +89 -89
  34. package/packages/breadcrumb-item/index.ts +16 -16
  35. package/packages/button/index.ts +16 -16
  36. package/packages/button/src/button-group.ts +113 -113
  37. package/packages/button/src/button.ts +956 -956
  38. package/packages/button-group/index.ts +16 -16
  39. package/packages/calendar/index.ts +16 -16
  40. package/packages/calendar/src/calendar.ts +1527 -1527
  41. package/packages/card/index.ts +16 -16
  42. package/packages/card/src/card.ts +162 -162
  43. package/packages/carousel/index.ts +16 -16
  44. package/packages/carousel/src/carousel-item.ts +117 -117
  45. package/packages/carousel/src/carousel.ts +460 -460
  46. package/packages/carousel/src/util.ts +21 -21
  47. package/packages/carousel-item/index.ts +16 -16
  48. package/packages/cascader/index.ts +16 -16
  49. package/packages/cascader/src/cascader.ts +943 -943
  50. package/packages/checkbox/index.ts +16 -16
  51. package/packages/checkbox/src/button.ts +185 -185
  52. package/packages/checkbox/src/checkbox.ts +189 -189
  53. package/packages/checkbox/src/group.ts +259 -259
  54. package/packages/checkbox-button/index.ts +16 -16
  55. package/packages/checkbox-group/index.ts +16 -16
  56. package/packages/col/index.ts +16 -16
  57. package/packages/collapse/index.ts +16 -16
  58. package/packages/collapse/src/collapse-pane.ts +136 -136
  59. package/packages/collapse/src/collapse.ts +259 -259
  60. package/packages/collapse/src/util.ts +21 -21
  61. package/packages/collapse-pane/index.ts +16 -16
  62. package/packages/color-picker/index.ts +16 -16
  63. package/packages/color-picker/src/color-picker.ts +1286 -1286
  64. package/packages/color-picker/src/util.ts +198 -198
  65. package/packages/components.ts +307 -307
  66. package/packages/context-menu/index.ts +54 -54
  67. package/packages/context-menu/src/context-menu.ts +727 -727
  68. package/packages/countdown/index.ts +16 -16
  69. package/packages/countdown/src/countdown.ts +276 -276
  70. package/packages/date-panel/index.ts +16 -16
  71. package/packages/date-panel/src/date-panel.ts +2024 -2024
  72. package/packages/date-panel/src/util.ts +244 -244
  73. package/packages/date-picker/index.ts +17 -17
  74. package/packages/date-picker/src/date-picker.ts +1249 -1249
  75. package/packages/date-range-picker/index.ts +16 -16
  76. package/packages/date-range-picker/src/date-range-picker.ts +1480 -1480
  77. package/packages/drawer/index.ts +87 -87
  78. package/packages/drawer/src/drawer.ts +767 -767
  79. package/packages/dynamics/index.ts +127 -127
  80. package/packages/empty/index.ts +16 -16
  81. package/packages/empty/src/empty.ts +80 -80
  82. package/packages/form/index.ts +16 -16
  83. package/packages/form/render/index.ts +617 -617
  84. package/packages/form/src/form-config-item.ts +84 -84
  85. package/packages/form/src/form-group.ts +125 -125
  86. package/packages/form/src/form-item.ts +217 -217
  87. package/packages/form/src/form.ts +1032 -1032
  88. package/packages/form/src/itemInfo.ts +80 -80
  89. package/packages/form/src/render.ts +398 -398
  90. package/packages/form/src/util.ts +92 -92
  91. package/packages/form-gather/index.ts +18 -18
  92. package/packages/form-group/index.ts +16 -16
  93. package/packages/form-item/index.ts +16 -16
  94. package/packages/icon/index.ts +16 -16
  95. package/packages/icon/src/icon.ts +75 -75
  96. package/packages/icon-picker/index.ts +16 -16
  97. package/packages/icon-picker/src/icon-picker.ts +753 -753
  98. package/packages/image/index.ts +16 -16
  99. package/packages/image/src/group.ts +162 -162
  100. package/packages/image/src/image.ts +303 -303
  101. package/packages/image/src/preview.ts +737 -737
  102. package/packages/image/src/util.ts +62 -62
  103. package/packages/image-group/index.ts +16 -16
  104. package/packages/image-preview/index.ts +19 -19
  105. package/packages/index.ts +8 -8
  106. package/packages/input/index.ts +16 -16
  107. package/packages/input/src/input.ts +3187 -3187
  108. package/packages/language/ar-EG.ts +840 -840
  109. package/packages/language/de-DE.ts +840 -840
  110. package/packages/language/en-US.ts +840 -840
  111. package/packages/language/es-ES.ts +840 -840
  112. package/packages/language/fr-FR.ts +840 -840
  113. package/packages/language/hu-HU.ts +840 -840
  114. package/packages/language/hy-AM.ts +840 -840
  115. package/packages/language/id-ID.ts +840 -840
  116. package/packages/language/it-IT.ts +840 -840
  117. package/packages/language/ja-JP.ts +840 -840
  118. package/packages/language/ko-KR.ts +840 -840
  119. package/packages/language/ms-MY.ts +840 -840
  120. package/packages/language/nb-NO.ts +840 -840
  121. package/packages/language/pt-BR.ts +840 -840
  122. package/packages/language/ru-RU.ts +840 -840
  123. package/packages/language/th-TH.ts +840 -840
  124. package/packages/language/ug-CN.ts +840 -840
  125. package/packages/language/uk-UA.ts +840 -840
  126. package/packages/language/uz-UZ.ts +840 -840
  127. package/packages/language/vi-VN.ts +840 -840
  128. package/packages/language/zh-CHT.ts +840 -840
  129. package/packages/language/zh-CN.ts +840 -840
  130. package/packages/language/zh-HK.ts +3 -3
  131. package/packages/language/zh-MO.ts +3 -3
  132. package/packages/language/zh-TC.ts +3 -3
  133. package/packages/language/zh-TW.ts +3 -3
  134. package/packages/layout-aside/index.ts +16 -16
  135. package/packages/layout-aside/src/layout-aside.ts +115 -115
  136. package/packages/layout-body/index.ts +16 -16
  137. package/packages/layout-body/src/layout-body.ts +137 -137
  138. package/packages/layout-container/index.ts +16 -16
  139. package/packages/layout-container/src/layout-container.ts +65 -65
  140. package/packages/layout-footer/index.ts +16 -16
  141. package/packages/layout-footer/src/layout-footer.ts +53 -53
  142. package/packages/layout-header/index.ts +16 -16
  143. package/packages/layout-header/src/layout-header.ts +49 -49
  144. package/packages/link/index.ts +16 -16
  145. package/packages/link/src/link.ts +153 -153
  146. package/packages/list/index.ts +16 -16
  147. package/packages/list/src/list.ts +492 -492
  148. package/packages/loading/index.ts +34 -34
  149. package/packages/loading/src/loading.ts +162 -162
  150. package/packages/mention/index.ts +16 -16
  151. package/packages/mention/src/mention.ts +54 -54
  152. package/packages/menu/index.ts +16 -16
  153. package/packages/menu/src/menu.ts +632 -632
  154. package/packages/modal/index.ts +150 -150
  155. package/packages/modal/src/modal.ts +1668 -1668
  156. package/packages/notice-bar/index.ts +16 -16
  157. package/packages/notice-bar/src/notice-bar.ts +182 -182
  158. package/packages/number-input/index.ts +16 -16
  159. package/packages/number-input/src/number-input.ts +1255 -1255
  160. package/packages/number-input/src/util.ts +12 -12
  161. package/packages/optgroup/index.ts +16 -16
  162. package/packages/option/index.ts +16 -16
  163. package/packages/pager/index.ts +16 -16
  164. package/packages/pager/src/pager.ts +913 -913
  165. package/packages/password-input/index.ts +16 -16
  166. package/packages/password-input/src/password-input.ts +466 -466
  167. package/packages/print/index.ts +18 -18
  168. package/packages/print/src/page-break.ts +78 -78
  169. package/packages/print/src/print.ts +266 -266
  170. package/packages/print/src/util.ts +284 -284
  171. package/packages/print-page-break/index.ts +14 -14
  172. package/packages/pulldown/index.ts +16 -16
  173. package/packages/pulldown/src/pulldown.ts +533 -533
  174. package/packages/radio/index.ts +16 -16
  175. package/packages/radio/src/button.ts +221 -221
  176. package/packages/radio/src/group.ts +252 -252
  177. package/packages/radio/src/radio.ts +228 -228
  178. package/packages/radio-button/index.ts +16 -16
  179. package/packages/radio-group/index.ts +16 -16
  180. package/packages/rate/index.ts +16 -16
  181. package/packages/rate/src/rate.ts +199 -199
  182. package/packages/result/index.ts +16 -16
  183. package/packages/result/src/result.ts +93 -93
  184. package/packages/row/index.ts +16 -16
  185. package/packages/row/src/col.ts +130 -130
  186. package/packages/row/src/row.ts +106 -106
  187. package/packages/segmented/index.ts +16 -16
  188. package/packages/segmented/src/segmented.ts +281 -281
  189. package/packages/select/index.ts +16 -16
  190. package/packages/select/src/optgroup.ts +107 -107
  191. package/packages/select/src/option-info.ts +20 -20
  192. package/packages/select/src/option.ts +103 -103
  193. package/packages/select/src/select.ts +2001 -2001
  194. package/packages/select/src/util.ts +47 -47
  195. package/packages/slider/index.ts +16 -16
  196. package/packages/slider/src/slider.ts +332 -332
  197. package/packages/split/index.ts +16 -16
  198. package/packages/split-pane/index.ts +17 -17
  199. package/packages/splitter/index.ts +16 -16
  200. package/packages/splitter/src/splitter-panel.ts +171 -171
  201. package/packages/splitter/src/splitter.ts +1032 -1032
  202. package/packages/splitter/src/util.ts +21 -21
  203. package/packages/splitter-panel/index.ts +16 -16
  204. package/packages/steps/index.ts +16 -16
  205. package/packages/steps/src/steps.ts +57 -57
  206. package/packages/switch/index.ts +16 -16
  207. package/packages/switch/src/switch.ts +279 -279
  208. package/packages/tab-pane/index.ts +16 -16
  209. package/packages/table-select/index.ts +16 -16
  210. package/packages/table-select/src/table-select.ts +904 -904
  211. package/packages/tabs/index.ts +16 -16
  212. package/packages/tabs/src/tab-pane.ts +137 -137
  213. package/packages/tabs/src/tabs.ts +1014 -1014
  214. package/packages/tabs/src/util.ts +21 -21
  215. package/packages/tag/index.ts +16 -16
  216. package/packages/tag/src/tag.ts +195 -195
  217. package/packages/text/index.ts +16 -16
  218. package/packages/text/src/text.ts +267 -267
  219. package/packages/text-ellipsis/index.ts +16 -16
  220. package/packages/text-ellipsis/src/text-ellipsis.ts +291 -291
  221. package/packages/textarea/index.ts +16 -16
  222. package/packages/textarea/src/textarea.ts +436 -436
  223. package/packages/timeline/index.ts +16 -16
  224. package/packages/timeline/src/timeline-item.ts +41 -41
  225. package/packages/timeline/src/timeline.ts +54 -54
  226. package/packages/timeline-item/index.ts +16 -16
  227. package/packages/tip/index.ts +19 -19
  228. package/packages/tip/src/tip.ts +112 -112
  229. package/packages/tooltip/index.ts +16 -16
  230. package/packages/tooltip/src/tooltip.ts +669 -669
  231. package/packages/tour/index.ts +16 -16
  232. package/packages/tour/src/tour.ts +54 -54
  233. package/packages/tree/index.ts +16 -16
  234. package/packages/tree/src/store.ts +15 -15
  235. package/packages/tree/src/tree.ts +3122 -3080
  236. package/packages/tree/src/util.ts +44 -44
  237. package/packages/tree-select/index.ts +16 -16
  238. package/packages/tree-select/src/tree-select.ts +1118 -1116
  239. package/packages/ui/index.ts +697 -697
  240. package/packages/ui/src/anime.ts +52 -52
  241. package/packages/ui/src/comp.ts +3 -3
  242. package/packages/ui/src/dom.ts +279 -279
  243. package/packages/ui/src/log.ts +6 -6
  244. package/packages/ui/src/utils.ts +49 -49
  245. package/packages/ui/src/vn.ts +60 -60
  246. package/packages/upload/index.ts +20 -20
  247. package/packages/upload/src/upload.ts +2129 -2129
  248. package/packages/upload/src/util.ts +109 -109
  249. package/packages/vxe-u-i/index.ts +4 -4
  250. package/packages/watermark/index.ts +31 -31
  251. package/packages/watermark/src/util.ts +176 -176
  252. package/packages/watermark/src/watermark.ts +166 -166
  253. package/styles/all.scss +90 -90
  254. package/styles/base.scss +16 -16
  255. package/styles/components/alert.scss +101 -101
  256. package/styles/components/anchor.scss +44 -44
  257. package/styles/components/avatar.scss +115 -115
  258. package/styles/components/backtop.scss +82 -82
  259. package/styles/components/badge.scss +45 -45
  260. package/styles/components/breadcrumb.scss +29 -29
  261. package/styles/components/button-group.scss +30 -30
  262. package/styles/components/button.scss +415 -415
  263. package/styles/components/calendar.scss +471 -471
  264. package/styles/components/card.scss +121 -121
  265. package/styles/components/carousel.scss +184 -184
  266. package/styles/components/cascader.scss +140 -140
  267. package/styles/components/checkbox-button.scss +57 -57
  268. package/styles/components/checkbox.scss +81 -81
  269. package/styles/components/collapse.scss +56 -56
  270. package/styles/components/color-picker.scss +409 -409
  271. package/styles/components/context-menu.scss +102 -102
  272. package/styles/components/countdown.scss +35 -35
  273. package/styles/components/date-panel.scss +505 -505
  274. package/styles/components/date-picker.scss +247 -247
  275. package/styles/components/date-range-picker.scss +252 -252
  276. package/styles/components/drawer.scss +298 -298
  277. package/styles/components/empty.scss +79 -79
  278. package/styles/components/form.scss +668 -668
  279. package/styles/components/icon-picker.scss +211 -211
  280. package/styles/components/icon.scss +1048 -1048
  281. package/styles/components/image-group.scss +2 -2
  282. package/styles/components/image-preview.scss +215 -215
  283. package/styles/components/image.scss +16 -16
  284. package/styles/components/input.scss +846 -846
  285. package/styles/components/layout-aside.scss +22 -22
  286. package/styles/components/layout-body.scss +14 -14
  287. package/styles/components/layout-container.scss +13 -13
  288. package/styles/components/layout-footer.scss +14 -14
  289. package/styles/components/layout-header.scss +11 -11
  290. package/styles/components/link.scss +115 -115
  291. package/styles/components/list.scss +40 -40
  292. package/styles/components/loading.scss +137 -137
  293. package/styles/components/menu.scss +150 -150
  294. package/styles/components/modal.scss +480 -480
  295. package/styles/components/notice-bar.scss +91 -91
  296. package/styles/components/number-input.scss +283 -283
  297. package/styles/components/old-icon.scss +4 -4
  298. package/styles/components/pager.scss +282 -282
  299. package/styles/components/password-input.scss +374 -374
  300. package/styles/components/print.scss +3 -3
  301. package/styles/components/pulldown.scss +75 -75
  302. package/styles/components/radio-button.scss +57 -57
  303. package/styles/components/radio.scss +79 -79
  304. package/styles/components/rate.scss +76 -76
  305. package/styles/components/result.scss +91 -91
  306. package/styles/components/row.scss +69 -69
  307. package/styles/components/segmented.scss +215 -215
  308. package/styles/components/select.scss +244 -244
  309. package/styles/components/slider.scss +139 -139
  310. package/styles/components/split.scss +1 -1
  311. package/styles/components/splitter.scss +318 -318
  312. package/styles/components/switch.scss +128 -128
  313. package/styles/components/table-select.scss +105 -105
  314. package/styles/components/tabs.scss +745 -745
  315. package/styles/components/tag.scss +184 -184
  316. package/styles/components/text-ellipsis.scss +130 -130
  317. package/styles/components/text.scss +123 -123
  318. package/styles/components/textarea.scss +106 -106
  319. package/styles/components/tip.scss +97 -97
  320. package/styles/components/tooltip.scss +141 -141
  321. package/styles/components/tree-select.scss +166 -166
  322. package/styles/components/tree.scss +294 -294
  323. package/styles/components/upload.scss +497 -497
  324. package/styles/components/watermark.scss +26 -26
  325. package/styles/helpers/baseMixin.scss +95 -95
  326. package/styles/helpers/baseVar.scss +3 -3
  327. package/styles/helpers/placement.scss +38 -38
  328. package/styles/theme/base.scss +214 -214
  329. package/styles/theme/dark.scss +119 -119
  330. package/styles/theme/light.scss +118 -118
  331. package/styles/variable.scss +111 -111
  332. package/types/all.d.ts +328 -328
  333. package/types/components/alert.d.ts +80 -80
  334. package/types/components/anchor-link.d.ts +84 -84
  335. package/types/components/anchor.d.ts +84 -84
  336. package/types/components/avatar.d.ts +81 -81
  337. package/types/components/backtop.d.ts +115 -115
  338. package/types/components/badge.d.ts +69 -69
  339. package/types/components/breadcrumb-item.d.ts +73 -73
  340. package/types/components/breadcrumb.d.ts +80 -80
  341. package/types/components/button-group.d.ts +113 -113
  342. package/types/components/button.d.ts +314 -314
  343. package/types/components/calendar.d.ts +254 -254
  344. package/types/components/card.d.ts +86 -86
  345. package/types/components/carousel-item.d.ts +68 -68
  346. package/types/components/carousel.d.ts +126 -126
  347. package/types/components/cascader.d.ts +250 -250
  348. package/types/components/checkbox-button.d.ts +93 -93
  349. package/types/components/checkbox-group.d.ts +135 -135
  350. package/types/components/checkbox.d.ts +115 -115
  351. package/types/components/col.d.ts +73 -73
  352. package/types/components/colgroup.d.ts +131 -131
  353. package/types/components/collapse-pane.d.ts +82 -82
  354. package/types/components/collapse.d.ts +115 -115
  355. package/types/components/color-picker.d.ts +164 -164
  356. package/types/components/column.d.ts +852 -852
  357. package/types/components/context-menu.d.ts +301 -301
  358. package/types/components/countdown.d.ts +99 -99
  359. package/types/components/date-panel.d.ts +269 -269
  360. package/types/components/date-picker.d.ts +322 -322
  361. package/types/components/date-range-picker.d.ts +336 -336
  362. package/types/components/drawer.d.ts +295 -295
  363. package/types/components/empty.d.ts +71 -71
  364. package/types/components/flow-design.d.ts +78 -78
  365. package/types/components/flow-view.d.ts +78 -78
  366. package/types/components/form-design.d.ts +364 -364
  367. package/types/components/form-gather.d.ts +72 -72
  368. package/types/components/form-group.d.ts +63 -63
  369. package/types/components/form-item.d.ts +405 -405
  370. package/types/components/form-view.d.ts +175 -175
  371. package/types/components/form.d.ts +463 -463
  372. package/types/components/gantt-module/gantt-view.d.ts +171 -171
  373. package/types/components/gantt-module/index.d.ts +1 -1
  374. package/types/components/gantt-plugins/extend-gantt-chart.d.ts +132 -132
  375. package/types/components/gantt-plugins/index.d.ts +1 -1
  376. package/types/components/gantt.d.ts +1201 -1201
  377. package/types/components/grid.d.ts +1038 -1038
  378. package/types/components/icon-picker.d.ts +185 -185
  379. package/types/components/icon.d.ts +80 -80
  380. package/types/components/image-group.d.ts +120 -120
  381. package/types/components/image-preview.d.ts +159 -159
  382. package/types/components/image.d.ts +166 -166
  383. package/types/components/input.d.ts +425 -425
  384. package/types/components/layout-aside.d.ts +73 -73
  385. package/types/components/layout-body.d.ts +84 -84
  386. package/types/components/layout-container.d.ts +66 -66
  387. package/types/components/layout-footer.d.ts +66 -66
  388. package/types/components/layout-header.d.ts +64 -64
  389. package/types/components/link.d.ts +104 -104
  390. package/types/components/list-design.d.ts +177 -177
  391. package/types/components/list-view.d.ts +190 -190
  392. package/types/components/list.d.ts +196 -196
  393. package/types/components/loading.d.ts +96 -96
  394. package/types/components/mention.d.ts +70 -70
  395. package/types/components/menu.d.ts +203 -203
  396. package/types/components/modal.d.ts +540 -540
  397. package/types/components/notice-bar.d.ts +95 -95
  398. package/types/components/number-input.d.ts +300 -300
  399. package/types/components/optgroup.d.ts +81 -81
  400. package/types/components/option.d.ts +95 -95
  401. package/types/components/pager.d.ts +322 -322
  402. package/types/components/password-input.d.ts +129 -129
  403. package/types/components/print-page-break.d.ts +62 -62
  404. package/types/components/print.d.ts +199 -199
  405. package/types/components/pulldown.d.ts +226 -226
  406. package/types/components/radio-button.d.ts +104 -104
  407. package/types/components/radio-group.d.ts +136 -136
  408. package/types/components/radio.d.ts +121 -121
  409. package/types/components/rate.d.ts +75 -75
  410. package/types/components/result.d.ts +77 -77
  411. package/types/components/row.d.ts +72 -72
  412. package/types/components/segmented.d.ts +117 -117
  413. package/types/components/select.d.ts +519 -519
  414. package/types/components/slider.d.ts +117 -117
  415. package/types/components/split-pane.d.ts +135 -135
  416. package/types/components/split.d.ts +318 -318
  417. package/types/components/splitter-panel.d.ts +98 -98
  418. package/types/components/splitter.d.ts +283 -283
  419. package/types/components/steps.d.ts +61 -61
  420. package/types/components/switch.d.ts +124 -124
  421. package/types/components/tab-pane.d.ts +107 -107
  422. package/types/components/table-module/custom.d.ts +115 -115
  423. package/types/components/table-module/edit.d.ts +245 -245
  424. package/types/components/table-module/export.d.ts +96 -96
  425. package/types/components/table-module/filter.d.ts +140 -140
  426. package/types/components/table-module/index.d.ts +7 -7
  427. package/types/components/table-module/keyboard.d.ts +26 -26
  428. package/types/components/table-module/menu.d.ts +26 -26
  429. package/types/components/table-module/validator.d.ts +53 -53
  430. package/types/components/table-plugins/extend-cell-area.d.ts +768 -768
  431. package/types/components/table-plugins/extend-pivot-table.d.ts +68 -68
  432. package/types/components/table-plugins/filters-combination.d.ts +15 -15
  433. package/types/components/table-plugins/filters-complex-input.d.ts +9 -9
  434. package/types/components/table-plugins/index.d.ts +4 -4
  435. package/types/components/table-select.d.ts +216 -216
  436. package/types/components/table.d.ts +7496 -7496
  437. package/types/components/tabs.d.ts +324 -324
  438. package/types/components/tag.d.ts +107 -107
  439. package/types/components/text-ellipsis.d.ts +105 -105
  440. package/types/components/text.d.ts +115 -115
  441. package/types/components/textarea.d.ts +237 -237
  442. package/types/components/timeline-item.d.ts +68 -68
  443. package/types/components/timeline.d.ts +70 -70
  444. package/types/components/tip.d.ts +76 -76
  445. package/types/components/toolbar.d.ts +329 -329
  446. package/types/components/tooltip.d.ts +169 -169
  447. package/types/components/tour.d.ts +70 -70
  448. package/types/components/tree-select.d.ts +299 -299
  449. package/types/components/tree.d.ts +836 -826
  450. package/types/components/upload.d.ts +432 -432
  451. package/types/components/watermark.d.ts +113 -113
  452. package/types/index.d.ts +4 -4
  453. package/types/ui/commands.d.ts +57 -57
  454. package/types/ui/formats.d.ts +62 -62
  455. package/types/ui/global-config.d.ts +254 -254
  456. package/types/ui/global-icon.d.ts +292 -292
  457. package/types/ui/hooks.d.ts +11 -11
  458. package/types/ui/index.d.ts +95 -95
  459. package/types/ui/interceptor.d.ts +54 -54
  460. package/types/ui/menus.d.ts +77 -77
  461. package/types/ui/renderer.d.ts +1042 -1042
  462. package/types/ui/validators.d.ts +38 -38
  463. /package/es/icon/{iconfont.1778223321885.ttf → iconfont.1778317204332.ttf} +0 -0
  464. /package/es/icon/{iconfont.1778223321885.woff → iconfont.1778317204332.woff} +0 -0
  465. /package/es/icon/{iconfont.1778223321885.woff2 → iconfont.1778317204332.woff2} +0 -0
  466. /package/es/{iconfont.1778223321885.ttf → iconfont.1778317204332.ttf} +0 -0
  467. /package/es/{iconfont.1778223321885.woff → iconfont.1778317204332.woff} +0 -0
  468. /package/es/{iconfont.1778223321885.woff2 → iconfont.1778317204332.woff2} +0 -0
  469. /package/lib/icon/style/{iconfont.1778223321885.ttf → iconfont.1778317204332.ttf} +0 -0
  470. /package/lib/icon/style/{iconfont.1778223321885.woff → iconfont.1778317204332.woff} +0 -0
  471. /package/lib/icon/style/{iconfont.1778223321885.woff2 → iconfont.1778317204332.woff2} +0 -0
  472. /package/lib/{iconfont.1778223321885.ttf → iconfont.1778317204332.ttf} +0 -0
  473. /package/lib/{iconfont.1778223321885.woff → iconfont.1778317204332.woff} +0 -0
  474. /package/lib/{iconfont.1778223321885.woff2 → iconfont.1778317204332.woff2} +0 -0
@@ -1,737 +1,737 @@
1
- import { CreateElement, PropType, VNode } from 'vue'
2
- import { defineVxeComponent } from '../../ui/src/comp'
3
- import XEUtils from 'xe-utils'
4
- import { VxeUI, getConfig, createEvent, getIcon, globalEvents, GLOBAL_EVENT_KEYS, getI18n, renderEmptyElement } from '../../ui'
5
- import { getDomNode, addClass, removeClass, hasControlKey } from '../../ui/src/dom'
6
-
7
- import type { ImagePreviewReactData, VxeGlobalIcon, VxeImagePreviewEmits, VxeComponentSizeType, VxeImagePreviewPropTypes, ValueOf, VxeImagePreviewDefines } from '../../../types'
8
-
9
- export default /* define-vxe-component start */ defineVxeComponent({
10
- name: 'VxeImagePreview',
11
- props: {
12
- value: Number as PropType<VxeImagePreviewPropTypes.ModelValue>,
13
- urlList: Array as PropType<VxeImagePreviewPropTypes.UrlList>,
14
- urlField: {
15
- type: String as PropType<VxeImagePreviewPropTypes.UrlField>,
16
- default: () => getConfig().imagePreview.urlField
17
- },
18
- maskClosable: {
19
- type: Boolean as PropType<VxeImagePreviewPropTypes.MaskClosable>,
20
- default: () => getConfig().imagePreview.maskClosable
21
- },
22
- marginSize: {
23
- type: String as PropType<VxeImagePreviewPropTypes.MarginSize>,
24
- default: () => getConfig().imagePreview.marginSize
25
- },
26
- showPrintButton: {
27
- type: Boolean as PropType<VxeImagePreviewPropTypes.ShowPrintButton>,
28
- default: () => getConfig().imagePreview.showPrintButton
29
- },
30
- showDownloadButton: {
31
- type: Boolean as PropType<VxeImagePreviewPropTypes.ShowDownloadButton>,
32
- default: () => getConfig().imagePreview.showDownloadButton
33
- },
34
- zIndex: Number as PropType<VxeImagePreviewPropTypes.ZIndex>,
35
- toolbarConfig: Object as PropType<VxeImagePreviewPropTypes.ToolbarConfig>,
36
- beforeDownloadMethod: Function as PropType<VxeImagePreviewPropTypes.BeforeDownloadMethod>,
37
- downloadMethod: Function as PropType<VxeImagePreviewPropTypes.DownloadMethod>
38
- },
39
- provide () {
40
- const $xeImagePreview = this
41
- return {
42
- $xeImagePreview
43
- }
44
- },
45
- data () {
46
- const xID = XEUtils.uniqueId()
47
- const reactData: ImagePreviewReactData = {
48
- activeIndex: 0,
49
- offsetPct11: false,
50
- offsetScale: 0,
51
- offsetRotate: 0,
52
- offsetLeft: 0,
53
- offsetTop: 0
54
- }
55
- return {
56
- xID,
57
- reactData
58
- }
59
- },
60
- computed: {
61
- ...({} as {
62
- computeSize(): VxeComponentSizeType
63
- }),
64
- computeUrlProp () {
65
- const $xeImagePreview = this
66
- const props = $xeImagePreview
67
-
68
- return props.urlField || 'url'
69
- },
70
- computeMarginSize () {
71
- const $xeImagePreview = this
72
- const props = $xeImagePreview
73
-
74
- return XEUtils.toNumber(props.marginSize || 0) || 16
75
- },
76
- computeToolbarOpts () {
77
- const $xeImagePreview = this
78
- const props = $xeImagePreview
79
-
80
- return Object.assign({}, getConfig().imagePreview.toolbarConfig, props.toolbarConfig)
81
- },
82
- computeRotateText () {
83
- const $xeImagePreview = this
84
- const reactData = $xeImagePreview.reactData as ImagePreviewReactData
85
-
86
- const { offsetRotate } = reactData
87
- if (offsetRotate) {
88
- return `${offsetRotate}°`
89
- }
90
- return '0°'
91
- },
92
- computeScaleText () {
93
- const $xeImagePreview = this
94
- const reactData = $xeImagePreview.reactData as ImagePreviewReactData
95
-
96
- const { offsetScale } = reactData
97
- if (offsetScale) {
98
- return `${XEUtils.ceil((1 + offsetScale) * 100)}%`
99
- }
100
- return '100%'
101
- },
102
- computeImgList () {
103
- const $xeImagePreview = this
104
- const props = $xeImagePreview
105
-
106
- const { urlList } = props
107
- const urlProp = $xeImagePreview.computeUrlProp as string
108
- if (urlList && urlList.length) {
109
- return urlList.map(item => {
110
- if (XEUtils.isString(item)) {
111
- return item
112
- }
113
- if (item[urlProp]) {
114
- return item[urlProp]
115
- }
116
- return ''
117
- })
118
- }
119
- return []
120
- },
121
- computeImgTransform () {
122
- const $xeImagePreview = this
123
- const reactData = $xeImagePreview.reactData
124
-
125
- let { offsetScale, offsetRotate, offsetLeft, offsetTop } = reactData
126
- const stys: string[] = []
127
- let targetScale = 1
128
- if (offsetScale) {
129
- targetScale = 1 + offsetScale
130
- stys.push(`scale(${targetScale})`)
131
- }
132
- if (offsetRotate) {
133
- stys.push(`rotate(${offsetRotate}deg)`)
134
- }
135
- if (offsetLeft || offsetTop) {
136
- // 缩放与位移
137
- offsetLeft /= targetScale
138
- offsetTop /= targetScale
139
-
140
- let targetOffsetLeft = offsetLeft
141
- let targetOffsetTop = offsetTop
142
- if (offsetRotate) {
143
- // 转向与位移
144
- switch (offsetRotate % 360) {
145
- case 90:
146
- case -270:
147
- targetOffsetLeft = offsetTop
148
- targetOffsetTop = -offsetLeft
149
- break
150
- case 180:
151
- case -180:
152
- targetOffsetLeft = -offsetLeft
153
- targetOffsetTop = -offsetTop
154
- break
155
- case 270:
156
- case -90:
157
- targetOffsetLeft = -offsetTop
158
- targetOffsetTop = offsetLeft
159
- break
160
- }
161
- }
162
- stys.push(`translate(${targetOffsetLeft}px, ${targetOffsetTop}px)`)
163
- }
164
- return stys.length ? stys.join(' ') : ''
165
- }
166
- },
167
- methods: {
168
- //
169
- // Method
170
- //
171
- dispatchEvent (type: ValueOf<VxeImagePreviewEmits>, params: Record<string, any>, evnt: Event | null) {
172
- const $xeImagePreview = this
173
- $xeImagePreview.$emit(type, createEvent(evnt, { $imagePreview: $xeImagePreview }, params))
174
- },
175
- emitModel (value: VxeImagePreviewPropTypes.ModelValue) {
176
- const $xeImagePreview = this
177
-
178
- const { _events } = $xeImagePreview as any
179
- $xeImagePreview.$emit('input', value)
180
- if (_events && _events.modelValue) {
181
- $xeImagePreview.$emit('modelValue', value)
182
- } else {
183
- $xeImagePreview.$emit('model-value', value)
184
- }
185
- },
186
- handleCloseEvent (evnt: MouseEvent) {
187
- const $xeImagePreview = this
188
-
189
- $xeImagePreview.dispatchEvent('close', {}, evnt)
190
- },
191
- resetStyle () {
192
- const $xeImagePreview = this
193
- const reactData = $xeImagePreview.reactData
194
-
195
- const elem = $xeImagePreview.$refs.refElem as HTMLDivElement
196
- removeClass(elem, 'is--move')
197
- Object.assign(reactData, {
198
- offsetPct11: false,
199
- offsetScale: 0,
200
- offsetRotate: 0,
201
- offsetLeft: 0,
202
- offsetTop: 0
203
- })
204
- },
205
- getOffsetZoomStep () {
206
- const $xeImagePreview = this
207
- const reactData = $xeImagePreview.reactData
208
-
209
- const { offsetScale } = reactData
210
- let stepNum = 0.02
211
- if (offsetScale >= -0.6) {
212
- stepNum = 0.04
213
- if (offsetScale >= -0.4) {
214
- stepNum = 0.07
215
- if (offsetScale >= 0) {
216
- stepNum = 0.1
217
- if (offsetScale >= 3) {
218
- stepNum = 0.25
219
- if (offsetScale >= 8) {
220
- stepNum = 0.4
221
- if (offsetScale >= 16) {
222
- stepNum = 0.6
223
- if (offsetScale >= 24) {
224
- stepNum = 0.9
225
- if (offsetScale >= 32) {
226
- stepNum = 1.3
227
- if (offsetScale >= 39) {
228
- stepNum = 1.9
229
- if (offsetScale >= 45) {
230
- stepNum = 2.5
231
- }
232
- }
233
- }
234
- }
235
- }
236
- }
237
- }
238
- }
239
- }
240
- }
241
- return stepNum
242
- },
243
- handleZoom (isAdd: boolean) {
244
- const $xeImagePreview = this
245
- const reactData = $xeImagePreview.reactData
246
-
247
- const { offsetScale } = reactData
248
- const stepNum = $xeImagePreview.getOffsetZoomStep()
249
- if (isAdd) {
250
- reactData.offsetScale = Number(Math.min(49, offsetScale + stepNum).toFixed(2))
251
- } else {
252
- reactData.offsetScale = Number(Math.max(-0.9, offsetScale - stepNum).toFixed(2))
253
- }
254
- },
255
- handleChangeEvent (evnt: Event, isNext: boolean) {
256
- const $xeImagePreview = this
257
- const reactData = $xeImagePreview.reactData
258
-
259
- let activeIndex = reactData.activeIndex || 0
260
- const imgList = $xeImagePreview.computeImgList
261
- if (isNext) {
262
- if (activeIndex >= imgList.length - 1) {
263
- activeIndex = 0
264
- } else {
265
- activeIndex++
266
- }
267
- } else {
268
- if (activeIndex <= 0) {
269
- activeIndex = imgList.length - 1
270
- } else {
271
- activeIndex--
272
- }
273
- }
274
- const imgUrl = imgList[activeIndex || 0]
275
- reactData.activeIndex = activeIndex
276
- $xeImagePreview.resetStyle()
277
- $xeImagePreview.emitModel(activeIndex)
278
- $xeImagePreview.dispatchEvent('change', { url: imgUrl, activeIndex }, evnt)
279
- },
280
- handleRotateImgEvent (evnt: Event, isRight: boolean) {
281
- const $xeImagePreview = this
282
- const reactData = $xeImagePreview.reactData
283
-
284
- const imgList = $xeImagePreview.computeImgList
285
- const { activeIndex } = reactData
286
- const imgUrl = imgList[activeIndex || 0]
287
- let offsetRotate = reactData.offsetRotate
288
- if (isRight) {
289
- offsetRotate += 90
290
- } else {
291
- offsetRotate -= 90
292
- }
293
- reactData.offsetRotate = offsetRotate
294
- $xeImagePreview.dispatchEvent('rotate', { url: imgUrl, rotateValue: offsetRotate }, evnt)
295
- },
296
- handlePct11 () {
297
- const $xeImagePreview = this
298
- const reactData = $xeImagePreview.reactData
299
-
300
- $xeImagePreview.resetStyle()
301
- reactData.offsetPct11 = true
302
- },
303
- handlePrintImg () {
304
- const $xeImagePreview = this
305
- const reactData = $xeImagePreview.reactData
306
-
307
- const { activeIndex } = reactData
308
- const imgList = $xeImagePreview.computeImgList
309
- const imgUrl = imgList[activeIndex || 0]
310
- if (VxeUI.print) {
311
- VxeUI.print({
312
- align: 'center',
313
- pageBreaks: [
314
- {
315
- bodyHtml: `<img src="${imgUrl}" style="max-width:100%;max-height:100%;">`
316
- }
317
- ]
318
- })
319
- }
320
- },
321
- handleDownloadEvent (evnt: MouseEvent, imgUrl: string) {
322
- const $xeImagePreview = this
323
-
324
- $xeImagePreview.dispatchEvent('download', { url: imgUrl }, evnt)
325
- },
326
- handleDefaultDownload (evnt: MouseEvent, imgUrl: string) {
327
- const $xeImagePreview = this
328
-
329
- if (VxeUI.saveFile) {
330
- fetch(imgUrl).then(res => {
331
- return res.blob().then(blob => {
332
- VxeUI.saveFile({
333
- filename: imgUrl,
334
- content: blob
335
- })
336
- $xeImagePreview.handleDownloadEvent(evnt, imgUrl)
337
- })
338
- }).catch(() => {
339
- if (VxeUI.modal) {
340
- VxeUI.modal.message({
341
- content: getI18n('vxe.error.downErr'),
342
- status: 'error'
343
- })
344
- }
345
- })
346
- }
347
- },
348
- handleDownloadImg (evnt: MouseEvent) {
349
- const $xeImagePreview = this
350
- const props = $xeImagePreview
351
- const reactData = $xeImagePreview.reactData
352
-
353
- const { activeIndex } = reactData
354
- const toolbarOpts = $xeImagePreview.computeToolbarOpts
355
- const btnConf = toolbarOpts.download
356
- const btnOpts = XEUtils.isBoolean(btnConf) ? {} : (btnConf ? Object.assign({}, btnConf) : {})
357
- const imgList = $xeImagePreview.computeImgList
358
- const imgUrl = imgList[activeIndex || 0]
359
- const beforeDownloadFn = props.beforeDownloadMethod || btnOpts.beforeDownloadMethod || getConfig().imagePreview.beforeDownloadMethod
360
- const downloadFn = props.downloadMethod || btnOpts.downloadMethod || getConfig().imagePreview.downloadMethod
361
- Promise.resolve(
362
- beforeDownloadFn
363
- ? beforeDownloadFn({
364
- $imagePreview: $xeImagePreview,
365
- url: imgUrl,
366
- index: activeIndex || 0
367
- })
368
- : true
369
- ).then(status => {
370
- if (status) {
371
- if (downloadFn) {
372
- Promise.resolve(
373
- downloadFn({
374
- $imagePreview: $xeImagePreview,
375
- url: imgUrl,
376
- index: activeIndex || 0
377
- })
378
- ).then(() => {
379
- $xeImagePreview.handleDownloadEvent(evnt, imgUrl)
380
- }).catch(e => e)
381
- } else {
382
- $xeImagePreview.handleDefaultDownload(evnt, imgUrl)
383
- }
384
- }
385
- })
386
- },
387
- handleOperationBtn (evnt: MouseEvent, code: VxeImagePreviewDefines.ToolbarCode) {
388
- const $xeImagePreview = this
389
- const reactData = $xeImagePreview.reactData
390
-
391
- const { activeIndex } = reactData
392
- const imgList = $xeImagePreview.computeImgList
393
- const imgUrl = imgList[activeIndex || 0]
394
- if (imgUrl) {
395
- switch (code) {
396
- case 'zoomOut':
397
- $xeImagePreview.handleZoom(false)
398
- break
399
- case 'zoomIn':
400
- $xeImagePreview.handleZoom(true)
401
- break
402
- case 'pctFull':
403
- $xeImagePreview.resetStyle()
404
- break
405
- case 'pct11':
406
- $xeImagePreview.handlePct11()
407
- break
408
- case 'rotateLeft':
409
- $xeImagePreview.handleRotateImgEvent(evnt, false)
410
- break
411
- case 'rotateRight':
412
- $xeImagePreview.handleRotateImgEvent(evnt, true)
413
- break
414
- case 'print':
415
- $xeImagePreview.handlePrintImg()
416
- break
417
- case 'download':
418
- $xeImagePreview.handleDownloadImg(evnt)
419
- break
420
- }
421
- }
422
- },
423
- wheelEvent (evnt: WheelEvent) {
424
- const $xeImagePreview = this
425
-
426
- const delta = evnt.deltaY
427
- if (delta > 0) {
428
- evnt.preventDefault()
429
- $xeImagePreview.handleZoom(false)
430
- } else if (delta < 0) {
431
- evnt.preventDefault()
432
- $xeImagePreview.handleZoom(true)
433
- }
434
- },
435
- moveEvent (evnt: MouseEvent) {
436
- const $xeImagePreview = this
437
- const reactData = $xeImagePreview.reactData
438
-
439
- const { offsetTop, offsetLeft } = reactData
440
- const elem = $xeImagePreview.$refs.refElem as HTMLDivElement
441
- evnt.preventDefault()
442
- const domMousemove = document.onmousemove
443
- const domMouseup = document.onmouseup
444
- const startX = evnt.pageX
445
- const startY = evnt.pageY
446
- const marginSize = $xeImagePreview.computeMarginSize
447
- document.onmousemove = et => {
448
- const { pageX, pageY } = et
449
- const { visibleHeight, visibleWidth } = getDomNode()
450
- et.preventDefault()
451
- addClass(elem, 'is--move')
452
- // 限制边界值
453
- if (pageX > marginSize && pageY > marginSize && pageX < (visibleWidth - marginSize) && pageY < (visibleHeight - marginSize)) {
454
- reactData.offsetLeft = offsetLeft + pageX - startX
455
- reactData.offsetTop = offsetTop + pageY - startY
456
- }
457
- }
458
- document.onmouseup = () => {
459
- document.onmousemove = domMousemove
460
- document.onmouseup = domMouseup
461
- removeClass(elem, 'is--move')
462
- }
463
- },
464
- handleGlobalKeydownEvent (evnt: KeyboardEvent) {
465
- const $xeImagePreview = this
466
- const reactData = $xeImagePreview.reactData
467
-
468
- const isControlKey = hasControlKey(evnt)
469
- const hasShiftKey = evnt.shiftKey
470
- const isUpArrow = globalEvents.hasKey(evnt, GLOBAL_EVENT_KEYS.ARROW_UP)
471
- const isDownArrow = globalEvents.hasKey(evnt, GLOBAL_EVENT_KEYS.ARROW_DOWN)
472
- const isLeftArrow = globalEvents.hasKey(evnt, GLOBAL_EVENT_KEYS.ARROW_LEFT)
473
- const isRightArrow = globalEvents.hasKey(evnt, GLOBAL_EVENT_KEYS.ARROW_RIGHT)
474
- const isR = globalEvents.hasKey(evnt, GLOBAL_EVENT_KEYS.R)
475
- const isP = globalEvents.hasKey(evnt, GLOBAL_EVENT_KEYS.P)
476
- if (isUpArrow) {
477
- evnt.preventDefault()
478
- if (hasShiftKey) {
479
- reactData.offsetTop -= 1
480
- } else {
481
- $xeImagePreview.handleZoom(true)
482
- }
483
- } else if (isDownArrow) {
484
- evnt.preventDefault()
485
- if (hasShiftKey) {
486
- reactData.offsetTop += 1
487
- } else {
488
- $xeImagePreview.handleZoom(false)
489
- }
490
- } else if (isLeftArrow) {
491
- evnt.preventDefault()
492
- if (hasShiftKey) {
493
- reactData.offsetLeft -= 1
494
- } else {
495
- $xeImagePreview.handleChangeEvent(evnt, false)
496
- }
497
- } else if (isRightArrow) {
498
- evnt.preventDefault()
499
- if (hasShiftKey) {
500
- reactData.offsetLeft += 1
501
- } else {
502
- $xeImagePreview.handleChangeEvent(evnt, true)
503
- }
504
- } else if (isR && isControlKey) {
505
- evnt.preventDefault()
506
- if (hasShiftKey) {
507
- $xeImagePreview.handleRotateImgEvent(evnt, false)
508
- } else {
509
- $xeImagePreview.handleRotateImgEvent(evnt, true)
510
- }
511
- } else if (isP && isControlKey) {
512
- evnt.preventDefault()
513
- $xeImagePreview.handlePrintImg()
514
- }
515
- },
516
- handleClickMaskEvent (evnt: MouseEvent) {
517
- const $xeImagePreview = this
518
- const props = $xeImagePreview
519
-
520
- if (props.maskClosable) {
521
- if (evnt.target === evnt.currentTarget) {
522
- $xeImagePreview.dispatchEvent('close', {}, evnt)
523
- }
524
- }
525
- },
526
-
527
- //
528
- // Render
529
- //
530
- renderImgWrapper (h: CreateElement) {
531
- const $xeImagePreview = this
532
- const reactData = $xeImagePreview.reactData
533
-
534
- const { activeIndex } = reactData
535
- const imgList = $xeImagePreview.computeImgList
536
- const imgTransform = $xeImagePreview.computeImgTransform
537
- return h('div', {
538
- class: 'vxe-image-preview--img-list',
539
- on: {
540
- click: $xeImagePreview.handleClickMaskEvent
541
- }
542
- }, imgList.map((url, index) => {
543
- const isActive = activeIndex === index
544
- return h('img', {
545
- class: ['vxe-image-preview--img-item', {
546
- 'is--active': isActive
547
- }],
548
- style: isActive
549
- ? {
550
- transform: imgTransform
551
- }
552
- : {},
553
- attrs: {
554
- src: url
555
- },
556
- on: {
557
- mousedown (evnt: MouseEvent) {
558
- $xeImagePreview.moveEvent(evnt)
559
- }
560
- }
561
- })
562
- }))
563
- },
564
- renderOperationBtn (h: CreateElement, code: VxeImagePreviewDefines.ToolbarCode, icon: keyof VxeGlobalIcon) {
565
- const $xeImagePreview = this
566
-
567
- const toolbarOpts = $xeImagePreview.computeToolbarOpts
568
- const btnConf = toolbarOpts[code]
569
- const btnOpts = XEUtils.isBoolean(btnConf) ? {} : (btnConf ? Object.assign({}, btnConf) : {})
570
- const showBtn = btnConf !== false
571
- return showBtn
572
- ? h('div', {
573
- class: 'vxe-image-preview--operation-btn',
574
- attrs: {
575
- title: getI18n(`vxe.imagePreview.operBtn.${code}`)
576
- },
577
- on: {
578
- click (evnt: MouseEvent) {
579
- $xeImagePreview.handleOperationBtn(evnt, code)
580
- }
581
- }
582
- }, [
583
- h('i', {
584
- class: btnOpts.icon || getIcon()[icon]
585
- })
586
- ])
587
- : renderEmptyElement($xeImagePreview)
588
- },
589
- renderBtnWrapper (h: CreateElement) {
590
- const $xeImagePreview = this
591
- const props = $xeImagePreview
592
- const reactData = $xeImagePreview.reactData
593
-
594
- const { showPrintButton, showDownloadButton } = props
595
- const { activeIndex } = reactData
596
- const imgList = $xeImagePreview.computeImgList
597
- const rotateText = $xeImagePreview.computeRotateText
598
- const scaleText = $xeImagePreview.computeScaleText
599
- const toolbarOpts = $xeImagePreview.computeToolbarOpts
600
-
601
- return h('div', {
602
- class: 'vxe-image-preview--btn-wrapper'
603
- }, [
604
- h('div', {
605
- class: 'vxe-image-preview--close-wrapper'
606
- }, [
607
- h('div', {
608
- class: 'vxe-image-preview--close-btn',
609
- on: {
610
- click: $xeImagePreview.handleCloseEvent
611
- }
612
- }, [
613
- h('i', {
614
- class: getIcon().IMAGE_PREVIEW_CLOSE
615
- })
616
- ]),
617
- h('div', {
618
- class: 'vxe-image-preview--close-bg'
619
- })
620
- ]),
621
- imgList.length > 1
622
- ? h('div', {
623
- class: 'vxe-image-preview--previous-btn',
624
- on: {
625
- click (evnt: KeyboardEvent) {
626
- $xeImagePreview.handleChangeEvent(evnt, false)
627
- }
628
- }
629
- }, [
630
- h('i', {
631
- class: getIcon().IMAGE_PREVIEW_PREVIOUS
632
- })
633
- ])
634
- : renderEmptyElement($xeImagePreview),
635
- imgList.length > 1
636
- ? h('div', {
637
- class: 'vxe-image-preview--next-btn',
638
- on: {
639
- click (evnt: KeyboardEvent) {
640
- $xeImagePreview.handleChangeEvent(evnt, true)
641
- }
642
- }
643
- }, [
644
- h('i', {
645
- class: getIcon().IMAGE_PREVIEW_NEXT
646
- })
647
- ])
648
- : renderEmptyElement($xeImagePreview),
649
- h('div', {
650
- class: 'vxe-image-preview--operation-info'
651
- }, [
652
- h('div', {
653
- class: 'vxe-image-preview--operation-deg'
654
- }, rotateText),
655
- h('div', {
656
- class: 'vxe-image-preview--operation-pct'
657
- }, scaleText)
658
- ]),
659
- h('div', {
660
- class: 'vxe-image-preview--operation-wrapper'
661
- }, [
662
- h('div', {
663
- class: 'vxe-image-preview--operation-active-count'
664
- }, [
665
- h('span', {
666
- class: 'vxe-image-preview--operation-active-current'
667
- }, `${(activeIndex || 0) + 1}`),
668
- h('span', {
669
- class: 'vxe-image-preview--operation-active-total'
670
- }, `/${imgList.length}`)
671
- ]),
672
- $xeImagePreview.renderOperationBtn(h, 'zoomOut', 'IMAGE_PREVIEW_ZOOM_OUT'),
673
- $xeImagePreview.renderOperationBtn(h, 'zoomIn', 'IMAGE_PREVIEW_ZOOM_IN'),
674
- $xeImagePreview.renderOperationBtn(h, 'pctFull', 'IMAGE_PREVIEW_PCT_FULL'),
675
- $xeImagePreview.renderOperationBtn(h, 'pct11', 'IMAGE_PREVIEW_PCT_1_1'),
676
- $xeImagePreview.renderOperationBtn(h, 'rotateLeft', 'IMAGE_PREVIEW_ROTATE_LEFT'),
677
- $xeImagePreview.renderOperationBtn(h, 'rotateRight', 'IMAGE_PREVIEW_ROTATE_RIGHT'),
678
- showPrintButton || toolbarOpts.print ? $xeImagePreview.renderOperationBtn(h, 'print', 'IMAGE_PREVIEW_PRINT') : renderEmptyElement($xeImagePreview),
679
- showDownloadButton || toolbarOpts.download ? $xeImagePreview.renderOperationBtn(h, 'download', 'IMAGE_PREVIEW_DOWNLOAD') : renderEmptyElement($xeImagePreview)
680
- ])
681
- ])
682
- },
683
- renderVN (h: CreateElement): VNode {
684
- const $xeImagePreview = this
685
- const reactData = $xeImagePreview.reactData
686
-
687
- const { offsetPct11 } = reactData
688
- return h('div', {
689
- ref: 'refElem',
690
- class: ['vxe-image-preview', {
691
- 'is--pct11': offsetPct11
692
- }]
693
- }, [
694
- $xeImagePreview.renderImgWrapper(h),
695
- $xeImagePreview.renderBtnWrapper(h)
696
- ])
697
- }
698
- },
699
- watch: {
700
- value (val) {
701
- const $xeImagePreview = this
702
- const reactData = $xeImagePreview.reactData
703
-
704
- reactData.activeIndex = val
705
- $xeImagePreview.resetStyle()
706
- }
707
- },
708
- created () {
709
- const $xeImagePreview = this
710
- const props = $xeImagePreview
711
- const reactData = $xeImagePreview.reactData
712
-
713
- reactData.activeIndex = props.value || 0
714
- },
715
- mounted () {
716
- const $xeImagePreview = this
717
-
718
- const elem = $xeImagePreview.$refs.refElem as HTMLDivElement
719
- if (elem) {
720
- elem.addEventListener('wheel', $xeImagePreview.wheelEvent, { passive: false })
721
- }
722
- globalEvents.on($xeImagePreview, 'keydown', $xeImagePreview.handleGlobalKeydownEvent)
723
- },
724
- beforeDestroy () {
725
- const $xeImagePreview = this
726
-
727
- const elem = $xeImagePreview.$refs.refElem as HTMLDivElement
728
- if (elem) {
729
- elem.removeEventListener('wheel', $xeImagePreview.wheelEvent)
730
- removeClass(elem, 'is--move')
731
- }
732
- globalEvents.off($xeImagePreview, 'keydown')
733
- },
734
- render (this: any, h) {
735
- return this.renderVN(h)
736
- }
737
- }) /* define-vxe-component end */
1
+ import { CreateElement, PropType, VNode } from 'vue'
2
+ import { defineVxeComponent } from '../../ui/src/comp'
3
+ import XEUtils from 'xe-utils'
4
+ import { VxeUI, getConfig, createEvent, getIcon, globalEvents, GLOBAL_EVENT_KEYS, getI18n, renderEmptyElement } from '../../ui'
5
+ import { getDomNode, addClass, removeClass, hasControlKey } from '../../ui/src/dom'
6
+
7
+ import type { ImagePreviewReactData, VxeGlobalIcon, VxeImagePreviewEmits, VxeComponentSizeType, VxeImagePreviewPropTypes, ValueOf, VxeImagePreviewDefines } from '../../../types'
8
+
9
+ export default /* define-vxe-component start */ defineVxeComponent({
10
+ name: 'VxeImagePreview',
11
+ props: {
12
+ value: Number as PropType<VxeImagePreviewPropTypes.ModelValue>,
13
+ urlList: Array as PropType<VxeImagePreviewPropTypes.UrlList>,
14
+ urlField: {
15
+ type: String as PropType<VxeImagePreviewPropTypes.UrlField>,
16
+ default: () => getConfig().imagePreview.urlField
17
+ },
18
+ maskClosable: {
19
+ type: Boolean as PropType<VxeImagePreviewPropTypes.MaskClosable>,
20
+ default: () => getConfig().imagePreview.maskClosable
21
+ },
22
+ marginSize: {
23
+ type: String as PropType<VxeImagePreviewPropTypes.MarginSize>,
24
+ default: () => getConfig().imagePreview.marginSize
25
+ },
26
+ showPrintButton: {
27
+ type: Boolean as PropType<VxeImagePreviewPropTypes.ShowPrintButton>,
28
+ default: () => getConfig().imagePreview.showPrintButton
29
+ },
30
+ showDownloadButton: {
31
+ type: Boolean as PropType<VxeImagePreviewPropTypes.ShowDownloadButton>,
32
+ default: () => getConfig().imagePreview.showDownloadButton
33
+ },
34
+ zIndex: Number as PropType<VxeImagePreviewPropTypes.ZIndex>,
35
+ toolbarConfig: Object as PropType<VxeImagePreviewPropTypes.ToolbarConfig>,
36
+ beforeDownloadMethod: Function as PropType<VxeImagePreviewPropTypes.BeforeDownloadMethod>,
37
+ downloadMethod: Function as PropType<VxeImagePreviewPropTypes.DownloadMethod>
38
+ },
39
+ provide () {
40
+ const $xeImagePreview = this
41
+ return {
42
+ $xeImagePreview
43
+ }
44
+ },
45
+ data () {
46
+ const xID = XEUtils.uniqueId()
47
+ const reactData: ImagePreviewReactData = {
48
+ activeIndex: 0,
49
+ offsetPct11: false,
50
+ offsetScale: 0,
51
+ offsetRotate: 0,
52
+ offsetLeft: 0,
53
+ offsetTop: 0
54
+ }
55
+ return {
56
+ xID,
57
+ reactData
58
+ }
59
+ },
60
+ computed: {
61
+ ...({} as {
62
+ computeSize(): VxeComponentSizeType
63
+ }),
64
+ computeUrlProp () {
65
+ const $xeImagePreview = this
66
+ const props = $xeImagePreview
67
+
68
+ return props.urlField || 'url'
69
+ },
70
+ computeMarginSize () {
71
+ const $xeImagePreview = this
72
+ const props = $xeImagePreview
73
+
74
+ return XEUtils.toNumber(props.marginSize || 0) || 16
75
+ },
76
+ computeToolbarOpts () {
77
+ const $xeImagePreview = this
78
+ const props = $xeImagePreview
79
+
80
+ return Object.assign({}, getConfig().imagePreview.toolbarConfig, props.toolbarConfig)
81
+ },
82
+ computeRotateText () {
83
+ const $xeImagePreview = this
84
+ const reactData = $xeImagePreview.reactData as ImagePreviewReactData
85
+
86
+ const { offsetRotate } = reactData
87
+ if (offsetRotate) {
88
+ return `${offsetRotate}°`
89
+ }
90
+ return '0°'
91
+ },
92
+ computeScaleText () {
93
+ const $xeImagePreview = this
94
+ const reactData = $xeImagePreview.reactData as ImagePreviewReactData
95
+
96
+ const { offsetScale } = reactData
97
+ if (offsetScale) {
98
+ return `${XEUtils.ceil((1 + offsetScale) * 100)}%`
99
+ }
100
+ return '100%'
101
+ },
102
+ computeImgList () {
103
+ const $xeImagePreview = this
104
+ const props = $xeImagePreview
105
+
106
+ const { urlList } = props
107
+ const urlProp = $xeImagePreview.computeUrlProp as string
108
+ if (urlList && urlList.length) {
109
+ return urlList.map(item => {
110
+ if (XEUtils.isString(item)) {
111
+ return item
112
+ }
113
+ if (item[urlProp]) {
114
+ return item[urlProp]
115
+ }
116
+ return ''
117
+ })
118
+ }
119
+ return []
120
+ },
121
+ computeImgTransform () {
122
+ const $xeImagePreview = this
123
+ const reactData = $xeImagePreview.reactData
124
+
125
+ let { offsetScale, offsetRotate, offsetLeft, offsetTop } = reactData
126
+ const stys: string[] = []
127
+ let targetScale = 1
128
+ if (offsetScale) {
129
+ targetScale = 1 + offsetScale
130
+ stys.push(`scale(${targetScale})`)
131
+ }
132
+ if (offsetRotate) {
133
+ stys.push(`rotate(${offsetRotate}deg)`)
134
+ }
135
+ if (offsetLeft || offsetTop) {
136
+ // 缩放与位移
137
+ offsetLeft /= targetScale
138
+ offsetTop /= targetScale
139
+
140
+ let targetOffsetLeft = offsetLeft
141
+ let targetOffsetTop = offsetTop
142
+ if (offsetRotate) {
143
+ // 转向与位移
144
+ switch (offsetRotate % 360) {
145
+ case 90:
146
+ case -270:
147
+ targetOffsetLeft = offsetTop
148
+ targetOffsetTop = -offsetLeft
149
+ break
150
+ case 180:
151
+ case -180:
152
+ targetOffsetLeft = -offsetLeft
153
+ targetOffsetTop = -offsetTop
154
+ break
155
+ case 270:
156
+ case -90:
157
+ targetOffsetLeft = -offsetTop
158
+ targetOffsetTop = offsetLeft
159
+ break
160
+ }
161
+ }
162
+ stys.push(`translate(${targetOffsetLeft}px, ${targetOffsetTop}px)`)
163
+ }
164
+ return stys.length ? stys.join(' ') : ''
165
+ }
166
+ },
167
+ methods: {
168
+ //
169
+ // Method
170
+ //
171
+ dispatchEvent (type: ValueOf<VxeImagePreviewEmits>, params: Record<string, any>, evnt: Event | null) {
172
+ const $xeImagePreview = this
173
+ $xeImagePreview.$emit(type, createEvent(evnt, { $imagePreview: $xeImagePreview }, params))
174
+ },
175
+ emitModel (value: VxeImagePreviewPropTypes.ModelValue) {
176
+ const $xeImagePreview = this
177
+
178
+ const { _events } = $xeImagePreview as any
179
+ $xeImagePreview.$emit('input', value)
180
+ if (_events && _events.modelValue) {
181
+ $xeImagePreview.$emit('modelValue', value)
182
+ } else {
183
+ $xeImagePreview.$emit('model-value', value)
184
+ }
185
+ },
186
+ handleCloseEvent (evnt: MouseEvent) {
187
+ const $xeImagePreview = this
188
+
189
+ $xeImagePreview.dispatchEvent('close', {}, evnt)
190
+ },
191
+ resetStyle () {
192
+ const $xeImagePreview = this
193
+ const reactData = $xeImagePreview.reactData
194
+
195
+ const elem = $xeImagePreview.$refs.refElem as HTMLDivElement
196
+ removeClass(elem, 'is--move')
197
+ Object.assign(reactData, {
198
+ offsetPct11: false,
199
+ offsetScale: 0,
200
+ offsetRotate: 0,
201
+ offsetLeft: 0,
202
+ offsetTop: 0
203
+ })
204
+ },
205
+ getOffsetZoomStep () {
206
+ const $xeImagePreview = this
207
+ const reactData = $xeImagePreview.reactData
208
+
209
+ const { offsetScale } = reactData
210
+ let stepNum = 0.02
211
+ if (offsetScale >= -0.6) {
212
+ stepNum = 0.04
213
+ if (offsetScale >= -0.4) {
214
+ stepNum = 0.07
215
+ if (offsetScale >= 0) {
216
+ stepNum = 0.1
217
+ if (offsetScale >= 3) {
218
+ stepNum = 0.25
219
+ if (offsetScale >= 8) {
220
+ stepNum = 0.4
221
+ if (offsetScale >= 16) {
222
+ stepNum = 0.6
223
+ if (offsetScale >= 24) {
224
+ stepNum = 0.9
225
+ if (offsetScale >= 32) {
226
+ stepNum = 1.3
227
+ if (offsetScale >= 39) {
228
+ stepNum = 1.9
229
+ if (offsetScale >= 45) {
230
+ stepNum = 2.5
231
+ }
232
+ }
233
+ }
234
+ }
235
+ }
236
+ }
237
+ }
238
+ }
239
+ }
240
+ }
241
+ return stepNum
242
+ },
243
+ handleZoom (isAdd: boolean) {
244
+ const $xeImagePreview = this
245
+ const reactData = $xeImagePreview.reactData
246
+
247
+ const { offsetScale } = reactData
248
+ const stepNum = $xeImagePreview.getOffsetZoomStep()
249
+ if (isAdd) {
250
+ reactData.offsetScale = Number(Math.min(49, offsetScale + stepNum).toFixed(2))
251
+ } else {
252
+ reactData.offsetScale = Number(Math.max(-0.9, offsetScale - stepNum).toFixed(2))
253
+ }
254
+ },
255
+ handleChangeEvent (evnt: Event, isNext: boolean) {
256
+ const $xeImagePreview = this
257
+ const reactData = $xeImagePreview.reactData
258
+
259
+ let activeIndex = reactData.activeIndex || 0
260
+ const imgList = $xeImagePreview.computeImgList
261
+ if (isNext) {
262
+ if (activeIndex >= imgList.length - 1) {
263
+ activeIndex = 0
264
+ } else {
265
+ activeIndex++
266
+ }
267
+ } else {
268
+ if (activeIndex <= 0) {
269
+ activeIndex = imgList.length - 1
270
+ } else {
271
+ activeIndex--
272
+ }
273
+ }
274
+ const imgUrl = imgList[activeIndex || 0]
275
+ reactData.activeIndex = activeIndex
276
+ $xeImagePreview.resetStyle()
277
+ $xeImagePreview.emitModel(activeIndex)
278
+ $xeImagePreview.dispatchEvent('change', { url: imgUrl, activeIndex }, evnt)
279
+ },
280
+ handleRotateImgEvent (evnt: Event, isRight: boolean) {
281
+ const $xeImagePreview = this
282
+ const reactData = $xeImagePreview.reactData
283
+
284
+ const imgList = $xeImagePreview.computeImgList
285
+ const { activeIndex } = reactData
286
+ const imgUrl = imgList[activeIndex || 0]
287
+ let offsetRotate = reactData.offsetRotate
288
+ if (isRight) {
289
+ offsetRotate += 90
290
+ } else {
291
+ offsetRotate -= 90
292
+ }
293
+ reactData.offsetRotate = offsetRotate
294
+ $xeImagePreview.dispatchEvent('rotate', { url: imgUrl, rotateValue: offsetRotate }, evnt)
295
+ },
296
+ handlePct11 () {
297
+ const $xeImagePreview = this
298
+ const reactData = $xeImagePreview.reactData
299
+
300
+ $xeImagePreview.resetStyle()
301
+ reactData.offsetPct11 = true
302
+ },
303
+ handlePrintImg () {
304
+ const $xeImagePreview = this
305
+ const reactData = $xeImagePreview.reactData
306
+
307
+ const { activeIndex } = reactData
308
+ const imgList = $xeImagePreview.computeImgList
309
+ const imgUrl = imgList[activeIndex || 0]
310
+ if (VxeUI.print) {
311
+ VxeUI.print({
312
+ align: 'center',
313
+ pageBreaks: [
314
+ {
315
+ bodyHtml: `<img src="${imgUrl}" style="max-width:100%;max-height:100%;">`
316
+ }
317
+ ]
318
+ })
319
+ }
320
+ },
321
+ handleDownloadEvent (evnt: MouseEvent, imgUrl: string) {
322
+ const $xeImagePreview = this
323
+
324
+ $xeImagePreview.dispatchEvent('download', { url: imgUrl }, evnt)
325
+ },
326
+ handleDefaultDownload (evnt: MouseEvent, imgUrl: string) {
327
+ const $xeImagePreview = this
328
+
329
+ if (VxeUI.saveFile) {
330
+ fetch(imgUrl).then(res => {
331
+ return res.blob().then(blob => {
332
+ VxeUI.saveFile({
333
+ filename: imgUrl,
334
+ content: blob
335
+ })
336
+ $xeImagePreview.handleDownloadEvent(evnt, imgUrl)
337
+ })
338
+ }).catch(() => {
339
+ if (VxeUI.modal) {
340
+ VxeUI.modal.message({
341
+ content: getI18n('vxe.error.downErr'),
342
+ status: 'error'
343
+ })
344
+ }
345
+ })
346
+ }
347
+ },
348
+ handleDownloadImg (evnt: MouseEvent) {
349
+ const $xeImagePreview = this
350
+ const props = $xeImagePreview
351
+ const reactData = $xeImagePreview.reactData
352
+
353
+ const { activeIndex } = reactData
354
+ const toolbarOpts = $xeImagePreview.computeToolbarOpts
355
+ const btnConf = toolbarOpts.download
356
+ const btnOpts = XEUtils.isBoolean(btnConf) ? {} : (btnConf ? Object.assign({}, btnConf) : {})
357
+ const imgList = $xeImagePreview.computeImgList
358
+ const imgUrl = imgList[activeIndex || 0]
359
+ const beforeDownloadFn = props.beforeDownloadMethod || btnOpts.beforeDownloadMethod || getConfig().imagePreview.beforeDownloadMethod
360
+ const downloadFn = props.downloadMethod || btnOpts.downloadMethod || getConfig().imagePreview.downloadMethod
361
+ Promise.resolve(
362
+ beforeDownloadFn
363
+ ? beforeDownloadFn({
364
+ $imagePreview: $xeImagePreview,
365
+ url: imgUrl,
366
+ index: activeIndex || 0
367
+ })
368
+ : true
369
+ ).then(status => {
370
+ if (status) {
371
+ if (downloadFn) {
372
+ Promise.resolve(
373
+ downloadFn({
374
+ $imagePreview: $xeImagePreview,
375
+ url: imgUrl,
376
+ index: activeIndex || 0
377
+ })
378
+ ).then(() => {
379
+ $xeImagePreview.handleDownloadEvent(evnt, imgUrl)
380
+ }).catch(e => e)
381
+ } else {
382
+ $xeImagePreview.handleDefaultDownload(evnt, imgUrl)
383
+ }
384
+ }
385
+ })
386
+ },
387
+ handleOperationBtn (evnt: MouseEvent, code: VxeImagePreviewDefines.ToolbarCode) {
388
+ const $xeImagePreview = this
389
+ const reactData = $xeImagePreview.reactData
390
+
391
+ const { activeIndex } = reactData
392
+ const imgList = $xeImagePreview.computeImgList
393
+ const imgUrl = imgList[activeIndex || 0]
394
+ if (imgUrl) {
395
+ switch (code) {
396
+ case 'zoomOut':
397
+ $xeImagePreview.handleZoom(false)
398
+ break
399
+ case 'zoomIn':
400
+ $xeImagePreview.handleZoom(true)
401
+ break
402
+ case 'pctFull':
403
+ $xeImagePreview.resetStyle()
404
+ break
405
+ case 'pct11':
406
+ $xeImagePreview.handlePct11()
407
+ break
408
+ case 'rotateLeft':
409
+ $xeImagePreview.handleRotateImgEvent(evnt, false)
410
+ break
411
+ case 'rotateRight':
412
+ $xeImagePreview.handleRotateImgEvent(evnt, true)
413
+ break
414
+ case 'print':
415
+ $xeImagePreview.handlePrintImg()
416
+ break
417
+ case 'download':
418
+ $xeImagePreview.handleDownloadImg(evnt)
419
+ break
420
+ }
421
+ }
422
+ },
423
+ wheelEvent (evnt: WheelEvent) {
424
+ const $xeImagePreview = this
425
+
426
+ const delta = evnt.deltaY
427
+ if (delta > 0) {
428
+ evnt.preventDefault()
429
+ $xeImagePreview.handleZoom(false)
430
+ } else if (delta < 0) {
431
+ evnt.preventDefault()
432
+ $xeImagePreview.handleZoom(true)
433
+ }
434
+ },
435
+ moveEvent (evnt: MouseEvent) {
436
+ const $xeImagePreview = this
437
+ const reactData = $xeImagePreview.reactData
438
+
439
+ const { offsetTop, offsetLeft } = reactData
440
+ const elem = $xeImagePreview.$refs.refElem as HTMLDivElement
441
+ evnt.preventDefault()
442
+ const domMousemove = document.onmousemove
443
+ const domMouseup = document.onmouseup
444
+ const startX = evnt.pageX
445
+ const startY = evnt.pageY
446
+ const marginSize = $xeImagePreview.computeMarginSize
447
+ document.onmousemove = et => {
448
+ const { pageX, pageY } = et
449
+ const { visibleHeight, visibleWidth } = getDomNode()
450
+ et.preventDefault()
451
+ addClass(elem, 'is--move')
452
+ // 限制边界值
453
+ if (pageX > marginSize && pageY > marginSize && pageX < (visibleWidth - marginSize) && pageY < (visibleHeight - marginSize)) {
454
+ reactData.offsetLeft = offsetLeft + pageX - startX
455
+ reactData.offsetTop = offsetTop + pageY - startY
456
+ }
457
+ }
458
+ document.onmouseup = () => {
459
+ document.onmousemove = domMousemove
460
+ document.onmouseup = domMouseup
461
+ removeClass(elem, 'is--move')
462
+ }
463
+ },
464
+ handleGlobalKeydownEvent (evnt: KeyboardEvent) {
465
+ const $xeImagePreview = this
466
+ const reactData = $xeImagePreview.reactData
467
+
468
+ const isControlKey = hasControlKey(evnt)
469
+ const hasShiftKey = evnt.shiftKey
470
+ const isUpArrow = globalEvents.hasKey(evnt, GLOBAL_EVENT_KEYS.ARROW_UP)
471
+ const isDownArrow = globalEvents.hasKey(evnt, GLOBAL_EVENT_KEYS.ARROW_DOWN)
472
+ const isLeftArrow = globalEvents.hasKey(evnt, GLOBAL_EVENT_KEYS.ARROW_LEFT)
473
+ const isRightArrow = globalEvents.hasKey(evnt, GLOBAL_EVENT_KEYS.ARROW_RIGHT)
474
+ const isR = globalEvents.hasKey(evnt, GLOBAL_EVENT_KEYS.R)
475
+ const isP = globalEvents.hasKey(evnt, GLOBAL_EVENT_KEYS.P)
476
+ if (isUpArrow) {
477
+ evnt.preventDefault()
478
+ if (hasShiftKey) {
479
+ reactData.offsetTop -= 1
480
+ } else {
481
+ $xeImagePreview.handleZoom(true)
482
+ }
483
+ } else if (isDownArrow) {
484
+ evnt.preventDefault()
485
+ if (hasShiftKey) {
486
+ reactData.offsetTop += 1
487
+ } else {
488
+ $xeImagePreview.handleZoom(false)
489
+ }
490
+ } else if (isLeftArrow) {
491
+ evnt.preventDefault()
492
+ if (hasShiftKey) {
493
+ reactData.offsetLeft -= 1
494
+ } else {
495
+ $xeImagePreview.handleChangeEvent(evnt, false)
496
+ }
497
+ } else if (isRightArrow) {
498
+ evnt.preventDefault()
499
+ if (hasShiftKey) {
500
+ reactData.offsetLeft += 1
501
+ } else {
502
+ $xeImagePreview.handleChangeEvent(evnt, true)
503
+ }
504
+ } else if (isR && isControlKey) {
505
+ evnt.preventDefault()
506
+ if (hasShiftKey) {
507
+ $xeImagePreview.handleRotateImgEvent(evnt, false)
508
+ } else {
509
+ $xeImagePreview.handleRotateImgEvent(evnt, true)
510
+ }
511
+ } else if (isP && isControlKey) {
512
+ evnt.preventDefault()
513
+ $xeImagePreview.handlePrintImg()
514
+ }
515
+ },
516
+ handleClickMaskEvent (evnt: MouseEvent) {
517
+ const $xeImagePreview = this
518
+ const props = $xeImagePreview
519
+
520
+ if (props.maskClosable) {
521
+ if (evnt.target === evnt.currentTarget) {
522
+ $xeImagePreview.dispatchEvent('close', {}, evnt)
523
+ }
524
+ }
525
+ },
526
+
527
+ //
528
+ // Render
529
+ //
530
+ renderImgWrapper (h: CreateElement) {
531
+ const $xeImagePreview = this
532
+ const reactData = $xeImagePreview.reactData
533
+
534
+ const { activeIndex } = reactData
535
+ const imgList = $xeImagePreview.computeImgList
536
+ const imgTransform = $xeImagePreview.computeImgTransform
537
+ return h('div', {
538
+ class: 'vxe-image-preview--img-list',
539
+ on: {
540
+ click: $xeImagePreview.handleClickMaskEvent
541
+ }
542
+ }, imgList.map((url, index) => {
543
+ const isActive = activeIndex === index
544
+ return h('img', {
545
+ class: ['vxe-image-preview--img-item', {
546
+ 'is--active': isActive
547
+ }],
548
+ style: isActive
549
+ ? {
550
+ transform: imgTransform
551
+ }
552
+ : {},
553
+ attrs: {
554
+ src: url
555
+ },
556
+ on: {
557
+ mousedown (evnt: MouseEvent) {
558
+ $xeImagePreview.moveEvent(evnt)
559
+ }
560
+ }
561
+ })
562
+ }))
563
+ },
564
+ renderOperationBtn (h: CreateElement, code: VxeImagePreviewDefines.ToolbarCode, icon: keyof VxeGlobalIcon) {
565
+ const $xeImagePreview = this
566
+
567
+ const toolbarOpts = $xeImagePreview.computeToolbarOpts
568
+ const btnConf = toolbarOpts[code]
569
+ const btnOpts = XEUtils.isBoolean(btnConf) ? {} : (btnConf ? Object.assign({}, btnConf) : {})
570
+ const showBtn = btnConf !== false
571
+ return showBtn
572
+ ? h('div', {
573
+ class: 'vxe-image-preview--operation-btn',
574
+ attrs: {
575
+ title: getI18n(`vxe.imagePreview.operBtn.${code}`)
576
+ },
577
+ on: {
578
+ click (evnt: MouseEvent) {
579
+ $xeImagePreview.handleOperationBtn(evnt, code)
580
+ }
581
+ }
582
+ }, [
583
+ h('i', {
584
+ class: btnOpts.icon || getIcon()[icon]
585
+ })
586
+ ])
587
+ : renderEmptyElement($xeImagePreview)
588
+ },
589
+ renderBtnWrapper (h: CreateElement) {
590
+ const $xeImagePreview = this
591
+ const props = $xeImagePreview
592
+ const reactData = $xeImagePreview.reactData
593
+
594
+ const { showPrintButton, showDownloadButton } = props
595
+ const { activeIndex } = reactData
596
+ const imgList = $xeImagePreview.computeImgList
597
+ const rotateText = $xeImagePreview.computeRotateText
598
+ const scaleText = $xeImagePreview.computeScaleText
599
+ const toolbarOpts = $xeImagePreview.computeToolbarOpts
600
+
601
+ return h('div', {
602
+ class: 'vxe-image-preview--btn-wrapper'
603
+ }, [
604
+ h('div', {
605
+ class: 'vxe-image-preview--close-wrapper'
606
+ }, [
607
+ h('div', {
608
+ class: 'vxe-image-preview--close-btn',
609
+ on: {
610
+ click: $xeImagePreview.handleCloseEvent
611
+ }
612
+ }, [
613
+ h('i', {
614
+ class: getIcon().IMAGE_PREVIEW_CLOSE
615
+ })
616
+ ]),
617
+ h('div', {
618
+ class: 'vxe-image-preview--close-bg'
619
+ })
620
+ ]),
621
+ imgList.length > 1
622
+ ? h('div', {
623
+ class: 'vxe-image-preview--previous-btn',
624
+ on: {
625
+ click (evnt: KeyboardEvent) {
626
+ $xeImagePreview.handleChangeEvent(evnt, false)
627
+ }
628
+ }
629
+ }, [
630
+ h('i', {
631
+ class: getIcon().IMAGE_PREVIEW_PREVIOUS
632
+ })
633
+ ])
634
+ : renderEmptyElement($xeImagePreview),
635
+ imgList.length > 1
636
+ ? h('div', {
637
+ class: 'vxe-image-preview--next-btn',
638
+ on: {
639
+ click (evnt: KeyboardEvent) {
640
+ $xeImagePreview.handleChangeEvent(evnt, true)
641
+ }
642
+ }
643
+ }, [
644
+ h('i', {
645
+ class: getIcon().IMAGE_PREVIEW_NEXT
646
+ })
647
+ ])
648
+ : renderEmptyElement($xeImagePreview),
649
+ h('div', {
650
+ class: 'vxe-image-preview--operation-info'
651
+ }, [
652
+ h('div', {
653
+ class: 'vxe-image-preview--operation-deg'
654
+ }, rotateText),
655
+ h('div', {
656
+ class: 'vxe-image-preview--operation-pct'
657
+ }, scaleText)
658
+ ]),
659
+ h('div', {
660
+ class: 'vxe-image-preview--operation-wrapper'
661
+ }, [
662
+ h('div', {
663
+ class: 'vxe-image-preview--operation-active-count'
664
+ }, [
665
+ h('span', {
666
+ class: 'vxe-image-preview--operation-active-current'
667
+ }, `${(activeIndex || 0) + 1}`),
668
+ h('span', {
669
+ class: 'vxe-image-preview--operation-active-total'
670
+ }, `/${imgList.length}`)
671
+ ]),
672
+ $xeImagePreview.renderOperationBtn(h, 'zoomOut', 'IMAGE_PREVIEW_ZOOM_OUT'),
673
+ $xeImagePreview.renderOperationBtn(h, 'zoomIn', 'IMAGE_PREVIEW_ZOOM_IN'),
674
+ $xeImagePreview.renderOperationBtn(h, 'pctFull', 'IMAGE_PREVIEW_PCT_FULL'),
675
+ $xeImagePreview.renderOperationBtn(h, 'pct11', 'IMAGE_PREVIEW_PCT_1_1'),
676
+ $xeImagePreview.renderOperationBtn(h, 'rotateLeft', 'IMAGE_PREVIEW_ROTATE_LEFT'),
677
+ $xeImagePreview.renderOperationBtn(h, 'rotateRight', 'IMAGE_PREVIEW_ROTATE_RIGHT'),
678
+ showPrintButton || toolbarOpts.print ? $xeImagePreview.renderOperationBtn(h, 'print', 'IMAGE_PREVIEW_PRINT') : renderEmptyElement($xeImagePreview),
679
+ showDownloadButton || toolbarOpts.download ? $xeImagePreview.renderOperationBtn(h, 'download', 'IMAGE_PREVIEW_DOWNLOAD') : renderEmptyElement($xeImagePreview)
680
+ ])
681
+ ])
682
+ },
683
+ renderVN (h: CreateElement): VNode {
684
+ const $xeImagePreview = this
685
+ const reactData = $xeImagePreview.reactData
686
+
687
+ const { offsetPct11 } = reactData
688
+ return h('div', {
689
+ ref: 'refElem',
690
+ class: ['vxe-image-preview', {
691
+ 'is--pct11': offsetPct11
692
+ }]
693
+ }, [
694
+ $xeImagePreview.renderImgWrapper(h),
695
+ $xeImagePreview.renderBtnWrapper(h)
696
+ ])
697
+ }
698
+ },
699
+ watch: {
700
+ value (val) {
701
+ const $xeImagePreview = this
702
+ const reactData = $xeImagePreview.reactData
703
+
704
+ reactData.activeIndex = val
705
+ $xeImagePreview.resetStyle()
706
+ }
707
+ },
708
+ created () {
709
+ const $xeImagePreview = this
710
+ const props = $xeImagePreview
711
+ const reactData = $xeImagePreview.reactData
712
+
713
+ reactData.activeIndex = props.value || 0
714
+ },
715
+ mounted () {
716
+ const $xeImagePreview = this
717
+
718
+ const elem = $xeImagePreview.$refs.refElem as HTMLDivElement
719
+ if (elem) {
720
+ elem.addEventListener('wheel', $xeImagePreview.wheelEvent, { passive: false })
721
+ }
722
+ globalEvents.on($xeImagePreview, 'keydown', $xeImagePreview.handleGlobalKeydownEvent)
723
+ },
724
+ beforeDestroy () {
725
+ const $xeImagePreview = this
726
+
727
+ const elem = $xeImagePreview.$refs.refElem as HTMLDivElement
728
+ if (elem) {
729
+ elem.removeEventListener('wheel', $xeImagePreview.wheelEvent)
730
+ removeClass(elem, 'is--move')
731
+ }
732
+ globalEvents.off($xeImagePreview, 'keydown')
733
+ },
734
+ render (this: any, h) {
735
+ return this.renderVN(h)
736
+ }
737
+ }) /* define-vxe-component end */