Initial commit: Complete工时统计系统 implementation

This commit is contained in:
2025-11-13 01:00:27 +08:00
commit b554c14ce6
47 changed files with 6040 additions and 0 deletions

262
gpt/1.md Normal file
View File

@@ -0,0 +1,262 @@
# 🧭 工时统计系统 Web UI 设计建议(供实现参考)
## 一、总体设计思路
目标:
构建一个简洁、专业、响应式的企业级工时统计系统前端界面,满足以下目标:
* 清晰展示工时记录、统计趋势与项目分布;
* 操作流程自然,减少学习成本;
* 支持桌面端优先设计Desktop-first后续可拓展移动端适配。
整体风格参考 **IBM Carbon Design System****Material 3** 规范。
---
## 二、界面架构结构
**顶层结构Layout Skeleton**
```
┌───────────────────────────────────────────────────────┐
│ 顶部导航栏Header / Navbar
├───────────────────────────────────────────────────────┤
│ 主内容区Main Content
│ ├─ 侧边导航栏(可选) │
│ └─ 内容容器(根据页面不同加载不同模块) │
├───────────────────────────────────────────────────────┤
│ 页脚Footer
└───────────────────────────────────────────────────────┘
```
---
## 三、导航栏设计Header
**内容结构**
```
[Logo 工时统计系统] 首页 | 工时记录 | 添加记录 | 报表 | 设置 [用户头像 ⬇]
```
**功能要求:**
* Logo + 系统标题在左侧。
* 中间为导航菜单,使用高亮(底部边框或字体加粗)指示当前页面。
* 右上角为用户区域,下拉菜单包含:个人信息、登出。
* 固定顶部sticky header
**样式建议:**
* 背景:#0F62FEIBM 蓝)或白底 + 蓝色字体
* 字体颜色:白色(深色模式)或深灰(亮色模式)
* 高度64px
* 阴影:`box-shadow: 0 2px 4px rgba(0,0,0,0.1)`
---
## 四、主要页面设计
### 1⃣ 首页Dashboard
**布局结构:**
```
┌──────────────────────────────────────────────────┐
│ 工时总览Summary Cards
│ [本周工时] [本月工时] [平均每日工时] │
├──────────────────────────────────────────────────┤
│ 项目统计Project Distribution
│ 条形图或环形图展示各项目工时占比 │
├──────────────────────────────────────────────────┤
│ 本月趋势Trend Chart
│ 折线图X轴=日期 / Y轴=工时 │
└──────────────────────────────────────────────────┘
```
**交互说明:**
* 图表悬浮时显示 Tooltip项目名 + 工时数)。
* 点击项目可跳转至“工时记录”并自动筛选该项目。
**组件建议:**
* 使用 ECharts 或 Chart.js 实现可视化。
* 三列信息卡使用相同宽度与阴影,居中排列。
---
### 2⃣ 工时记录页Timesheet List
**布局结构:**
```
筛选栏
┌─────────────────────────────┐
│ 日期范围 | 员工 | 项目 | 状态 | [查询] [重置] │
└─────────────────────────────┘
工时表格
┌────────────────────────────────────────────────────┐
│ 日期 | 员工 | 项目 | 工时 | 状态 | 备注 | 操作 │
├────────────────────────────────────────────────────┤
│ ... 数据 ... │
└────────────────────────────────────────────────────┘
操作区
[ 添加记录 ] [ 编辑选中 ] [ 删除选中 ] [ 导出 Excel ]
```
**交互说明:**
* 表格支持分页、排序、筛选。
* 点击行可展开详细信息。
* “导出 Excel”按钮执行文件下载。
---
### 3⃣ 添加工时记录页Form
**布局:**
```
员工姓名: [___________] 日期: [YYYY-MM-DD]
项目选择: [___________ ▼] 工时(小时): [____]
备注: [__________________________________________]
[ 保存记录 ] [ 重置表单 ] [ 返回列表 ]
```
**交互逻辑:**
* 保存前表单验证:必填项(姓名、日期、项目、工时);
* 保存成功后提示 “保存成功” Toast
* 重置按钮清空输入;
* 返回列表跳转至工时记录页。
---
### 4⃣ 报表页Reports
**布局建议:左右分栏结构**
```
┌──────────────┬──────────────────────────┐
│ 月度趋势图 │ 项目占比环形图 │
│ 折线图 │ 饼/环形图 │
│ 周1~周4数据 │ 各项目百分比 │
└──────────────┴──────────────────────────┘
[ 导出 PDF ] [ 返回首页 ]
```
**说明:**
* 图表均带 Hover Tooltip
* 支持导出 PNG / PDF 报表。
---
### 5⃣ 设置页Settings
**模块划分:**
1. 个人信息(可编辑姓名、邮箱、部门)
2. 系统偏好(主题、语言、时间格式)
**UI 布局:**
```
┌────────────────────────────────┐
│ 个人信息 │
│ 姓名: [张三] 邮箱: [zhang@ibm.com] │
│ 部门: [开发部] 角色: [管理员] │
└────────────────────────────────┘
┌────────────────────────────────┐
│ 系统设置 │
│ 语言: [中文 ▼] │
│ 主题: [亮色 ☐ 暗色 ☑] │
│ 时间显示: [24小时制 ☑] │
└────────────────────────────────┘
[ 保存设置 ]
```
---
## 五、页脚Footer
**内容:**
```
© 2025 工时统计系统 | Powered by IBM Engineering
```
固定在底部,字体较小、灰色,左右居中。
---
## 六、视觉规范Visual Guideline
| 元素类型 | 建议样式 |
| ---- | ----------------------------------- |
| 主色调 | IBM 蓝 #0F62FE |
| 辅助色 | 灰色背景 #F4F4F4 |
| 字体 | IBM Plex Sans, 14px, 400 weight |
| 卡片 | 白底 + 阴影 `0 1px 3px rgba(0,0,0,0.1)` |
| 按钮 | 圆角 6px主按钮蓝底白字次按钮灰底黑字 |
| 表格 | 条纹行、悬浮高亮行、分页控件底部对齐 |
| 表单控件 | 输入框圆角 4px聚焦高亮边框蓝色 |
| 动效 | Hover、点击反馈 100ms ease-in-out |
---
## 七、响应式设计
* **≥1280px桌面端**:三列卡片布局,图表并列显示。
* **768px1279px平板端**:卡片两列布局,图表堆叠。
* **≤767px手机端**:所有模块垂直排列,表格滚动横向显示。
---
## 八、交互与反馈
| 事件 | 响应 |
| ---- | ------------ |
| 保存成功 | Toast 弹窗提示 |
| 删除操作 | 二次确认对话框 |
| 表单错误 | 红色提示文本 |
| 导出操作 | 文件下载 |
| 数据加载 | Skeleton 骨架屏 |
---
## 九、技术栈建议(可选)
前端建议:
* 框架React + Vite 或 Next.js
* UI 库IBM Carbon Components / MUI
* 图表ECharts / Chart.js
* 状态管理Zustand 或 Redux Toolkit
* 样式Tailwind / SCSS
---
## 十、补充说明
为方便后续扩展,建议在 UI 层使用组件化设计:
* `<TimesheetTable />`
* `<WorktimeForm />`
* `<DashboardCards />`
* `<ReportCharts />`
* `<SettingsPanel />`
所有交互(保存、查询、导出)应以统一的消息提示组件反馈。
---

