基于jeecgboot的OA日程安排开发(一)

news2024/12/28 22:03:45

日程安排也是OA里的一项重要功能,所以基于jeecgboot开发这个日程安排。

 日程安排主要涉及以下几个方面:

1、数据库方面,主要是分日历与日程

     日历可以分个人日历与工作日历,一般情况下,个人日历只给自己查看,当然也可以考虑把个人日历分享给其它人员查看,工作日历可以让多人分享查看或管理,同时为了区分,可以通过颜色进行区分,不输入所有者与参与者,默认自己就是所有者与参与者。

    通过上面建的日历来建日程,相应的拥所有者或参与者默认就从上面日历继承过来,颜色也一样。

  提醒级别分为1-重要/紧急,2-重要/不紧急,3-不重要/紧急,4-不重要/不紧急。

   提醒时间分为不提醒,提前5分钟,10分钟,15分钟,30分钟,1小时,2小时7种。

    提醒方式分为消息提醒,邮件提醒,短信提醒,微信提醒等4种。

数据库结构如下:

/*
Navicat MySQL Data Transfer

Source Server         : 本地开发虚拟机数据库
Source Server Version : 50721
Source Host           : 192.168.199.151:3306
Source Database       : nbcio-boot

Target Server Type    : MYSQL
Target Server Version : 50721
File Encoding         : 65001

Date: 2023-05-03 12:02:14
*/

SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------
-- Table structure for oa_calendar
-- ----------------------------
DROP TABLE IF EXISTS `oa_calendar`;
CREATE TABLE `oa_calendar` (
  `id` varchar(36) NOT NULL COMMENT 'id',
  `name` varchar(100) NOT NULL COMMENT '名称',
  `remark` text COMMENT '备注',
  `color` varchar(15) NOT NULL COMMENT '颜色',
  `create_by` varchar(50) DEFAULT NULL COMMENT '创建人',
  `create_time` datetime DEFAULT NULL COMMENT '创建日期',
  `update_by` varchar(50) DEFAULT NULL COMMENT '更新人',
  `update_time` datetime DEFAULT NULL COMMENT '更新日期',
  `sys_org_code` varchar(64) DEFAULT NULL COMMENT '所属部门',
  `type` int(10) NOT NULL COMMENT '日历类型',
  `owner` text COMMENT '所属人',
  `taker` text COMMENT '参与人',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- ----------------------------
-- Table structure for oa_schedule
-- ----------------------------
DROP TABLE IF EXISTS `oa_schedule`;
CREATE TABLE `oa_schedule` (
  `id` varchar(36) NOT NULL COMMENT 'id',
  `title` varchar(100) DEFAULT NULL COMMENT '标题',
  `content` text COMMENT '内容',
  `start_time` datetime DEFAULT NULL COMMENT '开始时间',
  `end_time` datetime DEFAULT NULL COMMENT '结束时间',
  `owner` text COMMENT '所属人',
  `taker` text COMMENT '参与人',
  `remind` int(10) DEFAULT NULL COMMENT '提前提醒时间',
  `address` varchar(100) DEFAULT NULL COMMENT '地点',
  `color` varchar(15) DEFAULT NULL COMMENT '颜色',
  `source` varchar(50) DEFAULT NULL COMMENT '来源',
  `level` int(10) DEFAULT NULL COMMENT '优先级',
  `create_by` varchar(50) DEFAULT NULL COMMENT '创建人',
  `create_time` datetime DEFAULT NULL COMMENT '创建日期',
  `update_by` varchar(50) DEFAULT NULL COMMENT '更新人',
  `update_time` datetime DEFAULT NULL COMMENT '更新日期',
  `sys_org_code` varchar(64) DEFAULT NULL COMMENT '所属部门',
  `url` varchar(200) DEFAULT NULL COMMENT '链接',
  `cal_id` varchar(36) DEFAULT NULL COMMENT '日历类型',
  `remind_type` varchar(30) DEFAULT NULL COMMENT '提醒方式',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
 

2、前端组件采用 FullCalendar

     FullCalendar提供了丰富的属性设置和方法调用,开发者可以根据FullCalendar提供的API快速完成一个日历日程的开发。

在package.json增加下面组件

    "@fullcalendar/core": "^5.11.3",
    "@fullcalendar/daygrid": "^5.11.3",
    "@fullcalendar/interaction": "^5.11.3",
    "@fullcalendar/list": "^5.11.3",
    "@fullcalendar/moment": "^5.11.3",
    "@fullcalendar/resource-timeline": "^5.11.3",
    "@fullcalendar/scrollgrid": "^5.11.3",
    "@fullcalendar/timegrid": "^5.11.3",
    "@fullcalendar/vue": "^5.11.2",

考虑到中国农历问题,增加下面组件

"solarday2lunarday": "^1.12.1",

主要使用如下:

<template>
  <div style="background:#FFF;">
    <a-button @click="handleAdd" style="margin-bottom: 20px" type="primary">新建日程</a-button>
    <FullCalendar
      class="fullCalendar"
      @eventDrop="handleDrop"
      ref="fullCalendar"
      :options="calendarOptions"
    />
    <oa-schedule-modal ref="modalForm" @ok="modalFormOk"></oa-schedule-modal>
  </div>
</template>

<script>
import FullCalendar from "@fullcalendar/vue";
import dayGridPlugin from "@fullcalendar/daygrid";
import interactionPlugin from "@fullcalendar/interaction";
import listPlugin from '@fullcalendar/list';
import timeGridPlugin from "@fullcalendar/timegrid";
import momentPlugin from "@fullcalendar/moment";
import resourceTimelinePlugin from "@fullcalendar/resource-timeline";
import scrollgridPlugin from "@fullcalendar/scrollgrid";
var moment = require("moment");
// import calenderFormate from "../utils/calendar";
import calendar from "solarday2lunarday";
import { JeecgListMixin } from '@/mixins/JeecgListMixin';
import OaScheduleModal from './modules/OaScheduleModal';
import { GetList } from '@/api/oa/schedule';
import estar from '../util/estar';


export default {
  mixins:[JeecgListMixin],
  components: {
    FullCalendar, // 像使用自定义组件一样使用
    OaScheduleModal,
  },
  data() {
    return {
      form: {
        title: "",
        start: "",
        end: "",
      },
      isDay: false,
      isWeek: false,
      isMonth: true,
      custom: null,
      day: null,
      week: null,
      month: null,
      findRoom: false,
      calendarApi: null,
      calendarOptions: {
        plugins: [
          dayGridPlugin,
          interactionPlugin,
          listPlugin,
          momentPlugin,
          timeGridPlugin,
          resourceTimelinePlugin,
          scrollgridPlugin,
        ], // 需要用哪个插件引入后放到这个数组里
        // initialDate: new Date(), // 日历第一次加载时显示的初始日期。可以解析为Date的任何职包括ISO8601日期字符串,例如"2014-02-01"。
        initialView: "dayGridMonth", // 日历加载时的初始视图,默认值为'dayGridMonth',可以为任何可用视图的值,如例如'dayGridWeek','timeGridDay','listWeek'
        locale: "zh-cn", // 设置日历的语言,中文为 “zh-cn”
        firstDay: "1", // 设置每周的第一天,默认值取决于当前语言环境,该值为代表星期几的数字,且值必须为整数,星期日=0
        // weekNumberCalculation: 'ISO', // 指定"ISO"结果为ISO8601周数。指定"ISO"将firstDay的默认值更改为1(Monday)
        buttonText: {
          // 文本将显示在headerToolbar / footerToolbar的按钮上。不支持HTML注入。所有特殊字符将被转义。
          today: "今天",
          month: "月",
          week: "周",
          day: "日",
          list: '周列表'
        },

        editable: true,
        eventDrop: this.DropEvent,
        dayMaxEvents: true, // 在dayGrid视图中如果每个单元格事件超出单元格会出现'+more'
        moreLinkContent: "查看更多",
        // 点击+more触发该回调
        moreLinkClick: this.eventLimitClickFun,
        // unselectAuto: true,
        selectable: true, // 允许用户点击或拖拽选中
        // dayHeaderContent: this.columnHeaderHtmlFun,
        headerToolbar: {
          // 在日历顶部定义按钮和标题。将headerToolbar选项设置为false不会显示任何标题工具栏。可以为对象提供属性start/center/end或left/center/right。这些属性包含带有逗号/空格分隔值的字符串。用逗号分隔的值将相邻显示。用空格分隔的值之间会显示一个很小的间隙。
          // right: "today prev next title",
          start: "today prev next",
          end: "dayGridMonth,timeGridWeek,timeGridDay listWeek,custom",
          center: "title",
        },
        //  header :{
        // //   left: "today prev next title",
        //   left: 'today prev next title ',
        //   center: '',
        //   right: "agendaDay,agendaWeek,month,custom",
        //   //   right: 'custom, month,agendaWeek,agendaDay'
        // },
        views: {
          dayGridMonth: {
            displayEventTime: false,
            dayCellContent(item) {
              //console.log("data", item);
              let _date = moment(item.date).format("YYYY-MM-DD");
              let startDate = "";
              _date = _date.split("-");
              startDate = _date[2];
              let _dateF = calendar.solar2lunar(_date[0], _date[1], _date[2]);

              let _dateS = "";

              //console.log("_dateF", _dateF);
              if (startDate[0] == "0") {
                startDate = startDate[1];
              } else {
                startDate = startDate;
              }
              if (_dateF.Term !== "") {
                _dateS = _dateF.Term;
              } else {
                _dateS = _dateF.IDayCn;
              }
              return {
                html: `<p style="letter-spacing: 1px;margin-top: 7.5px;"><label>${startDate}</label><span style="margin-left:2px">${_dateS}</span></p>`,
              };
            },
          },
        },
        // displayEventTime:false,
        eventTimeFormat: {
          // 在每个事件上显示的时间的格式
          hour: "numeric",
          minute: "2-digit",
          hour12: false,
        },
        events: [],
        //eventColor: "#f08f00", // 修改日程背景色
      

        // events: [ // 将在日历上显示的事件对象, events 可以是数组、json、函数。具体可以查看官方文档
        //     title: '标题',
        //     start: '事件开始事件',
        //     end: '事件结束事件', // 这里要注意,end为可选参数,无end参数时该事件仅在当天展示
        //     backgroundColor: '#FDEBC9', // 该事件的背景颜色
        //     borderColor: '#FDEBC9', // 该事件的边框颜色
        //     textColor: '#F9AE26' // 该事件的文字颜色
        // ],
        customButtons: {
          // 定义可在headerToolbar / footerToolbar中使用的自定义按钮
          today: {
            text: "今天", // 按钮的展示文本
            click: this.todayClick, // 点击按钮触发的事件,这里要注意的是当按钮绑定了事件之后该按钮原本自带的事件将会失效
          },
          next: {
            click: this.nextClick,
          },
          prev: {
            click: this.prevClick,
          },
          timeGridDay: {
            text: "日",
            click: this.dayView,
          },
          timeGridWeek: {
            text: "周",
            click: this.weekView,
          },
          dayGridMonth: {
            text: "月",
            click: this.monthView,
          },
        },
        datesSet: this.datesSet,
        eventClick: this.handleEventClick, // 点击事件时,触发该回调
        // eventDrop:this.handleDrop,
        eventMouseEnter: this.handleMouseEnter, // 鼠标悬停在事件上时,触发该回调
        eventMouseLeave: this.handleMouseLeave, // 鼠标移除时,触发该回调
        dateClick: this.handleDateClick, // 当用户单击日期或时间时,触发该回调,触发此回调,您必须加载interaction插件
      },
      startTime: '',
      endTime: '',
    };
  },

界面如下:

 

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

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

相关文章

2023-05-02 动态规划简介

动态规划简介 1 动态规划的基本概念 阶段、状态、决策、策略、状态转移方程 1) 阶段和阶段变量 将问题的全过程恰当地分成若干个相互联系的阶段闫氏DP分析法&#xff1a;对应f[i][j]的ij遍历时形成的所有f[i][j]阶段的划分一般根据时间和空间的自然特征去划分阶段的划分便于把…

Nginx原理解析

master和worker 当linux启动的时候&#xff0c;会有两个和nginx相关的进程&#xff0c;一个是master,一个是worker。 master如何工作 当客户端发送请求到nginx之后&#xff0c;master会接收到这个请求&#xff0c;然后通知所有的worker进程&#xff0c;此时&#xff0c;work…

【STL十六】函数对象:包装器(std::function)——绑定器(std::bind)——函数适配器

【STL十六】函数对象&#xff1a;包装器(std::function&#xff09;——绑定器&#xff08;std::bind&#xff09;——函数适配器 一、包装器(std::function&#xff09;1、简介2、头文件3、构造函数4、demo5、异常 二、绑定器&#xff08;std::bind&#xff09;1、简介2、头文…

Nessus漏洞扫描以及OpenSSH漏洞修复验证

主机IP地址资源kali192.168.200.1285GB内存/4CPUCentOS7.5192.168.200.1292GB内存/2CPU https://www.tenable.com/downloads/nessus?loginAttemptedtrue curl --request GET \--url https://www.tenable.com/downloads/api/v2/pages/nessus/files/Nessus-10.5.1-ubuntu1404_am…

云原生Istio案例实战

目录 1 Istio监控功能1.1 prometheus和grafana1.2 访问prometheus1.3 访问grafana 2 项目案例&#xff1a;bookinfo2.1 理解什么是bookinfo2.2 sidecar自动注入到微服务2.3 启动bookinfo2.4 通过ingress方式访问2.5 通过istio的ingressgateway访问2.5.1 确定 Ingress 的 IP 和端…

计算机视觉--图像拼接

图像拼接 单应性变换仿射变换图像扭曲实现图像嵌入&#xff08;图中图&#xff09; RANSAC算法算法介绍图片收集无RANSAC优化和有RANSAC优化的代码实现差别 总结 单应性变换 单应性变换是指一个平面上的点通过一个矩阵变换映射到另一个平面上的点&#xff0c;这个变换矩阵是一…

java聊天室的设计与实现代码

聊天室是一个简单的通信应用&#xff0c;可以帮助您与客户和朋友保持联系&#xff0c;并且可以让您更轻松地与其他员工联系。然而&#xff0c;您将不得不确保每个人都知道他们正在做什么。 一旦聊天室开始&#xff0c;它就会变得非常复杂&#xff0c;因为有许多用户可能会同时登…

【三十天精通Vue 3】第二十五天 Vue3 与 Axios 后端数据交互

✅创作者&#xff1a;陈书予 &#x1f389;个人主页&#xff1a;陈书予的个人主页 &#x1f341;陈书予的个人社区&#xff0c;欢迎你的加入: 陈书予的社区 &#x1f31f;专栏地址: 三十天精通 Vue 3 文章目录 引言一、Vue3 与 Axios 概述二、Axios 安装与基本使用2.1 安装 Ax…

NECCS|全国大学生英语竞赛C类|词汇和语法|语法题|时态|22:30~11:44

15题 10min 10:20&#xff5e;10:25 test2 10:25&#xff5e;10:47 test1订正 10:44&#xff5e;11:47 理论学习 涉及的语法点主要包括&#xff1a; 动词的时态和语态 非谓语动词 虚拟语气 主谓一致 倒装句 强调句 比较级 名词性从句 定语…

【SQL篇】面试篇之子查询

1303 求团队人数 # 写法1 # Write your MySQL query statement below select employee_id, count(*) over(partition by team_id) as team_size from Employee# 写法2 # Write your MySQL query statement below select employee_id, team_size from Employee e join (select t…

优雅编程,从空格、空行、缩进、注释开始

很多初学者的代码其实都不够“漂亮”&#xff0c;那是因为没有养成好的编码习惯。本篇博客以C语言为例&#xff0c;总结一些好习惯。其实&#xff0c;很多习惯都是肌肉记忆&#xff0c;举个例子&#xff1a;请你写一个程序&#xff0c;输入2个整数并输出它们的和。有些朋友可能…

springboot+vue前后端分离项目打包成jar包及运行

将 Spring Boot 和 Vue.js 项目打包成 jar 包需要按照以下步骤操作&#xff1a; 在项目的根目录中&#xff0c;使用命令行进入 Vue.js 项目的根目录&#xff0c;然后运行以下命令&#xff1a; npm run build这个命令将会构建 Vue.js 项目&#xff0c;并在项目的 dist 目录中生…

Rust-Rocket框架笔记

Rust-Rocket框架笔记 Rocket-Learn-docRocket Addr视频地址 What is RocketQuickStart下载Rocket-Rust运行Rust-Rocket-Hello-错误-端口占用解决查看端口占用情况添加Rocket.toml配置文件更改Rocket默认启动端口启动成功 GetStart-Hello world创建项目cargoIDEA 添加依赖添加Ro…

使用eclipse创建一个图书管理系统(2)---------逻辑的实现

就像使用C语言写代码一样。比如要用​​​​​​C语言写一个小游戏的代码&#xff0c;我们的逻辑实现是在哪里实现的啊&#xff1f;是不是在一个test.c源文件里面啊&#xff1f;没错&#xff0c;就是的&#xff01;在之前的文章里&#xff0c;我说过我定义的Main函数就像C语言里…

【《中国工业经济》数据复现】数字化转型与企业分工:专业化还是纵向一体化

一.研究内容 本文使用机器学习方法刻画微观企业数字化水平&#xff0c;并在构建数理模型的基础上实证考察了企业数字化转型对企业分工的影响及其机理。结果表明&#xff0c;企业数字化转型显著提升了中国上市企业专业化分工水平。机制分析表明&#xff0c;数字化转型对企业专业…

实现chatgpt自然对话

1.概述 ChatGPT是当前自然语言处理领域的重要进展之一&#xff0c;通过预训练和微调的方式&#xff0c;ChatGPT可以生成高质量的文本&#xff0c;可应用于多种场景&#xff0c;如智能客服、聊天机器人、语音助手等。本文将详细介绍ChatGPT的原理、实战演练和流程图&#xff0c…

C/C++每日一练(20230503)

目录 1. 输出最长的递增数字字符串 &#x1f31f;&#x1f31f; 2. 缺失的第一个正数 &#x1f31f;&#x1f31f;&#x1f31f; 3. 最大矩形 &#x1f31f;&#x1f31f;&#x1f31f; &#x1f31f; 每日一练刷题专栏 &#x1f31f; Golang每日一练 专栏 Python每日…

SaaS模医学检验信息管理系统源码,系统预设几十种报告模板,可在几分钟内批量生成报告

实验室信息管理系统云LIS源码 SaaS模式运维管理系统 云LIS系统源码是一款全面的实验室信息管理系统源码&#xff0c;其主要功能包括样本管理、检测项目管理、质控管理、报告管理、数据分析、两癌筛查等多个方面。具有独立的配套SaaS模式运维管理系统&#xff0c;支持远程运维&…

Redis高频面试题,使用场景

一、缓存 1、什么是缓存穿透 ? 怎么解决 ? 缓存穿透 查询一个不存在的数据&#xff0c;mysql查询不到数据也不会直接写入缓存&#xff0c;就会导致每次请求都查数据库。 解决 方案一&#xff1a;缓存空数据&#xff0c;查询返回的数据为空&#xff0c;仍把这个空结果进行…

《花雕学AI》28:革命性的 ChatGPT for SEO——让您的排名飙升 50%!

引言&#xff1a; 如果您想写篇有吸引力的文章&#xff0c;或者您是一个博客和网站的拥有者&#xff0c;那么您一定知道 SEO&#xff08;搜索引擎优化&#xff09;的重要性。SEO 可以帮助您提高相应的流量、转化率和收入&#xff0c;但是 SEO 也是一个复杂和耗时的过程&#x…