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