# myidea **Repository Path**: cool557/myidea ## Basic Information - **Project Name**: myidea - **Description**: My ideas and projects - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-05-23 - **Last Updated**: 2026-06-21 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # MyIdea 创意管理系统 > 收集网络热门内容,挖掘潜在商机 ## 功能特性 ### 首页驾驶舱 - ✅ 时间感知问候语(早上好/下午好/晚上好) - ✅ 四张统计卡片(全部创意/待分析/已分析/已采纳) - ✅ 快捷操作入口(创意列表/添加创意/健康仪表盘/系统配置) - ✅ 管理员专属系统管理快捷入口 - ✅ 首页背景支持参数配置,可填写 `/uploads/...`、`https://...` 或上传根目录下的本地绝对路径,不需要把壁纸文件提交到 Git ### 核心功能 - ✅ 热门创意列表展示(支持筛选、搜索) - ✅ 添加新创意(标题、来源平台、热度、标签、商机分析) - ✅ 创意详情查看 - ✅ 状态管理(待分析→已分析→已采纳) - ✅ 商机分析字段,记录商业价值 - ✅ 创意管理已纳入 RBAC 菜单体系,支持动态路由注册 ### 用户认证 - ✅ JWT 登录/注册 - ✅ Token 自动刷新与过期处理 - ✅ 路由守卫,未登录自动跳转 ### RBAC 权限管理 - ✅ 用户管理 — 管理员可对用户进行增删改查,分配角色 - ✅ 角色管理 — 管理员可创建/编辑/删除角色,为角色分配菜单权限 - ✅ 菜单管理 — 管理员可管理侧边栏菜单树(目录/页面/按钮),控制页面和按钮级权限 - ✅ 动态路由 — 前端根据用户权限动态注册可访问页面 - ✅ 动态菜单 — 侧边栏根据用户角色动态渲染菜单树 ### 健康管理 - ✅ 健康仪表盘 — 今日数据概览、快速操作入口 - ✅ 饮食记录 — 按餐次(早/午/晚/加餐)记录卡路里和营养素 - ✅ 运动记录 — 记录运动类型、时长、消耗卡路里 - ✅ 饮水记录 — 快速添加饮水量,水杯可视化进度 - ✅ 目标管理 — 设置饮食/运动/饮水/体重目标,追踪完成进度 ### 配置中心 - ✅ 字典配置 — 管理系统字典类型、编码和描述 - ✅ 参数配置 — 管理系统参数键值、类型和描述 ### 文档管理 - ✅ 文件管理 — 统一管理上传文件,支持图片预览、下载和软删除 - ✅ 文件存储配置 — 通过 `upload.base-dir` 参数配置本地上传根目录 ### AI 学习笔记 - ✅ 学习仪表盘 — 统计卡片、待复习提醒、快捷操作入口 - ✅ 学习笔记 — Markdown 笔记编写、AI 领域分类、标签管理、收藏、复习提醒 - ✅ 知识库 — 知识点卡片、掌握度评级(1-5星)、LaTeX 公式支持 - ✅ 学习资源 — 课程/文章/论文/视频管理、进度追踪、状态看板 - ✅ 实践项目 — 项目全流程管理(规划→开发→完成)、技术栈标签、经验记录 - ✅ 学习目标 — 日/周/月/长期目标、进度追踪、多指标类型 ### 奋斗管理 - ✅ 奋斗日志 — 记录每日奋斗内容和投入时间,支持日期筛选 - ✅ 奋斗目标 — 大目标/小目标层级管理,进度追踪 0-100%,自动完成标记,编辑时保留排序顺序 - ✅ 奋斗心得 — 阶段性总结反思,支持富文本编辑 - ✅ 日期格式化 — 使用 ISO 8601 格式 (YYYY-MM-DD) 确保跨时区/跨环境一致性 ### 穿搭创意 - ✅ 穿搭仪表盘 — 单品/方案/月度穿搭统计、今日建议、单品整理提醒 - ✅ 衣橱单品 — 管理衣物分类、颜色、品牌、季节、场景、图片 URL 和标签 - ✅ 搭配方案 — 组合多个单品形成方案,支持评分、收藏、复制、归档 - ✅ 灵感收藏 — 记录外部穿搭灵感来源、图片、风格标签和可复用要点 - ✅ 穿搭日历 — 将方案安排到具体日期,记录天气、温度、心情和满意度 - ✅ 推荐逻辑 — 基于季节、场景、收藏和评分生成可解释推荐理由 - ✅ 推荐 2.0 — 多因子评分推荐(场景/季节/天气/收藏/评分/复穿间隔),支持可解释理由标签 - ✅ 衣橱洞察 — 衣橱估值、分类/颜色分布、最常穿单品、闲置单品、高价低用单品 - ✅ 智能标签建议 — 基于名称/品牌/备注的规则化字段建议,降低录入成本 ### 工作流引擎 #### 核心概念 工作流引擎基于有限状态机(FSM)模型,由以下核心元素组成: - **工作流定义(WorkflowDefinition)**:描述一种实体类型的完整审核/流转流程,包含名称、编码、状态 - **阶段(WorkflowStage)**:工作流中的节点,代表实体所处的某种状态。支持排序、颜色标识、初始/终态标记 - **转换规则(WorkflowTransition)**:定义阶段间的有向边,即从 A 阶段可以流转到 B 阶段。支持按钮颜色/文案自定义 - **审批规则(WorkflowApprovalRule)**:绑定在转换规则上的权限检查,基于角色(ROLE)或用户(USER)控制谁可以执行该转换 - **工作流实例(WorkflowInstance)**:实体与工作流的关联记录,追踪当前阶段、负责人、优先级等运行时状态 - **操作历史(WorkflowHistory)**:每次操作(创建、转换、分配)的完整审计日志 #### 预置工作流(5套) | 工作流 | 编码 | 实体类型 | 阶段流程 | |--------|------|----------|----------| | 创意审核流程 | idea_approval | idea | 待整理 → 审核中 → 已采纳/已驳回 → 执行中 → 已完成 → 已归档 | | AI项目开发流程 | ai_project_dev | ai_project | 规划中 → 进行中 → 评审中 → 已完成 → 已归档(支持暂停/恢复) | | 健康目标流程 | health_goal_track | health_goal | 进行中 → 已达成/已放弃(支持暂停/恢复) | | 学习资源流程 | ai_resource_progress | ai_resource | 待学习 → 学习中 → 已完成 → 已归档(支持放回待学) | | 学习目标流程 | ai_goal_track | ai_goal | 进行中 → 已完成/已放弃(支持暂停/恢复) | #### 工作台 统一工作入口,侧边栏顶部置顶,分为三个标签页: **待办(Pending)** - 显示当前用户有权限审批的所有工作流项 - 权限匹配规则:用户角色匹配审批规则中的角色,或用户 ID 直接匹配 - 每项显示:实体类型标签、实体 ID、提交人、创建/更新时间、可用操作按钮 - 操作按钮颜色和文案取自转换规则配置,支持一键审批 - 点击按钮弹出确认框,支持填写备注(最大 500 字) **已办(Processed)** - 显示当前用户参与过但尚未完结的工作流项 - 显示用户最近一次操作的类型和时间 - 支持查看流程轨迹和操作记录 **已结(Completed)** - 显示当前用户参与过且已完结的工作流项 - 显示完成时间 - 支持查看流程轨迹和操作记录 #### 流程轨迹可视化 每个工作台项提供「流程轨迹」按钮,点击弹出可视化步骤条: - 展示工作流全部阶段,按顺序排列 - 已完成阶段:填充阶段颜色 + 勾号标记 + 显示操作人和完成时间 - 当前阶段:高亮显示 + "当前阶段"标签 - 未来阶段:灰色显示 - 阶段间用连线串联,已完成部分的连线变色 #### 审批权限体系 审批规则支持两种类型,可混合使用(OR 逻辑): - **角色审批(ROLE)**:拥有指定角色的用户可执行该转换,如只有 ROLE_ADMIN 可以"审核通过" - **用户审批(USER)**:指定用户可执行该转换 预置审批配置: - 创意审核流程中,「审核通过」「驳回」「直接归档」「驳回归档」四个操作需要 ROLE_ADMIN 权限 - 其他转换规则审批模式为 ANY(无审批限制),任何登录用户可执行 #### 实体状态同步 每次工作流转换完成后,自动将目标阶段的 code 写入实体表的 status 字段,实现工作流状态与业务实体状态的双向同步。支持实体类型:idea、ai_project、ai_resource、ai_goal、health_goal #### 看板视图 提供 5 个实体看板,以列视图展示各阶段下的工作项: | 看板 | 路由 | 说明 | |------|------|------| | 创意看板 | /ideas/kanban | 按创意审核阶段分列展示 | | 项目看板 | /ai/projects/kanban | 按 AI 项目开发阶段分列展示 | | 资源看板 | /ai/resources/kanban | 按学习资源进度阶段分列展示 | | 目标看板 | /ai/goals/kanban | 按学习目标阶段分列展示 | | 健康目标看板 | /health/goals/kanban | 按健康目标阶段分列展示 | 每列显示阶段名称、颜色标识、事项数量,每个事项卡片展示标题、负责人、优先级、紧急标记、截止日期 #### 流程发起 实体列表页面(如创意列表)中,未关联工作流的实体显示「发起流程」按钮: - 点击自动创建该实体类型对应的工作流实例 - 实例从初始阶段开始流转 - 发起后按钮消失,改为显示可用的流转操作按钮 ## 贡献者说明 未来 Codex 将作为本项目的代码贡献者之一,协助持续完善功能、修复问题并改进开发体验。 ## 技术栈 ### 前端 - Vue 3 + Composition API - Vite 5 - Vue Router 4 - Pinia 状态管理 - Element Plus 2.14 - Axios ### 后端 - Java 17 - Spring Boot 3.2.0 - Spring Security 6 + JWT (jjwt 0.12.3) - Spring Data JPA - MySQL 8.x - BCrypt 密码加密 ## 项目结构 ``` myidea/ ├── README.md ├── docs/ │ └── DEPLOY.md # Linux 生产环境部署指南 ├── sql/ │ ├── 01-tables.sql # 全部建表 DDL (10张表) │ ├── 02-seed-data.sql # 种子数据 (admin用户, 角色, 菜单) │ ├── 03-config-center.sql # 配置中心模块菜单 │ ├── 04-idea-menu.sql # 创意管理模块菜单 │ ├── 05-ai-learning.sql # AI 学习笔记模块 DDL + 种子数据 + 菜单 │ ├── 06-workflow.sql # 工作流引擎 DDL + 种子数据 + 菜单 │ ├── 07-struggle.sql # 奋斗管理模块 DDL + 种子数据 │ └── 08-outfit-ideas.sql # 穿搭创意模块 DDL + 菜单种子数据 ├── frontend/ # Vue 3 前端 │ └── vue-project/ │ ├── src/ │ │ ├── api/ # API 请求封装 │ │ │ ├── index.js # 创意 API │ │ │ ├── auth.js # 登录/注册 API │ │ │ ├── admin.js # 管理端 API (用户/角色/菜单) │ │ │ ├── health.js # 健康管理 API │ │ │ ├── config.js # 配置中心 API │ │ │ ├── dashboard.js # 驾驶舱 API │ │ │ ├── ai.js # AI 学习笔记 API │ │ │ ├── struggle.js # 奋斗管理 API │ │ │ ├── outfit.js # 穿搭创意 API │ │ │ └── upload.js # 文件上传 API │ │ ├── components/ # 公共组件 │ │ │ └── SidebarMenu.vue # 递归菜单组件 │ │ ├── router/ # 路由配置 │ │ ├── store/ # Pinia 状态管理 │ │ │ ├── index.js # 创意 store │ │ │ ├── auth.js # 认证 store (token/menus/permissions) │ │ │ ├── permission.js # 权限 store (动态路由生成) │ │ │ ├── health.js # 健康管理 store │ │ │ ├── dashboard.js # 驾驶舱 store │ │ │ ├── struggle.js # 奋斗管理 store │ │ │ └── outfit.js # 穿搭创意 store │ │ ├── views/ # 页面组件 │ │ │ ├── Dashboard.vue │ │ │ ├── Login.vue │ │ │ ├── Register.vue │ │ │ ├── IdeaList.vue │ │ │ ├── IdeaAdd.vue │ │ │ ├── admin/ # 管理页面 │ │ │ │ ├── UserList.vue # 用户管理 │ │ │ │ ├── RoleList.vue # 角色管理 │ │ │ │ └── MenuList.vue # 菜单管理 │ │ │ ├── ai/ # AI 学习笔记页面 │ │ │ │ ├── AiDashboard.vue # 学习仪表盘 │ │ │ │ ├── AiNotes.vue # 学习笔记 │ │ │ │ ├── AiKnowledge.vue # 知识库 │ │ │ │ ├── AiResources.vue # 学习资源 │ │ │ │ ├── AiProjects.vue # 实践项目 │ │ │ │ ├── AiGoals.vue # 学习目标 │ │ │ │ ├── AiProjectKanban.vue # 项目看板 │ │ │ │ ├── AiResourceKanban.vue # 资源看板 │ │ │ │ └── AiGoalKanban.vue # 目标看板 │ │ │ ├── config/ # 配置中心页面 │ │ │ │ ├── DictionaryList.vue # 字典配置 │ │ │ │ └── ParameterList.vue # 参数配置 │ │ │ ├── document/ # 文档管理页面 │ │ │ │ └── FileManager.vue # 文件管理 │ │ │ ├── health/ # 健康管理页面 │ │ │ │ ├── HealthDashboard.vue # 健康仪表盘 │ │ │ │ ├── DietList.vue # 饮食记录 │ │ │ │ ├── ExerciseList.vue # 运动记录 │ │ │ │ ├── WaterList.vue # 饮水记录 │ │ │ │ ├── GoalList.vue # 目标管理 │ │ │ │ └── GoalKanban.vue # 健康目标看板 │ │ │ ├── idea/ # 创意看板页面 │ │ │ │ └── IdeaKanban.vue # 创意看板 │ │ │ ├── struggle/ # 奋斗管理页面 │ │ │ │ ├── StruggleLogList.vue # 奋斗日志 │ │ │ │ ├── StruggleGoalList.vue # 奋斗目标 │ │ │ │ └── StruggleNoteList.vue # 奋斗心得 │ │ │ ├── outfit/ # 穿搭创意页面 │ │ │ │ ├── OutfitDashboard.vue # 穿搭仪表盘 │ │ │ │ ├── OutfitItemList.vue # 衣橱单品 │ │ │ │ ├── OutfitPlanList.vue # 搭配方案 │ │ │ │ ├── OutfitInspiration.vue # 灵感收藏 │ │ │ │ └── OutfitCalendar.vue # 穿搭日历 │ │ │ └── workflow/ # 工作流页面 │ │ │ ├── WorkbenchView.vue # 工作台 │ │ │ ├── WorkflowList.vue # 工作流列表 │ │ │ └── MyPending.vue # 我的待办 │ │ ├── App.vue # 根组件 (侧边栏布局) │ │ └── main.js # 入口 │ ├── package.json │ └── vite.config.js └── backend/ # Java Spring Boot 后端 └── java-project/ ├── pom.xml ├── sql-history.sql # SQL 变更历史记录 ├── uploads/ # 上传图片存储目录 └── src/main/ ├── java/com/myidea/ │ ├── MyIdeaApplication.java │ ├── config/ │ │ ├── SecurityConfig.java # Spring Security + CORS 配置 │ │ ├── WebConfig.java # 静态资源(上传文件)配置 │ │ ├── JwtAuthFilter.java # JWT 认证过滤器 │ │ └── DataInitializer.java # 种子数据初始化 │ ├── controller/ │ │ ├── AuthController.java # 登录/注册 │ │ ├── IdeaController.java # 创意 CRUD + 统计 │ │ ├── DashboardController.java # 驾驶舱数据聚合 │ │ ├── ConfigController.java # 配置中心 CRUD │ │ ├── UserController.java # 用户管理 │ │ ├── RoleController.java # 角色管理 │ │ ├── MenuController.java # 菜单管理 │ │ ├── AiController.java # AI 学习笔记 CRUD + 统计 │ │ ├── WorkflowController.java # 工作流引擎 REST API │ │ ├── StruggleController.java # 奋斗管理 REST API │ │ ├── OutfitController.java # 穿搭创意 REST API │ │ └── FileController.java # 文件上传 REST API │ ├── dto/ │ │ ├── AuthResponse.java # 登录响应 (含 menus/permissions) │ │ ├── LoginRequest.java │ │ ├── RegisterRequest.java │ │ └── MenuTreeNode.java # 菜单树节点 │ ├── model/ │ │ ├── Idea.java │ │ ├── User.java │ │ ├── Role.java │ │ ├── Menu.java │ │ ├── Dictionary.java # 字典实体 │ │ ├── Parameter.java # 参数配置实体 │ │ ├── AiCategory.java # AI 领域分类实体 │ │ ├── AiNote.java # AI 学习笔记实体 │ │ ├── AiKnowledge.java # AI 知识点实体 │ │ ├── AiResource.java # 学习资源实体 │ │ ├── AiProject.java # 实践项目实体 │ │ ├── AiGoal.java # 学习目标实体 │ │ ├── ApiResponse.java # 统一响应格式 │ │ ├── WorkflowDefinition.java # 工作流定义实体 │ │ ├── WorkflowStage.java # 工作流阶段实体 │ │ ├── WorkflowTransition.java # 工作流转换规则实体 │ │ ├── WorkflowApprovalRule.java # 工作流审批规则实体 │ │ ├── WorkflowInstance.java # 工作流实例实体(运行时) │ │ ├── WorkflowHistory.java # 工作流操作历史实体 │ │ ├── StruggleLog.java # 奋斗日志实体 │ │ ├── StruggleGoal.java # 奋斗目标实体 │ │ ├── StruggleNote.java # 奋斗心得实体 │ │ ├── OutfitItem.java # 衣橱单品实体 │ │ ├── OutfitPlan.java # 搭配方案实体 │ │ ├── OutfitPlanItem.java # 方案-单品关联实体 │ │ ├── OutfitInspiration.java # 穿搭灵感实体 │ │ ├── OutfitCalendar.java # 穿搭日历实体 │ │ └── FileAsset.java # 文件资产实体 │ ├── repository/ │ │ ├── IdeaRepository.java │ │ ├── UserRepository.java │ │ ├── RoleRepository.java │ │ ├── MenuRepository.java │ │ ├── DictionaryRepository.java │ │ ├── ParameterRepository.java │ │ ├── WorkflowDefinitionRepository.java │ │ ├── WorkflowStageRepository.java │ │ ├── WorkflowTransitionRepository.java │ │ ├── WorkflowApprovalRuleRepository.java │ │ ├── WorkflowInstanceRepository.java │ │ ├── WorkflowHistoryRepository.java │ │ ├── StruggleLogRepository.java │ │ ├── StruggleGoalRepository.java │ │ ├── StruggleNoteRepository.java │ │ ├── OutfitItemRepository.java │ │ ├── OutfitPlanRepository.java │ │ ├── OutfitPlanItemRepository.java │ │ ├── OutfitInspirationRepository.java │ │ ├── OutfitCalendarRepository.java │ │ └── FileAssetRepository.java │ └── service/ │ ├── JwtService.java # JWT 生成/解析 │ ├── UserService.java # 用户业务逻辑 │ ├── RoleService.java # 角色业务逻辑 │ ├── MenuService.java # 菜单树构建 │ ├── ConfigService.java # 配置中心业务逻辑 │ ├── AiService.java # AI 学习笔记业务逻辑 │ ├── HealthService.java # 健康管理业务逻辑 │ ├── WorkflowService.java # 工作流引擎核心业务 │ ├── StruggleService.java # 奋斗管理核心业务 │ ├── OutfitService.java # 穿搭创意核心业务 │ └── FileService.java # 文件上传服务 └── resources/ └── application.yml ``` ## API 接口 ### 认证 | 方法 | 路径 | 说明 | |------|------|------| | POST | /api/auth/login | 用户登录(返回 token + menus + permissions) | | POST | /api/auth/register | 用户注册 | ### 创意管理 | 方法 | 路径 | 说明 | |------|------|------| | GET | /api/ideas | 获取全部创意 | | GET | /api/ideas/{id} | 获取单个创意 | | POST | /api/ideas | 创建创意 | | PUT | /api/ideas/{id} | 更新创意 | | DELETE | /api/ideas/{id} | 删除创意 | | GET | /api/ideas/search?keyword=xxx | 搜索创意 | | GET | /api/ideas/status/{status} | 按状态筛选 | | GET | /api/ideas/source/{source} | 按来源筛选 | | GET | /api/ideas/stats | 创意统计(各状态计数) | ### 驾驶舱 | 方法 | 路径 | 说明 | |------|------|------| | GET | /api/dashboard | 首页驾驶舱数据(创意统计 + 健康概览) | ### 管理端(需要 ROLE_ADMIN 权限) **用户管理** | 方法 | 路径 | 说明 | |------|------|------| | GET | /api/admin/users | 用户列表 | | GET | /api/admin/users/{id} | 用户详情 | | POST | /api/admin/users | 创建用户 | | PUT | /api/admin/users/{id} | 编辑用户 | | DELETE | /api/admin/users/{id} | 删除用户 | | GET | /api/admin/users/{id}/roles | 获取用户角色 | | PUT | /api/admin/users/{id}/roles | 分配用户角色 | **角色管理** | 方法 | 路径 | 说明 | |------|------|------| | GET | /api/admin/roles | 角色列表 | | GET | /api/admin/roles/{id} | 角色详情 | | POST | /api/admin/roles | 创建角色 | | PUT | /api/admin/roles/{id} | 编辑角色 | | DELETE | /api/admin/roles/{id} | 删除角色 | | GET | /api/admin/roles/{id}/menus | 获取角色菜单 | | PUT | /api/admin/roles/{id}/menus | 分配角色菜单 | **菜单管理** | 方法 | 路径 | 说明 | |------|------|------| | GET | /api/admin/menus/tree | 菜单树 | | GET | /api/admin/menus | 菜单列表(平铺) | | GET | /api/admin/menus/{id} | 菜单详情 | | POST | /api/admin/menus | 创建菜单 | | PUT | /api/admin/menus/{id} | 编辑菜单 | | DELETE | /api/admin/menus/{id} | 删除菜单 | **配置中心** | 方法 | 路径 | 说明 | |------|------|------| | GET | /api/config/dictionaries | 字典列表 | | GET | /api/config/dictionaries/{id} | 字典详情 | | POST | /api/config/dictionaries | 创建字典 | | PUT | /api/config/dictionaries/{id} | 编辑字典 | | DELETE | /api/config/dictionaries/{id} | 删除字典 | | GET | /api/config/parameters | 参数列表 | | GET | /api/config/parameters/{id} | 参数详情 | | POST | /api/config/parameters | 创建参数 | | PUT | /api/config/parameters/{id} | 编辑参数 | | DELETE | /api/config/parameters/{id} | 删除参数 | ### AI 学习笔记 | 方法 | 路径 | 说明 | |------|------|------| | GET | /api/ai/dashboard | 学习仪表盘数据 | | GET | /api/ai/notes | 笔记列表 | | POST | /api/ai/notes | 创建笔记 | | PUT | /api/ai/notes/{id} | 编辑笔记 | | DELETE | /api/ai/notes/{id} | 删除笔记 | | PUT | /api/ai/notes/{id}/review | 标记复习 | | PUT | /api/ai/notes/{id}/bookmark | 切换收藏 | | GET | /api/ai/notes/search?keyword= | 搜索笔记 | | GET | /api/ai/knowledge | 知识点列表 | | POST | /api/ai/knowledge | 创建知识点 | | PUT | /api/ai/knowledge/{id} | 编辑知识点 | | DELETE | /api/ai/knowledge/{id} | 删除知识点 | | GET | /api/ai/resources | 资源列表 | | POST | /api/ai/resources | 添加资源 | | PUT | /api/ai/resources/{id} | 编辑资源 | | DELETE | /api/ai/resources/{id} | 删除资源 | | PUT | /api/ai/resources/{id}/progress | 更新资源进度 | | GET | /api/ai/projects | 项目列表 | | POST | /api/ai/projects | 创建项目 | | PUT | /api/ai/projects/{id} | 编辑项目 | | DELETE | /api/ai/projects/{id} | 删除项目 | | GET | /api/ai/goals | 目标列表 | | POST | /api/ai/goals | 创建目标 | | PUT | /api/ai/goals/{id} | 编辑目标 | | DELETE | /api/ai/goals/{id} | 删除目标 | | PUT | /api/ai/goals/{id}/progress | 更新目标进度 | | GET | /api/ai/categories | AI 领域分类列表 | ### 工作流引擎 **工作流定义管理** | 方法 | 路径 | 说明 | |------|------|------| | GET | /api/workflow/definitions | 工作流定义列表 | | GET | /api/workflow/definitions/{id} | 工作流详情(含阶段和转换) | | POST | /api/workflow/definitions | 创建工作流定义 | | PUT | /api/workflow/definitions/{id} | 更新工作流定义 | | DELETE | /api/workflow/definitions/{id} | 删除工作流定义 | | POST | /api/workflow/definitions/{id}/stages | 添加阶段 | | POST | /api/workflow/definitions/{id}/transitions | 添加转换规则 | | POST | /api/workflow/transitions/{id}/approval-rules | 添加审批规则 | **运行时操作** | 方法 | 路径 | 说明 | |------|------|------| | POST | /api/workflow/instances/start | 启动工作流实例(body: entityType, entityId) | | GET | /api/workflow/instances/entity?entityType=&entityId= | 获取实体的工作流实例 | | GET | /api/workflow/instances/{id} | 实例详情 + 可用转换列表 | | POST | /api/workflow/instances/{id}/transition | 执行转换(body: transitionId, comment) | | GET | /api/workflow/instances/{id}/available-transitions | 获取当前可用的转换规则 | | GET | /api/workflow/instances/{id}/history?page=&size= | 操作历史(分页,按时间倒序) | | POST | /api/workflow/instances/{id}/assign | 分配负责人(body: assigneeId) | | GET | /api/workflow/instances/{id}/tracker | 流程轨迹(所有阶段 + 完整历史) | **工作台(我的任务)** | 方法 | 路径 | 说明 | |------|------|------| | GET | /api/workflow/instances/my-pending | 我的待办(含可用转换规则和提交人信息) | | GET | /api/workflow/instances/my-processed | 我的已办(含我的最近操作和提交人信息) | | GET | /api/workflow/instances/my-completed | 我的已结(已完结的实例和提交人信息) | | GET | /api/workflow/instances/my-work | 分配给我的工作进行中实例 | **看板** | 方法 | 路径 | 说明 | |------|------|------| | GET | /api/workflow/kanban/{entityType} | 看板数据(按阶段分列,含实体标题) | ### 奋斗管理 | 方法 | 路径 | 说明 | |------|------|------| | GET | /api/struggle/logs?date=YYYY-MM-DD | 获取奋斗日志(可选按日期筛选) | | POST | /api/struggle/logs | 创建奋斗日志 | | PUT | /api/struggle/logs/{id} | 更新奋斗日志 | | DELETE | /api/struggle/logs/{id} | 删除奋斗日志 | | GET | /api/struggle/goals?type=BIG | 获取奋斗目标(可选仅大目标) | | GET | /api/struggle/goals/{id}/children | 获取大目标下的子目标 | | POST | /api/struggle/goals | 创建奋斗目标 | | PUT | /api/struggle/goals/{id} | 更新奋斗目标 | | PUT | /api/struggle/goals/{id}/progress | 更新目标进度(自动标记完成) | | DELETE | /api/struggle/goals/{id} | 删除奋斗目标 | | GET | /api/struggle/notes | 获取奋斗心得列表 | | POST | /api/struggle/notes | 创建奋斗心得 | | PUT | /api/struggle/notes/{id} | 更新奋斗心得 | | DELETE | /api/struggle/notes/{id} | 删除奋斗心得 | ### 穿搭创意 | 方法 | 路径 | 说明 | |------|------|------| | GET | /api/outfits/dashboard | 穿搭仪表盘数据(统计、推荐、最近穿搭、单品提醒) | | GET | /api/outfits/recommendations?occasion=&season= | 获取可解释穿搭推荐 | | POST | /api/upload/image | 上传图片(multipart/form-data,file 字段),返回 { url } | | POST | /api/upload/files | 上传通用文件(multipart/form-data,file 字段),返回文件元数据 | | GET | /api/upload/files?keyword=&category=&bizType=&limit= | 查询当前用户文件 | | DELETE | /api/upload/files/{id} | 软删除当前用户文件 | | GET | /api/upload/files/{id}/download | 下载当前用户文件 | | GET | /api/outfits/items?keyword=&category=&season=&status=&page=&size= | 查询衣橱单品 | | GET | /api/outfits/items/{id} | 获取单品详情 | | POST | /api/outfits/items | 创建单品 | | PUT | /api/outfits/items/{id} | 更新单品 | | DELETE | /api/outfits/items/{id} | 删除或归档单品 | | PUT | /api/outfits/items/{id}/archive | 归档单品 | | GET | /api/outfits/plans?keyword=&season=&occasion=&status=&favorite=&page=&size= | 查询搭配方案 | | GET | /api/outfits/plans/{id} | 获取方案详情(含关联单品和日历记录) | | POST | /api/outfits/plans | 创建方案 | | PUT | /api/outfits/plans/{id} | 更新方案 | | DELETE | /api/outfits/plans/{id} | 删除或归档方案 | | POST | /api/outfits/plans/{id}/items | 更新方案关联单品 | | POST | /api/outfits/plans/{id}/copy | 复制方案 | | PUT | /api/outfits/plans/{id}/favorite | 收藏/取消收藏方案 | | GET | /api/outfits/inspirations | 查询灵感收藏 | | GET | /api/outfits/inspirations/{id} | 获取灵感详情 | | POST | /api/outfits/inspirations | 创建灵感 | | PUT | /api/outfits/inspirations/{id} | 更新灵感 | | DELETE | /api/outfits/inspirations/{id} | 删除灵感 | | POST | /api/outfits/inspirations/{id}/to-plan | 将灵感转为方案草稿 | | GET | /api/outfits/calendar?startDate=&endDate= | 查询穿搭日历 | | GET | /api/outfits/calendar/today | 查询今日穿搭 | | GET | /api/outfits/calendar/{id} | 获取日历记录详情 | | POST | /api/outfits/calendar | 创建日历记录 | | PUT | /api/outfits/calendar/{id} | 更新日历记录 | | DELETE | /api/outfits/calendar/{id} | 删除日历记录 | ## 数据模型 ### Idea(创意) | 字段 | 类型 | 说明 | |------|------|------| | id | Long | 主键 | | title | String | 创意标题 | | content | String | 创意内容 | | tags | String | 标签(逗号分隔) | | source | String | 来源:douyin/bilibili/xiaohongshu | | hotLevel | Integer | 热度等级 1-10 | | businessOpportunity | String | 商机分析内容 | | status | String | 状态:pending/analyzed/adopted | | createdAt | DateTime | 创建时间 | | updatedAt | DateTime | 更新时间 | ### User(用户) | 字段 | 类型 | 说明 | |------|------|------| | id | Long | 主键 | | username | String | 用户名(唯一) | | password | String | 密码(BCrypt 加密) | | roles | Set\ | 多对多关联角色 | | createdAt | DateTime | 创建时间 | | updatedAt | DateTime | 更新时间 | ### Role(角色) | 字段 | 类型 | 说明 | |------|------|------| | id | Long | 主键 | | name | String | 角色名称 | | code | String | 角色编码(唯一,如 ROLE_ADMIN) | | description | String | 描述 | | status | Integer | 状态:1=启用 0=禁用 | | menus | Set\ | 多对多关联菜单 | | createdAt | DateTime | 创建时间 | | updatedAt | DateTime | 更新时间 | ### Menu(菜单) | 字段 | 类型 | 说明 | |------|------|------| | id | Long | 主键 | | parentId | Long | 上级菜单 ID(自引用树) | | name | String | 菜单名称 | | type | String | 类型:directory(目录)/ menu(页面)/ button(按钮) | | path | String | 前端路由路径 | | component | String | 前端组件路径 | | icon | String | 图标名称 | | permission | String | 权限标识(如 system:user:add) | | sortOrder | Integer | 排序 | | status | Integer | 状态 | | createdAt | DateTime | 创建时间 | | updatedAt | DateTime | 更新时间 | ### Dictionary(字典) | 字段 | 类型 | 说明 | |------|------|------| | id | Long | 主键 | | dictType | String | 字典类型:system / biz / custom | | dictName | String | 字典名称 | | dictCode | String | 字典编码(唯一) | | description | String | 描述 | | sortOrder | Integer | 排序 | | status | Integer | 状态:1=启用 0=禁用 | | createdAt | DateTime | 创建时间 | | updatedAt | DateTime | 更新时间 | ### Parameter(参数配置) | 字段 | 类型 | 说明 | |------|------|------| | id | Long | 主键 | | paramKey | String | 参数键(唯一) | | paramValue | String | 参数值 | | paramName | String | 参数名称 | | paramType | String | 类型:system / biz / custom | | description | String | 描述 | | sortOrder | Integer | 排序 | | status | Integer | 状态:1=启用 0=禁用 | | createdAt | DateTime | 创建时间 | | updatedAt | DateTime | 更新时间 | ### AiCategory(AI 领域分类) | 字段 | 类型 | 说明 | |------|------|------| | id | Long | 主键 | | name | String | 分类名称(如 大语言模型) | | code | String | 分类编码(唯一,如 llm) | | description | String | 描述 | | icon | String | 图标标识 | | sortOrder | Integer | 排序 | ### AiNote(AI 学习笔记) | 字段 | 类型 | 说明 | |------|------|------| | id | Long | 主键 | | userId | Long | 用户 ID | | categoryId | Long | AI 领域分类 ID | | title | String | 笔记标题 | | content | Text | 笔记内容(Markdown) | | summary | String | 内容摘要 | | tags | String | 标签(逗号分隔) | | difficulty | String | 难度:beginner/intermediate/advanced | | learningTime | Integer | 学习时长(分钟) | | isBookmarked | Boolean | 是否收藏 | | isReviewed | Boolean | 是否已复习 | | reviewCount | Integer | 复习次数 | ### AiKnowledge(AI 知识点) | 字段 | 类型 | 说明 | |------|------|------| | id | Long | 主键 | | userId | Long | 用户 ID | | categoryId | Long | AI 领域分类 ID | | noteId | Long | 关联笔记 ID | | name | String | 知识点名称 | | definition | Text | 定义/解释 | | formula | Text | 数学公式(LaTeX) | | example | Text | 示例说明 | | mastery | Integer | 掌握程度 1-5 | ### AiResource(学习资源) | 字段 | 类型 | 说明 | |------|------|------| | id | Long | 主键 | | userId | Long | 用户 ID | | categoryId | Long | AI 领域分类 ID | | title | String | 资源标题 | | url | String | 资源链接 | | type | String | 类型:course/article/paper/video/book/github | | platform | String | 来源平台 | | progress | Integer | 学习进度 0-100 | | rating | Integer | 评分 1-5 | | status | String | 状态:todo/in_progress/completed/abandoned | ### AiProject(实践项目) | 字段 | 类型 | 说明 | |------|------|------| | id | Long | 主键 | | userId | Long | 用户 ID | | categoryId | Long | AI 领域分类 ID | | name | String | 项目名称 | | description | Text | 项目描述 | | techStack | String | 技术栈 | | githubUrl | String | GitHub 仓库 | | status | String | 状态:planning/developing/completed/abandoned | | result | Text | 项目结果总结 | | lessonsLearned | Text | 经验教训 | ### AiGoal(学习目标) | 字段 | 类型 | 说明 | |------|------|------| | id | Long | 主键 | | userId | Long | 用户 ID | | title | String | 目标标题 | | goalType | String | 类型:daily/weekly/monthly/long_term | | targetType | String | 指标:note_count/learning_hours/project_count/knowledge_count | | targetValue | Double | 目标值 | | currentValue | Double | 当前值 | | unit | String | 单位 | | status | String | 状态:active/completed/abandoned | ### OutfitItem(衣橱单品) | 字段 | 类型 | 说明 | |------|------|------| | id | Long | 主键 | | userId | Long | 用户 ID | | name | String | 单品名称 | | category | String | 分类:top/bottom/dress/outerwear/shoes/bag/accessory/other | | color | String | 主色(HEX 或文本) | | brand | String | 品牌 | | season | String | 季节:spring/summer/autumn/winter/all | | occasion | String | 场景:daily/work/date/sport/travel/party/formal/home | | imageUrl | String | 图片 URL | | tags | String | 标签(逗号分隔) | | status | String | 状态:active/archived | ### OutfitPlan(搭配方案) | 字段 | 类型 | 说明 | |------|------|------| | id | Long | 主键 | | userId | Long | 用户 ID | | title | String | 方案标题 | | description | Text | 搭配说明 | | coverImageUrl | String | 封面图片 URL | | styleTags | String | 风格标签(逗号分隔) | | season | String | 适用季节 | | occasion | String | 适用场景 | | rating | Integer | 评分 0-5 | | favorite | Boolean | 是否收藏 | | status | String | 状态:draft/ready/worn/archived | ### OutfitPlanItem(方案-单品关联) | 字段 | 类型 | 说明 | |------|------|------| | id | Long | 主键 | | planId | Long | 搭配方案 ID | | itemId | Long | 单品 ID | | sortOrder | Integer | 单品排序 | ### OutfitInspiration(穿搭灵感) | 字段 | 类型 | 说明 | |------|------|------| | id | Long | 主键 | | userId | Long | 用户 ID | | title | String | 灵感标题 | | source | String | 来源平台 | | sourceUrl | String | 原链接 | | imageUrl | String | 灵感图 URL | | styleTags | String | 风格标签 | | season | String | 季节 | | occasion | String | 场景 | | keyPoints | Text | 可复用要点 | | status | String | 状态:todo/converted/archived | ### OutfitCalendar(穿搭日历) | 字段 | 类型 | 说明 | |------|------|------| | id | Long | 主键 | | userId | Long | 用户 ID | | planId | Long | 搭配方案 ID | | wearDate | LocalDate | 穿着日期 | | weather | String | 天气 | | temperature | String | 温度 | | mood | String | 心情 | | rating | Integer | 当日满意度 0-5 | | notes | Text | 备注 | ## 权限模型 ``` User ──ManyToMany── Role ──ManyToMany── Menu Menu 自引用树结构: ├── 目录 (directory) → 侧边栏分组,如"系统管理" │ ├── 页面 (menu) → 具体页面路由,如 /admin/users │ │ ├── 按钮 (button) → 页面内操作权限,如 system:user:add │ │ └── 按钮 (button) │ └── 页面 (menu) └── 目录 (directory) ``` JWT Token 载荷中包含用户角色和权限列表,前端据此渲染菜单 + 注册动态路由,后端 `@EnableMethodSecurity` 进行 API 级别鉴权。 默认角色: - `ROLE_ADMIN`:系统管理员,拥有全部菜单和按钮权限。 - `ROLE_USER`:普通用户,首次启动时自动创建并同步非后台管理菜单;新注册用户默认分配该角色,历史无角色用户会在启动初始化时补齐。 个人数据隔离: - 健康、AI 学习笔记、穿搭创意等个人模块均按当前登录用户解析 `userId`。 - 详情、更新、删除、进度、收藏、复习等接口会校验资源归属,避免跨用户访问。 ## 环境配置 `application.yml` 支持通过环境变量覆盖常用运行配置: | 环境变量 | 默认值 | 说明 | |----------|--------|------| | `JWT_SECRET` | 开发默认密钥 | JWT 签名密钥,生产环境必须替换 | | `ADMIN_DEFAULT_PASSWORD` | `admin123` | 首次初始化 admin 用户密码 | | `SERVER_PORT` | `8080` | 后端服务端口 | | `DB_URL` | 本地 `robot` 数据库 | JDBC 连接地址 | | `DB_USERNAME` | `root` | 数据库用户名 | | `DB_PASSWORD` | `root` | 数据库密码 | | `CORS_ALLOWED_ORIGIN_PATTERNS` | `http://localhost:*,http://127.0.0.1:*` | 允许跨域访问的前端来源,多个值用逗号分隔 | | `UPLOAD_BASE_DIR` | `D:\dev\files` | 上传文件存储根目录(需与参数表中 `upload.base-dir` 一致,修改后重启生效) | ### 参数配置(数据库) 系统参数可在 **配置中心 → 参数配置** 页面管理: | 参数键 | 默认值 | 说明 | |--------|--------|------| | `upload.base-dir` | `D:\dev\files` | 文件上传存储根目录,修改后重启后端生效 | | `ui.dashboard.background-url` | 空 | 登录后首页背景图片。可填写 `/uploads/...`、`https://...`,也可填写 `upload.base-dir` 下的本地绝对路径,例如 `D:\dev\files\outfit\202605\xxx.jpg`;留空时使用默认渐变背景 | | `ui.login.background-url` | 空 | 登录页背景图片。配置方式同首页背景,可与首页使用不同图片 | 首页和登录页背景推荐通过文件中心上传图片后,将返回的 `/uploads/...` 地址填入对应参数。如果图片已经在上传根目录下,也可以直接填写本地绝对路径,后端会自动转换为 `/uploads/...` 访问地址。代码仓库只保存配置能力,不保存具体壁纸文件。 ### 自动登录 登录页提供 **自动登录** 选项: - 勾选时,登录态保存到浏览器本地存储,刷新或重新打开页面会自动进入系统。 - 取消勾选时,登录态只保存在当前浏览器会话中,关闭浏览器后失效。 - 退出登录会清理两种登录态。 ### 记住密码 登录页提供 **记住密码** 选项: - 勾选时,登录成功后会把用户名和密码保存到当前浏览器本地存储,下次打开登录页自动回填。 - 取消勾选时,会立即清理已保存的用户名和密码;登录成功后也不会再保存密码。 - 该功能只适合个人可信设备使用。当前实现仅做本地编码存储,不等同于安全加密;公共电脑或多人共用电脑不建议开启。 ## 部署 详见 [docs/DEPLOY.md](docs/DEPLOY.md),包含完整的 Linux 生产环境部署流程(Nginx + Systemd + MySQL + HTTPS)。 ## 快速启动 ### 数据库 ```bash # 创建数据库并导入建表语句 mysql -u root -p -e "CREATE DATABASE IF NOT EXISTS myidea DEFAULT CHARSET utf8mb4;" ``` ### 后端 ```bash cd backend/java-project # 修改 application.yml 中的数据库连接信息 mvn spring-boot:run ``` 首次启动时 `DataInitializer` 会自动创建种子数据: - 管理员账号:`admin / admin123` - 角色:`ROLE_ADMIN`、`ROLE_USER` - 默认菜单(含创意管理、系统管理、健康管理、配置中心、AI 学习笔记、奋斗管理、工作流、穿搭创意) ### 验证 ```bash # 后端编译检查 cd backend/java-project mvn -q -DskipTests compile ``` 建议在提交前额外做一轮冒烟检查: - 未登录访问 `/api/dashboard` 返回 401。 - 登录/注册后可获取菜单、权限和 JWT。 - 普通用户能访问个人模块,不能访问 `/api/admin/**`。 - 穿搭仪表盘、单品、方案、日历页面可以正常渲染。 ### 前端 ```bash cd frontend/vue-project npm install npm run dev ``` 访问 `http://localhost:5173`,使用 `admin / admin123` 登录。 ## 开发辅助脚本 ### Git 提交统计报表 仓库内置 `scripts/git_commit_report.py`,用于统计 Git 提交活跃度并生成报表。脚本只依赖 Python 标准库和本机 `git` 命令。 ```bash # 生成最近 30 天 Markdown 报表 python scripts/git_commit_report.py # 指定统计范围 python scripts/git_commit_report.py --since "90 days ago" # 输出 JSON python scripts/git_commit_report.py --format json --out reports/git-commit-report.json # 每 60 分钟定时生成一次 python scripts/git_commit_report.py --watch --interval-minutes 60 ``` 默认输出目录为 `reports/`,该目录已加入 `.gitignore`,用于保存本地生成的报表,不提交到仓库。 Windows 任务计划可配置为: ```text 程序: python 参数: D:\dev\myidea\scripts\git_commit_report.py --repo D:\dev\myidea --since "30 days ago" --out D:\dev\myidea\reports\git-commit-report.md 起始于: D:\dev\myidea ```