| 
									
										
										
										
											2018-11-10 05:17:35 +08:00
										 |  |  | import draggable from "vuedraggable"; | 
					
						
							|  |  |  | import dropzone from "./components/dropzone"; | 
					
						
							| 
									
										
										
										
											2017-08-19 20:55:56 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 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) { | 
					
						
							| 
									
										
										
										
											2018-06-17 16:51:31 +08:00
										 |  |  |         if (!file.deleting) { | 
					
						
							|  |  |  |             return this.$set(file, 'deleting', true); | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2017-08-19 20:55:56 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |         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; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-11-10 05:17:35 +08:00
										 |  |  | export default { | 
					
						
							| 
									
										
										
										
											2017-08-19 20:55:56 +08:00
										 |  |  |     data, methods, mounted, components, | 
					
						
							|  |  |  | }; |