uview-pro 0.4.13 → 0.5.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 +36 -12
- package/components/u-action-sheet/types.ts +4 -2
- package/components/u-avatar-cropper/u-avatar-cropper.vue +8 -6
- package/components/u-badge/types.ts +1 -1
- package/components/u-calendar/types.ts +6 -4
- package/components/u-calendar/u-calendar.vue +18 -6
- package/components/u-config-provider/types.ts +11 -0
- package/components/u-config-provider/u-config-provider.vue +45 -0
- package/components/u-count-down/u-count-down.vue +7 -5
- package/components/u-empty/u-empty.vue +22 -17
- package/components/u-full-screen/types.ts +2 -0
- package/components/u-full-screen/u-full-screen.vue +5 -9
- package/components/u-input/types.ts +4 -1
- package/components/u-keyboard/types.ts +5 -2
- package/components/u-keyboard/u-keyboard.vue +18 -3
- package/components/u-link/types.ts +4 -2
- package/components/u-loadmore/types.ts +6 -3
- package/components/u-modal/types.ts +7 -5
- package/components/u-no-network/types.ts +4 -1
- package/components/u-no-network/u-no-network.vue +12 -5
- package/components/u-notice-bar/u-notice-bar.vue +1 -1
- package/components/u-pagination/types.ts +5 -2
- package/components/u-picker/types.ts +5 -3
- package/components/u-read-more/types.ts +5 -3
- package/components/u-search/types.ts +5 -2
- package/components/u-section/types.ts +4 -1
- package/components/u-select/types.ts +5 -3
- package/components/u-skeleton/types.ts +69 -10
- package/components/u-skeleton/u-skeleton.vue +211 -189
- package/components/u-tabbar/types.ts +4 -2
- package/components/u-tabbar/u-tabbar.vue +114 -59
- package/components/u-upload/types.ts +4 -1
- package/components/u-upload/u-upload.vue +15 -13
- package/components/u-verification-code/types.ts +6 -3
- package/index.ts +30 -5
- package/libs/config/config.ts +5 -1
- package/libs/hooks/index.ts +1 -0
- package/libs/hooks/useLocale.ts +34 -0
- package/libs/hooks/useTheme.ts +12 -3
- package/libs/index.ts +15 -1
- package/libs/util/config-provider.ts +158 -5
- package/locale/index.ts +2 -0
- package/locale/lang/en-US.ts +124 -0
- package/locale/lang/zh-CN.ts +124 -0
- package/package.json +1 -1
- package/types/global.d.ts +14 -0
package/changelog.md
CHANGED
|
@@ -1,23 +1,47 @@
|
|
|
1
|
-
## 0.
|
|
1
|
+
## 0.5.0(2026-01-14)
|
|
2
2
|
|
|
3
3
|
### ✨ Features | 新功能
|
|
4
4
|
|
|
5
|
-
- **
|
|
6
|
-
- **
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
- **
|
|
11
|
-
- **
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
- **
|
|
5
|
+
- **locale:** 添加组件国际化支持和 use locale hooks ([ff96211](https://github.com/anyup/uView-Pro/commit/ff96211423d27bde350a2ea4b9f1d5a5eb72d604))
|
|
6
|
+
- **locale:** 添加中、英文国际化语言字段支持 ([257eb41](https://github.com/anyup/uView-Pro/commit/257eb4143ac39cab4940ab76844d0c3be02b198c))
|
|
7
|
+
- **locale:** 所有组件实现组件国际化显示替换 ([ef52ff7](https://github.com/anyup/uView-Pro/commit/ef52ff7669c8cb7389377b8bdd4da681dddbb0a6))
|
|
8
|
+
- **locale:** 跟随vue-i18n国际化语言切换功能 ([cccecb0](https://github.com/anyup/uView-Pro/commit/cccecb03763990689e6e66d856cf3588157a61b6))
|
|
9
|
+
- **fullScreen:** 优化fullscreen页面配置和实现,支持国际化 ([8518218](https://github.com/anyup/uView-Pro/commit/85182186848fa6443ed74de9af1e3f5cd15fa724))
|
|
10
|
+
- **locale:** 新增locale国际化和vue-i18n切换示例页面 ([da79723](https://github.com/anyup/uView-Pro/commit/da797230005ff130ea66c315921e4d8d9fa613c1))
|
|
11
|
+
- **demo-page:** 添加支付宝小程序navbar兼容性处理 ([75284a4](https://github.com/anyup/uView-Pro/commit/75284a403b9eb7dee9625279ca5cadd14bba3a63))
|
|
12
|
+
- **u-skeleton:** 重构u-skeleton骨架屏组件实现全新设计 ([c39405d](https://github.com/anyup/uView-Pro/commit/c39405dfd8c4e1fe06fd842efde79ebf6706b0d1))
|
|
13
|
+
- **u-tabbar:** 重构u-tabbar组件内部结构,增加图标文字间距配置 ([e5655da](https://github.com/anyup/uView-Pro/commit/e5655da55c515a8288b12e37084dfec093da542b))
|
|
14
|
+
- **mp-weixin:** 添加小程序全局分享功能 ([e4f8bf5](https://github.com/anyup/uView-Pro/commit/e4f8bf5baae237e8dc443de7c90cd751ef045101))
|
|
15
|
+
- **useLocale:** uselocale hooks 支持命名空间功能 ([4d6e8f2](https://github.com/anyup/uView-Pro/commit/4d6e8f26976725cfdf862bd21af3648b864fdc29))
|
|
16
|
+
- **u-tabbar:** 优化u-tabbar文本样式渲染优先级 ([7d73861](https://github.com/anyup/uView-Pro/commit/7d73861b4cbe1266bc4cbfff31b45a57d9ed960f))
|
|
17
|
+
- **locale:** 初始化多语言时添加 isForce 参数支持强制设置默认语言 ([3309017](https://github.com/anyup/uView-Pro/commit/3309017e6fea3bc00f10efcec9f3ec3f83de9a88))
|
|
18
|
+
- **demo:** 优化国际化配置示例并添加多语言支持 ([177b978](https://github.com/anyup/uView-Pro/commit/177b97869f14023daf4bca632093076716b616d6))
|
|
19
|
+
- **theme:** 主题配置支持强制初始化功能 ([95c895d](https://github.com/anyup/uView-Pro/commit/95c895d0cfb1df37aa6285b88a2247f83add7361))
|
|
16
20
|
|
|
17
21
|
### 👥 Contributors
|
|
18
22
|
|
|
19
23
|
<a href="https://github.com/anyup"><img src="https://github.com/anyup.png?size=40" width="40" height="40" alt="anyup" title="anyup"/></a>
|
|
20
24
|
|
|
25
|
+
## 0.4.13(2026-01-06)
|
|
26
|
+
|
|
27
|
+
### ✨ Features | 新功能
|
|
28
|
+
|
|
29
|
+
- **theme:** 主题初始化时支持默认主题设置 ([f2b61f6](https://github.com/anyup/uView-Pro/commit/f2b61f6caa1c285753b2e02f97309aa55bb77cca))
|
|
30
|
+
- **theme:** 增强主题系统初始化配置,支持在初始化时设置默认主题和暗黑模式 ([d228d10](https://github.com/anyup/uView-Pro/commit/d228d100baf619799b1dc1c8e289e1e8c9a30699))
|
|
31
|
+
|
|
32
|
+
### 🐛 Bug Fixes | Bug 修复
|
|
33
|
+
|
|
34
|
+
- **u-number-box:** 修复 u-number-box 步进器 disabled 时字体不显示问题 ([75b3a74](https://github.com/anyup/uView-Pro/commit/75b3a74e6e763dec1a1ee0d3b4d0a62d646ee389))
|
|
35
|
+
- **u-textarea:** 修复u-textarea组件设置props.border='none'无效的问题 ([c5a97ba](https://github.com/anyup/uView-Pro/commit/c5a97ba4c00d226c8c0fd9605660d2654dec9dc2))
|
|
36
|
+
|
|
37
|
+
### ♻️ Code Refactoring | 代码重构
|
|
38
|
+
|
|
39
|
+
- **theme:** 调整u-bg-gray-light默认色值,优化演示示例 ([37d6bda](https://github.com/anyup/uView-Pro/commit/37d6bda939f5d7c54aec09960878f236dfa32bb2))
|
|
40
|
+
|
|
41
|
+
### 👥 Contributors
|
|
42
|
+
|
|
43
|
+
<a href="https://github.com/anyup"><img src="https://github.com/anyup.png?size=40" width="40" height="40" alt="anyup" title="anyup"/></a>
|
|
44
|
+
|
|
21
45
|
## 0.4.12(2026-01-04)
|
|
22
46
|
|
|
23
47
|
### ♻️ Code Refactoring | 代码重构
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { type ExtractPropTypes, type PropType } from 'vue';
|
|
2
2
|
import type { ActionSheetItem, ActionSheetTips } from '../../types/global';
|
|
3
3
|
import { baseProps } from '../common/props';
|
|
4
|
-
import { getColor } from '../../';
|
|
4
|
+
import { getColor, useLocale } from '../../';
|
|
5
|
+
|
|
6
|
+
const { t } = useLocale();
|
|
5
7
|
|
|
6
8
|
/**
|
|
7
9
|
* actionSheet 操作菜单
|
|
@@ -32,7 +34,7 @@ export const ActionSheetProps = {
|
|
|
32
34
|
/** 弹出的z-index值 */
|
|
33
35
|
zIndex: { type: [String, Number], default: 0 },
|
|
34
36
|
/** 取消按钮的文字提示 */
|
|
35
|
-
cancelText: { type: String, default: '
|
|
37
|
+
cancelText: { type: String, default: () => t('actionSheet.cancelText') },
|
|
36
38
|
/** 字体颜色 */
|
|
37
39
|
color: { type: String, default: () => getColor('mainColor') },
|
|
38
40
|
/** 字体大小 */
|
|
@@ -27,12 +27,12 @@
|
|
|
27
27
|
</view>
|
|
28
28
|
<view class="cropper-buttons safe-area-padding" :style="{ height: bottomNavHeight + 'px' }">
|
|
29
29
|
<!-- #ifdef H5 -->
|
|
30
|
-
<view class="upload" @tap="uploadTap"
|
|
30
|
+
<view class="upload" @tap="uploadTap">{{ t('avatarCropper.select') }}</view>
|
|
31
31
|
<!-- #endif -->
|
|
32
32
|
<!-- #ifndef H5 -->
|
|
33
|
-
<view class="upload" @tap="uploadTap"
|
|
33
|
+
<view class="upload" @tap="uploadTap">{{ t('avatarCropper.reselect') }}</view>
|
|
34
34
|
<!-- #endif -->
|
|
35
|
-
<view class="getCropperImage" @tap="() => getCropperImage(false)"
|
|
35
|
+
<view class="getCropperImage" @tap="() => getCropperImage(false)">{{ t('avatarCropper.confirm') }}</view>
|
|
36
36
|
</view>
|
|
37
37
|
</view>
|
|
38
38
|
</template>
|
|
@@ -53,7 +53,7 @@ export default {
|
|
|
53
53
|
<script setup lang="ts">
|
|
54
54
|
// @ts-nocheck
|
|
55
55
|
import { ref, reactive, onMounted } from 'vue';
|
|
56
|
-
import { $u } from '../..';
|
|
56
|
+
import { $u, useLocale } from '../..';
|
|
57
57
|
// 兼容 UMD/ESM 导入 weCropper.js
|
|
58
58
|
import WeCropper from './weCropper';
|
|
59
59
|
import { AvatarCropperProps } from './types';
|
|
@@ -64,6 +64,8 @@ import { AvatarCropperProps } from './types';
|
|
|
64
64
|
*/
|
|
65
65
|
const props = defineProps(AvatarCropperProps);
|
|
66
66
|
|
|
67
|
+
const { t } = useLocale();
|
|
68
|
+
|
|
67
69
|
/**
|
|
68
70
|
* 组合式API变量声明
|
|
69
71
|
* 保留所有说明注释
|
|
@@ -190,7 +192,7 @@ function touchEnd(e: any) {
|
|
|
190
192
|
* @param isPre 是否预览
|
|
191
193
|
*/
|
|
192
194
|
function getCropperImage(isPre = false) {
|
|
193
|
-
if (!src.value) return $u.toast('
|
|
195
|
+
if (!src.value) return $u.toast(t('avatarCropper.noSelect'));
|
|
194
196
|
|
|
195
197
|
const cropper_opt = {
|
|
196
198
|
destHeight: Number(destWidth.value), // uni.canvasToTempFilePath要求这些参数为数值
|
|
@@ -200,7 +202,7 @@ function getCropperImage(isPre = false) {
|
|
|
200
202
|
cropper.getCropperImage(cropper_opt, (path: string, err: any) => {
|
|
201
203
|
if (err) {
|
|
202
204
|
uni.showModal({
|
|
203
|
-
title: '
|
|
205
|
+
title: t('avatarCropper.modalTitle'),
|
|
204
206
|
content: err.message
|
|
205
207
|
});
|
|
206
208
|
} else {
|
|
@@ -28,7 +28,7 @@ export const BadgeProps = {
|
|
|
28
28
|
/** 字体大小 */
|
|
29
29
|
fontSize: { type: [String, Number], default: '24' },
|
|
30
30
|
/** 字体颜色 */
|
|
31
|
-
color: { type: String, default: '
|
|
31
|
+
color: { type: String, default: 'var(--u-white-color)' },
|
|
32
32
|
/** badge的背景颜色 */
|
|
33
33
|
bgColor: { type: String, default: '' },
|
|
34
34
|
/** 是否让badge组件的中心点和父组件右上角重合,配置的话,offset将会失效 */
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { type ExtractPropTypes, type PropType } from 'vue';
|
|
2
2
|
import type { CalendarChangeDate, CalendarChangeRange, CalendarMode, ThemeType } from '../../types/global';
|
|
3
3
|
import { baseProps } from '../common/props';
|
|
4
|
-
import { getColor } from '../../';
|
|
4
|
+
import { getColor, useLocale } from '../../';
|
|
5
|
+
|
|
6
|
+
const { t } = useLocale();
|
|
5
7
|
|
|
6
8
|
/**
|
|
7
9
|
* calendar 日历类型定义
|
|
@@ -48,9 +50,9 @@ export const CalendarProps = {
|
|
|
48
50
|
/** 范围内日期字体颜色 */
|
|
49
51
|
rangeColor: { type: String, default: () => getColor('primary') },
|
|
50
52
|
/** mode=range时生效,起始日期自定义文案 */
|
|
51
|
-
startText: { type: String, default: '
|
|
53
|
+
startText: { type: String, default: () => t('calendar.startText') },
|
|
52
54
|
/** mode=range时生效,结束日期自定义文案 */
|
|
53
|
-
endText: { type: String, default: '
|
|
55
|
+
endText: { type: String, default: () => t('calendar.endText') },
|
|
54
56
|
/** 按钮样式类型 */
|
|
55
57
|
btnType: { type: String as PropType<ThemeType>, default: 'primary' },
|
|
56
58
|
/** 当前选中日期带选中效果 */
|
|
@@ -60,7 +62,7 @@ export const CalendarProps = {
|
|
|
60
62
|
/** 是否显示右上角的关闭图标 */
|
|
61
63
|
closeable: { type: Boolean, default: true },
|
|
62
64
|
/** 顶部的提示文字 */
|
|
63
|
-
toolTip: { type: String, default: '
|
|
65
|
+
toolTip: { type: String, default: () => t('calendar.toolTip') },
|
|
64
66
|
/** 是否显示农历 */
|
|
65
67
|
showLunar: { type: Boolean, default: false },
|
|
66
68
|
/** 是否在页面中显示 */
|
|
@@ -223,10 +223,12 @@
|
|
|
223
223
|
<view class="u-calendar__bottom">
|
|
224
224
|
<view class="u-calendar__bottom__choose">
|
|
225
225
|
<text>{{ mode == 'date' ? activeDate : startDate }}</text>
|
|
226
|
-
<text v-if="endDate"
|
|
226
|
+
<text v-if="endDate">{{ t('calendar.to') }}{{ endDate }}</text>
|
|
227
227
|
</view>
|
|
228
228
|
<view class="u-calendar__bottom__btn">
|
|
229
|
-
<u-button :type="btnType" shape="circle" size="default" @click="btnFix(false)"
|
|
229
|
+
<u-button :type="btnType" shape="circle" size="default" @click="btnFix(false)">
|
|
230
|
+
{{ t('calendar.confirmText') }}
|
|
231
|
+
</u-button>
|
|
230
232
|
</view>
|
|
231
233
|
</view>
|
|
232
234
|
</view>
|
|
@@ -248,7 +250,7 @@ export default {
|
|
|
248
250
|
|
|
249
251
|
<script setup lang="ts">
|
|
250
252
|
import { ref, computed, watch, onMounted, useSlots } from 'vue';
|
|
251
|
-
import { $u } from '../..';
|
|
253
|
+
import { $u, useLocale } from '../..';
|
|
252
254
|
import { CalendarProps, type CalendarEmits } from './types';
|
|
253
255
|
import Calendar from '../../libs/util/calendar';
|
|
254
256
|
|
|
@@ -287,6 +289,8 @@ const props = defineProps(CalendarProps);
|
|
|
287
289
|
const emit = defineEmits<CalendarEmits>();
|
|
288
290
|
const slots = useSlots();
|
|
289
291
|
|
|
292
|
+
const { t } = useLocale();
|
|
293
|
+
|
|
290
294
|
// 组件内部状态
|
|
291
295
|
// 星期几,值为1-7
|
|
292
296
|
const weekday = ref(1);
|
|
@@ -312,7 +316,15 @@ const endDate = ref('');
|
|
|
312
316
|
const isStart = ref(true);
|
|
313
317
|
const min = ref<{ year: number; month: number; day: number } | null>(null);
|
|
314
318
|
const max = ref<{ year: number; month: number; day: number } | null>(null);
|
|
315
|
-
const weekDayZh = ref([
|
|
319
|
+
const weekDayZh = ref([
|
|
320
|
+
t('calendar.sun'),
|
|
321
|
+
t('calendar.mon'),
|
|
322
|
+
t('calendar.tue'),
|
|
323
|
+
t('calendar.wed'),
|
|
324
|
+
t('calendar.thu'),
|
|
325
|
+
t('calendar.fri'),
|
|
326
|
+
t('calendar.sat')
|
|
327
|
+
]);
|
|
316
328
|
|
|
317
329
|
const dataChange = computed(() => `${props.mode}-${props.minDate}-${props.maxDate}`);
|
|
318
330
|
const lunarChange = computed(() => props.showLunar);
|
|
@@ -443,7 +455,7 @@ function getWeekday(yearNum: number, monthNum: number) {
|
|
|
443
455
|
function checkRange(yearNum: number) {
|
|
444
456
|
let overstep = false;
|
|
445
457
|
if (yearNum < Number(props.minYear) || yearNum > Number(props.maxYear)) {
|
|
446
|
-
uni.showToast({ title: '
|
|
458
|
+
uni.showToast({ title: t('calendar.outOfRange'), icon: 'none' });
|
|
447
459
|
overstep = true;
|
|
448
460
|
}
|
|
449
461
|
return overstep;
|
|
@@ -491,7 +503,7 @@ function changeData() {
|
|
|
491
503
|
daysArr.value = generateArray(1, days.value);
|
|
492
504
|
weekday.value = getWeekday(year.value, month.value);
|
|
493
505
|
weekdayArr.value = generateArray(1, weekday.value);
|
|
494
|
-
showTitle.value = `${year.value}
|
|
506
|
+
showTitle.value = `${year.value}${t('calendar.year')}${month.value}${t('calendar.month')}`;
|
|
495
507
|
if (props.showLunar) {
|
|
496
508
|
lunarArr.value = [];
|
|
497
509
|
daysArr.value.forEach(d => {
|
|
@@ -28,6 +28,17 @@ export const ConfigProviderProps = {
|
|
|
28
28
|
themes: {
|
|
29
29
|
type: Array as PropType<Theme[]>,
|
|
30
30
|
default: () => configProvider.getThemes()
|
|
31
|
+
},
|
|
32
|
+
/**
|
|
33
|
+
* 国际化配置:传入 locale 列表(数组)并可指定默认语言 currentLocale
|
|
34
|
+
*/
|
|
35
|
+
locales: {
|
|
36
|
+
type: Array as PropType<any[]>,
|
|
37
|
+
default: () => []
|
|
38
|
+
},
|
|
39
|
+
currentLocale: {
|
|
40
|
+
type: String,
|
|
41
|
+
default: () => configProvider.getCurrentLocale()?.name ?? ''
|
|
31
42
|
}
|
|
32
43
|
};
|
|
33
44
|
|
|
@@ -36,6 +36,7 @@ import { computed, watch, onMounted } from 'vue';
|
|
|
36
36
|
import { ConfigProviderProps } from './types';
|
|
37
37
|
import { $u, configProvider } from '../../libs';
|
|
38
38
|
import { useTheme } from '../../libs/hooks/useTheme';
|
|
39
|
+
import { useLocale } from '../../libs/hooks/useLocale';
|
|
39
40
|
|
|
40
41
|
const props = defineProps(ConfigProviderProps);
|
|
41
42
|
|
|
@@ -78,9 +79,31 @@ const bootstrapTheme = () => {
|
|
|
78
79
|
}
|
|
79
80
|
};
|
|
80
81
|
|
|
82
|
+
const bootstrapLocale = () => {
|
|
83
|
+
// 初始化国际化
|
|
84
|
+
try {
|
|
85
|
+
const { initLocales, setLocale, getLocales } = useLocale();
|
|
86
|
+
const existingLocales = getLocales();
|
|
87
|
+
if (existingLocales.length > 0) {
|
|
88
|
+
if (props.currentLocale) {
|
|
89
|
+
setLocale(props.currentLocale as string);
|
|
90
|
+
}
|
|
91
|
+
} else {
|
|
92
|
+
if (props.locales && props.locales.length) {
|
|
93
|
+
initLocales(props.locales, props.currentLocale as any);
|
|
94
|
+
} else {
|
|
95
|
+
initLocales(undefined, props.currentLocale as any);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
} catch (e) {
|
|
99
|
+
console.warn('[u-config-provider] init locales failed', e);
|
|
100
|
+
}
|
|
101
|
+
};
|
|
102
|
+
|
|
81
103
|
// 当传入自定义 themes 时,初始化全局 configProvider(覆盖已有)
|
|
82
104
|
onMounted(() => {
|
|
83
105
|
bootstrapTheme();
|
|
106
|
+
bootstrapLocale();
|
|
84
107
|
});
|
|
85
108
|
|
|
86
109
|
// 监听外部 props 变化(如果上层修改 prop)
|
|
@@ -116,6 +139,28 @@ watch(
|
|
|
116
139
|
}
|
|
117
140
|
);
|
|
118
141
|
|
|
142
|
+
// 监听 locales prop 变化
|
|
143
|
+
watch(
|
|
144
|
+
() => props.locales,
|
|
145
|
+
val => {
|
|
146
|
+
if (val && val.length) {
|
|
147
|
+
const { initLocales } = useLocale();
|
|
148
|
+
initLocales(val, props.currentLocale as any);
|
|
149
|
+
}
|
|
150
|
+
},
|
|
151
|
+
{ deep: true }
|
|
152
|
+
);
|
|
153
|
+
|
|
154
|
+
watch(
|
|
155
|
+
() => props.currentLocale,
|
|
156
|
+
val => {
|
|
157
|
+
if (val) {
|
|
158
|
+
const { setLocale } = useLocale();
|
|
159
|
+
setLocale(val);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
);
|
|
163
|
+
|
|
119
164
|
// 监听全局主题变更并触发事件
|
|
120
165
|
watch(
|
|
121
166
|
() => configProvider.currentThemeRef.value,
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
}"
|
|
19
19
|
v-if="props.showDays && (props.hideZeroDay || (!props.hideZeroDay && d != '00'))"
|
|
20
20
|
>
|
|
21
|
-
{{ props.separator == 'colon' && props.showHours ? ':' : '
|
|
21
|
+
{{ props.separator == 'colon' && props.showHours ? ':' : t('countDown.day') }}
|
|
22
22
|
</view>
|
|
23
23
|
<view class="u-countdown-item" :style="$u.toStyle(itemStyle)" v-if="props.showHours">
|
|
24
24
|
<view class="u-countdown-time" :style="{ fontSize: props.fontSize + 'rpx', color: props.color }">
|
|
@@ -34,7 +34,7 @@
|
|
|
34
34
|
}"
|
|
35
35
|
v-if="props.showHours"
|
|
36
36
|
>
|
|
37
|
-
{{ props.separator == 'colon' && props.showMinutes ? ':' : '
|
|
37
|
+
{{ props.separator == 'colon' && props.showMinutes ? ':' : t('countDown.hour') }}
|
|
38
38
|
</view>
|
|
39
39
|
<view class="u-countdown-item" :style="$u.toStyle(itemStyle)" v-if="props.showMinutes">
|
|
40
40
|
<view class="u-countdown-time" :style="{ fontSize: props.fontSize + 'rpx', color: props.color }">
|
|
@@ -50,7 +50,7 @@
|
|
|
50
50
|
}"
|
|
51
51
|
v-if="props.showMinutes"
|
|
52
52
|
>
|
|
53
|
-
{{ props.separator == 'colon' && props.showSeconds ? ':' : '
|
|
53
|
+
{{ props.separator == 'colon' && props.showSeconds ? ':' : t('countDown.minute') }}
|
|
54
54
|
</view>
|
|
55
55
|
<view class="u-countdown-item" :style="$u.toStyle(itemStyle)" v-if="props.showSeconds">
|
|
56
56
|
<view class="u-countdown-time" :style="{ fontSize: props.fontSize + 'rpx', color: props.color }">
|
|
@@ -62,7 +62,7 @@
|
|
|
62
62
|
:style="{ fontSize: props.separatorSize + 'rpx', color: props.separatorColor, paddingBottom: 0 }"
|
|
63
63
|
v-if="props.showSeconds && props.separator == 'zh'"
|
|
64
64
|
>
|
|
65
|
-
|
|
65
|
+
{{ t('countDown.second') }}
|
|
66
66
|
</view>
|
|
67
67
|
</view>
|
|
68
68
|
</template>
|
|
@@ -83,7 +83,9 @@ export default {
|
|
|
83
83
|
<script setup lang="ts">
|
|
84
84
|
import { ref, computed, watch, onMounted } from 'vue';
|
|
85
85
|
import { CountDownProps } from './types';
|
|
86
|
-
import { $u } from '../../';
|
|
86
|
+
import { $u, useLocale } from '../../';
|
|
87
|
+
|
|
88
|
+
const { t } = useLocale();
|
|
87
89
|
|
|
88
90
|
/**
|
|
89
91
|
* countDown 倒计时
|
|
@@ -37,7 +37,10 @@ export default {
|
|
|
37
37
|
|
|
38
38
|
<script setup lang="ts">
|
|
39
39
|
import { EmptyProps } from './types';
|
|
40
|
-
import { $u } from '../../';
|
|
40
|
+
import { $u, useLocale } from '../../';
|
|
41
|
+
import { computed } from 'vue';
|
|
42
|
+
|
|
43
|
+
const { t } = useLocale();
|
|
41
44
|
|
|
42
45
|
/**
|
|
43
46
|
* empty 内容为空
|
|
@@ -61,22 +64,24 @@ const props = defineProps(EmptyProps);
|
|
|
61
64
|
/**
|
|
62
65
|
* 预置图标对应的提示文字
|
|
63
66
|
*/
|
|
64
|
-
const icons
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
67
|
+
const icons = computed(() => {
|
|
68
|
+
return {
|
|
69
|
+
car: t('empty.car'),
|
|
70
|
+
page: t('empty.page'),
|
|
71
|
+
search: t('empty.search'),
|
|
72
|
+
address: t('empty.address'),
|
|
73
|
+
wifi: t('empty.wifi'),
|
|
74
|
+
order: t('empty.order'),
|
|
75
|
+
coupon: t('empty.coupon'),
|
|
76
|
+
favor: t('empty.favor'),
|
|
77
|
+
permission: t('empty.permission'),
|
|
78
|
+
history: t('empty.history'),
|
|
79
|
+
news: t('empty.news'),
|
|
80
|
+
message: t('empty.message'),
|
|
81
|
+
list: t('empty.list'),
|
|
82
|
+
data: t('empty.data')
|
|
83
|
+
};
|
|
84
|
+
});
|
|
80
85
|
</script>
|
|
81
86
|
|
|
82
87
|
<style scoped lang="scss">
|
|
@@ -4,8 +4,8 @@
|
|
|
4
4
|
:class="customClass"
|
|
5
5
|
:style="$u.toStyle(customStyle)"
|
|
6
6
|
:show-cancel-button="true"
|
|
7
|
-
confirm-text="
|
|
8
|
-
title="
|
|
7
|
+
:confirm-text="t('fullScreen.upgrade')"
|
|
8
|
+
:title="title || t('fullScreen.title')"
|
|
9
9
|
@cancel="cancel"
|
|
10
10
|
@confirm="confirm"
|
|
11
11
|
>
|
|
@@ -31,7 +31,7 @@ export default {
|
|
|
31
31
|
<script setup lang="ts">
|
|
32
32
|
import { FullScreenProps } from './types';
|
|
33
33
|
import { ref, onMounted } from 'vue';
|
|
34
|
-
import { $u } from '../../';
|
|
34
|
+
import { $u, useLocale } from '../../';
|
|
35
35
|
|
|
36
36
|
/**
|
|
37
37
|
* 压窗屏升级弹窗组件
|
|
@@ -48,12 +48,8 @@ const show = ref(false);
|
|
|
48
48
|
/**
|
|
49
49
|
* 升级内容,支持富文本
|
|
50
50
|
*/
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
2. 新增Modal模态框组件<br>
|
|
54
|
-
3. 新增压窗屏组件,可以在APP上以弹窗的形式遮盖导航栏和底部tabbar<br>
|
|
55
|
-
4. 修复键盘组件在微信小程序上遮罩无效的问题
|
|
56
|
-
`);
|
|
51
|
+
|
|
52
|
+
const { t } = useLocale();
|
|
57
53
|
|
|
58
54
|
/**
|
|
59
55
|
* 页面加载完成后自动显示弹窗
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import type { ExtractPropTypes, PropType } from 'vue';
|
|
2
2
|
import type { InputAlign, InputConfirmType, InputType } from '../../types/global';
|
|
3
3
|
import { baseProps } from '../common/props';
|
|
4
|
+
import { useLocale } from '../../';
|
|
5
|
+
|
|
6
|
+
const { t } = useLocale();
|
|
4
7
|
|
|
5
8
|
/**
|
|
6
9
|
* u-input 组件 props 类型定义
|
|
@@ -27,7 +30,7 @@ export const InputProps = {
|
|
|
27
30
|
/** placeholder显示值(默认 '请输入内容') */
|
|
28
31
|
placeholder: {
|
|
29
32
|
type: String,
|
|
30
|
-
default: '
|
|
33
|
+
default: () => t('input.placeholder')
|
|
31
34
|
},
|
|
32
35
|
/** 是否禁用输入框(默认false) */
|
|
33
36
|
disabled: {
|
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
import type { ExtractPropTypes, PropType } from 'vue';
|
|
2
|
+
import { useLocale } from '../../';
|
|
3
|
+
|
|
4
|
+
const { t } = useLocale();
|
|
2
5
|
|
|
3
6
|
/**
|
|
4
7
|
* u-keyboard 组件 Props 类型定义
|
|
@@ -32,9 +35,9 @@ export const KeyboardProps = {
|
|
|
32
35
|
/** z-index值 */
|
|
33
36
|
zIndex: { type: [Number, String] as PropType<string | number>, default: '' },
|
|
34
37
|
/** 取消按钮的文字 */
|
|
35
|
-
cancelText: { type: String, default: '
|
|
38
|
+
cancelText: { type: String, default: () => t('keyboard.cancelText') },
|
|
36
39
|
/** 确认按钮的文字 */
|
|
37
|
-
confirmText: { type: String, default: '
|
|
40
|
+
confirmText: { type: String, default: () => t('keyboard.confirmText') }
|
|
38
41
|
};
|
|
39
42
|
|
|
40
43
|
export type KeyboardProps = ExtractPropTypes<typeof KeyboardProps>;
|
|
@@ -16,7 +16,15 @@
|
|
|
16
16
|
{{ cancelBtn ? cancelText : '' }}
|
|
17
17
|
</view>
|
|
18
18
|
<view v-if="showTips" class="u-tooltip-item u-tooltip-tips">
|
|
19
|
-
{{
|
|
19
|
+
{{
|
|
20
|
+
tips
|
|
21
|
+
? tips
|
|
22
|
+
: mode == 'number'
|
|
23
|
+
? t('keyboard.number')
|
|
24
|
+
: mode == 'card'
|
|
25
|
+
? t('keyboard.idCard')
|
|
26
|
+
: t('keyboard.plate')
|
|
27
|
+
}}
|
|
20
28
|
</view>
|
|
21
29
|
<view
|
|
22
30
|
v-if="confirmBtn"
|
|
@@ -58,7 +66,7 @@ export default {
|
|
|
58
66
|
<script setup lang="ts">
|
|
59
67
|
import { KeyboardProps } from './types';
|
|
60
68
|
import { computed } from 'vue';
|
|
61
|
-
import { $u } from '../..';
|
|
69
|
+
import { $u, useLocale } from '../..';
|
|
62
70
|
|
|
63
71
|
/**
|
|
64
72
|
* keyboard 键盘
|
|
@@ -87,6 +95,8 @@ import { $u } from '../..';
|
|
|
87
95
|
const props = defineProps(KeyboardProps);
|
|
88
96
|
const emit = defineEmits(['change', 'update:modelValue', 'confirm', 'cancel', 'backspace']);
|
|
89
97
|
|
|
98
|
+
const { t } = useLocale();
|
|
99
|
+
|
|
90
100
|
const uZIndex = computed(() => (props.zIndex ? props.zIndex : $u.zIndex.popup));
|
|
91
101
|
|
|
92
102
|
const popupValue = computed({
|
|
@@ -147,12 +157,17 @@ function backspace() {
|
|
|
147
157
|
|
|
148
158
|
.u-tooltip-item {
|
|
149
159
|
color: var(--u-main-color);
|
|
150
|
-
flex: 0 0
|
|
160
|
+
flex: 0 0 30%;
|
|
151
161
|
text-align: center;
|
|
152
162
|
padding: 20rpx 10rpx;
|
|
153
163
|
font-size: 28rpx;
|
|
154
164
|
}
|
|
155
165
|
|
|
166
|
+
.u-tooltip-tips {
|
|
167
|
+
flex-basis: 40%;
|
|
168
|
+
word-break: break-all;
|
|
169
|
+
}
|
|
170
|
+
|
|
156
171
|
.u-tooltips-submit {
|
|
157
172
|
text-align: right;
|
|
158
173
|
flex-grow: 1;
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import type { ExtractPropTypes, PropType } from 'vue';
|
|
2
|
-
import { getColor } from '../../';
|
|
2
|
+
import { getColor, useLocale } from '../../';
|
|
3
|
+
|
|
4
|
+
const { t } = useLocale();
|
|
3
5
|
|
|
4
6
|
/**
|
|
5
7
|
* u-link 组件 props 类型定义
|
|
@@ -29,7 +31,7 @@ export const LinkProps = {
|
|
|
29
31
|
/** 小程序中复制到粘贴板的提示语 */
|
|
30
32
|
mpTips: {
|
|
31
33
|
type: String,
|
|
32
|
-
default: '
|
|
34
|
+
default: () => t('link.mpTips')
|
|
33
35
|
},
|
|
34
36
|
/** 下划线颜色 */
|
|
35
37
|
lineColor: {
|
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
import type { ExtractPropTypes, PropType } from 'vue';
|
|
2
2
|
import type { LoadmoreIconType, LoadmoreStatus, LoadmoreText } from '../../types/global';
|
|
3
|
+
import { useLocale } from '../../';
|
|
4
|
+
|
|
5
|
+
const { t } = useLocale();
|
|
3
6
|
|
|
4
7
|
/**
|
|
5
8
|
* u-loadmore 组件 props 类型定义
|
|
@@ -41,9 +44,9 @@ export const LoadmoreProps = {
|
|
|
41
44
|
loadText: {
|
|
42
45
|
type: Object as PropType<LoadmoreText>,
|
|
43
46
|
default: () => ({
|
|
44
|
-
loadmore: '
|
|
45
|
-
loading: '
|
|
46
|
-
nomore: '
|
|
47
|
+
loadmore: t('loadmore.loadmore'),
|
|
48
|
+
loading: t('loadmore.loading'),
|
|
49
|
+
nomore: t('loadmore.nomore')
|
|
47
50
|
})
|
|
48
51
|
},
|
|
49
52
|
/** 在“没有更多”状态下,是否显示粗点 */
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import type { ExtractPropTypes, PropType } from 'vue';
|
|
2
|
-
import { getColor } from '../../';
|
|
2
|
+
import { getColor, useLocale } from '../../';
|
|
3
3
|
import { baseProps } from '../common/props';
|
|
4
4
|
|
|
5
|
+
const { t } = useLocale();
|
|
6
|
+
|
|
5
7
|
/**
|
|
6
8
|
* u-modal 组件 props 类型定义
|
|
7
9
|
* @description 弹窗模态框,支持多种样式和交互
|
|
@@ -21,7 +23,7 @@ export const ModalProps = {
|
|
|
21
23
|
/** 标题 */
|
|
22
24
|
title: {
|
|
23
25
|
type: String,
|
|
24
|
-
default: '
|
|
26
|
+
default: () => t('modal.title')
|
|
25
27
|
},
|
|
26
28
|
/** 弹窗宽度 */
|
|
27
29
|
width: {
|
|
@@ -31,7 +33,7 @@ export const ModalProps = {
|
|
|
31
33
|
/** 弹窗内容 */
|
|
32
34
|
content: {
|
|
33
35
|
type: String,
|
|
34
|
-
default: '
|
|
36
|
+
default: () => t('modal.content')
|
|
35
37
|
},
|
|
36
38
|
/** 是否显示标题 */
|
|
37
39
|
showTitle: {
|
|
@@ -51,12 +53,12 @@ export const ModalProps = {
|
|
|
51
53
|
/** 确认文案 */
|
|
52
54
|
confirmText: {
|
|
53
55
|
type: String,
|
|
54
|
-
default: '
|
|
56
|
+
default: () => t('modal.confirmText')
|
|
55
57
|
},
|
|
56
58
|
/** 取消文案 */
|
|
57
59
|
cancelText: {
|
|
58
60
|
type: String,
|
|
59
|
-
default: '
|
|
61
|
+
default: () => t('modal.cancelText')
|
|
60
62
|
},
|
|
61
63
|
/** 确认按钮颜色 */
|
|
62
64
|
confirmColor: {
|