vxe-pc-ui 3.14.5 → 3.14.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (474) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +134 -134
  3. package/es/tree/src/tree.js +40 -5
  4. package/es/tree-select/src/tree-select.js +2 -0
  5. package/es/ui/index.js +1 -1
  6. package/es/ui/src/log.js +1 -1
  7. package/lib/index.umd.js +8406 -8476
  8. package/lib/index.umd.min.js +1 -1
  9. package/lib/tree/src/tree.js +40 -5
  10. package/lib/tree/src/tree.min.js +1 -1
  11. package/lib/tree-select/src/tree-select.js +2 -0
  12. package/lib/tree-select/src/tree-select.min.js +1 -1
  13. package/lib/ui/index.js +1 -1
  14. package/lib/ui/index.min.js +1 -1
  15. package/lib/ui/src/log.js +1 -1
  16. package/lib/ui/src/log.min.js +1 -1
  17. package/package.json +89 -89
  18. package/packages/alert/index.ts +16 -16
  19. package/packages/alert/src/alert.ts +106 -106
  20. package/packages/anchor/index.ts +16 -16
  21. package/packages/anchor/src/anchor-link.ts +158 -158
  22. package/packages/anchor/src/anchor.ts +267 -267
  23. package/packages/anchor/src/util.ts +23 -23
  24. package/packages/anchor-link/index.ts +16 -16
  25. package/packages/avatar/index.ts +16 -16
  26. package/packages/avatar/src/avatar.ts +141 -141
  27. package/packages/backtop/index.ts +16 -16
  28. package/packages/backtop/src/backtop.ts +330 -330
  29. package/packages/badge/index.ts +16 -16
  30. package/packages/badge/src/badge.ts +87 -87
  31. package/packages/breadcrumb/index.ts +16 -16
  32. package/packages/breadcrumb/src/breadcrumb-item.ts +118 -118
  33. package/packages/breadcrumb/src/breadcrumb.ts +89 -89
  34. package/packages/breadcrumb-item/index.ts +16 -16
  35. package/packages/button/index.ts +16 -16
  36. package/packages/button/src/button-group.ts +113 -113
  37. package/packages/button/src/button.ts +956 -956
  38. package/packages/button-group/index.ts +16 -16
  39. package/packages/calendar/index.ts +16 -16
  40. package/packages/calendar/src/calendar.ts +1527 -1527
  41. package/packages/card/index.ts +16 -16
  42. package/packages/card/src/card.ts +162 -162
  43. package/packages/carousel/index.ts +16 -16
  44. package/packages/carousel/src/carousel-item.ts +117 -117
  45. package/packages/carousel/src/carousel.ts +460 -460
  46. package/packages/carousel/src/util.ts +21 -21
  47. package/packages/carousel-item/index.ts +16 -16
  48. package/packages/cascader/index.ts +16 -16
  49. package/packages/cascader/src/cascader.ts +943 -943
  50. package/packages/checkbox/index.ts +16 -16
  51. package/packages/checkbox/src/button.ts +185 -185
  52. package/packages/checkbox/src/checkbox.ts +189 -189
  53. package/packages/checkbox/src/group.ts +259 -259
  54. package/packages/checkbox-button/index.ts +16 -16
  55. package/packages/checkbox-group/index.ts +16 -16
  56. package/packages/col/index.ts +16 -16
  57. package/packages/collapse/index.ts +16 -16
  58. package/packages/collapse/src/collapse-pane.ts +136 -136
  59. package/packages/collapse/src/collapse.ts +259 -259
  60. package/packages/collapse/src/util.ts +21 -21
  61. package/packages/collapse-pane/index.ts +16 -16
  62. package/packages/color-picker/index.ts +16 -16
  63. package/packages/color-picker/src/color-picker.ts +1286 -1286
  64. package/packages/color-picker/src/util.ts +198 -198
  65. package/packages/components.ts +307 -307
  66. package/packages/context-menu/index.ts +54 -54
  67. package/packages/context-menu/src/context-menu.ts +727 -727
  68. package/packages/countdown/index.ts +16 -16
  69. package/packages/countdown/src/countdown.ts +276 -276
  70. package/packages/date-panel/index.ts +16 -16
  71. package/packages/date-panel/src/date-panel.ts +2024 -2024
  72. package/packages/date-panel/src/util.ts +244 -244
  73. package/packages/date-picker/index.ts +17 -17
  74. package/packages/date-picker/src/date-picker.ts +1249 -1249
  75. package/packages/date-range-picker/index.ts +16 -16
  76. package/packages/date-range-picker/src/date-range-picker.ts +1480 -1480
  77. package/packages/drawer/index.ts +87 -87
  78. package/packages/drawer/src/drawer.ts +767 -767
  79. package/packages/dynamics/index.ts +127 -127
  80. package/packages/empty/index.ts +16 -16
  81. package/packages/empty/src/empty.ts +80 -80
  82. package/packages/form/index.ts +16 -16
  83. package/packages/form/render/index.ts +617 -617
  84. package/packages/form/src/form-config-item.ts +84 -84
  85. package/packages/form/src/form-group.ts +125 -125
  86. package/packages/form/src/form-item.ts +217 -217
  87. package/packages/form/src/form.ts +1032 -1032
  88. package/packages/form/src/itemInfo.ts +80 -80
  89. package/packages/form/src/render.ts +398 -398
  90. package/packages/form/src/util.ts +92 -92
  91. package/packages/form-gather/index.ts +18 -18
  92. package/packages/form-group/index.ts +16 -16
  93. package/packages/form-item/index.ts +16 -16
  94. package/packages/icon/index.ts +16 -16
  95. package/packages/icon/src/icon.ts +75 -75
  96. package/packages/icon-picker/index.ts +16 -16
  97. package/packages/icon-picker/src/icon-picker.ts +753 -753
  98. package/packages/image/index.ts +16 -16
  99. package/packages/image/src/group.ts +162 -162
  100. package/packages/image/src/image.ts +303 -303
  101. package/packages/image/src/preview.ts +737 -737
  102. package/packages/image/src/util.ts +62 -62
  103. package/packages/image-group/index.ts +16 -16
  104. package/packages/image-preview/index.ts +19 -19
  105. package/packages/index.ts +8 -8
  106. package/packages/input/index.ts +16 -16
  107. package/packages/input/src/input.ts +3187 -3187
  108. package/packages/language/ar-EG.ts +840 -840
  109. package/packages/language/de-DE.ts +840 -840
  110. package/packages/language/en-US.ts +840 -840
  111. package/packages/language/es-ES.ts +840 -840
  112. package/packages/language/fr-FR.ts +840 -840
  113. package/packages/language/hu-HU.ts +840 -840
  114. package/packages/language/hy-AM.ts +840 -840
  115. package/packages/language/id-ID.ts +840 -840
  116. package/packages/language/it-IT.ts +840 -840
  117. package/packages/language/ja-JP.ts +840 -840
  118. package/packages/language/ko-KR.ts +840 -840
  119. package/packages/language/ms-MY.ts +840 -840
  120. package/packages/language/nb-NO.ts +840 -840
  121. package/packages/language/pt-BR.ts +840 -840
  122. package/packages/language/ru-RU.ts +840 -840
  123. package/packages/language/th-TH.ts +840 -840
  124. package/packages/language/ug-CN.ts +840 -840
  125. package/packages/language/uk-UA.ts +840 -840
  126. package/packages/language/uz-UZ.ts +840 -840
  127. package/packages/language/vi-VN.ts +840 -840
  128. package/packages/language/zh-CHT.ts +840 -840
  129. package/packages/language/zh-CN.ts +840 -840
  130. package/packages/language/zh-HK.ts +3 -3
  131. package/packages/language/zh-MO.ts +3 -3
  132. package/packages/language/zh-TC.ts +3 -3
  133. package/packages/language/zh-TW.ts +3 -3
  134. package/packages/layout-aside/index.ts +16 -16
  135. package/packages/layout-aside/src/layout-aside.ts +115 -115
  136. package/packages/layout-body/index.ts +16 -16
  137. package/packages/layout-body/src/layout-body.ts +137 -137
  138. package/packages/layout-container/index.ts +16 -16
  139. package/packages/layout-container/src/layout-container.ts +65 -65
  140. package/packages/layout-footer/index.ts +16 -16
  141. package/packages/layout-footer/src/layout-footer.ts +53 -53
  142. package/packages/layout-header/index.ts +16 -16
  143. package/packages/layout-header/src/layout-header.ts +49 -49
  144. package/packages/link/index.ts +16 -16
  145. package/packages/link/src/link.ts +153 -153
  146. package/packages/list/index.ts +16 -16
  147. package/packages/list/src/list.ts +492 -492
  148. package/packages/loading/index.ts +34 -34
  149. package/packages/loading/src/loading.ts +162 -162
  150. package/packages/mention/index.ts +16 -16
  151. package/packages/mention/src/mention.ts +54 -54
  152. package/packages/menu/index.ts +16 -16
  153. package/packages/menu/src/menu.ts +632 -632
  154. package/packages/modal/index.ts +150 -150
  155. package/packages/modal/src/modal.ts +1668 -1668
  156. package/packages/notice-bar/index.ts +16 -16
  157. package/packages/notice-bar/src/notice-bar.ts +182 -182
  158. package/packages/number-input/index.ts +16 -16
  159. package/packages/number-input/src/number-input.ts +1255 -1255
  160. package/packages/number-input/src/util.ts +12 -12
  161. package/packages/optgroup/index.ts +16 -16
  162. package/packages/option/index.ts +16 -16
  163. package/packages/pager/index.ts +16 -16
  164. package/packages/pager/src/pager.ts +913 -913
  165. package/packages/password-input/index.ts +16 -16
  166. package/packages/password-input/src/password-input.ts +466 -466
  167. package/packages/print/index.ts +18 -18
  168. package/packages/print/src/page-break.ts +78 -78
  169. package/packages/print/src/print.ts +266 -266
  170. package/packages/print/src/util.ts +284 -284
  171. package/packages/print-page-break/index.ts +14 -14
  172. package/packages/pulldown/index.ts +16 -16
  173. package/packages/pulldown/src/pulldown.ts +533 -533
  174. package/packages/radio/index.ts +16 -16
  175. package/packages/radio/src/button.ts +221 -221
  176. package/packages/radio/src/group.ts +252 -252
  177. package/packages/radio/src/radio.ts +228 -228
  178. package/packages/radio-button/index.ts +16 -16
  179. package/packages/radio-group/index.ts +16 -16
  180. package/packages/rate/index.ts +16 -16
  181. package/packages/rate/src/rate.ts +199 -199
  182. package/packages/result/index.ts +16 -16
  183. package/packages/result/src/result.ts +93 -93
  184. package/packages/row/index.ts +16 -16
  185. package/packages/row/src/col.ts +130 -130
  186. package/packages/row/src/row.ts +106 -106
  187. package/packages/segmented/index.ts +16 -16
  188. package/packages/segmented/src/segmented.ts +281 -281
  189. package/packages/select/index.ts +16 -16
  190. package/packages/select/src/optgroup.ts +107 -107
  191. package/packages/select/src/option-info.ts +20 -20
  192. package/packages/select/src/option.ts +103 -103
  193. package/packages/select/src/select.ts +2001 -2001
  194. package/packages/select/src/util.ts +47 -47
  195. package/packages/slider/index.ts +16 -16
  196. package/packages/slider/src/slider.ts +332 -332
  197. package/packages/split/index.ts +16 -16
  198. package/packages/split-pane/index.ts +17 -17
  199. package/packages/splitter/index.ts +16 -16
  200. package/packages/splitter/src/splitter-panel.ts +171 -171
  201. package/packages/splitter/src/splitter.ts +1032 -1032
  202. package/packages/splitter/src/util.ts +21 -21
  203. package/packages/splitter-panel/index.ts +16 -16
  204. package/packages/steps/index.ts +16 -16
  205. package/packages/steps/src/steps.ts +57 -57
  206. package/packages/switch/index.ts +16 -16
  207. package/packages/switch/src/switch.ts +279 -279
  208. package/packages/tab-pane/index.ts +16 -16
  209. package/packages/table-select/index.ts +16 -16
  210. package/packages/table-select/src/table-select.ts +904 -904
  211. package/packages/tabs/index.ts +16 -16
  212. package/packages/tabs/src/tab-pane.ts +137 -137
  213. package/packages/tabs/src/tabs.ts +1014 -1014
  214. package/packages/tabs/src/util.ts +21 -21
  215. package/packages/tag/index.ts +16 -16
  216. package/packages/tag/src/tag.ts +195 -195
  217. package/packages/text/index.ts +16 -16
  218. package/packages/text/src/text.ts +267 -267
  219. package/packages/text-ellipsis/index.ts +16 -16
  220. package/packages/text-ellipsis/src/text-ellipsis.ts +291 -291
  221. package/packages/textarea/index.ts +16 -16
  222. package/packages/textarea/src/textarea.ts +436 -436
  223. package/packages/timeline/index.ts +16 -16
  224. package/packages/timeline/src/timeline-item.ts +41 -41
  225. package/packages/timeline/src/timeline.ts +54 -54
  226. package/packages/timeline-item/index.ts +16 -16
  227. package/packages/tip/index.ts +19 -19
  228. package/packages/tip/src/tip.ts +112 -112
  229. package/packages/tooltip/index.ts +16 -16
  230. package/packages/tooltip/src/tooltip.ts +669 -669
  231. package/packages/tour/index.ts +16 -16
  232. package/packages/tour/src/tour.ts +54 -54
  233. package/packages/tree/index.ts +16 -16
  234. package/packages/tree/src/store.ts +15 -15
  235. package/packages/tree/src/tree.ts +3122 -3080
  236. package/packages/tree/src/util.ts +44 -44
  237. package/packages/tree-select/index.ts +16 -16
  238. package/packages/tree-select/src/tree-select.ts +1118 -1116
  239. package/packages/ui/index.ts +697 -697
  240. package/packages/ui/src/anime.ts +52 -52
  241. package/packages/ui/src/comp.ts +3 -3
  242. package/packages/ui/src/dom.ts +279 -279
  243. package/packages/ui/src/log.ts +6 -6
  244. package/packages/ui/src/utils.ts +49 -49
  245. package/packages/ui/src/vn.ts +60 -60
  246. package/packages/upload/index.ts +20 -20
  247. package/packages/upload/src/upload.ts +2129 -2129
  248. package/packages/upload/src/util.ts +109 -109
  249. package/packages/vxe-u-i/index.ts +4 -4
  250. package/packages/watermark/index.ts +31 -31
  251. package/packages/watermark/src/util.ts +176 -176
  252. package/packages/watermark/src/watermark.ts +166 -166
  253. package/styles/all.scss +90 -90
  254. package/styles/base.scss +16 -16
  255. package/styles/components/alert.scss +101 -101
  256. package/styles/components/anchor.scss +44 -44
  257. package/styles/components/avatar.scss +115 -115
  258. package/styles/components/backtop.scss +82 -82
  259. package/styles/components/badge.scss +45 -45
  260. package/styles/components/breadcrumb.scss +29 -29
  261. package/styles/components/button-group.scss +30 -30
  262. package/styles/components/button.scss +415 -415
  263. package/styles/components/calendar.scss +471 -471
  264. package/styles/components/card.scss +121 -121
  265. package/styles/components/carousel.scss +184 -184
  266. package/styles/components/cascader.scss +140 -140
  267. package/styles/components/checkbox-button.scss +57 -57
  268. package/styles/components/checkbox.scss +81 -81
  269. package/styles/components/collapse.scss +56 -56
  270. package/styles/components/color-picker.scss +409 -409
  271. package/styles/components/context-menu.scss +102 -102
  272. package/styles/components/countdown.scss +35 -35
  273. package/styles/components/date-panel.scss +505 -505
  274. package/styles/components/date-picker.scss +247 -247
  275. package/styles/components/date-range-picker.scss +252 -252
  276. package/styles/components/drawer.scss +298 -298
  277. package/styles/components/empty.scss +79 -79
  278. package/styles/components/form.scss +668 -668
  279. package/styles/components/icon-picker.scss +211 -211
  280. package/styles/components/icon.scss +1048 -1048
  281. package/styles/components/image-group.scss +2 -2
  282. package/styles/components/image-preview.scss +215 -215
  283. package/styles/components/image.scss +16 -16
  284. package/styles/components/input.scss +846 -846
  285. package/styles/components/layout-aside.scss +22 -22
  286. package/styles/components/layout-body.scss +14 -14
  287. package/styles/components/layout-container.scss +13 -13
  288. package/styles/components/layout-footer.scss +14 -14
  289. package/styles/components/layout-header.scss +11 -11
  290. package/styles/components/link.scss +115 -115
  291. package/styles/components/list.scss +40 -40
  292. package/styles/components/loading.scss +137 -137
  293. package/styles/components/menu.scss +150 -150
  294. package/styles/components/modal.scss +480 -480
  295. package/styles/components/notice-bar.scss +91 -91
  296. package/styles/components/number-input.scss +283 -283
  297. package/styles/components/old-icon.scss +4 -4
  298. package/styles/components/pager.scss +282 -282
  299. package/styles/components/password-input.scss +374 -374
  300. package/styles/components/print.scss +3 -3
  301. package/styles/components/pulldown.scss +75 -75
  302. package/styles/components/radio-button.scss +57 -57
  303. package/styles/components/radio.scss +79 -79
  304. package/styles/components/rate.scss +76 -76
  305. package/styles/components/result.scss +91 -91
  306. package/styles/components/row.scss +69 -69
  307. package/styles/components/segmented.scss +215 -215
  308. package/styles/components/select.scss +244 -244
  309. package/styles/components/slider.scss +139 -139
  310. package/styles/components/split.scss +1 -1
  311. package/styles/components/splitter.scss +318 -318
  312. package/styles/components/switch.scss +128 -128
  313. package/styles/components/table-select.scss +105 -105
  314. package/styles/components/tabs.scss +745 -745
  315. package/styles/components/tag.scss +184 -184
  316. package/styles/components/text-ellipsis.scss +130 -130
  317. package/styles/components/text.scss +123 -123
  318. package/styles/components/textarea.scss +106 -106
  319. package/styles/components/tip.scss +97 -97
  320. package/styles/components/tooltip.scss +141 -141
  321. package/styles/components/tree-select.scss +166 -166
  322. package/styles/components/tree.scss +294 -294
  323. package/styles/components/upload.scss +497 -497
  324. package/styles/components/watermark.scss +26 -26
  325. package/styles/helpers/baseMixin.scss +95 -95
  326. package/styles/helpers/baseVar.scss +3 -3
  327. package/styles/helpers/placement.scss +38 -38
  328. package/styles/theme/base.scss +214 -214
  329. package/styles/theme/dark.scss +119 -119
  330. package/styles/theme/light.scss +118 -118
  331. package/styles/variable.scss +111 -111
  332. package/types/all.d.ts +328 -328
  333. package/types/components/alert.d.ts +80 -80
  334. package/types/components/anchor-link.d.ts +84 -84
  335. package/types/components/anchor.d.ts +84 -84
  336. package/types/components/avatar.d.ts +81 -81
  337. package/types/components/backtop.d.ts +115 -115
  338. package/types/components/badge.d.ts +69 -69
  339. package/types/components/breadcrumb-item.d.ts +73 -73
  340. package/types/components/breadcrumb.d.ts +80 -80
  341. package/types/components/button-group.d.ts +113 -113
  342. package/types/components/button.d.ts +314 -314
  343. package/types/components/calendar.d.ts +254 -254
  344. package/types/components/card.d.ts +86 -86
  345. package/types/components/carousel-item.d.ts +68 -68
  346. package/types/components/carousel.d.ts +126 -126
  347. package/types/components/cascader.d.ts +250 -250
  348. package/types/components/checkbox-button.d.ts +93 -93
  349. package/types/components/checkbox-group.d.ts +135 -135
  350. package/types/components/checkbox.d.ts +115 -115
  351. package/types/components/col.d.ts +73 -73
  352. package/types/components/colgroup.d.ts +131 -131
  353. package/types/components/collapse-pane.d.ts +82 -82
  354. package/types/components/collapse.d.ts +115 -115
  355. package/types/components/color-picker.d.ts +164 -164
  356. package/types/components/column.d.ts +852 -852
  357. package/types/components/context-menu.d.ts +301 -301
  358. package/types/components/countdown.d.ts +99 -99
  359. package/types/components/date-panel.d.ts +269 -269
  360. package/types/components/date-picker.d.ts +322 -322
  361. package/types/components/date-range-picker.d.ts +336 -336
  362. package/types/components/drawer.d.ts +295 -295
  363. package/types/components/empty.d.ts +71 -71
  364. package/types/components/flow-design.d.ts +78 -78
  365. package/types/components/flow-view.d.ts +78 -78
  366. package/types/components/form-design.d.ts +364 -364
  367. package/types/components/form-gather.d.ts +72 -72
  368. package/types/components/form-group.d.ts +63 -63
  369. package/types/components/form-item.d.ts +405 -405
  370. package/types/components/form-view.d.ts +175 -175
  371. package/types/components/form.d.ts +463 -463
  372. package/types/components/gantt-module/gantt-view.d.ts +171 -171
  373. package/types/components/gantt-module/index.d.ts +1 -1
  374. package/types/components/gantt-plugins/extend-gantt-chart.d.ts +132 -132
  375. package/types/components/gantt-plugins/index.d.ts +1 -1
  376. package/types/components/gantt.d.ts +1201 -1201
  377. package/types/components/grid.d.ts +1038 -1038
  378. package/types/components/icon-picker.d.ts +185 -185
  379. package/types/components/icon.d.ts +80 -80
  380. package/types/components/image-group.d.ts +120 -120
  381. package/types/components/image-preview.d.ts +159 -159
  382. package/types/components/image.d.ts +166 -166
  383. package/types/components/input.d.ts +425 -425
  384. package/types/components/layout-aside.d.ts +73 -73
  385. package/types/components/layout-body.d.ts +84 -84
  386. package/types/components/layout-container.d.ts +66 -66
  387. package/types/components/layout-footer.d.ts +66 -66
  388. package/types/components/layout-header.d.ts +64 -64
  389. package/types/components/link.d.ts +104 -104
  390. package/types/components/list-design.d.ts +177 -177
  391. package/types/components/list-view.d.ts +190 -190
  392. package/types/components/list.d.ts +196 -196
  393. package/types/components/loading.d.ts +96 -96
  394. package/types/components/mention.d.ts +70 -70
  395. package/types/components/menu.d.ts +203 -203
  396. package/types/components/modal.d.ts +540 -540
  397. package/types/components/notice-bar.d.ts +95 -95
  398. package/types/components/number-input.d.ts +300 -300
  399. package/types/components/optgroup.d.ts +81 -81
  400. package/types/components/option.d.ts +95 -95
  401. package/types/components/pager.d.ts +322 -322
  402. package/types/components/password-input.d.ts +129 -129
  403. package/types/components/print-page-break.d.ts +62 -62
  404. package/types/components/print.d.ts +199 -199
  405. package/types/components/pulldown.d.ts +226 -226
  406. package/types/components/radio-button.d.ts +104 -104
  407. package/types/components/radio-group.d.ts +136 -136
  408. package/types/components/radio.d.ts +121 -121
  409. package/types/components/rate.d.ts +75 -75
  410. package/types/components/result.d.ts +77 -77
  411. package/types/components/row.d.ts +72 -72
  412. package/types/components/segmented.d.ts +117 -117
  413. package/types/components/select.d.ts +519 -519
  414. package/types/components/slider.d.ts +117 -117
  415. package/types/components/split-pane.d.ts +135 -135
  416. package/types/components/split.d.ts +318 -318
  417. package/types/components/splitter-panel.d.ts +98 -98
  418. package/types/components/splitter.d.ts +283 -283
  419. package/types/components/steps.d.ts +61 -61
  420. package/types/components/switch.d.ts +124 -124
  421. package/types/components/tab-pane.d.ts +107 -107
  422. package/types/components/table-module/custom.d.ts +115 -115
  423. package/types/components/table-module/edit.d.ts +245 -245
  424. package/types/components/table-module/export.d.ts +96 -96
  425. package/types/components/table-module/filter.d.ts +140 -140
  426. package/types/components/table-module/index.d.ts +7 -7
  427. package/types/components/table-module/keyboard.d.ts +26 -26
  428. package/types/components/table-module/menu.d.ts +26 -26
  429. package/types/components/table-module/validator.d.ts +53 -53
  430. package/types/components/table-plugins/extend-cell-area.d.ts +768 -768
  431. package/types/components/table-plugins/extend-pivot-table.d.ts +68 -68
  432. package/types/components/table-plugins/filters-combination.d.ts +15 -15
  433. package/types/components/table-plugins/filters-complex-input.d.ts +9 -9
  434. package/types/components/table-plugins/index.d.ts +4 -4
  435. package/types/components/table-select.d.ts +216 -216
  436. package/types/components/table.d.ts +7496 -7496
  437. package/types/components/tabs.d.ts +324 -324
  438. package/types/components/tag.d.ts +107 -107
  439. package/types/components/text-ellipsis.d.ts +105 -105
  440. package/types/components/text.d.ts +115 -115
  441. package/types/components/textarea.d.ts +237 -237
  442. package/types/components/timeline-item.d.ts +68 -68
  443. package/types/components/timeline.d.ts +70 -70
  444. package/types/components/tip.d.ts +76 -76
  445. package/types/components/toolbar.d.ts +329 -329
  446. package/types/components/tooltip.d.ts +169 -169
  447. package/types/components/tour.d.ts +70 -70
  448. package/types/components/tree-select.d.ts +299 -299
  449. package/types/components/tree.d.ts +836 -826
  450. package/types/components/upload.d.ts +432 -432
  451. package/types/components/watermark.d.ts +113 -113
  452. package/types/index.d.ts +4 -4
  453. package/types/ui/commands.d.ts +57 -57
  454. package/types/ui/formats.d.ts +62 -62
  455. package/types/ui/global-config.d.ts +254 -254
  456. package/types/ui/global-icon.d.ts +292 -292
  457. package/types/ui/hooks.d.ts +11 -11
  458. package/types/ui/index.d.ts +95 -95
  459. package/types/ui/interceptor.d.ts +54 -54
  460. package/types/ui/menus.d.ts +77 -77
  461. package/types/ui/renderer.d.ts +1042 -1042
  462. package/types/ui/validators.d.ts +38 -38
  463. /package/es/icon/{iconfont.1778223321885.ttf → iconfont.1778317204332.ttf} +0 -0
  464. /package/es/icon/{iconfont.1778223321885.woff → iconfont.1778317204332.woff} +0 -0
  465. /package/es/icon/{iconfont.1778223321885.woff2 → iconfont.1778317204332.woff2} +0 -0
  466. /package/es/{iconfont.1778223321885.ttf → iconfont.1778317204332.ttf} +0 -0
  467. /package/es/{iconfont.1778223321885.woff → iconfont.1778317204332.woff} +0 -0
  468. /package/es/{iconfont.1778223321885.woff2 → iconfont.1778317204332.woff2} +0 -0
  469. /package/lib/icon/style/{iconfont.1778223321885.ttf → iconfont.1778317204332.ttf} +0 -0
  470. /package/lib/icon/style/{iconfont.1778223321885.woff → iconfont.1778317204332.woff} +0 -0
  471. /package/lib/icon/style/{iconfont.1778223321885.woff2 → iconfont.1778317204332.woff2} +0 -0
  472. /package/lib/{iconfont.1778223321885.ttf → iconfont.1778317204332.ttf} +0 -0
  473. /package/lib/{iconfont.1778223321885.woff → iconfont.1778317204332.woff} +0 -0
  474. /package/lib/{iconfont.1778223321885.woff2 → iconfont.1778317204332.woff2} +0 -0
