Simple way to build clouds from nothing
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

99 lines
2.6 KiB

<template>
<v-container>
<v-tabs v-model="currentTab" centered grow>
<v-tab v-for="tab in jsonForm" :key="tab.label" :href="`#tab-${tab.label}`">
{{ tab.label }}
</v-tab>
</v-tabs>
<v-tabs-items v-model="currentTab" class="my-4">
<v-tab-item v-for="tab in jsonForm" :key="tab.label" :value="`tab-${tab.label}`">
<form-gen
v-if="doc"
:value="doc"
:more="tab.field"
:form="tab.form"
:coll="{type: $route.params.rsc, id: doc._id}"
:disabled="disabled"
@update="hasUpdate()"
/>
</v-tab-item>
</v-tabs-items>
<v-fab-transition>
<v-btn
v-show="canSave"
class="mx-2"
fab
dark
large
color="success ma-3"
absolute
bottom
right
@click="save()"
>
<v-icon dark>
mdi-content-save
</v-icon>
</v-btn>
</v-fab-transition>
</v-container>
</template>
<script>
import FormGen from '@/components/FormGen/FormGen'
export default {
layout: 'admin',
components: { FormGen },
data: () => ({
jsonForm: [],
currentTab: '',
doc: null,
canSave: false,
disabled: true
}),
mounted () {
this.$store.commit('admin/ui/setBreadcrumbs', [
{ text: 'Resources', href: '/admin/resources' },
{ text: this.$route.params.rsc, href: `/admin/resources/${this.$route.params.rsc}` },
{ text: 'Edit', href: `/admin/resources/${this.$route.params.rsc}/${this.$route.params.id}` }
])
this.getForm()
this.getDoc()
},
methods: {
hasUpdate () {
this.canSave = true
},
getForm () {
this.$axios.get(`/cloud/api/${this.$route.params.rsc}/private/json-form`)
.then((res) => {
this.jsonForm = res.data
this.jsonForm.forEach((tab) => {
if (!this.currentTab) { this.currentTab = `#tab-${tab.label}` }
})
this.disabled = false
})
},
getDoc () {
this.$axios.get(`/cloud/api/${this.$route.params.rsc}/${this.$route.params.id}`)
.then((res) => {
this.doc = res.data.data
this.$store.commit('admin/ui/setTitle', this.doc.name)
})
},
save () {
this.$axios.put(`/cloud/api/${this.$route.params.rsc}/${this.$route.params.id}`, this.doc)
.then((res) => {
this.canSave = false
this.$store.commit('admin/ui/snack', { msg: 'Enregistré avec succès', color: 'success' })
})
.catch((res) => {
this.$store.commit('admin/ui/snack', { msg: 'Impossible de sauvegarder', color: 'error' })
})
}
}
}
</script>