vxe-pc-ui 3.14.6 → 3.14.7

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