@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.
- package/CHANGELOG.md +8 -0
- package/LICENSE +21 -21
- package/README.md +95 -141
- package/components/uv-overlay/props.js +29 -24
- package/components/uv-overlay/uv-overlay.vue +87 -85
- package/docs/api/configs/color.md +52 -0
- package/docs/api/index.md +77 -0
- package/docs/api/mixins/mpShare.md +95 -0
- package/docs/api/request/apiManage.md +88 -0
- package/docs/api/request/http.md +451 -0
- package/docs/api/utils/colorSwitch.md +78 -0
- package/docs/api/utils/debounce.md +104 -0
- package/docs/api/utils/fastUse.md +246 -0
- package/docs/api/utils/getRect.md +238 -0
- package/docs/api/utils/guid.md +41 -0
- package/docs/api/utils/index.md +55 -0
- package/docs/api/utils/intro.md +25 -0
- package/docs/api/utils/object.md +171 -0
- package/docs/api/utils/queryParams.md +68 -0
- package/docs/api/utils/random.md +23 -0
- package/docs/api/utils/randomArray.md +28 -0
- package/docs/api/utils/route.md +121 -0
- package/docs/api/utils/test.md +237 -0
- package/docs/api/utils/time.md +81 -0
- package/docs/api/utils/trim.md +24 -0
- package/docs/components/actionSheet.md +236 -0
- package/docs/components/addQQGroup.md +5 -0
- package/docs/components/album.md +91 -0
- package/docs/components/alert.md +83 -0
- package/docs/components/avatar.md +152 -0
- package/docs/components/backTop.md +181 -0
- package/docs/components/badge.md +117 -0
- package/docs/components/button.md +196 -0
- package/docs/components/calendar.md +398 -0
- package/docs/components/calendars.md +294 -0
- package/docs/components/cell.md +185 -0
- package/docs/components/checkbox.md +281 -0
- package/docs/components/circleProgress.md +5 -0
- package/docs/components/code.md +162 -0
- package/docs/components/codeInput.md +175 -0
- package/docs/components/collapse.md +250 -0
- package/docs/components/color.md +324 -0
- package/docs/components/common.md +126 -0
- package/docs/components/countDown.md +166 -0
- package/docs/components/countTo.md +140 -0
- package/docs/components/datetimePicker.md +283 -0
- package/docs/components/diff1.x.md +190 -0
- package/docs/components/divider.md +88 -0
- package/docs/components/downloadSetting.md +54 -0
- package/docs/components/dropDown.md +375 -0
- package/docs/components/empty.md +99 -0
- package/docs/components/feature.md +261 -0
- package/docs/components/form.md +736 -0
- package/docs/components/gap.md +49 -0
- package/docs/components/grid.md +225 -0
- package/docs/components/icon.md +101 -0
- package/docs/components/image.md +182 -0
- package/docs/components/index.md +110 -0
- package/docs/components/indexList.md +133 -0
- package/docs/components/input.md +250 -0
- package/docs/components/install.md +59 -0
- package/docs/components/intro.md +32 -0
- package/docs/components/keyboard.md +226 -0
- package/docs/components/layout.md +310 -0
- package/docs/components/line.md +85 -0
- package/docs/components/lineProgress.md +141 -0
- package/docs/components/link.md +89 -0
- package/docs/components/list.md +223 -0
- package/docs/components/loadMore.md +140 -0
- package/docs/components/loadingIcon.md +144 -0
- package/docs/components/loadingPage.md +92 -0
- package/docs/components/modal.md +230 -0
- package/docs/components/more.md +13 -0
- package/docs/components/navbar.md +192 -0
- package/docs/components/noNetwork.md +116 -0
- package/docs/components/noticeBar.md +131 -0
- package/docs/components/notify.md +204 -0
- package/docs/components/npmSetting.md +64 -0
- package/docs/components/numberBox.md +257 -0
- package/docs/components/nvue.md +170 -0
- package/docs/components/overlay.md +117 -0
- package/docs/components/parse.md +204 -0
- package/docs/components/pickColor.md +112 -0
- package/docs/components/picker.md +357 -0
- package/docs/components/popup.md +221 -0
- package/docs/components/problem.md +300 -0
- package/docs/components/qrcode.md +169 -0
- package/docs/components/quickstart.md +33 -0
- package/docs/components/radio.md +256 -0
- package/docs/components/rate.md +128 -0
- package/docs/components/read.md +163 -0
- package/docs/components/readMore.md +227 -0
- package/docs/components/resource.md +17 -0
- package/docs/components/scrollList.md +218 -0
- package/docs/components/search.md +160 -0
- package/docs/components/setting.md +111 -0
- package/docs/components/settingDesc.md +66 -0
- package/docs/components/skeleton.md +105 -0
- package/docs/components/skeletons.md +323 -0
- package/docs/components/slider.md +157 -0
- package/docs/components/steps.md +189 -0
- package/docs/components/sticky.md +76 -0
- package/docs/components/subsection.md +183 -0
- package/docs/components/swipeAction.md +279 -0
- package/docs/components/swiper.md +352 -0
- package/docs/components/switch.md +216 -0
- package/docs/components/tabbar.md +263 -0
- package/docs/components/table.md +5 -0
- package/docs/components/tabs.md +364 -0
- package/docs/components/tag.md +227 -0
- package/docs/components/testPic.md +20 -0
- package/docs/components/text.md +157 -0
- package/docs/components/textarea.md +121 -0
- package/docs/components/toast.md +124 -0
- package/docs/components/tooltip.md +98 -0
- package/docs/components/transition.md +404 -0
- package/docs/components/upload.md +253 -0
- package/docs/components/vtabs.md +332 -0
- package/docs/components/vueUse.md +45 -0
- package/docs/components/vuexDetail.md +103 -0
- package/docs/components/waterfall.md +651 -0
- package/docs/faq/index.md +53 -0
- package/docs/guide/codeHint.md +44 -0
- package/docs/guide/customIcon.md +168 -0
- package/docs/guide/demo.md +92 -0
- package/docs/guide/design.md +56 -0
- package/docs/guide/globalVariable.md +239 -0
- package/docs/guide/i18n.md +194 -0
- package/docs/guide/index.md +28 -0
- package/docs/guide/note.md +74 -0
- package/docs/guide/safeAreaInset.md +64 -0
- package/docs/guide/theme.md +67 -0
- package/docs/index.md +88 -0
- package/libs/config/config.js +0 -10
- package/libs/css/color.scss +15 -14
- package/package.json +7 -2
- package/theme.scss +2 -1
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
## HBuilder X对uv-ui的代码提示
|
|
2
|
+
|
|
3
|
+
<!-- <demo-model url="/"></demo-model> -->
|
|
4
|
+
|
|
5
|
+
uv-ui发布一周后, 迅速适配了HX的代码提示功能,让用户可以更简单,畅快的使用uv-ui的组件,这个提示功能有如下特色:
|
|
6
|
+
|
|
7
|
+
- 通过敲`<u`关键字(无需`<uv-`后面的`-`),HX会通过弹出提示列出uv-ui的所有组件
|
|
8
|
+
- 可以在提示中一键直达对应组件的官方文档
|
|
9
|
+
- 提示中有完整的参数类型、 说明,事件描述等提示
|
|
10
|
+
- 无需给HX安装插件和设置,即可拥有以上提示功能
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
### 触发提示
|
|
14
|
+
|
|
15
|
+
在"*.vue"文件的模板编写区域,通过`<u`开头的关键字,就能 触发uv-ui的组件候选列表:
|
|
16
|
+
- 如果想得到更准确的提示,可以完整敲出组件名称,如`<uv-badge`就会弹出唯一的提示,此时回车即可键入。
|
|
17
|
+
- 如果对某一个组件的名称记忆不清,可凭借大概的字符输入,HX会按模糊搜索的方式进行匹配可能的组件选项,比如`uv-alert-tips`组件,我们可以敲`<uv-altip`,
|
|
18
|
+
`<uv-tips`,或者`<uv-aler`等等,都可识别出组件的提示,总的来说,以`<u`,开头,后面可以是组件的部分关键字,前中后部分都可,大家可自行尝试。
|
|
19
|
+
|
|
20
|
+
<img src="https://www.uvui.cn/code_hint/1.png"/>
|
|
21
|
+
|
|
22
|
+
<br><br>
|
|
23
|
+
|
|
24
|
+
### 一键在浏览器打开组件对应文档
|
|
25
|
+
|
|
26
|
+
当我们在HX匹配到某个组件后,提示框的右边会弹出此组件所在的文档地址,通过鼠标点击,即可在浏览器快速打开对应的文档。
|
|
27
|
+
|
|
28
|
+
<img src="https://www.uvui.cn/code_hint/2.png"/>
|
|
29
|
+
|
|
30
|
+
<br><br>
|
|
31
|
+
|
|
32
|
+
### 参数提示
|
|
33
|
+
|
|
34
|
+
当我们键入完整的组件结构后,通过`:`开头,即可列出组件的参数,右边有对应的类型和说明提示,还可以通过模糊的匹配的方式(敲出参数名称的部分字符),快速找到某一个参数。
|
|
35
|
+
|
|
36
|
+
<img src="https://www.uvui.cn/code_hint/3.png"/>
|
|
37
|
+
|
|
38
|
+
<br><br>
|
|
39
|
+
|
|
40
|
+
### 事件提示
|
|
41
|
+
|
|
42
|
+
某些组件有回调事件,通过`@`开头,即可列出对应的事件名称,右边有事件对应的说明,回车即可自动键入。
|
|
43
|
+
|
|
44
|
+
<img src="https://www.uvui.cn/code_hint/4.png"/>
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
## 目录
|
|
2
|
+
|
|
3
|
+
- [vue中自定义图标库](/guide/customIcon.html#基础说明)
|
|
4
|
+
- [nvue中自定义图标库](/guide/customIcon.html#nvue中自定义图标库)
|
|
5
|
+
|
|
6
|
+
## CustomIcon 扩展自定义图标库
|
|
7
|
+
|
|
8
|
+
<!-- <demo-model url="/pages/componentsA/icon/index"></demo-model> -->
|
|
9
|
+
<br>
|
|
10
|
+
|
|
11
|
+
::: danger 注意
|
|
12
|
+
`nvue`页面暂时不支持自定义图标,如需在 nvue 中使用 ,请自行引入字体文件,[具体方法在最下方](/guide/customIcon.html#nvue中自定义图标库)。
|
|
13
|
+
|
|
14
|
+
:::
|
|
15
|
+
|
|
16
|
+
uv-ui已通过大量的实践中,收集了用户最有可能需要用到的图标,见[Icon 图标](/components/icon.html),但我们也相信,它肯定无法覆盖所有的场景和需求。
|
|
17
|
+
|
|
18
|
+
用户也可以使用标签的方式,自行引入字体图标,为何要通过扩展的方式集成呢?
|
|
19
|
+
这是因为uv-ui有统一的字体图标组件,使用方便,配置灵活,且风格统一。
|
|
20
|
+
|
|
21
|
+
:::tip 说明
|
|
22
|
+
以下说明和演示,均针对[阿里字体图标库](https://www.iconfont.cn),其他字体库源同理
|
|
23
|
+
:::
|
|
24
|
+
|
|
25
|
+
总的来说,我们要实现的效果如下:
|
|
26
|
+
|
|
27
|
+
```css
|
|
28
|
+
@font-face {
|
|
29
|
+
/* 声明"custom-icon"字体 */
|
|
30
|
+
font-family: "custom-icon";
|
|
31
|
+
src: url('data:application/x-font-woff2;charset=utf-8;base64,xxxxxxxx') format('woff2');
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
.custom-icon {
|
|
35
|
+
/* 引用上面声明的"custom-icon"字体 */
|
|
36
|
+
font-family: "custom-icon" !important;
|
|
37
|
+
font-size: 16px;
|
|
38
|
+
font-style: normal;
|
|
39
|
+
-webkit-font-smoothing: antialiased;
|
|
40
|
+
-moz-osx-font-smoothing: grayscale;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/* 字体图标的前缀为"custom-icon-" */
|
|
44
|
+
.custom-icon-copy:before {
|
|
45
|
+
content: "\e641";
|
|
46
|
+
}
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
通过如下方式引用:
|
|
50
|
+
|
|
51
|
+
通过`custom-prefix`指定类名为`custom-icon`
|
|
52
|
+
|
|
53
|
+
```vue
|
|
54
|
+
<uv-icon name="copy" custom-prefix="custom-icon"></uv-icon>
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
### 基础说明
|
|
58
|
+
|
|
59
|
+
我们假定您一个项目中,需要扩展多个图标,所以您应该把各个图标收集进一个阿里图标库的项目中,即使您后面不断的扩展图标,也能让它们在同一个库中。
|
|
60
|
+
|
|
61
|
+
一般情况下,我们建议您在收藏的项目中,使用"下载至本地"的功能,而后解压,复制文件夹中的"iconfont.css"至uni-app目中(其余的文件可忽略)
|
|
62
|
+
|
|
63
|
+
下面的操作默认您已进入阿里图标库的"图标管理"栏目中
|
|
64
|
+
|
|
65
|
+
1. 我们建议,您应该修改这个图标的前缀,这样以后有新图标加入的时候,不用每次频繁修改前缀,在右上角的"项目设置",进入"编辑项目":
|
|
66
|
+
|
|
67
|
+
<img src="https://www.uvui.cn/custom_icon/custom_icon_3.png" />
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
2. 修改"FontClass/Symbol 前缀"项为"custom-icon-",修改"Font Family"为"custom-icon",如下图:
|
|
71
|
+
|
|
72
|
+
<img src="https://www.uvui.cn/custom_icon/custom_icon_4.png" />
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
3. 下载项目至本地
|
|
76
|
+
|
|
77
|
+
<img src="https://www.uvui.cn/custom_icon/custom_icon_1.png" />
|
|
78
|
+
|
|
79
|
+
4. 复制"iconfont.css"至项目,一般放在根目录的`static`文件夹下
|
|
80
|
+
|
|
81
|
+
<img src="https://www.uvui.cn/custom_icon/custom_icon_2.png" />
|
|
82
|
+
|
|
83
|
+
5. 复制"iconfont.css"文件到uni-app目根目录的`static`目录后(也可以为其他目录),打开"iconfont.css",内部如下:
|
|
84
|
+
|
|
85
|
+
**删掉下图圈出的部分,记得把"src: url('data:application/x-font-woff2......"最后的逗号`,`改成分号`;`。**
|
|
86
|
+
|
|
87
|
+
<img src="https://www.uvui.cn/custom_icon/custom_icon_8.png" />
|
|
88
|
+
|
|
89
|
+
6. **最终如下图:这行比较长,一定要将末尾的逗号变成了分号。==================》很重要,由于文本较长,可能忽略**
|
|
90
|
+
|
|
91
|
+
<img src="https://www.uvui.cn/custom_icon/custom_icon_9.png" />
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
7. 在项目根目录的"App.vue"中,引入上述的"iconfont.css",注意自己存放的路径,且通过"@import"引入的外部样式,为了兼容性建议使用相对路径,
|
|
95
|
+
且引入的样式,需要写在`style`标签有效内容中的最前面,如下:
|
|
96
|
+
|
|
97
|
+
```css
|
|
98
|
+
/* App.vue */
|
|
99
|
+
<style>
|
|
100
|
+
/* 此处为style标签里面的最上面 */
|
|
101
|
+
@import "@/static/iconfont.css";
|
|
102
|
+
...
|
|
103
|
+
</style>
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
8. 在页面通过uv-ui的[Icon](/components/icon.html)组件使用图标,图标名称为您在阿里图标库中点击"编辑图标"时的"Font Class / Symbol"(该值可修改,每次修改都需重新下载"iconfont.css"放到uni-app目中,
|
|
107
|
+
覆盖原来的"iconfont.css")
|
|
108
|
+
|
|
109
|
+
<img src="https://www.uvui.cn/custom_icon/custom_icon_7.png" />
|
|
110
|
+
|
|
111
|
+
如上图,我们得到"backspace"值,使用如下:
|
|
112
|
+
|
|
113
|
+
```vue
|
|
114
|
+
<uv-icon name="backspace" custom-prefix="custom-icon" size="30" color="#888888"></uv-icon>
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
从上可以看出,相比uv-ui内置的图标使用,多了一句固定的`custom-prefix="custom-icon"`,其余使用方法完全相同
|
|
118
|
+
<br><br>
|
|
119
|
+
|
|
120
|
+
**注意**:执行完上面的操作后,您就可以随心所欲的扩展自己的图标了,最重要的是第二步,修改了它,就免了以后每次都要修改"iconfont.css"的多处细节。
|
|
121
|
+
当然,每次新增图标,当您把"iconfont.css"复制至项目中覆盖原来的"iconfont.css"后,都需要执行一遍第5步删掉多余的内容,别忘了修改最后的`,`为`;`。
|
|
122
|
+
|
|
123
|
+
最后提一下,为了多平台兼容性,您应该仅把单色图标添加到阿里图标库的项目中,即使添加了多色的图标,在使用中,也会被转成单色。
|
|
124
|
+
|
|
125
|
+
祝您使用愉快!
|
|
126
|
+
|
|
127
|
+
## NVUE中自定义图标库
|
|
128
|
+
|
|
129
|
+
在项目实战中使用了`uv-ui`的图标库,如果图标不够用需要自定义,上述vue中自定义图标比较简单,在nvue中自定义图标有所不同,下面是详细步骤:
|
|
130
|
+
|
|
131
|
+
1. 将/uni_modules/uv-icon/components下面的uv-icon**复制一份**放到项目根目录components文件下,并命名成其他名称,例如:custom-icon
|
|
132
|
+
|
|
133
|
+
<img src="https://www.uvui.cn/custom_icon/custom_icon_nvue_1.png" style="width:40%;"/>
|
|
134
|
+
|
|
135
|
+
2. 下载iconfont,注意项目设置的Font Family要与后面修改的必须一致,在这里我们就修改成`custom-icon`。
|
|
136
|
+
|
|
137
|
+
<img src="https://www.uvui.cn/custom_icon/custom_icon_nvue_2.png" style="width:60%;" />
|
|
138
|
+
|
|
139
|
+
3. 删除一起复制过来的icons.js、uvicons.ttf,将下载的iconfont.ttf放入custom-icon目录下,然后替换ttf地址:
|
|
140
|
+
|
|
141
|
+
<img src="https://www.uvui.cn/custom_icon/custom_icon_nvue_3.png" style="width:60%;" />
|
|
142
|
+
|
|
143
|
+
4. 将该文件中的46行、194行的uvicon-iconfont均修改成custom-icon(因为我们在第2步中设置的custom-icon)。
|
|
144
|
+
|
|
145
|
+
<img src="https://www.uvui.cn/custom_icon/custom_icon_nvue_4.png" style="width:60%;" />
|
|
146
|
+
<img src="https://www.uvui.cn/custom_icon/custom_icon_nvue_5.png" style="width:60%;" />
|
|
147
|
+
|
|
148
|
+
5. 将51行`import icons from './icons'`代码删除或者注释,然后将136行代码改成`const code = null`。
|
|
149
|
+
|
|
150
|
+
<img src="https://www.uvui.cn/custom_icon/custom_icon_nvue_6.png" style="width:60%;" />
|
|
151
|
+
<img src="https://www.uvui.cn/custom_icon/custom_icon_nvue_7.png" style="width:60%;" />
|
|
152
|
+
|
|
153
|
+
6. 最后就是使用图标,`name`属性需要传入unicode码,如下:
|
|
154
|
+
|
|
155
|
+
```vue
|
|
156
|
+
<custom-icon name="e897"></custom-icon>
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
### nvue自定义图标工程化包
|
|
160
|
+
|
|
161
|
+
上述方法可能对于很多小伙伴不好实现,会遇到问题,作者直接把做好的包放到了git上面了,直接拉取下来放到自己项目就可以使用:[https://gitee.com/climblee/uv-custom-icon.git
|
|
162
|
+
](https://gitee.com/climblee/uv-custom-icon.git)
|
|
163
|
+
|
|
164
|
+
但是字体图标下载之前需要做相应的设置,如下:
|
|
165
|
+
|
|
166
|
+
**Tips:**
|
|
167
|
+
- 按照上面的第2步骤,将FontClass/Symbol 前缀改成:uv-custom-icon-,将Font Family改成:uv-custom-icon
|
|
168
|
+
- 组件里面引入图标的路径是`@/static/iconfont.ttf`,所以你只需要下载自己的字体图标`iconfont.ttf`文件放到相应目录下就好了。
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
## 演示
|
|
2
|
+
|
|
3
|
+
uv-ui会将各个版本的演示在此展示,目前演示的版本有H5,其他版本的演示将会陆续添加。
|
|
4
|
+
|
|
5
|
+
### 使用方法
|
|
6
|
+
|
|
7
|
+
- H5版本可以用微信或者手机浏览器扫描二维码即可
|
|
8
|
+
<!-- - 微信小程序只能通过微信扫码查看 -->
|
|
9
|
+
<!-- - 安卓版本只能在安卓使用,可以用安卓浏览器或者QQ扫码进行安装(**微信中不能扫码安装**),安装过程中您可能需要勾选相应的提示,允许安装来自非应用市场的APP,或者您需要在`设置`中打开
|
|
10
|
+
[允许安装来自未知来源的应用](https://www.pc841.com/shoujijiqiao/45848.html) -->
|
|
11
|
+
|
|
12
|
+
### 说明
|
|
13
|
+
|
|
14
|
+
文档中也有相应的演示示例,但它是通过`iframe`嵌入到网页,所以可能会造成某些uni-app API在网页上(浏览器F12手机调试模式无问题)无法使用,造成组件有BUG的错觉。
|
|
15
|
+
|
|
16
|
+
**注意:** 建议您只在浏览文档时使用文档右侧的演示功能,电脑示例由于分辨率和uni-app用`rpx`单位的问题,显示可能会不够细致<!-- ,请通过微信扫码小程序体验最佳的效果 -->。
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
### 扫码
|
|
20
|
+
|
|
21
|
+
<div class="demo-wrap row">
|
|
22
|
+
<div class="col-md-3 col-sm-6 col-xs-12">
|
|
23
|
+
<div class="demo-item">
|
|
24
|
+
<img src="https://www.uvui.cn/common/wx.png" />
|
|
25
|
+
<div class="platform-name">
|
|
26
|
+
微信小程序
|
|
27
|
+
<p class="platform-tips">只能微信扫码</p>
|
|
28
|
+
</div>
|
|
29
|
+
</div>
|
|
30
|
+
</div>
|
|
31
|
+
<div class="col-md-3 col-sm-6 col-xs-12">
|
|
32
|
+
<div class="demo-item">
|
|
33
|
+
<img src="https://www.uvui.cn/common/h5.png" />
|
|
34
|
+
<div class="platform-name">
|
|
35
|
+
H5
|
|
36
|
+
<p class="platform-tips">微信或浏览器扫码</p>
|
|
37
|
+
</div>
|
|
38
|
+
</div>
|
|
39
|
+
</div>
|
|
40
|
+
<div class="col-md-3 col-sm-6 col-xs-12">
|
|
41
|
+
<div class="demo-item">
|
|
42
|
+
<img src="https://www.uvui.cn/common/app.png" />
|
|
43
|
+
<div class="platform-name">
|
|
44
|
+
安卓
|
|
45
|
+
<p class="platform-tips">浏览器扫码安装(微信扫码无效)</p>
|
|
46
|
+
</div>
|
|
47
|
+
</div>
|
|
48
|
+
</div>
|
|
49
|
+
</div>
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
<style scoped>
|
|
53
|
+
.demo-item {
|
|
54
|
+
text-align: center;
|
|
55
|
+
border: 1px solid #eaeefb;
|
|
56
|
+
border-radius: 5px;
|
|
57
|
+
-webkit-transition: bottom 0.4s;
|
|
58
|
+
transition: bottom 0.4s;
|
|
59
|
+
position: relative;
|
|
60
|
+
bottom: 0;
|
|
61
|
+
margin: 1.5rem;
|
|
62
|
+
padding: 2rem 0;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
.demo-item:hover {
|
|
66
|
+
bottom: 6px;
|
|
67
|
+
box-shadow: 0 6px 18px 0 rgba(232, 237, 250, .5);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
.demo-item img {
|
|
71
|
+
width: 160px;
|
|
72
|
+
margin: auto;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
.demo-item .platform-name {
|
|
76
|
+
color: #606266;
|
|
77
|
+
font-size: 18px;
|
|
78
|
+
position: relative;
|
|
79
|
+
margin: 20px 0;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
.demo-item .platform-tips {
|
|
83
|
+
text-align: center;
|
|
84
|
+
position: absolute;
|
|
85
|
+
font-size: 14px;
|
|
86
|
+
bottom: -50px;
|
|
87
|
+
left: auto;
|
|
88
|
+
width: 100%;
|
|
89
|
+
right: auto;
|
|
90
|
+
color: #909399;
|
|
91
|
+
}
|
|
92
|
+
</style>
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
## 设计理念
|
|
2
|
+
|
|
3
|
+
#### 导航栏
|
|
4
|
+
|
|
5
|
+
uniapp可以通过配置`pages.json`生成原生元素的导航栏,简要说明如下:
|
|
6
|
+
- 优点是可以快速渲染,配置便捷,还可以带入一部分原生内容(针对App Store)
|
|
7
|
+
- 缺点是配置不够灵活,遮罩无法覆盖导航栏等
|
|
8
|
+
|
|
9
|
+
建议:
|
|
10
|
+
- 如果开发者使用nvue,可以直接自定义导航栏,无需使用uniapp自带的
|
|
11
|
+
- 如果是普通的vue页面,直接使用uniapp自带导航栏。如果自带的不能满足,条件允许就用`subNVue`绘制,否则就用普通元素绘制
|
|
12
|
+
|
|
13
|
+
说明:uni官方有关于导航栏的详细说明,请参见[自定义导航栏](https://uniapp.dcloud.io/collocation/pages?id=customnav)
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
#### 关于nvue
|
|
17
|
+
|
|
18
|
+
nvue源自于uniapp引入的阿里weex开源原生渲染引擎,单weex来说,是不推荐使用的,因为它没有周边的生态和第三方的功能。
|
|
19
|
+
uniapp引入weex之后,一直在整合,但也没有对weex进行定制开发,在APP端某些需要性能相关的可以使用nvue,以下是我们对nvue的一些见解:
|
|
20
|
+
- nvue具有媲美`react native`的性能,uniapp一直在打通vue和nvue的壁垒
|
|
21
|
+
- nvue页面中还不能像写vue一样便利,比如对样式的限制,api还不能和vue完全互通等
|
|
22
|
+
|
|
23
|
+
建议:uniapp一直在强化vue,重心不在nvue,如果不是特别复杂的应用,可以直接使用vue开发,应用的首页(V3版本)使用`nvue`,渲染的速度会有显著的提升,
|
|
24
|
+
如果有需要进一步了解,请参见[nvue开发与vue开发的常见区别](https://uniapp.dcloud.io/use-weex?id=nvue开发与vue开发的常见区别)
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
#### 关于单位
|
|
28
|
+
|
|
29
|
+
我们在web中,常用的是`px`,`rem`等单位,`rem`在uniapp中不推荐使用,我们分别做如下阐述:
|
|
30
|
+
|
|
31
|
+
web中:
|
|
32
|
+
可以使用`px`,它属于静态单位,它的最终呈现尺寸不会和屏幕尺寸有关系
|
|
33
|
+
|
|
34
|
+
uniapp中(vue和nvue):
|
|
35
|
+
`px`属于静态单位,uni中还有`upx`和`rpx`单位,`upx`为uniapp成立之初的动态单位,后来各家小程序跟随微信小程序,都使用
|
|
36
|
+
`rpx`单位,使它成为了既定的事实标准,uniapp也就提倡并官宣使用`rpx`单位,但是`upx`也一样能使用,和`rpx`效果相同。
|
|
37
|
+
另外:uniapp,vh和vw也完全可以使用的,一般我们需要让某个元素高度铺满整个屏幕时,可以设置高度为`100vh`。
|
|
38
|
+
|
|
39
|
+
weex中:
|
|
40
|
+
这里说的是阿里的weex,而不是uniapp改良后的nvue版本中的weex,它的`px`单位和uniapp中的`rpx`或者`upx`是一样的,也属于
|
|
41
|
+
动态单位,它自创了个`wx`单位,和web中的`px`一样,属于静态单位。
|
|
42
|
+
说明:uniapp的nvue版本中,虽然也是引入weex,但是改良后,没有了`wx`,`nvue`的`rpx`(`upx`)与`px`和uniapp的vue版本单位效果一致。
|
|
43
|
+
|
|
44
|
+
建议:开发中,只需谨记两个单位,`px`和`rpx`,一般情况下,我们推荐字体和宽高等,都使用`rpx`单位,如果真的需要固定尺寸,就是用`px`。
|
|
45
|
+
如果关于各单位和他们的由来历史,还需要进一步了解,可以参见[尺寸单位](https://uniapp.dcloud.io/frame?id=尺寸单位)
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
#### 布局
|
|
49
|
+
|
|
50
|
+
为兼容多端运行,我们建议开发者使用`flex`,不要使用`float`布局。移动端使用`flex`是没有顾虑的,而`flex`布局,可以达到事半功倍的效果。
|
|
51
|
+
如果不熟悉`flex`,可以参考[阮一峰的flex教程](http://www.ruanyifeng.com/blog/2015/07/flex-grammar.html)
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
#### 简要介绍 app.use 的原理
|
|
55
|
+
|
|
56
|
+
uv-ui 在 Vue 3 项目中通过 `app.use(uvUI)` 注册,我们想借此机会解释一下插件注册的基本原理,详见[简要介绍 app.use 的原理](/components/vueUse.html)
|
|
@@ -0,0 +1,239 @@
|
|
|
1
|
+
## 全局变量的实现方式
|
|
2
|
+
|
|
3
|
+
uni-app Vue 3 项目中,全局变量建议优先使用组合式状态、普通配置模块或 `getApp().globalData`。如果项目已经引入 Vuex,也可以用 Vuex 4 的 `useStore()` 在 `<script setup>` 中读取和修改状态。
|
|
4
|
+
|
|
5
|
+
常见方式:
|
|
6
|
+
|
|
7
|
+
1. 本地存储:适合 token、用户偏好等需要跨启动保存的数据。
|
|
8
|
+
2. 配置文件:适合接口域名、静态开关等构建期或运行期配置。
|
|
9
|
+
3. `app.config.globalProperties`:适合少量确实需要挂到组件实例上的全局能力。
|
|
10
|
+
4. `globalData`:适合 uni-app 全局数据,但它本身不是响应式。
|
|
11
|
+
5. Vuex/Pinia:适合需要响应式更新的全局状态。
|
|
12
|
+
|
|
13
|
+
### 本地存储
|
|
14
|
+
|
|
15
|
+
```js
|
|
16
|
+
uni.setStorageSync('token', 'value');
|
|
17
|
+
|
|
18
|
+
const token = uni.getStorageSync('token');
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
异步写法:
|
|
22
|
+
|
|
23
|
+
```js
|
|
24
|
+
uni.setStorage({
|
|
25
|
+
key: 'token',
|
|
26
|
+
data: 'value',
|
|
27
|
+
success() {
|
|
28
|
+
console.log('保存成功');
|
|
29
|
+
}
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
uni.getStorage({
|
|
33
|
+
key: 'token',
|
|
34
|
+
success(res) {
|
|
35
|
+
console.log(res.data);
|
|
36
|
+
}
|
|
37
|
+
});
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
### 配置文件
|
|
41
|
+
|
|
42
|
+
```js
|
|
43
|
+
// common/config.js
|
|
44
|
+
export default {
|
|
45
|
+
domain: 'https://www.example.com'
|
|
46
|
+
};
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
在页面中按需引入:
|
|
50
|
+
|
|
51
|
+
```vue
|
|
52
|
+
<script setup>
|
|
53
|
+
import { onLoad } from '@dcloudio/uni-app';
|
|
54
|
+
import config from '@/common/config.js';
|
|
55
|
+
|
|
56
|
+
onLoad(() => {
|
|
57
|
+
console.log(config.domain);
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
</script>
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
### app.config.globalProperties
|
|
64
|
+
|
|
65
|
+
如果确实需要挂载到组件实例上,Vue 3 使用 `app.config.globalProperties`:
|
|
66
|
+
|
|
67
|
+
```js
|
|
68
|
+
// main.js
|
|
69
|
+
import App from './App';
|
|
70
|
+
import { createSSRApp } from 'vue';
|
|
71
|
+
import config from '@/common/config.js';
|
|
72
|
+
|
|
73
|
+
export function createApp() {
|
|
74
|
+
const app = createSSRApp(App);
|
|
75
|
+
app.config.globalProperties.$domain = config.domain;
|
|
76
|
+
return { app };
|
|
77
|
+
}
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
在 `<script setup>` 中读取:
|
|
81
|
+
|
|
82
|
+
```vue
|
|
83
|
+
<template>
|
|
84
|
+
<view>域名:{{ domain }}</view>
|
|
85
|
+
</template>
|
|
86
|
+
|
|
87
|
+
<script setup>
|
|
88
|
+
import { getCurrentInstance } from 'vue';
|
|
89
|
+
import { onLoad } from '@dcloudio/uni-app';
|
|
90
|
+
|
|
91
|
+
const { proxy } = getCurrentInstance();
|
|
92
|
+
const domain = proxy.$domain;
|
|
93
|
+
|
|
94
|
+
onLoad(() => {
|
|
95
|
+
console.log(domain);
|
|
96
|
+
});
|
|
97
|
+
|
|
98
|
+
</script>
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
如果只是普通配置,优先直接 `import config`,不要为了少写一行 import 就挂到全局。
|
|
102
|
+
|
|
103
|
+
### globalData
|
|
104
|
+
|
|
105
|
+
`globalData` 简单直接,但不是响应式。页面返回或重新显示时,需要在 `onShow` 中重新同步到本页的响应式变量。
|
|
106
|
+
|
|
107
|
+
```vue
|
|
108
|
+
<!-- App.vue -->
|
|
109
|
+
<script setup>
|
|
110
|
+
import { onLaunch } from '@dcloudio/uni-app';
|
|
111
|
+
|
|
112
|
+
const app = getApp({ allowDefault: true });
|
|
113
|
+
app.globalData.userName = '白居易';
|
|
114
|
+
|
|
115
|
+
onLaunch(() => {
|
|
116
|
+
console.log(app.globalData.userName);
|
|
117
|
+
});
|
|
118
|
+
|
|
119
|
+
</script>
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
页面 A:
|
|
123
|
+
|
|
124
|
+
```vue
|
|
125
|
+
<template>
|
|
126
|
+
<view>作者是:{{ author }}</view>
|
|
127
|
+
</template>
|
|
128
|
+
|
|
129
|
+
<script setup>
|
|
130
|
+
import { ref } from 'vue';
|
|
131
|
+
import { onShow } from '@dcloudio/uni-app';
|
|
132
|
+
|
|
133
|
+
const author = ref('');
|
|
134
|
+
|
|
135
|
+
onShow(() => {
|
|
136
|
+
author.value = getApp().globalData.userName;
|
|
137
|
+
});
|
|
138
|
+
|
|
139
|
+
</script>
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
页面 B 修改:
|
|
143
|
+
|
|
144
|
+
```vue
|
|
145
|
+
<template>
|
|
146
|
+
<view>
|
|
147
|
+
<view>作者是:{{ author }}</view>
|
|
148
|
+
<uv-button @click="modifyUserName">修改 userName</uv-button>
|
|
149
|
+
</view>
|
|
150
|
+
</template>
|
|
151
|
+
|
|
152
|
+
<script setup>
|
|
153
|
+
import { ref } from 'vue';
|
|
154
|
+
import { onShow } from '@dcloudio/uni-app';
|
|
155
|
+
|
|
156
|
+
const author = ref('');
|
|
157
|
+
|
|
158
|
+
onShow(() => {
|
|
159
|
+
author.value = getApp().globalData.userName;
|
|
160
|
+
});
|
|
161
|
+
|
|
162
|
+
function modifyUserName() {
|
|
163
|
+
getApp().globalData.userName = '诗圣';
|
|
164
|
+
author.value = getApp().globalData.userName;
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
</script>
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
### Vuex 4
|
|
171
|
+
|
|
172
|
+
```js
|
|
173
|
+
// store/index.js
|
|
174
|
+
import { createStore } from 'vuex';
|
|
175
|
+
|
|
176
|
+
const store = createStore({
|
|
177
|
+
state: {
|
|
178
|
+
vuex_token: '123654789',
|
|
179
|
+
vuex_user: {
|
|
180
|
+
name: '白居易'
|
|
181
|
+
}
|
|
182
|
+
},
|
|
183
|
+
mutations: {
|
|
184
|
+
modifyToken(state, payload) {
|
|
185
|
+
state.vuex_token = payload.token;
|
|
186
|
+
},
|
|
187
|
+
modifyUserName(state, name) {
|
|
188
|
+
state.vuex_user.name = name;
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
});
|
|
192
|
+
|
|
193
|
+
export default store;
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
在 `main.js` 中注册:
|
|
197
|
+
|
|
198
|
+
```js
|
|
199
|
+
import App from './App';
|
|
200
|
+
import { createSSRApp } from 'vue';
|
|
201
|
+
import store from '@/store';
|
|
202
|
+
import uvUI from '@gmcb/uv-ui';
|
|
203
|
+
|
|
204
|
+
export function createApp() {
|
|
205
|
+
const app = createSSRApp(App);
|
|
206
|
+
app.use(store);
|
|
207
|
+
app.use(uvUI);
|
|
208
|
+
return { app };
|
|
209
|
+
}
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
页面中使用:
|
|
213
|
+
|
|
214
|
+
```vue
|
|
215
|
+
<template>
|
|
216
|
+
<view>
|
|
217
|
+
<view>Token 值为 {{ token }}</view>
|
|
218
|
+
<view>作者为 {{ userName }}</view>
|
|
219
|
+
<uv-button @click="btnClick">修改 Vuex 状态</uv-button>
|
|
220
|
+
</view>
|
|
221
|
+
</template>
|
|
222
|
+
|
|
223
|
+
<script setup>
|
|
224
|
+
import { computed } from 'vue';
|
|
225
|
+
import { useStore } from 'vuex';
|
|
226
|
+
|
|
227
|
+
const store = useStore();
|
|
228
|
+
const token = computed(() => store.state.vuex_token);
|
|
229
|
+
const userName = computed(() => store.state.vuex_user.name);
|
|
230
|
+
|
|
231
|
+
function btnClick() {
|
|
232
|
+
store.commit('modifyToken', { token: 'xxxyyyzzz' });
|
|
233
|
+
store.commit('modifyUserName', '诗圣');
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
</script>
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
如果项目只是需要 `@gmcb/uv-ui` 的工具方法,优先使用 `uni.$uv` 或按需导入工具函数;不要把业务状态挂到 `$uv` 上。
|