Recv/public/src/route/admin/Uploads.vue

157 lines
3.2 KiB
Vue

<template>
<div id="uploads">
<div v-if="uploads !== null">
<div class="pure-g list-header">
<div class="pure-u-1-3"><span class="text">{{ $t('admin.uploads.created') }}</span></div>
<div class="pure-u-1-3"><span class="text">{{ $t('admin.uploads.code') }}</span></div>
<div class="pure-u-1-3"><span class="text">{{ $t('admin.uploads.owner') }}</span></div>
</div>
<div v-for="upload in uploads" class="list">
<div class="properties">
<div class="pure-g">
<div class="pure-u-1-3"><span class="text">{{ upload.created | formatDateTime }}</span></div>
<div class="pure-u-1-3"><span class="text">{{ upload.code }}</span></div>
<div class="pure-u-1-3"><span class="text">{{ upload.username }}</span></div>
</div>
</div>
<div class="file" v-for="file in upload.files" :title="file.name">
<a :href="getDownloadUrl(file)">
<img :src="getFileIconUrl(file.name)" class="icon">
<span class="filename">{{ file.name }}</span>
<span class="size">{{ file.size | formatSizeSI }}</span>
</a>
</div>
</div>
<div v-if="uploads.length == 0" class="nodata">
{{ $t('admin.empty') }}
</div>
</div>
<div v-else class="loading">
{{ $t('admin.loading') }}
</div>
</div>
</template>
<script>
import _ from 'lodash';
import axios from 'axios';
import shared from '../../shared';
export default {
data()
{
return {
uploads: null
};
},
created()
{
var self = this;
if (!shared.adminToken)
{
self.$router.push('/admin');
return;
}
axios.get('/admin/uploads', {
headers: {
Authorization: 'Bearer ' + shared.adminToken
}
})
.then((response) =>
{
self.uploads = _.orderBy(response.data, ['created'], ['desc']);
})
.catch((error) => { shared.$emit('apiError', error, this.$router) });
},
methods: {
getFileIconUrl(filename)
{
var ext = this.getExtension(filename);
if (ext == '')
ext = '_blank';
return '/images/fileicons/32px/' + ext + '.png';
},
getExtension(filename)
{
var parts = filename.split('.');
return parts.length > 0 ? parts.pop() : '';
},
getDownloadUrl(file)
{
return '/admin/download/' + encodeURIComponent(file.id) + '/' + encodeURIComponent(file.name);
}
}
}
</script>
<style lang="scss">
.file
{
display: inline-block;
width: 10rem;
padding: .5rem;
margin-top: .5rem;
border: solid 1px transparent;
font-size: 75%;
text-align: center;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
a
{
color: black;
text-decoration: none;
}
.icon
{
display: block;
margin-bottom: .5rem;
margin-left: auto;
margin-right: auto;
}
.filename, .size
{
display: block;
}
.size
{
color: #808080;
}
&:hover
{
background-color: #d3e9f8;
border: solid 1px #a7d3f1;
}
}
.properties
{
background-color: #f4f4f4;
padding: .2rem;
}
</style>