告别混乱!用Vue3+TS打造的离线日程/课表管理工具——Agenda

为什么要做这款工具?

市面上的日程工具要么功能过于繁杂,要么专注于单一场景(比如只做日程或只做课表),而且很多工具依赖云端同步,断网时就无法使用,在实际生活中笔者就经常遇见需要课表或日程表时难以及时启动查看信息的状态,因此想要对于这个问题进行一定的解决。

我想要做什么样的工具 ?

-满足日常日程的创建、编辑、筛选、标记完成等基础需 求;

-适配学生群体的课表管理,支持学期配置、调课、多时间段课程等 场景;

-数据本地存储,无需注册账号,导出导入方 便备份;

-界面简洁,响应式设计,电脑、平板都能 流畅使用。

怎么做?

基于这些需求,笔者最后选择Vue 3 + TypeScript作为核心技术栈,搭配VitePiniaElement Plus等工具,快速搭建了 这款离线应用。

核心功能:兼顾 日程与课表双场景

1.日程模式:把 每一天的安排理清楚

日程模块是第一个核心内容模块,主打「轻量化管理+灵活筛选」,满足日常工作/ 学习的日程规划需求:

日历视图与ui设计

一个直观的视图界面与ui设计是一个软件面向用户的门面。日程模式的主要界面设计分为左侧的单日计划部分以及右侧的月历部分。月历部分的主要作用便是快捷呈现日期与每日的大致任务,并提供快速便捷的日期切换功能,,而左侧的单日计划表则详细显示了所选日的详细日程安排,一目了然,也方便用户检查日程细节, 并对日程表内 容进行修改。

全流程日程管理

全面支持日程的全生命周期管理,不仅可便捷创建新日程,填写标题、时间、详情、分类等信息;还能对已创建的日程进行灵活编辑,修改任意字段内容,或根据需要随时删除无需保留的日程。针对日程进度管理,提供「已完成」状态标记功能,完成后一键标记即可清晰区分待办与已办事项;对于需要重点关注的日程,支持单独标注「重要」标识,重要日程会在日历视图中突出显示,便于用户优先处理关键事项,大 幅提升日程管理的效率 与条理性。

精细化分类筛选

内置工作、学习、个人、其他四类默认分类,也支持自定义标签;可按时间、分类、标签、状态、重 要性多维度筛选,快 速找到目标日程;

数据安全保障

支持JSON格式导入/导出,本地localStor age持久化存储,不用担心数据丢失。

2.课表模式:学生党专属的课程管理

每个学生用户所在的学校不同,对课表的需求也不同,有的同学一学期课表都不变化,有的同学没有一门课的持续时间是超过半学期的,再加上各种调休、调课之类的变化,一个课表的用户个性化程度是很高的,针对以上诸点, 在开发时我考虑了不同 的对策,于是开发了以下功能

学期自定义配置

支持灵活配置学期基础信息,可自定义学期名称、开学第一周日期与总周数,同时能根据学校作息自由调整 每节课的起止时间,完美适配 不同院校的课程安排规则。

课程全周期管理

支持课程的添加、编辑与删除,可填写课程名称、教师、地点等详情,还能为课程设置专属颜色方便区分;支持自定义课程生效周数、绑定多个上课时间段,同 时内置临时调课功能,无需修改原 有课表即可应对课程变动。

直观课表视图展示

采用周视图模式呈现课程安排,界面清晰展示每日各节次课程,可通过导航快速切换不同周次;所有课程 信息一目了然,操作便捷, 满足日常查看与管理课表的核心需求。

灵活配置与数据适配

使用过程中可随时修改学期配置、调整课程信息,所有课表数据本 地离线存储, 不依赖云端,数据安全且稳定,适配学习场景长期使用 。

3.离线+体验:好用才是硬道理

纯离线运行:无需联网,打开页面就能用,数据存在本地,保护隐私;

双模式自由切换:日程和课表模式一键切换,兼顾工作/学 习不同场景;

响应式设计:适配电脑 、平板等不同屏幕尺寸,随时随地查看。

技术栈解析: 高效开发的底层支撑

这款工具的技术栈选择围绕「轻量、高效、类型安全」展开:

- **前端框架**Vue 3 + TypeScri pt,组合式API提升代码复用性,TS保障类型安全,减少开发bug

- * *构建工具**Vite,比Webpack更快的热更新,开发体验拉满;

- **状态管理**Pinia,替代Vuex的轻量选择,更简洁的API,适配Vue 3

- ** UI组件库**Element Plus,开箱即用的组件,快速搭建美观的界面;

- ** 日期处理**Day.js,轻量的日期处理库,满足日程/课表的日期计算需求;

- **本地存储**localStorage,简单高效,满足离线存储需求。

项目结 构也做了清晰 的分层,核心功 能、UI组件、状态管理、类型定义各司其职,后续维护和扩展更方便:

```

src/

├── core/ #核心功能(事件/存储 服务)

├── ui/ # UI组件(日历、课表 、表单等)

├── types/ #类型定义(日程/ 课表类型)

├── stores/ #状态管理(Pinia存储)

├── main.ts #应用入口

└── App.vue #主应用组件

` ``

快速上手:5分钟就能用起来

安装与运行(开 发者版)

如果想自己部署或二次开发,只需几步:

1.克隆项目后安装依赖:`npm install`

2.启动开发模式:`npm run dev`,访问http://loc alhost:5173,或者等待本地窗口启动即可 ;

3.打包部署:`npm run build`,生成静态文件可直接部署到服务器。

日常使用(用户版)

- **日程模式**:点击「创建日程」添加内容,月历点击日期查看当天日程,筛选功能按需过滤,完成后标记「已完成」即可;

- ** 课表模式**:首次使用先配置学期信 息,再点击「添加学期课程」完善课程内容,调课、周数切换等功能都在顶部/侧边栏,简单易操 作。

后续规划:持续优化,更贴合 需求

目前Agenda已经满足基础的日程和课表 管理需求,但还有不少可以优化的方向,例如

新增云同步功能,支持多设备数据同步;

加入数据统计模块,可视化展示日程完成率、课程分布;

支持多学期管理, 适配学生跨学期查看课表;

添加提醒功能 ,课程/重要日程到期提醒;

完善移动端适配,支持课表导出为图片/Excel

还有最最最重要的

登录移动端!!!!!

写在最后

Agenda的开发初衷是解决自己和身边 人「日程/课表管理混乱」的问题,从需求梳理到代码实现,全程围绕「实用、易用、离线」的核心,也算是对Vue 3 + TypeScript技术栈的一次实战总结。

这款工具已开 源(MIT许可证),如果你也有日程/课表管理的需求,或者想学习Vue 3 + TS的实战开发,不妨试试这款工具,也欢 迎提issuePR一起优化~

技术没有高低,能解决实际问题的就是好技术。希望这款轻量的离线工具,能帮你、帮我、帮我们把工作和学习的安排打理得井井有条

附gitee开源库地址:forestalphy/agenda