148
gpt/2.md Normal file
View File

@@ -0,0 +1,148 @@
# 🧭 工时统计系统 Web UI 设计文档
## 一、页面流转逻辑Page Flow
```mermaid
graph TD
A[登录页 /login] --> B[首页 /dashboard]
B --> C[工时录入 /timesheet]
B --> D[工时查询 /records]
B --> E[统计报表 /reports]
B --> F[个人设置 /settings]
C --> B
D --> G[记录详情 /records/:id]
G --> D
E --> H[导出报表 /reports/export]
H --> E
F --> B
```
### 页面说明
* **登录页**:用户输入账号密码后跳转到首页。
* **首页**:展示个人本周工时概览和快捷入口。
* **工时录入页**:填写日期、项目、任务内容和时长。
* **工时查询页**:查看历史工时,可筛选、分页、导出。
* **统计报表页**:按项目、成员或时间段汇总展示。
* **个人设置页**:修改密码、偏好、通知等。
---
## 二、组件层级结构Component Hierarchy
### 1. 顶层布局
```plaintext
<AppLayout>
├── <Header /> # 顶部导航栏(系统名 + 用户信息 + 退出按钮)
├── <Sidebar /> # 左侧菜单栏(首页/录入/查询/报表/设置)
├── <MainContent /> # 主内容区(根据路由动态切换)
└── <Footer /> # 底部版本信息
```
---
### 2. 页面结构与组件拆分
#### 首页(/dashboard
```plaintext
<DashboardPage>
├── <SummaryCardGroup>
│ ├── <Card title="本周总工时" value="36h" icon="clock" />
│ ├── <Card title="项目数量" value="5" icon="folder" />
│ ├── <Card title="未提交天数" value="1" icon="alert" />
├── <RecentActivitiesTable /> # 最近录入的工时记录(简表)
└── <QuickActionsPanel /> # 快捷入口:录入工时 / 查看报表
```
---
#### 工时录入页(/timesheet
```plaintext
<TimesheetPage>
├── <DatePicker label="日期" />
├── <SelectProject label="项目" />
├── <InputText label="任务内容" multiline />
├── <InputNumber label="时长 (小时)" />
├── <TagSelector label="任务类型" />
├── <ButtonGroup>
│ ├── <Button type="primary">保存</Button>
│ ├── <Button>重置</Button>
│ └── <Button variant="ghost">返回</Button>
└── <Toast /> # 提交结果提示
```
---
#### 工时查询页(/records
```plaintext
<RecordsPage>
├── <FilterBar>
│ ├── <DateRangePicker />
│ ├── <SelectProject />
│ ├── <SelectMember />
│ └── <Button type="primary">查询</Button>
├── <DataTable>
│ ├── columns: 日期 | 项目 | 任务内容 | 工时 | 提交人 | 状态
│ ├── 支持排序 / 分页 / 导出 CSV
│ ├── 行点击 => <RecordDetailModal />
└── <Pagination />
```
---
#### 统计报表页(/reports
```plaintext
<ReportsPage>
├── <ReportFilterBar>
│ ├── <SelectReportType /> # 按项目/成员/时间维度
│ ├── <DateRangePicker />
│ ├── <Button type="primary">生成</Button>
├── <ChartArea>
│ ├── <BarChart /> # 工时分布图
│ ├── <PieChart /> # 项目占比图
└── <ExportPanel>
├── <Button>导出PDF</Button>
├── <Button>导出Excel</Button>
```
---
#### 个人设置页(/settings
```plaintext
<SettingsPage>
├── <ProfileSection>
│ ├── <AvatarUploader />
│ ├── <InputText label="姓名" />
│ ├── <InputEmail label="邮箱" />
├── <PreferenceSection>
│ ├── <Toggle label="邮件提醒" />
│ ├── <SelectTheme />
├── <SecuritySection>
│ ├── <ChangePasswordForm />
└── <Button type="primary">保存更改</Button>
```
---
## 三、设计重点UI/UX建议
* **视觉风格**:扁平化 + 浅色主题,使用蓝灰调主色,次色调橙色。
* **数据呈现**尽量图表化展示Bar、Pie、Line增强可读性。
* **交互反馈**:录入与报表生成提供 Toast、Modal、Loading 状态。
* **响应式布局**主内容区栅格化2/3主视图 + 1/3侧卡片
* **可访问性**:表单控件具备清晰标签与焦点状态。

