mirror of
https://github.com/Dichgrem/Vue.git
synced 2025-12-16 21:51:59 -05:00
feat:Drag&&drop_sorting
This commit is contained in:
7
todos/package-lock.json
generated
7
todos/package-lock.json
generated
@@ -8,6 +8,7 @@
|
|||||||
"name": "todos",
|
"name": "todos",
|
||||||
"version": "0.0.0",
|
"version": "0.0.0",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
"sortablejs": "^1.15.6",
|
||||||
"vue": "^3.5.24"
|
"vue": "^3.5.24"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
@@ -1163,6 +1164,12 @@
|
|||||||
"fsevents": "~2.3.2"
|
"fsevents": "~2.3.2"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/sortablejs": {
|
||||||
|
"version": "1.15.6",
|
||||||
|
"resolved": "https://registry.npmjs.org/sortablejs/-/sortablejs-1.15.6.tgz",
|
||||||
|
"integrity": "sha512-aNfiuwMEpfBM/CN6LY0ibyhxPfPbyFeBTYJKCvzkJ2GkUpazIt3H+QIPAMHwqQ7tMKaHz1Qj+rJJCqljnf4p3A==",
|
||||||
|
"license": "MIT"
|
||||||
|
},
|
||||||
"node_modules/source-map-js": {
|
"node_modules/source-map-js": {
|
||||||
"version": "1.2.1",
|
"version": "1.2.1",
|
||||||
"resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
|
"resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
|
||||||
|
|||||||
@@ -9,6 +9,7 @@
|
|||||||
"preview": "vite preview"
|
"preview": "vite preview"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
"sortablejs": "^1.15.6",
|
||||||
"vue": "^3.5.24"
|
"vue": "^3.5.24"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
|||||||
@@ -30,7 +30,6 @@ export default {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
||||||
methods: {
|
methods: {
|
||||||
addTodo(newTodo) {
|
addTodo(newTodo) {
|
||||||
const todo = {
|
const todo = {
|
||||||
@@ -42,6 +41,11 @@ export default {
|
|||||||
console.log("添加 Todo:", todo);
|
console.log("添加 Todo:", todo);
|
||||||
},
|
},
|
||||||
|
|
||||||
|
moveTodo({ oldIndex, newIndex }) {
|
||||||
|
const item = this.todos.splice(oldIndex, 1)[0];
|
||||||
|
this.todos.splice(newIndex, 0, item);
|
||||||
|
},
|
||||||
|
|
||||||
delTodo(item) {
|
delTodo(item) {
|
||||||
console.log("删除 Todo:", item);
|
console.log("删除 Todo:", item);
|
||||||
this.todos = this.todos.filter((t) => t.id !== item.id);
|
this.todos = this.todos.filter((t) => t.id !== item.id);
|
||||||
@@ -67,12 +71,11 @@ export default {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<TodoHeader @addTodo="addTodo" />
|
<TodoHeader @addTodo="addTodo" />
|
||||||
<TodoList :todos="todoList" @delTodo="delTodo" />
|
<TodoList :todos="todoList" @delTodo="delTodo" @move="moveTodo" />
|
||||||
<TodoFooter
|
<TodoFooter
|
||||||
:count="todoList.length"
|
:count="todoList.length"
|
||||||
:tabType="tabType"
|
:tabType="tabType"
|
||||||
|
|||||||
@@ -1,7 +1,15 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="tdContainer">
|
<div class="tdContainer">
|
||||||
<ul class="tdList">
|
<ul class="tdList">
|
||||||
<li class="tdItem" v-for="item in todos" :key="item.id">
|
<li
|
||||||
|
class="tdItem"
|
||||||
|
v-for="(item, index) in todos"
|
||||||
|
:key="item.id"
|
||||||
|
draggable="true"
|
||||||
|
@dragstart="onDragStart(index)"
|
||||||
|
@dragover.prevent="onDragOver(index)"
|
||||||
|
@drop="onDrop(index)"
|
||||||
|
>
|
||||||
<div class="tdItem-main">
|
<div class="tdItem-main">
|
||||||
<input type="checkbox" v-model="item.completed" class="toToggle" />
|
<input type="checkbox" v-model="item.completed" class="toToggle" />
|
||||||
|
|
||||||
@@ -101,7 +109,15 @@ export default {
|
|||||||
delTodo(item) {
|
delTodo(item) {
|
||||||
this.$emit("delTodo", item);
|
this.$emit("delTodo", item);
|
||||||
},
|
},
|
||||||
|
onDragStart(index) {
|
||||||
|
this.dragIndex = index;
|
||||||
|
},
|
||||||
|
onDragOver(index) {},
|
||||||
|
onDrop(index) {
|
||||||
|
if (this.dragIndex === null || this.dragIndex === index) return;
|
||||||
|
this.$emit("move", { oldIndex: this.dragIndex, newIndex: index });
|
||||||
|
this.dragIndex = null;
|
||||||
|
},
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user