| 1 |
- MWF.xDesktop.requireApp("Attendance","Explorer",null,false);MWF.xDesktop.requireApp("Template","MPopupForm",null,false);MWF.xDesktop.requireApp("Template","MDomItem",null,false);MWF.xDesktop.requireApp("Selector","package",null,false);MWF.xApplication.Attendance.ImportExplorer=new Class({Extends:MWF.xApplication.Attendance.Explorer,Implements:[Options,Events],initialize:function(e,t,s,i){this.setOptions(i);this.app=t;this.path="/x_component_Attendance/$ImportExplorer/";this.cssPath="/x_component_Attendance/$ImportExplorer/"+this.options.style+"/css.wcss";this._loadCss();this.actions=s;this.node=$(e);this.initData();if(!this.personActions)this.personActions=new MWF.xAction.org.express.RestActions},loadView:function(){this.view=new MWF.xApplication.Attendance.ImportExplorer.View(this.elementContentNode,this.app,this,this.viewData,this.options.searchKey);this.view.load();this.setContentSize()},createDocument:function(){if(this.view)this.view._createDocument()},importExcel:function(){this.upload()},upload:function(){if(!this.uploadFileAreaNode){this.uploadFileAreaNode=new Element("div");var e='<input name="file" type="file"/>';this.uploadFileAreaNode.set("html",e);this.fileUploadNode=this.uploadFileAreaNode.getFirst();this.fileUploadNode.addEvent("change",function(){var e=a.files;if(e.length){for(var t=0;t<e.length;t++){var s=e.item(t);var i=s.name.split(".");this.uploadFileName=s.name;if(i[i.length-1].toLowerCase()!="xls"&&i[i.length-1].toLowerCase()!="xlsx"){this.app.notice("请导入excel文件!","error");return}var n=new FormData;n.append("file",s);this.actions.uploadAttachment(function(e){var s=e.id;this.actions.getAttachmentInfo(s,function(t){var e=new MWF.xApplication.Attendance.ImportExplorer.Progress(s,this.actions);e.load(function(){var e=new MWF.xApplication.Attendance.ImportExplorer.Result(this,t.data,{id:s},{app:this.app,actions:this.app.restActions,css:{}});e.open();this.view.reload()}.bind(this))}.bind(this))}.bind(this),function(e,t,s){var i=s;if(e)i=e.responseText;this.app.notice(i,"error")}.bind(this),n,s)}}}.bind(this))}var a=this.uploadFileAreaNode.getFirst();a.click()},checkData:function(){var e=new MWF.xApplication.Attendance.ImportExplorer.YearMonthSelctor(this);e.edit()},analyseData:function(){this.actions.analyseDetail("0","0",function(){this.app.notice("分析考勤数据成功","success")}.bind(this))},staticData:function(){this.actions.staticAllDetail(function(){this.app.notice("统计考勤数据成功","success")}.bind(this))},downloadTemplate:function(){window.open(this.path+encodeURIComponent("dataTemplate.xls"),"_blank")},showDescription:function(e){if(this.descriptionNode){this.descriptionNode.setStyle("display","block");this.descriptionNode.position({relativeTo:e,position:"bottomLeft",edge:"upperCenter",offset:{x:-60,y:0}})}else{this.descriptionNode=new Element("div",{styles:this.css.descriptionNode}).inject(this.node);this.descriptionNode.position({relativeTo:e,position:"bottomLeft",edge:"upperCenter",offset:{x:-60,y:0}});this.descriptionNode.addEvent("mousedown",function(e){e.stopPropagation()});document.body.addEvent("mousedown",function(){this.descriptionNode.setStyle("display","none")}.bind(this));var t=new Element("table",{width:"100%",border:"0",cellpadding:"5",cellspacing:"0",styles:this.css.filterTable,class:"filterTable"}).inject(this.descriptionNode);var s=new Element("tr").inject(t);new Element("td",{text:"数据导入步骤",styles:this.css.descriptionTdHead}).inject(s);var s=new Element("tr").inject(t);new Element("td",{text:"1、下载Excel模板,根据模板格式填写考勤数据;",styles:this.css.descriptionTdValue}).inject(s);var s=new Element("tr").inject(t);new Element("td",{text:"2、点击导入考勤数据按钮,选择考勤数据并确定,系统将校验考勤数据是否正确并导入数据;",styles:this.css.descriptionTdValue}).inject(s);var s=new Element("tr").inject(t);new Element("td",{text:"3、点击核对考勤数据按钮,选择需要核对的年度和月份,系统将核对需要考勤的人员的数据;",styles:this.css.descriptionTdValue}).inject(s);var s=new Element("tr").inject(t);new Element("td",{text:"4、点击分析考勤数据按钮,系统将生成出勤明细数据;",styles:this.css.descriptionTdValue}).inject(s);var s=new Element("tr").inject(t);new Element("td",{text:"5、点击统计考勤数据按钮,系统将生成个人、部门、公司的出勤率统计。",styles:this.css.descriptionTdValue}).inject(s)}}});MWF.xApplication.Attendance.ImportExplorer.View=new Class({Extends:MWF.xApplication.Attendance.Explorer.View,_createItem:function(e){return new MWF.xApplication.Attendance.ImportExplorer.Document(this.table,e,this.explorer,this)},_getCurrentPageData:function(t,e){this.actions.listAttachmentInfo(function(e){if(t)t(e)})},_removeDocument:function(e,t){this.actions.deleteAttachment(e.id,function(e){this.explorer.view.reload();this.app.notice(this.app.lp.deleteDocumentOK,"success")}.bind(this))},_createDocument:function(){},_openDocument:function(e){this.actions.getAttachmentStream(e.id)}});MWF.xApplication.Attendance.ImportExplorer.Document=new Class({Extends:MWF.xApplication.Attendance.Explorer.Document,openVaild:function(e){},openResult:function(){var e=new MWF.xApplication.Attendance.ImportExplorer.Result(this,this.data,{id:this.data.id},{app:this.app,actions:this.app.restActions,css:{}});e.open()}});MWF.xApplication.Attendance.ImportExplorer.YearMonthSelctor=new Class({Extends:MPopupForm,options:{style:"attendance",width:500,height:300,hasTop:true,hasBottom:true,title:"选择核对月份",draggable:true,closeAction:true,false:true},_createTableContent:function(){this.formTableContainer.setStyles({width:"300px"});var e="<table width='100%' bordr='0' cellpadding='5' cellspacing='0' styles='formTable'>"+"<tr><td styles='formTabelTitle' lable='cycleYear'></td>"+" <td styles='formTableValue' item='cycleYear'></td></tr>"+"<tr><td styles='formTabelTitle' lable='cycleMonth'></td>"+" <td styles='formTableValue' item='cycleMonth'></td></tr>"+"</table>";this.formTableArea.set("html",e);MWF.xDesktop.requireApp("Template","MForm",function(){this.form=new MForm(this.formTableArea,{},{isEdited:this.isEdited||this.isNew,itemTemplate:{cycleYear:{text:"年度",type:"select",selectValue:function(){var e=[];d=new Date;for(var t=0;t<5;t++){e.push(d.getFullYear());d.setFullYear(d.getFullYear()-1)}return e}},cycleMonth:{text:"月份",type:"select",defaultValue:function(){return(new Date).getMonth()},selectValue:["1","2","3","4","5","6","7","8","9","10","11","12"]}}},this.app);this.form.load()}.bind(this),true)},_ok:function(e,t){this.app.restActions.checkDetail(e.cycleYear,e.cycleMonth,function(e){this.app.notice("考勤数据核对成功");this.close()}.bind(this))}});MWF.xApplication.Attendance.ImportExplorer.Result=new Class({Extends:MPopupForm,options:{style:"attendance",width:800,height:600,hasTop:true,hasBottom:false,title:"考勤数据导入结果",draggable:true,closeAction:true,hasScroll:true,closeByClickMask:true,id:""},_createTableContent:function(){this.actions.getImportStatusDetail(this.options.id,function(e){this.checkData=e.data;this.createImportContent()}.bind(this))},createImportContent:function(){if(this.checkData.errorCount==0){var e="您上传的文件:“"+this.data.fileName+"”已经成功导入。下面显示其中的"+this.checkData.detailList.length+"条:"}else{var e="您上传的文件:“"+this.data.fileName+"”未通过校验,有"+this.checkData.errorCount+"条错误数据。请修改后重新导入。下面显示其中的"+this.checkData.detailList.length+"条:"}this.formDescriptionNode=new Element("div",{styles:this.css.formDescriptionNode,text:e}).inject(this.formTableArea);var i=new Element("table",{width:"100%",border:"",cellpadding:"5",cellspacing:"0",styles:this.css.editTable,class:"editTable"}).inject(this.formTableArea);var t=new Element("tr").inject(i);var s=new Element("td",{styles:this.css.editTableTitle,text:"行号"}).inject(t);var s=new Element("td",{styles:this.css.editTableTitle,text:"员工号"}).inject(t);var s=new Element("td",{styles:this.css.editTableTitle,text:"员工名字"}).inject(t);var s=new Element("td",{styles:this.css.editTableTitle,text:"日期"}).inject(t);var s=new Element("td",{styles:this.css.editTableTitle,text:"上班时间"}).inject(t);var s=new Element("td",{styles:this.css.editTableTitle,text:"下班时间"}).inject(t);var s=new Element("td",{styles:this.css.editTableTitle,text:"检查结果"}).inject(t);var s=new Element("td",{styles:this.css.editTableTitle,text:"描述"}).inject(t);s.setStyle("width","300px");this.checkData.detailList.each(function(e){var t=new Element("tr").inject(i);var s=new Element("td",{styles:this.css.editTableValue,text:e.curRow}).inject(t);var s=new Element("td",{styles:this.css.editTableValue,text:e.employeeNo}).inject(t);var s=new Element("td",{styles:this.css.editTableValue,text:e.employeeName.split("@")[0]}).inject(t);var s=new Element("td",{styles:this.css.editTableValue,text:e.recordDateString}).inject(t);var s=new Element("td",{styles:this.css.editTableValue,text:e.onDutyTime}).inject(t);var s=new Element("td",{styles:this.css.editTableValue,text:e.offDutyTime}).inject(t);var s=new Element("td",{styles:this.css.editTableValue,text:e.checkStatus=="error"?"错误":"正确"}).inject(t);var s=new Element("td",{styles:this.css.editTableValue,text:e.description}).inject(t)}.bind(this))}});MWF.xApplication.Attendance.ImportExplorer.Progress=new Class({initialize:function(e,t){this.id=e;this.actions=t},load:function(s){this.currentDate=new Date;this.addFormDataMessage();this.status="ready";this.intervalId=setInterval(function(){this.actions.getImportStatus(this.id,function(e){var t=e.data;if(t.processing&&t.currentProcessName!="COMPLETE"){if(t.currentProcessName=="VALIDATE"){if(this.status!=t.currentProcessName){this.setMessageTitle("正在检查数据");this.setMessageText("开始检查数据,共"+t.process_validate_total+"条");this.status=t.currentProcessName}this.updateProgress(t.currentProcessName,t.process_validate_count,t.process_validate_total,t.errorCount)}else if(t.currentProcessName=="SAVEDATA"){if(this.status!=t.currentProcessName){this.setMessageTitle("正在导入数据");this.setMessageText("开始导入数据,共"+t.process_save_total+"条");this.status=t.currentProcessName}this.updateProgress(t.currentProcessName,t.process_save_count,t.process_save_total,t.errorCount)}}else{this.status=t.currentProcessName;clearInterval(this.intervalId);this.transferComplete(t);if(s)s()}}.bind(this),null)}.bind(this),500)},addFormDataMessage:function(e){var t="";if(e){t='<div style="height: 20px; line-height: 20px">'+"正在准备导入数据..."+"</div></div>"}else{t='<div style="overflow: hidden"><div style="height: 3px; border:1px solid #999; margin: 3px 0px">'+'<div style="height: 3px; background-color: #acdab9; width: 0px;"></div></div>'+'<div style="height: 20px; line-height: 20px">'+"正在准备导入数据..."+"</div></div>"}var s={subject:"准备导入数据",content:t};this.messageItem=layout.desktop.message.addMessage(s);this.messageItem.status="ready";window.setTimeout(function(){if(!layout.desktop.message.isShow)layout.desktop.message.show()}.bind(this),100)},updateProgress:function(e,t,s,i){var n=this.messageItem;var a=i?t+i:t;var o=100*(a/s);var r=new Date;var l=this.lastTime||this.currentDate;var c=r.getTime()-l.getTime();var d=(a-(this.lastProcessed||0))*1e3/c;var h="条/秒";d=d.round(2);if(n.contentNode){var p=n.contentNode.getFirst("div").getFirst("div");var u=p.getFirst("div");var m=n.contentNode.getFirst("div").getLast("div");u.setStyle("width",""+o+"%");if(e=="VALIDATE"){var v="正检查数据"+": "+d+h+",共"+s+"条,剩余"+(s-t)+"条";v+=i?",出错"+i+"条":""}else{var v="正导入数据"+": "+d+h+",共"+s+"条,剩余"+(s-t)+"条";v+=i?",出错"+i+"条":""}m.set("text",v)}this.lastProcessed=a;this.lastTime=new Date},transferComplete:function(e){var t=e.errorCount;var s=this.messageItem;var i=new Date;var n=i.getTime()-this.currentDate.getTime();var a="";if(n>36e5){var o=n/36e5;var r=n%36e5;var l=r/6e4;var c=r%6e4;var d=c/1e3;a=""+o.toInt()+"小时"+l.toInt()+"分"+d.toInt()+"秒"}else if(n>6e4){var l=n/6e4;var c=n%6e4;var d=c/1e3;a=""+l.toInt()+"分"+d.toInt()+"秒"}else{var d=n/1e3;a=""+d.toInt()+"秒"}if(t==0){var h=e.process_save_total;var p=h*1e3/n;var u="条/秒";p=p.round(2);this.setMessageTitle("导入成功");this.setMessageText("共导入数据"+h+"条 速度"+": "+p+u+" "+"耗时"+": "+a)}else{var h=e.process_validate_total;this.setMessageTitle("导入失败");this.setMessageText("共有数据"+h+"条 出错"+t+"条 耗时"+": "+a+" 请修改后重新导入")}this.clearMessageProgress()},setMessageText:function(e){var t=this.getProgessNode().getFirst("div");this.getProgressInforNode().set("text",e);this.messageItem.dateNode.set("text",(new Date).format("db"))},setMessageTitle:function(e){this.messageItem.subjectNode.set("text",e)},clearMessageProgress:function(){var e=this.getProgessNode();e.destroy()},getProgessNode:function(){if(!this.progressNode)this.progressNode=this.messageItem.contentNode.getFirst("div").getFirst("div");return this.progressNode},getProgressInforNode:function(){if(!this.progressInforNode)this.progressInforNode=this.messageItem.contentNode.getFirst("div").getLast("div");return this.progressInforNode}});
|