@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
package/CHANGELOG.md CHANGED
@@ -5,6 +5,37 @@ toc: false
5
5
  docClass: timeline
6
6
  ---
7
7
 
8
+ ## 🌈 0.8.0 `2026-03-23`
9
+
10
+ ### 🚨 Breaking Changes
11
+
12
+ - `DateTimePicker`: 废弃 `custom-locale` 属性,请用 `ConfigProvider` 替换该功能 @novlan1 ([#4350](https://github.com/Tencent/tdesign-miniprogram/pull/4350))
13
+
14
+ ### 🚀 Features
15
+
16
+ - `Cascader`: 新增 `PopupProps` 属性,透传至 `Popup` @novlan1 ([#4320](https://github.com/Tencent/tdesign-miniprogram/pull/4320))
17
+ - `ConfigProvider`: 新增 `ConfigProvider` 全局特性配置组件 @novlan1 ([#4350](https://github.com/Tencent/tdesign-miniprogram/pull/4350))
18
+ - `Picker`: 支持 `v-model:value` 语法糖 @novlan1 ([#4320](https://github.com/Tencent/tdesign-miniprogram/pull/4320))
19
+
20
+ ### 🐞 Bug Fixes
21
+
22
+ - `ColorPicker`: 修复弹窗模式下预设颜色(swatch-colors)无法横向滚动 @novlan1 ([#4350](https://github.com/Tencent/tdesign-miniprogram/pull/4350))
23
+ - `DateTimePicker`: 修复 `format` 含非日期 `token`(如 `ddd`)时,格式化后的值回传导致 `Invalid Date` 的问题 @novlan1 ([#4320](https://github.com/Tencent/tdesign-miniprogram/pull/4320))
24
+ - `Form`: 修复 `required-mark` 无效问题 @novlan1 ([#4350](https://github.com/Tencent/tdesign-miniprogram/pull/4350))
25
+ - `Tabs`: 修复开启 `animation` 和 `lazy` 时,跳跃切换选项卡内容区域显示异常的问题 @novlan1 ([#4350](https://github.com/Tencent/tdesign-miniprogram/pull/4350))
26
+ - `Toast`: 修复 `setup` 语法下,函数式调用时找不到实例的问题 @novlan1 ([#4312](https://github.com/Tencent/tdesign-miniprogram/pull/4312))
27
+ - `Upload`:
28
+ - 修复 `@upload-disabled-mask` 变量默认值错误 @anlyyao ([#4303](https://github.com/Tencent/tdesign-miniprogram/pull/4303))
29
+ - 修复 H5 环境下回调中 URL 错误问题 @novlan1 ([#4320](https://github.com/Tencent/tdesign-miniprogram/pull/4320))
30
+
31
+ ## 🌈 0.7.3 `2026-03-04`
32
+
33
+ ### 🐞 Bug Fixes
34
+
35
+ - `Button`: 去除多余动画效果 @novlan1 ([#4305](https://github.com/Tencent/tdesign-miniprogram/pull/4305))
36
+ - `Dialog`: 修复确认/取消按钮不显示问题 @novlan1 ([#4305](https://github.com/Tencent/tdesign-miniprogram/pull/4305))
37
+ - `Theme`: 修复 `index.css` 尺寸值错误的问题 @liweijie0812 ([#4290](https://github.com/Tencent/tdesign-miniprogram/pull/4290))
38
+
8
39
  ## 🌈 0.7.2 `2026-02-26`
9
40
 
10
41
  ### 🚀 Features
package/README.md CHANGED
@@ -54,13 +54,21 @@ npm i @tdesign/uniapp
54
54
  1. 在 `main.ts` 中引入样式文件
55
55
 
56
56
  ```js
57
+ // CLI 模式
57
58
  import '@tdesign/uniapp/common/style/theme/index.css';
59
+
60
+ // HBuilderX 模式
61
+ // import './uni_modules/tdesign-uniapp/components/common/style/theme/index.css';
58
62
  ```
59
63
 
60
64
  也可以引入 `rpx` 单位的 `less` 文件,该文件与 `tdesign-miniprogram` 完全一致。
61
65
 
62
66
  ```js
67
+ // CLI 模式
63
68
  import '@tdesign/uniapp/common/style/theme/index.less';
69
+
70
+ // HBuilderX 模式
71
+ // import './uni_modules/tdesign-uniapp/components/common/style/theme/index.less';
64
72
  ```
65
73
 
66
74
  2. 在文件中使用
@@ -113,7 +121,17 @@ import TLoading from '@tdesign/uniapp/loading/loading.vue';
113
121
 
114
122
  安装注册 TDesign 之后,在开发项目时,可以配合插件在VSCode等主流编辑器中达到提示组件名及API的效果。
115
123
 
116
- 推荐安装 `Volar`,并在项目的 `tsconfig.json` 的 `includes` 属性中增加 `node_modules/@tdesign/uniapp/global.d.ts`,即可实现该效果。
124
+ 推荐安装 [Vue (Official)](https://marketplace.visualstudio.com/items?itemName=Vue.volar) 插件,并在项目的 `tsconfig.json` 的 `compilerOptions.types` 属性中增加 `@tdesign/uniapp/global`,即可实现提示效果。
125
+
126
+ ```json
127
+ {
128
+ "compilerOptions": {
129
+ "types": [
130
+ "@tdesign/uniapp/global",
131
+ ]
132
+ }
133
+ }
134
+ ```
117
135
 
118
136
  ## 平台兼容性
119
137
 
@@ -127,12 +145,24 @@ import TLoading from '@tdesign/uniapp/loading/loading.vue';
127
145
 
128
146
  ## 浏览器兼容性
129
147
 
130
- | [<img src="https://raw.githubusercontent.com/alrra/browser-logos/master/src/firefox/firefox_48x48.png" alt="Firefox" width="24px" height="24px" />](http://godban.github.io/browsers-support-badges/)<br/>Firefox | [<img src="https://raw.githubusercontent.com/alrra/browser-logos/master/src/chrome/chrome_48x48.png" alt="Chrome" width="24px" height="24px" />](http://godban.github.io/browsers-support-badges/)<br/>Chrome | [<img src="https://raw.githubusercontent.com/alrra/browser-logos/master/src/safari-ios/safari-ios_48x48.png" alt="iOS Safari" width="24px" height="24px" />](http://godban.github.io/browsers-support-badges/)<br/> iOS Safari| [<img src="https://raw.githubusercontent.com/alrra/browser-logos/master/src/samsung-internet/samsung-internet_48x48.png" alt="Samsung" width="24px" height="24px" />](http://godban.github.io/browsers-support-badges/)<br/>Samsung | [<img src="https://raw.githubusercontent.com/alrra/browser-logos/master/src/opera/opera_48x48.png" alt="Opera" width="24px" height="24px" />](http://godban.github.io/browsers-support-badges/)<br/>Opera |[<img src="https://user-images.githubusercontent.com/51158141/189169679-71e045f6-9b9b-4baf-8b9f-e045a40216f5.png" alt="Android Browser" width="24px" height="24px" />]()<br/>Android Browser|
148
+ | [<img src="https://raw.githubusercontent.com/alrra/browser-logos/master/src/firefox/firefox_48x48.png" alt="Firefox" width="24px" height="24px" />](http://godban.github.io/browsers-support-badges/)<br/>Firefox | [<img src="https://raw.githubusercontent.com/alrra/browser-logos/master/src/chrome/chrome_48x48.png" alt="Chrome" width="24px" height="24px" />](http://godban.github.io/browsers-support-badges/)<br/>Chrome | [<img src="https://raw.githubusercontent.com/alrra/browser-logos/master/src/safari-ios/safari-ios_48x48.png" alt="iOS Safari" width="24px" height="24px" />](http://godban.github.io/browsers-support-badges/)<br/> iOS Safari| [<img src="https://raw.githubusercontent.com/alrra/browser-logos/master/src/samsung-internet/samsung-internet_48x48.png" alt="Samsung" width="24px" height="24px" />](http://godban.github.io/browsers-support-badges/)<br/>Samsung | [<img src="https://raw.githubusercontent.com/alrra/browser-logos/master/src/opera/opera_48x48.png" alt="Opera" width="24px" height="24px" />](http://godban.github.io/browsers-support-badges/)<br/>Opera |<img src="https://user-images.githubusercontent.com/51158141/189169679-71e045f6-9b9b-4baf-8b9f-e045a40216f5.png" alt="Android Browser" width="24px" height="24px" /><br/>Android Browser|
131
149
  | --------- | --------- | --------- | --------- | --------- |--------- |
132
150
  | Firefox >=104| Chrome >=105| iOS Safari >=12.2| Samsung >=10.2 | Opera >=64 | Android Browser >=105 |
133
151
 
134
152
  详情参见[移动端组件库浏览器兼容性说明](https://github.com/Tencent/tdesign/wiki/Browser-Compatibility)
135
153
 
154
+ ## 模板项目
155
+
156
+ 我们提供了多种开箱即用的模板项目,帮助你快速开始开发。
157
+
158
+ | 模板 | 描述 | 预览 |
159
+ | --- | --- | --- |
160
+ | [TDesign UniApp Starter](https://github.com/TDesignOteam/tdesign-uniapp-starter/) | Vue3 + CLI 模式模板 - 通用类 | <img src="https://cdn.uwayfly.com/tdesign-uniapp/image/tdesign-uniapp-starter-h5.png" height="100" /> |
161
+ | [TDesign UniApp Starter Apply](https://github.com/TDesignOteam/tdesign-uniapp-starter-apply/) | Vue3 + CLI 模式模板 - 活动报名 | <img src="https://cdn.uwayfly.com/tdesign-uniapp/image/tdesign-uniapp-starter-apply-h5.png" height="100" /> |
162
+ | [TDesign UniApp Starter Vue3 HX](https://github.com/TDesignOteam/tdesign-uniapp-starter-vue3-hx/) | Vue3 + HBuilderX 模式模板 | <img src="https://cdn.uwayfly.com/tdesign-uniapp/image/tdesign-uniapp-starter-vue3-hx-h5.png" height="100" /> |
163
+ | [TDesign UniApp Starter Vue2 CLI](https://github.com/TDesignOteam/tdesign-uniapp-starter-vue2-cli/) | Vue2 + CLI 模式模板 | <img src="https://cdn.uwayfly.com/tdesign-uniapp/image/tdesign-uniapp-starter-vue2-cli-h5.png" height="100" /> |
164
+ | [TDesign UniApp Starter Vue2 HX](https://github.com/TDesignOteam/tdesign-uniapp-starter-vue2-hx/) | Vue2 + HBuilderX 模式模板 |<img src="https://cdn.uwayfly.com/tdesign-uniapp/image/tdesign-uniapp-starter-vue2-hx-h5.png" height="100" /> |
165
+
136
166
  ## 反馈
137
167
 
138
168
  有任何问题,建议通过 [Github issues](https://github.com/Tencent/tdesign-miniprogram/issues) 反馈或扫码加入用户微信群。
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  title: ActionSheet 动作面板
3
3
  description: 由用户操作后触发的一种特定的模态弹出框 ,呈现一组与当前情境相关的两个或多个选项。
4
- spline: data
4
+ spline: message
5
5
  isComponent: true
6
6
  ---
7
7
 
@@ -1,8 +1,8 @@
1
1
  <template>
2
2
  <view
3
3
  :id="classPrefix"
4
- :style="tools._style([rootCustomStyle])"
5
- :class="tools.cls(classPrefix, [dataAlign, dataTheme, ['no-description', !description]]) + ' ' + tClass"
4
+ :style="'' + tools._style([rootCustomStyle])"
5
+ :class="'' + tools.cls(classPrefix, [dataAlign, dataTheme, ['no-description', !description]]) + ' ' + tClass"
6
6
  >
7
7
  <t-popup
8
8
  :visible="dataVisible"
@@ -44,7 +44,7 @@
44
44
  :description="item.description || ''"
45
45
  :image="item.image || ''"
46
46
  :style="'--td-grid-item-text-color: ' + item.color"
47
- @click="onSelect($event, { index })"
47
+ @click="(e) => onSelect(e, { index })"
48
48
  />
49
49
  </t-grid>
50
50
  </block>
@@ -78,7 +78,7 @@
78
78
  :description="item.description || ''"
79
79
  :image="item.image || ''"
80
80
  :style="'--td-grid-item-text-color: ' + item.color"
81
- @click="onSelect($event, { index })"
81
+ @click="(e) => onSelect(e, { index })"
82
82
  />
83
83
  </t-grid>
84
84
  </swiper-item>
@@ -107,7 +107,7 @@
107
107
  <view
108
108
  :data-index="index"
109
109
  :style="item.color ? 'color: ' + item.color : ''"
110
- :class="tools.cls(classPrefix + '__list-item', [['disabled', item.disabled]])"
110
+ :class="'' + tools.cls(classPrefix + '__list-item', [['disabled', item.disabled]])"
111
111
  :aria-role="ariaRole || 'button'"
112
112
  :aria-label="item.label || item"
113
113
  tabindex="0"
@@ -166,7 +166,7 @@
166
166
  aria-role="button"
167
167
  @click="onCancel"
168
168
  >
169
- {{ dataCancelText || '取消' }}
169
+ {{ dataCancelText || globalConfig.cancel }}
170
170
  </view>
171
171
  </view>
172
172
  </t-popup>
@@ -185,181 +185,189 @@ import props from './props';
185
185
  import useCustomNavbar from '../mixins/using-custom-navbar';
186
186
  import tools from '../common/utils.wxs';
187
187
  import { getFunctionalMixin } from '../common/functional/mixin';
188
+ import usingConfig from '../mixins/using-config';
188
189
  import { getIconData } from './computed';
189
190
 
190
- const name = `${prefix}-action-sheet`;
191
+ const componentName = 'action-sheet';
192
+ const name = `${prefix}-${componentName}`;
191
193
 
192
194
 
193
- export default uniComponent({
194
- name,
195
- options: {
196
- styleIsolation: 'shared',
197
- },
198
- controlledProps: [{
199
- key: 'visible',
200
- event: 'visible-change',
201
- }],
202
- externalClasses: [
203
- `${prefix}-class`,
204
- `${prefix}-class-content`,
205
- `${prefix}-class-cancel`,
206
- ],
207
- mixins: [getFunctionalMixin(props), useCustomNavbar],
195
+ export default {
208
196
  components: {
209
197
  TIcon,
210
198
  TPopup,
211
199
  TGrid,
212
200
  TGridItem,
213
201
  },
214
- props: {
215
- ...props,
216
- },
217
- emits: [
218
- 'visible-change',
219
- 'update:visible',
220
- ],
221
- data() {
222
- return {
223
- prefix,
224
- classPrefix: name,
225
- gridThemeItems: [],
226
- currentSwiperIndex: 0,
227
- defaultOverlayProps: {},
228
- defaultPopUpzIndex: 11500,
229
- tools,
230
-
231
- heightStyle: 'height: 456rpx;',
232
- };
233
- },
234
- computed: {
235
- rootCustomStyle() {
236
- return tools._style([
237
- this.customStyle,
238
- this.dataTheme === 'grid' ? 'padding-bottom: 16rpx' : '',
239
- ]);
240
- },
241
- iconCustomStyle() {
242
- return 'margin-right: 8px;';
202
+ ...uniComponent({
203
+ name,
204
+ options: {
205
+ styleIsolation: 'shared',
243
206
  },
244
- suffixIconCustomStyle() {
245
- return 'margin-right: 8px;margin-left: auto;';
207
+ controlledProps: [{
208
+ key: 'visible',
209
+ event: 'visible-change',
210
+ }],
211
+ externalClasses: [
212
+ `${prefix}-class`,
213
+ `${prefix}-class-content`,
214
+ `${prefix}-class-cancel`,
215
+ ],
216
+ mixins: [
217
+ getFunctionalMixin(props),
218
+ useCustomNavbar,
219
+ usingConfig({ componentName }),
220
+ ],
221
+ props: {
222
+ ...props,
246
223
  },
247
- gridStyle() {
248
- return `${this.heightStyle}padding-bottom: 48rpx;`;
224
+ emits: [
225
+ 'visible-change',
226
+ 'update:visible',
227
+ ],
228
+ data() {
229
+ return {
230
+ prefix,
231
+ classPrefix: name,
232
+ gridThemeItems: [],
233
+ currentSwiperIndex: 0,
234
+ defaultOverlayProps: {},
235
+ defaultPopUpzIndex: 11500,
236
+ tools,
237
+
238
+ heightStyle: 'height: 456rpx;',
239
+ };
249
240
  },
250
- },
251
- watch: {
252
- dataVisible: {
253
- handler(e) {
254
- if (e) {
255
- this.init();
256
- }
241
+ computed: {
242
+ rootCustomStyle() {
243
+ return tools._style([
244
+ this.customStyle,
245
+ this.dataTheme === 'grid' ? 'padding-bottom: 16rpx' : '',
246
+ ]);
257
247
  },
258
- immediate: true,
259
- },
260
- dataItems: {
261
- handler() {
262
- if (this.dataVisible) {
263
- this.init();
264
- }
248
+ iconCustomStyle() {
249
+ return 'margin-right: 8px;';
250
+ },
251
+ suffixIconCustomStyle() {
252
+ return 'margin-right: 8px;margin-left: auto;';
253
+ },
254
+ gridStyle() {
255
+ return `${this.heightStyle}padding-bottom: 48rpx;`;
265
256
  },
266
- immediate: true,
267
257
  },
268
- },
269
- methods: {
270
- init() {
271
- this.memoInitialData();
272
- this.splitGridThemeActions();
258
+ watch: {
259
+ dataVisible: {
260
+ handler(e) {
261
+ if (e) {
262
+ this.init();
263
+ }
264
+ },
265
+ immediate: true,
266
+ },
267
+ dataItems: {
268
+ handler() {
269
+ if (this.dataVisible) {
270
+ this.init();
271
+ }
272
+ },
273
+ immediate: true,
274
+ },
273
275
  },
276
+ methods: {
277
+ init() {
278
+ this.memoInitialData();
279
+ this.splitGridThemeActions();
280
+ },
274
281
 
275
- getIconData,
282
+ getIconData,
276
283
 
277
- memoInitialData() {
278
- this.initialData = {
279
- };
280
- },
281
-
282
- splitGridThemeActions() {
283
- if (this.dataTheme !== actionSheetTheme.Grid) return;
284
- this.gridThemeItems = chunk(this.dataItems, this.dataCount);
285
- },
284
+ memoInitialData() {
285
+ this.initialData = {
286
+ };
287
+ },
286
288
 
287
- /** 指令调用显示 */
288
- show(options) {
289
- const defaultOptions = [
290
- 'align',
291
- 'cancelText',
292
- 'count',
293
- 'description',
294
- 'items',
295
- 'popupProps',
296
- 'showCancel',
297
- 'showOverlay',
298
- 'theme',
299
- 'usingCustomNavbar',
300
- ].reduce((acc, key) => ({
301
- ...acc,
302
- [key]: props[key].default,
303
- }));
289
+ splitGridThemeActions() {
290
+ if (this.dataTheme !== actionSheetTheme.Grid) return;
291
+ this.gridThemeItems = chunk(this.dataItems, this.dataCount);
292
+ },
304
293
 
305
- this.setData({
306
- ...defaultOptions,
307
- ...options,
308
- visible: true,
309
- });
310
- this.splitGridThemeActions();
311
- this.autoClose = true;
312
- this._trigger('visible-change', { visible: true });
313
- },
294
+ /** 指令调用显示 */
295
+ show(options) {
296
+ const defaultOptions = [
297
+ 'align',
298
+ 'cancelText',
299
+ 'count',
300
+ 'description',
301
+ 'items',
302
+ 'popupProps',
303
+ 'showCancel',
304
+ 'showOverlay',
305
+ 'theme',
306
+ 'usingCustomNavbar',
307
+ ].reduce((acc, key) => ({
308
+ ...acc,
309
+ [key]: props[key].default,
310
+ }));
314
311
 
315
- /** 指令调用隐藏 */
316
- close() {
317
- this.$emit('close', { trigger: 'command' });
318
- this._trigger('visible-change', { visible: false });
319
- },
312
+ this.setData({
313
+ ...defaultOptions,
314
+ ...options,
315
+ visible: true,
316
+ });
317
+ this.splitGridThemeActions();
318
+ this.autoClose = true;
319
+ this._trigger('visible-change', { visible: true });
320
+ },
320
321
 
321
- /** 默认点击遮罩关闭 */
322
- onPopupVisibleChange(detail) {
323
- if (!detail.visible) {
324
- this.$emit('close', { trigger: 'overlay' });
322
+ /** 指令调用隐藏 */
323
+ close() {
324
+ this.$emit('close', { trigger: 'command' });
325
325
  this._trigger('visible-change', { visible: false });
326
- }
327
- if (this.autoClose) {
328
- this.dataVisible = false;
329
- this.autoClose = false;
330
- }
331
- },
326
+ },
332
327
 
333
- onSwiperChange(e) {
334
- const { current } = e.detail;
335
- this.currentSwiperIndex = current;
336
- },
328
+ /** 默认点击遮罩关闭 */
329
+ onPopupVisibleChange(detail) {
330
+ if (!detail.visible) {
331
+ this.$emit('close', { trigger: 'overlay' });
332
+ this._trigger('visible-change', { visible: false });
333
+ }
334
+ if (this.autoClose) {
335
+ this.dataVisible = false;
336
+ this.autoClose = false;
337
+ }
338
+ },
337
339
 
338
- onSelect(event, { index }) {
339
- const { currentSwiperIndex, dataItems, gridThemeItems, dataCount, dataTheme } = this;
340
- const isSwiperMode = dataTheme === actionSheetTheme.Grid;
341
- const item = isSwiperMode ? gridThemeItems[currentSwiperIndex][index] : dataItems[index];
342
- const realIndex = isSwiperMode ? index + currentSwiperIndex * dataCount : index;
340
+ onSwiperChange(e) {
341
+ const { current } = e.detail;
342
+ this.currentSwiperIndex = current;
343
+ },
343
344
 
344
- if (item) {
345
- this.$emit('selected', { selected: item, index: realIndex });
345
+ onSelect(event, { index }) {
346
+ const { currentSwiperIndex, dataItems, gridThemeItems, dataCount, dataTheme } = this;
347
+ const isSwiperMode = dataTheme === actionSheetTheme.Grid;
348
+ const item = isSwiperMode ? gridThemeItems[currentSwiperIndex][index] : dataItems[index];
349
+ const realIndex = isSwiperMode ? index + currentSwiperIndex * dataCount : index;
346
350
 
347
- if (!item.disabled) {
348
- this.$emit('close', { trigger: 'select' });
349
- this._trigger('visible-change', { visible: false });
351
+ if (item) {
352
+ this.$emit('selected', { selected: item, index: realIndex });
353
+
354
+ if (!item.disabled) {
355
+ this.$emit('close', { trigger: 'select' });
356
+ this._trigger('visible-change', { visible: false });
357
+ }
350
358
  }
351
- }
352
- },
359
+ },
353
360
 
354
- onCancel() {
355
- this.$emit('cancel');
356
- if (this.autoClose) {
357
- this.dataVisible = false;
358
- this.autoClose = false;
359
- }
361
+ onCancel() {
362
+ this.$emit('cancel');
363
+ if (this.autoClose) {
364
+ this.dataVisible = false;
365
+ this.autoClose = false;
366
+ }
367
+ },
360
368
  },
361
- },
362
- });
369
+ }),
370
+ };
363
371
  </script>
364
372
 
365
373
  <style scoped src="./action-sheet.css"></style>
@@ -63,8 +63,8 @@ export default {
63
63
  usingCustomNavbar: Boolean,
64
64
  /** 显示与隐藏 */
65
65
  visible: {
66
- type: Boolean,
67
- default: undefined,
66
+ type: [Boolean, null],
67
+ default: null as TdActionSheetProps['visible'],
68
68
  },
69
69
  /** 显示与隐藏,非受控属性 */
70
70
  defaultVisible: Boolean,
@@ -61,7 +61,7 @@ export interface TdActionSheetProps {
61
61
  * 显示与隐藏
62
62
  * @default false
63
63
  */
64
- visible?: boolean;
64
+ visible?: boolean | null;
65
65
  /**
66
66
  * 显示与隐藏,非受控属性
67
67
  * @default false