|
|
|
|
@ -13,9 +13,10 @@
|
|
|
|
|
/>
|
|
|
|
|
</div>
|
|
|
|
|
<div
|
|
|
|
|
ref="fields"
|
|
|
|
|
class="mb-1 mt-2"
|
|
|
|
|
@dragover.prevent="onFieldDragover"
|
|
|
|
|
@drop="save"
|
|
|
|
|
@drop="reorderFields"
|
|
|
|
|
>
|
|
|
|
|
<Field
|
|
|
|
|
v-for="field in submitterFields"
|
|
|
|
|
@ -23,7 +24,7 @@
|
|
|
|
|
:data-uuid="field.uuid"
|
|
|
|
|
:field="field"
|
|
|
|
|
:type-index="fields.filter((f) => f.type === field.type).indexOf(field)"
|
|
|
|
|
:editable="editable && !dragField"
|
|
|
|
|
:editable="editable && (!dragField || dragField !== field)"
|
|
|
|
|
:default-field="defaultFields.find((f) => f.name === field.name)"
|
|
|
|
|
:draggable="editable"
|
|
|
|
|
@dragstart="dragField = field"
|
|
|
|
|
@ -211,23 +212,33 @@ export default {
|
|
|
|
|
this.$emit('set-drag', field)
|
|
|
|
|
},
|
|
|
|
|
onFieldDragover (e) {
|
|
|
|
|
const targetFieldUuid = e.target.closest('[data-uuid]')?.dataset?.uuid
|
|
|
|
|
const targetField = e.target.closest('[data-uuid]')
|
|
|
|
|
const dragField = this.$refs.fields.querySelector(`[data-uuid="${this.dragField.uuid}"]`)
|
|
|
|
|
|
|
|
|
|
if (this.dragField && targetFieldUuid && this.dragField.uuid !== targetFieldUuid) {
|
|
|
|
|
const field = this.fields.find((f) => f.uuid === targetFieldUuid)
|
|
|
|
|
|
|
|
|
|
const currentIndex = this.fields.indexOf(this.dragField)
|
|
|
|
|
const targetIndex = this.fields.indexOf(field)
|
|
|
|
|
if (dragField && targetField && targetField !== dragField) {
|
|
|
|
|
const fields = Array.from(this.$refs.fields.children)
|
|
|
|
|
const currentIndex = fields.indexOf(dragField)
|
|
|
|
|
const targetIndex = fields.indexOf(targetField)
|
|
|
|
|
|
|
|
|
|
if (currentIndex < targetIndex) {
|
|
|
|
|
this.fields.splice(targetIndex + 1, 0, this.dragField)
|
|
|
|
|
this.fields.splice(currentIndex, 1)
|
|
|
|
|
targetField.after(dragField)
|
|
|
|
|
} else {
|
|
|
|
|
this.fields.splice(targetIndex, 0, this.dragField)
|
|
|
|
|
this.fields.splice(currentIndex + 1, 1)
|
|
|
|
|
targetField.before(dragField)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
reorderFields () {
|
|
|
|
|
Array.from(this.$refs.fields.children).forEach((el, index) => {
|
|
|
|
|
if (el.dataset.uuid !== this.fields[index].uuid) {
|
|
|
|
|
const field = this.fields.find((f) => f.uuid === el.dataset.uuid)
|
|
|
|
|
|
|
|
|
|
this.fields.splice(this.fields.indexOf(field), 1)
|
|
|
|
|
this.fields.splice(index, 0, field)
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
this.save()
|
|
|
|
|
},
|
|
|
|
|
removeSubmitter (submitter) {
|
|
|
|
|
[...this.fields].forEach((field) => {
|
|
|
|
|
if (field.submitter_uuid === submitter.uuid) {
|
|
|
|
|
|