K356/k356/templates/base_components/glist/vue.js
2024-09-28 17:37:29 +02:00

99 lines
2.4 KiB
JavaScript

{% block component %}
{{ name }} = {
template: "#{{ name }}",
router_path: "/{{ name }}",
delimiters: ["[[", "]]"],
props: ["crypto_key", "items", "items_headers", "items_relations", "group_by", "hidden_fields"],
data: function() {
return {
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 %}]
}
},
computed: {
editable_fields: function() {
return this.items_headers.filter(e => e.editable)
},
citems_headers: function() {
return this.items_headers.filter(e => !this.hidden_fields.includes(e.value) && !this.default_hidden_fields.includes(e.value))
},
},
watch: {
dialog (val) {
val || this.close()
},
dialogDelete (val) {
val || this.closeDelete()
},
},
methods: {
formatDate (date) {
return formatDate(date)
},
showItem (item) {
this.$router.replace({ name: this.show_url, params: { id: item.id }})
},
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.closeDelete()
},
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) {
this.$emit("editItem", this.editedIndex, this.editedItem)
} else {
this.$emit("createItem", this.editedItem)
}
this.close()
},
}
}
{% endblock %}