You've already forked SmartisanNote.Remake
优化 头部便签管理点击区域;
补充注释;
This commit is contained in:
@@ -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 })
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user