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

news2024/12/19 4:34:22

项目简介

点滴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开发中的很多重要概念和技术点,是一个非常好的学习和实践项目。在后续的开发中,我会继续完善功能,优化性能,让这个项目变得更加完善和实用。
最后,感谢您的阅读,如果您对这个项目感兴趣,欢迎在评论区进行交流和讨论。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

IIS服务器部署C# WebApi程序,客户端PUT,DELETE请求无法执行

这两天在自己Windows10电脑上搭建IIS服务器&#xff0c;把自己写的WebApi代码部署上做个本地服务器&#xff0c;结果客户端的PUT和DELETE请求无法执行&#xff0c;GET、POST这些都正常&#xff0c;研究后发现要删除IIS中的“模块”中的"webdavmodule"才能解决。

socket编程UDP-实现滑动窗口机制与累积确认GBN

在下面博客中&#xff0c;我介绍了利用UDP模拟TCP连接、按数据包发送文件的过程&#xff0c;并附上完整源码。 socket编程UDP-文件传输&模拟TCP建立连接脱离连接&#xff08;进阶篇&#xff09;_udp socket发送-CSDN博客 下面博客实现了停等机制。 socket编程UDP-实现停…

Android-Glide详解

目录 一&#xff0c;介绍 二&#xff0c;使用 三&#xff0c;源码分析思路 四&#xff0c;with源码分析 五&#xff0c;模拟Glide生命周期管理 一&#xff0c;介绍 Glide目前是安卓最主流的加载图片的框架&#xff0c;也是源码最为复杂的框架之一。 要想完完全全吃透Glide的源…

服务器Ubuntu22.04系统下 ollama的详细部署安装和搭配open_webui使用

服务器Ubuntu22.04系统下 ollama的详细部署安装和搭配open_webui使用 一、ubuntu和docker基本环境配置 1.更新包列表&#xff1a;2. 安装docker依赖3. 添加docker密钥4.添加阿里云docker软件源5.安装docker6.安装完成docker测试7. docker配置国内镜像源 二、安装英伟达显卡…

【视频生成模型】——Hunyuan-video 论文及代码讲解和实操

&#x1f52e;混元文生视频官网 | &#x1f31f;Github代码仓库 | &#x1f3ac; Demo 体验 | &#x1f4dd;技术报告 | &#x1f60d;Hugging Face 文章目录 论文详解基础介绍数据预处理 &#xff08;Data Pre-processing&#xff09;数据过滤 (Data Filtering)数据标注 (Data…

Node的学习以及学习通过Node书写接口并简单操作数据库

Node的学习 Node的基础上述是关于Node的一些基础&#xff0c;总结的还行&#xff1b; 利用Node书写接口并操作数据库 1. 初始化项目 创建新的项目文件夹&#xff0c;并初始化 package.json mkdir my-backend cd my-backend npm init -y2. 安装必要的依赖 安装Express.js&…

git diff 查看差异

一.查看工作区和暂存区之间文件的差异 git diff 命令&#xff0c;默认查看的就是 工作区 和 暂存区之间文件的差异 1.git diff : 查看工作区和暂存区之间所有的文件差异 2.git diff -- 文件名&#xff1a;查看具体某个文件 在工作区和暂存区之间的差异 3.git diff -- 文件名…

linux网络编程 | c | epoll实现IO多路转接服务器

epoll实现IO多路转接服务器 可通过以下视频学习 06-opell函数实现的多路IO转接_哔哩哔哩_bilibili 通过响应式–多路IO转接实现 文章目录 epoll实现IO多路转接服务器1.思路&功能核心思路 2.代码实现multi_epoll_sever.c运行图 1.思路&功能 **功能&#xff1a;**客…

Java全体系精华(上):从基础到框架,构建坚实开发技能

爱的故事.上集 1. Java 基础1.1 常用集合数据结构 Array List Map Set Tree1.1.1 常用集合在JDK中的结构1.1.2 List 底层是数组1.1.3 Map键值对结存储结构1.1.3.1 为什么HashMap的Key、Value都允许为 null1.1.3.2 为什么ConcurrentHashMap的Key、Value都不允许为null1.1.3.3 Ha…

基于Clinical BERT的医疗知识图谱自动化构建方法,双层对比框架

