简易记事本项目(基于Vue 3 + Element Plus + SSM 个人事件管理系统)

项目简介

点滴365是一个基于 Vue 3 + Element Plus + SSM 开发的个人事件管理系统,旨在帮助用户高效管理 个人日程待办事项。系统支持日记撰写、待办事项管理、数据统计分析、图片上传、定时提醒、实时天气等功能,让用户可以更好地记录生活点滴、规划工作任务。

核心技术栈

前端技术

  • 前端框架: Vue 3
  • UI组件库: Element Plus
  • HTTP请求: Axios
  • 日期处理: Day.js
  • 图表可视化: ECharts 5

后端技术

  • IoC容器和AOP:Spring Framework 6.1.12
  • MVC框架:SpringMVC 6.1.12
  • ORM框架:MyBatis 3.5.16
  • 数据库:MySQL 8.0
  • 数据库连接池:Druid
  • 数据校验:Validation
  • MyBatis分页插件:PageHelper
  • Java工具包:Hutool

数据库设计

user(用户表)

-- auto-generated definition
create table user
(
    id           int auto_increment comment '用户ID'
        primary key,
    username     varchar(50)                        not null comment '账户名',
    nickname     varchar(50)                        not null comment '昵称',
    password     varchar(255)                       not null comment '密码(哈希值)',
    avatar       varchar(255)                       null comment '头像地址',
    age          int                                null comment '年龄',
    phone        varchar(20)                        null comment '手机号',
    email        varchar(100)                       null comment '邮箱',
    created_time datetime default CURRENT_TIMESTAMP null comment '注册时间',
    constraint username
        unique (username)
);

tag(标签表)

-- auto-generated definition
create table tag
(
    id           int auto_increment comment '标签ID'
        primary key,
    user_id      int                                not null comment '用户ID',
    name         varchar(50)                        not null comment '标签名称',
    created_time datetime default CURRENT_TIMESTAMP null comment '创建时间',
    constraint tag_ibfk_1
        foreign key (user_id) references user (id)
            on delete cascade
);

create index idx_user_id_tag
    on tag (user_id);

event(事件表)

注意:我这里事件分为待办事项和日记两个大类,每个事件有一个标签

-- auto-generated definition
create table event
(
    id           int auto_increment comment '事件ID'
        primary key,
    user_id      int                                not null comment '用户ID',
    tag_id       int                                null comment '标签ID',
    category     int                                not null comment '事件分类,1-日记,2-待办事项',
    title        varchar(100)                       not null comment '事件标题',
    start_date   datetime                           null comment '事件起始时间',
    end_date     datetime                           null comment '事件截止时间',
    content      text                               null comment '事件具体内容',
    priority     tinyint                            null comment '事件级别 0:一般 1:紧急 2:重要',
    status       tinyint                            null comment '事件状态 0:未完成 1:已完成 2:作废 3:已过期',
    mood_tag     tinyint  default 0                 null comment '心情标签  -- 待办事项: 1:非常不满意 2:不满意 3:中立 4:满意 5:非常满意 -- 日记: 1:开心 2:平静 3:难过 4:生气 5:焦虑 6:期待 7:感动 8:疲惫',
    is_pinned    tinyint  default 0                 null comment '是否置顶 0:否 1:是',
    pin_time     datetime                           null comment '置顶时间',
    created_time datetime default CURRENT_TIMESTAMP null comment '创建时间',
    updated_time datetime default CURRENT_TIMESTAMP null on update CURRENT_TIMESTAMP comment '更新时间',
    constraint event_ibfk_1
        foreign key (user_id) references user (id)
            on delete cascade,
    constraint event_ibfk_2
        foreign key (tag_id) references tag (id)
            on delete cascade
);

create index idx_tag_id
    on event (tag_id);

create index idx_user_id
    on event (user_id);

image(图片表)

-- auto-generated definition
create table image
(
    id           int auto_increment comment '图片ID'
        primary key,
    event_id     int                                not null comment '事件ID',
    image_url    varchar(255)                       not null comment '图片URL',
    created_time datetime default CURRENT_TIMESTAMP null comment '上传时间'
)
    comment '事件图片表';

create index idx_event_id
    on image (event_id);

核心功能

