当前位置:首页 > VUE

vue实现看板

2026-01-07 20:27:44VUE

Vue 实现看板功能

使用 Vue 实现看板功能可以通过组件化开发、状态管理和拖拽库结合完成。以下是一个完整的实现方案:

基础项目结构

src/
├── components/
│   ├── KanbanBoard.vue      # 看板容器
│   ├── KanbanColumn.vue     # 看板列
│   └── KanbanCard.vue       # 看板卡片
├── store/                   # 状态管理
│   └── index.js             
└── App.vue

状态管理(Vuex)

// store/index.js
export default new Vuex.Store({
  state: {
    columns: [
      {
        id: 1,
        title: "待处理",
        cards: [
          { id: 1, content: "任务1" },
          { id: 2, content: "任务2" }
        ]
      },
      {
        id: 2,
        title: "进行中",
        cards: []
      }
    ]
  },
  mutations: {
    MOVE_CARD(state, { fromColumn, toColumn, cardIndex }) {
      const card = state.columns[fromColumn].cards.splice(cardIndex, 1)[0]
      state.columns[toColumn].cards.push(card)
    }
  }
})

拖拽功能实现

安装拖拽库:

npm install vuedraggable
<!-- KanbanColumn.vue -->
<template>
  <div class="column">
    <h3>{{ column.title }}</h3>
    <draggable 
      v-model="column.cards"
      group="cards"
      @end="onDragEnd"
    >
      <KanbanCard 
        v-for="card in column.cards"
        :key="card.id"
        :card="card"
      />
    </draggable>
  </div>
</template>

<script>
import draggable from 'vuedraggable'
export default {
  props: ['column'],
  components: { draggable },
  methods: {
    onDragEnd(event) {
      this.$emit('card-moved', {
        fromIndex: event.oldIndex,
        toIndex: event.newIndex
      })
    }
  }
}
</script>

看板主组件

<!-- KanbanBoard.vue -->
<template>
  <div class="kanban-board">
    <KanbanColumn
      v-for="(column, index) in columns"
      :key="column.id"
      :column="column"
      @card-moved="handleCardMove(index, $event)"
    />
  </div>
</template>

<script>
import { mapState } from 'vuex'
export default {
  computed: {
    ...mapState(['columns'])
  },
  methods: {
    handleCardMove(columnIndex, event) {
      this.$store.commit('MOVE_CARD', {
        fromColumn: columnIndex,
        toColumn: event.newIndex >= 0 ? columnIndex : null,
        cardIndex: event.fromIndex
      })
    }
  }
}
</script>

<style scoped>
.kanban-board {
  display: flex;
  gap: 20px;
  padding: 20px;
}
.column {
  background: #f0f0f0;
  padding: 15px;
  border-radius: 5px;
  min-width: 250px;
}
</style>

卡片组件

<!-- KanbanCard.vue -->
<template>
  <div class="card">
    {{ card.content }}
  </div>
</template>

<script>
export default {
  props: ['card']
}
</script>

<style scoped>
.card {
  background: white;
  padding: 10px;
  margin: 5px 0;
  border-radius: 3px;
  box-shadow: 0 1px 3px rgba(0,0,0,0.1);
}
</style>

功能扩展建议

  1. 持久化存储
    添加 localStorage 或 IndexedDB 支持保存看板状态

  2. API 集成
    通过 axios 连接后端 API 实现数据同步

  3. 卡片详情
    添加点击卡片显示详细信息的模态框功能

  4. 多用户协作
    集成 WebSocket 实现实时协作更新

  5. 筛选排序
    在列头添加筛选和排序功能按钮

这个实现方案使用了 Vue 的响应式特性配合 Vuex 进行状态管理,通过 vuedraggable 实现拖拽功能,组件结构清晰易于扩展。根据实际需求可以调整样式和交互细节。

vue实现看板

标签: 看板vue
分享给朋友:

相关文章

vue实现tab换行

vue实现tab换行

Vue实现Tab切换的常见方法 使用Vue实现Tab切换功能可以通过多种方式完成,以下是几种常见的方法: 动态组件结合v-if或v-show 通过v-if或v-show控制不同Tab内容的显示与隐…

在线脑图 vue 实现

在线脑图 vue 实现

在线脑图 Vue 实现方案 使用开源库实现 推荐使用 mind-elixir 或 jsmind 这类开源库,它们专为脑图设计且支持 Vue 集成。 安装依赖: npm install mind…

vue实现按卡片轮播

vue实现按卡片轮播

实现卡片轮播的基本思路 在Vue中实现卡片轮播可以通过结合v-for指令和动态样式绑定完成。核心是维护一个当前显示卡片的索引,通过CSS过渡效果实现平滑切换。 基础实现步骤 模板部分 使用v-for…

vue设计与实现 书

vue设计与实现 书

vue设计与实现 书 《Vue.js设计与实现》是一本深入探讨Vue.js框架内部原理和设计思想的书籍,适合希望深入理解Vue.js的开发者。以下是关于这本书的详细信息: 书籍内容 《Vue…

vue实现签约合作弹窗

vue实现签约合作弹窗

实现签约合作弹窗的步骤 使用Vue实现签约合作弹窗可以通过组件化方式完成,结合模态框和表单交互逻辑。以下是具体实现方法: 1. 创建弹窗组件 新建一个Vue组件文件(如SignContractDi…

vue实现下拉刷新组件

vue实现下拉刷新组件

实现下拉刷新组件的核心思路 下拉刷新功能通常通过监听触摸事件、滚动位置和动画效果实现。Vue中可以利用自定义指令或封装组件完成,以下为两种常见实现方式。 基于自定义指令的实现 创建指令监听触摸事件,…