我的数据都是前台的不需后台修改后返回,就是说怎样在前台完成拖拽后排序呢
<template>
<el-table ref="tableRef"
:data="tableData"
style="width: 100%;"
header-cell-class-name="headClass"
:default-sort="tableData.index"
>
<el-table-column prop="index" label="索引" width="100" />
<el-table-column prop="name" label="属性名" width="180" />
<el-table-column prop="detail" label="信息" />
</el-table>
</template>
script setup>
import { defineProps, watch, ref, onMounted } from 'vue'
import { tableRef, initSortable } from '@/views/spu-modify/components/sortable'
const props = defineProps({
property: {
type: Array,
required: true
}
})
const tableData = ref([])
// 对传入的数据进行排序,数据数组中有一个index字段
const sortTableData = (val) => {
tableData.value = val.sort((a, b) => {
return a.index - b.index
})
console.log('000', tableData.value)
}
watch(() => [props.property],
val => {
console.log('有变化')
if (val) {
sortTableData(props.property)
}
})
onMounted(() => {
initSortable(tableRef, moveProperty)
})
// 回调,修改tableData中的index字段
const moveProperty = (event) => {
const { newIndex, oldIndex } = event
if (newIndex === oldIndex) {
return
}
const currentTableData = tableData.value
if (newIndex < oldIndex) {
currentTableData.forEach((item, key) => {
if (key >= newIndex && key < oldIndex) {
currentTableData[key].index = key + 2
console.log(key, currentTableData[key])
}
if (key === oldIndex) {
currentTableData[key].index = newIndex + 1
}
})
}
// 给tableData 重新排序 结果根预想的不一样
// sortTableData(currentTableData)
}
</script>
基于Vue3重写Vue-element-admin,打造后台前端综合解决方案
了解课程