发布测试版 2.5.0

This commit is contained in:
2021-11-28 12:06:10 +08:00
parent 672cc966db
commit 8408038188
807 changed files with 94347 additions and 47563 deletions
@@ -67,8 +67,8 @@ function InitCalendar(sources)
allDayText:'全天',
slotLabelFormat: 'HH:mm',
timeFormat: 'HH:mm',
minTime:'07:00:00',
maxTime:'23:00:00',
//minTime:'07:00:00',
//maxTime:'23:00:00',
titleRangeSeparator:' - ',
monthNames: ['一月','二月','三月','四月','五月','六月','七月','八月','九月','十月','十一月','十二月'],
monthNamesShort: ['1月','2月','3月','4月','5月','6月','7月','8月','9月','10月','11月','12月'],
@@ -87,13 +87,11 @@ function InitCalendar(sources)
});
},
viewRender:function(view) {
/*
window.clearInterval(timelineInterval);
timelineInterval = window.setInterval(function() {
timeLine(view);
}, 10000);
timeLine(view);
*/
},
loading:function(status, view) {
if (status) {
@@ -105,33 +103,29 @@ function InitCalendar(sources)
// 改变大小事件 event, dayDelta, minuteDelta, revertFunc
eventResize: function(event, delta, revertFunc) {
if(auth_id == user_id) {
if (auth_id == user_id) {
resizeEvent(event, delta, revertFunc);
} else {
toastrError('不能给下属调整事件。');
revertFunc();
}
},
// 拖动事件
eventDrop: function(event, delta, revertFunc) {
if(auth_id == user_id) {
if (auth_id == user_id) {
moveEvent(event, delta, revertFunc);
} else {
toastrError('不能给下属移动事件。');
revertFunc();
}
},
// 点击事件
eventClick: function(event, jsEvent, view) {
if(event.shared == true) {
if (event.shared == true) {
viewEvent(event, jsEvent, view);
} else if(auth_id == event.userid) {
if(event.id > 0) {
} else if (auth_id == event.userid) {
if (event.id > 0) {
editEvent(event, jsEvent, view);
} else {
addEvent(event, jsEvent, view);
@@ -143,8 +137,7 @@ function InitCalendar(sources)
// 选择后弹出
select: function(start, end, jsEvent, view) {
if(auth_id == user_id) {
if (auth_id == user_id) {
addEvent({start: start, end: end}, jsEvent, view);
} else {
toastrError('不能给下属添加事件。');
@@ -155,7 +148,6 @@ function InitCalendar(sources)
if(view.type == 'listMonth') {
return;
}
overlay.find('#overlay-title').text(calEvent.title);
overlay.find('#overlay-start').text(calEvent.start.format());
overlay.find('#overlay-end').text(calEvent.end.format());
@@ -207,7 +199,7 @@ function timeLine(curView) {
var timeline = parentDiv.children(".timeline");
if (timeline.length == 0) {
//添加时间线标签
// 添加时间线标签
timeline = $("<hr>").addClass("timeline");
parentDiv.prepend(timeline);
}
@@ -222,7 +214,7 @@ function timeLine(curView) {
var percentOfDay = curSeconds / 86400;
var topPos = Math.floor(parentDiv.height() * percentOfDay);
timeline.css("top", topPos+"px");
timeline.css("top", topPos + "px");
// 周视图时设置时间线的位置和宽度
if (curView.name == "agendaWeek") {
@@ -332,8 +324,8 @@ function moveEvent(event, delta, revertFunc)
function editEvent(event, jsEvent, view)
{
var data = dateFormat(event);
data.id = event.id;
data.title = event.title;
data.id = event.id;
data.title = event.title;
data.location = event.location;
data.description = event.description;
data.lastmodified = event.lastmodified;
@@ -351,7 +343,6 @@ function editEvent(event, jsEvent, view)
text: '提交',
'class': 'btn-info',
click: function() {
var $this = $(this);
if ($('#title').val().length == 0) {
toastrError('主题必须填写。');
@@ -461,15 +452,16 @@ function getCalendars(callback)
if(this.active == 1) {
var checkbox = 'checked';
}
if(this.id == 'shared') {
var checkbox = 'checked disabled';
var checkbox = 'checked';
}
rows.push('<li class="list-group-item">'+ edit +'<label class="checkbox-inline"><input data-calendar="active" data-id="'+this.id+'" type="checkbox" '+checkbox+' /> <span class="text" style="color:'+this.calendarcolor+'">'+this.displayname+'</span></label></li>');
});
rows.push('</ul>');
$('#calendars').html(rows.join(''));
if(callback) {
if (callback) {
callback(res.data.sources);
}
});
@@ -520,7 +512,7 @@ $(function() {
#loading { background:red; color:#fff; padding:3px; position:absolute; top:5px;right:5px;z-index:9999;}
.category .tree ul {padding:5px 0;}
.category .tree ul { padding:5px 0; }
.category .tree ul li.me {padding:5px; color:#666;}
.category .tree ul li ul {padding:5px 0 0;}
.category .tree ul li ul li {padding:5px 5px 0 5px; border:0;border-top:1px solid #eee;}
@@ -542,13 +534,13 @@ $(function() {
<div class="tree">
<ul class="list-group">
<li class="list-group-item"><strong>下属日历</strong></li>
@if($underling['role'])
@foreach($underling['role'] as $role_id => $role)
<li class="list-group-item">
{{$role['title']}}
<i class="fa fa-angle-down"></i> {{$role['name']}}
<ul>
@if($underling['user'][$role_id])
@foreach($underling['user'][$role_id] as $user)
@@ -0,0 +1,189 @@
<div class="gdoo-list-grid">
<div id="widget_calendar_datetime" class="m-t-xs"></div>
@verbatim
<div class="b-t" id="widget_calendar_event_list" style="width:100%;height:200px;">
<div v-for="row in data.dayEvents">
<li class="calendar-day-event">
<div v-if="row.allday" class="day-tag">
<span title="全天">全天</span>
</div>
<div class="day-tag time-tag" v-else>
<span :title="row.start">{{row.start}}</span>
<span :title="row.end">{{row.end}}</span>
</div>
<div class="title-tag" v-if="row.allday" :title="row.title">
<div class="text_overflow" style="cursor:pointer;">{{row.title}}</div>
<i class="text_overflow">{{row._start}} - {{row._end}}&nbsp;&nbsp;</i>
</div>
<div class="title-tag title-time-tag" v-else :title="row.title">
<div class="text_overflow" style="cursor:pointer;">{{row.title}}</div>
</div>
</li>
</div>
</div>
@endverbatim
</div>
<style>
#widget_calendar_event_list {
overflow: hidden;
overflow-y: auto;
padding: 5px;
}
.calendar-day-event {
list-style: none;
position: relative;
border-bottom: 1px solid #efefef;
padding: 6px 0 0;
height: 44px;
}
.calendar-day-event .day-tag {
position: absolute;
left: 0;
top: 6px;
width: 46px;
border-right: 2px solid #53aaff;
height: 30px;
text-align: center;
line-height: 30px;
}
.calendar-day-event .time-tag {
line-height: 14px;
}
.calendar-day-event .day-tag span {
display: block;
white-space: nowrap;
text-overflow: ellipsis;
overflow: hidden;
}
.calendar-day-event .title-tag {
position: absolute;
padding-left: 56px;
margin: 0;
}
.calendar-day-event .title-time-tag {
line-height: 30px;
height: 30px;
}
.calendar-day-event .title-tag i {
line-height: 14px;
height: 14px;
overflow: hidden;
font-size: 12px;
margin: 0;
padding: 0;
font-style: normal;
color: #999;
}
</style>
<script>
$.fn.datetimepicker.Constructor.Default = $.extend({}, $.fn.datetimepicker.Constructor.Default, {
dayViewHeaderFormat:'YYYY年MM月',
icons: {
today: 'fa fa-caret-square-o-right',
clear: 'fa fa-trash-o',
close: 'fa fa-close',
time: "fa fa-clock-o",
date: "fa fa-calendar-check-o",
up: "fa fa-arrow-up",
down: "fa fa-arrow-down",
previous: 'fa fa-angle-left',
next: 'fa fa-angle-right',
},
tooltips:{
today: '今天',
time: '时间',
clear: '清除',
close: '关闭',
selectMonth: '选择月份',
prevMonth: '上个月',
nextMonth: '下个月',
selectYear: '选择年份',
prevYear: '上一年',
nextYear: '下一年',
selectDecade: '选择时期',
prevDecade: '上个年代',
nextDecade: '下个年代',
prevCentury: '上个世纪',
nextCentury: '下个世纪',
incrementHour: '增加一小时',
pickHour: '选择小时',
decrementHour:'减少一小时',
incrementMinute: '增加一分钟',
pickMinute: '选择分',
decrementMinute:'减少一分钟',
incrementSecond: '增加一秒',
pickSecond: '选择秒',
decrementSecond:'减少一秒'
}
});
(function ($) {
var datas = [];
var $calendar = $('#widget_calendar_datetime');
$calendar.datetimepicker({
format: 'YYYY-MM-DD',
inline: true,
sideBySide: true,
onSelectDay: function(clsName, day) {
if (datas[day]) {
clsName += ' todo';
}
return clsName;
}
});
var picker = $calendar.data('datetimepicker');
function getStartEndDate(viewDate, callback) {
datas = {};
let start = viewDate.clone().startOf('M').startOf('w').startOf('d');
let end = start.clone().add(41, 'd').format('L');
start = start.format('L');
$.getJSON(app.url('calendar/event/data', {start, end}), function(rows) {
for (let i = 0; i < rows.length; i++) {
const row = rows[i];
datas[row.date] = datas[row.date] || [];
datas[row.date].push(row);
}
picker._fillDate();
if (typeof callback === 'function') {
callback(datas);
}
});
}
// 初始化数据
getStartEndDate(picker._viewDate, function() {
let day = picker.date().format('L');
vueData.dayEvents = datas[day] || [];
});
$calendar.on('update.datetimepicker', function(e) {
getStartEndDate(e.viewDate);
});
$calendar.on('change.datetimepicker', function(e) {
let day = e.date.format('L');
vueData.dayEvents = datas[day] || [];
});
let vueData = Vue.reactive({dayEvents:[]});
let vm = Vue.createApp({
setup(props, ctx) {
return {data: vueData};
}
}).mount("#widget_calendar_event_list");
gdoo.widgets['calendar_widget_index'] = {
remoteData: function() {
picker._doAction({}, 'today');
getStartEndDate(picker._viewDate);
}
};
})(jQuery);
</script>