| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573 |
- /**
- * 排班管理
- * */
- var nowDate = helper.DateFormat.getNowDate();
- var selectedDays = []; //选中的日期
- // var selectedDays = []; //选中的日期
- var myCalendar = null; //日历对象
- //日历配置信息
- var options = {
- width: '100%',
- height: '450px',
- language: 'CH', //语言
- showLunarCalendar: true, //阴历
- showHoliday: true, //休假
- showFestival: true, //节日
- showLunarFestival: true, //农历节日
- showSolarTerm: true, //节气
- showMark: true, //标记
- mark: {
- // '2018-12-20': '班',
- // '2018-12-22': '班'
- },
- timeRange: {
- startYear: 1900,
- endYear: 2049
- },
- theme: {
- changeAble: false,
- weeks: {
- backgroundColor: '#FBEC9C',
- fontColor: '#4A4A4A',
- fontSize: '20px',
- },
- days: {
- backgroundColor: '#ffffff',
- fontColor: '#565555',
- fontSize: '24px'
- },
- todaycolor: 'orange',
- activeSelectColor: 'orange',
- },
- //获取点击的日期
- onSelect: function(day) {
- // console.log('onSelect..........................');
- var selectDay = helper.DateFormat.timestampToTime(Number(day)).substring(0, 10);
- selectedDays.push(selectDay);
- selectedDays = helper.methods.unique(selectedDays); //去重
- initTable();
- },
- unSelect: function(day) {
- // console.log('unSelect..........................');
- var unSelectDay = helper.DateFormat.timestampToTime(Number(day)).substring(0, 10);
- if (selectedDays && selectedDays.length > 0) {
- for (var i = 0; i < selectedDays.length; i++) {
- if (selectedDays[i] === unSelectDay) {
- selectedDays.splice(i, 1);
- break;
- }
- }
- }
- initTable();
- },
- }
- $(function() {
- $('.tool_bars').authorizeButton();
- myCalendar = new SimpleCalendar('#calendar', options);
- //项目下拉
- helper.getDropList.getProlistDrop($('#sc_pro')).then(function() {
- $('#sc_pro').on('change', function() {
- init();
- });
- });
- init();
-
- $('#HY_save').on('click', btn_save);
- // //搜索
- // $("#sc_btns").click(function() {
- // init();
- // });
- });
- function init() {
- // console.log(selectedDays)
- selectedDays = [nowDate];
- getMarks().then(function(){
- $('#calendar').find('.sc-today').addClass('sc-selected');
- initTable(); //获取人员列表
- }); //获取排班
- }
- //获取排班标记
- function getMarks() {
- var dtd = $.Deferred(); //在函数内部,新建一个Deferred对象
- $.ajax({
- type: "get",
- url: huayi.config.callcenter_url + "signtokenapi/api/ClassGroupUser/getusergroupmarker",
- dataType: 'json',
- async: true,
- data: {
- projectid: $('#sc_pro').val(), // 否 string 项目id
- },
- success: function(data) {
- var res = data.data;
- if(res) {
- addSchedulingMarks(res.dateList_normal);
- addSchedulingMarks(res.dateList_rest);
- addSchedulingMarks(res.dateList_eave);
- }
- dtd.resolve(res); // 改变Deferred对象的执行状态
- }
- });
- return dtd.promise(); // 返回promise对象
- };
- //添加标记
- function addSchedulingMarks(res){
- if(res && res.length > 0){
- for (var i = 0; i < res.length; i++) {
- if(res[i]){
- myCalendar.addMark(res[i], '已排班');
- }
- }
- }
- }
- //初始化人员列表
- function initTable() {
- var select_listday = selectedDays;
- if(select_listday && select_listday.length){
- select_listday = select_listday[select_listday.length-1];
- }else{
- select_listday = '';
- }
- $.ajax({
- url: huayi.config.callcenter_url + 'signtokenapi/api/ClassGroupUser/getusergrouplist',
- type: 'get',
- data: {
- projectid: $('#sc_pro').val(), // 否 string 项目id
- // usercode: $('#sc_key').val(), // 否 string 用户账号
- // listday: selectedDays ? selectedDays.join(',') : '', //否 string 选中的日期
- listday: select_listday, //否 string 选中的日期
- },
- dataType: "json",
- async: true,
- success: function(res) {
- if (res.state.toLowerCase() === 'success') {
- //异步获取数据
- var resultData = res.data;
- $('#table_all').bootstrapTable('load', resultData);
- } else {
- layer.confirm(res.message, {
- icon: 7,
- btn: ['确定'] //按钮
- });
- }
- }
- });
- $('#table_all').bootstrapTable('destroy').bootstrapTable({
- striped: true
- });
- }
- //格式化编号
- function setCode(val, row, index) {
- return index + 1;
- }
- //格式化姓名
- function formatterName(val, row) {
- return '<span id="usercode_' + row.id + '" data-code="' + row.usercode + '">' + val + '(' + row.usercode + ')</span>';
- }
- //格式化出勤状态
- function formatterIsstatusList(val, row) {
- var str = '';
- var isCheck = '';
- var spanClass = '';
- if (val) {
- str += '<div id="statusList_' + row.id + '">';
- for (var i = 0; i < val.length; i++) {
- if (val[i].EnumValue === 1) {
- spanClass = 'text_normal';
- } else if (val[i].EnumValue === 2) {
- spanClass = 'text_rest';
- } else {
- spanClass = 'text_leave';
- }
- isCheck = row.isstatus_class === val[i].EnumValue ? 'checked' : '';
- str += '<div class="radio"><label>' +
- '<input onchange="statusChange(' + val[i].EnumValue + ',\'' + row.id + '\')" type="radio" name="statusList_' + row.id +
- '" value="' + val[i].EnumValue + '" ' + isCheck + '>' +
- '<span class="scheduling_check ' + spanClass + '">' + val[i].EnumName + '</span>' +
- '</label></div>';
- }
- str += '</div>';
- }
- return str;
- }
- //出勤状态 切换事件函数
- function statusChange(val, rid) {
- //1正常 2休息 3请假
- if (val === 1) {
- $('#classBan_' + rid).show(); //班别
- if($('#planList_' + rid).find('input[type="checkbox"]')[0].checked) {
- $('#planList_' + rid).show(); //计划
- }
- } else {
- $('#classBan_' + rid).hide(); //班别
- $('#classBan_' + rid).find('input[type="checkbox"]').prop('checked', false);
- $('#planList_' + rid).hide(); //计划
- $('#planList_' + rid).find('input[type="checkbox"]').prop('checked', false);
- $('#isJoin_' + rid).prop('checked', false); //是否参与计划
- }
- }
- //格式化班别
- function formatterClassBan(val, row) {
- var str = '';
- var isCheck = '';
- var isRadioCheck = '';
- var isShow = row.isstatus_class === 1 ? '' : 'isShow';
- str += '<ul class="clearfix classBan '+ isShow +'" id="classBan_' + row.id + '">';
- if (val) {
- $.each(val, function(i, v) {
- var cobj = {
- "code": v.code, //班次编号
- "name": v.name, //班次名称
- "roleList": [],
- }
- if (v.roleList) {
- $.each(v.roleList, function(j, n) {
- cobj.roleList.push({
- "roleid": n.roleid, //角色id
- "rolecode": n.rolecode, //角色code
- "rolename": n.rolename, //角色名称
- "ischeck": n.ischeck // 是否选中
- });
- });
- }
- isCheck = v.ischeck ? 'checked' : '';
- str += '<li class="col-md-3 text-left">' +
- '<label class="checkbox-inline">' +
- '<input id="dataBan_'+ i + '_' + row.id +'" data-ban=\'' + JSON.stringify(cobj) + '\' type="checkbox" value="' + v.code + '" ' + isCheck + '>' +
- '<span class="scheduling_check">' + v.name + '</span>' +
- '</label>';
- if (v.roleList) {
- str += '<div class="role_lists">';
- $.each(v.roleList, function(j, n) {
- // debugger
- var roleItem = {
- "roleid": n.roleid, //角色id
- "rolecode": n.rolecode, //角色code
- "rolename": n.rolename, //角色名称
- "ischeck": n.ischeck //是否选中
- };
- // str += '<p class="text_normal role_name">' + n.rolename + '</p>';
- isRadioCheck = n.ischeck === true ? 'checked' : '';
- str += '<div class="radio" id="roleItem_'+ i + '_' + n.roleid + '_' + row.id +'"><label>' +
- '<input type="radio" onchange="roleChange('+ i + ',\''+ n.roleid + '\',\''+ row.id +'\')" name="roleItem_'+ v.code + '_' + row.id +'" value=' + JSON.stringify(roleItem) + ' ' + isRadioCheck + '>' +
- '<span class="text_normal role_name scheduling_check">' + n.rolename + '</span>' +
- '</label></div>';
- });
- str += '</div>';
- }
- str += '</li>';
- });
- str += '</ul>';
- }
- return str;
- }
- //班次下角色改变
- function roleChange(index, cIndex, rid){
- var dataBan = $('#dataBan_' + index + '_' + rid).attr('data-ban');
- var radioVal = $('#roleItem_' + index + '_' + cIndex + '_' + rid).find('input[type="radio"]:checked').val();
- dataBan = JSON.parse(dataBan);
- radioVal = JSON.parse(radioVal);
- if(dataBan.roleList && dataBan.roleList.length > 0){
- for(var i = 0; i < dataBan.roleList.length; i++){
- if(radioVal.roleid === dataBan.roleList[i].roleid){
- dataBan.roleList[i].ischeck = true;
- }else{
- dataBan.roleList[i].ischeck = false;
- }
- }
- // console.log(JSON.stringify(dataBan));
- $('#dataBan_' + index + '_' + rid).attr('data-ban', JSON.stringify(dataBan));
- }
- }
- //格式化是否参与计划
- function formatterIsJoin(val, row) {
- var isCheck = '';
- isCheck = val ? 'checked' : '';
- return '<label class="checkbox-inline isJoin">' +
- '<input id="isJoin_' + row.id + '" onchange="joinChange(\'' + row.id + '\')" type="checkbox" ' + isCheck +
- '><span class="scheduling_check"></span>' +
- '</label>';
- }
- //是否参与计划 切换事件函数
- function joinChange(rid) {
- //选中代表参与
- if (event.target.checked) {
- $('#planList_' + rid).show(); //计划
- } else {
- $('#planList_' + rid).hide(); //计划
- $('#planList_' + rid).find('input[type="checkbox"]').prop('checked', false);
- }
- }
- //格式化计划名称
- function formatterPlan(val, row) {
- var str = '';
- var isCheck = '';
- var isShow = row.isjoin_class ? '' : 'isShow';
- if (val) {
- str += '<div id="planList_' + row.id + '" class="'+ isShow + '">'
- $.each(val, function(i, v) {
- isCheck = v.ischeck ? 'checked' : '';
- var planData = {
- "planid": v.id,
- "planname": v.planname
- }
- str += '<div class="checkbox">' +
- '<label>' +
- '<input data-plan=\''+ JSON.stringify(planData) +'\' type="checkbox" value="' + v.id + '" ' + isCheck + '>' +
- '<span class="scheduling_check">' + v.planname + '</span>' +
- '</label>' +
- '</div>';
- });
- str += '</div>';
- }
- return str;
- }
- //保存
- function btn_save() {
- var loadIndex;
- if (!$.trim($('#sc_pro').val())) {
- layer.confirm('请先选择项目名称!', {
- icon: 2,
- btn: ['确定'] //按钮
- });
- return;
- }
-
- if (!selectedDays) {
- layer.confirm('请选择要设置的日期!', {
- icon: 2,
- btn: ['确定'] //按钮
- });
- return;
- }
-
- var classUserLists = getRowList();
-
- if(classUserLists.valid){
- classUserList = classUserLists.data;
- }else{
- layer.confirm(classUserLists.text, {
- icon: 2,
- btn: ['确定'] //按钮
- });
- return;
- }
- $.ajax({
- type: 'post',
- url: huayi.config.callcenter_url + 'signtokenapi/api/ClassGroupUser/saveclassuser',
- dataType: 'json',
- async: true,
- beforeSend: function() { //触发ajax请求开始时执行
- $('#HY_save').attr("disabled", true);
- $('#HY_save').text('保存中...');
- loadIndex = layer.load();
- },
- data: {
- projectid: $('#sc_pro').val(), // 是 string 项目名称id
- Listday: selectedDays ? selectedDays.join(',') : '', // 是 list<string> 选中日期列表(可能不是连续的日期)
- listuserinfo: classUserList, // 是 list<ClassUserList> 正常值班信息列表 - 每行用户
- },
- success: function(data) {
- layer.close(loadIndex);
- if (data.state === "success") {
- selectedDays = [];
- init();
- layer.msg("保存成功");
- } else {
- $('#HY_save').attr("disabled", false);
- $('#HY_save').text('保存');
- }
- },
- error: function(textStatus) {
- layer.close(loadIndex);
- layer.confirm('网络繁忙,请稍后再试...', {
- icon: 7,
- closeBtn: 0,
- btn: ['确定'] //按钮
- });
- $('#HY_save').attr("disabled", false);
- $('#HY_save').text('保存');
- },
- complete: function(XMLHttpRequest, textStatus) {
- layer.close(loadIndex);
- if (textStatus == 'timeout') {
- var xmlhttp = window.XMLHttpRequest ? new window.XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHttp");
- xmlhttp.abort();
- layer.confirm('网络超时,请稍后再试...', {
- icon: 7,
- closeBtn: 0,
- btn: ['确定'] //按钮
- });
- }
- $('#HY_save').attr("disabled", false);
- $('#HY_save').text('保存');
- },
- });
- }
- //选择日历获取人员列表信息
- function getRowList() {
- var ids = $.map($('#table_all').bootstrapTable('getSelections'),
- function(row) {
- return row.id;
- });
- if (ids && ids.length > 0) {
- var classUserList = [];
- var valid = true;//验证消息
- var text = null;//提示信息
- for(var i = 0; i < ids.length; i++){
- var usercode = $('#usercode_' + ids[i]).attr('data-code'); //用户账号(AA001)
- var isstatus = $('#statusList_' + ids[i]).find('input[type="radio"]:checked').val(); //出勤状态(1正常 2休息 3请假)
- var classgroupList = []; //班别数据
- if(isstatus === '1'){
- var classgroupListEl = $('#classBan_' + ids[i]).find('input[type="checkbox"]:checked'); //班别元素
- if(classgroupListEl && classgroupListEl.length > 0){
- for(var j = 0; j < classgroupListEl.length; j++){
- // console.log($(classgroupListEl[j]).parent().parent().find('input[type="radio"]:checked').length)
- if($(classgroupListEl[j]).parent().parent().find('input[type="radio"]:checked').length === 0){
- valid = false;
- text = '请选择用户:'+ $('#usercode_' + ids[i]).text() + ' '+ $(classgroupListEl[j]).parent().find('.scheduling_check').text() +'的岗位';
- break;
- }
- classgroupList.push(JSON.parse($(classgroupListEl[j]).attr('data-ban')));
- }
- }else{
- valid = false;
- text = '请选择用户:'+ $('#usercode_' + ids[i]).text() +'的班别';
- break;
- }
- }
- var isjoin = $('#isJoin_' + ids[i])[0].checked; //是 bool 是否参与计划
- var distri_planList = []; //计划数据
- if(isjoin){
- var distri_planListEl = $('#planList_' + ids[i]).find('input[type="checkbox"]:checked');// 是 List List<DistriPlanList> 计划名称
- if(distri_planListEl && distri_planListEl.length > 0){
- $.each(distri_planListEl, function(j, n){
- distri_planList.push(JSON.parse($(n).attr('data-plan')));
- });
- }else{
- valid = false;
- text = '请选择用户:'+ $('#usercode_' + ids[i]).text() +'要参与的计划';
- break;
- }
- }
- classUserList.push({
- usercode: usercode, // 是 string 用户账号(AA001)
- isstatus: isstatus, // 是 string 出勤状态(1正常 2休息 3请假)
- classgroupList: classgroupList, // 是 List List<ClassGroupList> 绑定班别
- isjoin: isjoin, // 是 bool 是否参与计划
- distri_planList: distri_planList
- });
-
- };
- return {
- valid: valid,
- text: text,
- data: classUserList
- };
- }else{
- return {
- valid: false,
- text: '请选择要排班的用户!',
- };
- }
- }
- //设置默认地址
- function btn_default(aid) {
- layer.confirm('您确定要将当前地址设置为默认地址吗?', {
- icon: 7,
- btn: ['是', '否'] //按钮
- }, function() {
- $.ajax({
- type: "post",
- url: huayi.config.callcenter_url + "distributionapi/api/DistriAddress/UpdateDefault",
- dataType: 'json',
- data: {
- id: aid, //是 string id标识
- },
- async: true,
- success: function(data) {
- layer.msg("设置成功!");
- $('#table_all').bootstrapTable('refresh');
- }
- });
- });
- }
- //添加
- function btn_add() {
- layer.open({
- type: 2,
- content: "template/addOrEditAddress.html", //iframe的url,no代表不显示滚动条
- title: '添加地址',
- resize: false,
- area: ['60%', '90%'], //宽高
- });
- }
- //编辑
- function btn_edit(edit_id) {
- layer.open({
- type: 2,
- content: "template/addOrEditAddress.html?edit_id=" + edit_id, //iframe的url,no代表不显示滚动条
- title: '编辑地址',
- resize: false,
- area: ['60%', '90%'], //宽高
- });
- }
- //批量删除
- function btn_deletes() {
- var ids = $.map($('#table_all').bootstrapTable('getSelections'),
- function(row) {
- return row.id;
- });
- /*判断长度*/
- if (ids.length <= 0) {
- layer.confirm('请选择要删除的选项', {
- icon: 7,
- btn: ['确定'] //按钮
- });
- return;
- }
- btn_delete(ids);
- }
- //删除
- function btn_delete(del_id) {
- /*发送请求*/
- layer.confirm('您确定要删除当前地址吗?', {
- icon: 7,
- btn: ['确定', '取消'],
- yes: function(index, layero) {
- $.post(huayi.config.callcenter_url + "distributionapi/api/DistriAddress/delete", {
- ids: del_id,
- }, function(result) {
- result = JSON.parse(result);
- if (result.state.toLowerCase() == "success") {
- layer.msg("删除成功");
- $('#table_all').bootstrapTable('refresh');
- }
- })
- },
- });
- }
|