first commit

This commit is contained in:
2026-09-20 15:46:34 +08:00
parent 72fb5eae10
commit e558339dcc
3340 changed files with 671310 additions and 251 deletions
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1,208 @@
/*!
* FullCalendar v3.6.1 Print Stylesheet
* Docs & License: https://fullcalendar.io/
* (c) 2017 Adam Shaw
*/
/*
* Include this stylesheet on your page to get a more printer-friendly calendar.
* When including this stylesheet, use the media='print' attribute of the <link> tag.
* Make sure to include this stylesheet IN ADDITION to the regular fullcalendar.css.
*/
.fc {
max-width: 100% !important;
}
/* Global Event Restyling
--------------------------------------------------------------------------------------------------*/
.fc-event {
background: #fff !important;
color: #000 !important;
page-break-inside: avoid;
}
.fc-event .fc-resizer {
display: none;
}
/* Table & Day-Row Restyling
--------------------------------------------------------------------------------------------------*/
.fc th,
.fc td,
.fc hr,
.fc thead,
.fc tbody,
.fc-row {
border-color: #ccc !important;
background: #fff !important;
}
/* kill the overlaid, absolutely-positioned components */
/* common... */
.fc-bg,
.fc-bgevent-skeleton,
.fc-highlight-skeleton,
.fc-helper-skeleton,
/* for timegrid. within cells within table skeletons... */
.fc-bgevent-container,
.fc-business-container,
.fc-highlight-container,
.fc-helper-container {
display: none;
}
/* don't force a min-height on rows (for DayGrid) */
.fc tbody .fc-row {
height: auto !important; /* undo height that JS set in distributeHeight */
min-height: 0 !important; /* undo the min-height from each view's specific stylesheet */
}
.fc tbody .fc-row .fc-content-skeleton {
position: static; /* undo .fc-rigid */
padding-bottom: 0 !important; /* use a more border-friendly method for this... */
}
.fc tbody .fc-row .fc-content-skeleton tbody tr:last-child td { /* only works in newer browsers */
padding-bottom: 1em; /* ...gives space within the skeleton. also ensures min height in a way */
}
.fc tbody .fc-row .fc-content-skeleton table {
/* provides a min-height for the row, but only effective for IE, which exaggerates this value,
making it look more like 3em. for other browers, it will already be this tall */
height: 1em;
}
/* Undo month-view event limiting. Display all events and hide the "more" links
--------------------------------------------------------------------------------------------------*/
.fc-more-cell,
.fc-more {
display: none !important;
}
.fc tr.fc-limited {
display: table-row !important;
}
.fc td.fc-limited {
display: table-cell !important;
}
.fc-popover {
display: none; /* never display the "more.." popover in print mode */
}
/* TimeGrid Restyling
--------------------------------------------------------------------------------------------------*/
/* undo the min-height 100% trick used to fill the container's height */
.fc-time-grid {
min-height: 0 !important;
}
/* don't display the side axis at all ("all-day" and time cells) */
.fc-agenda-view .fc-axis {
display: none;
}
/* don't display the horizontal lines */
.fc-slats,
.fc-time-grid hr { /* this hr is used when height is underused and needs to be filled */
display: none !important; /* important overrides inline declaration */
}
/* let the container that holds the events be naturally positioned and create real height */
.fc-time-grid .fc-content-skeleton {
position: static;
}
/* in case there are no events, we still want some height */
.fc-time-grid .fc-content-skeleton table {
height: 4em;
}
/* kill the horizontal spacing made by the event container. event margins will be done below */
.fc-time-grid .fc-event-container {
margin: 0 !important;
}
/* TimeGrid *Event* Restyling
--------------------------------------------------------------------------------------------------*/
/* naturally position events, vertically stacking them */
.fc-time-grid .fc-event {
position: static !important;
margin: 3px 2px !important;
}
/* for events that continue to a future day, give the bottom border back */
.fc-time-grid .fc-event.fc-not-end {
border-bottom-width: 1px !important;
}
/* indicate the event continues via "..." text */
.fc-time-grid .fc-event.fc-not-end:after {
content: "...";
}
/* for events that are continuations from previous days, give the top border back */
.fc-time-grid .fc-event.fc-not-start {
border-top-width: 1px !important;
}
/* indicate the event is a continuation via "..." text */
.fc-time-grid .fc-event.fc-not-start:before {
content: "...";
}
/* time */
/* undo a previous declaration and let the time text span to a second line */
.fc-time-grid .fc-event .fc-time {
white-space: normal !important;
}
/* hide the the time that is normally displayed... */
.fc-time-grid .fc-event .fc-time span {
display: none;
}
/* ...replace it with a more verbose version (includes AM/PM) stored in an html attribute */
.fc-time-grid .fc-event .fc-time:after {
content: attr(data-full);
}
/* Vertical Scroller & Containers
--------------------------------------------------------------------------------------------------*/
/* kill the scrollbars and allow natural height */
.fc-scroller,
.fc-day-grid-container, /* these divs might be assigned height, which we need to cleared */
.fc-time-grid-container { /* */
overflow: visible !important;
height: auto !important;
}
/* kill the horizontal border/padding used to compensate for scrollbars */
.fc-row {
border: 0 !important;
margin: 0 !important;
}
/* Button Controls
--------------------------------------------------------------------------------------------------*/
.fc-button-group,
.fc button {
display: none; /* don't display any button-related controls */
}
@@ -0,0 +1,35 @@
* {
padding: 0;
margin: 0;
}
html, body {
position: relative;
/*width: 100%;
height: 100%;*/
}
#calendar {
max-width: 1200px;
margin: 20px auto 0;
}
.green {
color: #FFFFFF;
background-color: #369a5f;
border: 1px solid #257e4a;
}
.yellow {
color: #FFFFFF;
background-color: #f3b20f;
border: 1px solid #af7d00;
}
.red {
color: #FFFFFF;
background-color: #ea5454;
border: 1px solid #b11616;
}
@@ -0,0 +1,33 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta content="IE=edge" http-equiv="X-UA-Compatible">
<meta content="width=device-width, initial-scale=1" name="viewport">
<title>jQuery日历插件FullCalendar中文版</title>
<link href="https://www.jq22.com/jquery/bootstrap-3.3.4.css" rel="stylesheet">
<link href="css/fullcalendar.css" rel="stylesheet" type="text/css"/>
<link href="css/index.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<header class="nav">
</header>
<!-- 主体 -->
<div class="main">
<div id="calendar"></div>
</div>
<script src="https://www.jq22.com/jquery/jquery-1.10.2.js"></script>
<script src="js/bootstrap.min.js" type="text/javascript"></script>
<script src="js/moment.min.js" type="text/javascript"></script><!-- 日期处理时间工具 -->
<script src="js/fullcalendar.min.js" type="text/javascript"></script>
<script src="js/index.js" type="text/javascript"></script>
<script>
</script>
</body>
</html>
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1,254 @@
$(function () {
var get = '2020-05-14';
// $("#calendar").fullCalendar({
var calendar = $('#calendar').fullCalendar({
header: { //设置日历头部信息,false,则不显示头部信息。包括left,center,right左中右三个位置
left: 'prev,next, today', //上一个、下一个、今天
center: 'title', //标题
right: 'month,agendaWeek,agendaDay,listMonth' //月、周、日、日程列表
},
locale: 'zh-cn', //?没用?
timeFormat: 'HH:mm', //日程事件的时间格式
// timeFormat: 'HH:mm{ - H:mm}',{agenda: ‘h:mm{ - h:mm}}
buttonText: { //各按钮的显示文本信息
today: '今天',
month: '月',
agendaWeek: '周',
agendaDay: '日',
listMonth: '日程',
},
// columnFormat: {
// month: 'dddd',
// week: 'dddd M-d',
// day: 'dddd M-d'
// },
// titleFormat: {
// month: 'yyyy年 MMMM月',
// week: "[yyyy年] MMMM月d日 { '&#8212;' [yyyy年] MMMM月d日}",
// day: 'yyyy年 MMMM月d日 dddd',
// },
monthNames: ["1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月"], //月份全称
monthNamesShort: ["1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月"], //月份简写
dayNames: ["周日", "周一", "周二", "周三", "周四", "周五", "周六"], //周全称
dayNamesShort: ["周日", "周一", "周二", "周三", "周四", "周五", "周六"], //周简写
noEventsMessage: "当月无数据", //listview视图下,无数据提示
allDayText: "全天", //自定义全天视图的名称
allDaySlot: false, //是否在周日历上方显示全天
// allDayDefault: false, //是否为全天日程事件,显示这一天中所做的事情
slotDuration: "00:30:00", //一格时间槽代表多长时间,默认00:30:00(30分钟)
slotLabelFormat: "H(:mm)a", //日期视图左边那一列显示的每一格日期时间格式
slotLabelInterval: "01:00:00", //日期视图左边那一列多长间隔显示一条日期文字(默认跟着slotDuration走的,可自定义)
snapDuration: "01:00:00", //其实就是动态创建一个日程时,默认创建多长的时间块
firstDay: 1, //一周中显示的第一天是哪天,周日是0,周一是1,类推
hiddenDays: [], //隐藏一周中的某一天或某几天,数组形式,如隐藏周二和周五:[2,5],默认不隐藏,除非weekends设置为false。
weekends: true, //是否显示周六和周日,设为false则不显示周六和周日。默认值为true
weekMode: 'fixed', //月视图里显示周的模式,因每月周数不同月视图高度不定。fixed:固定显示6周高,日历高度保持不变liquid:不固定周数,高度随周数变化variable:不固定周数,但高度固定
weekNumbers: false, //是否在日历中显示周次(一年中的第几周),如果设置为true,则会在月视图的左侧、周视图和日视图的左上角显示周数。
weekNumberCalculation: 'iso', //周次的显示格式。
height: 800, //设置日历的高度,包括header日历头部,默认未设置,高度根据aspectRatio值自适应。
// contentHeight: 600, //设置日历主体内容的高度,不包括header部分,默认未设置,高度根据aspectRatio值自适应。
handleWindowResize: true, //是否随浏览器窗口大小变化而自动变化。
defaultView: 'month', //初始化时默认视图,默认是月month,agendaWeek是周,agendaDay是当天
// slotEventOverlap: false, //事件是否可以重叠覆盖
defaultDate: get, //默认显示那一天的日期视图getDates(true)2020-05-10
nowIndicator: true, //周/日视图中显示今天当前时间点(以红线标记),默认false不显示
eventLimit: false, //数据条数太多时,限制显示条数(多余的以“+2more”格式显示),默认false不限制,支持输入数字设定固定的显示条数
eventLimitText: "更多", //当一块区域内容太多以"+2 more"格式显示时,这个more的名称自定义(应该与eventLimit: true一并用)
dayPopoverFormat: "YYYY年M月d日", //点开"+2 more"弹出的小窗口标题,与eventLimitClick可以结合用
render: function (view) { //method,绑定日历到id上。$('#id').fullCalendar('render');
console.log('render', view)
},
// events: function(start, end, timezone, callback){
// $.ajax({
// type : "",
// url : "",
// dateType:'json',
// data:{
// 'id': id,
// 'status': status,
// 'startTime': status,
// 'endTime': endTime,
// 'duration': duration,
// '': ,
// },
// success : function(data) {
// callback(data);
// if (data != null && data.length > 0) {
// for(var i= 0; i < data.length; i ++) {
// //状态判断???
// //颜色区分???
// }
// },
// });
// },
// events: {
// url: 'json/events.json',
// error: function () {
// alert("000");
// }
// },
events: [
{
"title": "可以直接加跳转链接",
"start": "2020-05-13T09:00:00",
"end": "2020-05-13T14:00:00",
"duration": "03:00",
"url": "https://www.baidu.com/",
"className": "green"
}, {
"title": "标题123",
"start": "2020-05-13T12:00:00",
"end": "2020-05-14T13:00:00",
"duration": "05:00",
"className": "yellow"
}, {
"title": "标题456",
"start": "2020-05-16T10:30:00",
"end": "2020-05-16T12:30:00",
"className": "red"
}, {
"title": "标题789",
"start": "2020-05-16T12:00:00",
"end": "2020-05-16T14:00:00",
"className": "red"
}, {
"title": "标题233333333",
"start": "2020-05-16T14:30:00",
"end": "2020-05-16T16:00:00",
"className": "red"
}, {
"title": "标题45645655",
"start": "2020-05-16T17:30:00",
"end": "2020-05-16T20:00:00",
"className": "red"
}, {
"title": "标题1234567890",
"start": "2020-05-16T20:00:00",
"end": "2020-05-16T23:00:00",
"className": "red"
}, {
"start": "2020-05-06",
"end": "2020-05-13",
"overlap": false,
"rendering": "background",
"color": "#cccccc"
},
],
dayClick: function (date, allDay, jsEvent, view) { //空白的日期区点击
// alert($.fullCalendar.formatDate(date, "YYYY-MM-DD"));
// console.log('Clicked on: ' + date.format());
},
eventClick: function (event, jsEvent) { //日程事件点击
alert(event.title + event.start.format() + '______' + event.end.format() + '_______' + " ——详情");
//状态判断???
//权限限制???
},
eventMouseover: function () {
}, //鼠标划过和离开的事件,用法和参数同上
eventMouseout: function () {
},
selectable: true, //是否允许通过单击或拖动选择日历中的对象,包括天和时间
selectHelper: true, //当点击或拖动选择时间时,是否预先画出“日程区块”的样式显示默认加载的提示信息,该属性只在周/天视图里可用
selectMirror: true, //镜像
selectOverlap: false, //是否允许选择被事件占用的时间段,默认true可占用时间段
selectAllow: function (selectInfo) { //精确的控制可以选择的地方,返回true则表示可选择,false表示不可选择
console.log("start:" + selectInfo.start.format() + "|end:" + selectInfo.end.format() + "|resourceId:" + selectInfo.resourceId);
return true;
},
select: function (start, end, allDay) { //点击空白区域/选择区域内容触发
// window.location.href= 'apply.html?start=' + start.format() + '?end=' + end.format();
var title = prompt(start.format() + '————' + end.format() + '标题标题:');
if (title) {
calendar.fullCalendar('renderEvent', { //一旦日历重新取得日程源,则原有日程将消失,当指定stick为true时,日程将永久的保存到日历上
title: title,
start: start,
end: end,
allDay: allDay,
// rendering: 'background',
block: true,
}, true); //为true时,日程将永久的保存到日历上,让事件“持久”
}
// calendar.unselect()
},
// select: function(startDate, endDate, allDay, jsEvent, view ) { //被选中
//// startDate:被选中区域的开始时间
//// endDate:被选中区域的结束时间
//// allDay:是否为全天事件
//// jsEvent:jascript对象
//// view:当前视图对象
// var selectStart = $.fullCalendar.formatDate(startDate,'YYYY-MM-DD HH:mm');
// var selectEnd =$.fullCalendar.formatDate(endDate,'YYYY-MM-DD HH:mm');
// alert(selectStart + ' 至 ' + selectEnd);
// $("#calendar").fullCalendar('renderEvent',true);
// },
unselect: function (view, jsEvent) { //选择取消时触发
console.log("");
console.log("view:" + view);
},
lazyFetching: true, //是否启用懒加载技术--即只取当前条件下的视图数据,其它数据在切换时触发,默认true只取当前视图的,false是取全视图的
defaultTimedEventDuration: "02:00:00", //在Event Object中如果没有end参数时使用,如start=7:00pm,则该日程对象时间范围就是7:00~9:00
defaultAllDayEventDuration: {days: 1}, //默认1天是多长,(有的是采用工作时间模式,所以支持自定义)
// loading: function(isLoading, view) {
// document.getElementById('加载').style.display =
// isLoading ? 'block' : 'none';
// console.log("");
// if(isLoading == true){
// console.log("view:"+view+",开始加载");
// }else if(isLoading == false){
// console.log("view:"+view+",加载完成");
// }else{
// console.log("view:"+view+",除非天塌下来否则不会进这个分支");
// }
// },
editable: true, //支持日程拖动修改,默认false
// eventStartEditable : true, //日程开始时间可以改变,默认true,如果是false其实就是指日程块不能随意拖动,只能上下拉伸改变他的endTime
// eventDurationEditable : false, //日程的开始结束时间距离是否可以改变,默认true,如果是false则表示开始结束时间范围不能拉伸,只能拖拽
dragOpacity: 0.2, //拖拽时不透明度,0.0~1.0之间,数字越小越透明
dragScroll: true, //是否在拖拽时自动移动容器,默认true
eventOverlap: true, //拖拽时是否重叠
eventConstraint: { //限制拖拽拖放的位置(即限制有些地方拖不进去)t
// start: '10:00', //开始时间10点
// end: '18:00', //结束时间18点
dow: [1, 2, 3, 4, 5, 6, 0] //0是周日,1是周一,以此类推
},
longPressDelay: 1000, //移动设备,长按多少毫秒即可拖动,默认1000毫秒(1S)
eventDragStart: function (event, jsEvent, ui, view) { //日程开始拖拽时触发
// console.log("eventDragStart():"+event.title);
},
eventDragStop: function (event, jsEvent, ui, view) { //日程拖拽停止时触发
// console.log("eventDragStop():"+event.title);
},
eventDrop: function (event, dayDelta, delta, revertFunc, jsEvent, ui, view) { //日程拖拽停止,并且时间改变时触发,ayDelta日程前后移动了多少天
// console.log("eventDrop():"+event.title);
console.log('eventDrop被执行,Event的title是:', event.title);
if (dayDelta._days != 0) {
console.log('eventDrop被执行,Event的start和end时间改变了:', dayDelta._days + '天!');
} else if (dayDelta._milliseconds != 0) {
console.log('eventDrop被执行,Event的start和end时间改变了:', dayDelta._milliseconds / 1000 + '秒!');
} else {
console.log('eventDrop被执行,Event的start和end时间没有改变!');
}
//revertFunc();
},
eventResizeStart: function (event, jsEvent, ui, view) { //日程大小调整开始时触发
// console.log("eventResizeStart():"+event.title);
},
eventResizeStop: function (event, jsEvent, ui, view) { //日程大小调整停止时触发
// console.log("eventResizeStop():"+event.title);
},
eventResize: function (event, delta, revertFunc, jsEvent, ui, view) { //日程大小调整完成并已经执行更新时触发
// console.log("eventResize():"+event.title);
},
});
// calendar.render();
// calendar.refetchEvents(); //重新抓取所有事件,刷新
})
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1,107 @@
[
{
"title": "自动化蛋白质结晶机器人(左) 蛋白点样",
"start": "2020-05-13T09:00:00",
"end": "2020-05-13T14:00:00",
"duration": "03:00",
// "url": "https://www.baidu.com/",
"className": "green"
},
{
"title": "超速离心机 超速离心",
"start": "2020-05-13T12:00:00",
"end": "2020-05-14T13:00:00",
"duration": "05:00",
"className": "yellow"
},
{
"title": "生物传感器 蛋白相互作用",
"start": "2020-05-16T10:30:00",
"end": "2020-05-16T12:30:00",
"className": "red"
},
{
"title": "自动化蛋白质结晶机器人(右) 蛋白点样",
"start": "2020-05-16T12:00:00",
"end": "2020-05-16T14:00:00",
"className": "red"
},
{
"title": "荧光定量PCR仪 QPCR",
"start": "2020-05-16T14:30:00",
"end": "2020-05-16T16:00:00",
"className": "red"
},
{
"title": "等温滴定微量热仪MicroCal PEAQ-ITC",
"start": "2020-05-16T17:30:00",
"end": "2020-05-16T20:00:00",
"className": "red"
},
{
"title": "等温滴定微量热仪 ITC",
"start": "2020-05-16T20:00:00",
"end": "2020-05-16T23:00:00",
"className": "red"
},
{
"start": "2020-05-06",
"end": "2020-05-13",
"overlap": false,
"rendering": "background",
"color": "#cccccc"
},
{
"title": "的工号的份更好的沟通好的发货",
"start": "2020-05-01"
},
{
"title": "地方好地方更好发挥下",
"start": "2020-05-07",
"end": "2020-05-10"
},
{
"id": "999",
"title": "大概还差个很幸福挺好就好快",
"start": "2020-05-09T16:00:00-05:00"
},
{
"id": "999",
"title": "改好价格发货就好几个分575675675",
"start": "2020-05-16T16:00:00-05:00"
},
{
"title": "吉林路可顾会计",
"start": "2020-05-11",
"end": "2020-05-13"
},
{
"title": "仿古街fit这首歌这首歌",
"start": "2020-05-12T10:30:00-05:00",
"end": "2020-05-12T12:30:00-05:00"
},
{
"title": "到合适的土壤",
"start": "2020-05-12T12:00:00-05:00"
},
{
"title": "他与人体结构和电话",
"start": "2020-05-12T14:30:00-05:00"
},
{
"title": "防护服就带孩子在好",
"start": "2020-05-12T17:30:00-05:00"
},
{
"title": "提货付款明细名字电话",
"start": "2020-05-12T20:00:00"
},
{
"title": "xthr6irkmdxzz",
"start": "2020-05-13T07:00:00-05:00"
},
{
"title": "都挺好的你觉得夏天回家",
"start": "2020-05-28"
}
]