Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions .env
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# 应用标题
APP_TITLE = 飞鸟导航 - Birdnav

# CDN前缀
# 应用标题
APP_TITLE = 飞鸟导航 - Birdnav
# CDN前缀
CDN_PREFIX = https://cdn.jsdelivr.net/gh/CrazyBoyM/birdNav/dist
8 changes: 4 additions & 4 deletions .env.development
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# 应用标题
APP_TITLE = Bird Nav

# CDN前缀
# 应用标题
APP_TITLE = Bird Nav
# CDN前缀
CDN_PREFIX = ''
8 changes: 4 additions & 4 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
node_modules
.DS_Store
dist-ssr
*.local
node_modules
.DS_Store
dist-ssr
*.local
18 changes: 9 additions & 9 deletions .prettierignore
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
# ignore
build
coverage
index.html
dist
README
README.md
package.json
package-lock.json
# ignore
build
coverage
index.html
dist
README
README.md
package.json
package-lock.json
yarn.lock
8 changes: 4 additions & 4 deletions .prettierrc
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
{
"tabWidth": 2,
"useTabs": false
}
{
"tabWidth": 2,
"useTabs": false
}
402 changes: 201 additions & 201 deletions LICENSE

Large diffs are not rendered by default.

82 changes: 41 additions & 41 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,41 +1,41 @@
# birdNav - 飞鸟导航

vercel地址: <https://bird-nav.vercel.app>
一颗追求极致简约、极致实用的心,做一个功能强大而简洁的网址导航 (仿MacOS桌面UI风格)

## Demo预览
### 1. 启动后界面
<img width="800" alt="image" src="https://github.com/user-attachments/assets/d81c306c-25d6-4d39-89c7-d5d23da9b1e8">

### 2. 搜索引擎切换
<img width="800" alt="image" src="https://github.com/user-attachments/assets/410b0529-e58b-411c-bda3-44a90cfec5db">

### 3. 近期待办事项 & 长期目标卡片
<img width="500" alt="image" src="https://github.com/user-attachments/assets/eb9cf10c-9c83-4686-aa9a-5a261bf08c08">

### 4. 打开应用窗口 (iframe)
<img width="800" alt="image" src="https://github.com/user-attachments/assets/192cb40f-f9fa-4474-ab55-102d37c43b58">

### 5. 设置壁纸 (本地存储)
<img width="800" alt="image" src="https://github.com/user-attachments/assets/a9a76c3d-fc1a-453c-8222-680e82d1ed1a">

### 6. 在线练习代码 ([haut-online-ide](https://github.com/CrazyBoyM/haut-online-ide))
<img width="800" alt="image" src="https://github.com/user-attachments/assets/45bd9231-3553-4233-9ec7-a31d042b7c2f">


### 已完成

- 完善现有主体构架
- 调整界面风格
- 开发背景切换,支持canvas、image、video三种
- 优化动画实现
- 自动化构建与发布版本的配置
- 设计导航的logo

### 待完善

