@gmcb/uv-ui 0.2.26 → 0.3.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 (137) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/LICENSE +21 -21
  3. package/README.md +95 -141
  4. package/components/uv-overlay/props.js +29 -24
  5. package/components/uv-overlay/uv-overlay.vue +87 -85
  6. package/docs/api/configs/color.md +52 -0
  7. package/docs/api/index.md +77 -0
  8. package/docs/api/mixins/mpShare.md +95 -0
  9. package/docs/api/request/apiManage.md +88 -0
  10. package/docs/api/request/http.md +451 -0
  11. package/docs/api/utils/colorSwitch.md +78 -0
  12. package/docs/api/utils/debounce.md +104 -0
  13. package/docs/api/utils/fastUse.md +246 -0
  14. package/docs/api/utils/getRect.md +238 -0
  15. package/docs/api/utils/guid.md +41 -0
  16. package/docs/api/utils/index.md +55 -0
  17. package/docs/api/utils/intro.md +25 -0
  18. package/docs/api/utils/object.md +171 -0
  19. package/docs/api/utils/queryParams.md +68 -0
  20. package/docs/api/utils/random.md +23 -0
  21. package/docs/api/utils/randomArray.md +28 -0
  22. package/docs/api/utils/route.md +121 -0
  23. package/docs/api/utils/test.md +237 -0
  24. package/docs/api/utils/time.md +81 -0
  25. package/docs/api/utils/trim.md +24 -0
  26. package/docs/components/actionSheet.md +236 -0
  27. package/docs/components/addQQGroup.md +5 -0
  28. package/docs/components/album.md +91 -0
  29. package/docs/components/alert.md +83 -0
  30. package/docs/components/avatar.md +152 -0
  31. package/docs/components/backTop.md +181 -0
  32. package/docs/components/badge.md +117 -0
  33. package/docs/components/button.md +196 -0
  34. package/docs/components/calendar.md +398 -0
  35. package/docs/components/calendars.md +294 -0
  36. package/docs/components/cell.md +185 -0
  37. package/docs/components/checkbox.md +281 -0
  38. package/docs/components/circleProgress.md +5 -0
  39. package/docs/components/code.md +162 -0
  40. package/docs/components/codeInput.md +175 -0
  41. package/docs/components/collapse.md +250 -0
  42. package/docs/components/color.md +324 -0
  43. package/docs/components/common.md +126 -0
  44. package/docs/components/countDown.md +166 -0
  45. package/docs/components/countTo.md +140 -0
  46. package/docs/components/datetimePicker.md +283 -0
  47. package/docs/components/diff1.x.md +190 -0
  48. package/docs/components/divider.md +88 -0
  49. package/docs/components/downloadSetting.md +54 -0
  50. package/docs/components/dropDown.md +375 -0
  51. package/docs/components/empty.md +99 -0
  52. package/docs/components/feature.md +261 -0
  53. package/docs/components/form.md +736 -0
  54. package/docs/components/gap.md +49 -0
  55. package/docs/components/grid.md +225 -0
  56. package/docs/components/icon.md +101 -0
  57. package/docs/components/image.md +182 -0
  58. package/docs/components/index.md +110 -0
  59. package/docs/components/indexList.md +133 -0
  60. package/docs/components/input.md +250 -0
  61. package/docs/components/install.md +59 -0
  62. package/docs/components/intro.md +32 -0
  63. package/docs/components/keyboard.md +226 -0
  64. package/docs/components/layout.md +310 -0
  65. package/docs/components/line.md +85 -0
  66. package/docs/components/lineProgress.md +141 -0
  67. package/docs/components/link.md +89 -0
  68. package/docs/components/list.md +223 -0
  69. package/docs/components/loadMore.md +140 -0
  70. package/docs/components/loadingIcon.md +144 -0
  71. package/docs/components/loadingPage.md +92 -0
  72. package/docs/components/modal.md +230 -0
  73. package/docs/components/more.md +13 -0
  74. package/docs/components/navbar.md +192 -0
  75. package/docs/components/noNetwork.md +116 -0
  76. package/docs/components/noticeBar.md +131 -0
  77. package/docs/components/notify.md +204 -0
  78. package/docs/components/npmSetting.md +64 -0
  79. package/docs/components/numberBox.md +257 -0
  80. package/docs/components/nvue.md +170 -0
  81. package/docs/components/overlay.md +117 -0
  82. package/docs/components/parse.md +204 -0
  83. package/docs/components/pickColor.md +112 -0
  84. package/docs/components/picker.md +357 -0
  85. package/docs/components/popup.md +221 -0
  86. package/docs/components/problem.md +300 -0
  87. package/docs/components/qrcode.md +169 -0
  88. package/docs/components/quickstart.md +33 -0
  89. package/docs/components/radio.md +256 -0
  90. package/docs/components/rate.md +128 -0
  91. package/docs/components/read.md +163 -0
  92. package/docs/components/readMore.md +227 -0
  93. package/docs/components/resource.md +17 -0
  94. package/docs/components/scrollList.md +218 -0
  95. package/docs/components/search.md +160 -0
  96. package/docs/components/setting.md +111 -0
  97. package/docs/components/settingDesc.md +66 -0
  98. package/docs/components/skeleton.md +105 -0
  99. package/docs/components/skeletons.md +323 -0
  100. package/docs/components/slider.md +157 -0
  101. package/docs/components/steps.md +189 -0
  102. package/docs/components/sticky.md +76 -0
  103. package/docs/components/subsection.md +183 -0
  104. package/docs/components/swipeAction.md +279 -0
  105. package/docs/components/swiper.md +352 -0
  106. package/docs/components/switch.md +216 -0
  107. package/docs/components/tabbar.md +263 -0
  108. package/docs/components/table.md +5 -0
  109. package/docs/components/tabs.md +364 -0
  110. package/docs/components/tag.md +227 -0
  111. package/docs/components/testPic.md +20 -0
  112. package/docs/components/text.md +157 -0
  113. package/docs/components/textarea.md +121 -0
  114. package/docs/components/toast.md +124 -0
  115. package/docs/components/tooltip.md +98 -0
  116. package/docs/components/transition.md +404 -0
  117. package/docs/components/upload.md +253 -0
  118. package/docs/components/vtabs.md +332 -0
  119. package/docs/components/vueUse.md +45 -0
  120. package/docs/components/vuexDetail.md +103 -0
  121. package/docs/components/waterfall.md +651 -0
  122. package/docs/faq/index.md +53 -0
  123. package/docs/guide/codeHint.md +44 -0
  124. package/docs/guide/customIcon.md +168 -0
  125. package/docs/guide/demo.md +92 -0
  126. package/docs/guide/design.md +56 -0
  127. package/docs/guide/globalVariable.md +239 -0
  128. package/docs/guide/i18n.md +194 -0
  129. package/docs/guide/index.md +28 -0
  130. package/docs/guide/note.md +74 -0
  131. package/docs/guide/safeAreaInset.md +64 -0
  132. package/docs/guide/theme.md +67 -0
  133. package/docs/index.md +88 -0
  134. package/libs/config/config.js +0 -10
  135. package/libs/css/color.scss +15 -14
  136. package/package.json +7 -2
  137. package/theme.scss +2 -1
