vxe-pc-ui 3.14.4 → 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 -1192
  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.1778169069480.ttf → iconfont.1778317204332.ttf} +0 -0
  464. /package/es/icon/{iconfont.1778169069480.woff → iconfont.1778317204332.woff} +0 -0
  465. /package/es/icon/{iconfont.1778169069480.woff2 → iconfont.1778317204332.woff2} +0 -0
  466. /package/es/{iconfont.1778169069480.ttf → iconfont.1778317204332.ttf} +0 -0
  467. /package/es/{iconfont.1778169069480.woff → iconfont.1778317204332.woff} +0 -0
  468. /package/es/{iconfont.1778169069480.woff2 → iconfont.1778317204332.woff2} +0 -0
  469. /package/lib/icon/style/{iconfont.1778169069480.ttf → iconfont.1778317204332.ttf} +0 -0
  470. /package/lib/icon/style/{iconfont.1778169069480.woff → iconfont.1778317204332.woff} +0 -0
  471. /package/lib/icon/style/{iconfont.1778169069480.woff2 → iconfont.1778317204332.woff2} +0 -0
  472. /package/lib/{iconfont.1778169069480.ttf → iconfont.1778317204332.ttf} +0 -0
  473. /package/lib/{iconfont.1778169069480.woff → iconfont.1778317204332.woff} +0 -0
  474. /package/lib/{iconfont.1778169069480.woff2 → iconfont.1778317204332.woff2} +0 -0
