174 lines
5.5 KiB
Vue
174 lines
5.5 KiB
Vue
<template>
|
|
<div class="mt-6" v-resize="onResize">
|
|
<span class="v-label v-label--active theme--light">
|
|
{{ $ay.t("Attachments") }}
|
|
</span>
|
|
<v-tabs v-model="tab" color="primary">
|
|
<v-tabs-slider></v-tabs-slider>
|
|
<v-tab key="list"><v-icon>fa-folder</v-icon></v-tab>
|
|
<v-tab key="attach"><v-icon>fa-paperclip</v-icon></v-tab>
|
|
<v-tabs-items v-model="tab">
|
|
<v-tab-item key="list">
|
|
<div class="mt-4" :style="cardTextStyle()">
|
|
<v-list color="grey lighten-5" three-line>
|
|
<v-list-item v-for="item in displayList" :key="item.id">
|
|
<!-- @click="download(item.id)" -->
|
|
<v-list-item-avatar>
|
|
<v-icon v-text="item.icon"></v-icon>
|
|
</v-list-item-avatar>
|
|
|
|
<v-list-item-content>
|
|
<v-list-item-title v-html="item.title"></v-list-item-title>
|
|
|
|
<v-list-item-subtitle
|
|
v-text="item.date"
|
|
></v-list-item-subtitle>
|
|
|
|
<v-list-item-subtitle
|
|
v-text="item.notes"
|
|
></v-list-item-subtitle>
|
|
</v-list-item-content>
|
|
|
|
<v-list-item-action>
|
|
<v-btn icon>
|
|
<v-icon>fa-edit</v-icon>
|
|
</v-btn>
|
|
<v-btn icon>
|
|
<v-icon>fa-trash</v-icon>
|
|
</v-btn>
|
|
</v-list-item-action>
|
|
</v-list-item>
|
|
</v-list>
|
|
</div>
|
|
</v-tab-item>
|
|
<v-tab-item key="attach">
|
|
<div class="mt-8">
|
|
<v-file-input
|
|
v-model="uploadFiles"
|
|
:label="$ay.t('AttachFile')"
|
|
prepend-icon="fa-paperclip"
|
|
multiple
|
|
chips
|
|
></v-file-input>
|
|
<v-text-field
|
|
v-model="notes"
|
|
:label="$ay.t('AttachmentNotes')"
|
|
></v-text-field>
|
|
<v-btn color="primary" text @click="upload">{{
|
|
$ay.t("Upload")
|
|
}}</v-btn>
|
|
</div>
|
|
</v-tab-item>
|
|
</v-tabs-items>
|
|
</v-tabs>
|
|
</div>
|
|
</template>
|
|
<script>
|
|
export default {
|
|
created() {
|
|
this.getList();
|
|
},
|
|
data() {
|
|
return {
|
|
height: 300,
|
|
attachedFiles: [],
|
|
displayList: [],
|
|
notes: null,
|
|
tab: null,
|
|
uploadFiles: []
|
|
};
|
|
},
|
|
props: {
|
|
ayaType: Number,
|
|
ayaId: Number,
|
|
readonly: Boolean
|
|
},
|
|
computed: {},
|
|
methods: {
|
|
onResize() {
|
|
this.height = window.innerHeight * 0.8;
|
|
},
|
|
cardTextStyle() {
|
|
return "height: " + this.height + "px;overflow-y:auto;";
|
|
},
|
|
upload() {
|
|
let vm = this;
|
|
let at = {
|
|
ayaId: vm.ayaId,
|
|
ayaType: vm.ayaType,
|
|
files: vm.uploadFiles,
|
|
notes: vm.notes ? vm.notes : ""
|
|
};
|
|
|
|
window.$gz.api
|
|
.uploadAttachment(at)
|
|
.then(res => {
|
|
if (res.error) {
|
|
window.$gz.errorHandler.handleFormError(res.error);
|
|
} else {
|
|
vm.uploadFiles = [];
|
|
vm.attachedFiles = res.data;
|
|
vm.updateDisplayList();
|
|
}
|
|
})
|
|
.catch(function handleUploadError(error) {
|
|
window.$gz.errorHandler.handleFormError(error);
|
|
});
|
|
},
|
|
getList() {
|
|
let vm = this;
|
|
window.$gz.api
|
|
.get("Attachment/list?ayatype=" + vm.ayaType + "&ayaid=" + vm.ayaId)
|
|
.then(res => {
|
|
if (res.error) {
|
|
window.$gz.errorHandler.handleFormError(res.error);
|
|
} else {
|
|
vm.attachedFiles = res.data;
|
|
vm.updateDisplayList();
|
|
}
|
|
})
|
|
.catch(function handleGetListError(error) {
|
|
window.$gz.errorHandler.handleFormError(error);
|
|
});
|
|
},
|
|
download(item) {
|
|
console.log("CLICK", item);
|
|
},
|
|
updateDisplayList() {
|
|
//{"data":[{"id":1,"concurrencyToken":7733332,"contentType":"image/png","displayFileName":"Screen Shot 2020-01-09 at 10.50.24.png","lastModified":"0001-01-01T00:00:00Z","notes":"Here are notes"},{"id":4,"concurrencyToken":7733354,"contentType":"text/plain","displayFileName":"TNT log file ayanova.txt","lastModified":"0001-01-01T00:00:00Z","notes":"Here are notes"},{"id":2,"concurrencyToken":7733342,"contentType":"text/plain","displayFileName":"stack.txt","lastModified":"0001-01-01T00:00:00Z","notes":"Here are notes"},{"id":3,"concurrencyToken":7733348,"contentType":"image/jpeg","displayFileName":"t2cx6sloffk41.jpg","lastModified":"0001-01-01T00:00:00Z","notes":"Here are notes"}]}
|
|
if (!this.attachedFiles) {
|
|
this.attachedFiles = [];
|
|
}
|
|
|
|
let timeZoneName = window.$gz.locale.getBrowserTimeZoneName();
|
|
let languageName = window.$gz.locale.getBrowserLanguages();
|
|
let hour12 = window.$gz.store.state.locale.hour12;
|
|
let ret = [];
|
|
for (let i = 0; i < this.attachedFiles.length; i++) {
|
|
let o = this.attachedFiles[i];
|
|
//http://localhost:7575/api/v8/Attachment/download/100?t=sssss
|
|
ret.push({
|
|
id: o.id,
|
|
title:
|
|
"<a href='" +
|
|
window.$gz.api.downloadUrl(o.id) +
|
|
"' target='_blank'>" +
|
|
o.displayFileName +
|
|
"</a>",
|
|
name: o.displayFileName,
|
|
date: window.$gz.locale.utcDateToShortDateAndTimeLocalized(
|
|
o.lastModified,
|
|
timeZoneName,
|
|
languageName,
|
|
hour12
|
|
),
|
|
notes: o.notes ? o.notes : "",
|
|
icon: window.$gz.util.iconForFile(o.displayFileName, o.contentType)
|
|
});
|
|
}
|
|
this.displayList = ret;
|
|
}
|
|
}
|
|
};
|
|
</script>
|