vxe-pc-ui 4.5.35 → 4.6.0

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 (307) hide show
  1. package/es/calendar/src/calendar.js +1 -1
  2. package/es/components.js +6 -0
  3. package/es/date-panel/index.js +12 -0
  4. package/es/date-panel/src/date-panel.js +1587 -0
  5. package/es/date-panel/src/util.js +191 -0
  6. package/es/date-panel/style.css +443 -0
  7. package/es/date-panel/style.min.css +1 -0
  8. package/es/date-picker/index.js +0 -1
  9. package/es/date-picker/src/date-picker.js +274 -1663
  10. package/es/date-picker/style.css +68 -810
  11. package/es/date-picker/style.min.css +1 -1
  12. package/es/date-range-picker/index.js +12 -0
  13. package/es/date-range-picker/src/date-range-picker.js +1121 -0
  14. package/es/date-range-picker/style.css +284 -0
  15. package/es/date-range-picker/style.min.css +1 -0
  16. package/es/form/render/index.js +21 -15
  17. package/es/icon/style.css +1 -1
  18. package/es/input/src/input.js +1 -1
  19. package/es/language/ar-EG.js +1 -1
  20. package/es/language/de-DE.js +1 -1
  21. package/es/language/en-US.js +1 -1
  22. package/es/language/es-ES.js +1 -1
  23. package/es/language/fr-FR.d.ts +2 -0
  24. package/es/language/fr-FR.js +1 -1
  25. package/es/language/hu-HU.js +1 -1
  26. package/es/language/hy-AM.d.ts +2 -0
  27. package/es/language/hy-AM.js +1 -1
  28. package/es/language/id-ID.d.ts +2 -0
  29. package/es/language/id-ID.js +1 -1
  30. package/es/language/it-IT.d.ts +2 -0
  31. package/es/language/it-IT.js +1 -1
  32. package/es/language/ja-JP.js +1 -1
  33. package/es/language/ko-KR.js +1 -1
  34. package/es/language/ms-MY.d.ts +2 -0
  35. package/es/language/ms-MY.js +708 -0
  36. package/es/language/nb-NO.d.ts +2 -0
  37. package/es/language/nb-NO.js +1 -1
  38. package/es/language/pt-BR.js +1 -1
  39. package/es/language/ru-RU.js +1 -1
  40. package/es/language/th-TH.d.ts +2 -0
  41. package/es/language/th-TH.js +1 -1
  42. package/es/language/ug-CN.d.ts +2 -0
  43. package/es/language/ug-CN.js +1 -1
  44. package/es/language/uk-UA.js +1 -1
  45. package/es/language/uz-UZ.d.ts +2 -0
  46. package/es/language/uz-UZ.js +708 -0
  47. package/es/language/vi-VN.d.ts +2 -0
  48. package/es/language/vi-VN.js +1 -1
  49. package/es/language/zh-CHT.d.ts +2 -0
  50. package/es/language/zh-CHT.js +1 -1
  51. package/es/language/zh-CN.js +1 -1
  52. package/es/print/src/print.js +4 -0
  53. package/es/print/src/util.js +46 -3
  54. package/es/pulldown/style.css +15 -0
  55. package/es/pulldown/style.min.css +1 -1
  56. package/es/select/style.css +15 -0
  57. package/es/select/style.min.css +1 -1
  58. package/es/style.css +1 -1
  59. package/es/style.min.css +1 -1
  60. package/es/table-select/style.css +15 -0
  61. package/es/table-select/style.min.css +1 -1
  62. package/es/tree-select/style.css +15 -0
  63. package/es/tree-select/style.min.css +1 -1
  64. package/es/ui/index.js +31 -6
  65. package/es/ui/src/log.js +1 -1
  66. package/es/vxe-date-panel/index.js +3 -0
  67. package/es/vxe-date-panel/style.css +443 -0
  68. package/es/vxe-date-panel/style.min.css +1 -0
  69. package/es/vxe-date-picker/style.css +68 -810
  70. package/es/vxe-date-picker/style.min.css +1 -1
  71. package/es/vxe-date-range-picker/index.js +3 -0
  72. package/es/vxe-date-range-picker/style.css +284 -0
  73. package/es/vxe-date-range-picker/style.min.css +1 -0
  74. package/es/vxe-pulldown/style.css +15 -0
  75. package/es/vxe-pulldown/style.min.css +1 -1
  76. package/es/vxe-select/style.css +15 -0
  77. package/es/vxe-select/style.min.css +1 -1
  78. package/es/vxe-table-select/style.css +15 -0
  79. package/es/vxe-table-select/style.min.css +1 -1
  80. package/es/vxe-tree-select/style.css +15 -0
  81. package/es/vxe-tree-select/style.min.css +1 -1
  82. package/lib/calendar/src/calendar.js +1 -1
  83. package/lib/calendar/src/calendar.min.js +1 -1
  84. package/lib/components.js +25 -1
  85. package/lib/components.min.js +1 -1
  86. package/lib/date-panel/index.js +19 -0
  87. package/lib/date-panel/index.min.js +1 -0
  88. package/lib/date-panel/src/date-panel.js +1667 -0
  89. package/lib/date-panel/src/date-panel.min.js +1 -0
  90. package/lib/date-panel/src/util.js +219 -0
  91. package/lib/date-panel/src/util.min.js +1 -0
  92. package/lib/date-panel/style/index.js +1 -0
  93. package/lib/date-panel/style/style.css +443 -0
  94. package/lib/date-panel/style/style.min.css +1 -0
  95. package/lib/date-picker/index.js +0 -1
  96. package/lib/date-picker/index.min.js +1 -1
  97. package/lib/date-picker/src/date-picker.js +288 -1717
  98. package/lib/date-picker/src/date-picker.min.js +1 -1
  99. package/lib/date-picker/style/style.css +68 -810
  100. package/lib/date-picker/style/style.min.css +1 -1
  101. package/lib/date-range-picker/index.js +19 -0
  102. package/lib/date-range-picker/index.min.js +1 -0
  103. package/lib/date-range-picker/src/date-range-picker.js +1194 -0
  104. package/lib/date-range-picker/src/date-range-picker.min.js +1 -0
  105. package/lib/date-range-picker/style/index.js +1 -0
  106. package/lib/date-range-picker/style/style.css +284 -0
  107. package/lib/date-range-picker/style/style.min.css +1 -0
  108. package/lib/form/render/index.js +21 -15
  109. package/lib/form/render/index.min.js +1 -1
  110. package/lib/icon/style/style.css +1 -1
  111. package/lib/icon/style/style.min.css +1 -1
  112. package/lib/index.umd.js +2971 -1254
  113. package/lib/index.umd.min.js +1 -1
  114. package/lib/input/src/input.js +1 -1
  115. package/lib/input/src/input.min.js +1 -1
  116. package/lib/language/ar-EG.d.ts +2 -0
  117. package/lib/language/ar-EG.js +1 -1
  118. package/lib/language/ar-EG.min.js +1 -1
  119. package/lib/language/ar-EG.umd.js +728 -0
  120. package/lib/language/de-DE.d.ts +2 -0
  121. package/lib/language/de-DE.js +1 -1
  122. package/lib/language/de-DE.min.js +1 -1
  123. package/lib/language/de-DE.umd.js +728 -0
  124. package/lib/language/en-US.js +1 -1
  125. package/lib/language/en-US.min.js +1 -1
  126. package/lib/language/en-US.umd.js +1 -1
  127. package/lib/language/es-ES.js +1 -1
  128. package/lib/language/es-ES.min.js +1 -1
  129. package/lib/language/es-ES.umd.js +1 -1
  130. package/lib/language/fr-FR.d.ts +2 -0
  131. package/lib/language/fr-FR.js +1 -1
  132. package/lib/language/fr-FR.min.js +1 -1
  133. package/lib/language/fr-FR.umd.js +728 -0
  134. package/lib/language/hu-HU.js +1 -1
  135. package/lib/language/hu-HU.min.js +1 -1
  136. package/lib/language/hu-HU.umd.js +1 -1
  137. package/lib/language/hy-AM.d.ts +2 -0
  138. package/lib/language/hy-AM.js +1 -1
  139. package/lib/language/hy-AM.min.js +1 -1
  140. package/lib/language/hy-AM.umd.js +728 -0
  141. package/lib/language/id-ID.d.ts +2 -0
  142. package/lib/language/id-ID.js +1 -1
  143. package/lib/language/id-ID.min.js +1 -1
  144. package/lib/language/id-ID.umd.js +728 -0
  145. package/lib/language/it-IT.d.ts +2 -0
  146. package/lib/language/it-IT.js +1 -1
  147. package/lib/language/it-IT.min.js +1 -1
  148. package/lib/language/it-IT.umd.js +728 -0
  149. package/lib/language/ja-JP.js +1 -1
  150. package/lib/language/ja-JP.min.js +1 -1
  151. package/lib/language/ja-JP.umd.js +1 -1
  152. package/lib/language/ko-KR.js +1 -1
  153. package/lib/language/ko-KR.min.js +1 -1
  154. package/lib/language/ko-KR.umd.js +1 -1
  155. package/lib/language/ms-MY.d.ts +2 -0
  156. package/lib/language/ms-MY.js +714 -0
  157. package/lib/language/ms-MY.min.js +1 -0
  158. package/lib/language/ms-MY.umd.js +728 -0
  159. package/lib/language/nb-NO.d.ts +2 -0
  160. package/lib/language/nb-NO.js +1 -1
  161. package/lib/language/nb-NO.min.js +1 -1
  162. package/lib/language/nb-NO.umd.js +728 -0
  163. package/lib/language/pt-BR.js +1 -1
  164. package/lib/language/pt-BR.min.js +1 -1
  165. package/lib/language/pt-BR.umd.js +1 -1
  166. package/lib/language/ru-RU.js +1 -1
  167. package/lib/language/ru-RU.min.js +1 -1
  168. package/lib/language/ru-RU.umd.js +1 -1
  169. package/lib/language/th-TH.d.ts +2 -0
  170. package/lib/language/th-TH.js +1 -1
  171. package/lib/language/th-TH.min.js +1 -1
  172. package/lib/language/th-TH.umd.js +728 -0
  173. package/lib/language/ug-CN.d.ts +2 -0
  174. package/lib/language/ug-CN.js +1 -1
  175. package/lib/language/ug-CN.min.js +1 -1
  176. package/lib/language/ug-CN.umd.js +728 -0
  177. package/lib/language/uk-UA.js +1 -1
  178. package/lib/language/uk-UA.min.js +1 -1
  179. package/lib/language/uk-UA.umd.js +1 -1
  180. package/lib/language/uz-UZ.d.ts +2 -0
  181. package/lib/language/uz-UZ.js +714 -0
  182. package/lib/language/uz-UZ.min.js +1 -0
  183. package/lib/language/uz-UZ.umd.js +728 -0
  184. package/lib/language/vi-VN.d.ts +2 -0
  185. package/lib/language/vi-VN.js +1 -1
  186. package/lib/language/vi-VN.min.js +1 -1
  187. package/lib/language/vi-VN.umd.js +728 -0
  188. package/lib/language/zh-CHT.d.ts +2 -0
  189. package/lib/language/zh-CHT.js +1 -1
  190. package/lib/language/zh-CHT.min.js +1 -1
  191. package/lib/language/zh-CHT.umd.js +728 -0
  192. package/lib/language/zh-CN.js +1 -1
  193. package/lib/language/zh-CN.min.js +1 -1
  194. package/lib/language/zh-CN.umd.js +1 -1
  195. package/lib/language/zh-TC.min.js +1 -1
  196. package/lib/print/src/print.js +4 -0
  197. package/lib/print/src/print.min.js +1 -1
  198. package/lib/print/src/util.js +45 -2
  199. package/lib/print/src/util.min.js +1 -1
  200. package/lib/pulldown/style/style.css +15 -0
  201. package/lib/pulldown/style/style.min.css +1 -1
  202. package/lib/select/style/style.css +15 -0
  203. package/lib/select/style/style.min.css +1 -1
  204. package/lib/style.css +1 -1
  205. package/lib/style.min.css +1 -1
  206. package/lib/table-select/style/style.css +15 -0
  207. package/lib/table-select/style/style.min.css +1 -1
  208. package/lib/tree-select/style/style.css +15 -0
  209. package/lib/tree-select/style/style.min.css +1 -1
  210. package/lib/ui/index.js +31 -6
  211. package/lib/ui/index.min.js +1 -1
  212. package/lib/ui/src/log.js +1 -1
  213. package/lib/ui/src/log.min.js +1 -1
  214. package/lib/vxe-date-panel/index.js +22 -0
  215. package/lib/vxe-date-panel/index.min.js +1 -0
  216. package/lib/vxe-date-panel/style/index.js +1 -0
  217. package/lib/vxe-date-panel/style/style.css +443 -0
  218. package/lib/vxe-date-panel/style/style.min.css +1 -0
  219. package/lib/vxe-date-picker/style/style.css +68 -810
  220. package/lib/vxe-date-picker/style/style.min.css +1 -1
  221. package/lib/vxe-date-range-picker/index.js +22 -0
  222. package/lib/vxe-date-range-picker/index.min.js +1 -0
  223. package/lib/vxe-date-range-picker/style/index.js +1 -0
  224. package/lib/vxe-date-range-picker/style/style.css +284 -0
  225. package/lib/vxe-date-range-picker/style/style.min.css +1 -0
  226. package/lib/vxe-pulldown/style/style.css +15 -0
  227. package/lib/vxe-pulldown/style/style.min.css +1 -1
  228. package/lib/vxe-select/style/style.css +15 -0
  229. package/lib/vxe-select/style/style.min.css +1 -1
  230. package/lib/vxe-table-select/style/style.css +15 -0
  231. package/lib/vxe-table-select/style/style.min.css +1 -1
  232. package/lib/vxe-tree-select/style/style.css +15 -0
  233. package/lib/vxe-tree-select/style/style.min.css +1 -1
  234. package/package.json +4 -5
  235. package/packages/calendar/src/calendar.ts +10 -10
  236. package/packages/components.ts +6 -0
  237. package/packages/date-panel/index.ts +16 -0
  238. package/packages/date-panel/src/date-panel.ts +1654 -0
  239. package/packages/date-panel/src/util.ts +212 -0
  240. package/packages/date-picker/index.ts +0 -1
  241. package/packages/date-picker/src/date-picker.ts +298 -1697
  242. package/packages/date-range-picker/index.ts +16 -0
  243. package/packages/date-range-picker/src/date-range-picker.ts +1196 -0
  244. package/packages/form/render/index.ts +21 -15
  245. package/packages/input/src/input.ts +15 -15
  246. package/packages/language/ar-EG.ts +1 -1
  247. package/packages/language/de-DE.ts +1 -1
  248. package/packages/language/en-US.ts +1 -1
  249. package/packages/language/es-ES.ts +1 -1
  250. package/packages/language/fr-FR.ts +1 -1
  251. package/packages/language/hu-HU.ts +1 -1
  252. package/packages/language/hy-AM.ts +1 -1
  253. package/packages/language/id-ID.ts +1 -1
  254. package/packages/language/it-IT.ts +1 -1
  255. package/packages/language/ja-JP.ts +1 -1
  256. package/packages/language/ko-KR.ts +1 -1
  257. package/packages/language/ms-MY.ts +708 -0
  258. package/packages/language/nb-NO.ts +1 -1
  259. package/packages/language/pt-BR.ts +1 -1
  260. package/packages/language/ru-RU.ts +1 -1
  261. package/packages/language/th-TH.ts +1 -1
  262. package/packages/language/ug-CN.ts +1 -1
  263. package/packages/language/uk-UA.ts +1 -1
  264. package/packages/language/uz-UZ.ts +708 -0
  265. package/packages/language/vi-VN.ts +1 -1
  266. package/packages/language/zh-CHT.ts +1 -1
  267. package/packages/language/zh-CN.ts +1 -1
  268. package/packages/print/src/print.ts +4 -0
  269. package/packages/print/src/util.ts +47 -4
  270. package/packages/ui/index.ts +30 -5
  271. package/styles/all.scss +2 -0
  272. package/styles/components/date-panel.scss +491 -0
  273. package/styles/components/date-picker.scss +62 -652
  274. package/styles/components/date-range-picker.scss +284 -0
  275. package/styles/components/pulldown.scss +10 -0
  276. package/styles/components/select.scss +8 -0
  277. package/styles/components/table-select.scss +8 -0
  278. package/styles/components/tree-select.scss +8 -0
  279. package/styles/helpers/baseMixin.scss +13 -0
  280. package/types/all.d.ts +6 -0
  281. package/types/components/button-group.d.ts +1 -1
  282. package/types/components/date-panel.d.ts +240 -0
  283. package/types/components/date-picker.d.ts +35 -142
  284. package/types/components/date-range-picker.d.ts +267 -0
  285. package/types/components/print.d.ts +8 -0
  286. package/types/components/table-module/filter.d.ts +8 -0
  287. package/types/ui/commands.d.ts +28 -2
  288. package/types/ui/global-config.d.ts +4 -0
  289. package/es/date-picker/src/util.js +0 -41
  290. package/lib/date-picker/src/util.js +0 -46
  291. package/lib/date-picker/src/util.min.js +0 -1
  292. package/lib/language/zh-TC.umd.js +0 -23
  293. package/packages/date-picker/src/util.ts +0 -42
  294. /package/es/icon/{iconfont.1746002850171.ttf → iconfont.1746782659171.ttf} +0 -0
  295. /package/es/icon/{iconfont.1746002850171.woff → iconfont.1746782659171.woff} +0 -0
  296. /package/es/icon/{iconfont.1746002850171.woff2 → iconfont.1746782659171.woff2} +0 -0
  297. /package/es/{iconfont.1746002850171.ttf → iconfont.1746782659171.ttf} +0 -0
  298. /package/es/{iconfont.1746002850171.woff → iconfont.1746782659171.woff} +0 -0
  299. /package/es/{iconfont.1746002850171.woff2 → iconfont.1746782659171.woff2} +0 -0
  300. /package/es/language/{zh-TC.d.ts → ar-EG.d.ts} +0 -0
  301. /package/{lib/language/zh-TC.d.ts → es/language/de-DE.d.ts} +0 -0
  302. /package/lib/icon/style/{iconfont.1746002850171.ttf → iconfont.1746782659171.ttf} +0 -0
  303. /package/lib/icon/style/{iconfont.1746002850171.woff → iconfont.1746782659171.woff} +0 -0
  304. /package/lib/icon/style/{iconfont.1746002850171.woff2 → iconfont.1746782659171.woff2} +0 -0
  305. /package/lib/{iconfont.1746002850171.ttf → iconfont.1746782659171.ttf} +0 -0
  306. /package/lib/{iconfont.1746002850171.woff → iconfont.1746782659171.woff} +0 -0
  307. /package/lib/{iconfont.1746002850171.woff2 → iconfont.1746782659171.woff2} +0 -0
