eoss-ui 0.6.60 → 0.6.62

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 (265) hide show
  1. package/lib/button-group.js +118 -114
  2. package/lib/button.js +118 -114
  3. package/lib/checkbox-group.js +120 -116
  4. package/lib/config/api.js +3 -1
  5. package/lib/data-table-form.js +120 -116
  6. package/lib/data-table.js +123 -119
  7. package/lib/date-picker.js +118 -114
  8. package/lib/dialog.js +118 -114
  9. package/lib/eoss-ui.common.js +2085 -1334
  10. package/lib/flow-group.js +118 -114
  11. package/lib/flow-list.js +246 -208
  12. package/lib/flow.js +1712 -995
  13. package/lib/form.js +120 -116
  14. package/lib/handle-user.js +119 -115
  15. package/lib/handler.js +119 -115
  16. package/lib/icon.js +119 -115
  17. package/lib/index.js +1 -1
  18. package/lib/input-number.js +118 -114
  19. package/lib/input.js +118 -114
  20. package/lib/login.js +131 -127
  21. package/lib/main.js +285 -281
  22. package/lib/nav.js +118 -114
  23. package/lib/notify.js +121 -117
  24. package/lib/page.js +118 -114
  25. package/lib/pagination.js +118 -114
  26. package/lib/player.js +118 -114
  27. package/lib/qr-code.js +131 -127
  28. package/lib/radio-group.js +120 -116
  29. package/lib/retrial-auth.js +121 -117
  30. package/lib/select-ganged.js +120 -116
  31. package/lib/select.js +120 -116
  32. package/lib/selector-panel.js +136 -132
  33. package/lib/selector.js +119 -115
  34. package/lib/sizer.js +120 -116
  35. package/lib/steps.js +118 -114
  36. package/lib/switch.js +118 -114
  37. package/lib/table-form.js +118 -114
  38. package/lib/tabs.js +118 -114
  39. package/lib/tips.js +119 -115
  40. package/lib/tree-group.js +118 -114
  41. package/lib/tree.js +119 -115
  42. package/lib/upload.js +130 -126
  43. package/lib/wujie.js +118 -114
  44. package/lib/wxlogin.js +118 -114
  45. package/package.json +159 -159
  46. package/packages/button/index.js +5 -5
  47. package/packages/button/src/main.vue +418 -418
  48. package/packages/button-group/index.js +5 -5
  49. package/packages/button-group/src/main.vue +298 -298
  50. package/packages/calendar/index.js +5 -5
  51. package/packages/card/index.js +5 -5
  52. package/packages/card/src/main.vue +156 -156
  53. package/packages/cascader/index.js +5 -5
  54. package/packages/cascader/src/main.vue +168 -168
  55. package/packages/checkbox-group/index.js +5 -5
  56. package/packages/checkbox-group/src/main.vue +333 -333
  57. package/packages/clients/index.js +5 -5
  58. package/packages/clients/src/main.vue +151 -151
  59. package/packages/data-table/index.js +5 -5
  60. package/packages/data-table/src/children.vue +39 -39
  61. package/packages/data-table/src/column.vue +989 -989
  62. package/packages/data-table/src/main.vue +1822 -1822
  63. package/packages/data-table/src/sizer.vue +195 -195
  64. package/packages/data-table-form/index.js +5 -5
  65. package/packages/data-table-form/src/checkbox.vue +101 -101
  66. package/packages/data-table-form/src/colgroup.vue +17 -17
  67. package/packages/data-table-form/src/main.vue +181 -181
  68. package/packages/data-table-form/src/radio.vue +65 -65
  69. package/packages/data-table-form/src/table.vue +233 -233
  70. package/packages/data-table-form/src/tbody.vue +336 -336
  71. package/packages/data-table-form/src/thead.vue +68 -68
  72. package/packages/date-picker/index.js +5 -5
  73. package/packages/date-picker/src/main.vue +236 -236
  74. package/packages/dialog/index.js +5 -5
  75. package/packages/enable-drag/index.js +5 -5
  76. package/packages/enterprise/index.js +5 -5
  77. package/packages/enterprise/src/main.vue +66 -66
  78. package/packages/error-page/index.js +5 -5
  79. package/packages/error-page/src/main.vue +44 -44
  80. package/packages/flow/index.js +5 -5
  81. package/packages/flow/src/component/Circulate.vue +322 -0
  82. package/packages/flow/src/component/CommonOpinions.vue +346 -345
  83. package/packages/flow/src/component/CustomPreset.vue +322 -322
  84. package/packages/flow/src/component/FileList.vue +99 -99
  85. package/packages/flow/src/component/Preset.vue +255 -255
  86. package/packages/flow/src/component/SendMsg.vue +241 -229
  87. package/packages/flow/src/component/TimeLimit.vue +190 -190
  88. package/packages/flow/src/component/taskUnionExamine.vue +619 -611
  89. package/packages/flow/src/form.vue +121 -121
  90. package/packages/flow/src/freeStartFlow.vue +2843 -2843
  91. package/packages/flow/src/main.vue +3275 -3175
  92. package/packages/flow/src/processForm.vue +1091 -1087
  93. package/packages/flow/src/processReject.vue +294 -293
  94. package/packages/flow/src/reset.vue +900 -900
  95. package/packages/flow/src/startTaskRead.vue +659 -646
  96. package/packages/flow/src/supervise.vue +149 -144
  97. package/packages/flow/src/table.vue +58 -58
  98. package/packages/flow-group/index.js +5 -5
  99. package/packages/flow-group/src/main.vue +688 -688
  100. package/packages/flow-list/index.js +5 -5
  101. package/packages/flow-list/src/main.vue +1718 -1691
  102. package/packages/form/index.js +5 -5
  103. package/packages/form/src/main.vue +3583 -3583
  104. package/packages/form/src/table.vue +1426 -1426
  105. package/packages/handle-user/index.js +5 -5
  106. package/packages/handle-user/src/main.vue +138 -138
  107. package/packages/handler/index.js +5 -5
  108. package/packages/handler/src/main.vue +493 -493
  109. package/packages/icon/index.js +5 -5
  110. package/packages/icon/src/main.vue +101 -101
  111. package/packages/icons/index.js +5 -5
  112. package/packages/icons/src/main.vue +81 -81
  113. package/packages/input/index.js +5 -5
  114. package/packages/input/src/main.vue +356 -356
  115. package/packages/input-number/index.js +5 -5
  116. package/packages/input-number/src/main.vue +106 -106
  117. package/packages/label/index.js +5 -5
  118. package/packages/label/src/main.vue +457 -457
  119. package/packages/layout/index.js +5 -5
  120. package/packages/layout/src/item.vue +152 -152
  121. package/packages/layout/src/main.vue +31 -31
  122. package/packages/login/index.js +5 -5
  123. package/packages/login/src/main.vue +1942 -1942
  124. package/packages/login/src/resetPassword.vue +562 -562
  125. package/packages/main/index.js +5 -5
  126. package/packages/main/src/default/message.vue +249 -249
  127. package/packages/main/src/default/notice.vue +157 -157
  128. package/packages/main/src/default/userinfo.vue +503 -503
  129. package/packages/main/src/public/online.vue +89 -89
  130. package/packages/main/src/public/search.vue +462 -462
  131. package/packages/main/src/public/settings.vue +221 -221
  132. package/packages/main/src/simplicity/apps.vue +388 -388
  133. package/packages/main/src/simplicity/avatar.vue +82 -82
  134. package/packages/main/src/simplicity/handler.vue +259 -259
  135. package/packages/main/src/simplicity/index.vue +2086 -2086
  136. package/packages/main/src/simplicity/lists.vue +84 -84
  137. package/packages/main/src/simplicity/menu-list.vue +135 -135
  138. package/packages/main/src/simplicity/message.vue +259 -259
  139. package/packages/main/src/simplicity/notice.vue +190 -190
  140. package/packages/main/src/simplicity/router-page.vue +45 -45
  141. package/packages/main/src/simplicity/sub-menu.vue +264 -264
  142. package/packages/main/src/simplicity/user.vue +257 -257
  143. package/packages/main/src/simplicity/userinfo.vue +312 -312
  144. package/packages/menu/index.js +5 -5
  145. package/packages/menu/src/main.vue +584 -584
  146. package/packages/nav/index.js +5 -5
  147. package/packages/nav/src/main.vue +351 -351
  148. package/packages/notify/index.js +5 -5
  149. package/packages/notify/src/main.vue +538 -538
  150. package/packages/page/index.js +5 -5
  151. package/packages/page/src/main.vue +167 -167
  152. package/packages/pagination/index.js +5 -5
  153. package/packages/pagination/src/main.vue +96 -96
  154. package/packages/player/index.js +5 -5
  155. package/packages/player/src/main.vue +194 -194
  156. package/packages/qr-code/index.js +5 -5
  157. package/packages/qr-code/src/main.vue +170 -170
  158. package/packages/radio-group/index.js +6 -6
  159. package/packages/radio-group/src/main.vue +319 -319
  160. package/packages/retrial-auth/index.js +5 -5
  161. package/packages/retrial-auth/src/main.vue +280 -280
  162. package/packages/select/index.js +5 -5
  163. package/packages/select/src/main.vue +778 -778
  164. package/packages/select-ganged/index.js +5 -5
  165. package/packages/select-ganged/src/main.vue +724 -724
  166. package/packages/selector/index.js +5 -5
  167. package/packages/selector/src/main.vue +687 -687
  168. package/packages/selector-panel/index.js +5 -5
  169. package/packages/selector-panel/src/main.vue +1027 -1027
  170. package/packages/selector-panel/src/selection.vue +177 -177
  171. package/packages/selector-panel/src/tree.vue +129 -129
  172. package/packages/sizer/index.js +5 -5
  173. package/packages/sizer/src/main.vue +254 -254
  174. package/packages/steps/index.js +5 -5
  175. package/packages/steps/src/main.vue +181 -181
  176. package/packages/switch/index.js +5 -5
  177. package/packages/switch/src/main.vue +154 -154
  178. package/packages/table-form/index.js +5 -5
  179. package/packages/tabs/index.js +5 -5
  180. package/packages/tabs/src/main.vue +788 -788
  181. package/packages/tabs-panel/index.js +5 -5
  182. package/packages/tabs-panel/src/main.vue +29 -29
  183. package/packages/theme-chalk/src/base.scss +260 -260
  184. package/packages/theme-chalk/src/button-group.scss +176 -176
  185. package/packages/theme-chalk/src/button.scss +24 -24
  186. package/packages/theme-chalk/src/calendar.scss +113 -113
  187. package/packages/theme-chalk/src/card.scss +99 -99
  188. package/packages/theme-chalk/src/checkbox-group.scss +8 -8
  189. package/packages/theme-chalk/src/clients.scss +87 -87
  190. package/packages/theme-chalk/src/data-table-form.scss +67 -67
  191. package/packages/theme-chalk/src/data-table.scss +293 -293
  192. package/packages/theme-chalk/src/date-picker.scss +7 -7
  193. package/packages/theme-chalk/src/dialog.scss +77 -77
  194. package/packages/theme-chalk/src/enable-drag.scss +181 -181
  195. package/packages/theme-chalk/src/enterprise.scss +5 -5
  196. package/packages/theme-chalk/src/error-page.scss +18 -18
  197. package/packages/theme-chalk/src/flow-group.scss +110 -110
  198. package/packages/theme-chalk/src/flow-list.scss +39 -39
  199. package/packages/theme-chalk/src/flow.scss +343 -343
  200. package/packages/theme-chalk/src/form.scss +496 -496
  201. package/packages/theme-chalk/src/handle-user.scss +40 -40
  202. package/packages/theme-chalk/src/handler.scss +143 -143
  203. package/packages/theme-chalk/src/icon.scss +1792 -1792
  204. package/packages/theme-chalk/src/icons.scss +99 -99
  205. package/packages/theme-chalk/src/input.scss +9 -9
  206. package/packages/theme-chalk/src/label.scss +24 -24
  207. package/packages/theme-chalk/src/layout.scss +46 -46
  208. package/packages/theme-chalk/src/login.scss +969 -969
  209. package/packages/theme-chalk/src/main.scss +663 -663
  210. package/packages/theme-chalk/src/menu.scss +222 -222
  211. package/packages/theme-chalk/src/mixins/color.scss +117 -117
  212. package/packages/theme-chalk/src/nav.scss +111 -111
  213. package/packages/theme-chalk/src/page.scss +3 -3
  214. package/packages/theme-chalk/src/pagination.scss +29 -29
  215. package/packages/theme-chalk/src/player.scss +9 -9
  216. package/packages/theme-chalk/src/qr-code.scss +17 -17
  217. package/packages/theme-chalk/src/radio-group.scss +9 -9
  218. package/packages/theme-chalk/src/retrial-auth.scss +38 -38
  219. package/packages/theme-chalk/src/select-ganged.scss +8 -8
  220. package/packages/theme-chalk/src/select.scss +8 -8
  221. package/packages/theme-chalk/src/selector-panel.scss +204 -204
  222. package/packages/theme-chalk/src/selector.scss +91 -91
  223. package/packages/theme-chalk/src/simplicity.scss +1351 -1351
  224. package/packages/theme-chalk/src/sizer.scss +36 -36
  225. package/packages/theme-chalk/src/steps.scss +88 -88
  226. package/packages/theme-chalk/src/switch.scss +3 -3
  227. package/packages/theme-chalk/src/table-form.scss +1 -1
  228. package/packages/theme-chalk/src/tabs.scss +87 -87
  229. package/packages/theme-chalk/src/tips.scss +7 -7
  230. package/packages/theme-chalk/src/toolbar.scss +179 -179
  231. package/packages/theme-chalk/src/tree-group.scss +72 -72
  232. package/packages/theme-chalk/src/tree.scss +165 -165
  233. package/packages/theme-chalk/src/upload.scss +168 -168
  234. package/packages/theme-chalk/src/wxlogin.scss +3 -3
  235. package/packages/tips/index.js +5 -5
  236. package/packages/tips/src/main.vue +141 -141
  237. package/packages/toolbar/index.js +5 -5
  238. package/packages/toolbar/src/main.vue +430 -430
  239. package/packages/tree/index.js +5 -5
  240. package/packages/tree-group/index.js +5 -5
  241. package/packages/upload/index.js +5 -5
  242. package/packages/upload/src/main.vue +1347 -1347
  243. package/packages/upload/src/picture.js +15 -15
  244. package/packages/wujie/index.js +5 -5
  245. package/packages/wujie/src/main.vue +145 -145
  246. package/packages/wxlogin/index.js +5 -5
  247. package/packages/wxlogin/src/main.vue +128 -128
  248. package/src/config/api.js +290 -286
  249. package/src/config/image.js +2 -2
  250. package/src/index.js +160 -160
  251. package/src/utils/bus.js +3 -3
  252. package/src/utils/date-util.js +312 -312
  253. package/src/utils/http.js +50 -50
  254. package/src/utils/rules.js +18 -18
  255. package/src/utils/store.js +21 -21
  256. package/src/utils/webSocket.js +107 -107
  257. package/packages/.DS_Store +0 -0
  258. package/packages/autocomplete/.DS_Store +0 -0
  259. package/packages/menu/.DS_Store +0 -0
  260. package/packages/scrollbar/.DS_Store +0 -0
  261. package/packages/select/.DS_Store +0 -0
  262. package/packages/theme-chalk/src/.DS_Store +0 -0
  263. package/packages/upload/.DS_Store +0 -0
  264. package/src/.DS_Store +0 -0
  265. package/src/utils/.DS_Store +0 -0
