uview-pro 0.2.4 → 0.3.1

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 (249) hide show
  1. package/changelog.md +584 -545
  2. package/components/common/props.ts +22 -22
  3. package/components/u-action-sheet/types.ts +37 -35
  4. package/components/u-action-sheet/u-action-sheet.vue +178 -167
  5. package/components/u-alert-tips/types.ts +41 -39
  6. package/components/u-alert-tips/u-alert-tips.vue +238 -223
  7. package/components/u-avatar/types.ts +36 -34
  8. package/components/u-avatar/u-avatar.vue +217 -207
  9. package/components/u-avatar-cropper/types.ts +23 -23
  10. package/components/u-avatar-cropper/u-avatar-cropper.vue +297 -286
  11. package/components/u-avatar-cropper/weCropper.d.ts +62 -62
  12. package/components/u-avatar-cropper/weCropper.js +1281 -1281
  13. package/components/u-avatar-cropper/weCropper.ts +1276 -1276
  14. package/components/u-back-top/types.ts +36 -39
  15. package/components/u-back-top/u-back-top.vue +140 -128
  16. package/components/u-badge/types.ts +38 -36
  17. package/components/u-badge/u-badge.vue +183 -165
  18. package/components/u-button/types.ts +66 -66
  19. package/components/u-button/u-button.vue +579 -566
  20. package/components/u-calendar/types.ts +75 -75
  21. package/components/u-calendar/u-calendar.vue +793 -793
  22. package/components/u-car-keyboard/types.ts +14 -12
  23. package/components/u-car-keyboard/u-car-keyboard.vue +262 -253
  24. package/components/u-card/types.ts +61 -59
  25. package/components/u-card/u-card.vue +209 -194
  26. package/components/u-cell-group/types.ts +19 -17
  27. package/components/u-cell-group/u-cell-group.vue +60 -50
  28. package/components/u-cell-item/types.ts +56 -54
  29. package/components/u-cell-item/u-cell-item.vue +226 -213
  30. package/components/u-checkbox/types.ts +33 -31
  31. package/components/u-checkbox/u-checkbox.vue +282 -283
  32. package/components/u-checkbox-group/types.ts +34 -32
  33. package/components/u-checkbox-group/u-checkbox-group.vue +130 -130
  34. package/components/u-circle-progress/types.ts +54 -52
  35. package/components/u-circle-progress/u-circle-progress.vue +206 -191
  36. package/components/u-city-select/types.ts +22 -20
  37. package/components/u-city-select/u-city-select.vue +276 -264
  38. package/components/u-col/types.ts +32 -30
  39. package/components/u-col/u-col.vue +142 -123
  40. package/components/u-collapse/types.ts +33 -33
  41. package/components/u-collapse/u-collapse.vue +190 -186
  42. package/components/u-collapse-item/types.ts +27 -27
  43. package/components/u-collapse-item/u-collapse-item.vue +290 -285
  44. package/components/u-column-notice/types.ts +50 -48
  45. package/components/u-column-notice/u-column-notice.vue +222 -210
  46. package/components/u-count-down/types.ts +44 -42
  47. package/components/u-count-down/u-count-down.vue +286 -274
  48. package/components/u-count-to/types.ts +34 -32
  49. package/components/u-count-to/u-count-to.vue +266 -248
  50. package/components/u-divider/types.ts +33 -31
  51. package/components/u-divider/u-divider.vue +145 -129
  52. package/components/u-dropdown/types.ts +34 -32
  53. package/components/u-dropdown/u-dropdown.vue +330 -302
  54. package/components/u-dropdown-item/types.ts +29 -27
  55. package/components/u-dropdown-item/u-dropdown-item.vue +120 -128
  56. package/components/u-empty/types.ts +38 -36
  57. package/components/u-empty/u-empty.vue +103 -88
  58. package/components/u-field/types.ts +71 -69
  59. package/components/u-field/u-field.vue +388 -373
  60. package/components/u-form/types.ts +29 -27
  61. package/components/u-form/u-form.vue +130 -136
  62. package/components/u-form-item/types.ts +72 -70
  63. package/components/u-form-item/u-form-item.vue +447 -447
  64. package/components/u-full-screen/types.ts +16 -14
  65. package/components/u-full-screen/u-full-screen.vue +103 -89
  66. package/components/u-gap/types.ts +20 -18
  67. package/components/u-gap/u-gap.vue +50 -40
  68. package/components/u-grid/types.ts +21 -19
  69. package/components/u-grid/u-grid.vue +91 -93
  70. package/components/u-grid-item/types.ts +16 -16
  71. package/components/u-grid-item/u-grid-item.vue +130 -134
  72. package/components/u-icon/types.ts +61 -62
  73. package/components/u-icon/u-icon.vue +296 -294
  74. package/components/u-image/types.ts +51 -51
  75. package/components/u-image/u-image.vue +239 -230
  76. package/components/u-index-anchor/types.ts +16 -16
  77. package/components/u-index-anchor/u-index-anchor.vue +94 -86
  78. package/components/u-index-list/types.ts +43 -43
  79. package/components/u-index-list/u-index-list.vue +352 -355
  80. package/components/u-input/types.ts +137 -140
  81. package/components/u-input/u-input.vue +288 -279
  82. package/components/u-keyboard/types.ts +40 -40
  83. package/components/u-keyboard/u-keyboard.vue +178 -169
  84. package/components/u-lazy-load/types.ts +37 -37
  85. package/components/u-lazy-load/u-lazy-load.vue +246 -235
  86. package/components/u-line/types.ts +44 -44
  87. package/components/u-line/u-line.vue +68 -59
  88. package/components/u-line-progress/types.ts +58 -58
  89. package/components/u-line-progress/u-line-progress.vue +126 -117
  90. package/components/u-link/types.ts +43 -43
  91. package/components/u-link/u-link.vue +84 -75
  92. package/components/u-loading/types.ts +35 -35
  93. package/components/u-loading/u-loading.vue +105 -96
  94. package/components/u-loading-popup/types.ts +26 -26
  95. package/components/u-loading-popup/u-loading-popup.vue +253 -239
  96. package/components/u-loadmore/types.ts +79 -79
  97. package/components/u-loadmore/u-loadmore.vue +156 -145
  98. package/components/u-mask/types.ts +40 -43
  99. package/components/u-mask/u-mask.vue +113 -106
  100. package/components/u-message-input/types.ts +74 -74
  101. package/components/u-message-input/u-message-input.vue +281 -270
  102. package/components/u-modal/types.ts +118 -118
  103. package/components/u-modal/u-modal.vue +220 -211
  104. package/components/u-navbar/types.ts +103 -103
  105. package/components/u-navbar/u-navbar.vue +251 -240
  106. package/components/u-no-network/image.ts +2 -2
  107. package/components/u-no-network/types.ts +28 -28
  108. package/components/u-no-network/u-no-network.vue +303 -292
  109. package/components/u-notice-bar/types.ts +111 -111
  110. package/components/u-notice-bar/u-notice-bar.vue +189 -179
  111. package/components/u-number-box/types.ts +42 -42
  112. package/components/u-number-box/u-number-box.vue +321 -312
  113. package/components/u-number-keyboard/types.ts +26 -26
  114. package/components/u-number-keyboard/u-number-keyboard.vue +188 -179
  115. package/components/u-picker/types.ts +123 -123
  116. package/components/u-picker/u-picker.vue +685 -676
  117. package/components/u-popup/types.ts +59 -59
  118. package/components/u-popup/u-popup.vue +385 -375
  119. package/components/u-radio/types.ts +27 -25
  120. package/components/u-radio/u-radio.vue +279 -272
  121. package/components/u-radio-group/types.ts +31 -29
  122. package/components/u-radio-group/u-radio-group.vue +96 -108
  123. package/components/u-rate/types.ts +42 -40
  124. package/components/u-rate/u-rate.vue +249 -234
  125. package/components/u-read-more/types.ts +37 -35
  126. package/components/u-read-more/u-read-more.vue +172 -156
  127. package/components/u-root-portal/u-root-portal.vue +56 -54
  128. package/components/u-row/types.ts +22 -20
  129. package/components/u-row/u-row.vue +105 -87
  130. package/components/u-row-notice/types.ts +41 -39
  131. package/components/u-row-notice/u-row-notice.vue +256 -244
  132. package/components/u-safe-bottom/u-safe-bottom.vue +57 -46
  133. package/components/u-search/types.ts +55 -53
  134. package/components/u-search/u-search.vue +279 -268
  135. package/components/u-section/types.ts +34 -32
  136. package/components/u-section/u-section.vue +150 -131
  137. package/components/u-select/types.ts +45 -43
  138. package/components/u-select/u-select.vue +388 -378
  139. package/components/u-skeleton/types.ts +22 -20
  140. package/components/u-skeleton/u-skeleton.vue +231 -220
  141. package/components/u-slider/types.ts +34 -32
  142. package/components/u-slider/u-slider.vue +255 -247
  143. package/components/u-status-bar/u-status-bar.vue +74 -65
  144. package/components/u-steps/types.ts +30 -28
  145. package/components/u-steps/u-steps.vue +181 -169
  146. package/components/u-sticky/types.ts +24 -22
  147. package/components/u-sticky/u-sticky.vue +178 -162
  148. package/components/u-subsection/types.ts +38 -36
  149. package/components/u-subsection/u-subsection.vue +339 -328
  150. package/components/u-swipe-action/types.ts +52 -50
  151. package/components/u-swipe-action/u-swipe-action.vue +276 -260
  152. package/components/u-swiper/types.ts +49 -47
  153. package/components/u-swiper/u-swiper.vue +308 -291
  154. package/components/u-switch/types.ts +30 -28
  155. package/components/u-switch/u-switch.vue +150 -141
  156. package/components/u-tabbar/types.ts +38 -36
  157. package/components/u-tabbar/u-tabbar.vue +315 -298
  158. package/components/u-table/types.ts +27 -25
  159. package/components/u-table/u-table.vue +67 -55
  160. package/components/u-tabs/types.ts +53 -51
  161. package/components/u-tabs/u-tabs.vue +302 -291
  162. package/components/u-tabs-swiper/types.ts +55 -53
  163. package/components/u-tabs-swiper/u-tabs-swiper.vue +409 -397
  164. package/components/u-tag/types.ts +39 -37
  165. package/components/u-tag/u-tag.vue +268 -252
  166. package/components/u-td/types.ts +14 -12
  167. package/components/u-td/u-td.vue +98 -87
  168. package/components/u-text/types.ts +72 -72
  169. package/components/u-text/u-text.vue +343 -341
  170. package/components/u-th/types.ts +14 -12
  171. package/components/u-th/u-th.vue +92 -81
  172. package/components/u-time-line/u-time-line.vue +53 -39
  173. package/components/u-time-line-item/types.ts +16 -14
  174. package/components/u-time-line-item/u-time-line-item.vue +90 -78
  175. package/components/u-toast/types.ts +38 -36
  176. package/components/u-toast/u-toast.vue +240 -233
  177. package/components/u-top-tips/types.ts +16 -14
  178. package/components/u-top-tips/u-top-tips.vue +130 -113
  179. package/components/u-tr/types.ts +11 -8
  180. package/components/u-tr/u-tr.vue +39 -24
  181. package/components/u-upload/types.ts +82 -80
  182. package/components/u-upload/u-upload.vue +568 -559
  183. package/components/u-verification-code/types.ts +24 -22
  184. package/components/u-verification-code/u-verification-code.vue +176 -164
  185. package/components/u-waterfall/types.ts +18 -16
  186. package/components/u-waterfall/u-waterfall.vue +187 -175
  187. package/iconfont.css +913 -913
  188. package/index.scss +25 -25
  189. package/index.ts +38 -38
  190. package/libs/config/config.ts +26 -26
  191. package/libs/config/zIndex.ts +37 -37
  192. package/libs/css/color.scss +155 -155
  193. package/libs/css/common.scss +178 -178
  194. package/libs/css/style.components.scss +16 -16
  195. package/libs/css/style.h5.scss +8 -8
  196. package/libs/css/style.mp.scss +72 -72
  197. package/libs/css/style.nvue.scss +15 -15
  198. package/libs/css/style.vue.scss +188 -188
  199. package/libs/function/$parent.ts +24 -24
  200. package/libs/function/addUnit.ts +13 -13
  201. package/libs/function/color.ts +37 -37
  202. package/libs/function/colorGradient.ts +139 -139
  203. package/libs/function/debounce.ts +28 -28
  204. package/libs/function/deepClone.ts +39 -39
  205. package/libs/function/deepMerge.ts +35 -35
  206. package/libs/function/getParent.ts +63 -63
  207. package/libs/function/getRect.ts +26 -26
  208. package/libs/function/guid.ts +42 -42
  209. package/libs/function/md5.ts +403 -403
  210. package/libs/function/parent.ts +21 -21
  211. package/libs/function/queryParams.ts +64 -64
  212. package/libs/function/random.ts +16 -16
  213. package/libs/function/randomArray.ts +11 -11
  214. package/libs/function/route.ts +118 -118
  215. package/libs/function/styleUtils.ts +83 -83
  216. package/libs/function/sys.ts +15 -15
  217. package/libs/function/test.ts +289 -289
  218. package/libs/function/throttle.ts +31 -31
  219. package/libs/function/timeFormat.ts +55 -55
  220. package/libs/function/timeFrom.ts +48 -48
  221. package/libs/function/toast.ts +14 -14
  222. package/libs/function/trim.ts +21 -21
  223. package/libs/function/type2icon.ts +39 -39
  224. package/libs/hooks/index.ts +4 -3
  225. package/libs/hooks/useCompRelation.ts +364 -0
  226. package/libs/hooks/useComponent.ts +759 -759
  227. package/libs/hooks/useEmitter.ts +79 -79
  228. package/libs/hooks/useParent.ts +33 -33
  229. package/libs/hooks/useRect.ts +33 -33
  230. package/libs/index.ts +337 -320
  231. package/libs/request/auto-http.ts +76 -76
  232. package/libs/request/index.ts +242 -242
  233. package/libs/store/index.ts +88 -88
  234. package/libs/util/async-validator.d.ts +75 -75
  235. package/libs/util/async-validator.js +1 -1
  236. package/libs/util/calendar.d.ts +57 -57
  237. package/libs/util/emitter.ts +112 -112
  238. package/libs/util/eventBus.ts +86 -86
  239. package/libs/util/logger.ts +364 -364
  240. package/libs/util/mitt.ts +118 -118
  241. package/libs/util/parent.ts +20 -20
  242. package/package.json +4 -4
  243. package/readme.md +241 -241
  244. package/theme.scss +38 -38
  245. package/types/components.d.ts +97 -97
  246. package/types/global.d.ts +331 -331
  247. package/types/ignore-errors.d.ts +30 -30
  248. package/types/index.d.ts +19 -19
  249. package/types/uni-app.d.ts +63 -63
