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
@@ -9,8 +9,11 @@ var _xeUtils = _interopRequireDefault(require("xe-utils"));
9
9
  var _ui = require("../../ui");
10
10
  var _utils = require("../../ui/src/utils");
11
11
  var _dom = require("../../ui/src/dom");
12
- var _util = require("./util");
13
12
  var _vn = require("../../ui/src/vn");
13
+ var _util = require("../../date-panel/src/util");
14
+ var _log = require("../../ui/src/log");
15
+ var _datePanel = _interopRequireDefault(require("../../date-panel/src/date-panel"));
16
+ var _button = _interopRequireDefault(require("../../button/src/button"));
14
17
  var _buttonGroup = _interopRequireDefault(require("../../button/src/button-group"));
15
18
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
16
19
  var _default = exports.default = (0, _vue.defineComponent)({
@@ -39,12 +42,10 @@ var _default = exports.default = (0, _vue.defineComponent)({
39
42
  default: null
40
43
  },
41
44
  placeholder: String,
42
- maxLength: [String, Number],
43
45
  autoComplete: {
44
46
  type: String,
45
47
  default: 'off'
46
48
  },
47
- align: String,
48
49
  form: String,
49
50
  className: String,
50
51
  size: {
@@ -90,6 +91,18 @@ var _default = exports.default = (0, _vue.defineComponent)({
90
91
  type: [String, Number],
91
92
  default: () => (0, _ui.getConfig)().datePicker.selectDay
92
93
  },
94
+ showClearButton: {
95
+ type: Boolean,
96
+ default: () => (0, _ui.getConfig)().datePicker.showClearButton
97
+ },
98
+ showConfirmButton: {
99
+ type: Boolean,
100
+ default: () => (0, _ui.getConfig)().datePicker.showConfirmButton
101
+ },
102
+ autoClose: {
103
+ type: Boolean,
104
+ default: () => (0, _ui.getConfig)().datePicker.autoClose
105
+ },
93
106
  prefixIcon: String,
94
107
  suffixIcon: String,
95
108
  placement: String,
@@ -99,11 +112,7 @@ var _default = exports.default = (0, _vue.defineComponent)({
99
112
  },
100
113
  shortcutConfig: Object,
101
114
  // 已废弃 startWeek,被 startDay 替换
102
- startWeek: Number,
103
- // 已废弃
104
- maxlength: [String, Number],
105
- // 已废弃
106
- autocomplete: String
115
+ startWeek: Number
107
116
  },
108
117
  emits: ['update:modelValue', 'input', 'change', 'keydown', 'keyup', 'click', 'focus', 'blur', 'clear', 'prefix-click', 'suffix-click', 'date-prev', 'date-today', 'date-next', 'shortcut-click'],
109
118
  setup(props, context) {
@@ -129,24 +138,16 @@ var _default = exports.default = (0, _vue.defineComponent)({
129
138
  panelPlacement: '',
130
139
  isActivated: false,
131
140
  inputValue: '',
132
- datetimePanelValue: null,
133
- datePanelValue: null,
134
- datePanelLabel: '',
135
- datePanelType: 'day',
136
- selectMonth: null,
137
- currentDate: null
141
+ inputLabel: ''
138
142
  });
139
143
  const internalData = {
140
- yearSize: 12,
141
- monthSize: 20,
142
- quarterSize: 8,
143
144
  hpTimeout: undefined
144
145
  };
145
146
  const refElem = (0, _vue.ref)();
146
147
  const refInputTarget = (0, _vue.ref)();
147
148
  const refInputPanel = (0, _vue.ref)();
148
149
  const refPanelWrapper = (0, _vue.ref)();
149
- const refInputTimeBody = (0, _vue.ref)();
150
+ const refDatePanel = (0, _vue.ref)();
150
151
  const refMaps = {
151
152
  refElem,
152
153
  refInput: refInputTarget
@@ -159,7 +160,6 @@ var _default = exports.default = (0, _vue.defineComponent)({
159
160
  internalData,
160
161
  getRefMaps: () => refMaps
161
162
  };
162
- let datePickerMethods = {};
163
163
  const computeBtnTransfer = (0, _vue.computed)(() => {
164
164
  const {
165
165
  transfer
@@ -212,56 +212,56 @@ var _default = exports.default = (0, _vue.defineComponent)({
212
212
  const computeIsClearable = (0, _vue.computed)(() => {
213
213
  return props.clearable;
214
214
  });
215
- const computeDateStartTime = (0, _vue.computed)(() => {
216
- return props.startDate ? _xeUtils.default.toStringDate(props.startDate) : null;
217
- });
218
- const computeDateEndTime = (0, _vue.computed)(() => {
219
- return props.endDate ? _xeUtils.default.toStringDate(props.endDate) : null;
220
- });
221
- const computeSupportMultiples = (0, _vue.computed)(() => {
222
- return ['date', 'week', 'month', 'quarter', 'year'].indexOf(props.type) > -1;
223
- });
224
- const computeDateListValue = (0, _vue.computed)(() => {
215
+ const computeInputReadonly = (0, _vue.computed)(() => {
225
216
  const {
226
- modelValue,
217
+ type,
218
+ editable,
227
219
  multiple
228
220
  } = props;
229
- const isDatePickerType = computeIsDatePickerType.value;
230
- const dateValueFormat = computeDateValueFormat.value;
231
- if (multiple && modelValue && isDatePickerType) {
232
- return _xeUtils.default.toValueString(modelValue).split(',').map(item => {
233
- const date = parseDate(item, dateValueFormat);
234
- if (_xeUtils.default.isValidDate(date)) {
235
- return date;
236
- }
237
- return date;
238
- });
221
+ const formReadonly = computeFormReadonly.value;
222
+ return formReadonly || multiple || !editable || type === 'week' || type === 'quarter';
223
+ });
224
+ const computeInpPlaceholder = (0, _vue.computed)(() => {
225
+ const {
226
+ placeholder
227
+ } = props;
228
+ if (placeholder) {
229
+ return (0, _utils.getFuncText)(placeholder);
239
230
  }
240
- return [];
231
+ const globalPlaceholder = (0, _ui.getConfig)().datePicker.placeholder;
232
+ if (globalPlaceholder) {
233
+ return (0, _utils.getFuncText)(globalPlaceholder);
234
+ }
235
+ return (0, _ui.getI18n)('vxe.base.pleaseSelect');
241
236
  });
242
- const computeDateMultipleValue = (0, _vue.computed)(() => {
243
- const dateListValue = computeDateListValue.value;
244
- const dateValueFormat = computeDateValueFormat.value;
245
- return dateListValue.map(date => _xeUtils.default.toDateString(date, dateValueFormat));
237
+ const computeInpImmediate = (0, _vue.computed)(() => {
238
+ const {
239
+ immediate
240
+ } = props;
241
+ return immediate;
246
242
  });
247
- const computeDateMultipleLabel = (0, _vue.computed)(() => {
248
- const dateListValue = computeDateListValue.value;
249
- const dateLabelFormat = computeDateLabelFormat.value;
250
- return dateListValue.map(date => _xeUtils.default.toDateString(date, dateLabelFormat)).join(', ');
243
+ const computeShortcutOpts = (0, _vue.computed)(() => {
244
+ return Object.assign({}, (0, _ui.getConfig)().datePicker.shortcutConfig, props.shortcutConfig);
251
245
  });
252
- const computeLimitMaxCount = (0, _vue.computed)(() => {
253
- return props.multiple ? _xeUtils.default.toNumber(props.limitCount) : 0;
246
+ const computeShortcutList = (0, _vue.computed)(() => {
247
+ const shortcutOpts = computeShortcutOpts.value;
248
+ const {
249
+ options
250
+ } = shortcutOpts;
251
+ if (options) {
252
+ return options.map((option, index) => {
253
+ return Object.assign({
254
+ name: `${option.name || option.code || index}`
255
+ }, option);
256
+ });
257
+ }
258
+ return [];
254
259
  });
255
- const computeOverCount = (0, _vue.computed)(() => {
260
+ const computeDateLabelFormat = (0, _vue.computed)(() => {
256
261
  const {
257
- multiple
262
+ labelFormat
258
263
  } = props;
259
- const limitMaxCount = computeLimitMaxCount.value;
260
- const dateMultipleValue = computeDateMultipleValue.value;
261
- if (multiple && limitMaxCount) {
262
- return dateMultipleValue.length >= limitMaxCount;
263
- }
264
- return false;
264
+ return labelFormat || (0, _ui.getI18n)(`vxe.input.date.labelFormat.${props.type}`);
265
265
  });
266
266
  const computeDateValueFormat = (0, _vue.computed)(() => {
267
267
  const {
@@ -279,377 +279,37 @@ var _default = exports.default = (0, _vue.defineComponent)({
279
279
  }
280
280
  return 'yyyy-MM-dd';
281
281
  });
282
- const computeDateValue = (0, _vue.computed)(() => {
283
- const {
284
- modelValue
285
- } = props;
286
- const isDatePickerType = computeIsDatePickerType.value;
287
- const dateValueFormat = computeDateValueFormat.value;
288
- let val = null;
289
- if (modelValue && isDatePickerType) {
290
- const date = parseDate(modelValue, dateValueFormat);
291
- if (_xeUtils.default.isValidDate(date)) {
292
- val = date;
293
- }
294
- }
295
- return val;
296
- });
297
- const computeIsDisabledPrevDateBtn = (0, _vue.computed)(() => {
298
- const dateStartTime = computeDateStartTime.value;
299
- const {
300
- selectMonth
301
- } = reactData;
302
- if (selectMonth && dateStartTime) {
303
- return selectMonth <= dateStartTime;
304
- }
305
- return false;
306
- });
307
- const computeIsDisabledNextDateBtn = (0, _vue.computed)(() => {
308
- const dateEndTime = computeDateEndTime.value;
309
- const {
310
- selectMonth
311
- } = reactData;
312
- if (selectMonth && dateEndTime) {
313
- return selectMonth >= dateEndTime;
314
- }
315
- return false;
316
- });
317
- const computeDateTimeLabel = (0, _vue.computed)(() => {
318
- const {
319
- datetimePanelValue
320
- } = reactData;
321
- const hasTimeSecond = computeHasTimeSecond.value;
322
- if (datetimePanelValue) {
323
- return _xeUtils.default.toDateString(datetimePanelValue, hasTimeSecond ? 'HH:mm:ss' : 'HH:mm');
324
- }
325
- return '';
326
- });
327
- const computeDateHMSTime = (0, _vue.computed)(() => {
328
- const dateValue = computeDateValue.value;
329
- const isDateTimeType = computeIsDateTimeType.value;
330
- return dateValue && isDateTimeType ? (dateValue.getHours() * 3600 + dateValue.getMinutes() * 60 + dateValue.getSeconds()) * 1000 : 0;
331
- });
332
- const computeDateLabelFormat = (0, _vue.computed)(() => {
333
- const {
334
- labelFormat
335
- } = props;
336
- const isDatePickerType = computeIsDatePickerType.value;
337
- if (isDatePickerType) {
338
- return labelFormat || (0, _ui.getI18n)(`vxe.input.date.labelFormat.${props.type}`);
339
- }
340
- return null;
341
- });
342
- const computeYearList = (0, _vue.computed)(() => {
343
- const {
344
- yearSize
345
- } = internalData;
346
- const {
347
- selectMonth,
348
- currentDate
349
- } = reactData;
350
- const years = [];
351
- if (selectMonth && currentDate) {
352
- const currFullYear = currentDate.getFullYear();
353
- const selectFullYear = selectMonth.getFullYear();
354
- const startYearDate = new Date(selectFullYear - selectFullYear % yearSize, 0, 1);
355
- for (let index = -4; index < yearSize + 4; index++) {
356
- const date = _xeUtils.default.getWhatYear(startYearDate, index, 'first');
357
- const itemFullYear = date.getFullYear();
358
- years.push({
359
- date,
360
- isCurrent: true,
361
- isPrev: index < 0,
362
- isNow: currFullYear === itemFullYear,
363
- isNext: index >= yearSize,
364
- year: itemFullYear
365
- });
366
- }
367
- }
368
- return years;
369
- });
370
- const computeSelectDatePanelObj = (0, _vue.computed)(() => {
371
- const isDatePickerType = computeIsDatePickerType.value;
372
- let y = '';
373
- let m = '';
374
- if (isDatePickerType) {
375
- const {
376
- datePanelType,
377
- selectMonth
378
- } = reactData;
379
- const yearList = computeYearList.value;
380
- let year = '';
381
- let month;
382
- if (selectMonth) {
383
- year = selectMonth.getFullYear();
384
- month = selectMonth.getMonth() + 1;
385
- }
386
- if (datePanelType === 'quarter' || datePanelType === 'month') {
387
- y = (0, _ui.getI18n)('vxe.datePicker.yearTitle', [year]);
388
- } else if (datePanelType === 'year') {
389
- y = yearList.length ? `${yearList[0].year} - ${yearList[yearList.length - 1].year}` : '';
390
- } else {
391
- y = (0, _ui.getI18n)('vxe.datePicker.yearTitle', [year]);
392
- m = month ? (0, _ui.getI18n)(`vxe.input.date.m${month}`) : '-';
393
- }
394
- }
395
- return {
396
- y,
397
- m
398
- };
399
- });
400
282
  const computeFirstDayOfWeek = (0, _vue.computed)(() => {
401
283
  const {
402
- startDay,
403
- startWeek
284
+ startDay
404
285
  } = props;
405
- return _xeUtils.default.toNumber(_xeUtils.default.isNumber(startDay) || _xeUtils.default.isString(startDay) ? startDay : startWeek);
286
+ return _xeUtils.default.toNumber(startDay);
406
287
  });
407
- const computeWeekDatas = (0, _vue.computed)(() => {
408
- const weeks = [];
409
- const isDatePickerType = computeIsDatePickerType.value;
410
- if (isDatePickerType) {
411
- let sWeek = computeFirstDayOfWeek.value;
412
- weeks.push(sWeek);
413
- for (let index = 0; index < 6; index++) {
414
- if (sWeek >= 6) {
415
- sWeek = 0;
416
- } else {
417
- sWeek++;
418
- }
419
- weeks.push(sWeek);
420
- }
421
- }
422
- return weeks;
423
- });
424
- const computeDateHeaders = (0, _vue.computed)(() => {
425
- const isDatePickerType = computeIsDatePickerType.value;
426
- if (isDatePickerType) {
427
- const weekDatas = computeWeekDatas.value;
428
- return weekDatas.map(day => {
429
- return {
430
- value: day,
431
- label: (0, _ui.getI18n)(`vxe.input.date.weeks.w${day}`)
432
- };
433
- });
434
- }
435
- return [];
436
- });
437
- const computeWeekHeaders = (0, _vue.computed)(() => {
438
- const isDatePickerType = computeIsDatePickerType.value;
439
- if (isDatePickerType) {
440
- const dateHeaders = computeDateHeaders.value;
441
- return [{
442
- label: (0, _ui.getI18n)('vxe.input.date.weeks.w')
443
- }].concat(dateHeaders);
444
- }
445
- return [];
446
- });
447
- const computeYearDatas = (0, _vue.computed)(() => {
448
- const yearList = computeYearList.value;
449
- return _xeUtils.default.chunk(yearList, 4);
450
- });
451
- const computeQuarterList = (0, _vue.computed)(() => {
452
- const {
453
- quarterSize
454
- } = internalData;
455
- const {
456
- selectMonth,
457
- currentDate
458
- } = reactData;
459
- const quarters = [];
460
- if (selectMonth && currentDate) {
461
- const currFullYear = currentDate.getFullYear();
462
- const currQuarter = (0, _util.getDateQuarter)(currentDate);
463
- const firstYear = _xeUtils.default.getWhatYear(selectMonth, 0, 'first');
464
- const selFullYear = firstYear.getFullYear();
465
- for (let index = -2; index < quarterSize - 2; index++) {
466
- const date = _xeUtils.default.getWhatQuarter(firstYear, index);
467
- const itemFullYear = date.getFullYear();
468
- const itemQuarter = (0, _util.getDateQuarter)(date);
469
- const isPrev = itemFullYear < selFullYear;
470
- quarters.push({
471
- date,
472
- isPrev,
473
- isCurrent: itemFullYear === selFullYear,
474
- isNow: itemFullYear === currFullYear && itemQuarter === currQuarter,
475
- isNext: !isPrev && itemFullYear > selFullYear,
476
- quarter: itemQuarter
477
- });
478
- }
479
- }
480
- return quarters;
481
- });
482
- const computeQuarterDatas = (0, _vue.computed)(() => {
483
- const quarterList = computeQuarterList.value;
484
- return _xeUtils.default.chunk(quarterList, 2);
485
- });
486
- const computeMonthList = (0, _vue.computed)(() => {
487
- const {
488
- monthSize
489
- } = internalData;
490
- const {
491
- selectMonth,
492
- currentDate
493
- } = reactData;
494
- const months = [];
495
- if (selectMonth && currentDate) {
496
- const currFullYear = currentDate.getFullYear();
497
- const currMonth = currentDate.getMonth();
498
- const selFullYear = _xeUtils.default.getWhatYear(selectMonth, 0, 'first').getFullYear();
499
- for (let index = -4; index < monthSize - 4; index++) {
500
- const date = _xeUtils.default.getWhatYear(selectMonth, 0, index);
501
- const itemFullYear = date.getFullYear();
502
- const itemMonth = date.getMonth();
503
- const isPrev = itemFullYear < selFullYear;
504
- months.push({
505
- date,
506
- isPrev,
507
- isCurrent: itemFullYear === selFullYear,
508
- isNow: itemFullYear === currFullYear && itemMonth === currMonth,
509
- isNext: !isPrev && itemFullYear > selFullYear,
510
- month: itemMonth
511
- });
512
- }
513
- }
514
- return months;
515
- });
516
- const computeMonthDatas = (0, _vue.computed)(() => {
517
- const monthList = computeMonthList.value;
518
- return _xeUtils.default.chunk(monthList, 4);
519
- });
520
- const computeDayList = (0, _vue.computed)(() => {
521
- const {
522
- selectMonth,
523
- currentDate
524
- } = reactData;
525
- const days = [];
526
- if (selectMonth && currentDate) {
527
- const dateHMSTime = computeDateHMSTime.value;
528
- const weekDatas = computeWeekDatas.value;
529
- const currFullYear = currentDate.getFullYear();
530
- const currMonth = currentDate.getMonth();
531
- const currDate = currentDate.getDate();
532
- const selFullYear = selectMonth.getFullYear();
533
- const selMonth = selectMonth.getMonth();
534
- const selDay = selectMonth.getDay();
535
- const prevOffsetDate = -weekDatas.indexOf(selDay);
536
- const startDayDate = new Date(_xeUtils.default.getWhatDay(selectMonth, prevOffsetDate).getTime() + dateHMSTime);
537
- for (let index = 0; index < 42; index++) {
538
- const date = _xeUtils.default.getWhatDay(startDayDate, index);
539
- const itemFullYear = date.getFullYear();
540
- const itemMonth = date.getMonth();
541
- const itemDate = date.getDate();
542
- const isPrev = date < selectMonth;
543
- days.push({
544
- date,
545
- isPrev,
546
- isCurrent: itemFullYear === selFullYear && itemMonth === selMonth,
547
- isNow: itemFullYear === currFullYear && itemMonth === currMonth && itemDate === currDate,
548
- isNext: !isPrev && selMonth !== itemMonth,
549
- label: itemDate
550
- });
551
- }
552
- }
553
- return days;
554
- });
555
- const computeDayDatas = (0, _vue.computed)(() => {
556
- const dayList = computeDayList.value;
557
- return _xeUtils.default.chunk(dayList, 7);
558
- });
559
- const computeWeekDates = (0, _vue.computed)(() => {
560
- const dayDatas = computeDayDatas.value;
561
- const firstDayOfWeek = computeFirstDayOfWeek.value;
562
- return dayDatas.map(list => {
563
- const firstItem = list[0];
564
- const item = {
565
- date: firstItem.date,
566
- isWeekNumber: true,
567
- isPrev: false,
568
- isCurrent: false,
569
- isNow: false,
570
- isNext: false,
571
- label: _xeUtils.default.getYearWeek(firstItem.date, firstDayOfWeek)
572
- };
573
- return [item].concat(list);
574
- });
575
- });
576
- const computeHourList = (0, _vue.computed)(() => {
577
- const list = [];
578
- const isDateTimeType = computeIsDateTimeType.value;
579
- if (isDateTimeType) {
580
- for (let index = 0; index < 24; index++) {
581
- list.push({
582
- value: index,
583
- label: ('' + index).padStart(2, '0')
584
- });
585
- }
586
- }
587
- return list;
588
- });
589
- const computeMinuteList = (0, _vue.computed)(() => {
590
- const list = [];
591
- const isDateTimeType = computeIsDateTimeType.value;
592
- if (isDateTimeType) {
593
- for (let index = 0; index < 60; index++) {
594
- list.push({
595
- value: index,
596
- label: ('' + index).padStart(2, '0')
597
- });
598
- }
599
- }
600
- return list;
601
- });
602
- const computeHasTimeMinute = (0, _vue.computed)(() => {
603
- const dateValueFormat = computeDateValueFormat.value;
604
- return !/HH/.test(dateValueFormat) || /mm/.test(dateValueFormat);
605
- });
606
- const computeHasTimeSecond = (0, _vue.computed)(() => {
607
- const dateValueFormat = computeDateValueFormat.value;
608
- return !/HH/.test(dateValueFormat) || /ss/.test(dateValueFormat);
609
- });
610
- const computeSecondList = (0, _vue.computed)(() => {
611
- const minuteList = computeMinuteList.value;
612
- return minuteList;
613
- });
614
- const computeInputReadonly = (0, _vue.computed)(() => {
288
+ const computePanelLabel = (0, _vue.computed)(() => {
615
289
  const {
616
290
  type,
617
- editable,
618
291
  multiple
619
292
  } = props;
620
- const formReadonly = computeFormReadonly.value;
621
- return formReadonly || multiple || !editable || type === 'week' || type === 'quarter';
622
- });
623
- const computeDatePickerType = (0, _vue.computed)(() => {
624
- return 'text';
625
- });
626
- const computeInpPlaceholder = (0, _vue.computed)(() => {
627
293
  const {
628
- placeholder
629
- } = props;
630
- if (placeholder) {
631
- return (0, _utils.getFuncText)(placeholder);
632
- }
633
- const globalPlaceholder = (0, _ui.getConfig)().datePicker.placeholder;
634
- if (globalPlaceholder) {
635
- return (0, _utils.getFuncText)(globalPlaceholder);
636
- }
637
- return (0, _ui.getI18n)('vxe.base.pleaseSelect');
294
+ inputValue
295
+ } = reactData;
296
+ const dateLabelFormat = computeDateLabelFormat.value;
297
+ const dateValueFormat = computeDateValueFormat.value;
298
+ const firstDayOfWeek = computeFirstDayOfWeek.value;
299
+ const vals = inputValue ? multiple ? inputValue.split(',') : [inputValue] : [];
300
+ return vals.map(val => {
301
+ const dateObj = (0, _util.parseDateObj)(val, type, {
302
+ valueFormat: dateValueFormat,
303
+ labelFormat: dateLabelFormat,
304
+ firstDay: firstDayOfWeek
305
+ });
306
+ return dateObj.label;
307
+ }).join(', ');
638
308
  });
639
- const computeInpImmediate = (0, _vue.computed)(() => {
309
+ const updateModelValue = () => {
640
310
  const {
641
- immediate
311
+ modelValue
642
312
  } = props;
643
- return immediate;
644
- });
645
- const computeShortcutOpts = (0, _vue.computed)(() => {
646
- return Object.assign({}, (0, _ui.getConfig)().datePicker.shortcutConfig, props.shortcutConfig);
647
- });
648
- const updateModelValue = modelValue => {
649
- const {
650
- isActivated,
651
- visiblePanel
652
- } = reactData;
653
313
  let val = '';
654
314
  if (modelValue) {
655
315
  if (_xeUtils.default.isNumber(modelValue) && /^[0-9]{11,15}$/.test(`${modelValue}`)) {
@@ -659,25 +319,6 @@ var _default = exports.default = (0, _vue.defineComponent)({
659
319
  }
660
320
  }
661
321
  reactData.inputValue = val;
662
- if (isActivated && visiblePanel) {
663
- dateOpenPanel();
664
- }
665
- };
666
- const parseDate = (value, format) => {
667
- const {
668
- type,
669
- multiple
670
- } = props;
671
- if (type === 'time') {
672
- return (0, _util.toStringTimeDate)(value);
673
- }
674
- if (_xeUtils.default.isArray(value)) {
675
- return _xeUtils.default.toStringDate(value[0], format);
676
- }
677
- if (_xeUtils.default.isString(value)) {
678
- return _xeUtils.default.toStringDate(multiple ? _xeUtils.default.last(value.split(',')) : value, format);
679
- }
680
- return _xeUtils.default.toStringDate(value, format);
681
322
  };
682
323
  const triggerEvent = evnt => {
683
324
  const {
@@ -688,9 +329,12 @@ var _default = exports.default = (0, _vue.defineComponent)({
688
329
  }, evnt);
689
330
  };
690
331
  const handleChange = (value, evnt) => {
332
+ const {
333
+ modelValue
334
+ } = props;
691
335
  reactData.inputValue = value;
692
336
  emit('update:modelValue', value);
693
- if (_xeUtils.default.toValueString(props.modelValue) !== value) {
337
+ if (_xeUtils.default.toValueString(modelValue) !== value) {
694
338
  dispatchEvent('change', {
695
339
  value
696
340
  }, evnt);
@@ -701,20 +345,12 @@ var _default = exports.default = (0, _vue.defineComponent)({
701
345
  }
702
346
  };
703
347
  const inputEvent = evnt => {
704
- const isDatePickerType = computeIsDatePickerType.value;
705
- const inpImmediate = computeInpImmediate.value;
706
348
  const inputElem = evnt.target;
707
349
  const value = inputElem.value;
708
- reactData.inputValue = value;
709
- if (!isDatePickerType) {
710
- if (inpImmediate) {
711
- handleChange(value, evnt);
712
- } else {
713
- dispatchEvent('input', {
714
- value
715
- }, evnt);
716
- }
717
- }
350
+ reactData.inputLabel = value;
351
+ dispatchEvent('input', {
352
+ value
353
+ }, evnt);
718
354
  };
719
355
  const changeEvent = evnt => {
720
356
  const inpImmediate = computeInpImmediate.value;
@@ -771,217 +407,8 @@ var _default = exports.default = (0, _vue.defineComponent)({
771
407
  }, evnt);
772
408
  }
773
409
  };
774
- const dateParseValue = value => {
775
- const {
776
- type
777
- } = props;
778
- const dateLabelFormat = computeDateLabelFormat.value;
779
- const dateValueFormat = computeDateValueFormat.value;
780
- const firstDayOfWeek = computeFirstDayOfWeek.value;
781
- let dValue = null;
782
- let dLabel = '';
783
- if (value) {
784
- dValue = parseDate(value, dateValueFormat);
785
- }
786
- if (_xeUtils.default.isValidDate(dValue)) {
787
- dLabel = _xeUtils.default.toDateString(dValue, dateLabelFormat, {
788
- firstDay: firstDayOfWeek
789
- });
790
- // 周选择器,由于年份和第几周是冲突的行为,所以需要特殊处理,判断是否跨年,例如
791
- // '2024-12-31' 'yyyy-MM-dd W' >> '2024-12-31 1'
792
- // '2025-01-01' 'yyyy-MM-dd W' >> '2025-01-01 1'
793
- if (dateLabelFormat && type === 'week') {
794
- const weekNum = _xeUtils.default.getYearWeek(dValue, firstDayOfWeek);
795
- const weekDate = _xeUtils.default.getWhatWeek(dValue, 0, weekNum === 1 ? (6 + firstDayOfWeek) % 7 : firstDayOfWeek, firstDayOfWeek);
796
- const weekFullYear = weekDate.getFullYear();
797
- if (weekFullYear !== dValue.getFullYear()) {
798
- const yyIndex = dateLabelFormat.indexOf('yyyy');
799
- if (yyIndex > -1) {
800
- const yyNum = Number(dLabel.substring(yyIndex, yyIndex + 4));
801
- if (yyNum && !isNaN(yyNum)) {
802
- dLabel = dLabel.replace(`${yyNum}`, `${weekFullYear}`);
803
- }
804
- }
805
- }
806
- }
807
- } else {
808
- dValue = null;
809
- }
810
- reactData.datePanelValue = dValue;
811
- reactData.datePanelLabel = dLabel;
812
- };
813
- /**
814
- * 值变化时处理
815
- */
816
- const changeValue = () => {
817
- const isDatePickerType = computeIsDatePickerType.value;
818
- const {
819
- inputValue
820
- } = reactData;
821
- if (isDatePickerType) {
822
- dateParseValue(inputValue);
823
- reactData.inputValue = props.multiple ? computeDateMultipleLabel.value : reactData.datePanelLabel;
824
- }
825
- };
826
- /**
827
- * 检查初始值
828
- */
829
- const initValue = () => {
830
- const isDatePickerType = computeIsDatePickerType.value;
831
- updateModelValue(props.modelValue);
832
- if (isDatePickerType) {
833
- changeValue();
834
- }
835
- };
836
- const dateRevert = () => {
837
- reactData.inputValue = props.multiple ? computeDateMultipleLabel.value : reactData.datePanelLabel;
838
- };
839
- const dateCheckMonth = date => {
840
- const firstDayOfWeek = computeFirstDayOfWeek.value;
841
- const weekNum = _xeUtils.default.getYearWeek(date, firstDayOfWeek);
842
- const weekStartDate = _xeUtils.default.getWhatWeek(date, 0, firstDayOfWeek, firstDayOfWeek);
843
- const month = _xeUtils.default.getWhatMonth(weekNum === 1 ? _xeUtils.default.getWhatDay(weekStartDate, 6) : date, 0, 'first');
844
- if (!_xeUtils.default.isEqual(month, reactData.selectMonth)) {
845
- reactData.selectMonth = month;
846
- }
847
- };
848
- const dateChange = (date, isReload) => {
849
- const {
850
- modelValue,
851
- multiple
852
- } = props;
853
- const {
854
- datetimePanelValue
855
- } = reactData;
856
- const isDateTimeType = computeIsDateTimeType.value;
857
- const dateValueFormat = computeDateValueFormat.value;
858
- const firstDayOfWeek = computeFirstDayOfWeek.value;
859
- if (props.type === 'week') {
860
- const sWeek = _xeUtils.default.toNumber(props.selectDay);
861
- date = _xeUtils.default.getWhatWeek(date, 0, sWeek, firstDayOfWeek);
862
- } else if (isDateTimeType) {
863
- if (datetimePanelValue) {
864
- date.setHours(datetimePanelValue.getHours());
865
- date.setMinutes(datetimePanelValue.getMinutes());
866
- date.setSeconds(datetimePanelValue.getSeconds());
867
- }
868
- }
869
- const inpVal = _xeUtils.default.toDateString(date, dateValueFormat, {
870
- firstDay: firstDayOfWeek
871
- });
872
- dateCheckMonth(date);
873
- if (multiple) {
874
- const overCount = computeOverCount.value;
875
- // 如果为多选
876
- if (isDateTimeType) {
877
- // 如果是datetime特殊类型
878
- const dateListValue = isReload ? [] : [...computeDateListValue.value];
879
- const datetimeRest = [];
880
- const eqIndex = _xeUtils.default.findIndexOf(dateListValue, val => _xeUtils.default.isDateSame(date, val, 'yyyyMMdd'));
881
- if (eqIndex === -1) {
882
- if (overCount) {
883
- // 如果超出最大多选数量
884
- return;
885
- }
886
- dateListValue.push(date);
887
- } else {
888
- dateListValue.splice(eqIndex, 1);
889
- }
890
- dateListValue.forEach(item => {
891
- if (item) {
892
- if (datetimePanelValue) {
893
- item.setHours(datetimePanelValue.getHours());
894
- item.setMinutes(datetimePanelValue.getMinutes());
895
- item.setSeconds(datetimePanelValue.getSeconds());
896
- }
897
- datetimeRest.push(item);
898
- }
899
- });
900
- handleChange(datetimeRest.map(date => _xeUtils.default.toDateString(date, dateValueFormat)).join(','), {
901
- type: 'update'
902
- });
903
- } else {
904
- const dateMultipleValue = isReload ? [] : computeDateMultipleValue.value;
905
- // 如果是日期类型
906
- if (dateMultipleValue.some(val => _xeUtils.default.isEqual(val, inpVal))) {
907
- handleChange(dateMultipleValue.filter(val => !_xeUtils.default.isEqual(val, inpVal)).join(','), {
908
- type: 'update'
909
- });
910
- } else {
911
- if (overCount) {
912
- // 如果超出最大多选数量
913
- return;
914
- }
915
- handleChange(dateMultipleValue.concat([inpVal]).join(','), {
916
- type: 'update'
917
- });
918
- }
919
- }
920
- } else {
921
- // 如果为单选
922
- if (!_xeUtils.default.isEqual(modelValue, inpVal)) {
923
- handleChange(inpVal, {
924
- type: 'update'
925
- });
926
- }
927
- }
928
- };
929
- const afterCheckValue = () => {
930
- const {
931
- type
932
- } = props;
933
- const {
934
- inputValue,
935
- datetimePanelValue
936
- } = reactData;
937
- const dateLabelFormat = computeDateLabelFormat.value;
938
- const inputReadonly = computeInputReadonly.value;
939
- if (!inputReadonly) {
940
- if (inputValue) {
941
- let inpDateVal = parseDate(inputValue, dateLabelFormat);
942
- if (_xeUtils.default.isValidDate(inpDateVal)) {
943
- if (type === 'time') {
944
- inpDateVal = _xeUtils.default.toDateString(inpDateVal, dateLabelFormat);
945
- if (inputValue !== inpDateVal) {
946
- handleChange(inpDateVal, {
947
- type: 'check'
948
- });
949
- }
950
- reactData.inputValue = inpDateVal;
951
- } else {
952
- let isChange = false;
953
- const firstDayOfWeek = computeFirstDayOfWeek.value;
954
- if (type === 'datetime') {
955
- const dateValue = computeDateValue.value;
956
- if (inputValue !== _xeUtils.default.toDateString(dateValue, dateLabelFormat) || inputValue !== _xeUtils.default.toDateString(inpDateVal, dateLabelFormat)) {
957
- isChange = true;
958
- if (datetimePanelValue) {
959
- datetimePanelValue.setHours(inpDateVal.getHours());
960
- datetimePanelValue.setMinutes(inpDateVal.getMinutes());
961
- datetimePanelValue.setSeconds(inpDateVal.getSeconds());
962
- }
963
- }
964
- } else {
965
- isChange = true;
966
- }
967
- reactData.inputValue = _xeUtils.default.toDateString(inpDateVal, dateLabelFormat, {
968
- firstDay: firstDayOfWeek
969
- });
970
- if (isChange) {
971
- dateChange(inpDateVal);
972
- }
973
- }
974
- } else {
975
- dateRevert();
976
- }
977
- } else {
978
- handleChange('', {
979
- type: 'check'
980
- });
981
- }
982
- }
983
- };
984
410
  const blurEvent = evnt => {
411
+ const $datePanel = refDatePanel.value;
985
412
  const {
986
413
  inputValue
987
414
  } = reactData;
@@ -990,509 +417,102 @@ var _default = exports.default = (0, _vue.defineComponent)({
990
417
  if (!inpImmediate) {
991
418
  handleChange(value, evnt);
992
419
  }
993
- afterCheckValue();
994
420
  if (!reactData.visiblePanel) {
995
- reactData.isActivated = false;
996
- }
997
- dispatchEvent('blur', {
998
- value
999
- }, evnt);
1000
- // 自动更新校验状态
1001
- if ($xeForm && formItemInfo) {
1002
- $xeForm.triggerItemEvent(evnt, formItemInfo.itemConfig.field, value);
1003
- }
1004
- };
1005
- const keydownEvent = evnt => {
1006
- triggerEvent(evnt);
1007
- };
1008
- const keyupEvent = evnt => {
1009
- triggerEvent(evnt);
1010
- };
1011
- // 日期
1012
- const dateMonthHandle = (date, offsetMonth) => {
1013
- const firstDayOfWeek = computeFirstDayOfWeek.value;
1014
- const weekNum = _xeUtils.default.getYearWeek(date, firstDayOfWeek);
1015
- const weekStartDate = _xeUtils.default.getWhatWeek(date, 0, firstDayOfWeek, firstDayOfWeek);
1016
- const month = _xeUtils.default.getWhatMonth(weekNum === 1 ? _xeUtils.default.getWhatDay(weekStartDate, 6) : date, offsetMonth, 'first');
1017
- reactData.selectMonth = month;
1018
- };
1019
- const dateNowHandle = () => {
1020
- const {
1021
- type
1022
- } = props;
1023
- const firstDayOfWeek = computeFirstDayOfWeek.value;
1024
- let currentDate = new Date();
1025
- switch (type) {
1026
- case 'week':
1027
- currentDate = _xeUtils.default.getWhatWeek(currentDate, 0, firstDayOfWeek);
1028
- break;
1029
- case 'datetime':
1030
- currentDate = new Date();
1031
- reactData.datetimePanelValue = new Date();
1032
- break;
1033
- default:
1034
- currentDate = _xeUtils.default.getWhatDay(Date.now(), 0, 'first');
1035
- break;
1036
- }
1037
- reactData.currentDate = currentDate;
1038
- dateMonthHandle(currentDate, 0);
1039
- };
1040
- const dateToggleYearTypeEvent = () => {
1041
- reactData.datePanelType = 'year';
1042
- };
1043
- const dateToggleMonthTypeEvent = () => {
1044
- let {
1045
- datePanelType
1046
- } = reactData;
1047
- if (datePanelType === 'month' || datePanelType === 'quarter') {
1048
- datePanelType = 'year';
1049
- } else {
1050
- datePanelType = 'month';
1051
- }
1052
- reactData.datePanelType = datePanelType;
1053
- };
1054
- const datePrevEvent = evnt => {
1055
- const {
1056
- type
1057
- } = props;
1058
- const {
1059
- datePanelType,
1060
- selectMonth,
1061
- inputValue
1062
- } = reactData;
1063
- const {
1064
- yearSize
1065
- } = internalData;
1066
- const value = inputValue;
1067
- const isDisabledPrevDateBtn = computeIsDisabledPrevDateBtn.value;
1068
- if (!isDisabledPrevDateBtn) {
1069
- let viewDate;
1070
- if (type === 'year') {
1071
- viewDate = _xeUtils.default.getWhatYear(selectMonth, -yearSize, 'first');
1072
- } else if (type === 'month' || type === 'quarter') {
1073
- if (datePanelType === 'year') {
1074
- viewDate = _xeUtils.default.getWhatYear(selectMonth, -yearSize, 'first');
1075
- } else {
1076
- viewDate = _xeUtils.default.getWhatYear(selectMonth, -1, 'first');
1077
- }
1078
- } else {
1079
- if (datePanelType === 'year') {
1080
- viewDate = _xeUtils.default.getWhatYear(selectMonth, -yearSize, 'first');
1081
- } else if (datePanelType === 'month') {
1082
- viewDate = _xeUtils.default.getWhatYear(selectMonth, -1, 'first');
1083
- } else {
1084
- viewDate = _xeUtils.default.getWhatMonth(selectMonth, -1, 'first');
1085
- }
1086
- }
1087
- reactData.selectMonth = viewDate;
1088
- dispatchEvent('date-prev', {
1089
- viewType: datePanelType,
1090
- viewDate,
1091
- value,
1092
- type
1093
- }, evnt);
1094
- }
1095
- };
1096
- const dateTodayMonthEvent = evnt => {
1097
- dateNowHandle();
1098
- dateChange(reactData.currentDate, true);
1099
- if (!props.multiple) {
1100
- hidePanel();
1101
- }
1102
- dispatchEvent('date-today', {
1103
- type: props.type
1104
- }, evnt);
1105
- };
1106
- const dateNextEvent = evnt => {
1107
- const {
1108
- type
1109
- } = props;
1110
- const {
1111
- datePanelType,
1112
- selectMonth,
1113
- inputValue
1114
- } = reactData;
1115
- const {
1116
- yearSize
1117
- } = internalData;
1118
- const value = inputValue;
1119
- const isDisabledNextDateBtn = computeIsDisabledNextDateBtn.value;
1120
- if (!isDisabledNextDateBtn) {
1121
- let viewDate;
1122
- if (type === 'year') {
1123
- viewDate = _xeUtils.default.getWhatYear(selectMonth, yearSize, 'first');
1124
- } else if (type === 'month' || type === 'quarter') {
1125
- if (datePanelType === 'year') {
1126
- viewDate = _xeUtils.default.getWhatYear(selectMonth, yearSize, 'first');
1127
- } else {
1128
- viewDate = _xeUtils.default.getWhatYear(selectMonth, 1, 'first');
1129
- }
1130
- } else {
1131
- if (datePanelType === 'year') {
1132
- viewDate = _xeUtils.default.getWhatYear(selectMonth, yearSize, 'first');
1133
- } else if (datePanelType === 'month') {
1134
- viewDate = _xeUtils.default.getWhatYear(selectMonth, 1, 'first');
1135
- } else {
1136
- viewDate = _xeUtils.default.getWhatMonth(selectMonth, 1, 'first');
1137
- }
1138
- }
1139
- reactData.selectMonth = viewDate;
1140
- dispatchEvent('date-next', {
1141
- viewType: datePanelType,
1142
- value,
1143
- type
1144
- }, evnt);
1145
- }
1146
- };
1147
- const isDateDisabled = item => {
1148
- const {
1149
- disabledMethod
1150
- } = props;
1151
- const {
1152
- datePanelType
1153
- } = reactData;
1154
- const dateStartTime = computeDateStartTime.value;
1155
- const dateEndTime = computeDateEndTime.value;
1156
- const {
1157
- date
1158
- } = item;
1159
- if (dateStartTime && dateStartTime.getTime() > date.getTime()) {
1160
- return true;
1161
- }
1162
- if (dateEndTime && dateEndTime.getTime() < date.getTime()) {
1163
- return true;
1164
- }
1165
- if (disabledMethod) {
1166
- return disabledMethod({
1167
- type: datePanelType,
1168
- viewType: datePanelType,
1169
- date,
1170
- $datePicker: $xeDatePicker
1171
- });
1172
- }
1173
- return false;
1174
- };
1175
- const dateSelectItem = date => {
1176
- const {
1177
- type,
1178
- multiple
1179
- } = props;
1180
- const {
1181
- datePanelType
1182
- } = reactData;
1183
- if (type === 'month') {
1184
- if (datePanelType === 'year') {
1185
- reactData.datePanelType = 'month';
1186
- dateCheckMonth(date);
1187
- } else {
1188
- dateChange(date);
1189
- if (!multiple) {
1190
- hidePanel();
1191
- }
1192
- }
1193
- } else if (type === 'year') {
1194
- dateChange(date);
1195
- if (!multiple) {
1196
- hidePanel();
1197
- }
1198
- } else if (type === 'quarter') {
1199
- if (datePanelType === 'year') {
1200
- reactData.datePanelType = 'quarter';
1201
- dateCheckMonth(date);
1202
- } else {
1203
- dateChange(date);
1204
- if (!multiple) {
1205
- hidePanel();
1206
- }
1207
- }
1208
- } else {
1209
- if (datePanelType === 'month') {
1210
- reactData.datePanelType = type === 'week' ? type : 'day';
1211
- dateCheckMonth(date);
1212
- } else if (datePanelType === 'year') {
1213
- reactData.datePanelType = 'month';
1214
- dateCheckMonth(date);
1215
- } else {
1216
- dateChange(date);
1217
- if (type === 'datetime') {
1218
- // 日期带时间
1219
- } else {
1220
- if (!multiple) {
1221
- hidePanel();
1222
- }
1223
- }
1224
- }
1225
- }
1226
- };
1227
- const dateSelectEvent = item => {
1228
- if (!isDateDisabled(item)) {
1229
- dateSelectItem(item.date);
1230
- }
1231
- };
1232
- const dateMoveDay = offsetDay => {
1233
- if (!isDateDisabled({
1234
- date: offsetDay
1235
- })) {
1236
- const dayList = computeDayList.value;
1237
- if (!dayList.some(item => _xeUtils.default.isDateSame(item.date, offsetDay, 'yyyyMMdd'))) {
1238
- dateCheckMonth(offsetDay);
1239
- }
1240
- dateParseValue(offsetDay);
1241
- }
1242
- };
1243
- const dateMoveYear = offsetYear => {
1244
- if (!isDateDisabled({
1245
- date: offsetYear
1246
- })) {
1247
- const yearList = computeYearList.value;
1248
- if (!yearList.some(item => _xeUtils.default.isDateSame(item.date, offsetYear, 'yyyy'))) {
1249
- dateCheckMonth(offsetYear);
1250
- }
1251
- dateParseValue(offsetYear);
1252
- }
1253
- };
1254
- const dateMoveQuarter = offsetQuarter => {
1255
- if (!isDateDisabled({
1256
- date: offsetQuarter
1257
- })) {
1258
- const quarterList = computeQuarterList.value;
1259
- if (!quarterList.some(item => _xeUtils.default.isDateSame(item.date, offsetQuarter, 'yyyyq'))) {
1260
- dateCheckMonth(offsetQuarter);
1261
- }
1262
- dateParseValue(offsetQuarter);
1263
- }
1264
- };
1265
- const dateMoveMonth = offsetMonth => {
1266
- if (!isDateDisabled({
1267
- date: offsetMonth
1268
- })) {
1269
- const monthList = computeMonthList.value;
1270
- if (!monthList.some(item => _xeUtils.default.isDateSame(item.date, offsetMonth, 'yyyyMM'))) {
1271
- dateCheckMonth(offsetMonth);
1272
- }
1273
- dateParseValue(offsetMonth);
1274
- }
1275
- };
1276
- const dateMouseenterEvent = item => {
1277
- if (!isDateDisabled(item)) {
1278
- const {
1279
- datePanelType
1280
- } = reactData;
1281
- if (datePanelType === 'month') {
1282
- dateMoveMonth(item.date);
1283
- } else if (datePanelType === 'quarter') {
1284
- dateMoveQuarter(item.date);
1285
- } else if (datePanelType === 'year') {
1286
- dateMoveYear(item.date);
1287
- } else {
1288
- dateMoveDay(item.date);
1289
- }
421
+ reactData.isActivated = false;
1290
422
  }
1291
- };
1292
- const updateTimePos = liElem => {
1293
- if (liElem) {
1294
- const height = liElem.offsetHeight;
1295
- const ulElem = liElem.parentNode;
1296
- ulElem.scrollTop = liElem.offsetTop - height * 4;
423
+ if ($datePanel) {
424
+ $datePanel.checkValue(reactData.inputLabel);
425
+ }
426
+ dispatchEvent('blur', {
427
+ value
428
+ }, evnt);
429
+ // 自动更新校验状态
430
+ if ($xeForm && formItemInfo) {
431
+ $xeForm.triggerItemEvent(evnt, formItemInfo.itemConfig.field, value);
1297
432
  }
1298
433
  };
1299
- const dateTimeChangeEvent = evnt => {
1300
- const {
1301
- datetimePanelValue
1302
- } = reactData;
1303
- reactData.datetimePanelValue = datetimePanelValue ? new Date(datetimePanelValue.getTime()) : new Date();
1304
- updateTimePos(evnt.currentTarget);
434
+ const keydownEvent = evnt => {
435
+ triggerEvent(evnt);
1305
436
  };
1306
- const dateHourEvent = (evnt, item) => {
1307
- const {
1308
- datetimePanelValue
1309
- } = reactData;
1310
- if (datetimePanelValue) {
1311
- datetimePanelValue.setHours(item.value);
437
+ const keyupEvent = evnt => {
438
+ triggerEvent(evnt);
439
+ };
440
+ const confirmEvent = evnt => {
441
+ const $datePanel = refDatePanel.value;
442
+ if ($datePanel) {
443
+ $datePanel.confirmByEvent(evnt);
1312
444
  }
1313
- dateTimeChangeEvent(evnt);
445
+ hidePanel();
1314
446
  };
1315
- // const dateClearEvent = (evnt: MouseEvent) => {
1316
- // const value = ''
1317
- // handleChange(value, evnt)
1318
- // dispatchEvent('clear', { value }, evnt)
1319
- // }
1320
- const dateConfirmEvent = () => {
447
+ const panelChangeEvent = params => {
1321
448
  const {
1322
449
  multiple
1323
450
  } = props;
1324
451
  const {
1325
- datetimePanelValue
1326
- } = reactData;
1327
- const dateValue = computeDateValue.value;
452
+ value,
453
+ $event
454
+ } = params;
1328
455
  const isDateTimeType = computeIsDateTimeType.value;
1329
- if (isDateTimeType) {
1330
- const dateValueFormat = computeDateValueFormat.value;
1331
- if (multiple) {
1332
- // 如果为多选
1333
- const dateMultipleValue = computeDateMultipleValue.value;
1334
- if (isDateTimeType) {
1335
- // 如果是datetime特殊类型
1336
- const dateListValue = [...computeDateListValue.value];
1337
- const datetimeRest = [];
1338
- dateListValue.forEach(item => {
1339
- if (item) {
1340
- if (datetimePanelValue) {
1341
- item.setHours(datetimePanelValue.getHours());
1342
- item.setMinutes(datetimePanelValue.getMinutes());
1343
- item.setSeconds(datetimePanelValue.getSeconds());
1344
- }
1345
- datetimeRest.push(item);
1346
- }
1347
- });
1348
- handleChange(datetimeRest.map(date => _xeUtils.default.toDateString(date, dateValueFormat)).join(','), {
1349
- type: 'update'
1350
- });
1351
- } else {
1352
- // 如果是日期类型
1353
- handleChange(dateMultipleValue.join(','), {
1354
- type: 'update'
1355
- });
1356
- }
1357
- } else {
1358
- dateChange(dateValue || reactData.currentDate);
1359
- }
1360
- }
1361
- hidePanel();
1362
- };
1363
- const dateMinuteEvent = (evnt, item) => {
1364
- const {
1365
- datetimePanelValue
1366
- } = reactData;
1367
- if (datetimePanelValue) {
1368
- datetimePanelValue.setMinutes(item.value);
456
+ handleChange(value, $event);
457
+ if (!multiple && !isDateTimeType) {
458
+ hidePanel();
1369
459
  }
1370
- dateTimeChangeEvent(evnt);
1371
460
  };
1372
- const dateSecondEvent = (evnt, item) => {
461
+ // 全局事件
462
+ const handleGlobalMousedownEvent = evnt => {
463
+ const $datePanel = refDatePanel.value;
1373
464
  const {
1374
- datetimePanelValue
465
+ visiblePanel,
466
+ isActivated
1375
467
  } = reactData;
1376
- if (datetimePanelValue) {
1377
- datetimePanelValue.setSeconds(item.value);
468
+ const el = refElem.value;
469
+ const panelWrapperElem = refPanelWrapper.value;
470
+ const isDisabled = computeIsDisabled.value;
471
+ if (!isDisabled && isActivated) {
472
+ reactData.isActivated = (0, _dom.getEventTargetNode)(evnt, el).flag || (0, _dom.getEventTargetNode)(evnt, panelWrapperElem).flag;
473
+ if (!reactData.isActivated) {
474
+ if (visiblePanel) {
475
+ hidePanel();
476
+ if ($datePanel) {
477
+ $datePanel.checkValue(reactData.inputLabel);
478
+ }
479
+ }
480
+ }
1378
481
  }
1379
- dateTimeChangeEvent(evnt);
1380
482
  };
1381
- const dateOffsetEvent = evnt => {
483
+ const handleGlobalMousewheelEvent = evnt => {
1382
484
  const {
1383
- isActivated,
1384
- datePanelValue,
1385
- datePanelType
485
+ visiblePanel
1386
486
  } = reactData;
1387
- if (isActivated) {
1388
- evnt.preventDefault();
1389
- const isLeftArrow = _ui.globalEvents.hasKey(evnt, _ui.GLOBAL_EVENT_KEYS.ARROW_LEFT);
1390
- const isUpArrow = _ui.globalEvents.hasKey(evnt, _ui.GLOBAL_EVENT_KEYS.ARROW_UP);
1391
- const isRightArrow = _ui.globalEvents.hasKey(evnt, _ui.GLOBAL_EVENT_KEYS.ARROW_RIGHT);
1392
- const isDwArrow = _ui.globalEvents.hasKey(evnt, _ui.GLOBAL_EVENT_KEYS.ARROW_DOWN);
1393
- if (datePanelType === 'year') {
1394
- let offsetYear = _xeUtils.default.getWhatYear(datePanelValue || Date.now(), 0, 'first');
1395
- if (isLeftArrow) {
1396
- offsetYear = _xeUtils.default.getWhatYear(offsetYear, -1);
1397
- } else if (isUpArrow) {
1398
- offsetYear = _xeUtils.default.getWhatYear(offsetYear, -4);
1399
- } else if (isRightArrow) {
1400
- offsetYear = _xeUtils.default.getWhatYear(offsetYear, 1);
1401
- } else if (isDwArrow) {
1402
- offsetYear = _xeUtils.default.getWhatYear(offsetYear, 4);
1403
- }
1404
- dateMoveYear(offsetYear);
1405
- } else if (datePanelType === 'quarter') {
1406
- let offsetQuarter = _xeUtils.default.getWhatQuarter(datePanelValue || Date.now(), 0, 'first');
1407
- if (isLeftArrow) {
1408
- offsetQuarter = _xeUtils.default.getWhatQuarter(offsetQuarter, -1);
1409
- } else if (isUpArrow) {
1410
- offsetQuarter = _xeUtils.default.getWhatQuarter(offsetQuarter, -2);
1411
- } else if (isRightArrow) {
1412
- offsetQuarter = _xeUtils.default.getWhatQuarter(offsetQuarter, 1);
1413
- } else if (isDwArrow) {
1414
- offsetQuarter = _xeUtils.default.getWhatQuarter(offsetQuarter, 2);
1415
- }
1416
- dateMoveQuarter(offsetQuarter);
1417
- } else if (datePanelType === 'month') {
1418
- let offsetMonth = _xeUtils.default.getWhatMonth(datePanelValue || Date.now(), 0, 'first');
1419
- if (isLeftArrow) {
1420
- offsetMonth = _xeUtils.default.getWhatMonth(offsetMonth, -1);
1421
- } else if (isUpArrow) {
1422
- offsetMonth = _xeUtils.default.getWhatMonth(offsetMonth, -4);
1423
- } else if (isRightArrow) {
1424
- offsetMonth = _xeUtils.default.getWhatMonth(offsetMonth, 1);
1425
- } else if (isDwArrow) {
1426
- offsetMonth = _xeUtils.default.getWhatMonth(offsetMonth, 4);
1427
- }
1428
- dateMoveMonth(offsetMonth);
1429
- } else if (datePanelType === 'week') {
1430
- let offsetDay = datePanelValue || _xeUtils.default.getWhatDay(Date.now(), 0, 'first');
1431
- const firstDayOfWeek = computeFirstDayOfWeek.value;
1432
- if (isUpArrow) {
1433
- offsetDay = _xeUtils.default.getWhatWeek(offsetDay, -1, firstDayOfWeek);
1434
- } else if (isDwArrow) {
1435
- offsetDay = _xeUtils.default.getWhatWeek(offsetDay, 1, firstDayOfWeek);
1436
- }
1437
- dateMoveDay(offsetDay);
1438
- } else {
1439
- let offsetDay = datePanelValue || _xeUtils.default.getWhatDay(Date.now(), 0, 'first');
1440
- if (isLeftArrow) {
1441
- offsetDay = _xeUtils.default.getWhatDay(offsetDay, -1);
1442
- } else if (isUpArrow) {
1443
- offsetDay = _xeUtils.default.getWhatWeek(offsetDay, -1, offsetDay.getDay());
1444
- } else if (isRightArrow) {
1445
- offsetDay = _xeUtils.default.getWhatDay(offsetDay, 1);
1446
- } else if (isDwArrow) {
1447
- offsetDay = _xeUtils.default.getWhatWeek(offsetDay, 1, offsetDay.getDay());
487
+ const isDisabled = computeIsDisabled.value;
488
+ if (!isDisabled) {
489
+ if (visiblePanel) {
490
+ const panelWrapperElem = refPanelWrapper.value;
491
+ if ((0, _dom.getEventTargetNode)(evnt, panelWrapperElem).flag) {
492
+ updatePlacement();
493
+ } else {
494
+ hidePanel();
1448
495
  }
1449
- dateMoveDay(offsetDay);
1450
496
  }
1451
497
  }
1452
498
  };
1453
- const datePgOffsetEvent = evnt => {
499
+ const handleGlobalBlurEvent = () => {
500
+ const $datePanel = refDatePanel.value;
1454
501
  const {
1455
- isActivated
502
+ isActivated,
503
+ visiblePanel
1456
504
  } = reactData;
1457
- if (isActivated) {
1458
- const isPgUp = _ui.globalEvents.hasKey(evnt, _ui.GLOBAL_EVENT_KEYS.PAGE_UP);
1459
- evnt.preventDefault();
1460
- if (isPgUp) {
1461
- datePrevEvent(evnt);
1462
- } else {
1463
- dateNextEvent(evnt);
505
+ if (visiblePanel) {
506
+ hidePanel();
507
+ if ($datePanel) {
508
+ $datePanel.checkValue(reactData.inputLabel);
509
+ }
510
+ } else if (isActivated) {
511
+ if ($datePanel) {
512
+ $datePanel.checkValue(reactData.inputLabel);
1464
513
  }
1465
514
  }
1466
515
  };
1467
- const dateOpenPanel = () => {
1468
- const {
1469
- type
1470
- } = props;
1471
- const isDateTimeType = computeIsDateTimeType.value;
1472
- const dateValue = computeDateValue.value;
1473
- if (['year', 'quarter', 'month', 'week'].indexOf(type) > -1) {
1474
- reactData.datePanelType = type;
1475
- } else {
1476
- reactData.datePanelType = 'day';
1477
- }
1478
- reactData.currentDate = _xeUtils.default.getWhatDay(Date.now(), 0, 'first');
1479
- if (dateValue) {
1480
- dateMonthHandle(dateValue, 0);
1481
- dateParseValue(dateValue);
1482
- } else {
1483
- dateNowHandle();
1484
- }
1485
- if (isDateTimeType) {
1486
- reactData.datetimePanelValue = reactData.datePanelValue || _xeUtils.default.getWhatDay(Date.now(), 0, 'first');
1487
- (0, _vue.nextTick)(() => {
1488
- const timeBodyElem = refInputTimeBody.value;
1489
- _xeUtils.default.arrayEach(timeBodyElem.querySelectorAll('li.is--selected'), elem => {
1490
- updateTimePos(elem);
1491
- });
1492
- });
1493
- }
1494
- };
1495
- // 日期
1496
516
  // 弹出面板
1497
517
  const updateZindex = () => {
1498
518
  if (reactData.panelIndex < (0, _utils.getLastZIndex)()) {
@@ -1585,7 +605,6 @@ var _default = exports.default = (0, _vue.defineComponent)({
1585
605
  visiblePanel
1586
606
  } = reactData;
1587
607
  const isDisabled = computeIsDisabled.value;
1588
- const isDatePickerType = computeIsDatePickerType.value;
1589
608
  if (!isDisabled && !visiblePanel) {
1590
609
  if (!reactData.initialized) {
1591
610
  reactData.initialized = true;
@@ -1596,9 +615,6 @@ var _default = exports.default = (0, _vue.defineComponent)({
1596
615
  }
1597
616
  reactData.isActivated = true;
1598
617
  reactData.isAniVisible = true;
1599
- if (isDatePickerType) {
1600
- dateOpenPanel();
1601
- }
1602
618
  setTimeout(() => {
1603
619
  reactData.visiblePanel = true;
1604
620
  }, 10);
@@ -1621,152 +637,81 @@ var _default = exports.default = (0, _vue.defineComponent)({
1621
637
  option,
1622
638
  $event
1623
639
  }) => {
640
+ const {
641
+ type
642
+ } = props;
643
+ const {
644
+ inputValue
645
+ } = reactData;
1624
646
  const shortcutOpts = computeShortcutOpts.value;
1625
647
  const {
1626
648
  autoClose
1627
649
  } = shortcutOpts;
1628
- const clickMethod = option.clickMethod || shortcutOpts.clickMethod;
650
+ const {
651
+ code,
652
+ clickMethod
653
+ } = option;
654
+ let value = inputValue;
1629
655
  const shortcutParams = {
1630
656
  $datePicker: $xeDatePicker,
1631
- option: option
657
+ option,
658
+ value,
659
+ code
1632
660
  };
1633
- if (clickMethod) {
1634
- clickMethod(shortcutParams);
1635
- }
1636
- if (autoClose) {
1637
- hidePanel();
1638
- }
1639
- dispatchEvent('shortcut-click', shortcutParams, $event);
1640
- };
1641
- // 全局事件
1642
- const handleGlobalMousedownEvent = evnt => {
1643
- const {
1644
- visiblePanel,
1645
- isActivated
1646
- } = reactData;
1647
- const isDatePickerType = computeIsDatePickerType.value;
1648
- const el = refElem.value;
1649
- const panelWrapperElem = refPanelWrapper.value;
1650
- const isDisabled = computeIsDisabled.value;
1651
- if (!isDisabled && isActivated) {
1652
- reactData.isActivated = (0, _dom.getEventTargetNode)(evnt, el).flag || (0, _dom.getEventTargetNode)(evnt, panelWrapperElem).flag;
1653
- if (!reactData.isActivated) {
1654
- // 如果是日期类型
1655
- if (isDatePickerType) {
1656
- if (visiblePanel) {
1657
- hidePanel();
1658
- afterCheckValue();
1659
- }
1660
- } else {
1661
- afterCheckValue();
1662
- }
1663
- }
1664
- }
1665
- };
1666
- const handleGlobalKeydownEvent = evnt => {
1667
- const {
1668
- clearable
1669
- } = props;
1670
- const {
1671
- visiblePanel
1672
- } = reactData;
1673
- const isDatePickerType = computeIsDatePickerType.value;
1674
- const isDisabled = computeIsDisabled.value;
1675
- if (!isDisabled) {
1676
- const isTab = _ui.globalEvents.hasKey(evnt, _ui.GLOBAL_EVENT_KEYS.TAB);
1677
- const isDel = _ui.globalEvents.hasKey(evnt, _ui.GLOBAL_EVENT_KEYS.DELETE);
1678
- const isEsc = _ui.globalEvents.hasKey(evnt, _ui.GLOBAL_EVENT_KEYS.ESCAPE);
1679
- const isEnter = _ui.globalEvents.hasKey(evnt, _ui.GLOBAL_EVENT_KEYS.ENTER);
1680
- const isLeftArrow = _ui.globalEvents.hasKey(evnt, _ui.GLOBAL_EVENT_KEYS.ARROW_LEFT);
1681
- const isUpArrow = _ui.globalEvents.hasKey(evnt, _ui.GLOBAL_EVENT_KEYS.ARROW_UP);
1682
- const isRightArrow = _ui.globalEvents.hasKey(evnt, _ui.GLOBAL_EVENT_KEYS.ARROW_RIGHT);
1683
- const isDwArrow = _ui.globalEvents.hasKey(evnt, _ui.GLOBAL_EVENT_KEYS.ARROW_DOWN);
1684
- const isPgUp = _ui.globalEvents.hasKey(evnt, _ui.GLOBAL_EVENT_KEYS.PAGE_UP);
1685
- const isPgDn = _ui.globalEvents.hasKey(evnt, _ui.GLOBAL_EVENT_KEYS.PAGE_DOWN);
1686
- const operArrow = isLeftArrow || isUpArrow || isRightArrow || isDwArrow;
1687
- let isActivated = reactData.isActivated;
1688
- if (isTab) {
1689
- if (isActivated) {
1690
- afterCheckValue();
1691
- }
1692
- isActivated = false;
1693
- reactData.isActivated = isActivated;
1694
- } else if (operArrow) {
1695
- if (isDatePickerType) {
1696
- if (isActivated) {
1697
- if (visiblePanel) {
1698
- dateOffsetEvent(evnt);
1699
- } else if (isUpArrow || isDwArrow) {
1700
- datePickerOpenEvent(evnt);
1701
- }
1702
- }
1703
- }
1704
- } else if (isEnter) {
1705
- if (isDatePickerType) {
1706
- if (visiblePanel) {
1707
- if (reactData.datePanelValue) {
1708
- dateSelectItem(reactData.datePanelValue);
1709
- } else {
1710
- hidePanel();
661
+ if (!clickMethod && code) {
662
+ const gCommandOpts = _ui.commands.get(code);
663
+ const dpCommandMethod = gCommandOpts ? gCommandOpts.datePickerCommandMethod : null;
664
+ if (dpCommandMethod) {
665
+ dpCommandMethod(shortcutParams);
666
+ } else {
667
+ const dateValueFormat = computeDateValueFormat.value;
668
+ const firstDayOfWeek = computeFirstDayOfWeek.value;
669
+ switch (code) {
670
+ case 'now':
671
+ case 'prev':
672
+ case 'next':
673
+ case 'minus':
674
+ case 'plus':
675
+ {
676
+ const restObj = (0, _util.getDateByCode)(code, value, type, {
677
+ valueFormat: dateValueFormat,
678
+ firstDay: firstDayOfWeek
679
+ });
680
+ value = restObj.value;
681
+ shortcutParams.value = value;
682
+ handleChange(value, $event);
683
+ break;
1711
684
  }
1712
- } else if (isActivated) {
1713
- datePickerOpenEvent(evnt);
1714
- }
1715
- }
1716
- } else if (isPgUp || isPgDn) {
1717
- if (isDatePickerType) {
1718
- if (isActivated) {
1719
- datePgOffsetEvent(evnt);
1720
- }
1721
- }
1722
- }
1723
- if (isTab || isEsc) {
1724
- if (visiblePanel) {
1725
- hidePanel();
1726
- }
1727
- } else if (isDel && clearable) {
1728
- if (isActivated) {
1729
- clearValueEvent(evnt, null);
685
+ default:
686
+ (0, _log.errLog)('vxe.error.notCommands', [code]);
687
+ break;
1730
688
  }
1731
689
  }
1732
- }
1733
- };
1734
- const handleGlobalMousewheelEvent = evnt => {
1735
- const {
1736
- visiblePanel
1737
- } = reactData;
1738
- const isDisabled = computeIsDisabled.value;
1739
- if (!isDisabled) {
1740
- if (visiblePanel) {
1741
- const panelWrapperElem = refPanelWrapper.value;
1742
- if ((0, _dom.getEventTargetNode)(evnt, panelWrapperElem).flag) {
1743
- updatePlacement();
1744
- } else {
1745
- hidePanel();
1746
- afterCheckValue();
1747
- }
690
+ } else {
691
+ const optClickMethod = clickMethod || shortcutOpts.clickMethod;
692
+ if (optClickMethod) {
693
+ optClickMethod(shortcutParams);
1748
694
  }
1749
695
  }
1750
- };
1751
- const handleGlobalBlurEvent = () => {
1752
- const {
1753
- isActivated,
1754
- visiblePanel
1755
- } = reactData;
1756
- if (visiblePanel) {
696
+ if (autoClose) {
1757
697
  hidePanel();
1758
- afterCheckValue();
1759
- } else if (isActivated) {
1760
- afterCheckValue();
1761
698
  }
699
+ dispatchEvent('shortcut-click', shortcutParams, $event);
1762
700
  };
1763
701
  const dispatchEvent = (type, params, evnt) => {
1764
702
  emit(type, (0, _ui.createEvent)(evnt, {
1765
703
  $datePicker: $xeDatePicker
1766
704
  }, params));
1767
705
  };
1768
- datePickerMethods = {
706
+ const datePickerMethods = {
1769
707
  dispatchEvent,
708
+ setModelValue(value) {
709
+ reactData.inputValue = value;
710
+ emit('update:modelValue', value);
711
+ },
712
+ setModelValueByEvent(evnt, value) {
713
+ handleChange(value || '', evnt);
714
+ },
1770
715
  focus() {
1771
716
  const inputElem = refInputTarget.value;
1772
717
  reactData.isActivated = true;
@@ -1790,389 +735,19 @@ var _default = exports.default = (0, _vue.defineComponent)({
1790
735
  updatePlacement
1791
736
  };
1792
737
  Object.assign($xeDatePicker, datePickerMethods);
1793
- const renderDateLabel = (item, label) => {
1794
- const {
1795
- festivalMethod
1796
- } = props;
1797
- if (festivalMethod) {
1798
- const {
1799
- datePanelType
1800
- } = reactData;
1801
- const festivalRest = festivalMethod({
1802
- type: datePanelType,
1803
- viewType: datePanelType,
1804
- date: item.date,
1805
- $datePicker: $xeDatePicker
1806
- });
1807
- const festivalItem = festivalRest ? _xeUtils.default.isString(festivalRest) ? {
1808
- label: festivalRest
1809
- } : festivalRest : {};
1810
- const extraItem = festivalItem.extra ? _xeUtils.default.isString(festivalItem.extra) ? {
1811
- label: festivalItem.extra
1812
- } : festivalItem.extra : null;
1813
- const labels = [(0, _vue.h)('span', {
1814
- class: ['vxe-date-picker--date-label', {
1815
- 'is-notice': festivalItem.notice
1816
- }]
1817
- }, extraItem && extraItem.label ? [(0, _vue.h)('span', `${label}`), (0, _vue.h)('span', {
1818
- class: ['vxe-date-picker--date-label--extra', extraItem.important ? 'is-important' : '', extraItem.className],
1819
- style: extraItem.style
1820
- }, _xeUtils.default.toValueString(extraItem.label))] : `${label}`)];
1821
- const festivalLabel = festivalItem.label;
1822
- if (festivalLabel) {
1823
- // 默认最多支持3个节日重叠
1824
- const festivalLabels = _xeUtils.default.toValueString(festivalLabel).split(',');
1825
- labels.push((0, _vue.h)('span', {
1826
- class: ['vxe-date-picker--date-festival', festivalItem.important ? 'is-important' : '', festivalItem.className],
1827
- style: festivalItem.style
1828
- }, [festivalLabels.length > 1 ? (0, _vue.h)('span', {
1829
- class: ['vxe-date-picker--date-festival--overlap', `overlap--${festivalLabels.length}`]
1830
- }, festivalLabels.map(label => (0, _vue.h)('span', label.substring(0, 3)))) : (0, _vue.h)('span', {
1831
- class: 'vxe-date-picker--date-festival--label'
1832
- }, festivalLabels[0].substring(0, 3))]));
1833
- }
1834
- return labels;
1835
- }
1836
- return label;
1837
- };
1838
- const renderDateDayTable = () => {
1839
- const {
1840
- multiple
1841
- } = props;
1842
- const {
1843
- datePanelType,
1844
- datePanelValue
1845
- } = reactData;
1846
- const dateValue = computeDateValue.value;
1847
- const dateHeaders = computeDateHeaders.value;
1848
- const dayDatas = computeDayDatas.value;
1849
- const dateListValue = computeDateListValue.value;
1850
- const overCount = computeOverCount.value;
1851
- const matchFormat = 'yyyyMMdd';
1852
- return [(0, _vue.h)('table', {
1853
- class: `vxe-date-picker--date-${datePanelType}-view`,
1854
- cellspacing: 0,
1855
- cellpadding: 0,
1856
- border: 0
1857
- }, [(0, _vue.h)('thead', [(0, _vue.h)('tr', dateHeaders.map(item => {
1858
- return (0, _vue.h)('th', item.label);
1859
- }))]), (0, _vue.h)('tbody', dayDatas.map(rows => {
1860
- return (0, _vue.h)('tr', rows.map(item => {
1861
- const isSelected = multiple ? dateListValue.some(val => _xeUtils.default.isDateSame(val, item.date, matchFormat)) : _xeUtils.default.isDateSame(dateValue, item.date, matchFormat);
1862
- return (0, _vue.h)('td', {
1863
- class: {
1864
- 'is--prev': item.isPrev,
1865
- 'is--current': item.isCurrent,
1866
- 'is--now': item.isNow,
1867
- 'is--next': item.isNext,
1868
- 'is--disabled': isDateDisabled(item),
1869
- 'is--selected': isSelected,
1870
- 'is--over': overCount && !isSelected,
1871
- 'is--hover': !overCount && _xeUtils.default.isDateSame(datePanelValue, item.date, matchFormat)
1872
- },
1873
- onClick: () => dateSelectEvent(item),
1874
- onMouseenter: () => dateMouseenterEvent(item)
1875
- }, renderDateLabel(item, item.label));
1876
- }));
1877
- }))])];
1878
- };
1879
- const renderDateWeekTable = () => {
1880
- const {
1881
- multiple
1882
- } = props;
1883
- const {
1884
- datePanelType,
1885
- datePanelValue
1886
- } = reactData;
1887
- const dateValue = computeDateValue.value;
1888
- const weekHeaders = computeWeekHeaders.value;
1889
- const weekDates = computeWeekDates.value;
1890
- const dateListValue = computeDateListValue.value;
1891
- const overCount = computeOverCount.value;
1892
- const matchFormat = 'yyyyMMdd';
1893
- return [(0, _vue.h)('table', {
1894
- class: `vxe-date-picker--date-${datePanelType}-view`,
1895
- cellspacing: 0,
1896
- cellpadding: 0,
1897
- border: 0
1898
- }, [(0, _vue.h)('thead', [(0, _vue.h)('tr', weekHeaders.map(item => {
1899
- return (0, _vue.h)('th', item.label);
1900
- }))]), (0, _vue.h)('tbody', weekDates.map(rows => {
1901
- 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));
1902
- const isHover = rows.some(item => _xeUtils.default.isDateSame(datePanelValue, item.date, matchFormat));
1903
- return (0, _vue.h)('tr', rows.map(item => {
1904
- return (0, _vue.h)('td', {
1905
- class: {
1906
- 'is--prev': item.isPrev,
1907
- 'is--current': item.isCurrent,
1908
- 'is--now': item.isNow,
1909
- 'is--next': item.isNext,
1910
- 'is--disabled': isDateDisabled(item),
1911
- 'is--selected': isSelected,
1912
- 'is--over': overCount && !isSelected,
1913
- 'is--hover': !overCount && isHover
1914
- },
1915
- // event
1916
- onClick: () => dateSelectEvent(item),
1917
- onMouseenter: () => dateMouseenterEvent(item)
1918
- }, renderDateLabel(item, item.label));
1919
- }));
1920
- }))])];
1921
- };
1922
- const renderDateMonthTable = () => {
1923
- const {
1924
- multiple
1925
- } = props;
1926
- const {
1927
- datePanelType,
1928
- datePanelValue
1929
- } = reactData;
1930
- const dateValue = computeDateValue.value;
1931
- const monthDatas = computeMonthDatas.value;
1932
- const dateListValue = computeDateListValue.value;
1933
- const overCount = computeOverCount.value;
1934
- const matchFormat = 'yyyyMM';
1935
- return [(0, _vue.h)('table', {
1936
- class: `vxe-date-picker--date-${datePanelType}-view`,
1937
- cellspacing: 0,
1938
- cellpadding: 0,
1939
- border: 0
1940
- }, [(0, _vue.h)('tbody', monthDatas.map(rows => {
1941
- return (0, _vue.h)('tr', rows.map(item => {
1942
- const isSelected = multiple ? dateListValue.some(val => _xeUtils.default.isDateSame(val, item.date, matchFormat)) : _xeUtils.default.isDateSame(dateValue, item.date, matchFormat);
1943
- return (0, _vue.h)('td', {
1944
- class: {
1945
- 'is--prev': item.isPrev,
1946
- 'is--current': item.isCurrent,
1947
- 'is--now': item.isNow,
1948
- 'is--next': item.isNext,
1949
- 'is--disabled': isDateDisabled(item),
1950
- 'is--selected': isSelected,
1951
- 'is--over': overCount && !isSelected,
1952
- 'is--hover': !overCount && _xeUtils.default.isDateSame(datePanelValue, item.date, matchFormat)
1953
- },
1954
- onClick: () => dateSelectEvent(item),
1955
- onMouseenter: () => dateMouseenterEvent(item)
1956
- }, renderDateLabel(item, (0, _ui.getI18n)(`vxe.input.date.months.m${item.month}`)));
1957
- }));
1958
- }))])];
1959
- };
1960
- const renderDateQuarterTable = () => {
1961
- const {
1962
- multiple
1963
- } = props;
1964
- const {
1965
- datePanelType,
1966
- datePanelValue
1967
- } = reactData;
1968
- const dateValue = computeDateValue.value;
1969
- const quarterDatas = computeQuarterDatas.value;
1970
- const dateListValue = computeDateListValue.value;
1971
- const overCount = computeOverCount.value;
1972
- const matchFormat = 'yyyyq';
1973
- return [(0, _vue.h)('table', {
1974
- class: `vxe-date-picker--date-${datePanelType}-view`,
1975
- cellspacing: 0,
1976
- cellpadding: 0,
1977
- border: 0
1978
- }, [(0, _vue.h)('tbody', quarterDatas.map(rows => {
1979
- return (0, _vue.h)('tr', rows.map(item => {
1980
- const isSelected = multiple ? dateListValue.some(val => _xeUtils.default.isDateSame(val, item.date, matchFormat)) : _xeUtils.default.isDateSame(dateValue, item.date, matchFormat);
1981
- return (0, _vue.h)('td', {
1982
- class: {
1983
- 'is--prev': item.isPrev,
1984
- 'is--current': item.isCurrent,
1985
- 'is--now': item.isNow,
1986
- 'is--next': item.isNext,
1987
- 'is--disabled': isDateDisabled(item),
1988
- 'is--selected': isSelected,
1989
- 'is--over': overCount && !isSelected,
1990
- 'is--hover': !overCount && _xeUtils.default.isDateSame(datePanelValue, item.date, matchFormat)
1991
- },
1992
- onClick: () => dateSelectEvent(item),
1993
- onMouseenter: () => dateMouseenterEvent(item)
1994
- }, renderDateLabel(item, (0, _ui.getI18n)(`vxe.input.date.quarters.q${item.quarter}`)));
1995
- }));
1996
- }))])];
1997
- };
1998
- const renderDateYearTable = () => {
1999
- const {
2000
- multiple
2001
- } = props;
2002
- const {
2003
- datePanelType,
2004
- datePanelValue
2005
- } = reactData;
2006
- const dateValue = computeDateValue.value;
2007
- const yearDatas = computeYearDatas.value;
2008
- const dateListValue = computeDateListValue.value;
2009
- const overCount = computeOverCount.value;
2010
- const matchFormat = 'yyyy';
2011
- return [(0, _vue.h)('table', {
2012
- class: `vxe-date-picker--date-${datePanelType}-view`,
2013
- cellspacing: 0,
2014
- cellpadding: 0,
2015
- border: 0
2016
- }, [(0, _vue.h)('tbody', yearDatas.map(rows => {
2017
- return (0, _vue.h)('tr', rows.map(item => {
2018
- const isSelected = multiple ? dateListValue.some(val => _xeUtils.default.isDateSame(val, item.date, matchFormat)) : _xeUtils.default.isDateSame(dateValue, item.date, matchFormat);
2019
- return (0, _vue.h)('td', {
2020
- class: {
2021
- 'is--prev': item.isPrev,
2022
- 'is--current': item.isCurrent,
2023
- 'is--now': item.isNow,
2024
- 'is--next': item.isNext,
2025
- 'is--disabled': isDateDisabled(item),
2026
- 'is--selected': isSelected,
2027
- 'is--over': overCount && !isSelected,
2028
- 'is--hover': !overCount && _xeUtils.default.isDateSame(datePanelValue, item.date, matchFormat)
2029
- },
2030
- onClick: () => dateSelectEvent(item),
2031
- onMouseenter: () => dateMouseenterEvent(item)
2032
- }, renderDateLabel(item, item.year));
2033
- }));
2034
- }))])];
2035
- };
2036
- const renderDateTable = () => {
2037
- const {
2038
- datePanelType
2039
- } = reactData;
2040
- switch (datePanelType) {
2041
- case 'week':
2042
- return renderDateWeekTable();
2043
- case 'month':
2044
- return renderDateMonthTable();
2045
- case 'quarter':
2046
- return renderDateQuarterTable();
2047
- case 'year':
2048
- return renderDateYearTable();
2049
- }
2050
- return renderDateDayTable();
2051
- };
2052
- const renderDatePanel = () => {
2053
- const {
2054
- multiple
2055
- } = props;
2056
- const {
2057
- datePanelType
2058
- } = reactData;
2059
- const isDisabledPrevDateBtn = computeIsDisabledPrevDateBtn.value;
2060
- const isDisabledNextDateBtn = computeIsDisabledNextDateBtn.value;
2061
- const selectDatePanelObj = computeSelectDatePanelObj.value;
2062
- const supportMultiples = computeSupportMultiples.value;
2063
- return [(0, _vue.h)('div', {
2064
- class: 'vxe-date-picker--date-picker-header'
2065
- }, [(0, _vue.h)('div', {
2066
- class: 'vxe-date-picker--date-picker-type-wrapper'
2067
- }, [datePanelType === 'year' ? (0, _vue.h)('span', {
2068
- class: 'vxe-date-picker--date-picker-label'
2069
- }, selectDatePanelObj.y) : (0, _vue.h)('span', {
2070
- class: 'vxe-date-picker--date-picker-btns'
2071
- }, [(0, _vue.h)('span', {
2072
- class: 'vxe-date-picker--date-picker-btn',
2073
- onClick: dateToggleYearTypeEvent
2074
- }, selectDatePanelObj.y), selectDatePanelObj.m ? (0, _vue.h)('span', {
2075
- class: 'vxe-date-picker--date-picker-btn',
2076
- onClick: dateToggleMonthTypeEvent
2077
- }, selectDatePanelObj.m) : (0, _ui.renderEmptyElement)($xeDatePicker)])]), (0, _vue.h)('div', {
2078
- class: 'vxe-date-picker--date-picker-btn-wrapper'
2079
- }, [(0, _vue.h)('span', {
2080
- class: ['vxe-date-picker--date-picker-btn vxe-date-picker--date-picker-prev-btn', {
2081
- 'is--disabled': isDisabledPrevDateBtn
2082
- }],
2083
- onClick: datePrevEvent
2084
- }, [(0, _vue.h)('i', {
2085
- class: 'vxe-icon-caret-left'
2086
- })]), (0, _vue.h)('span', {
2087
- class: 'vxe-date-picker--date-picker-btn vxe-date-picker--date-picker-current-btn',
2088
- onClick: dateTodayMonthEvent
2089
- }, [(0, _vue.h)('i', {
2090
- class: 'vxe-icon-dot'
2091
- })]), (0, _vue.h)('span', {
2092
- class: ['vxe-date-picker--date-picker-btn vxe-date-picker--date-picker-next-btn', {
2093
- 'is--disabled': isDisabledNextDateBtn
2094
- }],
2095
- onClick: dateNextEvent
2096
- }, [(0, _vue.h)('i', {
2097
- class: 'vxe-icon-caret-right'
2098
- })]), multiple && supportMultiples ? (0, _vue.h)('span', {
2099
- class: 'vxe-date-picker--date-picker-btn vxe-date-picker--date-picker-confirm-btn'
2100
- }, [(0, _vue.h)('button', {
2101
- class: 'vxe-date-picker--date-picker-confirm',
2102
- type: 'button',
2103
- onClick: dateConfirmEvent
2104
- }, (0, _ui.getI18n)('vxe.button.confirm'))]) : null])]), (0, _vue.h)('div', {
2105
- class: 'vxe-date-picker--date-picker-body'
2106
- }, renderDateTable())];
2107
- };
2108
- const renderTimePanel = () => {
2109
- const {
2110
- datetimePanelValue
2111
- } = reactData;
2112
- const dateTimeLabel = computeDateTimeLabel.value;
2113
- const hourList = computeHourList.value;
2114
- const hasTimeMinute = computeHasTimeMinute.value;
2115
- const minuteList = computeMinuteList.value;
2116
- const hasTimeSecond = computeHasTimeSecond.value;
2117
- const secondList = computeSecondList.value;
2118
- return [(0, _vue.h)('div', {
2119
- class: 'vxe-date-picker--time-picker-header'
2120
- }, [hasTimeMinute ? (0, _vue.h)('div', {
2121
- class: 'vxe-date-picker--time-picker-title'
2122
- }, dateTimeLabel) : (0, _vue.createCommentVNode)(), (0, _vue.h)('div', {
2123
- class: 'vxe-date-picker--time-picker-btn'
2124
- }, [(0, _vue.h)('button', {
2125
- class: 'vxe-date-picker--time-picker-confirm',
2126
- type: 'button',
2127
- onClick: dateConfirmEvent
2128
- }, (0, _ui.getI18n)('vxe.button.confirm'))])]), (0, _vue.h)('div', {
2129
- ref: refInputTimeBody,
2130
- class: 'vxe-date-picker--time-picker-body'
2131
- }, [(0, _vue.h)('ul', {
2132
- class: 'vxe-date-picker--time-picker-hour-list'
2133
- }, hourList.map((item, index) => {
2134
- return (0, _vue.h)('li', {
2135
- key: index,
2136
- class: {
2137
- 'is--selected': datetimePanelValue && datetimePanelValue.getHours() === item.value
2138
- },
2139
- onClick: evnt => dateHourEvent(evnt, item)
2140
- }, item.label);
2141
- })), hasTimeMinute ? (0, _vue.h)('ul', {
2142
- class: 'vxe-date-picker--time-picker-minute-list'
2143
- }, minuteList.map((item, index) => {
2144
- return (0, _vue.h)('li', {
2145
- key: index,
2146
- class: {
2147
- 'is--selected': datetimePanelValue && datetimePanelValue.getMinutes() === item.value
2148
- },
2149
- onClick: evnt => dateMinuteEvent(evnt, item)
2150
- }, item.label);
2151
- })) : (0, _vue.createCommentVNode)(), hasTimeMinute && hasTimeSecond ? (0, _vue.h)('ul', {
2152
- class: 'vxe-date-picker--time-picker-second-list'
2153
- }, secondList.map((item, index) => {
2154
- return (0, _vue.h)('li', {
2155
- key: index,
2156
- class: {
2157
- 'is--selected': datetimePanelValue && datetimePanelValue.getSeconds() === item.value
2158
- },
2159
- onClick: evnt => dateSecondEvent(evnt, item)
2160
- }, item.label);
2161
- })) : (0, _vue.createCommentVNode)()])];
2162
- };
2163
738
  const renderShortcutBtn = (pos, isVertical) => {
2164
739
  const shortcutOpts = computeShortcutOpts.value;
2165
740
  const {
2166
- options,
2167
741
  position,
2168
742
  align,
2169
743
  mode
2170
744
  } = shortcutOpts;
2171
- if ((0, _utils.isEnableConf)(shortcutOpts) && options && options.length && (position || 'left') === pos) {
745
+ const shortcutList = computeShortcutList.value;
746
+ if ((0, _utils.isEnableConf)(shortcutOpts) && shortcutList.length && (position || 'left') === pos) {
2172
747
  return (0, _vue.h)('div', {
2173
- class: `vxe-date-picker--panel-${pos}-wrapper`
748
+ class: `vxe-date-picker--layout-${pos}-wrapper`
2174
749
  }, [(0, _vue.h)(_buttonGroup.default, {
2175
- options,
750
+ options: shortcutList,
2176
751
  mode,
2177
752
  align,
2178
753
  vertical: isVertical,
@@ -2181,49 +756,28 @@ var _default = exports.default = (0, _vue.defineComponent)({
2181
756
  }
2182
757
  return (0, _ui.renderEmptyElement)($xeDatePicker);
2183
758
  };
2184
- const renderPickerPanel = () => {
2185
- const {
2186
- type
2187
- } = props;
2188
- if (type === 'datetime') {
2189
- return (0, _vue.h)('div', {
2190
- key: type,
2191
- ref: refPanelWrapper,
2192
- class: 'vxe-date-picker--panel-datetime-layout-wrapper'
2193
- }, [(0, _vue.h)('div', {
2194
- class: 'vxe-date-picker--panel-datetime-left-wrapper'
2195
- }, renderDatePanel()), (0, _vue.h)('div', {
2196
- class: 'vxe-date-picker--panel-datetime-right-wrapper'
2197
- }, renderTimePanel())]);
2198
- } else if (type === 'time') {
2199
- return (0, _vue.h)('div', {
2200
- key: type,
2201
- ref: refPanelWrapper,
2202
- class: 'vxe-date-picker--panel-wrapper'
2203
- }, renderTimePanel());
2204
- }
2205
- return (0, _vue.h)('div', {
2206
- key: type || 'default',
2207
- ref: refPanelWrapper,
2208
- class: 'vxe-date-picker--panel-wrapper'
2209
- }, renderDatePanel());
2210
- };
2211
759
  const renderPanel = () => {
2212
760
  const {
2213
- type
761
+ type,
762
+ multiple,
763
+ showClearButton,
764
+ showConfirmButton
2214
765
  } = props;
2215
766
  const {
2216
767
  initialized,
2217
768
  isAniVisible,
2218
769
  visiblePanel,
2219
770
  panelPlacement,
2220
- panelStyle
771
+ panelStyle,
772
+ inputValue
2221
773
  } = reactData;
2222
774
  const vSize = computeSize.value;
2223
775
  const btnTransfer = computeBtnTransfer.value;
2224
776
  const shortcutOpts = computeShortcutOpts.value;
777
+ const isClearable = computeIsClearable.value;
778
+ const isDateTimeType = computeIsDateTimeType.value;
779
+ const shortcutList = computeShortcutList.value;
2225
780
  const {
2226
- options,
2227
781
  position
2228
782
  } = shortcutOpts;
2229
783
  const headerSlot = slots.header;
@@ -2232,7 +786,9 @@ var _default = exports.default = (0, _vue.defineComponent)({
2232
786
  const bottomSlot = slots.bottom;
2233
787
  const leftSlot = slots.left;
2234
788
  const rightSlot = slots.right;
2235
- const hasShortcutBtn = options && options.length;
789
+ const hasShortcutBtn = shortcutList.length > 0;
790
+ const showConfirmBtn = showConfirmButton === null ? isDateTimeType || multiple : showConfirmButton;
791
+ const showClearBtn = showClearButton === null ? isClearable && showConfirmBtn && type !== 'time' : showClearButton;
2236
792
  return (0, _vue.h)(_vue.Teleport, {
2237
793
  to: 'body',
2238
794
  disabled: btnTransfer ? !initialized : true
@@ -2251,25 +807,61 @@ var _default = exports.default = (0, _vue.defineComponent)({
2251
807
  placement: panelPlacement,
2252
808
  style: panelStyle
2253
809
  }, initialized && (visiblePanel || isAniVisible) ? [(0, _vue.h)('div', {
2254
- class: 'vxe-date-picker--panel-layout-wrapper'
810
+ ref: refPanelWrapper,
811
+ class: ['vxe-date-picker--layout-all-wrapper', `type--${type}`, {
812
+ [`size--${vSize}`]: vSize
813
+ }]
2255
814
  }, [topSlot ? (0, _vue.h)('div', {
2256
- class: 'vxe-date-picker--panel-top-wrapper'
815
+ class: 'vxe-date-picker--layout-top-wrapper'
2257
816
  }, topSlot({})) : renderShortcutBtn('top'), (0, _vue.h)('div', {
2258
- class: 'vxe-date-picker--panel-body-layout-wrapper'
817
+ class: 'vxe-date-picker--layout-body-layout-wrapper'
2259
818
  }, [leftSlot ? (0, _vue.h)('div', {
2260
- class: 'vxe-date-picker--panel-left-wrapper'
819
+ class: 'vxe-date-picker--layout-left-wrapper'
2261
820
  }, leftSlot({})) : renderShortcutBtn('left', true), (0, _vue.h)('div', {
2262
- class: 'vxe-date-picker--panel-body-content-wrapper'
821
+ class: 'vxe-date-picker--layout-body-content-wrapper'
2263
822
  }, [headerSlot ? (0, _vue.h)('div', {
2264
- class: 'vxe-date-picker--panel-header-wrapper'
823
+ class: 'vxe-date-picker--layout-header-wrapper'
2265
824
  }, headerSlot({})) : renderShortcutBtn('header'), (0, _vue.h)('div', {
2266
- class: 'vxe-date-picker--panel-body-wrapper'
2267
- }, [renderPickerPanel()]), footerSlot ? (0, _vue.h)('div', {
2268
- class: 'vxe-date-picker--panel-footer-wrapper'
2269
- }, footerSlot({})) : renderShortcutBtn('footer')]), rightSlot ? (0, _vue.h)('div', {
2270
- class: 'vxe-date-picker--panel-right-wrapper'
825
+ class: 'vxe-date-picker--layout-body-wrapper'
826
+ }, [(0, _vue.h)(_datePanel.default, {
827
+ ref: refDatePanel,
828
+ modelValue: reactData.inputValue,
829
+ type: props.type,
830
+ className: props.className,
831
+ multiple: props.multiple,
832
+ limitCount: props.limitCount,
833
+ startDate: props.startDate,
834
+ endDate: props.endDate,
835
+ minDate: props.minDate,
836
+ maxDate: props.maxDate,
837
+ startDay: props.startDay,
838
+ labelFormat: props.labelFormat,
839
+ valueFormat: props.valueFormat,
840
+ festivalMethod: props.festivalMethod,
841
+ disabledMethod: props.disabledMethod,
842
+ selectDay: props.selectDay,
843
+ onChange: panelChangeEvent,
844
+ onDateToday: hidePanel
845
+ })]), (0, _vue.h)('div', {
846
+ class: 'vxe-date-picker--layout-footer-wrapper'
847
+ }, [(0, _vue.h)('div', {
848
+ class: 'vxe-date-picker--layout-footer-custom'
849
+ }, footerSlot ? footerSlot({}) : [renderShortcutBtn('footer')]), showClearBtn || showConfirmBtn ? (0, _vue.h)('div', {
850
+ class: 'vxe-date-picker--layout-footer-btns'
851
+ }, [showClearBtn ? (0, _vue.h)(_button.default, {
852
+ size: 'mini',
853
+ disabled: inputValue === '' || _xeUtils.default.eqNull(inputValue),
854
+ content: (0, _ui.getI18n)('vxe.button.clear'),
855
+ onClick: clearValueEvent
856
+ }) : (0, _ui.renderEmptyElement)($xeDatePicker), showConfirmBtn ? (0, _vue.h)(_button.default, {
857
+ size: 'mini',
858
+ status: 'primary',
859
+ content: (0, _ui.getI18n)('vxe.button.confirm'),
860
+ onClick: confirmEvent
861
+ }) : (0, _ui.renderEmptyElement)($xeDatePicker)]) : (0, _ui.renderEmptyElement)($xeDatePicker)])]), rightSlot ? (0, _vue.h)('div', {
862
+ class: 'vxe-date-picker--layout-right-wrapper'
2271
863
  }, rightSlot({})) : renderShortcutBtn('right', true)]), bottomSlot ? (0, _vue.h)('div', {
2272
- class: 'vxe-date-picker--panel-bottom-wrapper'
864
+ class: 'vxe-date-picker--layout-bottom-wrapper'
2273
865
  }, bottomSlot({})) : renderShortcutBtn('bottom')])] : [])]);
2274
866
  };
2275
867
  const renderPrefixIcon = () => {
@@ -2305,12 +897,12 @@ var _default = exports.default = (0, _vue.defineComponent)({
2305
897
  onClick: clearValueEvent
2306
898
  }, [(0, _vue.h)('i', {
2307
899
  class: (0, _ui.getIcon)().INPUT_CLEAR
2308
- })]) : (0, _vue.createCommentVNode)(), renderExtraSuffixIcon(), suffixSlot || suffixIcon ? (0, _vue.h)('div', {
900
+ })]) : (0, _ui.renderEmptyElement)($xeDatePicker), renderExtraSuffixIcon(), suffixSlot || suffixIcon ? (0, _vue.h)('div', {
2309
901
  class: 'vxe-date-picker--suffix-icon',
2310
902
  onClick: clickSuffixEvent
2311
903
  }, suffixSlot ? (0, _vn.getSlotVNs)(suffixSlot({})) : [(0, _vue.h)('i', {
2312
904
  class: suffixIcon
2313
- })]) : (0, _vue.createCommentVNode)()]);
905
+ })]) : (0, _ui.renderEmptyElement)($xeDatePicker)]);
2314
906
  };
2315
907
  const renderExtraSuffixIcon = () => {
2316
908
  return (0, _vue.h)('div', {
@@ -2324,27 +916,26 @@ var _default = exports.default = (0, _vue.defineComponent)({
2324
916
  const {
2325
917
  className,
2326
918
  type,
2327
- align,
2328
919
  name,
2329
- autocomplete,
2330
920
  autoComplete
2331
921
  } = props;
2332
922
  const {
2333
923
  inputValue,
924
+ inputLabel,
2334
925
  visiblePanel,
2335
926
  isActivated
2336
927
  } = reactData;
2337
928
  const vSize = computeSize.value;
2338
929
  const isDisabled = computeIsDisabled.value;
2339
930
  const formReadonly = computeFormReadonly.value;
931
+ const panelLabel = computePanelLabel.value;
2340
932
  if (formReadonly) {
2341
933
  return (0, _vue.h)('div', {
2342
934
  ref: refElem,
2343
935
  class: ['vxe-date-picker--readonly', `type--${type}`, className]
2344
- }, inputValue);
936
+ }, panelLabel);
2345
937
  }
2346
938
  const inputReadonly = computeInputReadonly.value;
2347
- const inputType = computeDatePickerType.value;
2348
939
  const inpPlaceholder = computeInpPlaceholder.value;
2349
940
  const isClearable = computeIsClearable.value;
2350
941
  const prefix = renderPrefixIcon();
@@ -2353,7 +944,6 @@ var _default = exports.default = (0, _vue.defineComponent)({
2353
944
  ref: refElem,
2354
945
  class: ['vxe-date-picker', `type--${type}`, className, {
2355
946
  [`size--${vSize}`]: vSize,
2356
- [`is--${align}`]: align,
2357
947
  'is--prefix': !!prefix,
2358
948
  'is--suffix': !!suffix,
2359
949
  'is--visible': visiblePanel,
@@ -2362,18 +952,18 @@ var _default = exports.default = (0, _vue.defineComponent)({
2362
952
  'show--clear': isClearable && !isDisabled && !(inputValue === '' || _xeUtils.default.eqNull(inputValue))
2363
953
  }],
2364
954
  spellcheck: false
2365
- }, [prefix || (0, _vue.createCommentVNode)(), (0, _vue.h)('div', {
955
+ }, [prefix || (0, _ui.renderEmptyElement)($xeDatePicker), (0, _vue.h)('div', {
2366
956
  class: 'vxe-date-picker--wrapper'
2367
957
  }, [(0, _vue.h)('input', {
2368
958
  ref: refInputTarget,
2369
959
  class: 'vxe-date-picker--inner',
2370
- value: inputValue,
960
+ value: inputLabel,
2371
961
  name,
2372
- type: inputType,
962
+ type: 'text',
2373
963
  placeholder: inpPlaceholder,
2374
964
  readonly: inputReadonly,
2375
965
  disabled: isDisabled,
2376
- autocomplete: autoComplete || autocomplete,
966
+ autocomplete: autoComplete,
2377
967
  onKeydown: keydownEvent,
2378
968
  onKeyup: keyupEvent,
2379
969
  onClick: clickEvent,
@@ -2381,47 +971,28 @@ var _default = exports.default = (0, _vue.defineComponent)({
2381
971
  onChange: changeEvent,
2382
972
  onFocus: focusEvent,
2383
973
  onBlur: blurEvent
2384
- })]), suffix || (0, _vue.createCommentVNode)(),
974
+ })]), suffix || (0, _ui.renderEmptyElement)($xeDatePicker),
2385
975
  // 下拉面板
2386
976
  renderPanel()]);
2387
977
  };
2388
- (0, _vue.watch)(() => props.modelValue, val => {
2389
- updateModelValue(val);
2390
- changeValue();
2391
- });
2392
- (0, _vue.watch)(() => props.type, () => {
2393
- // 切换类型是重置内置变量
2394
- Object.assign(reactData, {
2395
- inputValue: '',
2396
- datetimePanelValue: null,
2397
- datePanelValue: null,
2398
- datePanelLabel: '',
2399
- datePanelType: 'day',
2400
- selectMonth: null,
2401
- currentDate: null
2402
- });
2403
- initValue();
978
+ (0, _vue.watch)(computePanelLabel, val => {
979
+ reactData.inputLabel = val;
2404
980
  });
2405
- (0, _vue.watch)(computeDateLabelFormat, () => {
2406
- const isDatePickerType = computeIsDatePickerType.value;
2407
- if (isDatePickerType) {
2408
- dateParseValue(reactData.datePanelValue);
2409
- reactData.inputValue = props.multiple ? computeDateMultipleLabel.value : reactData.datePanelLabel;
2410
- }
981
+ (0, _vue.watch)(() => props.modelValue, () => {
982
+ updateModelValue();
2411
983
  });
2412
984
  (0, _vue.nextTick)(() => {
2413
985
  _ui.globalEvents.on($xeDatePicker, 'mousewheel', handleGlobalMousewheelEvent);
2414
986
  _ui.globalEvents.on($xeDatePicker, 'mousedown', handleGlobalMousedownEvent);
2415
- _ui.globalEvents.on($xeDatePicker, 'keydown', handleGlobalKeydownEvent);
2416
987
  _ui.globalEvents.on($xeDatePicker, 'blur', handleGlobalBlurEvent);
2417
988
  });
2418
989
  (0, _vue.onUnmounted)(() => {
2419
990
  _ui.globalEvents.off($xeDatePicker, 'mousewheel');
2420
991
  _ui.globalEvents.off($xeDatePicker, 'mousedown');
2421
- _ui.globalEvents.off($xeDatePicker, 'keydown');
2422
992
  _ui.globalEvents.off($xeDatePicker, 'blur');
2423
993
  });
2424
- initValue();
994
+ updateModelValue();
995
+ (0, _vue.provide)('$xeDatePicker', $xeDatePicker);
2425
996
  $xeDatePicker.renderVN = renderVN;
2426
997
  return $xeDatePicker;
2427
998
  },