本项目实现功能包括:用户注册登录标签管理用户信息管理事件管理小记我的待办待办截止提醒数据统计实时天气

用户登录和注册

  • 使用用户名、密码注册
  • 密码需要符合长度和复杂度要求
  • 防止重复注册
    在这里插入图片描述

用户信息管理

  • 支持修改用户基本信息
  • 支持修改密码
  • 支持上传头像
    在这里插入图片描述

标签管理

标签用于对事件进行分类管理:

  • 新增标签
  • 修改标签
  • 删除标签
  • 标签分页列表查询
  • 系统分配标签颜色
    在这里插入图片描述

事件管理

主要功能:

  • 新增待办事项 / 日记
  • 修改待办事项 / 日记
  • 待办状态管理、优先级设置
  • 事件多条件分页列表查询
  • 支持图片上传(最多三张)
  • 支持满意度(待办) 和 心情(日记)记录
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

日记管理

主要功能:

  • 写日记
  • 修改日记
  • 删除日记
  • 日记列表查询
  • 支持图片上传(最多三张)
  • 支持心情标签
  • 支持置顶功能
    在这里插入图片描述

我的待办

主要功能:

  • 添加 / 修改待办
  • 放弃 / 完成待办
  • 待办列表分页查询
  • 支持图片上传(最多三张)
  • 更人性化的时间提醒
  • 支持截止时间提醒功能
  • 定时处理过期待办
    在这里插入图片描述
    在这里插入图片描述
待办剩余时间处理
 /**
   * 获取待处理的待办事项
   */
  public List<TodoVO> getPendingTodos() {
      // 获取当前用户ID
      Integer userId = BaseContext.getCurrentId();
      
      // 查询待办事项
      List<Event> todos = eventMapper.getPendingTodos(userId);
      
      // 转换为VO对象
      return todos.stream().map(todo -> {
          TodoVO vo = BeanUtil.copyProperties(todo, TodoVO.class);
          vo.setTagName(tagMapper.getById(todo.getTagId()).getName());
          
          // 计算剩余时间
          LocalDateTime endDate = todo.getEndDate();
          LocalDateTime now =  LocalDateTime.now();
          long days = ChronoUnit.DAYS.between(now, endDate);
          
          if (days < 0) {
              vo.setRemainingTime("已过期");
          } else if (days == 0) {
              vo.setRemainingTime("今天到期");
          } else if (days == 1) {
              vo.setRemainingTime("明天到期");
          } else {
              vo.setRemainingTime(days + "天后到期");
          }
          
          // 获取图片列表
          vo.setImgList(imageMapper.selectByEventId(todo.getId()));
          
          return vo;
      }).collect(Collectors.toList());
  }
定时任务处理过期待办

详细讲解看上一篇博客SSM与SpringBoot项目中实现定时任务处理

//定时处理过期待办
@Slf4j
@Component
@RequiredArgsConstructor
public class EventStatusTask {

    private final EventMapper eventMapper;

    /**
     * 每5分钟执行一次,检查并更新过期事件状态
     * cron表达式:秒 分 时 日 月 周
     */
    @Scheduled(cron = "0 */5 * * * *")
    public void updateExpiredEventStatus() {
        try {
            int count = eventMapper.updateExpiredEventStatus();
            if (count > 0) {
                log.info("成功更新{}个过期事件状态", count);
            }
        } catch (Exception e) {
            log.error("更新过期事件状态失败", e);
        }
    }
} 

数据统计

  • 事件总数统计
  • 已完成事件统计
  • 分类统计
  • 标签统计
  • 事件分类统计分析
  • 近七天事件完成情况统计
    在这里插入图片描述

实时天气

在这里插入图片描述

// WeatherComponent.vue
const fetchWeather = async () => {
  const apiKey = 'your_api_key'
  const response = await axios.get(
    `https://restapi.amap.com/v3/weather/weatherInfo?key=${apiKey}&city=500000`
  )
  
  if (response.data.status === '1') {
    const liveData = response.data.lives[0]
    currentTemperature.value = liveData.temperature
    currentDescription.value = liveData.weather
    weatherIcon.value = getWeatherIcon(liveData.weather)
  }
}

// 天气图标映射
const weatherIcons = {
  '晴': 'sunny.png',
  '多云': 'cloudy.png',
  '阴': 'overcast.png',
  '小雨': 'rain.png'
}

