Add more components + base for history
This commit is contained in:
@@ -32,36 +32,56 @@
|
||||
<v-card-text>
|
||||
<v-container>
|
||||
<v-row>
|
||||
<template v-for="field in editable_fields">
|
||||
<template v-if="field.field_widget == 'v-select'">
|
||||
<template v-if="field.choices">
|
||||
<v-select
|
||||
v-model="editedItem[field.value]"
|
||||
:items="field.choices"
|
||||
:label="field.text"
|
||||
item-text="text"
|
||||
item-value="value"
|
||||
persistent-hint>
|
||||
</v-select>
|
||||
<v-form ref="form" v-model="valid">
|
||||
|
||||
<template v-for="field in editable_fields">
|
||||
|
||||
<template v-if="field.field_widget == 'v-select'">
|
||||
<template v-if="field.choices">
|
||||
<v-select
|
||||
v-model="editedItem[field.value]"
|
||||
:items="field.choices"
|
||||
:label="field.text"
|
||||
:rules="[rules.required]"
|
||||
item-text="text"
|
||||
item-value="value"
|
||||
persistent-hint>
|
||||
</v-select>
|
||||
</template>
|
||||
|
||||
<template v-else>
|
||||
<v-select
|
||||
v-model="editedItem[field.value]"
|
||||
:items="items_relations[field.value]"
|
||||
:label="field.text"
|
||||
:rules="[rules.required]"
|
||||
item-text="name"
|
||||
item-value="id"
|
||||
return-object
|
||||
persistent-hint>
|
||||
<template slot="item" slot-scope="data">
|
||||
<template v-if="data.item.custom_identifier">
|
||||
[[ data.item.custom_identifier ]] - [[ data.item.name ]]
|
||||
</template>
|
||||
<template v-else>
|
||||
[[ data.item.name ]]
|
||||
</template>
|
||||
</template>
|
||||
</v-select>
|
||||
</template>
|
||||
</template>
|
||||
|
||||
<template v-else-if="field?.dynamic_field_type">
|
||||
<DynField :item="editedItem" :field="field"></DynField>
|
||||
</template>
|
||||
|
||||
<template v-else>
|
||||
<v-select
|
||||
v-model="editedItem[field.value]"
|
||||
:items="items_relations[field.value]"
|
||||
:label="field.text"
|
||||
item-text="name"
|
||||
item-value="id"
|
||||
persistent-hint>
|
||||
<template slot="item" slot-scope="data">
|
||||
[[ data.item.name ]] - [[ data.item.custom_identifier ]]
|
||||
</template>
|
||||
</v-select>
|
||||
<component :is="field.field_widget" v-model="editedItem[field.value]" :label="field.text"></component>
|
||||
</template>
|
||||
|
||||
</template>
|
||||
<template v-else>
|
||||
<component :is="field.field_widget" v-model="editedItem[field.value]" :label="field.text"></component>
|
||||
</template>
|
||||
</template>
|
||||
|
||||
</v-form>
|
||||
</v-row>
|
||||
</v-container>
|
||||
</v-card-text>
|
||||
|
||||
@@ -3,24 +3,51 @@
|
||||
template: "#{{ name }}",
|
||||
router_path: "/{{ name }}",
|
||||
delimiters: ["[[", "]]"],
|
||||
props: ["crypto_key", "items", "items_headers", "items_relations", "group_by", "hidden_fields"],
|
||||
props: {
|
||||
items: Array,
|
||||
items_headers: Array,
|
||||
items_relations: {
|
||||
default: function () {
|
||||
return {}
|
||||
},
|
||||
},
|
||||
group_by: String,
|
||||
hidden_fields: {
|
||||
default: function () {
|
||||
return []
|
||||
},
|
||||
},
|
||||
non_editable_fields: {
|
||||
default: function () {
|
||||
return []
|
||||
},
|
||||
},
|
||||
show_item: {
|
||||
default: "id",
|
||||
},
|
||||
show_url: {
|
||||
default: "{{ show_url|default:'' }}",
|
||||
},
|
||||
},
|
||||
|
||||
data: function() {
|
||||
return {
|
||||
valid: false,
|
||||
dialog: false,
|
||||
dialogDelete: false,
|
||||
editedIndex: -1,
|
||||
defaultItem: {},
|
||||
editedItem: {},
|
||||
search: null,
|
||||
show_url: "{{ show_url|default:'' }}",
|
||||
default_hidden_fields: [{% for field in default_hidden_fields %}"{{ field }}",{% endfor %}]
|
||||
default_hidden_fields: [{% for field in default_hidden_fields %}"{{ field }}",{% endfor %}],
|
||||
rules: {
|
||||
required: value => !!value || "{{_('Required') | escapejs}}",
|
||||
},
|
||||
}
|
||||
},
|
||||
|
||||
computed: {
|
||||
editable_fields: function() {
|
||||
return this.items_headers.filter(e => e.editable)
|
||||
return this.items_headers.filter(e => e.editable).filter(e => !this.non_editable_fields.includes(e.value))
|
||||
},
|
||||
|
||||
citems_headers: function() {
|
||||
@@ -44,23 +71,21 @@
|
||||
},
|
||||
|
||||
showItem (item) {
|
||||
this.$router.replace({ name: this.show_url, params: { id: item.id }})
|
||||
this.$router.push({ name: this.show_url, params: { id: item[this.show_item] }})
|
||||
},
|
||||
|
||||
editItem (item) {
|
||||
this.editedIndex = this.items.indexOf(item)
|
||||
this.editedItem = Object.assign({}, item)
|
||||
this.dialog = true
|
||||
},
|
||||
|
||||
deleteItem (item) {
|
||||
this.editedIndex = this.items.indexOf(item)
|
||||
this.editedItem = Object.assign({}, item)
|
||||
this.dialogDelete = true
|
||||
},
|
||||
|
||||
deleteItemConfirm () {
|
||||
this.$emit("deleteItem", this.editedIndex)
|
||||
this.$emit("deleteItem", this.editedItem)
|
||||
this.closeDelete()
|
||||
|
||||
},
|
||||
@@ -68,25 +93,26 @@
|
||||
close () {
|
||||
this.dialog = false
|
||||
this.editedItem = Object.assign({}, this.defaultItem)
|
||||
this.editedIndex = -1
|
||||
},
|
||||
|
||||
closeDelete () {
|
||||
this.dialogDelete = false
|
||||
this.editedItem = Object.assign({}, this.defaultItem)
|
||||
this.editedIndex = -1
|
||||
},
|
||||
|
||||
|
||||
save () {
|
||||
|
||||
if (this.editedIndex > -1) {
|
||||
const isValid = this.$refs.form.validate()
|
||||
if (!isValid) return
|
||||
|
||||
this.$emit("editItem", this.editedIndex, this.editedItem)
|
||||
if (this.editedItem.id == null) {
|
||||
|
||||
this.$emit("createItem", this.editedItem)
|
||||
|
||||
} else {
|
||||
|
||||
this.$emit("createItem", this.editedItem)
|
||||
this.$emit("editItem", this.editedItem)
|
||||
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user