mirror of
				https://github.com/MarcZierle/photo-log-frontend.git
				synced 2025-11-01 01:44:57 +00:00 
			
		
		
		
	add more features to create log#
This commit is contained in:
		
							parent
							
								
									840e82a1af
								
							
						
					
					
						commit
						11cda03429
					
				| @ -4,11 +4,20 @@ | |||||||
| 			<h1>Create Log</h1> | 			<h1>Create Log</h1> | ||||||
| 			<n-button type="primary">Generate</n-button> | 			<n-button type="primary">Generate</n-button> | ||||||
| 		</n-space> | 		</n-space> | ||||||
| 		{{start_slide_image}} |  | ||||||
| 
 | 
 | ||||||
| 		<n-space justify="space-around"> | 		<n-space justify="space-around"> | ||||||
| 			<n-input size="large" round placeholder="Photo Log title" v-model:value="title" @change="updateServerData" /> | 			<n-input size="large" round placeholder="Photo Log title" v-model:value="title" @change="updateServerData" /> | ||||||
|  | 			<n-space vertical> | ||||||
|  | 				<n-button size="small" @click="selectPhotoForStartSlide">Choose Cover Photo</n-button> | ||||||
|  | 				<n-image | ||||||
|  | 					width="100" | ||||||
|  | 					:src="getPhotoSrcById(start_slide_image)" | ||||||
|  | 				/> | ||||||
|  | 			</n-space> | ||||||
|  | 			<n-space vertical> | ||||||
| 				<n-date-picker v-model:value="date" type="date" @update:value="updateServerData" /> | 				<n-date-picker v-model:value="date" type="date" @update:value="updateServerData" /> | ||||||
|  | 				<n-checkbox v-model:checked="render_date">show date on first slide?</n-checkbox> | ||||||
|  | 			</n-space> | ||||||
| 			<n-button type="primary" | 			<n-button type="primary" | ||||||
| 				:disabled="!unsaved_changes" | 				:disabled="!unsaved_changes" | ||||||
| 				:loading="currently_saving" | 				:loading="currently_saving" | ||||||
| @ -119,6 +128,20 @@ | |||||||
| 			:max_select=max_photos_per_slide :or_less=true | 			:max_select=max_photos_per_slide :or_less=true | ||||||
| 			:already-selected=slides[selectedSlide] /> | 			:already-selected=slides[selectedSlide] /> | ||||||
| 		 | 		 | ||||||
|  | 		<n-modal | ||||||
|  | 			v-model:show="showPreventLeaveModal" | ||||||
|  | 			:mask-closable="true" | ||||||
|  | 			type="warning" | ||||||
|  | 			preset="dialog" | ||||||
|  | 			title="Unsaved Changes" | ||||||
|  | 			content="Are you sure that you want to leave this page. All unsaved data might be lost!" | ||||||
|  | 			transform-origin="center" | ||||||
|  | 			positive-text="Stay on page" | ||||||
|  | 			@negative-click="continueLeavePage" | ||||||
|  | 			@positive-click="showPreventLeaveModal = false; leaving_to_page = null;" | ||||||
|  | 			negative-text="Leave" | ||||||
|  | 		/> | ||||||
|  | 
 | ||||||
| 		<n-modal v-model:show="showCreateModal" :mask-closable=false> | 		<n-modal v-model:show="showCreateModal" :mask-closable=false> | ||||||
| 			<n-spin :show="isCreateLoading"> | 			<n-spin :show="isCreateLoading"> | ||||||
| 				<n-card | 				<n-card | ||||||
| @ -151,6 +174,8 @@ | |||||||
| </template> | </template> | ||||||
| 
 | 
 | ||||||
| <script> | <script> | ||||||
|  | import {ref} from 'vue' | ||||||
|  | 
 | ||||||
| import { useMeta } from 'vue-meta' | import { useMeta } from 'vue-meta' | ||||||
| import { useMessage } from 'naive-ui' | import { useMessage } from 'naive-ui' | ||||||
| 
 | 
 | ||||||
