DragList.vue 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163
  1. <template>
  2. <section class="main">
  3. <div class="crumbs">
  4. <el-breadcrumb separator="/">
  5. <el-breadcrumb-item><i class="el-icon-rank"></i> 拖拽排序</el-breadcrumb-item>
  6. </el-breadcrumb>
  7. </div>
  8. <div class="container">
  9. <div class="plugins-tips">
  10. Vue.Draggable:基于 Sortable.js 的 Vue 拖拽组件。
  11. 访问地址:<a href="https://github.com/SortableJS/Vue.Draggable" target="_blank">Vue.Draggable</a>
  12. </div>
  13. <div class="drag-box">
  14. <div class="drag-box-item">
  15. <div class="item-title">todo</div>
  16. <draggable v-model="todo" @remove="removeHandle" :options="dragOptions">
  17. <transition-group tag="div" id="todo" class="item-ul">
  18. <div v-for="(item,index) in todo" class="drag-list" :key="index">
  19. {{item.content}}
  20. </div>
  21. </transition-group>
  22. </draggable>
  23. </div>
  24. <div class="drag-box-item">
  25. <div class="item-title">doing</div>
  26. <draggable v-model="doing" @remove="removeHandle" :options="dragOptions">
  27. <transition-group tag="div" id="doing" class="item-ul">
  28. <div v-for="(item,index) in doing" class="drag-list" :key="index">
  29. {{item.content}}
  30. </div>
  31. </transition-group>
  32. </draggable>
  33. </div>
  34. <div class="drag-box-item">
  35. <div class="item-title">done</div>
  36. <draggable v-model="done" @remove="removeHandle" :options="dragOptions">
  37. <transition-group tag="div" id="done" class="item-ul">
  38. <div v-for="(item,index) in done" class="drag-list" :key="index">
  39. {{item.content}}
  40. </div>
  41. </transition-group>
  42. </draggable>
  43. </div>
  44. </div>
  45. </div>
  46. </section>
  47. </template>
  48. <script>
  49. import draggable from 'vuedraggable'
  50. export default {
  51. data() {
  52. return {
  53. dragOptions:{
  54. animation: 120,
  55. scroll: true,
  56. group: 'sortlist',
  57. ghostClass: 'ghost-style'
  58. },
  59. todo: [
  60. {
  61. content: '开发图表组件'
  62. },
  63. {
  64. content: '开发拖拽组件'
  65. },
  66. {
  67. content: '开发权限测试组件'
  68. }
  69. ],
  70. doing: [
  71. {
  72. content: '开发登录注册页面'
  73. },
  74. {
  75. content: '开发头部组件'
  76. },
  77. {
  78. content: '开发表格相关组件'
  79. },
  80. {
  81. content: '开发表单相关组件'
  82. }
  83. ],
  84. done:[
  85. {
  86. content: '初始化项目,生成工程目录,完成相关配置'
  87. },
  88. {
  89. content: '开发项目整体框架'
  90. }
  91. ]
  92. }
  93. },
  94. components:{
  95. draggable
  96. },
  97. methods: {
  98. removeHandle(event){
  99. console.log(event);
  100. this.$message.success(`从 ${event.from.id} 移动到 ${event.to.id} `);
  101. }
  102. }
  103. }
  104. </script>
  105. <style scoped>
  106. .drag-box{
  107. display: flex;
  108. user-select: none;
  109. }
  110. .drag-box-item {
  111. flex: 1;
  112. max-width: 330px;
  113. min-width: 300px;
  114. background-color: #eff1f5;
  115. margin-right: 16px;
  116. border-radius: 6px;
  117. border: 1px #e1e4e8 solid;
  118. }
  119. .item-title{
  120. padding: 8px 8px 8px 12px;
  121. font-size: 14px;
  122. line-height: 1.5;
  123. color: #24292e;
  124. font-weight: 600;
  125. }
  126. .item-ul{
  127. padding: 0 8px 8px;
  128. height: 500px;
  129. overflow-y: scroll;
  130. }
  131. .item-ul::-webkit-scrollbar{
  132. width: 0;
  133. }
  134. .drag-list {
  135. border: 1px #e1e4e8 solid;
  136. padding: 10px;
  137. margin: 5px 0 10px;
  138. list-style: none;
  139. background-color: #fff;
  140. border-radius: 6px;
  141. cursor: pointer;
  142. -webkit-transition: border .3s ease-in;
  143. transition: border .3s ease-in;
  144. }
  145. .drag-list:hover {
  146. border: 1px solid #20a0ff;
  147. }
  148. .drag-title {
  149. font-weight: 400;
  150. line-height: 25px;
  151. margin: 10px 0;
  152. font-size: 22px;
  153. color: #1f2f3d;
  154. }
  155. .ghost-style{
  156. display: block;
  157. color: transparent;
  158. border-style: dashed
  159. }
  160. </style>