结语

这个项目虽然规模不大,但涵盖了Web开发中的很多重要概念和技术点,是一个非常好的学习和实践项目。在后续的开发中,我会继续完善功能,优化性能,让这个项目变得更加完善和实用。
最后,感谢您的阅读,如果您对这个项目感兴趣,欢迎在评论区进行交流和讨论。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/939073.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【C语言】头文件

所有学习过C语言的朋友都熟悉这样一段代码&#xff1a; #include <stdio.h>int main(int argc, char *argv[]) {return 0; }那么&#xff0c;你真的了解 <stdio.h> 吗&#xff1f; <stdio…

ChatGPT Search开放:实时多模态搜索新体验

点击访问 chatTools 免费体验GPT最新模型&#xff0c;包括o1推理模型、GPT4o、Claude、Gemini等模型&#xff01; ChatGPT Search&#xff1a;功能亮点解析 本次更新的ChatGPT Search带来了多项令人瞩目的功能&#xff0c;使其在搜索引擎市场中更具竞争力。 1. 高级语音模式&…

概率论得学习和整理31: 连续型随机变量的概率本质是求面积,均匀分布等

目录 1 连续性随机变量 2 连续性随机变量和 离散型随机变量&#xff0c;分布的区别 3 不要混淆概念 4 均匀分布的相关 4.1 定义 4.2 例子 1 连续性随机变量 连续性随机变量最大的特点&#xff0c;单个点上的概率0多了一个分布函数&#xff0c;因为从1维变2维了&#xff…

跟沐神学读论文-论文阅读管理

摘要 近期有读论文的需求&#xff0c;就需要去了解一下论文到底要怎么读&#xff0c;同一个系列之间的论文如何作整理和归纳&#xff0c;之前也有了解过市面上有成熟的论文阅读工具&#xff0c;但是对于学生党来讲没什么性价比&#xff0c;在B站上看到沐神有讲解他的思路Typor…

java_断点调试(debug)

按照如下配置好后&#xff0c;即可点击“F7”,进入相应的方法&#xff0c;查看源码 package com.hspedu.debug_;//debug对象创建的过程&#xff0c;加深对调试的理解 public class Debug01 {public static void main(String[] args) {//创建对象的流程//&#xff08;1&#xff…

c++数据结构算法复习基础--13--基数算法

基数排序 - 桶排序 时间复杂度 O(n*d) – d为数据的长度 每次比较一位&#xff08;个位、十位。。。&#xff09;&#xff0c;所以取值范围就为0-9。 根据该特点&#xff0c;设计桶的概念 – 0号桶、1号桶… 1、思想 1&#xff09;找出最长的数字&#xff0c;确定要处理的…

微信小程序TTS解决方案

微信小程序原生语音合成 API&#xff08;基础且简单&#xff09; 介绍&#xff1a;微信小程序提供了基础的语音合成能力。通过wx.createInnerAudioContext()等相关API&#xff0c;可以实现简单的语音播放功能。不过它主要是用于音频播放&#xff0c;对于完整的文本到语音&#…

matlab绘图时设置左、右坐标轴为不同颜色

目录 一、需求描述 二、实现方法 一、需求描述 当图中存在两条曲线&#xff0c;需要对两条曲线进行分别描述时&#xff0c;应设置左、右坐标轴为不同颜色&#xff0c;并设置刻度线&#xff0c;且坐标轴颜色需要和曲线颜色相同。 二、实现方法 1.1、可以实现&#xff1a; 1…

Vue3动态表单实现

实现方法&#xff1a;通过<component />标签动实现动态表单渲染 component标签&#xff1a; 在vue中 component 标签用于动态组件标签的渲染。它允许在同一个挂载点上条件渲染不同的组件&#xff0c;通过is属性可以渲染指定的属性 在上面的例子中&#xff0c;通过调用…

[C++]C++工具之对异常情况的处理(throw、catch、try)以及用命名空间避免同名冲突

一、C 异常处理&#x1f60a; 1.1 定义 C 中的异常处理用于应对程序运行中的异常情况&#xff08;如除零、数组越界等&#xff09;&#xff0c;通过 try-catch 机制捕获和处理错误&#xff0c;防止程序崩溃。 异常是程序运行时意外发生的事件&#xff0c;可以通过抛出&#xf…