- [x] 开发更多具有实用意义的子程序,以iframe窗口形式接入。
- [x] 完善Dock栏,添加更具有表现力的应用列表面板。
- [x] 添加多桌面支持(即可快捷键切换副页面),该桌面可放入更多实用的桌面交互挂件。
- [x] 重写utils工具库,对localStroage数据进行细粒度的控制,便于版本更新时可刷新其中部分默认项。
- [x] 对搜索框做进一步的升级。
# birdNav - 飞鸟导航
vercel地址: <https://bird-nav.vercel.app>
一颗追求极致简约、极致实用的心,做一个功能强大而简洁的网址导航 (仿MacOS桌面UI风格)
## Demo预览
### 1. 启动后界面
<img width="800" alt="image" src="https://github.com/user-attachments/assets/d81c306c-25d6-4d39-89c7-d5d23da9b1e8">
### 2. 搜索引擎切换
<img width="800" alt="image" src="https://github.com/user-attachments/assets/410b0529-e58b-411c-bda3-44a90cfec5db">
### 3. 近期待办事项 & 长期目标卡片
<img width="500" alt="image" src="https://github.com/user-attachments/assets/eb9cf10c-9c83-4686-aa9a-5a261bf08c08">
### 4. 打开应用窗口 (iframe)
<img width="800" alt="image" src="https://github.com/user-attachments/assets/192cb40f-f9fa-4474-ab55-102d37c43b58">
### 5. 设置壁纸 (本地存储)
<img width="800" alt="image" src="https://github.com/user-attachments/assets/a9a76c3d-fc1a-453c-8222-680e82d1ed1a">
### 6. 在线练习代码 ([haut-online-ide](https://github.com/CrazyBoyM/haut-online-ide))
<img width="800" alt="image" src="https://github.com/user-attachments/assets/45bd9231-3553-4233-9ec7-a31d042b7c2f">
### 已完成
- 完善现有主体构架
- 调整界面风格
- 开发背景切换,支持canvas、image、video三种
- 优化动画实现
- 自动化构建与发布版本的配置
- 设计导航的logo
### 待完善
- [x] 开发更多具有实用意义的子程序,以iframe窗口形式接入。
- [x] 完善Dock栏,添加更具有表现力的应用列表面板。
- [x] 添加多桌面支持(即可快捷键切换副页面),该桌面可放入更多实用的桌面交互挂件。
- [x] 重写utils工具库,对localStroage数据进行细粒度的控制,便于版本更新时可刷新其中部分默认项。
- [x] 对搜索框做进一步的升级。
174 changes: 174 additions & 0 deletions REFACTORING.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,174 @@
# birdNav 项目重构说明文档

## 重构概述

本次重构为 birdNav 项目新增了"数据洞察"页面,实现了用户使用数据的可视化分析功能,包括图表展示、图表联动、数据导出和性能优化等特性。

## 修改文件列表

### 1. 新增文件

#### 类型定义
- `src/types/statistics.ts` - 统计相关类型定义

#### 自定义 Hook
- `src/hooks/useStatistics.ts` - 数据统计逻辑封装

#### 图表组件
- `src/component/Charts/LineChart.tsx` - 折线图组件
- `src/component/Charts/PieChart.tsx` - 环形图组件
- `src/component/Charts/BarChart.tsx` - 条形图组件
- `src/component/Charts/EfficiencyCard.tsx` - 效率卡片组件

#### 侧边栏组件
- `src/component/Sidebar/index.tsx` - 侧边栏导航组件
- `src/component/Sidebar/index.css` - 侧边栏样式

#### 数据洞察页面
- `src/pages/Insights/index.tsx` - 数据洞察页面
- `src/pages/Insights/index.css` - 数据洞察页面样式

### 2. 修改文件

- `src/App.tsx` - 主应用组件,添加侧边栏和页面切换逻辑
- `src/App.css` - 主应用样式,适应侧边栏布局

## 功能说明

### 1. 数据统计页面

新增了"数据洞察"页面,展示以下图表:

- **折线图**:展示最近 7 天用户每日访问次数
- **环形图**:展示用户最常使用的功能模块(搜索、待办、Dock 栏、壁纸)的点击分布
- **条形图**:展示待办任务按优先级(高、中、低)的分布
- **效率卡片**:显示本周完成待办数、平均完成时间、与上周对比

### 2. 图表联动功能

- 点击折线图的某一天,环形图和条形图只显示当天的数据
- 点击环形图的某个功能模块,折线图高亮该功能的访问趋势
- 提供"重置筛选"按钮清除所有筛选条件

### 3. 导出功能

- **导出 CSV**:将统计数据导出为 CSV 格式文件
- **导出图片**:将当前图表区域保存为图片(PNG 格式)

### 4. 性能优化

- 使用 `useMemo` 缓存统计计算结果
- 使用 `React.memo` 包装图表组件,避免不必要的重渲染
- 使用 `useCallback` 优化回调函数

## 技术实现

### 架构设计

