vxe-pc-ui 3.0.1 → 3.0.2

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