要做一个值班管理页面,能查询人员岗位信息。

页面是在AmazeUI框架的基础上做的,于是在网上找了个demo,在demo的基础上将其与公司系统连接起来。
本文记录用到的插件方法和一些传值过程。
前置
fullcalendar js、css文件
左上角的input,select,查询和重置按钮,以及右上角的颜色块
fullcalendar导入和使用
在body间插入id为calendar的空div
1
<div id="calendar" class="duty-row" style="margin-top:4%;"></div>
在js文件中进行放插件操作
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40$('#calendar').fullCalendar({
header: {
left: 'prev,next today',
center: 'title',
right: 'month,agendaWeek,agendaDay'
},
monthNames: ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"],
monthNamesShort: ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"],
dayNames: ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"],
dayNamesShort: ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"],
today: ["今天"],
firstDay: 1,
buttonText: {
today: '今天',
month: '月',
week: '周',
day: '日',
prev: '🞀',
next: '🞂'
},//以上为基础设置,看着改
defaultDate: DutyModel.getNowDate(), //设置页面默认进入的时间,本文写了个获取当前格式日期的方法 yyyy-mm-dd
lang: 'zh-cn',
navLinks: true,
selectable: true,
selectHelper: true,
//eventStartEditable: false,
select: function(start, end) { //选中后将触发这个select方法,自动传入选中的开始和结束日期
addBox.modal(); //此处弹出你想弹出的框,在页面中设置,modal是AmazeUI自带的弹窗方法,addBox绑定到弹框
var targetForm = $("#create-form"); //此处把选中的起始时间的值存在hidden属性的input中,增添提交时读取即可
targetForm.find("input[name='startTime']").val(start);
targetForm.find("input[name='endTime']").val(end);
$('#calendar').fullCalendar('unselect'); //未点击提交时取消选中
},
editable: true,
eventLimit: true,
eventClick: function(event, jsEvent, view) { //点击已存在对象时触发事件
DutyModel.getStaffselect(event.id); //调用方法,传入点击对象的id
editBox.modal(); //弹出编辑框
}
});在calendar中显示所有传入对象(放在data中,从库里查出来)的方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18function CalendarEvents(data){
$('#calendar').fullCalendar('removeEvents');
for (var i = 0; i < data.length; i++) {
var obj = new Object();
obj.id = data[i].Id;
obj.title = data[i].CrewName+" "+data[i].DutyPosition+" "+data[i].CrewType; //将显示的标题
obj.start = getUploadDate(data[i].StartTime); //此处datetime时间格式转换
obj.end = getUploadDate(data[i].EndTime);
if(data[i].CrewType=="值班人员"){
obj.color='#7FB3D5';
}else if(data[i].CrewType=="服务人员"){
obj.color='#76D7C4';
}else{
obj.color='#AEB6BF';
}
$("#calendar").fullCalendar('renderEvent', obj, true); //把从后台取出的数据进行封装以后在页面上以fullCalendar的方式进行显示
}
}有个挺有意思的问题,当数据过多时,不能将其全存在data里吧,会发生什么事emm?毕竟页面显示的就只有一个月的值班信息,于是往数据库里搜索时加了当前页面的开始时间和结束时间,获取calendar当前页面起始时间的方法如下
1
2
3var view = $('#calendar').fullCalendar('getView');
var viewStart=moment(view.start).format('YYYY-MM-DD HH:mm:ss');
var viewEnd=moment(view.end).format('YYYY-MM-DD HH:mm:ss');前至后的时间格式转换比较值得注意,顺便放下后至前的(在之前代码块里用到过)
1
2
3
4
5
6
7
8
9
10
11
12
13
14function getUploadDate(dateTimeStr) {
try {
var dateTime = "";
if (dateTimeStr) {
dateTimeStr = dateTimeStr.split("/");
dateTimeStr = dateTimeStr[1].substring(dateTimeStr[1].indexOf("(") + 1, dateTimeStr[1].indexOf(")"));
dateTime = DateUtil.LongToStr(parseInt(dateTimeStr));
}
return dateTime;
} catch (e) {
}
return null;
}以上基本上就实现了calendar与后端的交互,查询和重置根据条件调方法查数据库,除了一些值得注意的点记录下,其它的就跟本文没太大关系了
后端方法
数据库查询条件,此处用了sqlsugar
1
var items = db.CrewDutyManages.Where(s => (s.ShipName == duter.ShipName)&&(s.StartTime>=duter.viewStart) &&(s.EndTime<duter.viewEnd));
查出来往前传即可,修改根据id和前端编辑框信息修改,删除根据点击事件传回来的id修改,增添根据增添框获取到的信息往库里添数据。
因为查询全部值班信息时用了get方法,数据信息放在请求头中传递,后端方法获取时要加上
[FromUri]
,不然会获取不到值前:
1
Utils.getJSON("api/CrewDutyManage/GetCrewDutyManageList",mydata, function (data) {}
后:
1
public IHttpActionResult GetCrewDutyManageList([FromUri] DutyManageDto duter)
明天又是充满希望的一天