你好,我是徐晓东,笔名燕云长风。大漠穷秋于 2019-03-16 21:22 赠此笔名。
寓意:结合李白著名的边塞诗《关山月》取【燕云长风】—— 长风几万里,吹度玉门关。
写这篇文章之前,酝酿了很久,希望把自己之前遇到的问题及解决方案分享给大家。
那年深秋,我接到了一个开发任务——XXX市公安交通智能化管控系统的排班管理系统。
最终我选择了angular技术栈来实践,天下武功,唯快不破。
为了大家更加直观了解,我截了几张运行效果图:
排班主页面
选择排班人员
生成的排班人员
好了,话不多说,我们直接看核心需求(干货)
1.自定义前端日历UI组件库(日历算法)
2.实现自动排班算法(自己设计实现自动排班算法)
日历算法的实现:
前置知识:
我们知道一个月最多跨6周,即6*7格式
本月第一天 : fistDay : new Date(year, month–1 , 1)
本月最后一天: lastDay: new Date(year, month, 0) 下月的第0天即本月最后一天
上月最后一天: lastDayofLastMonth : new Date(year, month–1 ,0) 本月第0天即上月最后一天
了解了这些知识后,下面我们开始上代码,编写日历算法:
/**
* [getMonthData 计算日历的方法]
* @param {number} year [年]
* @param {number} month [月]
* @return {DateRet[]} [返回的日历数据]
*/
export interface DateRet {
year:number,
month:number,
date:number,
sh