本文将带你一步步用 Vue 和 IndexedDB 构建一个融合「任务管理」与「情绪记录」的轻量小工具。它支持拖拽管理每日任务、记录情绪状态、图标标记、情绪色彩化展示,还能导出每日小结报告——更重要的是,它完全离线可用,适合放在你的浏览器书签里,随时点开就能用。
我们在日常生活中常常被“待办清单”工具和“情绪日记”工具分别困扰。前者功能过重、界面复杂,后者又和任务管理脱节,无法形成完整闭环。那有没有可能,我们用一个超轻的小工具,把这两件事一次搞定?
我们来动手做一个吧——不需要注册、不依赖云端,开浏览器就能用,能做情绪打卡、任务安排,还能回顾一天的情绪波动和完成情况。
情绪 | 图标 | 背景色 |
---|---|---|
开心 | 😄 | #FFD700 |
平静 | 😌 | #87CEFA |
焦虑 | 😰 | #FF8C00 |
难过 | 😢 | #778899 |
生气 | 😡 | #DC143C |
// db.js
import { openDB } from 'idb'
export const dbPromise = openDB('todoMoodDB', 1, {
upgrade(db) {
db.createObjectStore('tasks', { keyPath: 'id', autoIncrement: true })
db.createObjectStore('moods', { keyPath: 'date' })
}
})
// addTask.vue
async function addTask(content) {
await dbPromise.then(db => db.add('tasks', {
content,
done: false,
date: today()
}))
}
// moodSelect.vue
async function setMood(type) {
await dbPromise.then(db => db.put('moods', {
date: today(),
type
}))
}
// 使用 Sortable.js 实现任务拖拽并保存新顺序
import Sortable from 'sortablejs'
onMounted(() => {
Sortable.create(document.getElementById('taskList'), {
onEnd(evt) {
const updatedOrder = reorder(tasks.value, evt.oldIndex, evt.newIndex)
tasks.value = updatedOrder
saveOrderToIndexedDB(updatedOrder)
}
})
})
上班前打开浏览器:
晚上临睡前点击「导出今日总结」按钮,系统自动导出 Markdown 文件,内容包括今日任务完成率、情绪波动记录,方便写日记、复盘。
A: 在同一台设备上是安全的,除非用户清除浏览器缓存。不过你可以设置自动导出本地文件的功能做备份。
A: 当前定位是轻量离线使用。如果你想支持多人共享,可用 Service Worker + PWA 或 Firebase Firestore 做轻量云同步。
A: 原生也可以实现。但使用 Vue 更有利于后续扩展,比如加组件、支持周视图、多用户等。
这个项目虽然小,但可以作为练习很多技术的 playground:
它也提醒我们:不一定非要做个大而全的 App,有时候一个“小而美”的实用页面,就能给人生活带来很大帮助。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。