108 lines
3.2 KiB
Plaintext
108 lines
3.2 KiB
Plaintext
<template>
|
||
<transition-group
|
||
tag="ul"
|
||
:class="[
|
||
'el-upload-list',
|
||
'el-upload-list--' + listType,
|
||
{ 'is-disabled': disabled }
|
||
]"
|
||
name="el-list"
|
||
>
|
||
<li
|
||
v-for="file in files"
|
||
:class="['el-upload-list__item', 'is-' + file.status, focusing ? 'focusing' : '']"
|
||
:key="file.uid"
|
||
tabindex="0"
|
||
@keydown.delete="!disabled && $emit('remove', file)"
|
||
@focus="focusing = true"
|
||
@blur="focusing = false"
|
||
@click="focusing = false"
|
||
>
|
||
<slot :file="file">
|
||
<img
|
||
class="el-upload-list__item-thumbnail"
|
||
v-if="file.status !== 'uploading' && ['picture-card', 'picture'].indexOf(listType) > -1"
|
||
:src="OSSclientConfig.basePath + file.url" alt=""
|
||
>
|
||
<a class="el-upload-list__item-name" @click="handleClick(file)">
|
||
<i class="el-icon-document"></i>{{file.name}}
|
||
</a>
|
||
<label class="el-upload-list__item-status-label">
|
||
<i :class="{
|
||
'el-icon-upload-success': true,
|
||
'el-icon-circle-check': listType === 'text',
|
||
'el-icon-check': ['picture-card', 'picture'].indexOf(listType) > -1
|
||
}"></i>
|
||
</label>
|
||
<i class="el-icon-close" v-if="!disabled" @click="$emit('remove', file)"></i>
|
||
<i class="el-icon-close-tip" v-if="!disabled">{{ t('el.upload.deleteTip') }}</i> <!--因为close按钮只在li:focus的时候 display, li blur后就不存在了,所以键盘导航时永远无法 focus到 close按钮上-->
|
||
<el-progress
|
||
v-if="file.status === 'uploading'"
|
||
:type="listType === 'picture-card' ? 'circle' : 'line'"
|
||
:stroke-width="listType === 'picture-card' ? 6 : 2"
|
||
:percentage="parsePercentage(file.percentage)">
|
||
</el-progress>
|
||
<span class="el-upload-list__item-actions" v-if="listType === 'picture-card'">
|
||
<span
|
||
class="el-upload-list__item-preview"
|
||
v-if="handlePreview && listType === 'picture-card'"
|
||
@click="handlePreview(file)"
|
||
>
|
||
<i class="el-icon-zoom-in"></i>
|
||
</span>
|
||
<span
|
||
v-if="!disabled"
|
||
class="el-upload-list__item-delete"
|
||
@click="$emit('remove', file)"
|
||
>
|
||
<i class="el-icon-delete"></i>
|
||
</span>
|
||
</span>
|
||
</slot>
|
||
</li>
|
||
</transition-group>
|
||
</template>
|
||
<script>
|
||
import Locale from 'element-ui/src/mixins/locale';
|
||
import ElProgress from 'element-ui/packages/progress';
|
||
|
||
export default {
|
||
|
||
name: 'ElUploadList',
|
||
|
||
mixins: [Locale],
|
||
|
||
data() {
|
||
return {
|
||
focusing: false
|
||
};
|
||
},
|
||
components: { ElProgress },
|
||
|
||
props: {
|
||
files: {
|
||
type: Array,
|
||
default() {
|
||
return [];
|
||
}
|
||
},
|
||
disabled: {
|
||
type: Boolean,
|
||
default: false
|
||
},
|
||
handlePreview: Function,
|
||
listType: String
|
||
},
|
||
methods: {
|
||
parsePercentage(val) {
|
||
return parseInt(val, 10);
|
||
},
|
||
handleClick(file) {
|
||
console.log(file)
|
||
window.open(this.OSSclientConfig.basePath + file.url)
|
||
// this.handlePreview && this.handlePreview(file);
|
||
}
|
||
}
|
||
};
|
||
</script>
|