# mind-palette **Repository Path**: qjx010/mind-palette ## Basic Information - **Project Name**: mind-palette - **Description**: MindPalette(思维调色板)—— 项目简介 MindPalette 是一个为技术人打造的卡片化知识工具,旨在帮助开发者高效沉淀、整理和分享碎片化知识。 你可以用它来: ✍️ 撰写与发布:Markdown 编辑器写作,支持草稿/发布、公开/私密 🏷️ 知识管理:标签分类、全文搜索、代码片段收藏、外部链接中转 📊 复盘与洞察:一键生成文章复盘卡片,私人知识仪表盘可视化 - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2026-05-12 - **Last Updated**: 2026-06-11 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # MindPalette(思维调色板) > **为技术人打造的卡片化知识工具** > 把碎片知识变成精美卡片,让你的知识沉淀以卡片的方式发光。 [![License](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE) [![Spring Boot](https://img.shields.io/badge/Spring%20Boot-4.0.3-brightgreen.svg)](https://spring.io/projects/spring-boot) [![Vue](https://img.shields.io/badge/Vue-3.5.x-4FC08D.svg)](https://vuejs.org/) [![JDK](https://img.shields.io/badge/JDK-21-orange.svg)](https://openjdk.org/) --- ## 📖 目录 - [1. 项目概述](#1-项目概述) - [2. 更新日志](#2-更新日志) - [3. 功能演示](#3-功能演示) - [4. 技术架构](#4-技术架构) - [5. 快速开始](#5-快速开始) - [6. 开发指南](#6-开发指南) - [7. 部署说明](#7-部署说明) - [8. 贡献指南](#8-贡献指南) - [9. 许可证](#9-许可证) - [10. 联系方式](#10-联系方式) --- ## 1. 项目概述 ### 🎯 项目标语 **Think in Markdown. Paint with Palette.** —— 用调色板思维,沉淀知识、可视化分享。 ### 📚 项目背景 在日常学习和工作中,技术人、大学生和知识工作者会产生大量的碎片化知识——技术笔记、代码片段、学习心得、外部链接等。这些知识散落在本地文件、浏览器书签、云笔记等各处,难以体系化管理和高效检索。同时,写完的文章缺乏传播抓手,难以建立个人品牌。 **MindPalette** 正是为解决这些痛点而生:一个支持多用户的极简知识库与博客系统,既能优雅地对外分享技术文章,又能作为私人的“第二大脑”,通过思维网格、卡片生成、知识仪表盘等方式,高效整理碎片化知识。 ### ✨ 核心价值与创新点 | 创新点 | 说明 | |--------------------|-------------------------------------------------| | 🧠 **思维网格** | 将知识组织为可拖拽、可染色的思维导图,支持文件夹、文章节点、文件节点,以视觉化方式构建知识体系 | | 🎨 **调色盘与卡片生成器** | 节点染色 + 文章一键生成精美分享卡片(html2canvas),多套配色可选,让知识可视化 | | 📊 **私人知识仪表盘** | ECharts图表展示:分类分布饼图、写作热力图、统计卡片,像看“学习年报” | | 💻 **代码片段仓** | 文章代码块一键收藏,按语言筛选、搜索,附带来源文章回溯 | | 🤖 **AI Ready 设计** | Markdown纯文本存储 + 标签多对多结构,天然适配RAG场景,未来低成本接入大模型 | ### 👥 适用人群 - **技术人**:写技术博客、管理代码片段、沉淀学习笔记 - **大学生**:整理课程笔记、分享学习心得、建立个人知识体系 - **知识工作者**:管理碎片化信息、追踪学习进度、建立个人品牌 --- ## 2. 更新日志 ### v1.3.0 (2026-06-06) 🎓 课程设计最终版 **重大更新** - 🧠 **思维网格自由拖拽布局与缩放**:支持节点自由拖拽、画布平移(Ctrl+滚轮缩放),自动居中和动态扩展画布 - 🎨 **调色盘染色功能**:右下角悬浮调色盘,支持预设颜色、自定义取色器、橡皮擦,节点可任意染色并持久化 - 📎 **文件上传与预览增强**:思维网格支持上传任意文件(≤200MB),在线预览图片、视频、音频、PDF、Word、Excel 等 - 📚 **根据文件自动生成思维网格**:上传教材 PDF/Word/Excel/TXT,自动提取章节结构生成知识树,支持章节/节/点/内容四级层级 - 🔗 **根据链接生成思维网格**:输入 B 站视频链接,自动抓取标题、简介、AI 字幕生成文字实录,支持视频嵌入播放 - ⌨️ **撤销/保存功能**:Ctrl+Z 撤销,Ctrl+S 保存更改,操作历史栈,支持添加、移动、重命名、删除等操作的撤销 - 📱 **移动端响应式适配**:全局增加响应式样式,优化窄屏布局 - 🌐 **校园网部署支持**:前后端分离部署方案,Express 代理服务器,支持局域网访问 - ❓ **帮助页面**:新增帮助页面,新用户首次访问弹出引导 **优化与修复** - 🐛 修复节点坐标持久化问题,自动布局逻辑优化 - 🐛 修复文件上传路径错误,改为绝对路径存储 - 🐛 修复代理服务器剥离 `/api` 前缀导致登录 500 错误 - 🐛 修复多根节点思维网格只显示部分节点的问题,创建虚拟根节点 - 🐛 修复私密文章在创作广场可见的权限问题 - 🐛 修复仪表盘空集合导致 SQL 语法错误 - 🐛 修复大量已知交互与性能问题 - 🎨 全局配色升级为深海蓝 × 柔奶白,增加背景几何花纹 - 🎨 登录注册页重构为左右分栏设计,增加记住我功能 - 🎨 代码块增加语言标签、复制和收藏按钮 - 🎨 文章编辑器改用 marked 左右分栏预览 **测试与文档** - ✅ 补充核心模块单元测试(Auth、Article、MindGrid、Dashboard、UrlContentExtractor 等) - ✅ 更新 README 至 v1.3.0,增加项目截图、架构图、API 文档、部署说明 ### v1.2.1 (2026-06-01) - 🌐 支持校园网访问:提供前后端分离部署方案,使用 Express 代理服务器转发 API 请求 - 🐛 修复代理服务器剥离 `/api` 前缀导致登录 500 错误的问题 - ⌨️ 登录/注册页增加 Enter 快捷键,切换表单时自动聚焦用户名输入框 - 📱 全局增加移动端响应式适配,优化窄屏布局 ### v1.2.0 (2026-05-31) **重大更新:思维网格与视觉升级** **新增功能** - 🧠 **思维网格**:支持创建、拖拽移动、折叠展开、节点染色、文件上传与预览、画布平移、撤销/保存 (Ctrl+Z / Ctrl+S)、图例框、调色盘自定义颜色等 - 📎 **文件上传与预览**:思维网格节点可上传任意文件(≤200MB),支持图片、视频、音频、PDF、Word、Excel、CSV 等格式在线预览,PPT 和老格式提示下载 - 🎨 **节点染色与调色盘**:右下角悬浮调色盘,支持预设颜色、自定义颜色、橡皮擦,单击染色、连续染色多个节点 - 🔗 **收藏中转站链接可点击**:点击链接弹出安全提示,确认后跳转外部链接 - 🔐 **登录注册页重构**:改为独立左右分栏页面,左侧展示核心功能卡片,右侧表单;增加“记住我”功能;修复图标显示问题 - ✏️ **文章编辑器优化**:使用 marked + 左右分栏预览,代码块自动添加语言标签和复制/收藏按钮,支持将代码片段收藏至代码色谱 **优化与修复** - 🎨 全站视觉升级:采用深海蓝 × 柔奶白配色,增加背景几何花纹;导航栏、主页、画布等全面适配新主题 - 🐛 思维网格返回按钮固定跳转“我的画布”,避免历史记录循环 - 🐛 文章编辑页保存后根据携带的 gridId 返回对应思维网格 - 🐛 修复 Hello World 节点缺失 article_id 导致无法打开的问题 - 🐛 修复管理员封禁自己时的错误提示 - 🐛 修复普通用户可见管理员导航链接的问题 - 🐛 修复节点拖拽后坐标不持久化的问题(任意节点坐标非零即跳过自动布局) - 🐛 修复文件上传路径错误(改为绝对路径)和预览代理配置 - 🐛 修复 v-md-editor 复制插件兼容性问题,改用自定义代码块增强 - 🔧 文件删除时同步删除物理文件,防止无用文件积累 - 🔧 增强批注功能:仅作者本人可见,支持选中原文右键添加 - 🔧 登录接口返回 userId,用于前端权限判断 ### v1.1.0 (2026-05-24) - 🎉 新增评论系统、批注功能、代码片段仓、收藏中转站、卡片生成器、知识仪表盘、管理员功能等 - 🎨 前端重构为产品化导航,认证页面改为弹窗形式 - 🐛 大量权限与交互修复 ### v1.0.1 (2026-05-17) - 🐛 修复登录状态、数据隔离等关键 Bug - 🔧 改造拦截器为“可选认证”模式 ### v1.0.0 (2026-05-16) - 🎉 首个完整版本发布,包含用户认证、文章管理、标签系统、全文搜索等核心功能 --- ## 3. 功能演示 #### 在线演示 校园网内可访问:`http://10.69.161.1:5173/` ### 📸 项目截图 | 页面 | 说明 | |--------------|---------------------------------------------| | 主页 | 深海蓝渐变背景,颜料滴落动画,引导创作或探索 | | 创作广场 | 公开文章列表 + 标签云,支持分页 | | 文章详情 | Markdown 渲染,代码高亮、语言标签、复制/收藏按钮,支持批注(私密文章)和评论 | | 我的画布 | 思维网格缩略图列表,点击进入思维导图 | | 思维网格详情 | 可拖拽节点、连线、画布平移、调色盘染色、右键菜单增删改、文件上传预览、撤销保存 | | 登录注册页 | 左右分栏设计,左侧功能卡片,右侧表单,支持“记住我” | | 知识仪表盘 | 统计卡片、分类饼图、写作热力图 | | 标签云 | 所有标签聚合展示 | | 代码色谱 | 收藏的代码片段,支持语言筛选和搜索 | | Swagger 接口文档 | 在线测试所有 API | #### 🖼️ 界面预览 **主页** ![主页](screenshots/主页.png) **创作广场** ![创作广场](screenshots/创作广场.png) **文章详情** ![文章详情](screenshots/文章详情.png) **我的画布** ![我的画布](screenshots/我的画布.png) **思维网格详情** ![思维网格详情](screenshots/思维网格详情.png) **登录注册页** ![登录注册页](screenshots/登录注册页.png) **知识仪表盘** ![知识仪表盘](screenshots/知识仪表盘.png) **标签云** ![标签云](screenshots/标签云.png) **代码色谱** ![代码色谱](screenshots/代码色谱.png) **Swagger 接口文档(长图,点击展开)**
📄 点击展开 Swagger 接口文档完整截图 ![Swagger 接口文档](screenshots/swagger-api.png)
### 🎯 功能特性 | 模块 | 功能描述 | 状态 | |--------------|-----------------------------------------|:--:| | 🔐 用户认证 | 注册、登录、JWT Token 签发与校验,记住我功能 | ✅ | | 📝 文章管理 | 创建、编辑、删除、列表、详情,支持公开/私密/草稿状态,marked 编辑器 | ✅ | | 🏷️ 标签系统 | 标签CRUD、文章-标签多对多关联、标签云展示 | ✅ | | 🔍 全文搜索 | 多字段模糊搜索(标题/摘要/正文)、按标签筛选 | ✅ | | 💬 评论系统 | 公开文章评论发表与展示,私密文章无评论区 | ✅ | | 📝 批注功能 | 私人文章作者选中原文右键添加批注,仅作者可见 | ✅ | | 🧠 思维网格 | 树形知识结构,可拖拽、折叠、染色、上传文件、画布平移、撤销保存 | ✅ | | 📎 文件上传与预览 | 支持多种格式上传至思维网格节点,在线预览图片/视频/PDF/Office 文档 | ✅ | | 🎨 调色盘与卡片生成器 | 节点染色 + 文章一键导出为精美 PNG 卡片(含标题、作者、日期) | ✅ | | 💻 代码片段仓 | 文章代码块一键收藏、按语言筛选、关键词搜索、来源回溯 | ✅ | | 📊 知识仪表盘 | 统计概览卡片、ECharts分类饼图、近30天写作热力图 | ✅ | | 🔖 收藏中转站 | 外部链接暂存、已写/待写状态标记,点击链接安全提示后跳转 | ✅ | | 👑 管理员功能 | 用户列表、封禁/解封、违规内容删除 | ✅ | | 🌙 深色模式 | 前台页面深色/浅色主题切换(基础支持) | 🚧 | | 🌍 多语言 | 中英文双语界面 | 🚧 | --- ## 4. 技术架构 ### 🏗️ 系统架构图 ```mermaid graph TB subgraph 前端层["前端 (Vue 3 + Vite + Element Plus)"] Landing["主页"] Square["探索色板"] MyWorks["我的画布 (思维网格)"] Detail["文章详情"] Login["登录注册页"] end subgraph 通信层["通信层"] API["RESTful API (Axios + JWT Token)"] end subgraph 后端层["后端 (Spring Boot 4.0.3 + Gradle)"] Controller["Controller 层 (RESTful + Swagger)"] Service["Service 层 (业务逻辑 + 测试)"] Mapper["Mapper 层 (MyBatis-Plus)"] end subgraph 数据层["数据层"] H2["H2 内存数据库 (开发/演示)"] MySQL["MySQL 8.0 (生产)"] end Landing --> API Square --> API MyWorks --> API Detail --> API API --> Controller Controller --> Service Service --> Mapper Mapper --> H2 Mapper --> MySQL ``` ### 🛠️ 技术栈 | 层级 | 技术 | 版本 | 说明 | |-----------------|-------------------|-----------|-----------------| | **后端框架** | Spring Boot | 4.0.3 | 核心框架 | | **ORM** | MyBatis-Plus | 3.5.16 | 简化CRUD操作 | | **数据库** | H2 / MySQL | 最新 / 8.0+ | 开发/生产双环境 | | **构建工具** | Gradle | 8.14+ | 项目构建 | | **接口文档** | springdoc-openapi | 2.8.4 | Swagger UI | | **认证** | JWT | 0.12.6 | 无状态认证 | | **加密** | BCrypt | — | 密码加密 | | **测试** | JUnit 5 + Mockito | — | 单元测试 | | **前端框架** | Vue 3 | 3.5.x | Composition API | | **构建工具** | Vite | 5.x+ | 前端构建 | | **UI组件库** | Element Plus | 2.13.x | 企业级组件 | | **Markdown 渲染** | marked | 最新 | 文章预览与编辑器 | | **图表** | ECharts 5 | 5.5.x | 仪表盘图表 | | **卡片导出** | html2canvas | 1.4.x | PNG导出 | | **HTTP客户端** | Axios | 1.7.x | 异步请求 | | **Office 文档预览** | mammoth.js, xlsx | 最新 | Word/Excel 预览 | ### 📁 目录结构 ``` MindPalette/ ├── README.md ├── LICENSE ├── reports/ ├── backend/ # 后端 (Spring Boot) │ ├── build.gradle │ ├── settings.gradle │ └── src/ │ ├── main/java/com/mindpalette/ │ │ ├── MindPaletteApplication.java │ │ ├── global/ # 全局配置、拦截器、工具 │ │ │ ├── config/ │ │ │ ├── interceptor/ │ │ │ ├── exception/ │ │ │ └── util/ │ │ └── module/ # 业务模块 │ │ ├── auth/ # 认证 │ │ ├── article/ # 文章 │ │ ├── tag/ # 标签 │ │ ├── search/ # 搜索 │ │ ├── comment/ # 评论 │ │ ├── annotation/ # 批注 │ │ ├── snippet/ # 代码片段 │ │ ├── bookmark/ # 收藏中转站 │ │ ├── dashboard/ # 仪表盘 │ │ ├── grid/ # 思维网格 │ │ └── user/ # 管理员 │ └── resources/ │ ├── application.yml │ ├── application-mysql.yml │ └── db/ │ ├── schema.sql │ └── data.sql ├── frontend/ # 前端 (Vue 3) │ ├── package.json │ ├── vite.config.js │ └── src/ │ ├── main.js │ ├── App.vue # 全局导航栏 │ ├── styles/variables.css # 全局主题变量 │ ├── router/index.js │ ├── api/ # API 封装 │ │ ├── auth.js │ │ ├── article.js │ │ ├── tag.js │ │ ├── search.js │ │ ├── comment.js │ │ ├── annotation.js │ │ ├── snippet.js │ │ ├── bookmark.js │ │ ├── dashboard.js │ │ ├── grid.js │ │ ├── file.js │ │ └── admin.js │ └── views/ │ ├── LandingPage.vue # 主页 │ ├── SquarePage.vue # 探索色板 │ ├── MyWorks.vue # 我的画布 (网格列表) │ ├── ArticleDetail.vue # 文章详情 │ ├── TagPage.vue │ ├── SearchPage.vue │ ├── SnippetPage.vue # 代码色谱 │ ├── BookmarkPage.vue # 收藏中转站 │ ├── auth/ │ │ ├── LoginPage.vue # 重定向到 AuthPage │ │ ├── RegisterPage.vue │ │ └── AuthPage.vue # 登录注册页面 │ ├── admin/ │ │ ├── AdminLayout.vue │ │ ├── DashboardPage.vue # 仪表盘 │ │ ├── ArticleManage.vue │ │ ├── CreateArticle.vue │ │ ├── UserManage.vue │ │ └── ContentManage.vue │ └── grid/ │ ├── GridDetail.vue # 思维网格详情 │ ├── MindMapNode.vue # 网格节点组件 │ └── TreeNode.vue # 递归树节点 (已废弃,保留备用) ``` #### 认证机制说明 系统采用 **可选认证(Optional Authentication)** 模式: - 公开接口无需登录即可访问 - 若请求携带有效的 JWT Token,后端自动解析并识别当前用户 - 识别用户后,数据访问将根据用户身份进行隔离 - 写操作接口(创建/更新/删除文章、标签等)位于 `/api/admin/**` 路径下,由业务逻辑强制校验登录状态 --- ## 5. 快速开始 ### 📋 环境要求 | 环境 | 版本要求 | 说明 | |---------|-------------------------|---------------| | JDK | 21+ | 推荐 OpenJDK 21 | | Node.js | 20 LTS+ | 前端运行时 | | Gradle | 8.14+ | 已内置 Wrapper | | IDE | IntelliJ IDEA / VS Code | 推荐使用 | > 💡 **无需安装数据库**:H2 内存数据库开箱即用,启动即自动建表并导入测试数据。 ### 🚀 项目克隆 ```bash git clone https://gitee.com/qjx010/mind-palette.git cd mind-palette ``` ### ⚙️ 后端配置与启动 #### 开发环境(H2 内存数据库,推荐) ```bash cd backend gradle bootRun ``` 启动成功后: - 应用端口:`http://localhost:8080` - Swagger 文档:`http://localhost:8080/swagger-ui.html` - H2 控制台:`http://localhost:8080/h2-console`(JDBC URL: `jdbc:h2:mem:mindpalette`,用户: `sa`,密码: 空) #### MySQL 环境(可选) 1. 创建数据库:`CREATE DATABASE mindpalette CHARACTER SET utf8mb4;` 2. 修改 `application-mysql.yml` 中的数据库连接信息 3. 启动时指定 MySQL Profile:`gradle bootRun --args='--spring.profiles.active=mysql'` ### 🎨 前端配置与启动 ```bash cd frontend npm install npm run dev ``` 启动成功后: - 前端地址:`http://localhost:5173` - 自动代理 `/api` 和 `/uploads` 请求到后端 `http://localhost:8080` ### 🔑 默认账号信息 #### 管理员账号 | 用户名 | 密码 | 角色 | |---------|------------|-----------------| | `admin` | `admin123` | 管理员(ROLE_ADMIN) | #### 普通用户账号 | 用户名 | 密码 | 角色 | |------------|----------|-----------------| | `zhangsan` | `123456` | 普通用户(ROLE_USER) | | `lisi` | `123456` | 普通用户(ROLE_USER) | | `wangwu` | `123456` | 普通用户(ROLE_USER) | | `testuser` | `123456` | 普通用户(ROLE_USER) | ### 📊 测试数据说明 系统启动后自动执行 `schema.sql` 和 `data.sql`,导入以下测试数据: | 数据类别 | 数量 | 说明 | |------|------|----------------------------------| | 管理员 | 1 个 | admin / admin123 | | 普通用户 | 4 个 | zhangsan, lisi, wangwu, testuser | | 文章 | 10 篇 | 含公开/私密/草稿混合 | | 标签 | 10 个 | 覆盖 Java、Vue 等常见技术领域 | | 代码片段 | 4 条 | Java、JavaScript、CSS 多语言 | | 收藏链接 | 4 条 | 外部技术链接 | | 评论 | 5 条 | 分布在多篇文章下 | | 思维网格 | 1 个 | Spring Boot 学习路径,含多个文件夹和文章节点 | > 💡 **所有测试数据均为模拟内容**,仅用于功能演示和测试。 --- ## 6. 开发指南 ### 🛠️ 本地开发环境搭建 #### 后端开发(IntelliJ IDEA) 1. 使用 IDEA 打开 `backend/` 目录 2. IDEA 会自动识别 Gradle 项目并下载依赖 3. 找到 `MindPaletteApplication.java`,右键 → Run 4. 启动后访问 `http://localhost:8080/swagger-ui.html` 查看接口文档 #### 前端开发(VS Code) 1. 使用 VS Code 打开 `frontend/` 目录 2. 终端执行 `npm install` 安装依赖 3. 执行 `npm run dev` 启动开发服务器 4. 访问 `http://localhost:5173` 查看页面 ### 📡 API 文档 **Swagger 地址**:`http://localhost:8080/swagger-ui.html` #### 核心接口列表 | 模块 | 方法 | 路径 | 说明 | 认证 | |------|--------|----------------------------------------|----------|:--:| | 认证 | POST | `/api/auth/register` | 用户注册 | ❌ | | 认证 | POST | `/api/auth/login` | 用户登录 | ❌ | | 文章 | GET | `/api/articles` | 文章列表(分页) | ❌ | | 文章 | GET | `/api/articles/{id}` | 文章详情 | ❌ | | 文章 | POST | `/api/admin/articles` | 创建文章 | ✅ | | 文章 | PUT | `/api/admin/articles/{id}` | 更新文章 | ✅ | | 文章 | DELETE | `/api/admin/articles/{id}` | 删除文章 | ✅ | | 标签 | GET | `/api/tags` | 标签云 | ❌ | | 标签 | POST | `/api/admin/tags` | 创建标签 | ✅ | | 搜索 | GET | `/api/search` | 搜索文章 | ❌ | | 评论 | POST | `/api/comments` | 发表评论 | ❌ | | 批注 | GET | `/api/admin/articles/{id}/annotations` | 获取批注 | ✅ | | 代码片段 | GET | `/api/admin/snippets` | 我的代码片段 | ✅ | | 收藏链接 | GET | `/api/admin/bookmarks` | 我的收藏链接 | ✅ | | 仪表盘 | GET | `/api/admin/dashboard/overview` | 概览数据 | ✅ | | 思维网格 | GET | `/api/admin/grids` | 我的网格列表 | ✅ | | 思维网格 | GET | `/api/admin/grids/{id}` | 网格详情 | ✅ | | 思维网格 | POST | `/api/admin/grids/nodes` | 添加节点 | ✅ | | 思维网格 | PUT | `/api/admin/grids/nodes/{id}/position` | 更新节点坐标 | ✅ | | 文件 | POST | `/api/files/upload` | 上传文件 | ✅ | #### Swagger 使用说明 1. 打开 `http://localhost:8080/swagger-ui.html` 2. 调用登录接口获取 Token 3. 点击右上角 **Authorize** 按钮 4. 输入 `Bearer `(注意 Bearer 后面有空格) 5. 之后所有需要认证的接口会自动携带 Token ### 🗄️ 数据库设计 #### ER 图 ```mermaid erDiagram USER ||--o{ ARTICLE : "作者" USER ||--o{ BOOKMARK : "拥有" USER ||--o{ MIND_GRID : "创建" MIND_GRID ||--o{ GRID_NODE : "包含" GRID_NODE ||--o{ GRID_NODE : "父子" ARTICLE ||--o{ COMMENT : "收到" ARTICLE ||--o{ CODE_SNIPPET : "包含" ARTICLE ||--o{ ANNOTATION : "被批注" ARTICLE }o--o{ TAG : "标签" USER { bigint id PK varchar username UK varchar password varchar role int status } ARTICLE { bigint id PK varchar title text content_md varchar visibility varchar status bigint author_id FK } GRID_NODE { bigint id PK bigint grid_id FK bigint parent_id FK varchar title varchar type "FOLDER/ARTICLE/FILE" bigint article_id FK int pos_x int pos_y varchar color varchar file_name varchar file_url } ``` ### 🧩 前端组件说明 | 组件 | 路径 | 说明 | |-----------------|-----------------------|------------------| | `LandingPage` | `/` | 主页,深海蓝渐变背景,引导入口 | | `SquarePage` | `/square` | 探索色板,公开文章列表 | | `MyWorks` | `/my-works` | 我的画布,思维网格缩略图列表 | | `GridDetail` | `/my-works/:id` | 思维网格详情,拖拽、染色、文件等 | | `ArticleDetail` | `/article/:id` | 文章详情,批注、评论、卡片生成 | | `AuthPage` | `/login`, `/register` | 登录注册页,左右分栏设计 | | `SnippetPage` | `/my-snippets` | 代码色谱 | | `BookmarkPage` | `/my-bookmarks` | 收藏中转站 | | `DashboardPage` | `/admin/dashboard` | 知识仪表盘 | ### 🧪 单元测试说明 #### 测试覆盖范围 | 测试类 | 覆盖内容 | |-----------------------|---------------------------| | `AuthServiceTest` | 注册成功/重复用户名、登录成功/密码错误/账号禁用 | | `ArticleServiceTest` | CRUD 操作、权限校验 | | `TagServiceTest` | 标签创建/重复、删除权限、标签列表 | | `SearchServiceTest` | 公开搜索、登录搜索、标签筛选 | | `MindGridServiceTest` | 网格创建、节点添加、级联删除、坐标更新 | #### 运行测试 ```bash cd backend gradle test ``` 测试报告路径:`backend/build/reports/tests/test/index.html` --- ## 7. 部署说明 ### 📦 生产环境配置 #### 后端打包 ```bash cd backend gradle bootJar ``` 生成的 JAR 包位于 `backend/build/libs/mindpalette-server-1.0.0-SNAPSHOT.jar` #### 运行 ```bash java -jar mindpalette-server-1.0.0-SNAPSHOT.jar --spring.profiles.active=mysql ``` ### 🌐 前端 Nginx 部署 1. 构建前端: ```bash cd frontend npm run build ``` 2. 将 `dist/` 目录下的文件上传到 Nginx 的静态文件目录 3. Nginx 配置示例: ```nginx server { listen 80; server_name example.com; root /var/www/mindpalette; index index.html; location / { try_files $uri $uri/ /index.html; } location /api { proxy_pass http://localhost:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } location /uploads { proxy_pass http://localhost:8080; } } ``` ### ⚠️ 注意事项 - 生产环境请务必修改 JWT 密钥(`mindpalette.jwt.secret`) - 建议使用 MySQL 作为生产数据库,并将 `sql.init.mode` 设为 `never` - 前端 `vite.config.js` 中的代理配置仅用于开发环境,生产环境由 Nginx 处理 - 文件上传目录 `uploads` 需确保有写入权限,或在 `application.yml` 中配置绝对路径 --- ## 8. 贡献指南 ### 🤝 如何参与贡献 1. Fork 本仓库 2. 创建特性分支:`git checkout -b feature/amazing-feature` 3. 提交代码:`git commit -m '[feat] 添加了xxx功能'` 4. 推送到远程分支:`git push origin feature/amazing-feature` 5. 提交 Pull Request ### 📝 代码规范 - **后端**:遵循阿里巴巴 Java 开发规范 - **前端**:使用 ESLint + Prettier - **提交信息**:遵循 `[类型] 简要描述` 格式 - `[feat]` - 新功能 - `[fix]` - Bug修复 - `[refactor]` - 重构 - `[test]` - 测试 - `[docs]` - 文档 ### 🔀 提交 PR 流程 1. 确保所有测试通过 2. 更新相关文档 3. 提交 PR 到 `master` 分支 4. 等待代码评审 --- ## 9. 许可证 本项目采用 **MIT License** 开源协议。详见 [LICENSE](LICENSE) 文件。 --- ## 10. 联系方式 ### 👤 作者信息 - **作者**:与世无争 - **Gitee**:[https://gitee.com/qjx010/mind-palette](https://gitee.com/qjx010/mind-palette) ### 📮 问题反馈 如有问题或建议,请通过以下方式联系: - 在 Gitee 仓库提交 Issue - 发送邮件至项目维护者邮箱 --- ## 📊 项目状态 | 模块 | 状态 | 进度 | |-----------|:-----:|:----:| | 后端 P0 模块 | ✅ 已完成 | 100% | | 前端 P0 页面 | ✅ 已完成 | 100% | | 后端 P1 模块 | ✅ 已完成 | 100% | | 前端 P1 页面 | ✅ 已完成 | 100% | | 思维网格与可视化 | ✅ 已完成 | 100% | | 管理员功能 | ✅ 已完成 | 100% | | README 文档 | ✅ 已完成 | 100% | ---

MindPalette —— 把碎片知识变成精美卡片
Made with ❤️ by 与世无争