Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(uploader): add single uploader preview image style #7776

Merged
merged 2 commits into from
Dec 21, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
33 changes: 33 additions & 0 deletions src/uploader/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -191,6 +191,39 @@ Use `disabled` prop to disable uploader.
<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

### Props
Expand Down
35 changes: 35 additions & 0 deletions src/uploader/README.zh-CN.md
Original file line number Diff line number Diff line change
Expand Up @@ -219,6 +219,41 @@ export default {
<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

### Props
Expand Down
29 changes: 29 additions & 0 deletions src/uploader/demo/index.vue
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,15 @@
<demo-block :title="t('disabled')">
<van-uploader :after-read="afterRead" disabled />
</demo-block>

<demo-block :title="t('customPreviewImage')">
<van-uploader
v-model="fileList5"
multiple
accept="*"
:deletable="false"
/>
</demo-block>
</demo-section>
</template>

Expand All @@ -69,6 +78,8 @@ export default {
invalidType: '请上传 jpg 格式图片',
customUpload: '自定义上传样式',
previewCover: '自定义预览样式',
customPreviewImage: '自定义单个图片预览',
deleteMessage: '删除前置处理',
},
'en-US': {
status: 'Upload Status',
Expand All @@ -85,6 +96,8 @@ export default {
invalidType: 'Please upload an image in jpg format',
customUpload: 'Custom Upload Area',
previewCover: 'Preview Cover',
customPreviewImage: 'Custom single prevew image',
deleteMessage: 'Before Delete',
},
},

Expand All @@ -97,6 +110,22 @@ export default {
fileList2: [{ url: 'https://img.yzcdn.cn/vant/sand.jpg' }],
fileList3: [],
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: [],
previewCoverFiles: [],
};
Expand Down
17 changes: 11 additions & 6 deletions src/uploader/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -212,8 +212,9 @@ export default createComponent({
},

onDelete(file, index) {
if (this.beforeDelete) {
const response = this.beforeDelete(file, this.getDetail(index));
const beforeDelete = file.beforeDelete ?? this.beforeDelete;
if (beforeDelete) {
const response = beforeDelete(file, this.getDetail(index));

if (!response) {
return;
Expand Down Expand Up @@ -306,7 +307,8 @@ export default createComponent({
},

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 && (
<div
Expand All @@ -329,13 +331,16 @@ export default createComponent({
<div class={bem('preview-cover')}>{PreviewCoverContent}</div>
);

const previewSize = item.previewSize ?? this.previewSize;
const imageFit = item.imageFit ?? this.imageFit;

const Preview = isImageFile(item) ? (
<Image
fit={this.imageFit}
fit={imageFit}
src={item.content || item.url}
class={bem('preview-image')}
width={this.previewSize}
height={this.previewSize}
width={previewSize}
height={previewSize}
lazyLoad={this.lazyLoad}
onClick={() => {
this.onPreviewImage(item);
Expand Down
30 changes: 30 additions & 0 deletions src/uploader/test/__snapshots__/demo.spec.js.snap
Original file line number Diff line number Diff line change
Expand Up @@ -143,5 +143,35 @@ exports[`renders demo correctly 1`] = `
</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>
`;