ai.touchui-vue 1.30.2 → 1.30.3

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 (724) hide show
  1. package/README.md +21 -21
  2. package/lib/ai.touchui-vue.common.js +2087 -2092
  3. package/lib/chat.js +5 -5
  4. package/lib/collapse.js +2 -1
  5. package/lib/color.js +5 -5
  6. package/lib/date-picker.js +2 -1
  7. package/lib/date-range.js +11 -12
  8. package/lib/export.js +3 -3
  9. package/lib/index.js +1 -1
  10. package/lib/locale/format.js +10 -10
  11. package/lib/menu-icon.js +295 -295
  12. package/lib/mixins/migrating.js +20 -20
  13. package/lib/mixins/transition.js +14 -14
  14. package/lib/org.js +2 -1
  15. package/lib/page.js +2 -1
  16. package/lib/range.js +3 -3
  17. package/lib/static/{net-mix.293a4b6.svg → net-mix.dc6e414.svg} +7 -7
  18. package/lib/table.js +734 -740
  19. package/lib/utils/clickoutside.js +11 -11
  20. package/lib/utils/dom.js +13 -13
  21. package/lib/utils/filetransfer.js +4 -4
  22. package/lib/utils/jsencrypt/JSEncrypt.js +77 -77
  23. package/lib/utils/jsencrypt/JSEncryptRSAKey.js +115 -115
  24. package/lib/utils/jsencrypt/jselib/asn1js/asn1.js +4 -4
  25. package/lib/utils/jsencrypt/jselib/jsrsasign/asn1-1.0.js +734 -734
  26. package/lib/utils/jsencrypt/jselib/jsrsasign/yahoo.js +22 -22
  27. package/lib/utils/jsencrypt.js +260 -260
  28. package/lib/utils/md5.js +3 -3
  29. package/lib/utils/mime.js +2 -2
  30. package/lib/utils/ratio.js +54 -53
  31. package/lib/utils/sign.js +12 -12
  32. package/lib/utils/util.js +3 -3
  33. package/lib/utils/validate.js +11 -11
  34. package/package.json +159 -159
  35. package/packages/affix/index.js +8 -8
  36. package/packages/affix/src/affix.vue +139 -139
  37. package/packages/align/index.js +8 -8
  38. package/packages/align/src/directive.js +29 -29
  39. package/packages/animation/index.js +8 -8
  40. package/packages/animation/src/animation.vue +68 -68
  41. package/packages/article/index.js +8 -8
  42. package/packages/article/src/article.vue +23 -23
  43. package/packages/box/index.js +8 -8
  44. package/packages/box/src/box.vue +170 -170
  45. package/packages/button/index.js +8 -8
  46. package/packages/button/src/button.vue +162 -162
  47. package/packages/calendar/index.js +8 -8
  48. package/packages/calendar/src/calendar.vue +1142 -1142
  49. package/packages/card/index.js +10 -10
  50. package/packages/card/src/card-item.vue +92 -92
  51. package/packages/card/src/card.vue +175 -175
  52. package/packages/card-item/index.js +8 -8
  53. package/packages/cascader/index.js +8 -8
  54. package/packages/cascader/src/cascader.vue +814 -814
  55. package/packages/center-scroll/index.js +8 -8
  56. package/packages/center-scroll/src/center-scroll.vue +147 -147
  57. package/packages/chat/index.js +12 -12
  58. package/packages/chat/src/chat.vue +116 -116
  59. package/packages/checkbox/index.js +8 -8
  60. package/packages/checkbox/src/checkbox.vue +262 -262
  61. package/packages/checkboxes/index.js +8 -8
  62. package/packages/checkboxes/src/checkboxes.vue +97 -97
  63. package/packages/collapse/index.js +10 -10
  64. package/packages/collapse/src/collapse-item.vue +188 -188
  65. package/packages/collapse/src/collapse.vue +100 -100
  66. package/packages/color/index.js +8 -8
  67. package/packages/color/src/directive.js +42 -42
  68. package/packages/countdown/index.js +8 -8
  69. package/packages/countdown/src/countdown.vue +128 -128
  70. package/packages/date-picker/index.js +8 -8
  71. package/packages/date-picker/src/date-picker.vue +432 -432
  72. package/packages/date-picker/src/picker.vue +342 -342
  73. package/packages/date-range/index.js +8 -8
  74. package/packages/date-range/src/date-range.vue +384 -384
  75. package/packages/dialog/index.js +8 -8
  76. package/packages/dialog/src/dialog.vue +287 -287
  77. package/packages/dis/index.js +8 -8
  78. package/packages/dis/src/directive.js +42 -42
  79. package/packages/ellipsis/index.js +8 -8
  80. package/packages/ellipsis/src/ellipsis.vue +306 -306
  81. package/packages/emote/index.js +8 -8
  82. package/packages/emote/src/emote.vue +38 -38
  83. package/packages/export/index.js +8 -8
  84. package/packages/export/src/ajax.js +73 -73
  85. package/packages/export/src/export.vue +289 -289
  86. package/packages/filter/index.js +8 -8
  87. package/packages/filter/src/filter.vue +245 -245
  88. package/packages/fix/index.js +8 -8
  89. package/packages/fix/src/fix.vue +221 -221
  90. package/packages/float/index.js +16 -16
  91. package/packages/float/src/directive.js +20 -20
  92. package/packages/float/src/main.vue +642 -642
  93. package/packages/float/src/trigger.vue +31 -31
  94. package/packages/flow/index.js +8 -8
  95. package/packages/flow/src/flow.vue +234 -234
  96. package/packages/flow/src/flowItem.vue +61 -61
  97. package/packages/flow/src/flowLine.vue +168 -168
  98. package/packages/form/index.js +10 -10
  99. package/packages/form/src/form-item.vue +96 -96
  100. package/packages/form/src/form.vue +184 -184
  101. package/packages/grid/index.js +10 -10
  102. package/packages/grid/src/grid-item.vue +65 -65
  103. package/packages/grid/src/grid.vue +190 -190
  104. package/packages/grid-item/index.js +8 -8
  105. package/packages/guider/index.js +8 -8
  106. package/packages/guider/src/guider.vue +168 -168
  107. package/packages/header/index.js +8 -8
  108. package/packages/header/src/header.vue +111 -111
  109. package/packages/hide/index.js +8 -8
  110. package/packages/hide/src/directive.js +57 -57
  111. package/packages/icon/index.js +8 -8
  112. package/packages/icon/src/icon.vue +79 -79
  113. package/packages/import/index.js +8 -8
  114. package/packages/import/src/import.vue +279 -279
  115. package/packages/input/index.js +8 -8
  116. package/packages/input/src/calcTextareaHeight.js +104 -104
  117. package/packages/input/src/input.vue +653 -653
  118. package/packages/ip/index.js +8 -8
  119. package/packages/ip/src/ip.vue +143 -143
  120. package/packages/line/index.js +8 -8
  121. package/packages/line/src/line.vue +29 -29
  122. package/packages/loading/index.js +8 -8
  123. package/packages/loading/src/loading.js +58 -58
  124. package/packages/longtap/index.js +8 -8
  125. package/packages/longtap/src/longtap.js +95 -95
  126. package/packages/menu-icon/index.js +8 -8
  127. package/packages/menu-icon/src/menu-icon.vue +206 -206
  128. package/packages/message/index.js +8 -8
  129. package/packages/message/src/message.vue +9 -9
  130. package/packages/msg/index.js +8 -8
  131. package/packages/msg/src/msg.vue +227 -227
  132. package/packages/org/index.js +8 -8
  133. package/packages/org/src/org.vue +113 -113
  134. package/packages/org/src/orgItem.vue +63 -63
  135. package/packages/padding/index.js +8 -8
  136. package/packages/padding/src/padding.vue +105 -105
  137. package/packages/page/index.js +8 -8
  138. package/packages/page/src/page.vue +297 -297
  139. package/packages/param/index.js +8 -8
  140. package/packages/param/src/param.vue +226 -226
  141. package/packages/pic/index.js +8 -8
  142. package/packages/pic/src/pic-viewer.vue +331 -331
  143. package/packages/pic/src/pic.vue +144 -144
  144. package/packages/popup/index.js +12 -12
  145. package/packages/popup/src/popup-group.vue +47 -47
  146. package/packages/popup/src/popup-item.vue +163 -163
  147. package/packages/popup/src/popup.vue +350 -350
  148. package/packages/progress/index.js +8 -8
  149. package/packages/progress/src/progress.vue +306 -306
  150. package/packages/range/index.js +8 -8
  151. package/packages/range/src/range.vue +612 -612
  152. package/packages/rate/index.js +8 -8
  153. package/packages/rate/src/rate.vue +129 -129
  154. package/packages/reverser/index.js +8 -8
  155. package/packages/reverser/src/reverser.vue +49 -49
  156. package/packages/scroll/index.js +12 -12
  157. package/packages/scroll/src/scroll-point.vue +24 -24
  158. package/packages/scroll/src/scroll-sticky.vue +60 -60
  159. package/packages/scroll/src/scroll.vue +381 -381
  160. package/packages/segment/index.js +8 -8
  161. package/packages/segment/src/segment.vue +618 -618
  162. package/packages/select/index.js +8 -8
  163. package/packages/select/src/select.vue +1445 -1445
  164. package/packages/size/index.js +8 -8
  165. package/packages/size/src/directive.js +33 -33
  166. package/packages/skeleton/index.js +8 -8
  167. package/packages/skeleton/src/skeleton.vue +179 -179
  168. package/packages/slide/index.js +8 -8
  169. package/packages/slide/src/slide.vue +147 -147
  170. package/packages/space/index.js +8 -8
  171. package/packages/space/src/space.vue +53 -53
  172. package/packages/step/index.js +8 -8
  173. package/packages/step/src/step.vue +122 -122
  174. package/packages/submit/index.js +8 -8
  175. package/packages/submit/src/submit.vue +103 -103
  176. package/packages/switch/index.js +9 -9
  177. package/packages/switch/src/component.vue +131 -131
  178. package/packages/tab/index.js +10 -10
  179. package/packages/tab/src/tab-item.vue +85 -85
  180. package/packages/tab/src/tab.vue +590 -590
  181. package/packages/table/index.js +8 -8
  182. package/packages/table/src/table-body.vue +301 -301
  183. package/packages/table/src/table-config.vue +139 -139
  184. package/packages/table/src/table-head.vue +239 -239
  185. package/packages/table/src/table.vue +1455 -1458
  186. package/packages/tag/index.js +8 -8
  187. package/packages/tag/src/tag.vue +129 -129
  188. package/packages/theme/package.json +33 -33
  189. package/packages/theme/src/global/mixin.less +416 -416
  190. package/packages/theme/src/global/reset.less +27 -27
  191. package/packages/theme/src/less/component/affix.less +8 -8
  192. package/packages/theme/src/less/component/article-dark.less +6 -6
  193. package/packages/theme/src/less/component/article.less +39 -39
  194. package/packages/theme/src/less/component/box-dark.less +85 -85
  195. package/packages/theme/src/less/component/box.less +272 -272
  196. package/packages/theme/src/less/component/calendar-dark.less +111 -111
  197. package/packages/theme/src/less/component/calendar.less +282 -282
  198. package/packages/theme/src/less/component/card-dark.less +17 -17
  199. package/packages/theme/src/less/component/card.less +89 -89
  200. package/packages/theme/src/less/component/chat-dark.less +47 -47
  201. package/packages/theme/src/less/component/chat.less +71 -71
  202. package/packages/theme/src/less/component/code-dark.less +41 -41
  203. package/packages/theme/src/less/component/code.less +33 -33
  204. package/packages/theme/src/less/component/cover.less +4 -4
  205. package/packages/theme/src/less/component/dialog-dark.less +54 -54
  206. package/packages/theme/src/less/component/dialog.less +49 -49
  207. package/packages/theme/src/less/component/filter-dark.less +31 -31
  208. package/packages/theme/src/less/component/filter.less +97 -97
  209. package/packages/theme/src/less/component/float-dark.less +26 -26
  210. package/packages/theme/src/less/component/float.less +61 -61
  211. package/packages/theme/src/less/component/form-dark.less +45 -45
  212. package/packages/theme/src/less/component/form.less +322 -322
  213. package/packages/theme/src/less/component/gantt-dark.less +44 -44
  214. package/packages/theme/src/less/component/gantt.less +52 -52
  215. package/packages/theme/src/less/component/guider-dark.less +6 -6
  216. package/packages/theme/src/less/component/guider.less +15 -15
  217. package/packages/theme/src/less/component/header-dark.less +41 -41
  218. package/packages/theme/src/less/component/header.less +121 -121
  219. package/packages/theme/src/less/component/keyboard-dark.less +15 -15
  220. package/packages/theme/src/less/component/keyboard.less +21 -21
  221. package/packages/theme/src/less/component/line-dark.less +20 -20
  222. package/packages/theme/src/less/component/line.less +21 -21
  223. package/packages/theme/src/less/component/msg-dark.less +42 -42
  224. package/packages/theme/src/less/component/msg.less +102 -102
  225. package/packages/theme/src/less/component/page-dark.less +26 -26
  226. package/packages/theme/src/less/component/page.less +26 -26
  227. package/packages/theme/src/less/component/param-dark.less +31 -31
  228. package/packages/theme/src/less/component/param.less +136 -136
  229. package/packages/theme/src/less/component/popup-dark.less +20 -20
  230. package/packages/theme/src/less/component/popup.less +85 -85
  231. package/packages/theme/src/less/component/print.less +121 -121
  232. package/packages/theme/src/less/component/scroll-dark.less +19 -19
  233. package/packages/theme/src/less/component/scroll.less +47 -47
  234. package/packages/theme/src/less/component/skeleton-dark.less +29 -29
  235. package/packages/theme/src/less/component/skeleton.less +78 -78
  236. package/packages/theme/src/less/component/slide.less +70 -70
  237. package/packages/theme/src/less/component/space.less +2 -2
  238. package/packages/theme/src/less/component/step-dark.less +165 -165
  239. package/packages/theme/src/less/component/step.less +147 -147
  240. package/packages/theme/src/less/component/submit.less +40 -40
  241. package/packages/theme/src/less/component/tab-dark.less +221 -221
  242. package/packages/theme/src/less/component/tab.less +459 -459
  243. package/packages/theme/src/less/component/table-dark.less +196 -196
  244. package/packages/theme/src/less/component/table.less +425 -425
  245. package/packages/theme/src/less/component/timeline-dark.less +13 -13
  246. package/packages/theme/src/less/component/timeline.less +114 -114
  247. package/packages/theme/src/less/component/tip-dark.less +76 -76
  248. package/packages/theme/src/less/component/tip.less +139 -139
  249. package/packages/theme/src/less/component/tooltip-dark.less +105 -105
  250. package/packages/theme/src/less/component/tooltip.less +159 -159
  251. package/packages/theme/src/less/component/tree-dark.less +56 -56
  252. package/packages/theme/src/less/component/tree.less +148 -148
  253. package/packages/theme/src/less/element/align.less +32 -32
  254. package/packages/theme/src/less/element/animation.less +5 -5
  255. package/packages/theme/src/less/element/button-dark.less +29 -29
  256. package/packages/theme/src/less/element/button.less +65 -65
  257. package/packages/theme/src/less/element/center-scroll-dark.less +3 -3
  258. package/packages/theme/src/less/element/center-scroll.less +6 -6
  259. package/packages/theme/src/less/element/checkbox-dark.less +68 -68
  260. package/packages/theme/src/less/element/checkbox.less +73 -73
  261. package/packages/theme/src/less/element/color-dark.less +15 -15
  262. package/packages/theme/src/less/element/color.less +33 -33
  263. package/packages/theme/src/less/element/dis.less +9 -9
  264. package/packages/theme/src/less/element/ellipsis.less +35 -35
  265. package/packages/theme/src/less/element/emote.less +5 -5
  266. package/packages/theme/src/less/element/font-dark.less +9 -9
  267. package/packages/theme/src/less/element/font.less +8 -8
  268. package/packages/theme/src/less/element/hide-dark.less +114 -114
  269. package/packages/theme/src/less/element/hide.less +114 -114
  270. package/packages/theme/src/less/element/icon.less +297 -297
  271. package/packages/theme/src/less/element/input-dark.less +205 -205
  272. package/packages/theme/src/less/element/input.less +405 -405
  273. package/packages/theme/src/less/element/menu-icon.less +1 -1
  274. package/packages/theme/src/less/element/pic.less +18 -18
  275. package/packages/theme/src/less/element/progress-dark.less +37 -37
  276. package/packages/theme/src/less/element/progress.less +82 -82
  277. package/packages/theme/src/less/element/radio-dark.less +18 -18
  278. package/packages/theme/src/less/element/radio.less +11 -11
  279. package/packages/theme/src/less/element/range-dark.less +24 -24
  280. package/packages/theme/src/less/element/range.less +56 -56
  281. package/packages/theme/src/less/element/rate.less +17 -17
  282. package/packages/theme/src/less/element/segment-dark.less +119 -119
  283. package/packages/theme/src/less/element/segment.less +197 -197
  284. package/packages/theme/src/less/element/select-dark.less +167 -167
  285. package/packages/theme/src/less/element/select.less +431 -431
  286. package/packages/theme/src/less/element/size.less +10 -10
  287. package/packages/theme/src/less/element/switch-dark.less +7 -7
  288. package/packages/theme/src/less/element/switch.less +37 -37
  289. package/packages/theme/src/less/element/tag-dark.less +115 -115
  290. package/packages/theme/src/less/element/tag.less +159 -159
  291. package/packages/theme/src/less/element/upload-dark.less +26 -26
  292. package/packages/theme/src/less/element/upload.less +64 -64
  293. package/packages/theme/src/less/layout/fix.less +2 -2
  294. package/packages/theme/src/less/layout/flow.less +47 -47
  295. package/packages/theme/src/less/layout/grid-dark.less +28 -28
  296. package/packages/theme/src/less/layout/grid.less +172 -172
  297. package/packages/theme/src/less/layout/org-dark.less +2 -2
  298. package/packages/theme/src/less/layout/org.less +72 -72
  299. package/packages/theme/src/less/layout/padding.less +1 -1
  300. package/packages/theme/src/less/layout/reverser.less +8 -8
  301. package/packages/theme/src/less/theme/B-Design.less +159 -159
  302. package/packages/theme/src/less/theme/aiplan.less +159 -159
  303. package/packages/theme/src/less/theme/aiplangd.less +159 -159
  304. package/packages/theme/src/less/theme/chbn.less +159 -159
  305. package/packages/theme/src/less/theme/default.less +160 -160
  306. package/packages/theme/src/less/theme/dt.less +159 -159
  307. package/packages/theme/src/less/theme/ecloud.less +159 -159
  308. package/packages/theme/src/less/theme/hongkong.less +159 -159
  309. package/packages/theme/src/less/theme/narrow.less +160 -160
  310. package/packages/theme/src/less/theme/sdpf.less +160 -160
  311. package/packages/theme/src/less/theme/upc.less +159 -159
  312. package/packages/theme/src/less/theme/website.less +159 -159
  313. package/packages/theme/src/less/theme/zj.less +159 -159
  314. package/packages/timeline/index.js +8 -8
  315. package/packages/timeline/src/timeline.vue +84 -84
  316. package/packages/tip/index.js +8 -8
  317. package/packages/tip/src/tip.vue +226 -226
  318. package/packages/tooltip/index.js +8 -8
  319. package/packages/tooltip/src/directive.js +180 -180
  320. package/packages/tooltip/src/tooltip.vue +467 -467
  321. package/packages/transfer/index.js +8 -8
  322. package/packages/transfer/src/transfer.vue +293 -293
  323. package/packages/tree/index.js +8 -8
  324. package/packages/tree/src/tree.vue +518 -518
  325. package/packages/tree/src/treeItem.vue +443 -443
  326. package/packages/upload/index.js +8 -8
  327. package/packages/upload/src/upload.vue +860 -860
  328. package/src/index.js +207 -207
  329. package/src/locale/format.js +46 -46
  330. package/src/locale/index.js +48 -48
  331. package/src/locale/lang/en.js +207 -207
  332. package/src/locale/lang/zh-CN.js +207 -207
  333. package/src/mixins/blur.js +9 -9
  334. package/src/mixins/emitter.js +33 -33
  335. package/src/mixins/focus.js +9 -9
  336. package/src/mixins/locale.js +9 -9
  337. package/src/mixins/migrating.js +54 -54
  338. package/src/mixins/tip.js +10 -10
  339. package/src/mixins/transition.js +130 -130
  340. package/src/msg/index.js +107 -107
  341. package/src/svg/menu/main/abnormal-mix.svg +5 -5
  342. package/src/svg/menu/main/abnormal.svg +5 -5
  343. package/src/svg/menu/main/accountManager-mix.svg +5 -5
  344. package/src/svg/menu/main/accountManager.svg +5 -5
  345. package/src/svg/menu/main/agreement-mix.svg +7 -7
  346. package/src/svg/menu/main/agreement.svg +7 -7
  347. package/src/svg/menu/main/ai-mix.svg +5 -5
  348. package/src/svg/menu/main/archives-mix.svg +6 -6
  349. package/src/svg/menu/main/arrearsReport-mix.svg +17 -17
  350. package/src/svg/menu/main/arrearsReport.svg +17 -17
  351. package/src/svg/menu/main/bill-mix.svg +13 -13
  352. package/src/svg/menu/main/bill.svg +13 -13
  353. package/src/svg/menu/main/box-mix.svg +5 -5
  354. package/src/svg/menu/main/broadband-mix.svg +4 -4
  355. package/src/svg/menu/main/broadband.svg +4 -4
  356. package/src/svg/menu/main/card-mix.svg +5 -5
  357. package/src/svg/menu/main/card.svg +5 -5
  358. package/src/svg/menu/main/cash-mix.svg +5 -5
  359. package/src/svg/menu/main/cash.svg +5 -5
  360. package/src/svg/menu/main/cloud-mix.svg +4 -4
  361. package/src/svg/menu/main/cloud.svg +4 -4
  362. package/src/svg/menu/main/clue-mix.svg +10 -10
  363. package/src/svg/menu/main/clue.svg +10 -10
  364. package/src/svg/menu/main/commonUse-mix.svg +4 -4
  365. package/src/svg/menu/main/commonUse.svg +4 -4
  366. package/src/svg/menu/main/construction-mix.svg +7 -7
  367. package/src/svg/menu/main/construction.svg +7 -7
  368. package/src/svg/menu/main/contract-mix.svg +8 -8
  369. package/src/svg/menu/main/contract.svg +8 -8
  370. package/src/svg/menu/main/credit-mix.svg +5 -5
  371. package/src/svg/menu/main/credit.svg +5 -5
  372. package/src/svg/menu/main/data-mix.svg +5 -5
  373. package/src/svg/menu/main/data.svg +5 -5
  374. package/src/svg/menu/main/date-mix.svg +7 -7
  375. package/src/svg/menu/main/deposit-mix.svg +4 -4
  376. package/src/svg/menu/main/device-mix.svg +4 -4
  377. package/src/svg/menu/main/device.svg +4 -4
  378. package/src/svg/menu/main/discrepancy-mix.svg +5 -5
  379. package/src/svg/menu/main/door-mix.svg +6 -6
  380. package/src/svg/menu/main/fault-mix.svg +12 -12
  381. package/src/svg/menu/main/fault.svg +16 -16
  382. package/src/svg/menu/main/finance-mix.svg +11 -11
  383. package/src/svg/menu/main/finance.svg +13 -13
  384. package/src/svg/menu/main/flow-mix.svg +4 -4
  385. package/src/svg/menu/main/flow.svg +4 -4
  386. package/src/svg/menu/main/folder-mix.svg +4 -4
  387. package/src/svg/menu/main/folder.svg +4 -4
  388. package/src/svg/menu/main/friendly-mix.svg +5 -5
  389. package/src/svg/menu/main/fusion-mix.svg +5 -5
  390. package/src/svg/menu/main/fusion.svg +5 -5
  391. package/src/svg/menu/main/gift-mix.svg +8 -8
  392. package/src/svg/menu/main/gift.svg +8 -8
  393. package/src/svg/menu/main/gps-mix.svg +6 -6
  394. package/src/svg/menu/main/gps.svg +6 -6
  395. package/src/svg/menu/main/grid-mix.svg +7 -7
  396. package/src/svg/menu/main/grid.svg +7 -7
  397. package/src/svg/menu/main/group-mix.svg +4 -4
  398. package/src/svg/menu/main/group.svg +4 -4
  399. package/src/svg/menu/main/home-mix.svg +5 -5
  400. package/src/svg/menu/main/home.svg +8 -8
  401. package/src/svg/menu/main/ict-mix.svg +4 -4
  402. package/src/svg/menu/main/industry-mix.svg +5 -5
  403. package/src/svg/menu/main/industry.svg +5 -5
  404. package/src/svg/menu/main/info-mix.svg +9 -9
  405. package/src/svg/menu/main/info.svg +9 -9
  406. package/src/svg/menu/main/integral-mix.svg +5 -5
  407. package/src/svg/menu/main/integral.svg +5 -5
  408. package/src/svg/menu/main/internet-mix.svg +5 -5
  409. package/src/svg/menu/main/internet.svg +5 -5
  410. package/src/svg/menu/main/inventory-mix.svg +5 -5
  411. package/src/svg/menu/main/invoice-mix.svg +6 -6
  412. package/src/svg/menu/main/invoice.svg +14 -14
  413. package/src/svg/menu/main/iot-mix.svg +5 -5
  414. package/src/svg/menu/main/iot.svg +5 -5
  415. package/src/svg/menu/main/label-mix.svg +4 -4
  416. package/src/svg/menu/main/label.svg +4 -4
  417. package/src/svg/menu/main/love-mix.svg +6 -6
  418. package/src/svg/menu/main/love.svg +13 -13
  419. package/src/svg/menu/main/m1-mix.svg +4 -4
  420. package/src/svg/menu/main/m1.svg +4 -4
  421. package/src/svg/menu/main/m2-mix.svg +12 -12
  422. package/src/svg/menu/main/m2.svg +11 -11
  423. package/src/svg/menu/main/m3-mix.svg +6 -6
  424. package/src/svg/menu/main/m3.svg +7 -7
  425. package/src/svg/menu/main/m4-mix.svg +5 -5
  426. package/src/svg/menu/main/m4.svg +7 -7
  427. package/src/svg/menu/main/m5-mix.svg +8 -8
  428. package/src/svg/menu/main/m5.svg +10 -10
  429. package/src/svg/menu/main/mail-mix.svg +5 -5
  430. package/src/svg/menu/main/manual-mix.svg +11 -11
  431. package/src/svg/menu/main/manual.svg +11 -11
  432. package/src/svg/menu/main/market-mix.svg +4 -4
  433. package/src/svg/menu/main/market.svg +4 -4
  434. package/src/svg/menu/main/member-mix.svg +6 -6
  435. package/src/svg/menu/main/member.svg +6 -6
  436. package/src/svg/menu/main/menu-mix.svg +4 -4
  437. package/src/svg/menu/main/menu.svg +4 -4
  438. package/src/svg/menu/main/message-mix.svg +11 -11
  439. package/src/svg/menu/main/message.svg +11 -11
  440. package/src/svg/menu/main/namelist-mix.svg +4 -4
  441. package/src/svg/menu/main/namelist.svg +4 -4
  442. package/src/svg/menu/main/net-mix.svg +7 -7
  443. package/src/svg/menu/main/niche-mix.svg +12 -12
  444. package/src/svg/menu/main/niche.svg +12 -12
  445. package/src/svg/menu/main/notice-mix.svg +4 -4
  446. package/src/svg/menu/main/notice.svg +4 -4
  447. package/src/svg/menu/main/number-mix.svg +6 -6
  448. package/src/svg/menu/main/operations-mix.svg +4 -4
  449. package/src/svg/menu/main/operations.svg +4 -4
  450. package/src/svg/menu/main/order-mix.svg +8 -8
  451. package/src/svg/menu/main/order.svg +8 -8
  452. package/src/svg/menu/main/person-mix.svg +6 -6
  453. package/src/svg/menu/main/person.svg +6 -6
  454. package/src/svg/menu/main/phone-mix.svg +4 -4
  455. package/src/svg/menu/main/phone.svg +4 -4
  456. package/src/svg/menu/main/phoneBill-mix.svg +6 -6
  457. package/src/svg/menu/main/phoneBill.svg +6 -6
  458. package/src/svg/menu/main/preferential-mix.svg +5 -5
  459. package/src/svg/menu/main/preferential.svg +5 -5
  460. package/src/svg/menu/main/print-mix.svg +5 -5
  461. package/src/svg/menu/main/problem-mix.svg +4 -4
  462. package/src/svg/menu/main/problem.svg +4 -4
  463. package/src/svg/menu/main/process-mix.svg +4 -4
  464. package/src/svg/menu/main/process.svg +4 -4
  465. package/src/svg/menu/main/product-mix.svg +5 -5
  466. package/src/svg/menu/main/product.svg +6 -6
  467. package/src/svg/menu/main/qrCode-mix.svg +8 -8
  468. package/src/svg/menu/main/qrCode.svg +8 -8
  469. package/src/svg/menu/main/refuelingBag-mix-mix.svg +4 -4
  470. package/src/svg/menu/main/refuelingBag-mix.svg +4 -4
  471. package/src/svg/menu/main/reportForm-mix.svg +8 -8
  472. package/src/svg/menu/main/reportForm.svg +8 -8
  473. package/src/svg/menu/main/risk-mix.svg +16 -16
  474. package/src/svg/menu/main/risk.svg +17 -17
  475. package/src/svg/menu/main/robot-mix.svg +9 -9
  476. package/src/svg/menu/main/robot.svg +9 -9
  477. package/src/svg/menu/main/satisfaction-mix.svg +4 -4
  478. package/src/svg/menu/main/satisfaction.svg +4 -4
  479. package/src/svg/menu/main/scratchCard-mix.svg +4 -4
  480. package/src/svg/menu/main/sim-mix.svg +4 -4
  481. package/src/svg/menu/main/sim.svg +4 -4
  482. package/src/svg/menu/main/staging-mix.svg +4 -4
  483. package/src/svg/menu/main/staging.svg +4 -4
  484. package/src/svg/menu/main/survey-mix.svg +5 -5
  485. package/src/svg/menu/main/survey.svg +5 -5
  486. package/src/svg/menu/main/tasks-mix.svg +8 -8
  487. package/src/svg/menu/main/tasks.svg +8 -8
  488. package/src/svg/menu/main/telephone-mix.svg +4 -4
  489. package/src/svg/menu/main/topUp-mix.svg +5 -5
  490. package/src/svg/menu/main/trajectory-mix.svg +11 -11
  491. package/src/svg/menu/main/trajectory.svg +23 -23
  492. package/src/svg/menu/main/transmit-mix.svg +5 -5
  493. package/src/svg/menu/main/tv-mix.svg +6 -6
  494. package/src/svg/menu/main/unlock-mix.svg +4 -4
  495. package/src/svg/menu/main/unlock.svg +4 -4
  496. package/src/svg/menu/main/view-mix.svg +5 -5
  497. package/src/svg/menu/main/view.svg +5 -5
  498. package/src/svg/menu/main/visits-mix.svg +19 -19
  499. package/src/svg/menu/main/visits.svg +19 -19
  500. package/src/svg/menu/main/voice-mix.svg +4 -4
  501. package/src/svg/menu/main/voice.svg +4 -4
  502. package/src/svg/menu/main/wiki-mix.svg +4 -4
  503. package/src/svg/menu/main/wiki.svg +4 -4
  504. package/src/svg/menu/main/workOrder-mix.svg +6 -6
  505. package/src/svg/menu/main/workOrder.svg +14 -14
  506. package/src/svg/menu/patch/Mo-space.svg +2 -2
  507. package/src/svg/menu/patch/Mo.svg +3 -3
  508. package/src/svg/menu/patch/add-space.svg +3 -3
  509. package/src/svg/menu/patch/add.svg +3 -3
  510. package/src/svg/menu/patch/address-space.svg +3 -3
  511. package/src/svg/menu/patch/address.svg +3 -3
  512. package/src/svg/menu/patch/approve-space.svg +3 -3
  513. package/src/svg/menu/patch/approve.svg +4 -4
  514. package/src/svg/menu/patch/avoid-space.svg +3 -3
  515. package/src/svg/menu/patch/avoid.svg +3 -3
  516. package/src/svg/menu/patch/batch-space.svg +3 -3
  517. package/src/svg/menu/patch/batch.svg +5 -5
  518. package/src/svg/menu/patch/broadband-space.svg +3 -3
  519. package/src/svg/menu/patch/broadband.svg +4 -4
  520. package/src/svg/menu/patch/cancellation-space.svg +3 -3
  521. package/src/svg/menu/patch/cancellation.svg +3 -3
  522. package/src/svg/menu/patch/center-space.svg +3 -3
  523. package/src/svg/menu/patch/center.svg +5 -5
  524. package/src/svg/menu/patch/change-space.svg +3 -3
  525. package/src/svg/menu/patch/change.svg +4 -4
  526. package/src/svg/menu/patch/click-space.svg +3 -3
  527. package/src/svg/menu/patch/click.svg +4 -4
  528. package/src/svg/menu/patch/close-1-space.svg +3 -3
  529. package/src/svg/menu/patch/close-1.svg +3 -3
  530. package/src/svg/menu/patch/close-space.svg +2 -2
  531. package/src/svg/menu/patch/close.svg +3 -3
  532. package/src/svg/menu/patch/collect-space.svg +3 -3
  533. package/src/svg/menu/patch/collect.svg +3 -3
  534. package/src/svg/menu/patch/comment-space.svg +3 -3
  535. package/src/svg/menu/patch/comment.svg +3 -3
  536. package/src/svg/menu/patch/confirm-space.svg +3 -3
  537. package/src/svg/menu/patch/confirm.svg +3 -3
  538. package/src/svg/menu/patch/contract-space.svg +3 -3
  539. package/src/svg/menu/patch/contract.svg +3 -3
  540. package/src/svg/menu/patch/credit-space.svg +3 -3
  541. package/src/svg/menu/patch/credit.svg +5 -5
  542. package/src/svg/menu/patch/dataMonitoring-space.svg +3 -3
  543. package/src/svg/menu/patch/dataMonitoring.svg +3 -3
  544. package/src/svg/menu/patch/dedicatedCircuit-space.svg +3 -3
  545. package/src/svg/menu/patch/dedicatedCircuit.svg +3 -3
  546. package/src/svg/menu/patch/detail-space.svg +3 -3
  547. package/src/svg/menu/patch/detail.svg +3 -3
  548. package/src/svg/menu/patch/disassemb-space.svg +3 -3
  549. package/src/svg/menu/patch/disassemb.svg +3 -3
  550. package/src/svg/menu/patch/earnestMoney-space.svg +3 -3
  551. package/src/svg/menu/patch/earnestMoney.svg +3 -3
  552. package/src/svg/menu/patch/empower-space.svg +3 -3
  553. package/src/svg/menu/patch/empower.svg +3 -3
  554. package/src/svg/menu/patch/entrust-space.svg +3 -3
  555. package/src/svg/menu/patch/entrust.svg +3 -3
  556. package/src/svg/menu/patch/expedite-space.svg +4 -4
  557. package/src/svg/menu/patch/expedite.svg +4 -4
  558. package/src/svg/menu/patch/flow-space.svg +3 -3
  559. package/src/svg/menu/patch/flow.svg +3 -3
  560. package/src/svg/menu/patch/folder-space.svg +3 -3
  561. package/src/svg/menu/patch/folder.svg +3 -3
  562. package/src/svg/menu/patch/forbidden-space.svg +3 -3
  563. package/src/svg/menu/patch/forbidden.svg +3 -3
  564. package/src/svg/menu/patch/forward-space.svg +3 -3
  565. package/src/svg/menu/patch/forward.svg +3 -3
  566. package/src/svg/menu/patch/fusion-space.svg +3 -3
  567. package/src/svg/menu/patch/fusion.svg +6 -6
  568. package/src/svg/menu/patch/history-space.svg +3 -3
  569. package/src/svg/menu/patch/history.svg +3 -3
  570. package/src/svg/menu/patch/information-space.svg +3 -3
  571. package/src/svg/menu/patch/information.svg +3 -3
  572. package/src/svg/menu/patch/insert-space.svg +3 -3
  573. package/src/svg/menu/patch/insert.svg +3 -3
  574. package/src/svg/menu/patch/letv-space.svg +3 -3
  575. package/src/svg/menu/patch/letv.svg +3 -3
  576. package/src/svg/menu/patch/link-space.svg +3 -3
  577. package/src/svg/menu/patch/link.svg +3 -3
  578. package/src/svg/menu/patch/location-space.svg +3 -3
  579. package/src/svg/menu/patch/location.svg +3 -3
  580. package/src/svg/menu/patch/message-space.svg +3 -3
  581. package/src/svg/menu/patch/message.svg +4 -4
  582. package/src/svg/menu/patch/minus-space.svg +3 -3
  583. package/src/svg/menu/patch/minus.svg +3 -3
  584. package/src/svg/menu/patch/mms-space.svg +3 -3
  585. package/src/svg/menu/patch/mms.svg +3 -3
  586. package/src/svg/menu/patch/monitor-space.svg +3 -3
  587. package/src/svg/menu/patch/monitor.svg +3 -3
  588. package/src/svg/menu/patch/move-space.svg +3 -3
  589. package/src/svg/menu/patch/move.svg +3 -3
  590. package/src/svg/menu/patch/negative-space.svg +2 -2
  591. package/src/svg/menu/patch/negative.svg +3 -3
  592. package/src/svg/menu/patch/net-space.svg +2 -2
  593. package/src/svg/menu/patch/net.svg +3 -3
  594. package/src/svg/menu/patch/news-space.svg +3 -3
  595. package/src/svg/menu/patch/news.svg +3 -3
  596. package/src/svg/menu/patch/notice-space.svg +4 -4
  597. package/src/svg/menu/patch/notice.svg +5 -5
  598. package/src/svg/menu/patch/officialBusiness-space.svg +3 -3
  599. package/src/svg/menu/patch/officialBusiness.svg +4 -4
  600. package/src/svg/menu/patch/pay-space.svg +3 -3
  601. package/src/svg/menu/patch/pay.svg +3 -3
  602. package/src/svg/menu/patch/phone-space.svg +3 -3
  603. package/src/svg/menu/patch/phone.svg +5 -5
  604. package/src/svg/menu/patch/print-space.svg +3 -3
  605. package/src/svg/menu/patch/print.svg +5 -5
  606. package/src/svg/menu/patch/product-space.svg +3 -3
  607. package/src/svg/menu/patch/product.svg +5 -5
  608. package/src/svg/menu/patch/reservation-space.svg +3 -3
  609. package/src/svg/menu/patch/reservation.svg +3 -3
  610. package/src/svg/menu/patch/sale-space.svg +3 -3
  611. package/src/svg/menu/patch/sale.svg +5 -5
  612. package/src/svg/menu/patch/search-space.svg +3 -3
  613. package/src/svg/menu/patch/search.svg +3 -3
  614. package/src/svg/menu/patch/secure-space.svg +3 -3
  615. package/src/svg/menu/patch/secure.svg +5 -5
  616. package/src/svg/menu/patch/setup-space.svg +3 -3
  617. package/src/svg/menu/patch/setup.svg +3 -3
  618. package/src/svg/menu/patch/shift-space.svg +3 -3
  619. package/src/svg/menu/patch/shift.svg +3 -3
  620. package/src/svg/menu/patch/situation-space.svg +3 -3
  621. package/src/svg/menu/patch/situation.svg +3 -3
  622. package/src/svg/menu/patch/special-space.svg +3 -3
  623. package/src/svg/menu/patch/special.svg +3 -3
  624. package/src/svg/menu/patch/tabulation-space.svg +3 -3
  625. package/src/svg/menu/patch/tabulation.svg +8 -8
  626. package/src/svg/menu/patch/track-space.svg +3 -3
  627. package/src/svg/menu/patch/track.svg +5 -5
  628. package/src/svg/menu/patch/transaction-space.svg +3 -3
  629. package/src/svg/menu/patch/transaction.svg +6 -6
  630. package/src/svg/menu/patch/user-space.svg +3 -3
  631. package/src/svg/menu/patch/user.svg +3 -3
  632. package/src/svg/menu/patch/visualize-space.svg +3 -3
  633. package/src/svg/menu/patch/visualize.svg +4 -4
  634. package/src/svg/menu/patch/vnet-space.svg +3 -3
  635. package/src/svg/menu/patch/vnet.svg +3 -3
  636. package/src/tip/tip.js +160 -160
  637. package/src/utils/after-leave.js +27 -27
  638. package/src/utils/ajax.js +59 -59
  639. package/src/utils/array.js +24 -24
  640. package/src/utils/clickoutside.js +105 -105
  641. package/src/utils/compare.js +16 -16
  642. package/src/utils/date.js +34 -34
  643. package/src/utils/disabledArea.js +18 -18
  644. package/src/utils/dom.js +301 -301
  645. package/src/utils/filetransfer.js +287 -287
  646. package/src/utils/isModified.js +20 -20
  647. package/src/utils/jsencrypt/JSEncrypt.js +192 -192
  648. package/src/utils/jsencrypt/JSEncryptRSAKey.js +320 -320
  649. package/src/utils/jsencrypt/index.js +3 -3
  650. package/src/utils/jsencrypt/jselib/asn1js/asn1.d.ts +51 -51
  651. package/src/utils/jsencrypt/jselib/asn1js/asn1.js +565 -565
  652. package/src/utils/jsencrypt/jselib/asn1js/base64.d.ts +5 -5
  653. package/src/utils/jsencrypt/jselib/asn1js/base64.js +88 -88
  654. package/src/utils/jsencrypt/jselib/asn1js/hex.d.ts +3 -3
  655. package/src/utils/jsencrypt/jselib/asn1js/hex.js +64 -64
  656. package/src/utils/jsencrypt/jselib/asn1js/int10.d.ts +9 -9
  657. package/src/utils/jsencrypt/jselib/asn1js/int10.js +87 -87
  658. package/src/utils/jsencrypt/jselib/asn1js/oids.d.ts +9778 -9778
  659. package/src/utils/jsencrypt/jselib/asn1js/oids.js +1962 -1962
  660. package/src/utils/jsencrypt/jselib/jsbn/base64.d.ts +3 -3
  661. package/src/utils/jsencrypt/jselib/jsbn/base64.js +76 -76
  662. package/src/utils/jsencrypt/jselib/jsbn/jsbn.d.ts +98 -98
  663. package/src/utils/jsencrypt/jselib/jsbn/jsbn.js +1754 -1754
  664. package/src/utils/jsencrypt/jselib/jsbn/prng4.d.ts +10 -10
  665. package/src/utils/jsencrypt/jselib/jsbn/prng4.js +46 -46
  666. package/src/utils/jsencrypt/jselib/jsbn/rng.d.ts +3 -3
  667. package/src/utils/jsencrypt/jselib/jsbn/rng.js +78 -78
  668. package/src/utils/jsencrypt/jselib/jsbn/rsa.d.ts +23 -23
  669. package/src/utils/jsencrypt/jselib/jsbn/rsa.js +373 -373
  670. package/src/utils/jsencrypt/jselib/jsbn/util.d.ts +7 -7
  671. package/src/utils/jsencrypt/jselib/jsbn/util.js +58 -58
  672. package/src/utils/jsencrypt/jselib/jsrsasign/asn1-1.0.js +1593 -1593
  673. package/src/utils/jsencrypt/jselib/jsrsasign/yahoo.js +63 -63
  674. package/src/utils/jsencrypt/util.js +58 -58
  675. package/src/utils/jsencrypt.js +263 -263
  676. package/src/utils/md5.js +203 -203
  677. package/src/utils/merge.js +15 -15
  678. package/src/utils/mime.js +75 -75
  679. package/src/utils/print.js +39 -39
  680. package/src/utils/ratio.js +230 -230
  681. package/src/utils/respo.js +9 -9
  682. package/src/utils/shared.js +7 -7
  683. package/src/utils/sign.js +185 -185
  684. package/src/utils/string.js +13 -13
  685. package/src/utils/theme.js +91 -91
  686. package/src/utils/types.js +40 -40
  687. package/src/utils/util.js +286 -286
  688. package/src/utils/uuid.js +12 -12
  689. package/src/utils/validate.js +373 -373
  690. package/packages/.DS_Store +0 -0
  691. package/packages/article/.DS_Store +0 -0
  692. package/packages/chat/.DS_Store +0 -0
  693. package/packages/chat/src/.DS_Store +0 -0
  694. package/packages/date-picker/.DS_Store +0 -0
  695. package/packages/dis/.DS_Store +0 -0
  696. package/packages/emote/.DS_Store +0 -0
  697. package/packages/filter/.DS_Store +0 -0
  698. package/packages/filter/src/.DS_Store +0 -0
  699. package/packages/float/.DS_Store +0 -0
  700. package/packages/flow/.DS_Store +0 -0
  701. package/packages/guider/.DS_Store +0 -0
  702. package/packages/ip/.DS_Store +0 -0
  703. package/packages/org/.DS_Store +0 -0
  704. package/packages/page/.DS_Store +0 -0
  705. package/packages/page/src/.DS_Store +0 -0
  706. package/packages/pic/.DS_Store +0 -0
  707. package/packages/rate/.DS_Store +0 -0
  708. package/packages/reverser/.DS_Store +0 -0
  709. package/packages/reverser/src/.DS_Store +0 -0
  710. package/packages/segment/.DS_Store +0 -0
  711. package/packages/slide/.DS_Store +0 -0
  712. package/packages/tab/.DS_Store +0 -0
  713. package/packages/table/.DS_Store +0 -0
  714. package/packages/theme/src/.DS_Store +0 -0
  715. package/packages/theme/src/img/.DS_Store +0 -0
  716. package/packages/theme/src/img/emote/.DS_Store +0 -0
  717. package/packages/theme/src/less/.DS_Store +0 -0
  718. package/packages/theme/src/less/theme/.DS_Store +0 -0
  719. package/packages/tooltip/.DS_Store +0 -0
  720. package/packages/tree/.DS_Store +0 -0
  721. package/packages/upload/.DS_Store +0 -0
  722. package/src/.DS_Store +0 -0
  723. package/src/svg/.DS_Store +0 -0
  724. package/src/svg/menu/.DS_Store +0 -0
