diff --git a/packages/vant-cli/site/desktop/components/Header.vue b/packages/vant-cli/site/desktop/components/Header.vue
index 052a73b9e..d2a1abc98 100644
--- a/packages/vant-cli/site/desktop/components/Header.vue
+++ b/packages/vant-cli/site/desktop/components/Header.vue
@@ -296,7 +296,7 @@ export default {
&__subtitle {
display: inline-block;
color: #999;
- margin-left: 8px;
+ margin-left: 4px;
vertical-align: -4px;
font-size: 13px;
}
diff --git a/packages/vant/src/contact-edit/README.md b/packages/vant/src/contact-edit/README.md
index 17a0c2f2f..2ec7a67f3 100644
--- a/packages/vant/src/contact-edit/README.md
+++ b/packages/vant/src/contact-edit/README.md
@@ -37,7 +37,10 @@ import { Toast } from 'vant';
export default {
setup() {
- const editingContact = ref({});
+ const editingContact = ref({
+ tel: '',
+ name: '',
+ });
const onSave = (contactInfo) => Toast('Save');
const onDelete = (contactInfo) => Toast('Delete');
return {
diff --git a/packages/vant/src/contact-edit/README.zh-CN.md b/packages/vant/src/contact-edit/README.zh-CN.md
index 713e80750..fec176f4b 100644
--- a/packages/vant/src/contact-edit/README.zh-CN.md
+++ b/packages/vant/src/contact-edit/README.zh-CN.md
@@ -37,7 +37,10 @@ import { Toast } from 'vant';
export default {
setup() {
- const editingContact = ref({});
+ const editingContact = ref({
+ tel: '',
+ name: '',
+ });
const onSave = (contactInfo) => Toast('保存');
const onDelete = (contactInfo) => Toast('删除');
return {
diff --git a/packages/vant/src/contact-edit/demo/index.vue b/packages/vant/src/contact-edit/demo/index.vue
index 7e36f7ee8..23405172c 100644
--- a/packages/vant/src/contact-edit/demo/index.vue
+++ b/packages/vant/src/contact-edit/demo/index.vue
@@ -1,6 +1,6 @@
diff --git a/packages/vant/src/swipe-cell/demo/index.vue b/packages/vant/src/swipe-cell/demo/index.vue
index ca6b53d4f..116196e27 100644
--- a/packages/vant/src/swipe-cell/demo/index.vue
+++ b/packages/vant/src/swipe-cell/demo/index.vue
@@ -38,10 +38,12 @@ const beforeClose = ({ position }: { position: string }) => {
case 'outside':
return true;
case 'right':
- return new Promise((resolve) => {
+ return new Promise((resolve) => {
Dialog.confirm({
title: t('confirm'),
- }).then(resolve);
+ }).then(() => {
+ resolve(true);
+ });
});
}
};
diff --git a/packages/vant/src/tab/demo/index.vue b/packages/vant/src/tab/demo/index.vue
index 456e380a3..ddace0cb1 100644
--- a/packages/vant/src/tab/demo/index.vue
+++ b/packages/vant/src/tab/demo/index.vue
@@ -64,7 +64,7 @@ const beforeChange = (name: number) => {
if (name === 1) {
return false;
}
- return new Promise((resolve) => {
+ return new Promise((resolve) => {
resolve(name !== 3);
});
};
diff --git a/packages/vant/src/toast/Toast.tsx b/packages/vant/src/toast/Toast.tsx
index 347124f13..58b3c2dbc 100644
--- a/packages/vant/src/toast/Toast.tsx
+++ b/packages/vant/src/toast/Toast.tsx
@@ -4,6 +4,7 @@ import {
onUnmounted,
defineComponent,
type PropType,
+ type TeleportProps,
type CSSProperties,
type ExtractPropTypes,
} from 'vue';
@@ -49,6 +50,7 @@ const toastProps = {
iconSize: numericProp,
duration: makeNumberProp(2000),
position: makeStringProp('middle'),
+ teleport: [String, Object] as PropType,
className: unknownProp,
iconPrefix: String,
transition: makeStringProp('van-fade'),
diff --git a/packages/vant/src/uploader/demo/index.vue b/packages/vant/src/uploader/demo/index.vue
index 8d9d849c4..b472ed685 100644
--- a/packages/vant/src/uploader/demo/index.vue
+++ b/packages/vant/src/uploader/demo/index.vue
@@ -56,7 +56,7 @@ const fileList3 = ref([]);
const fileList4 = ref([{ url: 'https://img.yzcdn.cn/vant/sand.jpg' }]);
-const fileList5 = ref([
+const fileList5 = ref([
{ url: 'https://img.yzcdn.cn/vant/leaf.jpg' },
{
url: 'https://img.yzcdn.cn/vant/sand.jpg',
@@ -73,7 +73,7 @@ const fileList5 = ref([
},
]);
-const statusFileList = ref([
+const statusFileList = ref([
{
url: 'https://img.yzcdn.cn/vant/leaf.jpg',
status: 'uploading',
@@ -86,16 +86,19 @@ const statusFileList = ref([
},
]);
-const previewCoverFiles = ref([
+const previewCoverFiles = ref([
{
url: 'https://img.yzcdn.cn/vant/leaf.jpg',
file: {
name: t('imageName'),
- },
+ } as File,
},
]);
-const beforeRead = (file: File) => {
+const beforeRead = (file: File | File[]) => {
+ if (Array.isArray(file)) {
+ return true;
+ }
if (file.type !== 'image/jpeg') {
Toast(t('invalidType'));
return false;
@@ -103,11 +106,14 @@ const beforeRead = (file: File) => {
return true;
};
-const afterRead = (file: UploaderFileListItem, detail: unknown) => {
+const afterRead = (
+ file: UploaderFileListItem | UploaderFileListItem[],
+ detail: unknown
+) => {
console.log(file, detail);
};
-const afterReadFailed = (item: UploaderFileListItem) => {
+const setItemLoading = (item: UploaderFileListItem) => {
item.status = 'uploading';
item.message = t('uploading');
@@ -117,6 +123,16 @@ const afterReadFailed = (item: UploaderFileListItem) => {
}, 1000);
};
+const afterReadFailed = (
+ item: UploaderFileListItem | UploaderFileListItem[]
+) => {
+ if (Array.isArray(item)) {
+ item.forEach(setItemLoading);
+ } else {
+ setItemLoading(item);
+ }
+};
+
const onOversize = (file: UploaderFileListItem, detail: unknown) => {
console.log(file, detail);
Toast(t('overSizeTip'));
diff --git a/packages/vant/src/uploader/test/index.spec.ts b/packages/vant/src/uploader/test/index.spec.ts
index 38295523a..73cac2700 100644
--- a/packages/vant/src/uploader/test/index.spec.ts
+++ b/packages/vant/src/uploader/test/index.spec.ts
@@ -99,7 +99,7 @@ test('set input name', (done) => {
detail: { name: string | number; index: number }
) => {
expect(detail.name).toEqual('uploader');
- return file;
+ return true;
},
afterRead: (
readFile: UploaderFileListItem | UploaderFileListItem[],
diff --git a/packages/vant/src/uploader/types.ts b/packages/vant/src/uploader/types.ts
index 5b8530918..2b422c862 100644
--- a/packages/vant/src/uploader/types.ts
+++ b/packages/vant/src/uploader/types.ts
@@ -20,15 +20,13 @@ export type UploaderFileListItem = {
export type UploaderMaxSize = number | string | ((file: File) => boolean);
-type PromiseOrNot = T | Promise;
-
export type UploaderBeforeRead = (
file: File | File[],
detail: {
name: string | number;
index: number;
}
-) => PromiseOrNot;
+) => boolean | undefined | Promise;
export type UploaderAfterRead = (
items: UploaderFileListItem | UploaderFileListItem[],
diff --git a/packages/vant/src/utils/interceptor.ts b/packages/vant/src/utils/interceptor.ts
index 6644642d1..87b5c813f 100644
--- a/packages/vant/src/utils/interceptor.ts
+++ b/packages/vant/src/utils/interceptor.ts
@@ -3,7 +3,7 @@ import { isPromise } from './validate';
export type Interceptor = (
...args: any[]
-) => Promise | boolean | undefined;
+) => Promise | boolean | undefined | void;
export function callInterceptor(
interceptor: Interceptor | undefined,