bunny-admin-element-thin-i18n/other-views/table/high/drag/column/columns.tsx

70 lines
1.5 KiB
TypeScript
Raw Normal View History

2024-05-11 14:48:02 +08:00
import Sortable from "sortablejs";
import { clone } from "@pureadmin/utils";
import { tableDataDrag } from "../../data";
import { ref, nextTick, onMounted } from "vue";
// 列拖拽演示
export function useColumns() {
const dataList = ref(clone(tableDataDrag, true));
const columnsDrag = ref<TableColumnList>([
{
label: "ID",
prop: "id"
},
{
label: "日期",
prop: "date"
},
{
label: "姓名",
prop: "name"
}
]);
const columns = ref<TableColumnList>([
{
label: "ID",
prop: index => columnsDrag.value[index].prop as string
},
{
label: "日期",
prop: index => columnsDrag.value[index].prop as string
},
{
label: "姓名",
prop: index => columnsDrag.value[index].prop as string
}
]);
const columnDrop = (event: { preventDefault: () => void }) => {
event.preventDefault();
nextTick(() => {
const wrapper: HTMLElement = document.querySelector(
".el-table__header-wrapper tr"
);
Sortable.create(wrapper, {
animation: 300,
delay: 0,
onEnd: ({ newIndex, oldIndex }) => {
const oldItem = columnsDrag.value[oldIndex];
columnsDrag.value.splice(oldIndex, 1);
columnsDrag.value.splice(newIndex, 0, oldItem);
}
});
});
};
onMounted(() => {
nextTick(() => {
columnDrop(event);
});
});
return {
columns,
dataList,
columnsDrag
};
}