游戏引擎学习第53天

仓库: https://gitee.com/mrxiao_com/2d_game 回顾 现在我们正进行游戏结构的重构&#xff0c;目的是为了更合理地安排游戏的组织方式&#xff0c;模拟玩家周围的实体。我们将这些实体分为两类&#xff1a;一类是当前正在屏幕上显示的实体&#xff0c;另一类是被映射到低频更…

【六足机器人】04上位机开发

图&#xff1a;QT界面效果图 一、主要功能介绍 1.1 登录界面 登录界面&#xff0c;用来判断是否账号密码输入正确&#xff0c;错误将会弹出消息框。 void first::on_enroll_clicked(){if(ui->account->text()"共创芯未来"&&ui->password->text…

RockyLinux9编译安装MySQL5.7

原文链接&#xff1a;RockyLinux9编译安装MySQL5.7 - Liu Zijians Blog | 刘子健的博客 本文最后更新于 2024年12月15日 使用源码编译安装MySQL5.7 1.下载 打开MySQL-Community-Server官方下载页面:https://downloads.mysql.com/archives/community/ 筛选出要下载的版本&…

什么是3DEXPERIENCE SOLIDWORKS,它有哪些角色和功能?

将业界领先的 SOLIDWORKS 3D CAD 解决方案连接到基于单一云端产品开发环境 3DEXPERIENCE 平台。您的团队、数据和流程全部连接到一个平台进行高效的协作工作&#xff0c;从而能快速的做出更好的决策。 目 录&#xff1a; ★ 1 什么是3DEXPERIENCE SOLIDWORKS ★ 2 3DEXPERIE…

OpenCVE:一款自动收集NVD、MITRE等多源知名漏洞库的开源工具,累计收录CVE 27万+

漏洞库在企业中扮演着至关重要的角色&#xff0c;不仅提升了企业的安全防护能力&#xff0c;还支持了安全决策、合规性要求的满足以及智能化管理的发展。前期博文《业界十大知名权威安全漏洞库介绍》介绍了主流漏洞库&#xff0c;今天给大家介绍一款集成了多款漏洞库的开源漏洞…

《Redis设计与实现》读书笔记-客户端

目录 1.Client简介 2.客户端属性 1&#xff09;&#xff08;本文重点&#xff09;比较通用的属性 2&#xff09;&#xff08;后续分享&#xff09;另外一类是和特定功能相关的属性 2.1套接字文件描述符 2.2名字 2.3标志&#xff08;flag&#xff09; 2.4输入缓冲区 2.…

Oracle Database 21c Express Edition数据库 和 Sqlplus客户端安装配置

目录 一. 前置条件二. Win10安装配置Oracle数据库2.1 数据库获取2.2 数据库安装2.3 数据库配置确认2.4 数据库访问 三. Win10配置Oracle数据库可对外访问3.1 打开文件和打印机共享3.2 开放1521端口 四. 端口与地址确认4.1 查看监听器的状态4.2 Win10查看1521端口是否被监听4.3 …

10篇--图像噪点消除

概念 何为噪点&#xff1f; 噪点&#xff1a;指图像收到的一些干扰因素&#xff0c;通常是由图像采集设备、传输信道等因素造成的&#xff0c;表现为图像中随机的亮度&#xff0c;也可以理解为有那么一些点的像素值与周围的像素值格格不入。 常见的噪声类型 高斯噪声&#…

【开源免费】基于Vue和SpringBoot的渔具租赁系统(附论文)

本文项目编号 T 005 &#xff0c;文末自助获取源码 \color{red}{T005&#xff0c;文末自助获取源码} T005&#xff0c;文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析 六、核心代码6.1 渔…

Linux网络基础-----传输层UDP协议

目录 端口号&#xff1a; 查询各类服务的端口号 加深理解端口号&#xff1a; UDP协议 UDP协议特点&#xff1a; 关于缓冲区&#xff1a; 内核层面理解UDP报文 端口号&#xff1a; 知名端口号&#xff1a;0 ~ 1023&#xff1a;被HTTP、SSH等应用层协议广泛使用的端口号&…