开始完善便签新建、编辑逻辑

This commit is contained in:
2025-10-12 18:32:25 +08:00
parent 3957a7d3b2
commit 1bb9b4a79e
13 changed files with 696 additions and 1039 deletions

View File

@@ -1,44 +1,44 @@
import { defineStore } from 'pinia';
import * as storage from '../utils/storage';
import { defineStore } from 'pinia'
import * as storage from '../utils/storage'
export const useAppStore = defineStore('app', {
state: () => ({
notes: [],
folders: [],
settings: { cloudSync: false, darkMode: false }
settings: { cloudSync: false, darkMode: false },
}),
getters: {
starredNotesCount: (state) => {
return state.notes.filter(note => note.isStarred).length;
starredNotesCount: state => {
return state.notes.filter(note => note.isStarred).length
},
allNotesCount: state => {
return state.notes.length
},
allNotesCount: (state) => {
return state.notes.length;
}
},
actions: {
// 初始化数据
async loadData() {
try {
const loadedNotes = await storage.getNotes();
const loadedFolders = await storage.getFolders();
const loadedSettings = await storage.getSettings();
const loadedNotes = await storage.getNotes()
const loadedFolders = await storage.getFolders()
const loadedSettings = await storage.getSettings()
// 如果没有数据则加载mock数据
if (loadedNotes.length === 0 && loadedFolders.length === 0) {
this.loadMockData();
this.loadMockData()
} else {
this.notes = loadedNotes;
this.folders = loadedFolders;
this.settings = loadedSettings;
this.notes = loadedNotes
this.folders = loadedFolders
this.settings = loadedSettings
}
} catch (error) {
console.error('Error loading data:', error);
console.error('Error loading data:', error)
}
},
// 加载mock数据
async loadMockData() {
// Mock notes
@@ -52,7 +52,9 @@ export const useAppStore = defineStore('app', {
folderId: null,
isStarred: true,
isTop: true,
hasImage: false
hasImage: false,
isDeleted: false,
deletedAt: null,
},
{
id: '2',
@@ -63,7 +65,9 @@ export const useAppStore = defineStore('app', {
folderId: null,
isStarred: true,
isTop: false,
hasImage: true
hasImage: true,
isDeleted: false,
deletedAt: null,
},
{
id: '3',
@@ -74,7 +78,9 @@ export const useAppStore = defineStore('app', {
folderId: null,
isStarred: false,
isTop: false,
hasImage: false
hasImage: false,
isDeleted: false,
deletedAt: null,
},
{
id: '4',
@@ -85,7 +91,9 @@ export const useAppStore = defineStore('app', {
folderId: null,
isStarred: false,
isTop: false,
hasImage: false
hasImage: false,
isDeleted: false,
deletedAt: null,
},
{
id: '5',
@@ -96,145 +104,191 @@ export const useAppStore = defineStore('app', {
folderId: null,
isStarred: false,
isTop: false,
hasImage: false
}
];
hasImage: false,
isDeleted: false,
deletedAt: null,
},
{
id: '6',
title: '已删除的便签',
content: '这是一条已删除的便签示例,应该只在回收站中显示。',
createdAt: new Date(Date.now() - 432000000).toISOString(), // 5天前
updatedAt: new Date(Date.now() - 432000000).toISOString(),
folderId: null,
isStarred: false,
isTop: false,
hasImage: false,
isDeleted: true,
deletedAt: new Date(Date.now() - 86400000).toISOString(), // 1天前删除
},
]
// Mock folders
const mockFolders = [
{
id: 'folder1',
name: '工作',
createdAt: new Date().toISOString()
createdAt: new Date().toISOString(),
},
{
id: 'folder2',
name: '个人',
createdAt: new Date().toISOString()
createdAt: new Date().toISOString(),
},
{
id: 'folder3',
name: '学习',
createdAt: new Date().toISOString()
}
];
createdAt: new Date().toISOString(),
},
]
// Mock settings
const mockSettings = {
cloudSync: false,
darkMode: false
};
this.notes = mockNotes;
this.folders = mockFolders;
this.settings = mockSettings;
darkMode: false,
}
this.notes = mockNotes
this.folders = mockFolders
this.settings = mockSettings
// 保存到localStorage
await storage.saveNotes(mockNotes);
await storage.saveFolders(mockFolders);
await storage.saveSettings(mockSettings);
await storage.saveNotes(mockNotes)
await storage.saveFolders(mockFolders)
await storage.saveSettings(mockSettings)
},
// 保存notes到localStorage
async saveNotes() {
try {
await storage.saveNotes(this.notes);
await storage.saveNotes(this.notes)
} catch (error) {
console.error('Error saving notes:', error);
console.error('Error saving notes:', error)
}
},
// 保存folders到localStorage
async saveFolders() {
try {
await storage.saveFolders(this.folders);
await storage.saveFolders(this.folders)
} catch (error) {
console.error('Error saving folders:', error);
console.error('Error saving folders:', error)
}
},
// 保存settings到localStorage
async saveSettings() {
try {
await storage.saveSettings(this.settings);
await storage.saveSettings(this.settings)
} catch (error) {
console.error('Error saving settings:', error);
console.error('Error saving settings:', error)
}
},
// Note functions
async addNote(note) {
try {
const newNote = await storage.addNote(note);
this.notes.push(newNote);
return newNote;
const newNote = await storage.addNote(note)
this.notes.push(newNote)
return newNote
} catch (error) {
console.error('Error adding note:', error);
throw error;
console.error('Error adding note:', error)
throw error
}
},
async updateNote(id, updates) {
try {
const updatedNote = await storage.updateNote(id, updates);
const updatedNote = await storage.updateNote(id, updates)
if (updatedNote) {
const index = this.notes.findIndex(note => note.id === id);
const index = this.notes.findIndex(note => note.id === id)
if (index !== -1) {
this.notes[index] = updatedNote;
this.notes[index] = updatedNote
}
}
return updatedNote;
return updatedNote
} catch (error) {
console.error('Error updating note:', error);
throw error;
console.error('Error updating note:', error)
throw error
}
},
async deleteNote(id) {
try {
const result = await storage.deleteNote(id);
const result = await storage.deleteNote(id)
if (result) {
this.notes = this.notes.filter(note => note.id !== id);
this.notes = this.notes.filter(note => note.id !== id)
}
return result;
return result
} catch (error) {
console.error('Error deleting note:', error);
throw error;
console.error('Error deleting note:', error)
throw error
}
},
// 将便签移至回收站
async moveToTrash(id) {
try {
const updatedNote = await storage.updateNote(id, { isDeleted: true, deletedAt: new Date().toISOString() })
if (updatedNote) {
const index = this.notes.findIndex(note => note.id === id)
if (index !== -1) {
this.notes[index] = updatedNote
}
}
return updatedNote
} catch (error) {
console.error('Error moving note to trash:', error)
throw error
}
},
// 永久删除便签
async permanentlyDeleteNote(id) {
try {
const result = await storage.deleteNote(id)
if (result) {
this.notes = this.notes.filter(note => note.id !== id)
}
return result
} catch (error) {
console.error('Error permanently deleting note:', error)
throw error
}
},
// Folder functions
async addFolder(folder) {
try {
const newFolder = await storage.addFolder(folder);
this.folders.push(newFolder);
return newFolder;
const newFolder = await storage.addFolder(folder)
this.folders.push(newFolder)
return newFolder
} catch (error) {
console.error('Error adding folder:', error);
throw error;
console.error('Error adding folder:', error)
throw error
}
},
// Settings functions
async updateSettings(newSettings) {
try {
const updatedSettings = { ...this.settings, ...newSettings };
this.settings = updatedSettings;
await storage.saveSettings(updatedSettings);
const updatedSettings = { ...this.settings, ...newSettings }
this.settings = updatedSettings
await storage.saveSettings(updatedSettings)
} catch (error) {
console.error('Error updating settings:', error);
throw error;
console.error('Error updating settings:', error)
throw error
}
},
// 切换云同步设置
async toggleCloudSync() {
await this.updateSettings({ cloudSync: !this.settings.cloudSync });
await this.updateSettings({ cloudSync: !this.settings.cloudSync })
},
// 切换深色模式设置
async toggleDarkMode() {
await this.updateSettings({ darkMode: !this.settings.darkMode });
}
}
});
await this.updateSettings({ darkMode: !this.settings.darkMode })
},
},
})