修改端口2333
Some checks failed
CI / lint (push) Has been cancelled
CI / build (push) Has been cancelled

This commit is contained in:
2026-02-26 21:44:09 +08:00
parent 2c4549ad79
commit 9d78991c3a
9 changed files with 141 additions and 185 deletions

View File

@@ -1,6 +1,6 @@
<div align="center">
# STARK Todo List
# <EFBFBD><EFBFBD>?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">
@@ -18,29 +18,20 @@
---
## 🎯 功能特
- **🎨 现代化 UI/UX 设计**
- 精美的动画 Logo流畅过渡效果
- 毛玻璃卡片与背景模糊特效
- Framer Motion 驱动的丝滑动画
- 色彩编码的任务统计(蓝色、橙色、绿色)
## 🎯 功能特<EFBFBD><EFBFBD>?
- **🎨 现代<E78EB0><E4BBA3>?UI/UX 设计**
- 精美的动<EFBFBD><EFBFBD>?Logo流畅过渡效<E6B8A1><E69588>? - 毛玻璃卡片与背景模糊特效
- Framer Motion 驱动的丝滑动<E6BB91><E58AA8>? - 色彩编码的任务统计(蓝色、橙色、绿色)
- **🌓 主题支持**
- 浅色模式,鲜艳渐
- 深色模式,专业美学
- 系统主题自动检测
- 无缝主题切换
- 浅色模式,鲜艳渐<EFBFBD><EFBFBD>? - 深色模式专业美<E4B89A><E7BE8E>? - 系统主题自动检<E58AA8><E6A380>? - 无缝主题切换
- **📱 响应式设计**
- **📱 响应式设<EFBFBD><EFBFBD>?*
- 桌面端优化的顶部导航标签
- 移动端友好的底部导航
- 触摸优化的交互元素
- 所有屏幕尺寸的自适应布局
- 移动端友好的底部导航<EFBFBD><EFBFBD>? - 触摸优化的交互元<E4BA92><E58583>? - 所有屏幕尺寸的自适应布局
- **⚙️ 个性化定制**
- 多语言支持(中文和英文
- 可自定义 Logo 文字
- 多语言支持(中文和英文<EFBFBD><EFBFBD>? - 可自定义 Logo 文字
- 时区选择
- 主题模式偏好设置
@@ -48,33 +39,28 @@
- 创建、完成和删除任务
- 任务创建和完成时间戳
- 软删除(逻辑删除,保留数据)
- 按状态筛选任务(全部、进行中、已完成
- 按状态筛选任务(全部、进行中、已完成<EFBFBD><EFBFBD>?
- **📊 交互式数据分析仪表盘**
- 每日动态趋势图(创vs 完成)
- 任务完成时间轴(甘特图视觉效果
- 实时 KPI 指标统计(总数、完成数、成功率)
- 灵活的时间范围选择7天、一个月、所有时间
- 每日动态趋势图(创<EFBFBD><EFBFBD>?vs 完成<EFBFBD><EFBFBD>? - 任务完成时间轴(甘特图视觉效果
- 实时 KPI 指标统计总数、完成数、成功率<E58A9F><E78E87>? - 灵活的时间范围选择<E98089><E68BA9>?天、一个月、所有时间
- **🔐 访问控制**
- 密码保护的任务操作(添加、编辑、删除)
- 客户端认证状态持久化
- 可通过环境变量配置密码
- **💾 数据持久化**
- **💾 数据持久<EFBFBD><EFBFBD>?*
- 本地 JSON 存储(无需数据库)
- 数据在应用重启后保留
- 完全可追溯的任务历史
## 🚀 快速开
## 🚀 快速开<EFBFBD><EFBFBD>?
### 环境要求
- Node.js 18+ (本地开发)
- Docker (可选,用于容器化部署)
### 方案一:本地开发(推荐)
- Node.js 18+ (本地开<EFBFBD><EFBFBD>?
- Docker (可选,用于容器化部<EFBFBD><EFBFBD>?
### 方案一本地开发推荐<E68EA8><E88D90>?
1. **克隆仓库**
```bash
git clone https://github.com/yourusername/stark-todo-list.git
@@ -84,26 +70,23 @@
2. **安装依赖**
```bash
npm install
#
pnpm install
# <EFBFBD><EFBFBD>? pnpm install
```
3. **启动开发服务器**
```bash
npm run dev
#
pnpm dev
# <EFBFBD><EFBFBD>? pnpm dev
```
4. **打开浏览器**
4. **打开浏览<EFBFBD><EFBFBD>?*
```
http://localhost:3000
http://localhost:2333
```
### 方案二:使用管理脚本
提供了便捷的 Shell 脚本用于轻松管理
提供了便捷的 Shell 脚本用于轻松管理<EFBFBD><EFBFBD>?
```bash
# 启动应用
./run.sh start
@@ -111,14 +94,12 @@
# 停止应用
./run.sh stop
# 重启并清理缓
./run.sh restart
# 重启并清理缓<EFBFBD><EFBFBD>?./run.sh restart
# 查看日志
./run.sh logs
# 检查状
./run.sh status
# 检查状<EFBFBD><EFBFBD>?./run.sh status
```
### 方案三Docker 部署
@@ -128,7 +109,7 @@
./docker-start.sh
```
脚本会自动:
- 构建并启Docker 容器
- 构建并启<EFBFBD><EFBFBD>?Docker 容器
- 自动显示后端日志
- 使用 Docker 卷进行数据持久化
@@ -136,24 +117,18 @@
```bash
./docker-update.sh
```
此脚本会
- 停止当前容器
- 拉取最新代码(如果是 Git 仓库)
- 重新构建 Docker 镜像(无缓存)
- 启动新容器
- 自动显示日志
此脚本会<EFBFBD><EFBFBD>? - 停止当前容器
- 拉取最新代码如果<EFBFBD><EFBFBD>?Git 仓库<E4BB93><E5BA93>? - 重新构建 Docker 镜像无缓存<E7BC93><E5AD98>? - 启动新容<E696B0><E5AEB9>? - 自动显示日志
3. **配置访问密码(可选)**
```bash
# 通过环境变量设置自定义密
export AUTH_PASSWORD=your_custom_password
# 通过环境变量设置自定义密<EFBFBD><EFBFBD>? export AUTH_PASSWORD=your_custom_password
# 或创.env 文件
# 或创<EFBFBD><EFBFBD>?.env 文件
echo "AUTH_PASSWORD=your_custom_password" > .env
```
> 如未配置,默认密码为 `stark123`
4. **或手动使用 Docker Compose**
> 如未配置,默认密码为 `stark123`<EFBFBD><EFBFBD>?
4. **或手动使<E58AA8><E4BDBF>?Docker Compose**
```bash
# 使用 Docker Compose 启动
docker compose up -d --build
@@ -183,18 +158,14 @@
```
5. **数据持久化与安全更新**
- 数据存储在名`todos-data` Docker 卷中,持久化存储 `todos.json` `stats.json`
- **重要提示**:在更新容器时,请务必使用 `./docker-update.sh`。不要手动运行 `docker compose down -v`,因为 `-v` 参数会永久删除您的所有数据卷。
- 备份数据:
```bash
- 数据存储在名<EFBFBD><EFBFBD>?`todos-data` <EFBFBD><EFBFBD>?Docker 卷中,持久化存储 `todos.json` <EFBFBD><EFBFBD>?`stats.json`<EFBFBD><EFBFBD>? - **重要提示**在更新容器时请务必使<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 .
```
- 恢复数据
```bash
- 恢复数据<EFBFBD><EFBFBD>? ```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. **清理(会删除数据**
6. **清理(会删除数据<EFBFBD><EFBFBD>?*
```bash
docker compose down -v
```
@@ -204,28 +175,22 @@
```
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 # 演示数据生成脚本
<EFBFBD><EFBFBD>? ├── app/ # Next.js App Router
<EFBFBD><EFBFBD>? <20><>? ├── api/ # API 路由
<EFBFBD><EFBFBD>? <20><>? <20><>? └── todos/ # Todo CRUD 端点
<EFBFBD><EFBFBD>? <20><>? ├── analytics/ # 数据分析与图表页<EFBFBD><EFBFBD>?<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 上下<EFBFBD><EFBFBD>?<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/ # 静态资<EFBFBD><EFBFBD>?├── scripts/
<EFBFBD><EFBFBD>? ├── generate-icons.js # 图标生成脚本
<EFBFBD><EFBFBD>? └── generate-mock-data.js # 演示数据生成脚本
├── docker-compose.yml # Docker Compose 配置
├── Dockerfile # Docker 镜像配置
├── run.sh # 管理脚本
@@ -234,7 +199,7 @@ stark-todo-list/
└── package.json # 项目依赖
```
## 🛠 技术栈
## 🛠<EFBFBD><EFBFBD>?技术栈
- **框架**: Next.js 15 (App Router)
- **语言**: TypeScript 5
@@ -242,12 +207,11 @@ stark-todo-list/
- **动画**: Framer Motion
- **图表**: Recharts
- **图标**: Lucide React
- **容器化**: Docker & Docker Compose
- **容器<EFBFBD><EFBFBD>?*: Docker & Docker Compose
## 📝 数据格式
任务存储`todos.json` 中,格式如下
任务存储<EFBFBD><EFBFBD>?`todos.json` 中,格式如下<EFBFBD><EFBFBD>?
```json
[
{
@@ -266,32 +230,27 @@ stark-todo-list/
## 🔌 API 接口文档
应用提供 RESTful API 用于程序化访问。在浏览器中访问 `/api-docs` 可查看交互式 API 文档
应用提供 RESTful API 用于程序化访问。在浏览器中访问 `/api-docs` 可查看交互式 API 文档<EFBFBD><EFBFBD>?
### 认证方式
受保护的端点需要在请求头中提供 API 密钥
受保护的端点需要在请求头中提供 API 密钥<EFBFBD><EFBFBD>?
```bash
# 方式一X-API-Key 请求
-H "X-API-Key: your_password"
# 方式一X-API-Key 请求<EFBFBD><EFBFBD>?-H "X-API-Key: your_password"
# 方式二Authorization Bearer 请求
-H "Authorization: Bearer your_password"
# 方式二Authorization Bearer 请求<EFBFBD><EFBFBD>?-H "Authorization: Bearer your_password"
```
> 默认密码`stark123`。可通过 `AUTH_PASSWORD` 环境变量配置
> 默认密码<EFBFBD><EFBFBD>?`stark123`。可通过 `AUTH_PASSWORD` 环境变量配置<EFBFBD><EFBFBD>?
### 接口列表
#### 任务接口 (`/api/todos`)
| 方法 | 认证 | 描述 |
|------|------|------|
| GET | | 获取所有活跃任|
| POST | | 创建新任|
| PUT | | 更新现有任务 |
| DELETE | | 软删除任|
| GET | <EFBFBD><EFBFBD>?| 获取所有活跃任<EFBFBD><EFBFBD>?|
| POST | <EFBFBD><EFBFBD>?| 创建新任<EFBFBD><EFBFBD>?|
| PUT | <EFBFBD><EFBFBD>?| 更新现有任务 |
| DELETE | <EFBFBD><EFBFBD>?| 软删除任<EFBFBD><EFBFBD>?|
**GET /api/todos**
```bash
@@ -303,7 +262,7 @@ curl https://your-domain/api/todos
curl -X POST https://your-domain/api/todos \
-H "Content-Type: application/json" \
-H "X-API-Key: stark123" \
-d '{"text": "新任务", "groupId": "default", "priority": "P1"}'
-d '{"text": "新任<EFBFBD><EFBFBD>?, "groupId": "default", "priority": "P1"}'
```
**PUT /api/todos**
@@ -324,9 +283,9 @@ curl -X DELETE "https://your-domain/api/todos?id=uuid" \
| 方法 | 认证 | 描述 |
|------|------|------|
| GET | | 获取所有分|
| POST | | 创建新分|
| DELETE | | 删除分组 |
| GET | <EFBFBD><EFBFBD>?| 获取所有分<EFBFBD><EFBFBD>?|
| POST | <EFBFBD><EFBFBD>?| 创建新分<EFBFBD><EFBFBD>?|
| DELETE | <EFBFBD><EFBFBD>?| 删除分组 |
**GET /api/groups**
```bash
@@ -351,8 +310,8 @@ curl -X DELETE "https://your-domain/api/groups?id=uuid" \
| 方法 | 认证 | 描述 |
|------|------|------|
| GET | | 获取 PV/UV 统计 |
| POST | | 更新访问统计 |
| GET | <EFBFBD><EFBFBD>?| 获取 PV/UV 统计 |
| POST | <EFBFBD><EFBFBD>?| 更新访问统计 |
**GET /api/stats**
```bash
@@ -363,7 +322,7 @@ curl https://your-domain/api/stats
| 方法 | 认证 | 描述 |
|------|------|------|
| POST | | 验证密码 |
| POST | <EFBFBD><EFBFBD>?| 验证密码 |
**POST /api/auth**
```bash
@@ -374,32 +333,27 @@ curl -X POST https://your-domain/api/auth \
## 🤝 贡献
欢迎贡献!请随时提交 Pull Request
1. Fork 本仓库
2. 创建您的特性分支 (`git checkout -b feature/AmazingFeature`)
欢迎贡献!请随时提交 Pull Request<EFBFBD><EFBFBD>?
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. 打开一Pull Request
更多详情请查看 [贡献指南](CONTRIBUTING.md)。
## 📄 许可证
本项目采用 MIT 许可证 - 详见 [LICENSE](LICENSE) 文件。
5. 打开一<EFBFBD><EFBFBD>?Pull Request
更多详情请查<EFBFBD><EFBFBD>?[贡献指南](CONTRIBUTING.md)<29><>?
## 📄 许可<E8AEB8><E58FAF>?
本项目采<EFBFBD><EFBFBD>?MIT 许可<E8AEB8><E58FAF>?- 详见 [LICENSE](LICENSE) 文件<E69687><E4BBB6>?
## 🙏 致谢
- 基于 [Next.js](https://nextjs.org/) 构建
- UI 设计灵感来自现代极简主义
- STARK ❤️ 打
- <EFBFBD><EFBFBD>?STARK <EFBFBD><EFBFBD>?❤️ 打<EFBFBD><EFBFBD>?
---
<div align="center">
**[返回顶部](#-stark-todo-list)**
**[<EFBFBD><EFBFBD>?返回顶部](#-stark-todo-list)**
STARK ❤️ 制作 | 基于 Next.js
<EFBFBD><EFBFBD>?STARK <EFBFBD><EFBFBD>?❤️ 制作 | 基于 Next.js
</div>