# 个人工作台 **Repository Path**: wen-guangchuan/my-work-code ## Basic Information - **Project Name**: 个人工作台 - **Description**: No description available - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 7 - **Created**: 2026-08-24 - **Last Updated**: 2026-08-24 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 个人工作台 my-work-code 一个面向个人与教学场景的**单用户工作台**:仪表盘聚合日期时间、天气、今日课程、待办、时间进度条、重要节点与热榜;同时提供待办管理、课表、课程与作业、知识库、免登录作业提交(学号查重)与文件分享能力。 > **当前阶段**:项目骨架。前后端基础结构 + 完整数据库模型已就绪(后端 API 为 501 占位、前端为空白占位页),业务功能将在后续迭代中逐步实现。 ## 项目简介 本项目采用**极简产品取向**:单用户、免登录、无 Token 认证,打开即用。整体架构为前后端分离: - **后端**:Python Flask + SQLite,提供 REST API(8 个模块蓝图:仪表盘 / 待办 / 课表 / 课程 / 作业 / 提交 / 知识库 / 分享)。 - **前端**:Vue 3 + Vite + Element Plus,7 条路由占位页,开发环境通过 Vite 代理访问后端。 - **数据库**:SQLite 单文件库,10 张表,建表脚本与初始化/检查工具齐备。 ## 技术栈与版本 | 端 | 技术 | 版本(实测) | | --- | --- | --- | | 后端 | Python | 3.13 | | 后端 | Flask | 3.1.3 | | 后端 | SQLite | 内置(WAL 模式 + 外键开启) | | 后端 | python-dotenv | 1.2.3(配置管理) | | 后端 | openpyxl | 3.1.5(学生名单导入) | | 后端 | qrcode / Pillow | 8.2 / 12.3.0(作业分享二维码) | | 后端 | zhdate / chinese-calendar | 0.1 / 1.11.0(农历 / 节假日) | | 前端 | Vue | 3.5 | | 前端 | Vite | 6.0 | | 前端 | Element Plus | 2.9 | | 前端 | vue-router | 4.5 | | 前端 | axios | 1.7 | | 前端 | dayjs | 1.11 | | 前端 | marked / dompurify | 15.0 / 3.2(Markdown 预览与防 XSS) | ## 环境要求 | 依赖 | 最低版本 | 开发实测 | | --- | --- | --- | | Python | 3.10+ | 3.13 | | Node.js | 18+ | 22 | | npm | 9+ | 10 | - 支持 Windows / macOS / Linux;`start-all.bat` 一键脚本仅限 Windows。 - 首次运行需联网安装依赖;天气、热榜等第三方接口需在 `.env` 中按需配置。 ## 快速开始 ### 方式一:一键启动(Windows) ```bat 双击 代码\start-all.bat ``` 脚本会自动完成环境自检(缺失 venv 自动创建、缺失依赖自动安装),随后并行弹出后端与前端两个服务窗口,主窗口显示访问地址;按任意键可一键关闭全部服务。停止服务可双击 `代码\stop-all.bat`。 ### 方式二:手动启动 **后端** ```bash cd 代码/my-work python -m venv venv venv/Scripts/activate # Windows;macOS/Linux 为 source venv/bin/activate pip install -r requirements.txt python scripts/init_db.py # 初始化数据库(生成 代码/db/workbench.db 与 init.db) python scripts/check_db.py # 表结构完整性检查(应全部通过) python run.py # 启动,访问 http://localhost:5000/api/health ``` **前端** ```bash cd 代码/my-work-vue npm install npm run dev # 启动,访问 http://localhost:5173 ``` 前端开发环境已配置 `/api` 代理,页面内请求 `/api/*` 会自动转发到后端 5000 端口。 ## 目录结构说明 ``` 代码/ ├── .gitignore # 仓库忽略规则(整合自前后端子项目) ├── LICENSE # MIT 开源许可 ├── README.md # 本文件 ├── start-all.bat # 一键启动(Windows) ├── stop-all.bat # 一键停止(Windows) ├── db/ │ ├── init.db # 建表 SQL 脚本(入库,与 models.py 同源生成) │ └── workbench.db # SQLite 数据库文件(运行时生成,已忽略) ├── my-work/ # Flask 后端 │ ├── app/ │ │ ├── __init__.py # 应用工厂(注册配置 / 数据库 / 蓝图 / 健康检查) │ │ ├── config.py # 配置模块(全部读取自 .env,不硬编码) │ │ ├── db.py # SQLite 连接层(WAL + 外键开启,请求级) │ │ ├── models.py # 10 张表 DDL 与期望结构元数据(唯一数据源) │ │ ├── routes/ # 8 个模块蓝图(仅骨架占位) │ │ └── utils/ # 时间处理(UTC 存储 / 本地展示)、统一响应结构 │ ├── scripts/ │ │ ├── init_db.py # 初始化:生成 db/workbench.db 与 db/init.db │ │ └── check_db.py # 数据库与表结构完整性检查 │ ├── data/ # 运行时数据(uploads / temp) │ ├── .env / .env.example # 后端环境变量(模板见 .env.example) │ ├── requirements.txt │ └── run.py # 后端启动入口 └── my-work-vue/ # Vue3 前端 ├── src/ │ ├── api/request.js # axios 封装(统一请求 / 响应处理) │ ├── router/index.js # 7 条路由(/、/tasks、/schedule、/courses、/knowledge、/submit/:token、/share/:token) │ ├── views/ # 各模块占位页面 │ ├── App.vue # 根组件 │ └── main.js # 入口(挂载 Element Plus) ├── .env / .env.example # 前端环境变量 ├── package.json ├── vite.config.js # Vite 配置(/api 代理到 :5000) └── index.html ``` ### 数据库(10 张表) `task`(待办)、`schedule`(课表)、`course`(课程)、`student`(学生)、`assignment`(作业)、`submission`(作业提交)、`folder`(知识库文件夹)、`file`(知识库文件)、`share`(分享)、`milestone`(重要节点) 关键约定:时间字段存 UTC(`YYYY-MM-DDTHH:MM:SSZ`),日期字段存 `YYYY-MM-DD`;外键仅声明关联,级联删除由应用层事务实现;建表 SQL 幂等可重复执行。 ## 配置说明 所有环境相关配置(数据库路径、第三方 API 地址与 Key、上传限制、限频等)均通过 `.env` 文件管理,**严禁硬编码**。首次使用请复制 `.env.example` 为 `.env` 后按需修改。 ### 后端(my-work/.env) | 变量 | 说明 | 默认值 | | --- | --- | --- | | DATABASE_PATH | SQLite 数据库路径 | `../db/workbench.db` | | UPLOAD_DIR / TEMP_DIR | 上传目录 / 打包临时目录 | `data/uploads` / `data/temp` | | MAX_CONTENT_LENGTH_ASSIGNMENT | 作业提交单文件上限 | `104857600`(100MB) | | MAX_CONTENT_LENGTH_KNOWLEDGE | 知识库单文件上限 | `524288000`(500MB) | | RATE_LIMIT_PER_MINUTE | 上传接口 IP 限频(次/分钟) | `10` | | OPEN_METEO_BASE_URL / GEOCODING_URL / API_KEY | 天气主源 Open-Meteo | 官方地址,无需 Key | | IP_API_URL / IP_API_KEY | IP 定位兜底 | `http://ip-api.com/json` | | HOTLIST_API_URL / API_KEY | 热榜主源 | `https://api.uapis.cn/hotlist` | | HOTLIST_FALLBACK_API_URL / API_KEY | 热榜备选 | `https://60s.viki.moe/v2/60s` | | HOTLIST_CACHE_SECONDS | 热榜进程内缓存时长(秒) | `300` | | HOST / PORT / FLASK_DEBUG | 服务器监听配置 | `0.0.0.0` / `5000` / `false` | ### 前端(my-work-vue/.env) | 变量 | 说明 | 默认值 | | --- | --- | --- | | VITE_API_BASE_URL | 后端 API 基础地址 | `/api`(开发环境走 Vite 代理) | > 注意:`.env` 含密钥与路径信息,已被 `.gitignore` 忽略,不会提交到仓库;仅 `.env.example` 模板入库。 ## 开源许可 本项目采用 **MIT License** 开源,详见 [LICENSE](./LICENSE)。 ``` MIT License Copyright (c) 2026 tangdou0310 ``` 允许自由使用、修改、分发与商用,需保留原始版权声明与许可文本;项目按「现状」提供,作者不对使用后果承担责任。