@@ -1,2024 +1,2024 @@
1
- import { PropType, CreateElement, VNode } from 'vue'
2
- import { defineVxeComponent } from '../../ui/src/comp'
3
- import XEUtils from 'xe-utils'
4
- import { getConfig, getI18n, createEvent, globalMixins, renderEmptyElement } from '../../ui'
5
- import { toStringTimeDate, getDateQuarter, parseDateValue, parseDateObj, handleValueFormat, hasDateValueType, hasTimestampValueType } from './util'
6
-
7
- import type { VxeDatePanelConstructor, DatePanelInternalData, DatePanelReactData, VxeDatePanelPropTypes, VxeComponentSizeType, ValueOf, VxeDatePanelEmits, VxeDatePanelDefines } from '../../../types'
8
-
9
- export default /* define-vxe-component start */ defineVxeComponent({
10
- name: 'VxeDatePanel',
11
- mixins: [
12
- globalMixins.sizeMixin
13
- ],
14
- model: {
15
- prop: 'value',
16
- event: 'modelValue'
17
- },
18
- props: {
19
- value: [String, Number, Date] as PropType<VxeDatePanelPropTypes.ModelValue>,
20
- type: {
21
- type: String as PropType<VxeDatePanelPropTypes.Type>,
22
- default: 'date' as VxeDatePanelPropTypes.Type
23
- },
24
- className: String as PropType<VxeDatePanelPropTypes.ClassName>,
25
- size: {
26
- type: String as PropType<VxeDatePanelPropTypes.Size>,
27
- default: () => getConfig().datePanel.size || getConfig().size
28
- },
29
- multiple: Boolean as PropType<VxeDatePanelPropTypes.Multiple>,
30
- limitCount: {
31
- type: [String, Number] as PropType<VxeDatePanelPropTypes.LimitCount>,
32
- default: () => getConfig().datePanel.limitCount
33
- },
34
-
35
- // date、week、month、quarter、year
36
- startDate: {
37
- type: [String, Number, Date] as PropType<VxeDatePanelPropTypes.StartDate>,
38
- default: () => getConfig().datePanel.startDate
39
- },
40
- endDate: {
41
- type: [String, Number, Date] as PropType<VxeDatePanelPropTypes.EndDate>,
42
- default: () => getConfig().datePanel.endDate
43
- },
44
- defaultDate: [String, Number, Date] as PropType<VxeDatePanelPropTypes.DefaultDate>,
45
- defaultTime: [String, Number, Date] as PropType<VxeDatePanelPropTypes.DefaultTime>,
46
- minDate: [String, Number, Date] as PropType<VxeDatePanelPropTypes.MinDate>,
47
- maxDate: [String, Number, Date] as PropType<VxeDatePanelPropTypes.MaxDate>,
48
- startDay: {
49
- type: [String, Number] as PropType<VxeDatePanelPropTypes.StartDay>,
50
- default: () => getConfig().datePanel.startDay
51
- },
52
- labelFormat: String as PropType<VxeDatePanelPropTypes.LabelFormat>,
53
- valueFormat: String as PropType<VxeDatePanelPropTypes.ValueFormat>,
54
- timeFormat: String as PropType<VxeDatePanelPropTypes.TimeFormat>,
55
- festivalMethod: {
56
- type: Function as PropType<VxeDatePanelPropTypes.FestivalMethod>,
57
- default: () => getConfig().datePanel.festivalMethod
58
- },
59
- disabledMethod: {
60
- type: Function as PropType<VxeDatePanelPropTypes.DisabledMethod>,
61
- default: () => getConfig().datePanel.disabledMethod
62
- },
63
-
64
- timeConfig: Object as PropType<VxeDatePanelPropTypes.TimeConfig>,
65
-
66
- // week
67
- selectDay: {
68
- type: [String, Number] as PropType<VxeDatePanelPropTypes.SelectDay>,
69
- default: () => getConfig().datePanel.selectDay
70
- }
71
- },
72
- data () {
73
- const xID = XEUtils.uniqueId()
74
-
75
- const reactData: DatePanelReactData = {
76
- visiblePanel: false,
77
- isAniVisible: false,
78
- isActivated: false,
79
- inputValue: '',
80
- inputLabel: '',
81
- datetimePanelValue: null,
82
- datePanelValue: null,
83
- datePanelLabel: '',
84
- datePanelType: 'day',
85
- selectMonth: null,
86
- currentDate: null
87
- }
88
-
89
- const internalData: DatePanelInternalData = {
90
- yearSize: 12,
91
- monthSize: 20,
92
- quarterSize: 8,
93
- hpTimeout: undefined as any
94
- }
95
-
96
- return {
97
- xID,
98
- reactData,
99
- internalData
100
- }
101
- },
102
- computed: {
103
- ...({} as {
104
- computeSize(): VxeComponentSizeType
105
- }),
106
- computeIsDateTimeType () {
107
- const $xeDatePanel = this
108
- const props = $xeDatePanel
109
-
110
- const { type } = props
111
- return type === 'time' || type === 'datetime'
112
- },
113
- computeIsDatePanelType () {
114
- const $xeDatePanel = this
115
- const props = $xeDatePanel
116
-
117
- const isDateTimeType = $xeDatePanel.computeIsDateTimeType
118
- return isDateTimeType || ['date', 'week', 'month', 'quarter', 'year'].indexOf(props.type) > -1
119
- },
120
- computeDateStartTime () {
121
- const $xeDatePanel = this
122
- const props = $xeDatePanel
123
-
124
- return props.startDate ? XEUtils.toStringDate(props.startDate) : null
125
- },
126
- computeDateEndTime () {
127
- const $xeDatePanel = this
128
- const props = $xeDatePanel
129
-
130
- return props.endDate ? XEUtils.toStringDate(props.endDate) : null
131
- },
132
- computeDateListValue () {
133
- const $xeDatePanel = this
134
- const props = $xeDatePanel
135
-
136
- const { value: modelValue, multiple } = props
137
- const isDatePanelType = $xeDatePanel.computeIsDatePanelType as boolean
138
- const dateValueFormat = $xeDatePanel.computeDateValueFormat as string
139
- if (multiple && modelValue && isDatePanelType) {
140
- return XEUtils.toValueString(modelValue).split(',').map(item => {
141
- const date = ($xeDatePanel as any).parseDate(item, dateValueFormat)
142
- if (XEUtils.isValidDate(date)) {
143
- return date
144
- }
145
- return date
146
- })
147
- }
148
- return []
149
- },
150
- computeDateMultipleValue () {
151
- const $xeDatePanel = this
152
-
153
- const dateListValue = $xeDatePanel.computeDateListValue as Date[]
154
- const dateValueFormat = $xeDatePanel.computeDateValueFormat as string
155
- return dateListValue.map(date => XEUtils.toDateString(date, dateValueFormat))
156
- },
157
- computeDateMultipleLabel () {
158
- const $xeDatePanel = this
159
-
160
- const dateListValue = $xeDatePanel.computeDateListValue as Date[]
161
- const dateLabelFormat = $xeDatePanel.computeDateLabelFormat as string
162
- return dateListValue.map(date => XEUtils.toDateString(date, dateLabelFormat)).join(', ')
163
- },
164
- computeLimitMaxCount () {
165
- const $xeDatePanel = this
166
- const props = $xeDatePanel
167
-
168
- return props.multiple ? XEUtils.toNumber(props.limitCount) : 0
169
- },
170
- computeOverCount () {
171
- const $xeDatePanel = this
172
- const props = $xeDatePanel
173
-
174
- const { multiple } = props
175
- const limitMaxCount = $xeDatePanel.computeLimitMaxCount as number
176
- const dateMultipleValue = $xeDatePanel.computeDateMultipleValue as string[]
177
- if (multiple && limitMaxCount) {
178
- return dateMultipleValue.length >= limitMaxCount
179
- }
180
- return false
181
- },
182
- computeDateValueFormat () {
183
- const $xeDatePanel = this
184
- const props = $xeDatePanel
185
-
186
- const { type, valueFormat } = props
187
- return handleValueFormat(type, valueFormat)
188
- },
189
- computeTimeOpts () {
190
- const $xeDatePanel = this
191
- const props = $xeDatePanel
192
-
193
- return Object.assign({}, getConfig().datePanel.timeConfig, props.timeConfig)
194
- },
195
- computeDateValue () {
196
- const $xeDatePanel = this
197
- const props = $xeDatePanel
198
-
199
- const { value: modelValue } = props
200
- const isDatePanelType = $xeDatePanel.computeIsDatePanelType
201
- const dateValueFormat = $xeDatePanel.computeDateValueFormat
202
- let val = null
203
- if (modelValue && isDatePanelType) {
204
- const date = ($xeDatePanel as any).parseDate(modelValue, dateValueFormat)
205
- if (XEUtils.isValidDate(date)) {
206
- val = date
207
- }
208
- }
209
- return val
210
- },
211
- computeIsDisabledPrevDateBtn () {
212
- const $xeDatePanel = this
213
- const reactData = $xeDatePanel.reactData as DatePanelReactData
214
-
215
- const dateStartTime = $xeDatePanel.computeDateStartTime as Date | null
216
- const { selectMonth } = reactData
217
- if (selectMonth && dateStartTime) {
218
- return selectMonth <= dateStartTime
219
- }
220
- return false
221
- },
222
- computeIsDisabledNextDateBtn () {
223
- const $xeDatePanel = this
224
- const reactData = $xeDatePanel.reactData as DatePanelReactData
225
-
226
- const dateEndTime = $xeDatePanel.computeDateEndTime as Date | null
227
- const { selectMonth } = reactData
228
- if (selectMonth && dateEndTime) {
229
- return XEUtils.getWhatMonth(selectMonth, 0, 'last') >= dateEndTime
230
- }
231
- return false
232
- },
233
- computeDateTimeLabel () {
234
- const $xeDatePanel = this
235
- const reactData = ($xeDatePanel as unknown as VxeDatePanelConstructor).reactData
236
-
237
- const { datetimePanelValue } = reactData
238
- const hasTimeSecond = $xeDatePanel.computeHasTimeSecond
239
- const hasTimeMinute = $xeDatePanel.computeHasTimeMinute
240
- if (datetimePanelValue) {
241
- return XEUtils.toDateString(datetimePanelValue, hasTimeMinute && hasTimeSecond ? 'HH:mm:ss' : (hasTimeMinute ? 'HH:mm' : 'HH'))
242
- }
243
- return ''
244
- },
245
- computeDateHMSTime () {
246
- const $xeDatePanel = this
247
-
248
- const dateValue = $xeDatePanel.computeDateValue as Date | null
249
- const isDateTimeType = $xeDatePanel.computeIsDateTimeType
250
- return dateValue && isDateTimeType ? (dateValue.getHours() * 3600 + dateValue.getMinutes() * 60 + dateValue.getSeconds()) * 1000 : 0
251
- },
252
- computeDateLabelFormat () {
253
- const $xeDatePanel = this
254
- const props = $xeDatePanel
255
-
256
- const { labelFormat } = props
257
- const isDatePanelType = $xeDatePanel.computeIsDatePanelType
258
- if (isDatePanelType) {
259
- return labelFormat || getI18n(`vxe.input.date.labelFormat.${props.type}`)
260
- }
261
- return ''
262
- },
263
- computeYearList () {
264
- const $xeDatePanel = this
265
- const reactData = $xeDatePanel.reactData
266
- const internalData = $xeDatePanel.internalData
267
-
268
- const { yearSize } = internalData
269
- const { selectMonth, currentDate } = reactData
270
- const years: VxeDatePanelDefines.DateYearItem[] = []
271
- if (selectMonth && currentDate) {
272
- const currFullYear = currentDate.getFullYear()
273
- const selectFullYear = selectMonth.getFullYear()
274
- const startYearDate = new Date(selectFullYear - selectFullYear % yearSize, 0, 1)
275
- for (let index = -4; index < yearSize + 4; index++) {
276
- const date = XEUtils.getWhatYear(startYearDate, index, 'first')
277
- const itemFullYear = date.getFullYear()
278
- years.push({
279
- date,
280
- isCurrent: true,
281
- isPrev: index < 0,
282
- isNow: currFullYear === itemFullYear,
283
- isNext: index >= yearSize,
284
- year: itemFullYear
285
- })
286
- }
287
- }
288
- return years
289
- },
290
- computeSelectDatePanelObj () {
291
- const $xeDatePanel = this
292
- const reactData = $xeDatePanel.reactData
293
-
294
- const isDatePanelType = $xeDatePanel.computeIsDatePanelType
295
- let y = ''
296
- let m = ''
297
- if (isDatePanelType) {
298
- const { datePanelType, selectMonth } = reactData
299
- const yearList = $xeDatePanel.computeYearList
300
- let year = ''
301
- let month
302
- if (selectMonth) {
303
- year = selectMonth.getFullYear()
304
- month = selectMonth.getMonth() + 1
305
- }
306
- if (datePanelType === 'quarter' || datePanelType === 'month') {
307
- y = `${year}`
308
- } else if (datePanelType === 'year') {
309
- y = yearList.length ? `${yearList[0].year} - ${yearList[yearList.length - 1].year}` : ''
310
- } else {
311
- y = `${year}`
312
- m = month ? getI18n('vxe.calendar.monthLabel', [month]) : '-'
313
- }
314
- }
315
- return {
316
- y: getI18n('vxe.calendar.yearLabel', [y]),
317
- m
318
- }
319
- },
320
- computeFirstDayOfWeek () {
321
- const $xeDatePanel = this
322
- const props = $xeDatePanel
323
-
324
- const { startDay } = props
325
- return XEUtils.toNumber(startDay) as VxeDatePanelPropTypes.StartDay
326
- },
327
- computeWeekDatas () {
328
- const $xeDatePanel = this
329
-
330
- const weeks: number[] = []
331
- const isDatePanelType = $xeDatePanel.computeIsDatePanelType
332
- if (isDatePanelType) {
333
- let sWeek = $xeDatePanel.computeFirstDayOfWeek
334
- weeks.push(sWeek)
335
- for (let index = 0; index < 6; index++) {
336
- if (sWeek >= 6) {
337
- sWeek = 0
338
- } else {
339
- sWeek++
340
- }
341
- weeks.push(sWeek)
342
- }
343
- }
344
- return weeks
345
- },
346
- computeDateHeaders () {
347
- const $xeDatePanel = this
348
-
349
- const isDatePanelType = $xeDatePanel.computeIsDatePanelType
350
- if (isDatePanelType) {
351
- const weekDatas = $xeDatePanel.computeWeekDatas as number[]
352
- return weekDatas.map((day) => {
353
- return {
354
- value: day,
355
- label: getI18n(`vxe.input.date.weeks.w${day}`)
356
- }
357
- })
358
- }
359
- return []
360
- },
361
- computeWeekHeaders () {
362
- const $xeDatePanel = this
363
-
364
- const isDatePanelType = $xeDatePanel.computeIsDatePanelType
365
- if (isDatePanelType) {
366
- const dateHeaders = $xeDatePanel.computeDateHeaders as {
367
- value: number;
368
- label: string;
369
- }[]
370
- return [{ label: getI18n('vxe.input.date.weeks.w') }].concat(dateHeaders)
371
- }
372
- return []
373
- },
374
- computeYearDatas () {
375
- const $xeDatePanel = this
376
-
377
- const yearList = $xeDatePanel.computeYearList as VxeDatePanelDefines.DateYearItem[]
378
- return XEUtils.chunk(yearList, 4)
379
- },
380
- computeQuarterList () {
381
- const $xeDatePanel = this
382
- const reactData = $xeDatePanel.reactData
383
- const internalData = $xeDatePanel.internalData
384
-
385
- const { quarterSize } = internalData
386
- const { selectMonth, currentDate } = reactData
387
- const quarters: VxeDatePanelDefines.DateQuarterItem[] = []
388
- if (selectMonth && currentDate) {
389
- const currFullYear = currentDate.getFullYear()
390
- const currQuarter = getDateQuarter(currentDate)
391
- const firstYear = XEUtils.getWhatYear(selectMonth, 0, 'first')
392
- const selFullYear = firstYear.getFullYear()
393
- for (let index = -2; index < quarterSize - 2; index++) {
394
- const date = XEUtils.getWhatQuarter(firstYear, index)
395
- const itemFullYear = date.getFullYear()
396
- const itemQuarter = getDateQuarter(date)
397
- const isPrev = itemFullYear < selFullYear
398
- quarters.push({
399
- date,
400
- isPrev,
401
- isCurrent: itemFullYear === selFullYear,
402
- isNow: itemFullYear === currFullYear && itemQuarter === currQuarter,
403
- isNext: !isPrev && itemFullYear > selFullYear,
404
- quarter: itemQuarter
405
- })
406
- }
407
- }
408
- return quarters
409
- },
410
- computeQuarterDatas () {
411
- const $xeDatePanel = this
412
-
413
- const quarterList = $xeDatePanel.computeQuarterList as VxeDatePanelDefines.DateQuarterItem[]
414
- return XEUtils.chunk(quarterList, 2)
415
- },
416
- computeMonthList () {
417
- const $xeDatePanel = this
418
- const reactData = $xeDatePanel.reactData
419
- const internalData = $xeDatePanel.internalData
420
-
421
- const { monthSize } = internalData
422
- const { selectMonth, currentDate } = reactData
423
- const months: VxeDatePanelDefines.DateMonthItem[] = []
424
- if (selectMonth && currentDate) {
425
- const currFullYear = currentDate.getFullYear()
426
- const currMonth = currentDate.getMonth()
427
- const selFullYear = XEUtils.getWhatYear(selectMonth, 0, 'first').getFullYear()
428
- for (let index = -4; index < monthSize - 4; index++) {
429
- const date = XEUtils.getWhatYear(selectMonth, 0, index)
430
- const itemFullYear = date.getFullYear()
431
- const itemMonth = date.getMonth()
432
- const isPrev = itemFullYear < selFullYear
433
- months.push({
434
- date,
435
- isPrev,
436
- isCurrent: itemFullYear === selFullYear,
437
- isNow: itemFullYear === currFullYear && itemMonth === currMonth,
438
- isNext: !isPrev && itemFullYear > selFullYear,
439
- month: itemMonth
440
- })
441
- }
442
- }
443
- return months
444
- },
445
- computeMonthDatas () {
446
- const $xeDatePanel = this
447
-
448
- const monthList = $xeDatePanel.computeMonthList as VxeDatePanelDefines.DateMonthItem[]
449
- return XEUtils.chunk(monthList, 4)
450
- },
451
- computeDayList () {
452
- const $xeDatePanel = this
453
- const reactData = $xeDatePanel.reactData
454
-
455
- const { selectMonth, currentDate } = reactData
456
- const days: VxeDatePanelDefines.DateDayItem[] = []
457
- if (selectMonth && currentDate) {
458
- const dateHMSTime = $xeDatePanel.computeDateHMSTime
459
- const weekDatas = $xeDatePanel.computeWeekDatas
460
- const currFullYear = currentDate.getFullYear()
461
- const currMonth = currentDate.getMonth()
462
- const currDate = currentDate.getDate()
463
- const selFullYear = selectMonth.getFullYear()
464
- const selMonth = selectMonth.getMonth()
465
- const selDay = selectMonth.getDay()
466
- const prevOffsetDate = -weekDatas.indexOf(selDay)
467
- const startDayDate = new Date(XEUtils.getWhatDay(selectMonth, prevOffsetDate).getTime() + dateHMSTime)
468
- for (let index = 0; index < 42; index++) {
469
- const date = XEUtils.getWhatDay(startDayDate, index)
470
- const itemFullYear = date.getFullYear()
471
- const itemMonth = date.getMonth()
472
- const itemDate = date.getDate()
473
- const isPrev = date < selectMonth
474
- days.push({
475
- date,
476
- isPrev,
477
- isCurrent: itemFullYear === selFullYear && itemMonth === selMonth,
478
- isNow: itemFullYear === currFullYear && itemMonth === currMonth && itemDate === currDate,
479
- isNext: !isPrev && selMonth !== itemMonth,
480
- label: itemDate
481
- })
482
- }
483
- }
484
- return days
485
- },
486
- computeDayDatas () {
487
- const $xeDatePanel = this
488
-
489
- const dayList = $xeDatePanel.computeDayList as VxeDatePanelDefines.DateDayItem[]
490
- return XEUtils.chunk(dayList, 7)
491
- },
492
- computeWeekDates () {
493
- const $xeDatePanel = this
494
-
495
- const dayDatas = $xeDatePanel.computeDayDatas as VxeDatePanelDefines.DateDayItem[][]
496
- const firstDayOfWeek = $xeDatePanel.computeFirstDayOfWeek
497
- return dayDatas.map((list) => {
498
- const firstItem = list[0]
499
- const item: VxeDatePanelDefines.DateDayItem = {
500
- date: firstItem.date,
501
- isWeekNumber: true,
502
- isPrev: false,
503
- isCurrent: false,
504
- isNow: false,
505
- isNext: false,
506
- label: XEUtils.getYearWeek(firstItem.date, firstDayOfWeek)
507
- }
508
- return [item].concat(list)
509
- })
510
- },
511
- computeHourList () {
512
- const $xeDatePanel = this
513
-
514
- const timeOpts = $xeDatePanel.computeTimeOpts
515
- const { hours: hourOptions, hourDisabledMethod } = timeOpts
516
- const list: VxeDatePanelDefines.DateHourMinuteSecondItem[] = []
517
- const isDateTimeType = $xeDatePanel.computeIsDateTimeType
518
- if (isDateTimeType) {
519
- if (hourOptions && hourOptions.length) {
520
- hourOptions.forEach(item => {
521
- if (XEUtils.isNumber(item) || XEUtils.isString(item)) {
522
- const hour = XEUtils.toNumber(item)
523
- list.push({
524
- value: hour,
525
- label: ('' + hour).padStart(2, '0'),
526
- disabled: !!(hourDisabledMethod && hourDisabledMethod({ hour }))
527
- })
528
- } else if (item) {
529
- const hour = XEUtils.toNumber(item.value)
530
- list.push({
531
- value: hour,
532
- label: ('' + (item.label || hour)).padStart(2, '0'),
533
- disabled: XEUtils.isBoolean(item.disabled) ? item.disabled : !!(hourDisabledMethod && hourDisabledMethod({ hour }))
534
- })
535
- }
536
- })
537
- } else {
538
- for (let index = 0; index < 24; index++) {
539
- const hour = index
540
- list.push({
541
- value: hour,
542
- label: ('' + hour).padStart(2, '0'),
543
- disabled: !!(hourDisabledMethod && hourDisabledMethod({ hour }))
544
- })
545
- }
546
- }
547
- }
548
- return list
549
- },
550
- computeMinuteList () {
551
- const $xeDatePanel = this
552
-
553
- const timeOpts = $xeDatePanel.computeTimeOpts
554
- const { minutes: minuteOptions, minuteDisabledMethod } = timeOpts
555
- const list: VxeDatePanelDefines.DateHourMinuteSecondItem[] = []
556
- const isDateTimeType = $xeDatePanel.computeIsDateTimeType
557
- if (isDateTimeType) {
558
- if (minuteOptions && minuteOptions.length) {
559
- minuteOptions.forEach(item => {
560
- if (XEUtils.isNumber(item) || XEUtils.isString(item)) {
561
- const minute = XEUtils.toNumber(item)
562
- list.push({
563
- value: minute,
564
- label: ('' + minute).padStart(2, '0'),
565
- disabled: !!(minuteDisabledMethod && minuteDisabledMethod({ minute }))
566
- })
567
- } else if (item) {
568
- const minute = XEUtils.toNumber(item.value)
569
- list.push({
570
- value: minute,
571
- label: ('' + (item.label || minute)).padStart(2, '0'),
572
- disabled: XEUtils.isBoolean(item.disabled) ? item.disabled : !!(minuteDisabledMethod && minuteDisabledMethod({ minute }))
573
- })
574
- }
575
- })
576
- } else {
577
- for (let index = 0; index < 60; index++) {
578
- const minute = index
579
- list.push({
580
- value: minute,
581
- label: ('' + minute).padStart(2, '0'),
582
- disabled: !!(minuteDisabledMethod && minuteDisabledMethod({ minute }))
583
- })
584
- }
585
- }
586
- }
587
- return list
588
- },
589
- computeHasTimeMinute () {
590
- const $xeDatePanel = this
591
- const props = $xeDatePanel
592
-
593
- const { timeFormat } = props
594
- const dateValueFormat = $xeDatePanel.computeDateValueFormat as string
595
- return !/HH/.test(timeFormat || dateValueFormat) || /mm/.test(timeFormat || dateValueFormat)
596
- },
597
- computeHasTimeSecond () {
598
- const $xeDatePanel = this
599
- const props = $xeDatePanel
600
-
601
- const { timeFormat } = props
602
- const dateValueFormat = $xeDatePanel.computeDateValueFormat as string
603
- return !/HH/.test(timeFormat || dateValueFormat) || /ss/.test(timeFormat || dateValueFormat)
604
- },
605
- computeSecondList () {
606
- const $xeDatePanel = this
607
-
608
- const timeOpts = $xeDatePanel.computeTimeOpts
609
- const { seconds: secondOptions, secondDisabledMethod } = timeOpts
610
- const list: VxeDatePanelDefines.DateHourMinuteSecondItem[] = []
611
- const isDateTimeType = $xeDatePanel.computeIsDateTimeType
612
- if (isDateTimeType) {
613
- if (secondOptions && secondOptions.length) {
614
- secondOptions.forEach(item => {
615
- if (XEUtils.isNumber(item) || XEUtils.isString(item)) {
616
- const second = XEUtils.toNumber(item)
617
- list.push({
618
- value: second,
619
- label: ('' + second).padStart(2, '0'),
620
- disabled: !!(secondDisabledMethod && secondDisabledMethod({ second }))
621
- })
622
- } else if (item) {
623
- const second = XEUtils.toNumber(item.value)
624
- list.push({
625
- value: second,
626
- label: ('' + (item.label || second)).padStart(2, '0'),
627
- disabled: XEUtils.isBoolean(item.disabled) ? item.disabled : !!(secondDisabledMethod && secondDisabledMethod({ second }))
628
- })
629
- }
630
- })
631
- } else {
632
- for (let index = 0; index < 60; index++) {
633
- const second = index
634
- list.push({
635
- value: second,
636
- label: ('' + second).padStart(2, '0'),
637
- disabled: !!(secondDisabledMethod && secondDisabledMethod({ second }))
638
- })
639
- }
640
- }
641
- }
642
- return list
643
- }
644
- },
645
- methods: {
646
- //
647
- // Method
648
- //
649
- dispatchEvent (type: ValueOf<VxeDatePanelEmits>, params: Record<string, any>, evnt: Event | null) {
650
- const $xeDatePanel = this
651
- $xeDatePanel.$emit(type, createEvent(evnt, { $datePanel: $xeDatePanel }, params))
652
- },
653
- emitModel (value: any) {
654
- const $xeDatePanel = this
655
- const reactData = $xeDatePanel.reactData
656
-
657
- const { _events } = $xeDatePanel as any
658
- reactData.inputValue = value
659
- if (_events && _events.modelValue) {
660
- $xeDatePanel.$emit('modelValue', value)
661
- } else {
662
- $xeDatePanel.$emit('model-value', value)
663
- }
664
- },
665
- updateModelValue (modelValue: VxeDatePanelPropTypes.ModelValue | undefined) {
666
- const $xeDatePanel = this
667
- const props = $xeDatePanel
668
- const reactData = $xeDatePanel.reactData
669
-
670
- const { type } = props
671
- const dateValueFormat = $xeDatePanel.computeDateValueFormat
672
-
673
- const inpDate = parseDateValue(modelValue, type, { valueFormat: dateValueFormat })
674
- reactData.inputValue = inpDate
675
- reactData.inputLabel = inpDate
676
- $xeDatePanel.dateOpenPanel()
677
- },
678
- parseDate (value: VxeDatePanelPropTypes.ModelValue, format: string) {
679
- const $xeDatePanel = this
680
- const props = $xeDatePanel
681
-
682
- const { type, multiple } = props
683
- if (type === 'time') {
684
- return toStringTimeDate(value)
685
- }
686
- if (XEUtils.isArray(value)) {
687
- return XEUtils.toStringDate(value[0], format)
688
- }
689
- if (XEUtils.isString(value)) {
690
- return XEUtils.toStringDate(multiple ? XEUtils.last(value.split(',')) : value, format)
691
- }
692
- return XEUtils.toStringDate(value, format)
693
- },
694
- dateRevert () {
695
- const $xeDatePanel = this
696
- const props = $xeDatePanel
697
- const reactData = $xeDatePanel.reactData
698
-
699
- reactData.inputLabel = props.multiple ? $xeDatePanel.computeDateMultipleLabel : reactData.datePanelLabel
700
- },
701
- afterCheckValue (inpVal: string) {
702
- const $xeDatePanel = this
703
- const props = $xeDatePanel
704
- const reactData = $xeDatePanel.reactData
705
-
706
- const { type } = props
707
- const { inputLabel, datetimePanelValue } = reactData
708
- const dateLabelFormat = $xeDatePanel.computeDateLabelFormat
709
- if (inpVal) {
710
- let inpDateVal: VxeDatePanelPropTypes.ModelValue = $xeDatePanel.parseDate(inpVal, dateLabelFormat as string)
711
- if (XEUtils.isValidDate(inpDateVal)) {
712
- if (type === 'time') {
713
- inpDateVal = XEUtils.toDateString(inpDateVal, dateLabelFormat)
714
- if (inputLabel !== inpDateVal) {
715
- $xeDatePanel.handleChange(inpDateVal, { type: 'check' })
716
- }
717
- reactData.inputLabel = inpDateVal
718
- } else {
719
- let isChange = false
720
- const firstDayOfWeek = $xeDatePanel.computeFirstDayOfWeek
721
- if (type === 'datetime') {
722
- const dateValue = $xeDatePanel.computeDateValue
723
- if (inpVal !== XEUtils.toDateString(dateValue, dateLabelFormat) || inpVal !== XEUtils.toDateString(inpDateVal, dateLabelFormat)) {
724
- isChange = true
725
- if (datetimePanelValue) {
726
- datetimePanelValue.setHours(inpDateVal.getHours())
727
- datetimePanelValue.setMinutes(inpDateVal.getMinutes())
728
- datetimePanelValue.setSeconds(inpDateVal.getSeconds())
729
- }
730
- }
731
- } else {
732
- isChange = true
733
- }
734
- reactData.inputLabel = XEUtils.toDateString(inpDateVal, dateLabelFormat, { firstDay: firstDayOfWeek })
735
- if (isChange) {
736
- $xeDatePanel.dateChange(inpDateVal)
737
- }
738
- }
739
- } else {
740
- $xeDatePanel.dateRevert()
741
- }
742
- } else {
743
- $xeDatePanel.handleChange('', { type: 'check' })
744
- }
745
- },
746
- handleChange (value: string, evnt: Event | { type: string }) {
747
- const $xeDatePanel = this
748
- const props = $xeDatePanel
749
- const reactData = $xeDatePanel.reactData
750
-
751
- const { type, value: modelValue, valueFormat } = props
752
- const dateValueFormat = $xeDatePanel.computeDateValueFormat
753
- reactData.inputLabel = value
754
- if (hasTimestampValueType(valueFormat)) {
755
- const dateVal = parseDateValue(value, type, { valueFormat: dateValueFormat })
756
- const timeNum = dateVal ? dateVal.getTime() : null
757
- $xeDatePanel.emitModel(timeNum)
758
- if (modelValue !== timeNum) {
759
- $xeDatePanel.dispatchEvent('change', { value: timeNum }, evnt as Event)
760
- }
761
- } else if (hasDateValueType(valueFormat)) {
762
- const dateVal = parseDateValue(value, type, { valueFormat: dateValueFormat })
763
- $xeDatePanel.emitModel(dateVal)
764
- if (modelValue && dateVal ? XEUtils.toStringDate(modelValue).getTime() !== dateVal.getTime() : modelValue !== dateVal) {
765
- $xeDatePanel.dispatchEvent('change', { value: dateVal }, evnt as Event)
766
- }
767
- } else {
768
- $xeDatePanel.emitModel(value)
769
- if (XEUtils.toValueString(modelValue) !== value) {
770
- $xeDatePanel.dispatchEvent('change', { value }, evnt as Event)
771
- }
772
- }
773
- },
774
- hidePanel () {
775
- const $xeDatePanel = this
776
- const reactData = $xeDatePanel.reactData
777
- const internalData = $xeDatePanel.internalData
778
-
779
- return new Promise<void>(resolve => {
780
- reactData.visiblePanel = false
781
- internalData.hpTimeout = setTimeout(() => {
782
- reactData.isAniVisible = false
783
- resolve()
784
- }, 350)
785
- })
786
- },
787
- dateParseValue (val?: VxeDatePanelPropTypes.ModelValue) {
788
- const $xeDatePanel = this
789
- const props = $xeDatePanel
790
- const reactData = $xeDatePanel.reactData
791
-
792
- const { type } = props
793
- const dateLabelFormat = $xeDatePanel.computeDateLabelFormat
794
- const dateValueFormat = $xeDatePanel.computeDateValueFormat
795
- const firstDayOfWeek = $xeDatePanel.computeFirstDayOfWeek
796
- const dateObj = parseDateObj(val, type, {
797
- valueFormat: dateValueFormat,
798
- labelFormat: dateLabelFormat,
799
- firstDay: firstDayOfWeek
800
- })
801
- reactData.datePanelValue = dateObj.value
802
- reactData.datePanelLabel = dateObj.label
803
- },
804
- /**
805
- * 值变化时处理
806
- */
807
- changeValue () {
808
- const $xeDatePanel = this
809
- const props = $xeDatePanel
810
- const reactData = $xeDatePanel.reactData
811
-
812
- const isDatePanelType = $xeDatePanel.computeIsDatePanelType
813
- const { inputLabel } = reactData
814
- if (isDatePanelType) {
815
- $xeDatePanel.dateParseValue(inputLabel)
816
- reactData.inputLabel = props.multiple ? $xeDatePanel.computeDateMultipleLabel : reactData.datePanelLabel
817
- }
818
- },
819
- /**
820
- * 检查初始值
821
- */
822
- initValue () {
823
- const $xeDatePanel = this
824
- const props = $xeDatePanel
825
-
826
- const { value: modelValue } = props
827
- const isDatePanelType = $xeDatePanel.computeIsDatePanelType
828
- $xeDatePanel.updateModelValue(modelValue)
829
- if (isDatePanelType) {
830
- $xeDatePanel.changeValue()
831
- }
832
- },
833
- dateCheckMonth (date: Date) {
834
- const $xeDatePanel = this
835
- const reactData = $xeDatePanel.reactData
836
-
837
- const firstDayOfWeek = $xeDatePanel.computeFirstDayOfWeek
838
- const weekNum = XEUtils.getYearWeek(date, firstDayOfWeek)
839
- const weekStartDate = XEUtils.getWhatWeek(date, 0, firstDayOfWeek, firstDayOfWeek)
840
- const month = XEUtils.getWhatMonth(weekNum === 1 ? XEUtils.getWhatDay(weekStartDate, 6) : date, 0, 'first')
841
- if (!XEUtils.isEqual(month, reactData.selectMonth)) {
842
- reactData.selectMonth = month
843
- }
844
- },
845
- dateChange (date: Date, isReload?: boolean) {
846
- const $xeDatePanel = this
847
- const props = $xeDatePanel
848
- const reactData = $xeDatePanel.reactData
849
-
850
- const { value: modelValue, multiple } = props
851
- const { datetimePanelValue } = reactData
852
- const isDateTimeType = $xeDatePanel.computeIsDateTimeType
853
- const dateValueFormat = $xeDatePanel.computeDateValueFormat
854
- const firstDayOfWeek = $xeDatePanel.computeFirstDayOfWeek
855
- if (props.type === 'week') {
856
- const sWeek = XEUtils.toNumber(props.selectDay) as VxeDatePanelPropTypes.SelectDay
857
- date = XEUtils.getWhatWeek(date, 0, sWeek, firstDayOfWeek)
858
- } else if (isDateTimeType) {
859
- if (datetimePanelValue) {
860
- date.setHours(datetimePanelValue.getHours())
861
- date.setMinutes(datetimePanelValue.getMinutes())
862
- date.setSeconds(datetimePanelValue.getSeconds())
863
- }
864
- }
865
- const inpVal = XEUtils.toDateString(date, dateValueFormat, { firstDay: firstDayOfWeek })
866
- $xeDatePanel.dateCheckMonth(date)
867
- if (multiple) {
868
- const overCount = $xeDatePanel.computeOverCount
869
- // 如果为多选
870
- if (isDateTimeType) {
871
- // 如果是datetime特殊类型
872
- const dateListValue = isReload ? [] : [...$xeDatePanel.computeDateListValue]
873
- const datetimeRest: Date[] = []
874
- const eqIndex = XEUtils.findIndexOf(dateListValue, val => XEUtils.isDateSame(date, val, 'yyyyMMdd'))
875
- if (eqIndex === -1) {
876
- if (overCount) {
877
- // 如果超出最大多选数量
878
- return
879
- }
880
- dateListValue.push(date)
881
- } else {
882
- dateListValue.splice(eqIndex, 1)
883
- }
884
- dateListValue.forEach(item => {
885
- if (item) {
886
- if (datetimePanelValue) {
887
- item.setHours(datetimePanelValue.getHours())
888
- item.setMinutes(datetimePanelValue.getMinutes())
889
- item.setSeconds(datetimePanelValue.getSeconds())
890
- }
891
- datetimeRest.push(item)
892
- }
893
- })
894
- $xeDatePanel.handleChange(datetimeRest.map(date => XEUtils.toDateString(date, dateValueFormat)).join(','), { type: 'update' })
895
- } else {
896
- const dateMultipleValue = isReload ? [] : $xeDatePanel.computeDateMultipleValue
897
- // 如果是日期类型
898
- if (dateMultipleValue.some(val => XEUtils.isEqual(val, inpVal))) {
899
- $xeDatePanel.handleChange(dateMultipleValue.filter(val => !XEUtils.isEqual(val, inpVal)).join(','), { type: 'update' })
900
- } else {
901
- if (overCount) {
902
- // 如果超出最大多选数量
903
- return
904
- }
905
- $xeDatePanel.handleChange(dateMultipleValue.concat([inpVal]).join(','), { type: 'update' })
906
- }
907
- }
908
- } else {
909
- // 如果为单选
910
- if (!XEUtils.isEqual(modelValue, inpVal)) {
911
- $xeDatePanel.handleChange(inpVal, { type: 'update' })
912
- }
913
- }
914
- },
915
- // 日期
916
- dateMonthHandle (date: Date, offsetMonth: number) {
917
- const $xeDatePanel = this
918
- const reactData = $xeDatePanel.reactData
919
-
920
- const firstDayOfWeek = $xeDatePanel.computeFirstDayOfWeek
921
- const weekNum = XEUtils.getYearWeek(date, firstDayOfWeek)
922
- const weekStartDate = XEUtils.getWhatWeek(date, 0, firstDayOfWeek, firstDayOfWeek)
923
- const month = XEUtils.getWhatMonth(weekNum === 1 ? XEUtils.getWhatDay(weekStartDate, 6) : date, offsetMonth, 'first')
924
- reactData.selectMonth = month
925
- },
926
- dateNowHandle () {
927
- const $xeDatePanel = this
928
- const props = $xeDatePanel
929
- const reactData = $xeDatePanel.reactData
930
-
931
- const { type } = props
932
- const firstDayOfWeek = $xeDatePanel.computeFirstDayOfWeek
933
- let currentDate = new Date()
934
- switch (type) {
935
- case 'week':
936
- currentDate = XEUtils.getWhatWeek(currentDate, 0, firstDayOfWeek)
937
- break
938
- case 'datetime':
939
- currentDate = new Date()
940
- reactData.datetimePanelValue = new Date()
941
- break
942
- default:
943
- currentDate = XEUtils.getWhatDay(Date.now(), 0, 'first')
944
- break
945
- }
946
- reactData.currentDate = currentDate
947
- $xeDatePanel.dateMonthHandle(currentDate, 0)
948
- },
949
- dateToggleYearTypeEvent () {
950
- const $xeDatePanel = this
951
- const reactData = $xeDatePanel.reactData
952
-
953
- reactData.datePanelType = 'year'
954
- },
955
- dateToggleMonthTypeEvent () {
956
- const $xeDatePanel = this
957
- const reactData = $xeDatePanel.reactData
958
-
959
- let { datePanelType } = reactData
960
- if (datePanelType === 'month' || datePanelType === 'quarter') {
961
- datePanelType = 'year'
962
- } else {
963
- datePanelType = 'month'
964
- }
965
- reactData.datePanelType = datePanelType
966
- },
967
- datePrevEvent (evnt: Event) {
968
- const $xeDatePanel = this
969
- const props = $xeDatePanel
970
- const reactData = $xeDatePanel.reactData
971
- const internalData = $xeDatePanel.internalData
972
-
973
- const { type } = props
974
- const { datePanelType, selectMonth, inputLabel } = reactData
975
- const { yearSize } = internalData
976
- const value = inputLabel
977
- const isDisabledPrevDateBtn = $xeDatePanel.computeIsDisabledPrevDateBtn
978
- if (!isDisabledPrevDateBtn) {
979
- let viewDate
980
- if (type === 'year') {
981
- viewDate = XEUtils.getWhatYear(selectMonth, -yearSize, 'first')
982
- } else if (type === 'month' || type === 'quarter') {
983
- if (datePanelType === 'year') {
984
- viewDate = XEUtils.getWhatYear(selectMonth, -yearSize, 'first')
985
- } else {
986
- viewDate = XEUtils.getWhatYear(selectMonth, -1, 'first')
987
- }
988
- } else {
989
- if (datePanelType === 'year') {
990
- viewDate = XEUtils.getWhatYear(selectMonth, -yearSize, 'first')
991
- } else if (datePanelType === 'month') {
992
- viewDate = XEUtils.getWhatYear(selectMonth, -1, 'first')
993
- } else {
994
- viewDate = XEUtils.getWhatMonth(selectMonth, -1, 'first')
995
- }
996
- }
997
- reactData.selectMonth = viewDate
998
- $xeDatePanel.dispatchEvent('date-prev', { viewType: datePanelType, viewDate, value, type }, evnt)
999
- }
1000
- },
1001
- dateTodayMonthEvent (evnt: Event) {
1002
- const $xeDatePanel = this
1003
- const props = $xeDatePanel
1004
- const reactData = $xeDatePanel.reactData
1005
-
1006
- $xeDatePanel.dateNowHandle()
1007
- $xeDatePanel.dateChange(reactData.currentDate, true)
1008
- if (!props.multiple) {
1009
- $xeDatePanel.hidePanel()
1010
- }
1011
- $xeDatePanel.dispatchEvent('date-today', { type: props.type }, evnt)
1012
- },
1013
- dateNextEvent (evnt: Event) {
1014
- const $xeDatePanel = this
1015
- const props = $xeDatePanel
1016
- const reactData = $xeDatePanel.reactData
1017
- const internalData = $xeDatePanel.internalData
1018
-
1019
- const { type } = props
1020
- const { datePanelType, selectMonth, inputLabel } = reactData
1021
- const { yearSize } = internalData
1022
- const value = inputLabel
1023
- const isDisabledNextDateBtn = $xeDatePanel.computeIsDisabledNextDateBtn
1024
- if (!isDisabledNextDateBtn) {
1025
- let viewDate
1026
- if (type === 'year') {
1027
- viewDate = XEUtils.getWhatYear(selectMonth, yearSize, 'first')
1028
- } else if (type === 'month' || type === 'quarter') {
1029
- if (datePanelType === 'year') {
1030
- viewDate = XEUtils.getWhatYear(selectMonth, yearSize, 'first')
1031
- } else {
1032
- viewDate = XEUtils.getWhatYear(selectMonth, 1, 'first')
1033
- }
1034
- } else {
1035
- if (datePanelType === 'year') {
1036
- viewDate = XEUtils.getWhatYear(selectMonth, yearSize, 'first')
1037
- } else if (datePanelType === 'month') {
1038
- viewDate = XEUtils.getWhatYear(selectMonth, 1, 'first')
1039
- } else {
1040
- viewDate = XEUtils.getWhatMonth(selectMonth, 1, 'first')
1041
- }
1042
- }
1043
- reactData.selectMonth = viewDate
1044
- $xeDatePanel.dispatchEvent('date-next', { viewType: datePanelType, value, type }, evnt)
1045
- }
1046
- },
1047
- isRangeDisabled (item: { date: Date }) {
1048
- const $xeDatePanel = this
1049
-
1050
- const dateStartTime = $xeDatePanel.computeDateStartTime
1051
- const dateEndTime = $xeDatePanel.computeDateEndTime
1052
- const { date } = item
1053
- if (dateStartTime && dateStartTime.getTime() > date.getTime()) {
1054
- return true
1055
- }
1056
- if (dateEndTime && dateEndTime.getTime() < date.getTime()) {
1057
- return true
1058
- }
1059
- return false
1060
- },
1061
- isDateDisabled (item: { date: Date }) {
1062
- const $xeDatePanel = this
1063
- const props = $xeDatePanel
1064
- const reactData = $xeDatePanel.reactData
1065
-
1066
- const { disabledMethod } = props
1067
- const { datePanelType } = reactData
1068
- const { date } = item
1069
- if (disabledMethod) {
1070
- return disabledMethod({ type: datePanelType, viewType: datePanelType, date, $datePanel: $xeDatePanel })
1071
- }
1072
- return false
1073
- },
1074
- hasAllDisabled (item: { date: Date }) {
1075
- const $xeDatePanel = this
1076
-
1077
- return $xeDatePanel.isRangeDisabled(item) || $xeDatePanel.isDateDisabled(item)
1078
- },
1079
- dateSelectItem (date: Date) {
1080
- const $xeDatePanel = this
1081
- const props = $xeDatePanel
1082
- const reactData = $xeDatePanel.reactData
1083
-
1084
- const { type, multiple } = props
1085
- const { datePanelType } = reactData
1086
- if (type === 'month') {
1087
- if (datePanelType === 'year') {
1088
- reactData.datePanelType = 'month'
1089
- $xeDatePanel.dateCheckMonth(date)
1090
- } else {
1091
- $xeDatePanel.dateChange(date)
1092
- if (!multiple) {
1093
- $xeDatePanel.hidePanel()
1094
- }
1095
- }
1096
- } else if (type === 'year') {
1097
- $xeDatePanel.dateChange(date)
1098
- if (!multiple) {
1099
- $xeDatePanel.hidePanel()
1100
- }
1101
- } else if (type === 'quarter') {
1102
- if (datePanelType === 'year') {
1103
- reactData.datePanelType = 'quarter'
1104
- $xeDatePanel.dateCheckMonth(date)
1105
- } else {
1106
- $xeDatePanel.dateChange(date)
1107
- if (!multiple) {
1108
- $xeDatePanel.hidePanel()
1109
- }
1110
- }
1111
- } else {
1112
- if (datePanelType === 'month') {
1113
- reactData.datePanelType = type === 'week' ? type : 'day'
1114
- $xeDatePanel.dateCheckMonth(date)
1115
- } else if (datePanelType === 'year') {
1116
- reactData.datePanelType = 'month'
1117
- $xeDatePanel.dateCheckMonth(date)
1118
- } else {
1119
- $xeDatePanel.dateChange(date)
1120
- if (type === 'datetime') {
1121
- // 日期带时间
1122
- } else {
1123
- if (!multiple) {
1124
- $xeDatePanel.hidePanel()
1125
- }
1126
- }
1127
- }
1128
- }
1129
- },
1130
- dateSelectEvent (item: VxeDatePanelDefines.DateYearItem | VxeDatePanelDefines.DateQuarterItem | VxeDatePanelDefines.DateMonthItem | VxeDatePanelDefines.DateDayItem) {
1131
- const $xeDatePanel = this
1132
-
1133
- if (!$xeDatePanel.hasAllDisabled(item)) {
1134
- $xeDatePanel.dateSelectItem(item.date)
1135
- }
1136
- },
1137
- dateMoveDay (offsetDay: Date) {
1138
- const $xeDatePanel = this
1139
-
1140
- if (!$xeDatePanel.hasAllDisabled({ date: offsetDay })) {
1141
- const dayList = $xeDatePanel.computeDayList
1142
- if (!dayList.some((item) => XEUtils.isDateSame(item.date, offsetDay, 'yyyyMMdd'))) {
1143
- $xeDatePanel.dateCheckMonth(offsetDay)
1144
- }
1145
- $xeDatePanel.dateParseValue(offsetDay)
1146
- }
1147
- },
1148
- dateMoveYear (offsetYear: Date) {
1149
- const $xeDatePanel = this
1150
-
1151
- if (!$xeDatePanel.hasAllDisabled({ date: offsetYear })) {
1152
- const yearList = $xeDatePanel.computeYearList
1153
- if (!yearList.some((item) => XEUtils.isDateSame(item.date, offsetYear, 'yyyy'))) {
1154
- $xeDatePanel.dateCheckMonth(offsetYear)
1155
- }
1156
- $xeDatePanel.dateParseValue(offsetYear)
1157
- }
1158
- },
1159
- dateMoveQuarter (offsetQuarter: Date) {
1160
- const $xeDatePanel = this
1161
-
1162
- if (!$xeDatePanel.hasAllDisabled({ date: offsetQuarter })) {
1163
- const quarterList = $xeDatePanel.computeQuarterList
1164
- if (!quarterList.some((item) => XEUtils.isDateSame(item.date, offsetQuarter, 'yyyyq'))) {
1165
- $xeDatePanel.dateCheckMonth(offsetQuarter)
1166
- }
1167
- $xeDatePanel.dateParseValue(offsetQuarter)
1168
- }
1169
- },
1170
- dateMoveMonth (offsetMonth: Date) {
1171
- const $xeDatePanel = this
1172
-
1173
- if (!$xeDatePanel.hasAllDisabled({ date: offsetMonth })) {
1174
- const monthList = $xeDatePanel.computeMonthList
1175
- if (!monthList.some((item) => XEUtils.isDateSame(item.date, offsetMonth, 'yyyyMM'))) {
1176
- $xeDatePanel.dateCheckMonth(offsetMonth)
1177
- }
1178
- $xeDatePanel.dateParseValue(offsetMonth)
1179
- }
1180
- },
1181
- dateMouseenterEvent (item: VxeDatePanelDefines.DateYearItem | VxeDatePanelDefines.DateQuarterItem | VxeDatePanelDefines.DateMonthItem | VxeDatePanelDefines.DateDayItem) {
1182
- const $xeDatePanel = this
1183
- const reactData = $xeDatePanel.reactData
1184
-
1185
- if (!$xeDatePanel.hasAllDisabled(item)) {
1186
- const { datePanelType } = reactData
1187
- if (datePanelType === 'month') {
1188
- $xeDatePanel.dateMoveMonth(item.date)
1189
- } else if (datePanelType === 'quarter') {
1190
- $xeDatePanel.dateMoveQuarter(item.date)
1191
- } else if (datePanelType === 'year') {
1192
- $xeDatePanel.dateMoveYear(item.date)
1193
- } else {
1194
- $xeDatePanel.dateMoveDay(item.date)
1195
- }
1196
- }
1197
- },
1198
- dateMouseleaveEvent () {
1199
- const $xeDatePanel = this
1200
- const reactData = $xeDatePanel.reactData
1201
-
1202
- reactData.datePanelValue = null
1203
- },
1204
- updateTimePos (liElem: Element) {
1205
- if (liElem) {
1206
- const height = (liElem as HTMLElement).offsetHeight
1207
- const ulElem = liElem.parentNode as HTMLElement
1208
- ulElem.scrollTop = (liElem as HTMLElement).offsetTop - height * 4
1209
- }
1210
- },
1211
- dateTimeChangeEvent (evnt: Event) {
1212
- const $xeDatePanel = this
1213
- const reactData = $xeDatePanel.reactData
1214
-
1215
- const { datetimePanelValue } = reactData
1216
- reactData.datetimePanelValue = datetimePanelValue ? new Date(datetimePanelValue.getTime()) : new Date()
1217
- $xeDatePanel.updateTimePos(evnt.currentTarget as HTMLLIElement)
1218
- },
1219
- dateHourEvent (evnt: MouseEvent, item: VxeDatePanelDefines.DateHourMinuteSecondItem) {
1220
- const $xeDatePanel = this
1221
- const reactData = $xeDatePanel.reactData
1222
-
1223
- const { datetimePanelValue } = reactData
1224
- if (!item.disabled) {
1225
- if (datetimePanelValue) {
1226
- datetimePanelValue.setHours(item.value)
1227
- }
1228
- $xeDatePanel.dateTimeChangeEvent(evnt)
1229
- }
1230
- },
1231
- dateConfirmEvent (evnt: Event) {
1232
- const $xeDatePanel = this
1233
- const props = $xeDatePanel
1234
- const reactData = $xeDatePanel.reactData
1235
-
1236
- const { multiple } = props
1237
- const { datetimePanelValue } = reactData
1238
- const dateValue = $xeDatePanel.computeDateValue
1239
- const isDateTimeType = $xeDatePanel.computeIsDateTimeType
1240
- if (isDateTimeType) {
1241
- const dateValueFormat = $xeDatePanel.computeDateValueFormat
1242
- if (multiple) {
1243
- // 如果为多选
1244
- const dateMultipleValue = $xeDatePanel.computeDateMultipleValue
1245
- if (isDateTimeType) {
1246
- // 如果是datetime特殊类型
1247
- const dateListValue = [...$xeDatePanel.computeDateListValue]
1248
- const datetimeRest: Date[] = []
1249
- dateListValue.forEach(item => {
1250
- if (item) {
1251
- if (datetimePanelValue) {
1252
- item.setHours(datetimePanelValue.getHours())
1253
- item.setMinutes(datetimePanelValue.getMinutes())
1254
- item.setSeconds(datetimePanelValue.getSeconds())
1255
- }
1256
- datetimeRest.push(item)
1257
- }
1258
- })
1259
- $xeDatePanel.handleChange(datetimeRest.map(date => XEUtils.toDateString(date, dateValueFormat)).join(','), { type: 'update' })
1260
- } else {
1261
- // 如果是日期类型
1262
- $xeDatePanel.handleChange(dateMultipleValue.join(','), { type: 'update' })
1263
- }
1264
- } else {
1265
- $xeDatePanel.dateChange(dateValue || reactData.currentDate)
1266
- }
1267
- }
1268
- $xeDatePanel.hidePanel()
1269
- $xeDatePanel.dispatchEvent('confirm', {}, evnt)
1270
- },
1271
- dateMinuteEvent (evnt: MouseEvent, item: VxeDatePanelDefines.DateHourMinuteSecondItem) {
1272
- const $xeDatePanel = this
1273
- const reactData = $xeDatePanel.reactData
1274
-
1275
- const { datetimePanelValue } = reactData
1276
- if (!item.disabled) {
1277
- if (datetimePanelValue) {
1278
- datetimePanelValue.setMinutes(item.value)
1279
- }
1280
- $xeDatePanel.dateTimeChangeEvent(evnt)
1281
- }
1282
- },
1283
- dateSecondEvent (evnt: MouseEvent, item: VxeDatePanelDefines.DateHourMinuteSecondItem) {
1284
- const $xeDatePanel = this
1285
- const reactData = $xeDatePanel.reactData
1286
-
1287
- const { datetimePanelValue } = reactData
1288
- if (!item.disabled) {
1289
- if (datetimePanelValue) {
1290
- datetimePanelValue.setSeconds(item.value)
1291
- }
1292
- $xeDatePanel.dateTimeChangeEvent(evnt)
1293
- }
1294
- },
1295
- dateOpenPanel () {
1296
- const $xeDatePanel = this
1297
- const props = $xeDatePanel
1298
- const reactData = $xeDatePanel.reactData
1299
-
1300
- const { type, defaultDate, defaultTime } = props
1301
- const isDateTimeType = $xeDatePanel.computeIsDateTimeType
1302
- const dateValue = $xeDatePanel.computeDateValue
1303
- if (['year', 'quarter', 'month', 'week'].indexOf(type) > -1) {
1304
- reactData.datePanelType = type as VxeDatePanelDefines.DatePanelType
1305
- } else {
1306
- reactData.datePanelType = 'day'
1307
- }
1308
- reactData.currentDate = XEUtils.getWhatDay(Date.now(), 0, 'first')
1309
- if (dateValue) {
1310
- $xeDatePanel.dateMonthHandle(dateValue, 0)
1311
- $xeDatePanel.dateParseValue(dateValue)
1312
- } else {
1313
- if (defaultDate) {
1314
- // 面板默认日期仅支持解析 yyyy-MM-dd
1315
- const defDate = $xeDatePanel.parseDate(defaultDate, 'yyyy-MM-dd')
1316
- if (XEUtils.isValidDate(defDate)) {
1317
- $xeDatePanel.dateMonthHandle(defDate, 0)
1318
- } else {
1319
- $xeDatePanel.dateNowHandle()
1320
- }
1321
- } else {
1322
- $xeDatePanel.dateNowHandle()
1323
- }
1324
- }
1325
- if (isDateTimeType) {
1326
- let dtPanelValue = reactData.datePanelValue
1327
- if (!dtPanelValue) {
1328
- dtPanelValue = XEUtils.getWhatDay(Date.now(), 0, 'first')
1329
- if (defaultTime) {
1330
- const defTime = toStringTimeDate(defaultTime)
1331
- if (XEUtils.isValidDate(defTime)) {
1332
- dtPanelValue.setHours(defTime.getHours())
1333
- dtPanelValue.setMinutes(defTime.getMinutes())
1334
- dtPanelValue.setSeconds(defTime.getSeconds())
1335
- }
1336
- }
1337
- }
1338
- reactData.datetimePanelValue = dtPanelValue
1339
- $xeDatePanel.$nextTick(() => {
1340
- const timeBodyElem = $xeDatePanel.$refs.refInputTimeBody as HTMLDivElement
1341
- XEUtils.arrayEach(timeBodyElem.querySelectorAll('li.is--selected'), (elem) => {
1342
- $xeDatePanel.updateTimePos(elem)
1343
- })
1344
- })
1345
- }
1346
- },
1347
- getModelValue () {
1348
- const $xeDatePanel = this
1349
- const reactData = $xeDatePanel.reactData
1350
-
1351
- return reactData.inputValue
1352
- },
1353
- setPanelDate (date: Date) {
1354
- const $xeDatePanel = this
1355
-
1356
- if (date) {
1357
- $xeDatePanel.dateCheckMonth(date)
1358
- }
1359
- },
1360
- getPanelDate () {
1361
- const $xeDatePanel = this
1362
- const reactData = $xeDatePanel.reactData
1363
-
1364
- return reactData.selectMonth
1365
- },
1366
- checkValue (value: string) {
1367
- const $xeDatePanel = this
1368
-
1369
- $xeDatePanel.afterCheckValue(value)
1370
- },
1371
- confirmByEvent (evnt: Event) {
1372
- const $xeDatePanel = this
1373
-
1374
- $xeDatePanel.dateConfirmEvent(evnt)
1375
- },
1376
-
1377
- //
1378
- // Render
1379
- //
1380
- renderDateLabel (h: CreateElement, item: VxeDatePanelDefines.DateYearItem | VxeDatePanelDefines.DateQuarterItem | VxeDatePanelDefines.DateMonthItem | VxeDatePanelDefines.DateDayItem, label: string | number) {
1381
- const $xeDatePanel = this
1382
- const props = $xeDatePanel
1383
- const reactData = $xeDatePanel.reactData
1384
-
1385
- const { festivalMethod } = props
1386
- const labelVNs: VNode[] = []
1387
- if (festivalMethod) {
1388
- const { datePanelType } = reactData
1389
- const festivalRest = festivalMethod({ type: datePanelType, viewType: datePanelType, date: item.date, $datePanel: $xeDatePanel })
1390
- const festivalItem = festivalRest ? (XEUtils.isString(festivalRest) ? { label: festivalRest } : festivalRest) : {}
1391
- const extraItem = festivalItem.extra ? (XEUtils.isString(festivalItem.extra) ? { label: festivalItem.extra } : festivalItem.extra) : null
1392
- labelVNs.push(
1393
- h('div', {
1394
- class: ['vxe-date-panel--label', {
1395
- 'is-notice': festivalItem.notice
1396
- }]
1397
- }, extraItem && extraItem.label
1398
- ? [
1399
- h('div', {
1400
- class: 'vxe-date-panel--label--number'
1401
- }, `${label}`),
1402
- h('div', {
1403
- class: ['vxe-date-panel--label--extra', extraItem.important ? 'is-important' : '', extraItem.className],
1404
- style: extraItem.style
1405
- }, XEUtils.toValueString(extraItem.label))
1406
- ]
1407
- : `${label}`)
1408
- )
1409
- const festivalLabel = festivalItem.label
1410
- if (festivalLabel) {
1411
- // 默认最多支持3个节日重叠
1412
- const festivalLabels = XEUtils.toValueString(festivalLabel).split(',')
1413
- labelVNs.push(
1414
- h('div', {
1415
- class: ['vxe-date-panel--festival', festivalItem.important ? 'is-important' : '', festivalItem.className],
1416
- style: festivalItem.style
1417
- }, [
1418
- festivalLabels.length > 1
1419
- ? h('div', {
1420
- class: ['vxe-date-panel--festival--overlap', `overlap--${festivalLabels.length}`]
1421
- }, festivalLabels.map(label => h('div', label.substring(0, 3))))
1422
- : h('div', {
1423
- class: 'vxe-date-panel--festival--label'
1424
- }, festivalLabels[0].substring(0, 3))
1425
- ])
1426
- )
1427
- }
1428
- }
1429
- return labelVNs
1430
- },
1431
- renderDateDayTable (h: CreateElement) {
1432
- const $xeDatePanel = this
1433
- const props = $xeDatePanel
1434
- const reactData = $xeDatePanel.reactData
1435
-
1436
- const { multiple } = props
1437
- const { datePanelType, datePanelValue } = reactData
1438
- const dateValue = $xeDatePanel.computeDateValue
1439
- const dateHeaders = $xeDatePanel.computeDateHeaders
1440
- const dayDatas = $xeDatePanel.computeDayDatas
1441
- const dateListValue = $xeDatePanel.computeDateListValue
1442
- const overCount = $xeDatePanel.computeOverCount
1443
- const matchFormat = 'yyyyMMdd'
1444
- return [
1445
- h('div', {
1446
- class: ['vxe-date-panel--view-wrapper', `type--${datePanelType}`]
1447
- }, [
1448
- h('div', {
1449
- class: 'vxe-date-panel--view-header'
1450
- }, [
1451
- h('div', {
1452
- class: 'vxe-date-panel--view-row'
1453
- }, dateHeaders.map((item) => {
1454
- return h('div', {
1455
- class: 'vxe-date-panel--view-item',
1456
- style: {
1457
- width: `${100 / dateHeaders.length}%`
1458
- }
1459
- }, [
1460
- h('div', {
1461
- class: 'vxe-date-panel--view-item-inner'
1462
- }, [
1463
- h('div', {
1464
- class: 'vxe-date-panel--view-item-label'
1465
- }, item.label)
1466
- ])
1467
- ])
1468
- }))
1469
- ]),
1470
- h('div', {
1471
- class: 'vxe-date-panel--view-body'
1472
- }, dayDatas.map((rows) => {
1473
- return h('div', {
1474
- class: 'vxe-date-panel--view-row',
1475
- style: {
1476
- height: `${100 / dayDatas.length}%`
1477
- }
1478
- }, rows.map((item) => {
1479
- const isSelected = multiple ? dateListValue.some(val => XEUtils.isDateSame(val, item.date, matchFormat)) : XEUtils.isDateSame(dateValue, item.date, matchFormat)
1480
- return h('div', {
1481
- class: ['vxe-date-panel--view-item', {
1482
- 'is--prev': item.isPrev,
1483
- 'is--current': item.isCurrent,
1484
- 'is--now': item.isNow,
1485
- 'is--next': item.isNext,
1486
- 'is--range-disabled': $xeDatePanel.isRangeDisabled(item),
1487
- 'is--disabled': $xeDatePanel.isDateDisabled(item),
1488
- 'is--selected': isSelected,
1489
- 'is--over': overCount && !isSelected,
1490
- 'is--hover': !overCount && XEUtils.isDateSame(datePanelValue, item.date, matchFormat)
1491
- }],
1492
- style: {
1493
- width: `${100 / rows.length}%`
1494
- },
1495
- on: {
1496
- click: () => $xeDatePanel.dateSelectEvent(item),
1497
- mouseenter: () => $xeDatePanel.dateMouseenterEvent(item),
1498
- mouseleave: $xeDatePanel.dateMouseleaveEvent
1499
- }
1500
- }, [
1501
- h('div', {
1502
- class: 'vxe-date-panel--view-item-inner'
1503
- }, $xeDatePanel.renderDateLabel(h, item, item.label))
1504
- ])
1505
- }))
1506
- }))
1507
- ])
1508
- ]
1509
- },
1510
- renderDateWeekTable (h: CreateElement) {
1511
- const $xeDatePanel = this
1512
- const props = $xeDatePanel
1513
- const reactData = $xeDatePanel.reactData
1514
-
1515
- const { multiple } = props
1516
- const { datePanelType, datePanelValue } = reactData
1517
- const dateValue = $xeDatePanel.computeDateValue
1518
- const weekHeaders = $xeDatePanel.computeWeekHeaders
1519
- const weekDates = $xeDatePanel.computeWeekDates
1520
- const dateListValue = $xeDatePanel.computeDateListValue
1521
- const overCount = $xeDatePanel.computeOverCount
1522
- const matchFormat = 'yyyyMMdd'
1523
- return [
1524
- h('div', {
1525
- class: ['vxe-date-panel--view-wrapper', `type--${datePanelType}`]
1526
- }, [
1527
- h('div', {
1528
- class: 'vxe-date-panel--view-header'
1529
- }, [
1530
- h('div', {
1531
- class: 'vxe-date-panel--view-row'
1532
- }, weekHeaders.map((item, rIndex) => {
1533
- return h('div', {
1534
- class: 'vxe-date-panel--view-item',
1535
- style: {
1536
- width: `${rIndex ? 13 : 9}%`
1537
- }
1538
- }, [
1539
- h('div', {
1540
- class: 'vxe-date-panel--view-item-inner'
1541
- }, [
1542
- h('div', {
1543
- class: 'vxe-date-panel--view-item-label'
1544
- }, item.label)
1545
- ])
1546
- ])
1547
- }))
1548
- ]),
1549
- h('div', {
1550
- class: 'vxe-date-panel--view-body'
1551
- }, weekDates.map((rows) => {
1552
- const isSelected = multiple ? rows.some((item) => dateListValue.some(val => XEUtils.isDateSame(val, item.date, matchFormat))) : rows.some((item) => XEUtils.isDateSame(dateValue, item.date, matchFormat))
1553
- const isHover = rows.some((item) => XEUtils.isDateSame(datePanelValue, item.date, matchFormat))
1554
- const isNowWeek = rows.some(item => item.isNow)
1555
- return h('div', {
1556
- class: 'vxe-date-panel--view-row',
1557
- style: {
1558
- height: `${100 / weekDates.length}%`
1559
- }
1560
- }, rows.map((item, rIndex) => {
1561
- return h('div', {
1562
- class: ['vxe-date-panel--view-item', {
1563
- 'is--prev': item.isPrev,
1564
- 'is--current': item.isCurrent,
1565
- 'is--now': rIndex ? item.isNow : isNowWeek,
1566
- 'is--next': item.isNext,
1567
- 'is--range-disabled': $xeDatePanel.isRangeDisabled(item),
1568
- 'is--disabled': $xeDatePanel.isDateDisabled(item),
1569
- 'is--selected': isSelected,
1570
- 'is--over': overCount && !isSelected,
1571
- 'is--hover': !overCount && isHover
1572
- }],
1573
- style: {
1574
- width: `${rIndex ? 13 : 9}%`
1575
- },
1576
- on: {
1577
- click: () => $xeDatePanel.dateSelectEvent(item),
1578
- mouseenter: () => $xeDatePanel.dateMouseenterEvent(item),
1579
- mouseleave: $xeDatePanel.dateMouseleaveEvent
1580
- }
1581
- }, [
1582
- h('div', {
1583
- class: 'vxe-date-panel--view-item-inner'
1584
- }, $xeDatePanel.renderDateLabel(h, item, item.label))
1585
- ])
1586
- }))
1587
- }))
1588
- ])
1589
- ]
1590
- },
1591
- renderDateMonthTable (h: CreateElement) {
1592
- const $xeDatePanel = this
1593
- const props = $xeDatePanel
1594
- const reactData = $xeDatePanel.reactData
1595
-
1596
- const { multiple } = props
1597
- const { datePanelType, datePanelValue } = reactData
1598
- const dateValue = $xeDatePanel.computeDateValue
1599
- const monthDatas = $xeDatePanel.computeMonthDatas
1600
- const dateListValue = $xeDatePanel.computeDateListValue
1601
- const overCount = $xeDatePanel.computeOverCount
1602
- const matchFormat = 'yyyyMM'
1603
- return [
1604
- h('div', {
1605
- class: ['vxe-date-panel--view-wrapper', `type--${datePanelType}`]
1606
- }, [
1607
- h('div', {
1608
- class: 'vxe-date-panel--view-body'
1609
- }, monthDatas.map((rows) => {
1610
- return h('div', {
1611
- class: 'vxe-date-panel--view-row',
1612
- style: {
1613
- height: `${100 / monthDatas.length}%`
1614
- }
1615
- }, rows.map((item) => {
1616
- const isSelected = multiple ? dateListValue.some(val => XEUtils.isDateSame(val, item.date, matchFormat)) : XEUtils.isDateSame(dateValue, item.date, matchFormat)
1617
- return h('div', {
1618
- class: ['vxe-date-panel--view-item', {
1619
- 'is--prev': item.isPrev,
1620
- 'is--current': item.isCurrent,
1621
- 'is--now': item.isNow,
1622
- 'is--next': item.isNext,
1623
- 'is--range-disabled': $xeDatePanel.isRangeDisabled(item),
1624
- 'is--disabled': $xeDatePanel.isDateDisabled(item),
1625
- 'is--selected': isSelected,
1626
- 'is--over': overCount && !isSelected,
1627
- 'is--hover': !overCount && XEUtils.isDateSame(datePanelValue, item.date, matchFormat)
1628
- }],
1629
- style: {
1630
- width: `${100 / rows.length}%`
1631
- },
1632
- on: {
1633
- click: () => $xeDatePanel.dateSelectEvent(item),
1634
- mouseenter: () => $xeDatePanel.dateMouseenterEvent(item),
1635
- mouseleave: $xeDatePanel.dateMouseleaveEvent
1636
- }
1637
- }, [
1638
- h('div', {
1639
- class: 'vxe-date-panel--view-item-inner'
1640
- }, $xeDatePanel.renderDateLabel(h, item, getI18n(`vxe.input.date.months.m${item.month}`)))
1641
- ])
1642
- }))
1643
- }))
1644
- ])
1645
- ]
1646
- },
1647
- renderDateQuarterTable (h: CreateElement) {
1648
- const $xeDatePanel = this
1649
- const props = $xeDatePanel
1650
- const reactData = $xeDatePanel.reactData
1651
-
1652
- const { multiple } = props
1653
- const { datePanelType, datePanelValue } = reactData
1654
- const dateValue = $xeDatePanel.computeDateValue
1655
- const quarterDatas = $xeDatePanel.computeQuarterDatas
1656
- const dateListValue = $xeDatePanel.computeDateListValue
1657
- const overCount = $xeDatePanel.computeOverCount
1658
- const matchFormat = 'yyyyq'
1659
- return [
1660
- h('div', {
1661
- class: ['vxe-date-panel--view-wrapper', `type--${datePanelType}`]
1662
- }, [
1663
- h('div', {
1664
- class: 'vxe-date-panel--view-body'
1665
- }, quarterDatas.map((rows) => {
1666
- return h('div', {
1667
- class: 'vxe-date-panel--view-row',
1668
- style: {
1669
- height: `${100 / quarterDatas.length}%`
1670
- }
1671
- }, rows.map((item) => {
1672
- const isSelected = multiple ? dateListValue.some(val => XEUtils.isDateSame(val, item.date, matchFormat)) : XEUtils.isDateSame(dateValue, item.date, matchFormat)
1673
- return h('div', {
1674
- class: ['vxe-date-panel--view-item', {
1675
- 'is--prev': item.isPrev,
1676
- 'is--current': item.isCurrent,
1677
- 'is--now': item.isNow,
1678
- 'is--next': item.isNext,
1679
- 'is--range-disabled': $xeDatePanel.isRangeDisabled(item),
1680
- 'is--disabled': $xeDatePanel.isDateDisabled(item),
1681
- 'is--selected': isSelected,
1682
- 'is--over': overCount && !isSelected,
1683
- 'is--hover': !overCount && XEUtils.isDateSame(datePanelValue, item.date, matchFormat)
1684
- }],
1685
- style: {
1686
- width: `${100 / rows.length}%`
1687
- },
1688
- on: {
1689
- click: () => $xeDatePanel.dateSelectEvent(item),
1690
- mouseenter: () => $xeDatePanel.dateMouseenterEvent(item),
1691
- mouseleave: $xeDatePanel.dateMouseleaveEvent
1692
- }
1693
- }, [
1694
- h('div', {
1695
- class: 'vxe-date-panel--view-item-inner'
1696
- }, $xeDatePanel.renderDateLabel(h, item, getI18n(`vxe.input.date.quarters.q${item.quarter}`)))
1697
- ])
1698
- }))
1699
- }))
1700
- ])
1701
- ]
1702
- },
1703
- renderDateYearTable (h: CreateElement) {
1704
- const $xeDatePanel = this
1705
- const props = $xeDatePanel
1706
- const reactData = $xeDatePanel.reactData
1707
-
1708
- const { multiple } = props
1709
- const { datePanelType, datePanelValue } = reactData
1710
- const dateValue = $xeDatePanel.computeDateValue
1711
- const yearDatas = $xeDatePanel.computeYearDatas
1712
- const dateListValue = $xeDatePanel.computeDateListValue
1713
- const overCount = $xeDatePanel.computeOverCount
1714
- const matchFormat = 'yyyy'
1715
- return [
1716
- h('div', {
1717
- class: ['vxe-date-panel--view-wrapper', `type--${datePanelType}`]
1718
- }, [
1719
- h('div', {
1720
- class: 'vxe-date-panel--view-body'
1721
- }, yearDatas.map((rows) => {
1722
- return h('div', {
1723
- class: 'vxe-date-panel--view-row',
1724
- style: {
1725
- height: `${100 / yearDatas.length}%`
1726
- }
1727
- }, rows.map((item) => {
1728
- const isSelected = multiple ? dateListValue.some(val => XEUtils.isDateSame(val, item.date, matchFormat)) : XEUtils.isDateSame(dateValue, item.date, matchFormat)
1729
- return h('div', {
1730
- class: ['vxe-date-panel--view-item', {
1731
- 'is--prev': item.isPrev,
1732
- 'is--current': item.isCurrent,
1733
- 'is--now': item.isNow,
1734
- 'is--next': item.isNext,
1735
- 'is--range-disabled': $xeDatePanel.isRangeDisabled(item),
1736
- 'is--disabled': $xeDatePanel.isDateDisabled(item),
1737
- 'is--selected': isSelected,
1738
- 'is--over': overCount && !isSelected,
1739
- 'is--hover': !overCount && XEUtils.isDateSame(datePanelValue, item.date, matchFormat)
1740
- }],
1741
- style: {
1742
- width: `${100 / rows.length}%`
1743
- },
1744
- on: {
1745
- click: () => $xeDatePanel.dateSelectEvent(item),
1746
- mouseenter: () => $xeDatePanel.dateMouseenterEvent(item),
1747
- mouseleave: $xeDatePanel.dateMouseleaveEvent
1748
- }
1749
- }, [
1750
- h('div', {
1751
- class: 'vxe-date-panel--view-item-inner'
1752
- }, $xeDatePanel.renderDateLabel(h, item, item.year))
1753
- ])
1754
- }))
1755
- }))
1756
- ])
1757
- ]
1758
- },
1759
- renderDateTable (h: CreateElement) {
1760
- const $xeDatePanel = this
1761
- const reactData = $xeDatePanel.reactData
1762
-
1763
- const { datePanelType } = reactData
1764
- switch (datePanelType) {
1765
- case 'week' :
1766
- return $xeDatePanel.renderDateWeekTable(h)
1767
- case 'month' :
1768
- return $xeDatePanel.renderDateMonthTable(h)
1769
- case 'quarter' :
1770
- return $xeDatePanel.renderDateQuarterTable(h)
1771
- case 'year' :
1772
- return $xeDatePanel.renderDateYearTable(h)
1773
- }
1774
- return $xeDatePanel.renderDateDayTable(h)
1775
- },
1776
- renderDatePanel (h: CreateElement) {
1777
- const $xeDatePanel = this
1778
- const reactData = $xeDatePanel.reactData
1779
-
1780
- const { datePanelType } = reactData
1781
- const isDisabledPrevDateBtn = $xeDatePanel.computeIsDisabledPrevDateBtn
1782
- const isDisabledNextDateBtn = $xeDatePanel.computeIsDisabledNextDateBtn
1783
- const selectDatePanelObj = $xeDatePanel.computeSelectDatePanelObj
1784
- return [
1785
- h('div', {
1786
- class: 'vxe-date-panel--picker-header'
1787
- }, [
1788
- h('div', {
1789
- class: 'vxe-date-panel--picker-type-wrapper'
1790
- }, [
1791
- datePanelType === 'year'
1792
- ? h('span', {
1793
- class: 'vxe-date-panel--picker-label'
1794
- }, selectDatePanelObj.y)
1795
- : h('span', {
1796
- class: 'vxe-date-panel--picker-btns'
1797
- }, [
1798
- h('span', {
1799
- class: 'vxe-date-panel--picker-btn',
1800
- on: {
1801
- click: $xeDatePanel.dateToggleYearTypeEvent
1802
- }
1803
- }, selectDatePanelObj.y),
1804
- selectDatePanelObj.m
1805
- ? h('span', {
1806
- class: 'vxe-date-panel--picker-btn',
1807
- on: {
1808
- click: $xeDatePanel.dateToggleMonthTypeEvent
1809
- }
1810
- }, selectDatePanelObj.m)
1811
- : renderEmptyElement($xeDatePanel)
1812
- ])
1813
- ]),
1814
- h('div', {
1815
- class: 'vxe-date-panel--picker-btn-wrapper'
1816
- }, [
1817
- h('span', {
1818
- class: ['vxe-date-panel--picker-btn vxe-date-panel--picker-prev-btn', {
1819
- 'is--disabled': isDisabledPrevDateBtn
1820
- }],
1821
- on: {
1822
- click: $xeDatePanel.datePrevEvent
1823
- }
1824
- }, [
1825
- h('i', {
1826
- class: 'vxe-icon-caret-left'
1827
- })
1828
- ]),
1829
- h('span', {
1830
- class: 'vxe-date-panel--picker-btn vxe-date-panel--picker-current-btn',
1831
- on: {
1832
- click: $xeDatePanel.dateTodayMonthEvent
1833
- }
1834
- }, [
1835
- h('i', {
1836
- class: 'vxe-icon-dot'
1837
- })
1838
- ]),
1839
- h('span', {
1840
- class: ['vxe-date-panel--picker-btn vxe-date-panel--picker-next-btn', {
1841
- 'is--disabled': isDisabledNextDateBtn
1842
- }],
1843
- on: {
1844
- click: $xeDatePanel.dateNextEvent
1845
- }
1846
- }, [
1847
- h('i', {
1848
- class: 'vxe-icon-caret-right'
1849
- })
1850
- ])
1851
- ])
1852
- ]),
1853
- h('div', {
1854
- class: 'vxe-date-panel--picker-body'
1855
- }, $xeDatePanel.renderDateTable(h))
1856
- ]
1857
- },
1858
- renderTimePanel (h: CreateElement) {
1859
- const $xeDatePanel = this
1860
- const props = $xeDatePanel
1861
- const reactData = $xeDatePanel.reactData
1862
-
1863
- const { type } = props
1864
- const { datetimePanelValue } = reactData
1865
- const dateTimeLabel = $xeDatePanel.computeDateTimeLabel
1866
- const hourList = $xeDatePanel.computeHourList
1867
- const hasTimeMinute = $xeDatePanel.computeHasTimeMinute
1868
- const minuteList = $xeDatePanel.computeMinuteList
1869
- const hasTimeSecond = $xeDatePanel.computeHasTimeSecond
1870
- const secondList = $xeDatePanel.computeSecondList as VxeDatePanelDefines.DateHourMinuteSecondItem[]
1871
- return [
1872
- type === 'time'
1873
- ? renderEmptyElement($xeDatePanel)
1874
- : h('div', {
1875
- class: 'vxe-date-panel--time-header'
1876
- }, [
1877
- h('div', {
1878
- class: 'vxe-date-panel--time-title'
1879
- }, dateTimeLabel)
1880
- ]),
1881
- h('div', {
1882
- ref: 'refInputTimeBody',
1883
- class: 'vxe-date-panel--time-body'
1884
- }, [
1885
- h('ul', {
1886
- class: 'vxe-date-panel--time-hour-list'
1887
- }, hourList.map((item, index) => {
1888
- return h('li', {
1889
- key: index,
1890
- class: {
1891
- 'is--disabled': item.disabled,
1892
- 'is--selected': datetimePanelValue && datetimePanelValue.getHours() === item.value
1893
- },
1894
- on: {
1895
- click: (evnt: MouseEvent) => $xeDatePanel.dateHourEvent(evnt, item)
1896
- }
1897
- }, item.label)
1898
- })),
1899
- hasTimeMinute
1900
- ? h('ul', {
1901
- class: 'vxe-date-panel--time-minute-list'
1902
- }, minuteList.map((item, index) => {
1903
- return h('li', {
1904
- key: index,
1905
- class: {
1906
- 'is--disabled': item.disabled,
1907
- 'is--selected': datetimePanelValue && datetimePanelValue.getMinutes() === item.value
1908
- },
1909
- on: {
1910
- click: (evnt: MouseEvent) => $xeDatePanel.dateMinuteEvent(evnt, item)
1911
- }
1912
- }, item.label)
1913
- }))
1914
- : renderEmptyElement($xeDatePanel),
1915
- hasTimeMinute && hasTimeSecond
1916
- ? h('ul', {
1917
- class: 'vxe-date-panel--time-second-list'
1918
- }, secondList.map((item, index) => {
1919
- return h('li', {
1920
- key: index,
1921
- class: {
1922
- 'is--disabled': item.disabled,
1923
- 'is--selected': datetimePanelValue && datetimePanelValue.getSeconds() === item.value
1924
- },
1925
- on: {
1926
- click: (evnt: MouseEvent) => $xeDatePanel.dateSecondEvent(evnt, item)
1927
- }
1928
- }, item.label)
1929
- }))
1930
- : renderEmptyElement($xeDatePanel)
1931
- ])
1932
- ]
1933
- },
1934
- renderPickerPanel (h: CreateElement) {
1935
- const $xeDatePanel = this
1936
- const props = $xeDatePanel
1937
-
1938
- const { type } = props
1939
- if (type === 'datetime') {
1940
- return h('div', {
1941
- key: type,
1942
- ref: 'refPanelWrapper',
1943
- class: 'vxe-date-panel--time-layout-wrapper'
1944
- }, [
1945
- h('div', {
1946
- class: 'vxe-date-panel--time-left-wrapper'
1947
- }, $xeDatePanel.renderDatePanel(h)),
1948
- h('div', {
1949
- class: 'vxe-date-panel--time-right-wrapper'
1950
- }, $xeDatePanel.renderTimePanel(h))
1951
- ])
1952
- } else if (type === 'time') {
1953
- return h('div', {
1954
- key: type,
1955
- ref: 'refPanelWrapper',
1956
- class: 'vxe-date-panel--wrapper'
1957
- }, $xeDatePanel.renderTimePanel(h))
1958
- }
1959
- return h('div', {
1960
- key: type || 'default',
1961
- ref: 'refPanelWrapper',
1962
- class: 'vxe-date-panel--wrapper'
1963
- }, $xeDatePanel.renderDatePanel(h))
1964
- },
1965
- renderVN (h: CreateElement) {
1966
- const $xeDatePanel = this
1967
- const props = $xeDatePanel
1968
-
1969
- const { type } = props
1970
- const vSize = $xeDatePanel.computeSize
1971
- return h('div', {
1972
- class: ['vxe-date-panel', `type--${type}`, {
1973
- [`size--${vSize}`]: vSize
1974
- }]
1975
- }, [
1976
- $xeDatePanel.renderPickerPanel(h)
1977
- ])
1978
- }
1979
- },
1980
- watch: {
1981
- value (val) {
1982
- const $xeDatePanel = this
1983
-
1984
- $xeDatePanel.updateModelValue(val)
1985
- $xeDatePanel.changeValue()
1986
- },
1987
- type () {
1988
- const $xeDatePanel = this
1989
- const reactData = $xeDatePanel.reactData
1990
-
1991
- // 切换类型是重置内置变量
1992
- Object.assign(reactData, {
1993
- inputLabel: '',
1994
- datetimePanelValue: null,
1995
- datePanelValue: null,
1996
- datePanelLabel: '',
1997
- datePanelType: 'day',
1998
- selectMonth: null,
1999
- currentDate: null
2000
- })
2001
- $xeDatePanel.initValue()
2002
- },
2003
- computeDateLabelFormat () {
2004
- const $xeDatePanel = this
2005
- const props = $xeDatePanel
2006
- const reactData = $xeDatePanel.reactData
2007
-
2008
- const isDatePanelType = $xeDatePanel.computeIsDatePanelType
2009
- if (isDatePanelType) {
2010
- $xeDatePanel.dateParseValue(reactData.datePanelValue)
2011
- reactData.inputLabel = props.multiple ? $xeDatePanel.computeDateMultipleLabel : reactData.datePanelLabel
2012
- }
2013
- }
2014
- },
2015
- created () {
2016
- const $xeDatePanel = this
2017
-
2018
- $xeDatePanel.initValue()
2019
- $xeDatePanel.dateOpenPanel()
2020
- },
2021
- render (this: any, h) {
2022
- return this.renderVN(h)
2023
- }
2024
- }) /* 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 { getConfig, getI18n, createEvent, globalMixins, renderEmptyElement } from '../../ui'
5
+ import { toStringTimeDate, getDateQuarter, parseDateValue, parseDateObj, handleValueFormat, hasDateValueType, hasTimestampValueType } from './util'
6
+
7
+ import type { VxeDatePanelConstructor, DatePanelInternalData, DatePanelReactData, VxeDatePanelPropTypes, VxeComponentSizeType, ValueOf, VxeDatePanelEmits, VxeDatePanelDefines } from '../../../types'
8
+
9
+ export default /* define-vxe-component start */ defineVxeComponent({
10
+ name: 'VxeDatePanel',
11
+ mixins: [
12
+ globalMixins.sizeMixin
13
+ ],
14
+ model: {
15
+ prop: 'value',
16
+ event: 'modelValue'
17
+ },
18
+ props: {
19
+ value: [String, Number, Date] as PropType<VxeDatePanelPropTypes.ModelValue>,
20
+ type: {
21
+ type: String as PropType<VxeDatePanelPropTypes.Type>,
22
+ default: 'date' as VxeDatePanelPropTypes.Type
23
+ },
24
+ className: String as PropType<VxeDatePanelPropTypes.ClassName>,
25
+ size: {
26
+ type: String as PropType<VxeDatePanelPropTypes.Size>,
27
+ default: () => getConfig().datePanel.size || getConfig().size
28
+ },
29
+ multiple: Boolean as PropType<VxeDatePanelPropTypes.Multiple>,
30
+ limitCount: {
31
+ type: [String, Number] as PropType<VxeDatePanelPropTypes.LimitCount>,
32
+ default: () => getConfig().datePanel.limitCount
33
+ },
34
+
35
+ // date、week、month、quarter、year
36
+ startDate: {
37
+ type: [String, Number, Date] as PropType<VxeDatePanelPropTypes.StartDate>,
38
+ default: () => getConfig().datePanel.startDate
39
+ },
40
+ endDate: {
41
+ type: [String, Number, Date] as PropType<VxeDatePanelPropTypes.EndDate>,
42
+ default: () => getConfig().datePanel.endDate
43
+ },
44
+ defaultDate: [String, Number, Date] as PropType<VxeDatePanelPropTypes.DefaultDate>,
45
+ defaultTime: [String, Number, Date] as PropType<VxeDatePanelPropTypes.DefaultTime>,
46
+ minDate: [String, Number, Date] as PropType<VxeDatePanelPropTypes.MinDate>,
47
+ maxDate: [String, Number, Date] as PropType<VxeDatePanelPropTypes.MaxDate>,
48
+ startDay: {
49
+ type: [String, Number] as PropType<VxeDatePanelPropTypes.StartDay>,
50
+ default: () => getConfig().datePanel.startDay
51
+ },
52
+ labelFormat: String as PropType<VxeDatePanelPropTypes.LabelFormat>,
53
+ valueFormat: String as PropType<VxeDatePanelPropTypes.ValueFormat>,
54
+ timeFormat: String as PropType<VxeDatePanelPropTypes.TimeFormat>,
55
+ festivalMethod: {
56
+ type: Function as PropType<VxeDatePanelPropTypes.FestivalMethod>,
57
+ default: () => getConfig().datePanel.festivalMethod
58
+ },
59
+ disabledMethod: {
60
+ type: Function as PropType<VxeDatePanelPropTypes.DisabledMethod>,
61
+ default: () => getConfig().datePanel.disabledMethod
62
+ },
63
+
64
+ timeConfig: Object as PropType<VxeDatePanelPropTypes.TimeConfig>,
65
+
66
+ // week
67
+ selectDay: {
68
+ type: [String, Number] as PropType<VxeDatePanelPropTypes.SelectDay>,
69
+ default: () => getConfig().datePanel.selectDay
70
+ }
71
+ },
72
+ data () {
73
+ const xID = XEUtils.uniqueId()
74
+
75
+ const reactData: DatePanelReactData = {
76
+ visiblePanel: false,
77
+ isAniVisible: false,
78
+ isActivated: false,
79
+ inputValue: '',
80
+ inputLabel: '',
81
+ datetimePanelValue: null,
82
+ datePanelValue: null,
83
+ datePanelLabel: '',
84
+ datePanelType: 'day',
85
+ selectMonth: null,
86
+ currentDate: null
87
+ }
88
+
89
+ const internalData: DatePanelInternalData = {
90
+ yearSize: 12,
91
+ monthSize: 20,
92
+ quarterSize: 8,
93
+ hpTimeout: undefined as any
94
+ }
95
+
96
+ return {
97
+ xID,
98
+ reactData,
99
+ internalData
100
+ }
101
+ },
102
+ computed: {
103
+ ...({} as {
104
+ computeSize(): VxeComponentSizeType
105
+ }),
106
+ computeIsDateTimeType () {
107
+ const $xeDatePanel = this
108
+ const props = $xeDatePanel
109
+
110
+ const { type } = props
111
+ return type === 'time' || type === 'datetime'
112
+ },
113
+ computeIsDatePanelType () {
114
+ const $xeDatePanel = this
115
+ const props = $xeDatePanel
116
+
117
+ const isDateTimeType = $xeDatePanel.computeIsDateTimeType
118
+ return isDateTimeType || ['date', 'week', 'month', 'quarter', 'year'].indexOf(props.type) > -1
119
+ },
120
+ computeDateStartTime () {
121
+ const $xeDatePanel = this
122
+ const props = $xeDatePanel
123
+
124
+ return props.startDate ? XEUtils.toStringDate(props.startDate) : null
125
+ },
126
+ computeDateEndTime () {
127
+ const $xeDatePanel = this
128
+ const props = $xeDatePanel
129
+
130
+ return props.endDate ? XEUtils.toStringDate(props.endDate) : null
131
+ },
132
+ computeDateListValue () {
133
+ const $xeDatePanel = this
134
+ const props = $xeDatePanel
135
+
136
+ const { value: modelValue, multiple } = props
137
+ const isDatePanelType = $xeDatePanel.computeIsDatePanelType as boolean
138
+ const dateValueFormat = $xeDatePanel.computeDateValueFormat as string
139
+ if (multiple && modelValue && isDatePanelType) {
140
+ return XEUtils.toValueString(modelValue).split(',').map(item => {
141
+ const date = ($xeDatePanel as any).parseDate(item, dateValueFormat)
142
+ if (XEUtils.isValidDate(date)) {
143
+ return date
144
+ }
145
+ return date
146
+ })
147
+ }
148
+ return []
149
+ },
150
+ computeDateMultipleValue () {
151
+ const $xeDatePanel = this
152
+
153
+ const dateListValue = $xeDatePanel.computeDateListValue as Date[]
154
+ const dateValueFormat = $xeDatePanel.computeDateValueFormat as string
155
+ return dateListValue.map(date => XEUtils.toDateString(date, dateValueFormat))
156
+ },
157
+ computeDateMultipleLabel () {
158
+ const $xeDatePanel = this
159
+
160
+ const dateListValue = $xeDatePanel.computeDateListValue as Date[]
161
+ const dateLabelFormat = $xeDatePanel.computeDateLabelFormat as string
162
+ return dateListValue.map(date => XEUtils.toDateString(date, dateLabelFormat)).join(', ')
163
+ },
164
+ computeLimitMaxCount () {
165
+ const $xeDatePanel = this
166
+ const props = $xeDatePanel
167
+
168
+ return props.multiple ? XEUtils.toNumber(props.limitCount) : 0
169
+ },
170
+ computeOverCount () {
171
+ const $xeDatePanel = this
172
+ const props = $xeDatePanel
173
+
174
+ const { multiple } = props
175
+ const limitMaxCount = $xeDatePanel.computeLimitMaxCount as number
176
+ const dateMultipleValue = $xeDatePanel.computeDateMultipleValue as string[]
177
+ if (multiple && limitMaxCount) {
178
+ return dateMultipleValue.length >= limitMaxCount
179
+ }
180
+ return false
181
+ },
182
+ computeDateValueFormat () {
183
+ const $xeDatePanel = this
184
+ const props = $xeDatePanel
185
+
186
+ const { type, valueFormat } = props
187
+ return handleValueFormat(type, valueFormat)
188
+ },
189
+ computeTimeOpts () {
190
+ const $xeDatePanel = this
191
+ const props = $xeDatePanel
192
+
193
+ return Object.assign({}, getConfig().datePanel.timeConfig, props.timeConfig)
194
+ },
195
+ computeDateValue () {
196
+ const $xeDatePanel = this
197
+ const props = $xeDatePanel
198
+
199
+ const { value: modelValue } = props
200
+ const isDatePanelType = $xeDatePanel.computeIsDatePanelType
201
+ const dateValueFormat = $xeDatePanel.computeDateValueFormat
202
+ let val = null
203
+ if (modelValue && isDatePanelType) {
204
+ const date = ($xeDatePanel as any).parseDate(modelValue, dateValueFormat)
205
+ if (XEUtils.isValidDate(date)) {
206
+ val = date
207
+ }
208
+ }
209
+ return val
210
+ },
211
+ computeIsDisabledPrevDateBtn () {
212
+ const $xeDatePanel = this
213
+ const reactData = $xeDatePanel.reactData as DatePanelReactData
214
+
215
+ const dateStartTime = $xeDatePanel.computeDateStartTime as Date | null
216
+ const { selectMonth } = reactData
217
+ if (selectMonth && dateStartTime) {
218
+ return selectMonth <= dateStartTime
219
+ }
220
+ return false
221
+ },
222
+ computeIsDisabledNextDateBtn () {
223
+ const $xeDatePanel = this
224
+ const reactData = $xeDatePanel.reactData as DatePanelReactData
225
+
226
+ const dateEndTime = $xeDatePanel.computeDateEndTime as Date | null
227
+ const { selectMonth } = reactData
228
+ if (selectMonth && dateEndTime) {
229
+ return XEUtils.getWhatMonth(selectMonth, 0, 'last') >= dateEndTime
230
+ }
231
+ return false
232
+ },
233
+ computeDateTimeLabel () {
234
+ const $xeDatePanel = this
235
+ const reactData = ($xeDatePanel as unknown as VxeDatePanelConstructor).reactData
236
+
237
+ const { datetimePanelValue } = reactData
238
+ const hasTimeSecond = $xeDatePanel.computeHasTimeSecond
239
+ const hasTimeMinute = $xeDatePanel.computeHasTimeMinute
240
+ if (datetimePanelValue) {
241
+ return XEUtils.toDateString(datetimePanelValue, hasTimeMinute && hasTimeSecond ? 'HH:mm:ss' : (hasTimeMinute ? 'HH:mm' : 'HH'))
242
+ }
243
+ return ''
244
+ },
245
+ computeDateHMSTime () {
246
+ const $xeDatePanel = this
247
+
248
+ const dateValue = $xeDatePanel.computeDateValue as Date | null
249
+ const isDateTimeType = $xeDatePanel.computeIsDateTimeType
250
+ return dateValue && isDateTimeType ? (dateValue.getHours() * 3600 + dateValue.getMinutes() * 60 + dateValue.getSeconds()) * 1000 : 0
251
+ },
252
+ computeDateLabelFormat () {
253
+ const $xeDatePanel = this
254
+ const props = $xeDatePanel
255
+
256
+ const { labelFormat } = props
257
+ const isDatePanelType = $xeDatePanel.computeIsDatePanelType
258
+ if (isDatePanelType) {
259
+ return labelFormat || getI18n(`vxe.input.date.labelFormat.${props.type}`)
260
+ }
261
+ return ''
262
+ },
263
+ computeYearList () {
264
+ const $xeDatePanel = this
265
+ const reactData = $xeDatePanel.reactData
266
+ const internalData = $xeDatePanel.internalData
267
+
268
+ const { yearSize } = internalData
269
+ const { selectMonth, currentDate } = reactData
270
+ const years: VxeDatePanelDefines.DateYearItem[] = []
271
+ if (selectMonth && currentDate) {
272
+ const currFullYear = currentDate.getFullYear()
273
+ const selectFullYear = selectMonth.getFullYear()
274
+ const startYearDate = new Date(selectFullYear - selectFullYear % yearSize, 0, 1)
275
+ for (let index = -4; index < yearSize + 4; index++) {
276
+ const date = XEUtils.getWhatYear(startYearDate, index, 'first')
277
+ const itemFullYear = date.getFullYear()
278
+ years.push({
279
+ date,
280
+ isCurrent: true,
281
+ isPrev: index < 0,
282
+ isNow: currFullYear === itemFullYear,
283
+ isNext: index >= yearSize,
284
+ year: itemFullYear
285
+ })
286
+ }
287
+ }
288
+ return years
289
+ },
290
+ computeSelectDatePanelObj () {
291
+ const $xeDatePanel = this
292
+ const reactData = $xeDatePanel.reactData
293
+
294
+ const isDatePanelType = $xeDatePanel.computeIsDatePanelType
295
+ let y = ''
296
+ let m = ''
297
+ if (isDatePanelType) {
298
+ const { datePanelType, selectMonth } = reactData
299
+ const yearList = $xeDatePanel.computeYearList
300
+ let year = ''
301
+ let month
302
+ if (selectMonth) {
303
+ year = selectMonth.getFullYear()
304
+ month = selectMonth.getMonth() + 1
305
+ }
306
+ if (datePanelType === 'quarter' || datePanelType === 'month') {
307
+ y = `${year}`
308
+ } else if (datePanelType === 'year') {
309
+ y = yearList.length ? `${yearList[0].year} - ${yearList[yearList.length - 1].year}` : ''
310
+ } else {
311
+ y = `${year}`
312
+ m = month ? getI18n('vxe.calendar.monthLabel', [month]) : '-'
313
+ }
314
+ }
315
+ return {
316
+ y: getI18n('vxe.calendar.yearLabel', [y]),
317
+ m
318
+ }
319
+ },
320
+ computeFirstDayOfWeek () {
321
+ const $xeDatePanel = this
322
+ const props = $xeDatePanel
323
+
324
+ const { startDay } = props
325
+ return XEUtils.toNumber(startDay) as VxeDatePanelPropTypes.StartDay
326
+ },
327
+ computeWeekDatas () {
328
+ const $xeDatePanel = this
329
+
330
+ const weeks: number[] = []
331
+ const isDatePanelType = $xeDatePanel.computeIsDatePanelType
332
+ if (isDatePanelType) {
333
+ let sWeek = $xeDatePanel.computeFirstDayOfWeek
334
+ weeks.push(sWeek)
335
+ for (let index = 0; index < 6; index++) {
336
+ if (sWeek >= 6) {
337
+ sWeek = 0
338
+ } else {
339
+ sWeek++
340
+ }
341
+ weeks.push(sWeek)
342
+ }
343
+ }
344
+ return weeks
345
+ },
346
+ computeDateHeaders () {
347
+ const $xeDatePanel = this
348
+
349
+ const isDatePanelType = $xeDatePanel.computeIsDatePanelType
350
+ if (isDatePanelType) {
351
+ const weekDatas = $xeDatePanel.computeWeekDatas as number[]
352
+ return weekDatas.map((day) => {
353
+ return {
354
+ value: day,
355
+ label: getI18n(`vxe.input.date.weeks.w${day}`)
356
+ }
357
+ })
358
+ }
359
+ return []
360
+ },
361
+ computeWeekHeaders () {
362
+ const $xeDatePanel = this
363
+
364
+ const isDatePanelType = $xeDatePanel.computeIsDatePanelType
365
+ if (isDatePanelType) {
366
+ const dateHeaders = $xeDatePanel.computeDateHeaders as {
367
+ value: number;
368
+ label: string;
369
+ }[]
370
+ return [{ label: getI18n('vxe.input.date.weeks.w') }].concat(dateHeaders)
371
+ }
372
+ return []
373
+ },
374
+ computeYearDatas () {
375
+ const $xeDatePanel = this
376
+
377
+ const yearList = $xeDatePanel.computeYearList as VxeDatePanelDefines.DateYearItem[]
378
+ return XEUtils.chunk(yearList, 4)
379
+ },
380
+ computeQuarterList () {
381
+ const $xeDatePanel = this
382
+ const reactData = $xeDatePanel.reactData
383
+ const internalData = $xeDatePanel.internalData
384
+
385
+ const { quarterSize } = internalData
386
+ const { selectMonth, currentDate } = reactData
387
+ const quarters: VxeDatePanelDefines.DateQuarterItem[] = []
388
+ if (selectMonth && currentDate) {
389
+ const currFullYear = currentDate.getFullYear()
390
+ const currQuarter = getDateQuarter(currentDate)
391
+ const firstYear = XEUtils.getWhatYear(selectMonth, 0, 'first')
392
+ const selFullYear = firstYear.getFullYear()
393
+ for (let index = -2; index < quarterSize - 2; index++) {
394
+ const date = XEUtils.getWhatQuarter(firstYear, index)
395
+ const itemFullYear = date.getFullYear()
396
+ const itemQuarter = getDateQuarter(date)
397
+ const isPrev = itemFullYear < selFullYear
398
+ quarters.push({
399
+ date,
400
+ isPrev,
401
+ isCurrent: itemFullYear === selFullYear,
402
+ isNow: itemFullYear === currFullYear && itemQuarter === currQuarter,
403
+ isNext: !isPrev && itemFullYear > selFullYear,
404
+ quarter: itemQuarter
405
+ })
406
+ }
407
+ }
408
+ return quarters
409
+ },
410
+ computeQuarterDatas () {
411
+ const $xeDatePanel = this
412
+
413
+ const quarterList = $xeDatePanel.computeQuarterList as VxeDatePanelDefines.DateQuarterItem[]
414
+ return XEUtils.chunk(quarterList, 2)
415
+ },
416
+ computeMonthList () {
417
+ const $xeDatePanel = this
418
+ const reactData = $xeDatePanel.reactData
419
+ const internalData = $xeDatePanel.internalData
420
+
421
+ const { monthSize } = internalData
422
+ const { selectMonth, currentDate } = reactData
423
+ const months: VxeDatePanelDefines.DateMonthItem[] = []
424
+ if (selectMonth && currentDate) {
425
+ const currFullYear = currentDate.getFullYear()
426
+ const currMonth = currentDate.getMonth()
427
+ const selFullYear = XEUtils.getWhatYear(selectMonth, 0, 'first').getFullYear()
428
+ for (let index = -4; index < monthSize - 4; index++) {
429
+ const date = XEUtils.getWhatYear(selectMonth, 0, index)
430
+ const itemFullYear = date.getFullYear()
431
+ const itemMonth = date.getMonth()
432
+ const isPrev = itemFullYear < selFullYear
433
+ months.push({
434
+ date,
435
+ isPrev,
436
+ isCurrent: itemFullYear === selFullYear,
437
+ isNow: itemFullYear === currFullYear && itemMonth === currMonth,
438
+ isNext: !isPrev && itemFullYear > selFullYear,
439
+ month: itemMonth
440
+ })
441
+ }
442
+ }
443
+ return months
444
+ },
445
+ computeMonthDatas () {
446
+ const $xeDatePanel = this
447
+
448
+ const monthList = $xeDatePanel.computeMonthList as VxeDatePanelDefines.DateMonthItem[]
449
+ return XEUtils.chunk(monthList, 4)
450
+ },
451
+ computeDayList () {
452
+ const $xeDatePanel = this
453
+ const reactData = $xeDatePanel.reactData
454
+
455
+ const { selectMonth, currentDate } = reactData
456
+ const days: VxeDatePanelDefines.DateDayItem[] = []
457
+ if (selectMonth && currentDate) {
458
+ const dateHMSTime = $xeDatePanel.computeDateHMSTime
459
+ const weekDatas = $xeDatePanel.computeWeekDatas
460
+ const currFullYear = currentDate.getFullYear()
461
+ const currMonth = currentDate.getMonth()
462
+ const currDate = currentDate.getDate()
463
+ const selFullYear = selectMonth.getFullYear()
464
+ const selMonth = selectMonth.getMonth()
465
+ const selDay = selectMonth.getDay()
466
+ const prevOffsetDate = -weekDatas.indexOf(selDay)
467
+ const startDayDate = new Date(XEUtils.getWhatDay(selectMonth, prevOffsetDate).getTime() + dateHMSTime)
468
+ for (let index = 0; index < 42; index++) {
469
+ const date = XEUtils.getWhatDay(startDayDate, index)
470
+ const itemFullYear = date.getFullYear()
471
+ const itemMonth = date.getMonth()
472
+ const itemDate = date.getDate()
473
+ const isPrev = date < selectMonth
474
+ days.push({
475
+ date,
476
+ isPrev,
477
+ isCurrent: itemFullYear === selFullYear && itemMonth === selMonth,
478
+ isNow: itemFullYear === currFullYear && itemMonth === currMonth && itemDate === currDate,
479
+ isNext: !isPrev && selMonth !== itemMonth,
480
+ label: itemDate
481
+ })
482
+ }
483
+ }
484
+ return days
485
+ },
486
+ computeDayDatas () {
487
+ const $xeDatePanel = this
488
+
489
+ const dayList = $xeDatePanel.computeDayList as VxeDatePanelDefines.DateDayItem[]
490
+ return XEUtils.chunk(dayList, 7)
491
+ },
492
+ computeWeekDates () {
493
+ const $xeDatePanel = this
494
+
495
+ const dayDatas = $xeDatePanel.computeDayDatas as VxeDatePanelDefines.DateDayItem[][]
496
+ const firstDayOfWeek = $xeDatePanel.computeFirstDayOfWeek
497
+ return dayDatas.map((list) => {
498
+ const firstItem = list[0]
499
+ const item: VxeDatePanelDefines.DateDayItem = {
500
+ date: firstItem.date,
501
+ isWeekNumber: true,
502
+ isPrev: false,
503
+ isCurrent: false,
504
+ isNow: false,
505
+ isNext: false,
506
+ label: XEUtils.getYearWeek(firstItem.date, firstDayOfWeek)
507
+ }
508
+ return [item].concat(list)
509
+ })
510
+ },
511
+ computeHourList () {
512
+ const $xeDatePanel = this
513
+
514
+ const timeOpts = $xeDatePanel.computeTimeOpts
515
+ const { hours: hourOptions, hourDisabledMethod } = timeOpts
516
+ const list: VxeDatePanelDefines.DateHourMinuteSecondItem[] = []
517
+ const isDateTimeType = $xeDatePanel.computeIsDateTimeType
518
+ if (isDateTimeType) {
519
+ if (hourOptions && hourOptions.length) {
520
+ hourOptions.forEach(item => {
521
+ if (XEUtils.isNumber(item) || XEUtils.isString(item)) {
522
+ const hour = XEUtils.toNumber(item)
523
+ list.push({
524
+ value: hour,
525
+ label: ('' + hour).padStart(2, '0'),
526
+ disabled: !!(hourDisabledMethod && hourDisabledMethod({ hour }))
527
+ })
528
+ } else if (item) {
529
+ const hour = XEUtils.toNumber(item.value)
530
+ list.push({
531
+ value: hour,
532
+ label: ('' + (item.label || hour)).padStart(2, '0'),
533
+ disabled: XEUtils.isBoolean(item.disabled) ? item.disabled : !!(hourDisabledMethod && hourDisabledMethod({ hour }))
534
+ })
535
+ }
536
+ })
537
+ } else {
538
+ for (let index = 0; index < 24; index++) {
539
+ const hour = index
540
+ list.push({
541
+ value: hour,
542
+ label: ('' + hour).padStart(2, '0'),
543
+ disabled: !!(hourDisabledMethod && hourDisabledMethod({ hour }))
544
+ })
545
+ }
546
+ }
547
+ }
548
+ return list
549
+ },
550
+ computeMinuteList () {
551
+ const $xeDatePanel = this
552
+
553
+ const timeOpts = $xeDatePanel.computeTimeOpts
554
+ const { minutes: minuteOptions, minuteDisabledMethod } = timeOpts
555
+ const list: VxeDatePanelDefines.DateHourMinuteSecondItem[] = []
556
+ const isDateTimeType = $xeDatePanel.computeIsDateTimeType
557
+ if (isDateTimeType) {
558
+ if (minuteOptions && minuteOptions.length) {
559
+ minuteOptions.forEach(item => {
560
+ if (XEUtils.isNumber(item) || XEUtils.isString(item)) {
561
+ const minute = XEUtils.toNumber(item)
562
+ list.push({
563
+ value: minute,
564
+ label: ('' + minute).padStart(2, '0'),
565
+ disabled: !!(minuteDisabledMethod && minuteDisabledMethod({ minute }))
566
+ })
567
+ } else if (item) {
568
+ const minute = XEUtils.toNumber(item.value)
569
+ list.push({
570
+ value: minute,
571
+ label: ('' + (item.label || minute)).padStart(2, '0'),
572
+ disabled: XEUtils.isBoolean(item.disabled) ? item.disabled : !!(minuteDisabledMethod && minuteDisabledMethod({ minute }))
573
+ })
574
+ }
575
+ })
576
+ } else {
577
+ for (let index = 0; index < 60; index++) {
578
+ const minute = index
579
+ list.push({
580
+ value: minute,
581
+ label: ('' + minute).padStart(2, '0'),
582
+ disabled: !!(minuteDisabledMethod && minuteDisabledMethod({ minute }))
583
+ })
584
+ }
585
+ }
586
+ }
587
+ return list
588
+ },
589
+ computeHasTimeMinute () {
590
+ const $xeDatePanel = this
591
+ const props = $xeDatePanel
592
+
593
+ const { timeFormat } = props
594
+ const dateValueFormat = $xeDatePanel.computeDateValueFormat as string
595
+ return !/HH/.test(timeFormat || dateValueFormat) || /mm/.test(timeFormat || dateValueFormat)
596
+ },
597
+ computeHasTimeSecond () {
598
+ const $xeDatePanel = this
599
+ const props = $xeDatePanel
600
+
601
+ const { timeFormat } = props
602
+ const dateValueFormat = $xeDatePanel.computeDateValueFormat as string
603
+ return !/HH/.test(timeFormat || dateValueFormat) || /ss/.test(timeFormat || dateValueFormat)
604
+ },
605
+ computeSecondList () {
606
+ const $xeDatePanel = this
607
+
608
+ const timeOpts = $xeDatePanel.computeTimeOpts
609
+ const { seconds: secondOptions, secondDisabledMethod } = timeOpts
610
+ const list: VxeDatePanelDefines.DateHourMinuteSecondItem[] = []
611
+ const isDateTimeType = $xeDatePanel.computeIsDateTimeType
612
+ if (isDateTimeType) {
613
+ if (secondOptions && secondOptions.length) {
614
+ secondOptions.forEach(item => {
615
+ if (XEUtils.isNumber(item) || XEUtils.isString(item)) {
616
+ const second = XEUtils.toNumber(item)
617
+ list.push({
618
+ value: second,
619
+ label: ('' + second).padStart(2, '0'),
620
+ disabled: !!(secondDisabledMethod && secondDisabledMethod({ second }))
621
+ })
622
+ } else if (item) {
623
+ const second = XEUtils.toNumber(item.value)
624
+ list.push({
625
+ value: second,
626
+ label: ('' + (item.label || second)).padStart(2, '0'),
627
+ disabled: XEUtils.isBoolean(item.disabled) ? item.disabled : !!(secondDisabledMethod && secondDisabledMethod({ second }))
628
+ })
629
+ }
630
+ })
631
+ } else {
632
+ for (let index = 0; index < 60; index++) {
633
+ const second = index
634
+ list.push({
635
+ value: second,
636
+ label: ('' + second).padStart(2, '0'),
637
+ disabled: !!(secondDisabledMethod && secondDisabledMethod({ second }))
638
+ })
639
+ }
640
+ }
641
+ }
642
+ return list
643
+ }
644
+ },
645
+ methods: {
646
+ //
647
+ // Method
648
+ //
649
+ dispatchEvent (type: ValueOf<VxeDatePanelEmits>, params: Record<string, any>, evnt: Event | null) {
650
+ const $xeDatePanel = this
651
+ $xeDatePanel.$emit(type, createEvent(evnt, { $datePanel: $xeDatePanel }, params))
652
+ },
653
+ emitModel (value: any) {
654
+ const $xeDatePanel = this
655
+ const reactData = $xeDatePanel.reactData
656
+
657
+ const { _events } = $xeDatePanel as any
658
+ reactData.inputValue = value
659
+ if (_events && _events.modelValue) {
660
+ $xeDatePanel.$emit('modelValue', value)
661
+ } else {
662
+ $xeDatePanel.$emit('model-value', value)
663
+ }
664
+ },
665
+ updateModelValue (modelValue: VxeDatePanelPropTypes.ModelValue | undefined) {
666
+ const $xeDatePanel = this
667
+ const props = $xeDatePanel
668
+ const reactData = $xeDatePanel.reactData
669
+
670
+ const { type } = props
671
+ const dateValueFormat = $xeDatePanel.computeDateValueFormat
672
+
673
+ const inpDate = parseDateValue(modelValue, type, { valueFormat: dateValueFormat })
674
+ reactData.inputValue = inpDate
675
+ reactData.inputLabel = inpDate
676
+ $xeDatePanel.dateOpenPanel()
677
+ },
678
+ parseDate (value: VxeDatePanelPropTypes.ModelValue, format: string) {
679
+ const $xeDatePanel = this
680
+ const props = $xeDatePanel
681
+
682
+ const { type, multiple } = props
683
+ if (type === 'time') {
684
+ return toStringTimeDate(value)
685
+ }
686
+ if (XEUtils.isArray(value)) {
687
+ return XEUtils.toStringDate(value[0], format)
688
+ }
689
+ if (XEUtils.isString(value)) {
690
+ return XEUtils.toStringDate(multiple ? XEUtils.last(value.split(',')) : value, format)
691
+ }
692
+ return XEUtils.toStringDate(value, format)
693
+ },
694
+ dateRevert () {
695
+ const $xeDatePanel = this
696
+ const props = $xeDatePanel
697
+ const reactData = $xeDatePanel.reactData
698
+
699
+ reactData.inputLabel = props.multiple ? $xeDatePanel.computeDateMultipleLabel : reactData.datePanelLabel
700
+ },
701
+ afterCheckValue (inpVal: string) {
702
+ const $xeDatePanel = this
703
+ const props = $xeDatePanel
704
+ const reactData = $xeDatePanel.reactData
705
+
706
+ const { type } = props
707
+ const { inputLabel, datetimePanelValue } = reactData
708
+ const dateLabelFormat = $xeDatePanel.computeDateLabelFormat
709
+ if (inpVal) {
710
+ let inpDateVal: VxeDatePanelPropTypes.ModelValue = $xeDatePanel.parseDate(inpVal, dateLabelFormat as string)
711
+ if (XEUtils.isValidDate(inpDateVal)) {
712
+ if (type === 'time') {
713
+ inpDateVal = XEUtils.toDateString(inpDateVal, dateLabelFormat)
714
+ if (inputLabel !== inpDateVal) {
715
+ $xeDatePanel.handleChange(inpDateVal, { type: 'check' })
716
+ }
717
+ reactData.inputLabel = inpDateVal
718
+ } else {
719
+ let isChange = false
720
+ const firstDayOfWeek = $xeDatePanel.computeFirstDayOfWeek
721
+ if (type === 'datetime') {
722
+ const dateValue = $xeDatePanel.computeDateValue
723
+ if (inpVal !== XEUtils.toDateString(dateValue, dateLabelFormat) || inpVal !== XEUtils.toDateString(inpDateVal, dateLabelFormat)) {
724
+ isChange = true
725
+ if (datetimePanelValue) {
726
+ datetimePanelValue.setHours(inpDateVal.getHours())
727
+ datetimePanelValue.setMinutes(inpDateVal.getMinutes())
728
+ datetimePanelValue.setSeconds(inpDateVal.getSeconds())
729
+ }
730
+ }
731
+ } else {
732
+ isChange = true
733
+ }
734
+ reactData.inputLabel = XEUtils.toDateString(inpDateVal, dateLabelFormat, { firstDay: firstDayOfWeek })
735
+ if (isChange) {
736
+ $xeDatePanel.dateChange(inpDateVal)
737
+ }
738
+ }
739
+ } else {
740
+ $xeDatePanel.dateRevert()
741
+ }
742
+ } else {
743
+ $xeDatePanel.handleChange('', { type: 'check' })
744
+ }
745
+ },
746
+ handleChange (value: string, evnt: Event | { type: string }) {
747
+ const $xeDatePanel = this
748
+ const props = $xeDatePanel
749
+ const reactData = $xeDatePanel.reactData
750
+
751
+ const { type, value: modelValue, valueFormat } = props
752
+ const dateValueFormat = $xeDatePanel.computeDateValueFormat
753
+ reactData.inputLabel = value
754
+ if (hasTimestampValueType(valueFormat)) {
755
+ const dateVal = parseDateValue(value, type, { valueFormat: dateValueFormat })
756
+ const timeNum = dateVal ? dateVal.getTime() : null
757
+ $xeDatePanel.emitModel(timeNum)
758
+ if (modelValue !== timeNum) {
759
+ $xeDatePanel.dispatchEvent('change', { value: timeNum }, evnt as Event)
760
+ }
761
+ } else if (hasDateValueType(valueFormat)) {
762
+ const dateVal = parseDateValue(value, type, { valueFormat: dateValueFormat })
763
+ $xeDatePanel.emitModel(dateVal)
764
+ if (modelValue && dateVal ? XEUtils.toStringDate(modelValue).getTime() !== dateVal.getTime() : modelValue !== dateVal) {
765
+ $xeDatePanel.dispatchEvent('change', { value: dateVal }, evnt as Event)
766
+ }
767
+ } else {
768
+ $xeDatePanel.emitModel(value)
769
+ if (XEUtils.toValueString(modelValue) !== value) {
770
+ $xeDatePanel.dispatchEvent('change', { value }, evnt as Event)
771
+ }
772
+ }
773
+ },
774
+ hidePanel () {
775
+ const $xeDatePanel = this
776
+ const reactData = $xeDatePanel.reactData
777
+ const internalData = $xeDatePanel.internalData
778
+
779
+ return new Promise<void>(resolve => {
780
+ reactData.visiblePanel = false
781
+ internalData.hpTimeout = setTimeout(() => {
782
+ reactData.isAniVisible = false
783
+ resolve()
784
+ }, 350)
785
+ })
786
+ },
787
+ dateParseValue (val?: VxeDatePanelPropTypes.ModelValue) {
788
+ const $xeDatePanel = this
789
+ const props = $xeDatePanel
790
+ const reactData = $xeDatePanel.reactData
791
+
792
+ const { type } = props
793
+ const dateLabelFormat = $xeDatePanel.computeDateLabelFormat
794
+ const dateValueFormat = $xeDatePanel.computeDateValueFormat
795
+ const firstDayOfWeek = $xeDatePanel.computeFirstDayOfWeek
796
+ const dateObj = parseDateObj(val, type, {
797
+ valueFormat: dateValueFormat,
798
+ labelFormat: dateLabelFormat,
799
+ firstDay: firstDayOfWeek
800
+ })
801
+ reactData.datePanelValue = dateObj.value
802
+ reactData.datePanelLabel = dateObj.label
803
+ },
804
+ /**
805
+ * 值变化时处理
806
+ */
807
+ changeValue () {
808
+ const $xeDatePanel = this
809
+ const props = $xeDatePanel
810
+ const reactData = $xeDatePanel.reactData
811
+
812
+ const isDatePanelType = $xeDatePanel.computeIsDatePanelType
813
+ const { inputLabel } = reactData
814
+ if (isDatePanelType) {
815
+ $xeDatePanel.dateParseValue(inputLabel)
816
+ reactData.inputLabel = props.multiple ? $xeDatePanel.computeDateMultipleLabel : reactData.datePanelLabel
817
+ }
818
+ },
819
+ /**
820
+ * 检查初始值
821
+ */
822
+ initValue () {
823
+ const $xeDatePanel = this
824
+ const props = $xeDatePanel
825
+
826
+ const { value: modelValue } = props
827
+ const isDatePanelType = $xeDatePanel.computeIsDatePanelType
828
+ $xeDatePanel.updateModelValue(modelValue)
829
+ if (isDatePanelType) {
830
+ $xeDatePanel.changeValue()
831
+ }
832
+ },
833
+ dateCheckMonth (date: Date) {
834
+ const $xeDatePanel = this
835
+ const reactData = $xeDatePanel.reactData
836
+
837
+ const firstDayOfWeek = $xeDatePanel.computeFirstDayOfWeek
838
+ const weekNum = XEUtils.getYearWeek(date, firstDayOfWeek)
839
+ const weekStartDate = XEUtils.getWhatWeek(date, 0, firstDayOfWeek, firstDayOfWeek)
840
+ const month = XEUtils.getWhatMonth(weekNum === 1 ? XEUtils.getWhatDay(weekStartDate, 6) : date, 0, 'first')
841
+ if (!XEUtils.isEqual(month, reactData.selectMonth)) {
842
+ reactData.selectMonth = month
843
+ }
844
+ },
845
+ dateChange (date: Date, isReload?: boolean) {
846
+ const $xeDatePanel = this
847
+ const props = $xeDatePanel
848
+ const reactData = $xeDatePanel.reactData
849
+
850
+ const { value: modelValue, multiple } = props
851
+ const { datetimePanelValue } = reactData
852
+ const isDateTimeType = $xeDatePanel.computeIsDateTimeType
853
+ const dateValueFormat = $xeDatePanel.computeDateValueFormat
854
+ const firstDayOfWeek = $xeDatePanel.computeFirstDayOfWeek
855
+ if (props.type === 'week') {
856
+ const sWeek = XEUtils.toNumber(props.selectDay) as VxeDatePanelPropTypes.SelectDay
857
+ date = XEUtils.getWhatWeek(date, 0, sWeek, firstDayOfWeek)
858
+ } else if (isDateTimeType) {
859
+ if (datetimePanelValue) {
860
+ date.setHours(datetimePanelValue.getHours())
861
+ date.setMinutes(datetimePanelValue.getMinutes())
862
+ date.setSeconds(datetimePanelValue.getSeconds())
863
+ }
864
+ }
865
+ const inpVal = XEUtils.toDateString(date, dateValueFormat, { firstDay: firstDayOfWeek })
866
+ $xeDatePanel.dateCheckMonth(date)
867
+ if (multiple) {
868
+ const overCount = $xeDatePanel.computeOverCount
869
+ // 如果为多选
870
+ if (isDateTimeType) {
871
+ // 如果是datetime特殊类型
872
+ const dateListValue = isReload ? [] : [...$xeDatePanel.computeDateListValue]
873
+ const datetimeRest: Date[] = []
874
+ const eqIndex = XEUtils.findIndexOf(dateListValue, val => XEUtils.isDateSame(date, val, 'yyyyMMdd'))
875
+ if (eqIndex === -1) {
876
+ if (overCount) {
877
+ // 如果超出最大多选数量
878
+ return
879
+ }
880
+ dateListValue.push(date)
881
+ } else {
882
+ dateListValue.splice(eqIndex, 1)
883
+ }
884
+ dateListValue.forEach(item => {
885
+ if (item) {
886
+ if (datetimePanelValue) {
887
+ item.setHours(datetimePanelValue.getHours())
888
+ item.setMinutes(datetimePanelValue.getMinutes())
889
+ item.setSeconds(datetimePanelValue.getSeconds())
890
+ }
891
+ datetimeRest.push(item)
892
+ }
893
+ })
894
+ $xeDatePanel.handleChange(datetimeRest.map(date => XEUtils.toDateString(date, dateValueFormat)).join(','), { type: 'update' })
895
+ } else {
896
+ const dateMultipleValue = isReload ? [] : $xeDatePanel.computeDateMultipleValue
897
+ // 如果是日期类型
898
+ if (dateMultipleValue.some(val => XEUtils.isEqual(val, inpVal))) {
899
+ $xeDatePanel.handleChange(dateMultipleValue.filter(val => !XEUtils.isEqual(val, inpVal)).join(','), { type: 'update' })
900
+ } else {
901
+ if (overCount) {
902
+ // 如果超出最大多选数量
903
+ return
904
+ }
905
+ $xeDatePanel.handleChange(dateMultipleValue.concat([inpVal]).join(','), { type: 'update' })
906
+ }
907
+ }
908
+ } else {
909
+ // 如果为单选
910
+ if (!XEUtils.isEqual(modelValue, inpVal)) {
911
+ $xeDatePanel.handleChange(inpVal, { type: 'update' })
912
+ }
913
+ }
914
+ },
915
+ // 日期
916
+ dateMonthHandle (date: Date, offsetMonth: number) {
917
+ const $xeDatePanel = this
918
+ const reactData = $xeDatePanel.reactData
919
+
920
+ const firstDayOfWeek = $xeDatePanel.computeFirstDayOfWeek
921
+ const weekNum = XEUtils.getYearWeek(date, firstDayOfWeek)
922
+ const weekStartDate = XEUtils.getWhatWeek(date, 0, firstDayOfWeek, firstDayOfWeek)
923
+ const month = XEUtils.getWhatMonth(weekNum === 1 ? XEUtils.getWhatDay(weekStartDate, 6) : date, offsetMonth, 'first')
924
+ reactData.selectMonth = month
925
+ },
926
+ dateNowHandle () {
927
+ const $xeDatePanel = this
928
+ const props = $xeDatePanel
929
+ const reactData = $xeDatePanel.reactData
930
+
931
+ const { type } = props
932
+ const firstDayOfWeek = $xeDatePanel.computeFirstDayOfWeek
933
+ let currentDate = new Date()
934
+ switch (type) {
935
+ case 'week':
936
+ currentDate = XEUtils.getWhatWeek(currentDate, 0, firstDayOfWeek)
937
+ break
938
+ case 'datetime':
939
+ currentDate = new Date()
940
+ reactData.datetimePanelValue = new Date()
941
+ break
942
+ default:
943
+ currentDate = XEUtils.getWhatDay(Date.now(), 0, 'first')
944
+ break
945
+ }
946
+ reactData.currentDate = currentDate
947
+ $xeDatePanel.dateMonthHandle(currentDate, 0)
948
+ },
949
+ dateToggleYearTypeEvent () {
950
+ const $xeDatePanel = this
951
+ const reactData = $xeDatePanel.reactData
952
+
953
+ reactData.datePanelType = 'year'
954
+ },
955
+ dateToggleMonthTypeEvent () {
956
+ const $xeDatePanel = this
957
+ const reactData = $xeDatePanel.reactData
958
+
959
+ let { datePanelType } = reactData
960
+ if (datePanelType === 'month' || datePanelType === 'quarter') {
961
+ datePanelType = 'year'
962
+ } else {
963
+ datePanelType = 'month'
964
+ }
965
+ reactData.datePanelType = datePanelType
966
+ },
967
+ datePrevEvent (evnt: Event) {
968
+ const $xeDatePanel = this
969
+ const props = $xeDatePanel
970
+ const reactData = $xeDatePanel.reactData
971
+ const internalData = $xeDatePanel.internalData
972
+
973
+ const { type } = props
974
+ const { datePanelType, selectMonth, inputLabel } = reactData
975
+ const { yearSize } = internalData
976
+ const value = inputLabel
977
+ const isDisabledPrevDateBtn = $xeDatePanel.computeIsDisabledPrevDateBtn
978
+ if (!isDisabledPrevDateBtn) {
979
+ let viewDate
980
+ if (type === 'year') {
981
+ viewDate = XEUtils.getWhatYear(selectMonth, -yearSize, 'first')
982
+ } else if (type === 'month' || type === 'quarter') {
983
+ if (datePanelType === 'year') {
984
+ viewDate = XEUtils.getWhatYear(selectMonth, -yearSize, 'first')
985
+ } else {
986
+ viewDate = XEUtils.getWhatYear(selectMonth, -1, 'first')
987
+ }
988
+ } else {
989
+ if (datePanelType === 'year') {
990
+ viewDate = XEUtils.getWhatYear(selectMonth, -yearSize, 'first')
991
+ } else if (datePanelType === 'month') {
992
+ viewDate = XEUtils.getWhatYear(selectMonth, -1, 'first')
993
+ } else {
994
+ viewDate = XEUtils.getWhatMonth(selectMonth, -1, 'first')
995
+ }
996
+ }
997
+ reactData.selectMonth = viewDate
998
+ $xeDatePanel.dispatchEvent('date-prev', { viewType: datePanelType, viewDate, value, type }, evnt)
999
+ }
1000
+ },
1001
+ dateTodayMonthEvent (evnt: Event) {
1002
+ const $xeDatePanel = this
1003
+ const props = $xeDatePanel
1004
+ const reactData = $xeDatePanel.reactData
1005
+
1006
+ $xeDatePanel.dateNowHandle()
1007
+ $xeDatePanel.dateChange(reactData.currentDate, true)
1008
+ if (!props.multiple) {
1009
+ $xeDatePanel.hidePanel()
1010
+ }
1011
+ $xeDatePanel.dispatchEvent('date-today', { type: props.type }, evnt)
1012
+ },
1013
+ dateNextEvent (evnt: Event) {
1014
+ const $xeDatePanel = this
1015
+ const props = $xeDatePanel
1016
+ const reactData = $xeDatePanel.reactData
1017
+ const internalData = $xeDatePanel.internalData
1018
+
1019
+ const { type } = props
1020
+ const { datePanelType, selectMonth, inputLabel } = reactData
1021
+ const { yearSize } = internalData
1022
+ const value = inputLabel
1023
+ const isDisabledNextDateBtn = $xeDatePanel.computeIsDisabledNextDateBtn
1024
+ if (!isDisabledNextDateBtn) {
1025
+ let viewDate
1026
+ if (type === 'year') {
1027
+ viewDate = XEUtils.getWhatYear(selectMonth, yearSize, 'first')
1028
+ } else if (type === 'month' || type === 'quarter') {
1029
+ if (datePanelType === 'year') {
1030
+ viewDate = XEUtils.getWhatYear(selectMonth, yearSize, 'first')
1031
+ } else {
1032
+ viewDate = XEUtils.getWhatYear(selectMonth, 1, 'first')
1033
+ }
1034
+ } else {
1035
+ if (datePanelType === 'year') {
1036
+ viewDate = XEUtils.getWhatYear(selectMonth, yearSize, 'first')
1037
+ } else if (datePanelType === 'month') {
1038
+ viewDate = XEUtils.getWhatYear(selectMonth, 1, 'first')
1039
+ } else {
1040
+ viewDate = XEUtils.getWhatMonth(selectMonth, 1, 'first')
1041
+ }
1042
+ }
1043
+ reactData.selectMonth = viewDate
1044
+ $xeDatePanel.dispatchEvent('date-next', { viewType: datePanelType, value, type }, evnt)
1045
+ }
1046
+ },
1047
+ isRangeDisabled (item: { date: Date }) {
1048
+ const $xeDatePanel = this
1049
+
1050
+ const dateStartTime = $xeDatePanel.computeDateStartTime
1051
+ const dateEndTime = $xeDatePanel.computeDateEndTime
1052
+ const { date } = item
1053
+ if (dateStartTime && dateStartTime.getTime() > date.getTime()) {
1054
+ return true
1055
+ }
1056
+ if (dateEndTime && dateEndTime.getTime() < date.getTime()) {
1057
+ return true
1058
+ }
1059
+ return false
1060
+ },
1061
+ isDateDisabled (item: { date: Date }) {
1062
+ const $xeDatePanel = this
1063
+ const props = $xeDatePanel
1064
+ const reactData = $xeDatePanel.reactData
1065
+
1066
+ const { disabledMethod } = props
1067
+ const { datePanelType } = reactData
1068
+ const { date } = item
1069
+ if (disabledMethod) {
1070
+ return disabledMethod({ type: datePanelType, viewType: datePanelType, date, $datePanel: $xeDatePanel })
1071
+ }
1072
+ return false
1073
+ },
1074
+ hasAllDisabled (item: { date: Date }) {
1075
+ const $xeDatePanel = this
1076
+
1077
+ return $xeDatePanel.isRangeDisabled(item) || $xeDatePanel.isDateDisabled(item)
1078
+ },
1079
+ dateSelectItem (date: Date) {
1080
+ const $xeDatePanel = this
1081
+ const props = $xeDatePanel
1082
+ const reactData = $xeDatePanel.reactData
1083
+
1084
+ const { type, multiple } = props
1085
+ const { datePanelType } = reactData
1086
+ if (type === 'month') {
1087
+ if (datePanelType === 'year') {
1088
+ reactData.datePanelType = 'month'
1089
+ $xeDatePanel.dateCheckMonth(date)
1090
+ } else {
1091
+ $xeDatePanel.dateChange(date)
1092
+ if (!multiple) {
1093
+ $xeDatePanel.hidePanel()
1094
+ }
1095
+ }
1096
+ } else if (type === 'year') {
1097
+ $xeDatePanel.dateChange(date)
1098
+ if (!multiple) {
1099
+ $xeDatePanel.hidePanel()
1100
+ }
1101
+ } else if (type === 'quarter') {
1102
+ if (datePanelType === 'year') {
1103
+ reactData.datePanelType = 'quarter'
1104
+ $xeDatePanel.dateCheckMonth(date)
1105
+ } else {
1106
+ $xeDatePanel.dateChange(date)
1107
+ if (!multiple) {
1108
+ $xeDatePanel.hidePanel()
1109
+ }
1110
+ }
1111
+ } else {
1112
+ if (datePanelType === 'month') {
1113
+ reactData.datePanelType = type === 'week' ? type : 'day'
1114
+ $xeDatePanel.dateCheckMonth(date)
1115
+ } else if (datePanelType === 'year') {
1116
+ reactData.datePanelType = 'month'
1117
+ $xeDatePanel.dateCheckMonth(date)
1118
+ } else {
1119
+ $xeDatePanel.dateChange(date)
1120
+ if (type === 'datetime') {
1121
+ // 日期带时间
1122
+ } else {
1123
+ if (!multiple) {
1124
+ $xeDatePanel.hidePanel()
1125
+ }
1126
+ }
1127
+ }
1128
+ }
1129
+ },
1130
+ dateSelectEvent (item: VxeDatePanelDefines.DateYearItem | VxeDatePanelDefines.DateQuarterItem | VxeDatePanelDefines.DateMonthItem | VxeDatePanelDefines.DateDayItem) {
1131
+ const $xeDatePanel = this
1132
+
1133
+ if (!$xeDatePanel.hasAllDisabled(item)) {
1134
+ $xeDatePanel.dateSelectItem(item.date)
1135
+ }
1136
+ },
1137
+ dateMoveDay (offsetDay: Date) {
1138
+ const $xeDatePanel = this
1139
+
1140
+ if (!$xeDatePanel.hasAllDisabled({ date: offsetDay })) {
1141
+ const dayList = $xeDatePanel.computeDayList
1142
+ if (!dayList.some((item) => XEUtils.isDateSame(item.date, offsetDay, 'yyyyMMdd'))) {
1143
+ $xeDatePanel.dateCheckMonth(offsetDay)
1144
+ }
1145
+ $xeDatePanel.dateParseValue(offsetDay)
1146
+ }
1147
+ },
1148
+ dateMoveYear (offsetYear: Date) {
1149
+ const $xeDatePanel = this
1150
+
1151
+ if (!$xeDatePanel.hasAllDisabled({ date: offsetYear })) {
1152
+ const yearList = $xeDatePanel.computeYearList
1153
+ if (!yearList.some((item) => XEUtils.isDateSame(item.date, offsetYear, 'yyyy'))) {
1154
+ $xeDatePanel.dateCheckMonth(offsetYear)
1155
+ }
1156
+ $xeDatePanel.dateParseValue(offsetYear)
1157
+ }
1158
+ },
1159
+ dateMoveQuarter (offsetQuarter: Date) {
1160
+ const $xeDatePanel = this
1161
+
1162
+ if (!$xeDatePanel.hasAllDisabled({ date: offsetQuarter })) {
1163
+ const quarterList = $xeDatePanel.computeQuarterList
1164
+ if (!quarterList.some((item) => XEUtils.isDateSame(item.date, offsetQuarter, 'yyyyq'))) {
1165
+ $xeDatePanel.dateCheckMonth(offsetQuarter)
1166
+ }
1167
+ $xeDatePanel.dateParseValue(offsetQuarter)
1168
+ }
1169
+ },
1170
+ dateMoveMonth (offsetMonth: Date) {
1171
+ const $xeDatePanel = this
1172
+
1173
+ if (!$xeDatePanel.hasAllDisabled({ date: offsetMonth })) {
1174
+ const monthList = $xeDatePanel.computeMonthList
1175
+ if (!monthList.some((item) => XEUtils.isDateSame(item.date, offsetMonth, 'yyyyMM'))) {
1176
+ $xeDatePanel.dateCheckMonth(offsetMonth)
1177
+ }
1178
+ $xeDatePanel.dateParseValue(offsetMonth)
1179
+ }
1180
+ },
1181
+ dateMouseenterEvent (item: VxeDatePanelDefines.DateYearItem | VxeDatePanelDefines.DateQuarterItem | VxeDatePanelDefines.DateMonthItem | VxeDatePanelDefines.DateDayItem) {
1182
+ const $xeDatePanel = this
1183
+ const reactData = $xeDatePanel.reactData
1184
+
1185
+ if (!$xeDatePanel.hasAllDisabled(item)) {
1186
+ const { datePanelType } = reactData
1187
+ if (datePanelType === 'month') {
1188
+ $xeDatePanel.dateMoveMonth(item.date)
1189
+ } else if (datePanelType === 'quarter') {
1190
+ $xeDatePanel.dateMoveQuarter(item.date)
1191
+ } else if (datePanelType === 'year') {
1192
+ $xeDatePanel.dateMoveYear(item.date)
1193
+ } else {
1194
+ $xeDatePanel.dateMoveDay(item.date)
1195
+ }
1196
+ }
1197
+ },
1198
+ dateMouseleaveEvent () {
1199
+ const $xeDatePanel = this
1200
+ const reactData = $xeDatePanel.reactData
1201
+
1202
+ reactData.datePanelValue = null
1203
+ },
1204
+ updateTimePos (liElem: Element) {
1205
+ if (liElem) {
1206
+ const height = (liElem as HTMLElement).offsetHeight
1207
+ const ulElem = liElem.parentNode as HTMLElement
1208
+ ulElem.scrollTop = (liElem as HTMLElement).offsetTop - height * 4
1209
+ }
1210
+ },
1211
+ dateTimeChangeEvent (evnt: Event) {
1212
+ const $xeDatePanel = this
1213
+ const reactData = $xeDatePanel.reactData
1214
+
1215
+ const { datetimePanelValue } = reactData
1216
+ reactData.datetimePanelValue = datetimePanelValue ? new Date(datetimePanelValue.getTime()) : new Date()
1217
+ $xeDatePanel.updateTimePos(evnt.currentTarget as HTMLLIElement)
1218
+ },
1219
+ dateHourEvent (evnt: MouseEvent, item: VxeDatePanelDefines.DateHourMinuteSecondItem) {
1220
+ const $xeDatePanel = this
1221
+ const reactData = $xeDatePanel.reactData
1222
+
1223
+ const { datetimePanelValue } = reactData
1224
+ if (!item.disabled) {
1225
+ if (datetimePanelValue) {
1226
+ datetimePanelValue.setHours(item.value)
1227
+ }
1228
+ $xeDatePanel.dateTimeChangeEvent(evnt)
1229
+ }
1230
+ },
1231
+ dateConfirmEvent (evnt: Event) {
1232
+ const $xeDatePanel = this
1233
+ const props = $xeDatePanel
1234
+ const reactData = $xeDatePanel.reactData
1235
+
1236
+ const { multiple } = props
1237
+ const { datetimePanelValue } = reactData
1238
+ const dateValue = $xeDatePanel.computeDateValue
1239
+ const isDateTimeType = $xeDatePanel.computeIsDateTimeType
1240
+ if (isDateTimeType) {
1241
+ const dateValueFormat = $xeDatePanel.computeDateValueFormat
1242
+ if (multiple) {
1243
+ // 如果为多选
1244
+ const dateMultipleValue = $xeDatePanel.computeDateMultipleValue
1245
+ if (isDateTimeType) {
1246
+ // 如果是datetime特殊类型
1247
+ const dateListValue = [...$xeDatePanel.computeDateListValue]
1248
+ const datetimeRest: Date[] = []
1249
+ dateListValue.forEach(item => {
1250
+ if (item) {
1251
+ if (datetimePanelValue) {
1252
+ item.setHours(datetimePanelValue.getHours())
1253
+ item.setMinutes(datetimePanelValue.getMinutes())
1254
+ item.setSeconds(datetimePanelValue.getSeconds())
1255
+ }
1256
+ datetimeRest.push(item)
1257
+ }
1258
+ })
1259
+ $xeDatePanel.handleChange(datetimeRest.map(date => XEUtils.toDateString(date, dateValueFormat)).join(','), { type: 'update' })
1260
+ } else {
1261
+ // 如果是日期类型
1262
+ $xeDatePanel.handleChange(dateMultipleValue.join(','), { type: 'update' })
1263
+ }
1264
+ } else {
1265
+ $xeDatePanel.dateChange(dateValue || reactData.currentDate)
1266
+ }
1267
+ }
1268
+ $xeDatePanel.hidePanel()
1269
+ $xeDatePanel.dispatchEvent('confirm', {}, evnt)
1270
+ },
1271
+ dateMinuteEvent (evnt: MouseEvent, item: VxeDatePanelDefines.DateHourMinuteSecondItem) {
1272
+ const $xeDatePanel = this
1273
+ const reactData = $xeDatePanel.reactData
1274
+
1275
+ const { datetimePanelValue } = reactData
1276
+ if (!item.disabled) {
1277
+ if (datetimePanelValue) {
1278
+ datetimePanelValue.setMinutes(item.value)
1279
+ }
1280
+ $xeDatePanel.dateTimeChangeEvent(evnt)
1281
+ }
1282
+ },
1283
+ dateSecondEvent (evnt: MouseEvent, item: VxeDatePanelDefines.DateHourMinuteSecondItem) {
1284
+ const $xeDatePanel = this
1285
+ const reactData = $xeDatePanel.reactData
1286
+
1287
+ const { datetimePanelValue } = reactData
1288
+ if (!item.disabled) {
1289
+ if (datetimePanelValue) {
1290
+ datetimePanelValue.setSeconds(item.value)
1291
+ }
1292
+ $xeDatePanel.dateTimeChangeEvent(evnt)
1293
+ }
1294
+ },
1295
+ dateOpenPanel () {
1296
+ const $xeDatePanel = this
1297
+ const props = $xeDatePanel
1298
+ const reactData = $xeDatePanel.reactData
1299
+
1300
+ const { type, defaultDate, defaultTime } = props
1301
+ const isDateTimeType = $xeDatePanel.computeIsDateTimeType
1302
+ const dateValue = $xeDatePanel.computeDateValue
1303
+ if (['year', 'quarter', 'month', 'week'].indexOf(type) > -1) {
1304
+ reactData.datePanelType = type as VxeDatePanelDefines.DatePanelType
1305
+ } else {
1306
+ reactData.datePanelType = 'day'
1307
+ }
1308
+ reactData.currentDate = XEUtils.getWhatDay(Date.now(), 0, 'first')
1309
+ if (dateValue) {
1310
+ $xeDatePanel.dateMonthHandle(dateValue, 0)
1311
+ $xeDatePanel.dateParseValue(dateValue)
1312
+ } else {
1313
+ if (defaultDate) {
1314
+ // 面板默认日期仅支持解析 yyyy-MM-dd
1315
+ const defDate = $xeDatePanel.parseDate(defaultDate, 'yyyy-MM-dd')
1316
+ if (XEUtils.isValidDate(defDate)) {
1317
+ $xeDatePanel.dateMonthHandle(defDate, 0)
1318
+ } else {
1319
+ $xeDatePanel.dateNowHandle()
1320
+ }
1321
+ } else {
1322
+ $xeDatePanel.dateNowHandle()
1323
+ }
1324
+ }
1325
+ if (isDateTimeType) {
1326
+ let dtPanelValue = reactData.datePanelValue
1327
+ if (!dtPanelValue) {
1328
+ dtPanelValue = XEUtils.getWhatDay(Date.now(), 0, 'first')
1329
+ if (defaultTime) {
1330
+ const defTime = toStringTimeDate(defaultTime)
1331
+ if (XEUtils.isValidDate(defTime)) {
1332
+ dtPanelValue.setHours(defTime.getHours())
1333
+ dtPanelValue.setMinutes(defTime.getMinutes())
1334
+ dtPanelValue.setSeconds(defTime.getSeconds())
1335
+ }
1336
+ }
1337
+ }
1338
+ reactData.datetimePanelValue = dtPanelValue
1339
+ $xeDatePanel.$nextTick(() => {
1340
+ const timeBodyElem = $xeDatePanel.$refs.refInputTimeBody as HTMLDivElement
1341
+ XEUtils.arrayEach(timeBodyElem.querySelectorAll('li.is--selected'), (elem) => {
1342
+ $xeDatePanel.updateTimePos(elem)
1343
+ })
1344
+ })
1345
+ }
1346
+ },
1347
+ getModelValue () {
1348
+ const $xeDatePanel = this
1349
+ const reactData = $xeDatePanel.reactData
1350
+
1351
+ return reactData.inputValue
1352
+ },
1353
+ setPanelDate (date: Date) {
1354
+ const $xeDatePanel = this
1355
+
1356
+ if (date) {
1357
+ $xeDatePanel.dateCheckMonth(date)
1358
+ }
1359
+ },
1360
+ getPanelDate () {
1361
+ const $xeDatePanel = this
1362
+ const reactData = $xeDatePanel.reactData
1363
+
1364
+ return reactData.selectMonth
1365
+ },
1366
+ checkValue (value: string) {
1367
+ const $xeDatePanel = this
1368
+
1369
+ $xeDatePanel.afterCheckValue(value)
1370
+ },
1371
+ confirmByEvent (evnt: Event) {
1372
+ const $xeDatePanel = this
1373
+
1374
+ $xeDatePanel.dateConfirmEvent(evnt)
1375
+ },
1376
+
1377
+ //
1378
+ // Render
1379
+ //
1380
+ renderDateLabel (h: CreateElement, item: VxeDatePanelDefines.DateYearItem | VxeDatePanelDefines.DateQuarterItem | VxeDatePanelDefines.DateMonthItem | VxeDatePanelDefines.DateDayItem, label: string | number) {
1381
+ const $xeDatePanel = this
1382
+ const props = $xeDatePanel
1383
+ const reactData = $xeDatePanel.reactData
1384
+
1385
+ const { festivalMethod } = props
1386
+ const labelVNs: VNode[] = []
1387
+ if (festivalMethod) {
1388
+ const { datePanelType } = reactData
1389
+ const festivalRest = festivalMethod({ type: datePanelType, viewType: datePanelType, date: item.date, $datePanel: $xeDatePanel })
1390
+ const festivalItem = festivalRest ? (XEUtils.isString(festivalRest) ? { label: festivalRest } : festivalRest) : {}
1391
+ const extraItem = festivalItem.extra ? (XEUtils.isString(festivalItem.extra) ? { label: festivalItem.extra } : festivalItem.extra) : null
1392
+ labelVNs.push(
1393
+ h('div', {
1394
+ class: ['vxe-date-panel--label', {
1395
+ 'is-notice': festivalItem.notice
1396
+ }]
1397
+ }, extraItem && extraItem.label
1398
+ ? [
1399
+ h('div', {
1400
+ class: 'vxe-date-panel--label--number'
1401
+ }, `${label}`),
1402
+ h('div', {
1403
+ class: ['vxe-date-panel--label--extra', extraItem.important ? 'is-important' : '', extraItem.className],
1404
+ style: extraItem.style
1405
+ }, XEUtils.toValueString(extraItem.label))
1406
+ ]
1407
+ : `${label}`)
1408
+ )
1409
+ const festivalLabel = festivalItem.label
1410
+ if (festivalLabel) {
1411
+ // 默认最多支持3个节日重叠
1412
+ const festivalLabels = XEUtils.toValueString(festivalLabel).split(',')
1413
+ labelVNs.push(
1414
+ h('div', {
1415
+ class: ['vxe-date-panel--festival', festivalItem.important ? 'is-important' : '', festivalItem.className],
1416
+ style: festivalItem.style
1417
+ }, [
1418
+ festivalLabels.length > 1
1419
+ ? h('div', {
1420
+ class: ['vxe-date-panel--festival--overlap', `overlap--${festivalLabels.length}`]
1421
+ }, festivalLabels.map(label => h('div', label.substring(0, 3))))
1422
+ : h('div', {
1423
+ class: 'vxe-date-panel--festival--label'
1424
+ }, festivalLabels[0].substring(0, 3))
1425
+ ])
1426
+ )
1427
+ }
1428
+ }
1429
+ return labelVNs
1430
+ },
1431
+ renderDateDayTable (h: CreateElement) {
1432
+ const $xeDatePanel = this
1433
+ const props = $xeDatePanel
1434
+ const reactData = $xeDatePanel.reactData
1435
+
1436
+ const { multiple } = props
1437
+ const { datePanelType, datePanelValue } = reactData
1438
+ const dateValue = $xeDatePanel.computeDateValue
1439
+ const dateHeaders = $xeDatePanel.computeDateHeaders
1440
+ const dayDatas = $xeDatePanel.computeDayDatas
1441
+ const dateListValue = $xeDatePanel.computeDateListValue
1442
+ const overCount = $xeDatePanel.computeOverCount
1443
+ const matchFormat = 'yyyyMMdd'
1444
+ return [
1445
+ h('div', {
1446
+ class: ['vxe-date-panel--view-wrapper', `type--${datePanelType}`]
1447
+ }, [
1448
+ h('div', {
1449
+ class: 'vxe-date-panel--view-header'
1450
+ }, [
1451
+ h('div', {
1452
+ class: 'vxe-date-panel--view-row'
1453
+ }, dateHeaders.map((item) => {
1454
+ return h('div', {
1455
+ class: 'vxe-date-panel--view-item',
1456
+ style: {
1457
+ width: `${100 / dateHeaders.length}%`
1458
+ }
1459
+ }, [
1460
+ h('div', {
1461
+ class: 'vxe-date-panel--view-item-inner'
1462
+ }, [
1463
+ h('div', {
1464
+ class: 'vxe-date-panel--view-item-label'
1465
+ }, item.label)
1466
+ ])
1467
+ ])
1468
+ }))
1469
+ ]),
1470
+ h('div', {
1471
+ class: 'vxe-date-panel--view-body'
1472
+ }, dayDatas.map((rows) => {
1473
+ return h('div', {
1474
+ class: 'vxe-date-panel--view-row',
1475
+ style: {
1476
+ height: `${100 / dayDatas.length}%`
1477
+ }
1478
+ }, rows.map((item) => {
1479
+ const isSelected = multiple ? dateListValue.some(val => XEUtils.isDateSame(val, item.date, matchFormat)) : XEUtils.isDateSame(dateValue, item.date, matchFormat)
1480
+ return h('div', {
1481
+ class: ['vxe-date-panel--view-item', {
1482
+ 'is--prev': item.isPrev,
1483
+ 'is--current': item.isCurrent,
1484
+ 'is--now': item.isNow,
1485
+ 'is--next': item.isNext,
1486
+ 'is--range-disabled': $xeDatePanel.isRangeDisabled(item),
1487
+ 'is--disabled': $xeDatePanel.isDateDisabled(item),
1488
+ 'is--selected': isSelected,
1489
+ 'is--over': overCount && !isSelected,
1490
+ 'is--hover': !overCount && XEUtils.isDateSame(datePanelValue, item.date, matchFormat)
1491
+ }],
1492
+ style: {
1493
+ width: `${100 / rows.length}%`
1494
+ },
1495
+ on: {
1496
+ click: () => $xeDatePanel.dateSelectEvent(item),
1497
+ mouseenter: () => $xeDatePanel.dateMouseenterEvent(item),
1498
+ mouseleave: $xeDatePanel.dateMouseleaveEvent
1499
+ }
1500
+ }, [
1501
+ h('div', {
1502
+ class: 'vxe-date-panel--view-item-inner'
1503
+ }, $xeDatePanel.renderDateLabel(h, item, item.label))
1504
+ ])
1505
+ }))
1506
+ }))
1507
+ ])
1508
+ ]
1509
+ },
1510
+ renderDateWeekTable (h: CreateElement) {
1511
+ const $xeDatePanel = this
1512
+ const props = $xeDatePanel
1513
+ const reactData = $xeDatePanel.reactData
1514
+
1515
+ const { multiple } = props
1516
+ const { datePanelType, datePanelValue } = reactData
1517
+ const dateValue = $xeDatePanel.computeDateValue
1518
+ const weekHeaders = $xeDatePanel.computeWeekHeaders
1519
+ const weekDates = $xeDatePanel.computeWeekDates
1520
+ const dateListValue = $xeDatePanel.computeDateListValue
1521
+ const overCount = $xeDatePanel.computeOverCount
1522
+ const matchFormat = 'yyyyMMdd'
1523
+ return [
1524
+ h('div', {
1525
+ class: ['vxe-date-panel--view-wrapper', `type--${datePanelType}`]
1526
+ }, [
1527
+ h('div', {
1528
+ class: 'vxe-date-panel--view-header'
1529
+ }, [
1530
+ h('div', {
1531
+ class: 'vxe-date-panel--view-row'
1532
+ }, weekHeaders.map((item, rIndex) => {
1533
+ return h('div', {
1534
+ class: 'vxe-date-panel--view-item',
1535
+ style: {
1536
+ width: `${rIndex ? 13 : 9}%`
1537
+ }
1538
+ }, [
1539
+ h('div', {
1540
+ class: 'vxe-date-panel--view-item-inner'
1541
+ }, [
1542
+ h('div', {
1543
+ class: 'vxe-date-panel--view-item-label'
1544
+ }, item.label)
1545
+ ])
1546
+ ])
1547
+ }))
1548
+ ]),
1549
+ h('div', {
1550
+ class: 'vxe-date-panel--view-body'
1551
+ }, weekDates.map((rows) => {
1552
+ const isSelected = multiple ? rows.some((item) => dateListValue.some(val => XEUtils.isDateSame(val, item.date, matchFormat))) : rows.some((item) => XEUtils.isDateSame(dateValue, item.date, matchFormat))
1553
+ const isHover = rows.some((item) => XEUtils.isDateSame(datePanelValue, item.date, matchFormat))
1554
+ const isNowWeek = rows.some(item => item.isNow)
1555
+ return h('div', {
1556
+ class: 'vxe-date-panel--view-row',
1557
+ style: {
1558
+ height: `${100 / weekDates.length}%`
1559
+ }
1560
+ }, rows.map((item, rIndex) => {
1561
+ return h('div', {
1562
+ class: ['vxe-date-panel--view-item', {
1563
+ 'is--prev': item.isPrev,
1564
+ 'is--current': item.isCurrent,
1565
+ 'is--now': rIndex ? item.isNow : isNowWeek,
1566
+ 'is--next': item.isNext,
1567
+ 'is--range-disabled': $xeDatePanel.isRangeDisabled(item),
1568
+ 'is--disabled': $xeDatePanel.isDateDisabled(item),
1569
+ 'is--selected': isSelected,
1570
+ 'is--over': overCount && !isSelected,
1571
+ 'is--hover': !overCount && isHover
1572
+ }],
1573
+ style: {
1574
+ width: `${rIndex ? 13 : 9}%`
1575
+ },
1576
+ on: {
1577
+ click: () => $xeDatePanel.dateSelectEvent(item),
1578
+ mouseenter: () => $xeDatePanel.dateMouseenterEvent(item),
1579
+ mouseleave: $xeDatePanel.dateMouseleaveEvent
1580
+ }
1581
+ }, [
1582
+ h('div', {
1583
+ class: 'vxe-date-panel--view-item-inner'
1584
+ }, $xeDatePanel.renderDateLabel(h, item, item.label))
1585
+ ])
1586
+ }))
1587
+ }))
1588
+ ])
1589
+ ]
1590
+ },
1591
+ renderDateMonthTable (h: CreateElement) {
1592
+ const $xeDatePanel = this
1593
+ const props = $xeDatePanel
1594
+ const reactData = $xeDatePanel.reactData
1595
+
1596
+ const { multiple } = props
1597
+ const { datePanelType, datePanelValue } = reactData
1598
+ const dateValue = $xeDatePanel.computeDateValue
1599
+ const monthDatas = $xeDatePanel.computeMonthDatas
1600
+ const dateListValue = $xeDatePanel.computeDateListValue
1601
+ const overCount = $xeDatePanel.computeOverCount
1602
+ const matchFormat = 'yyyyMM'
1603
+ return [
1604
+ h('div', {
1605
+ class: ['vxe-date-panel--view-wrapper', `type--${datePanelType}`]
1606
+ }, [
1607
+ h('div', {
1608
+ class: 'vxe-date-panel--view-body'
1609
+ }, monthDatas.map((rows) => {
1610
+ return h('div', {
1611
+ class: 'vxe-date-panel--view-row',
1612
+ style: {
1613
+ height: `${100 / monthDatas.length}%`
1614
+ }
1615
+ }, rows.map((item) => {
1616
+ const isSelected = multiple ? dateListValue.some(val => XEUtils.isDateSame(val, item.date, matchFormat)) : XEUtils.isDateSame(dateValue, item.date, matchFormat)
1617
+ return h('div', {
1618
+ class: ['vxe-date-panel--view-item', {
1619
+ 'is--prev': item.isPrev,
1620
+ 'is--current': item.isCurrent,
1621
+ 'is--now': item.isNow,
1622
+ 'is--next': item.isNext,
1623
+ 'is--range-disabled': $xeDatePanel.isRangeDisabled(item),
1624
+ 'is--disabled': $xeDatePanel.isDateDisabled(item),
1625
+ 'is--selected': isSelected,
1626
+ 'is--over': overCount && !isSelected,
1627
+ 'is--hover': !overCount && XEUtils.isDateSame(datePanelValue, item.date, matchFormat)
1628
+ }],
1629
+ style: {
1630
+ width: `${100 / rows.length}%`
1631
+ },
1632
+ on: {
1633
+ click: () => $xeDatePanel.dateSelectEvent(item),
1634
+ mouseenter: () => $xeDatePanel.dateMouseenterEvent(item),
1635
+ mouseleave: $xeDatePanel.dateMouseleaveEvent
1636
+ }
1637
+ }, [
1638
+ h('div', {
1639
+ class: 'vxe-date-panel--view-item-inner'
1640
+ }, $xeDatePanel.renderDateLabel(h, item, getI18n(`vxe.input.date.months.m${item.month}`)))
1641
+ ])
1642
+ }))
1643
+ }))
1644
+ ])
1645
+ ]
1646
+ },
1647
+ renderDateQuarterTable (h: CreateElement) {
1648
+ const $xeDatePanel = this
1649
+ const props = $xeDatePanel
1650
+ const reactData = $xeDatePanel.reactData
1651
+
1652
+ const { multiple } = props
1653
+ const { datePanelType, datePanelValue } = reactData
1654
+ const dateValue = $xeDatePanel.computeDateValue
1655
+ const quarterDatas = $xeDatePanel.computeQuarterDatas
1656
+ const dateListValue = $xeDatePanel.computeDateListValue
1657
+ const overCount = $xeDatePanel.computeOverCount
1658
+ const matchFormat = 'yyyyq'
1659
+ return [
1660
+ h('div', {
1661
+ class: ['vxe-date-panel--view-wrapper', `type--${datePanelType}`]
1662
+ }, [
1663
+ h('div', {
1664
+ class: 'vxe-date-panel--view-body'
1665
+ }, quarterDatas.map((rows) => {
1666
+ return h('div', {
1667
+ class: 'vxe-date-panel--view-row',
1668
+ style: {
1669
+ height: `${100 / quarterDatas.length}%`
1670
+ }
1671
+ }, rows.map((item) => {
1672
+ const isSelected = multiple ? dateListValue.some(val => XEUtils.isDateSame(val, item.date, matchFormat)) : XEUtils.isDateSame(dateValue, item.date, matchFormat)
1673
+ return h('div', {
1674
+ class: ['vxe-date-panel--view-item', {
1675
+ 'is--prev': item.isPrev,
1676
+ 'is--current': item.isCurrent,
1677
+ 'is--now': item.isNow,
1678
+ 'is--next': item.isNext,
1679
+ 'is--range-disabled': $xeDatePanel.isRangeDisabled(item),
1680
+ 'is--disabled': $xeDatePanel.isDateDisabled(item),
1681
+ 'is--selected': isSelected,
1682
+ 'is--over': overCount && !isSelected,
1683
+ 'is--hover': !overCount && XEUtils.isDateSame(datePanelValue, item.date, matchFormat)
1684
+ }],
1685
+ style: {
1686
+ width: `${100 / rows.length}%`
1687
+ },
1688
+ on: {
1689
+ click: () => $xeDatePanel.dateSelectEvent(item),
1690
+ mouseenter: () => $xeDatePanel.dateMouseenterEvent(item),
1691
+ mouseleave: $xeDatePanel.dateMouseleaveEvent
1692
+ }
1693
+ }, [
1694
+ h('div', {
1695
+ class: 'vxe-date-panel--view-item-inner'
1696
+ }, $xeDatePanel.renderDateLabel(h, item, getI18n(`vxe.input.date.quarters.q${item.quarter}`)))
1697
+ ])
1698
+ }))
1699
+ }))
1700
+ ])
1701
+ ]
1702
+ },
1703
+ renderDateYearTable (h: CreateElement) {
1704
+ const $xeDatePanel = this
1705
+ const props = $xeDatePanel
1706
+ const reactData = $xeDatePanel.reactData
1707
+
1708
+ const { multiple } = props
1709
+ const { datePanelType, datePanelValue } = reactData
1710
+ const dateValue = $xeDatePanel.computeDateValue
1711
+ const yearDatas = $xeDatePanel.computeYearDatas
1712
+ const dateListValue = $xeDatePanel.computeDateListValue
1713
+ const overCount = $xeDatePanel.computeOverCount
1714
+ const matchFormat = 'yyyy'
1715
+ return [
1716
+ h('div', {
1717
+ class: ['vxe-date-panel--view-wrapper', `type--${datePanelType}`]
1718
+ }, [
1719
+ h('div', {
1720
+ class: 'vxe-date-panel--view-body'
1721
+ }, yearDatas.map((rows) => {
1722
+ return h('div', {
1723
+ class: 'vxe-date-panel--view-row',
1724
+ style: {
1725
+ height: `${100 / yearDatas.length}%`
1726
+ }
1727
+ }, rows.map((item) => {
1728
+ const isSelected = multiple ? dateListValue.some(val => XEUtils.isDateSame(val, item.date, matchFormat)) : XEUtils.isDateSame(dateValue, item.date, matchFormat)
1729
+ return h('div', {
1730
+ class: ['vxe-date-panel--view-item', {
1731
+ 'is--prev': item.isPrev,
1732
+ 'is--current': item.isCurrent,
1733
+ 'is--now': item.isNow,
1734
+ 'is--next': item.isNext,
1735
+ 'is--range-disabled': $xeDatePanel.isRangeDisabled(item),
1736
+ 'is--disabled': $xeDatePanel.isDateDisabled(item),
1737
+ 'is--selected': isSelected,
1738
+ 'is--over': overCount && !isSelected,
1739
+ 'is--hover': !overCount && XEUtils.isDateSame(datePanelValue, item.date, matchFormat)
1740
+ }],
1741
+ style: {
1742
+ width: `${100 / rows.length}%`
1743
+ },
1744
+ on: {
1745
+ click: () => $xeDatePanel.dateSelectEvent(item),
1746
+ mouseenter: () => $xeDatePanel.dateMouseenterEvent(item),
1747
+ mouseleave: $xeDatePanel.dateMouseleaveEvent
1748
+ }
1749
+ }, [
1750
+ h('div', {
1751
+ class: 'vxe-date-panel--view-item-inner'
1752
+ }, $xeDatePanel.renderDateLabel(h, item, item.year))
1753
+ ])
1754
+ }))
1755
+ }))
1756
+ ])
1757
+ ]
1758
+ },
1759
+ renderDateTable (h: CreateElement) {
1760
+ const $xeDatePanel = this
1761
+ const reactData = $xeDatePanel.reactData
1762
+
1763
+ const { datePanelType } = reactData
1764
+ switch (datePanelType) {
1765
+ case 'week' :
1766
+ return $xeDatePanel.renderDateWeekTable(h)
1767
+ case 'month' :
1768
+ return $xeDatePanel.renderDateMonthTable(h)
1769
+ case 'quarter' :
1770
+ return $xeDatePanel.renderDateQuarterTable(h)
1771
+ case 'year' :
1772
+ return $xeDatePanel.renderDateYearTable(h)
1773
+ }
1774
+ return $xeDatePanel.renderDateDayTable(h)
1775
+ },
1776
+ renderDatePanel (h: CreateElement) {
1777
+ const $xeDatePanel = this
1778
+ const reactData = $xeDatePanel.reactData
1779
+
1780
+ const { datePanelType } = reactData
1781
+ const isDisabledPrevDateBtn = $xeDatePanel.computeIsDisabledPrevDateBtn
1782
+ const isDisabledNextDateBtn = $xeDatePanel.computeIsDisabledNextDateBtn
1783
+ const selectDatePanelObj = $xeDatePanel.computeSelectDatePanelObj
1784
+ return [
1785
+ h('div', {
1786
+ class: 'vxe-date-panel--picker-header'
1787
+ }, [
1788
+ h('div', {
1789
+ class: 'vxe-date-panel--picker-type-wrapper'
1790
+ }, [
1791
+ datePanelType === 'year'
1792
+ ? h('span', {
1793
+ class: 'vxe-date-panel--picker-label'
1794
+ }, selectDatePanelObj.y)
1795
+ : h('span', {
1796
+ class: 'vxe-date-panel--picker-btns'
1797
+ }, [
1798
+ h('span', {
1799
+ class: 'vxe-date-panel--picker-btn',
1800
+ on: {
1801
+ click: $xeDatePanel.dateToggleYearTypeEvent
1802
+ }
1803
+ }, selectDatePanelObj.y),
1804
+ selectDatePanelObj.m
1805
+ ? h('span', {
1806
+ class: 'vxe-date-panel--picker-btn',
1807
+ on: {
1808
+ click: $xeDatePanel.dateToggleMonthTypeEvent
1809
+ }
1810
+ }, selectDatePanelObj.m)
1811
+ : renderEmptyElement($xeDatePanel)
1812
+ ])
1813
+ ]),
1814
+ h('div', {
1815
+ class: 'vxe-date-panel--picker-btn-wrapper'
1816
+ }, [
1817
+ h('span', {
1818
+ class: ['vxe-date-panel--picker-btn vxe-date-panel--picker-prev-btn', {
1819
+ 'is--disabled': isDisabledPrevDateBtn
1820
+ }],
1821
+ on: {
1822
+ click: $xeDatePanel.datePrevEvent
1823
+ }
1824
+ }, [
1825
+ h('i', {
1826
+ class: 'vxe-icon-caret-left'
1827
+ })
1828
+ ]),
1829
+ h('span', {
1830
+ class: 'vxe-date-panel--picker-btn vxe-date-panel--picker-current-btn',
1831
+ on: {
1832
+ click: $xeDatePanel.dateTodayMonthEvent
1833
+ }
1834
+ }, [
1835
+ h('i', {
1836
+ class: 'vxe-icon-dot'
1837
+ })
1838
+ ]),
1839
+ h('span', {
1840
+ class: ['vxe-date-panel--picker-btn vxe-date-panel--picker-next-btn', {
1841
+ 'is--disabled': isDisabledNextDateBtn
1842
+ }],
1843
+ on: {
1844
+ click: $xeDatePanel.dateNextEvent
1845
+ }
1846
+ }, [
1847
+ h('i', {
1848
+ class: 'vxe-icon-caret-right'
1849
+ })
1850
+ ])
1851
+ ])
1852
+ ]),
1853
+ h('div', {
1854
+ class: 'vxe-date-panel--picker-body'
1855
+ }, $xeDatePanel.renderDateTable(h))
1856
+ ]
1857
+ },
1858
+ renderTimePanel (h: CreateElement) {
1859
+ const $xeDatePanel = this
1860
+ const props = $xeDatePanel
1861
+ const reactData = $xeDatePanel.reactData
1862
+
1863
+ const { type } = props
1864
+ const { datetimePanelValue } = reactData
1865
+ const dateTimeLabel = $xeDatePanel.computeDateTimeLabel
1866
+ const hourList = $xeDatePanel.computeHourList
1867
+ const hasTimeMinute = $xeDatePanel.computeHasTimeMinute
1868
+ const minuteList = $xeDatePanel.computeMinuteList
1869
+ const hasTimeSecond = $xeDatePanel.computeHasTimeSecond
1870
+ const secondList = $xeDatePanel.computeSecondList as VxeDatePanelDefines.DateHourMinuteSecondItem[]
1871
+ return [
1872
+ type === 'time'
1873
+ ? renderEmptyElement($xeDatePanel)
1874
+ : h('div', {
1875
+ class: 'vxe-date-panel--time-header'
1876
+ }, [
1877
+ h('div', {
1878
+ class: 'vxe-date-panel--time-title'
1879
+ }, dateTimeLabel)
1880
+ ]),
1881
+ h('div', {
1882
+ ref: 'refInputTimeBody',
1883
+ class: 'vxe-date-panel--time-body'
1884
+ }, [
1885
+ h('ul', {
1886
+ class: 'vxe-date-panel--time-hour-list'
1887
+ }, hourList.map((item, index) => {
1888
+ return h('li', {
1889
+ key: index,
1890
+ class: {
1891
+ 'is--disabled': item.disabled,
1892
+ 'is--selected': datetimePanelValue && datetimePanelValue.getHours() === item.value
1893
+ },
1894
+ on: {
1895
+ click: (evnt: MouseEvent) => $xeDatePanel.dateHourEvent(evnt, item)
1896
+ }
1897
+ }, item.label)
1898
+ })),
1899
+ hasTimeMinute
1900
+ ? h('ul', {
1901
+ class: 'vxe-date-panel--time-minute-list'
1902
+ }, minuteList.map((item, index) => {
1903
+ return h('li', {
1904
+ key: index,
1905
+ class: {
1906
+ 'is--disabled': item.disabled,
1907
+ 'is--selected': datetimePanelValue && datetimePanelValue.getMinutes() === item.value
1908
+ },
1909
+ on: {
1910
+ click: (evnt: MouseEvent) => $xeDatePanel.dateMinuteEvent(evnt, item)
1911
+ }
1912
+ }, item.label)
1913
+ }))
1914
+ : renderEmptyElement($xeDatePanel),
1915
+ hasTimeMinute && hasTimeSecond
1916
+ ? h('ul', {
1917
+ class: 'vxe-date-panel--time-second-list'
1918
+ }, secondList.map((item, index) => {
1919
+ return h('li', {
1920
+ key: index,
1921
+ class: {
1922
+ 'is--disabled': item.disabled,
1923
+ 'is--selected': datetimePanelValue && datetimePanelValue.getSeconds() === item.value
1924
+ },
1925
+ on: {
1926
+ click: (evnt: MouseEvent) => $xeDatePanel.dateSecondEvent(evnt, item)
1927
+ }
1928
+ }, item.label)
1929
+ }))
1930
+ : renderEmptyElement($xeDatePanel)
1931
+ ])
1932
+ ]
1933
+ },
1934
+ renderPickerPanel (h: CreateElement) {
1935
+ const $xeDatePanel = this
1936
+ const props = $xeDatePanel
1937
+
1938
+ const { type } = props
1939
+ if (type === 'datetime') {
1940
+ return h('div', {
1941
+ key: type,
1942
+ ref: 'refPanelWrapper',
1943
+ class: 'vxe-date-panel--time-layout-wrapper'
1944
+ }, [
1945
+ h('div', {
1946
+ class: 'vxe-date-panel--time-left-wrapper'
1947
+ }, $xeDatePanel.renderDatePanel(h)),
1948
+ h('div', {
1949
+ class: 'vxe-date-panel--time-right-wrapper'
1950
+ }, $xeDatePanel.renderTimePanel(h))
1951
+ ])
1952
+ } else if (type === 'time') {
1953
+ return h('div', {
1954
+ key: type,
1955
+ ref: 'refPanelWrapper',
1956
+ class: 'vxe-date-panel--wrapper'
1957
+ }, $xeDatePanel.renderTimePanel(h))
1958
+ }
1959
+ return h('div', {
1960
+ key: type || 'default',
1961
+ ref: 'refPanelWrapper',
1962
+ class: 'vxe-date-panel--wrapper'
1963
+ }, $xeDatePanel.renderDatePanel(h))
1964
+ },
1965
+ renderVN (h: CreateElement) {
1966
+ const $xeDatePanel = this
1967
+ const props = $xeDatePanel
1968
+
1969
+ const { type } = props
1970
+ const vSize = $xeDatePanel.computeSize
1971
+ return h('div', {
1972
+ class: ['vxe-date-panel', `type--${type}`, {
1973
+ [`size--${vSize}`]: vSize
1974
+ }]
1975
+ }, [
1976
+ $xeDatePanel.renderPickerPanel(h)
1977
+ ])
1978
+ }
1979
+ },
1980
+ watch: {
1981
+ value (val) {
1982
+ const $xeDatePanel = this
1983
+
1984
+ $xeDatePanel.updateModelValue(val)
1985
+ $xeDatePanel.changeValue()
1986
+ },
1987
+ type () {
1988
+ const $xeDatePanel = this
1989
+ const reactData = $xeDatePanel.reactData
1990
+
1991
+ // 切换类型是重置内置变量
1992
+ Object.assign(reactData, {
1993
+ inputLabel: '',
1994
+ datetimePanelValue: null,
1995
+ datePanelValue: null,
1996
+ datePanelLabel: '',
1997
+ datePanelType: 'day',
1998
+ selectMonth: null,
1999
+ currentDate: null
2000
+ })
2001
+ $xeDatePanel.initValue()
2002
+ },
2003
+ computeDateLabelFormat () {
2004
+ const $xeDatePanel = this
2005
+ const props = $xeDatePanel
2006
+ const reactData = $xeDatePanel.reactData
2007
+
2008
+ const isDatePanelType = $xeDatePanel.computeIsDatePanelType
2009
+ if (isDatePanelType) {
2010
+ $xeDatePanel.dateParseValue(reactData.datePanelValue)
2011
+ reactData.inputLabel = props.multiple ? $xeDatePanel.computeDateMultipleLabel : reactData.datePanelLabel
2012
+ }
2013
+ }
2014
+ },
2015
+ created () {
2016
+ const $xeDatePanel = this
2017
+
2018
+ $xeDatePanel.initValue()
2019
+ $xeDatePanel.dateOpenPanel()
2020
+ },
2021
+ render (this: any, h) {
2022
+ return this.renderVN(h)
2023
+ }
2024
+ }) /* define-vxe-component end */