Add more components + base for history

This commit is contained in:
2024-10-01 15:42:18 +02:00
parent fb4d566007
commit 8f9c83dc2a
38 changed files with 1374 additions and 665 deletions
@@ -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>
+40 -14
View File
@@ -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)
}