mirror of
https://github.com/MarcZierle/photo-log-frontend.git
synced 2025-04-11 22:54:38 +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-date-picker v-model:value="date" type="date" @update:value="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-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"
|
||||||
@ -118,6 +127,20 @@
|
|||||||
@selected="addPhotosToSlide"
|
@selected="addPhotosToSlide"
|
||||||
: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">
|
||||||
@ -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