# 笔记应用 (Biji App)

![License](https://img.shields.io/badge/license-MIT-blue.svg)
![Java](https://img.shields.io/badge/Java-17-orange.svg)
![Vue](https://img.shields.io/badge/Vue-3-green.svg)
![Spring Boot](https://img.shields.io/badge/Spring%20Boot-3.5.0-brightgreen.svg)

一个功能完善的全栈笔记应用程序，采用前后端分离架构设计。前端使用 Vue 3 构建，后端基于 Spring Boot 3 实现，为用户提供简洁高效的笔记管理体验。

## 📋 目录

- [✨ 功能特性](#-功能特性)
- [🛠️ 技术栈](#️-技术栈)
- [📂 项目结构](#-项目结构)
- [🚀 快速开始](#-快速开始)
- [📖 使用指南](#-使用指南)
- [🔧 开发指南](#-开发指南)
- [🤝 贡献指南](#-贡献指南)
- [📄 许可证](#-许可证)

## ✨ 功能特性 (Features)

*   **用户认证**: 支持用户注册、登录和 JWT (JSON Web Token) 认证，保障账户安全。
*   **Markdown 笔记**: 提供功能强大的 Markdown 编辑器，支持实时预览、代码高亮、数学公式和丰富的格式化选项。
*   **图片管理**: 支持在笔记中上传、插入和管理图片，提供图片预览和删除功能。
*   **笔记组织**: 用户可以创建分组 (Categories/Groups) 来管理和组织笔记，支持多层级分类。
*   **回收站**: 提供回收站功能，可以恢复被误删除的笔记或分组，避免数据丢失。
*   **系统设置**: 提供基本的系统配置功能，包括主题切换、语言选择等个性化设置。
*   **响应式设计**: 适配桌面和移动设备，提供一致的用户体验。
*   **数据持久化**: 使用 SQLite 数据库存储用户数据，无需额外配置数据库服务。

## 🛠️ 技术栈 (Tech Stack)

### 后端 (Backend - `biji-houdaun`)

*   **框架 (Framework)**: Spring Boot 3.5.0
*   **语言 (Language)**: Java 17
*   **数据访问 (Data Access)**: MyBatis-Plus 3.5.7
*   **数据库 (Database)**: SQLite
*   **API 文档 (API Docs)**: Knife4j / SpringDoc
*   **安全 (Security)**: Spring Security, JJWT
*   **工具库 (Utilities)**: Lombok, Hutool, Commons Codec

### 前端 (Frontend - `biji-qianduan`)

*   **框架 (Framework)**: Vue 3 (Composition API)
*   **构建工具 (Build Tool)**: Vite
*   **UI 库 (UI Library)**: Element Plus
*   **状态管理 (State Management)**: Pinia
*   **路由 (Routing)**: Vue Router 4
*   **Markdown 编辑器**: Vditor / @kangc/v-md-editor
*   **HTTP 客户端 (HTTP Client)**: Axios (封装在 `src/utils/axios.js` 中)
*   **样式处理**: SCSS

## 📂 项目结构 (Project Structure)

```
.
├── biji-houdaun/         # 后端 Spring Boot 项目
│   ├── src/main/java/    # Java 源码
│   │   └── com/test/bijihoudaun/
│   │       ├── controller/ # API 控制器
│   │       ├── service/    # 业务逻辑服务
│   │       ├── mapper/     # MyBatis 数据映射
│   │       ├── entity/     # 数据库实体
│   │       ├── config/     # 应用配置
│   │       └── common/     # 通用工具 (异常处理、响应)
│   └── pom.xml           # Maven 依赖配置
│
├── biji-qianduan/        # 前端 Vue 项目
│   ├── src/              # 前端源码
│   │   ├── api/          # API 请求模块
│   │   ├── assets/       # 静态资源 (CSS, images)
│   │   ├── components/   # Vue 组件
│   │   ├── router/       # 路由配置
│   │   ├── stores/       # Pinia 状态管理
│   │   ├── views/        # 页面视图
│   │   └── utils/        # 工具函数
│   └── package.json      # NPM 依赖配置
│
├── sql/                  # 数据库初始化脚本
├── uploads/              # 用户上传文件目录
├── doc/                  # 项目相关文档
└── README.md             # 本文档
```

## 🚀 快速开始 (Getting Started)

### 环境要求

*   **Java**: JDK 17 或更高版本
*   **构建工具**: Maven 3.6+ 或 Gradle 7.0+
*   **Node.js**: 18.0 或更高版本
*   **包管理器**: pnpm 8.0+ (推荐) 或 npm/yarn

### 后端启动

1.  **克隆项目**: `git clone <repository-url>`
2.  **数据库初始化**: 使用 `sql/` 目录下的脚本初始化 SQLite 数据库 (`mydatabase.db`)。
3.  **配置**: 检查 `biji-houdaun/src/main/resources/application-dev.yml` 中的配置是否正确。
4.  **运行**: 在 `biji-houdaun` 目录下，通过 IDE 直接运行 `BijiHoudaunApplication.java` 或使用 Maven:
    ```bash
    mvn spring-boot:run
    ```
5.  **验证**: 访问 `http://localhost:8080/doc.html` 查看 API 文档。

### 前端启动

1.  **进入目录**: `cd biji-qianduan`
2.  **安装依赖**:
    ```bash
    pnpm install
    # 或者使用 npm / yarn
    # npm install
    # yarn install
    ```
3.  **运行开发服务器**:
    ```bash
    pnpm dev
    ```
4.  **访问应用**: 在浏览器中打开 `http://localhost:5173` (或其他 Vite 指定的端口)。

### 生产环境部署

> 我使用的部署方式：
> 1、后端部署，使用docker部署后端，并且使用caddy作为反向代理，返代后端
> 2、在前端，cd biji-qianduan，在.env.production文件添加返代后端的接口地址，之后打包
> 3、在caddy部署前端打包好的前端文件

1.  **构建前端**:
    在.env.production文件添加自己后端的接口地址
    ```bash
    cd biji-qianduan
    pnpm run build:frontend
    ```
2.  **构建后端**:
    ```bash
    cd biji-houdaun
    mvn clean package -P prod -D maven.test.skip=true -am docker:build
    ```
3.  **运行**: 使用生成的 JAR 文件运行应用:
    ```bash
    java -jar target/biji-houdaun-0.0.1-SNAPSHOT.jar
    ```

## 📖 使用指南

### 基本功能

1.  **注册/登录**: 访问应用首页，点击"注册"创建新账户，或使用已有账户登录。
2.  **创建笔记**: 登录后，点击"新建笔记"按钮，输入标题和内容。
3.  **编辑笔记**: 使用 Markdown 语法编辑笔记，支持实时预览。
4.  **管理分组**: 创建、编辑和删除笔记分组，方便组织笔记。
5.  **上传图片**: 在笔记编辑器中点击图片按钮，上传并插入图片。
6.  **回收站**: 删除的笔记和分组会进入回收站，可在30天内恢复。

### 高级功能

1.  **Markdown 语法**:
    - 标题: `# 一级标题`, `## 二级标题`
    - 列表: `- 无序列表`, `1. 有序列表`
    - 代码: `代码` 或 ```代码块```
    - 链接: `[文本](URL)`
    - 图片: `![描述](图片URL)`

2.  **快捷键**:
    - 保存笔记: `Ctrl + S`
    - 加粗: `Ctrl + B`
    - 斜体: `Ctrl + I`
    - 撤销: `Ctrl + Z`
    - 重做: `Ctrl + Y`

## 🔧 开发指南

### 后端开发

1.  **添加新 API**:
    - 在 `controller` 包中创建新的控制器类
    - 在 `service` 包中实现业务逻辑
    - 在 `mapper` 包中定义数据访问接口
    - 在 `entity` 包中创建数据实体类

2.  **数据库变更**:
    - 修改 `sql` 目录下的数据库脚本
    - 更新对应的实体类和映射文件

### 前端开发

1.  **添加新页面**:
    - 在 `src/views` 目录下创建新组件
    - 在 `src/router` 中添加路由配置
    - 在 `src/api` 中添加相关的 API 请求方法

2.  **添加新组件**:
    - 在 `src/components` 目录下创建新组件
    - 在需要的地方导入并使用组件

3.  **状态管理**:
    - 在 `src/stores` 目录下创建新的 store
    - 在组件中使用 `useStore` 访问状态

## 🤝 贡献指南

我们欢迎所有形式的贡献！如果您想为 Biji App 做出贡献，请遵循以下步骤：

1.  **Fork 项目**: 点击页面右上角的 Fork 按钮。
2.  **克隆仓库**: `git clone https://github.com/yourusername/biji-app.git`
3.  **创建分支**: `git checkout -b feature/your-feature-name`
4.  **提交更改**: 
    ```bash
    git add .
    git commit -m "Add your feature"
    ```
5.  **推送分支**: `git push origin feature/your-feature-name`
6.  **提交 Pull Request**: 在 GitHub 上创建 Pull Request。

### 开发规范

- 遵循项目中现有的代码风格
- 提交信息应清晰明了，使用英文
- 每个功能或修复应提交单独的 Pull Request
- 确保所有测试通过后再提交

## 📄 许可证

本项目采用 MIT 许可证。详情请参阅 [LICENSE](LICENSE) 文件。
