123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 |
- <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="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) {
- this.handlePreview && this.handlePreview(file);
- }
- }
- };
- </script>
|