@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,194 @@
|
|
|
1
|
+
## I18n 多语言切换
|
|
2
|
+
|
|
3
|
+
本页示例面向 uni-app Vue 3 项目,使用 `vue-i18n@9` 与 `<script setup>`。
|
|
4
|
+
|
|
5
|
+
### 安装
|
|
6
|
+
|
|
7
|
+
```sh
|
|
8
|
+
npm install vue-i18n
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
### 创建 i18n
|
|
12
|
+
|
|
13
|
+
```js
|
|
14
|
+
// locale/index.js
|
|
15
|
+
import { createI18n } from 'vue-i18n';
|
|
16
|
+
import zh from './zh.js';
|
|
17
|
+
import en from './en.js';
|
|
18
|
+
|
|
19
|
+
export const i18n = createI18n({
|
|
20
|
+
legacy: false,
|
|
21
|
+
locale: 'zh',
|
|
22
|
+
messages: {
|
|
23
|
+
zh,
|
|
24
|
+
en
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
语言包示例:
|
|
30
|
+
|
|
31
|
+
```js
|
|
32
|
+
// locale/zh.js
|
|
33
|
+
export default {
|
|
34
|
+
lang: {
|
|
35
|
+
title: 'uv-ui',
|
|
36
|
+
intro: '多平台快速开发的 UI 框架'
|
|
37
|
+
},
|
|
38
|
+
tabBar: {
|
|
39
|
+
index: '首页',
|
|
40
|
+
news: '消息',
|
|
41
|
+
center: '我的'
|
|
42
|
+
}
|
|
43
|
+
};
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
在 `main.js` 中注册:
|
|
47
|
+
|
|
48
|
+
```js
|
|
49
|
+
import App from './App';
|
|
50
|
+
import { createSSRApp } from 'vue';
|
|
51
|
+
import uvUI from '@gmcb/uv-ui';
|
|
52
|
+
import { i18n } from '@/locale';
|
|
53
|
+
|
|
54
|
+
export function createApp() {
|
|
55
|
+
const app = createSSRApp(App);
|
|
56
|
+
app.use(uvUI);
|
|
57
|
+
app.use(i18n);
|
|
58
|
+
return { app };
|
|
59
|
+
}
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
### 在页面中使用
|
|
63
|
+
|
|
64
|
+
```vue
|
|
65
|
+
<template>
|
|
66
|
+
<view style="margin-top: 200rpx;">
|
|
67
|
+
{{ t('lang.intro') }}
|
|
68
|
+
</view>
|
|
69
|
+
</template>
|
|
70
|
+
|
|
71
|
+
<script setup>
|
|
72
|
+
import { onLoad } from '@dcloudio/uni-app';
|
|
73
|
+
import { useI18n } from 'vue-i18n';
|
|
74
|
+
|
|
75
|
+
const { t } = useI18n();
|
|
76
|
+
|
|
77
|
+
onLoad(() => {
|
|
78
|
+
console.log(t('lang.intro'));
|
|
79
|
+
});
|
|
80
|
+
|
|
81
|
+
</script>
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
### 切换语言
|
|
85
|
+
|
|
86
|
+
```vue
|
|
87
|
+
<template>
|
|
88
|
+
<view style="margin-top: 200rpx;">
|
|
89
|
+
{{ t('lang.intro') }}
|
|
90
|
+
<uv-button @click="switchLang">切换语言</uv-button>
|
|
91
|
+
</view>
|
|
92
|
+
</template>
|
|
93
|
+
|
|
94
|
+
<script setup>
|
|
95
|
+
import { useI18n } from 'vue-i18n';
|
|
96
|
+
|
|
97
|
+
const { t, locale } = useI18n();
|
|
98
|
+
|
|
99
|
+
function switchLang() {
|
|
100
|
+
locale.value = 'en';
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
</script>
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
### 响应式文本
|
|
107
|
+
|
|
108
|
+
不要把翻译结果一次性写进普通变量。需要随语言切换更新的内容,使用 `computed`:
|
|
109
|
+
|
|
110
|
+
```vue
|
|
111
|
+
<template>
|
|
112
|
+
<view style="margin-top: 200rpx;">
|
|
113
|
+
{{ intro }}
|
|
114
|
+
<uv-button @click="switchLang">切换语言</uv-button>
|
|
115
|
+
</view>
|
|
116
|
+
</template>
|
|
117
|
+
|
|
118
|
+
<script setup>
|
|
119
|
+
import { computed } from 'vue';
|
|
120
|
+
import { useI18n } from 'vue-i18n';
|
|
121
|
+
|
|
122
|
+
const { t, locale } = useI18n();
|
|
123
|
+
const intro = computed(() => t('lang.intro'));
|
|
124
|
+
|
|
125
|
+
function switchLang() {
|
|
126
|
+
locale.value = 'en';
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
</script>
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
### 设置导航栏标题
|
|
133
|
+
|
|
134
|
+
原生导航栏标题不是模板绑定内容,需要在页面显示或语言切换后主动调用 `uni.setNavigationBarTitle()`。
|
|
135
|
+
|
|
136
|
+
```vue
|
|
137
|
+
<template>
|
|
138
|
+
<view style="margin-top: 200rpx;">
|
|
139
|
+
{{ t('lang.intro') }}
|
|
140
|
+
<uv-button @click="switchLang">切换语言</uv-button>
|
|
141
|
+
</view>
|
|
142
|
+
</template>
|
|
143
|
+
|
|
144
|
+
<script setup>
|
|
145
|
+
import { onShow } from '@dcloudio/uni-app';
|
|
146
|
+
import { useI18n } from 'vue-i18n';
|
|
147
|
+
|
|
148
|
+
const { t, locale } = useI18n();
|
|
149
|
+
|
|
150
|
+
function setTitle() {
|
|
151
|
+
uni.setNavigationBarTitle({
|
|
152
|
+
title: t('lang.title')
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
onShow(() => {
|
|
157
|
+
setTitle();
|
|
158
|
+
});
|
|
159
|
+
|
|
160
|
+
function switchLang() {
|
|
161
|
+
locale.value = 'en';
|
|
162
|
+
setTitle();
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
</script>
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
### 设置原生 TabBar 文案
|
|
169
|
+
|
|
170
|
+
```vue
|
|
171
|
+
<template>
|
|
172
|
+
<view style="margin-top: 200rpx;">
|
|
173
|
+
<uv-button @click="switchLang">切换语言</uv-button>
|
|
174
|
+
</view>
|
|
175
|
+
</template>
|
|
176
|
+
|
|
177
|
+
<script setup>
|
|
178
|
+
import { useI18n } from 'vue-i18n';
|
|
179
|
+
|
|
180
|
+
const { t, locale } = useI18n();
|
|
181
|
+
|
|
182
|
+
function updateTabBar() {
|
|
183
|
+
uni.setTabBarItem({ index: 0, text: t('tabBar.index') });
|
|
184
|
+
uni.setTabBarItem({ index: 1, text: t('tabBar.news') });
|
|
185
|
+
uni.setTabBarItem({ index: 2, text: t('tabBar.center') });
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
function switchLang() {
|
|
189
|
+
locale.value = 'en';
|
|
190
|
+
updateTabBar();
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
</script>
|
|
194
|
+
```
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# 指南
|
|
2
|
+
|
|
3
|
+
本目录记录 `@gmcb/uv-ui` 的接入、主题、平台和开发约定。组件用法请查看 [组件](../components/index.md),工具函数请查看 [工具](/api/utils/index.md)。
|
|
4
|
+
|
|
5
|
+
## 接入
|
|
6
|
+
|
|
7
|
+
| 文档 | 说明 |
|
|
8
|
+
| --- | --- |
|
|
9
|
+
| [演示](./demo.md) | 示例项目和演示说明。 |
|
|
10
|
+
| [设计](./design.md) | 组件设计和平台适配约定。 |
|
|
11
|
+
| [扩展配置](../components/setting.md) | 注册插件、启用 `uni.$uv`、配置主题和默认 props。 |
|
|
12
|
+
| [代码提示](./codeHint.md) | 编辑器提示和类型辅助说明。 |
|
|
13
|
+
|
|
14
|
+
## 样式与平台
|
|
15
|
+
|
|
16
|
+
| 文档 | 说明 |
|
|
17
|
+
| --- | --- |
|
|
18
|
+
| [主题](./theme.md) | 主题变量、主题生成和样式覆盖。 |
|
|
19
|
+
| [安全区](./safeAreaInset.md) | 安全区、底部占位和平台差异。 |
|
|
20
|
+
| [自定义图标](./customIcon.md) | 接入 iconfont 或自定义图标。 |
|
|
21
|
+
| [国际化](./i18n.md) | 多语言配置示例。 |
|
|
22
|
+
| [注意事项](./note.md) | 常见使用约束和平台注意点。 |
|
|
23
|
+
|
|
24
|
+
## 推荐阅读顺序
|
|
25
|
+
|
|
26
|
+
1. 阅读 [文档首页](../index.md) 完成安装、注册和 easycom。
|
|
27
|
+
2. 阅读 [扩展配置](../components/setting.md) 确认 `uni.$uv` 是否可用。
|
|
28
|
+
3. 按需查看 [组件](../components/index.md) 和 [工具](/api/utils/index.md)。
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
## 注意事项
|
|
2
|
+
|
|
3
|
+
#### "$uv"被占用
|
|
4
|
+
|
|
5
|
+
uv-ui 有很多自带的 js 工具函数,注册后可以通过 `uni.$uv` 使用,也会挂载到 Vue 3 的 `app.config.globalProperties.$uv`,所以请勿占用 `$uv` 变量名或重复挂载同名全局属性。
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
#### uv-ui对nvue的支持
|
|
9
|
+
|
|
10
|
+
什么是`nvue`?见[关于nvue](/guide/design.html#关于nvue)
|
|
11
|
+
|
|
12
|
+
uv-ui 面向 uni-app Vue 3、app-vue、app-nvue、h5、小程序等多端场景,支持单独导入,开箱即用。
|
|
13
|
+
|
|
14
|
+
#### 对VUE3的支持
|
|
15
|
+
|
|
16
|
+
uv-ui全面支持`VUE3`。
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
#### 技术点要求
|
|
20
|
+
|
|
21
|
+
1. uv-ui依赖`SCSS`预处理器,所以您需要给HBuilder X安装 “sass/scss编译” 插件,详见[sass/scss编译](https://ext.dcloud.net.cn/plugin?id=2046)
|
|
22
|
+
2. uv-ui基于HX的最新版本开发,旧版本可能会不兼容,如遇问题,请升级HX尝试是否可解决
|
|
23
|
+
3. uv-ui要求项目开启uniapp的V3版本,V3有很大的优势,详见[V3版本介绍](https://ask.dcloud.net.cn/article/36599)
|
|
24
|
+
4. HX2.5.5稳定版正式引入`easycom`,建议开发者升级HX到2.5.1及以上的稳定版,详见[关于easycom](/components/quickstart.html#_3-配置easycom组件模式)
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
#### 关于Hbuilder X
|
|
28
|
+
|
|
29
|
+
uniapp依赖于HX,uniapp经过这两年发展(2018-2020),势头强劲,茁壮成长。我们目睹了整个过程,陪着uniapp一起成长,感慨能有
|
|
30
|
+
一家良心企业能扎根技术,埋头苦干,把APP,H5还有各家小程序做到大一统,同时也愤慨各家大厂的小程序各自为营,仿佛倒退到多年前
|
|
31
|
+
各家[浏览器大战](https://baike.baidu.com/item/%E6%B5%8F%E8%A7%88%E5%99%A8%E5%A4%A7%E6%88%98/8488119?fr=aladdin)的时代,让人唏嘘不已。
|
|
32
|
+
根据我们的经验,我们强烈建议:
|
|
33
|
+
- 开发者在开发线上项目的时候只使用HX的稳定版
|
|
34
|
+
- 初学者不要使用HX内测版,不然会碰到莫名其妙的问题,会挫败学习信心
|
|
35
|
+
- 每当HX更新大功能的时候,比如以往的自定义组件模式,近来的V3版本,还是目前的uniCloud,或者以后可能关于nuve的大功能,线上项目请过一段时间再使用。
|
|
36
|
+
- 建议喜欢尝鲜并熟悉uniapp的用户,在电脑分别安装HX的稳定版和内测版,尝鲜使用内测版,开发使用稳定版,二者分别更新,互不干扰
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
#### 编译调试
|
|
40
|
+
|
|
41
|
+
开发的时候,特别是写布局的时候,我们建议使用chrome或者HX内置的浏览器,需要说明的是,电脑浏览器的预览效果是不精细的,
|
|
42
|
+
写完之后,可以手机连上电脑同一局域网的WiFi,在手机浏览器上再进行细微的调整。
|
|
43
|
+
写完布局再写逻辑的时候,如果还需要兼容小程序和APP,一定要每写完一个页面,就用APP基座和小程序真机进行调试,这能及早发现问题,否则会剪不断理还乱。
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
#### 内网穿透
|
|
47
|
+
|
|
48
|
+
有时候需要通过花生壳等工具,进行内网穿透,让外部的人可以访问到本地的调试网页,这时由于`webpack-dev-server`会默认检查`hostname`,
|
|
49
|
+
去掉此限制即可,在uniapp项目根目录下新建`vue.config.js`文件(如果有,不用创建),修改如下内容:
|
|
50
|
+
|
|
51
|
+
```js
|
|
52
|
+
module.exports = {
|
|
53
|
+
configureWebpack: {
|
|
54
|
+
devServer: {
|
|
55
|
+
disableHostCheck: true
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
#### 安全区适配(针对APP)
|
|
62
|
+
|
|
63
|
+
在iPhone X等机型,底部带有指示条,如果配置了`safearea`则会在底部生成一个原生的白色区块,好处是不会导致
|
|
64
|
+
误触,缺点是颜色无法修改,有时候也影响美观。
|
|
65
|
+
uv-ui在各个可能会受到指示条影响的地方都做了特别处理,比如弹窗,键盘组件等,详见[底部安全区适配](/guide/safeAreaInset.html)
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
#### 为什么uv-ui的源码中会有那么多的注释?
|
|
70
|
+
|
|
71
|
+
很多开源项目,发布的时候都会刻意去掉注释,这可能是为了干净整洁,也可能是为了减少体积,还可能是出品方认为用户不会,也没必要去阅读源码。
|
|
72
|
+
相反,uv-ui不这么认为,我们会一直将注释保留在发行的版本中,这些注释不是为了给我们自己看的,而是为了给用户看的。
|
|
73
|
+
我们希望用户在使用的过程中,能通过阅读源码,既能提升工作效率,还能学到知识。因为uv-ui的理念是"挣脱束缚,向往自由",我们也希望您在阅读
|
|
74
|
+
源码的过程中,如果发现问题,或者有更好的实现方式和想法,可以反馈给我们,进而构建一个更强健的UI框架。
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
## 安全区适配
|
|
2
|
+
|
|
3
|
+
### 底部安全区
|
|
4
|
+
这个适配,主要是针对IPhone X等一些底部带指示条的机型,指示条的操作区域与页面底部存在重合,容易导致用户误操作,因此我们需要针对这些机型进行底部安全区适配。
|
|
5
|
+
uv-ui是uni-app态的UI框架uni-app专门针对底部安全区域的解决方案,具体如下(也可见uni官方说明[全面屏、刘海屏适配(iphoneX适配)及安全区设置](https://ask.dcloud.net.cn/article/35564)):
|
|
6
|
+
- 在APP上(以下只对APP生效),可以通过项目根目录的`mainfest.json`文件`app-plus`节点下配置`safearea`的`bottom`属性为`none`,以此来关闭IPhone X等机型的底部安全区域。
|
|
7
|
+
配置后需要重新编译,并重启调试基座才会生效,具体如下:
|
|
8
|
+
|
|
9
|
+
``` json
|
|
10
|
+
"app-plus": {
|
|
11
|
+
"safearea": {
|
|
12
|
+
"bottom": {
|
|
13
|
+
"offset": "none"
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
```
|
|
18
|
+
如果`offset`设置为`auto`,那么在IPhone X的底部安全区,APP上就会生成一个原生的元素进行占位,此时也就无需解决安全区指示条引起的问题。
|
|
19
|
+
|
|
20
|
+
- 在非APP端,诸如小程序,或者微信浏览器(其他浏览器,如UC等手机浏览器,底部有浏览器工具条,不存在安全区指示条引起的问题),底部是没有安全区占位的,
|
|
21
|
+
这种情况,就要使用css去解决,一般是通过给元素添加底部内边距的形式,如下:
|
|
22
|
+
|
|
23
|
+
``` html
|
|
24
|
+
<style>
|
|
25
|
+
.list {
|
|
26
|
+
padding-bottom: 0;
|
|
27
|
+
padding-bottom: constant(safe-area-inset-bottom);
|
|
28
|
+
padding-bottom: env(safe-area-inset-bottom);
|
|
29
|
+
}
|
|
30
|
+
</style>
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
鉴于以上问题,uv-ui提供了一个组件`uv-safe-bottom`,如果有需要,您可以在任何地方引用它,它会自动判断在并且在IPhone X等机型的时候,给元素加上一个适当
|
|
34
|
+
底部内边距,在APP上,即使您保留了原生安全区占位(`offset`设置为`auto`),也不会导致底部出现双倍的空白区域,也即APP上`offset`设置为`auto`时。
|
|
35
|
+
``` html
|
|
36
|
+
<template>
|
|
37
|
+
<view>
|
|
38
|
+
......
|
|
39
|
+
<uv-safe-bottom></uv-safe-bottom>
|
|
40
|
+
</view>
|
|
41
|
+
</template>
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
### 顶部安全区
|
|
45
|
+
|
|
46
|
+
由于我们在做页面布局时经常会使用顶部位置,uv-ui提供了一个组件`uv-status-bar`,如`uv-popup`从顶部弹出时,可以考虑使用此组件。
|
|
47
|
+
``` html
|
|
48
|
+
<template>
|
|
49
|
+
<view>
|
|
50
|
+
<uv-status-bar></uv-status-bar>
|
|
51
|
+
......
|
|
52
|
+
</view>
|
|
53
|
+
</template>
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
### 关于uv-ui某些组件`safe-area-inset`参数的说明
|
|
57
|
+
|
|
58
|
+
在uv-ui中,一些组件如`uv-popup`、`uv-keyboard`组件等,提供了一个`safeAreaInsetBottom`参数(布尔类型),如果设置为`true`,就会在组件内部对安全区进行适配,
|
|
59
|
+
从而避免安全区指示条引起的问题,以下为uv-ui的`uv-keyboard`组件在`微信浏览器`中分别设置`safeAreaInsetBottom`参数
|
|
60
|
+
为`false`和`true`的表现:
|
|
61
|
+
|
|
62
|
+
<div>
|
|
63
|
+
<img src="https://www.uvui.cn/common/keyboard.png" alt="uv-ui" class="logo">
|
|
64
|
+
</div>
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
# 自定义主题
|
|
2
|
+
|
|
3
|
+
`@gmcb/uv-ui` 的主题由 SCSS 变量和运行时配置共同组成。项目接入时推荐在统一样式入口维护主题变量,避免在业务页面中分散覆盖。
|
|
4
|
+
|
|
5
|
+
## 引入主题变量
|
|
6
|
+
|
|
7
|
+
在 `uni.scss` 或项目主题入口引入:
|
|
8
|
+
|
|
9
|
+
```scss
|
|
10
|
+
@import '@gmcb/uv-ui/theme.scss';
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
如需覆盖主题变量,请在自己的主题文件中保持变量名一致,并确保覆盖文件在组件样式生效前被加载。
|
|
14
|
+
|
|
15
|
+
```scss
|
|
16
|
+
@import '@gmcb/uv-ui/theme.scss';
|
|
17
|
+
@import '@/styles/theme.scss';
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## 常用变量
|
|
21
|
+
|
|
22
|
+
```scss
|
|
23
|
+
$uv-main-color: #303133;
|
|
24
|
+
$uv-content-color: #606266;
|
|
25
|
+
$uv-tips-color: #909193;
|
|
26
|
+
$uv-light-color: #c0c4cc;
|
|
27
|
+
$uv-border-color: #dadbde;
|
|
28
|
+
$uv-bg-color: #f3f4f6;
|
|
29
|
+
$uv-disabled-color: #c8c9cc;
|
|
30
|
+
|
|
31
|
+
$uv-primary: #3c9cff;
|
|
32
|
+
$uv-success: #5ac725;
|
|
33
|
+
$uv-warning: #f9ae3d;
|
|
34
|
+
$uv-error: #f56c6c;
|
|
35
|
+
$uv-info: #909399;
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
## 基础样式
|
|
39
|
+
|
|
40
|
+
在 `App.vue` 或全局样式入口引入基础样式:
|
|
41
|
+
|
|
42
|
+
```scss
|
|
43
|
+
@import '@gmcb/uv-ui/index.scss';
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
基础样式包含常用工具类和组件共享样式,例如 `uv-line-1`、`uv-border`、`uv-border-top`、`uv-hover-class`。
|
|
47
|
+
|
|
48
|
+
## 运行时配置
|
|
49
|
+
|
|
50
|
+
插件注册后可以通过 `uni.$uv.setConfig` 调整默认配置和组件 props:
|
|
51
|
+
|
|
52
|
+
```ts
|
|
53
|
+
uni.$uv.setConfig({
|
|
54
|
+
config: {
|
|
55
|
+
unit: 'rpx',
|
|
56
|
+
},
|
|
57
|
+
props: {
|
|
58
|
+
text: {
|
|
59
|
+
color: {
|
|
60
|
+
default: '#303133',
|
|
61
|
+
},
|
|
62
|
+
},
|
|
63
|
+
},
|
|
64
|
+
});
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
`setConfig` 需要在 `app.use(uvUI)` 之后调用。详见 [扩展配置](../components/setting.md)。
|
package/docs/index.md
ADDED
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
# @gmcb/uv-ui
|
|
2
|
+
|
|
3
|
+
`@gmcb/uv-ui` 是基于 uv-ui 的 uni-app 多端 UI 组件包,包含 `uv-*` 组件、主题样式、工具函数、请求实例和 `$uv` 全局能力。
|
|
4
|
+
|
|
5
|
+
## 快速入口
|
|
6
|
+
|
|
7
|
+
| 入口 | 说明 |
|
|
8
|
+
| --- | --- |
|
|
9
|
+
| [指南](./guide/index.md) | 安装注册、主题、安全区、国际化、自定义图标和开发约定。 |
|
|
10
|
+
| [组件](./components/index.md) | 查看组件分类、easycom 配置和常用 `uv-*` 组件。 |
|
|
11
|
+
| [API](./api/index.md) | 查看默认导出、`uni.$uv`、请求、路由、配置和深度引用路径。 |
|
|
12
|
+
| [工具](/api/utils/index.md) | 查看格式化、校验、路由、防抖节流等工具。 |
|
|
13
|
+
| [常见问题](./faq/index.md) | 排查 easycom、样式、`uni.$uv`、请求和平台兼容问题。 |
|
|
14
|
+
|
|
15
|
+
## 安装
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
npm i @gmcb/uv-ui
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## 注册
|
|
22
|
+
|
|
23
|
+
```ts
|
|
24
|
+
import { createSSRApp } from 'vue';
|
|
25
|
+
import uvUI from '@gmcb/uv-ui';
|
|
26
|
+
import App from './App.vue';
|
|
27
|
+
|
|
28
|
+
export function createApp() {
|
|
29
|
+
const app = createSSRApp(App);
|
|
30
|
+
app.use(uvUI);
|
|
31
|
+
return {
|
|
32
|
+
app,
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
注册后可以通过 `uni.$uv` 使用工具和请求实例,也可以在组件实例中访问 `$uv`。
|
|
38
|
+
|
|
39
|
+
## easycom
|
|
40
|
+
|
|
41
|
+
```json
|
|
42
|
+
{
|
|
43
|
+
"easycom": {
|
|
44
|
+
"autoscan": true,
|
|
45
|
+
"custom": {
|
|
46
|
+
"^uv-(.*)": "@gmcb/uv-ui/components/uv-$1/uv-$1.vue"
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
配置后可直接在页面中使用组件:
|
|
53
|
+
|
|
54
|
+
```vue
|
|
55
|
+
<template>
|
|
56
|
+
<uv-button type="primary">提交</uv-button>
|
|
57
|
+
<uv-icon name="search" size="24" />
|
|
58
|
+
</template>
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
## 样式
|
|
62
|
+
|
|
63
|
+
在 `uni.scss` 或项目统一样式入口引入主题变量:
|
|
64
|
+
|
|
65
|
+
```scss
|
|
66
|
+
@import '@gmcb/uv-ui/theme.scss';
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
在 `App.vue` 或全局样式入口引入基础样式:
|
|
70
|
+
|
|
71
|
+
```scss
|
|
72
|
+
@import '@gmcb/uv-ui/index.scss';
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
## 文档结构
|
|
76
|
+
|
|
77
|
+
| 分类 | 文档 |
|
|
78
|
+
| --- | --- |
|
|
79
|
+
| 指南 | [指南总览](./guide/index.md)、[主题](./guide/theme.md)、[安全区](./guide/safeAreaInset.md)、[国际化](./guide/i18n.md) |
|
|
80
|
+
| 组件 | [组件总览](./components/index.md)、[安装](./components/install.md)、[扩展配置](./components/setting.md)、[常见问题](./components/problem.md) |
|
|
81
|
+
| API | [API 总览](./api/index.md)、[工具总览](/api/utils/index.md)、[HTTP 请求](/api/request/http.md)、[路由](/api/utils/route.md) |
|
|
82
|
+
| 常见问题 | [FAQ](./faq/index.md) |
|
|
83
|
+
|
|
84
|
+
## 使用约定
|
|
85
|
+
|
|
86
|
+
- 当前包名统一使用 `@gmcb/uv-ui`,文档中的旧包名或 `uni_modules` 示例不作为本包推荐接入方式。
|
|
87
|
+
- 工具文档归入 `api/utils`,请求、混入和配置类 API 拆分到 API 下对应分组;历史 `js` 分类不再保留。
|
|
88
|
+
- 深度引用依赖包内发布路径,例如 `@gmcb/uv-ui/libs/function/index.js`。
|
package/libs/config/config.js
CHANGED
|
@@ -1,14 +1,4 @@
|
|
|
1
|
-
// 此版本发布于2024-01-24
|
|
2
|
-
const version = '1.1.20';
|
|
3
|
-
|
|
4
|
-
// 开发环境才提示,生产环境不会提示
|
|
5
|
-
if (process.env.NODE_ENV === 'development') {
|
|
6
|
-
console.log(`\n %c uvui V${version} https://www.uvui.cn/ \n\n`, 'color: #ffffff; background: #3c9cff; padding:5px 0; border-radius: 5px;');
|
|
7
|
-
}
|
|
8
|
-
|
|
9
1
|
export default {
|
|
10
|
-
v: version,
|
|
11
|
-
version,
|
|
12
2
|
// 主题名称
|
|
13
3
|
type: [
|
|
14
4
|
'primary',
|
package/libs/css/color.scss
CHANGED
|
@@ -1,27 +1,28 @@
|
|
|
1
|
-
$uv-main-color: #
|
|
2
|
-
$uv-content-color: #
|
|
3
|
-
$uv-tips-color: #
|
|
1
|
+
$uv-main-color: #333333 !default;
|
|
2
|
+
$uv-content-color: #7a7a7a !default;
|
|
3
|
+
$uv-tips-color: #9a9a9a !default;
|
|
4
4
|
$uv-light-color: #c0c4cc !default;
|
|
5
|
-
$uv-border-color: #
|
|
6
|
-
$uv-bg-color: #
|
|
5
|
+
$uv-border-color: #eeeeee !default;
|
|
6
|
+
$uv-bg-color: #f5f5f5 !default;
|
|
7
|
+
$uv-bg-light-color: #fffbf4 !default;
|
|
7
8
|
$uv-disabled-color: #c8c9cc !default;
|
|
8
9
|
|
|
9
|
-
$uv-primary: #
|
|
10
|
-
$uv-primary-dark: #
|
|
11
|
-
$uv-primary-disabled: #
|
|
12
|
-
$uv-primary-light: #
|
|
10
|
+
$uv-primary: #00b4c3 !default;
|
|
11
|
+
$uv-primary-dark: #157572 !default;
|
|
12
|
+
$uv-primary-disabled: #b4e3d9 !default;
|
|
13
|
+
$uv-primary-light: #dff3f9 !default;
|
|
13
14
|
|
|
14
|
-
$uv-warning: #
|
|
15
|
-
$uv-warning-dark: #
|
|
15
|
+
$uv-warning: #ff9a05 !default;
|
|
16
|
+
$uv-warning-dark: #ed6c04 !default;
|
|
16
17
|
$uv-warning-disabled: #f9d39b !default;
|
|
17
18
|
$uv-warning-light: #fdf6ec !default;
|
|
18
19
|
|
|
19
20
|
$uv-success: #5ac725 !default;
|
|
20
21
|
$uv-success-dark: #53c21d !default;
|
|
21
22
|
$uv-success-disabled: #a9e08f !default;
|
|
22
|
-
$uv-success-light: #f5fff0;
|
|
23
|
+
$uv-success-light: #f5fff0 !default;
|
|
23
24
|
|
|
24
|
-
$uv-error: #
|
|
25
|
+
$uv-error: #ff4d4f !default;
|
|
25
26
|
$uv-error-dark: #e45656 !default;
|
|
26
27
|
$uv-error-disabled: #f7b2b2 !default;
|
|
27
28
|
$uv-error-light: #fef0f0 !default;
|
|
@@ -29,4 +30,4 @@ $uv-error-light: #fef0f0 !default;
|
|
|
29
30
|
$uv-info: #909399 !default;
|
|
30
31
|
$uv-info-dark: #767a82 !default;
|
|
31
32
|
$uv-info-disabled: #c4c6c9 !default;
|
|
32
|
-
$uv-info-light: #f4f4f5 !default;
|
|
33
|
+
$uv-info-light: #f4f4f5 !default;
|
package/package.json
CHANGED
|
@@ -1,9 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gmcb/uv-ui",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"description": "uv-ui 破釜沉舟之兼容vue3+2、nvue、app、h5、小程序等多端基于uni-app和uView2.x的生态框架,支持单独导入,开箱即用,利剑出击。",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"homepage": "https://git.keeprisk.cn/gmcb/front-end/tree/master/packages/uv-ui",
|
|
7
|
+
"scripts": {
|
|
8
|
+
"docs:dev": "vitepress dev . --config .vitepress/config.mts",
|
|
9
|
+
"docs:build": "vitepress build . --config .vitepress/config.mts"
|
|
10
|
+
},
|
|
7
11
|
"publishConfig": {
|
|
8
12
|
"access": "public"
|
|
9
13
|
},
|
|
@@ -17,6 +21,7 @@
|
|
|
17
21
|
"author": "yinjiazeng@163.com",
|
|
18
22
|
"license": "MIT",
|
|
19
23
|
"files": [
|
|
24
|
+
"docs",
|
|
20
25
|
"libs",
|
|
21
26
|
"components",
|
|
22
27
|
"CHANGELOG.md",
|
|
@@ -24,5 +29,5 @@
|
|
|
24
29
|
"index.scss",
|
|
25
30
|
"theme.scss"
|
|
26
31
|
],
|
|
27
|
-
"gitHead": "
|
|
32
|
+
"gitHead": "0b5311c299e38de9caf076ec3a5fede4525b2484"
|
|
28
33
|
}
|
package/theme.scss
CHANGED