optimize fields reorder
This commit is contained in:
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user