You've already forked SmartisanNote.Remake
模型上下文更新
This commit is contained in:
279
IFLOW.md
279
IFLOW.md
@@ -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 管理页面导航。
|
||||
Reference in New Issue
Block a user