2017-08-19 20:55:56 +08:00
|
|
|
const draggable = require('vuedraggable');
|
|
|
|
const dropzone = require('./components/dropzone');
|
|
|
|
|
|
|
|
function mounted() {
|
|
|
|
this.pageId = this.$el.getAttribute('page-id');
|
|
|
|
this.file = this.newFile();
|
|
|
|
|
|
|
|
this.$http.get(window.baseUrl(`/attachments/get/page/${this.pageId}`)).then(resp => {
|
|
|
|
this.files = resp.data;
|
|
|
|
}).catch(err => {
|
|
|
|
this.checkValidationErrors('get', err);
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
let data = {
|
|
|
|
pageId: null,
|
|
|
|
files: [],
|
|
|
|
fileToEdit: null,
|
|
|
|
file: {},
|
|
|
|
tab: 'list',
|
|
|
|
editTab: 'file',
|
|
|
|
errors: {link: {}, edit: {}, delete: {}}
|
|
|
|
};
|
|
|
|
|
|
|
|
const components = {dropzone, draggable};
|
|
|
|
|
|
|
|
let methods = {
|
|
|
|
|
|
|
|
newFile() {
|
|
|
|
return {page_id: this.pageId};
|
|
|
|
},
|
|
|
|
|
|
|
|
getFileUrl(file) {
|
2018-05-20 18:06:10 +08:00
|
|
|
if (file.external && file.path.indexOf('http') !== 0) {
|
|
|
|
return file.path;
|
|
|
|
}
|
2017-08-19 20:55:56 +08:00
|
|
|
return window.baseUrl(`/attachments/${file.id}`);
|
|
|
|
},
|
|
|
|
|
|
|
|
fileSortUpdate() {
|
|
|
|
this.$http.put(window.baseUrl(`/attachments/sort/page/${this.pageId}`), {files: this.files}).then(resp => {
|
|
|
|
this.$events.emit('success', resp.data.message);
|
|
|
|
}).catch(err => {
|
|
|
|
this.checkValidationErrors('sort', err);
|
|
|
|
});
|
|
|
|
},
|
|
|
|
|
|
|
|
startEdit(file) {
|
|
|
|
this.fileToEdit = Object.assign({}, file);
|
|
|
|
this.fileToEdit.link = file.external ? file.path : '';
|
|
|
|
this.editTab = file.external ? 'link' : 'file';
|
|
|
|
},
|
|
|
|
|
|
|
|
deleteFile(file) {
|
|
|
|
if (!file.deleting) return file.deleting = true;
|
|
|
|
|
|
|
|
this.$http.delete(window.baseUrl(`/attachments/${file.id}`)).then(resp => {
|
|
|
|
this.$events.emit('success', resp.data.message);
|
|
|
|
this.files.splice(this.files.indexOf(file), 1);
|
|
|
|
}).catch(err => {
|
|
|
|
this.checkValidationErrors('delete', err)
|
|
|
|
});
|
|
|
|
},
|
|
|
|
|
|
|
|
uploadSuccess(upload) {
|
|
|
|
this.files.push(upload.data);
|
|
|
|
this.$events.emit('success', trans('entities.attachments_file_uploaded'));
|
|
|
|
},
|
|
|
|
|
|
|
|
uploadSuccessUpdate(upload) {
|
|
|
|
let fileIndex = this.filesIndex(upload.data);
|
|
|
|
if (fileIndex === -1) {
|
|
|
|
this.files.push(upload.data)
|
|
|
|
} else {
|
|
|
|
this.files.splice(fileIndex, 1, upload.data);
|
|
|
|
}
|
|
|
|
|
|
|
|
if (this.fileToEdit && this.fileToEdit.id === upload.data.id) {
|
|
|
|
this.fileToEdit = Object.assign({}, upload.data);
|
|
|
|
}
|
|
|
|
this.$events.emit('success', trans('entities.attachments_file_updated'));
|
|
|
|
},
|
|
|
|
|
|
|
|
checkValidationErrors(groupName, err) {
|
2018-05-20 18:06:10 +08:00
|
|
|
if (typeof err.response.data === "undefined" && typeof err.response.data === "undefined") return;
|
|
|
|
this.errors[groupName] = err.response.data;
|
2017-08-19 20:55:56 +08:00
|
|
|
},
|
|
|
|
|
|
|
|
getUploadUrl(file) {
|
|
|
|
let url = window.baseUrl(`/attachments/upload`);
|
|
|
|
if (typeof file !== 'undefined') url += `/${file.id}`;
|
|
|
|
return url;
|
|
|
|
},
|
|
|
|
|
|
|
|
cancelEdit() {
|
|
|
|
this.fileToEdit = null;
|
|
|
|
},
|
|
|
|
|
|
|
|
attachNewLink(file) {
|
|
|
|
file.uploaded_to = this.pageId;
|
2018-05-20 18:06:10 +08:00
|
|
|
this.errors.link = {};
|
2017-08-19 20:55:56 +08:00
|
|
|
this.$http.post(window.baseUrl('/attachments/link'), file).then(resp => {
|
|
|
|
this.files.push(resp.data);
|
|
|
|
this.file = this.newFile();
|
|
|
|
this.$events.emit('success', trans('entities.attachments_link_attached'));
|
|
|
|
}).catch(err => {
|
|
|
|
this.checkValidationErrors('link', err);
|
|
|
|
});
|
|
|
|
},
|
|
|
|
|
|
|
|
updateFile(file) {
|
|
|
|
$http.put(window.baseUrl(`/attachments/${file.id}`), file).then(resp => {
|
|
|
|
let search = this.filesIndex(resp.data);
|
|
|
|
if (search === -1) {
|
|
|
|
this.files.push(resp.data);
|
|
|
|
} else {
|
|
|
|
this.files.splice(search, 1, resp.data);
|
|
|
|
}
|
|
|
|
|
|
|
|
if (this.fileToEdit && !file.external) this.fileToEdit.link = '';
|
|
|
|
this.fileToEdit = false;
|
|
|
|
|
|
|
|
this.$events.emit('success', trans('entities.attachments_updated_success'));
|
|
|
|
}).catch(err => {
|
|
|
|
this.checkValidationErrors('edit', err);
|
|
|
|
});
|
|
|
|
},
|
|
|
|
|
|
|
|
filesIndex(file) {
|
|
|
|
for (let i = 0, len = this.files.length; i < len; i++) {
|
|
|
|
if (this.files[i].id === file.id) return i;
|
|
|
|
}
|
|
|
|
return -1;
|
|
|
|
}
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
module.exports = {
|
|
|
|
data, methods, mounted, components,
|
|
|
|
};
|