mirror of
https://gitee.com/vant-contrib/vant.git
synced 2025-04-25 19:06:36 +08:00
feat(uploader): add single uploader preview image style (#7776)
add single uploader preview image style
This commit is contained in:
parent
cdd48318db
commit
0e68369d47
@ -191,6 +191,39 @@ Use `disabled` prop to disable uploader.
|
|||||||
<van-uploader disabled />
|
<van-uploader disabled />
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### Customize Single Preview Image Style
|
||||||
|
|
||||||
|
```html
|
||||||
|
<van-uploader v-model="fileList" :deletable="false" />
|
||||||
|
```
|
||||||
|
|
||||||
|
```js
|
||||||
|
import { Toast } from 'vant';
|
||||||
|
|
||||||
|
export default {
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
fileList = [
|
||||||
|
{ url: 'https://img.yzcdn.cn/vant/leaf.jpg' },
|
||||||
|
{
|
||||||
|
url: 'https://img.yzcdn.cn/vant/sand.jpg',
|
||||||
|
deletable: true,
|
||||||
|
beforeDelete: () => {
|
||||||
|
Toast('Customize the events and styles of a single preview image');
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
url: 'https://img.yzcdn.cn/vant/tree.jpg',
|
||||||
|
deletable: true,
|
||||||
|
imageFit: 'contain',
|
||||||
|
previewSize: 120,
|
||||||
|
},
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
## API
|
## API
|
||||||
|
|
||||||
### Props
|
### Props
|
||||||
|
@ -219,6 +219,41 @@ export default {
|
|||||||
<van-uploader disabled />
|
<van-uploader disabled />
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### 自定义单个图片预览
|
||||||
|
|
||||||
|
在 `v-model` 数组中设置单个预览图片属性,支持 `imageFit`,`deletable`,`previewSize`,`beforeDelete`
|
||||||
|
|
||||||
|
```html
|
||||||
|
<van-uploader v-model="fileList" :deletable="false" />
|
||||||
|
```
|
||||||
|
|
||||||
|
```js
|
||||||
|
import { Toast } from 'vant';
|
||||||
|
|
||||||
|
export default {
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
fileList = [
|
||||||
|
{ url: 'https://img.yzcdn.cn/vant/leaf.jpg' },
|
||||||
|
{
|
||||||
|
url: 'https://img.yzcdn.cn/vant/sand.jpg',
|
||||||
|
deletable: true,
|
||||||
|
beforeDelete: () => {
|
||||||
|
Toast('自定义单个预览图片的事件和样式');
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
url: 'https://img.yzcdn.cn/vant/tree.jpg',
|
||||||
|
deletable: true,
|
||||||
|
imageFit: 'contain',
|
||||||
|
previewSize: 120,
|
||||||
|
},
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
## API
|
## API
|
||||||
|
|
||||||
### Props
|
### Props
|
||||||
|
@ -48,6 +48,15 @@
|
|||||||
<demo-block :title="t('disabled')">
|
<demo-block :title="t('disabled')">
|
||||||
<van-uploader :after-read="afterRead" disabled />
|
<van-uploader :after-read="afterRead" disabled />
|
||||||
</demo-block>
|
</demo-block>
|
||||||
|
|
||||||
|
<demo-block :title="t('customPreviewImage')">
|
||||||
|
<van-uploader
|
||||||
|
v-model="fileList5"
|
||||||
|
multiple
|
||||||
|
accept="*"
|
||||||
|
:deletable="false"
|
||||||
|
/>
|
||||||
|
</demo-block>
|
||||||
</demo-section>
|
</demo-section>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
@ -69,6 +78,8 @@ export default {
|
|||||||
invalidType: '请上传 jpg 格式图片',
|
invalidType: '请上传 jpg 格式图片',
|
||||||
customUpload: '自定义上传样式',
|
customUpload: '自定义上传样式',
|
||||||
previewCover: '自定义预览样式',
|
previewCover: '自定义预览样式',
|
||||||
|
customPreviewImage: '自定义单个图片预览',
|
||||||
|
deleteMessage: '删除前置处理',
|
||||||
},
|
},
|
||||||
'en-US': {
|
'en-US': {
|
||||||
status: 'Upload Status',
|
status: 'Upload Status',
|
||||||
@ -85,6 +96,8 @@ export default {
|
|||||||
invalidType: 'Please upload an image in jpg format',
|
invalidType: 'Please upload an image in jpg format',
|
||||||
customUpload: 'Custom Upload Area',
|
customUpload: 'Custom Upload Area',
|
||||||
previewCover: 'Preview Cover',
|
previewCover: 'Preview Cover',
|
||||||
|
customPreviewImage: 'Custom single prevew image',
|
||||||
|
deleteMessage: 'Before Delete',
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -97,6 +110,22 @@ export default {
|
|||||||
fileList2: [{ url: 'https://img.yzcdn.cn/vant/sand.jpg' }],
|
fileList2: [{ url: 'https://img.yzcdn.cn/vant/sand.jpg' }],
|
||||||
fileList3: [],
|
fileList3: [],
|
||||||
fileList4: [{ url: 'https://img.yzcdn.cn/vant/sand.jpg' }],
|
fileList4: [{ url: 'https://img.yzcdn.cn/vant/sand.jpg' }],
|
||||||
|
fileList5: [
|
||||||
|
{ url: 'https://img.yzcdn.cn/vant/leaf.jpg' },
|
||||||
|
{
|
||||||
|
url: 'https://img.yzcdn.cn/vant/sand.jpg',
|
||||||
|
deletable: true,
|
||||||
|
beforeDelete: () => {
|
||||||
|
this.$toast(this.t('deleteMessage'));
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
url: 'https://img.yzcdn.cn/vant/tree.jpg',
|
||||||
|
deletable: true,
|
||||||
|
imageFit: 'contain',
|
||||||
|
previewSize: 120,
|
||||||
|
},
|
||||||
|
],
|
||||||
statusFileList: [],
|
statusFileList: [],
|
||||||
previewCoverFiles: [],
|
previewCoverFiles: [],
|
||||||
};
|
};
|
||||||
|
@ -212,8 +212,9 @@ export default createComponent({
|
|||||||
},
|
},
|
||||||
|
|
||||||
onDelete(file, index) {
|
onDelete(file, index) {
|
||||||
if (this.beforeDelete) {
|
const beforeDelete = file.beforeDelete ?? this.beforeDelete;
|
||||||
const response = this.beforeDelete(file, this.getDetail(index));
|
if (beforeDelete) {
|
||||||
|
const response = beforeDelete(file, this.getDetail(index));
|
||||||
|
|
||||||
if (!response) {
|
if (!response) {
|
||||||
return;
|
return;
|
||||||
@ -306,7 +307,8 @@ export default createComponent({
|
|||||||
},
|
},
|
||||||
|
|
||||||
genPreviewItem(item, index) {
|
genPreviewItem(item, index) {
|
||||||
const showDelete = item.status !== 'uploading' && this.deletable;
|
const deleteAble = item.deletable ?? this.deletable;
|
||||||
|
const showDelete = item.status !== 'uploading' && deleteAble;
|
||||||
|
|
||||||
const DeleteIcon = showDelete && (
|
const DeleteIcon = showDelete && (
|
||||||
<div
|
<div
|
||||||
@ -329,13 +331,16 @@ export default createComponent({
|
|||||||
<div class={bem('preview-cover')}>{PreviewCoverContent}</div>
|
<div class={bem('preview-cover')}>{PreviewCoverContent}</div>
|
||||||
);
|
);
|
||||||
|
|
||||||
|
const previewSize = item.previewSize ?? this.previewSize;
|
||||||
|
const imageFit = item.imageFit ?? this.imageFit;
|
||||||
|
|
||||||
const Preview = isImageFile(item) ? (
|
const Preview = isImageFile(item) ? (
|
||||||
<Image
|
<Image
|
||||||
fit={this.imageFit}
|
fit={imageFit}
|
||||||
src={item.content || item.url}
|
src={item.content || item.url}
|
||||||
class={bem('preview-image')}
|
class={bem('preview-image')}
|
||||||
width={this.previewSize}
|
width={previewSize}
|
||||||
height={this.previewSize}
|
height={previewSize}
|
||||||
lazyLoad={this.lazyLoad}
|
lazyLoad={this.lazyLoad}
|
||||||
onClick={() => {
|
onClick={() => {
|
||||||
this.onPreviewImage(item);
|
this.onPreviewImage(item);
|
||||||
|
@ -143,5 +143,35 @@ exports[`renders demo correctly 1`] = `
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div>
|
||||||
|
<div class="van-uploader">
|
||||||
|
<div class="van-uploader__wrapper">
|
||||||
|
<div class="van-uploader__preview">
|
||||||
|
<div class="van-image van-uploader__preview-image"><img src="https://img.yzcdn.cn/vant/leaf.jpg" class="van-image__img" style="object-fit: cover;">
|
||||||
|
<div class="van-image__loading"><i class="van-icon van-icon-photo van-image__loading-icon">
|
||||||
|
<!----></i></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="van-uploader__preview">
|
||||||
|
<div class="van-image van-uploader__preview-image"><img src="https://img.yzcdn.cn/vant/sand.jpg" class="van-image__img" style="object-fit: cover;">
|
||||||
|
<div class="van-image__loading"><i class="van-icon van-icon-photo van-image__loading-icon">
|
||||||
|
<!----></i></div>
|
||||||
|
</div>
|
||||||
|
<div class="van-uploader__preview-delete"><i class="van-icon van-icon-cross van-uploader__preview-delete-icon">
|
||||||
|
<!----></i></div>
|
||||||
|
</div>
|
||||||
|
<div class="van-uploader__preview">
|
||||||
|
<div class="van-image van-uploader__preview-image" style="width: 120px; height: 120px;"><img src="https://img.yzcdn.cn/vant/tree.jpg" class="van-image__img" style="object-fit: contain;">
|
||||||
|
<div class="van-image__loading"><i class="van-icon van-icon-photo van-image__loading-icon">
|
||||||
|
<!----></i></div>
|
||||||
|
</div>
|
||||||
|
<div class="van-uploader__preview-delete"><i class="van-icon van-icon-cross van-uploader__preview-delete-icon">
|
||||||
|
<!----></i></div>
|
||||||
|
</div>
|
||||||
|
<div class="van-uploader__upload"><i class="van-icon van-icon-photograph van-uploader__upload-icon">
|
||||||
|
<!----></i><input multiple="multiple" type="file" accept="*" class="van-uploader__input"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
`;
|
`;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user