优化 头部便签管理点击区域;

补充注释;
This commit is contained in:
User
2025-10-13 10:48:18 +08:00
parent 27133aa107
commit 2e933ece94
13 changed files with 523 additions and 175 deletions

View File

@@ -2,27 +2,59 @@ import { defineStore } from 'pinia'
import * as storage from '../utils/storage'
import { getCurrentDateTime, getPastDate } from '../utils/dateUtils'
/**
* 应用状态管理Store
* 使用Pinia进行状态管理包含便签、文件夹和设置数据
*/
export const useAppStore = defineStore('app', {
/**
* 状态定义
* 包含应用的核心数据:便签列表、文件夹列表和设置
*/
state: () => ({
notes: [],
folders: [],
settings: { cloudSync: false, darkMode: false },
notes: [], // 便签列表
folders: [], // 文件夹列表
settings: { cloudSync: false, darkMode: false }, // 应用设置
}),
/**
* 计算属性
* 基于状态派生的计算值
*/
getters: {
/**
* 计算加星便签数量
* @param {Object} state - 当前状态对象
* @returns {number} 加星便签的数量
*/
starredNotesCount: state => {
return state.notes.filter(note => note.isStarred).length
},
/**
* 计算所有便签数量
* @param {Object} state - 当前状态对象
* @returns {number} 所有便签的数量
*/
allNotesCount: state => {
return state.notes.length
},
},
/**
* 状态变更操作
* 包含所有修改状态的方法
*/
actions: {
// 初始化数据
/**
* 初始化数据
* 从localStorage加载便签、文件夹和设置数据
* 如果没有数据则加载预设的mock数据
* @returns {Promise<void>}
*/
async loadData() {
try {
// 从localStorage加载数据
const loadedNotes = await storage.getNotes()
const loadedFolders = await storage.getFolders()
const loadedSettings = await storage.getSettings()
@@ -31,6 +63,7 @@ export const useAppStore = defineStore('app', {
if (loadedNotes.length === 0 && loadedFolders.length === 0) {
this.loadMockData()
} else {
// 否则使用加载的数据
this.notes = loadedNotes
this.folders = loadedFolders
this.settings = loadedSettings
@@ -40,7 +73,11 @@ export const useAppStore = defineStore('app', {
}
},
// 加载mock数据
/**
* 加载预设的mock数据
* 用于开发和演示目的,提供示例便签、文件夹和设置
* @returns {Promise<void>}
*/
async loadMockData() {
// Mock notes - 使用固定的日期值以避免每次运行时变化
const fixedCurrentDate = '2025-10-12T10:00:00.000Z';
@@ -50,6 +87,7 @@ export const useAppStore = defineStore('app', {
const fixedFourDaysAgo = '2025-10-08T10:00:00.000Z';
const fixedFiveDaysAgo = '2025-10-07T10:00:00.000Z';
// 预设的便签示例数据
const mockNotes = [
{
id: '1',
@@ -58,10 +96,10 @@ export const useAppStore = defineStore('app', {
createdAt: fixedCurrentDate,
updatedAt: fixedCurrentDate,
folderId: null,
isStarred: true,
isTop: true,
hasImage: false,
isDeleted: false,
isStarred: true, // 加星便签
isTop: true, // 置顶便签
hasImage: false, // 不包含图片
isDeleted: false, // 未删除
deletedAt: null,
},
{
@@ -71,10 +109,10 @@ export const useAppStore = defineStore('app', {
createdAt: fixedYesterday,
updatedAt: fixedYesterday,
folderId: null,
isStarred: true,
isTop: false,
hasImage: true,
isDeleted: false,
isStarred: true, // 加星便签
isTop: false, // 非置顶
hasImage: true, // 包含图片
isDeleted: false, // 未删除
deletedAt: null,
},
{
@@ -84,10 +122,10 @@ export const useAppStore = defineStore('app', {
createdAt: fixedTwoDaysAgo,
updatedAt: fixedTwoDaysAgo,
folderId: null,
isStarred: false,
isTop: false,
hasImage: false,
isDeleted: false,
isStarred: false, // 非加星
isTop: false, // 非置顶
hasImage: false, // 不包含图片
isDeleted: false, // 未删除
deletedAt: null,
},
{
@@ -97,10 +135,10 @@ export const useAppStore = defineStore('app', {
createdAt: fixedThreeDaysAgo,
updatedAt: fixedThreeDaysAgo,
folderId: null,
isStarred: false,
isTop: false,
hasImage: false,
isDeleted: false,
isStarred: false, // 非加星
isTop: false, // 非置顶
hasImage: false, // 不包含图片
isDeleted: false, // 未删除
deletedAt: null,
},
{
@@ -110,10 +148,10 @@ export const useAppStore = defineStore('app', {
createdAt: fixedFourDaysAgo,
updatedAt: fixedFourDaysAgo,
folderId: null,
isStarred: false,
isTop: false,
hasImage: false,
isDeleted: false,
isStarred: false, // 非加星
isTop: false, // 非置顶
hasImage: false, // 不包含图片
isDeleted: false, // 未删除
deletedAt: null,
},
{
@@ -123,15 +161,16 @@ export const useAppStore = defineStore('app', {
createdAt: fixedFiveDaysAgo,
updatedAt: fixedFiveDaysAgo,
folderId: null,
isStarred: false,
isTop: false,
hasImage: false,
isDeleted: true,
isStarred: false, // 非加星
isTop: false, // 非置顶
hasImage: false, // 不包含图片
isDeleted: true, // 已删除
deletedAt: fixedYesterday,
},
]
// Mock folders - 使用固定的日期值
// 预设的文件夹示例数据
const mockFolders = [
{
id: 'folder1',
@@ -151,11 +190,13 @@ export const useAppStore = defineStore('app', {
]
// Mock settings
// 预设的设置示例数据
const mockSettings = {
cloudSync: false,
darkMode: false,
cloudSync: false, // 云同步关闭
darkMode: false, // 深色模式关闭
}
// 更新store状态
this.notes = mockNotes
this.folders = mockFolders
this.settings = mockSettings
@@ -166,7 +207,10 @@ export const useAppStore = defineStore('app', {
await storage.saveSettings(mockSettings)
},
// 保存notes到localStorage
/**
* 保存便签数据到localStorage
* @returns {Promise<void>}
*/
async saveNotes() {
try {
await storage.saveNotes(this.notes)
@@ -175,7 +219,10 @@ export const useAppStore = defineStore('app', {
}
},
// 保存folders到localStorage
/**
* 保存文件夹数据到localStorage
* @returns {Promise<void>}
*/
async saveFolders() {
try {
await storage.saveFolders(this.folders)
@@ -184,7 +231,10 @@ export const useAppStore = defineStore('app', {
}
},
// 保存settings到localStorage
/**
* 保存设置数据到localStorage
* @returns {Promise<void>}
*/
async saveSettings() {
try {
await storage.saveSettings(this.settings)
@@ -193,11 +243,20 @@ export const useAppStore = defineStore('app', {
}
},
// Note functions
/**
* 便签操作函数
*/
/**
* 添加新便签
* @param {Object} note - 便签对象
* @returns {Promise<Object>} 新创建的便签对象
*/
async addNote(note) {
try {
const newNote = await storage.addNote(note)
this.notes.push(newNote)
return newNote
} catch (error) {
console.error('Error adding note:', error)
@@ -205,6 +264,12 @@ export const useAppStore = defineStore('app', {
}
},
/**
* 更新便签
* @param {string} id - 便签ID
* @param {Object} updates - 要更新的属性对象
* @returns {Promise<Object>} 更新后的便签对象
*/
async updateNote(id, updates) {
try {
const updatedNote = await storage.updateNote(id, updates)
@@ -221,6 +286,11 @@ export const useAppStore = defineStore('app', {
}
},
/**
* 删除便签
* @param {string} id - 要删除的便签ID
* @returns {Promise<boolean>} 删除成功返回true失败返回false
*/
async deleteNote(id) {
try {
const result = await storage.deleteNote(id)
@@ -234,7 +304,12 @@ export const useAppStore = defineStore('app', {
}
},
// 将便签移至回收站
/**
* 将便签移至回收站
* 将便签标记为已删除状态,并记录删除时间
* @param {string} id - 便签ID
* @returns {Promise<Object>} 更新后的便签对象
*/
async moveToTrash(id) {
try {
const updatedNote = await storage.updateNote(id, { isDeleted: true, deletedAt: getCurrentDateTime() })
@@ -251,7 +326,12 @@ export const useAppStore = defineStore('app', {
}
},
// 永久删除便签
/**
* 永久删除便签
* 从便签列表中彻底移除便签
* @param {string} id - 便签ID
* @returns {Promise<boolean>} 删除成功返回true失败返回false
*/
async permanentlyDeleteNote(id) {
try {
const result = await storage.deleteNote(id)
@@ -265,7 +345,15 @@ export const useAppStore = defineStore('app', {
}
},
// Folder functions
/**
* 文件夹操作函数
*/
/**
* 添加新文件夹
* @param {Object} folder - 文件夹对象
* @returns {Promise<Object>} 新创建的文件夹对象
*/
async addFolder(folder) {
try {
const newFolder = await storage.addFolder(folder)
@@ -277,7 +365,15 @@ export const useAppStore = defineStore('app', {
}
},
// Settings functions
/**
* 设置操作函数
*/
/**
* 更新设置
* @param {Object} newSettings - 新的设置对象
* @returns {Promise<void>}
*/
async updateSettings(newSettings) {
try {
const updatedSettings = { ...this.settings, ...newSettings }
@@ -289,12 +385,20 @@ export const useAppStore = defineStore('app', {
}
},
// 切换云同步设置
/**
* 切换云同步设置
* 开启或关闭云同步功能
* @returns {Promise<void>}
*/
async toggleCloudSync() {
await this.updateSettings({ cloudSync: !this.settings.cloudSync })
},
// 切换深色模式设置
/**
* 切换深色模式设置
* 开启或关闭深色模式
* @returns {Promise<void>}
*/
async toggleDarkMode() {
await this.updateSettings({ darkMode: !this.settings.darkMode })
},