vxe-pc-ui 4.5.36 → 4.6.1

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 (318) hide show
  1. package/README.md +1 -0
  2. package/es/calendar/src/calendar.js +1 -1
  3. package/es/components.js +6 -0
  4. package/es/date-panel/index.js +12 -0
  5. package/es/date-panel/src/date-panel.js +1587 -0
  6. package/es/date-panel/src/util.js +191 -0
  7. package/es/date-panel/style.css +443 -0
  8. package/es/date-panel/style.min.css +1 -0
  9. package/es/date-picker/index.js +0 -1
  10. package/es/date-picker/src/date-picker.js +274 -1663
  11. package/es/date-picker/style.css +68 -810
  12. package/es/date-picker/style.min.css +1 -1
  13. package/es/date-range-picker/index.js +12 -0
  14. package/es/date-range-picker/src/date-range-picker.js +1121 -0
  15. package/es/date-range-picker/style.css +284 -0
  16. package/es/date-range-picker/style.min.css +1 -0
  17. package/es/form/render/index.js +69 -23
  18. package/es/form/style.css +3 -0
  19. package/es/form/style.min.css +1 -1
  20. package/es/icon/style.css +1 -1
  21. package/es/input/src/input.js +1 -1
  22. package/es/language/ar-EG.js +4 -1
  23. package/es/language/de-DE.js +4 -1
  24. package/es/language/en-US.js +4 -1
  25. package/es/language/es-ES.js +4 -1
  26. package/es/language/fr-FR.d.ts +2 -0
  27. package/es/language/fr-FR.js +4 -1
  28. package/es/language/hu-HU.js +4 -1
  29. package/es/language/hy-AM.d.ts +2 -0
  30. package/es/language/hy-AM.js +4 -1
  31. package/es/language/id-ID.d.ts +2 -0
  32. package/es/language/id-ID.js +4 -1
  33. package/es/language/it-IT.d.ts +2 -0
  34. package/es/language/it-IT.js +4 -1
  35. package/es/language/ja-JP.js +4 -1
  36. package/es/language/ko-KR.js +4 -1
  37. package/es/language/ms-MY.d.ts +2 -0
  38. package/es/language/ms-MY.js +711 -0
  39. package/es/language/nb-NO.d.ts +2 -0
  40. package/es/language/nb-NO.js +4 -1
  41. package/es/language/pt-BR.js +4 -1
  42. package/es/language/ru-RU.js +4 -1
  43. package/es/language/th-TH.d.ts +2 -0
  44. package/es/language/th-TH.js +4 -1
  45. package/es/language/ug-CN.d.ts +2 -0
  46. package/es/language/ug-CN.js +4 -1
  47. package/es/language/uk-UA.js +4 -1
  48. package/es/language/uz-UZ.d.ts +2 -0
  49. package/es/language/uz-UZ.js +711 -0
  50. package/es/language/vi-VN.d.ts +2 -0
  51. package/es/language/vi-VN.js +4 -1
  52. package/es/language/zh-CHT.d.ts +2 -0
  53. package/es/language/zh-CHT.js +4 -1
  54. package/es/language/zh-CN.js +4 -1
  55. package/es/print/src/print.js +4 -0
  56. package/es/print/src/util.js +46 -3
  57. package/es/pulldown/style.css +15 -0
  58. package/es/pulldown/style.min.css +1 -1
  59. package/es/select/style.css +15 -0
  60. package/es/select/style.min.css +1 -1
  61. package/es/style.css +1 -1
  62. package/es/style.min.css +1 -1
  63. package/es/table-select/style.css +15 -0
  64. package/es/table-select/style.min.css +1 -1
  65. package/es/tree-select/style.css +15 -0
  66. package/es/tree-select/style.min.css +1 -1
  67. package/es/ui/index.js +31 -6
  68. package/es/ui/src/log.js +1 -1
  69. package/es/vxe-date-panel/index.js +3 -0
  70. package/es/vxe-date-panel/style.css +443 -0
  71. package/es/vxe-date-panel/style.min.css +1 -0
  72. package/es/vxe-date-picker/style.css +68 -810
  73. package/es/vxe-date-picker/style.min.css +1 -1
  74. package/es/vxe-date-range-picker/index.js +3 -0
  75. package/es/vxe-date-range-picker/style.css +284 -0
  76. package/es/vxe-date-range-picker/style.min.css +1 -0
  77. package/es/vxe-form/style.css +3 -0
  78. package/es/vxe-form/style.min.css +1 -1
  79. package/es/vxe-pulldown/style.css +15 -0
  80. package/es/vxe-pulldown/style.min.css +1 -1
  81. package/es/vxe-select/style.css +15 -0
  82. package/es/vxe-select/style.min.css +1 -1
  83. package/es/vxe-table-select/style.css +15 -0
  84. package/es/vxe-table-select/style.min.css +1 -1
  85. package/es/vxe-tree-select/style.css +15 -0
  86. package/es/vxe-tree-select/style.min.css +1 -1
  87. package/lib/calendar/src/calendar.js +1 -1
  88. package/lib/calendar/src/calendar.min.js +1 -1
  89. package/lib/components.js +25 -1
  90. package/lib/components.min.js +1 -1
  91. package/lib/date-panel/index.js +19 -0
  92. package/lib/date-panel/index.min.js +1 -0
  93. package/lib/date-panel/src/date-panel.js +1667 -0
  94. package/lib/date-panel/src/date-panel.min.js +1 -0
  95. package/lib/date-panel/src/util.js +219 -0
  96. package/lib/date-panel/src/util.min.js +1 -0
  97. package/lib/date-panel/style/index.js +1 -0
  98. package/lib/date-panel/style/style.css +443 -0
  99. package/lib/date-panel/style/style.min.css +1 -0
  100. package/lib/date-picker/index.js +0 -1
  101. package/lib/date-picker/index.min.js +1 -1
  102. package/lib/date-picker/src/date-picker.js +288 -1717
  103. package/lib/date-picker/src/date-picker.min.js +1 -1
  104. package/lib/date-picker/style/style.css +68 -810
  105. package/lib/date-picker/style/style.min.css +1 -1
  106. package/lib/date-range-picker/index.js +19 -0
  107. package/lib/date-range-picker/index.min.js +1 -0
  108. package/lib/date-range-picker/src/date-range-picker.js +1194 -0
  109. package/lib/date-range-picker/src/date-range-picker.min.js +1 -0
  110. package/lib/date-range-picker/style/index.js +1 -0
  111. package/lib/date-range-picker/style/style.css +284 -0
  112. package/lib/date-range-picker/style/style.min.css +1 -0
  113. package/lib/form/render/index.js +77 -23
  114. package/lib/form/render/index.min.js +1 -1
  115. package/lib/form/style/style.css +3 -0
  116. package/lib/form/style/style.min.css +1 -1
  117. package/lib/icon/style/style.css +1 -1
  118. package/lib/icon/style/style.min.css +1 -1
  119. package/lib/index.umd.js +3016 -1260
  120. package/lib/index.umd.min.js +1 -1
  121. package/lib/input/src/input.js +1 -1
  122. package/lib/input/src/input.min.js +1 -1
  123. package/lib/language/ar-EG.d.ts +2 -0
  124. package/lib/language/ar-EG.js +4 -1
  125. package/lib/language/ar-EG.min.js +1 -1
  126. package/lib/language/ar-EG.umd.js +731 -0
  127. package/lib/language/de-DE.d.ts +2 -0
  128. package/lib/language/de-DE.js +4 -1
  129. package/lib/language/de-DE.min.js +1 -1
  130. package/lib/language/de-DE.umd.js +731 -0
  131. package/lib/language/en-US.js +4 -1
  132. package/lib/language/en-US.min.js +1 -1
  133. package/lib/language/en-US.umd.js +4 -1
  134. package/lib/language/es-ES.js +4 -1
  135. package/lib/language/es-ES.min.js +1 -1
  136. package/lib/language/es-ES.umd.js +4 -1
  137. package/lib/language/fr-FR.d.ts +2 -0
  138. package/lib/language/fr-FR.js +4 -1
  139. package/lib/language/fr-FR.min.js +1 -1
  140. package/lib/language/fr-FR.umd.js +731 -0
  141. package/lib/language/hu-HU.js +4 -1
  142. package/lib/language/hu-HU.min.js +1 -1
  143. package/lib/language/hu-HU.umd.js +4 -1
  144. package/lib/language/hy-AM.d.ts +2 -0
  145. package/lib/language/hy-AM.js +4 -1
  146. package/lib/language/hy-AM.min.js +1 -1
  147. package/lib/language/hy-AM.umd.js +731 -0
  148. package/lib/language/id-ID.d.ts +2 -0
  149. package/lib/language/id-ID.js +4 -1
  150. package/lib/language/id-ID.min.js +1 -1
  151. package/lib/language/id-ID.umd.js +731 -0
  152. package/lib/language/it-IT.d.ts +2 -0
  153. package/lib/language/it-IT.js +4 -1
  154. package/lib/language/it-IT.min.js +1 -1
  155. package/lib/language/it-IT.umd.js +731 -0
  156. package/lib/language/ja-JP.js +4 -1
  157. package/lib/language/ja-JP.min.js +1 -1
  158. package/lib/language/ja-JP.umd.js +4 -1
  159. package/lib/language/ko-KR.js +4 -1
  160. package/lib/language/ko-KR.min.js +1 -1
  161. package/lib/language/ko-KR.umd.js +4 -1
  162. package/lib/language/ms-MY.d.ts +2 -0
  163. package/lib/language/ms-MY.js +717 -0
  164. package/lib/language/ms-MY.min.js +1 -0
  165. package/lib/language/ms-MY.umd.js +731 -0
  166. package/lib/language/nb-NO.d.ts +2 -0
  167. package/lib/language/nb-NO.js +4 -1
  168. package/lib/language/nb-NO.min.js +1 -1
  169. package/lib/language/nb-NO.umd.js +731 -0
  170. package/lib/language/pt-BR.js +4 -1
  171. package/lib/language/pt-BR.min.js +1 -1
  172. package/lib/language/pt-BR.umd.js +4 -1
  173. package/lib/language/ru-RU.js +4 -1
  174. package/lib/language/ru-RU.min.js +1 -1
  175. package/lib/language/ru-RU.umd.js +4 -1
  176. package/lib/language/th-TH.d.ts +2 -0
  177. package/lib/language/th-TH.js +4 -1
  178. package/lib/language/th-TH.min.js +1 -1
  179. package/lib/language/th-TH.umd.js +731 -0
  180. package/lib/language/ug-CN.d.ts +2 -0
  181. package/lib/language/ug-CN.js +4 -1
  182. package/lib/language/ug-CN.min.js +1 -1
  183. package/lib/language/ug-CN.umd.js +731 -0
  184. package/lib/language/uk-UA.js +4 -1
  185. package/lib/language/uk-UA.min.js +1 -1
  186. package/lib/language/uk-UA.umd.js +4 -1
  187. package/lib/language/uz-UZ.d.ts +2 -0
  188. package/lib/language/uz-UZ.js +717 -0
  189. package/lib/language/uz-UZ.min.js +1 -0
  190. package/lib/language/uz-UZ.umd.js +731 -0
  191. package/lib/language/vi-VN.d.ts +2 -0
  192. package/lib/language/vi-VN.js +4 -1
  193. package/lib/language/vi-VN.min.js +1 -1
  194. package/lib/language/vi-VN.umd.js +731 -0
  195. package/lib/language/zh-CHT.d.ts +2 -0
  196. package/lib/language/zh-CHT.js +4 -1
  197. package/lib/language/zh-CHT.min.js +1 -1
  198. package/lib/language/zh-CHT.umd.js +731 -0
  199. package/lib/language/zh-CN.js +4 -1
  200. package/lib/language/zh-CN.min.js +1 -1
  201. package/lib/language/zh-CN.umd.js +4 -1
  202. package/lib/language/zh-TC.min.js +1 -1
  203. package/lib/print/src/print.js +4 -0
  204. package/lib/print/src/print.min.js +1 -1
  205. package/lib/print/src/util.js +45 -2
  206. package/lib/print/src/util.min.js +1 -1
  207. package/lib/pulldown/style/style.css +15 -0
  208. package/lib/pulldown/style/style.min.css +1 -1
  209. package/lib/select/style/style.css +15 -0
  210. package/lib/select/style/style.min.css +1 -1
  211. package/lib/style.css +1 -1
  212. package/lib/style.min.css +1 -1
  213. package/lib/table-select/style/style.css +15 -0
  214. package/lib/table-select/style/style.min.css +1 -1
  215. package/lib/tree-select/style/style.css +15 -0
  216. package/lib/tree-select/style/style.min.css +1 -1
  217. package/lib/ui/index.js +31 -6
  218. package/lib/ui/index.min.js +1 -1
  219. package/lib/ui/src/log.js +1 -1
  220. package/lib/ui/src/log.min.js +1 -1
  221. package/lib/vxe-date-panel/index.js +22 -0
  222. package/lib/vxe-date-panel/index.min.js +1 -0
  223. package/lib/vxe-date-panel/style/index.js +1 -0
  224. package/lib/vxe-date-panel/style/style.css +443 -0
  225. package/lib/vxe-date-panel/style/style.min.css +1 -0
  226. package/lib/vxe-date-picker/style/style.css +68 -810
  227. package/lib/vxe-date-picker/style/style.min.css +1 -1
  228. package/lib/vxe-date-range-picker/index.js +22 -0
  229. package/lib/vxe-date-range-picker/index.min.js +1 -0
  230. package/lib/vxe-date-range-picker/style/index.js +1 -0
  231. package/lib/vxe-date-range-picker/style/style.css +284 -0
  232. package/lib/vxe-date-range-picker/style/style.min.css +1 -0
  233. package/lib/vxe-form/style/style.css +3 -0
  234. package/lib/vxe-form/style/style.min.css +1 -1
  235. package/lib/vxe-pulldown/style/style.css +15 -0
  236. package/lib/vxe-pulldown/style/style.min.css +1 -1
  237. package/lib/vxe-select/style/style.css +15 -0
  238. package/lib/vxe-select/style/style.min.css +1 -1
  239. package/lib/vxe-table-select/style/style.css +15 -0
  240. package/lib/vxe-table-select/style/style.min.css +1 -1
  241. package/lib/vxe-tree-select/style/style.css +15 -0
  242. package/lib/vxe-tree-select/style/style.min.css +1 -1
  243. package/package.json +4 -5
  244. package/packages/calendar/src/calendar.ts +10 -10
  245. package/packages/components.ts +6 -0
  246. package/packages/date-panel/index.ts +16 -0
  247. package/packages/date-panel/src/date-panel.ts +1654 -0
  248. package/packages/date-panel/src/util.ts +212 -0
  249. package/packages/date-picker/index.ts +0 -1
  250. package/packages/date-picker/src/date-picker.ts +298 -1697
  251. package/packages/date-range-picker/index.ts +16 -0
  252. package/packages/date-range-picker/src/date-range-picker.ts +1196 -0
  253. package/packages/form/render/index.ts +76 -22
  254. package/packages/input/src/input.ts +15 -15
  255. package/packages/language/ar-EG.ts +4 -1
  256. package/packages/language/de-DE.ts +4 -1
  257. package/packages/language/en-US.ts +4 -1
  258. package/packages/language/es-ES.ts +4 -1
  259. package/packages/language/fr-FR.ts +4 -1
  260. package/packages/language/hu-HU.ts +4 -1
  261. package/packages/language/hy-AM.ts +4 -1
  262. package/packages/language/id-ID.ts +4 -1
  263. package/packages/language/it-IT.ts +4 -1
  264. package/packages/language/ja-JP.ts +4 -1
  265. package/packages/language/ko-KR.ts +4 -1
  266. package/packages/language/ms-MY.ts +711 -0
  267. package/packages/language/nb-NO.ts +4 -1
  268. package/packages/language/pt-BR.ts +4 -1
  269. package/packages/language/ru-RU.ts +4 -1
  270. package/packages/language/th-TH.ts +4 -1
  271. package/packages/language/ug-CN.ts +4 -1
  272. package/packages/language/uk-UA.ts +4 -1
  273. package/packages/language/uz-UZ.ts +711 -0
  274. package/packages/language/vi-VN.ts +4 -1
  275. package/packages/language/zh-CHT.ts +4 -1
  276. package/packages/language/zh-CN.ts +4 -1
  277. package/packages/print/src/print.ts +4 -0
  278. package/packages/print/src/util.ts +47 -4
  279. package/packages/ui/index.ts +30 -5
  280. package/styles/all.scss +2 -0
  281. package/styles/components/date-panel.scss +491 -0
  282. package/styles/components/date-picker.scss +62 -652
  283. package/styles/components/date-range-picker.scss +284 -0
  284. package/styles/components/form.scss +3 -0
  285. package/styles/components/pulldown.scss +10 -0
  286. package/styles/components/select.scss +8 -0
  287. package/styles/components/table-select.scss +8 -0
  288. package/styles/components/tree-select.scss +8 -0
  289. package/styles/helpers/baseMixin.scss +13 -0
  290. package/types/all.d.ts +6 -0
  291. package/types/components/button-group.d.ts +1 -1
  292. package/types/components/column.d.ts +9 -0
  293. package/types/components/date-panel.d.ts +240 -0
  294. package/types/components/date-picker.d.ts +35 -142
  295. package/types/components/date-range-picker.d.ts +267 -0
  296. package/types/components/form-item.d.ts +4 -0
  297. package/types/components/print.d.ts +8 -0
  298. package/types/ui/commands.d.ts +28 -2
  299. package/types/ui/global-config.d.ts +4 -0
  300. package/es/date-picker/src/util.js +0 -41
  301. package/lib/date-picker/src/util.js +0 -46
  302. package/lib/date-picker/src/util.min.js +0 -1
  303. package/lib/language/zh-TC.umd.js +0 -23
  304. package/packages/date-picker/src/util.ts +0 -42
  305. /package/es/icon/{iconfont.1746417522210.ttf → iconfont.1746801282055.ttf} +0 -0
  306. /package/es/icon/{iconfont.1746417522210.woff → iconfont.1746801282055.woff} +0 -0
  307. /package/es/icon/{iconfont.1746417522210.woff2 → iconfont.1746801282055.woff2} +0 -0
  308. /package/es/{iconfont.1746417522210.ttf → iconfont.1746801282055.ttf} +0 -0
  309. /package/es/{iconfont.1746417522210.woff → iconfont.1746801282055.woff} +0 -0
  310. /package/es/{iconfont.1746417522210.woff2 → iconfont.1746801282055.woff2} +0 -0
  311. /package/es/language/{zh-TC.d.ts → ar-EG.d.ts} +0 -0
  312. /package/{lib/language/zh-TC.d.ts → es/language/de-DE.d.ts} +0 -0
  313. /package/lib/icon/style/{iconfont.1746417522210.ttf → iconfont.1746801282055.ttf} +0 -0
  314. /package/lib/icon/style/{iconfont.1746417522210.woff → iconfont.1746801282055.woff} +0 -0
  315. /package/lib/icon/style/{iconfont.1746417522210.woff2 → iconfont.1746801282055.woff2} +0 -0
  316. /package/lib/{iconfont.1746417522210.ttf → iconfont.1746801282055.ttf} +0 -0
  317. /package/lib/{iconfont.1746417522210.woff → iconfont.1746801282055.woff} +0 -0
  318. /package/lib/{iconfont.1746417522210.woff2 → iconfont.1746801282055.woff2} +0 -0
