@tdesign/uniapp 0.7.3 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (197) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/README.md +1 -1
  3. package/dist/action-sheet/README.md +1 -1
  4. package/dist/action-sheet/action-sheet.vue +158 -150
  5. package/dist/action-sheet/props.ts +2 -2
  6. package/dist/action-sheet/type.ts +1 -1
  7. package/dist/avatar/avatar.vue +89 -87
  8. package/dist/avatar-group/avatar-group.vue +69 -67
  9. package/dist/back-top/back-top.vue +60 -58
  10. package/dist/badge/badge.vue +69 -59
  11. package/dist/button/button.vue +121 -116
  12. package/dist/button/props.ts +2 -2
  13. package/dist/button/type.ts +1 -1
  14. package/dist/calendar/calendar-header.vue +4 -4
  15. package/dist/calendar/calendar.vue +308 -297
  16. package/dist/calendar/template.vue +1 -1
  17. package/dist/cascader/README.en-US.md +2 -1
  18. package/dist/cascader/README.md +2 -1
  19. package/dist/cascader/cascader.vue +340 -328
  20. package/dist/cascader/props.ts +6 -1
  21. package/dist/cascader/type.ts +6 -0
  22. package/dist/cell/cell.vue +127 -121
  23. package/dist/cell-group/cell-group.vue +32 -30
  24. package/dist/check-tag/check-tag.vue +73 -71
  25. package/dist/checkbox/checkbox.vue +127 -127
  26. package/dist/checkbox/props.ts +6 -6
  27. package/dist/checkbox/type.ts +3 -3
  28. package/dist/checkbox-group/checkbox-group.vue +175 -173
  29. package/dist/checkbox-group/props.ts +6 -6
  30. package/dist/checkbox-group/type.ts +4 -4
  31. package/dist/col/col.vue +26 -24
  32. package/dist/collapse/collapse.vue +83 -81
  33. package/dist/collapse-panel/collapse-panel.vue +121 -119
  34. package/dist/collapse-panel/props.ts +4 -4
  35. package/dist/collapse-panel/type.ts +2 -2
  36. package/dist/color-picker/README.md +1 -1
  37. package/dist/color-picker/color-picker.vue +324 -322
  38. package/dist/color-picker/props.ts +2 -2
  39. package/dist/color-picker/template.vue +14 -10
  40. package/dist/common/common.ts +1 -0
  41. package/dist/common/style/theme/index.css +5 -5
  42. package/dist/common/utils.js +7 -2
  43. package/dist/common/validator.js +172 -0
  44. package/dist/config-provider/README.en-US.md +184 -0
  45. package/dist/config-provider/README.md +234 -0
  46. package/dist/config-provider/config-provider.vue +105 -0
  47. package/dist/config-provider/config-store.js +70 -0
  48. package/dist/config-provider/props.ts +16 -0
  49. package/dist/config-provider/reactive-state.js +39 -0
  50. package/dist/config-provider/type.ts +401 -0
  51. package/dist/config-provider/use-config.js +29 -0
  52. package/dist/config-provider/utils.js +29 -0
  53. package/dist/count-down/count-down.vue +98 -97
  54. package/dist/date-time-picker/date-time-picker.vue +410 -395
  55. package/dist/demo/demo.vue +1 -0
  56. package/dist/dialog/dialog.vue +175 -173
  57. package/dist/divider/divider.vue +38 -36
  58. package/dist/draggable/draggable.vue +60 -58
  59. package/dist/drawer/README.md +1 -1
  60. package/dist/drawer/drawer.vue +48 -46
  61. package/dist/dropdown-item/dropdown-item.vue +209 -207
  62. package/dist/dropdown-item/props.ts +4 -4
  63. package/dist/dropdown-item/type.ts +3 -3
  64. package/dist/dropdown-menu/dropdown-menu.vue +93 -99
  65. package/dist/empty/empty.vue +43 -42
  66. package/dist/fab/fab.vue +88 -86
  67. package/dist/footer/footer.vue +36 -34
  68. package/dist/form/README.en-US.md +17 -24
  69. package/dist/form/README.md +18 -25
  70. package/dist/form/form.css +1 -166
  71. package/dist/form/form.vue +251 -236
  72. package/dist/form/props.ts +2 -21
  73. package/dist/form/type.ts +7 -70
  74. package/dist/form-item/README.en-US.md +4 -5
  75. package/dist/form-item/README.md +4 -5
  76. package/dist/form-item/form-item.css +69 -96
  77. package/dist/form-item/form-item.vue +315 -336
  78. package/dist/form-item/form-model.ts +125 -173
  79. package/dist/form-item/props.ts +4 -17
  80. package/dist/form-item/type.ts +43 -1
  81. package/dist/grid/grid.vue +53 -51
  82. package/dist/grid-item/grid-item.vue +121 -119
  83. package/dist/guide/README.md +1 -1
  84. package/dist/guide/guide.vue +281 -277
  85. package/dist/icon/README.md +2 -4
  86. package/dist/icon/icon.vue +78 -76
  87. package/dist/image/README.md +1 -1
  88. package/dist/image/image.vue +103 -101
  89. package/dist/image-viewer/image-viewer.vue +160 -158
  90. package/dist/image-viewer/props.ts +2 -2
  91. package/dist/image-viewer/type.ts +1 -1
  92. package/dist/index.js +3 -0
  93. package/dist/indexes/indexes.vue +264 -267
  94. package/dist/indexes-anchor/indexes-anchor.vue +41 -41
  95. package/dist/input/input.vue +192 -192
  96. package/dist/input/props.ts +6 -6
  97. package/dist/input/type.ts +3 -3
  98. package/dist/link/link.vue +73 -71
  99. package/dist/loading/loading.vue +59 -59
  100. package/dist/locale/ar_KW.ts +157 -0
  101. package/dist/locale/en_US.ts +146 -0
  102. package/dist/locale/it_IT.ts +145 -0
  103. package/dist/locale/ja_JP.ts +132 -0
  104. package/dist/locale/ko_KR.ts +132 -0
  105. package/dist/locale/ru_RU.ts +157 -0
  106. package/dist/locale/zh_CN.ts +133 -0
  107. package/dist/locale/zh_TW.ts +132 -0
  108. package/dist/message/message.vue +181 -173
  109. package/dist/message/props.ts +2 -2
  110. package/dist/message/type.ts +1 -1
  111. package/dist/message-item/message-item.vue +192 -184
  112. package/dist/mixins/using-config.js +39 -0
  113. package/dist/navbar/navbar.vue +201 -199
  114. package/dist/notice-bar/notice-bar.vue +175 -171
  115. package/dist/notice-bar/props.ts +2 -2
  116. package/dist/notice-bar/type.ts +1 -1
  117. package/dist/npm/dayjs/esm/locale/ar.js +81 -0
  118. package/dist/npm/dayjs/esm/locale/it.js +39 -0
  119. package/dist/overlay/overlay.vue +50 -48
  120. package/dist/picker/picker.vue +168 -161
  121. package/dist/picker-item/picker-item.vue +269 -269
  122. package/dist/popover/README.md +1 -1
  123. package/dist/popover/popover.vue +262 -261
  124. package/dist/popover/props.ts +4 -4
  125. package/dist/popover/type.ts +2 -2
  126. package/dist/popup/popup.vue +46 -45
  127. package/dist/progress/README.md +1 -1
  128. package/dist/progress/progress.vue +76 -76
  129. package/dist/pull-down-refresh/props.ts +2 -2
  130. package/dist/pull-down-refresh/pull-down-refresh.vue +240 -234
  131. package/dist/pull-down-refresh/type.ts +1 -1
  132. package/dist/qrcode/README.md +1 -1
  133. package/dist/qrcode/components/qrcode-canvas/qrcode-canvas.vue +340 -338
  134. package/dist/qrcode/components/qrcode-status/qrcode-status.vue +6 -6
  135. package/dist/qrcode/qrcode.vue +93 -87
  136. package/dist/radio/props.ts +6 -6
  137. package/dist/radio/radio.vue +118 -120
  138. package/dist/radio/type.ts +3 -3
  139. package/dist/radio-group/props.ts +4 -4
  140. package/dist/radio-group/radio-group.vue +136 -134
  141. package/dist/radio-group/type.ts +4 -4
  142. package/dist/rate/computed.js +2 -2
  143. package/dist/rate/props.ts +4 -4
  144. package/dist/rate/rate.vue +155 -154
  145. package/dist/rate/type.ts +2 -2
  146. package/dist/result/result.vue +41 -39
  147. package/dist/row/row.vue +38 -36
  148. package/dist/scroll-view/scroll-view.vue +24 -22
  149. package/dist/search/props.ts +2 -2
  150. package/dist/search/search.vue +127 -125
  151. package/dist/search/type.ts +1 -1
  152. package/dist/side-bar/side-bar.vue +57 -55
  153. package/dist/side-bar-item/side-bar-item.vue +86 -86
  154. package/dist/skeleton/skeleton.vue +126 -124
  155. package/dist/slider/README.md +1 -1
  156. package/dist/slider/props.ts +2 -2
  157. package/dist/slider/slider.vue +457 -457
  158. package/dist/slider/type.ts +1 -1
  159. package/dist/step-item/step-item.vue +77 -75
  160. package/dist/stepper/props.ts +2 -2
  161. package/dist/stepper/stepper.vue +168 -149
  162. package/dist/stepper/type.ts +1 -1
  163. package/dist/steps/props.ts +2 -2
  164. package/dist/steps/steps.vue +83 -81
  165. package/dist/steps/type.ts +1 -1
  166. package/dist/sticky/sticky.vue +104 -102
  167. package/dist/swipe-cell/swipe-cell.vue +91 -89
  168. package/dist/swiper/README.md +1 -1
  169. package/dist/swiper/swiper.vue +91 -89
  170. package/dist/swiper-nav/swiper-nav.vue +38 -36
  171. package/dist/switch/props.ts +2 -2
  172. package/dist/switch/switch.vue +62 -62
  173. package/dist/switch/type.ts +1 -1
  174. package/dist/tab-bar/tab-bar.vue +88 -86
  175. package/dist/tab-bar-item/tab-bar-item.vue +85 -82
  176. package/dist/tab-panel/tab-panel.vue +66 -64
  177. package/dist/tabs/tabs.vue +294 -287
  178. package/dist/tag/tag.vue +79 -77
  179. package/dist/textarea/props.ts +6 -6
  180. package/dist/textarea/textarea.vue +127 -126
  181. package/dist/textarea/type.ts +3 -3
  182. package/dist/toast/toast.vue +107 -106
  183. package/dist/transition/transition.vue +30 -28
  184. package/dist/tree-select/tree-select.vue +151 -151
  185. package/dist/types/config-provider.d.ts +7 -0
  186. package/dist/types/index.d.ts +2 -0
  187. package/dist/types/popover.d.ts +7 -0
  188. package/dist/upload/README.en-US.md +13 -14
  189. package/dist/upload/README.md +11 -12
  190. package/dist/upload/props.ts +2 -4
  191. package/dist/upload/type.ts +12 -11
  192. package/dist/upload/upload.css +1 -1
  193. package/dist/upload/upload.vue +672 -512
  194. package/dist/watermark/watermark.vue +151 -149
  195. package/global.d.ts +2 -0
  196. package/package.json +15 -3
  197. package/dist/form/form-item-props.ts +0 -56
