vxe-pc-ui 3.13.11 → 3.13.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (674) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +134 -134
  3. package/es/icon/style.css +1 -1
  4. package/es/style.css +1 -1
  5. package/es/style.min.css +1 -1
  6. package/es/tag/style.css +1 -3
  7. package/es/tag/style.min.css +1 -1
  8. package/es/ui/index.js +1 -1
  9. package/es/ui/src/log.js +1 -1
  10. package/es/vxe-tag/style.css +1 -3
  11. package/es/vxe-tag/style.min.css +1 -1
  12. package/lib/components.js +2 -1
  13. package/lib/components.min.js +1 -1
  14. package/lib/drawer/index.js +2 -1
  15. package/lib/drawer/index.min.js +1 -1
  16. package/lib/icon/style/style.css +1 -1
  17. package/lib/icon/style/style.min.css +1 -1
  18. package/lib/index.common.js +2 -1
  19. package/lib/index.umd.js +7962 -8834
  20. package/lib/index.umd.min.js +1 -1
  21. package/lib/modal/index.js +2 -1
  22. package/lib/modal/index.min.js +1 -1
  23. package/lib/style.css +1 -1
  24. package/lib/style.min.css +1 -1
  25. package/lib/tag/style/style.css +1 -3
  26. package/lib/tag/style/style.min.css +1 -1
  27. package/lib/ui/index.js +1 -1
  28. package/lib/ui/index.min.js +1 -1
  29. package/lib/ui/src/log.js +1 -1
  30. package/lib/ui/src/log.min.js +1 -1
  31. package/lib/vxe-alert/index.js +2 -1
  32. package/lib/vxe-alert/index.min.js +1 -1
  33. package/lib/vxe-anchor/index.js +2 -1
  34. package/lib/vxe-anchor/index.min.js +1 -1
  35. package/lib/vxe-anchor-link/index.js +2 -1
  36. package/lib/vxe-anchor-link/index.min.js +1 -1
  37. package/lib/vxe-avatar/index.js +2 -1
  38. package/lib/vxe-avatar/index.min.js +1 -1
  39. package/lib/vxe-backtop/index.js +2 -1
  40. package/lib/vxe-backtop/index.min.js +1 -1
  41. package/lib/vxe-badge/index.js +2 -1
  42. package/lib/vxe-badge/index.min.js +1 -1
  43. package/lib/vxe-breadcrumb/index.js +2 -1
  44. package/lib/vxe-breadcrumb/index.min.js +1 -1
  45. package/lib/vxe-breadcrumb-item/index.js +2 -1
  46. package/lib/vxe-breadcrumb-item/index.min.js +1 -1
  47. package/lib/vxe-button/index.js +2 -1
  48. package/lib/vxe-button/index.min.js +1 -1
  49. package/lib/vxe-button-group/index.js +2 -1
  50. package/lib/vxe-button-group/index.min.js +1 -1
  51. package/lib/vxe-calendar/index.js +2 -1
  52. package/lib/vxe-calendar/index.min.js +1 -1
  53. package/lib/vxe-card/index.js +2 -1
  54. package/lib/vxe-card/index.min.js +1 -1
  55. package/lib/vxe-carousel/index.js +2 -1
  56. package/lib/vxe-carousel/index.min.js +1 -1
  57. package/lib/vxe-carousel-item/index.js +2 -1
  58. package/lib/vxe-carousel-item/index.min.js +1 -1
  59. package/lib/vxe-cascader/index.js +2 -1
  60. package/lib/vxe-cascader/index.min.js +1 -1
  61. package/lib/vxe-checkbox/index.js +2 -1
  62. package/lib/vxe-checkbox/index.min.js +1 -1
  63. package/lib/vxe-checkbox-button/index.js +2 -1
  64. package/lib/vxe-checkbox-button/index.min.js +1 -1
  65. package/lib/vxe-checkbox-group/index.js +2 -1
  66. package/lib/vxe-checkbox-group/index.min.js +1 -1
  67. package/lib/vxe-col/index.js +2 -1
  68. package/lib/vxe-col/index.min.js +1 -1
  69. package/lib/vxe-collapse/index.js +2 -1
  70. package/lib/vxe-collapse/index.min.js +1 -1
  71. package/lib/vxe-collapse-pane/index.js +2 -1
  72. package/lib/vxe-collapse-pane/index.min.js +1 -1
  73. package/lib/vxe-color-picker/index.js +2 -1
  74. package/lib/vxe-color-picker/index.min.js +1 -1
  75. package/lib/vxe-context-menu/index.js +2 -1
  76. package/lib/vxe-context-menu/index.min.js +1 -1
  77. package/lib/vxe-countdown/index.js +2 -1
  78. package/lib/vxe-countdown/index.min.js +1 -1
  79. package/lib/vxe-date-panel/index.js +2 -1
  80. package/lib/vxe-date-panel/index.min.js +1 -1
  81. package/lib/vxe-date-picker/index.js +2 -1
  82. package/lib/vxe-date-picker/index.min.js +1 -1
  83. package/lib/vxe-date-range-picker/index.js +2 -1
  84. package/lib/vxe-date-range-picker/index.min.js +1 -1
  85. package/lib/vxe-drawer/index.js +2 -1
  86. package/lib/vxe-drawer/index.min.js +1 -1
  87. package/lib/vxe-empty/index.js +2 -1
  88. package/lib/vxe-empty/index.min.js +1 -1
  89. package/lib/vxe-form/index.js +2 -1
  90. package/lib/vxe-form/index.min.js +1 -1
  91. package/lib/vxe-form-gather/index.js +2 -1
  92. package/lib/vxe-form-gather/index.min.js +1 -1
  93. package/lib/vxe-form-group/index.js +2 -1
  94. package/lib/vxe-form-group/index.min.js +1 -1
  95. package/lib/vxe-form-item/index.js +2 -1
  96. package/lib/vxe-form-item/index.min.js +1 -1
  97. package/lib/vxe-icon/index.js +2 -1
  98. package/lib/vxe-icon/index.min.js +1 -1
  99. package/lib/vxe-icon-picker/index.js +2 -1
  100. package/lib/vxe-icon-picker/index.min.js +1 -1
  101. package/lib/vxe-image/index.js +2 -1
  102. package/lib/vxe-image/index.min.js +1 -1
  103. package/lib/vxe-image-group/index.js +2 -1
  104. package/lib/vxe-image-group/index.min.js +1 -1
  105. package/lib/vxe-image-preview/index.js +2 -1
  106. package/lib/vxe-image-preview/index.min.js +1 -1
  107. package/lib/vxe-input/index.js +2 -1
  108. package/lib/vxe-input/index.min.js +1 -1
  109. package/lib/vxe-layout-aside/index.js +2 -1
  110. package/lib/vxe-layout-aside/index.min.js +1 -1
  111. package/lib/vxe-layout-body/index.js +2 -1
  112. package/lib/vxe-layout-body/index.min.js +1 -1
  113. package/lib/vxe-layout-container/index.js +2 -1
  114. package/lib/vxe-layout-container/index.min.js +1 -1
  115. package/lib/vxe-layout-footer/index.js +2 -1
  116. package/lib/vxe-layout-footer/index.min.js +1 -1
  117. package/lib/vxe-layout-header/index.js +2 -1
  118. package/lib/vxe-layout-header/index.min.js +1 -1
  119. package/lib/vxe-link/index.js +2 -1
  120. package/lib/vxe-link/index.min.js +1 -1
  121. package/lib/vxe-list/index.js +2 -1
  122. package/lib/vxe-list/index.min.js +1 -1
  123. package/lib/vxe-loading/index.js +2 -1
  124. package/lib/vxe-loading/index.min.js +1 -1
  125. package/lib/vxe-mention/index.js +2 -1
  126. package/lib/vxe-mention/index.min.js +1 -1
  127. package/lib/vxe-menu/index.js +2 -1
  128. package/lib/vxe-menu/index.min.js +1 -1
  129. package/lib/vxe-modal/index.js +2 -1
  130. package/lib/vxe-modal/index.min.js +1 -1
  131. package/lib/vxe-notice-bar/index.js +2 -1
  132. package/lib/vxe-notice-bar/index.min.js +1 -1
  133. package/lib/vxe-number-input/index.js +2 -1
  134. package/lib/vxe-number-input/index.min.js +1 -1
  135. package/lib/vxe-optgroup/index.js +2 -1
  136. package/lib/vxe-optgroup/index.min.js +1 -1
  137. package/lib/vxe-option/index.js +2 -1
  138. package/lib/vxe-option/index.min.js +1 -1
  139. package/lib/vxe-pager/index.js +2 -1
  140. package/lib/vxe-pager/index.min.js +1 -1
  141. package/lib/vxe-password-input/index.js +2 -1
  142. package/lib/vxe-password-input/index.min.js +1 -1
  143. package/lib/vxe-print/index.js +2 -1
  144. package/lib/vxe-print/index.min.js +1 -1
  145. package/lib/vxe-print-page-break/index.js +2 -1
  146. package/lib/vxe-print-page-break/index.min.js +1 -1
  147. package/lib/vxe-pulldown/index.js +2 -1
  148. package/lib/vxe-pulldown/index.min.js +1 -1
  149. package/lib/vxe-radio/index.js +2 -1
  150. package/lib/vxe-radio/index.min.js +1 -1
  151. package/lib/vxe-radio-button/index.js +2 -1
  152. package/lib/vxe-radio-button/index.min.js +1 -1
  153. package/lib/vxe-radio-group/index.js +2 -1
  154. package/lib/vxe-radio-group/index.min.js +1 -1
  155. package/lib/vxe-rate/index.js +2 -1
  156. package/lib/vxe-rate/index.min.js +1 -1
  157. package/lib/vxe-result/index.js +2 -1
  158. package/lib/vxe-result/index.min.js +1 -1
  159. package/lib/vxe-row/index.js +2 -1
  160. package/lib/vxe-row/index.min.js +1 -1
  161. package/lib/vxe-segmented/index.js +2 -1
  162. package/lib/vxe-segmented/index.min.js +1 -1
  163. package/lib/vxe-select/index.js +2 -1
  164. package/lib/vxe-select/index.min.js +1 -1
  165. package/lib/vxe-slider/index.js +2 -1
  166. package/lib/vxe-slider/index.min.js +1 -1
  167. package/lib/vxe-split/index.js +2 -1
  168. package/lib/vxe-split/index.min.js +1 -1
  169. package/lib/vxe-split-pane/index.js +2 -1
  170. package/lib/vxe-split-pane/index.min.js +1 -1
  171. package/lib/vxe-splitter/index.js +2 -1
  172. package/lib/vxe-splitter/index.min.js +1 -1
  173. package/lib/vxe-splitter-panel/index.js +2 -1
  174. package/lib/vxe-splitter-panel/index.min.js +1 -1
  175. package/lib/vxe-steps/index.js +2 -1
  176. package/lib/vxe-steps/index.min.js +1 -1
  177. package/lib/vxe-switch/index.js +2 -1
  178. package/lib/vxe-switch/index.min.js +1 -1
  179. package/lib/vxe-tab-pane/index.js +2 -1
  180. package/lib/vxe-tab-pane/index.min.js +1 -1
  181. package/lib/vxe-table-select/index.js +2 -1
  182. package/lib/vxe-table-select/index.min.js +1 -1
  183. package/lib/vxe-tabs/index.js +2 -1
  184. package/lib/vxe-tabs/index.min.js +1 -1
  185. package/lib/vxe-tag/index.js +2 -1
  186. package/lib/vxe-tag/index.min.js +1 -1
  187. package/lib/vxe-tag/style/style.css +1 -3
  188. package/lib/vxe-tag/style/style.min.css +1 -1
  189. package/lib/vxe-text/index.js +2 -1
  190. package/lib/vxe-text/index.min.js +1 -1
  191. package/lib/vxe-text-ellipsis/index.js +2 -1
  192. package/lib/vxe-text-ellipsis/index.min.js +1 -1
  193. package/lib/vxe-textarea/index.js +2 -1
  194. package/lib/vxe-textarea/index.min.js +1 -1
  195. package/lib/vxe-timeline/index.js +2 -1
  196. package/lib/vxe-timeline/index.min.js +1 -1
  197. package/lib/vxe-timeline-item/index.js +2 -1
  198. package/lib/vxe-timeline-item/index.min.js +1 -1
  199. package/lib/vxe-tip/index.js +2 -1
  200. package/lib/vxe-tip/index.min.js +1 -1
  201. package/lib/vxe-tooltip/index.js +2 -1
  202. package/lib/vxe-tooltip/index.min.js +1 -1
  203. package/lib/vxe-tour/index.js +2 -1
  204. package/lib/vxe-tour/index.min.js +1 -1
  205. package/lib/vxe-tree/index.js +2 -1
  206. package/lib/vxe-tree/index.min.js +1 -1
  207. package/lib/vxe-tree-select/index.js +2 -1
  208. package/lib/vxe-tree-select/index.min.js +1 -1
  209. package/lib/vxe-u-i/index.js +2 -1
  210. package/lib/vxe-u-i/index.min.js +1 -1
  211. package/lib/vxe-ui/index.js +2 -1
  212. package/lib/vxe-ui/index.min.js +1 -1
  213. package/lib/vxe-upload/index.js +2 -1
  214. package/lib/vxe-upload/index.min.js +1 -1
  215. package/lib/vxe-watermark/index.js +2 -1
  216. package/lib/vxe-watermark/index.min.js +1 -1
  217. package/package.json +89 -89
  218. package/packages/alert/index.ts +16 -16
  219. package/packages/alert/src/alert.ts +106 -106
  220. package/packages/anchor/index.ts +16 -16
  221. package/packages/anchor/src/anchor-link.ts +158 -158
  222. package/packages/anchor/src/anchor.ts +267 -267
  223. package/packages/anchor/src/util.ts +23 -23
  224. package/packages/anchor-link/index.ts +16 -16
  225. package/packages/avatar/index.ts +16 -16
  226. package/packages/avatar/src/avatar.ts +141 -141
  227. package/packages/backtop/index.ts +16 -16
  228. package/packages/backtop/src/backtop.ts +330 -330
  229. package/packages/badge/index.ts +16 -16
  230. package/packages/badge/src/badge.ts +87 -87
  231. package/packages/breadcrumb/index.ts +16 -16
  232. package/packages/breadcrumb/src/breadcrumb-item.ts +118 -118
  233. package/packages/breadcrumb/src/breadcrumb.ts +89 -89
  234. package/packages/breadcrumb-item/index.ts +16 -16
  235. package/packages/button/index.ts +16 -16
  236. package/packages/button/src/button-group.ts +113 -113
  237. package/packages/button/src/button.ts +955 -955
  238. package/packages/button-group/index.ts +16 -16
  239. package/packages/calendar/index.ts +16 -16
  240. package/packages/calendar/src/calendar.ts +1527 -1527
  241. package/packages/card/index.ts +16 -16
  242. package/packages/card/src/card.ts +162 -162
  243. package/packages/carousel/index.ts +16 -16
  244. package/packages/carousel/src/carousel-item.ts +117 -117
  245. package/packages/carousel/src/carousel.ts +460 -460
  246. package/packages/carousel/src/util.ts +21 -21
  247. package/packages/carousel-item/index.ts +16 -16
  248. package/packages/cascader/index.ts +16 -16
  249. package/packages/cascader/src/cascader.ts +941 -941
  250. package/packages/checkbox/index.ts +16 -16
  251. package/packages/checkbox/src/button.ts +185 -185
  252. package/packages/checkbox/src/checkbox.ts +189 -189
  253. package/packages/checkbox/src/group.ts +259 -259
  254. package/packages/checkbox-button/index.ts +16 -16
  255. package/packages/checkbox-group/index.ts +16 -16
  256. package/packages/col/index.ts +16 -16
  257. package/packages/collapse/index.ts +16 -16
  258. package/packages/collapse/src/collapse-pane.ts +136 -136
  259. package/packages/collapse/src/collapse.ts +259 -259
  260. package/packages/collapse/src/util.ts +21 -21
  261. package/packages/collapse-pane/index.ts +16 -16
  262. package/packages/color-picker/index.ts +16 -16
  263. package/packages/color-picker/src/color-picker.ts +1277 -1277
  264. package/packages/color-picker/src/util.ts +198 -198
  265. package/packages/components.ts +307 -307
  266. package/packages/context-menu/index.ts +54 -54
  267. package/packages/context-menu/src/context-menu.ts +709 -709
  268. package/packages/countdown/index.ts +16 -16
  269. package/packages/countdown/src/countdown.ts +276 -276
  270. package/packages/date-panel/index.ts +16 -16
  271. package/packages/date-panel/src/date-panel.ts +2024 -2024
  272. package/packages/date-panel/src/util.ts +244 -244
  273. package/packages/date-picker/index.ts +17 -17
  274. package/packages/date-picker/src/date-picker.ts +1238 -1238
  275. package/packages/date-range-picker/index.ts +16 -16
  276. package/packages/date-range-picker/src/date-range-picker.ts +1466 -1466
  277. package/packages/drawer/index.ts +87 -87
  278. package/packages/drawer/src/drawer.ts +767 -767
  279. package/packages/dynamics/index.ts +125 -125
  280. package/packages/empty/index.ts +16 -16
  281. package/packages/empty/src/empty.ts +80 -80
  282. package/packages/form/index.ts +16 -16
  283. package/packages/form/render/index.ts +617 -617
  284. package/packages/form/src/form-config-item.ts +86 -86
  285. package/packages/form/src/form-group.ts +125 -125
  286. package/packages/form/src/form-item.ts +217 -217
  287. package/packages/form/src/form.ts +1032 -1032
  288. package/packages/form/src/itemInfo.ts +80 -80
  289. package/packages/form/src/render.ts +398 -398
  290. package/packages/form/src/util.ts +92 -92
  291. package/packages/form-gather/index.ts +18 -18
  292. package/packages/form-group/index.ts +16 -16
  293. package/packages/form-item/index.ts +16 -16
  294. package/packages/icon/index.ts +16 -16
  295. package/packages/icon/src/icon.ts +75 -75
  296. package/packages/icon-picker/index.ts +16 -16
  297. package/packages/icon-picker/src/icon-picker.ts +752 -752
  298. package/packages/image/index.ts +16 -16
  299. package/packages/image/src/group.ts +162 -162
  300. package/packages/image/src/image.ts +286 -286
  301. package/packages/image/src/preview.ts +737 -737
  302. package/packages/image/src/util.ts +62 -62
  303. package/packages/image-group/index.ts +16 -16
  304. package/packages/image-preview/index.ts +19 -19
  305. package/packages/index.ts +8 -8
  306. package/packages/input/index.ts +16 -16
  307. package/packages/input/src/input.ts +3187 -3187
  308. package/packages/language/ar-EG.ts +832 -832
  309. package/packages/language/de-DE.ts +832 -832
  310. package/packages/language/en-US.ts +832 -832
  311. package/packages/language/es-ES.ts +832 -832
  312. package/packages/language/fr-FR.ts +832 -832
  313. package/packages/language/hu-HU.ts +832 -832
  314. package/packages/language/hy-AM.ts +832 -832
  315. package/packages/language/id-ID.ts +832 -832
  316. package/packages/language/it-IT.ts +832 -832
  317. package/packages/language/ja-JP.ts +832 -832
  318. package/packages/language/ko-KR.ts +832 -832
  319. package/packages/language/ms-MY.ts +832 -832
  320. package/packages/language/nb-NO.ts +832 -832
  321. package/packages/language/pt-BR.ts +832 -832
  322. package/packages/language/ru-RU.ts +832 -832
  323. package/packages/language/th-TH.ts +832 -832
  324. package/packages/language/ug-CN.ts +832 -832
  325. package/packages/language/uk-UA.ts +832 -832
  326. package/packages/language/uz-UZ.ts +832 -832
  327. package/packages/language/vi-VN.ts +832 -832
  328. package/packages/language/zh-CHT.ts +832 -832
  329. package/packages/language/zh-CN.ts +832 -832
  330. package/packages/language/zh-HK.ts +3 -3
  331. package/packages/language/zh-MO.ts +3 -3
  332. package/packages/language/zh-TC.ts +3 -3
  333. package/packages/language/zh-TW.ts +3 -3
  334. package/packages/layout-aside/index.ts +16 -16
  335. package/packages/layout-aside/src/layout-aside.ts +115 -115
  336. package/packages/layout-body/index.ts +16 -16
  337. package/packages/layout-body/src/layout-body.ts +137 -137
  338. package/packages/layout-container/index.ts +16 -16
  339. package/packages/layout-container/src/layout-container.ts +65 -65
  340. package/packages/layout-footer/index.ts +16 -16
  341. package/packages/layout-footer/src/layout-footer.ts +53 -53
  342. package/packages/layout-header/index.ts +16 -16
  343. package/packages/layout-header/src/layout-header.ts +49 -49
  344. package/packages/link/index.ts +16 -16
  345. package/packages/link/src/link.ts +153 -153
  346. package/packages/list/index.ts +16 -16
  347. package/packages/list/src/list.ts +492 -492
  348. package/packages/loading/index.ts +34 -34
  349. package/packages/loading/src/loading.ts +162 -162
  350. package/packages/mention/index.ts +16 -16
  351. package/packages/mention/src/mention.ts +54 -54
  352. package/packages/menu/index.ts +16 -16
  353. package/packages/menu/src/menu.ts +632 -632
  354. package/packages/modal/index.ts +150 -150
  355. package/packages/modal/src/modal.ts +1657 -1657
  356. package/packages/notice-bar/index.ts +16 -16
  357. package/packages/notice-bar/src/notice-bar.ts +182 -182
  358. package/packages/number-input/index.ts +16 -16
  359. package/packages/number-input/src/number-input.ts +1255 -1255
  360. package/packages/number-input/src/util.ts +12 -12
  361. package/packages/optgroup/index.ts +16 -16
  362. package/packages/option/index.ts +16 -16
  363. package/packages/pager/index.ts +16 -16
  364. package/packages/pager/src/pager.ts +913 -913
  365. package/packages/password-input/index.ts +16 -16
  366. package/packages/password-input/src/password-input.ts +466 -466
  367. package/packages/print/index.ts +18 -18
  368. package/packages/print/src/page-break.ts +78 -78
  369. package/packages/print/src/print.ts +266 -266
  370. package/packages/print/src/util.ts +284 -284
  371. package/packages/print-page-break/index.ts +14 -14
  372. package/packages/pulldown/index.ts +16 -16
  373. package/packages/pulldown/src/pulldown.ts +532 -532
  374. package/packages/radio/index.ts +16 -16
  375. package/packages/radio/src/button.ts +221 -221
  376. package/packages/radio/src/group.ts +252 -252
  377. package/packages/radio/src/radio.ts +228 -228
  378. package/packages/radio-button/index.ts +16 -16
  379. package/packages/radio-group/index.ts +16 -16
  380. package/packages/rate/index.ts +16 -16
  381. package/packages/rate/src/rate.ts +199 -199
  382. package/packages/result/index.ts +16 -16
  383. package/packages/result/src/result.ts +93 -93
  384. package/packages/row/index.ts +16 -16
  385. package/packages/row/src/col.ts +130 -130
  386. package/packages/row/src/row.ts +106 -106
  387. package/packages/segmented/index.ts +16 -16
  388. package/packages/segmented/src/segmented.ts +281 -281
  389. package/packages/select/index.ts +16 -16
  390. package/packages/select/src/optgroup.ts +107 -107
  391. package/packages/select/src/option-info.ts +20 -20
  392. package/packages/select/src/option.ts +103 -103
  393. package/packages/select/src/select.ts +2000 -2000
  394. package/packages/select/src/util.ts +47 -47
  395. package/packages/slider/index.ts +16 -16
  396. package/packages/slider/src/slider.ts +332 -332
  397. package/packages/split/index.ts +16 -16
  398. package/packages/split-pane/index.ts +17 -17
  399. package/packages/splitter/index.ts +16 -16
  400. package/packages/splitter/src/splitter-panel.ts +171 -171
  401. package/packages/splitter/src/splitter.ts +1032 -1032
  402. package/packages/splitter/src/util.ts +21 -21
  403. package/packages/splitter-panel/index.ts +16 -16
  404. package/packages/steps/index.ts +16 -16
  405. package/packages/steps/src/steps.ts +57 -57
  406. package/packages/switch/index.ts +16 -16
  407. package/packages/switch/src/switch.ts +279 -279
  408. package/packages/tab-pane/index.ts +16 -16
  409. package/packages/table-select/index.ts +16 -16
  410. package/packages/table-select/src/table-select.ts +903 -903
  411. package/packages/tabs/index.ts +16 -16
  412. package/packages/tabs/src/tab-pane.ts +137 -137
  413. package/packages/tabs/src/tabs.ts +1014 -1014
  414. package/packages/tabs/src/util.ts +21 -21
  415. package/packages/tag/index.ts +16 -16
  416. package/packages/tag/src/tag.ts +195 -195
  417. package/packages/text/index.ts +16 -16
  418. package/packages/text/src/text.ts +267 -267
  419. package/packages/text-ellipsis/index.ts +16 -16
  420. package/packages/text-ellipsis/src/text-ellipsis.ts +291 -291
  421. package/packages/textarea/index.ts +16 -16
  422. package/packages/textarea/src/textarea.ts +436 -436
  423. package/packages/timeline/index.ts +16 -16
  424. package/packages/timeline/src/timeline-item.ts +41 -41
  425. package/packages/timeline/src/timeline.ts +54 -54
  426. package/packages/timeline-item/index.ts +16 -16
  427. package/packages/tip/index.ts +19 -19
  428. package/packages/tip/src/tip.ts +112 -112
  429. package/packages/tooltip/index.ts +16 -16
  430. package/packages/tooltip/src/tooltip.ts +641 -641
  431. package/packages/tour/index.ts +16 -16
  432. package/packages/tour/src/tour.ts +54 -54
  433. package/packages/tree/index.ts +16 -16
  434. package/packages/tree/src/store.ts +15 -15
  435. package/packages/tree/src/tree.ts +3080 -3080
  436. package/packages/tree/src/util.ts +44 -44
  437. package/packages/tree-select/index.ts +16 -16
  438. package/packages/tree-select/src/tree-select.ts +1115 -1115
  439. package/packages/ui/index.ts +695 -695
  440. package/packages/ui/src/anime.ts +52 -52
  441. package/packages/ui/src/comp.ts +3 -3
  442. package/packages/ui/src/dom.ts +263 -263
  443. package/packages/ui/src/log.ts +6 -6
  444. package/packages/ui/src/utils.ts +49 -49
  445. package/packages/ui/src/vn.ts +60 -60
  446. package/packages/upload/index.ts +20 -20
  447. package/packages/upload/src/upload.ts +2127 -2127
  448. package/packages/upload/src/util.ts +109 -109
  449. package/packages/vxe-u-i/index.ts +4 -4
  450. package/packages/watermark/index.ts +31 -31
  451. package/packages/watermark/src/util.ts +176 -176
  452. package/packages/watermark/src/watermark.ts +166 -166
  453. package/styles/all.scss +90 -90
  454. package/styles/base.scss +16 -16
  455. package/styles/components/alert.scss +101 -101
  456. package/styles/components/anchor.scss +44 -44
  457. package/styles/components/avatar.scss +115 -115
  458. package/styles/components/backtop.scss +82 -82
  459. package/styles/components/badge.scss +45 -45
  460. package/styles/components/breadcrumb.scss +29 -29
  461. package/styles/components/button-group.scss +30 -30
  462. package/styles/components/button.scss +415 -415
  463. package/styles/components/calendar.scss +471 -471
  464. package/styles/components/card.scss +121 -121
  465. package/styles/components/carousel.scss +184 -184
  466. package/styles/components/cascader.scss +140 -140
  467. package/styles/components/checkbox-button.scss +57 -57
  468. package/styles/components/checkbox.scss +81 -81
  469. package/styles/components/collapse.scss +56 -56
  470. package/styles/components/color-picker.scss +409 -409
  471. package/styles/components/context-menu.scss +102 -102
  472. package/styles/components/countdown.scss +35 -35
  473. package/styles/components/date-panel.scss +505 -505
  474. package/styles/components/date-picker.scss +247 -247
  475. package/styles/components/date-range-picker.scss +252 -252
  476. package/styles/components/drawer.scss +298 -298
  477. package/styles/components/empty.scss +79 -79
  478. package/styles/components/form.scss +668 -668
  479. package/styles/components/icon-picker.scss +211 -211
  480. package/styles/components/icon.scss +1044 -1044
  481. package/styles/components/image-group.scss +2 -2
  482. package/styles/components/image-preview.scss +215 -215
  483. package/styles/components/image.scss +16 -16
  484. package/styles/components/input.scss +846 -846
  485. package/styles/components/layout-aside.scss +22 -22
  486. package/styles/components/layout-body.scss +14 -14
  487. package/styles/components/layout-container.scss +13 -13
  488. package/styles/components/layout-footer.scss +14 -14
  489. package/styles/components/layout-header.scss +11 -11
  490. package/styles/components/link.scss +115 -115
  491. package/styles/components/list.scss +40 -40
  492. package/styles/components/loading.scss +137 -137
  493. package/styles/components/menu.scss +150 -150
  494. package/styles/components/modal.scss +480 -480
  495. package/styles/components/notice-bar.scss +91 -91
  496. package/styles/components/number-input.scss +283 -283
  497. package/styles/components/old-icon.scss +4 -4
  498. package/styles/components/pager.scss +282 -282
  499. package/styles/components/password-input.scss +374 -374
  500. package/styles/components/print.scss +3 -3
  501. package/styles/components/pulldown.scss +75 -75
  502. package/styles/components/radio-button.scss +57 -57
  503. package/styles/components/radio.scss +79 -79
  504. package/styles/components/rate.scss +76 -76
  505. package/styles/components/result.scss +91 -91
  506. package/styles/components/row.scss +69 -69
  507. package/styles/components/segmented.scss +215 -215
  508. package/styles/components/select.scss +244 -244
  509. package/styles/components/slider.scss +139 -139
  510. package/styles/components/split.scss +1 -1
  511. package/styles/components/splitter.scss +318 -318
  512. package/styles/components/switch.scss +128 -128
  513. package/styles/components/table-select.scss +105 -105
  514. package/styles/components/tabs.scss +745 -745
  515. package/styles/components/tag.scss +184 -184
  516. package/styles/components/text-ellipsis.scss +130 -130
  517. package/styles/components/text.scss +123 -123
  518. package/styles/components/textarea.scss +106 -106
  519. package/styles/components/tip.scss +97 -97
  520. package/styles/components/tooltip.scss +140 -140
  521. package/styles/components/tree-select.scss +166 -166
  522. package/styles/components/tree.scss +294 -294
  523. package/styles/components/upload.scss +497 -497
  524. package/styles/components/watermark.scss +26 -26
  525. package/styles/helpers/baseMixin.scss +95 -95
  526. package/styles/helpers/baseVar.scss +3 -3
  527. package/styles/helpers/placement.scss +38 -38
  528. package/styles/theme/base.scss +214 -214
  529. package/styles/theme/dark.scss +119 -119
  530. package/styles/theme/light.scss +118 -118
  531. package/styles/variable.scss +111 -111
  532. package/types/all.d.ts +328 -328
  533. package/types/components/alert.d.ts +80 -80
  534. package/types/components/anchor-link.d.ts +84 -84
  535. package/types/components/anchor.d.ts +84 -84
  536. package/types/components/avatar.d.ts +81 -81
  537. package/types/components/backtop.d.ts +115 -115
  538. package/types/components/badge.d.ts +69 -69
  539. package/types/components/breadcrumb-item.d.ts +73 -73
  540. package/types/components/breadcrumb.d.ts +80 -80
  541. package/types/components/button-group.d.ts +113 -113
  542. package/types/components/button.d.ts +314 -314
  543. package/types/components/calendar.d.ts +254 -254
  544. package/types/components/card.d.ts +86 -86
  545. package/types/components/carousel-item.d.ts +68 -68
  546. package/types/components/carousel.d.ts +126 -126
  547. package/types/components/cascader.d.ts +242 -242
  548. package/types/components/checkbox-button.d.ts +93 -93
  549. package/types/components/checkbox-group.d.ts +135 -135
  550. package/types/components/checkbox.d.ts +115 -115
  551. package/types/components/col.d.ts +73 -73
  552. package/types/components/colgroup.d.ts +131 -131
  553. package/types/components/collapse-pane.d.ts +82 -82
  554. package/types/components/collapse.d.ts +115 -115
  555. package/types/components/color-picker.d.ts +127 -127
  556. package/types/components/column.d.ts +852 -852
  557. package/types/components/context-menu.d.ts +300 -300
  558. package/types/components/countdown.d.ts +99 -99
  559. package/types/components/date-panel.d.ts +269 -269
  560. package/types/components/date-picker.d.ts +302 -302
  561. package/types/components/date-range-picker.d.ts +316 -316
  562. package/types/components/drawer.d.ts +295 -295
  563. package/types/components/empty.d.ts +71 -71
  564. package/types/components/flow-design.d.ts +78 -78
  565. package/types/components/flow-view.d.ts +78 -78
  566. package/types/components/form-design.d.ts +364 -364
  567. package/types/components/form-gather.d.ts +72 -72
  568. package/types/components/form-group.d.ts +63 -63
  569. package/types/components/form-item.d.ts +405 -405
  570. package/types/components/form-view.d.ts +175 -175
  571. package/types/components/form.d.ts +463 -463
  572. package/types/components/gantt-module/gantt-view.d.ts +170 -170
  573. package/types/components/gantt-module/index.d.ts +1 -1
  574. package/types/components/gantt-plugins/extend-gantt-chart.d.ts +114 -114
  575. package/types/components/gantt-plugins/index.d.ts +1 -1
  576. package/types/components/gantt.d.ts +1129 -1129
  577. package/types/components/grid.d.ts +1030 -1030
  578. package/types/components/icon-picker.d.ts +181 -181
  579. package/types/components/icon.d.ts +80 -80
  580. package/types/components/image-group.d.ts +120 -120
  581. package/types/components/image-preview.d.ts +159 -159
  582. package/types/components/image.d.ts +158 -158
  583. package/types/components/input.d.ts +425 -425
  584. package/types/components/layout-aside.d.ts +73 -73
  585. package/types/components/layout-body.d.ts +84 -84
  586. package/types/components/layout-container.d.ts +66 -66
  587. package/types/components/layout-footer.d.ts +66 -66
  588. package/types/components/layout-header.d.ts +64 -64
  589. package/types/components/link.d.ts +104 -104
  590. package/types/components/list-design.d.ts +177 -177
  591. package/types/components/list-view.d.ts +190 -190
  592. package/types/components/list.d.ts +196 -196
  593. package/types/components/loading.d.ts +96 -96
  594. package/types/components/mention.d.ts +70 -70
  595. package/types/components/menu.d.ts +203 -203
  596. package/types/components/modal.d.ts +540 -540
  597. package/types/components/notice-bar.d.ts +95 -95
  598. package/types/components/number-input.d.ts +300 -300
  599. package/types/components/optgroup.d.ts +81 -81
  600. package/types/components/option.d.ts +95 -95
  601. package/types/components/pager.d.ts +322 -322
  602. package/types/components/password-input.d.ts +129 -129
  603. package/types/components/print-page-break.d.ts +62 -62
  604. package/types/components/print.d.ts +199 -199
  605. package/types/components/pulldown.d.ts +222 -222
  606. package/types/components/radio-button.d.ts +104 -104
  607. package/types/components/radio-group.d.ts +136 -136
  608. package/types/components/radio.d.ts +121 -121
  609. package/types/components/rate.d.ts +75 -75
  610. package/types/components/result.d.ts +77 -77
  611. package/types/components/row.d.ts +72 -72
  612. package/types/components/segmented.d.ts +117 -117
  613. package/types/components/select.d.ts +515 -515
  614. package/types/components/slider.d.ts +117 -117
  615. package/types/components/split-pane.d.ts +135 -135
  616. package/types/components/split.d.ts +318 -318
  617. package/types/components/splitter-panel.d.ts +98 -98
  618. package/types/components/splitter.d.ts +283 -283
  619. package/types/components/steps.d.ts +61 -61
  620. package/types/components/switch.d.ts +124 -124
  621. package/types/components/tab-pane.d.ts +107 -107
  622. package/types/components/table-module/custom.d.ts +111 -111
  623. package/types/components/table-module/edit.d.ts +244 -244
  624. package/types/components/table-module/export.d.ts +96 -96
  625. package/types/components/table-module/filter.d.ts +140 -140
  626. package/types/components/table-module/index.d.ts +7 -7
  627. package/types/components/table-module/keyboard.d.ts +26 -26
  628. package/types/components/table-module/menu.d.ts +26 -26
  629. package/types/components/table-module/validator.d.ts +53 -53
  630. package/types/components/table-plugins/extend-cell-area.d.ts +734 -734
  631. package/types/components/table-plugins/extend-pivot-table.d.ts +62 -62
  632. package/types/components/table-plugins/filters-combination.d.ts +15 -15
  633. package/types/components/table-plugins/filters-complex-input.d.ts +9 -9
  634. package/types/components/table-plugins/index.d.ts +4 -4
  635. package/types/components/table-select.d.ts +212 -212
  636. package/types/components/table.d.ts +7222 -7206
  637. package/types/components/tabs.d.ts +324 -324
  638. package/types/components/tag.d.ts +107 -107
  639. package/types/components/text-ellipsis.d.ts +105 -105
  640. package/types/components/text.d.ts +115 -115
  641. package/types/components/textarea.d.ts +237 -237
  642. package/types/components/timeline-item.d.ts +68 -68
  643. package/types/components/timeline.d.ts +70 -70
  644. package/types/components/tip.d.ts +76 -76
  645. package/types/components/toolbar.d.ts +329 -329
  646. package/types/components/tooltip.d.ts +165 -165
  647. package/types/components/tour.d.ts +70 -70
  648. package/types/components/tree-select.d.ts +295 -295
  649. package/types/components/tree.d.ts +826 -826
  650. package/types/components/upload.d.ts +432 -432
  651. package/types/components/watermark.d.ts +113 -113
  652. package/types/index.d.ts +4 -4
  653. package/types/ui/commands.d.ts +57 -57
  654. package/types/ui/formats.d.ts +62 -62
  655. package/types/ui/global-config.d.ts +254 -254
  656. package/types/ui/global-icon.d.ts +292 -292
  657. package/types/ui/hooks.d.ts +11 -11
  658. package/types/ui/index.d.ts +95 -95
  659. package/types/ui/interceptor.d.ts +54 -54
  660. package/types/ui/menus.d.ts +77 -77
  661. package/types/ui/renderer.d.ts +1042 -1042
  662. package/types/ui/validators.d.ts +38 -38
  663. /package/es/icon/{iconfont.1773972997530.ttf → iconfont.1774240783948.ttf} +0 -0
  664. /package/es/icon/{iconfont.1773972997530.woff → iconfont.1774240783948.woff} +0 -0
  665. /package/es/icon/{iconfont.1773972997530.woff2 → iconfont.1774240783948.woff2} +0 -0
  666. /package/es/{iconfont.1773972997530.ttf → iconfont.1774240783948.ttf} +0 -0
  667. /package/es/{iconfont.1773972997530.woff → iconfont.1774240783948.woff} +0 -0
  668. /package/es/{iconfont.1773972997530.woff2 → iconfont.1774240783948.woff2} +0 -0
  669. /package/lib/icon/style/{iconfont.1773972997530.ttf → iconfont.1774240783948.ttf} +0 -0
  670. /package/lib/icon/style/{iconfont.1773972997530.woff → iconfont.1774240783948.woff} +0 -0
  671. /package/lib/icon/style/{iconfont.1773972997530.woff2 → iconfont.1774240783948.woff2} +0 -0
  672. /package/lib/{iconfont.1773972997530.ttf → iconfont.1774240783948.ttf} +0 -0
  673. /package/lib/{iconfont.1773972997530.woff → iconfont.1774240783948.woff} +0 -0
  674. /package/lib/{iconfont.1773972997530.woff2 → iconfont.1774240783948.woff2} +0 -0
@@ -1,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 */