@@ -1,1527 +1,1527 @@
1
- import { PropType, CreateElement, VNode } from 'vue'
2
- import { defineVxeComponent } from '../../ui/src/comp'
3
- import XEUtils from 'xe-utils'
4
- import { VxeUI, createEvent, globalMixins, renderEmptyElement } from '../../ui'
5
- import { getDateQuarter } from '../../date-panel/src/util'
6
- import { toCssUnit } from '../../ui/src/dom'
7
- import { isEnableConf } from '../../ui/src/utils'
8
- import { errLog } from '../../ui/src/log'
9
- import VxeButtonComponent from '../../button/src/button'
10
-
11
- import type { VxeCalendarEmits, CalendarInternalData, CalendarReactData, ValueOf, VxeCalendarPropTypes, VxeComponentSizeType, VxeDatePanelDefines, VxeCalendarConstructor } from '../../../types'
12
-
13
- const { menus, getConfig, getI18n } = VxeUI
14
-
15
- export default /* define-vxe-component start */ defineVxeComponent({
16
- name: 'VxeCalendar',
17
- mixins: [
18
- globalMixins.sizeMixin
19
- ],
20
- props: {
21
- value: [String, Number, Date] as PropType<VxeCalendarPropTypes.ModelValue>,
22
- type: {
23
- type: String as PropType<VxeCalendarPropTypes.Type>,
24
- default: 'date'
25
- },
26
- className: String as PropType<VxeCalendarPropTypes.ClassName>,
27
- size: {
28
- type: String as PropType<VxeCalendarPropTypes.Size>,
29
- default: () => getConfig().calendar.size || getConfig().size
30
- },
31
- multiple: Boolean as PropType<VxeCalendarPropTypes.Multiple>,
32
-
33
- width: [String, Number] as PropType<VxeCalendarPropTypes.Width>,
34
- height: [String, Number] as PropType<VxeCalendarPropTypes.Height>,
35
-
36
- // date、week、month、quarter、year
37
- minDate: {
38
- type: [String, Number, Date] as PropType<VxeCalendarPropTypes.MinDate>,
39
- default: () => getConfig().calendar.minDate
40
- },
41
- maxDate: {
42
- type: [String, Number, Date] as PropType<VxeCalendarPropTypes.MaxDate>,
43
- default: () => getConfig().calendar.maxDate
44
- },
45
- startDay: {
46
- type: [String, Number] as PropType<VxeCalendarPropTypes.StartDay>,
47
- default: () => getConfig().calendar.startDay
48
- },
49
- labelFormat: String as PropType<VxeCalendarPropTypes.LabelFormat>,
50
- valueFormat: String as PropType<VxeCalendarPropTypes.ValueFormat>,
51
- festivalMethod: {
52
- type: Function as PropType<VxeCalendarPropTypes.FestivalMethod>,
53
- default: () => getConfig().calendar.festivalMethod
54
- },
55
- disabledMethod: {
56
- type: Function as PropType<VxeCalendarPropTypes.DisabledMethod>,
57
- default: () => getConfig().calendar.disabledMethod
58
- },
59
- cellStyle: [Object, Function] as PropType<VxeCalendarPropTypes.CellStyle>,
60
- menuConfig: Object as PropType<VxeCalendarPropTypes.MenuConfig>,
61
-
62
- // week
63
- selectDay: {
64
- type: [String, Number] as PropType<VxeCalendarPropTypes.SelectDay>,
65
- default: () => getConfig().calendar.selectDay
66
- }
67
- },
68
- data () {
69
- const reactData: CalendarReactData = {
70
- selectValue: null,
71
- inputValue: null,
72
- datePanelValue: null,
73
- datePanelLabel: '',
74
- datePanelType: 'day',
75
- selectMonth: null,
76
- currentDate: null
77
- }
78
- const internalData: CalendarInternalData = {
79
- yearSize: 12,
80
- monthSize: 20,
81
- quarterSize: 8
82
- }
83
-
84
- return {
85
- xID: XEUtils.uniqueId(),
86
- reactData,
87
- internalData
88
- }
89
- },
90
- computed: {
91
- ...({} as {
92
- computeSize(): VxeComponentSizeType
93
- }),
94
- computeCalendarStyle () {
95
- const $xeCalendar = this
96
- const props = $xeCalendar
97
-
98
- const { height, width } = props
99
- const stys: Record<string, string> = {}
100
- if (width) {
101
- stys.width = toCssUnit(width)
102
- }
103
- if (height) {
104
- stys.height = toCssUnit(height)
105
- }
106
- return stys
107
- },
108
- computeIsDisabled () {
109
- return false
110
- },
111
- computeIsCalendarType () {
112
- const $xeCalendar = this
113
- const props = $xeCalendar
114
-
115
- return ['date', 'week', 'month', 'quarter', 'year'].includes(props.type)
116
- },
117
- computeDateStartTime () {
118
- const $xeCalendar = this
119
- const props = $xeCalendar
120
-
121
- return props.minDate ? XEUtils.toStringDate(props.minDate) : null
122
- },
123
- computeDateEndTime () {
124
- const $xeCalendar = this
125
- const props = $xeCalendar
126
-
127
- return props.maxDate ? XEUtils.toStringDate(props.maxDate) : null
128
- },
129
- computeSupportMultiples () {
130
- const $xeCalendar = this
131
- const props = $xeCalendar
132
-
133
- return ['date', 'week', 'month', 'quarter', 'year'].indexOf(props.type) > -1
134
- },
135
- computeMenuOpts () {
136
- const $xeCalendar = this
137
- const props = $xeCalendar
138
-
139
- return Object.assign({}, getConfig().calendar.menuConfig, props.menuConfig)
140
- },
141
- computeDateListValue (this: any) {
142
- const $xeCalendar = this
143
- const props = $xeCalendar
144
- const reactData = $xeCalendar.reactData
145
-
146
- const { multiple } = props
147
- const { selectValue } = reactData
148
- const isCalendarType = $xeCalendar.computeIsCalendarType as boolean
149
- const dateValueFormat = $xeCalendar.computeDateValueFormat as string
150
- if (multiple && selectValue && isCalendarType) {
151
- return XEUtils.toValueString(selectValue).split(',').map(item => {
152
- const date = $xeCalendar.parseDate(item, dateValueFormat)
153
- if (XEUtils.isValidDate(date)) {
154
- return date
155
- }
156
- return date
157
- }) as Date[]
158
- }
159
- return []
160
- },
161
- computeDateMultipleValue () {
162
- const $xeCalendar = this
163
-
164
- const dateListValue = $xeCalendar.computeDateListValue as Date[]
165
- const dateValueFormat = $xeCalendar.computeDateValueFormat as string
166
- return dateListValue.map(date => XEUtils.toDateString(date, dateValueFormat))
167
- },
168
- computeDateMultipleLabel () {
169
- const $xeCalendar = this
170
-
171
- const dateListValue = $xeCalendar.computeDateListValue as Date[]
172
- const dateLabelFormat = $xeCalendar.computeDateLabelFormat as string
173
- return dateListValue.map(date => XEUtils.toDateString(date, dateLabelFormat)).join(', ')
174
- },
175
- computeDateValueFormat () {
176
- const $xeCalendar = this
177
- const props = $xeCalendar
178
-
179
- const { valueFormat } = props
180
- if (valueFormat) {
181
- return valueFormat
182
- }
183
- return 'yyyy-MM-dd'
184
- },
185
- computeDateValue (this: any) {
186
- const $xeCalendar = this
187
- const reactData = $xeCalendar.reactData
188
-
189
- const { selectValue } = reactData
190
- const isCalendarType = $xeCalendar.computeIsCalendarType
191
- const dateValueFormat = $xeCalendar.computeDateValueFormat
192
- let val = null
193
- if (selectValue && isCalendarType) {
194
- const date = $xeCalendar.parseDate(selectValue, dateValueFormat)
195
- if (XEUtils.isValidDate(date)) {
196
- val = date
197
- }
198
- }
199
- return val
200
- },
201
- computeIsDisabledPrevDateBtn (this: any) {
202
- const $xeCalendar = this
203
- const reactData = $xeCalendar.reactData
204
-
205
- const dateStartTime = $xeCalendar.computeDateStartTime
206
- const { selectMonth } = reactData
207
- if (selectMonth && dateStartTime) {
208
- return selectMonth <= dateStartTime
209
- }
210
- return false
211
- },
212
- computeIsDisabledNextDateBtn (this: any) {
213
- const $xeCalendar = this
214
- const reactData = $xeCalendar.reactData
215
-
216
- const dateEndTime = $xeCalendar.computeDateEndTime
217
- const { selectMonth } = reactData
218
- if (selectMonth && dateEndTime) {
219
- return selectMonth >= dateEndTime
220
- }
221
- return false
222
- },
223
- computeDateHMSTime () {
224
- const $xeCalendar = this
225
-
226
- const dateValue = $xeCalendar.computeDateValue as Date | null
227
- return dateValue ? (dateValue.getHours() * 3600 + dateValue.getMinutes() * 60 + dateValue.getSeconds()) * 1000 : 0
228
- },
229
- computeDateLabelFormat () {
230
- const $xeCalendar = this
231
- const props = $xeCalendar
232
-
233
- const { labelFormat } = props
234
- const isCalendarType = $xeCalendar.computeIsCalendarType as boolean
235
- const dateValueFormat = $xeCalendar.computeDateValueFormat as string
236
- if (isCalendarType) {
237
- return labelFormat || dateValueFormat || getI18n(`vxe.input.date.labelFormat.${props.type}`)
238
- }
239
- return ''
240
- },
241
- computeYearList () {
242
- const $xeCalendar = this
243
- const reactData = $xeCalendar.reactData
244
- const internalData = $xeCalendar.internalData
245
-
246
- const { selectMonth, currentDate } = reactData
247
- const { yearSize } = internalData
248
- const years: VxeDatePanelDefines.DateYearItem[] = []
249
- if (selectMonth && currentDate) {
250
- const currFullYear = currentDate.getFullYear()
251
- const selectFullYear = selectMonth.getFullYear()
252
- const startYearDate = new Date(selectFullYear - selectFullYear % yearSize, 0, 1)
253
- for (let index = -4; index < yearSize + 4; index++) {
254
- const date = XEUtils.getWhatYear(startYearDate, index, 'first')
255
- const itemFullYear = date.getFullYear()
256
- years.push({
257
- date,
258
- isCurrent: true,
259
- isPrev: index < 0,
260
- isNow: currFullYear === itemFullYear,
261
- isNext: index >= yearSize,
262
- year: itemFullYear
263
- })
264
- }
265
- }
266
- return years
267
- },
268
- computeSelectDatePanelObj (this: any) {
269
- const $xeCalendar = this
270
- const reactData = $xeCalendar.reactData
271
-
272
- const isCalendarType = $xeCalendar.computeIsCalendarType
273
- let y = ''
274
- let m = ''
275
- if (isCalendarType) {
276
- const { datePanelType, selectMonth } = reactData
277
- const yearList = $xeCalendar.computeYearList as VxeDatePanelDefines.DateYearItem[]
278
- let year = ''
279
- let month
280
- if (selectMonth) {
281
- year = selectMonth.getFullYear()
282
- month = selectMonth.getMonth() + 1
283
- }
284
- if (datePanelType === 'quarter' || datePanelType === 'month') {
285
- y = `${year}`
286
- } else if (datePanelType === 'year') {
287
- y = yearList.length ? `${yearList[0].year} - ${yearList[yearList.length - 1].year}` : ''
288
- } else {
289
- y = `${year}`
290
- m = month ? getI18n(`vxe.input.date.m${month}`) : '-'
291
- }
292
- }
293
- return {
294
- y,
295
- m
296
- }
297
- },
298
- computeFirstDayOfWeek () {
299
- const $xeCalendar = this
300
- const props = $xeCalendar
301
-
302
- const { startDay } = props
303
- return XEUtils.toNumber(startDay) as VxeCalendarPropTypes.StartDay
304
- },
305
- computeWeekDatas () {
306
- const $xeCalendar = this
307
-
308
- const weeks = []
309
- const isCalendarType = $xeCalendar.computeIsCalendarType
310
- if (isCalendarType) {
311
- let sWeek = $xeCalendar.computeFirstDayOfWeek as VxeCalendarPropTypes.StartDay
312
- weeks.push(sWeek)
313
- for (let index = 0; index < 6; index++) {
314
- if (sWeek >= 6) {
315
- sWeek = 0
316
- } else {
317
- sWeek++
318
- }
319
- weeks.push(sWeek)
320
- }
321
- }
322
- return weeks
323
- },
324
- computeDateHeaders () {
325
- const $xeCalendar = this
326
-
327
- const isCalendarType = $xeCalendar.computeIsCalendarType
328
- if (isCalendarType) {
329
- const weekDatas = $xeCalendar.computeWeekDatas as number[]
330
- return weekDatas.map((day) => {
331
- return {
332
- value: day,
333
- label: getI18n(`vxe.input.date.weeks.w${day}`)
334
- }
335
- })
336
- }
337
- return []
338
- },
339
- computeWeekHeaders () {
340
- const $xeCalendar = this
341
-
342
- const isCalendarType = $xeCalendar.computeIsCalendarType
343
- if (isCalendarType) {
344
- const dateHeaders = $xeCalendar.computeDateHeaders as {
345
- value: number
346
- label: string
347
- }[]
348
- return [{ label: getI18n('vxe.input.date.weeks.w') }].concat(dateHeaders)
349
- }
350
- return []
351
- },
352
- computeYearDatas () {
353
- const $xeCalendar = this
354
-
355
- const yearList = $xeCalendar.computeYearList as VxeDatePanelDefines.DateYearItem[]
356
- return XEUtils.chunk(yearList, 4)
357
- },
358
- computeQuarterList () {
359
- const $xeCalendar = this
360
- const reactData = $xeCalendar.reactData
361
- const internalData = $xeCalendar.internalData
362
-
363
- const { selectMonth, currentDate } = reactData
364
- const { quarterSize } = internalData
365
- const quarters: VxeDatePanelDefines.DateQuarterItem[] = []
366
- if (selectMonth && currentDate) {
367
- const currFullYear = currentDate.getFullYear()
368
- const currQuarter = getDateQuarter(currentDate)
369
- const firstYear = XEUtils.getWhatYear(selectMonth, 0, 'first')
370
- const selFullYear = firstYear.getFullYear()
371
- for (let index = -2; index < quarterSize - 2; index++) {
372
- const date = XEUtils.getWhatQuarter(firstYear, index)
373
- const itemFullYear = date.getFullYear()
374
- const itemQuarter = getDateQuarter(date)
375
- const isPrev = itemFullYear < selFullYear
376
- quarters.push({
377
- date,
378
- isPrev,
379
- isCurrent: itemFullYear === selFullYear,
380
- isNow: itemFullYear === currFullYear && itemQuarter === currQuarter,
381
- isNext: !isPrev && itemFullYear > selFullYear,
382
- quarter: itemQuarter
383
- })
384
- }
385
- }
386
- return quarters
387
- },
388
- computeQuarterDatas () {
389
- const $xeCalendar = this
390
-
391
- const quarterList = $xeCalendar.computeQuarterList as VxeDatePanelDefines.DateQuarterItem[]
392
- return XEUtils.chunk(quarterList, 2)
393
- },
394
- computeMonthList () {
395
- const $xeCalendar = this
396
- const reactData = $xeCalendar.reactData
397
- const internalData = $xeCalendar.internalData
398
-
399
- const { selectMonth, currentDate } = reactData
400
- const { monthSize } = internalData
401
- const months: VxeDatePanelDefines.DateMonthItem[] = []
402
- if (selectMonth && currentDate) {
403
- const currFullYear = currentDate.getFullYear()
404
- const currMonth = currentDate.getMonth()
405
- const selFullYear = XEUtils.getWhatYear(selectMonth, 0, 'first').getFullYear()
406
- for (let index = -4; index < monthSize - 4; index++) {
407
- const date = XEUtils.getWhatYear(selectMonth, 0, index)
408
- const itemFullYear = date.getFullYear()
409
- const itemMonth = date.getMonth()
410
- const isPrev = itemFullYear < selFullYear
411
- months.push({
412
- date,
413
- isPrev,
414
- isCurrent: itemFullYear === selFullYear,
415
- isNow: itemFullYear === currFullYear && itemMonth === currMonth,
416
- isNext: !isPrev && itemFullYear > selFullYear,
417
- month: itemMonth
418
- })
419
- }
420
- }
421
- return months
422
- },
423
- computeMonthDatas () {
424
- const $xeCalendar = this
425
-
426
- const monthList = $xeCalendar.computeMonthList as VxeDatePanelDefines.DateMonthItem[]
427
- return XEUtils.chunk(monthList, 4)
428
- },
429
- computeDayList () {
430
- const $xeCalendar = this
431
- const reactData = $xeCalendar.reactData
432
-
433
- const { selectMonth, currentDate } = reactData
434
- const days: VxeDatePanelDefines.DateDayItem[] = []
435
- if (selectMonth && currentDate) {
436
- const dateHMSTime = $xeCalendar.computeDateHMSTime
437
- const weekDatas = $xeCalendar.computeWeekDatas
438
- const currFullYear = currentDate.getFullYear()
439
- const currMonth = currentDate.getMonth()
440
- const currDate = currentDate.getDate()
441
- const selFullYear = selectMonth.getFullYear()
442
- const selMonth = selectMonth.getMonth()
443
- const selDay = selectMonth.getDay()
444
- const prevOffsetDate = -weekDatas.indexOf(selDay)
445
- const startDayDate = new Date(XEUtils.getWhatDay(selectMonth, prevOffsetDate).getTime() + dateHMSTime)
446
- for (let index = 0; index < 42; index++) {
447
- const date = XEUtils.getWhatDay(startDayDate, index)
448
- const itemFullYear = date.getFullYear()
449
- const itemMonth = date.getMonth()
450
- const itemDate = date.getDate()
451
- const isPrev = date < selectMonth
452
- days.push({
453
- date,
454
- isPrev,
455
- isCurrent: itemFullYear === selFullYear && itemMonth === selMonth,
456
- isNow: itemFullYear === currFullYear && itemMonth === currMonth && itemDate === currDate,
457
- isNext: !isPrev && selMonth !== itemMonth,
458
- label: itemDate
459
- })
460
- }
461
- }
462
- return days
463
- },
464
- computeDayDatas () {
465
- const $xeCalendar = this
466
-
467
- const dayList = $xeCalendar.computeDayList as VxeDatePanelDefines.DateDayItem[]
468
- return XEUtils.chunk(dayList, 7)
469
- },
470
- computeWeekDates () {
471
- const $xeCalendar = this
472
-
473
- const dayDatas = $xeCalendar.computeDayDatas as VxeDatePanelDefines.DateDayItem[][]
474
- const firstDayOfWeek = $xeCalendar.computeFirstDayOfWeek
475
- return dayDatas.map((list) => {
476
- const firstItem = list[0]
477
- const item: VxeDatePanelDefines.DateDayItem = {
478
- date: firstItem.date,
479
- isWeekNumber: true,
480
- isPrev: false,
481
- isCurrent: false,
482
- isNow: false,
483
- isNext: false,
484
- label: XEUtils.getYearWeek(firstItem.date, firstDayOfWeek)
485
- }
486
- return [item].concat(list)
487
- })
488
- }
489
- },
490
- methods: {
491
- //
492
- // Method
493
- //
494
- dispatchEvent (type: ValueOf<VxeCalendarEmits>, params: Record<string, any>, evnt: Event | null) {
495
- const $xeCalendar = this
496
- $xeCalendar.$emit(type, createEvent(evnt, { $input: $xeCalendar }, params))
497
- },
498
- emitModel (value: any) {
499
- const $xeCalendar = this
500
-
501
- const { _events } = $xeCalendar as any
502
- $xeCalendar.$emit('input', value)
503
- if (_events && _events.modelValue) {
504
- $xeCalendar.$emit('modelValue', value)
505
- } else {
506
- $xeCalendar.$emit('model-value', value)
507
- }
508
- },
509
- parseDate (value: VxeCalendarPropTypes.ModelValue, format: string) {
510
- return XEUtils.toStringDate(value, format)
511
- },
512
- handleChange (value: string, evnt: Event | { type: string }) {
513
- const $xeCalendar = this
514
- const props = $xeCalendar
515
- const reactData = $xeCalendar.reactData
516
-
517
- reactData.inputValue = value
518
- $xeCalendar.emitModel(value)
519
- if (XEUtils.toValueString(props.value) !== value) {
520
- $xeCalendar.dispatchEvent('change', { value }, evnt as any)
521
- }
522
- },
523
- dateParseValue (value?: VxeCalendarPropTypes.ModelValue) {
524
- const $xeCalendar = this
525
- const props = $xeCalendar
526
- const reactData = $xeCalendar.reactData
527
-
528
- const { type } = props
529
- const dateLabelFormat = $xeCalendar.computeDateLabelFormat
530
- const dateValueFormat = $xeCalendar.computeDateValueFormat
531
- const firstDayOfWeek = $xeCalendar.computeFirstDayOfWeek
532
- let dValue: Date | null = null
533
- let dLabel = ''
534
- if (value) {
535
- dValue = $xeCalendar.parseDate(value, dateValueFormat)
536
- }
537
- if (XEUtils.isValidDate(dValue)) {
538
- dLabel = XEUtils.toDateString(dValue, dateLabelFormat, { firstDay: firstDayOfWeek })
539
- // 由于年份和第几周是冲突的行为,所以需要特殊处理,判断是否跨年
540
- if (dateLabelFormat && type === 'week') {
541
- const firstWeekDate = XEUtils.getWhatWeek(dValue, 0, firstDayOfWeek, firstDayOfWeek)
542
- if (firstWeekDate.getFullYear() < dValue.getFullYear()) {
543
- const yyIndex = dateLabelFormat.indexOf('yyyy')
544
- if (yyIndex > -1) {
545
- const yyNum = Number(dLabel.substring(yyIndex, yyIndex + 4))
546
- if (yyNum && !isNaN(yyNum)) {
547
- dLabel = dLabel.replace(`${yyNum}`, `${yyNum - 1}`)
548
- }
549
- }
550
- }
551
- }
552
- } else {
553
- dValue = null
554
- }
555
- reactData.datePanelValue = dValue
556
- reactData.datePanelLabel = dLabel
557
- },
558
- /**
559
- * 值变化时处理
560
- */
561
- changeValue () {
562
- const $xeCalendar = this
563
- const props = $xeCalendar
564
- const reactData = $xeCalendar.reactData
565
-
566
- const isCalendarType = $xeCalendar.computeIsCalendarType
567
- const { inputValue } = reactData
568
- if (isCalendarType) {
569
- $xeCalendar.dateParseValue(inputValue)
570
- reactData.inputValue = props.multiple ? $xeCalendar.computeDateMultipleLabel : reactData.datePanelLabel
571
- }
572
- },
573
- /**
574
- * 检查初始值
575
- */
576
- initValue () {
577
- const $xeCalendar = this
578
-
579
- const isCalendarType = $xeCalendar.computeIsCalendarType
580
- if (isCalendarType) {
581
- $xeCalendar.changeValue()
582
- }
583
- },
584
- dateCheckMonth (date: Date) {
585
- const $xeCalendar = this
586
- const reactData = $xeCalendar.reactData
587
-
588
- const month = XEUtils.getWhatMonth(date, 0, 'first')
589
- if (!XEUtils.isEqual(month, reactData.selectMonth)) {
590
- reactData.selectMonth = month
591
- }
592
- },
593
- dateChange (date: Date) {
594
- const $xeCalendar = this
595
- const props = $xeCalendar
596
- const reactData = $xeCalendar.reactData
597
-
598
- const { value, multiple } = props
599
- const dateValueFormat = $xeCalendar.computeDateValueFormat
600
- const firstDayOfWeek = $xeCalendar.computeFirstDayOfWeek
601
- if (props.type === 'week') {
602
- const sWeek = XEUtils.toNumber(props.selectDay) as VxeCalendarPropTypes.SelectDay
603
- date = XEUtils.getWhatWeek(date, 0, sWeek, firstDayOfWeek)
604
- }
605
- const inpVal = XEUtils.toDateString(date, dateValueFormat, { firstDay: firstDayOfWeek })
606
- $xeCalendar.dateCheckMonth(date)
607
- reactData.selectValue = date
608
- if (multiple) {
609
- // 如果为多选
610
- const dateMultipleValue = $xeCalendar.computeDateMultipleValue
611
- // 如果是日期类型
612
- if (dateMultipleValue.some(val => XEUtils.isEqual(val, inpVal))) {
613
- $xeCalendar.handleChange(dateMultipleValue.filter(val => !XEUtils.isEqual(val, inpVal)).join(','), { type: 'update' })
614
- } else {
615
- $xeCalendar.handleChange(dateMultipleValue.concat([inpVal]).join(','), { type: 'update' })
616
- }
617
- } else {
618
- // 如果为单选
619
- if (!XEUtils.isEqual(value, inpVal)) {
620
- $xeCalendar.handleChange(inpVal, { type: 'update' })
621
- }
622
- }
623
- },
624
- dateMonthHandle (date: Date, offsetMonth: number) {
625
- const $xeCalendar = this
626
- const reactData = $xeCalendar.reactData
627
-
628
- reactData.selectMonth = XEUtils.getWhatMonth(date, offsetMonth, 'first')
629
- },
630
- dateNowHandle () {
631
- const $xeCalendar = this
632
- const reactData = $xeCalendar.reactData
633
-
634
- const currentDate = XEUtils.getWhatDay(Date.now(), 0, 'first')
635
- reactData.currentDate = currentDate
636
- $xeCalendar.dateMonthHandle(currentDate, 0)
637
- },
638
- dateToggleYearTypeEvent () {
639
- const $xeCalendar = this
640
- const reactData = $xeCalendar.reactData
641
-
642
- reactData.datePanelType = 'year'
643
- },
644
- dateToggleMonthTypeEvent (evnt: MouseEvent) {
645
- const $xeCalendar = this
646
- const reactData = $xeCalendar.reactData
647
-
648
- let { datePanelType } = reactData
649
- if (datePanelType === 'month' || datePanelType === 'quarter') {
650
- datePanelType = 'year'
651
- } else {
652
- datePanelType = 'month'
653
- }
654
- reactData.datePanelType = datePanelType
655
- $xeCalendar.changeViewEvent(evnt)
656
- },
657
- datePrevEvent (evnt: Event) {
658
- const $xeCalendar = this
659
- const props = $xeCalendar
660
- const reactData = $xeCalendar.reactData
661
- const internalData = $xeCalendar.internalData
662
-
663
- const { type } = props
664
- const { datePanelType, selectMonth } = reactData
665
- const { yearSize } = internalData
666
- const isDisabledPrevDateBtn = $xeCalendar.computeIsDisabledPrevDateBtn
667
- if (!isDisabledPrevDateBtn) {
668
- if (type === 'year') {
669
- reactData.selectMonth = XEUtils.getWhatYear(selectMonth, -yearSize, 'first')
670
- } else if (type === 'month' || type === 'quarter') {
671
- if (datePanelType === 'year') {
672
- reactData.selectMonth = XEUtils.getWhatYear(selectMonth, -yearSize, 'first')
673
- } else {
674
- reactData.selectMonth = XEUtils.getWhatYear(selectMonth, -1, 'first')
675
- }
676
- } else {
677
- if (datePanelType === 'year') {
678
- reactData.selectMonth = XEUtils.getWhatYear(selectMonth, -yearSize, 'first')
679
- } else if (datePanelType === 'month') {
680
- reactData.selectMonth = XEUtils.getWhatYear(selectMonth, -1, 'first')
681
- } else {
682
- reactData.selectMonth = XEUtils.getWhatMonth(selectMonth, -1, 'first')
683
- }
684
- }
685
- $xeCalendar.dispatchEvent('date-prev', { type }, evnt)
686
- $xeCalendar.changeViewEvent(evnt)
687
- }
688
- },
689
- dateTodayMonthEvent (evnt: Event) {
690
- const $xeCalendar = this
691
- const props = $xeCalendar
692
- const reactData = $xeCalendar.reactData
693
-
694
- $xeCalendar.dateNowHandle()
695
- if (!props.multiple) {
696
- $xeCalendar.dateChange(reactData.currentDate)
697
- }
698
- $xeCalendar.dispatchEvent('date-today', { type: props.type }, evnt)
699
- $xeCalendar.changeViewEvent(evnt)
700
- },
701
- dateNextEvent (evnt: Event) {
702
- const $xeCalendar = this
703
- const props = $xeCalendar
704
- const reactData = $xeCalendar.reactData
705
- const internalData = $xeCalendar.internalData
706
-
707
- const { type } = props
708
- const { datePanelType, selectMonth } = reactData
709
- const { yearSize } = internalData
710
- const isDisabledNextDateBtn = $xeCalendar.computeIsDisabledNextDateBtn
711
- if (!isDisabledNextDateBtn) {
712
- if (type === 'year') {
713
- reactData.selectMonth = XEUtils.getWhatYear(selectMonth, yearSize, 'first')
714
- } else if (type === 'month' || type === 'quarter') {
715
- if (datePanelType === 'year') {
716
- reactData.selectMonth = XEUtils.getWhatYear(selectMonth, yearSize, 'first')
717
- } else {
718
- reactData.selectMonth = XEUtils.getWhatYear(selectMonth, 1, 'first')
719
- }
720
- } else {
721
- if (datePanelType === 'year') {
722
- reactData.selectMonth = XEUtils.getWhatYear(selectMonth, yearSize, 'first')
723
- } else if (datePanelType === 'month') {
724
- reactData.selectMonth = XEUtils.getWhatYear(selectMonth, 1, 'first')
725
- } else {
726
- reactData.selectMonth = XEUtils.getWhatMonth(selectMonth, 1, 'first')
727
- }
728
- }
729
- $xeCalendar.dispatchEvent('date-next', { type }, evnt)
730
- $xeCalendar.changeViewEvent(evnt)
731
- }
732
- },
733
- isDateDisabled (item: { date: Date }) {
734
- const $xeCalendar = this
735
- const props = $xeCalendar
736
- const reactData = $xeCalendar.reactData
737
-
738
- const { disabledMethod } = props
739
- const { datePanelType } = reactData
740
- return disabledMethod && disabledMethod({ type: datePanelType, viewType: datePanelType, date: item.date, $calendar: $xeCalendar as VxeCalendarConstructor })
741
- },
742
- changeViewEvent (evnt: Event | null) {
743
- const $xeCalendar = this
744
- const reactData = $xeCalendar.reactData
745
-
746
- const { datePanelType } = reactData
747
- const yearDatas = $xeCalendar.computeYearDatas
748
- const quarterDatas = $xeCalendar.computeQuarterDatas
749
- const monthDatas = $xeCalendar.computeMonthDatas
750
- const weekDates = $xeCalendar.computeWeekDates
751
- const dayDatas = $xeCalendar.computeDayDatas
752
- const viewDates: Date[] = []
753
- let dataList: { date: Date }[][] = []
754
- switch (datePanelType) {
755
- case 'year':
756
- dataList = yearDatas
757
- break
758
- case 'quarter':
759
- dataList = quarterDatas
760
- break
761
- case 'month':
762
- dataList = monthDatas
763
- break
764
- case 'week':
765
- dataList = weekDates
766
- break
767
- case 'day':
768
- dataList = dayDatas
769
- break
770
- }
771
- dataList.forEach(rows => {
772
- rows.forEach(item => {
773
- viewDates.push(item.date)
774
- })
775
- })
776
- $xeCalendar.dispatchEvent('view-change', { viewType: datePanelType, viewDates }, evnt)
777
- },
778
- dateSelectItem (date: Date) {
779
- const $xeCalendar = this
780
- const props = $xeCalendar
781
- const reactData = $xeCalendar.reactData
782
-
783
- const { type } = props
784
- const { datePanelType } = reactData
785
- if (type === 'month') {
786
- if (datePanelType === 'year') {
787
- reactData.datePanelType = 'month'
788
- $xeCalendar.dateCheckMonth(date)
789
- $xeCalendar.changeViewEvent(null)
790
- } else {
791
- $xeCalendar.dateChange(date)
792
- }
793
- } else if (type === 'year') {
794
- $xeCalendar.dateChange(date)
795
- } else if (type === 'quarter') {
796
- if (datePanelType === 'year') {
797
- reactData.datePanelType = 'quarter'
798
- $xeCalendar.dateCheckMonth(date)
799
- $xeCalendar.changeViewEvent(null)
800
- } else {
801
- $xeCalendar.dateChange(date)
802
- }
803
- } else {
804
- if (datePanelType === 'month') {
805
- reactData.datePanelType = type === 'week' ? type : 'day'
806
- $xeCalendar.dateCheckMonth(date)
807
- $xeCalendar.changeViewEvent(null)
808
- } else if (datePanelType === 'year') {
809
- reactData.datePanelType = 'month'
810
- $xeCalendar.dateCheckMonth(date)
811
- $xeCalendar.changeViewEvent(null)
812
- } else {
813
- $xeCalendar.dateChange(date)
814
- }
815
- }
816
- },
817
- dateClickEvent (evnt: MouseEvent, item: VxeDatePanelDefines.DateYearItem | VxeDatePanelDefines.DateQuarterItem | VxeDatePanelDefines.DateMonthItem | VxeDatePanelDefines.DateDayItem) {
818
- const $xeCalendar = this
819
- const props = $xeCalendar
820
- const reactData = $xeCalendar.reactData
821
-
822
- const { type } = props
823
- const { datePanelType } = reactData
824
- const { date } = item
825
- if (!$xeCalendar.isDateDisabled(item)) {
826
- $xeCalendar.dateSelectItem(date)
827
- $xeCalendar.dispatchEvent('cell-click', { date, type, viewType: datePanelType }, evnt)
828
- }
829
- },
830
- datContextmenuEvent (evnt: MouseEvent, item: VxeDatePanelDefines.DateYearItem | VxeDatePanelDefines.DateQuarterItem | VxeDatePanelDefines.DateMonthItem | VxeDatePanelDefines.DateDayItem) {
831
- const $xeCalendar = this
832
- const props = $xeCalendar
833
- const reactData = $xeCalendar.reactData
834
-
835
- const { type } = props
836
- const { datePanelType } = reactData
837
- const { menuConfig } = props
838
- const menuOpts = $xeCalendar.computeMenuOpts
839
- if (menuConfig ? isEnableConf(menuOpts) : menuOpts.enabled) {
840
- const { options, visibleMethod } = menuOpts
841
- const { date } = item
842
- if (!visibleMethod || visibleMethod({ $calendar: $xeCalendar as VxeCalendarConstructor, options, date, type, viewType: datePanelType })) {
843
- if (VxeUI.contextMenu) {
844
- VxeUI.contextMenu.openByEvent(evnt, {
845
- options,
846
- events: {
847
- optionClick (eventParams) {
848
- const { option } = eventParams
849
- const gMenuOpts = menus.get(option.code)
850
- const cmMethod = gMenuOpts ? gMenuOpts.calendarMenuMethod : null
851
- const params = { menu: option, date, type, viewType: datePanelType, $event: evnt, $calendar: $xeCalendar as VxeCalendarConstructor }
852
- if (cmMethod) {
853
- cmMethod(params, evnt)
854
- }
855
- $xeCalendar.dispatchEvent('menu-click', params, eventParams.$event)
856
- }
857
- }
858
- })
859
- }
860
- }
861
- }
862
- $xeCalendar.dispatchEvent('cell-menu', { date: item.date, type, viewType: datePanelType }, evnt)
863
- },
864
- dateMoveDay (offsetDay: Date) {
865
- const $xeCalendar = this
866
-
867
- if (!$xeCalendar.isDateDisabled({ date: offsetDay })) {
868
- const dayList = $xeCalendar.computeDayList
869
- if (!dayList.some((item) => XEUtils.isDateSame(item.date, offsetDay, 'yyyyMMdd'))) {
870
- $xeCalendar.dateCheckMonth(offsetDay)
871
- }
872
- $xeCalendar.dateParseValue(offsetDay)
873
- }
874
- },
875
- dateMoveYear (offsetYear: Date) {
876
- const $xeCalendar = this
877
-
878
- if (!$xeCalendar.isDateDisabled({ date: offsetYear })) {
879
- const yearList = $xeCalendar.computeYearList
880
- if (!yearList.some((item) => XEUtils.isDateSame(item.date, offsetYear, 'yyyy'))) {
881
- $xeCalendar.dateCheckMonth(offsetYear)
882
- }
883
- $xeCalendar.dateParseValue(offsetYear)
884
- }
885
- },
886
- dateMoveQuarter (offsetQuarter: Date) {
887
- const $xeCalendar = this
888
-
889
- if (!$xeCalendar.isDateDisabled({ date: offsetQuarter })) {
890
- const quarterList = $xeCalendar.computeQuarterList
891
- if (!quarterList.some((item) => XEUtils.isDateSame(item.date, offsetQuarter, 'yyyyq'))) {
892
- $xeCalendar.dateCheckMonth(offsetQuarter)
893
- }
894
- $xeCalendar.dateParseValue(offsetQuarter)
895
- }
896
- },
897
- dateMoveMonth (offsetMonth: Date) {
898
- const $xeCalendar = this
899
-
900
- if (!$xeCalendar.isDateDisabled({ date: offsetMonth })) {
901
- const monthList = $xeCalendar.computeMonthList
902
- if (!monthList.some((item) => XEUtils.isDateSame(item.date, offsetMonth, 'yyyyMM'))) {
903
- $xeCalendar.dateCheckMonth(offsetMonth)
904
- }
905
- $xeCalendar.dateParseValue(offsetMonth)
906
- }
907
- },
908
- dateMouseenterEvent (item: VxeDatePanelDefines.DateYearItem | VxeDatePanelDefines.DateQuarterItem | VxeDatePanelDefines.DateMonthItem | VxeDatePanelDefines.DateDayItem) {
909
- const $xeCalendar = this
910
- const reactData = $xeCalendar.reactData
911
-
912
- if (!$xeCalendar.isDateDisabled(item)) {
913
- const { datePanelType } = reactData
914
- if (datePanelType === 'month') {
915
- $xeCalendar.dateMoveMonth(item.date)
916
- } else if (datePanelType === 'quarter') {
917
- $xeCalendar.dateMoveQuarter(item.date)
918
- } else if (datePanelType === 'year') {
919
- $xeCalendar.dateMoveYear(item.date)
920
- } else {
921
- $xeCalendar.dateMoveDay(item.date)
922
- }
923
- }
924
- },
925
- dateMouseleaveEvent () {
926
- const $xeCalendar = this
927
- const reactData = $xeCalendar.reactData
928
-
929
- reactData.datePanelValue = null
930
- },
931
- dateConfirmEvent () {
932
- },
933
- dateOpenPanel () {
934
- const $xeCalendar = this
935
- const props = $xeCalendar
936
- const reactData = $xeCalendar.reactData
937
-
938
- const { type } = props
939
- const dateValue = $xeCalendar.computeDateValue
940
- if (['year', 'quarter', 'month', 'week'].indexOf(type) > -1) {
941
- reactData.datePanelType = type as 'year' | 'quarter' | 'month' | 'week'
942
- } else {
943
- reactData.datePanelType = 'day'
944
- }
945
- reactData.currentDate = XEUtils.getWhatDay(Date.now(), 0, 'first')
946
- if (dateValue) {
947
- $xeCalendar.dateMonthHandle(dateValue, 0)
948
- $xeCalendar.dateParseValue(dateValue)
949
- } else {
950
- $xeCalendar.dateNowHandle()
951
- }
952
- },
953
-
954
- //
955
- // Render
956
- //
957
- renderDateLabel (h: CreateElement, item: VxeDatePanelDefines.DateYearItem | VxeDatePanelDefines.DateQuarterItem | VxeDatePanelDefines.DateMonthItem | VxeDatePanelDefines.DateDayItem, label: string | number) {
958
- const $xeCalendar = this
959
- const props = $xeCalendar
960
- const reactData = $xeCalendar.reactData
961
-
962
- const { festivalMethod } = props
963
- if (festivalMethod) {
964
- const { datePanelType } = reactData
965
- const festivalRest = festivalMethod({ type: datePanelType, viewType: datePanelType, date: item.date, $calendar: $xeCalendar as VxeCalendarConstructor })
966
- const festivalItem = festivalRest ? (XEUtils.isString(festivalRest) ? { label: festivalRest } : festivalRest) : {}
967
- const extraItem = festivalItem.extra ? (XEUtils.isString(festivalItem.extra) ? { label: festivalItem.extra } : festivalItem.extra) : null
968
- const labels = [
969
- h('span', {
970
- class: ['vxe-calendar--label', {
971
- 'is-notice': festivalItem.notice
972
- }]
973
- }, extraItem && extraItem.label
974
- ? [
975
- h('span', {
976
- class: 'vxe-calendar--label--number'
977
- }, `${label || ''}`),
978
- h('span', {
979
- class: ['vxe-calendar--label--extra', extraItem.important ? 'is-important' : '', extraItem.className],
980
- style: extraItem.style
981
- }, XEUtils.toValueString(extraItem.label))
982
- ]
983
- : [`${label || ''}`])
984
- ]
985
- const festivalLabel = festivalItem.label
986
- if (festivalLabel) {
987
- // 默认最多支持3个节日重叠
988
- const festivalLabels = XEUtils.toValueString(festivalLabel).split(',')
989
- labels.push(
990
- h('span', {
991
- class: ['vxe-calendar--festival', festivalItem.important ? 'is-important' : '', festivalItem.className],
992
- style: festivalItem.style
993
- }, [
994
- festivalLabels.length > 1
995
- ? h('span', {
996
- class: ['vxe-calendar--festival--overlap', `overlap--${festivalLabels.length}`]
997
- }, festivalLabels.map(label => h('span', label.substring(0, 3))))
998
- : h('span', {
999
- class: 'vxe-calendar--festival--label'
1000
- }, festivalLabels[0].substring(0, 3))
1001
- ])
1002
- )
1003
- }
1004
- return labels
1005
- }
1006
- return `${label || ''}`
1007
- },
1008
- renderDateDayTable (h: CreateElement) {
1009
- const $xeCalendar = this
1010
- const props = $xeCalendar
1011
- const reactData = $xeCalendar.reactData
1012
-
1013
- const { multiple, cellStyle } = props
1014
- const { datePanelType, datePanelValue } = reactData
1015
- const dateValue = $xeCalendar.computeDateValue
1016
- const dateHeaders = $xeCalendar.computeDateHeaders
1017
- const dayDatas = $xeCalendar.computeDayDatas
1018
- const dateListValue = $xeCalendar.computeDateListValue
1019
- const matchFormat = 'yyyyMMdd'
1020
- return [
1021
- h('div', {
1022
- class: ['vxe-calendar--view-wrapper', `type--${datePanelType}`]
1023
- }, [
1024
- h('div', {
1025
- class: 'vxe-calendar--view-header',
1026
- style: {
1027
- height: `${100 / (dayDatas.length + 1)}%`
1028
- }
1029
- }, [
1030
- h('div', {
1031
- class: 'vxe-calendar--view-row'
1032
- }, dateHeaders.map((item) => {
1033
- return h('div', {
1034
- class: 'vxe-calendar--view-item',
1035
- style: {
1036
- width: `${100 / dateHeaders.length}%`
1037
- }
1038
- }, [
1039
- h('div', {
1040
- class: 'vxe-calendar--view-item-inner'
1041
- }, [
1042
- h('div', {
1043
- class: 'vxe-calendar--view-item-label'
1044
- }, item.label)
1045
- ])
1046
- ])
1047
- }))
1048
- ]),
1049
- h('div', {
1050
- class: 'vxe-calendar--view-body'
1051
- }, dayDatas.map((rows) => {
1052
- return h('div', {
1053
- class: 'vxe-calendar--view-row',
1054
- style: {
1055
- height: `${100 / dayDatas.length}%`
1056
- }
1057
- }, rows.map((item) => {
1058
- const isSelected = multiple ? dateListValue.some(val => XEUtils.isDateSame(val, item.date, matchFormat)) : XEUtils.isDateSame(dateValue, item.date, matchFormat)
1059
- return h('div', {
1060
- class: ['vxe-calendar--view-item', {
1061
- 'is--prev': item.isPrev,
1062
- 'is--current': item.isCurrent,
1063
- 'is--now': item.isNow,
1064
- 'is--next': item.isNext,
1065
- 'is--disabled': $xeCalendar.isDateDisabled(item),
1066
- 'is--selected': isSelected,
1067
- 'is--hover': XEUtils.isDateSame(datePanelValue, item.date, matchFormat)
1068
- }],
1069
- style: Object.assign({}, XEUtils.isFunction(cellStyle) ? cellStyle({ type: datePanelType, viewType: datePanelType, date: item.date, $calendar: $xeCalendar as VxeCalendarConstructor }) : cellStyle, {
1070
- width: `${100 / rows.length}%`
1071
- }),
1072
- on: {
1073
- click: (evnt: MouseEvent) => $xeCalendar.dateClickEvent(evnt, item),
1074
- contextmenu: (evnt: MouseEvent) => $xeCalendar.datContextmenuEvent(evnt, item),
1075
- mouseenter: () => $xeCalendar.dateMouseenterEvent(item),
1076
- mouseleave: $xeCalendar.dateMouseleaveEvent
1077
- }
1078
- }, [
1079
- h('div', {
1080
- class: 'vxe-calendar--view-item-inner'
1081
- }, $xeCalendar.renderDateLabel(h, item, item.label))
1082
- ])
1083
- }))
1084
- }))
1085
- ])
1086
- ]
1087
- },
1088
- renderDateWeekTable (h: CreateElement) {
1089
- const $xeCalendar = this
1090
- const props = $xeCalendar
1091
- const reactData = $xeCalendar.reactData
1092
-
1093
- const { multiple, cellStyle } = props
1094
- const { datePanelType, datePanelValue } = reactData
1095
- const dateValue = $xeCalendar.computeDateValue
1096
- const weekHeaders = $xeCalendar.computeWeekHeaders
1097
- const weekDates = $xeCalendar.computeWeekDates
1098
- const dateListValue = $xeCalendar.computeDateListValue
1099
- const matchFormat = 'yyyyMMdd'
1100
- return [
1101
- h('div', {
1102
- class: ['vxe-calendar--view-wrapper', `type--${datePanelType}`]
1103
- }, [
1104
- h('div', {
1105
- class: 'vxe-calendar--view-header',
1106
- style: {
1107
- height: `${100 / (weekDates.length + 1)}%`
1108
- }
1109
- }, [
1110
- h('div', {
1111
- class: 'vxe-calendar--view-row'
1112
- }, weekHeaders.map((item, rIndex) => {
1113
- return h('div', {
1114
- class: 'vxe-calendar--view-item',
1115
- style: {
1116
- width: `${rIndex ? 13 : 9}%`
1117
- }
1118
- }, [
1119
- h('div', {
1120
- class: 'vxe-calendar--view-item-inner'
1121
- }, [
1122
- h('div', {
1123
- class: 'vxe-calendar--view-item-label'
1124
- }, item.label)
1125
- ])
1126
- ])
1127
- }))
1128
- ]),
1129
- h('div', {
1130
- class: 'vxe-calendar--view-body'
1131
- }, weekDates.map((rows) => {
1132
- const isSelected = multiple ? rows.some((item) => dateListValue.some(val => XEUtils.isDateSame(val, item.date, matchFormat))) : rows.some((item) => XEUtils.isDateSame(dateValue, item.date, matchFormat))
1133
- const isHover = rows.some((item) => XEUtils.isDateSame(datePanelValue, item.date, matchFormat))
1134
- const isNowWeek = rows.some(item => item.isNow)
1135
- return h('div', {
1136
- class: 'vxe-calendar--view-row',
1137
- style: {
1138
- height: `${100 / weekDates.length}%`
1139
- }
1140
- }, rows.map((item, rIndex) => {
1141
- return h('div', {
1142
- class: ['vxe-calendar--view-item', {
1143
- 'is--prev': item.isPrev,
1144
- 'is--current': item.isCurrent,
1145
- 'is--now': rIndex ? item.isNow : isNowWeek,
1146
- 'is--next': item.isNext,
1147
- 'is--disabled': $xeCalendar.isDateDisabled(item),
1148
- 'is--selected': isSelected,
1149
- 'is--hover': isHover
1150
- }],
1151
- style: Object.assign({}, XEUtils.isFunction(cellStyle) ? cellStyle({ type: datePanelType, viewType: datePanelType, date: item.date, $calendar: $xeCalendar as VxeCalendarConstructor }) : cellStyle, {
1152
- width: `${rIndex ? 13 : 9}%`
1153
- }),
1154
- on: {
1155
- click: (evnt: MouseEvent) => $xeCalendar.dateClickEvent(evnt, item),
1156
- contextmenu: (evnt: MouseEvent) => $xeCalendar.datContextmenuEvent(evnt, item),
1157
- mouseenter: () => $xeCalendar.dateMouseenterEvent(item),
1158
- mouseleave: $xeCalendar.dateMouseleaveEvent
1159
- }
1160
- }, [
1161
- h('div', {
1162
- class: 'vxe-calendar--view-item-inner'
1163
- }, $xeCalendar.renderDateLabel(h, item, item.label))
1164
- ])
1165
- }))
1166
- }))
1167
- ])
1168
- ]
1169
- },
1170
- renderDateMonthTable (h: CreateElement) {
1171
- const $xeCalendar = this
1172
- const props = $xeCalendar
1173
- const reactData = $xeCalendar.reactData
1174
-
1175
- const { multiple, cellStyle } = props
1176
- const { datePanelType, datePanelValue } = reactData
1177
- const dateValue = $xeCalendar.computeDateValue
1178
- const monthDatas = $xeCalendar.computeMonthDatas as VxeDatePanelDefines.DateMonthItem[][]
1179
- const dateListValue = $xeCalendar.computeDateListValue
1180
- const matchFormat = 'yyyyMM'
1181
- return [
1182
- h('div', {
1183
- class: ['vxe-calendar--view-wrapper', `type--${datePanelType}`]
1184
- }, [
1185
- h('div', {
1186
- class: 'vxe-calendar--view-body'
1187
- }, monthDatas.map((rows) => {
1188
- return h('div', {
1189
- class: 'vxe-calendar--view-row',
1190
- style: {
1191
- height: `${100 / monthDatas.length}%`
1192
- }
1193
- }, rows.map((item) => {
1194
- const isSelected = multiple ? dateListValue.some(val => XEUtils.isDateSame(val, item.date, matchFormat)) : XEUtils.isDateSame(dateValue, item.date, matchFormat)
1195
- return h('div', {
1196
- class: ['vxe-calendar--view-item', {
1197
- 'is--prev': item.isPrev,
1198
- 'is--current': item.isCurrent,
1199
- 'is--now': item.isNow,
1200
- 'is--next': item.isNext,
1201
- 'is--disabled': $xeCalendar.isDateDisabled(item),
1202
- 'is--selected': isSelected,
1203
- 'is--hover': XEUtils.isDateSame(datePanelValue, item.date, matchFormat)
1204
- }],
1205
- style: Object.assign({}, XEUtils.isFunction(cellStyle) ? cellStyle({ type: datePanelType, viewType: datePanelType, date: item.date, $calendar: $xeCalendar as VxeCalendarConstructor }) : cellStyle, {
1206
- width: `${100 / rows.length}%`
1207
- }),
1208
- on: {
1209
- click: (evnt: MouseEvent) => $xeCalendar.dateClickEvent(evnt, item),
1210
- contextmenu: (evnt: MouseEvent) => $xeCalendar.datContextmenuEvent(evnt, item),
1211
- mouseenter: () => $xeCalendar.dateMouseenterEvent(item),
1212
- mouseleave: $xeCalendar.dateMouseleaveEvent
1213
- }
1214
- }, [
1215
- h('div', {
1216
- class: 'vxe-calendar--view-item-inner'
1217
- }, $xeCalendar.renderDateLabel(h, item, getI18n(`vxe.input.date.months.m${item.month}`)))
1218
- ])
1219
- }))
1220
- }))
1221
- ])
1222
- ]
1223
- },
1224
- renderDateQuarterTable (h: CreateElement) {
1225
- const $xeCalendar = this
1226
- const props = $xeCalendar
1227
- const reactData = $xeCalendar.reactData
1228
-
1229
- const { multiple, cellStyle } = props
1230
- const { datePanelType, datePanelValue } = reactData
1231
- const dateValue = $xeCalendar.computeDateValue
1232
- const quarterDatas = $xeCalendar.computeQuarterDatas
1233
- const dateListValue = $xeCalendar.computeDateListValue
1234
- const matchFormat = 'yyyyq'
1235
- return [
1236
- h('div', {
1237
- class: ['vxe-calendar--view-wrapper', `type--${datePanelType}`]
1238
- }, [
1239
- h('div', {
1240
- class: 'vxe-calendar--view-body'
1241
- }, quarterDatas.map((rows) => {
1242
- return h('div', {
1243
- class: 'vxe-calendar--view-row',
1244
- style: {
1245
- height: `${100 / quarterDatas.length}%`
1246
- }
1247
- }, rows.map((item) => {
1248
- const isSelected = multiple ? dateListValue.some(val => XEUtils.isDateSame(val, item.date, matchFormat)) : XEUtils.isDateSame(dateValue, item.date, matchFormat)
1249
- return h('div', {
1250
- class: ['vxe-calendar--view-item', {
1251
- 'is--prev': item.isPrev,
1252
- 'is--current': item.isCurrent,
1253
- 'is--now': item.isNow,
1254
- 'is--next': item.isNext,
1255
- 'is--disabled': $xeCalendar.isDateDisabled(item),
1256
- 'is--selected': isSelected,
1257
- 'is--hover': XEUtils.isDateSame(datePanelValue, item.date, matchFormat)
1258
- }],
1259
- style: Object.assign({}, XEUtils.isFunction(cellStyle) ? cellStyle({ type: datePanelType, viewType: datePanelType, date: item.date, $calendar: $xeCalendar as VxeCalendarConstructor }) : cellStyle, {
1260
- width: `${100 / rows.length}%`
1261
- }),
1262
- on: {
1263
- click: (evnt: MouseEvent) => $xeCalendar.dateClickEvent(evnt, item),
1264
- contextmenu: (evnt: MouseEvent) => $xeCalendar.datContextmenuEvent(evnt, item),
1265
- mouseenter: () => $xeCalendar.dateMouseenterEvent(item),
1266
- mouseleave: $xeCalendar.dateMouseleaveEvent
1267
- }
1268
- }, [
1269
- h('div', {
1270
- class: 'vxe-calendar--view-item-inner'
1271
- }, $xeCalendar.renderDateLabel(h, item, getI18n(`vxe.input.date.quarters.q${item.quarter}`)))
1272
- ])
1273
- }))
1274
- }))
1275
- ])
1276
- ]
1277
- },
1278
- renderDateYearTable (h: CreateElement) {
1279
- const $xeCalendar = this
1280
- const props = $xeCalendar
1281
- const reactData = $xeCalendar.reactData
1282
-
1283
- const { multiple, cellStyle } = props
1284
- const { datePanelType, datePanelValue } = reactData
1285
- const dateValue = $xeCalendar.computeDateValue
1286
- const yearDatas = $xeCalendar.computeYearDatas
1287
- const dateListValue = $xeCalendar.computeDateListValue
1288
- const matchFormat = 'yyyy'
1289
- return [
1290
- h('div', {
1291
- class: ['vxe-calendar--view-wrapper', `type--${datePanelType}`]
1292
- }, [
1293
- h('div', {
1294
- class: 'vxe-calendar--view-body'
1295
- }, yearDatas.map((rows) => {
1296
- return h('div', {
1297
- class: 'vxe-calendar--view-row',
1298
- style: {
1299
- height: `${100 / yearDatas.length}%`
1300
- }
1301
- }, rows.map((item) => {
1302
- const isSelected = multiple ? dateListValue.some(val => XEUtils.isDateSame(val, item.date, matchFormat)) : XEUtils.isDateSame(dateValue, item.date, matchFormat)
1303
- return h('div', {
1304
- class: ['vxe-calendar--view-item', {
1305
- 'is--prev': item.isPrev,
1306
- 'is--current': item.isCurrent,
1307
- 'is--now': item.isNow,
1308
- 'is--next': item.isNext,
1309
- 'is--disabled': $xeCalendar.isDateDisabled(item),
1310
- 'is--selected': isSelected,
1311
- 'is--hover': XEUtils.isDateSame(datePanelValue, item.date, matchFormat)
1312
- }],
1313
- style: Object.assign({}, XEUtils.isFunction(cellStyle) ? cellStyle({ type: datePanelType, viewType: datePanelType, date: item.date, $calendar: $xeCalendar as VxeCalendarConstructor }) : cellStyle, {
1314
- width: `${100 / rows.length}%`
1315
- }),
1316
- on: {
1317
- click: (evnt: MouseEvent) => $xeCalendar.dateClickEvent(evnt, item),
1318
- contextmenu: (evnt: MouseEvent) => $xeCalendar.datContextmenuEvent(evnt, item),
1319
- mouseenter: () => $xeCalendar.dateMouseenterEvent(item),
1320
- mouseleave: $xeCalendar.dateMouseleaveEvent
1321
- }
1322
- }, [
1323
- h('div', {
1324
- class: 'vxe-calendar--view-item-inner'
1325
- }, $xeCalendar.renderDateLabel(h, item, item.year))
1326
- ])
1327
- }))
1328
- }))
1329
- ])
1330
- ]
1331
- },
1332
- renderDateTable (h: CreateElement) {
1333
- const $xeCalendar = this
1334
- const reactData = $xeCalendar.reactData
1335
-
1336
- const { datePanelType } = reactData
1337
- switch (datePanelType) {
1338
- case 'week' :
1339
- return $xeCalendar.renderDateWeekTable(h)
1340
- case 'month' :
1341
- return $xeCalendar.renderDateMonthTable(h)
1342
- case 'quarter' :
1343
- return $xeCalendar.renderDateQuarterTable(h)
1344
- case 'year' :
1345
- return $xeCalendar.renderDateYearTable(h)
1346
- }
1347
- return $xeCalendar.renderDateDayTable(h)
1348
- },
1349
- renderDatePanel (h: CreateElement) {
1350
- const $xeCalendar = this
1351
- const props = $xeCalendar
1352
- const reactData = $xeCalendar.reactData
1353
-
1354
- const { multiple } = props
1355
- const { datePanelType } = reactData
1356
- const isDisabledPrevDateBtn = $xeCalendar.computeIsDisabledPrevDateBtn
1357
- const isDisabledNextDateBtn = $xeCalendar.computeIsDisabledNextDateBtn
1358
- const selectDatePanelObj = $xeCalendar.computeSelectDatePanelObj
1359
- return [
1360
- h('div', {
1361
- class: 'vxe-calendar--header'
1362
- }, [
1363
- h('div', {
1364
- class: 'vxe-calendar--type-wrapper'
1365
- }, [
1366
- datePanelType === 'year'
1367
- ? h(VxeButtonComponent, {
1368
- props: {
1369
- disabled: datePanelType === 'year',
1370
- content: selectDatePanelObj.y
1371
- }
1372
- })
1373
- : h('span', {
1374
- class: 'vxe-calendar--date-picker-btns'
1375
- }, [
1376
- h(VxeButtonComponent, {
1377
- props: {
1378
- content: selectDatePanelObj.y
1379
- },
1380
- on: {
1381
- click: $xeCalendar.dateToggleYearTypeEvent
1382
- }
1383
- }),
1384
- selectDatePanelObj.m
1385
- ? h(VxeButtonComponent, {
1386
- props: {
1387
- content: selectDatePanelObj.m
1388
- },
1389
- on: {
1390
- click: $xeCalendar.dateToggleMonthTypeEvent
1391
- }
1392
- })
1393
- : renderEmptyElement($xeCalendar)
1394
- ])
1395
- ]),
1396
- h('div', {
1397
- class: 'vxe-calendar--btn-wrapper'
1398
- }, [
1399
- h(VxeButtonComponent, {
1400
- props: {
1401
- disabled: isDisabledPrevDateBtn,
1402
- icon: 'vxe-icon-caret-left'
1403
- },
1404
- on: {
1405
- click: $xeCalendar.datePrevEvent
1406
- }
1407
- }),
1408
- h(VxeButtonComponent, {
1409
- props: {
1410
- icon: 'vxe-icon-dot'
1411
- },
1412
- on: {
1413
- click: $xeCalendar.dateTodayMonthEvent
1414
- }
1415
- }),
1416
- h(VxeButtonComponent, {
1417
- props: {
1418
- disabled: isDisabledNextDateBtn,
1419
- icon: 'vxe-icon-caret-right'
1420
- },
1421
- on: {
1422
- click: $xeCalendar.dateNextEvent
1423
- }
1424
- }),
1425
- multiple && $xeCalendar.computeSupportMultiples
1426
- ? h('span', {
1427
- class: 'vxe-calendar--btn vxe-calendar--confirm-btn'
1428
- }, [
1429
- h('button', {
1430
- class: 'vxe-calendar--confirm',
1431
- attrs: {
1432
- type: 'button'
1433
- },
1434
- on: {
1435
- click: $xeCalendar.dateConfirmEvent
1436
- }
1437
- }, getI18n('vxe.button.confirm'))
1438
- ])
1439
- : null
1440
- ])
1441
- ]),
1442
- h('div', {
1443
- class: 'vxe-calendar--body'
1444
- }, $xeCalendar.renderDateTable(h))
1445
- ]
1446
- },
1447
- renderVN (h: CreateElement): VNode {
1448
- const $xeCalendar = this
1449
- const props = $xeCalendar
1450
-
1451
- const { className, type } = props
1452
- const vSize = $xeCalendar.computeSize
1453
- const isDisabled = $xeCalendar.computeIsDisabled
1454
- const calendarStyle = $xeCalendar.computeCalendarStyle
1455
- return h('div', {
1456
- ref: 'refElem',
1457
- class: ['vxe-calendar', `type--${type}`, className, {
1458
- [`size--${vSize}`]: vSize,
1459
- 'is--disabled': isDisabled
1460
- }],
1461
- style: calendarStyle
1462
- }, [
1463
- $xeCalendar.renderDatePanel(h)
1464
- ])
1465
- }
1466
- },
1467
- watch: {
1468
- value (val) {
1469
- const $xeCalendar = this
1470
- const reactData = $xeCalendar.reactData
1471
-
1472
- reactData.inputValue = val
1473
- $xeCalendar.changeValue()
1474
- },
1475
- type () {
1476
- const $xeCalendar = this
1477
- const reactData = $xeCalendar.reactData
1478
-
1479
- // 切换类型是重置内置变量
1480
- Object.assign(reactData, {
1481
- selectValue: null,
1482
- inputValue: null,
1483
- datePanelValue: null,
1484
- datePanelLabel: '',
1485
- datePanelType: 'day',
1486
- selectMonth: null,
1487
- currentDate: null
1488
- })
1489
- $xeCalendar.initValue()
1490
- $xeCalendar.dateOpenPanel()
1491
- },
1492
- computeDateLabelFormat () {
1493
- const $xeCalendar = this
1494
- const props = $xeCalendar
1495
- const reactData = $xeCalendar.reactData
1496
-
1497
- const isCalendarType = $xeCalendar.computeIsCalendarType
1498
- if (isCalendarType) {
1499
- $xeCalendar.dateParseValue(reactData.datePanelValue)
1500
- reactData.inputValue = props.multiple ? $xeCalendar.computeDateMultipleLabel : reactData.datePanelLabel
1501
- }
1502
- }
1503
- },
1504
- created () {
1505
- const $xeCalendar = this
1506
- const props = $xeCalendar
1507
- const reactData = $xeCalendar.reactData
1508
-
1509
- reactData.selectValue = props.value
1510
- reactData.inputValue = props.value
1511
- $xeCalendar.initValue()
1512
- },
1513
- mounted () {
1514
- const $xeCalendar = this
1515
- const props = $xeCalendar
1516
-
1517
- const { menuConfig } = props
1518
- const VxeUIContextMenu = VxeUI.getComponent('VxeContextMenu')
1519
- if (menuConfig && !VxeUIContextMenu) {
1520
- errLog('vxe.error.reqComp', ['vxe-context-menu'])
1521
- }
1522
- $xeCalendar.dateOpenPanel()
1523
- },
1524
- render (this: any, h) {
1525
- return this.renderVN(h)
1526
- }
1527
- }) /* 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, createEvent, globalMixins, renderEmptyElement } from '../../ui'
5
+ import { getDateQuarter } from '../../date-panel/src/util'
6
+ import { toCssUnit } from '../../ui/src/dom'
7
+ import { isEnableConf } from '../../ui/src/utils'
8
+ import { errLog } from '../../ui/src/log'
9
+ import VxeButtonComponent from '../../button/src/button'
10
+
11
+ import type { VxeCalendarEmits, CalendarInternalData, CalendarReactData, ValueOf, VxeCalendarPropTypes, VxeComponentSizeType, VxeDatePanelDefines, VxeCalendarConstructor } from '../../../types'
12
+
13
+ const { menus, getConfig, getI18n } = VxeUI
14
+
15
+ export default /* define-vxe-component start */ defineVxeComponent({
16
+ name: 'VxeCalendar',
17
+ mixins: [
18
+ globalMixins.sizeMixin
19
+ ],
20
+ props: {
21
+ value: [String, Number, Date] as PropType<VxeCalendarPropTypes.ModelValue>,
22
+ type: {
23
+ type: String as PropType<VxeCalendarPropTypes.Type>,
24
+ default: 'date'
25
+ },
26
+ className: String as PropType<VxeCalendarPropTypes.ClassName>,
27
+ size: {
28
+ type: String as PropType<VxeCalendarPropTypes.Size>,
29
+ default: () => getConfig().calendar.size || getConfig().size
30
+ },
31
+ multiple: Boolean as PropType<VxeCalendarPropTypes.Multiple>,
32
+
33
+ width: [String, Number] as PropType<VxeCalendarPropTypes.Width>,
34
+ height: [String, Number] as PropType<VxeCalendarPropTypes.Height>,
35
+
36
+ // date、week、month、quarter、year
37
+ minDate: {
38
+ type: [String, Number, Date] as PropType<VxeCalendarPropTypes.MinDate>,
39
+ default: () => getConfig().calendar.minDate
40
+ },
41
+ maxDate: {
42
+ type: [String, Number, Date] as PropType<VxeCalendarPropTypes.MaxDate>,
43
+ default: () => getConfig().calendar.maxDate
44
+ },
45
+ startDay: {
46
+ type: [String, Number] as PropType<VxeCalendarPropTypes.StartDay>,
47
+ default: () => getConfig().calendar.startDay
48
+ },
49
+ labelFormat: String as PropType<VxeCalendarPropTypes.LabelFormat>,
50
+ valueFormat: String as PropType<VxeCalendarPropTypes.ValueFormat>,
51
+ festivalMethod: {
52
+ type: Function as PropType<VxeCalendarPropTypes.FestivalMethod>,
53
+ default: () => getConfig().calendar.festivalMethod
54
+ },
55
+ disabledMethod: {
56
+ type: Function as PropType<VxeCalendarPropTypes.DisabledMethod>,
57
+ default: () => getConfig().calendar.disabledMethod
58
+ },
59
+ cellStyle: [Object, Function] as PropType<VxeCalendarPropTypes.CellStyle>,
60
+ menuConfig: Object as PropType<VxeCalendarPropTypes.MenuConfig>,
61
+
62
+ // week
63
+ selectDay: {
64
+ type: [String, Number] as PropType<VxeCalendarPropTypes.SelectDay>,
65
+ default: () => getConfig().calendar.selectDay
66
+ }
67
+ },
68
+ data () {
69
+ const reactData: CalendarReactData = {
70
+ selectValue: null,
71
+ inputValue: null,
72
+ datePanelValue: null,
73
+ datePanelLabel: '',
74
+ datePanelType: 'day',
75
+ selectMonth: null,
76
+ currentDate: null
77
+ }
78
+ const internalData: CalendarInternalData = {
79
+ yearSize: 12,
80
+ monthSize: 20,
81
+ quarterSize: 8
82
+ }
83
+
84
+ return {
85
+ xID: XEUtils.uniqueId(),
86
+ reactData,
87
+ internalData
88
+ }
89
+ },
90
+ computed: {
91
+ ...({} as {
92
+ computeSize(): VxeComponentSizeType
93
+ }),
94
+ computeCalendarStyle () {
95
+ const $xeCalendar = this
96
+ const props = $xeCalendar
97
+
98
+ const { height, width } = props
99
+ const stys: Record<string, string> = {}
100
+ if (width) {
101
+ stys.width = toCssUnit(width)
102
+ }
103
+ if (height) {
104
+ stys.height = toCssUnit(height)
105
+ }
106
+ return stys
107
+ },
108
+ computeIsDisabled () {
109
+ return false
110
+ },
111
+ computeIsCalendarType () {
112
+ const $xeCalendar = this
113
+ const props = $xeCalendar
114
+
115
+ return ['date', 'week', 'month', 'quarter', 'year'].includes(props.type)
116
+ },
117
+ computeDateStartTime () {
118
+ const $xeCalendar = this
119
+ const props = $xeCalendar
120
+
121
+ return props.minDate ? XEUtils.toStringDate(props.minDate) : null
122
+ },
123
+ computeDateEndTime () {
124
+ const $xeCalendar = this
125
+ const props = $xeCalendar
126
+
127
+ return props.maxDate ? XEUtils.toStringDate(props.maxDate) : null
128
+ },
129
+ computeSupportMultiples () {
130
+ const $xeCalendar = this
131
+ const props = $xeCalendar
132
+
133
+ return ['date', 'week', 'month', 'quarter', 'year'].indexOf(props.type) > -1
134
+ },
135
+ computeMenuOpts () {
136
+ const $xeCalendar = this
137
+ const props = $xeCalendar
138
+
139
+ return Object.assign({}, getConfig().calendar.menuConfig, props.menuConfig)
140
+ },
141
+ computeDateListValue (this: any) {
142
+ const $xeCalendar = this
143
+ const props = $xeCalendar
144
+ const reactData = $xeCalendar.reactData
145
+
146
+ const { multiple } = props
147
+ const { selectValue } = reactData
148
+ const isCalendarType = $xeCalendar.computeIsCalendarType as boolean
149
+ const dateValueFormat = $xeCalendar.computeDateValueFormat as string
150
+ if (multiple && selectValue && isCalendarType) {
151
+ return XEUtils.toValueString(selectValue).split(',').map(item => {
152
+ const date = $xeCalendar.parseDate(item, dateValueFormat)
153
+ if (XEUtils.isValidDate(date)) {
154
+ return date
155
+ }
156
+ return date
157
+ }) as Date[]
158
+ }
159
+ return []
160
+ },
161
+ computeDateMultipleValue () {
162
+ const $xeCalendar = this
163
+
164
+ const dateListValue = $xeCalendar.computeDateListValue as Date[]
165
+ const dateValueFormat = $xeCalendar.computeDateValueFormat as string
166
+ return dateListValue.map(date => XEUtils.toDateString(date, dateValueFormat))
167
+ },
168
+ computeDateMultipleLabel () {
169
+ const $xeCalendar = this
170
+
171
+ const dateListValue = $xeCalendar.computeDateListValue as Date[]
172
+ const dateLabelFormat = $xeCalendar.computeDateLabelFormat as string
173
+ return dateListValue.map(date => XEUtils.toDateString(date, dateLabelFormat)).join(', ')
174
+ },
175
+ computeDateValueFormat () {
176
+ const $xeCalendar = this
177
+ const props = $xeCalendar
178
+
179
+ const { valueFormat } = props
180
+ if (valueFormat) {
181
+ return valueFormat
182
+ }
183
+ return 'yyyy-MM-dd'
184
+ },
185
+ computeDateValue (this: any) {
186
+ const $xeCalendar = this
187
+ const reactData = $xeCalendar.reactData
188
+
189
+ const { selectValue } = reactData
190
+ const isCalendarType = $xeCalendar.computeIsCalendarType
191
+ const dateValueFormat = $xeCalendar.computeDateValueFormat
192
+ let val = null
193
+ if (selectValue && isCalendarType) {
194
+ const date = $xeCalendar.parseDate(selectValue, dateValueFormat)
195
+ if (XEUtils.isValidDate(date)) {
196
+ val = date
197
+ }
198
+ }
199
+ return val
200
+ },
201
+ computeIsDisabledPrevDateBtn (this: any) {
202
+ const $xeCalendar = this
203
+ const reactData = $xeCalendar.reactData
204
+
205
+ const dateStartTime = $xeCalendar.computeDateStartTime
206
+ const { selectMonth } = reactData
207
+ if (selectMonth && dateStartTime) {
208
+ return selectMonth <= dateStartTime
209
+ }
210
+ return false
211
+ },
212
+ computeIsDisabledNextDateBtn (this: any) {
213
+ const $xeCalendar = this
214
+ const reactData = $xeCalendar.reactData
215
+
216
+ const dateEndTime = $xeCalendar.computeDateEndTime
217
+ const { selectMonth } = reactData
218
+ if (selectMonth && dateEndTime) {
219
+ return selectMonth >= dateEndTime
220
+ }
221
+ return false
222
+ },
223
+ computeDateHMSTime () {
224
+ const $xeCalendar = this
225
+
226
+ const dateValue = $xeCalendar.computeDateValue as Date | null
227
+ return dateValue ? (dateValue.getHours() * 3600 + dateValue.getMinutes() * 60 + dateValue.getSeconds()) * 1000 : 0
228
+ },
229
+ computeDateLabelFormat () {
230
+ const $xeCalendar = this
231
+ const props = $xeCalendar
232
+
233
+ const { labelFormat } = props
234
+ const isCalendarType = $xeCalendar.computeIsCalendarType as boolean
235
+ const dateValueFormat = $xeCalendar.computeDateValueFormat as string
236
+ if (isCalendarType) {
237
+ return labelFormat || dateValueFormat || getI18n(`vxe.input.date.labelFormat.${props.type}`)
238
+ }
239
+ return ''
240
+ },
241
+ computeYearList () {
242
+ const $xeCalendar = this
243
+ const reactData = $xeCalendar.reactData
244
+ const internalData = $xeCalendar.internalData
245
+
246
+ const { selectMonth, currentDate } = reactData
247
+ const { yearSize } = internalData
248
+ const years: VxeDatePanelDefines.DateYearItem[] = []
249
+ if (selectMonth && currentDate) {
250
+ const currFullYear = currentDate.getFullYear()
251
+ const selectFullYear = selectMonth.getFullYear()
252
+ const startYearDate = new Date(selectFullYear - selectFullYear % yearSize, 0, 1)
253
+ for (let index = -4; index < yearSize + 4; index++) {
254
+ const date = XEUtils.getWhatYear(startYearDate, index, 'first')
255
+ const itemFullYear = date.getFullYear()
256
+ years.push({
257
+ date,
258
+ isCurrent: true,
259
+ isPrev: index < 0,
260
+ isNow: currFullYear === itemFullYear,
261
+ isNext: index >= yearSize,
262
+ year: itemFullYear
263
+ })
264
+ }
265
+ }
266
+ return years
267
+ },
268
+ computeSelectDatePanelObj (this: any) {
269
+ const $xeCalendar = this
270
+ const reactData = $xeCalendar.reactData
271
+
272
+ const isCalendarType = $xeCalendar.computeIsCalendarType
273
+ let y = ''
274
+ let m = ''
275
+ if (isCalendarType) {
276
+ const { datePanelType, selectMonth } = reactData
277
+ const yearList = $xeCalendar.computeYearList as VxeDatePanelDefines.DateYearItem[]
278
+ let year = ''
279
+ let month
280
+ if (selectMonth) {
281
+ year = selectMonth.getFullYear()
282
+ month = selectMonth.getMonth() + 1
283
+ }
284
+ if (datePanelType === 'quarter' || datePanelType === 'month') {
285
+ y = `${year}`
286
+ } else if (datePanelType === 'year') {
287
+ y = yearList.length ? `${yearList[0].year} - ${yearList[yearList.length - 1].year}` : ''
288
+ } else {
289
+ y = `${year}`
290
+ m = month ? getI18n(`vxe.input.date.m${month}`) : '-'
291
+ }
292
+ }
293
+ return {
294
+ y,
295
+ m
296
+ }
297
+ },
298
+ computeFirstDayOfWeek () {
299
+ const $xeCalendar = this
300
+ const props = $xeCalendar
301
+
302
+ const { startDay } = props
303
+ return XEUtils.toNumber(startDay) as VxeCalendarPropTypes.StartDay
304
+ },
305
+ computeWeekDatas () {
306
+ const $xeCalendar = this
307
+
308
+ const weeks = []
309
+ const isCalendarType = $xeCalendar.computeIsCalendarType
310
+ if (isCalendarType) {
311
+ let sWeek = $xeCalendar.computeFirstDayOfWeek as VxeCalendarPropTypes.StartDay
312
+ weeks.push(sWeek)
313
+ for (let index = 0; index < 6; index++) {
314
+ if (sWeek >= 6) {
315
+ sWeek = 0
316
+ } else {
317
+ sWeek++
318
+ }
319
+ weeks.push(sWeek)
320
+ }
321
+ }
322
+ return weeks
323
+ },
324
+ computeDateHeaders () {
325
+ const $xeCalendar = this
326
+
327
+ const isCalendarType = $xeCalendar.computeIsCalendarType
328
+ if (isCalendarType) {
329
+ const weekDatas = $xeCalendar.computeWeekDatas as number[]
330
+ return weekDatas.map((day) => {
331
+ return {
332
+ value: day,
333
+ label: getI18n(`vxe.input.date.weeks.w${day}`)
334
+ }
335
+ })
336
+ }
337
+ return []
338
+ },
339
+ computeWeekHeaders () {
340
+ const $xeCalendar = this
341
+
342
+ const isCalendarType = $xeCalendar.computeIsCalendarType
343
+ if (isCalendarType) {
344
+ const dateHeaders = $xeCalendar.computeDateHeaders as {
345
+ value: number
346
+ label: string
347
+ }[]
348
+ return [{ label: getI18n('vxe.input.date.weeks.w') }].concat(dateHeaders)
349
+ }
350
+ return []
351
+ },
352
+ computeYearDatas () {
353
+ const $xeCalendar = this
354
+
355
+ const yearList = $xeCalendar.computeYearList as VxeDatePanelDefines.DateYearItem[]
356
+ return XEUtils.chunk(yearList, 4)
357
+ },
358
+ computeQuarterList () {
359
+ const $xeCalendar = this
360
+ const reactData = $xeCalendar.reactData
361
+ const internalData = $xeCalendar.internalData
362
+
363
+ const { selectMonth, currentDate } = reactData
364
+ const { quarterSize } = internalData
365
+ const quarters: VxeDatePanelDefines.DateQuarterItem[] = []
366
+ if (selectMonth && currentDate) {
367
+ const currFullYear = currentDate.getFullYear()
368
+ const currQuarter = getDateQuarter(currentDate)
369
+ const firstYear = XEUtils.getWhatYear(selectMonth, 0, 'first')
370
+ const selFullYear = firstYear.getFullYear()
371
+ for (let index = -2; index < quarterSize - 2; index++) {
372
+ const date = XEUtils.getWhatQuarter(firstYear, index)
373
+ const itemFullYear = date.getFullYear()
374
+ const itemQuarter = getDateQuarter(date)
375
+ const isPrev = itemFullYear < selFullYear
376
+ quarters.push({
377
+ date,
378
+ isPrev,
379
+ isCurrent: itemFullYear === selFullYear,
380
+ isNow: itemFullYear === currFullYear && itemQuarter === currQuarter,
381
+ isNext: !isPrev && itemFullYear > selFullYear,
382
+ quarter: itemQuarter
383
+ })
384
+ }
385
+ }
386
+ return quarters
387
+ },
388
+ computeQuarterDatas () {
389
+ const $xeCalendar = this
390
+
391
+ const quarterList = $xeCalendar.computeQuarterList as VxeDatePanelDefines.DateQuarterItem[]
392
+ return XEUtils.chunk(quarterList, 2)
393
+ },
394
+ computeMonthList () {
395
+ const $xeCalendar = this
396
+ const reactData = $xeCalendar.reactData
397
+ const internalData = $xeCalendar.internalData
398
+
399
+ const { selectMonth, currentDate } = reactData
400
+ const { monthSize } = internalData
401
+ const months: VxeDatePanelDefines.DateMonthItem[] = []
402
+ if (selectMonth && currentDate) {
403
+ const currFullYear = currentDate.getFullYear()
404
+ const currMonth = currentDate.getMonth()
405
+ const selFullYear = XEUtils.getWhatYear(selectMonth, 0, 'first').getFullYear()
406
+ for (let index = -4; index < monthSize - 4; index++) {
407
+ const date = XEUtils.getWhatYear(selectMonth, 0, index)
408
+ const itemFullYear = date.getFullYear()
409
+ const itemMonth = date.getMonth()
410
+ const isPrev = itemFullYear < selFullYear
411
+ months.push({
412
+ date,
413
+ isPrev,
414
+ isCurrent: itemFullYear === selFullYear,
415
+ isNow: itemFullYear === currFullYear && itemMonth === currMonth,
416
+ isNext: !isPrev && itemFullYear > selFullYear,
417
+ month: itemMonth
418
+ })
419
+ }
420
+ }
421
+ return months
422
+ },
423
+ computeMonthDatas () {
424
+ const $xeCalendar = this
425
+
426
+ const monthList = $xeCalendar.computeMonthList as VxeDatePanelDefines.DateMonthItem[]
427
+ return XEUtils.chunk(monthList, 4)
428
+ },
429
+ computeDayList () {
430
+ const $xeCalendar = this
431
+ const reactData = $xeCalendar.reactData
432
+
433
+ const { selectMonth, currentDate } = reactData
434
+ const days: VxeDatePanelDefines.DateDayItem[] = []
435
+ if (selectMonth && currentDate) {
436
+ const dateHMSTime = $xeCalendar.computeDateHMSTime
437
+ const weekDatas = $xeCalendar.computeWeekDatas
438
+ const currFullYear = currentDate.getFullYear()
439
+ const currMonth = currentDate.getMonth()
440
+ const currDate = currentDate.getDate()
441
+ const selFullYear = selectMonth.getFullYear()
442
+ const selMonth = selectMonth.getMonth()
443
+ const selDay = selectMonth.getDay()
444
+ const prevOffsetDate = -weekDatas.indexOf(selDay)
445
+ const startDayDate = new Date(XEUtils.getWhatDay(selectMonth, prevOffsetDate).getTime() + dateHMSTime)
446
+ for (let index = 0; index < 42; index++) {
447
+ const date = XEUtils.getWhatDay(startDayDate, index)
448
+ const itemFullYear = date.getFullYear()
449
+ const itemMonth = date.getMonth()
450
+ const itemDate = date.getDate()
451
+ const isPrev = date < selectMonth
452
+ days.push({
453
+ date,
454
+ isPrev,
455
+ isCurrent: itemFullYear === selFullYear && itemMonth === selMonth,
456
+ isNow: itemFullYear === currFullYear && itemMonth === currMonth && itemDate === currDate,
457
+ isNext: !isPrev && selMonth !== itemMonth,
458
+ label: itemDate
459
+ })
460
+ }
461
+ }
462
+ return days
463
+ },
464
+ computeDayDatas () {
465
+ const $xeCalendar = this
466
+
467
+ const dayList = $xeCalendar.computeDayList as VxeDatePanelDefines.DateDayItem[]
468
+ return XEUtils.chunk(dayList, 7)
469
+ },
470
+ computeWeekDates () {
471
+ const $xeCalendar = this
472
+
473
+ const dayDatas = $xeCalendar.computeDayDatas as VxeDatePanelDefines.DateDayItem[][]
474
+ const firstDayOfWeek = $xeCalendar.computeFirstDayOfWeek
475
+ return dayDatas.map((list) => {
476
+ const firstItem = list[0]
477
+ const item: VxeDatePanelDefines.DateDayItem = {
478
+ date: firstItem.date,
479
+ isWeekNumber: true,
480
+ isPrev: false,
481
+ isCurrent: false,
482
+ isNow: false,
483
+ isNext: false,
484
+ label: XEUtils.getYearWeek(firstItem.date, firstDayOfWeek)
485
+ }
486
+ return [item].concat(list)
487
+ })
488
+ }
489
+ },
490
+ methods: {
491
+ //
492
+ // Method
493
+ //
494
+ dispatchEvent (type: ValueOf<VxeCalendarEmits>, params: Record<string, any>, evnt: Event | null) {
495
+ const $xeCalendar = this
496
+ $xeCalendar.$emit(type, createEvent(evnt, { $input: $xeCalendar }, params))
497
+ },
498
+ emitModel (value: any) {
499
+ const $xeCalendar = this
500
+
501
+ const { _events } = $xeCalendar as any
502
+ $xeCalendar.$emit('input', value)
503
+ if (_events && _events.modelValue) {
504
+ $xeCalendar.$emit('modelValue', value)
505
+ } else {
506
+ $xeCalendar.$emit('model-value', value)
507
+ }
508
+ },
509
+ parseDate (value: VxeCalendarPropTypes.ModelValue, format: string) {
510
+ return XEUtils.toStringDate(value, format)
511
+ },
512
+ handleChange (value: string, evnt: Event | { type: string }) {
513
+ const $xeCalendar = this
514
+ const props = $xeCalendar
515
+ const reactData = $xeCalendar.reactData
516
+
517
+ reactData.inputValue = value
518
+ $xeCalendar.emitModel(value)
519
+ if (XEUtils.toValueString(props.value) !== value) {
520
+ $xeCalendar.dispatchEvent('change', { value }, evnt as any)
521
+ }
522
+ },
523
+ dateParseValue (value?: VxeCalendarPropTypes.ModelValue) {
524
+ const $xeCalendar = this
525
+ const props = $xeCalendar
526
+ const reactData = $xeCalendar.reactData
527
+
528
+ const { type } = props
529
+ const dateLabelFormat = $xeCalendar.computeDateLabelFormat
530
+ const dateValueFormat = $xeCalendar.computeDateValueFormat
531
+ const firstDayOfWeek = $xeCalendar.computeFirstDayOfWeek
532
+ let dValue: Date | null = null
533
+ let dLabel = ''
534
+ if (value) {
535
+ dValue = $xeCalendar.parseDate(value, dateValueFormat)
536
+ }
537
+ if (XEUtils.isValidDate(dValue)) {
538
+ dLabel = XEUtils.toDateString(dValue, dateLabelFormat, { firstDay: firstDayOfWeek })
539
+ // 由于年份和第几周是冲突的行为,所以需要特殊处理,判断是否跨年
540
+ if (dateLabelFormat && type === 'week') {
541
+ const firstWeekDate = XEUtils.getWhatWeek(dValue, 0, firstDayOfWeek, firstDayOfWeek)
542
+ if (firstWeekDate.getFullYear() < dValue.getFullYear()) {
543
+ const yyIndex = dateLabelFormat.indexOf('yyyy')
544
+ if (yyIndex > -1) {
545
+ const yyNum = Number(dLabel.substring(yyIndex, yyIndex + 4))
546
+ if (yyNum && !isNaN(yyNum)) {
547
+ dLabel = dLabel.replace(`${yyNum}`, `${yyNum - 1}`)
548
+ }
549
+ }
550
+ }
551
+ }
552
+ } else {
553
+ dValue = null
554
+ }
555
+ reactData.datePanelValue = dValue
556
+ reactData.datePanelLabel = dLabel
557
+ },
558
+ /**
559
+ * 值变化时处理
560
+ */
561
+ changeValue () {
562
+ const $xeCalendar = this
563
+ const props = $xeCalendar
564
+ const reactData = $xeCalendar.reactData
565
+
566
+ const isCalendarType = $xeCalendar.computeIsCalendarType
567
+ const { inputValue } = reactData
568
+ if (isCalendarType) {
569
+ $xeCalendar.dateParseValue(inputValue)
570
+ reactData.inputValue = props.multiple ? $xeCalendar.computeDateMultipleLabel : reactData.datePanelLabel
571
+ }
572
+ },
573
+ /**
574
+ * 检查初始值
575
+ */
576
+ initValue () {
577
+ const $xeCalendar = this
578
+
579
+ const isCalendarType = $xeCalendar.computeIsCalendarType
580
+ if (isCalendarType) {
581
+ $xeCalendar.changeValue()
582
+ }
583
+ },
584
+ dateCheckMonth (date: Date) {
585
+ const $xeCalendar = this
586
+ const reactData = $xeCalendar.reactData
587
+
588
+ const month = XEUtils.getWhatMonth(date, 0, 'first')
589
+ if (!XEUtils.isEqual(month, reactData.selectMonth)) {
590
+ reactData.selectMonth = month
591
+ }
592
+ },
593
+ dateChange (date: Date) {
594
+ const $xeCalendar = this
595
+ const props = $xeCalendar
596
+ const reactData = $xeCalendar.reactData
597
+
598
+ const { value, multiple } = props
599
+ const dateValueFormat = $xeCalendar.computeDateValueFormat
600
+ const firstDayOfWeek = $xeCalendar.computeFirstDayOfWeek
601
+ if (props.type === 'week') {
602
+ const sWeek = XEUtils.toNumber(props.selectDay) as VxeCalendarPropTypes.SelectDay
603
+ date = XEUtils.getWhatWeek(date, 0, sWeek, firstDayOfWeek)
604
+ }
605
+ const inpVal = XEUtils.toDateString(date, dateValueFormat, { firstDay: firstDayOfWeek })
606
+ $xeCalendar.dateCheckMonth(date)
607
+ reactData.selectValue = date
608
+ if (multiple) {
609
+ // 如果为多选
610
+ const dateMultipleValue = $xeCalendar.computeDateMultipleValue
611
+ // 如果是日期类型
612
+ if (dateMultipleValue.some(val => XEUtils.isEqual(val, inpVal))) {
613
+ $xeCalendar.handleChange(dateMultipleValue.filter(val => !XEUtils.isEqual(val, inpVal)).join(','), { type: 'update' })
614
+ } else {
615
+ $xeCalendar.handleChange(dateMultipleValue.concat([inpVal]).join(','), { type: 'update' })
616
+ }
617
+ } else {
618
+ // 如果为单选
619
+ if (!XEUtils.isEqual(value, inpVal)) {
620
+ $xeCalendar.handleChange(inpVal, { type: 'update' })
621
+ }
622
+ }
623
+ },
624
+ dateMonthHandle (date: Date, offsetMonth: number) {
625
+ const $xeCalendar = this
626
+ const reactData = $xeCalendar.reactData
627
+
628
+ reactData.selectMonth = XEUtils.getWhatMonth(date, offsetMonth, 'first')
629
+ },
630
+ dateNowHandle () {
631
+ const $xeCalendar = this
632
+ const reactData = $xeCalendar.reactData
633
+
634
+ const currentDate = XEUtils.getWhatDay(Date.now(), 0, 'first')
635
+ reactData.currentDate = currentDate
636
+ $xeCalendar.dateMonthHandle(currentDate, 0)
637
+ },
638
+ dateToggleYearTypeEvent () {
639
+ const $xeCalendar = this
640
+ const reactData = $xeCalendar.reactData
641
+
642
+ reactData.datePanelType = 'year'
643
+ },
644
+ dateToggleMonthTypeEvent (evnt: MouseEvent) {
645
+ const $xeCalendar = this
646
+ const reactData = $xeCalendar.reactData
647
+
648
+ let { datePanelType } = reactData
649
+ if (datePanelType === 'month' || datePanelType === 'quarter') {
650
+ datePanelType = 'year'
651
+ } else {
652
+ datePanelType = 'month'
653
+ }
654
+ reactData.datePanelType = datePanelType
655
+ $xeCalendar.changeViewEvent(evnt)
656
+ },
657
+ datePrevEvent (evnt: Event) {
658
+ const $xeCalendar = this
659
+ const props = $xeCalendar
660
+ const reactData = $xeCalendar.reactData
661
+ const internalData = $xeCalendar.internalData
662
+
663
+ const { type } = props
664
+ const { datePanelType, selectMonth } = reactData
665
+ const { yearSize } = internalData
666
+ const isDisabledPrevDateBtn = $xeCalendar.computeIsDisabledPrevDateBtn
667
+ if (!isDisabledPrevDateBtn) {
668
+ if (type === 'year') {
669
+ reactData.selectMonth = XEUtils.getWhatYear(selectMonth, -yearSize, 'first')
670
+ } else if (type === 'month' || type === 'quarter') {
671
+ if (datePanelType === 'year') {
672
+ reactData.selectMonth = XEUtils.getWhatYear(selectMonth, -yearSize, 'first')
673
+ } else {
674
+ reactData.selectMonth = XEUtils.getWhatYear(selectMonth, -1, 'first')
675
+ }
676
+ } else {
677
+ if (datePanelType === 'year') {
678
+ reactData.selectMonth = XEUtils.getWhatYear(selectMonth, -yearSize, 'first')
679
+ } else if (datePanelType === 'month') {
680
+ reactData.selectMonth = XEUtils.getWhatYear(selectMonth, -1, 'first')
681
+ } else {
682
+ reactData.selectMonth = XEUtils.getWhatMonth(selectMonth, -1, 'first')
683
+ }
684
+ }
685
+ $xeCalendar.dispatchEvent('date-prev', { type }, evnt)
686
+ $xeCalendar.changeViewEvent(evnt)
687
+ }
688
+ },
689
+ dateTodayMonthEvent (evnt: Event) {
690
+ const $xeCalendar = this
691
+ const props = $xeCalendar
692
+ const reactData = $xeCalendar.reactData
693
+
694
+ $xeCalendar.dateNowHandle()
695
+ if (!props.multiple) {
696
+ $xeCalendar.dateChange(reactData.currentDate)
697
+ }
698
+ $xeCalendar.dispatchEvent('date-today', { type: props.type }, evnt)
699
+ $xeCalendar.changeViewEvent(evnt)
700
+ },
701
+ dateNextEvent (evnt: Event) {
702
+ const $xeCalendar = this
703
+ const props = $xeCalendar
704
+ const reactData = $xeCalendar.reactData
705
+ const internalData = $xeCalendar.internalData
706
+
707
+ const { type } = props
708
+ const { datePanelType, selectMonth } = reactData
709
+ const { yearSize } = internalData
710
+ const isDisabledNextDateBtn = $xeCalendar.computeIsDisabledNextDateBtn
711
+ if (!isDisabledNextDateBtn) {
712
+ if (type === 'year') {
713
+ reactData.selectMonth = XEUtils.getWhatYear(selectMonth, yearSize, 'first')
714
+ } else if (type === 'month' || type === 'quarter') {
715
+ if (datePanelType === 'year') {
716
+ reactData.selectMonth = XEUtils.getWhatYear(selectMonth, yearSize, 'first')
717
+ } else {
718
+ reactData.selectMonth = XEUtils.getWhatYear(selectMonth, 1, 'first')
719
+ }
720
+ } else {
721
+ if (datePanelType === 'year') {
722
+ reactData.selectMonth = XEUtils.getWhatYear(selectMonth, yearSize, 'first')
723
+ } else if (datePanelType === 'month') {
724
+ reactData.selectMonth = XEUtils.getWhatYear(selectMonth, 1, 'first')
725
+ } else {
726
+ reactData.selectMonth = XEUtils.getWhatMonth(selectMonth, 1, 'first')
727
+ }
728
+ }
729
+ $xeCalendar.dispatchEvent('date-next', { type }, evnt)
730
+ $xeCalendar.changeViewEvent(evnt)
731
+ }
732
+ },
733
+ isDateDisabled (item: { date: Date }) {
734
+ const $xeCalendar = this
735
+ const props = $xeCalendar
736
+ const reactData = $xeCalendar.reactData
737
+
738
+ const { disabledMethod } = props
739
+ const { datePanelType } = reactData
740
+ return disabledMethod && disabledMethod({ type: datePanelType, viewType: datePanelType, date: item.date, $calendar: $xeCalendar as VxeCalendarConstructor })
741
+ },
742
+ changeViewEvent (evnt: Event | null) {
743
+ const $xeCalendar = this
744
+ const reactData = $xeCalendar.reactData
745
+
746
+ const { datePanelType } = reactData
747
+ const yearDatas = $xeCalendar.computeYearDatas
748
+ const quarterDatas = $xeCalendar.computeQuarterDatas
749
+ const monthDatas = $xeCalendar.computeMonthDatas
750
+ const weekDates = $xeCalendar.computeWeekDates
751
+ const dayDatas = $xeCalendar.computeDayDatas
752
+ const viewDates: Date[] = []
753
+ let dataList: { date: Date }[][] = []
754
+ switch (datePanelType) {
755
+ case 'year':
756
+ dataList = yearDatas
757
+ break
758
+ case 'quarter':
759
+ dataList = quarterDatas
760
+ break
761
+ case 'month':
762
+ dataList = monthDatas
763
+ break
764
+ case 'week':
765
+ dataList = weekDates
766
+ break
767
+ case 'day':
768
+ dataList = dayDatas
769
+ break
770
+ }
771
+ dataList.forEach(rows => {
772
+ rows.forEach(item => {
773
+ viewDates.push(item.date)
774
+ })
775
+ })
776
+ $xeCalendar.dispatchEvent('view-change', { viewType: datePanelType, viewDates }, evnt)
777
+ },
778
+ dateSelectItem (date: Date) {
779
+ const $xeCalendar = this
780
+ const props = $xeCalendar
781
+ const reactData = $xeCalendar.reactData
782
+
783
+ const { type } = props
784
+ const { datePanelType } = reactData
785
+ if (type === 'month') {
786
+ if (datePanelType === 'year') {
787
+ reactData.datePanelType = 'month'
788
+ $xeCalendar.dateCheckMonth(date)
789
+ $xeCalendar.changeViewEvent(null)
790
+ } else {
791
+ $xeCalendar.dateChange(date)
792
+ }
793
+ } else if (type === 'year') {
794
+ $xeCalendar.dateChange(date)
795
+ } else if (type === 'quarter') {
796
+ if (datePanelType === 'year') {
797
+ reactData.datePanelType = 'quarter'
798
+ $xeCalendar.dateCheckMonth(date)
799
+ $xeCalendar.changeViewEvent(null)
800
+ } else {
801
+ $xeCalendar.dateChange(date)
802
+ }
803
+ } else {
804
+ if (datePanelType === 'month') {
805
+ reactData.datePanelType = type === 'week' ? type : 'day'
806
+ $xeCalendar.dateCheckMonth(date)
807
+ $xeCalendar.changeViewEvent(null)
808
+ } else if (datePanelType === 'year') {
809
+ reactData.datePanelType = 'month'
810
+ $xeCalendar.dateCheckMonth(date)
811
+ $xeCalendar.changeViewEvent(null)
812
+ } else {
813
+ $xeCalendar.dateChange(date)
814
+ }
815
+ }
816
+ },
817
+ dateClickEvent (evnt: MouseEvent, item: VxeDatePanelDefines.DateYearItem | VxeDatePanelDefines.DateQuarterItem | VxeDatePanelDefines.DateMonthItem | VxeDatePanelDefines.DateDayItem) {
818
+ const $xeCalendar = this
819
+ const props = $xeCalendar
820
+ const reactData = $xeCalendar.reactData
821
+
822
+ const { type } = props
823
+ const { datePanelType } = reactData
824
+ const { date } = item
825
+ if (!$xeCalendar.isDateDisabled(item)) {
826
+ $xeCalendar.dateSelectItem(date)
827
+ $xeCalendar.dispatchEvent('cell-click', { date, type, viewType: datePanelType }, evnt)
828
+ }
829
+ },
830
+ datContextmenuEvent (evnt: MouseEvent, item: VxeDatePanelDefines.DateYearItem | VxeDatePanelDefines.DateQuarterItem | VxeDatePanelDefines.DateMonthItem | VxeDatePanelDefines.DateDayItem) {
831
+ const $xeCalendar = this
832
+ const props = $xeCalendar
833
+ const reactData = $xeCalendar.reactData
834
+
835
+ const { type } = props
836
+ const { datePanelType } = reactData
837
+ const { menuConfig } = props
838
+ const menuOpts = $xeCalendar.computeMenuOpts
839
+ if (menuConfig ? isEnableConf(menuOpts) : menuOpts.enabled) {
840
+ const { options, visibleMethod } = menuOpts
841
+ const { date } = item
842
+ if (!visibleMethod || visibleMethod({ $calendar: $xeCalendar as VxeCalendarConstructor, options, date, type, viewType: datePanelType })) {
843
+ if (VxeUI.contextMenu) {
844
+ VxeUI.contextMenu.openByEvent(evnt, {
845
+ options,
846
+ events: {
847
+ optionClick (eventParams) {
848
+ const { option } = eventParams
849
+ const gMenuOpts = menus.get(option.code)
850
+ const cmMethod = gMenuOpts ? gMenuOpts.calendarMenuMethod : null
851
+ const params = { menu: option, date, type, viewType: datePanelType, $event: evnt, $calendar: $xeCalendar as VxeCalendarConstructor }
852
+ if (cmMethod) {
853
+ cmMethod(params, evnt)
854
+ }
855
+ $xeCalendar.dispatchEvent('menu-click', params, eventParams.$event)
856
+ }
857
+ }
858
+ })
859
+ }
860
+ }
861
+ }
862
+ $xeCalendar.dispatchEvent('cell-menu', { date: item.date, type, viewType: datePanelType }, evnt)
863
+ },
864
+ dateMoveDay (offsetDay: Date) {
865
+ const $xeCalendar = this
866
+
867
+ if (!$xeCalendar.isDateDisabled({ date: offsetDay })) {
868
+ const dayList = $xeCalendar.computeDayList
869
+ if (!dayList.some((item) => XEUtils.isDateSame(item.date, offsetDay, 'yyyyMMdd'))) {
870
+ $xeCalendar.dateCheckMonth(offsetDay)
871
+ }
872
+ $xeCalendar.dateParseValue(offsetDay)
873
+ }
874
+ },
875
+ dateMoveYear (offsetYear: Date) {
876
+ const $xeCalendar = this
877
+
878
+ if (!$xeCalendar.isDateDisabled({ date: offsetYear })) {
879
+ const yearList = $xeCalendar.computeYearList
880
+ if (!yearList.some((item) => XEUtils.isDateSame(item.date, offsetYear, 'yyyy'))) {
881
+ $xeCalendar.dateCheckMonth(offsetYear)
882
+ }
883
+ $xeCalendar.dateParseValue(offsetYear)
884
+ }
885
+ },
886
+ dateMoveQuarter (offsetQuarter: Date) {
887
+ const $xeCalendar = this
888
+
889
+ if (!$xeCalendar.isDateDisabled({ date: offsetQuarter })) {
890
+ const quarterList = $xeCalendar.computeQuarterList
891
+ if (!quarterList.some((item) => XEUtils.isDateSame(item.date, offsetQuarter, 'yyyyq'))) {
892
+ $xeCalendar.dateCheckMonth(offsetQuarter)
893
+ }
894
+ $xeCalendar.dateParseValue(offsetQuarter)
895
+ }
896
+ },
897
+ dateMoveMonth (offsetMonth: Date) {
898
+ const $xeCalendar = this
899
+
900
+ if (!$xeCalendar.isDateDisabled({ date: offsetMonth })) {
901
+ const monthList = $xeCalendar.computeMonthList
902
+ if (!monthList.some((item) => XEUtils.isDateSame(item.date, offsetMonth, 'yyyyMM'))) {
903
+ $xeCalendar.dateCheckMonth(offsetMonth)
904
+ }
905
+ $xeCalendar.dateParseValue(offsetMonth)
906
+ }
907
+ },
908
+ dateMouseenterEvent (item: VxeDatePanelDefines.DateYearItem | VxeDatePanelDefines.DateQuarterItem | VxeDatePanelDefines.DateMonthItem | VxeDatePanelDefines.DateDayItem) {
909
+ const $xeCalendar = this
910
+ const reactData = $xeCalendar.reactData
911
+
912
+ if (!$xeCalendar.isDateDisabled(item)) {
913
+ const { datePanelType } = reactData
914
+ if (datePanelType === 'month') {
915
+ $xeCalendar.dateMoveMonth(item.date)
916
+ } else if (datePanelType === 'quarter') {
917
+ $xeCalendar.dateMoveQuarter(item.date)
918
+ } else if (datePanelType === 'year') {
919
+ $xeCalendar.dateMoveYear(item.date)
920
+ } else {
921
+ $xeCalendar.dateMoveDay(item.date)
922
+ }
923
+ }
924
+ },
925
+ dateMouseleaveEvent () {
926
+ const $xeCalendar = this
927
+ const reactData = $xeCalendar.reactData
928
+
929
+ reactData.datePanelValue = null
930
+ },
931
+ dateConfirmEvent () {
932
+ },
933
+ dateOpenPanel () {
934
+ const $xeCalendar = this
935
+ const props = $xeCalendar
936
+ const reactData = $xeCalendar.reactData
937
+
938
+ const { type } = props
939
+ const dateValue = $xeCalendar.computeDateValue
940
+ if (['year', 'quarter', 'month', 'week'].indexOf(type) > -1) {
941
+ reactData.datePanelType = type as 'year' | 'quarter' | 'month' | 'week'
942
+ } else {
943
+ reactData.datePanelType = 'day'
944
+ }
945
+ reactData.currentDate = XEUtils.getWhatDay(Date.now(), 0, 'first')
946
+ if (dateValue) {
947
+ $xeCalendar.dateMonthHandle(dateValue, 0)
948
+ $xeCalendar.dateParseValue(dateValue)
949
+ } else {
950
+ $xeCalendar.dateNowHandle()
951
+ }
952
+ },
953
+
954
+ //
955
+ // Render
956
+ //
957
+ renderDateLabel (h: CreateElement, item: VxeDatePanelDefines.DateYearItem | VxeDatePanelDefines.DateQuarterItem | VxeDatePanelDefines.DateMonthItem | VxeDatePanelDefines.DateDayItem, label: string | number) {
958
+ const $xeCalendar = this
959
+ const props = $xeCalendar
960
+ const reactData = $xeCalendar.reactData
961
+
962
+ const { festivalMethod } = props
963
+ if (festivalMethod) {
964
+ const { datePanelType } = reactData
965
+ const festivalRest = festivalMethod({ type: datePanelType, viewType: datePanelType, date: item.date, $calendar: $xeCalendar as VxeCalendarConstructor })
966
+ const festivalItem = festivalRest ? (XEUtils.isString(festivalRest) ? { label: festivalRest } : festivalRest) : {}
967
+ const extraItem = festivalItem.extra ? (XEUtils.isString(festivalItem.extra) ? { label: festivalItem.extra } : festivalItem.extra) : null
968
+ const labels = [
969
+ h('span', {
970
+ class: ['vxe-calendar--label', {
971
+ 'is-notice': festivalItem.notice
972
+ }]
973
+ }, extraItem && extraItem.label
974
+ ? [
975
+ h('span', {
976
+ class: 'vxe-calendar--label--number'
977
+ }, `${label || ''}`),
978
+ h('span', {
979
+ class: ['vxe-calendar--label--extra', extraItem.important ? 'is-important' : '', extraItem.className],
980
+ style: extraItem.style
981
+ }, XEUtils.toValueString(extraItem.label))
982
+ ]
983
+ : [`${label || ''}`])
984
+ ]
985
+ const festivalLabel = festivalItem.label
986
+ if (festivalLabel) {
987
+ // 默认最多支持3个节日重叠
988
+ const festivalLabels = XEUtils.toValueString(festivalLabel).split(',')
989
+ labels.push(
990
+ h('span', {
991
+ class: ['vxe-calendar--festival', festivalItem.important ? 'is-important' : '', festivalItem.className],
992
+ style: festivalItem.style
993
+ }, [
994
+ festivalLabels.length > 1
995
+ ? h('span', {
996
+ class: ['vxe-calendar--festival--overlap', `overlap--${festivalLabels.length}`]
997
+ }, festivalLabels.map(label => h('span', label.substring(0, 3))))
998
+ : h('span', {
999
+ class: 'vxe-calendar--festival--label'
1000
+ }, festivalLabels[0].substring(0, 3))
1001
+ ])
1002
+ )
1003
+ }
1004
+ return labels
1005
+ }
1006
+ return `${label || ''}`
1007
+ },
1008
+ renderDateDayTable (h: CreateElement) {
1009
+ const $xeCalendar = this
1010
+ const props = $xeCalendar
1011
+ const reactData = $xeCalendar.reactData
1012
+
1013
+ const { multiple, cellStyle } = props
1014
+ const { datePanelType, datePanelValue } = reactData
1015
+ const dateValue = $xeCalendar.computeDateValue
1016
+ const dateHeaders = $xeCalendar.computeDateHeaders
1017
+ const dayDatas = $xeCalendar.computeDayDatas
1018
+ const dateListValue = $xeCalendar.computeDateListValue
1019
+ const matchFormat = 'yyyyMMdd'
1020
+ return [
1021
+ h('div', {
1022
+ class: ['vxe-calendar--view-wrapper', `type--${datePanelType}`]
1023
+ }, [
1024
+ h('div', {
1025
+ class: 'vxe-calendar--view-header',
1026
+ style: {
1027
+ height: `${100 / (dayDatas.length + 1)}%`
1028
+ }
1029
+ }, [
1030
+ h('div', {
1031
+ class: 'vxe-calendar--view-row'
1032
+ }, dateHeaders.map((item) => {
1033
+ return h('div', {
1034
+ class: 'vxe-calendar--view-item',
1035
+ style: {
1036
+ width: `${100 / dateHeaders.length}%`
1037
+ }
1038
+ }, [
1039
+ h('div', {
1040
+ class: 'vxe-calendar--view-item-inner'
1041
+ }, [
1042
+ h('div', {
1043
+ class: 'vxe-calendar--view-item-label'
1044
+ }, item.label)
1045
+ ])
1046
+ ])
1047
+ }))
1048
+ ]),
1049
+ h('div', {
1050
+ class: 'vxe-calendar--view-body'
1051
+ }, dayDatas.map((rows) => {
1052
+ return h('div', {
1053
+ class: 'vxe-calendar--view-row',
1054
+ style: {
1055
+ height: `${100 / dayDatas.length}%`
1056
+ }
1057
+ }, rows.map((item) => {
1058
+ const isSelected = multiple ? dateListValue.some(val => XEUtils.isDateSame(val, item.date, matchFormat)) : XEUtils.isDateSame(dateValue, item.date, matchFormat)
1059
+ return h('div', {
1060
+ class: ['vxe-calendar--view-item', {
1061
+ 'is--prev': item.isPrev,
1062
+ 'is--current': item.isCurrent,
1063
+ 'is--now': item.isNow,
1064
+ 'is--next': item.isNext,
1065
+ 'is--disabled': $xeCalendar.isDateDisabled(item),
1066
+ 'is--selected': isSelected,
1067
+ 'is--hover': XEUtils.isDateSame(datePanelValue, item.date, matchFormat)
1068
+ }],
1069
+ style: Object.assign({}, XEUtils.isFunction(cellStyle) ? cellStyle({ type: datePanelType, viewType: datePanelType, date: item.date, $calendar: $xeCalendar as VxeCalendarConstructor }) : cellStyle, {
1070
+ width: `${100 / rows.length}%`
1071
+ }),
1072
+ on: {
1073
+ click: (evnt: MouseEvent) => $xeCalendar.dateClickEvent(evnt, item),
1074
+ contextmenu: (evnt: MouseEvent) => $xeCalendar.datContextmenuEvent(evnt, item),
1075
+ mouseenter: () => $xeCalendar.dateMouseenterEvent(item),
1076
+ mouseleave: $xeCalendar.dateMouseleaveEvent
1077
+ }
1078
+ }, [
1079
+ h('div', {
1080
+ class: 'vxe-calendar--view-item-inner'
1081
+ }, $xeCalendar.renderDateLabel(h, item, item.label))
1082
+ ])
1083
+ }))
1084
+ }))
1085
+ ])
1086
+ ]
1087
+ },
1088
+ renderDateWeekTable (h: CreateElement) {
1089
+ const $xeCalendar = this
1090
+ const props = $xeCalendar
1091
+ const reactData = $xeCalendar.reactData
1092
+
1093
+ const { multiple, cellStyle } = props
1094
+ const { datePanelType, datePanelValue } = reactData
1095
+ const dateValue = $xeCalendar.computeDateValue
1096
+ const weekHeaders = $xeCalendar.computeWeekHeaders
1097
+ const weekDates = $xeCalendar.computeWeekDates
1098
+ const dateListValue = $xeCalendar.computeDateListValue
1099
+ const matchFormat = 'yyyyMMdd'
1100
+ return [
1101
+ h('div', {
1102
+ class: ['vxe-calendar--view-wrapper', `type--${datePanelType}`]
1103
+ }, [
1104
+ h('div', {
1105
+ class: 'vxe-calendar--view-header',
1106
+ style: {
1107
+ height: `${100 / (weekDates.length + 1)}%`
1108
+ }
1109
+ }, [
1110
+ h('div', {
1111
+ class: 'vxe-calendar--view-row'
1112
+ }, weekHeaders.map((item, rIndex) => {
1113
+ return h('div', {
1114
+ class: 'vxe-calendar--view-item',
1115
+ style: {
1116
+ width: `${rIndex ? 13 : 9}%`
1117
+ }
1118
+ }, [
1119
+ h('div', {
1120
+ class: 'vxe-calendar--view-item-inner'
1121
+ }, [
1122
+ h('div', {
1123
+ class: 'vxe-calendar--view-item-label'
1124
+ }, item.label)
1125
+ ])
1126
+ ])
1127
+ }))
1128
+ ]),
1129
+ h('div', {
1130
+ class: 'vxe-calendar--view-body'
1131
+ }, weekDates.map((rows) => {
1132
+ const isSelected = multiple ? rows.some((item) => dateListValue.some(val => XEUtils.isDateSame(val, item.date, matchFormat))) : rows.some((item) => XEUtils.isDateSame(dateValue, item.date, matchFormat))
1133
+ const isHover = rows.some((item) => XEUtils.isDateSame(datePanelValue, item.date, matchFormat))
1134
+ const isNowWeek = rows.some(item => item.isNow)
1135
+ return h('div', {
1136
+ class: 'vxe-calendar--view-row',
1137
+ style: {
1138
+ height: `${100 / weekDates.length}%`
1139
+ }
1140
+ }, rows.map((item, rIndex) => {
1141
+ return h('div', {
1142
+ class: ['vxe-calendar--view-item', {
1143
+ 'is--prev': item.isPrev,
1144
+ 'is--current': item.isCurrent,
1145
+ 'is--now': rIndex ? item.isNow : isNowWeek,
1146
+ 'is--next': item.isNext,
1147
+ 'is--disabled': $xeCalendar.isDateDisabled(item),
1148
+ 'is--selected': isSelected,
1149
+ 'is--hover': isHover
1150
+ }],
1151
+ style: Object.assign({}, XEUtils.isFunction(cellStyle) ? cellStyle({ type: datePanelType, viewType: datePanelType, date: item.date, $calendar: $xeCalendar as VxeCalendarConstructor }) : cellStyle, {
1152
+ width: `${rIndex ? 13 : 9}%`
1153
+ }),
1154
+ on: {
1155
+ click: (evnt: MouseEvent) => $xeCalendar.dateClickEvent(evnt, item),
1156
+ contextmenu: (evnt: MouseEvent) => $xeCalendar.datContextmenuEvent(evnt, item),
1157
+ mouseenter: () => $xeCalendar.dateMouseenterEvent(item),
1158
+ mouseleave: $xeCalendar.dateMouseleaveEvent
1159
+ }
1160
+ }, [
1161
+ h('div', {
1162
+ class: 'vxe-calendar--view-item-inner'
1163
+ }, $xeCalendar.renderDateLabel(h, item, item.label))
1164
+ ])
1165
+ }))
1166
+ }))
1167
+ ])
1168
+ ]
1169
+ },
1170
+ renderDateMonthTable (h: CreateElement) {
1171
+ const $xeCalendar = this
1172
+ const props = $xeCalendar
1173
+ const reactData = $xeCalendar.reactData
1174
+
1175
+ const { multiple, cellStyle } = props
1176
+ const { datePanelType, datePanelValue } = reactData
1177
+ const dateValue = $xeCalendar.computeDateValue
1178
+ const monthDatas = $xeCalendar.computeMonthDatas as VxeDatePanelDefines.DateMonthItem[][]
1179
+ const dateListValue = $xeCalendar.computeDateListValue
1180
+ const matchFormat = 'yyyyMM'
1181
+ return [
1182
+ h('div', {
1183
+ class: ['vxe-calendar--view-wrapper', `type--${datePanelType}`]
1184
+ }, [
1185
+ h('div', {
1186
+ class: 'vxe-calendar--view-body'
1187
+ }, monthDatas.map((rows) => {
1188
+ return h('div', {
1189
+ class: 'vxe-calendar--view-row',
1190
+ style: {
1191
+ height: `${100 / monthDatas.length}%`
1192
+ }
1193
+ }, rows.map((item) => {
1194
+ const isSelected = multiple ? dateListValue.some(val => XEUtils.isDateSame(val, item.date, matchFormat)) : XEUtils.isDateSame(dateValue, item.date, matchFormat)
1195
+ return h('div', {
1196
+ class: ['vxe-calendar--view-item', {
1197
+ 'is--prev': item.isPrev,
1198
+ 'is--current': item.isCurrent,
1199
+ 'is--now': item.isNow,
1200
+ 'is--next': item.isNext,
1201
+ 'is--disabled': $xeCalendar.isDateDisabled(item),
1202
+ 'is--selected': isSelected,
1203
+ 'is--hover': XEUtils.isDateSame(datePanelValue, item.date, matchFormat)
1204
+ }],
1205
+ style: Object.assign({}, XEUtils.isFunction(cellStyle) ? cellStyle({ type: datePanelType, viewType: datePanelType, date: item.date, $calendar: $xeCalendar as VxeCalendarConstructor }) : cellStyle, {
1206
+ width: `${100 / rows.length}%`
1207
+ }),
1208
+ on: {
1209
+ click: (evnt: MouseEvent) => $xeCalendar.dateClickEvent(evnt, item),
1210
+ contextmenu: (evnt: MouseEvent) => $xeCalendar.datContextmenuEvent(evnt, item),
1211
+ mouseenter: () => $xeCalendar.dateMouseenterEvent(item),
1212
+ mouseleave: $xeCalendar.dateMouseleaveEvent
1213
+ }
1214
+ }, [
1215
+ h('div', {
1216
+ class: 'vxe-calendar--view-item-inner'
1217
+ }, $xeCalendar.renderDateLabel(h, item, getI18n(`vxe.input.date.months.m${item.month}`)))
1218
+ ])
1219
+ }))
1220
+ }))
1221
+ ])
1222
+ ]
1223
+ },
1224
+ renderDateQuarterTable (h: CreateElement) {
1225
+ const $xeCalendar = this
1226
+ const props = $xeCalendar
1227
+ const reactData = $xeCalendar.reactData
1228
+
1229
+ const { multiple, cellStyle } = props
1230
+ const { datePanelType, datePanelValue } = reactData
1231
+ const dateValue = $xeCalendar.computeDateValue
1232
+ const quarterDatas = $xeCalendar.computeQuarterDatas
1233
+ const dateListValue = $xeCalendar.computeDateListValue
1234
+ const matchFormat = 'yyyyq'
1235
+ return [
1236
+ h('div', {
1237
+ class: ['vxe-calendar--view-wrapper', `type--${datePanelType}`]
1238
+ }, [
1239
+ h('div', {
1240
+ class: 'vxe-calendar--view-body'
1241
+ }, quarterDatas.map((rows) => {
1242
+ return h('div', {
1243
+ class: 'vxe-calendar--view-row',
1244
+ style: {
1245
+ height: `${100 / quarterDatas.length}%`
1246
+ }
1247
+ }, rows.map((item) => {
1248
+ const isSelected = multiple ? dateListValue.some(val => XEUtils.isDateSame(val, item.date, matchFormat)) : XEUtils.isDateSame(dateValue, item.date, matchFormat)
1249
+ return h('div', {
1250
+ class: ['vxe-calendar--view-item', {
1251
+ 'is--prev': item.isPrev,
1252
+ 'is--current': item.isCurrent,
1253
+ 'is--now': item.isNow,
1254
+ 'is--next': item.isNext,
1255
+ 'is--disabled': $xeCalendar.isDateDisabled(item),
1256
+ 'is--selected': isSelected,
1257
+ 'is--hover': XEUtils.isDateSame(datePanelValue, item.date, matchFormat)
1258
+ }],
1259
+ style: Object.assign({}, XEUtils.isFunction(cellStyle) ? cellStyle({ type: datePanelType, viewType: datePanelType, date: item.date, $calendar: $xeCalendar as VxeCalendarConstructor }) : cellStyle, {
1260
+ width: `${100 / rows.length}%`
1261
+ }),
1262
+ on: {
1263
+ click: (evnt: MouseEvent) => $xeCalendar.dateClickEvent(evnt, item),
1264
+ contextmenu: (evnt: MouseEvent) => $xeCalendar.datContextmenuEvent(evnt, item),
1265
+ mouseenter: () => $xeCalendar.dateMouseenterEvent(item),
1266
+ mouseleave: $xeCalendar.dateMouseleaveEvent
1267
+ }
1268
+ }, [
1269
+ h('div', {
1270
+ class: 'vxe-calendar--view-item-inner'
1271
+ }, $xeCalendar.renderDateLabel(h, item, getI18n(`vxe.input.date.quarters.q${item.quarter}`)))
1272
+ ])
1273
+ }))
1274
+ }))
1275
+ ])
1276
+ ]
1277
+ },
1278
+ renderDateYearTable (h: CreateElement) {
1279
+ const $xeCalendar = this
1280
+ const props = $xeCalendar
1281
+ const reactData = $xeCalendar.reactData
1282
+
1283
+ const { multiple, cellStyle } = props
1284
+ const { datePanelType, datePanelValue } = reactData
1285
+ const dateValue = $xeCalendar.computeDateValue
1286
+ const yearDatas = $xeCalendar.computeYearDatas
1287
+ const dateListValue = $xeCalendar.computeDateListValue
1288
+ const matchFormat = 'yyyy'
1289
+ return [
1290
+ h('div', {
1291
+ class: ['vxe-calendar--view-wrapper', `type--${datePanelType}`]
1292
+ }, [
1293
+ h('div', {
1294
+ class: 'vxe-calendar--view-body'
1295
+ }, yearDatas.map((rows) => {
1296
+ return h('div', {
1297
+ class: 'vxe-calendar--view-row',
1298
+ style: {
1299
+ height: `${100 / yearDatas.length}%`
1300
+ }
1301
+ }, rows.map((item) => {
1302
+ const isSelected = multiple ? dateListValue.some(val => XEUtils.isDateSame(val, item.date, matchFormat)) : XEUtils.isDateSame(dateValue, item.date, matchFormat)
1303
+ return h('div', {
1304
+ class: ['vxe-calendar--view-item', {
1305
+ 'is--prev': item.isPrev,
1306
+ 'is--current': item.isCurrent,
1307
+ 'is--now': item.isNow,
1308
+ 'is--next': item.isNext,
1309
+ 'is--disabled': $xeCalendar.isDateDisabled(item),
1310
+ 'is--selected': isSelected,
1311
+ 'is--hover': XEUtils.isDateSame(datePanelValue, item.date, matchFormat)
1312
+ }],
1313
+ style: Object.assign({}, XEUtils.isFunction(cellStyle) ? cellStyle({ type: datePanelType, viewType: datePanelType, date: item.date, $calendar: $xeCalendar as VxeCalendarConstructor }) : cellStyle, {
1314
+ width: `${100 / rows.length}%`
1315
+ }),
1316
+ on: {
1317
+ click: (evnt: MouseEvent) => $xeCalendar.dateClickEvent(evnt, item),
1318
+ contextmenu: (evnt: MouseEvent) => $xeCalendar.datContextmenuEvent(evnt, item),
1319
+ mouseenter: () => $xeCalendar.dateMouseenterEvent(item),
1320
+ mouseleave: $xeCalendar.dateMouseleaveEvent
1321
+ }
1322
+ }, [
1323
+ h('div', {
1324
+ class: 'vxe-calendar--view-item-inner'
1325
+ }, $xeCalendar.renderDateLabel(h, item, item.year))
1326
+ ])
1327
+ }))
1328
+ }))
1329
+ ])
1330
+ ]
1331
+ },
1332
+ renderDateTable (h: CreateElement) {
1333
+ const $xeCalendar = this
1334
+ const reactData = $xeCalendar.reactData
1335
+
1336
+ const { datePanelType } = reactData
1337
+ switch (datePanelType) {
1338
+ case 'week' :
1339
+ return $xeCalendar.renderDateWeekTable(h)
1340
+ case 'month' :
1341
+ return $xeCalendar.renderDateMonthTable(h)
1342
+ case 'quarter' :
1343
+ return $xeCalendar.renderDateQuarterTable(h)
1344
+ case 'year' :
1345
+ return $xeCalendar.renderDateYearTable(h)
1346
+ }
1347
+ return $xeCalendar.renderDateDayTable(h)
1348
+ },
1349
+ renderDatePanel (h: CreateElement) {
1350
+ const $xeCalendar = this
1351
+ const props = $xeCalendar
1352
+ const reactData = $xeCalendar.reactData
1353
+
1354
+ const { multiple } = props
1355
+ const { datePanelType } = reactData
1356
+ const isDisabledPrevDateBtn = $xeCalendar.computeIsDisabledPrevDateBtn
1357
+ const isDisabledNextDateBtn = $xeCalendar.computeIsDisabledNextDateBtn
1358
+ const selectDatePanelObj = $xeCalendar.computeSelectDatePanelObj
1359
+ return [
1360
+ h('div', {
1361
+ class: 'vxe-calendar--header'
1362
+ }, [
1363
+ h('div', {
1364
+ class: 'vxe-calendar--type-wrapper'
1365
+ }, [
1366
+ datePanelType === 'year'
1367
+ ? h(VxeButtonComponent, {
1368
+ props: {
1369
+ disabled: datePanelType === 'year',
1370
+ content: selectDatePanelObj.y
1371
+ }
1372
+ })
1373
+ : h('span', {
1374
+ class: 'vxe-calendar--date-picker-btns'
1375
+ }, [
1376
+ h(VxeButtonComponent, {
1377
+ props: {
1378
+ content: selectDatePanelObj.y
1379
+ },
1380
+ on: {
1381
+ click: $xeCalendar.dateToggleYearTypeEvent
1382
+ }
1383
+ }),
1384
+ selectDatePanelObj.m
1385
+ ? h(VxeButtonComponent, {
1386
+ props: {
1387
+ content: selectDatePanelObj.m
1388
+ },
1389
+ on: {
1390
+ click: $xeCalendar.dateToggleMonthTypeEvent
1391
+ }
1392
+ })
1393
+ : renderEmptyElement($xeCalendar)
1394
+ ])
1395
+ ]),
1396
+ h('div', {
1397
+ class: 'vxe-calendar--btn-wrapper'
1398
+ }, [
1399
+ h(VxeButtonComponent, {
1400
+ props: {
1401
+ disabled: isDisabledPrevDateBtn,
1402
+ icon: 'vxe-icon-caret-left'
1403
+ },
1404
+ on: {
1405
+ click: $xeCalendar.datePrevEvent
1406
+ }
1407
+ }),
1408
+ h(VxeButtonComponent, {
1409
+ props: {
1410
+ icon: 'vxe-icon-dot'
1411
+ },
1412
+ on: {
1413
+ click: $xeCalendar.dateTodayMonthEvent
1414
+ }
1415
+ }),
1416
+ h(VxeButtonComponent, {
1417
+ props: {
1418
+ disabled: isDisabledNextDateBtn,
1419
+ icon: 'vxe-icon-caret-right'
1420
+ },
1421
+ on: {
1422
+ click: $xeCalendar.dateNextEvent
1423
+ }
1424
+ }),
1425
+ multiple && $xeCalendar.computeSupportMultiples
1426
+ ? h('span', {
1427
+ class: 'vxe-calendar--btn vxe-calendar--confirm-btn'
1428
+ }, [
1429
+ h('button', {
1430
+ class: 'vxe-calendar--confirm',
1431
+ attrs: {
1432
+ type: 'button'
1433
+ },
1434
+ on: {
1435
+ click: $xeCalendar.dateConfirmEvent
1436
+ }
1437
+ }, getI18n('vxe.button.confirm'))
1438
+ ])
1439
+ : null
1440
+ ])
1441
+ ]),
1442
+ h('div', {
1443
+ class: 'vxe-calendar--body'
1444
+ }, $xeCalendar.renderDateTable(h))
1445
+ ]
1446
+ },
1447
+ renderVN (h: CreateElement): VNode {
1448
+ const $xeCalendar = this
1449
+ const props = $xeCalendar
1450
+
1451
+ const { className, type } = props
1452
+ const vSize = $xeCalendar.computeSize
1453
+ const isDisabled = $xeCalendar.computeIsDisabled
1454
+ const calendarStyle = $xeCalendar.computeCalendarStyle
1455
+ return h('div', {
1456
+ ref: 'refElem',
1457
+ class: ['vxe-calendar', `type--${type}`, className, {
1458
+ [`size--${vSize}`]: vSize,
1459
+ 'is--disabled': isDisabled
1460
+ }],
1461
+ style: calendarStyle
1462
+ }, [
1463
+ $xeCalendar.renderDatePanel(h)
1464
+ ])
1465
+ }
1466
+ },
1467
+ watch: {
1468
+ value (val) {
1469
+ const $xeCalendar = this
1470
+ const reactData = $xeCalendar.reactData
1471
+
1472
+ reactData.inputValue = val
1473
+ $xeCalendar.changeValue()
1474
+ },
1475
+ type () {
1476
+ const $xeCalendar = this
1477
+ const reactData = $xeCalendar.reactData
1478
+
1479
+ // 切换类型是重置内置变量
1480
+ Object.assign(reactData, {
1481
+ selectValue: null,
1482
+ inputValue: null,
1483
+ datePanelValue: null,
1484
+ datePanelLabel: '',
1485
+ datePanelType: 'day',
1486
+ selectMonth: null,
1487
+ currentDate: null
1488
+ })
1489
+ $xeCalendar.initValue()
1490
+ $xeCalendar.dateOpenPanel()
1491
+ },
1492
+ computeDateLabelFormat () {
1493
+ const $xeCalendar = this
1494
+ const props = $xeCalendar
1495
+ const reactData = $xeCalendar.reactData
1496
+
1497
+ const isCalendarType = $xeCalendar.computeIsCalendarType
1498
+ if (isCalendarType) {
1499
+ $xeCalendar.dateParseValue(reactData.datePanelValue)
1500
+ reactData.inputValue = props.multiple ? $xeCalendar.computeDateMultipleLabel : reactData.datePanelLabel
1501
+ }
1502
+ }
1503
+ },
1504
+ created () {
1505
+ const $xeCalendar = this
1506
+ const props = $xeCalendar
1507
+ const reactData = $xeCalendar.reactData
1508
+
1509
+ reactData.selectValue = props.value
1510
+ reactData.inputValue = props.value
1511
+ $xeCalendar.initValue()
1512
+ },
1513
+ mounted () {
1514
+ const $xeCalendar = this
1515
+ const props = $xeCalendar
1516
+
1517
+ const { menuConfig } = props
1518
+ const VxeUIContextMenu = VxeUI.getComponent('VxeContextMenu')
1519
+ if (menuConfig && !VxeUIContextMenu) {
1520
+ errLog('vxe.error.reqComp', ['vxe-context-menu'])
1521
+ }
1522
+ $xeCalendar.dateOpenPanel()
1523
+ },
1524
+ render (this: any, h) {
1525
+ return this.renderVN(h)
1526
+ }
1527
+ }) /* define-vxe-component end */