# SmartisanNote.vue 项目概览

## 项目简介

这是一个基于 Vue 3 和 Vite 构建的单页 Web 应用（SPA），旨在模仿锤子科技（Smartisan）的便签应用。该项目使用 localStorage 进行本地数据持久化，支持便签的增删改查、文件夹管理、便签置顶、星标标记、基础设置（如云同步、深色模式）以及丰富的交互功能。

## 技术栈

*   **核心框架**: Vue 3 (Composition API)
*   **构建工具**: Vite
*   **路由管理**: vue-router
*   **状态管理**: Pinia (Vue 3 状态管理库)
*   **UI 库**: 原生 CSS，使用了锤子便签的经典配色方案（定义在 `index.html` 的 CSS 变量中）
*   **移动端支持**: Capacitor (用于构建 Android/iOS 应用)
*   **样式预处理器**: Less
*   **代码语言**: JavaScript (ES6+)
*   **UI 组件库**: Ionic Framework

## 项目结构

```
.
├── android/                 # Capacitor Android 项目文件
├── dist/                    # 构建后的生产文件
├── node_modules/            # 项目依赖
├── public/                  # 静态资源目录
├── src/
│   ├── common/              # 全局样式和通用工具
│   ├── components/          # 可复用的 Vue 组件 (Header, NoteItem, FolderItem)
│   ├── pages/               # 页面级别的 Vue 组件 (NoteList, NoteEditor, Folder, Settings)
│   ├── stores/              # Pinia 状态管理 stores
│   │   └── useAppStore.js   # 全局状态管理 store
│   ├── utils/               # 工具函数
│   │   └── storage.js       # localStorage 封装，负责数据的读写
│   ├── App.vue              # 根组件
│   └── main.js              # 应用入口，初始化路由、Pinia 和挂载
├── index.html               # HTML 模板，包含 CSS 变量定义
├── package.json             # 项目元数据和脚本命令
├── vite.config.js           # Vite 构建配置
└── capacitor.config.json    # Capacitor 配置文件
```

## 开发与构建命令

*   **安装依赖**: `npm install`
*   **启动开发服务器**: `npm run dev`
    *   默认端口: 3000
    *   基于 Vite，支持热更新。
*   **构建生产版本**: `npm run build`
    *   使用 Vite 构建，并同步到 Capacitor 项目 (`npx cap sync`)。
*   **构建PWA版本**: `npm run build:pwa`
    *   构建PWA版本的应用
*   **部署PWA版本**: `npm run deploy:pwa`
    *   构建并部署PWA版本到FTP服务器
*   **在 Android 设备上运行**: `npm run android`
    *   需要预先配置好 Android 开发环境。

## 核心功能

### 便签管理
*   **增删改查**: 支持创建、查看、编辑和删除便签
*   **星标标记**: 可以将重要便签标记为星标便签
*   **置顶功能**: 支持将便签置顶显示在列表顶部
*   **图片标记**: 可以标记便签中是否包含图片
*   **滑动删除**: 支持右滑显示删除按钮，带有阻尼效果的交互体验
*   **富文本编辑**: 支持加粗、居中、待办事项、列表、标题、引用等格式

### 文件夹管理
*   **分类组织**: 支持创建文件夹对便签进行分类管理
*   **默认文件夹**: 提供"全部便签"、"加星便签"、"回收站"等默认文件夹

### 搜索功能
*   **全文搜索**: 支持按标题和内容搜索便签
*   **实时过滤**: 搜索结果实时更新

### 设置功能
*   **云同步**: 支持云同步设置（待实现）
*   **深色模式**: 支持深色模式切换（待完善）

## 代码规范与开发约定

*   **状态管理**: 使用 Pinia 进行全局状态管理，通过 `useAppStore` composable 函数访问状态。
*   **数据持久化**: 所有数据（便签、文件夹、设置）均通过 `src/utils/storage.js` 与 `localStorage` 进行交互。
*   **路由**: 使用 `vue-router` 和 `createWebHashHistory` 进行前端路由管理。
*   **UI 风格**: 颜色方案严格遵循 `index.html` 中定义的 CSS 变量，以保持锤子便签的视觉风格。
*   **组件组织**: 页面组件 (`pages/`) 和可复用组件 (`components/`) 分离，结构清晰。
*   **代码风格**: 采用标准的 Vue 3 Composition API 写法，使用 ES6 模块系统 (`import`/`export`)。