基于Clinical BERT的医疗知识图谱自动化构建方法&#xff0c;双层对比框架 论文大纲理解1. 确认目标2. 目标-手段分析3. 实现步骤4. 金手指分析 全流程核心模式核心模式提取压缩后的系统描述核心创新点 数据分析第一步&#xff1a;数据收集第二步&#xff1a;规律挖掘第三步&am…

ctfshow--web入门之爆破篇

知识点&#xff1a; 暴力破解原理 暴力破解实际就是疯狂的输入密码进行尝试登录&#xff0c;针对有的人喜欢用一些个人信息当做密码&#xff0c;有的人喜欢用一些很简单的低强度密码&#xff0c;我们就可以针对性的生成一个字典&#xff0c;用脚本或者工具挨个去尝试登录。 …

Web项目图片视频加载缓慢/首屏加载白屏

Web项目图片视频加载缓慢/首屏加载白屏 文章目录 Web项目图片视频加载缓慢/首屏加载白屏一、原因二、 解决方案2.1、 图片和视频的优化2.1.1、压缩图片或视频2.1.2、 选择合适的图片或视频格式2.1.3、 使用图片或视频 CDN 加速2.1.4、Nginx中开启gzip 三、压缩工具推荐 一、原因…

Go 语言与时间拳击理论下的结对编程:开启高效研发编程之旅

一、引言 结对编程作为一种软件开发方法&#xff0c;在提高代码质量、增强团队协作等方面具有显著优势。而时间拳击理论为结对编程带来了新的思考角度。本文将以 Go 语言为中心&#xff0c;深入探讨时间拳击理论下的结对编程。 在当今软件开发领域&#xff0c;高效的开发方法和…

SpringBoot集成ENC对配置文件进行加密

在线MD5生成工具 配置文件加密&#xff0c;集成ENC 引入POM依赖 <!-- ENC配置文件加密 --><dependency><groupId>com.github.ulisesbocchio</groupId><artifactId>jasypt-spring-boot-starter</artifactId><version>2.1.2</ver…

el-table 多表头+跨行跨列案例

效果&#xff1a; 代码&#xff1a; index.vue <template><div class"my-table"><el-tablev-loading"table.loading":data"table.data"bordersize"mini":header-cell-style"headerCellStyle":span-method&qu…

基线检查:Windows安全基线.【手动 || 自动】

基线定义 基线通常指配置和管理系统的详细描述&#xff0c;或者说是最低的安全要求&#xff0c;它包括服务和应用程序设置、操作系统组件的配置、权限和权利分配、管理规则等。 基线检查内容 主要包括账号配置安全、口令配置安全、授权配置、日志配置、IP通信配置等方面内容&…

【electron】electron forge + vite + vue + electron-release-server 自动更新客户端

基本信息 electron forge vue页面&#xff08;中文&#xff09;&#xff1a;https://forge.electron.js.cn/guides/framework-integration/vue-3 electron forge vue页面&#xff08;英文&#xff0c;中文版下面的tab无法点击&#xff09;&#xff1a;https://www.electronfor…

ubuntu+ros新手笔记(二):古月·ROS2入门21讲学习笔记

系统ubuntu22.04 ros2 humble 按照如下视频教程学习的&#xff1a;【古月居】古月ROS2入门21讲 | 带你认识一个全新的机器人操作系统 此处仅记录我报错的地方&#xff0c;以及相应的解决方案&#xff0c;没有出错的略过&#xff01; 对应的古月居ROS2入门21讲源码下载地址&a…

IDEA 可视化使用 git rebase 合并分支步骤 使git分支树保持整洁

模拟环境 dev 分支开发完一个功能&#xff0c;需要合并到 master 分支&#xff0c;如果现在直接 merge 合并的话 git分支树会出现杂乱分叉&#xff0c;先把 master 分支 rebase 到 dev git分支树就会是整洁的一条直线 git rebase介绍 rebase:翻译成中文是重新设定&#xff0c;…

Windows环境 (Ubuntu 24.04.1 LTS ) 国内镜像,用apt-get命令安装RabbitMQ,java代码样例

一、环境 Windows11 WSL(Ubuntu 24.04.1) 二、思路 1 用Windows中的Ubuntu安装RabbitMQ&#xff0c;贴近Linux的线上环境&#xff1b; 2 RabbitMQ用erlang语言编写的&#xff0c;先安装erlang的运行环境&#xff1b; 2 用Linux的apt-get命令安装&#xff0c;解决软件依赖…