@tdesign/uniapp 0.7.2 → 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 (199) hide show
  1. package/CHANGELOG.md +31 -0
  2. package/README.md +32 -2
  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/README.en-US.md +6 -6
  26. package/dist/checkbox/README.md +5 -5
  27. package/dist/checkbox/checkbox.vue +127 -127
  28. package/dist/checkbox/props.ts +6 -6
  29. package/dist/checkbox/type.ts +6 -4
  30. package/dist/checkbox-group/checkbox-group.vue +175 -173
  31. package/dist/checkbox-group/props.ts +6 -6
  32. package/dist/checkbox-group/type.ts +6 -4
  33. package/dist/col/col.vue +26 -24
  34. package/dist/collapse/collapse.vue +83 -81
  35. package/dist/collapse-panel/collapse-panel.vue +121 -119
  36. package/dist/collapse-panel/props.ts +4 -4
  37. package/dist/collapse-panel/type.ts +2 -2
  38. package/dist/color-picker/README.md +1 -1
  39. package/dist/color-picker/color-picker.vue +324 -322
  40. package/dist/color-picker/props.ts +2 -2
  41. package/dist/color-picker/template.vue +14 -10
  42. package/dist/common/common.ts +1 -0
  43. package/dist/common/style/theme/index.css +57 -61
  44. package/dist/common/utils.js +7 -2
  45. package/dist/common/validator.js +172 -0
  46. package/dist/config-provider/README.en-US.md +184 -0
  47. package/dist/config-provider/README.md +234 -0
  48. package/dist/config-provider/config-provider.vue +105 -0
  49. package/dist/config-provider/config-store.js +70 -0
  50. package/dist/config-provider/props.ts +16 -0
  51. package/dist/config-provider/reactive-state.js +39 -0
  52. package/dist/config-provider/type.ts +401 -0
  53. package/dist/config-provider/use-config.js +29 -0
  54. package/dist/config-provider/utils.js +29 -0
  55. package/dist/count-down/count-down.vue +98 -97
  56. package/dist/date-time-picker/date-time-picker.vue +410 -395
  57. package/dist/demo/demo.vue +1 -0
  58. package/dist/dialog/dialog.vue +176 -173
  59. package/dist/divider/divider.vue +38 -36
  60. package/dist/draggable/draggable.vue +60 -58
  61. package/dist/drawer/README.md +1 -1
  62. package/dist/drawer/drawer.vue +48 -46
  63. package/dist/dropdown-item/dropdown-item.vue +209 -207
  64. package/dist/dropdown-item/props.ts +4 -4
  65. package/dist/dropdown-item/type.ts +3 -3
  66. package/dist/dropdown-menu/dropdown-menu.vue +93 -99
  67. package/dist/empty/empty.vue +43 -42
  68. package/dist/fab/fab.vue +88 -86
  69. package/dist/footer/footer.vue +36 -34
  70. package/dist/form/README.en-US.md +17 -24
  71. package/dist/form/README.md +18 -25
  72. package/dist/form/form.css +1 -166
  73. package/dist/form/form.vue +251 -236
  74. package/dist/form/props.ts +2 -21
  75. package/dist/form/type.ts +7 -70
  76. package/dist/form-item/README.en-US.md +4 -5
  77. package/dist/form-item/README.md +4 -5
  78. package/dist/form-item/form-item.css +69 -96
  79. package/dist/form-item/form-item.vue +315 -336
  80. package/dist/form-item/form-model.ts +125 -173
  81. package/dist/form-item/props.ts +4 -17
  82. package/dist/form-item/type.ts +43 -1
  83. package/dist/grid/grid.vue +53 -51
  84. package/dist/grid-item/grid-item.vue +121 -119
  85. package/dist/guide/README.md +1 -1
  86. package/dist/guide/guide.vue +281 -277
  87. package/dist/icon/README.md +2 -4
  88. package/dist/icon/icon.vue +78 -76
  89. package/dist/image/README.md +1 -1
  90. package/dist/image/image.vue +103 -101
  91. package/dist/image-viewer/image-viewer.vue +160 -158
  92. package/dist/image-viewer/props.ts +2 -2
  93. package/dist/image-viewer/type.ts +1 -1
  94. package/dist/index.js +3 -0
  95. package/dist/indexes/indexes.vue +264 -267
  96. package/dist/indexes-anchor/indexes-anchor.vue +41 -41
  97. package/dist/input/input.vue +192 -192
  98. package/dist/input/props.ts +6 -6
  99. package/dist/input/type.ts +3 -3
  100. package/dist/link/link.vue +73 -71
  101. package/dist/loading/loading.vue +59 -59
  102. package/dist/locale/ar_KW.ts +157 -0
  103. package/dist/locale/en_US.ts +146 -0
  104. package/dist/locale/it_IT.ts +145 -0
  105. package/dist/locale/ja_JP.ts +132 -0
  106. package/dist/locale/ko_KR.ts +132 -0
  107. package/dist/locale/ru_RU.ts +157 -0
  108. package/dist/locale/zh_CN.ts +133 -0
  109. package/dist/locale/zh_TW.ts +132 -0
  110. package/dist/message/message.vue +181 -173
  111. package/dist/message/props.ts +2 -2
  112. package/dist/message/type.ts +1 -1
  113. package/dist/message-item/message-item.vue +192 -184
  114. package/dist/mixins/using-config.js +39 -0
  115. package/dist/navbar/navbar.vue +201 -199
  116. package/dist/notice-bar/notice-bar.vue +175 -171
  117. package/dist/notice-bar/props.ts +2 -2
  118. package/dist/notice-bar/type.ts +1 -1
  119. package/dist/npm/dayjs/esm/locale/ar.js +81 -0
  120. package/dist/npm/dayjs/esm/locale/it.js +39 -0
  121. package/dist/overlay/overlay.vue +50 -48
  122. package/dist/picker/picker.vue +168 -161
  123. package/dist/picker-item/picker-item.vue +269 -269
  124. package/dist/popover/README.md +1 -1
  125. package/dist/popover/popover.vue +262 -261
  126. package/dist/popover/props.ts +4 -4
  127. package/dist/popover/type.ts +2 -2
  128. package/dist/popup/popup.vue +46 -45
  129. package/dist/progress/README.md +1 -1
  130. package/dist/progress/progress.vue +76 -76
  131. package/dist/pull-down-refresh/props.ts +2 -2
  132. package/dist/pull-down-refresh/pull-down-refresh.vue +240 -234
  133. package/dist/pull-down-refresh/type.ts +1 -1
  134. package/dist/qrcode/README.md +1 -1
  135. package/dist/qrcode/components/qrcode-canvas/qrcode-canvas.vue +340 -338
  136. package/dist/qrcode/components/qrcode-status/qrcode-status.vue +6 -6
  137. package/dist/qrcode/qrcode.vue +93 -87
  138. package/dist/radio/props.ts +6 -6
  139. package/dist/radio/radio.vue +118 -120
  140. package/dist/radio/type.ts +3 -3
  141. package/dist/radio-group/props.ts +4 -4
  142. package/dist/radio-group/radio-group.vue +136 -134
  143. package/dist/radio-group/type.ts +4 -4
  144. package/dist/rate/computed.js +2 -2
  145. package/dist/rate/props.ts +4 -4
  146. package/dist/rate/rate.vue +155 -154
  147. package/dist/rate/type.ts +2 -2
  148. package/dist/result/result.vue +41 -39
  149. package/dist/row/row.vue +38 -36
  150. package/dist/scroll-view/scroll-view.vue +24 -22
  151. package/dist/search/props.ts +2 -2
  152. package/dist/search/search.vue +127 -125
  153. package/dist/search/type.ts +1 -1
  154. package/dist/side-bar/side-bar.vue +57 -55
  155. package/dist/side-bar-item/side-bar-item.vue +86 -86
  156. package/dist/skeleton/skeleton.vue +126 -124
  157. package/dist/slider/README.md +1 -1
  158. package/dist/slider/props.ts +2 -2
  159. package/dist/slider/slider.vue +457 -457
  160. package/dist/slider/type.ts +1 -1
  161. package/dist/step-item/step-item.vue +77 -75
  162. package/dist/stepper/props.ts +2 -2
  163. package/dist/stepper/stepper.vue +168 -149
  164. package/dist/stepper/type.ts +1 -1
  165. package/dist/steps/props.ts +2 -2
  166. package/dist/steps/steps.vue +83 -81
  167. package/dist/steps/type.ts +1 -1
  168. package/dist/sticky/sticky.vue +104 -102
  169. package/dist/swipe-cell/swipe-cell.vue +91 -89
  170. package/dist/swiper/README.md +1 -1
  171. package/dist/swiper/swiper.vue +91 -89
  172. package/dist/swiper-nav/swiper-nav.vue +38 -36
  173. package/dist/switch/props.ts +2 -2
  174. package/dist/switch/switch.vue +62 -62
  175. package/dist/switch/type.ts +1 -1
  176. package/dist/tab-bar/tab-bar.vue +88 -86
  177. package/dist/tab-bar-item/tab-bar-item.vue +85 -82
  178. package/dist/tab-panel/tab-panel.vue +66 -64
  179. package/dist/tabs/tabs.vue +294 -287
  180. package/dist/tag/tag.vue +79 -77
  181. package/dist/textarea/props.ts +6 -6
  182. package/dist/textarea/textarea.vue +127 -126
  183. package/dist/textarea/type.ts +3 -3
  184. package/dist/toast/toast.vue +107 -106
  185. package/dist/transition/transition.vue +30 -28
  186. package/dist/tree-select/tree-select.vue +151 -151
  187. package/dist/types/config-provider.d.ts +7 -0
  188. package/dist/types/index.d.ts +2 -0
  189. package/dist/types/popover.d.ts +7 -0
  190. package/dist/upload/README.en-US.md +13 -14
  191. package/dist/upload/README.md +11 -12
  192. package/dist/upload/props.ts +2 -4
  193. package/dist/upload/type.ts +12 -11
  194. package/dist/upload/upload.css +1 -1
  195. package/dist/upload/upload.vue +672 -512
  196. package/dist/watermark/watermark.vue +151 -149
  197. package/global.d.ts +2 -0
  198. package/package.json +16 -2
  199. package/dist/form/form-item-props.ts +0 -56