@@ -7,11 +7,11 @@
7
7
  :show-overlay="isShowOverlay(popupProps && popupProps.showOverlay, true)"
8
8
  :using-custom-navbar="usingCustomNavbar || (popupProps && popupProps.usingCustomNavbar)"
9
9
  :custom-navbar-height="coalesce(customNavbarHeight, popupProps && popupProps.usingCustomNavbar)"
10
- :z-index="(popupProps && popupProps.zIndex)"
10
+ :z-index="popupProps && popupProps.zIndex"
11
11
  :overlay-props="(popupProps && popupProps.overlayProps) || defaultOverlayProps"
12
12
  @visible-change="onVisibleChange"
13
13
  >
14
- <CalendarTemplate
14
+ <calendar-template
15
15
  :class-prefix="classPrefix"
16
16
  :use-popup="usePopup"
17
17
  :switch-mode="switchMode"
@@ -38,10 +38,10 @@
38
38
  <template #title>
39
39
  <slot name="title" />
40
40
  </template>
41
- </CalendarTemplate>
41
+ </calendar-template>
42
42
  </t-popup>
43
43
  <block v-else>
44
- <CalendarTemplate
44
+ <calendar-template
45
45
  :class-prefix="classPrefix"
46
46
  :use-popup="usePopup"