@@ -0,0 +1,221 @@
1
+ ## Popup 弹出层(抽屉) <to-api/>
2
+
3
+ <demo-model url="/pages/componentsC/popup/popup"></demo-model>
4
+
5
+ ::: tip ✈
6
+
7
+ **组件名:uv-popup**
8
+
9
+ [点击下载&安装](https://ext.dcloud.net.cn/plugin?name=uv-popup)
10
+
11
+ :::
12
+
13
+ 该组件用于展示弹窗、信息提示等内容,支持上、下、左、右和中部弹出。组件只提供容器,内部内容由用户自定义,强扩展性。
14
+
15
+ ### 平台兼容性
16
+
17
+ |App(vue)|App(nvue)|H5|小程序|VUE2|VUE3|
18
+ |:-:|:-:|:-:|:-:|:-:|:-:|
19
+ |√|√|√|√|√|√|
20
+
21
+ ::: warning 提示
22
+
23
+ 1. [uv-popup等组件怎么禁止滚动穿透](https://www.uvui.cn/components/problem.html#%E5%9B%9B%E3%80%81uv-popup%E7%AD%89%E7%BB%84%E4%BB%B6%E6%80%8E%E4%B9%88%E7%A6%81%E6%AD%A2%E6%BB%9A%E5%8A%A8%E7%A9%BF%E9%80%8F)
24
+
25
+ 2. <a href="#yh">弹出闪一下或不丝滑的优化方案</a>
26
+
27
+ :::
28
+
29
+ ### 基本使用
30
+
31
+ - 弹出层的内容通过`slot`传入,由用户自定义
32
+ - 通过`ref`调用`open()`和`close()`控制弹出层的打开和关闭
33
+
34
+ ```vue
35
+ <template>
36
+ <view>
37
+ <uv-popup ref="popup" @change="change">
38
+ <view>
39
+ <text>丙辰中秋,欢饮达旦,大醉,作此篇,兼怀子由。 明月几时有?把酒问青天。
40
+ 不知天上宫阙,今夕是何年。我欲乘风归去,又恐琼楼玉宇,高处不胜寒。起舞弄清影,何似在人间。
41
+ 转朱阁,低绮户,照无眠。不应有恨,何事长向别时圆?人有悲欢离合,月有阴晴圆缺,此事古难全。
42
+ 但愿人长久,千里共婵娟。</text>
43
+ </view>
44
+ </uv-popup>
45
+ <button @click="open">打开</button>
46
+ </view>
47
+ </template>
48
+ <script setup>
49
+ import { ref } from 'vue';
50
+
51
+ const popup = ref(null);
52
+ function open() {
53
+ popup.value.open('top');
54
+ }
55
+ function change(e) {
56
+ console.log('弹窗状态改变:', e);
57
+ }
58
+
59
+ </script>
60
+ ```
61
+
62
+ ### 设置弹出层的方向
63
+
64
+ - 通过 `mode` 属性设置,可以设置为`left`、`top`、`right`、`bottom`、`center`,默认`center`
65
+ - 也可以通过 `open()` 方法传一个参数可代替 `mode` 属性,例如上述的基本使用。
66
+
67
+ ```vue
68
+ <template>
69
+ <view>
70
+ <uv-popup ref="popup" mode="center" @change="change">
71
+ <view style="width: 600rpx;">
72
+ <text>丙辰中秋,欢饮达旦,大醉,作此篇,兼怀子由。 明月几时有?把酒问青天。
73
+ 不知天上宫阙,今夕是何年。我欲乘风归去,又恐琼楼玉宇,高处不胜寒。起舞弄清影,何似在人间。
74
+ 转朱阁,低绮户,照无眠。不应有恨,何事长向别时圆?人有悲欢离合,月有阴晴圆缺,此事古难全。
75
+ 但愿人长久,千里共婵娟。</text>
76
+ </view>
77
+ </uv-popup>
78
+ <button @click="open">打开</button>
79
+ </view>
80
+ </template>
81
+ <script setup>
82
+ import { ref } from 'vue';
83
+
84
+ const popup = ref(null);
85
+ function open() {
86
+ popup.value.open();
87
+ }
88
+ function change(e) {
89
+ console.log('弹窗状态改变:', e);
90
+ }
91
+
92
+ </script>
93
+ ```
94
+
95
+ ### 禁用点击遮罩关闭
96
+
97
+ 默认情况下,点击遮罩会自动关闭弹窗,如不想点击关闭,只需将`closeOnClickOverlay`设置为`false`,这时候要关闭`uv-popup`,只能手动调用 `close()` 方法。
98
+
99
+ ```vue
100
+ <template>
101
+ <view>
102
+ <uv-popup ref="popup" :close-on-click-overlay="false">
103
+ <view style="width: 600rpx;">
104
+ <text>丙辰中秋,欢饮达旦,大醉,作此篇,兼怀子由。 明月几时有?把酒问青天。
105
+ 不知天上宫阙,今夕是何年。我欲乘风归去,又恐琼楼玉宇,高处不胜寒。起舞弄清影,何似在人间。
106
+ 转朱阁,低绮户,照无眠。不应有恨,何事长向别时圆?人有悲欢离合,月有阴晴圆缺,此事古难全。
107
+ 但愿人长久,千里共婵娟。</text>
108
+ <button @click="close">关闭</button>
109
+ </view>
110
+ </uv-popup>
111
+ <button @click="open">打开</button>
112
+ </view>
113
+ </template>
114
+ <script setup>
115
+ import { ref } from 'vue';
116
+
117
+ const popup = ref(null);
118
+ function open() {
119
+ popup.value.open();
120
+ }
121
+ function close() {
122
+ popup.value.close();
123
+ }
124
+
125
+ </script>
126
+ ```
127
+
128
+ <div id="yh"></div>
129
+
130
+ ### 优化方案
131
+
132
+ 有时候弹窗内容较多时,或者内容比较复杂时,在弹出的时候,可能会闪一下,感觉不丝滑。其实这是渲染的问题,只能在内容区去解决:
133
+
134
+ 解决思路:设置 `custom-style` 属性设置一个高度,根据自己的实际情况设置具体高度,或者设置一个 `min-height`。这样解决就可以得到很好的优化。
135
+
136
+ 注意:如果只设置 `max-height` 不会有效果。
137
+
138
+ ```vue
139
+ <template>
140
+ <view>
141
+ <uv-popup ref="popup" mode="bottom" custom-style="height: 200rpx;">
142
+ <view class="content">
143
+ <view>里面是很比较多或复杂的内容...</view>
144
+ <view>里面是很比较多或复杂的内容...</view>
145
+ <view>里面是很比较多或复杂的内容...</view>
146
+ <view>里面是很比较多或复杂的内容...</view>
147
+ <view>里面是很比较多或复杂的内容...</view>
148
+ </view>
149
+ </uv-popup>
150
+ <button @click="open">打开</button>
151
+ </view>
152
+ </template>
153
+ <script setup>
154
+ import { ref } from 'vue';
155
+
156
+ const popup = ref(null);
157
+ function open() {
158
+ popup.value.open();
159
+ }
160
+
161
+ </script>
162
+ ```
163
+
164
+ ### 完整示例
165
+
166
+ ::: tip 完整示例下载地址
167
+
168
+ [https://ext.dcloud.net.cn/plugin?name=uv-ui](https://ext.dcloud.net.cn/plugin?name=uv-ui)
169
+
170
+ :::
171
+
172
+ ### API
173
+ ---
174
+
175
+ ### Popup Props
176
+
177
+
178
+ | 参数 | 说明 | 类型 | 默认值 | 可选值 |
179
+ |:- |:- |:- |:- |:- |
180
+ | mode | 弹出方向:`top`- 顶部弹出 `bottom`- 底部弹出 `left`- 左侧弹出 `right`- 右侧弹出 `center`- 中间弹出 | String | center | top &#124; bottom &#124; left &#124; right &#124; center |
181
+ | duration | 动画时长,单位ms | String &#124; Number | 300 | - |
182
+ | overlay | 是否显示遮罩 | Boolean | true | true &#124; false |
183
+ | overlayStyle | 遮罩自定义样式,一般用于修改遮罩颜色,如:`{background: 'rgba(3, 100, 219, 0.5)'}` | Object &#124; String | - | - |
184
+ | overlayOpacity | 遮罩透明度,`0-1`之间,勿与`overlayStyle`共用 | Number &#124; String | 0.5 | - |
185
+ | closeOnClickOverlay | 点击遮罩是否关闭弹窗 | Boolean | true | true &#124; false |
186
+ | zIndex | 弹出层的`z-index`值 | Number &#124; String | 10075 | - |
187
+ | safeAreaInsetTop | 是否留出<a href="/guide/safeAreaInset.html#顶部安全区" target="_blank">顶部安全区</a>(状态栏高度) | Boolean | false | true &#124; false |
188
+ | safeAreaInsetBottom | 是否为留出<a href="/guide/safeAreaInset.html" target="_blank">底部安全区适配</a> | Boolean | true | true &#124; false |
189
+ | closeable | 是否显示关闭图标 | Boolean | false | true &#124; false |
190
+ | closeIconPos | 自定义关闭图标位置,`top-left`-左上角,`top-right`-右上角,`bottom-left`-左下角,`bottom-right`-右下角 | String | top-right | top-right &#124; top-left &#124; bottom-left &#124; bottom-right |
191
+ | zoom | 当`mode=center`时 是否开启缩放 | Boolean | true | true &#124; false |
192
+ | bgColor | 背景色,设置为""或none可去除默认的白色背景 | String | none | - |
193
+ | round | 设置圆角值,仅对`mode = top | bottom | center`有效 | Number &#124; String | 0 | - |
194
+ | customStyle | 定义内容区需要用到的外部样式 | Object | - | - |
195
+
196
+ ### Popup Methods
197
+
198
+ | 方法名 | 说明 | 参数 |
199
+ |:- |:- |:- |
200
+ | open | 打开弹出层 | open(String:type) ,如果参数可代替 type 属性 |
201
+ | close | 关闭弹出层 | - |
202
+
203
+ ### Popup Events
204
+
205
+ |事件名 |说明 |回调参数 |
206
+ |:- |:- |:- |
207
+ | @change | 打开关闭弹窗触发 | e={show: true &#124; false} |
208
+ | @maskClick | 点击遮罩触发 | - |
209
+
210
+
211
+ ### Popup Slots
212
+
213
+ |名称| 说明|
214
+ |:- |:- |
215
+ |default| 弹窗内容 |
216
+
217
+ <style scoped>
218
+ h3[id=popup-slots] + table thead tr th:nth-child(2){
219
+ width: 70%;
220
+ }
221
+ </style>
@@ -0,0 +1,300 @@
1
+ # 常见问题
2
+
3
+ ## 目录
4
+
5
+ - [一、如何解决微信小程序关于选择器的警告提示](/components/problem.html#一、如何解决微信小程序关于选择器的警告提示)
6
+ - [二、文档右侧的演示demo有些功能不能操作](/components/problem.html#二、文档右侧的演示demo有些功能不能操作)
7
+ - [三、使用的ref与组件名重名,在vue3的setup语法糖中会报错](/components/problem.html#三、使用的ref与组件名重名-在vue3的setup语法糖中会报错)
8
+ - [四、uv-popup等组件怎么禁止滚动穿透](/components/problem.html#四、uv-popup等组件怎么禁止滚动穿透)
9
+ - [五、为什么部分组件在弹出层中显示异常或功能异常](/components/problem.html#五、为什么部分组件在弹出层中显示异常或功能异常)
10
+ - [六、Android端list中为什么不能使用uv-image等组件](/components/problem.html#六、android端list中为什么不能使用uv-image等组件)
11
+ - [七、uv-row、uv-grid等组件在百度小程序、抖音小程序等平台显示异常](/components/problem.html#七、uv-row、uv-grid等组件在百度小程序、抖音小程序等平台显示异常)
12
+ - [八、在同页面使用picker-view和swiper且设置竖向自动滚动时,选择时会存在bug](/components/problem.html#八、在同页面使用picker-view和swiper且设置竖向自动滚动时-选择时会存在bug)
13
+ - [九、怎么隐藏uv-tabs等组件的滚动条](/components/problem.html#九、怎么隐藏uv-tabs等组件的滚动条)
14
+ - [十、避免部分扩展组件之间套娃,否则会造成错乱](/components/problem.html#十、避免部分扩展组件之间套娃-否则会造成错乱)
15
+ - [十一、为什么uv-popup等弹窗组件显示不使用show属性进行控制,而是使用ref控制](/components/problem.html#十一、为什么uv-popup等弹窗组件显示不使用show属性进行控制-而是使用ref控制)
16
+
17
+ ## 一、如何解决微信小程序关于选择器的警告提示?(谨慎使用)
18
+
19
+ ::: warning 微信小程序组件警告提示
20
+ Some selectors are not allowed in component wxss, including tag name selectors, ID selectors, and attribute selectors...
21
+ :::
22
+
23
+ ### 解决方案:
24
+
25
+ 暂时无需解决,不影响使用
26
+
27
+ ## 二、文档右侧的演示demo有些功能不能操作?
28
+
29
+ 因为演示demo是`iframe`嵌入的`H5`,所以组件中的`@touchstart`等事件会失效。
30
+
31
+ ### 解决方案:
32
+
33
+ 直接访问[https://h5.uvui.cn](https://h5.uvui.cn)的手机模式进行体验
34
+
35
+ ## 三、使用的ref与组件名重名,在vue3的setup语法糖中会报错
36
+
37
+ ```vue
38
+ <!-- 错误示例 -->
39
+ <template>
40
+ <view style="padding-top: 100px;">
41
+ <uv-demo ref="uvDemo"></uv-demo>
42
+ </view>
43
+ </template>
44
+ <script setup>
45
+ import { ref } from 'vue'
46
+ const uvDemo = ref(null);
47
+
48
+ </script>
49
+ ```
50
+ ::: warning 报错
51
+ 上述代码会报错导致不能正常显示<br>
52
+ Invalid vnode type when creating vnode: null.<br>
53
+ Component is missing template or render function.
54
+ :::
55
+
56
+ ### 解决方案:将ref改成其他名字即可,如下:
57
+ ```vue
58
+ <template>
59
+ <view style="padding-top: 100px;">
60
+ <uv-demo ref="uvDemo1"></uv-demo>
61
+ </view>
62
+ </template>
63
+ <script setup>
64
+ import { ref } from 'vue'
65
+ const uvDemo1 = ref(null);
66
+
67
+ </script>
68
+ ```
69
+
70
+ ## 四、uv-popup等组件怎么禁止滚动穿透?
71
+
72
+ 使用uv-popup等弹出层组件时,会发现遮罩下方的内容可以滚动,这就是穿透滚动。
73
+
74
+ 由于平台的自身原因,除H5之外,其他平台都不能在组件内禁止滚动穿透,所以在微信小程序、App 平台,页面内需要用户特殊处理一下。
75
+
76
+ ### 解决方案:
77
+
78
+ #### 微信小程序/App
79
+ 在 `微信小程序/App` 平台可使用 `page-meta` 组件动态修改页面样式,<br>
80
+ 以 `uv-popup` 为例,需要在 `data` 中定义一个变量,用来表示 `uv-popup` 的开启关闭状态,并通过这个变量修改 `page-meta` 的 `overflow` 属性。<br>
81
+ 在 `uv-popup` 的 打开和关闭 事件中可以接受到 `uv-popup` 的开启关闭状态 ,并赋值给上面的变量。
82
+ ```vue
83
+ <template>
84
+ <page-meta :page-style="'overflow:'+(show?'hidden':'visible')"></page-meta>
85
+ <view class="container">
86
+ <!-- 普通弹窗 -->
87
+ <uv-popup ref="popup" @open="change(true)" @close="change(false)">
88
+ <!-- ... -->
89
+ </uv-popup>
90
+ </view>
91
+ </template>
92
+ <script setup>
93
+ import { ref } from "vue";
94
+ const show = ref(false);
95
+ const popup = ref(null);
96
+ function change(show) {
97
+ show.value = show;
98
+ }
99
+
100
+ </script>
101
+ ```
102
+
103
+ #### Tips
104
+ - h5 滚动穿透不需要处理,组件内部有处理。或者自己根据状态设置 `body` 上面的 `overflow` 属性为 `hidden` 和 `visible`,也可以达到这种效果。
105
+ - `wx`、`app` 需要 使用 `page-meta` 组件配合阻止滚动穿透,`page-meta` 组件,一个页面只能存在一个。
106
+ - 其他平台无法阻止滚动穿透,建议使用 `scroll-view` 滚动 ,手动设置 `overflow:hidden`或设置 `scroll-y`属性来禁止滚动。
107
+
108
+ ## 五、为什么部分组件在弹出层中显示异常或功能异常?
109
+
110
+ 在弹出层 `uv-popup` 中使用 `uv-subsection` 、`uv-tabs`、`uv-rate` 等组件时,可能会显示异常或功能异常。
111
+
112
+ ### 原因:
113
+ 在`uv-subsection` 、`uv-tabs`、`uv-rate` 等组件中,使用了 `js` 去计算相应的节点参数,弹窗未显示的时候组件内部计算的值可能存在偏差,所以导致异常。
114
+
115
+ ### 解决方案:
116
+ 使用`v-if`进行控制,在弹窗弹出后,再去使用`v-if = "true"`达到重新创建组件的效果,案例如下:
117
+ ```vue
118
+ <template>
119
+ <view class="uv-content">
120
+ <uv-popup :show="show1" mode="center" @open="open">
121
+ <view class="content" style="width: 600rpx;height: 300px;background-color: #fff;">
122
+ <uv-subsection :list="list" v-if="show2" :current="current" @change="index=>current = index"></uv-subsection>
123
+ </view>
124
+ </uv-popup>
125
+ </view>
126
+ </template>
127
+ <script setup>
128
+ import { ref } from "vue";
129
+ import { onLoad } from "@dcloudio/uni-app";
130
+ const show1 = ref(false);
131
+ const show2 = ref(false);
132
+ const current = ref(1);
133
+ const list = ref(['未付款', '待评价', '已付款']);
134
+ function open() {
135
+ // 弹窗弹出后,给一点延迟再去显示分段器组件,建议设置的值大点
136
+ setTimeout(() => {
137
+ show2.value = true;
138
+ }, 200);
139
+ }
140
+ onLoad(() => {
141
+ show1.value = true;
142
+ });
143
+
144
+ </script>
145
+ ```
146
+
147
+ ## 六、Android端list中为什么不能使用uv-image等组件?
148
+
149
+ - `Android`平台,因`<list>`高效内存回收机制,不在屏幕可见区域的组件不会被创建,导致一些内部需要计算宽高的组件无法正常工作。
150
+ - `Android`平台,因`<list>`高效内存回收机制,不在屏幕可见区域的组件不会被创建,组件如果使用`animation.transition`在内容回收后会导致显示异常,所以与`uv-transition`相关的组件不能使用,例如:`uv-image`、`uv-tags`等组件。
151
+ - `uv-list`、`uv-waterfall`等组件在`Android`平台使用了`<list>`、`<cell>`封装,所以在该组件中仍然不能使用`uv-image`、`uv-tags`等组件。
152
+
153
+ ## 七、uv-row、uv-grid等组件在百度小程序、抖音小程序等平台显示异常
154
+
155
+ - `uv-row`、`uv-grid`、`uv-tabbar`等组件是由父组件和子组件组合而成,并且在父组件进行`flex`布局,但是在百度小程序、抖音小程序等平台不支持[将自定义节点设置成虚拟](https://uniapp.dcloud.net.cn/tutorial/vue-api.html#%E5%85%B6%E4%BB%96%E9%85%8D%E7%BD%AE),即`virtualHost: true`不生效。
156
+
157
+ ## 八、在同页面使用picker-view和swiper且设置竖向自动滚动时,选择时会存在bug
158
+
159
+ - 该BUG是`uniapp`官方就存在的,已经反馈了此问题:[https://ask.dcloud.net.cn/question/174410](https://ask.dcloud.net.cn/question/174410)
160
+ - 可能影响的组件eg:在一个页面同时使用`uv-picker`和`uv-notice-bar`且设置竖向滚动时,然后再使用`uv-picker`时候,可能会出现选择时闪动的情况,如果不介意可以忽略。
161
+ - 可能影响的组件eg2: 在 app-nvue 项目同一个页面中,使用 `list` 和 `uv-notice-bar`且设置竖向自动滚动时,在 `list` 下拉刷下时,`uv-notice-bar`会出现拉回到第一个。
162
+
163
+ ### 解决方案:
164
+
165
+ 1. 在 picker 组件打开时,禁止 uv-notice-bar 自动滚动,有属性可以设置,自行查看文档。
166
+ 2. 在 list 组件滚动时,禁止 uv-notice-bar 自动滚动,有属性可以设置,自行查看文档。
167
+
168
+ ## 九、怎么隐藏uv-tabs等组件的滚动条?
169
+
170
+ `uv-tabs` 等组件使用了`scroll-view`标签,在`H5`等平台会出现滚动条,需要全局设置滚动条样式,局部设置不生效。
171
+
172
+ ### 解决方案:
173
+
174
+ ```vue
175
+ /* APP.vue */
176
+ <style lang="scss">
177
+ @import '@/uni_modules/uv-ui/index.scss';
178
+ </style>
179
+ ```
180
+
181
+ 或
182
+
183
+ ```vue
184
+ /* APP.vue */
185
+ <style lang="scss">
186
+ ::-webkit-scrollbar {
187
+ display: none;
188
+ width: 0 !important;
189
+ height: 0 !important;
190
+ -webkit-appearance: none;
191
+ background: transparent;
192
+ }
193
+ </style>
194
+ ```
195
+ ## 十、避免部分扩展组件之间套娃,否则会造成错乱
196
+
197
+ - 套娃的简单案例:`uv-popup` 中嵌套 `uv-calendars`。造成的后果可以复制下面的代码体验下。
198
+ ```vue
199
+ <template>
200
+ <view>
201
+ <uv-popup ref="popup" mode="top">
202
+ <view>
203
+ <uv-button :text="`选择时间${time}`" @click="openTime"></uv-button>
204
+ <!-- 套在了uv-popup中...过分...,uv-calendars属于弹窗性质的组件,这样做的后果就是底层组件都不知道自己是啥娃子了 -->
205
+ <uv-calendars ref="calendars" @confirm="confirm" />
206
+ </view>
207
+ </uv-popup>
208
+ <button @click="open">打开</button>
209
+ </view>
210
+ </template>
211
+ <script setup>
212
+ import { ref } from "vue";
213
+ const time = ref('');
214
+ const popup = ref(null);
215
+ const calendars = ref(null);
216
+ function open() {
217
+ popup.value.open('top');
218
+ }
219
+ function openTime() {
220
+ calendars.value.open();
221
+ }
222
+ function confirm(e) {
223
+ time.value = e.fulldate;
224
+ }
225
+
226
+ </script>
227
+ ```
228
+ - 正确的做法:弹窗类等组件避免套在其他扩展组件里面,要放在根节点下面使用,且根节点不能设置宽高等属性。
229
+ ```vue
230
+ <template>
231
+ <view>
232
+ <uv-popup ref="popup" mode="top">
233
+ <view>
234
+ <uv-button :text="`选择时间${time}`" @click="openTime"></uv-button>
235
+ </view>
236
+ </uv-popup>
237
+ <button @click="open">打开</button>
238
+ <uv-calendars ref="calendars" @confirm="confirm" />
239
+ </view>
240
+ </template>
241
+ <script setup>
242
+ import { ref } from "vue";
243
+ const time = ref('');
244
+ const popup = ref(null);
245
+ const calendars = ref(null);
246
+ function open() {
247
+ popup.value.open('top');
248
+ }
249
+ function openTime() {
250
+ calendars.value.open();
251
+ }
252
+ function confirm(e) {
253
+ time.value = e.fulldate;
254
+ }
255
+
256
+ </script>
257
+ ```
258
+ - 总结:一些套娃的行为是不利于前端开发的!大家要谨记,特别是扩展组件,与原生组件有本质上的区别。为啥不能这样做,比如弹窗组件底层使用了动画组件,动画的开始执行位置是-100%,你把它执行的范围给缩小到你指定的范围,那弹出来的效果肯定是不对的。
259
+
260
+ ## 十一、为什么uv-popup等弹窗组件显示不使用show属性进行控制,而是使用ref控制
261
+
262
+ 1. 弹窗等组件中都会用到调用open方法去执行后续程序,使用监听show属性也可以做到,但是实际上使用watch监听show属性的变化,会比直接调方法执行的慢些,监听到去执行是需要时间的,所以uv-ui推荐直接调用方法,这可能也是uni-ui组件使用ref的原因,跟着官方对齐没毛病吧。
263
+
264
+ 2. 在Vuejs 中,ref 方法和监听show变化都可以用来访问和操作DOM元素。但是,它们的执行顺序是不确定的,因为它们是由 Vuejs 内部处理的。通常情况下,ref方法会先于监听show变化执行,因为它可以更早地访问和操作DOM元素。然而,在某些情况下,监听show变化可能会先于ref方法执行。例如,当show属性在组件实例化之前发生变化时,监听show变化可能会先执行。
265
+
266
+ 3. 可以用一个简单示例来解释:可以看出下面的示例show的变化在前,open方法执行在后,但是最后打印的结果是open中的程序在前,监听show变化程序在后。
267
+
268
+ 4. 总结:从性能和代码洁癖上来考虑,还是建议使用ref进行控制,这也正是uv-ui深思熟虑的结果。
269
+
270
+ index.vue
271
+
272
+ ```vue
273
+ <template>
274
+ <view class="content">
275
+ <demo ref="demoRef" :show="show"></demo>
276
+ <button @click="handle">执行</button>
277
+ </view>
278
+ </template>
279
+ <script setup>
280
+ import { ref } from "vue";
281
+ const show = ref(false);
282
+ const demoRef = ref(null);
283
+ function handle() {
284
+ show.value = true;
285
+ demoRef.value.open();
286
+ }
287
+
288
+ </script>
289
+ ```
290
+
291
+ demo组件:
292
+ ```vue
293
+ <template></template>
294
+ <script setup>
295
+ function open() {
296
+ console.log('监听open方法执行');
297
+ }
298
+
299
+ </script>
300
+ ```
@@ -0,0 +1,169 @@
1
+ ## QRCode 二维码 <to-api/>
2
+
3
+ <demo-model url="/pages/componentsA/qrcode/qrcode"></demo-model>
4
+
5
+ ::: tip ✈
6
+
7
+ **组件名:uv-qrcode**
8
+
9
+ [点击下载&安装](https://ext.dcloud.net.cn/plugin?name=uv-qrcode)
10
+
11
+ :::
12
+
13
+ 组件是超级强大的二维码生成功能,可扩展性高。自定义二维码样式,如随机颜色、圆点、方块、块与块之间的间距等,具体下方有说明。
14
+
15
+ **此组件源于开源的优秀作品[uQRCode](https://ext.dcloud.net.cn/plugin?id=1287),`uv-ui`只做了部分优化。本文档只对`uni-app`组件方式等重要的功能进行介绍,如果需要原生方法或更详细的说明,请参考[uQRCode官方文档](https://uqrcode.cn/doc/document/uni-app.html)。**
16
+
17
+
18
+ ### 平台兼容性
19
+
20
+ |App(vue)|App(nvue)|H5|小程序|VUE2|VUE3|
21
+ |:-:|:-:|:-:|:-:|:-:|:-:|
22
+ |√|√|√|√|√|√|
23
+
24
+ :::warning 注意事项
25
+ > 为了避免错误使用,给大家带来不好的开发体验,请在使用组件前仔细阅读下面的注意事项,可以帮你避免一些错误。
26
+ 1. 在`nvue`中使用该组件,会有报错提示`reportJSException >>>> exception function:gcanvas setBackGround for android view, exception:WX_RENDER_ERR_TEXTURE_SETBACKGROUND: TextureView doesn't support displaying a background drawable!`。
27
+ 该报错完全不影响使用,是因为`weex`中使用`gcanvas`的BUG,只要用到gcanvas都会有,不影响应用,可以无视。
28
+ 2. `options`属性设置size属性暂时不生效,直接在组件上设置size即可`<uv-qrcode size="300" ...`。
29
+ 3. nvue本地运行有二维码,打包后没有二维码,解决方案参考:[nvue打包后生成失败](https://uqrcode.cn/doc/guide/common-problem.html#nvue%E6%89%93%E5%8C%85%E5%90%8E%E7%94%9F%E6%88%90%E5%A4%B1%E8%B4%A5)
30
+ :::
31
+
32
+ ### 基本使用
33
+
34
+ 二维码默认尺寸为 `200px` ,可以根据设置 `size` 进行调整。下面有更多参数说明。
35
+
36
+ ```vue
37
+ <template>
38
+ <view>
39
+ <uv-qrcode ref="qrcode" size="300px" value="https://h5.uvui.cn"></uv-qrcode>
40
+ </view>
41
+ </template>
42
+ ```
43
+
44
+ ### 自定义样式
45
+
46
+ 二维码配置选项,可以配置`data`、`size`、`margin`等参数,具体参考下方参数说明。
47
+
48
+ ```vue
49
+ <template>
50
+ <view>
51
+ <uv-qrcode ref="qrcode" value="https://h5.uvui.cn" :options="options2"></uv-qrcode>
52
+ </view>
53
+ </template>
54
+ <script setup>
55
+ import { ref } from 'vue';
56
+
57
+ const qrcode = ref(null);
58
+ const options2 = ref({
59
+ data: 'https://www.uvui.cn',
60
+ size: 300,
61
+ useDynamicSize: false,
62
+ errorCorrectLevel: 'Q',
63
+ margin: 10,
64
+ areaColor: "#F95F6B",
65
+ backgroundColor: "#3c9cff",
66
+ // 指定二维码前景,一般可在中间放logo
67
+ foregroundImageSrc: 'https://www.uvui.cn/common/logo.png'
68
+ });
69
+
70
+ </script>
71
+ ```
72
+
73
+ ### 自定义风格
74
+
75
+ 通过内置 `registerStyle` 方法进行注册扩展插件,组件仅支持注册type为style的drawCanvas扩展,具体参考下方说明。
76
+
77
+ 下载更多风格的模板,可以到[uQRCode官方-风格下载](https://uqrcode.cn/doc/plugin/style.html) 。
78
+
79
+ 温馨提示:`options` 配置中的 `style` 与插件标识对应上,比如示例中的 `style: 'round'`,`round` 即是标识。
80
+
81
+ ```vue
82
+ <template>
83
+ <view>
84
+ <uv-qrcode ref="qrcode" value="https://h5.uvui.cn" :options="options3"></uv-qrcode>
85
+ </view>
86
+ </template>
87
+ <script setup>
88
+ import { ref } from 'vue';
89
+ import QRCodeStyleRound from './uqrcode.plugin.round.es.js';
90
+ import { onReady } from '@dcloudio/uni-app';
91
+
92
+ const qrcode = ref(null);
93
+ const options3 = ref({
94
+ style: 'round',
95
+ // 指定二维码前景,一般可在中间放logo
96
+ foregroundImageSrc: 'https://www.uvui.cn/common/logo.png'
97
+ });
98
+ onReady(() => {
99
+ /* 注册扩展插件 */
100
+ qrcode.value.registerStyle(QRCodeStyleRound); // qrcode为组件的ref名称
101
+ });
102
+
103
+ </script>
104
+ ```
105
+
106
+ ### 完整示例
107
+
108
+ ::: tip 完整示例下载地址
109
+
110
+ [https://ext.dcloud.net.cn/plugin?name=uv-ui](https://ext.dcloud.net.cn/plugin?name=uv-ui)
111
+
112
+ :::
113
+
114
+ ### API
115
+ ---
116
+
117
+ ### QRCode Props
118
+
119
+ | 参数 | 说明 | 类型 | 默认值 | 可选值 |
120
+ | :- | :- | :- | :- | :- |
121
+ | value | 二维码内容 | String | - | - |
122
+ | options | 二维码配置选项 | Object | - | 参考[uQRCode官方基本配置](https://uqrcode.cn/doc/document/native.html#%E5%9F%BA%E6%9C%AC%E9%85%8D%E7%BD%AE) |
123
+ | size | 二维码尺寸,单位可以是px,rpx | String &#124; Number | 200 | - |
124
+ | fileType | 导出的文件类型 | String | png | png &#124; jpg |
125
+ | start | 是否初始化组件后就开始生成 | Boolean | true | true &#124; false |
126
+ | auto | 是否数据发生改变自动重绘 | Boolean | true | true &#124; false |
127
+ | hide | 隐藏组件 | Boolean | false | true &#124; false |
128
+ | type | canvas 类型,微信小程序默认使用2d,其他为normal | String | - | 2d &#124; normal |
129
+ | queue | 队列绘制,主要针对nvue端 | Boolean | false | true &#124; false |
130
+ | isQueueLoadImage | 是否队列加载图片,可减少canvas发起的网络资源请求,节省服务器资源 | Boolean | false | true &#124; false |
131
+ | loading | loading状态 | Boolean | true | true &#124; false |
132
+ | h5SaveIsDownload | H5保存即自动下载(在支持的环境下),默认false为仅弹层提示用户需要长按图片保存,不会自动下载 | Boolean | false | true &#124; false |
133
+ | h5DownloadName | H5下载名称 | String | uvQRCode | - |
134
+ | h5SaveTip(1.0.3) | H5保存二维码时候是否显示提示 | Boolean | true | true &#124; false |
135
+
136
+ ### QRCode Methods
137
+
138
+ |事件名 |说明 |使用方法 |
139
+ |:- |:- |:- |
140
+ | make() | 生成二维码 | `qrcode.value?.make({ success: () => console.log('生成成功'), fail: err => console.log(err) })` |
141
+ | remake() | 重新生成二维码 | `qrcode.value?.remake({ success: () => console.log('生成成功'), fail: err => console.log(err) })` |
142
+ | toTempFilePath() | 导出临时文件路径。请在 complete 事件返回success=true后调用。 | `qrcode.value?.toTempFilePath({ success: res => console.log(res) })` |
143
+ | save() | 保存二维码到本地相册。为了保证方法调用成功,请在 complete 事件返回success=true后调用。| `qrcode.value?.save({ success: res => console.log(res) })` |
144
+ | registerStyle() | 注册扩展插件,组件仅支持注册type为style的drawCanvas扩展。 | 参考上面的案例[自定义风格](/components/qrcode.html#自定义风格)。下载更多风格的模板,可以到[uQRCode官方-风格](https://uqrcode.cn/doc/plugin/style.html) |
145
+ ### QRCode Events
146
+
147
+ |事件名 |说明 |回调参数 |
148
+ |:- |:- |:- |
149
+ | @complete | 生成完成时触发 | { success: true &#124; false } |
150
+ | @click | 点击组件时触发 | - |
151
+ | @change | 重绘时触发 | - |
152
+
153
+ ### QRCode Slots
154
+
155
+ |事件名 |说明 |
156
+ |:- |:- |
157
+ | loading | 自定义加载中的提示内容 |
158
+
159
+ <style scoped>
160
+ h3[id=qrcode-methods] + table thead tr th:nth-child(1) {
161
+ width: 20%;
162
+ }
163
+ h3[id=qrcode-methods] + table thead tr th:nth-child(3) {
164
+ width: 40%;
165
+ }
166
+ h3[id=qrcode-slots] + table thead tr th:nth-child(2) {
167
+ width: 80%;
168
+ }
169
+ </style>