@@ -0,0 +1,1667 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _vue = require("vue");
8
+ var _xeUtils = _interopRequireDefault(require("xe-utils"));
9
+ var _ui = require("../../ui");
10
+ var _util = require("./util");
11
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
12
+ var _default = exports.default = (0, _vue.defineComponent)({
13
+ name: 'VxeDatePanel',
14
+ props: {
15
+ modelValue: [String, Number, Date],
16
+ type: {
17
+ type: String,
18
+ default: 'date'
19
+ },
20
+ className: String,
21
+ size: {
22
+ type: String,
23
+ default: () => (0, _ui.getConfig)().datePanel.size || (0, _ui.getConfig)().size
24
+ },
25
+ multiple: Boolean,
26
+ limitCount: {
27
+ type: [String, Number],
28
+ default: () => (0, _ui.getConfig)().datePanel.limitCount
29
+ },
30
+ // date、week、month、quarter、year
31
+ startDate: {
32
+ type: [String, Number, Date],
33
+ default: () => (0, _ui.getConfig)().datePanel.startDate
34
+ },
35
+ endDate: {
36
+ type: [String, Number, Date],
37
+ default: () => (0, _ui.getConfig)().datePanel.endDate
38
+ },
39
+ minDate: [String, Number, Date],
40
+ maxDate: [String, Number, Date],
41
+ startDay: {
42
+ type: [String, Number],
43
+ default: () => (0, _ui.getConfig)().datePanel.startDay
44
+ },
45
+ labelFormat: String,
46
+ valueFormat: String,
47
+ festivalMethod: {
48
+ type: Function,
49
+ default: () => (0, _ui.getConfig)().datePanel.festivalMethod
50
+ },
51
+ disabledMethod: {
52
+ type: Function,
53
+ default: () => (0, _ui.getConfig)().datePanel.disabledMethod
54
+ },
55
+ // week
56
+ selectDay: {
57
+ type: [String, Number],
58
+ default: () => (0, _ui.getConfig)().datePanel.selectDay
59
+ }
60
+ },
61
+ emits: ['update:modelValue', 'change', 'click', 'clear', 'date-prev', 'date-today', 'date-next', 'confirm'],
62
+ setup(props, context) {
63
+ const {
64
+ emit
65
+ } = context;
66
+ const xID = _xeUtils.default.uniqueId();
67
+ const {
68
+ computeSize
69
+ } = (0, _ui.useSize)(props);
70
+ const reactData = (0, _vue.reactive)({
71
+ visiblePanel: false,
72
+ isAniVisible: false,
73
+ isActivated: false,
74
+ inputValue: '',
75
+ datetimePanelValue: null,
76
+ datePanelValue: null,
77
+ datePanelLabel: '',
78
+ datePanelType: 'day',
79
+ selectMonth: null,
80
+ currentDate: null
81
+ });
82
+ const internalData = {
83
+ yearSize: 12,
84
+ monthSize: 20,
85
+ quarterSize: 8,
86
+ hpTimeout: undefined
87
+ };
88
+ const refElem = (0, _vue.ref)();
89
+ const refPanelWrapper = (0, _vue.ref)();
90
+ const refInputTimeBody = (0, _vue.ref)();
91
+ const refMaps = {
92
+ refElem
93
+ };
94
+ const $xeDatePanel = {
95
+ xID,
96
+ props,
97
+ context,
98
+ reactData,
99
+ internalData,
100
+ getRefMaps: () => refMaps
101
+ };
102
+ const computeIsDateTimeType = (0, _vue.computed)(() => {
103
+ const {
104
+ type
105
+ } = props;
106
+ return type === 'time' || type === 'datetime';
107
+ });
108
+ const computeIsDatePanelType = (0, _vue.computed)(() => {
109
+ const isDateTimeType = computeIsDateTimeType.value;
110
+ return isDateTimeType || ['date', 'week', 'month', 'quarter', 'year'].indexOf(props.type) > -1;
111
+ });
112
+ const computeDateStartTime = (0, _vue.computed)(() => {
113
+ return props.startDate ? _xeUtils.default.toStringDate(props.startDate) : null;
114
+ });
115
+ const computeDateEndTime = (0, _vue.computed)(() => {
116
+ return props.endDate ? _xeUtils.default.toStringDate(props.endDate) : null;
117
+ });
118
+ const computeDateListValue = (0, _vue.computed)(() => {
119
+ const {
120
+ modelValue,
121
+ multiple
122
+ } = props;
123
+ const isDatePanelType = computeIsDatePanelType.value;
124
+ const dateValueFormat = computeDateValueFormat.value;
125
+ if (multiple && modelValue && isDatePanelType) {
126
+ return _xeUtils.default.toValueString(modelValue).split(',').map(item => {
127
+ const date = parseDate(item, dateValueFormat);
128
+ if (_xeUtils.default.isValidDate(date)) {
129
+ return date;
130
+ }
131
+ return date;
132
+ });
133
+ }
134
+ return [];
135
+ });
136
+ const computeDateMultipleValue = (0, _vue.computed)(() => {
137
+ const dateListValue = computeDateListValue.value;
138
+ const dateValueFormat = computeDateValueFormat.value;
139
+ return dateListValue.map(date => _xeUtils.default.toDateString(date, dateValueFormat));
140
+ });
141
+ const computeDateMultipleLabel = (0, _vue.computed)(() => {
142
+ const dateListValue = computeDateListValue.value;
143
+ const dateLabelFormat = computeDateLabelFormat.value;
144
+ return dateListValue.map(date => _xeUtils.default.toDateString(date, dateLabelFormat)).join(', ');
145
+ });
146
+ const computeLimitMaxCount = (0, _vue.computed)(() => {
147
+ return props.multiple ? _xeUtils.default.toNumber(props.limitCount) : 0;
148
+ });
149
+ const computeOverCount = (0, _vue.computed)(() => {
150
+ const {
151
+ multiple
152
+ } = props;
153
+ const limitMaxCount = computeLimitMaxCount.value;
154
+ const dateMultipleValue = computeDateMultipleValue.value;
155
+ if (multiple && limitMaxCount) {
156
+ return dateMultipleValue.length >= limitMaxCount;
157
+ }
158
+ return false;
159
+ });
160
+ const computeDateValueFormat = (0, _vue.computed)(() => {
161
+ const {
162
+ type,
163
+ valueFormat
164
+ } = props;
165
+ if (valueFormat) {
166
+ return valueFormat;
167
+ }
168
+ if (type === 'time') {
169
+ return 'HH:mm:ss';
170
+ }
171
+ if (type === 'datetime') {
172
+ return 'yyyy-MM-dd HH:mm:ss';
173
+ }
174
+ return 'yyyy-MM-dd';
175
+ });
176
+ const computeDateValue = (0, _vue.computed)(() => {
177
+ const {
178
+ modelValue
179
+ } = props;
180
+ const isDatePanelType = computeIsDatePanelType.value;
181
+ const dateValueFormat = computeDateValueFormat.value;
182
+ let val = null;
183
+ if (modelValue && isDatePanelType) {
184
+ const date = parseDate(modelValue, dateValueFormat);
185
+ if (_xeUtils.default.isValidDate(date)) {
186
+ val = date;
187
+ }
188
+ }
189
+ return val;
190
+ });
191
+ const computeIsDisabledPrevDateBtn = (0, _vue.computed)(() => {
192
+ const dateStartTime = computeDateStartTime.value;
193
+ const {
194
+ selectMonth
195
+ } = reactData;
196
+ if (selectMonth && dateStartTime) {
197
+ return selectMonth <= dateStartTime;
198
+ }
199
+ return false;
200
+ });
201
+ const computeIsDisabledNextDateBtn = (0, _vue.computed)(() => {
202
+ const dateEndTime = computeDateEndTime.value;
203
+ const {
204
+ selectMonth
205
+ } = reactData;
206
+ if (selectMonth && dateEndTime) {
207
+ return _xeUtils.default.getWhatMonth(selectMonth, 0, 'last') >= dateEndTime;
208
+ }
209
+ return false;
210
+ });
211
+ const computeDateTimeLabel = (0, _vue.computed)(() => {
212
+ const {
213
+ datetimePanelValue
214
+ } = reactData;
215
+ const hasTimeSecond = computeHasTimeSecond.value;
216
+ const hasTimeMinute = computeHasTimeMinute.value;
217
+ if (datetimePanelValue) {
218
+ return _xeUtils.default.toDateString(datetimePanelValue, hasTimeMinute && hasTimeSecond ? 'HH:mm:ss' : hasTimeMinute ? 'HH:mm' : 'HH');
219
+ }
220
+ return '';
221
+ });
222
+ const computeDateHMSTime = (0, _vue.computed)(() => {
223
+ const dateValue = computeDateValue.value;
224
+ const isDateTimeType = computeIsDateTimeType.value;
225
+ return dateValue && isDateTimeType ? (dateValue.getHours() * 3600 + dateValue.getMinutes() * 60 + dateValue.getSeconds()) * 1000 : 0;
226
+ });
227
+ const computeDateLabelFormat = (0, _vue.computed)(() => {
228
+ const {
229
+ labelFormat
230
+ } = props;
231
+ const isDatePanelType = computeIsDatePanelType.value;
232
+ if (isDatePanelType) {
233
+ return labelFormat || (0, _ui.getI18n)(`vxe.input.date.labelFormat.${props.type}`);
234
+ }
235
+ return '';
236
+ });
237
+ const computeYearList = (0, _vue.computed)(() => {
238
+ const {
239
+ yearSize
240
+ } = internalData;
241
+ const {
242
+ selectMonth,
243
+ currentDate
244
+ } = reactData;
245
+ const years = [];
246
+ if (selectMonth && currentDate) {
247
+ const currFullYear = currentDate.getFullYear();
248
+ const selectFullYear = selectMonth.getFullYear();
249
+ const startYearDate = new Date(selectFullYear - selectFullYear % yearSize, 0, 1);
250
+ for (let index = -4; index < yearSize + 4; index++) {
251
+ const date = _xeUtils.default.getWhatYear(startYearDate, index, 'first');
252
+ const itemFullYear = date.getFullYear();
253
+ years.push({
254
+ date,
255
+ isCurrent: true,
256
+ isPrev: index < 0,
257
+ isNow: currFullYear === itemFullYear,
258
+ isNext: index >= yearSize,
259
+ year: itemFullYear
260
+ });
261
+ }
262
+ }
263
+ return years;
264
+ });
265
+ const computeSelectDatePanelObj = (0, _vue.computed)(() => {
266
+ const isDatePanelType = computeIsDatePanelType.value;
267
+ let y = '';
268
+ let m = '';
269
+ if (isDatePanelType) {
270
+ const {
271
+ datePanelType,
272
+ selectMonth
273
+ } = reactData;
274
+ const yearList = computeYearList.value;
275
+ let year = '';
276
+ let month;
277
+ if (selectMonth) {
278
+ year = selectMonth.getFullYear();
279
+ month = selectMonth.getMonth() + 1;
280
+ }
281
+ if (datePanelType === 'quarter' || datePanelType === 'month') {
282
+ y = (0, _ui.getI18n)('vxe.datePicker.yearTitle', [year]);
283
+ } else if (datePanelType === 'year') {
284
+ y = yearList.length ? `${yearList[0].year} - ${yearList[yearList.length - 1].year}` : '';
285
+ } else {
286
+ y = (0, _ui.getI18n)('vxe.datePicker.yearTitle', [year]);
287
+ m = month ? (0, _ui.getI18n)(`vxe.input.date.m${month}`) : '-';
288
+ }
289
+ }
290
+ return {
291
+ y,
292
+ m
293
+ };
294
+ });
295
+ const computeFirstDayOfWeek = (0, _vue.computed)(() => {
296
+ const {
297
+ startDay
298
+ } = props;
299
+ return _xeUtils.default.toNumber(startDay);
300
+ });
301
+ const computeWeekDatas = (0, _vue.computed)(() => {
302
+ const weeks = [];
303
+ const isDatePanelType = computeIsDatePanelType.value;
304
+ if (isDatePanelType) {
305
+ let sWeek = computeFirstDayOfWeek.value;
306
+ weeks.push(sWeek);
307
+ for (let index = 0; index < 6; index++) {
308
+ if (sWeek >= 6) {
309
+ sWeek = 0;
310
+ } else {
311
+ sWeek++;
312
+ }
313
+ weeks.push(sWeek);
314
+ }
315
+ }
316
+ return weeks;
317
+ });
318
+ const computeDateHeaders = (0, _vue.computed)(() => {
319
+ const isDatePanelType = computeIsDatePanelType.value;
320
+ if (isDatePanelType) {
321
+ const weekDatas = computeWeekDatas.value;
322
+ return weekDatas.map(day => {
323
+ return {
324
+ value: day,
325
+ label: (0, _ui.getI18n)(`vxe.input.date.weeks.w${day}`)
326
+ };
327
+ });
328
+ }
329
+ return [];
330
+ });
331
+ const computeWeekHeaders = (0, _vue.computed)(() => {
332
+ const isDatePanelType = computeIsDatePanelType.value;
333
+ if (isDatePanelType) {
334
+ const dateHeaders = computeDateHeaders.value;
335
+ return [{
336
+ label: (0, _ui.getI18n)('vxe.input.date.weeks.w')
337
+ }].concat(dateHeaders);
338
+ }
339
+ return [];
340
+ });
341
+ const computeYearDatas = (0, _vue.computed)(() => {
342
+ const yearList = computeYearList.value;
343
+ return _xeUtils.default.chunk(yearList, 4);
344
+ });
345
+ const computeQuarterList = (0, _vue.computed)(() => {
346
+ const {
347
+ quarterSize
348
+ } = internalData;
349
+ const {
350
+ selectMonth,
351
+ currentDate
352
+ } = reactData;
353
+ const quarters = [];
354
+ if (selectMonth && currentDate) {
355
+ const currFullYear = currentDate.getFullYear();
356
+ const currQuarter = (0, _util.getDateQuarter)(currentDate);
357
+ const firstYear = _xeUtils.default.getWhatYear(selectMonth, 0, 'first');
358
+ const selFullYear = firstYear.getFullYear();
359
+ for (let index = -2; index < quarterSize - 2; index++) {
360
+ const date = _xeUtils.default.getWhatQuarter(firstYear, index);
361
+ const itemFullYear = date.getFullYear();
362
+ const itemQuarter = (0, _util.getDateQuarter)(date);
363
+ const isPrev = itemFullYear < selFullYear;
364
+ quarters.push({
365
+ date,
366
+ isPrev,
367
+ isCurrent: itemFullYear === selFullYear,
368
+ isNow: itemFullYear === currFullYear && itemQuarter === currQuarter,
369
+ isNext: !isPrev && itemFullYear > selFullYear,
370
+ quarter: itemQuarter
371
+ });
372
+ }
373
+ }
374
+ return quarters;
375
+ });
376
+ const computeQuarterDatas = (0, _vue.computed)(() => {
377
+ const quarterList = computeQuarterList.value;
378
+ return _xeUtils.default.chunk(quarterList, 2);
379
+ });
380
+ const computeMonthList = (0, _vue.computed)(() => {
381
+ const {
382
+ monthSize
383
+ } = internalData;
384
+ const {
385
+ selectMonth,
386
+ currentDate
387
+ } = reactData;
388
+ const months = [];
389
+ if (selectMonth && currentDate) {
390
+ const currFullYear = currentDate.getFullYear();
391
+ const currMonth = currentDate.getMonth();
392
+ const selFullYear = _xeUtils.default.getWhatYear(selectMonth, 0, 'first').getFullYear();
393
+ for (let index = -4; index < monthSize - 4; index++) {
394
+ const date = _xeUtils.default.getWhatYear(selectMonth, 0, index);
395
+ const itemFullYear = date.getFullYear();
396
+ const itemMonth = date.getMonth();
397
+ const isPrev = itemFullYear < selFullYear;
398
+ months.push({
399
+ date,
400
+ isPrev,
401
+ isCurrent: itemFullYear === selFullYear,
402
+ isNow: itemFullYear === currFullYear && itemMonth === currMonth,
403
+ isNext: !isPrev && itemFullYear > selFullYear,
404
+ month: itemMonth
405
+ });
406
+ }
407
+ }
408
+ return months;
409
+ });
410
+ const computeMonthDatas = (0, _vue.computed)(() => {
411
+ const monthList = computeMonthList.value;
412
+ return _xeUtils.default.chunk(monthList, 4);
413
+ });
414
+ const computeDayList = (0, _vue.computed)(() => {
415
+ const {
416
+ selectMonth,
417
+ currentDate
418
+ } = reactData;
419
+ const days = [];
420
+ if (selectMonth && currentDate) {
421
+ const dateHMSTime = computeDateHMSTime.value;
422
+ const weekDatas = computeWeekDatas.value;
423
+ const currFullYear = currentDate.getFullYear();
424
+ const currMonth = currentDate.getMonth();
425
+ const currDate = currentDate.getDate();
426
+ const selFullYear = selectMonth.getFullYear();
427
+ const selMonth = selectMonth.getMonth();
428
+ const selDay = selectMonth.getDay();
429
+ const prevOffsetDate = -weekDatas.indexOf(selDay);
430
+ const startDayDate = new Date(_xeUtils.default.getWhatDay(selectMonth, prevOffsetDate).getTime() + dateHMSTime);
431
+ for (let index = 0; index < 42; index++) {
432
+ const date = _xeUtils.default.getWhatDay(startDayDate, index);
433
+ const itemFullYear = date.getFullYear();
434
+ const itemMonth = date.getMonth();
435
+ const itemDate = date.getDate();
436
+ const isPrev = date < selectMonth;
437
+ days.push({
438
+ date,
439
+ isPrev,
440
+ isCurrent: itemFullYear === selFullYear && itemMonth === selMonth,
441
+ isNow: itemFullYear === currFullYear && itemMonth === currMonth && itemDate === currDate,
442
+ isNext: !isPrev && selMonth !== itemMonth,
443
+ label: itemDate
444
+ });
445
+ }
446
+ }
447
+ return days;
448
+ });
449
+ const computeDayDatas = (0, _vue.computed)(() => {
450
+ const dayList = computeDayList.value;
451
+ return _xeUtils.default.chunk(dayList, 7);
452
+ });
453
+ const computeWeekDates = (0, _vue.computed)(() => {
454
+ const dayDatas = computeDayDatas.value;
455
+ const firstDayOfWeek = computeFirstDayOfWeek.value;
456
+ return dayDatas.map(list => {
457
+ const firstItem = list[0];
458
+ const item = {
459
+ date: firstItem.date,
460
+ isWeekNumber: true,
461
+ isPrev: false,
462
+ isCurrent: false,
463
+ isNow: false,
464
+ isNext: false,
465
+ label: _xeUtils.default.getYearWeek(firstItem.date, firstDayOfWeek)
466
+ };
467
+ return [item].concat(list);
468
+ });
469
+ });
470
+ const computeHourList = (0, _vue.computed)(() => {
471
+ const list = [];
472
+ const isDateTimeType = computeIsDateTimeType.value;
473
+ if (isDateTimeType) {
474
+ for (let index = 0; index < 24; index++) {
475
+ list.push({
476
+ value: index,
477
+ label: ('' + index).padStart(2, '0')
478
+ });
479
+ }
480
+ }
481
+ return list;
482
+ });
483
+ const computeMinuteList = (0, _vue.computed)(() => {
484
+ const list = [];
485
+ const isDateTimeType = computeIsDateTimeType.value;
486
+ if (isDateTimeType) {
487
+ for (let index = 0; index < 60; index++) {
488
+ list.push({
489
+ value: index,
490
+ label: ('' + index).padStart(2, '0')
491
+ });
492
+ }
493
+ }
494
+ return list;
495
+ });
496
+ const computeHasTimeMinute = (0, _vue.computed)(() => {
497
+ const dateValueFormat = computeDateValueFormat.value;
498
+ return !/HH/.test(dateValueFormat) || /mm/.test(dateValueFormat);
499
+ });
500
+ const computeHasTimeSecond = (0, _vue.computed)(() => {
501
+ const dateValueFormat = computeDateValueFormat.value;
502
+ return !/HH/.test(dateValueFormat) || /ss/.test(dateValueFormat);
503
+ });
504
+ const computeSecondList = (0, _vue.computed)(() => {
505
+ const minuteList = computeMinuteList.value;
506
+ return minuteList;
507
+ });
508
+ const updateModelValue = modelValue => {
509
+ const {
510
+ type
511
+ } = props;
512
+ const dateValueFormat = computeDateValueFormat.value;
513
+ reactData.inputValue = (0, _util.parseDateValue)(modelValue, type, {
514
+ valueFormat: dateValueFormat
515
+ });
516
+ dateOpenPanel();
517
+ };
518
+ const parseDate = (value, format) => {
519
+ const {
520
+ type,
521
+ multiple
522
+ } = props;
523
+ if (type === 'time') {
524
+ return (0, _util.toStringTimeDate)(value);
525
+ }
526
+ if (_xeUtils.default.isArray(value)) {
527
+ return _xeUtils.default.toStringDate(value[0], format);
528
+ }
529
+ if (_xeUtils.default.isString(value)) {
530
+ return _xeUtils.default.toStringDate(multiple ? _xeUtils.default.last(value.split(',')) : value, format);
531
+ }
532
+ return _xeUtils.default.toStringDate(value, format);
533
+ };
534
+ const dateRevert = () => {
535
+ reactData.inputValue = props.multiple ? computeDateMultipleLabel.value : reactData.datePanelLabel;
536
+ };
537
+ const afterCheckValue = inputLabel => {
538
+ const {
539
+ type
540
+ } = props;
541
+ const {
542
+ inputValue,
543
+ datetimePanelValue
544
+ } = reactData;
545
+ const dateLabelFormat = computeDateLabelFormat.value;
546
+ if (inputLabel) {
547
+ let inpDateVal = parseDate(inputLabel, dateLabelFormat);
548
+ if (_xeUtils.default.isValidDate(inpDateVal)) {
549
+ if (type === 'time') {
550
+ inpDateVal = _xeUtils.default.toDateString(inpDateVal, dateLabelFormat);
551
+ if (inputValue !== inpDateVal) {
552
+ handleChange(inpDateVal, {
553
+ type: 'check'
554
+ });
555
+ }
556
+ reactData.inputValue = inpDateVal;
557
+ } else {
558
+ let isChange = false;
559
+ const firstDayOfWeek = computeFirstDayOfWeek.value;
560
+ if (type === 'datetime') {
561
+ const dateValue = computeDateValue.value;
562
+ if (inputLabel !== _xeUtils.default.toDateString(dateValue, dateLabelFormat) || inputLabel !== _xeUtils.default.toDateString(inpDateVal, dateLabelFormat)) {
563
+ isChange = true;
564
+ if (datetimePanelValue) {
565
+ datetimePanelValue.setHours(inpDateVal.getHours());
566
+ datetimePanelValue.setMinutes(inpDateVal.getMinutes());
567
+ datetimePanelValue.setSeconds(inpDateVal.getSeconds());
568
+ }
569
+ }
570
+ } else {
571
+ isChange = true;
572
+ }
573
+ reactData.inputValue = _xeUtils.default.toDateString(inpDateVal, dateLabelFormat, {
574
+ firstDay: firstDayOfWeek
575
+ });
576
+ if (isChange) {
577
+ dateChange(inpDateVal);
578
+ }
579
+ }
580
+ } else {
581
+ dateRevert();
582
+ }
583
+ } else {
584
+ handleChange('', {
585
+ type: 'check'
586
+ });
587
+ }
588
+ };
589
+ const handleChange = (value, evnt) => {
590
+ const {
591
+ modelValue
592
+ } = props;
593
+ reactData.inputValue = value;
594
+ emit('update:modelValue', value);
595
+ if (_xeUtils.default.toValueString(modelValue) !== value) {
596
+ dispatchEvent('change', {
597
+ value
598
+ }, evnt);
599
+ }
600
+ };
601
+ const hidePanel = () => {
602
+ return new Promise(resolve => {
603
+ reactData.visiblePanel = false;
604
+ internalData.hpTimeout = setTimeout(() => {
605
+ reactData.isAniVisible = false;
606
+ resolve();
607
+ }, 350);
608
+ });
609
+ };
610
+ const dateParseValue = val => {
611
+ const {
612
+ type
613
+ } = props;
614
+ const dateLabelFormat = computeDateLabelFormat.value;
615
+ const dateValueFormat = computeDateValueFormat.value;
616
+ const firstDayOfWeek = computeFirstDayOfWeek.value;
617
+ const dateObj = (0, _util.parseDateObj)(val, type, {
618
+ valueFormat: dateValueFormat,
619
+ labelFormat: dateLabelFormat,
620
+ firstDay: firstDayOfWeek
621
+ });
622
+ reactData.datePanelValue = dateObj.value;
623
+ reactData.datePanelLabel = dateObj.label;
624
+ };
625
+ /**
626
+ * 值变化时处理
627
+ */
628
+ const changeValue = () => {
629
+ const isDatePanelType = computeIsDatePanelType.value;
630
+ const {
631
+ inputValue
632
+ } = reactData;
633
+ if (isDatePanelType) {
634
+ dateParseValue(inputValue);
635
+ reactData.inputValue = props.multiple ? computeDateMultipleLabel.value : reactData.datePanelLabel;
636
+ }
637
+ };
638
+ /**
639
+ * 检查初始值
640
+ */
641
+ const initValue = () => {
642
+ const {
643
+ modelValue
644
+ } = props;
645
+ const isDatePanelType = computeIsDatePanelType.value;
646
+ updateModelValue(modelValue);
647
+ if (isDatePanelType) {
648
+ changeValue();
649
+ }
650
+ };
651
+ const dateCheckMonth = date => {
652
+ const firstDayOfWeek = computeFirstDayOfWeek.value;
653
+ const weekNum = _xeUtils.default.getYearWeek(date, firstDayOfWeek);
654
+ const weekStartDate = _xeUtils.default.getWhatWeek(date, 0, firstDayOfWeek, firstDayOfWeek);
655
+ const month = _xeUtils.default.getWhatMonth(weekNum === 1 ? _xeUtils.default.getWhatDay(weekStartDate, 6) : date, 0, 'first');
656
+ if (!_xeUtils.default.isEqual(month, reactData.selectMonth)) {
657
+ reactData.selectMonth = month;
658
+ }
659
+ };
660
+ const dateChange = (date, isReload) => {
661
+ const {
662
+ modelValue,
663
+ multiple
664
+ } = props;
665
+ const {
666
+ datetimePanelValue
667
+ } = reactData;
668
+ const isDateTimeType = computeIsDateTimeType.value;
669
+ const dateValueFormat = computeDateValueFormat.value;
670
+ const firstDayOfWeek = computeFirstDayOfWeek.value;
671
+ if (props.type === 'week') {
672
+ const sWeek = _xeUtils.default.toNumber(props.selectDay);
673
+ date = _xeUtils.default.getWhatWeek(date, 0, sWeek, firstDayOfWeek);
674
+ } else if (isDateTimeType) {
675
+ if (datetimePanelValue) {
676
+ date.setHours(datetimePanelValue.getHours());
677
+ date.setMinutes(datetimePanelValue.getMinutes());
678
+ date.setSeconds(datetimePanelValue.getSeconds());
679
+ }
680
+ }
681
+ const inpVal = _xeUtils.default.toDateString(date, dateValueFormat, {
682
+ firstDay: firstDayOfWeek
683
+ });
684
+ dateCheckMonth(date);
685
+ if (multiple) {
686
+ const overCount = computeOverCount.value;
687
+ // 如果为多选
688
+ if (isDateTimeType) {
689
+ // 如果是datetime特殊类型
690
+ const dateListValue = isReload ? [] : [...computeDateListValue.value];
691
+ const datetimeRest = [];
692
+ const eqIndex = _xeUtils.default.findIndexOf(dateListValue, val => _xeUtils.default.isDateSame(date, val, 'yyyyMMdd'));
693
+ if (eqIndex === -1) {
694
+ if (overCount) {
695
+ // 如果超出最大多选数量
696
+ return;
697
+ }
698
+ dateListValue.push(date);
699
+ } else {
700
+ dateListValue.splice(eqIndex, 1);
701
+ }
702
+ dateListValue.forEach(item => {
703
+ if (item) {
704
+ if (datetimePanelValue) {
705
+ item.setHours(datetimePanelValue.getHours());
706
+ item.setMinutes(datetimePanelValue.getMinutes());
707
+ item.setSeconds(datetimePanelValue.getSeconds());
708
+ }
709
+ datetimeRest.push(item);
710
+ }
711
+ });
712
+ handleChange(datetimeRest.map(date => _xeUtils.default.toDateString(date, dateValueFormat)).join(','), {
713
+ type: 'update'
714
+ });
715
+ } else {
716
+ const dateMultipleValue = isReload ? [] : computeDateMultipleValue.value;
717
+ // 如果是日期类型
718
+ if (dateMultipleValue.some(val => _xeUtils.default.isEqual(val, inpVal))) {
719
+ handleChange(dateMultipleValue.filter(val => !_xeUtils.default.isEqual(val, inpVal)).join(','), {
720
+ type: 'update'
721
+ });
722
+ } else {
723
+ if (overCount) {
724
+ // 如果超出最大多选数量
725
+ return;
726
+ }
727
+ handleChange(dateMultipleValue.concat([inpVal]).join(','), {
728
+ type: 'update'
729
+ });
730
+ }
731
+ }
732
+ } else {
733
+ // 如果为单选
734
+ if (!_xeUtils.default.isEqual(modelValue, inpVal)) {
735
+ handleChange(inpVal, {
736
+ type: 'update'
737
+ });
738
+ }
739
+ }
740
+ };
741
+ // 日期
742
+ const dateMonthHandle = (date, offsetMonth) => {
743
+ const firstDayOfWeek = computeFirstDayOfWeek.value;
744
+ const weekNum = _xeUtils.default.getYearWeek(date, firstDayOfWeek);
745
+ const weekStartDate = _xeUtils.default.getWhatWeek(date, 0, firstDayOfWeek, firstDayOfWeek);
746
+ const month = _xeUtils.default.getWhatMonth(weekNum === 1 ? _xeUtils.default.getWhatDay(weekStartDate, 6) : date, offsetMonth, 'first');
747
+ reactData.selectMonth = month;
748
+ };
749
+ const dateNowHandle = () => {
750
+ const {
751
+ type
752
+ } = props;
753
+ const firstDayOfWeek = computeFirstDayOfWeek.value;
754
+ let currentDate = new Date();
755
+ switch (type) {
756
+ case 'week':
757
+ currentDate = _xeUtils.default.getWhatWeek(currentDate, 0, firstDayOfWeek);
758
+ break;
759
+ case 'datetime':
760
+ currentDate = new Date();
761
+ reactData.datetimePanelValue = new Date();
762
+ break;
763
+ default:
764
+ currentDate = _xeUtils.default.getWhatDay(Date.now(), 0, 'first');
765
+ break;
766
+ }
767
+ reactData.currentDate = currentDate;
768
+ dateMonthHandle(currentDate, 0);
769
+ };
770
+ const dateToggleYearTypeEvent = () => {
771
+ reactData.datePanelType = 'year';
772
+ };
773
+ const dateToggleMonthTypeEvent = () => {
774
+ let {
775
+ datePanelType
776
+ } = reactData;
777
+ if (datePanelType === 'month' || datePanelType === 'quarter') {
778
+ datePanelType = 'year';
779
+ } else {
780
+ datePanelType = 'month';
781
+ }
782
+ reactData.datePanelType = datePanelType;
783
+ };
784
+ const datePrevEvent = evnt => {
785
+ const {
786
+ type
787
+ } = props;
788
+ const {
789
+ datePanelType,
790
+ selectMonth,
791
+ inputValue
792
+ } = reactData;
793
+ const {
794
+ yearSize
795
+ } = internalData;
796
+ const value = inputValue;
797
+ const isDisabledPrevDateBtn = computeIsDisabledPrevDateBtn.value;
798
+ if (!isDisabledPrevDateBtn) {
799
+ let viewDate;
800
+ if (type === 'year') {
801
+ viewDate = _xeUtils.default.getWhatYear(selectMonth, -yearSize, 'first');
802
+ } else if (type === 'month' || type === 'quarter') {
803
+ if (datePanelType === 'year') {
804
+ viewDate = _xeUtils.default.getWhatYear(selectMonth, -yearSize, 'first');
805
+ } else {
806
+ viewDate = _xeUtils.default.getWhatYear(selectMonth, -1, 'first');
807
+ }
808
+ } else {
809
+ if (datePanelType === 'year') {
810
+ viewDate = _xeUtils.default.getWhatYear(selectMonth, -yearSize, 'first');
811
+ } else if (datePanelType === 'month') {
812
+ viewDate = _xeUtils.default.getWhatYear(selectMonth, -1, 'first');
813
+ } else {
814
+ viewDate = _xeUtils.default.getWhatMonth(selectMonth, -1, 'first');
815
+ }
816
+ }
817
+ reactData.selectMonth = viewDate;
818
+ dispatchEvent('date-prev', {
819
+ viewType: datePanelType,
820
+ viewDate,
821
+ value,
822
+ type
823
+ }, evnt);
824
+ }
825
+ };
826
+ const dateTodayMonthEvent = evnt => {
827
+ dateNowHandle();
828
+ dateChange(reactData.currentDate, true);
829
+ if (!props.multiple) {
830
+ hidePanel();
831
+ }
832
+ dispatchEvent('date-today', {
833
+ type: props.type
834
+ }, evnt);
835
+ };
836
+ const dateNextEvent = evnt => {
837
+ const {
838
+ type
839
+ } = props;
840
+ const {
841
+ datePanelType,
842
+ selectMonth,
843
+ inputValue
844
+ } = reactData;
845
+ const {
846
+ yearSize
847
+ } = internalData;
848
+ const value = inputValue;
849
+ const isDisabledNextDateBtn = computeIsDisabledNextDateBtn.value;
850
+ if (!isDisabledNextDateBtn) {
851
+ let viewDate;
852
+ if (type === 'year') {
853
+ viewDate = _xeUtils.default.getWhatYear(selectMonth, yearSize, 'first');
854
+ } else if (type === 'month' || type === 'quarter') {
855
+ if (datePanelType === 'year') {
856
+ viewDate = _xeUtils.default.getWhatYear(selectMonth, yearSize, 'first');
857
+ } else {
858
+ viewDate = _xeUtils.default.getWhatYear(selectMonth, 1, 'first');
859
+ }
860
+ } else {
861
+ if (datePanelType === 'year') {
862
+ viewDate = _xeUtils.default.getWhatYear(selectMonth, yearSize, 'first');
863
+ } else if (datePanelType === 'month') {
864
+ viewDate = _xeUtils.default.getWhatYear(selectMonth, 1, 'first');
865
+ } else {
866
+ viewDate = _xeUtils.default.getWhatMonth(selectMonth, 1, 'first');
867
+ }
868
+ }
869
+ reactData.selectMonth = viewDate;
870
+ dispatchEvent('date-next', {
871
+ viewType: datePanelType,
872
+ value,
873
+ type
874
+ }, evnt);
875
+ }
876
+ };
877
+ const isDateDisabled = item => {
878
+ const {
879
+ disabledMethod
880
+ } = props;
881
+ const {
882
+ datePanelType
883
+ } = reactData;
884
+ const dateStartTime = computeDateStartTime.value;
885
+ const dateEndTime = computeDateEndTime.value;
886
+ const {
887
+ date
888
+ } = item;
889
+ if (dateStartTime && dateStartTime.getTime() > date.getTime()) {
890
+ return true;
891
+ }
892
+ if (dateEndTime && dateEndTime.getTime() < date.getTime()) {
893
+ return true;
894
+ }
895
+ if (disabledMethod) {
896
+ return disabledMethod({
897
+ type: datePanelType,
898
+ viewType: datePanelType,
899
+ date,
900
+ $datePanel: $xeDatePanel
901
+ });
902
+ }
903
+ return false;
904
+ };
905
+ const dateSelectItem = date => {
906
+ const {
907
+ type,
908
+ multiple
909
+ } = props;
910
+ const {
911
+ datePanelType
912
+ } = reactData;
913
+ if (type === 'month') {
914
+ if (datePanelType === 'year') {
915
+ reactData.datePanelType = 'month';
916
+ dateCheckMonth(date);
917
+ } else {
918
+ dateChange(date);
919
+ if (!multiple) {
920
+ hidePanel();
921
+ }
922
+ }
923
+ } else if (type === 'year') {
924
+ dateChange(date);
925
+ if (!multiple) {
926
+ hidePanel();
927
+ }
928
+ } else if (type === 'quarter') {
929
+ if (datePanelType === 'year') {
930
+ reactData.datePanelType = 'quarter';
931
+ dateCheckMonth(date);
932
+ } else {
933
+ dateChange(date);
934
+ if (!multiple) {
935
+ hidePanel();
936
+ }
937
+ }
938
+ } else {
939
+ if (datePanelType === 'month') {
940
+ reactData.datePanelType = type === 'week' ? type : 'day';
941
+ dateCheckMonth(date);
942
+ } else if (datePanelType === 'year') {
943
+ reactData.datePanelType = 'month';
944
+ dateCheckMonth(date);
945
+ } else {
946
+ dateChange(date);
947
+ if (type === 'datetime') {
948
+ // 日期带时间
949
+ } else {
950
+ if (!multiple) {
951
+ hidePanel();
952
+ }
953
+ }
954
+ }
955
+ }
956
+ };
957
+ const dateSelectEvent = item => {
958
+ if (!isDateDisabled(item)) {
959
+ dateSelectItem(item.date);
960
+ }
961
+ };
962
+ const dateMoveDay = offsetDay => {
963
+ if (!isDateDisabled({
964
+ date: offsetDay
965
+ })) {
966
+ const dayList = computeDayList.value;
967
+ if (!dayList.some(item => _xeUtils.default.isDateSame(item.date, offsetDay, 'yyyyMMdd'))) {
968
+ dateCheckMonth(offsetDay);
969
+ }
970
+ dateParseValue(offsetDay);
971
+ }
972
+ };
973
+ const dateMoveYear = offsetYear => {
974
+ if (!isDateDisabled({
975
+ date: offsetYear
976
+ })) {
977
+ const yearList = computeYearList.value;
978
+ if (!yearList.some(item => _xeUtils.default.isDateSame(item.date, offsetYear, 'yyyy'))) {
979
+ dateCheckMonth(offsetYear);
980
+ }
981
+ dateParseValue(offsetYear);
982
+ }
983
+ };
984
+ const dateMoveQuarter = offsetQuarter => {
985
+ if (!isDateDisabled({
986
+ date: offsetQuarter
987
+ })) {
988
+ const quarterList = computeQuarterList.value;
989
+ if (!quarterList.some(item => _xeUtils.default.isDateSame(item.date, offsetQuarter, 'yyyyq'))) {
990
+ dateCheckMonth(offsetQuarter);
991
+ }
992
+ dateParseValue(offsetQuarter);
993
+ }
994
+ };
995
+ const dateMoveMonth = offsetMonth => {
996
+ if (!isDateDisabled({
997
+ date: offsetMonth
998
+ })) {
999
+ const monthList = computeMonthList.value;
1000
+ if (!monthList.some(item => _xeUtils.default.isDateSame(item.date, offsetMonth, 'yyyyMM'))) {
1001
+ dateCheckMonth(offsetMonth);
1002
+ }
1003
+ dateParseValue(offsetMonth);
1004
+ }
1005
+ };
1006
+ const dateMouseenterEvent = item => {
1007
+ if (!isDateDisabled(item)) {
1008
+ const {
1009
+ datePanelType
1010
+ } = reactData;
1011
+ if (datePanelType === 'month') {
1012
+ dateMoveMonth(item.date);
1013
+ } else if (datePanelType === 'quarter') {
1014
+ dateMoveQuarter(item.date);
1015
+ } else if (datePanelType === 'year') {
1016
+ dateMoveYear(item.date);
1017
+ } else {
1018
+ dateMoveDay(item.date);
1019
+ }
1020
+ }
1021
+ };
1022
+ const dateMouseleaveEvent = () => {
1023
+ reactData.datePanelValue = null;
1024
+ };
1025
+ const updateTimePos = liElem => {
1026
+ if (liElem) {
1027
+ const height = liElem.offsetHeight;
1028
+ const ulElem = liElem.parentNode;
1029
+ ulElem.scrollTop = liElem.offsetTop - height * 4;
1030
+ }
1031
+ };
1032
+ const dateTimeChangeEvent = evnt => {
1033
+ const {
1034
+ datetimePanelValue
1035
+ } = reactData;
1036
+ reactData.datetimePanelValue = datetimePanelValue ? new Date(datetimePanelValue.getTime()) : new Date();
1037
+ updateTimePos(evnt.currentTarget);
1038
+ };
1039
+ const dateHourEvent = (evnt, item) => {
1040
+ const {
1041
+ datetimePanelValue
1042
+ } = reactData;
1043
+ if (datetimePanelValue) {
1044
+ datetimePanelValue.setHours(item.value);
1045
+ }
1046
+ dateTimeChangeEvent(evnt);
1047
+ };
1048
+ const dateConfirmEvent = evnt => {
1049
+ const {
1050
+ multiple
1051
+ } = props;
1052
+ const {
1053
+ datetimePanelValue
1054
+ } = reactData;
1055
+ const dateValue = computeDateValue.value;
1056
+ const isDateTimeType = computeIsDateTimeType.value;
1057
+ if (isDateTimeType) {
1058
+ const dateValueFormat = computeDateValueFormat.value;
1059
+ if (multiple) {
1060
+ // 如果为多选
1061
+ const dateMultipleValue = computeDateMultipleValue.value;
1062
+ if (isDateTimeType) {
1063
+ // 如果是datetime特殊类型
1064
+ const dateListValue = [...computeDateListValue.value];
1065
+ const datetimeRest = [];
1066
+ dateListValue.forEach(item => {
1067
+ if (item) {
1068
+ if (datetimePanelValue) {
1069
+ item.setHours(datetimePanelValue.getHours());
1070
+ item.setMinutes(datetimePanelValue.getMinutes());
1071
+ item.setSeconds(datetimePanelValue.getSeconds());
1072
+ }
1073
+ datetimeRest.push(item);
1074
+ }
1075
+ });
1076
+ handleChange(datetimeRest.map(date => _xeUtils.default.toDateString(date, dateValueFormat)).join(','), {
1077
+ type: 'update'
1078
+ });
1079
+ } else {
1080
+ // 如果是日期类型
1081
+ handleChange(dateMultipleValue.join(','), {
1082
+ type: 'update'
1083
+ });
1084
+ }
1085
+ } else {
1086
+ dateChange(dateValue || reactData.currentDate);
1087
+ }
1088
+ }
1089
+ hidePanel();
1090
+ dispatchEvent('confirm', {}, evnt);
1091
+ };
1092
+ const dateMinuteEvent = (evnt, item) => {
1093
+ const {
1094
+ datetimePanelValue
1095
+ } = reactData;
1096
+ if (datetimePanelValue) {
1097
+ datetimePanelValue.setMinutes(item.value);
1098
+ }
1099
+ dateTimeChangeEvent(evnt);
1100
+ };
1101
+ const dateSecondEvent = (evnt, item) => {
1102
+ const {
1103
+ datetimePanelValue
1104
+ } = reactData;
1105
+ if (datetimePanelValue) {
1106
+ datetimePanelValue.setSeconds(item.value);
1107
+ }
1108
+ dateTimeChangeEvent(evnt);
1109
+ };
1110
+ const dateOpenPanel = () => {
1111
+ const {
1112
+ type
1113
+ } = props;
1114
+ const isDateTimeType = computeIsDateTimeType.value;
1115
+ const dateValue = computeDateValue.value;
1116
+ if (['year', 'quarter', 'month', 'week'].indexOf(type) > -1) {
1117
+ reactData.datePanelType = type;
1118
+ } else {
1119
+ reactData.datePanelType = 'day';
1120
+ }
1121
+ reactData.currentDate = _xeUtils.default.getWhatDay(Date.now(), 0, 'first');
1122
+ if (dateValue) {
1123
+ dateMonthHandle(dateValue, 0);
1124
+ dateParseValue(dateValue);
1125
+ } else {
1126
+ dateNowHandle();
1127
+ }
1128
+ if (isDateTimeType) {
1129
+ reactData.datetimePanelValue = reactData.datePanelValue || _xeUtils.default.getWhatDay(Date.now(), 0, 'first');
1130
+ (0, _vue.nextTick)(() => {
1131
+ const timeBodyElem = refInputTimeBody.value;
1132
+ _xeUtils.default.arrayEach(timeBodyElem.querySelectorAll('li.is--selected'), elem => {
1133
+ updateTimePos(elem);
1134
+ });
1135
+ });
1136
+ }
1137
+ };
1138
+ const dispatchEvent = (type, params, evnt) => {
1139
+ emit(type, (0, _ui.createEvent)(evnt, {
1140
+ $datePanel: $xeDatePanel
1141
+ }, params));
1142
+ };
1143
+ const datePanelMethods = {
1144
+ dispatchEvent,
1145
+ getValue() {
1146
+ return reactData.inputValue;
1147
+ },
1148
+ setPanelDate(date) {
1149
+ if (date) {
1150
+ dateCheckMonth(date);
1151
+ }
1152
+ },
1153
+ getPanelDate() {
1154
+ return reactData.selectMonth;
1155
+ },
1156
+ checkValue(inputLabel) {
1157
+ afterCheckValue(inputLabel);
1158
+ },
1159
+ confirmByEvent(evnt) {
1160
+ dateConfirmEvent(evnt);
1161
+ }
1162
+ };
1163
+ Object.assign($xeDatePanel, datePanelMethods);
1164
+ const renderDateLabel = (item, label) => {
1165
+ const {
1166
+ festivalMethod
1167
+ } = props;
1168
+ const labelVNs = [];
1169
+ if (festivalMethod) {
1170
+ const {
1171
+ datePanelType
1172
+ } = reactData;
1173
+ const festivalRest = festivalMethod({
1174
+ type: datePanelType,
1175
+ viewType: datePanelType,
1176
+ date: item.date,
1177
+ $datePanel: $xeDatePanel
1178
+ });
1179
+ const festivalItem = festivalRest ? _xeUtils.default.isString(festivalRest) ? {
1180
+ label: festivalRest
1181
+ } : festivalRest : {};
1182
+ const extraItem = festivalItem.extra ? _xeUtils.default.isString(festivalItem.extra) ? {
1183
+ label: festivalItem.extra
1184
+ } : festivalItem.extra : null;
1185
+ labelVNs.push((0, _vue.h)('div', {
1186
+ class: ['vxe-date-panel--label', {
1187
+ 'is-notice': festivalItem.notice
1188
+ }]
1189
+ }, extraItem && extraItem.label ? [(0, _vue.h)('div', `${label}`), (0, _vue.h)('div', {
1190
+ class: ['vxe-date-panel--label--extra', extraItem.important ? 'is-important' : '', extraItem.className],
1191
+ style: extraItem.style
1192
+ }, _xeUtils.default.toValueString(extraItem.label))] : `${label}`));
1193
+ const festivalLabel = festivalItem.label;
1194
+ if (festivalLabel) {
1195
+ // 默认最多支持3个节日重叠
1196
+ const festivalLabels = _xeUtils.default.toValueString(festivalLabel).split(',');
1197
+ labelVNs.push((0, _vue.h)('div', {
1198
+ class: ['vxe-date-panel--festival', festivalItem.important ? 'is-important' : '', festivalItem.className],
1199
+ style: festivalItem.style
1200
+ }, [festivalLabels.length > 1 ? (0, _vue.h)('div', {
1201
+ class: ['vxe-date-panel--festival--overlap', `overlap--${festivalLabels.length}`]
1202
+ }, festivalLabels.map(label => (0, _vue.h)('div', label.substring(0, 3)))) : (0, _vue.h)('div', {
1203
+ class: 'vxe-date-panel--festival--label'
1204
+ }, festivalLabels[0].substring(0, 3))]));
1205
+ }
1206
+ }
1207
+ return labelVNs;
1208
+ };
1209
+ const renderDateDayTable = () => {
1210
+ const {
1211
+ multiple
1212
+ } = props;
1213
+ const {
1214
+ datePanelType,
1215
+ datePanelValue
1216
+ } = reactData;
1217
+ const dateValue = computeDateValue.value;
1218
+ const dateHeaders = computeDateHeaders.value;
1219
+ const dayDatas = computeDayDatas.value;
1220
+ const dateListValue = computeDateListValue.value;
1221
+ const overCount = computeOverCount.value;
1222
+ const matchFormat = 'yyyyMMdd';
1223
+ return [(0, _vue.h)('div', {
1224
+ class: ['vxe-date-panel--view-wrapper', `type--${datePanelType}`]
1225
+ }, [(0, _vue.h)('div', {
1226
+ class: 'vxe-date-panel--view-header'
1227
+ }, [(0, _vue.h)('div', {
1228
+ class: 'vxe-date-panel--view-row'
1229
+ }, dateHeaders.map(item => {
1230
+ return (0, _vue.h)('div', {
1231
+ class: 'vxe-date-panel--view-item',
1232
+ style: {
1233
+ width: `${100 / dateHeaders.length}%`
1234
+ }
1235
+ }, [(0, _vue.h)('div', {
1236
+ class: 'vxe-date-panel--view-item-inner'
1237
+ }, [(0, _vue.h)('div', {
1238
+ class: 'vxe-date-panel--view-item-label'
1239
+ }, item.label)])]);
1240
+ }))]), (0, _vue.h)('div', {
1241
+ class: 'vxe-date-panel--view-body'
1242
+ }, dayDatas.map(rows => {
1243
+ return (0, _vue.h)('div', {
1244
+ class: 'vxe-date-panel--view-row',
1245
+ style: {
1246
+ height: `${100 / dayDatas.length}%`
1247
+ }
1248
+ }, rows.map(item => {
1249
+ const isSelected = multiple ? dateListValue.some(val => _xeUtils.default.isDateSame(val, item.date, matchFormat)) : _xeUtils.default.isDateSame(dateValue, item.date, matchFormat);
1250
+ return (0, _vue.h)('div', {
1251
+ class: ['vxe-date-panel--view-item', {
1252
+ 'is--prev': item.isPrev,
1253
+ 'is--current': item.isCurrent,
1254
+ 'is--now': item.isNow,
1255
+ 'is--next': item.isNext,
1256
+ 'is--disabled': isDateDisabled(item),
1257
+ 'is--selected': isSelected,
1258
+ 'is--over': overCount && !isSelected,
1259
+ 'is--hover': !overCount && _xeUtils.default.isDateSame(datePanelValue, item.date, matchFormat)
1260
+ }],
1261
+ style: {
1262
+ width: `${100 / rows.length}%`
1263
+ },
1264
+ onClick: () => dateSelectEvent(item),
1265
+ onMouseenter: () => dateMouseenterEvent(item),
1266
+ onMouseleave: dateMouseleaveEvent
1267
+ }, [(0, _vue.h)('div', {
1268
+ class: 'vxe-date-panel--view-item-inner'
1269
+ }, renderDateLabel(item, item.label))]);
1270
+ }));
1271
+ }))])];
1272
+ };
1273
+ const renderDateWeekTable = () => {
1274
+ const {
1275
+ multiple
1276
+ } = props;
1277
+ const {
1278
+ datePanelType,
1279
+ datePanelValue
1280
+ } = reactData;
1281
+ const dateValue = computeDateValue.value;
1282
+ const weekHeaders = computeWeekHeaders.value;
1283
+ const weekDates = computeWeekDates.value;
1284
+ const dateListValue = computeDateListValue.value;
1285
+ const overCount = computeOverCount.value;
1286
+ const matchFormat = 'yyyyMMdd';
1287
+ return [(0, _vue.h)('div', {
1288
+ class: ['vxe-date-panel--view-wrapper', `type--${datePanelType}`]
1289
+ }, [(0, _vue.h)('div', {
1290
+ class: 'vxe-date-panel--view-header'
1291
+ }, [(0, _vue.h)('div', {
1292
+ class: 'vxe-date-panel--view-row'
1293
+ }, weekHeaders.map((item, rIndex) => {
1294
+ return (0, _vue.h)('div', {
1295
+ class: 'vxe-date-panel--view-item',
1296
+ style: {
1297
+ width: `${rIndex ? 13 : 9}%`
1298
+ }
1299
+ }, [(0, _vue.h)('div', {
1300
+ class: 'vxe-date-panel--view-item-inner'
1301
+ }, [(0, _vue.h)('div', {
1302
+ class: 'vxe-date-panel--view-item-label'
1303
+ }, item.label)])]);
1304
+ }))]), (0, _vue.h)('div', {
1305
+ class: 'vxe-date-panel--view-body'
1306
+ }, weekDates.map(rows => {
1307
+ const isSelected = multiple ? rows.some(item => dateListValue.some(val => _xeUtils.default.isDateSame(val, item.date, matchFormat))) : rows.some(item => _xeUtils.default.isDateSame(dateValue, item.date, matchFormat));
1308
+ const isHover = rows.some(item => _xeUtils.default.isDateSame(datePanelValue, item.date, matchFormat));
1309
+ const isNowWeek = rows.some(item => item.isNow);
1310
+ return (0, _vue.h)('div', {
1311
+ class: 'vxe-date-panel--view-row',
1312
+ style: {
1313
+ height: `${100 / weekDates.length}%`
1314
+ }
1315
+ }, rows.map((item, rIndex) => {
1316
+ return (0, _vue.h)('div', {
1317
+ class: ['vxe-date-panel--view-item', {
1318
+ 'is--prev': item.isPrev,
1319
+ 'is--current': item.isCurrent,
1320
+ 'is--now': rIndex ? item.isNow : isNowWeek,
1321
+ 'is--next': item.isNext,
1322
+ 'is--disabled': isDateDisabled(item),
1323
+ 'is--selected': isSelected,
1324
+ 'is--over': overCount && !isSelected,
1325
+ 'is--hover': !overCount && isHover
1326
+ }],
1327
+ style: {
1328
+ width: `${rIndex ? 13 : 9}%`
1329
+ },
1330
+ onClick: () => dateSelectEvent(item),
1331
+ onMouseenter: () => dateMouseenterEvent(item),
1332
+ onMouseleave: dateMouseleaveEvent
1333
+ }, [(0, _vue.h)('div', {
1334
+ class: 'vxe-date-panel--view-item-inner'
1335
+ }, renderDateLabel(item, item.label))]);
1336
+ }));
1337
+ }))])];
1338
+ };
1339
+ const renderDateMonthTable = () => {
1340
+ const {
1341
+ multiple
1342
+ } = props;
1343
+ const {
1344
+ datePanelType,
1345
+ datePanelValue
1346
+ } = reactData;
1347
+ const dateValue = computeDateValue.value;
1348
+ const monthDatas = computeMonthDatas.value;
1349
+ const dateListValue = computeDateListValue.value;
1350
+ const overCount = computeOverCount.value;
1351
+ const matchFormat = 'yyyyMM';
1352
+ return [(0, _vue.h)('div', {
1353
+ class: ['vxe-date-panel--view-wrapper', `type--${datePanelType}`]
1354
+ }, [(0, _vue.h)('div', {
1355
+ class: 'vxe-date-panel--view-body'
1356
+ }, monthDatas.map(rows => {
1357
+ return (0, _vue.h)('div', {
1358
+ class: 'vxe-date-panel--view-row',
1359
+ style: {
1360
+ height: `${100 / monthDatas.length}%`
1361
+ }
1362
+ }, rows.map(item => {
1363
+ const isSelected = multiple ? dateListValue.some(val => _xeUtils.default.isDateSame(val, item.date, matchFormat)) : _xeUtils.default.isDateSame(dateValue, item.date, matchFormat);
1364
+ return (0, _vue.h)('div', {
1365
+ class: ['vxe-date-panel--view-item', {
1366
+ 'is--prev': item.isPrev,
1367
+ 'is--current': item.isCurrent,
1368
+ 'is--now': item.isNow,
1369
+ 'is--next': item.isNext,
1370
+ 'is--disabled': isDateDisabled(item),
1371
+ 'is--selected': isSelected,
1372
+ 'is--over': overCount && !isSelected,
1373
+ 'is--hover': !overCount && _xeUtils.default.isDateSame(datePanelValue, item.date, matchFormat)
1374
+ }],
1375
+ style: {
1376
+ width: `${100 / rows.length}%`
1377
+ },
1378
+ onClick: () => dateSelectEvent(item),
1379
+ onMouseenter: () => dateMouseenterEvent(item),
1380
+ onMouseleave: dateMouseleaveEvent
1381
+ }, [(0, _vue.h)('div', {
1382
+ class: 'vxe-date-panel--view-item-inner'
1383
+ }, renderDateLabel(item, (0, _ui.getI18n)(`vxe.input.date.months.m${item.month}`)))]);
1384
+ }));
1385
+ }))])];
1386
+ };
1387
+ const renderDateQuarterTable = () => {
1388
+ const {
1389
+ multiple
1390
+ } = props;
1391
+ const {
1392
+ datePanelType,
1393
+ datePanelValue
1394
+ } = reactData;
1395
+ const dateValue = computeDateValue.value;
1396
+ const quarterDatas = computeQuarterDatas.value;
1397
+ const dateListValue = computeDateListValue.value;
1398
+ const overCount = computeOverCount.value;
1399
+ const matchFormat = 'yyyyq';
1400
+ return [(0, _vue.h)('div', {
1401
+ class: ['vxe-date-panel--view-wrapper', `type--${datePanelType}`]
1402
+ }, [(0, _vue.h)('div', {
1403
+ class: 'vxe-date-panel--view-body'
1404
+ }, quarterDatas.map(rows => {
1405
+ return (0, _vue.h)('div', {
1406
+ class: 'vxe-date-panel--view-row',
1407
+ style: {
1408
+ height: `${100 / quarterDatas.length}%`
1409
+ }
1410
+ }, rows.map(item => {
1411
+ const isSelected = multiple ? dateListValue.some(val => _xeUtils.default.isDateSame(val, item.date, matchFormat)) : _xeUtils.default.isDateSame(dateValue, item.date, matchFormat);
1412
+ return (0, _vue.h)('div', {
1413
+ class: ['vxe-date-panel--view-item', {
1414
+ 'is--prev': item.isPrev,
1415
+ 'is--current': item.isCurrent,
1416
+ 'is--now': item.isNow,
1417
+ 'is--next': item.isNext,
1418
+ 'is--disabled': isDateDisabled(item),
1419
+ 'is--selected': isSelected,
1420
+ 'is--over': overCount && !isSelected,
1421
+ 'is--hover': !overCount && _xeUtils.default.isDateSame(datePanelValue, item.date, matchFormat)
1422
+ }],
1423
+ style: {
1424
+ width: `${100 / rows.length}%`
1425
+ },
1426
+ onClick: () => dateSelectEvent(item),
1427
+ onMouseenter: () => dateMouseenterEvent(item),
1428
+ onMouseleave: dateMouseleaveEvent
1429
+ }, [(0, _vue.h)('div', {
1430
+ class: 'vxe-date-panel--view-item-inner'
1431
+ }, renderDateLabel(item, (0, _ui.getI18n)(`vxe.input.date.quarters.q${item.quarter}`)))]);
1432
+ }));
1433
+ }))])];
1434
+ };
1435
+ const renderDateYearTable = () => {
1436
+ const {
1437
+ multiple
1438
+ } = props;
1439
+ const {
1440
+ datePanelType,
1441
+ datePanelValue
1442
+ } = reactData;
1443
+ const dateValue = computeDateValue.value;
1444
+ const yearDatas = computeYearDatas.value;
1445
+ const dateListValue = computeDateListValue.value;
1446
+ const overCount = computeOverCount.value;
1447
+ const matchFormat = 'yyyy';
1448
+ return [(0, _vue.h)('div', {
1449
+ class: ['vxe-date-panel--view-wrapper', `type--${datePanelType}`]
1450
+ }, [(0, _vue.h)('div', {
1451
+ class: 'vxe-date-panel--view-body'
1452
+ }, yearDatas.map(rows => {
1453
+ return (0, _vue.h)('div', {
1454
+ class: 'vxe-date-panel--view-row',
1455
+ style: {
1456
+ height: `${100 / yearDatas.length}%`
1457
+ }
1458
+ }, rows.map(item => {
1459
+ const isSelected = multiple ? dateListValue.some(val => _xeUtils.default.isDateSame(val, item.date, matchFormat)) : _xeUtils.default.isDateSame(dateValue, item.date, matchFormat);
1460
+ return (0, _vue.h)('div', {
1461
+ class: ['vxe-date-panel--view-item', {
1462
+ 'is--prev': item.isPrev,
1463
+ 'is--current': item.isCurrent,
1464
+ 'is--now': item.isNow,
1465
+ 'is--next': item.isNext,
1466
+ 'is--disabled': isDateDisabled(item),
1467
+ 'is--selected': isSelected,
1468
+ 'is--over': overCount && !isSelected,
1469
+ 'is--hover': !overCount && _xeUtils.default.isDateSame(datePanelValue, item.date, matchFormat)
1470
+ }],
1471
+ style: {
1472
+ width: `${100 / rows.length}%`
1473
+ },
1474
+ onClick: () => dateSelectEvent(item),
1475
+ onMouseenter: () => dateMouseenterEvent(item),
1476
+ onMouseleave: dateMouseleaveEvent
1477
+ }, [(0, _vue.h)('div', {
1478
+ class: 'vxe-date-panel--view-item-inner'
1479
+ }, renderDateLabel(item, item.year))]);
1480
+ }));
1481
+ }))])];
1482
+ };
1483
+ const renderDateTable = () => {
1484
+ const {
1485
+ datePanelType
1486
+ } = reactData;
1487
+ switch (datePanelType) {
1488
+ case 'week':
1489
+ return renderDateWeekTable();
1490
+ case 'month':
1491
+ return renderDateMonthTable();
1492
+ case 'quarter':
1493
+ return renderDateQuarterTable();
1494
+ case 'year':
1495
+ return renderDateYearTable();
1496
+ }
1497
+ return renderDateDayTable();
1498
+ };
1499
+ const renderDatePanel = () => {
1500
+ const {
1501
+ datePanelType
1502
+ } = reactData;
1503
+ const isDisabledPrevDateBtn = computeIsDisabledPrevDateBtn.value;
1504
+ const isDisabledNextDateBtn = computeIsDisabledNextDateBtn.value;
1505
+ const selectDatePanelObj = computeSelectDatePanelObj.value;
1506
+ return [(0, _vue.h)('div', {
1507
+ class: 'vxe-date-panel--picker-header'
1508
+ }, [(0, _vue.h)('div', {
1509
+ class: 'vxe-date-panel--picker-type-wrapper'
1510
+ }, [datePanelType === 'year' ? (0, _vue.h)('span', {
1511
+ class: 'vxe-date-panel--picker-label'
1512
+ }, selectDatePanelObj.y) : (0, _vue.h)('span', {
1513
+ class: 'vxe-date-panel--picker-btns'
1514
+ }, [(0, _vue.h)('span', {
1515
+ class: 'vxe-date-panel--picker-btn',
1516
+ onClick: dateToggleYearTypeEvent
1517
+ }, selectDatePanelObj.y), selectDatePanelObj.m ? (0, _vue.h)('span', {
1518
+ class: 'vxe-date-panel--picker-btn',
1519
+ onClick: dateToggleMonthTypeEvent
1520
+ }, selectDatePanelObj.m) : (0, _ui.renderEmptyElement)($xeDatePanel)])]), (0, _vue.h)('div', {
1521
+ class: 'vxe-date-panel--picker-btn-wrapper'
1522
+ }, [(0, _vue.h)('span', {
1523
+ class: ['vxe-date-panel--picker-btn vxe-date-panel--picker-prev-btn', {
1524
+ 'is--disabled': isDisabledPrevDateBtn
1525
+ }],
1526
+ onClick: datePrevEvent
1527
+ }, [(0, _vue.h)('i', {
1528
+ class: 'vxe-icon-caret-left'
1529
+ })]), (0, _vue.h)('span', {
1530
+ class: 'vxe-date-panel--picker-btn vxe-date-panel--picker-current-btn',
1531
+ onClick: dateTodayMonthEvent
1532
+ }, [(0, _vue.h)('i', {
1533
+ class: 'vxe-icon-dot'
1534
+ })]), (0, _vue.h)('span', {
1535
+ class: ['vxe-date-panel--picker-btn vxe-date-panel--picker-next-btn', {
1536
+ 'is--disabled': isDisabledNextDateBtn
1537
+ }],
1538
+ onClick: dateNextEvent
1539
+ }, [(0, _vue.h)('i', {
1540
+ class: 'vxe-icon-caret-right'
1541
+ })])])]), (0, _vue.h)('div', {
1542
+ class: 'vxe-date-panel--picker-body'
1543
+ }, renderDateTable())];
1544
+ };
1545
+ const renderTimePanel = () => {
1546
+ const {
1547
+ type
1548
+ } = props;
1549
+ const {
1550
+ datetimePanelValue
1551
+ } = reactData;
1552
+ const dateTimeLabel = computeDateTimeLabel.value;
1553
+ const hourList = computeHourList.value;
1554
+ const hasTimeMinute = computeHasTimeMinute.value;
1555
+ const minuteList = computeMinuteList.value;
1556
+ const hasTimeSecond = computeHasTimeSecond.value;
1557
+ const secondList = computeSecondList.value;
1558
+ return [type === 'time' ? (0, _ui.renderEmptyElement)($xeDatePanel) : (0, _vue.h)('div', {
1559
+ class: 'vxe-date-panel--time-header'
1560
+ }, [(0, _vue.h)('div', {
1561
+ class: 'vxe-date-panel--time-title'
1562
+ }, dateTimeLabel)]), (0, _vue.h)('div', {
1563
+ ref: refInputTimeBody,
1564
+ class: 'vxe-date-panel--time-body'
1565
+ }, [(0, _vue.h)('ul', {
1566
+ class: 'vxe-date-panel--time-hour-list'
1567
+ }, hourList.map((item, index) => {
1568
+ return (0, _vue.h)('li', {
1569
+ key: index,
1570
+ class: {
1571
+ 'is--selected': datetimePanelValue && datetimePanelValue.getHours() === item.value
1572
+ },
1573
+ onClick: evnt => dateHourEvent(evnt, item)
1574
+ }, item.label);
1575
+ })), hasTimeMinute ? (0, _vue.h)('ul', {
1576
+ class: 'vxe-date-panel--time-minute-list'
1577
+ }, minuteList.map((item, index) => {
1578
+ return (0, _vue.h)('li', {
1579
+ key: index,
1580
+ class: {
1581
+ 'is--selected': datetimePanelValue && datetimePanelValue.getMinutes() === item.value
1582
+ },
1583
+ onClick: evnt => dateMinuteEvent(evnt, item)
1584
+ }, item.label);
1585
+ })) : (0, _ui.renderEmptyElement)($xeDatePanel), hasTimeMinute && hasTimeSecond ? (0, _vue.h)('ul', {
1586
+ class: 'vxe-date-panel--time-second-list'
1587
+ }, secondList.map((item, index) => {
1588
+ return (0, _vue.h)('li', {
1589
+ key: index,
1590
+ class: {
1591
+ 'is--selected': datetimePanelValue && datetimePanelValue.getSeconds() === item.value
1592
+ },
1593
+ onClick: evnt => dateSecondEvent(evnt, item)
1594
+ }, item.label);
1595
+ })) : (0, _ui.renderEmptyElement)($xeDatePanel)])];
1596
+ };
1597
+ const renderPickerPanel = () => {
1598
+ const {
1599
+ type
1600
+ } = props;
1601
+ if (type === 'datetime') {
1602
+ return (0, _vue.h)('div', {
1603
+ key: type,
1604
+ ref: refPanelWrapper,
1605
+ class: 'vxe-date-panel--time-layout-wrapper'
1606
+ }, [(0, _vue.h)('div', {
1607
+ class: 'vxe-date-panel--time-left-wrapper'
1608
+ }, renderDatePanel()), (0, _vue.h)('div', {
1609
+ class: 'vxe-date-panel--time-right-wrapper'
1610
+ }, renderTimePanel())]);
1611
+ } else if (type === 'time') {
1612
+ return (0, _vue.h)('div', {
1613
+ key: type,
1614
+ ref: refPanelWrapper,
1615
+ class: 'vxe-date-panel--wrapper'
1616
+ }, renderTimePanel());
1617
+ }
1618
+ return (0, _vue.h)('div', {
1619
+ key: type || 'default',
1620
+ ref: refPanelWrapper,
1621
+ class: 'vxe-date-panel--wrapper'
1622
+ }, renderDatePanel());
1623
+ };
1624
+ const renderVN = () => {
1625
+ const {
1626
+ type
1627
+ } = props;
1628
+ const vSize = computeSize.value;
1629
+ return (0, _vue.h)('div', {
1630
+ class: ['vxe-date-panel', `type--${type}`, {
1631
+ [`size--${vSize}`]: vSize
1632
+ }]
1633
+ }, [renderPickerPanel()]);
1634
+ };
1635
+ (0, _vue.watch)(() => props.modelValue, val => {
1636
+ updateModelValue(val);
1637
+ changeValue();
1638
+ });
1639
+ (0, _vue.watch)(() => props.type, () => {
1640
+ // 切换类型是重置内置变量
1641
+ Object.assign(reactData, {
1642
+ inputValue: '',
1643
+ datetimePanelValue: null,
1644
+ datePanelValue: null,
1645
+ datePanelLabel: '',
1646
+ datePanelType: 'day',
1647
+ selectMonth: null,
1648
+ currentDate: null
1649
+ });
1650
+ initValue();
1651
+ });
1652
+ (0, _vue.watch)(computeDateLabelFormat, () => {
1653
+ const isDatePanelType = computeIsDatePanelType.value;
1654
+ if (isDatePanelType) {
1655
+ dateParseValue(reactData.datePanelValue);
1656
+ reactData.inputValue = props.multiple ? computeDateMultipleLabel.value : reactData.datePanelLabel;
1657
+ }
1658
+ });
1659
+ initValue();
1660
+ dateOpenPanel();
1661
+ $xeDatePanel.renderVN = renderVN;
1662
+ return $xeDatePanel;
1663
+ },
1664
+ render() {
1665
+ return this.renderVN();
1666
+ }
1667
+ });