@@ -1,1142 +1,1142 @@
1
- <template>
2
- <div class="to-calendar" :class="{'to-calendar-type-month' : type === 'month', 'to-calendar-size-large' : size === 'large'}">
3
- <!-- 头部 开始 -->
4
- <div class="header">
5
- <div class="prevYear" @click="lastYear"></div>
6
- <div class="prev" @click="lastMonth"></div>
7
- <div class="info" :class="{'info-unfold' : type !== 'month'}" @click="toggleMonthSelector">
8
- <span class="year">{{ year }}</span>
9
- <span class="month">{{ month | addZero }}</span>
10
- </div>
11
- <div class="next" @click="nextMonth"></div>
12
- <div class="nextYear" @click="nextYear"></div>
13
- </div>
14
- <!-- 头部 结束 -->
15
- <!-- 年月选择 开始 -->
16
- <div v-show="monthLayer || type === 'month'" class="select">
17
- <div class="year">
18
- <span class="prev" @click="lastYears"></span>
19
- <ul>
20
- <li v-for="(item, index) in years" :key="index" :class="setYearClass(item)" @click="selectYear(item)">
21
- {{ item }}
22
- </li>
23
- </ul>
24
- <span class="next" @click="nextYears"></span>
25
- </div>
26
- <div class="month">
27
- <ul>
28
- <li :class="setMonthClass(1)" @click="selectMonth(1)">{{ t('to.calendar.month.m1') }}</li>
29
- <li :class="setMonthClass(2)" @click="selectMonth(2)">{{ t('to.calendar.month.m2') }}</li>
30
- <li :class="setMonthClass(3)" @click="selectMonth(3)">{{ t('to.calendar.month.m3') }}</li>
31
- <li :class="setMonthClass(4)" @click="selectMonth(4)">{{ t('to.calendar.month.m4') }}</li>
32
- <li :class="setMonthClass(5)" @click="selectMonth(5)">{{ t('to.calendar.month.m5') }}</li>
33
- <li :class="setMonthClass(6)" @click="selectMonth(6)">{{ t('to.calendar.month.m6') }}</li>
34
- <li :class="setMonthClass(7)" @click="selectMonth(7)">{{ t('to.calendar.month.m7') }}</li>
35
- <li :class="setMonthClass(8)" @click="selectMonth(8)">{{ t('to.calendar.month.m8') }}</li>
36
- <li :class="setMonthClass(9)" @click="selectMonth(9)">{{ t('to.calendar.month.m9') }}</li>
37
- <li :class="setMonthClass(10)" @click="selectMonth(10)">{{ t('to.calendar.month.m10') }}</li>
38
- <li :class="setMonthClass(11)" @click="selectMonth(11)">{{ t('to.calendar.month.m11') }}</li>
39
- <li :class="setMonthClass(12)" @click="selectMonth(12)">{{ t('to.calendar.month.m12') }}</li>
40
- </ul>
41
- </div>
42
- </div>
43
- <!-- 年月选择 结束-->
44
- <!-- 周 开始 -->
45
- <div v-if="type!=='month'" class="week">
46
- <ul>
47
- <li>{{ t('to.calendar.week.w0') }}</li>
48
- <li>{{ t('to.calendar.week.w1') }}</li>
49
- <li>{{ t('to.calendar.week.w2') }}</li>
50
- <li>{{ t('to.calendar.week.w3') }}</li>
51
- <li>{{ t('to.calendar.week.w4') }}</li>
52
- <li>{{ t('to.calendar.week.w5') }}</li>
53
- <li>{{ t('to.calendar.week.w6') }}</li>
54
- </ul>
55
- </div>
56
- <!-- 周 结束 -->
57
- <!-- 日期 开始 -->
58
- <div v-if="type!=='month'" class="day">
59
- <ul>
60
- <li v-for="(item, index) in days" :key="index" v-tip="item.point && item.point.tooltip ? item.point.tooltip : ''" v-dis="isDisableDay(item)" :class="setDayClass(item)" @click="selectDay(item)">
61
- <slot :item="item" :index="index">
62
- <span v-if="item.value" class="solar">{{ dayText(item.value) }}</span>
63
- <span v-if="item.point && item.point.length > 0" class="to-calendar-points">
64
- <to-tag v-for="(ipoint, pointIndex) in item.point" :key="pointIndex" :type="size === 'large' ? 'dot' : ''" :color="pointColor(ipoint.type)" :fillet="size === 'large' ? '' : 'round'">{{ ipoint.count }}</to-tag>
65
- </span>
66
- </slot>
67
- </li>
68
- </ul>
69
- </div>
70
- <!-- 日期 结束 -->
71
- <div v-if="legend" class="to-calendar-legend">
72
- <slot name="legend">
73
- <to-tag type="dot" color="danger">逾期未完成</to-tag>
74
- <to-tag type="dot" color="primary">正常进行中</to-tag>
75
- <to-tag type="dot" color="success">已完成</to-tag>
76
- </slot>
77
- </div>
78
- <!-- 时间 开始 -->
79
- <div v-if="type === 'datetime' || type === 'time'" class="time">
80
- <div class="input">
81
- <to-input v-model="hour" type="number" mode="none" :placeholder="t('to.calendar.time.hPlaceholder')" width="full" :maxlength="2" :max="maxHour" :min="0" @click.native="showTimeLayer"></to-input>
82
- </div>
83
- <span class="text">:</span>
84
- <span class="input">
85
- <to-input v-model="minute" type="number" mode="none" :placeholder="t('to.calendar.time.mPlaceholder')" width="full" :maxlength="2" :max="new Date(max).getMinutes()" :min="0" @click.native="showTimeLayer"></to-input>
86
- </span>
87
- <span class="text">:</span>
88
- <span class="input">
89
- <to-input v-model="second" type="number" mode="none" :placeholder="t('to.calendar.time.sPlaceholder')" width="full" :maxlength="2" :max="new Date(max).getSeconds()" :min="0" @click.native="showTimeLayer"></to-input>
90
- </span>
91
- <to-button color="primary" @click="selectTime">{{ t('to.common.confirm') }}</to-button>
92
- <div v-show="timeLayer" class="option">
93
- <to-header :title="t('to.calendar.time.title')" color="primary" mode="fill">
94
- <to-button mode="none" color="bg" icon="close" @click="closeTimeLayer"></to-button>
95
- </to-header>
96
- <div class="content">
97
- <to-scroll ref="hourScroll" :vitrual="!$phone &&! $pad" bar-display="hover">
98
- <to-padding :value="0.5">
99
- <to-grid :col="2">
100
- <to-grid-item v-for="item in hours" :key="item">
101
- <to-card v-dis="isDisableHour(item)" fillet="normal" :color="hour === item ? 'warning' : 'default'" :mode="hour === item ? 'fill' : 'none'" link @click="hour = item;">{{ item }}</to-card>
102
- </to-grid-item>
103
- </to-grid>
104
- </to-padding>
105
- </to-scroll>
106
- <to-scroll ref="minuteScroll" :vitrual="!$phone &&! $pad" bar-display="hover">
107
- <to-padding :value="0.5">
108
- <to-grid :col="2">
109
- <to-grid-item v-for="item in minutes" :key="item">
110
- <to-card v-dis="isDisableMinute(item)" fillet="normal" :color="minute === item ? 'warning' : 'default'" :mode="minute === item ? 'fill' : 'none'" link @click="minute = item;">{{ item }}</to-card>
111
- </to-grid-item>
112
- </to-grid>
113
- </to-padding>
114
- </to-scroll>
115
- <to-scroll ref="secondScroll" :vitrual="!$phone &&! $pad" bar-display="hover">
116
- <to-padding :value="0.5">
117
- <to-grid :col="2">
118
- <to-grid-item v-for="item in seconds" :key="item">
119
- <to-card v-dis="isDisableSecond(item)" fillet="normal" :color="second === item ? 'warning' : 'default'" :mode="second === item ? 'fill' : 'none'" link @click="second = item;">{{ item }}</to-card>
120
- </to-grid-item>
121
- </to-grid>
122
- </to-padding>
123
- </to-scroll>
124
- </div>
125
- </div>
126
- </div>
127
- <!-- 时间 结束 -->
128
- </div>
129
- </template>
130
- <script>
131
- import Locale from 'ai.touchui-vue/src/mixins/locale'
132
- export default {
133
-
134
- // 注:下列注释中,“当前” 是指控件所处的日期/时间,“现在” 则是指实际所处的日期/时间
135
- name: 'ToCalendar',
136
- componentName: 'ToCalendar',
137
- filters: {
138
- addZero: function(str) {
139
- return ('00' + str).substr(str.toString().length);
140
- }
141
- },
142
- mixins: [Locale],
143
- model: {
144
- event: 'change'
145
- },
146
- props: {
147
- // 假期,用于显示假期标识
148
- // ['2024-04-03', '2024-04-04', '2024-04-05']
149
- holiday: {
150
- type: Array,
151
- default() {
152
- return []
153
- }
154
- },
155
- // 重点日期(比如这天有待办之类的)
156
- // [
157
- // {
158
- // day: '2024-04-02',
159
- // tooltip: 'test',
160
- // count: 1
161
- // },
162
- // {
163
- // day: '2024-04-07',
164
- // tooltip: 'test',
165
- // count: 1
166
- // }
167
- // ]
168
- point: {
169
- type: Array,
170
- default() {
171
- return []
172
- }
173
- },
174
- type: {
175
- type: String,
176
- default: ''
177
- },
178
- // 大小,支持 large
179
- size: {
180
- type: String,
181
- default: ''
182
- },
183
- // 是否显示 point 提示信息
184
- legend: Boolean,
185
- value: {
186
- type: [String, Date],
187
- default() {
188
- return ''
189
- }
190
- },
191
- // 范围类型
192
- // 开始:''
193
- // 结束:'end'
194
- rangeType: {
195
- type: String,
196
- default: ''
197
- },
198
- range: Boolean,
199
- time: {
200
- type: String,
201
- default: ''
202
- },
203
- beforeChange: {
204
- type: Function,
205
- default: null
206
- },
207
- min: {
208
- type: [String, Date, Number],
209
- default: ''
210
- },
211
- max: {
212
- type: [String, Date, Number],
213
- default: ''
214
- }
215
- },
216
- data() {
217
- return {
218
-
219
- // 缓存值
220
- changeFrom: 'out',
221
- submitValue: '',
222
-
223
- // 现在时间记录
224
- curYear: new Date().getFullYear(),
225
- curMonth: new Date().getMonth() + 1,
226
- curDay: new Date().getDate(),
227
-
228
- // 默认值
229
- year: '',
230
- month: '',
231
- day: '',
232
- hour: '',
233
- minute: '',
234
- second: '',
235
-
236
- // 页面数据
237
- years: [],
238
- days: [],
239
- hours: [],
240
- minutes: [],
241
- seconds: [],
242
-
243
- // 选择层
244
- monthLayer: false,
245
- timeLayer: false,
246
-
247
- // 年份切换器
248
- tempYear: 0, // 临时当前年,选择年月的时候,在选月份之前,年份是尚未确定的
249
- yearsPage: 0,
250
- now: new Date(),
251
-
252
- // 范围
253
- start: {
254
- year: '',
255
- month: '',
256
- day: ''
257
- },
258
- end: {
259
- year: '',
260
- month: '',
261
- day: ''
262
- }
263
- };
264
- },
265
- computed: {
266
- dayText() {
267
- const that = this
268
- return function(val) {
269
- // 凡是假期,都加上标记
270
- const dayStr = that.year + '-' + that.addZero(that.month) + '-' + that.addZero(val)
271
- if (that.holiday.length > 0 && that.holiday.indexOf(dayStr) > -1) {
272
- return that.t('to.calendar.day.holiday')
273
- } else {
274
- return val
275
- }
276
- }
277
- },
278
- pointColor() {
279
- return function(val) {
280
- if (val === -1) {
281
- return 'danger'
282
- }
283
- if (val === 0) {
284
- return 'primary'
285
- }
286
- if (val === 1) {
287
- return 'success'
288
- }
289
- }
290
- },
291
- hourz: {
292
- get() {
293
- return this.addZero(this.hour)
294
- },
295
- set(val) {
296
- this.hour = String(val)
297
- }
298
- },
299
- minutez: {
300
- get() {
301
- return this.addZero(this.minute)
302
- },
303
- set(val) {
304
- this.minute = String(val)
305
- }
306
- },
307
- secondz: {
308
- get() {
309
- return this.addZero(this.second)
310
- },
311
- set(val) {
312
- this.second = String(val)
313
- }
314
- },
315
- iValue() {
316
- if (this.range) {
317
- const start = (this.start.day || this.start.month) ? this.getStringValue(this.start) : ''
318
- const end = (this.end.day || this.end.month) ? this.getStringValue(this.end) : ''
319
- return `${start},${end}`
320
- } else {
321
- return this.getStringValue()
322
- }
323
- },
324
- maxHour() {
325
- let max = ''
326
- if (typeof this.max === 'string') {
327
- max = this.max.replace(/-/gi, '/')
328
- } else {
329
- max = this.max
330
- }
331
- return new Date(max).getHours()
332
- },
333
-
334
- isDisableDay() {
335
- return (item) => {
336
- if (this.year && this.month) {
337
- let dateString = `${this.year}/${this.month}/${Number(item.value) + 1}`
338
- let min = ''
339
- // 默认使用 2023-03-01 格式时,其 hour = 8 而不是 0,所以要转为 2023/03/01 格式
340
- if (typeof this.min === 'string') {
341
- min = this.min.replace(/-/gi, '/')
342
- } else {
343
- min = this.min
344
- }
345
-
346
- let max = ''
347
- if (typeof this.max === 'string') {
348
- max = this.max.replace(/-/gi, '/')
349
- } else {
350
- max = this.max
351
- }
352
-
353
- return new Date(dateString) <= new Date(min) || new Date(dateString) > new Date(max)
354
- } else {
355
- return false
356
- }
357
- }
358
- },
359
-
360
- isDisableHour() {
361
- return (item) => {
362
- if (this.year && this.month && this.day) {
363
- let dateString = `${this.year}/${this.month}/${this.day} ${Number(item) + 1}:00:00`
364
- let min = ''
365
- // 默认使用 2023-03-01 格式时,其 hour = 8 而不是 0,所以要转为 2023/03/01 格式
366
- if (typeof this.min === 'string') {
367
- min = this.min.replace(/-/gi, '/')
368
- } else {
369
- min = this.min
370
- }
371
-
372
- let max = ''
373
- if (typeof this.max === 'string') {
374
- max = this.max.replace(/-/gi, '/')
375
- } else {
376
- max = this.max
377
- }
378
-
379
- return new Date(dateString) <= new Date(min) || new Date(dateString) > new Date(max)
380
- } else {
381
- return false
382
- }
383
- }
384
- },
385
- isDisableMinute() {
386
- return (item) => {
387
- if (this.year && this.month && this.day && this.hour) {
388
- let dateString = `${this.year}/${this.month}/${this.day} ${this.hour}:${Number(item) + 1}:00`
389
- let min = ''
390
- // 默认使用 2023-03-01 格式时,其 hour = 8 而不是 0,所以要转为 2023/03/01 格式
391
- if (typeof this.min === 'string') {
392
- min = this.min.replace(/-/gi, '/')
393
- } else {
394
- min = this.min
395
- }
396
-
397
- let max = ''
398
- if (typeof this.max === 'string') {
399
- max = this.max.replace(/-/gi, '/')
400
- } else {
401
- max = this.max
402
- }
403
-
404
- return new Date(dateString) < new Date(min) || new Date(dateString) > new Date(max)
405
- } else {
406
- return false
407
- }
408
- }
409
- },
410
- isDisableSecond() {
411
- return (item) => {
412
- if (this.year && this.month && this.day && this.hour && this.minute) {
413
- let dateString = `${this.year}/${this.month}/${this.day} ${this.hour}:${this.minute}:${Number(item) + 1}`
414
- let min = ''
415
- // 默认使用 2023-03-01 格式时,其 hour = 8 而不是 0,所以要转为 2023/03/01 格式
416
- if (typeof this.min === 'string') {
417
- min = this.min.replace(/-/gi, '/')
418
- } else {
419
- min = this.min
420
- }
421
-
422
- let max = ''
423
- if (typeof this.max === 'string') {
424
- max = this.max.replace(/-/gi, '/')
425
- } else {
426
- max = this.max
427
- }
428
-
429
- return new Date(dateString) < new Date(min) || new Date(dateString) > new Date(max)
430
- } else {
431
- return false
432
- }
433
- }
434
- }
435
- },
436
- watch: {
437
- value(val) {
438
- this.setData()
439
- if (this.changeFrom === 'out') {
440
- this.submitValue = val
441
- }
442
- },
443
- submitValue(val) {
444
- this.$emit('change', val)
445
- this.changeFrom = 'in'
446
- setTimeout(() => {
447
- this.changeFrom = 'out'
448
- }, 100);
449
- },
450
- min(val) {
451
- this.min = val
452
- },
453
- max(val) {
454
- this.max = val
455
- },
456
- point: {
457
- handler() {
458
- this.setDayData()
459
- },
460
- deep: true
461
- }
462
- },
463
- created() {
464
- this.setData()
465
- },
466
- methods: {
467
- initCalendar() {
468
- if (this.type === 'time') {
469
- this.showTimeLayer()
470
- } else {
471
- this.timeLayer = false
472
- }
473
- },
474
- // 根据 obj 获取当前时间值,入参格式形如:
475
- // arg = {
476
- // year: '2022',
477
- // month: '02',
478
- // day: '22'
479
- // }
480
- getValue(arg) {
481
- return new Date(`${arg.year || this.year}/${arg.month || this.month}/${arg.day || this.day || '01'}`).getTime()
482
- },
483
-
484
- // 获取格式化为字符串后的日期
485
- getStringValue(arg = {}) {
486
- const year = arg.year || this.year
487
- const month = arg.month || this.month
488
- const day = arg.day || this.day
489
- const hour = arg.hour || this.hourz
490
- const minute = arg.minute || this.minutez
491
- const second = arg.second || this.secondz
492
- const imonth = `${year}-${this.addZero(month)}`
493
- const iday = day ? `${this.addZero(day)}` : '01'
494
- const itime = `${hour}:${minute}:${second}`
495
- if (this.type === 'month') {
496
- return imonth
497
- } else if (this.type === 'datetime' || this.type === 'time') {
498
- return `${imonth}-${iday} ${itime}`
499
- } else {
500
- return `${imonth}-${iday}`
501
- }
502
- },
503
-
504
- // 获取格式化为对象的日期
505
- getObjectValue(str) {
506
- const date = new Date(str)
507
- // eslint-disable-next-line no-debugger
508
- if (this.isDate(str) && str) {
509
- return {
510
- year: date.getFullYear(),
511
- month: date.getMonth() + 1,
512
- day: date.getDate()
513
- }
514
- } else if (this.isMonth(str) && str) {
515
- return {
516
- year: date.getFullYear(),
517
- month: date.getMonth() + 1,
518
- day: ''
519
- }
520
- } else {
521
- return {
522
- year: '',
523
- month: '',
524
- day: ''
525
- }
526
- }
527
- },
528
-
529
- // 数据设置
530
- setData() {
531
- this.setCurrent()
532
- this.setYearData()
533
- this.setDayData()
534
- this.setTimeData()
535
- },
536
- setCurrent() {
537
- this.year = ''
538
- this.month = ''
539
- this.day = ''
540
- if (this.range) {
541
- let arr = this.value.split(',')
542
- const start = arr[0]
543
- const end = arr[1]
544
-
545
- if (!start || this.isDate(start) || this.isMonth(start)) {
546
- this.start = this.getObjectValue(start)
547
- }
548
- if (!end || this.isDate(end) || this.isMonth(end)) {
549
- this.end = this.getObjectValue(end)
550
- }
551
- if (this.rangeType === 'end') {
552
- this.year = this.year || new Date().getFullYear()
553
- if ((this.end.day || this.end.month) && this.isAnyDate(this.getStringValue(this.end))) {
554
- if (this.type === 'month') {
555
- if (this.start.year === this.end.year) {
556
- this.year = this.end.year + 1
557
- } else {
558
- this.year = this.end.year
559
- }
560
- this.month = 1
561
- } else {
562
- if (this.start.month === this.end.month) {
563
- if (Number(this.month) === 12) {
564
- this.year = this.end.year + 1
565
- this.month = 1
566
- } else {
567
- this.month = this.end.month + 1
568
- }
569
- } else {
570
- this.month = this.end.month
571
- }
572
- }
573
- } else {
574
- this.month = this.month || new Date().getMonth() + 2
575
- }
576
- if (this.month > 12) {
577
- this.month = 1
578
- this.year += 1
579
- }
580
- } else {
581
- if ((this.start.day || this.start.month) && this.isAnyDate(this.getStringValue(this.start))) {
582
- this.year = this.start.year
583
- this.month = this.start.month
584
- } else {
585
- this.year = this.year || new Date().getFullYear()
586
- this.month = this.month || new Date().getMonth() + 1
587
- }
588
- }
589
- } else {
590
- if (this.value && !isNaN(new Date(this.value))) {
591
- this.year = new Date(this.value).getFullYear()
592
- this.month = new Date(this.value).getMonth() + 1
593
- this.day = new Date(this.value).getDate()
594
- this.hour = String(new Date(this.value).getHours())
595
- this.minute = String(new Date(this.value).getMinutes())
596
- this.second = String(new Date(this.value).getSeconds())
597
- } else if (this.value && isNaN(new Date(this.value)) && !isNaN(new Date(this.value.replace(/-/g, '/')))) {
598
- const value = this.value.replace(/-/g, '/')
599
- this.year = new Date(value).getFullYear()
600
- this.month = new Date(value).getMonth() + 1
601
- this.day = new Date(value).getDate()
602
- this.hour = String(new Date(value).getHours())
603
- this.minute = String(new Date(value).getMinutes())
604
- this.second = String(new Date(value).getSeconds())
605
- } else {
606
- this.year = new Date().getFullYear()
607
- this.month = new Date().getMonth() + 1
608
- this.day = null
609
- this.hour = '0'
610
- this.minute = '0'
611
- this.second = '0'
612
- }
613
- }
614
- },
615
- setYearData(year) {
616
- year = year || this.year
617
- let arr = [];
618
- for (let i = 0; i < 10; i++) {
619
- arr.push(Math.floor(year / 10) * 10 + i)
620
- }
621
- this.years = arr;
622
- },
623
- setDayData() {
624
- let year = new Date(this.value).getFullYear()
625
- let month = new Date(this.value).getMonth() + 1
626
- let day = new Date(this.value).getDate()
627
- const that = this
628
- if (this.year === year && this.month === month) {
629
- this.day = day
630
- } else {
631
- this.day = null
632
- }
633
- // 计算本月天数
634
- const dayCount = this.getMonthDays(`${this.year}/${this.month}/1`);
635
-
636
- // 计算前面有几天应该置空
637
- const thisMonthFirstDay = new Date(`${this.year}/${this.month}/1`);
638
- thisMonthFirstDay.setMonth(thisMonthFirstDay.getMonth(), 1);
639
- const emptyLength = new Date(thisMonthFirstDay.setMonth(thisMonthFirstDay.getMonth(), 1)).getDay();
640
-
641
- // 设置天数
642
- this.days = (function() {
643
- let arr = [];
644
- for (let i = 0; i < emptyLength; i++) {
645
- arr.push({});
646
- }
647
- for (let i = 1; i < dayCount + 1; i++) {
648
- let obj = {};
649
- obj.value = i;
650
-
651
- // 星期天
652
- if ((i + emptyLength) % 7 === 1) {
653
- obj.sun = true;
654
- }
655
-
656
- // 星期六
657
- if ((i + emptyLength) % 7 === 0) {
658
- obj.sat = true;
659
- }
660
-
661
- // 重点日期
662
- const point = that.point.filter((item)=>{return item.day === `${that.year}-${that.addZero(that.month)}-${that.addZero(i)}`})
663
- obj.point = point
664
-
665
- arr.push(obj);
666
- }
667
- return arr;
668
- })();
669
- },
670
- setTimeData() {
671
- this.hours = this.genNumbers(0, 23)
672
- this.minutes = this.genNumbers(0, 59)
673
- this.seconds = this.genNumbers(0, 59)
674
- const hour = String(new Date(this.value).getHours())
675
- const minute = String(new Date(this.value).getMinutes())
676
- const second = String(new Date(this.value).getSeconds())
677
- if (this.time) {
678
- const arr = this.time.split(':')
679
- this.hour = arr[0] || '0'
680
- this.minute = arr[1] || '0'
681
- this.second = arr[2] || '0'
682
- }
683
- if (!isNaN(hour) && !isNaN(minute) && !isNaN(second)) {
684
- this.hour = hour
685
- this.minute = minute
686
- this.second = second
687
- }
688
- },
689
-
690
- // 选择事件
691
- selectYear(item) {
692
- this.year = item
693
- },
694
- selectMonth(item) {
695
- if (item) {
696
- if (this.range && this.type === 'month') {
697
- let start = {}
698
- let end = {}
699
- if (!this.start.month && !this.end.month) {
700
- start.year = this.year
701
- start.month = item
702
- start.day = ''
703
- }
704
- if (this.start.month) {
705
- if (this.end.month) {
706
- start.year = this.year
707
- start.month = item
708
- start.day = ''
709
- end.year = ''
710
- end.month = ''
711
- end.day = ''
712
- } else {
713
- if (this.getValue(this.start) > this.getValue({month: item})) {
714
- end.year = this.start.year
715
- end.month = this.start.month
716
- end.day = ''
717
- start.year = this.year
718
- start.month = item
719
- start.day = ''
720
- } else {
721
- start = JSON.parse(JSON.stringify(this.start))
722
- end.year = this.year
723
- end.month = item
724
- end.day = ''
725
- }
726
- }
727
- }
728
- this.start = JSON.parse(JSON.stringify(start))
729
- this.end = JSON.parse(JSON.stringify(end))
730
- this.submitValue = this.iValue
731
- } else {
732
- if (this.type === 'month') {
733
- this.$emit('beforeChange', this.getStringValue({
734
- month: item
735
- }))
736
- }
737
- if (this.beforeChange) {
738
- const fn = this.beforeChange(this.getStringValue({
739
- month: item
740
- }))
741
- if (fn && fn.then) {
742
- fn.then(flag => {
743
- this.selectMonthAction(item)
744
- }).catch((e)=>{})
745
- } else {
746
- // 是同步方法,则返回为 true 执行
747
- if (fn) {
748
- this.selectMonthAction(item)
749
- }
750
- }
751
- } else {
752
- this.selectMonthAction(item)
753
- }
754
- }
755
- }
756
- },
757
- selectMonthAction(item) {
758
- this.month = item;
759
- this.monthLayer = false;
760
- this.setDayData();
761
- if (this.type === 'month') {
762
- this.day = 1
763
- this.submitValue = this.iValue
764
- }
765
- },
766
- selectDay(item) {
767
- if (item.value) {
768
- if (this.range) {
769
- let start = {}
770
- let end = {}
771
- if (!this.start.day && !this.end.day) {
772
- start.year = this.year
773
- start.month = this.month
774
- start.day = item.value
775
- }
776
- if (this.start.day) {
777
- if (this.end.day) {
778
- start.year = this.year
779
- start.month = this.month
780
- start.day = item.value
781
- end.year = ''
782
- end.month = ''
783
- end.day = ''
784
- } else {
785
- if (this.getValue(this.start) > this.getValue({day: item.value})) {
786
- end.year = this.start.year
787
- end.month = this.start.month
788
- end.day = this.start.day
789
- start.year = this.year
790
- start.month = this.month
791
- start.day = item.value
792
- } else {
793
- start = JSON.parse(JSON.stringify(this.start))
794
- end.year = this.year
795
- end.month = this.month
796
- end.day = item.value
797
- }
798
- }
799
- }
800
- this.start = JSON.parse(JSON.stringify(start))
801
- this.end = JSON.parse(JSON.stringify(end))
802
- this.submitValue = this.iValue
803
- }
804
- else {
805
- let val = this.getStringValue({
806
- day: item.value
807
- })
808
- if (!this.type || this.type === 'date') {
809
- this.$emit('beforeChange', val)
810
- if (this.beforeChange) {
811
- const fn = this.beforeChange(this.getStringValue({
812
- day: item.value
813
- }))
814
-
815
- if (fn && fn.then) {
816
- fn.then(flag => {
817
- this.selectDayAction(item)
818
- })
819
- } else {
820
- // 是同步方法,则返回为 true 执行
821
- if (fn) {
822
- this.selectDayAction(item)
823
- }
824
- }
825
- } else {
826
- this.selectDayAction(item)
827
- }
828
- } else {
829
- this.selectDayAction(item)
830
- }
831
- }
832
- }
833
- },
834
- selectDayAction(item) {
835
- this.day = item.value
836
- if (!this.type || this.type === 'date') {
837
- this.submitValue = this.iValue
838
- }
839
- },
840
- selectTime() {
841
- if (!this.day && !this.min && !this.max) {
842
- this.day = new Date().getDate()
843
- } else if (!this.day && this.min && this.max) {
844
- this.$tip.error(this.t('to.calendar.tip.error.selectDate'))
845
- return
846
- }
847
- this.$emit('beforeChange', this.getStringValue())
848
- if (this.beforeChange) {
849
-
850
- const fn = this.beforeChange(this.getStringValue())
851
-
852
- if (fn && fn.then) {
853
- fn(this.getStringValue()).then(flag => {
854
- this.selectTimeAction()
855
- })
856
- } else {
857
- // 是同步方法,则返回为 true 执行
858
- if (fn) {
859
- this.selectTimeAction()
860
- }
861
- }
862
- } else {
863
- this.selectTimeAction()
864
- }
865
- },
866
- selectTimeAction() {
867
- this.timeLayer = false
868
- this.submitValue = this.iValue
869
- this.$emit('close')
870
- },
871
- // 样式设置
872
- setYearClass(item) {
873
- return {
874
- cur: this.curYear === item,
875
- on: this.year === item
876
- };
877
- },
878
- setMonthClass(item) {
879
- let arr = []
880
- if (this.year === this.curYear && this.curMonth === item) {
881
- arr.push('cur')
882
- }
883
- if (this.range && this.type === 'month') {
884
- if (this.year === this.start.year && item === this.start.month) {
885
- if (this.end.month) {
886
- arr.push('start')
887
- } else {
888
- arr.push('on')
889
- }
890
- }
891
- if (this.year === this.end.year && item === this.end.month) {
892
- arr.push('end')
893
- }
894
- const value = this.getValue({
895
- year: this.year,
896
- month: item,
897
- day: 1
898
- })
899
- if ((value > this.getValue(this.start) || value === this.getValue(this.start)) && value < this.getValue(this.end)) {
900
- arr.push('range')
901
- }
902
- } else {
903
- if (this.month === item) {
904
- arr.push('on')
905
- }
906
- }
907
-
908
- if (item && (this.min || this.max)) {
909
- let curData = this.year + '/' + (item > 9 ? item : '0' + item) + '/01'
910
- let date = new Date()
911
- let hour = date.getHours()
912
- let minute = date.getMinutes()
913
- let second = date.getSeconds()
914
- curData = curData + ' ' + (hour > 9 ? hour : '0' + hour) + ':' + (minute > 9 ? minute : '0' + minute) + ':' + (second > 9 ? second : '0' + second)
915
- let curTime = new Date(curData).getTime()
916
- let min = new Date(this.min).getTime()
917
- let maxTime = new Date(this.max).getTime()
918
- let cur = curData.split(' ')[0]
919
- let year = new Date(this.max).getFullYear()
920
- let month = new Date(this.max).getMonth() + 1
921
- let day = new Date(this.max).getDate()
922
- let max = year + '/' + (month > 9 ? month : '0' + month) + '/' + (day > 9 ? day : '0' + day)
923
- if (min === maxTime && cur !== max) {
924
- if (curTime > maxTime) {
925
- arr.push('to-dis')
926
- }
927
- if (curTime < min) {
928
- arr.push('to-dis')
929
- }
930
- } else if (min !== maxTime && cur !== max) {
931
- if (curTime > maxTime) {
932
- arr.push('to-dis')
933
- }
934
- if (curTime < min) {
935
- arr.push('to-dis')
936
- }
937
- }
938
- }
939
- return arr;
940
- },
941
- setDayClass(item) {
942
- let arr = []
943
- if (item.sat) {
944
- arr.push('sat')
945
- }
946
- if (item.sun) {
947
- arr.push('sun')
948
- }
949
- if (this.year === this.curYear && this.month === this.curMonth && this.curDay === item.value) {
950
- arr.push('cur')
951
- }
952
- if (this.range) {
953
- if (this.year === this.start.year && this.month === this.start.month && item.value === this.start.day) {
954
- if (this.end.day) {
955
- arr.push('start')
956
- } else {
957
- arr.push('on')
958
- }
959
- }
960
- if (this.year === this.end.year && this.month === this.end.month && item.value === this.end.day) {
961
- arr.push('end')
962
- }
963
- const value = this.getValue({
964
- year: this.year,
965
- month: this.month,
966
- day: item.value
967
- })
968
- if (value > this.getValue(this.start) && value < this.getValue(this.end)) {
969
- arr.push('range')
970
- }
971
- } else {
972
- if (this.day === item.value) {
973
- arr.push('on')
974
- }
975
- }
976
- return arr;
977
- },
978
-
979
- // 界面控制
980
- nextMonth() {
981
- if (this.month === 12) {
982
- this.year += 1;
983
- this.month = 1;
984
- } else {
985
- this.month += 1;
986
- }
987
- this.setDayData();
988
- },
989
- lastMonth() {
990
- if (this.month === 1) {
991
- this.year -= 1;
992
- this.month = 12;
993
- } else {
994
- this.month -= 1;
995
- }
996
- this.setDayData();
997
- },
998
- lastYears() {
999
- this.yearsPage -= 1;
1000
- this.setYearData(this.year + 10 * this.yearsPage);
1001
- },
1002
- nextYears() {
1003
- this.yearsPage += 1;
1004
- this.setYearData(this.year + 10 * this.yearsPage);
1005
- },
1006
- nextYear() {
1007
- this.year += 1
1008
- let year = new Date(this.value).getFullYear()
1009
- let month = new Date(this.value).getMonth() + 1
1010
- let day = new Date(this.value).getDate()
1011
- if (this.year === year && this.month === month) {
1012
- this.day = day
1013
- } else {
1014
- this.day = null
1015
- }
1016
- },
1017
- lastYear() {
1018
- this.year -= 1
1019
- let year = new Date(this.value).getFullYear()
1020
- let month = new Date(this.value).getMonth() + 1
1021
- let day = new Date(this.value).getDate()
1022
- if (this.year === year && this.month === month) {
1023
- this.day = day
1024
- } else {
1025
- this.day = null
1026
- }
1027
- },
1028
- toggleMonthSelector() {
1029
- if (!this.monthLayer) {
1030
- // 打开
1031
- this.monthLayer = true;
1032
- this.tempYear = this.year;
1033
- this.setYearData(this.year);
1034
- } else {
1035
- // 关闭
1036
- this.monthLayer = false;
1037
- }
1038
- },
1039
- showTimeLayer() {
1040
- this.timeLayer = true;
1041
- this.$nextTick(function() {
1042
- this.$refs.hourScroll.adjust()
1043
- this.$refs.minuteScroll.adjust()
1044
- this.$refs.secondScroll.adjust()
1045
- })
1046
- },
1047
- closeTimeLayer() {
1048
- if (this.type === 'time') {
1049
- this.timeLayer = false
1050
- this.$emit('close')
1051
- } else {
1052
- this.timeLayer = false
1053
- }
1054
- },
1055
-
1056
- // 内置方法
1057
- // 验证日期格式
1058
- isDate(date) {
1059
- const DateExp = /^[1-2][0-9]{3}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])$/
1060
- if (DateExp.test(date)) {
1061
- return (new Date(date).getDate() === Number(date.substring(date.length - 2)))
1062
- } else {
1063
- return false
1064
- }
1065
- },
1066
- isMonth(date) {
1067
- const DateExp = /^[1-2][0-9]{3}-(0[1-9]|1[0-2])$/
1068
- if (DateExp.test(date)) {
1069
- return (new Date(date + '-01').getDate() === Number(1))
1070
- } else {
1071
- return false
1072
- }
1073
- },
1074
- isDatetime(time) {
1075
- if (typeof time === 'string') {
1076
- var reg = /^(\d{1,4})(-|\/)(\d{2})\2(\d{1,2}) (\d{2}):(\d{2}):(\d{2})$/;
1077
- var r = time.match(reg);
1078
- if (r == null) return false;
1079
- var d = new Date(r[1], r[3] - 1, r[4], r[5], r[6], r[7]);
1080
- return (d.getFullYear() === Number(r[1]) && (d.getMonth() + 1) === Number(r[3]) && d.getDate() === Number(r[4]) && d.getHours() === Number(r[5]) && d.getMinutes() === Number(r[6]) && d.getSeconds() === Number(r[7]));
1081
- } else {
1082
- return true
1083
- }
1084
- },
1085
- isAnyDate(val) {
1086
- if ((this.isDate(val) && (this.type === '')) || (this.isDatetime(val) && this.type === 'datetime') || (this.isMonth(val) && this.type === 'month')) {
1087
- return true
1088
- } else {
1089
- return false
1090
- }
1091
- },
1092
-
1093
- // 获取一个月的天数
1094
- getMonthDays(date) {
1095
- const thisMonthFirstDay = new Date(date);
1096
- const nextMonthFirstDay = new Date(date);
1097
- thisMonthFirstDay.setMonth(thisMonthFirstDay.getMonth(), 1);
1098
- nextMonthFirstDay.setMonth(nextMonthFirstDay.getMonth() + 1, 1);
1099
- return (nextMonthFirstDay.valueOf() - thisMonthFirstDay.valueOf()) / (1000 * 60 * 60 * 24);
1100
- },
1101
- // 格式化日期
1102
- formatDate(date, fmt) {
1103
- if (!fmt) {
1104
- if (this.type === 'datetime') {
1105
- fmt = 'yyyy-MM-dd HH:mm:ss'
1106
- } else {
1107
- fmt = 'yyyy-MM-dd'
1108
- }
1109
- }
1110
- if (/(y+)/.test(fmt)) {
1111
- fmt = fmt.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length));
1112
- }
1113
- const o = {
1114
- 'M+': date.getMonth() + 1,
1115
- 'd+': date.getDate(),
1116
- 'H+': date.getHours(),
1117
- 'm+': date.getMinutes(),
1118
- 's+': date.getSeconds()
1119
- };
1120
- for (const k in o) {
1121
- if (new RegExp('(' + k + ')').test(fmt)) {
1122
- const str = o[k] + '';
1123
- fmt = fmt.replace(RegExp.$1, RegExp.$1.length === 1 ? str : this.addZero(str));
1124
- }
1125
- }
1126
- return fmt;
1127
- },
1128
- // 生成循环数字
1129
- genNumbers(min, max, step = 1) {
1130
- let arr = []
1131
- for (let i = min; i <= max; i += step) {
1132
- arr.push(String(i))
1133
- }
1134
- return arr
1135
- },
1136
- // 给个位数的数字前面补 0
1137
- addZero(str) {
1138
- return ('00' + str).substr(str.toString().length);
1139
- }
1140
- }
1141
- };
1142
- </script>
1
+ <template>
2
+ <div class="to-calendar" :class="{'to-calendar-type-month' : type === 'month', 'to-calendar-size-large' : size === 'large'}">
3
+ <!-- 头部 开始 -->
4
+ <div class="header">
5
+ <div class="prevYear" @click="lastYear"></div>
6
+ <div class="prev" @click="lastMonth"></div>
7
+ <div class="info" :class="{'info-unfold' : type !== 'month'}" @click="toggleMonthSelector">
8
+ <span class="year">{{ year }}</span>
9
+ <span class="month">{{ month | addZero }}</span>
10
+ </div>
11
+ <div class="next" @click="nextMonth"></div>
12
+ <div class="nextYear" @click="nextYear"></div>
13
+ </div>
14
+ <!-- 头部 结束 -->
15
+ <!-- 年月选择 开始 -->
16
+ <div v-show="monthLayer || type === 'month'" class="select">
17
+ <div class="year">
18
+ <span class="prev" @click="lastYears"></span>
19
+ <ul>
20
+ <li v-for="(item, index) in years" :key="index" :class="setYearClass(item)" @click="selectYear(item)">
21
+ {{ item }}
22
+ </li>
23
+ </ul>
24
+ <span class="next" @click="nextYears"></span>
25
+ </div>
26
+ <div class="month">
27
+ <ul>
28
+ <li :class="setMonthClass(1)" @click="selectMonth(1)">{{ t('to.calendar.month.m1') }}</li>
29
+ <li :class="setMonthClass(2)" @click="selectMonth(2)">{{ t('to.calendar.month.m2') }}</li>
30
+ <li :class="setMonthClass(3)" @click="selectMonth(3)">{{ t('to.calendar.month.m3') }}</li>
31
+ <li :class="setMonthClass(4)" @click="selectMonth(4)">{{ t('to.calendar.month.m4') }}</li>
32
+ <li :class="setMonthClass(5)" @click="selectMonth(5)">{{ t('to.calendar.month.m5') }}</li>
33
+ <li :class="setMonthClass(6)" @click="selectMonth(6)">{{ t('to.calendar.month.m6') }}</li>
34
+ <li :class="setMonthClass(7)" @click="selectMonth(7)">{{ t('to.calendar.month.m7') }}</li>
35
+ <li :class="setMonthClass(8)" @click="selectMonth(8)">{{ t('to.calendar.month.m8') }}</li>
36
+ <li :class="setMonthClass(9)" @click="selectMonth(9)">{{ t('to.calendar.month.m9') }}</li>
37
+ <li :class="setMonthClass(10)" @click="selectMonth(10)">{{ t('to.calendar.month.m10') }}</li>
38
+ <li :class="setMonthClass(11)" @click="selectMonth(11)">{{ t('to.calendar.month.m11') }}</li>
39
+ <li :class="setMonthClass(12)" @click="selectMonth(12)">{{ t('to.calendar.month.m12') }}</li>
40
+ </ul>
41
+ </div>
42
+ </div>
43
+ <!-- 年月选择 结束-->
44
+ <!-- 周 开始 -->
45
+ <div v-if="type!=='month'" class="week">
46
+ <ul>
47
+ <li>{{ t('to.calendar.week.w0') }}</li>
48
+ <li>{{ t('to.calendar.week.w1') }}</li>
49
+ <li>{{ t('to.calendar.week.w2') }}</li>
50
+ <li>{{ t('to.calendar.week.w3') }}</li>
51
+ <li>{{ t('to.calendar.week.w4') }}</li>
52
+ <li>{{ t('to.calendar.week.w5') }}</li>
53
+ <li>{{ t('to.calendar.week.w6') }}</li>
54
+ </ul>
55
+ </div>
56
+ <!-- 周 结束 -->
57
+ <!-- 日期 开始 -->
58
+ <div v-if="type!=='month'" class="day">
59
+ <ul>
60
+ <li v-for="(item, index) in days" :key="index" v-tip="item.point && item.point.tooltip ? item.point.tooltip : ''" v-dis="isDisableDay(item)" :class="setDayClass(item)" @click="selectDay(item)">
61
+ <slot :item="item" :index="index">
62
+ <span v-if="item.value" class="solar">{{ dayText(item.value) }}</span>
63
+ <span v-if="item.point && item.point.length > 0" class="to-calendar-points">
64
+ <to-tag v-for="(ipoint, pointIndex) in item.point" :key="pointIndex" :type="size === 'large' ? 'dot' : ''" :color="pointColor(ipoint.type)" :fillet="size === 'large' ? '' : 'round'">{{ ipoint.count }}</to-tag>
65
+ </span>
66
+ </slot>
67
+ </li>
68
+ </ul>
69
+ </div>
70
+ <!-- 日期 结束 -->
71
+ <div v-if="legend" class="to-calendar-legend">
72
+ <slot name="legend">
73
+ <to-tag type="dot" color="danger">逾期未完成</to-tag>
74
+ <to-tag type="dot" color="primary">正常进行中</to-tag>
75
+ <to-tag type="dot" color="success">已完成</to-tag>
76
+ </slot>
77
+ </div>
78
+ <!-- 时间 开始 -->
79
+ <div v-if="type === 'datetime' || type === 'time'" class="time">
80
+ <div class="input">
81
+ <to-input v-model="hour" type="number" mode="none" :placeholder="t('to.calendar.time.hPlaceholder')" width="full" :maxlength="2" :max="maxHour" :min="0" @click.native="showTimeLayer"></to-input>
82
+ </div>
83
+ <span class="text">:</span>
84
+ <span class="input">
85
+ <to-input v-model="minute" type="number" mode="none" :placeholder="t('to.calendar.time.mPlaceholder')" width="full" :maxlength="2" :max="new Date(max).getMinutes()" :min="0" @click.native="showTimeLayer"></to-input>
86
+ </span>
87
+ <span class="text">:</span>
88
+ <span class="input">
89
+ <to-input v-model="second" type="number" mode="none" :placeholder="t('to.calendar.time.sPlaceholder')" width="full" :maxlength="2" :max="new Date(max).getSeconds()" :min="0" @click.native="showTimeLayer"></to-input>
90
+ </span>
91
+ <to-button color="primary" @click="selectTime">{{ t('to.common.confirm') }}</to-button>
92
+ <div v-show="timeLayer" class="option">
93
+ <to-header :title="t('to.calendar.time.title')" color="primary" mode="fill">
94
+ <to-button mode="none" color="bg" icon="close" @click="closeTimeLayer"></to-button>
95
+ </to-header>
96
+ <div class="content">
97
+ <to-scroll ref="hourScroll" :vitrual="!$phone &&! $pad" bar-display="hover">
98
+ <to-padding :value="0.5">
99
+ <to-grid :col="2">
100
+ <to-grid-item v-for="item in hours" :key="item">
101
+ <to-card v-dis="isDisableHour(item)" fillet="normal" :color="hour === item ? 'warning' : 'default'" :mode="hour === item ? 'fill' : 'none'" link @click="hour = item;">{{ item }}</to-card>
102
+ </to-grid-item>
103
+ </to-grid>
104
+ </to-padding>
105
+ </to-scroll>
106
+ <to-scroll ref="minuteScroll" :vitrual="!$phone &&! $pad" bar-display="hover">
107
+ <to-padding :value="0.5">
108
+ <to-grid :col="2">
109
+ <to-grid-item v-for="item in minutes" :key="item">
110
+ <to-card v-dis="isDisableMinute(item)" fillet="normal" :color="minute === item ? 'warning' : 'default'" :mode="minute === item ? 'fill' : 'none'" link @click="minute = item;">{{ item }}</to-card>
111
+ </to-grid-item>
112
+ </to-grid>
113
+ </to-padding>
114
+ </to-scroll>
115
+ <to-scroll ref="secondScroll" :vitrual="!$phone &&! $pad" bar-display="hover">
116
+ <to-padding :value="0.5">
117
+ <to-grid :col="2">
118
+ <to-grid-item v-for="item in seconds" :key="item">
119
+ <to-card v-dis="isDisableSecond(item)" fillet="normal" :color="second === item ? 'warning' : 'default'" :mode="second === item ? 'fill' : 'none'" link @click="second = item;">{{ item }}</to-card>
120
+ </to-grid-item>
121
+ </to-grid>
122
+ </to-padding>
123
+ </to-scroll>
124
+ </div>
125
+ </div>
126
+ </div>
127
+ <!-- 时间 结束 -->
128
+ </div>
129
+ </template>
130
+ <script>
131
+ import Locale from 'ai.touchui-vue/src/mixins/locale'
132
+ export default {
133
+
134
+ // 注:下列注释中,“当前” 是指控件所处的日期/时间,“现在” 则是指实际所处的日期/时间
135
+ name: 'ToCalendar',
136
+ componentName: 'ToCalendar',
137
+ filters: {
138
+ addZero: function(str) {
139
+ return ('00' + str).substr(str.toString().length);
140
+ }
141
+ },
142
+ mixins: [Locale],
143
+ model: {
144
+ event: 'change'
145
+ },
146
+ props: {
147
+ // 假期,用于显示假期标识
148
+ // ['2024-04-03', '2024-04-04', '2024-04-05']
149
+ holiday: {
150
+ type: Array,
151
+ default() {
152
+ return []
153
+ }
154
+ },
155
+ // 重点日期(比如这天有待办之类的)
156
+ // [
157
+ // {
158
+ // day: '2024-04-02',
159
+ // tooltip: 'test',
160
+ // count: 1
161
+ // },
162
+ // {
163
+ // day: '2024-04-07',
164
+ // tooltip: 'test',
165
+ // count: 1
166
+ // }
167
+ // ]
168
+ point: {
169
+ type: Array,
170
+ default() {
171
+ return []
172
+ }
173
+ },
174
+ type: {
175
+ type: String,
176
+ default: ''
177
+ },
178
+ // 大小,支持 large
179
+ size: {
180
+ type: String,
181
+ default: ''
182
+ },
183
+ // 是否显示 point 提示信息
184
+ legend: Boolean,
185
+ value: {
186
+ type: [String, Date],
187
+ default() {
188
+ return ''
189
+ }
190
+ },
191
+ // 范围类型
192
+ // 开始:''
193
+ // 结束:'end'
194
+ rangeType: {
195
+ type: String,
196
+ default: ''
197
+ },
198
+ range: Boolean,
199
+ time: {
200
+ type: String,
201
+ default: ''
202
+ },
203
+ beforeChange: {
204
+ type: Function,
205
+ default: null
206
+ },
207
+ min: {
208
+ type: [String, Date, Number],
209
+ default: ''
210
+ },
211
+ max: {
212
+ type: [String, Date, Number],
213
+ default: ''
214
+ }
215
+ },
216
+ data() {
217
+ return {
218
+
219
+ // 缓存值
220
+ changeFrom: 'out',
221
+ submitValue: '',
222
+
223
+ // 现在时间记录
224
+ curYear: new Date().getFullYear(),
225
+ curMonth: new Date().getMonth() + 1,
226
+ curDay: new Date().getDate(),
227
+
228
+ // 默认值
229
+ year: '',
230
+ month: '',
231
+ day: '',
232
+ hour: '',
233
+ minute: '',
234
+ second: '',
235
+
236
+ // 页面数据
237
+ years: [],
238
+ days: [],
239
+ hours: [],
240
+ minutes: [],
241
+ seconds: [],
242
+
243
+ // 选择层
244
+ monthLayer: false,
245
+ timeLayer: false,
246
+
247
+ // 年份切换器
248
+ tempYear: 0, // 临时当前年,选择年月的时候,在选月份之前,年份是尚未确定的
249
+ yearsPage: 0,
250
+ now: new Date(),
251
+
252
+ // 范围
253
+ start: {
254
+ year: '',
255
+ month: '',
256
+ day: ''
257
+ },
258
+ end: {
259
+ year: '',
260
+ month: '',
261
+ day: ''
262
+ }
263
+ };
264
+ },
265
+ computed: {
266
+ dayText() {
267
+ const that = this
268
+ return function(val) {
269
+ // 凡是假期,都加上标记
270
+ const dayStr = that.year + '-' + that.addZero(that.month) + '-' + that.addZero(val)
271
+ if (that.holiday.length > 0 && that.holiday.indexOf(dayStr) > -1) {
272
+ return that.t('to.calendar.day.holiday')
273
+ } else {
274
+ return val
275
+ }
276
+ }
277
+ },
278
+ pointColor() {
279
+ return function(val) {
280
+ if (val === -1) {
281
+ return 'danger'
282
+ }
283
+ if (val === 0) {
284
+ return 'primary'
285
+ }
286
+ if (val === 1) {
287
+ return 'success'
288
+ }
289
+ }
290
+ },
291
+ hourz: {
292
+ get() {
293
+ return this.addZero(this.hour)
294
+ },
295
+ set(val) {
296
+ this.hour = String(val)
297
+ }
298
+ },
299
+ minutez: {
300
+ get() {
301
+ return this.addZero(this.minute)
302
+ },
303
+ set(val) {
304
+ this.minute = String(val)
305
+ }
306
+ },
307
+ secondz: {
308
+ get() {
309
+ return this.addZero(this.second)
310
+ },
311
+ set(val) {
312
+ this.second = String(val)
313
+ }
314
+ },
315
+ iValue() {
316
+ if (this.range) {
317
+ const start = (this.start.day || this.start.month) ? this.getStringValue(this.start) : ''
318
+ const end = (this.end.day || this.end.month) ? this.getStringValue(this.end) : ''
319
+ return `${start},${end}`
320
+ } else {
321
+ return this.getStringValue()
322
+ }
323
+ },
324
+ maxHour() {
325
+ let max = ''
326
+ if (typeof this.max === 'string') {
327
+ max = this.max.replace(/-/gi, '/')
328
+ } else {
329
+ max = this.max
330
+ }
331
+ return new Date(max).getHours()
332
+ },
333
+
334
+ isDisableDay() {
335
+ return (item) => {
336
+ if (this.year && this.month) {
337
+ let dateString = `${this.year}/${this.month}/${Number(item.value) + 1}`
338
+ let min = ''
339
+ // 默认使用 2023-03-01 格式时,其 hour = 8 而不是 0,所以要转为 2023/03/01 格式
340
+ if (typeof this.min === 'string') {
341
+ min = this.min.replace(/-/gi, '/')
342
+ } else {
343
+ min = this.min
344
+ }
345
+
346
+ let max = ''
347
+ if (typeof this.max === 'string') {
348
+ max = this.max.replace(/-/gi, '/')
349
+ } else {
350
+ max = this.max
351
+ }
352
+
353
+ return new Date(dateString) <= new Date(min) || new Date(dateString) > new Date(max)
354
+ } else {
355
+ return false
356
+ }
357
+ }
358
+ },
359
+
360
+ isDisableHour() {
361
+ return (item) => {
362
+ if (this.year && this.month && this.day) {
363
+ let dateString = `${this.year}/${this.month}/${this.day} ${Number(item) + 1}:00:00`
364
+ let min = ''
365
+ // 默认使用 2023-03-01 格式时,其 hour = 8 而不是 0,所以要转为 2023/03/01 格式
366
+ if (typeof this.min === 'string') {
367
+ min = this.min.replace(/-/gi, '/')
368
+ } else {
369
+ min = this.min
370
+ }
371
+
372
+ let max = ''
373
+ if (typeof this.max === 'string') {
374
+ max = this.max.replace(/-/gi, '/')
375
+ } else {
376
+ max = this.max
377
+ }
378
+
379
+ return new Date(dateString) <= new Date(min) || new Date(dateString) > new Date(max)
380
+ } else {
381
+ return false
382
+ }
383
+ }
384
+ },
385
+ isDisableMinute() {
386
+ return (item) => {
387
+ if (this.year && this.month && this.day && this.hour) {
388
+ let dateString = `${this.year}/${this.month}/${this.day} ${this.hour}:${Number(item) + 1}:00`
389
+ let min = ''
390
+ // 默认使用 2023-03-01 格式时,其 hour = 8 而不是 0,所以要转为 2023/03/01 格式
391
+ if (typeof this.min === 'string') {
392
+ min = this.min.replace(/-/gi, '/')
393
+ } else {
394
+ min = this.min
395
+ }
396
+
397
+ let max = ''
398
+ if (typeof this.max === 'string') {
399
+ max = this.max.replace(/-/gi, '/')
400
+ } else {
401
+ max = this.max
402
+ }
403
+
404
+ return new Date(dateString) < new Date(min) || new Date(dateString) > new Date(max)
405
+ } else {
406
+ return false
407
+ }
408
+ }
409
+ },
410
+ isDisableSecond() {
411
+ return (item) => {
412
+ if (this.year && this.month && this.day && this.hour && this.minute) {
413
+ let dateString = `${this.year}/${this.month}/${this.day} ${this.hour}:${this.minute}:${Number(item) + 1}`
414
+ let min = ''
415
+ // 默认使用 2023-03-01 格式时,其 hour = 8 而不是 0,所以要转为 2023/03/01 格式
416
+ if (typeof this.min === 'string') {
417
+ min = this.min.replace(/-/gi, '/')
418
+ } else {
419
+ min = this.min
420
+ }
421
+
422
+ let max = ''
423
+ if (typeof this.max === 'string') {
424
+ max = this.max.replace(/-/gi, '/')
425
+ } else {
426
+ max = this.max
427
+ }
428
+
429
+ return new Date(dateString) < new Date(min) || new Date(dateString) > new Date(max)
430
+ } else {
431
+ return false
432
+ }
433
+ }
434
+ }
435
+ },
436
+ watch: {
437
+ value(val) {
438
+ this.setData()
439
+ if (this.changeFrom === 'out') {
440
+ this.submitValue = val
441
+ }
442
+ },
443
+ submitValue(val) {
444
+ this.$emit('change', val)
445
+ this.changeFrom = 'in'
446
+ setTimeout(() => {
447
+ this.changeFrom = 'out'
448
+ }, 100);
449
+ },
450
+ min(val) {
451
+ this.min = val
452
+ },
453
+ max(val) {
454
+ this.max = val
455
+ },
456
+ point: {
457
+ handler() {
458
+ this.setDayData()
459
+ },
460
+ deep: true
461
+ }
462
+ },
463
+ created() {
464
+ this.setData()
465
+ },
466
+ methods: {
467
+ initCalendar() {
468
+ if (this.type === 'time') {
469
+ this.showTimeLayer()
470
+ } else {
471
+ this.timeLayer = false
472
+ }
473
+ },
474
+ // 根据 obj 获取当前时间值,入参格式形如:
475
+ // arg = {
476
+ // year: '2022',
477
+ // month: '02',
478
+ // day: '22'
479
+ // }
480
+ getValue(arg) {
481
+ return new Date(`${arg.year || this.year}/${arg.month || this.month}/${arg.day || this.day || '01'}`).getTime()
482
+ },
483
+
484
+ // 获取格式化为字符串后的日期
485
+ getStringValue(arg = {}) {
486
+ const year = arg.year || this.year
487
+ const month = arg.month || this.month
488
+ const day = arg.day || this.day
489
+ const hour = arg.hour || this.hourz
490
+ const minute = arg.minute || this.minutez
491
+ const second = arg.second || this.secondz
492
+ const imonth = `${year}-${this.addZero(month)}`
493
+ const iday = day ? `${this.addZero(day)}` : '01'
494
+ const itime = `${hour}:${minute}:${second}`
495
+ if (this.type === 'month') {
496
+ return imonth
497
+ } else if (this.type === 'datetime' || this.type === 'time') {
498
+ return `${imonth}-${iday} ${itime}`
499
+ } else {
500
+ return `${imonth}-${iday}`
501
+ }
502
+ },
503
+
504
+ // 获取格式化为对象的日期
505
+ getObjectValue(str) {
506
+ const date = new Date(str)
507
+ // eslint-disable-next-line no-debugger
508
+ if (this.isDate(str) && str) {
509
+ return {
510
+ year: date.getFullYear(),
511
+ month: date.getMonth() + 1,
512
+ day: date.getDate()
513
+ }
514
+ } else if (this.isMonth(str) && str) {
515
+ return {
516
+ year: date.getFullYear(),
517
+ month: date.getMonth() + 1,
518
+ day: ''
519
+ }
520
+ } else {
521
+ return {
522
+ year: '',
523
+ month: '',
524
+ day: ''
525
+ }
526
+ }
527
+ },
528
+
529
+ // 数据设置
530
+ setData() {
531
+ this.setCurrent()
532
+ this.setYearData()
533
+ this.setDayData()
534
+ this.setTimeData()
535
+ },
536
+ setCurrent() {
537
+ this.year = ''
538
+ this.month = ''
539
+ this.day = ''
540
+ if (this.range) {
541
+ let arr = this.value.split(',')
542
+ const start = arr[0]
543
+ const end = arr[1]
544
+
545
+ if (!start || this.isDate(start) || this.isMonth(start)) {
546
+ this.start = this.getObjectValue(start)
547
+ }
548
+ if (!end || this.isDate(end) || this.isMonth(end)) {
549
+ this.end = this.getObjectValue(end)
550
+ }
551
+ if (this.rangeType === 'end') {
552
+ this.year = this.year || new Date().getFullYear()
553
+ if ((this.end.day || this.end.month) && this.isAnyDate(this.getStringValue(this.end))) {
554
+ if (this.type === 'month') {
555
+ if (this.start.year === this.end.year) {
556
+ this.year = this.end.year + 1
557
+ } else {
558
+ this.year = this.end.year
559
+ }
560
+ this.month = 1
561
+ } else {
562
+ if (this.start.month === this.end.month) {
563
+ if (Number(this.month) === 12) {
564
+ this.year = this.end.year + 1
565
+ this.month = 1
566
+ } else {
567
+ this.month = this.end.month + 1
568
+ }
569
+ } else {
570
+ this.month = this.end.month
571
+ }
572
+ }
573
+ } else {
574
+ this.month = this.month || new Date().getMonth() + 2
575
+ }
576
+ if (this.month > 12) {
577
+ this.month = 1
578
+ this.year += 1
579
+ }
580
+ } else {
581
+ if ((this.start.day || this.start.month) && this.isAnyDate(this.getStringValue(this.start))) {
582
+ this.year = this.start.year
583
+ this.month = this.start.month
584
+ } else {
585
+ this.year = this.year || new Date().getFullYear()
586
+ this.month = this.month || new Date().getMonth() + 1
587
+ }
588
+ }
589
+ } else {
590
+ if (this.value && !isNaN(new Date(this.value))) {
591
+ this.year = new Date(this.value).getFullYear()
592
+ this.month = new Date(this.value).getMonth() + 1
593
+ this.day = new Date(this.value).getDate()
594
+ this.hour = String(new Date(this.value).getHours())
595
+ this.minute = String(new Date(this.value).getMinutes())
596
+ this.second = String(new Date(this.value).getSeconds())
597
+ } else if (this.value && isNaN(new Date(this.value)) && !isNaN(new Date(this.value.replace(/-/g, '/')))) {
598
+ const value = this.value.replace(/-/g, '/')
599
+ this.year = new Date(value).getFullYear()
600
+ this.month = new Date(value).getMonth() + 1
601
+ this.day = new Date(value).getDate()
602
+ this.hour = String(new Date(value).getHours())
603
+ this.minute = String(new Date(value).getMinutes())
604
+ this.second = String(new Date(value).getSeconds())
605
+ } else {
606
+ this.year = new Date().getFullYear()
607
+ this.month = new Date().getMonth() + 1
608
+ this.day = null
609
+ this.hour = '0'
610
+ this.minute = '0'
611
+ this.second = '0'
612
+ }
613
+ }
614
+ },
615
+ setYearData(year) {
616
+ year = year || this.year
617
+ let arr = [];
618
+ for (let i = 0; i < 10; i++) {
619
+ arr.push(Math.floor(year / 10) * 10 + i)
620
+ }
621
+ this.years = arr;
622
+ },
623
+ setDayData() {
624
+ let year = new Date(this.value).getFullYear()
625
+ let month = new Date(this.value).getMonth() + 1
626
+ let day = new Date(this.value).getDate()
627
+ const that = this
628
+ if (this.year === year && this.month === month) {
629
+ this.day = day
630
+ } else {
631
+ this.day = null
632
+ }
633
+ // 计算本月天数
634
+ const dayCount = this.getMonthDays(`${this.year}/${this.month}/1`);
635
+
636
+ // 计算前面有几天应该置空
637
+ const thisMonthFirstDay = new Date(`${this.year}/${this.month}/1`);
638
+ thisMonthFirstDay.setMonth(thisMonthFirstDay.getMonth(), 1);
639
+ const emptyLength = new Date(thisMonthFirstDay.setMonth(thisMonthFirstDay.getMonth(), 1)).getDay();
640
+
641
+ // 设置天数
642
+ this.days = (function() {
643
+ let arr = [];
644
+ for (let i = 0; i < emptyLength; i++) {
645
+ arr.push({});
646
+ }
647
+ for (let i = 1; i < dayCount + 1; i++) {
648
+ let obj = {};
649
+ obj.value = i;
650
+
651
+ // 星期天
652
+ if ((i + emptyLength) % 7 === 1) {
653
+ obj.sun = true;
654
+ }
655
+
656
+ // 星期六
657
+ if ((i + emptyLength) % 7 === 0) {
658
+ obj.sat = true;
659
+ }
660
+
661
+ // 重点日期
662
+ const point = that.point.filter((item)=>{return item.day === `${that.year}-${that.addZero(that.month)}-${that.addZero(i)}`})
663
+ obj.point = point
664
+
665
+ arr.push(obj);
666
+ }
667
+ return arr;
668
+ })();
669
+ },
670
+ setTimeData() {
671
+ this.hours = this.genNumbers(0, 23)
672
+ this.minutes = this.genNumbers(0, 59)
673
+ this.seconds = this.genNumbers(0, 59)
674
+ const hour = String(new Date(this.value).getHours())
675
+ const minute = String(new Date(this.value).getMinutes())
676
+ const second = String(new Date(this.value).getSeconds())
677
+ if (this.time) {
678
+ const arr = this.time.split(':')
679
+ this.hour = arr[0] || '0'
680
+ this.minute = arr[1] || '0'
681
+ this.second = arr[2] || '0'
682
+ }
683
+ if (!isNaN(hour) && !isNaN(minute) && !isNaN(second)) {
684
+ this.hour = hour
685
+ this.minute = minute
686
+ this.second = second
687
+ }
688
+ },
689
+
690
+ // 选择事件
691
+ selectYear(item) {
692
+ this.year = item
693
+ },
694
+ selectMonth(item) {
695
+ if (item) {
696
+ if (this.range && this.type === 'month') {
697
+ let start = {}
698
+ let end = {}
699
+ if (!this.start.month && !this.end.month) {
700
+ start.year = this.year
701
+ start.month = item
702
+ start.day = ''
703
+ }
704
+ if (this.start.month) {
705
+ if (this.end.month) {
706
+ start.year = this.year
707
+ start.month = item
708
+ start.day = ''
709
+ end.year = ''
710
+ end.month = ''
711
+ end.day = ''
712
+ } else {
713
+ if (this.getValue(this.start) > this.getValue({month: item})) {
714
+ end.year = this.start.year
715
+ end.month = this.start.month
716
+ end.day = ''
717
+ start.year = this.year
718
+ start.month = item
719
+ start.day = ''
720
+ } else {
721
+ start = JSON.parse(JSON.stringify(this.start))
722
+ end.year = this.year
723
+ end.month = item
724
+ end.day = ''
725
+ }
726
+ }
727
+ }
728
+ this.start = JSON.parse(JSON.stringify(start))
729
+ this.end = JSON.parse(JSON.stringify(end))
730
+ this.submitValue = this.iValue
731
+ } else {
732
+ if (this.type === 'month') {
733
+ this.$emit('beforeChange', this.getStringValue({
734
+ month: item
735
+ }))
736
+ }
737
+ if (this.beforeChange) {
738
+ const fn = this.beforeChange(this.getStringValue({
739
+ month: item
740
+ }))
741
+ if (fn && fn.then) {
742
+ fn.then(flag => {
743
+ this.selectMonthAction(item)
744
+ }).catch((e)=>{})
745
+ } else {
746
+ // 是同步方法,则返回为 true 执行
747
+ if (fn) {
748
+ this.selectMonthAction(item)
749
+ }
750
+ }
751
+ } else {
752
+ this.selectMonthAction(item)
753
+ }
754
+ }
755
+ }
756
+ },
757
+ selectMonthAction(item) {
758
+ this.month = item;
759
+ this.monthLayer = false;
760
+ this.setDayData();
761
+ if (this.type === 'month') {
762
+ this.day = 1
763
+ this.submitValue = this.iValue
764
+ }
765
+ },
766
+ selectDay(item) {
767
+ if (item.value) {
768
+ if (this.range) {
769
+ let start = {}
770
+ let end = {}
771
+ if (!this.start.day && !this.end.day) {
772
+ start.year = this.year
773
+ start.month = this.month
774
+ start.day = item.value
775
+ }
776
+ if (this.start.day) {
777
+ if (this.end.day) {
778
+ start.year = this.year
779
+ start.month = this.month
780
+ start.day = item.value
781
+ end.year = ''
782
+ end.month = ''
783
+ end.day = ''
784
+ } else {
785
+ if (this.getValue(this.start) > this.getValue({day: item.value})) {
786
+ end.year = this.start.year
787
+ end.month = this.start.month
788
+ end.day = this.start.day
789
+ start.year = this.year
790
+ start.month = this.month
791
+ start.day = item.value
792
+ } else {
793
+ start = JSON.parse(JSON.stringify(this.start))
794
+ end.year = this.year
795
+ end.month = this.month
796
+ end.day = item.value
797
+ }
798
+ }
799
+ }
800
+ this.start = JSON.parse(JSON.stringify(start))
801
+ this.end = JSON.parse(JSON.stringify(end))
802
+ this.submitValue = this.iValue
803
+ }
804
+ else {
805
+ let val = this.getStringValue({
806
+ day: item.value
807
+ })
808
+ if (!this.type || this.type === 'date') {
809
+ this.$emit('beforeChange', val)
810
+ if (this.beforeChange) {
811
+ const fn = this.beforeChange(this.getStringValue({
812
+ day: item.value
813
+ }))
814
+
815
+ if (fn && fn.then) {
816
+ fn.then(flag => {
817
+ this.selectDayAction(item)
818
+ })
819
+ } else {
820
+ // 是同步方法,则返回为 true 执行
821
+ if (fn) {
822
+ this.selectDayAction(item)
823
+ }
824
+ }
825
+ } else {
826
+ this.selectDayAction(item)
827
+ }
828
+ } else {
829
+ this.selectDayAction(item)
830
+ }
831
+ }
832
+ }
833
+ },
834
+ selectDayAction(item) {
835
+ this.day = item.value
836
+ if (!this.type || this.type === 'date') {
837
+ this.submitValue = this.iValue
838
+ }
839
+ },
840
+ selectTime() {
841
+ if (!this.day && !this.min && !this.max) {
842
+ this.day = new Date().getDate()
843
+ } else if (!this.day && this.min && this.max) {
844
+ this.$tip.error(this.t('to.calendar.tip.error.selectDate'))
845
+ return
846
+ }
847
+ this.$emit('beforeChange', this.getStringValue())
848
+ if (this.beforeChange) {
849
+
850
+ const fn = this.beforeChange(this.getStringValue())
851
+
852
+ if (fn && fn.then) {
853
+ fn(this.getStringValue()).then(flag => {
854
+ this.selectTimeAction()
855
+ })
856
+ } else {
857
+ // 是同步方法,则返回为 true 执行
858
+ if (fn) {
859
+ this.selectTimeAction()
860
+ }
861
+ }
862
+ } else {
863
+ this.selectTimeAction()
864
+ }
865
+ },
866
+ selectTimeAction() {
867
+ this.timeLayer = false
868
+ this.submitValue = this.iValue
869
+ this.$emit('close')
870
+ },
871
+ // 样式设置
872
+ setYearClass(item) {
873
+ return {
874
+ cur: this.curYear === item,
875
+ on: this.year === item
876
+ };
877
+ },
878
+ setMonthClass(item) {
879
+ let arr = []
880
+ if (this.year === this.curYear && this.curMonth === item) {
881
+ arr.push('cur')
882
+ }
883
+ if (this.range && this.type === 'month') {
884
+ if (this.year === this.start.year && item === this.start.month) {
885
+ if (this.end.month) {
886
+ arr.push('start')
887
+ } else {
888
+ arr.push('on')
889
+ }
890
+ }
891
+ if (this.year === this.end.year && item === this.end.month) {
892
+ arr.push('end')
893
+ }
894
+ const value = this.getValue({
895
+ year: this.year,
896
+ month: item,
897
+ day: 1
898
+ })
899
+ if ((value > this.getValue(this.start) || value === this.getValue(this.start)) && value < this.getValue(this.end)) {
900
+ arr.push('range')
901
+ }
902
+ } else {
903
+ if (this.month === item) {
904
+ arr.push('on')
905
+ }
906
+ }
907
+
908
+ if (item && (this.min || this.max)) {
909
+ let curData = this.year + '/' + (item > 9 ? item : '0' + item) + '/01'
910
+ let date = new Date()
911
+ let hour = date.getHours()
912
+ let minute = date.getMinutes()
913
+ let second = date.getSeconds()
914
+ curData = curData + ' ' + (hour > 9 ? hour : '0' + hour) + ':' + (minute > 9 ? minute : '0' + minute) + ':' + (second > 9 ? second : '0' + second)
915
+ let curTime = new Date(curData).getTime()
916
+ let min = new Date(this.min).getTime()
917
+ let maxTime = new Date(this.max).getTime()
918
+ let cur = curData.split(' ')[0]
919
+ let year = new Date(this.max).getFullYear()
920
+ let month = new Date(this.max).getMonth() + 1
921
+ let day = new Date(this.max).getDate()
922
+ let max = year + '/' + (month > 9 ? month : '0' + month) + '/' + (day > 9 ? day : '0' + day)
923
+ if (min === maxTime && cur !== max) {
924
+ if (curTime > maxTime) {
925
+ arr.push('to-dis')
926
+ }
927
+ if (curTime < min) {
928
+ arr.push('to-dis')
929
+ }
930
+ } else if (min !== maxTime && cur !== max) {
931
+ if (curTime > maxTime) {
932
+ arr.push('to-dis')
933
+ }
934
+ if (curTime < min) {
935
+ arr.push('to-dis')
936
+ }
937
+ }
938
+ }
939
+ return arr;
940
+ },
941
+ setDayClass(item) {
942
+ let arr = []
943
+ if (item.sat) {
944
+ arr.push('sat')
945
+ }
946
+ if (item.sun) {
947
+ arr.push('sun')
948
+ }
949
+ if (this.year === this.curYear && this.month === this.curMonth && this.curDay === item.value) {
950
+ arr.push('cur')
951
+ }
952
+ if (this.range) {
953
+ if (this.year === this.start.year && this.month === this.start.month && item.value === this.start.day) {
954
+ if (this.end.day) {
955
+ arr.push('start')
956
+ } else {
957
+ arr.push('on')
958
+ }
959
+ }
960
+ if (this.year === this.end.year && this.month === this.end.month && item.value === this.end.day) {
961
+ arr.push('end')
962
+ }
963
+ const value = this.getValue({
964
+ year: this.year,
965
+ month: this.month,
966
+ day: item.value
967
+ })
968
+ if (value > this.getValue(this.start) && value < this.getValue(this.end)) {
969
+ arr.push('range')
970
+ }
971
+ } else {
972
+ if (this.day === item.value) {
973
+ arr.push('on')
974
+ }
975
+ }
976
+ return arr;
977
+ },
978
+
979
+ // 界面控制
980
+ nextMonth() {
981
+ if (this.month === 12) {
982
+ this.year += 1;
983
+ this.month = 1;
984
+ } else {
985
+ this.month += 1;
986
+ }
987
+ this.setDayData();
988
+ },
989
+ lastMonth() {
990
+ if (this.month === 1) {
991
+ this.year -= 1;
992
+ this.month = 12;
993
+ } else {
994
+ this.month -= 1;
995
+ }
996
+ this.setDayData();
997
+ },
998
+ lastYears() {
999
+ this.yearsPage -= 1;
1000
+ this.setYearData(this.year + 10 * this.yearsPage);
1001
+ },
1002
+ nextYears() {
1003
+ this.yearsPage += 1;
1004
+ this.setYearData(this.year + 10 * this.yearsPage);
1005
+ },
1006
+ nextYear() {
1007
+ this.year += 1
1008
+ let year = new Date(this.value).getFullYear()
1009
+ let month = new Date(this.value).getMonth() + 1
1010
+ let day = new Date(this.value).getDate()
1011
+ if (this.year === year && this.month === month) {
1012
+ this.day = day
1013
+ } else {
1014
+ this.day = null
1015
+ }
1016
+ },
1017
+ lastYear() {
1018
+ this.year -= 1
1019
+ let year = new Date(this.value).getFullYear()
1020
+ let month = new Date(this.value).getMonth() + 1
1021
+ let day = new Date(this.value).getDate()
1022
+ if (this.year === year && this.month === month) {
1023
+ this.day = day
1024
+ } else {
1025
+ this.day = null
1026
+ }
1027
+ },
1028
+ toggleMonthSelector() {
1029
+ if (!this.monthLayer) {
1030
+ // 打开
1031
+ this.monthLayer = true;
1032
+ this.tempYear = this.year;
1033
+ this.setYearData(this.year);
1034
+ } else {
1035
+ // 关闭
1036
+ this.monthLayer = false;
1037
+ }
1038
+ },
1039
+ showTimeLayer() {
1040
+ this.timeLayer = true;
1041
+ this.$nextTick(function() {
1042
+ this.$refs.hourScroll.adjust()
1043
+ this.$refs.minuteScroll.adjust()
1044
+ this.$refs.secondScroll.adjust()
1045
+ })
1046
+ },
1047
+ closeTimeLayer() {
1048
+ if (this.type === 'time') {
1049
+ this.timeLayer = false
1050
+ this.$emit('close')
1051
+ } else {
1052
+ this.timeLayer = false
1053
+ }
1054
+ },
1055
+
1056
+ // 内置方法
1057
+ // 验证日期格式
1058
+ isDate(date) {
1059
+ const DateExp = /^[1-2][0-9]{3}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])$/
1060
+ if (DateExp.test(date)) {
1061
+ return (new Date(date).getDate() === Number(date.substring(date.length - 2)))
1062
+ } else {
1063
+ return false
1064
+ }
1065
+ },
1066
+ isMonth(date) {
1067
+ const DateExp = /^[1-2][0-9]{3}-(0[1-9]|1[0-2])$/
1068
+ if (DateExp.test(date)) {
1069
+ return (new Date(date + '-01').getDate() === Number(1))
1070
+ } else {
1071
+ return false
1072
+ }
1073
+ },
1074
+ isDatetime(time) {
1075
+ if (typeof time === 'string') {
1076
+ var reg = /^(\d{1,4})(-|\/)(\d{2})\2(\d{1,2}) (\d{2}):(\d{2}):(\d{2})$/;
1077
+ var r = time.match(reg);
1078
+ if (r == null) return false;
1079
+ var d = new Date(r[1], r[3] - 1, r[4], r[5], r[6], r[7]);
1080
+ return (d.getFullYear() === Number(r[1]) && (d.getMonth() + 1) === Number(r[3]) && d.getDate() === Number(r[4]) && d.getHours() === Number(r[5]) && d.getMinutes() === Number(r[6]) && d.getSeconds() === Number(r[7]));
1081
+ } else {
1082
+ return true
1083
+ }
1084
+ },
1085
+ isAnyDate(val) {
1086
+ if ((this.isDate(val) && (this.type === '')) || (this.isDatetime(val) && this.type === 'datetime') || (this.isMonth(val) && this.type === 'month')) {
1087
+ return true
1088
+ } else {
1089
+ return false
1090
+ }
1091
+ },
1092
+
1093
+ // 获取一个月的天数
1094
+ getMonthDays(date) {
1095
+ const thisMonthFirstDay = new Date(date);
1096
+ const nextMonthFirstDay = new Date(date);
1097
+ thisMonthFirstDay.setMonth(thisMonthFirstDay.getMonth(), 1);
1098
+ nextMonthFirstDay.setMonth(nextMonthFirstDay.getMonth() + 1, 1);
1099
+ return (nextMonthFirstDay.valueOf() - thisMonthFirstDay.valueOf()) / (1000 * 60 * 60 * 24);
1100
+ },
1101
+ // 格式化日期
1102
+ formatDate(date, fmt) {
1103
+ if (!fmt) {
1104
+ if (this.type === 'datetime') {
1105
+ fmt = 'yyyy-MM-dd HH:mm:ss'
1106
+ } else {
1107
+ fmt = 'yyyy-MM-dd'
1108
+ }
1109
+ }
1110
+ if (/(y+)/.test(fmt)) {
1111
+ fmt = fmt.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length));
1112
+ }
1113
+ const o = {
1114
+ 'M+': date.getMonth() + 1,
1115
+ 'd+': date.getDate(),
1116
+ 'H+': date.getHours(),
1117
+ 'm+': date.getMinutes(),
1118
+ 's+': date.getSeconds()
1119
+ };
1120
+ for (const k in o) {
1121
+ if (new RegExp('(' + k + ')').test(fmt)) {
1122
+ const str = o[k] + '';
1123
+ fmt = fmt.replace(RegExp.$1, RegExp.$1.length === 1 ? str : this.addZero(str));
1124
+ }
1125
+ }
1126
+ return fmt;
1127
+ },
1128
+ // 生成循环数字
1129
+ genNumbers(min, max, step = 1) {
1130
+ let arr = []
1131
+ for (let i = min; i <= max; i += step) {
1132
+ arr.push(String(i))
1133
+ }
1134
+ return arr
1135
+ },
1136
+ // 给个位数的数字前面补 0
1137
+ addZero(str) {
1138
+ return ('00' + str).substr(str.toString().length);
1139
+ }
1140
+ }
1141
+ };
1142
+ </script>