| @ -185,7 +210,6 @@ export default { | |||||||
| 			id: Number.parseInt(this.e), | 			id: Number.parseInt(this.e), | ||||||
| 			title: '', | 			title: '', | ||||||
| 			date: null, | 			date: null, | ||||||
| 			render_date: false, |  | ||||||
| 			start_slide_image: null, | 			start_slide_image: null, | ||||||
| 			slides: [], | 			slides: [], | ||||||
| 
 | 
 | ||||||
| @ -200,13 +224,16 @@ export default { | |||||||
| 			isCreateLoading: false, | 			isCreateLoading: false, | ||||||
| 			isSavingServer: false, | 			isSavingServer: false, | ||||||
| 
 | 
 | ||||||
|  | 			showPreventLeaveModal: false, | ||||||
|  | 			leaving_to_page: null, | ||||||
|  | 
 | ||||||
| 			drag: false, | 			drag: false, | ||||||
| 		} | 		} | ||||||
| 	}, | 	}, | ||||||
| 	setup() { | 	setup() { | ||||||
| 		useMeta({ title: 'Create a new Photo Log' }) | 		useMeta({ title: 'Create a new Photo Log' }) | ||||||
| 		const message = useMessage() | 		const message = useMessage() | ||||||
| 		return { message } | 		return { message, render_date: ref(false) } | ||||||
| 	}, | 	}, | ||||||
| 	mounted() { | 	mounted() { | ||||||
| 		if (this.isValidId()) { | 		if (this.isValidId()) { | ||||||
| @ -225,6 +252,8 @@ export default { | |||||||
| 	watch: { | 	watch: { | ||||||
| 		title: function () { this.unsaved_changes = true }, | 		title: function () { this.unsaved_changes = true }, | ||||||
| 		date: function () { this.unsaved_changes = true}, | 		date: function () { this.unsaved_changes = true}, | ||||||
|  | 		render_date: function () { this.unsaved_changes = true}, | ||||||
|  | 		start_slide_image: function () { this.unsaved_changes = true}, | ||||||
| 		slides: {handler() { this.unsaved_changes = true}, deep: true}, | 		slides: {handler() { this.unsaved_changes = true}, deep: true}, | ||||||
| 	}, | 	}, | ||||||
| 	computed: { | 	computed: { | ||||||
| @ -263,6 +292,12 @@ export default { | |||||||
| 		}, | 		}, | ||||||
| 		selectPhotosForSlide(slide_index) { | 		selectPhotosForSlide(slide_index) { | ||||||
| 			this.selectedSlide = slide_index | 			this.selectedSlide = slide_index | ||||||
|  | 			this.max_photos_per_slide = 3 | ||||||
|  | 			this.selectPhotosModal = true | ||||||
|  | 		}, | ||||||
|  | 		selectPhotoForStartSlide() { | ||||||
|  | 			this.selectedSlide = 'start_slide' | ||||||
|  | 			this.max_photos_per_slide = 1 | ||||||
| 			this.selectPhotosModal = true | 			this.selectPhotosModal = true | ||||||
| 		}, | 		}, | ||||||
| 		getPhotoSrcById(photo_id){ | 		getPhotoSrcById(photo_id){ | ||||||
| @ -277,6 +312,14 @@ export default { | |||||||
| 			return null | 			return null | ||||||
| 		}, | 		}, | ||||||
| 		addPhotosToSlide(selected_photos) { | 		addPhotosToSlide(selected_photos) { | ||||||
|  | 			if (this.selectedSlide === 'start_slide') { | ||||||
|  | 				if (selected_photos.length > 0) | ||||||
|  | 					this.start_slide_image = selected_photos[0] | ||||||
|  | 				else | ||||||
|  | 					this.start_slide_image = null | ||||||
|  | 				this.max_photos_per_slide = 3 | ||||||
|  | 				return | ||||||
|  | 			} | ||||||
| 			this.slides[this.selectedSlide] = selected_photos | 			this.slides[this.selectedSlide] = selected_photos | ||||||
| 		}, | 		}, | ||||||
| 		addSlideAfter(index) { | 		addSlideAfter(index) { | ||||||
| @ -384,7 +427,11 @@ export default { | |||||||
| 			}).finally(() => { | 			}).finally(() => { | ||||||
| 				this.isSavingServer = false | 				this.isSavingServer = false | ||||||
| 			}) | 			}) | ||||||
| 		} | 		}, | ||||||
|  | 		continueLeavePage() { | ||||||
|  | 			console.log(this.leaving_to_page) | ||||||
|  | 			this.$router.push(this.leaving_to_page) | ||||||
|  | 		}, | ||||||
| 	}, | 	}, | ||||||
| 	beforeRouteUpdate (to) { | 	beforeRouteUpdate (to) { | ||||||
| 		this.id = Number.parseInt(to.params.e) | 		this.id = Number.parseInt(to.params.e) | ||||||
| @ -397,14 +444,18 @@ export default { | |||||||
| 	}, | 	}, | ||||||
| 	// eslint-disable-next-line no-unused-vars | 	// eslint-disable-next-line no-unused-vars | ||||||
| 	beforeRouteLeave (to, from) { | 	beforeRouteLeave (to, from) { | ||||||
| 		// prevent from leaving with unsaved changes | 		if (this.unsaved_changes && this.leaving_to_page === null) { | ||||||
|  | 			this.showPreventLeaveModal = true | ||||||
|  | 			this.leaving_to_page = to | ||||||
|  | 			return false | ||||||
|  | 		} | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
| </script> | </script> | ||||||
| 
 | 
 | ||||||
| <style scoped> | <style scoped> | ||||||
| .n-input { | .n-input { | ||||||
| 	min-width: 30em; | 	min-width: 25em; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| .add-slide-between-button, .add-slide-between-button * { | .add-slide-between-button, .add-slide-between-button * { | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 MarcZierle
						MarcZierle