@@ -1,312 +1,312 @@
1
- import fecha from 'element-ui/src/utils/date';
2
- import { t } from 'element-ui/src/locale';
3
-
4
- const weeks = ['sun', 'mon', 'tue', 'wed', 'thu', 'fri', 'sat'];
5
- const months = ['jan', 'feb', 'mar', 'apr', 'may', 'jun', 'jul', 'aug', 'sep', 'oct', 'nov', 'dec'];
6
-
7
- const newArray = function(start, end) {
8
- let result = [];
9
- for (let i = start; i <= end; i++) {
10
- result.push(i);
11
- }
12
- return result;
13
- };
14
-
15
- export const getI18nSettings = () => {
16
- return {
17
- dayNamesShort: weeks.map(week => t(`el.datepicker.weeks.${week}`)),
18
- dayNames: weeks.map(week => t(`el.datepicker.weeks.${week}`)),
19
- monthNamesShort: months.map(month => t(`el.datepicker.months.${month}`)),
20
- monthNames: months.map((month, index) => t(`el.datepicker.month${index + 1}`)),
21
- amPm: ['am', 'pm']
22
- };
23
- };
24
-
25
- export const toDate = function(date) {
26
- return isDate(date) ? new Date(date) : null;
27
- };
28
-
29
- export const isDate = function(date) {
30
- if (date === null || date === undefined) return false;
31
- if (isNaN(new Date(date).getTime())) return false;
32
- if (Array.isArray(date)) return false; // deal with `new Date([ new Date() ]) -> new Date()`
33
- return true;
34
- };
35
-
36
- export const isDateObject = function(val) {
37
- return val instanceof Date;
38
- };
39
-
40
- export const formatDate = function(date, format) {
41
- date = toDate(date);
42
- if (!date) return '';
43
- return fecha.format(date, format || 'yyyy-MM-dd', getI18nSettings());
44
- };
45
-
46
- export const parseDate = function(string, format) {
47
- return fecha.parse(string, format || 'yyyy-MM-dd', getI18nSettings());
48
- };
49
-
50
- export const getDayCountOfMonth = function(year, month) {
51
- if (month === 3 || month === 5 || month === 8 || month === 10) {
52
- return 30;
53
- }
54
-
55
- if (month === 1) {
56
- if ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0) {
57
- return 29;
58
- } else {
59
- return 28;
60
- }
61
- }
62
-
63
- return 31;
64
- };
65
-
66
- export const getDayCountOfYear = function(year) {
67
- const isLeapYear = year % 400 === 0 || (year % 100 !== 0 && year % 4 === 0);
68
- return isLeapYear ? 366 : 365;
69
- };
70
-
71
- export const getFirstDayOfMonth = function(date) {
72
- const temp = new Date(date.getTime());
73
- temp.setDate(1);
74
- return temp.getDay();
75
- };
76
-
77
- // see: https://stackoverflow.com/questions/3674539/incrementing-a-date-in-javascript
78
- // {prev, next} Date should work for Daylight Saving Time
79
- // Adding 24 * 60 * 60 * 1000 does not work in the above scenario
80
- export const prevDate = function(date, amount = 1) {
81
- return new Date(date.getFullYear(), date.getMonth(), date.getDate() - amount);
82
- };
83
-
84
- export const nextDate = function(date, amount = 1) {
85
- return new Date(date.getFullYear(), date.getMonth(), date.getDate() + amount);
86
- };
87
-
88
- export const getStartDateOfMonth = function(year, month) {
89
- const result = new Date(year, month, 1);
90
- const day = result.getDay();
91
-
92
- if (day === 0) {
93
- return prevDate(result, 7);
94
- } else {
95
- return prevDate(result, day);
96
- }
97
- };
98
-
99
- export const getWeekNumber = function(src) {
100
- if (!isDate(src)) return null;
101
- const date = new Date(src.getTime());
102
- date.setHours(0, 0, 0, 0);
103
- // Thursday in current week decides the year.
104
- date.setDate(date.getDate() + 3 - ((date.getDay() + 6) % 7));
105
- // January 4 is always in week 1.
106
- const week1 = new Date(date.getFullYear(), 0, 4);
107
- // Adjust to Thursday in week 1 and count number of weeks from date to week 1.
108
- // Rounding should be fine for Daylight Saving Time. Its shift should never be more than 12 hours.
109
- return (
110
- 1 +
111
- Math.round(((date.getTime() - week1.getTime()) / 86400000 - 3 + ((week1.getDay() + 6) % 7)) / 7)
112
- );
113
- };
114
-
115
- export const getRangeHours = function(ranges) {
116
- const hours = [];
117
- let disabledHours = [];
118
-
119
- (ranges || []).forEach(range => {
120
- const value = range.map(date => date.getHours());
121
-
122
- disabledHours = disabledHours.concat(newArray(value[0], value[1]));
123
- });
124
-
125
- if (disabledHours.length) {
126
- for (let i = 0; i < 24; i++) {
127
- hours[i] = disabledHours.indexOf(i) === -1;
128
- }
129
- } else {
130
- for (let i = 0; i < 24; i++) {
131
- hours[i] = false;
132
- }
133
- }
134
-
135
- return hours;
136
- };
137
-
138
- export const getPrevMonthLastDays = (date, amount) => {
139
- if (amount <= 0) return [];
140
- const temp = new Date(date.getTime());
141
- temp.setDate(0);
142
- const lastDay = temp.getDate();
143
- return range(amount).map((_, index) => lastDay - (amount - index - 1));
144
- };
145
-
146
- export const getMonthDays = date => {
147
- const temp = new Date(date.getFullYear(), date.getMonth() + 1, 0);
148
- const days = temp.getDate();
149
- return range(days).map((_, index) => index + 1);
150
- };
151
-
152
- function setRangeData(arr, start, end, value) {
153
- for (let i = start; i < end; i++) {
154
- arr[i] = value;
155
- }
156
- }
157
-
158
- export const getRangeMinutes = function(ranges, hour) {
159
- const minutes = new Array(60);
160
-
161
- if (ranges.length > 0) {
162
- ranges.forEach(range => {
163
- const start = range[0];
164
- const end = range[1];
165
- const startHour = start.getHours();
166
- const startMinute = start.getMinutes();
167
- const endHour = end.getHours();
168
- const endMinute = end.getMinutes();
169
- if (startHour === hour && endHour !== hour) {
170
- setRangeData(minutes, startMinute, 60, true);
171
- } else if (startHour === hour && endHour === hour) {
172
- setRangeData(minutes, startMinute, endMinute + 1, true);
173
- } else if (startHour !== hour && endHour === hour) {
174
- setRangeData(minutes, 0, endMinute + 1, true);
175
- } else if (startHour < hour && endHour > hour) {
176
- setRangeData(minutes, 0, 60, true);
177
- }
178
- });
179
- } else {
180
- setRangeData(minutes, 0, 60, true);
181
- }
182
- return minutes;
183
- };
184
-
185
- export const range = function(n) {
186
- // see https://stackoverflow.com/questions/3746725/create-a-javascript-array-containing-1-n
187
- return Array.apply(null, { length: n }).map((_, n) => n);
188
- };
189
-
190
- export const modifyDate = function(date, y, m, d) {
191
- return new Date(
192
- y,
193
- m,
194
- d,
195
- date.getHours(),
196
- date.getMinutes(),
197
- date.getSeconds(),
198
- date.getMilliseconds()
199
- );
200
- };
201
-
202
- export const modifyTime = function(date, h, m, s) {
203
- return new Date(
204
- date.getFullYear(),
205
- date.getMonth(),
206
- date.getDate(),
207
- h,
208
- m,
209
- s,
210
- date.getMilliseconds()
211
- );
212
- };
213
-
214
- export const modifyWithTimeString = (date, time) => {
215
- if (date == null || !time) {
216
- return date;
217
- }
218
- time = parseDate(time, 'HH:mm:ss');
219
- return modifyTime(date, time.getHours(), time.getMinutes(), time.getSeconds());
220
- };
221
-
222
- export const clearTime = function(date) {
223
- return new Date(date.getFullYear(), date.getMonth(), date.getDate());
224
- };
225
-
226
- export const clearMilliseconds = function(date) {
227
- return new Date(
228
- date.getFullYear(),
229
- date.getMonth(),
230
- date.getDate(),
231
- date.getHours(),
232
- date.getMinutes(),
233
- date.getSeconds(),
234
- 0
235
- );
236
- };
237
-
238
- export const limitTimeRange = function(date, ranges, format = 'HH:mm:ss') {
239
- // TODO: refactory a more elegant solution
240
- if (ranges.length === 0) return date;
241
- const normalizeDate = date => fecha.parse(fecha.format(date, format), format);
242
- const ndate = normalizeDate(date);
243
- const nranges = ranges.map(range => range.map(normalizeDate));
244
- if (nranges.some(nrange => ndate >= nrange[0] && ndate <= nrange[1])) return date;
245
-
246
- let minDate = nranges[0][0];
247
- let maxDate = nranges[0][0];
248
-
249
- nranges.forEach(nrange => {
250
- minDate = new Date(Math.min(nrange[0], minDate));
251
- maxDate = new Date(Math.max(nrange[1], minDate));
252
- });
253
-
254
- const ret = ndate < minDate ? minDate : maxDate;
255
- // preserve Year/Month/Date
256
- return modifyDate(ret, date.getFullYear(), date.getMonth(), date.getDate());
257
- };
258
-
259
- export const timeWithinRange = function(date, selectableRange, format) {
260
- const limitedDate = limitTimeRange(date, selectableRange, format);
261
- return limitedDate.getTime() === date.getTime();
262
- };
263
-
264
- export const changeYearMonthAndClampDate = function(date, year, month) {
265
- // clamp date to the number of days in `year`, `month`
266
- // eg: (2010-1-31, 2010, 2) => 2010-2-28
267
- const monthDate = Math.min(date.getDate(), getDayCountOfMonth(year, month));
268
- return modifyDate(date, year, month, monthDate);
269
- };
270
-
271
- export const prevMonth = function(date) {
272
- const year = date.getFullYear();
273
- const month = date.getMonth();
274
- return month === 0
275
- ? changeYearMonthAndClampDate(date, year - 1, 11)
276
- : changeYearMonthAndClampDate(date, year, month - 1);
277
- };
278
-
279
- export const nextMonth = function(date) {
280
- const year = date.getFullYear();
281
- const month = date.getMonth();
282
- return month === 11
283
- ? changeYearMonthAndClampDate(date, year + 1, 0)
284
- : changeYearMonthAndClampDate(date, year, month + 1);
285
- };
286
-
287
- export const prevYear = function(date, amount = 1) {
288
- const year = date.getFullYear();
289
- const month = date.getMonth();
290
- return changeYearMonthAndClampDate(date, year - amount, month);
291
- };
292
-
293
- export const nextYear = function(date, amount = 1) {
294
- const year = date.getFullYear();
295
- const month = date.getMonth();
296
- return changeYearMonthAndClampDate(date, year + amount, month);
297
- };
298
-
299
- export const extractDateFormat = function(format) {
300
- return format
301
- .replace(/\W?m{1,2}|\W?ZZ/g, '')
302
- .replace(/\W?h{1,2}|\W?s{1,3}|\W?a/gi, '')
303
- .trim();
304
- };
305
-
306
- export const extractTimeFormat = function(format) {
307
- return format.replace(/\W?D{1,2}|\W?Do|\W?d{1,4}|\W?M{1,4}|\W?y{2,4}/g, '').trim();
308
- };
309
-
310
- export const validateRangeInOneMonth = function(start, end) {
311
- return start.getMonth() === end.getMonth() && start.getFullYear() === end.getFullYear();
312
- };
1
+ import fecha from 'element-ui/src/utils/date';
2
+ import { t } from 'element-ui/src/locale';
3
+
4
+ const weeks = ['sun', 'mon', 'tue', 'wed', 'thu', 'fri', 'sat'];
5
+ const months = ['jan', 'feb', 'mar', 'apr', 'may', 'jun', 'jul', 'aug', 'sep', 'oct', 'nov', 'dec'];
6
+
7
+ const newArray = function(start, end) {
8
+ let result = [];
9
+ for (let i = start; i <= end; i++) {
10
+ result.push(i);
11
+ }
12
+ return result;
13
+ };
14
+
15
+ export const getI18nSettings = () => {
16
+ return {
17
+ dayNamesShort: weeks.map(week => t(`el.datepicker.weeks.${week}`)),
18
+ dayNames: weeks.map(week => t(`el.datepicker.weeks.${week}`)),
19
+ monthNamesShort: months.map(month => t(`el.datepicker.months.${month}`)),
20
+ monthNames: months.map((month, index) => t(`el.datepicker.month${index + 1}`)),
21
+ amPm: ['am', 'pm']
22
+ };
23
+ };
24
+
25
+ export const toDate = function(date) {
26
+ return isDate(date) ? new Date(date) : null;
27
+ };
28
+
29
+ export const isDate = function(date) {
30
+ if (date === null || date === undefined) return false;
31
+ if (isNaN(new Date(date).getTime())) return false;
32
+ if (Array.isArray(date)) return false; // deal with `new Date([ new Date() ]) -> new Date()`
33
+ return true;
34
+ };
35
+
36
+ export const isDateObject = function(val) {
37
+ return val instanceof Date;
38
+ };
39
+
40
+ export const formatDate = function(date, format) {
41
+ date = toDate(date);
42
+ if (!date) return '';
43
+ return fecha.format(date, format || 'yyyy-MM-dd', getI18nSettings());
44
+ };
45
+
46
+ export const parseDate = function(string, format) {
47
+ return fecha.parse(string, format || 'yyyy-MM-dd', getI18nSettings());
48
+ };
49
+
50
+ export const getDayCountOfMonth = function(year, month) {
51
+ if (month === 3 || month === 5 || month === 8 || month === 10) {
52
+ return 30;
53
+ }
54
+
55
+ if (month === 1) {
56
+ if ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0) {
57
+ return 29;
58
+ } else {
59
+ return 28;
60
+ }
61
+ }
62
+
63
+ return 31;
64
+ };
65
+
66
+ export const getDayCountOfYear = function(year) {
67
+ const isLeapYear = year % 400 === 0 || (year % 100 !== 0 && year % 4 === 0);
68
+ return isLeapYear ? 366 : 365;
69
+ };
70
+
71
+ export const getFirstDayOfMonth = function(date) {
72
+ const temp = new Date(date.getTime());
73
+ temp.setDate(1);
74
+ return temp.getDay();
75
+ };
76
+
77
+ // see: https://stackoverflow.com/questions/3674539/incrementing-a-date-in-javascript
78
+ // {prev, next} Date should work for Daylight Saving Time
79
+ // Adding 24 * 60 * 60 * 1000 does not work in the above scenario
80
+ export const prevDate = function(date, amount = 1) {
81
+ return new Date(date.getFullYear(), date.getMonth(), date.getDate() - amount);
82
+ };
83
+
84
+ export const nextDate = function(date, amount = 1) {
85
+ return new Date(date.getFullYear(), date.getMonth(), date.getDate() + amount);
86
+ };
87
+
88
+ export const getStartDateOfMonth = function(year, month) {
89
+ const result = new Date(year, month, 1);
90
+ const day = result.getDay();
91
+
92
+ if (day === 0) {
93
+ return prevDate(result, 7);
94
+ } else {
95
+ return prevDate(result, day);
96
+ }
97
+ };
98
+
99
+ export const getWeekNumber = function(src) {
100
+ if (!isDate(src)) return null;
101
+ const date = new Date(src.getTime());
102
+ date.setHours(0, 0, 0, 0);
103
+ // Thursday in current week decides the year.
104
+ date.setDate(date.getDate() + 3 - ((date.getDay() + 6) % 7));
105
+ // January 4 is always in week 1.
106
+ const week1 = new Date(date.getFullYear(), 0, 4);
107
+ // Adjust to Thursday in week 1 and count number of weeks from date to week 1.
108
+ // Rounding should be fine for Daylight Saving Time. Its shift should never be more than 12 hours.
109
+ return (
110
+ 1 +
111
+ Math.round(((date.getTime() - week1.getTime()) / 86400000 - 3 + ((week1.getDay() + 6) % 7)) / 7)
112
+ );
113
+ };
114
+
115
+ export const getRangeHours = function(ranges) {
116
+ const hours = [];
117
+ let disabledHours = [];
118
+
119
+ (ranges || []).forEach(range => {
120
+ const value = range.map(date => date.getHours());
121
+
122
+ disabledHours = disabledHours.concat(newArray(value[0], value[1]));
123
+ });
124
+
125
+ if (disabledHours.length) {
126
+ for (let i = 0; i < 24; i++) {
127
+ hours[i] = disabledHours.indexOf(i) === -1;
128
+ }
129
+ } else {
130
+ for (let i = 0; i < 24; i++) {
131
+ hours[i] = false;
132
+ }
133
+ }
134
+
135
+ return hours;
136
+ };
137
+
138
+ export const getPrevMonthLastDays = (date, amount) => {
139
+ if (amount <= 0) return [];
140
+ const temp = new Date(date.getTime());
141
+ temp.setDate(0);
142
+ const lastDay = temp.getDate();
143
+ return range(amount).map((_, index) => lastDay - (amount - index - 1));
144
+ };
145
+
146
+ export const getMonthDays = date => {
147
+ const temp = new Date(date.getFullYear(), date.getMonth() + 1, 0);
148
+ const days = temp.getDate();
149
+ return range(days).map((_, index) => index + 1);
150
+ };
151
+
152
+ function setRangeData(arr, start, end, value) {
153
+ for (let i = start; i < end; i++) {
154
+ arr[i] = value;
155
+ }
156
+ }
157
+
158
+ export const getRangeMinutes = function(ranges, hour) {
159
+ const minutes = new Array(60);
160
+
161
+ if (ranges.length > 0) {
162
+ ranges.forEach(range => {
163
+ const start = range[0];
164
+ const end = range[1];
165
+ const startHour = start.getHours();
166
+ const startMinute = start.getMinutes();
167
+ const endHour = end.getHours();
168
+ const endMinute = end.getMinutes();
169
+ if (startHour === hour && endHour !== hour) {
170
+ setRangeData(minutes, startMinute, 60, true);
171
+ } else if (startHour === hour && endHour === hour) {
172
+ setRangeData(minutes, startMinute, endMinute + 1, true);
173
+ } else if (startHour !== hour && endHour === hour) {
174
+ setRangeData(minutes, 0, endMinute + 1, true);
175
+ } else if (startHour < hour && endHour > hour) {
176
+ setRangeData(minutes, 0, 60, true);
177
+ }
178
+ });
179
+ } else {
180
+ setRangeData(minutes, 0, 60, true);
181
+ }
182
+ return minutes;
183
+ };
184
+
185
+ export const range = function(n) {
186
+ // see https://stackoverflow.com/questions/3746725/create-a-javascript-array-containing-1-n
187
+ return Array.apply(null, { length: n }).map((_, n) => n);
188
+ };
189
+
190
+ export const modifyDate = function(date, y, m, d) {
191
+ return new Date(
192
+ y,
193
+ m,
194
+ d,
195
+ date.getHours(),
196
+ date.getMinutes(),
197
+ date.getSeconds(),
198
+ date.getMilliseconds()
199
+ );
200
+ };
201
+
202
+ export const modifyTime = function(date, h, m, s) {
203
+ return new Date(
204
+ date.getFullYear(),
205
+ date.getMonth(),
206
+ date.getDate(),
207
+ h,
208
+ m,
209
+ s,
210
+ date.getMilliseconds()
211
+ );
212
+ };
213
+
214
+ export const modifyWithTimeString = (date, time) => {
215
+ if (date == null || !time) {
216
+ return date;
217
+ }
218
+ time = parseDate(time, 'HH:mm:ss');
219
+ return modifyTime(date, time.getHours(), time.getMinutes(), time.getSeconds());
220
+ };
221
+
222
+ export const clearTime = function(date) {
223
+ return new Date(date.getFullYear(), date.getMonth(), date.getDate());
224
+ };
225
+
226
+ export const clearMilliseconds = function(date) {
227
+ return new Date(
228
+ date.getFullYear(),
229
+ date.getMonth(),
230
+ date.getDate(),
231
+ date.getHours(),
232
+ date.getMinutes(),
233
+ date.getSeconds(),
234
+ 0
235
+ );
236
+ };
237
+
238
+ export const limitTimeRange = function(date, ranges, format = 'HH:mm:ss') {
239
+ // TODO: refactory a more elegant solution
240
+ if (ranges.length === 0) return date;
241
+ const normalizeDate = date => fecha.parse(fecha.format(date, format), format);
242
+ const ndate = normalizeDate(date);
243
+ const nranges = ranges.map(range => range.map(normalizeDate));
244
+ if (nranges.some(nrange => ndate >= nrange[0] && ndate <= nrange[1])) return date;
245
+
246
+ let minDate = nranges[0][0];
247
+ let maxDate = nranges[0][0];
248
+
249
+ nranges.forEach(nrange => {
250
+ minDate = new Date(Math.min(nrange[0], minDate));
251
+ maxDate = new Date(Math.max(nrange[1], minDate));
252
+ });
253
+
254
+ const ret = ndate < minDate ? minDate : maxDate;
255
+ // preserve Year/Month/Date
256
+ return modifyDate(ret, date.getFullYear(), date.getMonth(), date.getDate());
257
+ };
258
+
259
+ export const timeWithinRange = function(date, selectableRange, format) {
260
+ const limitedDate = limitTimeRange(date, selectableRange, format);
261
+ return limitedDate.getTime() === date.getTime();
262
+ };
263
+
264
+ export const changeYearMonthAndClampDate = function(date, year, month) {
265
+ // clamp date to the number of days in `year`, `month`
266
+ // eg: (2010-1-31, 2010, 2) => 2010-2-28
267
+ const monthDate = Math.min(date.getDate(), getDayCountOfMonth(year, month));
268
+ return modifyDate(date, year, month, monthDate);
269
+ };
270
+
271
+ export const prevMonth = function(date) {
272
+ const year = date.getFullYear();
273
+ const month = date.getMonth();
274
+ return month === 0
275
+ ? changeYearMonthAndClampDate(date, year - 1, 11)
276
+ : changeYearMonthAndClampDate(date, year, month - 1);
277
+ };
278
+
279
+ export const nextMonth = function(date) {
280
+ const year = date.getFullYear();
281
+ const month = date.getMonth();
282
+ return month === 11
283
+ ? changeYearMonthAndClampDate(date, year + 1, 0)
284
+ : changeYearMonthAndClampDate(date, year, month + 1);
285
+ };
286
+
287
+ export const prevYear = function(date, amount = 1) {
288
+ const year = date.getFullYear();
289
+ const month = date.getMonth();
290
+ return changeYearMonthAndClampDate(date, year - amount, month);
291
+ };
292
+
293
+ export const nextYear = function(date, amount = 1) {
294
+ const year = date.getFullYear();
295
+ const month = date.getMonth();
296
+ return changeYearMonthAndClampDate(date, year + amount, month);
297
+ };
298
+
299
+ export const extractDateFormat = function(format) {
300
+ return format
301
+ .replace(/\W?m{1,2}|\W?ZZ/g, '')
302
+ .replace(/\W?h{1,2}|\W?s{1,3}|\W?a/gi, '')
303
+ .trim();
304
+ };
305
+
306
+ export const extractTimeFormat = function(format) {
307
+ return format.replace(/\W?D{1,2}|\W?Do|\W?d{1,4}|\W?M{1,4}|\W?y{2,4}/g, '').trim();
308
+ };
309
+
310
+ export const validateRangeInOneMonth = function(start, end) {
311
+ return start.getMonth() === end.getMonth() && start.getFullYear() === end.getFullYear();
312
+ };