Files
kanban/README.md
xiaomai 2384e42933 refactor(app): rewrite application with Nuxt 4, Pinia, and TailwindCSS
This commit replaces the original vanilla JavaScript implementation with a modern frontend stack. The entire application has been rewritten to improve maintainability, developer experience, and leverage modern
web technologies.

Key changes include:
- Replaced plain HTML, CSS, and JS with a Nuxt 4 project structure.
- Migrated state management from a global state object to a Pinia store for better organization and reactivity.
- Rebuilt the UI with Vue 3 components and styled with TailwindCSS.
- Changed the primary persistence mechanism from manual file I/O to automatic LocalStorage saving, while retaining import/export functionality.
- All core features, including drag-and-drop, task management, and the import/merge diffing logic, have been ported to the new architecture.
2025-10-22 17:08:31 +08:00

179 lines
5.0 KiB
Markdown
Raw Permalink Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# ⚡ Open Kanban (Nuxt 4 版)
一个完全本地可用、隐私安全、支持导入/导出的 **现代离线看板应用**
基于 **Nuxt 4 + TailwindCSS + Pinia** 构建,默认使用浏览器 **LocalStorage** 持久化数据,
无需服务端、无需账号,直接运行即可使用。💥
---
## ✨ 功能特性
- 🧠 **纯前端离线运行**
无需安装后端服务,开箱即用。
所有数据均保存在浏览器 LocalStorage可导出 JSON 备份。
- 💾 **本地永久保存**
自动将看板写入 LocalStorage`public.localStorageKey`
支持手动保存、导出、导入与清空。
- 🔄 **导入 / 导出 / 合并预览**
支持将 JSON 文件导入并进行差异对比:
- 检测任务、阶段、布局变化
- 支持“偏向导入”与“偏向当前”两种合并策略
- 可选“同步删除导入文件中缺失的项”保持严格一致
- 🧱 **任务与阶段管理**
- 任务增删改查:标题、描述、类别、步骤(含勾选完成)
- 阶段可重命名、移动、删除
- 类别带颜色标识,引用保护机制防止误删
- 🧲 **拖拽排序**
阶段内与跨阶段拖动任务,自动更新数据结构。
- 🔍 **搜索与筛选**
支持关键词搜索(标题 / 描述)与按类别筛选。
- 🧩 **可配置品牌与行为**
自定义应用标题、默认导出文件名、自动加载的示例文件等。
---
## 🚀 使用方式
### 1⃣ 开发环境运行
```bash
# 安装依赖
npm i
# 启动开发模式
npm run dev
```
浏览器打开输出地址(通常为):
```
http://localhost:3000
```
### 2⃣ 构建与预览
```bash
npm run build
npm run preview
```
---
## ⚙️ 运行配置(`nuxt.config.ts`
`runtimeConfig.public` 中可自定义以下配置项:
| 配置项 | 默认值 | 说明 |
| ----------------- | --------------------- | ---------------------------------------------------------- |
| `appTitle` | `"Kanban"` | 页面标题 |
| `localStorageKey` | `"open-kanban-board"` | LocalStorage 键名 |
| `defaultFilename` | `"kanban.json"` | 导出文件名 |
| `autoLoadFile` | `""` | 启动时自动加载的 JSON 文件路径(例:`/sample-board.json` |
---
## 📂 项目结构
```
/ # 项目根目录
├─ app.vue # 主应用入口
├─ pages/ # 页面目录
├─ components/ # UI 组件
├─ stores/ # Pinia 状态管理
├─ public/
│ ├─ sample-board.json # 示例数据
│ └─ favicon.ico
├─ nuxt.config.ts # 配置文件
├─ package.json
└─ README.md
```
---
## 🧾 数据结构
应用内部数据结构遵循以下规范:
```json
{
"categories": [{ "uuid": "", "title": "", "color": "" }],
"stages": [{ "uuid": "", "title": "", "tasks": ["taskUuid"] }],
"tasks": [
{
"uuid": "",
"title": "",
"description": "",
"category": "",
"steps": [{ "details": "", "done": true }]
}
],
"layout": { "columns": [["stageUuid", "stageUuid"]] },
"meta": {
"id": "open-kanban",
"version": "1.0",
"createdAt": "",
"modifiedAt": "",
"actor": "",
"history": [{ "id": "", "ts": "", "actor": "", "type": "", "payload": {} }]
}
}
```
---
## 🔒 隐私与数据安全
- 默认不读取任何私有文件或远程数据。
- 所有数据仅保存在浏览器本地LocalStorage
- 导入的 JSON 文件仅在浏览器内解析,不会上传到任何服务器。
- 建议用户自行导出 JSON 文件进行备份或团队共享。
- 若需自动加载非私有数据,可在配置中设置 `autoLoadFile`
---
## 🧑‍🤝‍🧑 协作建议
- 各协作者可在“操作人”输入框填写自己的名字。
- 导出前请先保存当前版本。
- 导入他人文件时使用合并预览选择合并策略。
- 若需严格同步主副本,可启用“同步删除缺失项”。
- 更复杂的冲突解决(字段级)将在未来版本支持。
---
## ⚠️ 已知限制
- 浏览器 LocalStorage 有体积上限(约 5~10MB如需存放大型项目请使用 JSON 导入导出。
- 不支持直接写入磁盘文件(需通过“保存/导出”下载)。
- 当前版本未包含多用户同步功能(未来可能支持 WebRTC / CRDT 同步模式)。
---
## 🧭 后续计划
- 👤 成员分配与头像标识
- 💬 任务评论与活动时间线
- 🏷️ 标签系统与多标签筛选
- 🔢 每列 WIP 限制
- 🧰 批量操作与快捷键支持
- 📦 导出增量补丁文件
---
## 总结
Open Kanban 是一个完全掌控在你手中的工具:
无账号、无追踪、无外部依赖。
在你的浏览器里,它就是一个本地应用。
**离线即自由,协作也本地。**
**Open Kanban — 自主掌控你的工作流。** ⚡🔥