## 样式

*   全局样式文件是位于 `common/` 目录下的 `base.css`。
*   使用 Codefun 原子类样式，用于快速布局。
*   样式规范应遵循项目中已有的风格。
*   使用 Less 作为 CSS 预处理器。

## JavaScript

*   严格遵循ES6规范。
*   遵循JavaScript函数式编程范式。
*   方法类函数应该使用 `function` 进行定义。
*   避免出现超过4个以上的 `ref`，超过4个则使用 `reactive`。
*   全局变量都集中放置于代码顶部。
*   变量名使用小驼峰命名法。
*   常量名使用全大写。
*   状态类变量命名参考 `isLogin`、`isOpen`。
*   事件类方法命名参考 `onClick`、`onSelect`。
*   变量都应该写有注释说明、类型说明。
*   `Promise` 方法使用 `async` `await` 写法，并进行容错处理。
*   字符串拼接使用ES6的模板语法。
*   JavaScript规范应遵循项目中已有的风格。

## 组件

*   全局组件放在 `components/` 目录下。
*   页面独立组件放在页面根目录下的 `components/`。
*   每个组件应该附带 `README.MD` 文档。
*   组件编写应遵循项目中已有的风格。

### Header 组件
*   **动态按钮**: 根据页面状态显示不同的操作按钮（新建、保存、插入图片）
*   **文件夹管理**: 支持文件夹展开/收起功能

### NoteItem 组件
*   **滑动交互**: 支持右滑显示删除按钮，带有阻尼效果
*   **状态切换**: 支持星标和置顶状态的切换
*   **视觉反馈**: 滑动时便签夹会切换状态，提供直观的交互反馈

### RichTextEditor 组件
*   **富文本编辑**: 支持多种文本格式（加粗、居中、待办事项、列表、标题、引用）
*   **图片插入**: 支持插入图片功能
*   **工具栏**: 提供浮动工具栏，支持格式化操作

## 页面

*   页面使用 Composition API (setup语法糖) 编写。
*   注释、结构规范应遵循项目中已有的风格。

### NoteListPage
*   **便签列表**: 显示所有便签，支持置顶便签优先显示
*   **文件夹管理**: 支持文件夹的展开和切换
*   **搜索功能**: 提供便签搜索功能
*   **交互反馈**: 显示便签总数和置顶便签数量

### NoteEditorPage
*   **编辑模式**: 支持新建和编辑便签
*   **富文本编辑**: 集成RichTextEditor组件，支持丰富的文本格式
*   **图片插入**: 支持通过工具栏插入图片
*   **状态管理**: 根据路由参数判断是新建还是编辑模式

## 状态管理 (Pinia)

项目现在使用 Pinia 作为状态管理解决方案，主要特点包括：

*   **Store 定义**: 在 `src/stores/useAppStore.js` 中定义了全局状态 store
*   **状态结构**: 包含 notes、folders 和 settings 三个主要状态
*   **Getters**: 提供了计算属性如 starredNotesCount 和 allNotesCount
*   **Actions**: 包含所有状态变更操作，如 addNote、updateNote、deleteNote 等
*   **数据持久化**: 通过 storage.js 工具函数与 localStorage 进行数据交互
*   **Mock 数据**: 支持加载预设的 mock 数据用于开发和演示
*   **使用方式**: 在组件中通过 `const store = useAppStore()` 来访问状态和方法

## 新增功能特性

### 滑动交互
*   **阻尼效果**: 右滑超过阈值后提供阻尼效果，增强交互体验
*   **状态切换**: 滑动时便签夹会切换到展开状态，松开后根据位置决定是否保持展开
*   **视觉反馈**: 滑动过程中提供实时视觉反馈

### Mock 数据
*   **自动加载**: 当检测到无数据时自动加载预设的 mock 数据
*   **手动加载**: 可通过 URL 参数 `?mock=true` 强制加载 mock 数据
*   **丰富内容**: 包含多种类型的便签、文件夹和设置示例

### 增强的便签功能
*   **置顶支持**: 便签可以置顶显示在列表顶部
*   **图片标记**: 可以标记便签是否包含图片
*   **排序优化**: 置顶便签优先显示，按更新时间排序

### PWA 支持
*   **离线使用**: 支持构建PWA版本，可离线使用
*   **自动部署**: 支持一键构建并部署到FTP服务器