47
47
  :switch-mode="switchMode"
@@ -68,14 +68,12 @@
68
68
  <template #title>
69
69
  <slot name="title" />
70
70
  </template>
71
- </CalendarTemplate>
71
+ </calendar-template>
72
72
  </block>
73
73
  </view>
74
74
  </template>
75
75
  <script>
76
76
  import TPopup from '../popup/popup';
77
- import TButton from '../button/button';
78
- import TIcon from '../icon/icon';
79
77
  import CalendarTemplate from './template.vue';
80
78
 
81
79
  import { uniComponent } from '../common/src/index';
@@ -87,6 +85,7 @@ import TCalendar from '../common/shared/calendar/index';
87
85
  import useCustomNavbar from '../mixins/using-custom-navbar';
88
86
  import { getPrevMonth, getPrevYear, getNextMonth, getNextYear } from './utils';
89
87
  import tools from '../common/utils.wxs';
88
+ import usingConfig from '../mixins/using-config';
90
89
  import {
91
90
  getMonthTitle,
92
91
  getDateLabel,
@@ -94,365 +93,377 @@ import {
94
93
  } from './computed.js';
95
94
 
96
95
 
97
- const name = `${prefix}-calendar`;
96
+ const componentName = 'calendar';
97
+ const name = `${prefix}-${componentName}`;
98
98
 
99
-
100
- const defaultLocaleText = {
101
- title: '请选择日期',
102
- weekdays: ['日', '一', '二', '三', '四', '五', '六'],
103
- monthTitle: '{year} 年 {month}',
104
- months: ['1 月', '2 月', '3 月', '4 月', '5 月', '6 月', '7 月', '8 月', '9 月', '10 月', '11 月', '12 月'],
105
- confirm: '确认',
106
- };
107
-
108
- export default uniComponent({
109
- name,
110
- options: {
111
- styleIsolation: 'shared',
112
- },
113
- controlledProps: [
114
- {
115
- key: 'value',
116
- event: 'confirm',
117
- },
118
- {
119
- key: 'value',
120
- event: 'change',
121
- },
122
- ],
123
- externalClasses: [
124
- `${prefix}-class`,
125
- ],
126
- mixins: [useCustomNavbar],
99
+ export default {
127
100
  components: {
128
101
  TPopup,
129
- TButton,
130
- TIcon,
131
102
  CalendarTemplate,
132
103
  },
133
- props: {
134
- ...props,
135
- },
136
- emits: [
137
- 'update:visible',
138
- ],
139
- data() {
140
- return {
141
- prefix,
142
- classPrefix: name,
143
- months: [],
144
- scrollIntoView: '',
145
- innerConfirmBtn: {},
146
- realLocalText: {},
147
- currentMonth: {},
148
- actionButtons: {
149
- preYearBtnDisable: false,
150
- prevMonthBtnDisable: false,
151
- nextMonthBtnDisable: false,
152
- nextYearBtnDisable: false,
104
+ ...uniComponent({
105
+ name,
106
+ options: {
107
+ styleIsolation: 'shared',
108
+ },
109
+ controlledProps: [
110
+ {
111
+ key: 'value',
112
+ event: 'confirm',
153
113
  },
154
- tools,
155
-
156
- dataVisible: this.visible,
157
- dataValue: coalesce(this.value, this.defaultValue),
158
- days: [],
159
-
160
- defaultOverlayProps: {},
161
- };
162
- },
163
- watch: {
164
- type: {
165
- handler(v) {
166
- this.base.type = v;
114
+ {
115
+ key: 'value',
116
+ event: 'change',
167
117
  },
118
+ ],
119
+ externalClasses: [
120
+ `${prefix}-class`,
121
+ ],
122
+ mixins: [
123
+ useCustomNavbar,
124
+ usingConfig({
125
+ componentName,
126
+ localeTextPropName: 'localeText',
127
+ }),
128
+ ],
129
+ props: {
130
+ ...props,
168
131
  },
169
-
170
- allowSameDay(v) {
171
- this.base.allowSameDay = v;
132
+ emits: [
133
+ 'update:visible',
134
+ ],
135
+ data() {
136
+ return {
137
+ prefix,
138
+ classPrefix: name,
139
+ months: [],
140
+ scrollIntoView: '',
141
+ innerConfirmBtn: {},
142
+ realLocalText: {},
143
+ currentMonth: {},
144
+ actionButtons: {
145
+ preYearBtnDisable: false,
146
+ prevMonthBtnDisable: false,
147
+ nextMonthBtnDisable: false,
148
+ nextYearBtnDisable: false,
149
+ },
150
+ tools,
151
+
152
+ dataVisible: this.visible,
153
+ dataValue: coalesce(this.value, this.defaultValue),
154
+ days: [],
155
+
156
+ defaultOverlayProps: {},
157
+ };
172
158
  },
173
-
174
- confirmBtn: {
175
- handler(v) {
176
- if (typeof v === 'string') {
177
- this.innerConfirmBtn = v === 'slot' ? 'slot' : { content: v };
178
- } else if (typeof v === 'object') {
179
- this.innerConfirmBtn = v;
180
- }
159
+ watch: {
160
+ localeText: {
161
+ handler() {
162
+ this.updateLocale?.();
163
+ },
164
+ deep: true,
181
165
  },
182
- immediate: true,
183
- },
184
166
 
185
- firstDayOfWeek: 'onWatchMinMaxDate',
186
- minDate: 'onWatchMinMaxDate',
187
- maxDate: 'onWatchMinMaxDate',
167
+ globalConfig: {
168
+ handler(globalConfig) {
169
+ this.days = this.base.getDays(globalConfig.weekdays);
170
+ this.realLocalText = globalConfig;
171
+ },
172
+ deep: true,
173
+ },
188
174
 
189
- value: {
190
- handler(v) {
191
- this.dataValue = v;
175
+ type: {
176
+ handler(v) {
177
+ this.base.type = v;
178
+ },
192
179
  },
193
- immediate: true,
194
- deep: true,
195
- },
196
180
 
197
- visible: {
198
- handler(v) {
199
- this.dataVisible = v;
181
+ allowSameDay(v) {
182
+ this.base.allowSameDay = v;
200
183
  },
201
- immediate: true,
202
- },
203
184
 
204
- dataValue: {
205
- handler(v) {
206
- this.base.value = v;
207
- this.calcMonths();
208
- this.updateCurrentMonth(Array.isArray(v) ? v[0] : v);
185
+ confirmBtn: {
186
+ handler(v) {
187
+ if (typeof v === 'string') {
188
+ this.innerConfirmBtn = v === 'slot' ? 'slot' : { content: v };
189
+ } else if (typeof v === 'object') {
190
+ this.innerConfirmBtn = v;
191
+ }
192
+ },
193
+ immediate: true,
209
194
  },
210
- deep: true,
211
- },
212
195
 
213
- dataVisible: {
214
- handler(v) {
215
- if (v) {
216
- this.onScrollIntoView();
217
- this.base.value = this.dataValue;
218
- this.calcMonths();
219
- }
196
+ firstDayOfWeek: 'onWatchMinMaxDate',
197
+ minDate: 'onWatchMinMaxDate',
198
+ maxDate: 'onWatchMinMaxDate',
199
+
200
+ value: {
201
+ handler(v) {
202
+ this.dataValue = v;
203
+ },
204
+ immediate: true,
205
+ deep: true,
220
206
  },
221
- immediate: true,
222
- },
223
- format: {
224
- handler(v) {
225
- const { usePopup, dataVisible: visible } = this;
226
207
 
227
- if (this.base) {
228
- this.base.format = v;
229
- }
208
+ visible: {
209
+ handler(v) {
210
+ this.dataVisible = v;
211
+ },
212
+ immediate: true,
213
+ },
230
214
 
231
- if (!usePopup || visible) {
215
+ dataValue: {
216
+ handler(v) {
217
+ this.base.value = v;
232
218
  this.calcMonths();
233
- }
219
+ this.updateCurrentMonth(Array.isArray(v) ? v[0] : v);
220
+ },
221
+ deep: true,
234
222
  },
235
- immediate: true,
236
- },
237
- },
238
- created() {
239
- const values = Object.keys(props).reduce((acc, key) => ({
240
- ...acc,
241
- [key]: this[key],
242
- }));
243
- this.base = new TCalendar(values);
244
- },
245
223
 
246
- mounted() {
247
- const realLocalText = { ...defaultLocaleText, ...this.localeText };
248
- this.initialValue();
249
- this.onWatchMinMaxDate();
250
- this.days = this.base.getDays(realLocalText.weekdays);
251
- this.realLocalText = realLocalText;
224
+ dataVisible: {
225
+ handler(v) {
226
+ if (v) {
227
+ this.onScrollIntoView();
228
+ this.base.value = this.dataValue;
229
+ this.calcMonths();
230
+ }
231
+ },
232
+ immediate: true,
233
+ },
234
+ format: {
235
+ handler(v) {
236
+ const { usePopup, dataVisible: visible } = this;
237
+
238
+ if (this.base) {
239
+ this.base.format = v;
240
+ }
241
+
242
+ if (!usePopup || visible) {
243
+ this.calcMonths();
244
+ }
245
+ },
246
+ immediate: true,
247
+ },
248
+ },
249
+ created() {
250
+ const values = Object.keys(props).reduce((acc, key) => ({
251
+ ...acc,
252
+ [key]: this[key],
253
+ }));
254
+ this.base = new TCalendar(values);
255
+ },
252
256
 
253
- this.calcMonths();
254
- this.updateCurrentMonth();
257
+ mounted() {
258
+ this.initialValue();
259
+ this.onWatchMinMaxDate();
260
+ this.days = this.base.getDays(this.globalConfig.weekdays);
261
+ this.realLocalText = this.globalConfig;
255
262
 
256
- if (!this.usePopup) {
257
- this.onScrollIntoView();
258
- }
259
- },
260
- methods: {
261
- coalesce,
262
-
263
- getMonthTitle,
264
- getDateLabel,
265
- isDateSelected,
266
- initialValue() {
267
- const { dataValue: value, type, minDate } = this;
268
-
269
- if (!value) {
270
- const today = new Date();
271
- const now = minDate || new Date(today.getFullYear(), today.getMonth(), today.getDate()).getTime(); // 获取 0 点的时间戳
272
- const initialValue = type === 'single' ? now : [now];
273
-
274
- if (type === 'range') {
275
- initialValue[1] = now + 24 * 3600 * 1000; // 第二天
276
- }
263
+ this.calcMonths();
264
+ this.updateCurrentMonth();
277
265
 
278
- this.dataValue = initialValue;
279
- this.base.value = initialValue;
266
+ if (!this.usePopup) {
267
+ this.onScrollIntoView();
280
268
  }
281
269
  },
270
+ methods: {
271
+ coalesce,
272
+
273
+ getMonthTitle,
274
+ getDateLabel,
275
+ isDateSelected,
276
+ initialValue() {
277
+ const { dataValue: value, type, minDate } = this;
278
+
279
+ if (!value) {
280
+ const today = new Date();
281
+ const now = minDate || new Date(today.getFullYear(), today.getMonth(), today.getDate()).getTime(); // 获取 0 点的时间戳
282
+ const initialValue = type === 'single' ? now : [now];
283
+
284
+ if (type === 'range') {
285
+ initialValue[1] = now + 24 * 3600 * 1000; // 第二天
286
+ }
287
+
288
+ this.dataValue = initialValue;
289
+ this.base.value = initialValue;
290
+ }
291
+ },
282
292
 
283
- onScrollIntoView() {
284
- const { dataValue: value } = this;
293
+ onScrollIntoView() {
294
+ const { dataValue: value } = this;
285
295
 
286
- if (!value) return;
296
+ if (!value) return;
287
297
 
288
- const date = new Date(Array.isArray(value) ? value[0] : value);
298
+ const date = new Date(Array.isArray(value) ? value[0] : value);
289
299
 
290
- if (date) {
291
- this.scrollIntoView = `year_${date.getFullYear()}_month_${date.getMonth()}`;
292
- }
293
- },
300
+ if (date) {
301
+ this.scrollIntoView = `year_${date.getFullYear()}_month_${date.getMonth()}`;
302
+ }
303
+ },
294
304
 
295
- getCurrentYearAndMonth(v) {
296
- const date = new Date(v);
297
- return { year: date.getFullYear(), month: date.getMonth() };
298
- },
305
+ getCurrentYearAndMonth(v) {
306
+ const date = new Date(v);
307
+ return { year: date.getFullYear(), month: date.getMonth() };
308
+ },
299
309
 
300
- updateActionButton(value) {
301
- const iMin = this.getCurrentYearAndMonth(this.base.minDate);
302
- const iMax = this.getCurrentYearAndMonth(this.base.maxDate);
303
- const iValue = this.getCurrentYearAndMonth(value);
304
-
305
- const iMinTimestamp = new Date(iMin.year, iMin.month, 1).getTime();
306
- const iMaxTimestamp = new Date(iMax.year, iMax.month, 1).getTime();
307
- const iDateValue = new Date(iValue.year, iValue.month, 1);
308
-
309
- const iPrevYearTimestamp = getPrevYear(iDateValue).getTime();
310
- const iPrevMonthTimestamp = getPrevMonth(iDateValue).getTime();
311
- const iNextMonthTimestamp = getNextMonth(iDateValue).getTime();
312
- const iNextYearTimestamp = getNextYear(iDateValue).getTime();
313
-
314
- const preYearBtnDisable = iPrevYearTimestamp < iMinTimestamp || iPrevMonthTimestamp < iMinTimestamp;
315
- const prevMonthBtnDisable = iPrevMonthTimestamp < iMinTimestamp;
316
- const nextYearBtnDisable = iNextMonthTimestamp > iMaxTimestamp || iNextYearTimestamp > iMaxTimestamp;
317
- const nextMonthBtnDisable = iNextMonthTimestamp > iMaxTimestamp;
318
-
319
- this.actionButtons = {
320
- preYearBtnDisable,
321
- prevMonthBtnDisable,
322
- nextYearBtnDisable,
323
- nextMonthBtnDisable,
324
- };
325
- },
310
+ updateActionButton(value) {
311
+ const iMin = this.getCurrentYearAndMonth(this.base.minDate);
312
+ const iMax = this.getCurrentYearAndMonth(this.base.maxDate);
313
+ const iValue = this.getCurrentYearAndMonth(value);
314
+
315
+ const iMinTimestamp = new Date(iMin.year, iMin.month, 1).getTime();
316
+ const iMaxTimestamp = new Date(iMax.year, iMax.month, 1).getTime();
317
+ const iDateValue = new Date(iValue.year, iValue.month, 1);
318
+
319
+ const iPrevYearTimestamp = getPrevYear(iDateValue).getTime();
320
+ const iPrevMonthTimestamp = getPrevMonth(iDateValue).getTime();
321
+ const iNextMonthTimestamp = getNextMonth(iDateValue).getTime();
322
+ const iNextYearTimestamp = getNextYear(iDateValue).getTime();
323
+
324
+ const preYearBtnDisable = iPrevYearTimestamp < iMinTimestamp || iPrevMonthTimestamp < iMinTimestamp;
325
+ const prevMonthBtnDisable = iPrevMonthTimestamp < iMinTimestamp;
326
+ const nextYearBtnDisable = iNextMonthTimestamp > iMaxTimestamp || iNextYearTimestamp > iMaxTimestamp;
327
+ const nextMonthBtnDisable = iNextMonthTimestamp > iMaxTimestamp;
328
+
329
+ this.actionButtons = {
330
+ preYearBtnDisable,
331
+ prevMonthBtnDisable,
332
+ nextYearBtnDisable,
333
+ nextMonthBtnDisable,
334
+ };
335
+ },
326
336
 
327
- updateCurrentMonth(newValue) {
328
- if (this.switchMode === 'none') return;
329
- this.calcCurrentMonth(newValue);
330
- },
337
+ updateCurrentMonth(newValue) {
338
+ if (this.switchMode === 'none') return;
339
+ this.calcCurrentMonth(newValue);
340
+ },
331
341
 
332
- calcCurrentMonth(newValue) {
333
- const date = newValue || this.getCurrentDate();
334
- const { year, month } = this.getCurrentYearAndMonth(date);
335
- const currentMonth = this.months.filter(item => item.year === year && item.month === month);
342
+ calcCurrentMonth(newValue) {
343
+ const date = newValue || this.getCurrentDate();
344
+ const { year, month } = this.getCurrentYearAndMonth(date);
345
+ const currentMonth = this.months.filter(item => item.year === year && item.month === month);
336
346
 
337
- this.updateActionButton(date);
347
+ this.updateActionButton(date);
338
348
 
339
- this.currentMonth = currentMonth.length > 0 ? currentMonth : [this.months[0]];
340
- },
349
+ this.currentMonth = currentMonth.length > 0 ? currentMonth : [this.months[0]];
350
+ },
341
351
 
342
- calcMonths() {
343
- if (!this.base) return;
352
+ calcMonths() {
353
+ if (!this.base) return;
344
354
 
345
- const months = this.base.getMonths();
355
+ const months = this.base.getMonths();
346
356
 
347
- this.months = months;
348
- },
357
+ this.months = months;
358
+ },
349
359
 
350
- close(trigger) {
351
- if (this.autoClose) {
352
- this.$emit('update:visible', false);
353
- this.dataVisible = false;
354
- }
355
- this.$emit('close', { trigger });
356
- },
360
+ close(trigger) {
361
+ if (this.autoClose) {
362
+ this.$emit('update:visible', false);
363
+ this.dataVisible = false;
364
+ }
365
+ this.$emit('close', { trigger });
366
+ },
357
367
 
358
- onVisibleChange() {
359
- this.close('overlay');
360
- },
368
+ onVisibleChange() {
369
+ this.close('overlay');
370
+ },
361
371
 
362
- handleClose() {
363
- this.close('close-btn');
364
- },
372
+ handleClose() {
373
+ this.close('close-btn');
374
+ },
365
375
 
366
- handleSelect(e) {
367
- const { readonly } = this;
368
- const { date, year, month } = e.currentTarget.dataset;
376
+ handleSelect(e) {
377
+ const { readonly } = this;
378
+ const { date, year, month } = e.currentTarget.dataset;
369
379
 
370
- if (date.type === 'disabled' || readonly) return;
380
+ if (date.type === 'disabled' || readonly) return;
371
381
 
372
- const rawValue = this.base.select({ cellType: date.type, year, month, date: date.day });
382
+ const rawValue = this.base.select({ cellType: date.type, year, month, date: date.day });
373
383
 
374
- const value = this.toTime(rawValue);
384
+ const value = this.toTime(rawValue);
375
385
 
376
- this.calcMonths();
377
- this.updateCurrentMonth();
386
+ this.calcMonths();
387
+ this.updateCurrentMonth();
378
388
 
379
- if (this.confirmBtn == null) {
389
+ if (this.confirmBtn == null) {
380
390
  // 不显示确认按钮,则选择完即关闭 popup
381
- if (this.type === 'single' || rawValue.length === 2) {
382
- this.dataVisible = false;
383
- this._trigger('change', { value }); // 受控
391
+ if (this.type === 'single' || rawValue.length === 2) {
392
+ this.dataVisible = false;
393
+ this._trigger('change', { value }); // 受控
394
+ }
384
395
  }
385
- }
386
396
 
387
- this.$emit('select', { value });
388
- },
397
+ this.$emit('select', { value });
398
+ },
389
399
 
390
- onTplButtonTap() {
391
- const rawValue = this.base.getTrimValue();
392
- const value = this.toTime(rawValue);
400
+ onTplButtonTap() {
401
+ const rawValue = this.base.getTrimValue();
402
+ const value = this.toTime(rawValue);
393
403
 
394
- this.close('confirm-btn');
395
- this._trigger('confirm', { value });
396
- },
404
+ this.close('confirm-btn');
405
+ this._trigger('confirm', { value });
406
+ },
397
407
 
398
- toTime(val) {
399
- if (!val) return null;
400
- if (Array.isArray(val)) {
401
- return val.map(item => item.getTime());
402
- }
403
- return val.getTime();
404
- },
408
+ toTime(val) {
409
+ if (!val) return null;
410
+ if (Array.isArray(val)) {
411
+ return val.map(item => item.getTime());
412
+ }
413
+ return val.getTime();
414
+ },
405
415
 
406
- onScroll(e) {
407
- this.$emit('scroll', e.detail);
408
- },
416
+ onScroll(e) {
417
+ this.$emit('scroll', e.detail);
418
+ },
409
419
 
410
- getCurrentDate() {
411
- let time = Array.isArray(this.base.value) ? this.base.value[0] : this.base.value;
420
+ getCurrentDate() {
421
+ let time = Array.isArray(this.base.value) ? this.base.value[0] : this.base.value;
412
422
 
413
- if (this.currentMonth.length > 0) {
414
- const year = this.currentMonth[0]?.year;
415
- const month = this.currentMonth[0]?.month;
416
- time = new Date(year, month, 1).getTime();
417
- }
423
+ if (this.currentMonth.length > 0) {
424
+ const year = this.currentMonth[0]?.year;
425
+ const month = this.currentMonth[0]?.month;
426
+ time = new Date(year, month, 1).getTime();
427
+ }
418
428
 
419
- return time;
420
- },
429
+ return time;
430
+ },
421
431
 
422
- handleSwitchModeChange(e) {
423
- const { type, disabled } = e.currentTarget.dataset;
424
- if (disabled) return;
432
+ handleSwitchModeChange(e) {
433
+ const { type, disabled } = e.currentTarget.dataset;
434
+ if (disabled) return;
425
435
 
426
- const date = this.getCurrentDate();
436
+ const date = this.getCurrentDate();
427
437
 
428
- const funcMap = {
429
- 'pre-year': () => getPrevYear(date),
430
- 'pre-month': () => getPrevMonth(date),
431
- 'next-month': () => getNextMonth(date),
432
- 'next-year': () => getNextYear(date),
433
- };
434
- const newValue = funcMap[type]();
435
- if (!newValue) return;
438
+ const funcMap = {
439
+ 'pre-year': () => getPrevYear(date),
440
+ 'pre-month': () => getPrevMonth(date),
441
+ 'next-month': () => getNextMonth(date),
442
+ 'next-year': () => getNextYear(date),
443
+ };
444
+ const newValue = funcMap[type]();
445
+ if (!newValue) return;
436
446
 
437
- const { year, month } = this.getCurrentYearAndMonth(newValue);
438
- this.$emit('panel-change', { year, month: month + 1 });
447
+ const { year, month } = this.getCurrentYearAndMonth(newValue);
448
+ this.$emit('panel-change', { year, month: month + 1 });
439
449
 
440
- this.calcCurrentMonth(newValue);
441
- },
450
+ this.calcCurrentMonth(newValue);
451
+ },
442
452
 
443
- onWatchMinMaxDate() {
444
- const { firstDayOfWeek, minDate, maxDate } = this;
445
- firstDayOfWeek && (this.base.firstDayOfWeek = firstDayOfWeek);
446
- minDate && (this.base.minDate = minDate);
447
- maxDate && (this.base.maxDate = maxDate);
448
- this.calcMonths();
449
- },
453
+ onWatchMinMaxDate() {
454
+ const { firstDayOfWeek, minDate, maxDate } = this;
455
+ firstDayOfWeek && (this.base.firstDayOfWeek = firstDayOfWeek);
456
+ minDate && (this.base.minDate = minDate);
457
+ maxDate && (this.base.maxDate = maxDate);
458
+ this.calcMonths();
459
+ },
450
460
 
451
- isShowOverlay(value, defaultValue) {
452
- return tools.isBoolean(value) ? value : defaultValue;
461
+ isShowOverlay(value, defaultValue) {
462
+ return tools.isBoolean(value) ? value : defaultValue;
463
+ },
453
464
  },
454
- },
455
- });
465
+ }),
466
+ };
456
467
  </script>
457
468
  <style scoped src="./calendar.css"></style>
458
469
  <style scoped>