1. **数据层与视图层分离**:
- 数据统计逻辑封装在 `useStatistics` 自定义 Hook 中
- 视图组件只负责渲染,不包含业务逻辑

2. **组件化设计**:
- 每个图表都是独立的组件,便于维护和复用
- 侧边栏组件负责页面导航
- 数据洞察页面整合所有图表组件

3. **类型安全**:
- 所有函数参数和返回值都有明确的 TypeScript 类型定义
- 禁止使用 `any` 类型

### 核心技术点

1. **纯 SVG 图表实现**:
- 避免了 ECharts 等图表库的依赖问题
- 使用 React + SVG 直接绘制图表
- 支持交互事件(点击、悬停等)

2. **状态管理**:
- 使用 React useState 管理筛选状态
- useMemo 缓存计算结果,提升性能
- useCallback 优化回调函数引用

3. **数据处理**:
- 从 localStorage 读取访问记录和待办数据
- 首次加载时生成模拟数据
- 支持按日期和功能模块筛选数据

## 验证功能

### 前置条件

1. 安装依赖:
```bash
npm install
```

2. 启动开发服务器:
```bash
npm run dev
```

### 验证步骤

1. **页面导航**:
- 打开应用,查看侧边栏是否显示
- 点击"数据洞察"菜单项,检查是否切换到数据洞察页面
- 点击"首页"菜单项,检查是否切换回首页

2. **图表展示**:
- 检查折线图是否显示最近 7 天的访问数据
- 检查环形图是否显示功能模块使用分布
- 检查条形图是否显示待办任务优先级分布
- 检查效率卡片是否显示本周完成待办数、平均完成时间和与上周对比

3. **图表联动**:
- 点击折线图的某一天,检查环形图和条形图是否只显示当天数据
- 点击环形图的某个功能模块,检查折线图是否高亮该功能的访问趋势
- 点击"重置筛选"按钮,检查是否清除所有筛选条件

4. **导出功能**:
- 点击"导出 CSV"按钮,检查是否下载 CSV 文件
- 点击"导出图片"按钮,检查是否下载图表图片

5. **性能验证**:
- 使用 React DevTools 检查组件重渲染情况
- 确认图表组件只在数据变化时重渲染

## 运行测试

### 构建测试

执行构建命令,检查是否有编译错误:
```bash
npm run build
```

### 代码检查

检查 TypeScript 类型错误:
```bash
npx tsc --noEmit
```

## 注意事项

1. **数据模拟**:首次加载时会生成模拟数据,实际项目中应替换为真实数据采集逻辑
2. **图片导出**:图片导出功能在某些浏览器中可能有限制,建议使用最新版 Chrome 或 Firefox
3. **响应式布局**:图表组件已适配不同屏幕尺寸,建议在不同设备上测试
4. **性能监控**:在生产环境中建议添加性能监控,监控图表渲染性能

## 后续优化建议

1. 添加真实的数据采集逻辑,记录用户实际操作
2. 优化图表动画效果,提升用户体验
3. 添加更多图表类型,如热力图、雷达图等
4. 实现数据缓存机制,减少重复计算
5. 添加单元测试,确保代码质量

## 技术栈

- React 17.0.0
- TypeScript 4.3.2
- Vite 2.6.4
- @icon-park/react 1.3.5
26 changes: 13 additions & 13 deletions index.html
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8" />
<link rel="icon" href="/favicon.ico" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title><%- APP_TITLE %></title>
</head>
<body>
<div id="root"></div>
<script type="module" src="/src/main.tsx"></script>
<script src="https://hm.baidu.com/hm.js?55685b3d5ed13754515740b6199bade6"></script>
</body>
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8" />
<link rel="icon" href="/favicon.ico" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title><%- APP_TITLE %></title>
</head>
<body>
<div id="root"></div>
<script type="module" src="/src/main.tsx"></script>
<script src="https://hm.baidu.com/hm.js?55685b3d5ed13754515740b6199bade6"></script>
</body>
</html>
Loading