@@ -1,186 +1,190 @@
1
- <template>
2
- <view class="u-collapse" :style="$u.toStyle(customStyle)" :class="customClass">
3
- <slot />
4
- </view>
5
- </template>
6
-
7
- <script lang="ts">
8
- export default {
9
- name: 'u-collapse',
10
- options: {
11
- addGlobalClass: true,
12
- // #ifndef MP-TOUTIAO
13
- virtualHost: true,
14
- // #endif
15
- styleIsolation: 'shared'
16
- }
17
- };
18
- </script>
19
-
20
- <script setup lang="ts">
21
- import { nextTick, onMounted, ref } from 'vue';
22
- import { CollapseProps } from './types';
23
- import { $u, useParent } from '../../';
24
-
25
- /**
26
- * collapse 手风琴
27
- * @description 通过折叠面板收纳内容区域
28
- * @tutorial https://uviewpro.cn/zh/components/collapse.html
29
- * @property {Boolean} accordion 是否手风琴模式(默认true)
30
- * @property {Boolean} arrow 是否显示标题右侧的箭头(默认true)
31
- * @property {String} arrow-color 标题右侧箭头的颜色(默认#909399)
32
- * @property {Object} head-style 标题自定义样式,对象形式
33
- * @property {Object} body-style 主体自定义样式,对象形式
34
- * @property {String} hover-class 样式类名,按下时有效(默认u-hover-class)
35
- * @event {Function} change 当前激活面板展开时触发(如果是手风琴模式,参数activeNames类型为String,否则为Array)
36
- * @example <u-collapse></u-collapse>
37
- */
38
- const props = defineProps(CollapseProps);
39
- const emit = defineEmits(['change']);
40
-
41
- // 使用通信库的父组件Hook
42
- const { children, broadcast, getChildrenExposed } = useParent('u-collapse');
43
-
44
- // 当前激活的面板 - 只在手风琴模式下使用
45
- const activeName = ref<string | number>('');
46
-
47
- onMounted(() => {
48
- nextTick(() => {
49
- // 初始化:收集所有open为true的项
50
- setTimeout(() => {
51
- initializeActiveName();
52
- }, 100);
53
- });
54
- });
55
-
56
- /**
57
- * 初始化activeName - 找到第一个open为true的项
58
- */
59
- function initializeActiveName() {
60
- if (props.accordion) {
61
- // 手风琴模式下,取第一个open为true的项作为初始激活项
62
- const childrenExposed = getChildrenExposed();
63
- const openChild = childrenExposed.find(child => child.exposed.isShow === true);
64
- if (openChild) {
65
- activeName.value = openChild.exposed.itemName || '';
66
- }
67
- }
68
- }
69
-
70
- /**
71
- * collapse item被点击,由collapse item调用父组件方法
72
- */
73
- function onChange(name: string | number) {
74
- if (props.accordion) {
75
- // 手风琴模式
76
- const childrenExposed = getChildrenExposed();
77
- const targetChild = childrenExposed.find(child => child.exposed.itemName === name);
78
- if (targetChild?.exposed.isShow.value === true) {
79
- // 目标项当前是展开状态,点击后要关闭它
80
- activeName.value = '';
81
- broadcast('closeAll', {});
82
- } else {
83
- // 目标项当前是关闭状态,点击后要展开它并关闭其他
84
- activeName.value = name;
85
- broadcast('openSingle', { targetName: name });
86
- }
87
- } else {
88
- // 非手风琴模式 - 只通知目标项切换状态
89
- broadcast('toggleSingle', { targetName: name });
90
- }
91
-
92
- // 收集当前所有展开的项
93
- let currentActiveNames: (string | number)[] = [];
94
- if (props.accordion) {
95
- currentActiveNames = activeName.value ? [activeName.value] : [];
96
- } else {
97
- // 对于非手风琴模式,我们不知道所有项的状态,所以这里不处理
98
- currentActiveNames = [];
99
- }
100
-
101
- emit('change', props.accordion ? activeName.value || '' : currentActiveNames);
102
- }
103
-
104
- /**
105
- * 设置激活的面板
106
- */
107
- function setActiveNames(names: string | number | (string | number)[]) {
108
- if (props.accordion) {
109
- // 手风琴模式
110
- const name = Array.isArray(names) ? names[0] : names;
111
- activeName.value = name || '';
112
- if (name) {
113
- broadcast('openSingle', { targetName: name });
114
- } else {
115
- broadcast('closeAll', {});
116
- }
117
- } else {
118
- // 非手风琴模式
119
- const namesArray = Array.isArray(names) ? names : [names];
120
- broadcast('setMultiple', { targetNames: namesArray });
121
- }
122
- }
123
-
124
- /**
125
- * 打开所有面板
126
- */
127
- function openAll() {
128
- if (props.accordion) {
129
- console.warn('手风琴模式下不能打开所有面板');
130
- return;
131
- }
132
- const childrenExposed = getChildrenExposed();
133
- const allNames = childrenExposed.map(child => child.exposed.itemName).filter(Boolean);
134
- broadcast('setMultiple', { targetNames: allNames });
135
- }
136
-
137
- /**
138
- * 关闭所有面板
139
- */
140
- function closeAll() {
141
- broadcast('closeAll', {});
142
- if (props.accordion) {
143
- activeName.value = '';
144
- }
145
- }
146
-
147
- /**
148
- * 重新初始化,用于动态内容变化
149
- */
150
- function init() {
151
- const childrenExposed = getChildrenExposed();
152
- childrenExposed.forEach(child => {
153
- if (child.exposed.init) {
154
- child.exposed.init();
155
- }
156
- });
157
-
158
- // 重新初始化activeName
159
- setTimeout(() => {
160
- initializeActiveName();
161
- }, 150);
162
- }
163
-
164
- // 使用defineExpose暴露给外部
165
- defineExpose({
166
- // props
167
- props,
168
-
169
- // 状态
170
- activeName,
171
-
172
- // 方法
173
- onChange,
174
- setActiveNames,
175
- openAll,
176
- closeAll,
177
- init,
178
-
179
- // 计算属性
180
- childrenCount: () => children.length
181
- });
182
- </script>
183
-
184
- <style lang="scss" scoped>
185
- @import '../../libs/css/style.components.scss';
186
- </style>
1
+ <template>
2
+ <view class="u-collapse" :style="$u.toStyle(customStyle)" :class="customClass">
3
+ <slot />
4
+ </view>
5
+ </template>
6
+
7
+ <script lang="ts">
8
+ export default {
9
+ name: 'u-collapse',
10
+ options: {
11
+ addGlobalClass: true,
12
+ // #ifndef MP-TOUTIAO
13
+ virtualHost: true,
14
+ // #endif
15
+ styleIsolation: 'shared'
16
+ }
17
+ };
18
+ </script>
19
+
20
+ <script setup lang="ts">
21
+ import { nextTick, onMounted, ref } from 'vue';
22
+ import { CollapseProps } from './types';
23
+ import { $u, useParent } from '../../';
24
+
25
+ /**
26
+ * collapse 手风琴
27
+ * @description 通过折叠面板收纳内容区域
28
+ * @tutorial https://uviewpro.cn/zh/components/collapse.html
29
+ * @property {Boolean} accordion 是否手风琴模式(默认true)
30
+ * @property {Boolean} arrow 是否显示标题右侧的箭头(默认true)
31
+ * @property {String} arrow-color 标题右侧箭头的颜色(默认#909399)
32
+ * @property {Object} head-style 标题自定义样式,对象形式
33
+ * @property {Object} body-style 主体自定义样式,对象形式
34
+ * @property {String} hover-class 样式类名,按下时有效(默认u-hover-class)
35
+ * @event {Function} change 当前激活面板展开时触发(如果是手风琴模式,参数activeNames类型为String,否则为Array)
36
+ * @example <u-collapse></u-collapse>
37
+ */
38
+ const props = defineProps(CollapseProps);
39
+ const emit = defineEmits(['change']);
40
+
41
+ // 使用通信库的父组件Hook
42
+ const { children, broadcast, getChildrenExposed } = useParent('u-collapse');
43
+
44
+ // 当前激活的面板 - 只在手风琴模式下使用
45
+ const activeName = ref<string | number>('');
46
+
47
+ onMounted(() => {
48
+ nextTick(() => {
49
+ // 初始化:收集所有open为true的项
50
+ setTimeout(() => {
51
+ initializeActiveName();
52
+ }, 100);
53
+ });
54
+ });
55
+
56
+ /**
57
+ * 初始化activeName - 找到第一个open为true的项
58
+ */
59
+ function initializeActiveName() {
60
+ if (props.accordion) {
61
+ // 手风琴模式下,取第一个open为true的项作为初始激活项
62
+ const childrenExposed = getChildrenExposed();
63
+ const openChild = childrenExposed.find(child => child.exposed.isShow === true);
64
+ if (openChild) {
65
+ activeName.value = openChild.exposed.itemName || '';
66
+ }
67
+ }
68
+ }
69
+
70
+ /**
71
+ * collapse item被点击,由collapse item调用父组件方法
72
+ */
73
+ function onChange(name: string | number) {
74
+ if (props.accordion) {
75
+ // 手风琴模式
76
+ const childrenExposed = getChildrenExposed();
77
+ const targetChild = childrenExposed.find(child => child.exposed.itemName === name);
78
+ if (targetChild?.exposed.isShow.value === true) {
79
+ // 目标项当前是展开状态,点击后要关闭它
80
+ activeName.value = '';
81
+ broadcast('closeAll', {});
82
+ } else {
83
+ // 目标项当前是关闭状态,点击后要展开它并关闭其他
84
+ activeName.value = name;
85
+ broadcast('openSingle', { targetName: name });
86
+ }
87
+ } else {
88
+ // 非手风琴模式 - 只通知目标项切换状态
89
+ broadcast('toggleSingle', { targetName: name });
90
+ }
91
+
92
+ // 收集当前所有展开的项
93
+ let currentActiveNames: (string | number)[] = [];
94
+ if (props.accordion) {
95
+ currentActiveNames = activeName.value === 0 || activeName.value ? [activeName.value] : [];
96
+ } else {
97
+ // 对于非手风琴模式,我们不知道所有项的状态
98
+ currentActiveNames = [];
99
+ children.forEach(child => {
100
+ if (child.getExposed().isShow.value) {
101
+ currentActiveNames.push(child.getExposed().itemName);
102
+ }
103
+ });
104
+ }
105
+ currentActiveNames.length > 0 && emit('change', props.accordion ? activeName.value || '' : currentActiveNames);
106
+ }
107
+
108
+ /**
109
+ * 设置激活的面板
110
+ */
111
+ function setActiveNames(names: string | number | (string | number)[]) {
112
+ if (props.accordion) {
113
+ // 手风琴模式
114
+ const name = Array.isArray(names) ? names[0] : names;
115
+ activeName.value = name || '';
116
+ if (name) {
117
+ broadcast('openSingle', { targetName: name });
118
+ } else {
119
+ broadcast('closeAll', {});
120
+ }
121
+ } else {
122
+ // 非手风琴模式
123
+ const namesArray = Array.isArray(names) ? names : [names];
124
+ broadcast('setMultiple', { targetNames: namesArray });
125
+ }
126
+ }
127
+
128
+ /**
129
+ * 打开所有面板
130
+ */
131
+ function openAll() {
132
+ if (props.accordion) {
133
+ console.warn('手风琴模式下不能打开所有面板');
134
+ return;
135
+ }
136
+ const childrenExposed = getChildrenExposed();
137
+ const allNames = childrenExposed.map(child => child.exposed.itemName).filter(Boolean);
138
+ broadcast('setMultiple', { targetNames: allNames });
139
+ }
140
+
141
+ /**
142
+ * 关闭所有面板
143
+ */
144
+ function closeAll() {
145
+ broadcast('closeAll', {});
146
+ if (props.accordion) {
147
+ activeName.value = '';
148
+ }
149
+ }
150
+
151
+ /**
152
+ * 重新初始化,用于动态内容变化
153
+ */
154
+ function init() {
155
+ const childrenExposed = getChildrenExposed();
156
+ childrenExposed.forEach(child => {
157
+ if (child.exposed.init) {
158
+ child.exposed.init();
159
+ }
160
+ });
161
+
162
+ // 重新初始化activeName
163
+ setTimeout(() => {
164
+ initializeActiveName();
165
+ }, 150);
166
+ }
167
+
168
+ // 使用defineExpose暴露给外部
169
+ defineExpose({
170
+ // props
171
+ props,
172
+
173
+ // 状态
174
+ activeName,
175
+
176
+ // 方法
177
+ onChange,
178
+ setActiveNames,
179
+ openAll,
180
+ closeAll,
181
+ init,
182
+
183
+ // 计算属性
184
+ childrenCount: () => children.length
185
+ });
186
+ </script>
187
+
188
+ <style lang="scss" scoped>
189
+ @import '../../libs/css/style.components.scss';
190
+ </style>
@@ -1,27 +1,27 @@
1
- import type { ExtractPropTypes, PropType } from 'vue';
2
- import type { TextAlign } from '../../types/global';
3
- import { baseProps } from '../common/props';
4
-
5
- /**
6
- * u-collapse-item 手风琴Item Props
7
- * @description 通过折叠面板收纳内容区域(搭配u-collapse使用)
8
- */
9
- export const CollapseItemProps = {
10
- ...baseProps,
11
- /** 标题 */
12
- title: { type: String, default: '' },
13
- /** 标题的对齐方式 */
14
- align: { type: String as PropType<TextAlign>, default: 'left' },
15
- /** 是否可以点击收起 */
16
- disabled: { type: Boolean, default: false },
17
- /** collapse显示与否 */
18
- open: { type: Boolean, default: false },
19
- /** 唯一标识符 */
20
- name: { type: [Number, String] as PropType<number | string>, default: '' },
21
- /** 活动样式 */
22
- activeStyle: { type: Object as PropType<Record<string, any>>, default: () => ({}) },
23
- /** 标识当前为第几个 */
24
- index: { type: [String, Number] as PropType<string | number>, default: '' }
25
- };
26
-
27
- export type CollapseItemProps = ExtractPropTypes<typeof CollapseItemProps>;
1
+ import type { ExtractPropTypes, PropType } from 'vue';
2
+ import type { TextAlign } from '../../types/global';
3
+ import { baseProps } from '../common/props';
4
+
5
+ /**
6
+ * u-collapse-item 手风琴Item Props
7
+ * @description 通过折叠面板收纳内容区域(搭配u-collapse使用)
8
+ */
9
+ export const CollapseItemProps = {
10
+ ...baseProps,
11
+ /** 标题 */
12
+ title: { type: String, default: '' },
13
+ /** 标题的对齐方式 */
14
+ align: { type: String as PropType<TextAlign>, default: 'left' },
15
+ /** 是否可以点击收起 */
16
+ disabled: { type: Boolean, default: false },
17
+ /** collapse显示与否 */
18
+ open: { type: Boolean, default: false },
19
+ /** 唯一标识符 */
20
+ name: { type: [Number, String] as PropType<number | string>, default: '' },
21
+ /** 活动样式 */
22
+ activeStyle: { type: Object as PropType<Record<string, any>>, default: () => ({}) },
23
+ /** 标识当前为第几个 */
24
+ index: { type: [String, Number] as PropType<string | number>, default: '' }
25
+ };
26
+
27
+ export type CollapseItemProps = ExtractPropTypes<typeof CollapseItemProps>;