179
gpt/3.md Normal file
View File

@@ -0,0 +1,179 @@
## 🧩 工时统计系统 UI 蓝图JSON
```json
{
"app": {
"name": "工时统计系统",
"layout": {
"type": "AppLayout",
"children": [
{
"type": "Header",
"props": {
"title": "工时统计系统",
"userMenu": ["个人设置", "退出登录"]
}
},
{
"type": "Sidebar",
"menu": [
{ "label": "首页", "route": "/dashboard", "icon": "home" },
{ "label": "工时录入", "route": "/timesheet", "icon": "edit" },
{ "label": "工时查询", "route": "/records", "icon": "table" },
{ "label": "统计报表", "route": "/reports", "icon": "chart" },
{ "label": "个人设置", "route": "/settings", "icon": "user" }
]
},
{
"type": "MainContent",
"router": true
},
{
"type": "Footer",
"props": {
"text": "© 2025 IBM 工程部 | 版本 v1.0.0"
}
}
]
}
},
"pages": {
"/login": {
"title": "登录",
"components": [
{ "type": "Logo", "props": { "src": "/logo.svg" } },
{ "type": "InputText", "label": "用户名" },
{ "type": "InputPassword", "label": "密码" },
{ "type": "Button", "props": { "text": "登录", "action": "submit" } }
]
},
"/dashboard": {
"title": "首页",
"components": [
{
"type": "SummaryCardGroup",
"children": [
{ "type": "Card", "props": { "title": "本周总工时", "value": "36h", "icon": "clock" } },
{ "type": "Card", "props": { "title": "项目数量", "value": "5", "icon": "folder" } },
{ "type": "Card", "props": { "title": "未提交天数", "value": "1", "icon": "alert" } }
]
},
{ "type": "RecentActivitiesTable" },
{ "type": "QuickActionsPanel" }
]
},
"/timesheet": {
"title": "工时录入",
"components": [
{ "type": "DatePicker", "label": "日期" },
{ "type": "SelectProject", "label": "项目" },
{ "type": "InputText", "label": "任务内容", "props": { "multiline": true } },
{ "type": "InputNumber", "label": "时长 (小时)" },
{ "type": "TagSelector", "label": "任务类型" },
{
"type": "ButtonGroup",
"children": [
{ "type": "Button", "props": { "text": "保存", "variant": "primary" } },
{ "type": "Button", "props": { "text": "重置" } },
{ "type": "Button", "props": { "text": "返回", "variant": "ghost" } }
]
},
{ "type": "Toast" }
]
},
"/records": {
"title": "工时查询",
"components": [
{
"type": "FilterBar",
"children": [
{ "type": "DateRangePicker" },
{ "type": "SelectProject" },
{ "type": "SelectMember" },
{ "type": "Button", "props": { "text": "查询", "variant": "primary" } }
]
},
{
"type": "DataTable",
"props": {
"columns": ["日期", "项目", "任务内容", "工时", "提交人", "状态"],
"features": ["排序", "分页", "导出 CSV"]
}
},
{ "type": "Pagination" },
{ "type": "RecordDetailModal", "trigger": "rowClick" }
]
},
"/reports": {
"title": "统计报表",
"components": [
{
"type": "ReportFilterBar",
"children": [
{ "type": "SelectReportType" },
{ "type": "DateRangePicker" },
{ "type": "Button", "props": { "text": "生成", "variant": "primary" } }
]
},
{
"type": "ChartArea",
"children": [
{ "type": "BarChart", "props": { "title": "工时分布" } },
{ "type": "PieChart", "props": { "title": "项目占比" } }
]
},
{
"type": "ExportPanel",
"children": [
{ "type": "Button", "props": { "text": "导出PDF" } },
{ "type": "Button", "props": { "text": "导出Excel" } }
]
}
]
},
"/settings": {
"title": "个人设置",
"components": [
{
"type": "ProfileSection",
"children": [
{ "type": "AvatarUploader" },
{ "type": "InputText", "label": "姓名" },
{ "type": "InputEmail", "label": "邮箱" }
]
},
{
"type": "PreferenceSection",
"children": [
{ "type": "Toggle", "label": "邮件提醒" },
{ "type": "SelectTheme", "label": "主题风格" }
]
},
{
"type": "SecuritySection",
"children": [
{ "type": "ChangePasswordForm" }
]
},
{ "type": "Button", "props": { "text": "保存更改", "variant": "primary" } }
]
}
}
}
```
---
## 💡 说明与建议
* **路由结构**:前端框架可直接用该 JSON 的键值作为路由定义。
* **组件系统**:建议 Claude 基于 UI 框架React + shadcn/ui 或 Vue + Element Plus生成组件树。
* **状态管理**:可使用 ZustandReact或 PiniaVue统一管理全局状态用户、工时记录、报表
* **数据接口**:每页留出 `useEffect` / `onMounted` 钩子与后端 API 对接。
* **视觉风格**:蓝灰主题、圆角 2xl、浅阴影、响应式网格布局。