Files
DanDing1Todo_Web/README.zh-CN.md
Mr.Xia 9d78991c3a
Some checks failed
CI / lint (push) Has been cancelled
CI / build (push) Has been cancelled
修改端口2333
2026-02-26 21:44:09 +08:00

360 lines
10 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

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.

<div align="center">
# <20><>?STARK Todo List
<img src="https://img.shields.io/badge/Next.js-15.1.2-black?style=flat-square&logo=next.js" alt="Next.js">
<img src="https://img.shields.io/badge/React-19.0-61DAFB?style=flat-square&logo=react" alt="React">
<img src="https://img.shields.io/badge/TypeScript-5.0-3178C6?style=flat-square&logo=typescript" alt="TypeScript">
<img src="https://img.shields.io/badge/Tailwind_CSS-3.4-38B2AC?style=flat-square&logo=tailwind-css" alt="Tailwind CSS">
<img src="https://img.shields.io/badge/License-MIT-green?style=flat-square" alt="License">
**基于 Next.js 构建的极简、现代、高度精致的待办事项应用**
[English](README.md) | [简体中文](README.zh-CN.md)
[STARK Todo List 预览](https://todo.unistark.dpdns.org/)
</div>
---
## 🎯 功能特<E883BD><E789B9>?
- **🎨 现代<E78EB0><E4BBA3>?UI/UX 设计**
- 精美的动<E79A84><E58AA8>?Logo流畅过渡效<E6B8A1><E69588>? - 毛玻璃卡片与背景模糊特效
- Framer Motion 驱动的丝滑动<E6BB91><E58AA8>? - 色彩编码的任务统计(蓝色、橙色、绿色)
- **🌓 主题支持**
- 浅色模式鲜艳渐<E889B3><E6B890>? - 深色模式专业美<E4B89A><E7BE8E>? - 系统主题自动检<E58AA8><E6A380>? - 无缝主题切换
- **📱 响应式设<E5BC8F><E8AEBE>?*
- 桌面端优化的顶部导航标签
- 移动端友好的底部导航<E5AFBC><E888AA>? - 触摸优化的交互元<E4BA92><E58583>? - 所有屏幕尺寸的自适应布局
- **⚙️ 个性化定制**
- 多语言支持中文和英文<E88BB1><E69687>? - 可自定义 Logo 文字
- 时区选择
- 主题模式偏好设置
- **📊 任务管理**
- 创建、完成和删除任务
- 任务创建和完成时间戳
- 软删除(逻辑删除,保留数据)
- 按状态筛选任务全部、进行中、已完成<E5AE8C><E68890>?
- **📊 交互式数据分析仪表盘**
- 每日动态趋势图<EFBC88><E5889B>?vs 完成<E5AE8C><E68890>? - 任务完成时间轴(甘特图视觉效果)
- 实时 KPI 指标统计总数、完成数、成功率<E58A9F><E78E87>? - 灵活的时间范围选择<E98089><E68BA9>?天、一个月、所有时间)
- **🔐 访问控制**
- 密码保护的任务操作(添加、编辑、删除)
- 客户端认证状态持久化
- 可通过环境变量配置密码
- **💾 数据持久<E68C81><E4B985>?*
- 本地 JSON 存储(无需数据库)
- 数据在应用重启后保留
- 完全可追溯的任务历史
## 🚀 快速开<E9809F><E5BC80>?
### 环境要求
- Node.js 18+ (本地开<E59CB0><E5BC80>?
- Docker (可选用于容器化部<E58C96><E983A8>?
### 方案一本地开发推荐<E68EA8><E88D90>?
1. **克隆仓库**
```bash
git clone https://github.com/yourusername/stark-todo-list.git
cd stark-todo-list
```
2. **安装依赖**
```bash
npm install
# <20><>? pnpm install
```
3. **启动开发服务器**
```bash
npm run dev
# <20><>? pnpm dev
```
4. **打开浏览<E6B58F><E8A788>?*
```
http://localhost:2333
```
### 方案二:使用管理脚本
提供了便捷的 Shell 脚本用于轻松管理<E7AEA1><E79086>?
```bash
# 启动应用
./run.sh start
# 停止应用
./run.sh stop
# 重启并清理缓<E79086><E7BC93>?./run.sh restart
# 查看日志
./run.sh logs
# 检查状<E69FA5><E78AB6>?./run.sh status
```
### 方案三Docker 部署
1. **使用 Docker 启动脚本(推荐)**
```bash
./docker-start.sh
```
脚本会自动:
- 构建并启<E5B9B6><E590AF>?Docker 容器
- 自动显示后端日志
- 使用 Docker 卷进行数据持久化
2. **快速更新(重新构建并重启)**
```bash
./docker-update.sh
```
此脚本会<E69CAC><E4BC9A>? - 停止当前容器
- 拉取最新代码如果<E5A682><E69E9C>?Git 仓库<E4BB93><E5BA93>? - 重新构建 Docker 镜像无缓存<E7BC93><E5AD98>? - 启动新容<E696B0><E5AEB9>? - 自动显示日志
3. **配置访问密码(可选)**
```bash
# 通过环境变量设置自定义密<E4B989><E5AF86>? export AUTH_PASSWORD=your_custom_password
# 或创<E68896><E5889B>?.env 文件
echo "AUTH_PASSWORD=your_custom_password" > .env
```
> 如未配置,默认密码为 `stark123`<60><>?
4. **或手动使<E58AA8><E4BDBF>?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. **数据持久化与安全更新**
- 数据存储在名<E59CA8><E5908D>?`todos-data` <20><>?Docker 卷中,持久化存储 `todos.json` <20><>?`stats.json`<60><>? - **重要提示**在更新容器时请务必使<E5BF85><E4BDBF>?`./docker-update.sh`。不要手动运<E58AA8><E8BF90>?`docker compose down -v`<EFBC8C><E59BA0>?`-v` 参数会永久删除您的所有数据卷<E68DAE><E58DB7>? - 备份数据<E695B0><E68DAE>? ```bash
docker run --rm -v stark-todo-list_todos-data:/data -v $(pwd):/backup alpine tar czf /backup/todos-backup.tar.gz -C /data .
```
- 恢复数据<E695B0><E68DAE>? ```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. **清理会删除数据<E695B0><E68DAE>?*
```bash
docker compose down -v
```
## 📂 项目结构
```
stark-todo-list/
├── src/
<EFBFBD><EFBFBD>? ├── app/ # Next.js App Router
<EFBFBD><EFBFBD>? <20><>? ├── api/ # API 路由
<EFBFBD><EFBFBD>? <20><>? <20><>? └── todos/ # Todo CRUD 端点
<EFBFBD><EFBFBD>? <20><>? ├── analytics/ # 数据分析与图表页<E8A1A8><E9A1B5>?<3F><>? <20><>? ├── settings/ # 设置页面
<EFBFBD><EFBFBD>? <20><>? ├── page.tsx # 主页<E4B8BB><E9A1B5>?<3F><>? <20><>? ├── layout.tsx # 根布局
<EFBFBD><EFBFBD>? <20><>? └── globals.css # 全局样式
<EFBFBD><EFBFBD>? ├── components/ # React 组件
<EFBFBD><EFBFBD>? <20><>? ├── StarkLogo.tsx # 动画 Logo
<EFBFBD><EFBFBD>? <20><>? └── AnalyticsDashboard.tsx # 数据可视化组<E58C96><E7BB84>?<3F><>? ├── contexts/ # React 上下<E4B88A><E4B88B>?<3F><>? <20><>? └── SettingsContext.tsx
<EFBFBD><EFBFBD>? ├── lib/ # 工具函数
<EFBFBD><EFBFBD>? <20><>? ├── storage.ts # JSON 文件操作
<EFBFBD><EFBFBD>? <20><>? ├── translations.ts # 国际化翻<E58C96><E7BFBB>?<3F><>? <20><>? └── timezones.ts # 时区数据
<EFBFBD><EFBFBD>? └── ...
├── public/ # 静态资<E68081><E8B584>?├── scripts/
<EFBFBD><EFBFBD>? ├── generate-icons.js # 图标生成脚本
<EFBFBD><EFBFBD>? └── generate-mock-data.js # 演示数据生成脚本
├── docker-compose.yml # Docker Compose 配置
├── Dockerfile # Docker 镜像配置
├── run.sh # 管理脚本
├── docker-start.sh # Docker 启动脚本
├── todos.json # 数据存储文件
└── package.json # 项目依赖
```
## 🛠<><F09F9BA0>?技术栈
- **框架**: Next.js 15 (App Router)
- **语言**: TypeScript 5
- **样式**: Tailwind CSS 3.4
- **动画**: Framer Motion
- **图表**: Recharts
- **图标**: Lucide React
- **容器<E5AEB9><E599A8>?*: Docker & Docker Compose
## 📝 数据格式
任务存储<EFBFBD><EFBFBD>?`todos.json` 中格式如下<E5A682><E4B88B>?
```json
[
{
"id": "uuid",
"text": "任务描述",
"completed": false,
"createdAt": 1705392000000,
"completedAt": null,
"deleted": false,
"deletedAt": null,
"groupId": "default",
"priority": "P2"
}
]
```
## 🔌 API 接口文档
应用提供 RESTful API 用于程序化访问。在浏览器中访问 `/api-docs` 可查看交互式 API 文档<E69687><E6A1A3>?
### 认证方式
受保护的端点需要在请求头中提供 API 密钥<E5AF86><E992A5>?
```bash
# 方式一X-API-Key 请求<E8AFB7><E6B182>?-H "X-API-Key: your_password"
# 方式二Authorization Bearer 请求<E8AFB7><E6B182>?-H "Authorization: Bearer your_password"
```
> 默认密码<E5AF86><E7A081>?`stark123`。可通过 `AUTH_PASSWORD` 环境变量配置<E9858D><E7BDAE>?
### 接口列表
#### 任务接口 (`/api/todos`)
| 方法 | 认证 | 描述 |
|------|------|------|
| GET | <20><>?| 获取所有活跃任<E8B783><E4BBBB>?|
| POST | <20><>?| 创建新任<E696B0><E4BBBB>?|
| PUT | <20><>?| 更新现有任务 |
| DELETE | <20><>?| 软删除任<E999A4><E4BBBB>?|
**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": "新任<E696B0><E4BBBB>?, "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 | <20><>?| 获取所有分<E69C89><E58886>?|
| POST | <20><>?| 创建新分<E696B0><E58886>?|
| DELETE | <20><>?| 删除分组 |
**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 | <20><>?| 获取 PV/UV 统计 |
| POST | <20><>?| 更新访问统计 |
**GET /api/stats**
```bash
curl https://your-domain/api/stats
```
#### 认证接口 (`/api/auth`)
| 方法 | 认证 | 描述 |
|------|------|------|
| POST | <20><>?| 验证密码 |
**POST /api/auth**
```bash
curl -X POST https://your-domain/api/auth \
-H "Content-Type: application/json" \
-d '{"password": "stark123"}'
```
## 🤝 贡献
欢迎贡献!请随时提交 Pull Request<73><74>?
1. Fork 本仓<E69CAC><E4BB93>?2. 创建您的特性分<E680A7><E58886>?(`git checkout -b feature/AmazingFeature`)
3. 提交您的更改 (`git commit -m 'Add some AmazingFeature'`)
4. 推送到分支 (`git push origin feature/AmazingFeature`)
5. 打开一<E5BC80><E4B880>?Pull Request
更多详情请查<EFBFBD><EFBFBD>?[贡献指南](CONTRIBUTING.md)<29><>?
## 📄 许可<E8AEB8><E58FAF>?
本项目采<EFBFBD><EFBFBD>?MIT 许可<E8AEB8><E58FAF>?- 详见 [LICENSE](LICENSE) 文件<E69687><E4BBB6>?
## 🙏 致谢
- 基于 [Next.js](https://nextjs.org/) 构建
- UI 设计灵感来自现代极简主义
- <20><>?STARK <20><>?❤️ 打<><E68993>?
---
<div align="center">
**[<EFBFBD><EFBFBD>?返回顶部](#-stark-todo-list)**
<EFBFBD><EFBFBD>?STARK <20><>?❤️ 制作 | 基于 Next.js
</div>