@@ -5,7 +5,7 @@
5
5
  :id="id || classPrefix"
6
6
  :ref="id || classPrefix"
7
7
  :class="classPrefix + ' ' + tClass + ' ' + classPrefix + '--' + theme + ' ' + fadeClass"
8
- :style="tools._style([getMessageStyles(zIndex, offset, wrapTop), customStyle])"
8
+ :style="'' + tools._style([getMessageStyles(zIndex, offset, wrapTop), customStyle])"
9
9
  :animation="showAnimation"
10
10
  aria-role="alert"
11
11
  >
@@ -125,227 +125,235 @@ const rawData = {
125
125
  }),
126
126
  };
127
127
 
128
- export default uniComponent({
129
- name,
130
- options: {
131
- styleIsolation: 'shared',
132
- },
133
- externalClasses: [
134
- `${prefix}-class`,
135
- `${prefix}-class-content`,
136
- `${prefix}-class-icon`,
137
- `${prefix}-class-link`,
138
- `${prefix}-class-close-btn`,
139
- ],
128
+ export default {
140
129
  components: {
141
130
  TIcon,
142
131
  TLink,
143
132
  },
144
- props: {
145
- },
146
- emits: [
147
- 'duration-end',
148
- 'close-btn-click',
149
- 'link-click',
150
- ],
151
- data() {
152
- return {
153
- ...rawData,
154
- ...messageDefaultData,
155
- animation: [],
133
+ ...uniComponent({
134
+ name,
135
+ options: {
136
+ styleIsolation: 'shared',
137
+ },
138
+ externalClasses: [
139
+ `${prefix}-class`,
140
+ `${prefix}-class-content`,
141
+ `${prefix}-class-icon`,
142
+ `${prefix}-class-link`,
143
+ `${prefix}-class-close-btn`,
144
+ ],
145
+ props: {
146
+ },
147
+ emits: [
148
+ 'duration-end',
149
+ 'close-btn-click',
150
+ 'link-click',
151
+ ],
152
+ data() {
153
+ return {
154
+ ...rawData,
155
+ ...messageDefaultData,
156
+ animation: [],
156
157
 
157
- tools,
158
- };
159
- },
160
- computed: {
161
- innerMarquee() {
162
- const { marquee } = this;
163
- if (JSON.stringify(marquee) === '{}' || JSON.stringify(marquee) === 'true') {
164
- return {
165
- speed: 50,
166
- loop: -1,
167
- delay: 0,
168
- };
169
- }
170
- return this.marquee;
158
+ tools,
159
+ innerIcon: null,
160
+ innerLink: null,
161
+ iCloseBtn: null,
162
+ id: '',
163
+ height: 48,
164
+ onHide: null,
165
+ };
171
166
  },
172
- },
173
- watch: {
174
- theme: {
175
- handler(theme) {
176
- this.innerIcon = calcIcon(this.icon, THEME_ICON[theme]);
167
+ computed: {
168
+ innerMarquee() {
169
+ const { marquee } = this;
170
+ if (marquee && (JSON.stringify(marquee) === '{}' || JSON.stringify(marquee) === 'true')) {
171
+ return {
172
+ speed: 50,
173
+ loop: -1,
174
+ delay: 0,
175
+ };
176
+ }
177
+ return this.marquee;
177
178
  },
178
- immediate: true,
179
179
  },
180
- icon: {
181
- handler(icon) {
182
- this.innerIcon = calcIcon(icon, THEME_ICON[this.theme]);
180
+ watch: {
181
+ theme: {
182
+ handler(theme) {
183
+ this.innerIcon = calcIcon(this.icon, THEME_ICON[theme]);
184
+ },
185
+ immediate: true,
186
+ },
187
+ icon: {
188
+ handler(icon) {
189
+ this.innerIcon = calcIcon(icon, THEME_ICON[this.theme]);
190
+ },
191
+ immediate: true,
183
192
  },
184
- immediate: true,
185
- },
186
193
 
187
194
 
188
- link: {
189
- handler(v) {
190
- const innerLink = isObject(v) ? { ...v } : { content: v };
191
- this.innerLink = innerLink;
195
+ link: {
196
+ handler(v) {
197
+ const innerLink = isObject(v) ? { ...v } : { content: v };
198
+ this.innerLink = innerLink;
199
+ },
200
+ immediate: true,
192
201
  },
193
- immediate: true,
194
- },
195
202
 
196
- closeBtn: {
197
- handler(v) {
198
- this.iCloseBtn = calcIcon(v, 'close');
203
+ closeBtn: {
204
+ handler(v) {
205
+ this.iCloseBtn = calcIcon(v, 'close');
206
+ },
207
+ immediate: true,
199
208
  },
200
- immediate: true,
201
209
  },
202
- },
203
- mounted() {
204
- this.memoInitialData();
205
- },
206
- beforeUnmount() {
207
- this.clearMessageAnimation();
208
- },
209
- methods: {
210
- getMessageStyles,
211
- /** 记录组件设置的项目 */
212
- memoInitialData() {
213
- this.initialData = {
214
- ...rawData,
215
- ...messageDefaultData,
216
- animation: [],
217
- };
210
+ mounted() {
211
+ this.memoInitialData();
218
212
  },
219
-
220
- resetData(cb) {
221
- const { initialData = {} } = this;
222
- Object.keys(initialData).forEach((key) => {
223
- this[key] = initialData[key];
224
- });
225
- setTimeout(cb);
213
+ beforeUnmount() {
214
+ this.clearMessageAnimation();
226
215
  },
216
+ methods: {
217
+ getMessageStyles,
218
+ /** 记录组件设置的项目 */
219
+ memoInitialData() {
220
+ this.initialData = {
221
+ ...rawData,
222
+ ...messageDefaultData,
223
+ animation: [],
224
+ };
225
+ },
227
226
 
228
- /** 检查是否需要开启一个新的动画循环 */
229
- checkAnimation() {
230
- const { innerMarquee } = this;
231
- if (!innerMarquee || innerMarquee.loop === 0) {
232
- return;
233
- }
227
+ resetData(cb) {
228
+ const { initialData = {} } = this;
229
+ Object.keys(initialData).forEach((key) => {
230
+ this[key] = initialData[key];
231
+ });
232
+ setTimeout(cb);
233
+ },
234
234
 
235
- const speeding = innerMarquee.speed;
235
+ /** 检查是否需要开启一个新的动画循环 */
236
+ checkAnimation() {
237
+ const { innerMarquee } = this;
238
+ if (!innerMarquee || innerMarquee.loop === 0) {
239
+ return;
240
+ }
236
241
 
237
- if (this.loop > 0) {
238
- this.loop -= 1;
239
- } else if (this.loop === 0) {
240
- // 动画回到初始位置
241
- this.animation = this.resetAnimation
242
- .translateX(0)
243
- .step()
244
- .export();
245
- return;
246
- }
242
+ const speeding = innerMarquee.speed;
247
243
 
248
- if (this.nextAnimationContext) {
249
- this.clearMessageAnimation();
250
- }
244
+ if (this.loop > 0) {
245
+ this.loop -= 1;
246
+ } else if (this.loop === 0) {
247
+ // 动画回到初始位置
248
+ this.animation = this.resetAnimation
249
+ .translateX(0)
250
+ .step()
251
+ .export();
252
+ return;
253
+ }
251
254
 
252
- const warpID = `#${name}__text-wrap`;
253
- const nodeID = `#${name}__text`;
254
- Promise.all([getRect(this, nodeID), getRect(this, warpID)]).then(([nodeRect, wrapRect]) => {
255
- this.animation = this.resetAnimation.translateX(wrapRect.width).step()
256
- .export();
255
+ if (this.nextAnimationContext) {
256
+ this.clearMessageAnimation();
257
+ }
257
258
 
258
- setTimeout(() => {
259
- const durationTime = ((nodeRect.width + wrapRect.width) / speeding) * 1000;
260
- const nextAnimation = uni
261
- .createAnimation({
262
- // 默认50px/s
263
- duration: durationTime,
264
- })
265
- .translateX(-nodeRect.width)
266
- .step()
259
+ const warpID = `#${name}__text-wrap`;
260
+ const nodeID = `#${name}__text`;
261
+ Promise.all([getRect(this, nodeID), getRect(this, warpID)]).then(([nodeRect, wrapRect]) => {
262
+ this.animation = this.resetAnimation.translateX(wrapRect.width).step()
267
263
  .export();
268
264
 
269
- // 这里就只能用 setTimeout/20, nextTick 没用
270
- // 不用这个的话会出现reset动画没跑完就开始跑这个等的奇怪问题
271
265
  setTimeout(() => {
272
- this.nextAnimationContext = setTimeout(this.checkAnimation.bind(this), durationTime);
273
- this.animation = nextAnimation;
274
- }, 20);
266
+ const durationTime = ((nodeRect.width + wrapRect.width) / speeding) * 1000;
267
+ const nextAnimation = uni
268
+ .createAnimation({
269
+ // 默认50px/s
270
+ duration: durationTime,
271
+ })
272
+ .translateX(-nodeRect.width)
273
+ .step()
274
+ .export();
275
+
276
+ // 这里就只能用 setTimeout/20, nextTick 没用
277
+ // 不用这个的话会出现reset动画没跑完就开始跑这个等的奇怪问题
278
+ setTimeout(() => {
279
+ this.nextAnimationContext = setTimeout(this.checkAnimation.bind(this), durationTime);
280
+ this.animation = nextAnimation;
281
+ }, 20);
282
+ });
275
283
  });
276
- });
277
- },
284
+ },
278
285
 
279
- /** 清理动画循环 */
280
- clearMessageAnimation() {
281
- clearTimeout(this.nextAnimationContext);
282
- this.nextAnimationContext = 0;
283
- },
286
+ /** 清理动画循环 */
287
+ clearMessageAnimation() {
288
+ clearTimeout(this.nextAnimationContext);
289
+ this.nextAnimationContext = 0;
290
+ },
284
291
 
285
- show(offsetHeight = 0) {
286
- const { duration, innerMarquee, offset, id } = this;
287
- this.visible = true;
288
- this.loop = innerMarquee.loop || this.loop;
289
- this.fadeClass = `${name}__fade`;
290
- this.wrapTop = unitConvert(offset[0]) + offsetHeight;
292
+ show(offsetHeight = 0) {
293
+ const { duration, innerMarquee, offset, id } = this;
294
+ this.visible = true;
295
+ this.loop = innerMarquee.loop || this.loop;
296
+ this.fadeClass = `${name}__fade`;
297
+ this.wrapTop = unitConvert(offset[0]) + offsetHeight;
291
298
 
292
- this.reset();
293
- setTimeout(() => {
294
- this.checkAnimation();
295
- });
299
+ this.reset();
300
+ setTimeout(() => {
301
+ this.checkAnimation();
302
+ });
296
303
 
297
- if (duration && duration > 0) {
298
- this.closeTimeoutContext = setTimeout(() => {
299
- this.hide();
300
- this.$emit('duration-end', { self: this });
301
- }, duration);
302
- }
303
- const wrapID = id ? `#${id}` : `#${name}`;
304
+ if (duration && duration > 0) {
305
+ this.closeTimeoutContext = setTimeout(() => {
306
+ this.hide();
307
+ this.$emit('duration-end', { self: this });
308
+ }, duration);
309
+ }
310
+ const wrapID = id ? `#${id}` : `#${name}`;
304
311
 
305
- setTimeout(() => {
306
- getRect(this, wrapID)
307
- .then((wrapRect) => {
308
- this.height = wrapRect.height;
309
- setTimeout(() => {
310
- this.fadeClass = '';
312
+ setTimeout(() => {
313
+ getRect(this, wrapID)
314
+ .then((wrapRect) => {
315
+ this.height = wrapRect.height;
316
+ setTimeout(() => {
317
+ this.fadeClass = '';
318
+ });
319
+ })
320
+ .catch(() => {
311
321
  });
312
- })
313
- .catch(() => {
314
- });
315
- });
316
- },
322
+ });
323
+ },
317
324
 
318
- hide() {
319
- this.reset();
320
- this.fadeClass = `${name}__fade`;
325
+ hide() {
326
+ this.reset();
327
+ this.fadeClass = `${name}__fade`;
321
328
 
322
- setTimeout(() => {
323
- this.visible = false;
324
- this.animation = [];
325
- }, SHOW_DURATION);
326
- if (typeof this.onHide === 'function') {
327
- this.onHide();
328
- }
329
- },
329
+ setTimeout(() => {
330
+ this.visible = false;
331
+ this.animation = [];
332
+ }, SHOW_DURATION);
333
+ if (typeof this.onHide === 'function') {
334
+ this.onHide();
335
+ }
336
+ },
330
337
 
331
- // 重置定时器
332
- reset() {
333
- if (this.nextAnimationContext) {
334
- this.clearMessageAnimation();
335
- }
336
- clearTimeout(this.closeTimeoutContext);
337
- this.closeTimeoutContext = 0;
338
- },
338
+ // 重置定时器
339
+ reset() {
340
+ if (this.nextAnimationContext) {
341
+ this.clearMessageAnimation();
342
+ }
343
+ clearTimeout(this.closeTimeoutContext);
344
+ this.closeTimeoutContext = 0;
345
+ },
339
346
 
340
- handleClose() {
341
- this.hide();
342
- this.$emit('close-btn-click');
343
- },
347
+ handleClose() {
348
+ this.hide();
349
+ this.$emit('close-btn-click');
350
+ },
344
351
 
345
- handleLinkClick() {
346
- this.$emit('link-click');
352
+ handleLinkClick() {
353
+ this.$emit('link-click');
354
+ },
347
355
  },
348
- },
349
- });
356
+ }),
357
+ };
350
358
  </script>
351
359
  <style scoped src="./message-item.css"></style>
@@ -0,0 +1,39 @@
1
+ /**
2
+ * 提供子组件从 config-provider 获取全局配置的能力
3
+ */
4
+ import { getComponentLocale, useConfig } from '../config-provider/use-config';
5
+ import { toCamel } from '../common/utils';
6
+ import defaultLocale from '../locale/zh_CN';
7
+
8
+ export default function usingConfig(options) {
9
+ const { componentName, localeTextPropName } = options;
10
+ const innerComponentName = toCamel(componentName);
11
+
12
+ return {
13
+ data() {
14
+ return {
15
+ globalConfig: {},
16
+ };
17
+ },
18
+ created() {
19
+ this.updateLocale();
20
+ const configHook = useConfig(innerComponentName);
21
+ this.iUnsubscribeLocale = configHook.subscribeLocale(this, () => {
22
+ this.updateLocale();
23
+ });
24
+ },
25
+ beforeDestroy() {
26
+ if (this.iUnsubscribeLocale) {
27
+ this.iUnsubscribeLocale();
28
+ this.iUnsubscribeLocale = null;
29
+ }
30
+ },
31
+ methods: {
32
+ updateLocale() {
33
+ const componentDefaultLocale = defaultLocale[innerComponentName] || {};
34
+ const globalConfig = getComponentLocale(this, innerComponentName, componentDefaultLocale, localeTextPropName);
35
+ this.globalConfig = globalConfig;
36
+ },
37
+ },
38
+ };
39
+ }