模型上下文更新

This commit is contained in:
yuantao
2025-10-17 09:19:33 +08:00
parent f2f3756cc0
commit 52852332f7
4 changed files with 92 additions and 370 deletions

279
IFLOW.md
View File

@@ -1,216 +1,121 @@
# SmartisanNote.vue 项目概览
# SmartisanNote.Remake - IFLOW 上下文
## 项目简介
这是一个基于 Vue 3 和 Vite 构建的单页 Web 应用SPA旨在模仿锤子科技Smartisan的便签应用。该项目使用 localStorage 进行本地数据持久化,支持便签的增删改查、文件夹管理、便签置顶、星标标记、基础设置(如云同步、深色模式)以及丰富的交互功能。
这是一个基于 Vue 3 (Composition API) 和 Ionic Vue 的移动端便签应用,仿照锤子便签的设计风格。该应用支持富文本编辑、图片插入、便签管理(加星、置顶、删除至回收站)、文件夹分类以及 PWA 离线功能。
## 技术栈
## 核心技术栈
* **核心框架**: Vue 3 (Composition API)
* **构建工具**: Vite
* **路由管理**: vue-router
* **状态管理**: Pinia (Vue 3 状态管理库)
* **UI 库**: 原生 CSS使用了锤子便签的经典配色方案定义在 `index.html` 的 CSS 变量中)
* **移动端支持**: Capacitor (用于构建 Android/iOS 应用)
* **样式预处理器**: Less
* **代码语言**: JavaScript (ES6+)
* **UI 组件库**: Ionic Framework
* **日期处理**: moment.js
- **Vue 3**: 使用 Composition API 构建用户界面。
- **Vue Router**: 实现页面路由管理,采用 Hash 模式以支持静态部署。
- **Pinia**: 用于全局状态管理(便签、文件夹、设置)。
- **Vite**: 作为构建工具,提供快速的开发和构建体验。
- **Vite Plugin PWA**: 支持将应用打包为 PWA实现离线使用。
- **Ionic Vue**: 提供移动端 UI 组件。
- **localStorage**: 用于本地数据存储。
## 项目结构
```
.
├── 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/ # 工具函数
│ │ ├── dateUtils.js # 日期处理工具,基于 moment.js
│ │ └── storage.js # localStorage 封装,负责数据的读写
SmartisanNote.Remake/
├── android/ # Android 原生项目 (Capacitor)
├── public/ # 静态资源
│ ├── assets/ # 应用图标、图片等资源
│ └── icons/ # PWA 图标
├── src/ # 源代码目录
│ ├── App.vue # 根组件
── main.js # 应用入口初始化路由、Pinia 和挂载
├── index.html # HTML 模板,包含 CSS 变量定义
├── package.json # 项目元数据和脚本命令
├── vite.config.js # Vite 构建配置
── main.js # 应用入口文件
│ ├── common/ # 公共样式
│ ├── components/ # 可复用的 UI 组件
│ ├── pages/ # 页面组件
│ ├── stores/ # Pinia 状态管理
│ └── utils/ # 工具函数 (日期处理、本地存储)
├── index.html # 主页面模板
├── 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`)
* **构建所有版本**: `npm run build:all`
* 构建标准版本和 PWA 版本
* **部署PWA版本**: `npm run deploy:pwa`
* 构建并部署PWA版本到FTP服务器
* **在 Android 设备上运行**: `npm run android`
* 需要预先配置好 Android 开发环境。
1. **便签列表页 (`NoteListPage.vue`)**:
* 展示所有便签,支持按全部、加星、回收站分类查看。
* 支持搜索便签标题和内容。
* 支持对便签进行加星、置顶、删除操作
* 点击便签可进入编辑页面。
* 点击创建按钮可进入新建便签页面
2. **便签编辑页 (`NoteEditorPage.vue`)**:
* 使用自定义富文本编辑器 (`RichTextEditor.vue`) 进行内容编辑。
* 支持加粗、居中、待办事项、列表、标题、引用等格式。
* 支持插入和拖拽排序图片。
* 支持删除图片。
3. **富文本编辑器 (`RichTextEditor.vue`)**:
* 核心功能组件,提供富文本编辑能力。
* 工具栏包含加粗、居中、待办事项、列表、标题、引用等按钮。
* 支持插入图片并调整尺寸。
* 支持长按拖拽图片进行排序。
* 支持点击图片右上角按钮删除图片。
* 支持待办事项的添加、完成/未完成状态切换。
4. **文件夹管理页 (`FolderPage.vue`)**:
* 管理自定义文件夹。
* 可创建、重命名、删除文件夹。
5. **设置页 (`SettingsPage.vue`)**:
* 应用设置,如云同步开关(目前仅是 UI未实现逻辑、深色模式开关目前仅是 UI未实现逻辑
6. **状态管理 (`stores/useAppStore.js`)**:
* 使用 Pinia 管理应用所有状态(便签数据、文件夹数据、设置)。
* 提供操作便签、文件夹和设置的 actions。
* 负责与 `localStorage` 进行数据交互。
7. **工具函数 (`utils/`)**:
* `dateUtils.js`: 处理日期格式化。
* `storage.js`: 封装 `localStorage` 操作。
## 核心功能
## 开发与构建
### 便签管理
* **增删改查**: 支持创建、查看、编辑和删除便签
* **星标标记**: 可以将重要便签标记为星标便签
* **置顶功能**: 支持将便签置顶显示在列表顶部
* **图片标记**: 可以标记便签中是否包含图片
* **滑动删除**: 支持右滑显示删除按钮,带有阻尼效果的交互体验
* **富文本编辑**: 支持加粗、居中、待办事项、列表、标题、引用等格式
### 前置条件
### 文件夹管理
* **分类组织**: 支持创建文件夹对便签进行分类管理
* **默认文件夹**: 提供"全部便签"、"加星便签"、"回收站"等默认文件夹
- Node.js (推荐 LTS 版本)
- npm 或 yarn
### 搜索功能
* **全文搜索**: 支持按标题和内容搜索便签
* **实时过滤**: 搜索结果实时更新
### 安装依赖
### 设置功能
* **云同步**: 支持云同步设置(待实现)
* **深色模式**: 支持深色模式切换(待完善)
```bash
npm install
```
### 日期时间处理
* **智能格式化**: 根据时间范围自动格式化日期显示
* **多场景适配**: 不同页面使用不同的日期格式化规则
* **本地化支持**: 支持中文日期格式显示
### 启动开发服务器
## 代码规范与开发约定
```bash
npm run dev
```
这将在 `http://localhost:3000` 启动开发服务器。
* **状态管理**: 使用 Pinia 进行全局状态管理,通过 `useAppStore` composable 函数访问状态。
* **数据持久化**: 所有数据(便签、文件夹、设置)均通过 `src/utils/storage.js``localStorage` 进行交互。
* **路由**: 使用 `vue-router``createWebHashHistory` 进行前端路由管理。
* **UI 风格**: 颜色方案严格遵循 `index.html` 中定义的 CSS 变量,以保持锤子便签的视觉风格。
* **组件组织**: 页面组件 (`pages/`) 和可复用组件 (`components/`) 分离,结构清晰。
* **代码风格**: 采用标准的 Vue 3 Composition API 写法,使用 ES6 模块系统 (`import`/`export`)。
* **日期处理**: 使用 moment.js 进行日期处理,通过 `src/utils/dateUtils.js` 统一管理日期格式化逻辑。
### 构建标准版本
## 样式
```bash
npm run build
```
构建产物位于 `dist/standard` 目录。
* 全局样式文件是位于 `common/` 目录下的 `base.css`
* 使用 Codefun 原子类样式,用于快速布局。
* 样式规范应遵循项目中已有的风格。
* 使用 Less 作为 CSS 预处理器。
### 构建 PWA 离线版本
## JavaScript
```bash
npm run build:all
# 或者只构建 PWA
npm run deploy:pwa
```
PWA 构建产物位于 `dist/offline` 目录。
* 严格遵循ES6规范。
* 遵循JavaScript函数式编程范式。
* 方法类函数应该使用 `function` 进行定义。
* 避免出现超过4个以上的 `ref`超过4个则使用 `reactive`
* 全局变量都集中放置于代码顶部。
* 变量名使用小驼峰命名法。
* 常量名使用全大写。
* 状态类变量命名参考 `isLogin``isOpen`
* 事件类方法命名参考 `onClick``onSelect`
* 变量都应该写有注释说明、类型说明。
* `Promise` 方法使用 `async` `await` 写法,并进行容错处理。
* 字符串拼接使用ES6的模板语法。
* JavaScript规范应遵循项目中已有的风格。
### 在 Android 设备上运行
## 组件
```bash
npm run android
```
这需要配置好 Android 开发环境 (Android Studio, SDK 等)。
* 全局组件放在 `components/` 目录下。
* 页面独立组件放在页面根目录下的 `components/`
* 每个组件应该附带 `README.MD` 文档。
* 组件编写应遵循项目中已有的风格。
## 代码规范与约定
### Header 组件
* **动态按钮**: 根据页面状态显示不同的操作按钮(新建、保存、插入图片)
* **文件夹管理**: 支持文件夹展开/收起功能
### NoteItem 组件
* **滑动交互**: 支持右滑显示删除按钮,带有阻尼效果
* **状态切换**: 支持星标和置顶状态的切换
* **视觉反馈**: 滑动时便签夹会切换状态,提供直观的交互反馈
* **日期显示**: 显示格式化后的便签更新时间
### RichTextEditor 组件
* **富文本编辑**: 支持多种文本格式(加粗、居中、待办事项、列表、标题、引用)
* **图片插入**: 支持插入图片功能
* **图片删除**: 支持通过短按图片显示删除按钮,二次点击删除按钮执行删除操作
* **图片拖拽排序**: 支持长按图片进行拖拽排序
* **工具栏**: 提供浮动工具栏,支持格式化操作
## 页面
* 页面使用 Composition API (setup语法糖) 编写。
* 注释、结构规范应遵循项目中已有的风格。
### NoteListPage
* **便签列表**: 显示所有便签,支持置顶便签优先显示
* **文件夹管理**: 支持文件夹的展开和切换
* **搜索功能**: 提供便签搜索功能
* **交互反馈**: 显示便签总数和置顶便签数量
* **智能日期显示**: 根据时间范围显示不同的日期格式
* 今天:显示为 "今天 下午 4:00"
* 昨天:显示为 "昨天 下午 4:00"
* 超过两天但小于一周:显示为 "星期一 10/8 上午 3:00"
* 超过一周但小于一年:显示为 "10天前 9/20 下午 2:00"
* 超过一年:显示为 "635天前 2024/8/10 上午 9:00"
### NoteEditorPage
* **编辑模式**: 支持新建和编辑便签
* **富文本编辑**: 集成RichTextEditor组件支持丰富的文本格式
* **图片插入**: 支持通过工具栏插入图片
* **图片删除**: 支持通过短按图片显示删除按钮,二次点击删除按钮执行删除操作
* **状态管理**: 根据路由参数判断是新建还是编辑模式
* **智能日期显示**: 根据时间范围显示不同的日期格式
* 今天:显示为 "今天 下午 4:00"
* 昨天:显示为 "昨天 下午 4:00"
* 超过两天但小于一个月:显示为 "10/8 上午 3:00"
* 超过一个月:显示为 "2024/8/10 上午 9:00"
## 状态管理 (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服务器
### 智能日期处理
* **统一管理**: 通过 `dateUtils.js` 统一管理所有日期处理逻辑
* **多格式支持**: 支持多种日期格式化方式以适应不同场景
* **本地化显示**: 支持中文友好的日期时间显示
* **场景适配**: 不同页面使用最适合的日期格式化规则
### 图片处理增强
* **图片删除优化**: 通过二次点击机制避免误删,提升用户体验
* **图片拖拽排序**: 支持长按图片进行拖拽排序,操作更直观
* **事件冲突解决**: 优化了图片删除按钮与容器短按事件的冲突问题
- **组件化**: 应用遵循组件化开发模式,将 UI 拆分为可复用的组件。
- **状态管理**: 使用 Pinia 进行全局状态管理,确保数据流清晰。
- **本地存储**: 便签、文件夹和设置数据存储在浏览器的 `localStorage` 中。
- **样式**: 使用 CSS 变量定义主题色和尺寸,便于维护和主题切换。
- **路由**: 使用 Vue Router 管理页面导航。