# âœ?STARK Todo List Next.js React TypeScript Tailwind CSS License **基于 Next.js 构建的æžç®€ã€çް代ã€é«˜åº¦ç²¾è‡´çš„待办事项应用** [English](README.md) | [简体中文](README.zh-CN.md) [STARK Todo List 预览](https://todo.unistark.dpdns.org/)
--- ## 🎯 功能特æ€? - **🎨 现代åŒ?UI/UX 设计** - 精美的动ç”?Logo,æµç•…过渡效æž? - 毛玻璃å¡ç‰‡ä¸ŽèƒŒæ™¯æ¨¡ç³Šç‰¹æ•ˆ - Framer Motion é©±åŠ¨çš„ä¸æ»‘动ç”? - 色彩编ç çš„任务统计(è“è‰²ã€æ©™è‰²ã€ç»¿è‰²ï¼‰ - **🌓 主题支æŒ** - 浅色模å¼ï¼Œé²œè‰³æ¸å? - 深色模å¼ï¼Œä¸“业美å­? - 系统主题自动检æµ? - æ— ç¼ä¸»é¢˜åˆ‡æ¢ - **📱 å“应å¼è®¾è®?* - 桌é¢ç«¯ä¼˜åŒ–的顶部导航标签 - 移动端å‹å¥½çš„底部导航æ ? - 触摸优化的交互元ç´? - 所有å±å¹•尺寸的自适应布局 - **âš™ï¸ ä¸ªæ€§åŒ–å®šåˆ¶** - 多语言支æŒï¼ˆä¸­æ–‡å’Œè‹±æ–‡ï¼? - å¯è‡ªå®šä¹‰ Logo 文字 - 时区选择 - 主题模å¼å好设置 - **📊 任务管ç†** - 创建ã€å®Œæˆå’Œåˆ é™¤ä»»åŠ¡ - ä»»åŠ¡åˆ›å»ºå’Œå®Œæˆæ—¶é—´æˆ³ - 软删除(逻辑删除,ä¿ç•™æ•°æ®ï¼‰ - 按状æ€ç­›é€‰ä»»åŠ¡ï¼ˆå…¨éƒ¨ã€è¿›è¡Œä¸­ã€å·²å®Œæˆï¼? - **📊 äº¤äº’å¼æ•°æ®åˆ†æžä»ªè¡¨ç›˜** - æ¯æ—¥åЍæ€è¶‹åŠ¿å›¾ï¼ˆåˆ›å»?vs 完æˆï¼? - ä»»åŠ¡å®Œæˆæ—¶é—´è½´ï¼ˆç”˜ç‰¹å›¾è§†è§‰æ•ˆæžœï¼‰ - 实时 KPI 指标统计(总数ã€å®Œæˆæ•°ã€æˆåŠŸçŽ‡ï¼? - çµæ´»çš„æ—¶é—´èŒƒå›´é€‰æ‹©ï¼?天ã€ä¸€ä¸ªæœˆã€æ‰€æœ‰æ—¶é—´ï¼‰ - **🔠访问控制** - 密ç ä¿æŠ¤çš„任务æ“作(添加ã€ç¼–辑ã€åˆ é™¤ï¼‰ - 客户端认è¯çŠ¶æ€æŒä¹…化 - å¯é€šè¿‡çŽ¯å¢ƒå˜é‡é…ç½®å¯†ç  - **💾 æ•°æ®æŒä¹…åŒ?* - 本地 JSON 存储(无需数æ®åº“) - æ•°æ®åœ¨åº”用é‡å¯åŽä¿ç•™ - 完全å¯è¿½æº¯çš„ä»»åŠ¡åŽ†å² ## 🚀 快速开å§? ### çŽ¯å¢ƒè¦æ±‚ - Node.js 18+ (本地开å? - Docker (å¯é€‰ï¼Œç”¨äºŽå®¹å™¨åŒ–部ç½? ### 方案一:本地开å‘(推èï¼? 1. **克隆仓库** ```bash git clone https://github.com/yourusername/stark-todo-list.git cd stark-todo-list ``` 2. **安装ä¾èµ–** ```bash npm install # æˆ? pnpm install ``` 3. **å¯åЍ开呿œåС噍** ```bash npm run dev # æˆ? pnpm dev ``` 4. **打开æµè§ˆå™?* ``` http://localhost:2333 ``` ### 方案二:使用管ç†è„šæœ¬ æä¾›äº†ä¾¿æ·çš„ Shell 脚本用于轻æ¾ç®¡ç†ï¼? ```bash # å¯åŠ¨åº”ç”¨ ./run.sh start # åœæ­¢åº”用 ./run.sh stop # é‡å¯å¹¶æ¸…ç†ç¼“å­?./run.sh restart # 查看日志 ./run.sh logs # 检查状æ€?./run.sh status ``` ### 方案三:Docker 部署 1. **使用 Docker å¯åŠ¨è„šæœ¬ï¼ˆæŽ¨è)** ```bash ./docker-start.sh ``` 脚本会自动: - 构建并å¯åŠ?Docker 容器 - 自动显示åŽç«¯æ—¥å¿— - 使用 Docker å·è¿›è¡Œæ•°æ®æŒä¹…化 2. **å¿«é€Ÿæ›´æ–°ï¼ˆé‡æ–°æž„建并é‡å¯ï¼‰** ```bash ./docker-update.sh ``` 此脚本会ï¼? - åœæ­¢å½“å‰å®¹å™¨ - æ‹‰å–æœ€æ–°ä»£ç ï¼ˆå¦‚æžœæ˜?Git 仓库ï¼? - 釿–°æž„建 Docker 镜åƒï¼ˆæ— ç¼“å­˜ï¼? - å¯åŠ¨æ–°å®¹å™? - 自动显示日志 3. **é…置访问密ç ï¼ˆå¯é€‰ï¼‰** ```bash # 通过环境å˜é‡è®¾ç½®è‡ªå®šä¹‰å¯†ç ? export AUTH_PASSWORD=your_custom_password # 或创å»?.env 文件 echo "AUTH_PASSWORD=your_custom_password" > .env ``` > 如未é…置,默认密ç ä¸º `stark123`ã€? 4. **或手动使ç”?Docker Compose** ```bash # 使用 Docker Compose å¯åЍ docker compose up -d --build # 查看日志 docker compose logs -f ``` 5. **访问应用** ``` http://localhost:4000 ``` 4. **管ç†å‘½ä»¤** ```bash # åœæ­¢å®¹å™¨ docker compose down # é‡å¯å®¹å™¨ docker compose restart # 查看日志 docker compose logs -f # å¿«é€Ÿæ›´æ–°ï¼ˆé‡æ–°æž„建所有内容) ./docker-update.sh ``` 5. **æ•°æ®æŒä¹…化与安全更新** - æ•°æ®å­˜å‚¨åœ¨åä¸?`todos-data` çš?Docker å·ä¸­ï¼ŒæŒä¹…化存储 `todos.json` å’?`stats.json`ã€? - **é‡è¦æç¤º**:在更新容器时,请务必使ç”?`./docker-update.sh`。ä¸è¦æ‰‹åЍè¿è¡?`docker compose down -v`,因ä¸?`-v` 傿•°ä¼šæ°¸ä¹…删除您的所有数æ®å·ã€? - 备份数æ®ï¼? ```bash docker run --rm -v stark-todo-list_todos-data:/data -v $(pwd):/backup alpine tar czf /backup/todos-backup.tar.gz -C /data . ``` - æ¢å¤æ•°æ®ï¼? ```bash docker run --rm -v stark-todo-list_todos-data:/data -v $(pwd):/backup alpine tar xzf /backup/todos-backup.tar.gz -C /data ``` 6. **清ç†ï¼ˆä¼šåˆ é™¤æ•°æ®ï¼?* ```bash docker compose down -v ``` ## 📂 项目结构 ``` stark-todo-list/ ├── src/ â”? ├── app/ # Next.js App Router â”? â”? ├── api/ # API 路由 â”? â”? â”? └── todos/ # Todo CRUD 端点 â”? â”? ├── analytics/ # æ•°æ®åˆ†æžä¸Žå›¾è¡¨é¡µé?â”? â”? ├── settings/ # è®¾ç½®é¡µé¢ â”? â”? ├── page.tsx # 主页é?â”? â”? ├── layout.tsx # 根布局 â”? â”? └── globals.css # å…¨å±€æ ·å¼ â”? ├── components/ # React 组件 â”? â”? ├── StarkLogo.tsx # 动画 Logo â”? â”? └── AnalyticsDashboard.tsx # æ•°æ®å¯è§†åŒ–组ä»?â”? ├── contexts/ # React 上下æ–?â”? â”? └── SettingsContext.tsx â”? ├── lib/ # 工具函数 â”? â”? ├── storage.ts # JSON 文件æ“作 â”? â”? ├── translations.ts # 国际化翻è¯?â”? â”? └── timezones.ts # æ—¶åŒºæ•°æ® â”? └── ... ├── public/ # 陿€èµ„æº?├── scripts/ â”? ├── generate-icons.js # 图标生æˆè„šæœ¬ â”? └── generate-mock-data.js # 演示数æ®ç”Ÿæˆè„šæœ¬ ├── docker-compose.yml # Docker Compose é…ç½® ├── Dockerfile # Docker 镜åƒé…ç½® ├── run.sh # 管ç†è„šæœ¬ ├── docker-start.sh # Docker å¯åŠ¨è„šæœ¬ ├── todos.json # æ•°æ®å­˜å‚¨æ–‡ä»¶ └── package.json # 项目ä¾èµ– ``` ## 🛠ï¸?技术栈 - **框架**: Next.js 15 (App Router) - **语言**: TypeScript 5 - **æ ·å¼**: Tailwind CSS 3.4 - **动画**: Framer Motion - **图表**: Recharts - **图标**: Lucide React - **容器åŒ?*: Docker & Docker Compose ## ðŸ“ æ•°æ®æ ¼å¼ 任务存储åœ?`todos.json` 中,格å¼å¦‚下ï¼? ```json [ { "id": "uuid", "text": "任务æè¿°", "completed": false, "createdAt": 1705392000000, "completedAt": null, "deleted": false, "deletedAt": null, "groupId": "default", "priority": "P2" } ] ``` ## 🔌 API æŽ¥å£æ–‡æ¡£ 应用æä¾› RESTful API 用于程åºåŒ–访问。在æµè§ˆå™¨ä¸­è®¿é—® `/api-docs` 坿Ÿ¥çœ‹äº¤äº’å¼ API 文档ã€? ### è®¤è¯æ–¹å¼ å—ä¿æŠ¤çš„ç«¯ç‚¹éœ€è¦åœ¨è¯·æ±‚头中æä¾› API 密钥ï¼? ```bash # æ–¹å¼ä¸€ï¼šX-API-Key 请求å¤?-H "X-API-Key: your_password" # æ–¹å¼äºŒï¼šAuthorization Bearer 请求å¤?-H "Authorization: Bearer your_password" ``` > 默认密ç ä¸?`stark123`。å¯é€šè¿‡ `AUTH_PASSWORD` 环境å˜é‡é…ç½®ã€? ### 接å£åˆ—表 #### ä»»åŠ¡æŽ¥å£ (`/api/todos`) | 方法 | è®¤è¯ | æè¿° | |------|------|------| | GET | â?| èŽ·å–æ‰€æœ‰æ´»è·ƒä»»åŠ?| | POST | âœ?| 创建新任åŠ?| | PUT | âœ?| 更新现有任务 | | DELETE | âœ?| 软删除任åŠ?| **GET /api/todos** ```bash curl https://your-domain/api/todos ``` **POST /api/todos** ```bash curl -X POST https://your-domain/api/todos \ -H "Content-Type: application/json" \ -H "X-API-Key: stark123" \ -d '{"text": "æ–°ä»»åŠ?, "groupId": "default", "priority": "P1"}' ``` **PUT /api/todos** ```bash curl -X PUT https://your-domain/api/todos \ -H "Content-Type: application/json" \ -H "X-API-Key: stark123" \ -d '{"id": "uuid", "completed": true, "text": "æ›´æ–°åŽçš„æ–‡æœ¬"}' ``` **DELETE /api/todos** ```bash curl -X DELETE "https://your-domain/api/todos?id=uuid" \ -H "X-API-Key: stark123" ``` #### åˆ†ç»„æŽ¥å£ (`/api/groups`) | 方法 | è®¤è¯ | æè¿° | |------|------|------| | GET | â?| èŽ·å–æ‰€æœ‰åˆ†ç»?| | POST | âœ?| 创建新分ç»?| | DELETE | âœ?| 删除分组 | **GET /api/groups** ```bash curl https://your-domain/api/groups ``` **POST /api/groups** ```bash curl -X POST https://your-domain/api/groups \ -H "Content-Type: application/json" \ -H "X-API-Key: stark123" \ -d '{"name": "工作"}' ``` **DELETE /api/groups** ```bash curl -X DELETE "https://your-domain/api/groups?id=uuid" \ -H "X-API-Key: stark123" ``` #### ç»Ÿè®¡æŽ¥å£ (`/api/stats`) | 方法 | è®¤è¯ | æè¿° | |------|------|------| | GET | â?| èŽ·å– PV/UV 统计 | | POST | â?| 更新访问统计 | **GET /api/stats** ```bash curl https://your-domain/api/stats ``` #### è®¤è¯æŽ¥å£ (`/api/auth`) | 方法 | è®¤è¯ | æè¿° | |------|------|------| | POST | â?| 验è¯å¯†ç  | **POST /api/auth** ```bash curl -X POST https://your-domain/api/auth \ -H "Content-Type: application/json" \ -d '{"password": "stark123"}' ``` ## 🤠贡献 欢迎贡献ï¼è¯·éšæ—¶æäº¤ Pull Requestã€? 1. Fork 本仓åº?2. 创建您的特性分æ”?(`git checkout -b feature/AmazingFeature`) 3. æäº¤æ‚¨çš„æ›´æ”¹ (`git commit -m 'Add some AmazingFeature'`) 4. 推é€åˆ°åˆ†æ”¯ (`git push origin feature/AmazingFeature`) 5. 打开一ä¸?Pull Request 更多详情请查çœ?[贡献指å—](CONTRIBUTING.md)ã€? ## 📄 许å¯è¯? 本项目采ç”?MIT 许å¯è¯?- è¯¦è§ [LICENSE](LICENSE) 文件ã€? ## 🙠致谢 - 基于 [Next.js](https://nextjs.org/) 构建 - UI è®¾è®¡çµæ„Ÿæ¥è‡ªçް代æžç®€ä¸»ä¹‰ - ç”?STARK ç”?â¤ï¸ 打é€? ---
**[â¬?返回顶部](#-stark-todo-list)** ç”?STARK ç”?â¤ï¸ 制作 | 基于 Next.js