@@ -0,0 +1,1121 @@
1
+ import { defineComponent, h, Teleport, ref, computed, provide, reactive, inject, nextTick, watch, onDeactivated, onUnmounted, onBeforeUnmount } from 'vue';
2
+ import XEUtils from 'xe-utils';
3
+ import { getConfig, getIcon, getI18n, commands, globalEvents, createEvent, useSize, renderEmptyElement } from '../../ui';
4
+ import { getFuncText, getLastZIndex, nextZIndex, isEnableConf } from '../../ui/src/utils';
5
+ import { getAbsolutePos, getEventTargetNode } from '../../ui/src/dom';
6
+ import { parseDateString, parseDateObj, getRangeDateByCode } from '../../date-panel/src/util';
7
+ import { getSlotVNs } from '../../ui/src/vn';
8
+ import { errLog } from '../../ui/src/log';
9
+ import VxeDatePanelComponent from '../../date-panel/src/date-panel';
10
+ import VxeButtonComponent from '../../button/src/button';
11
+ import VxeButtonGroupComponent from '../../button/src/button-group';
12
+ export default defineComponent({
13
+ name: 'VxeDateRangePicker',
14
+ props: {
15
+ modelValue: [String, Number, Date, Array],
16
+ startValue: [String, Number, Date],
17
+ endValue: [String, Number, Date],
18
+ immediate: {
19
+ type: Boolean,
20
+ default: true
21
+ },
22
+ name: String,
23
+ type: {
24
+ type: String,
25
+ default: 'date'
26
+ },
27
+ clearable: {
28
+ type: Boolean,
29
+ default: () => getConfig().dateRangePicker.clearable
30
+ },
31
+ readonly: {
32
+ type: Boolean,
33
+ default: null
34
+ },
35
+ disabled: {
36
+ type: Boolean,
37
+ default: null
38
+ },
39
+ placeholder: String,
40
+ autoComplete: {
41
+ type: String,
42
+ default: 'off'
43
+ },
44
+ form: String,
45
+ className: String,
46
+ size: {
47
+ type: String,
48
+ default: () => getConfig().dateRangePicker.size || getConfig().size
49
+ },
50
+ minDate: [String, Number, Date],
51
+ maxDate: [String, Number, Date],
52
+ startDay: {
53
+ type: [String, Number],
54
+ default: () => getConfig().dateRangePicker.startDay
55
+ },
56
+ labelFormat: String,
57
+ valueFormat: String,
58
+ editable: {
59
+ type: Boolean,
60
+ default: true
61
+ },
62
+ festivalMethod: {
63
+ type: Function,
64
+ default: () => getConfig().dateRangePicker.festivalMethod
65
+ },
66
+ disabledMethod: {
67
+ type: Function,
68
+ default: () => getConfig().dateRangePicker.disabledMethod
69
+ },
70
+ separator: {
71
+ type: [String, Number],
72
+ default: () => getConfig().dateRangePicker.separator
73
+ },
74
+ // week
75
+ selectDay: {
76
+ type: [String, Number],
77
+ default: () => getConfig().dateRangePicker.selectDay
78
+ },
79
+ showClearButton: {
80
+ type: Boolean,
81
+ default: () => getConfig().dateRangePicker.showClearButton
82
+ },
83
+ showConfirmButton: {
84
+ type: Boolean,
85
+ default: () => getConfig().dateRangePicker.showConfirmButton
86
+ },
87
+ autoClose: {
88
+ type: Boolean,
89
+ default: () => getConfig().dateRangePicker.autoClose
90
+ },
91
+ prefixIcon: String,
92
+ suffixIcon: String,
93
+ placement: String,
94
+ transfer: {
95
+ type: Boolean,
96
+ default: null
97
+ },
98
+ shortcutConfig: Object
99
+ },
100
+ emits: [
101
+ 'update:modelValue',
102
+ 'update:startValue',
103
+ 'update:endValue',
104
+ 'input',
105
+ 'change',
106
+ 'keydown',
107
+ 'keyup',
108
+ 'click',
109
+ 'focus',
110
+ 'blur',
111
+ 'clear',
112
+ 'prefix-click',
113
+ 'suffix-click',
114
+ 'date-prev',
115
+ 'date-today',
116
+ 'date-next',
117
+ 'shortcut-click'
118
+ ],
119
+ setup(props, context) {
120
+ const { slots, emit } = context;
121
+ const $xeModal = inject('$xeModal', null);
122
+ const $xeDrawer = inject('$xeDrawer', null);
123
+ const $xeTable = inject('$xeTable', null);
124
+ const $xeForm = inject('$xeForm', null);
125
+ const formItemInfo = inject('xeFormItemInfo', null);
126
+ const xID = XEUtils.uniqueId();
127
+ const { computeSize } = useSize(props);
128
+ const reactData = reactive({
129
+ initialized: false,
130
+ panelIndex: 0,
131
+ visiblePanel: false,
132
+ isAniVisible: false,
133
+ panelStyle: {},
134
+ panelPlacement: '',
135
+ isActivated: false,
136
+ startValue: '',
137
+ endValue: ''
138
+ });
139
+ const internalData = {
140
+ // selectStatus: false
141
+ // hpTimeout: undefined
142
+ };
143
+ const refElem = ref();
144
+ const refInputTarget = ref();
145
+ const refInputPanel = ref();
146
+ const refPanelWrapper = ref();
147
+ const refStartDatePanel = ref();
148
+ const refEndDatePanel = ref();
149
+ const refMaps = {
150
+ refElem,
151
+ refInput: refInputTarget
152
+ };
153
+ const $xeDateRangePicker = {
154
+ xID,
155
+ props,
156
+ context,
157
+ reactData,
158
+ internalData,
159
+ getRefMaps: () => refMaps
160
+ };
161
+ let dateRangePickerMethods = {};
162
+ const computeBtnTransfer = computed(() => {
163
+ const { transfer } = props;
164
+ if (transfer === null) {
165
+ const globalTransfer = getConfig().dateRangePicker.transfer;
166
+ if (XEUtils.isBoolean(globalTransfer)) {
167
+ return globalTransfer;
168
+ }
169
+ if ($xeTable || $xeModal || $xeDrawer || $xeForm) {
170
+ return true;
171
+ }
172
+ }
173
+ return transfer;
174
+ });
175
+ const computeFormReadonly = computed(() => {
176
+ const { readonly } = props;
177
+ if (readonly === null) {
178
+ if ($xeForm) {
179
+ return $xeForm.props.readonly;
180
+ }
181
+ return false;
182
+ }
183
+ return readonly;
184
+ });
185
+ const computeIsDisabled = computed(() => {
186
+ const { disabled } = props;
187
+ if (disabled === null) {
188
+ if ($xeForm) {
189
+ return $xeForm.props.disabled;
190
+ }
191
+ return false;
192
+ }
193
+ return disabled;
194
+ });
195
+ const computeMVal = computed(() => {
196
+ const { startValue, endValue } = props;
197
+ return `${startValue || ''}${endValue || ''}`;
198
+ });
199
+ const computeIsDateTimeType = computed(() => {
200
+ const { type } = props;
201
+ return type === 'time' || type === 'datetime';
202
+ });
203
+ const computeIsDatePickerType = computed(() => {
204
+ return ['date', 'week', 'month', 'quarter', 'year'].indexOf(props.type) > -1;
205
+ });
206
+ const computeIsClearable = computed(() => {
207
+ return props.clearable;
208
+ });
209
+ const computeInpPlaceholder = computed(() => {
210
+ const { placeholder } = props;
211
+ if (placeholder) {
212
+ return getFuncText(placeholder);
213
+ }
214
+ const globalPlaceholder = getConfig().dateRangePicker.placeholder;
215
+ if (globalPlaceholder) {
216
+ return getFuncText(globalPlaceholder);
217
+ }
218
+ return getI18n('vxe.base.pleaseSelect');
219
+ });
220
+ const computeInpImmediate = computed(() => {
221
+ const { immediate } = props;
222
+ return immediate;
223
+ });
224
+ const computeShortcutOpts = computed(() => {
225
+ return Object.assign({}, getConfig().dateRangePicker.shortcutConfig, props.shortcutConfig);
226
+ });
227
+ const computeShortcutList = computed(() => {
228
+ const shortcutOpts = computeShortcutOpts.value;
229
+ const { options } = shortcutOpts;
230
+ if (options) {
231
+ return options.map((option, index) => {
232
+ return Object.assign({
233
+ name: `${option.name || option.code || index}`
234
+ }, option);
235
+ });
236
+ }
237
+ return [];
238
+ });
239
+ const computeDateLabelFormat = computed(() => {
240
+ const { labelFormat } = props;
241
+ return labelFormat || getI18n(`vxe.input.date.labelFormat.${props.type}`);
242
+ });
243
+ const computeDateValueFormat = computed(() => {
244
+ const { type, valueFormat } = props;
245
+ if (valueFormat) {
246
+ return valueFormat;
247
+ }
248
+ if (type === 'time') {
249
+ return 'HH:mm:ss';
250
+ }
251
+ if (type === 'datetime') {
252
+ return 'yyyy-MM-dd HH:mm:ss';
253
+ }
254
+ return 'yyyy-MM-dd';
255
+ });
256
+ const computeFirstDayOfWeek = computed(() => {
257
+ const { startDay } = props;
258
+ return XEUtils.toNumber(startDay);
259
+ });
260
+ const computePanelLabelObj = computed(() => {
261
+ const { startValue, endValue } = reactData;
262
+ const vals = startValue || endValue ? [startValue || '', endValue || ''] : [];
263
+ return formatRangeLabel(vals);
264
+ });
265
+ const computeInputLabel = computed(() => {
266
+ const panelLabelObj = computePanelLabelObj.value;
267
+ return panelLabelObj.label;
268
+ });
269
+ const formatRangeLabel = (vals) => {
270
+ const { type, separator } = props;
271
+ const dateLabelFormat = computeDateLabelFormat.value;
272
+ const dateValueFormat = computeDateValueFormat.value;
273
+ const firstDayOfWeek = computeFirstDayOfWeek.value;
274
+ const startRest = vals[0]
275
+ ? parseDateObj(vals[0], type, {
276
+ valueFormat: dateValueFormat,
277
+ labelFormat: dateLabelFormat,
278
+ firstDay: firstDayOfWeek
279
+ })
280
+ : null;
281
+ const endRest = vals[1]
282
+ ? parseDateObj(vals[1], type, {
283
+ valueFormat: dateValueFormat,
284
+ labelFormat: dateLabelFormat,
285
+ firstDay: firstDayOfWeek
286
+ })
287
+ : null;
288
+ const startLabel = startRest ? startRest.label : '';
289
+ const endLabel = endRest ? endRest.label : '';
290
+ return {
291
+ label: (startLabel || endLabel ? [startLabel, endLabel] : []).join(`${separator || ' ~ '}`),
292
+ startLabel,
293
+ endLabel
294
+ };
295
+ };
296
+ const getRangeValue = (sValue, eValue) => {
297
+ const { modelValue } = props;
298
+ const isArr = XEUtils.isArray(modelValue);
299
+ if (sValue || eValue) {
300
+ const rest = [sValue || '', eValue || ''];
301
+ if (isArr) {
302
+ return rest;
303
+ }
304
+ return rest.join(',');
305
+ }
306
+ return isArr ? [] : '';
307
+ };
308
+ const paraeUpdateModel = () => {
309
+ const { type, modelValue } = props;
310
+ const dateValueFormat = computeDateValueFormat.value;
311
+ let sValue = '';
312
+ let eValue = '';
313
+ if (XEUtils.isArray(modelValue)) {
314
+ const date1 = parseDateString(modelValue[0], type, { valueFormat: dateValueFormat });
315
+ const date2 = parseDateString(modelValue[1], type, { valueFormat: dateValueFormat });
316
+ if (date1 || date2) {
317
+ sValue = date1 || '';
318
+ eValue = date2 || '';
319
+ }
320
+ }
321
+ else if (XEUtils.isString(modelValue)) {
322
+ const strArr = modelValue.split(',');
323
+ if (strArr[0] || strArr[1]) {
324
+ sValue = strArr[0] || '';
325
+ eValue = strArr[1] || '';
326
+ }
327
+ }
328
+ return {
329
+ sValue,
330
+ eValue
331
+ };
332
+ };
333
+ const parseUpdateData = () => {
334
+ const { type, startValue, endValue } = props;
335
+ const dateValueFormat = computeDateValueFormat.value;
336
+ let sValue = '';
337
+ let eValue = '';
338
+ sValue = parseDateString(startValue, type, { valueFormat: dateValueFormat });
339
+ eValue = parseDateString(endValue, type, { valueFormat: dateValueFormat });
340
+ return {
341
+ sValue,
342
+ eValue
343
+ };
344
+ };
345
+ const updateModelValue = (isModel) => {
346
+ const { modelValue, startValue, endValue } = props;
347
+ let restObj = {
348
+ sValue: '',
349
+ eValue: ''
350
+ };
351
+ if (isModel) {
352
+ if (modelValue) {
353
+ restObj = paraeUpdateModel();
354
+ }
355
+ else {
356
+ restObj = parseUpdateData();
357
+ }
358
+ }
359
+ else {
360
+ if (startValue || endValue) {
361
+ restObj = parseUpdateData();
362
+ }
363
+ else {
364
+ restObj = paraeUpdateModel();
365
+ }
366
+ }
367
+ reactData.startValue = restObj.sValue;
368
+ reactData.endValue = restObj.eValue;
369
+ };
370
+ const triggerEvent = (evnt) => {
371
+ const { startValue, endValue } = reactData;
372
+ const value = getRangeValue(startValue, endValue);
373
+ dispatchEvent(evnt.type, { value, startValue, endValue }, evnt);
374
+ };
375
+ const handleChange = (sValue, eValue, evnt) => {
376
+ const { modelValue } = props;
377
+ reactData.startValue = sValue;
378
+ reactData.endValue = eValue;
379
+ const value = getRangeValue(sValue, eValue);
380
+ emit('update:modelValue', value);
381
+ emit('update:startValue', sValue || '');
382
+ emit('update:endValue', eValue || '');
383
+ if (XEUtils.toValueString(modelValue) !== value) {
384
+ dispatchEvent('change', { value }, evnt);
385
+ // 自动更新校验状态
386
+ if ($xeForm && formItemInfo) {
387
+ $xeForm.triggerItemEvent(evnt, formItemInfo.itemConfig.field, value);
388
+ }
389
+ }
390
+ };
391
+ const changeEvent = (evnt) => {
392
+ const inpImmediate = computeInpImmediate.value;
393
+ if (!inpImmediate) {
394
+ triggerEvent(evnt);
395
+ }
396
+ };
397
+ const focusEvent = (evnt) => {
398
+ reactData.isActivated = true;
399
+ dateRangePickerOpenEvent(evnt);
400
+ triggerEvent(evnt);
401
+ };
402
+ const clickPrefixEvent = (evnt) => {
403
+ const isDisabled = computeIsDisabled.value;
404
+ if (!isDisabled) {
405
+ const { startValue, endValue } = reactData;
406
+ const value = getRangeValue(startValue, endValue);
407
+ dispatchEvent('prefix-click', { value, startValue, endValue }, evnt);
408
+ }
409
+ };
410
+ const hidePanel = () => {
411
+ return new Promise(resolve => {
412
+ reactData.visiblePanel = false;
413
+ internalData.hpTimeout = setTimeout(() => {
414
+ reactData.isAniVisible = false;
415
+ resolve();
416
+ }, 350);
417
+ });
418
+ };
419
+ const clearValueEvent = (evnt, value) => {
420
+ const isDatePickerType = computeIsDatePickerType.value;
421
+ if (isDatePickerType) {
422
+ hidePanel();
423
+ }
424
+ handleChange('', '', evnt);
425
+ dispatchEvent('clear', { value }, evnt);
426
+ };
427
+ const checkValue = () => {
428
+ const $startDatePanel = refStartDatePanel.value;
429
+ const $endDatePanel = refEndDatePanel.value;
430
+ if ($startDatePanel && $endDatePanel) {
431
+ const startValue = $startDatePanel.getValue();
432
+ const endValue = $endDatePanel.getValue();
433
+ if (!startValue || !endValue) {
434
+ handleChange('', '', { type: 'check' });
435
+ }
436
+ }
437
+ };
438
+ const handleSelectClose = () => {
439
+ const { autoClose } = props;
440
+ const { startValue, endValue } = reactData;
441
+ const { selectStatus } = internalData;
442
+ const isDatePickerType = computeIsDatePickerType.value;
443
+ if (autoClose) {
444
+ if (selectStatus && isDatePickerType) {
445
+ if (startValue && endValue) {
446
+ hidePanel();
447
+ }
448
+ }
449
+ }
450
+ else {
451
+ if (startValue && endValue) {
452
+ internalData.selectStatus = false;
453
+ }
454
+ }
455
+ };
456
+ const clickSuffixEvent = (evnt) => {
457
+ const isDisabled = computeIsDisabled.value;
458
+ if (!isDisabled) {
459
+ const { startValue, endValue } = reactData;
460
+ const value = getRangeValue(startValue, endValue);
461
+ dispatchEvent('suffix-click', { value, startValue, endValue }, evnt);
462
+ }
463
+ };
464
+ const blurEvent = (evnt) => {
465
+ const { startValue, endValue } = reactData;
466
+ const inpImmediate = computeInpImmediate.value;
467
+ const value = '';
468
+ if (!inpImmediate) {
469
+ handleChange(startValue, endValue, evnt);
470
+ }
471
+ if (!reactData.visiblePanel) {
472
+ reactData.isActivated = false;
473
+ }
474
+ dispatchEvent('blur', { value, startValue, endValue }, evnt);
475
+ // 自动更新校验状态
476
+ if ($xeForm && formItemInfo) {
477
+ $xeForm.triggerItemEvent(evnt, formItemInfo.itemConfig.field, value);
478
+ }
479
+ };
480
+ const keydownEvent = (evnt) => {
481
+ triggerEvent(evnt);
482
+ };
483
+ const keyupEvent = (evnt) => {
484
+ triggerEvent(evnt);
485
+ };
486
+ const confirmEvent = (evnt) => {
487
+ const $startDatePanel = refStartDatePanel.value;
488
+ const $endDatePanel = refEndDatePanel.value;
489
+ if ($startDatePanel && $endDatePanel) {
490
+ const startValue = $startDatePanel.getValue();
491
+ const endValue = $endDatePanel.getValue();
492
+ if (startValue && endValue) {
493
+ $startDatePanel.confirmByEvent(evnt);
494
+ $endDatePanel.confirmByEvent(evnt);
495
+ }
496
+ else {
497
+ handleChange('', '', evnt);
498
+ }
499
+ }
500
+ hidePanel();
501
+ };
502
+ const startPanelChangeEvent = (params) => {
503
+ const { selectStatus } = internalData;
504
+ const { value, $event } = params;
505
+ const endValue = selectStatus ? reactData.endValue : '';
506
+ handleChange(value, endValue, $event);
507
+ handleSelectClose();
508
+ if (!selectStatus) {
509
+ internalData.selectStatus = true;
510
+ }
511
+ nextTick(() => {
512
+ const $startDatePanel = refStartDatePanel.value;
513
+ const $endDatePanel = refEndDatePanel.value;
514
+ if ($startDatePanel && $endDatePanel) {
515
+ const startValue = $startDatePanel.getValue();
516
+ if (!endValue && startValue) {
517
+ $endDatePanel.setPanelDate(XEUtils.toStringDate(startValue));
518
+ }
519
+ }
520
+ });
521
+ };
522
+ const endPanelChangeEvent = (params) => {
523
+ const { selectStatus } = internalData;
524
+ const { value, $event } = params;
525
+ const startValue = selectStatus ? reactData.startValue : '';
526
+ handleChange(startValue, value, $event);
527
+ handleSelectClose();
528
+ if (!selectStatus) {
529
+ internalData.selectStatus = true;
530
+ }
531
+ nextTick(() => {
532
+ const $startDatePanel = refStartDatePanel.value;
533
+ const $endDatePanel = refEndDatePanel.value;
534
+ if ($startDatePanel && $endDatePanel) {
535
+ const endValue = $endDatePanel.getValue();
536
+ if (!startValue && endValue) {
537
+ $startDatePanel.setPanelDate(XEUtils.toStringDate(endValue));
538
+ }
539
+ }
540
+ });
541
+ };
542
+ // 全局事件
543
+ const handleGlobalMousedownEvent = (evnt) => {
544
+ const { visiblePanel, isActivated } = reactData;
545
+ const el = refElem.value;
546
+ const panelWrapperElem = refPanelWrapper.value;
547
+ const isDisabled = computeIsDisabled.value;
548
+ if (!isDisabled && isActivated) {
549
+ reactData.isActivated = getEventTargetNode(evnt, el).flag || getEventTargetNode(evnt, panelWrapperElem).flag;
550
+ if (!reactData.isActivated) {
551
+ if (visiblePanel) {
552
+ checkValue();
553
+ hidePanel();
554
+ }
555
+ }
556
+ }
557
+ };
558
+ const handleGlobalMousewheelEvent = (evnt) => {
559
+ const { visiblePanel } = reactData;
560
+ const isDisabled = computeIsDisabled.value;
561
+ if (!isDisabled) {
562
+ if (visiblePanel) {
563
+ const panelWrapperElem = refPanelWrapper.value;
564
+ if (getEventTargetNode(evnt, panelWrapperElem).flag) {
565
+ updatePlacement();
566
+ }
567
+ else {
568
+ hidePanel();
569
+ }
570
+ }
571
+ }
572
+ };
573
+ const handleGlobalBlurEvent = () => {
574
+ const { visiblePanel } = reactData;
575
+ if (visiblePanel) {
576
+ hidePanel();
577
+ }
578
+ };
579
+ // 弹出面板
580
+ const updateZindex = () => {
581
+ if (reactData.panelIndex < getLastZIndex()) {
582
+ reactData.panelIndex = nextZIndex();
583
+ }
584
+ };
585
+ const updatePlacement = () => {
586
+ return nextTick().then(() => {
587
+ const { placement } = props;
588
+ const { panelIndex } = reactData;
589
+ const targetElem = refInputTarget.value;
590
+ const panelElem = refInputPanel.value;
591
+ const btnTransfer = computeBtnTransfer.value;
592
+ if (targetElem && panelElem) {
593
+ const targetHeight = targetElem.offsetHeight;
594
+ const targetWidth = targetElem.offsetWidth;
595
+ const panelHeight = panelElem.offsetHeight;
596
+ const panelWidth = panelElem.offsetWidth;
597
+ const marginSize = 5;
598
+ const panelStyle = {
599
+ zIndex: panelIndex
600
+ };
601
+ const { boundingTop, boundingLeft, visibleHeight, visibleWidth } = getAbsolutePos(targetElem);
602
+ let panelPlacement = 'bottom';
603
+ if (btnTransfer) {
604
+ let left = boundingLeft;
605
+ let top = boundingTop + targetHeight;
606
+ if (placement === 'top') {
607
+ panelPlacement = 'top';
608
+ top = boundingTop - panelHeight;
609
+ }
610
+ else if (!placement) {
611
+ // 如果下面不够放,则向上
612
+ if (top + panelHeight + marginSize > visibleHeight) {
613
+ panelPlacement = 'top';
614
+ top = boundingTop - panelHeight;
615
+ }
616
+ // 如果上面不够放,则向下(优先)
617
+ if (top < marginSize) {
618
+ panelPlacement = 'bottom';
619
+ top = boundingTop + targetHeight;
620
+ }
621
+ }
622
+ // 如果溢出右边
623
+ if (left + panelWidth + marginSize > visibleWidth) {
624
+ left -= left + panelWidth + marginSize - visibleWidth;
625
+ }
626
+ // 如果溢出左边
627
+ if (left < marginSize) {
628
+ left = marginSize;
629
+ }
630
+ Object.assign(panelStyle, {
631
+ left: `${left}px`,
632
+ top: `${top}px`,
633
+ minWidth: `${targetWidth}px`
634
+ });
635
+ }
636
+ else {
637
+ if (placement === 'top') {
638
+ panelPlacement = 'top';
639
+ panelStyle.bottom = `${targetHeight}px`;
640
+ }
641
+ else if (!placement) {
642
+ // 如果下面不够放,则向上
643
+ panelStyle.top = `${targetHeight}px`;
644
+ if (boundingTop + targetHeight + panelHeight > visibleHeight) {
645
+ // 如果上面不够放,则向下(优先)
646
+ if (boundingTop - targetHeight - panelHeight > marginSize) {
647
+ panelPlacement = 'top';
648
+ panelStyle.top = '';
649
+ panelStyle.bottom = `${targetHeight}px`;
650
+ }
651
+ }
652
+ }
653
+ }
654
+ reactData.panelStyle = panelStyle;
655
+ reactData.panelPlacement = panelPlacement;
656
+ return nextTick();
657
+ }
658
+ });
659
+ };
660
+ const showPanel = () => {
661
+ const { visiblePanel } = reactData;
662
+ const isDisabled = computeIsDisabled.value;
663
+ if (!isDisabled && !visiblePanel) {
664
+ if (!reactData.initialized) {
665
+ reactData.initialized = true;
666
+ }
667
+ if (internalData.hpTimeout) {
668
+ clearTimeout(internalData.hpTimeout);
669
+ internalData.hpTimeout = undefined;
670
+ }
671
+ internalData.selectStatus = false;
672
+ reactData.isActivated = true;
673
+ reactData.isAniVisible = true;
674
+ setTimeout(() => {
675
+ reactData.visiblePanel = true;
676
+ }, 10);
677
+ updateZindex();
678
+ return updatePlacement();
679
+ }
680
+ return nextTick();
681
+ };
682
+ const dateRangePickerOpenEvent = (evnt) => {
683
+ const formReadonly = computeFormReadonly.value;
684
+ if (!formReadonly) {
685
+ evnt.preventDefault();
686
+ showPanel();
687
+ }
688
+ };
689
+ const clickEvent = (evnt) => {
690
+ triggerEvent(evnt);
691
+ };
692
+ const handleShortcutEvent = ({ option, $event }) => {
693
+ const { type } = props;
694
+ const shortcutOpts = computeShortcutOpts.value;
695
+ const { autoClose } = shortcutOpts;
696
+ const { code, clickMethod } = option;
697
+ let startValue = reactData.startValue;
698
+ let endValue = reactData.endValue;
699
+ let value = getRangeValue(startValue, endValue);
700
+ const shortcutParams = {
701
+ $dateRangePicker: $xeDateRangePicker,
702
+ option: option,
703
+ value,
704
+ startValue,
705
+ endValue,
706
+ code
707
+ };
708
+ if (!clickMethod && code) {
709
+ const gCommandOpts = commands.get(code);
710
+ const drpCommandMethod = gCommandOpts ? gCommandOpts.dateRangePickerCommandMethod : null;
711
+ if (drpCommandMethod) {
712
+ drpCommandMethod(shortcutParams);
713
+ }
714
+ else {
715
+ const dateValueFormat = computeDateValueFormat.value;
716
+ const firstDayOfWeek = computeFirstDayOfWeek.value;
717
+ switch (code) {
718
+ case 'last1':
719
+ case 'last3':
720
+ case 'last7':
721
+ case 'last30':
722
+ case 'last60':
723
+ case 'last90':
724
+ case 'last180': {
725
+ const restObj = getRangeDateByCode(code, value, type, {
726
+ valueFormat: dateValueFormat,
727
+ firstDay: firstDayOfWeek
728
+ });
729
+ startValue = restObj.startValue;
730
+ endValue = restObj.endValue;
731
+ value = getRangeValue(startValue, endValue);
732
+ shortcutParams.value = value;
733
+ shortcutParams.startValue = startValue;
734
+ shortcutParams.endValue = endValue;
735
+ handleChange(startValue, endValue, $event);
736
+ break;
737
+ }
738
+ default:
739
+ errLog('vxe.error.notCommands', [code]);
740
+ break;
741
+ }
742
+ }
743
+ }
744
+ else {
745
+ const optClickMethod = clickMethod || shortcutOpts.clickMethod;
746
+ if (optClickMethod) {
747
+ optClickMethod(shortcutParams);
748
+ }
749
+ }
750
+ if (autoClose) {
751
+ hidePanel();
752
+ }
753
+ dispatchEvent('shortcut-click', shortcutParams, $event);
754
+ };
755
+ const dispatchEvent = (type, params, evnt) => {
756
+ emit(type, createEvent(evnt, { $dateRangePicker: $xeDateRangePicker }, params));
757
+ };
758
+ dateRangePickerMethods = {
759
+ dispatchEvent,
760
+ setModelValue(startValue, endValue) {
761
+ reactData.startValue = startValue || '';
762
+ reactData.endValue = endValue || '';
763
+ const value = getRangeValue(startValue, endValue);
764
+ emit('update:modelValue', value);
765
+ },
766
+ setModelValueByEvent(evnt, startValue, endValue) {
767
+ handleChange(startValue || '', endValue || '', evnt);
768
+ },
769
+ focus() {
770
+ const inputElem = refInputTarget.value;
771
+ reactData.isActivated = true;
772
+ inputElem.focus();
773
+ return nextTick();
774
+ },
775
+ blur() {
776
+ const inputElem = refInputTarget.value;
777
+ inputElem.blur();
778
+ reactData.isActivated = false;
779
+ return nextTick();
780
+ },
781
+ select() {
782
+ const inputElem = refInputTarget.value;
783
+ inputElem.select();
784
+ reactData.isActivated = false;
785
+ return nextTick();
786
+ },
787
+ showPanel,
788
+ hidePanel,
789
+ updatePlacement
790
+ };
791
+ Object.assign($xeDateRangePicker, dateRangePickerMethods);
792
+ const renderShortcutBtn = (pos, isVertical) => {
793
+ const shortcutOpts = computeShortcutOpts.value;
794
+ const { position, align, mode } = shortcutOpts;
795
+ const shortcutList = computeShortcutList.value;
796
+ if (isEnableConf(shortcutOpts) && shortcutList.length && (position || 'left') === pos) {
797
+ return h('div', {
798
+ class: `vxe-date-range-picker--layout-${pos}-wrapper`
799
+ }, [
800
+ h(VxeButtonGroupComponent, {
801
+ options: shortcutList,
802
+ mode,
803
+ align,
804
+ vertical: isVertical,
805
+ onClick: handleShortcutEvent
806
+ })
807
+ ]);
808
+ }
809
+ return renderEmptyElement($xeDateRangePicker);
810
+ };
811
+ const renderPanel = () => {
812
+ const { type, separator, autoClose, showConfirmButton, showClearButton } = props;
813
+ const { initialized, isAniVisible, visiblePanel, panelPlacement, panelStyle, startValue, endValue } = reactData;
814
+ const vSize = computeSize.value;
815
+ const btnTransfer = computeBtnTransfer.value;
816
+ const shortcutOpts = computeShortcutOpts.value;
817
+ const isClearable = computeIsClearable.value;
818
+ const panelLabelObj = computePanelLabelObj.value;
819
+ const shortcutList = computeShortcutList.value;
820
+ const isDateTimeType = computeIsDateTimeType.value;
821
+ const { startLabel, endLabel } = panelLabelObj;
822
+ const { position } = shortcutOpts;
823
+ const headerSlot = slots.header;
824
+ const footerSlot = slots.footer;
825
+ const topSlot = slots.top;
826
+ const bottomSlot = slots.bottom;
827
+ const leftSlot = slots.left;
828
+ const rightSlot = slots.right;
829
+ const hasShortcutBtn = shortcutList.length > 0;
830
+ const showConfirmBtn = (showConfirmButton === null ? (isDateTimeType || !autoClose) : showConfirmButton);
831
+ const showClearBtn = (showClearButton === null ? isClearable : showClearButton);
832
+ return h(Teleport, {
833
+ to: 'body',
834
+ disabled: btnTransfer ? !initialized : true
835
+ }, [
836
+ h('div', {
837
+ ref: refInputPanel,
838
+ class: ['vxe-table--ignore-clear vxe-date-range-picker--panel', `type--${type}`, {
839
+ [`size--${vSize}`]: vSize,
840
+ 'is--transfer': btnTransfer,
841
+ 'ani--leave': isAniVisible,
842
+ 'ani--enter': visiblePanel,
843
+ 'show--top': !!(topSlot || headerSlot || (hasShortcutBtn && (position === 'top' || position === 'header'))),
844
+ 'show--bottom': !!(bottomSlot || footerSlot || (hasShortcutBtn && (position === 'bottom' || position === 'footer'))),
845
+ 'show--left': !!(leftSlot || (hasShortcutBtn && position === 'left')),
846
+ 'show--right': !!(rightSlot || (hasShortcutBtn && position === 'right'))
847
+ }],
848
+ placement: panelPlacement,
849
+ style: panelStyle
850
+ }, initialized && (visiblePanel || isAniVisible)
851
+ ? [
852
+ h('div', {
853
+ ref: refPanelWrapper,
854
+ class: ['vxe-date-range-picker--layout-all-wrapper', `type--${type}`, {
855
+ [`size--${vSize}`]: vSize
856
+ }]
857
+ }, [
858
+ topSlot
859
+ ? h('div', {
860
+ class: 'vxe-date-range-picker--layout-top-wrapper'
861
+ }, topSlot({}))
862
+ : renderShortcutBtn('top'),
863
+ h('div', {
864
+ class: 'vxe-date-range-picker--layout-body-layout-wrapper'
865
+ }, [
866
+ leftSlot
867
+ ? h('div', {
868
+ class: 'vxe-date-range-picker--layout-left-wrapper'
869
+ }, leftSlot({}))
870
+ : renderShortcutBtn('left', true),
871
+ h('div', {
872
+ class: 'vxe-date-range-picker--layout-body-content-wrapper'
873
+ }, [
874
+ headerSlot
875
+ ? h('div', {
876
+ class: 'vxe-date-range-picker--layout-header-wrapper'
877
+ }, headerSlot({}))
878
+ : renderShortcutBtn('header'),
879
+ h('div', {
880
+ class: 'vxe-date-range-picker--layout-body-wrapper'
881
+ }, [
882
+ h(VxeDatePanelComponent, {
883
+ ref: refStartDatePanel,
884
+ modelValue: startValue,
885
+ type: props.type,
886
+ className: props.className,
887
+ minDate: props.minDate,
888
+ maxDate: props.maxDate,
889
+ startDay: props.startDay,
890
+ endDate: endValue,
891
+ labelFormat: props.labelFormat,
892
+ valueFormat: props.valueFormat,
893
+ festivalMethod: props.festivalMethod,
894
+ disabledMethod: props.disabledMethod,
895
+ selectDay: props.selectDay,
896
+ onChange: startPanelChangeEvent
897
+ }),
898
+ h(VxeDatePanelComponent, {
899
+ ref: refEndDatePanel,
900
+ modelValue: endValue,
901
+ type: props.type,
902
+ className: props.className,
903
+ minDate: props.minDate,
904
+ maxDate: props.maxDate,
905
+ startDay: props.startDay,
906
+ startDate: startValue,
907
+ labelFormat: props.labelFormat,
908
+ valueFormat: props.valueFormat,
909
+ festivalMethod: props.festivalMethod,
910
+ disabledMethod: props.disabledMethod,
911
+ selectDay: props.selectDay,
912
+ onChange: endPanelChangeEvent
913
+ })
914
+ ]),
915
+ h('div', {
916
+ class: 'vxe-date-range-picker--layout-footer-wrapper'
917
+ }, [
918
+ h('div', {
919
+ class: 'vxe-date-range-picker--layout-footer-label'
920
+ }, startLabel || endLabel
921
+ ? [
922
+ h('span', startLabel),
923
+ h('span', `${separator || ''}`),
924
+ h('span', endLabel)
925
+ ]
926
+ : []),
927
+ h('div', {
928
+ class: 'vxe-date-range-picker--layout-footer-custom'
929
+ }, footerSlot ? footerSlot({}) : [renderShortcutBtn('footer')]),
930
+ h('div', {
931
+ class: 'vxe-date-range-picker--layout-footer-btns'
932
+ }, [
933
+ showClearBtn
934
+ ? h(VxeButtonComponent, {
935
+ size: 'mini',
936
+ disabled: !(startValue || endValue),
937
+ content: getI18n('vxe.button.clear'),
938
+ onClick: clearValueEvent
939
+ })
940
+ : renderEmptyElement($xeDateRangePicker),
941
+ showConfirmBtn
942
+ ? h(VxeButtonComponent, {
943
+ size: 'mini',
944
+ status: 'primary',
945
+ content: getI18n('vxe.button.confirm'),
946
+ onClick: confirmEvent
947
+ })
948
+ : renderEmptyElement($xeDateRangePicker)
949
+ ])
950
+ ])
951
+ ]),
952
+ rightSlot
953
+ ? h('div', {
954
+ class: 'vxe-date-range-picker--layout-right-wrapper'
955
+ }, rightSlot({}))
956
+ : renderShortcutBtn('right', true)
957
+ ]),
958
+ bottomSlot
959
+ ? h('div', {
960
+ class: 'vxe-date-range-picker--layout-bottom-wrapper'
961
+ }, bottomSlot({}))
962
+ : renderShortcutBtn('bottom')
963
+ ])
964
+ ]
965
+ : [])
966
+ ]);
967
+ };
968
+ const renderPrefixIcon = () => {
969
+ const { prefixIcon } = props;
970
+ const prefixSlot = slots.prefix;
971
+ return prefixSlot || prefixIcon
972
+ ? h('div', {
973
+ class: 'vxe-date-range-picker--prefix',
974
+ onClick: clickPrefixEvent
975
+ }, [
976
+ h('div', {
977
+ class: 'vxe-date-range-picker--prefix-icon'
978
+ }, prefixSlot
979
+ ? getSlotVNs(prefixSlot({}))
980
+ : [
981
+ h('i', {
982
+ class: prefixIcon
983
+ })
984
+ ])
985
+ ])
986
+ : null;
987
+ };
988
+ const renderSuffixIcon = () => {
989
+ const { suffixIcon } = props;
990
+ const { startValue, endValue } = reactData;
991
+ const suffixSlot = slots.suffix;
992
+ const isDisabled = computeIsDisabled.value;
993
+ const isClearable = computeIsClearable.value;
994
+ return h('div', {
995
+ class: ['vxe-date-range-picker--suffix', {
996
+ 'is--clear': isClearable && !isDisabled && (startValue || endValue)
997
+ }]
998
+ }, [
999
+ isClearable
1000
+ ? h('div', {
1001
+ class: 'vxe-date-range-picker--clear-icon',
1002
+ onClick: clearValueEvent
1003
+ }, [
1004
+ h('i', {
1005
+ class: getIcon().INPUT_CLEAR
1006
+ })
1007
+ ])
1008
+ : renderEmptyElement($xeDateRangePicker),
1009
+ renderExtraSuffixIcon(),
1010
+ suffixSlot || suffixIcon
1011
+ ? h('div', {
1012
+ class: 'vxe-date-range-picker--suffix-icon',
1013
+ onClick: clickSuffixEvent
1014
+ }, suffixSlot
1015
+ ? getSlotVNs(suffixSlot({}))
1016
+ : [
1017
+ h('i', {
1018
+ class: suffixIcon
1019
+ })
1020
+ ])
1021
+ : renderEmptyElement($xeDateRangePicker)
1022
+ ]);
1023
+ };
1024
+ const renderExtraSuffixIcon = () => {
1025
+ return h('div', {
1026
+ class: 'vxe-date-range-picker--control-icon',
1027
+ onClick: dateRangePickerOpenEvent
1028
+ }, [
1029
+ h('i', {
1030
+ class: ['vxe-date-range-picker--date-picker-icon', getIcon().DATE_PICKER_DATE]
1031
+ })
1032
+ ]);
1033
+ };
1034
+ const renderVN = () => {
1035
+ const { className, type, name, autoComplete } = props;
1036
+ const { startValue, endValue, visiblePanel, isActivated } = reactData;
1037
+ const vSize = computeSize.value;
1038
+ const isDisabled = computeIsDisabled.value;
1039
+ const formReadonly = computeFormReadonly.value;
1040
+ const inputLabel = computeInputLabel.value;
1041
+ if (formReadonly) {
1042
+ return h('div', {
1043
+ ref: refElem,
1044
+ class: ['vxe-date-range-picker--readonly', `type--${type}`, className]
1045
+ }, inputLabel);
1046
+ }
1047
+ const inpPlaceholder = computeInpPlaceholder.value;
1048
+ const isClearable = computeIsClearable.value;
1049
+ const prefix = renderPrefixIcon();
1050
+ const suffix = renderSuffixIcon();
1051
+ return h('div', {
1052
+ ref: refElem,
1053
+ class: ['vxe-date-range-picker', `type--${type}`, className, {
1054
+ [`size--${vSize}`]: vSize,
1055
+ 'is--prefix': !!prefix,
1056
+ 'is--suffix': !!suffix,
1057
+ 'is--visible': visiblePanel,
1058
+ 'is--disabled': isDisabled,
1059
+ 'is--active': isActivated,
1060
+ 'show--clear': isClearable && !isDisabled && (startValue || endValue)
1061
+ }],
1062
+ spellcheck: false
1063
+ }, [
1064
+ prefix || renderEmptyElement($xeDateRangePicker),
1065
+ h('div', {
1066
+ class: 'vxe-date-range-picker--wrapper'
1067
+ }, [
1068
+ h('input', {
1069
+ ref: refInputTarget,
1070
+ class: 'vxe-date-range-picker--inner',
1071
+ value: inputLabel,
1072
+ name,
1073
+ type: 'text',
1074
+ placeholder: inpPlaceholder,
1075
+ readonly: true,
1076
+ disabled: isDisabled,
1077
+ autocomplete: autoComplete,
1078
+ onKeydown: keydownEvent,
1079
+ onKeyup: keyupEvent,
1080
+ onClick: clickEvent,
1081
+ onChange: changeEvent,
1082
+ onFocus: focusEvent,
1083
+ onBlur: blurEvent
1084
+ })
1085
+ ]),
1086
+ suffix || renderEmptyElement($xeDateRangePicker),
1087
+ // 下拉面板
1088
+ renderPanel()
1089
+ ]);
1090
+ };
1091
+ watch(() => props.modelValue, () => {
1092
+ updateModelValue(true);
1093
+ });
1094
+ watch(computeMVal, () => {
1095
+ updateModelValue(false);
1096
+ });
1097
+ updateModelValue(true);
1098
+ nextTick(() => {
1099
+ globalEvents.on($xeDateRangePicker, 'mousewheel', handleGlobalMousewheelEvent);
1100
+ globalEvents.on($xeDateRangePicker, 'mousedown', handleGlobalMousedownEvent);
1101
+ globalEvents.on($xeDateRangePicker, 'blur', handleGlobalBlurEvent);
1102
+ });
1103
+ onDeactivated(() => {
1104
+ checkValue();
1105
+ });
1106
+ onUnmounted(() => {
1107
+ globalEvents.off($xeDateRangePicker, 'mousewheel');
1108
+ globalEvents.off($xeDateRangePicker, 'mousedown');
1109
+ globalEvents.off($xeDateRangePicker, 'blur');
1110
+ });
1111
+ onBeforeUnmount(() => {
1112
+ checkValue();
1113
+ });
1114
+ provide('$xeDateRangePicker', $xeDateRangePicker);
1115
+ $xeDateRangePicker.renderVN = renderVN;
1116
+ return $xeDateRangePicker;
1117
+ },
1118
+ render() {
1119
+ return this.renderVN();
1120
+ }
1121
+ });