Files
SmartisanNote.Remake/IFLOW.md
2025-10-10 18:35:03 +08:00

7.2 KiB
Raw Blame History

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, NoteDetail, 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)。
  • 在 Android 设备上运行: npm run android
    • 需要预先配置好 Android 开发环境。

核心功能

便签管理

  • 增删改查: 支持创建、查看、编辑和删除便签
  • 星标标记: 可以将重要便签标记为星标便签
  • 置顶功能: 支持将便签置顶显示在列表顶部
  • 图片标记: 可以标记便签中是否包含图片
  • 滑动删除: 支持右滑显示删除按钮,带有阻尼效果的交互体验

文件夹管理

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

搜索功能

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

设置功能

  • 云同步: 支持云同步设置(待实现)
  • 深色模式: 支持深色模式切换(待完善)

代码规范与开发约定

  • 状态管理: 使用 Pinia 进行全局状态管理,通过 useAppStore composable 函数访问状态。
  • 数据持久化: 所有数据(便签、文件夹、设置)均通过 src/utils/storage.jslocalStorage 进行交互。
  • 路由: 使用 vue-routercreateWebHashHistory 进行前端路由管理。
  • 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
  • 全局变量都集中放置于代码顶部。
  • 变量名使用小驼峰命名法。
  • 常量名使用全大写。
  • 状态类变量命名参考 isLoginisOpen
  • 事件类方法命名参考 onClickonSelect
  • 变量都应该写有注释说明、类型说明。
  • Promise 方法使用 async await 写法,并进行容错处理。
  • 字符串拼接使用ES6的模板语法。
  • JavaScript规范应遵循项目中已有的风格。

组件

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

NoteItem 组件

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

页面

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

NoteListPage

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

状态管理 (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 数据
  • 丰富内容: 包含多种类型的便签、文件夹和设置示例

增强的便签功能

  • 置顶支持: 便签可以置顶显示在列表顶部
  • 图片标记: 可以标记便签是否包含图片
  • 排序优化: 置顶便签优先显示,按更新时间排序