projarrangeDetailList.jsp 37 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120
  1. <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
  2. <%@include file="/context/mytags.jsp"%>
  3. <t:base type="jquery,easyui,tools,DatePicker"></t:base>
  4. <div class="easyui-layout" fit="true">
  5. <input id="tempTime" name="tempTime" type="hidden" value="${yearmonth}"/>
  6. <input id="calendaridStr" name="calendaridStr" type="hidden" value="${calendaridStr}"/>
  7. <input id="specialCalendar" name="specialCalendar" type="hidden" value="${specialCalendar}"/>
  8. <input id="pid" name="pid" type="hidden" value="${pid}"/>
  9. <div region="center" style="padding:0px;border:0px;overflow: auto;">
  10. <!-- <div id="panelloadingDiv" class="panel-loading" style="display: none;" width="100%">排班数据恢复中,请等待....</div> -->
  11. <t:datagrid name="projarrangeDetailList" checkbox="false" fitColumns="false" title="员工排班上报" actionUrl="projarrangeDetailController.do?datagrid&yearmonth=${yearmonth}&pid=${pid}&usernamesearch=${usernamesearch}" idField="id" fit="true" pagination="false" queryMode="group">
  12. <t:dgCol title="主键" field="id" hidden="true" queryMode="single" width="120"></t:dgCol>
  13. <t:dgCol title="项目排班总揽表ID" field="projarrangeGeneralid" hidden="true" query="false" width="120"></t:dgCol>
  14. <t:dgCol title="项目id" field="pid" hidden="true" query="false" width="120"></t:dgCol>
  15. <t:dgCol title="月度" field="yearmonth" hidden="true" queryMode="single" width="120"></t:dgCol>
  16. <%-- <t:dgCol title="项目岗位" sortable="false" hidden="true" field="pjtPostId" frozenColumn="true" dictionary="t_bus_project_post_detail,id,ptj_post_name, and delete_flag = '0' and pid='${pid}' " width="120"></t:dgCol>
  17. <t:dgCol title="员工姓名" sortable="false" hidden="true" field="userid" frozenColumn="true" queryMode="single" dictionary="t_s_base_user,id,realname" width="120"></t:dgCol>
  18. --%>
  19. <t:dgCol title="项目岗位" sortable="false" hidden="true" field="pjtPostId" frozenColumn="true" width="120"></t:dgCol>
  20. <t:dgCol title="员工姓名" sortable="false" hidden="true" field="userid" frozenColumn="true" queryMode="single" width="120"></t:dgCol>
  21. <t:dgCol title="项目岗位" sortable="false" field="pjtPostName" frozenColumn="true" width="120"></t:dgCol>
  22. <t:dgCol title="员工姓名" sortable="false" field="userName" query="false" frozenColumn="true" queryMode="single" width="120"></t:dgCol>
  23. <!-- 遍历动态列,将动态列添加至此 -->
  24. <c:forEach items="${titlelist}" var="temp">
  25. <%-- <c:if test="${fn:contains(temp.title,'workday')}">
  26. <t:dgCol title="${fn:substringBefore(temp.title,'-')}" field="${temp.field}" extendParams="editor:'combobox'" dictionary="t_bus_arrange_duty,id,duty_name, and delete_flag <> 1 and status = '0'"></t:dgCol>
  27. </c:if>
  28. <c:if test="${fn:contains(temp.title,'weekend')}">
  29. <t:dgCol title="${fn:substringBefore(temp.title,'-')}" field="${temp.field}" extendParams="editor:'combobox'" dictionary="t_bus_arrange_duty,id,duty_name, and delete_flag <> 1 and status = '0'"></t:dgCol>
  30. </c:if> --%>
  31. <t:dgCol title="${temp.title}" sortable="false" width="120" field="${temp.field}" extendParams="editor:'combobox'" dictionary="t_bus_arrange_duty,id,duty_name, and delete_flag <> '1' and status = '0' and ( pid is null or pid='${pid}' ) order by create_date"></t:dgCol>
  32. </c:forEach>
  33. <t:dgCol title="上班天数(日)" sortable="false" field="workingDays" style="text-align: right;" queryMode="single" width="120"></t:dgCol>
  34. <t:dgCol title="超时加班(小时)" sortable="false" field="timeOutOvertimeHours" style="text-align: right;" queryMode="single" width="120"></t:dgCol>
  35. <t:dgCol title="国定加班(小时)" sortable="false" field="countryOvertimeHours" style="text-align: right;" queryMode="single" width="120"></t:dgCol>
  36. <t:dgCol title="值班天数(日)" sortable="false" field="ondutyDays" style="text-align: right;" queryMode="single" width="120"></t:dgCol>
  37. <t:dgCol title="备注" sortable="false" field="remark" queryMode="single" extendParams="editor:'text'" width="120"></t:dgCol>
  38. <t:dgCol title="创建人名称" field="createName" hidden="true" queryMode="single" width="120"></t:dgCol>
  39. <t:dgCol title="创建人登录名称" field="createBy" hidden="true" queryMode="single" width="120"></t:dgCol>
  40. <t:dgCol title="创建日期" field="createDate" formatter="yyyy-MM-dd hh:mm:ss" hidden="true" queryMode="single" width="120"></t:dgCol>
  41. <t:dgCol title="更新人名称" field="updateName" hidden="true" queryMode="single" width="120"></t:dgCol>
  42. <t:dgCol title="更新人登录名称" field="updateBy" hidden="true" queryMode="single" width="120"></t:dgCol>
  43. <t:dgCol title="更新日期" field="updateDate" formatter="yyyy-MM-dd hh:mm:ss" hidden="true" queryMode="single" width="120"></t:dgCol>
  44. <t:dgCol title="所属部门" field="sysOrgCode" hidden="true" queryMode="single" width="120"></t:dgCol>
  45. <t:dgCol title="所属公司" field="sysCompanyCode" hidden="true" queryMode="single" width="120"></t:dgCol>
  46. <%-- <t:dgCol title="操作" field="opt"></t:dgCol> --%>
  47. <%-- <t:dgDelOpt title="删除" url="projarrangeDetailController.do?doDel&id={id}" urlclass="ace_button" urlfont="fa-trash-o"/>
  48. <t:dgToolBar title="录入" icon="icon-add" operationCode="add" url="projarrangeDetailController.do?goAdd" funname="add"></t:dgToolBar>
  49. <t:dgToolBar title="修改" icon="icon-edit" operationCode="edit" url="projarrangeDetailController.do?goUpdate" funname="update"></t:dgToolBar>
  50. <t:dgToolBar title="批量删除" icon="icon-remove" operationCode="remove" url="projarrangeDetailController.do?doBatchDel" funname="deleteALLSelect"></t:dgToolBar>
  51. <t:dgToolBar title="查看" icon="icon-search" url="projarrangeDetailController.do?goUpdate" funname="detail"></t:dgToolBar>
  52. <t:dgToolBar title="导出" icon="icon-put" operationCode="put" funname="ExportXls"></t:dgToolBar>
  53. <t:dgToolBar title="模板下载" icon="icon-putout" operationCode="putout" funname="ExportXlsByT"></t:dgToolBar> --%>
  54. <t:dgToolBar operationCode="edit" title="修改" icon="icon-edit" operationCode="edit" funname="editRow"></t:dgToolBar>
  55. <t:dgToolBar operationCode="undo" title="取消编辑" icon="icon-cancel1" funname="reject"></t:dgToolBar>
  56. <%-- <t:dgToolBar title="刷新" icon="icon-refresh" url="" funname="refresh"></t:dgToolBar> --%>
  57. <t:dgToolBar operationCode="save" title="保存" icon="icon-save" url="projarrangeDetailController.do?saveRows" funname="saveData"></t:dgToolBar>
  58. <t:dgToolBar operationCode="putout" title="上报" icon="icon-report" funname="putout"></t:dgToolBar>
  59. <t:dgToolBar title="导出(不能用于导入)" icon="icon-putout" operationCode="putout" funname="ExportXls"></t:dgToolBar>
  60. <t:dgToolBar title="导出排班模板" icon="icon-putout" operationCode="putout" funname="ExportXlsTemplate"></t:dgToolBar>
  61. <t:dgToolBar title="导入排班excel" icon="icon-put" operationCode="put" funname="ImportXls" ></t:dgToolBar>
  62. <t:dgToolBar title="恢复上次排班" icon="icon-redo" funname="RedoArrange"></t:dgToolBar>
  63. <t:dgToolBar title="刷新" icon="icon-refresh" url="projarrangeDetailController.do?saveRows" funname="recalculateDuration"></t:dgToolBar>
  64. </t:datagrid>
  65. </div>
  66. <script>
  67. $(function() {
  68. var datagrid = $("#projarrangeDetailListtb");
  69. // datagrid.prepend($("#yearmonth1 div[name='yearmonth2']").html());
  70. datagrid.children(".datagrid-toolbar").before($("#yearmonth1 div[name='yearmonth2']").html());
  71. $("#yearmonth1").html('');
  72. datagrid.children(".datagrid-toolbar").children("span:first").attr("style","float:left;margin-bottom:4px;");
  73. });
  74. </script>
  75. <div id="yearmonth1" style="display: none;">
  76. <div name="yearmonth2">
  77. <div name="yearmonth" style="margin:23px 0 18px 0;">
  78. <t:formvalid formid="formobj" dialog="false" tipSweep="true" layout="table" action="wagestrategyController.do?saveRows" tiptype="1" callback="callback">
  79. <span>
  80. <label class="Validform_label">
  81. &nbsp;&nbsp;&nbsp;&nbsp;<span color="red" class="requiredIcon">*</span>排班月度:
  82. </label>
  83. <input id="yearmonth" name="yearmonth" style="width: 150px;" type="text" placeholder="请选择排班月度" class="Wdate" datatype="*" onclick="WdatePicker({onpicked:yearmonthChange,dateFmt:'yyyy-MM',minDate:'2017-01',maxDate:'2026-12'})" readonly="readonly" value="${yearmonth}"/>
  84. <span class="Validform_checktip"></span>
  85. <label class="Validform_label" style="display: none;"><t:mutiLang langKey="costplan.occurTime" /></label>
  86. </span>
  87. <span>
  88. <label class="Validform_label">
  89. &nbsp;&nbsp;&nbsp;&nbsp;<span color="red" class="requiredIcon">*</span>项目名称:
  90. </label>
  91. <input readonly="true" type="text" id="departname" name="departname" style="width: 150px;" value="${departname}" placeholder="请选择项目名称" onclick="openDepartmentSelect()"/>
  92. <input id="pid" name=pid type="hidden" value="${pid},"/>
  93. <a href="#" class="easyui-linkbutton" plain="true" icon="icon-select" id="departSearch" onclick="openDepartmentSelect()">选择</a>
  94. <a href="#" class="easyui-linkbutton" plain="true" icon="icon-clean" id="departRedo" onclick="callbackClean()">清空</a>
  95. </span>
  96. <span>
  97. <label class="Validform_label">员工姓名:
  98. </label>
  99. <input type="text" id="usernamesearch" name="usernamesearch" style="width: 150px;" value="${username}" />
  100. <a href="#" class="easyui-linkbutton" plain="true" icon="icon-select" id="usersearch" onclick="openUserSearch()">搜索员工</a>
  101. </span>
  102. <span style="float: right;">
  103. <a href="#" style="float: right;" class="easyui-linkbutton" plain="true" icon="icon-add" operationCode="add" id="" onclick="onDutyOperate()">轮流值班/加班</a>
  104. <a href="#" style="float: right;" class="easyui-linkbutton" plain="true" icon="icon-add" operationCode="add" id="" onclick="monthArrange()">月度排班</a>
  105. <a href="#" style="float: right;" class="easyui-linkbutton" plain="true" icon="icon-select" id="" onclick="copyLastMonthArrange()">复制上月排班</a>
  106. </span>
  107. </t:formvalid>
  108. </div>
  109. </div>
  110. </div>
  111. </div>
  112. <!-- <div id="yy" class="easyui-dialog" title="costplan.view.lx.plan" style="width: 110px; height: 110px; overflow: hidden"> -->
  113. <script src = "webpage/cn/com/lzt/projarrangedetail/projarrangeDetailList.js"></script>
  114. <script type="text/javascript">
  115. var pid = '${pid}';
  116. var optAuthPid = '000000006120dd36016121facf07003b,ff80808166d20afa0166d892bb940095,000000006120dd1c01612ca9126d011f,ff808081657e96b101657ee53cee018c,ff80808166d20afa0166d892bb940095,ff80808166d20afa0166d8b4c5d3010b,ff80808169d2121b0169d80091d62e96';
  117. //导入
  118. function ImportXls() {
  119. var pid=$("#pid").val();
  120. if(optAuthPid.indexOf(pid) == -1){
  121. tip("此功能正在开发中,敬请等待");
  122. }else{
  123. openuploadwin('Excel导入', 'projarrangeDetailController.do?upload', "projarrangeDetailList");
  124. }
  125. }
  126. //导出
  127. function ExportXls() {
  128. // var pid=$("#pid").val();
  129. // var yearmonth=$("#yearmonth").val();
  130. JeecgExcelExport("projarrangeDetailController.do?exportXls" ,"projarrangeDetailList");
  131. }
  132. //模板下载
  133. function ExportXlsByT() {
  134. JeecgExcelExport("projarrangeDetailController.do?exportXlsByT","projarrangeDetailList");
  135. }
  136. //下载排班模板
  137. function ExportXlsTemplate() {
  138. var pid=$("#pid").val();
  139. if(optAuthPid.indexOf(pid) == -1){
  140. tip("此功能正在开发中,敬请等待");
  141. }else{
  142. JeecgExcelExport("projarrangeDetailController.do?exportXlsTemplate" ,"projarrangeDetailList");
  143. }
  144. }
  145. //新增
  146. function add(title,url,id){
  147. window.location.href=url;
  148. }
  149. //修改
  150. function update(title,url, id){
  151. updateNotCreateWin("修改",url, "projarrangeDetailList",false);
  152. }
  153. //查看
  154. function view(title,url, id){
  155. viewNotCreateWin("查看",url, "projarrangeDetailList",false);
  156. }
  157. //轮流值班
  158. function onDutyOperate(){
  159. //debugger;
  160. var yearmonth = $("#yearmonth").val();
  161. var date = new Date();
  162. var day = date.getDate();
  163. if(day> 1 && day <6){
  164. layer.alert("每月2日~5日为考勤和工资核算期, 不能修改排班");
  165. return false;
  166. }
  167. /* var flag=arrangeDateRule(yearmonth);
  168. if(flag==false){
  169. layer.alert("项目处排班时间为每月1-20号,只能向后排一个月的");
  170. return false;
  171. } */
  172. var pid = $("#pid").val();
  173. if(pid.length<10){
  174. layer.alert("请选择项目名称");
  175. return false;
  176. }
  177. $.ajax({
  178. url:"projarrangeDetailController.do?checkMonthArrangeDutyStatus",
  179. type:"post",
  180. data: {
  181. pid:pid,
  182. yearmonth:yearmonth
  183. },
  184. cache : false,
  185. success:function(data){
  186. var d = data; // ------ $.parseJSON(data);
  187. if(d.msg=="2"){
  188. layer.alert("排班已经确认,无法再次排班");
  189. return false;
  190. }else{
  191. $.dialog({content: 'url:onDutyOperateController.do?list&yearmonth='+yearmonth+'&pid='+pid, zIndex: getzIndex(), title: '轮流值班/加班', lock: true, width: '1000px', height: '500px',
  192. opacity: 0.4, button: [
  193. {name: '<t:mutiLang langKey="common.confirm"/>', callback: function(){
  194. //刷新表格数据
  195. refresh();
  196. //获得子页面getReason()方法中的值
  197. var iframe = this.iframe.contentWindow;
  198. if(iframe.getReason().length>0){
  199. var strData=eval(iframe.getReason());
  200. var onDutyOperateId="";
  201. for(var key in strData[0]){
  202. if(key=="onDutyOperateId"){
  203. onDutyOperateId=strData[0][key];
  204. }
  205. }
  206. //var arrangeDutyStatus="0";
  207. $.ajax({
  208. url:"projarrangeDetailController.do?saveOndutyArrangeDutyOperate",
  209. async:true,
  210. type:"post",
  211. data: {
  212. onDutyOperateId : onDutyOperateId,
  213. yearmonth : yearmonth,
  214. pid : pid
  215. },
  216. cache : false,
  217. success:function(aj){
  218. data=JSON.parse(aj);
  219. if (data.success) {
  220. //tip(data.msg);
  221. //layer.alert(data.msg);
  222. //刷新表格数据
  223. refresh();
  224. } else {
  225. layer.alert(data.msg);
  226. }
  227. }
  228. });
  229. }
  230. }, focus: true},
  231. {name: '<t:mutiLang langKey="common.cancel"/>', callback: function (){
  232. refresh();
  233. }}
  234. ]}).zindex();
  235. }
  236. }
  237. });
  238. }
  239. /* function monthArrange(){
  240. // var url ="tBusCostPlanController.do?viewlxplan&id="+id;
  241. $.dialog(
  242. {
  243. content : 'url:arrangeDutyOperateController.do?list',
  244. zIndex : getzIndex(),
  245. title : '<t:mutiLang langKey="costplan.view.lx.plan" />',//选择框标题
  246. lock : true,//是否锁定 当为true 时 下层有蒙版,不允许用户在弹出窗口以外有其它操作
  247. width : '1200px',// 选择框宽度
  248. height : '350px',//选择框高度
  249. opacity : 0.4,//透明度 (经过测试 效果好像不太明显 )
  250. button : [ {
  251. name : '<t:mutiLang langKey="common.close" />',
  252. focus : true,
  253. callback : function() {
  254. }
  255. } ,
  256. {
  257. name : '<t:mutiLang langKey="common.close" />',
  258. focus : true,
  259. callback : function() {
  260. }
  261. } ]
  262. }).zindex();
  263. } */
  264. //月度排班
  265. function monthArrange(){
  266. //debugger;
  267. var yearmonth = $("#yearmonth").val();
  268. /* var flag=arrangeDateRule(yearmonth);
  269. if(flag==false){
  270. layer.alert("项目处排班时间为每月1-20号,只能向后排一个月的");
  271. return false;
  272. } */
  273. var date = new Date();
  274. var day = date.getDate();
  275. // if(day> 1 && day <6){
  276. // layer.alert("每月2日~5日为考勤和工资核算期, 不能修改排班");
  277. // return false;
  278. // }
  279. var pid = $("#pid").val();
  280. if(pid.length<10){
  281. layer.alert("请选择项目名称");
  282. return false;
  283. }
  284. $.ajax({
  285. url:"projarrangeDetailController.do?checkMonthArrangeDutyStatus",
  286. type:"post",
  287. data: {
  288. pid:pid,
  289. yearmonth:yearmonth
  290. },
  291. cache : false,
  292. success:function(data){
  293. var d = data; // ------ $.parseJSON(data);
  294. if(d.msg=="2"){
  295. layer.alert("排班已经确认,无法再次排班");
  296. return false;
  297. }else{
  298. $.dialog({content: 'url:arrangeDutyOperateController.do?list&yearmonth='+yearmonth+'&pid='+pid, zIndex: getzIndex(), title: '月度排班', lock: true, width: '1000px', height: '500px',
  299. opacity: 0.4, button: [
  300. {name: '<t:mutiLang langKey="common.confirm"/>', callback: function(){
  301. //刷新表格数据
  302. refresh();
  303. //获得子页面getReason()方法中的值
  304. var iframe = this.iframe.contentWindow;
  305. if(iframe.getReason().length>0){
  306. var strData=eval(iframe.getReason());
  307. var arrangeDutyOperateId="";
  308. for(var key in strData[0]){
  309. if(key=="arrangeDutyOperateId"){
  310. arrangeDutyOperateId=strData[0][key];
  311. }
  312. }
  313. var arrangeDutyStatus="0";
  314. $.ajax({
  315. url:"projarrangeDetailController.do?saveMonthArrangeDutyOperate",
  316. async:true,
  317. type:"post",
  318. data: {
  319. arrangeDutyOperateId : arrangeDutyOperateId,
  320. yearmonth : yearmonth,
  321. pid : pid,
  322. arrangeDutyStatus : arrangeDutyStatus
  323. },
  324. cache : false,
  325. success:function(aj){
  326. data=JSON.parse(aj);
  327. if (data.success) {
  328. //tip(data.msg);
  329. //刷新表格数据
  330. refresh();
  331. } else {
  332. layer.alert(data.msg);
  333. }
  334. }
  335. });
  336. }
  337. }, focus: true},
  338. {name: '<t:mutiLang langKey="common.cancel"/>', callback: function (){
  339. refresh();
  340. }}
  341. ]}).zindex();
  342. }
  343. }
  344. });
  345. }
  346. //给日期周末的列名添加颜色样式
  347. $(function(){
  348. var specialCalendar=$("#specialCalendar").val();
  349. var specialCalendarArr=eval(specialCalendar);
  350. var datagrid = $(".datagrid-view2").children("div").children("div");
  351. //$("td[field='postid']").css({"color":"red"})
  352. datagrid.children("table").find("td").each(function(){
  353. //arr[$(this).index()] = $(this).val();
  354. //获取filed值;
  355. var field=($(this)[0].attributes)[0].value;
  356. //获取td值;
  357. var tdVal=$(this).text();
  358. for(var key in specialCalendarArr[0]){
  359. if(field==key){
  360. if(parseInt(specialCalendarArr[0][key])>5){
  361. //给列赋颜色
  362. $("td[field='"+field+"']").css({"background":"#d65653"});
  363. $("td[field='"+field+"']").css({"color":"#ffffff"});
  364. }else{
  365. //给列赋颜色
  366. $("td[field='"+field+"']").css({"background":"#5187c9"});
  367. $("td[field='"+field+"']").css({"color":"#ffffff"});
  368. }
  369. }
  370. }
  371. });
  372. });
  373. //排班月度默认选择当前月
  374. /* $(function(){
  375. var yearmonth=getYearMonth();
  376. $("#yearmonth").val(yearmonth);
  377. $("#tempTime").val(yearmonth);
  378. //getData(yearmonth);
  379. }) */
  380. //异步获取表单数据
  381. /* function getData(yearmonth){
  382. var pid="";
  383. pid=$("#pid").val();
  384. var arr = yearmonth.split("-");
  385. //获取当前年
  386. var year=arr[0];
  387. //获取当前月
  388. var month=arr[1];
  389. var htmlCode="";
  390. $.ajax({
  391. url : "projarrangeDetailController.do?getCalendar",
  392. type : 'post',
  393. data : {
  394. year : year,
  395. month : month
  396. },
  397. cache : false,
  398. success : function(data) {
  399. var d = data; // ------ $.parseJSON(data);
  400. //console.log(d.attributes[0]);
  401. var strDate="";
  402. for(var i=d.attributes[0].length-1;i>=0;i--){
  403. if(htmlCode.length!=0){
  404. htmlCode+="<td width='120' field='"+d.attributes[0][i].year+"-"+d.attributes[0][i].month+"-"+d.attributes[0][i].day+"' >"+
  405. "<div class='datagrid-cell' style='width: 104px;'><span>"+
  406. d.attributes[0][i].month+"月"+d.attributes[0][i].day+"日"+
  407. "</span><span class='datagrid-sort-icon'>&nbsp;</span></div></td>";
  408. }else{
  409. htmlCode="<td width='120' field='"+d.attributes[0][i].year+"-"+d.attributes[0][i].month+"-"+d.attributes[0][i].day+"' >"+
  410. "<div class='datagrid-cell' style='width: 104px;'><span>"+
  411. d.attributes[0][i].month+"月"+d.attributes[0][i].day+"日"+
  412. "</span><span class='datagrid-sort-icon'>&nbsp;</span></div></td>";
  413. }
  414. if(strDate.length!=0){
  415. strDate+=","+d.attributes[0][i].year+"-"+d.attributes[0][i].month+"-"+d.attributes[0][i].day;
  416. }else{
  417. strDate=d.attributes[0][i].year+"-"+d.attributes[0][i].month+"-"+d.attributes[0][i].day;
  418. }
  419. }
  420. var myTable=$(".datagrid-view2").children("div").children("div").children("table").children("tbody").children("tr:first");
  421. myTable.children("td:first").next().next().next().after(htmlCode);
  422. $("#strDate").val(strDate);
  423. $('#projarrangeDetailList').datagrid('insertRow',{
  424. //index: rowIndex, // 索引从0开始
  425. row: {
  426. postid: "1",
  427. userid: "1",
  428. timeOutOvertimeHours: "1",
  429. workingDays: "1"
  430. }
  431. });
  432. }
  433. });
  434. }
  435. */
  436. //定义排班日期规则
  437. function arrangeDateRule(yearmonth){
  438. var flag=false;
  439. var myDate=new Date;
  440. if(parseInt(myDate.getDate())>20||myDate.getFullYear()!=yearmonth.split("-")[0]||myDate.getMonth()+2!=yearmonth.split("-")[1]){
  441. //layer.alert("项目处排班时间为每月1-20号,只能向后排一个月的,排班上报时间截止到每月20号 23:59分,21号到月末默认不可提交");
  442. flag= false;
  443. }else{
  444. flag= true;
  445. }
  446. return flag;
  447. }
  448. function getYearMonthDate(){
  449. var myDate = new Date("2017-01-01");
  450. //获取当前年
  451. var year=myDate.getFullYear();
  452. //获取当前月
  453. var month=myDate.getMonth()+1;
  454. //获取当前日
  455. var date=myDate.getDate();
  456. return year+"-"+month+"-"+date;
  457. }
  458. //选择排班月度
  459. function yearmonthChange(){
  460. var yearmonth=$(this).val();
  461. $("#tempTime").val(yearmonth);
  462. var pid=$("#pid").val();
  463. if(pid.length<10){
  464. return false;
  465. }
  466. var dateNumber=yearmonth.split("-");
  467. window.location.href="projarrangeDetailController.do?list&year="+dateNumber[0]+"&month="+dateNumber[1]+"&pid="+pid;
  468. }
  469. function openUserSearch(){
  470. var tempTime=$("#tempTime").val();
  471. var myPId=$('#pid').val();
  472. var username = $("#usernamesearch").val();
  473. //根据项目名称查询数据
  474. if(myPId!=""&&tempTime!=""){
  475. var dateNumber=tempTime.split("-");
  476. window.location.href="projarrangeDetailController.do?list&year="+dateNumber[0]+"&month="+dateNumber[1]+"&pid="+myPId+"&usernamesearch="+encodeURI(username);
  477. }
  478. }
  479. //选择项目名称,列表================
  480. function openDepartmentSelect() {
  481. //$.dialog.setting.zIndex = getzIndex();
  482. var orgIds = $("#pid").val();
  483. $.dialog({
  484. content: 'url:dialogDealController.do?projectDepartTablePart&ids='+orgIds, zIndex: getzIndex(), title: '项目名称列表', lock: true, width: '600px', height: '350px', opacity: 0.4, button: [
  485. {name: '<t:mutiLang langKey="common.confirm"/>', callback: function (){
  486. var iframe = this.iframe.contentWindow;
  487. if(iframe.getReason().length>0){
  488. var strData=eval(iframe.getReason());
  489. for(var key in strData[0]){
  490. if(key=="strPId"){
  491. $("#pid").val(strData[0][key]);
  492. }else if(key=="strDepartName"){
  493. $("#departname").val(strData[0][key]);
  494. }
  495. }
  496. var tempTime=$("#tempTime").val();
  497. var myPId=$('#pid').val();
  498. //根据项目名称查询数据
  499. if(myPId!=""&&tempTime!=""){
  500. var dateNumber=tempTime.split("-");
  501. window.location.href="projarrangeDetailController.do?list&year="+dateNumber[0]+"&month="+dateNumber[1]+"&pid="+myPId;
  502. }
  503. }
  504. }, focus: true},
  505. {name: '<t:mutiLang langKey="common.cancel"/>', callback: function (){}}
  506. ]}).zindex();
  507. }
  508. function refresh1() {
  509. var pid = $("#pid").val();
  510. if(pid.length<10){
  511. layer.alert("请选择项目名称");
  512. return false;
  513. }
  514. var tempTime=$("#tempTime").val();
  515. if(tempTime.length = 0){
  516. layer.alert("请选择排班月度");
  517. return false;
  518. }
  519. var dateNumber=tempTime.split("-");
  520. window.location.href="projarrangeDetailController.do?list&year="+dateNumber[0]+"&month="+dateNumber[1]+"&pid="+pid;
  521. }
  522. function callbackClean(){
  523. $('#departname').val('');
  524. $('#pid').val('');
  525. }
  526. //选择项目名称列表================
  527. /* //部门选择==========
  528. function openDepartmentSelect() {
  529. //$.dialog.setting.zIndex = getzIndex();
  530. var orgIds = $("#pid").val();
  531. $.dialog({content: 'url:projarrangeDetailController.do?departZTreeSelect&orgIds='+orgIds, zIndex: getzIndex(), title: '所属部门列表', lock: true, width: '400px', height: '350px', opacity: 0.4, button: [
  532. {name: '<t:mutiLang langKey="common.confirm"/>', callback: callbackDepartmentSelect, focus: true},
  533. {name: '<t:mutiLang langKey="common.cancel"/>', callback: function (){}}
  534. ]}).zindex();
  535. }
  536. function callbackDepartmentSelect() {
  537. var iframe = this.iframe.contentWindow;
  538. var treeObj = iframe.$.fn.zTree.getZTreeObj("departSelect");
  539. var nodes = treeObj.getCheckedNodes(true);
  540. if(nodes.length>0){
  541. var ids='',names='';
  542. for(i=0;i<nodes.length;i++){
  543. var node = nodes[i];
  544. ids += node.id+',';
  545. names += node.name+',';
  546. }
  547. $('#departname').val(names.substring(0,names.indexOf(",")));
  548. $('#departname').blur();
  549. $('#pid').val(ids);
  550. var tempTime=$("#tempTime").val();
  551. //根据项目名称查询数据
  552. if(ids!=""&&tempTime!=""){
  553. var myPId=$('#pid').val();
  554. var dateNumber=tempTime.split("-");
  555. window.location.href="projarrangeDetailController.do?list&year="+dateNumber[0]+"&month="+dateNumber[1]+"&pid="+myPId;
  556. }else{
  557. }
  558. }
  559. }
  560. //清空
  561. function callbackClean(){//projarrangeDetailList
  562. //$('#projarrangeDetailListtb').datagrid('loadData', { total: 0, rows: [] });
  563. $('#departname').val('');
  564. $('#pid').val('');
  565. //获得所有行数据并删除
  566. var rowsAll = $("#projarrangeDetailList").datagrid('getData').rows;
  567. if (rowsAll.length>0) {
  568. for (var i = rowsAll.length - 1; i >= 0; i--) {
  569. var index = $('#projarrangeDetailList').datagrid('getRowIndex', rowsAll[i]);
  570. $('#projarrangeDetailList').datagrid('deleteRow', index);
  571. }
  572. }
  573. }
  574. //部门选择========== */
  575. var editRowSize=0;
  576. //编辑行
  577. function editRow(title,addurl,gname){
  578. var date = new Date();
  579. var day = date.getDate();
  580. if(day> 1 && day <6){
  581. layer.alert("每月2日~5日为考勤和工资核算期, 不能修改排班");
  582. return false;
  583. }
  584. var rows=$('#'+gname).datagrid("getChecked");
  585. if(rows.length==0){
  586. layer.alert("请选择条目");
  587. return false;
  588. }else{
  589. editRowSize=parseInt(editRowSize)+parseInt(1);
  590. }
  591. // if(parseInt(editRowSize)>5){
  592. // layer.alert("最多同时编辑5行数据");
  593. // return false;
  594. // }
  595. //排班月度
  596. var yearmonth=$("#yearmonth").val();
  597. var pid=$("#pid").val();
  598. var projarrangeDetailId=rows[0].id;
  599. var flag=arrangeDateRule(yearmonth);
  600. /* if(flag==false){
  601. layer.alert("项目处排班时间为每月1-20号,只能向后排一个月的");
  602. return false;
  603. } */
  604. $.ajax({
  605. url:"projarrangeDetailController.do?checkMonthArrangeDutyStatus",
  606. type:"post",
  607. data: {
  608. pid:pid,
  609. yearmonth:yearmonth
  610. },
  611. cache : false,
  612. success:function(data){
  613. var d = data; // ------ $.parseJSON(data);
  614. if(d.msg=="2"){
  615. layer.alert("排班已经确认,无法编辑");
  616. return false;
  617. }else{
  618. //异步判断是否可以行编辑
  619. /* $.ajax({
  620. url : "projarrangeDetailController.do?getCheckEdit",
  621. type : 'post',
  622. data : {
  623. id : projarrangeDetailId,
  624. yearmonth : yearmonth
  625. },
  626. cache : false,
  627. success : function(data) {
  628. var d = data; // ------ $.parseJSON(data);
  629. if (d.success==false) {
  630. var msg = d.msg;
  631. layer.alert(msg);
  632. return false;
  633. }else{ */
  634. for(var i=0;i<rows.length;i++){
  635. var index= $('#'+gname).datagrid('getRowIndex', rows[i]);
  636. $('#'+gname).datagrid('beginEdit', index);
  637. }
  638. // }
  639. // }
  640. // });
  641. }
  642. }
  643. });
  644. }
  645. //结束编辑
  646. function endEdit(gname){
  647. var editIndex = $('#'+gname).datagrid('getRows').length-1;
  648. for(var i=0;i<=editIndex;i++){
  649. if($('#'+gname).datagrid('validateRow', i)){
  650. $('#'+gname).datagrid('endEdit', i);
  651. }else{
  652. return false;
  653. }
  654. }
  655. return true;
  656. }
  657. //取消编辑
  658. function reject(title,addurl,gname){
  659. var pid = $('#pid').val();
  660. if(pid.length==0){
  661. return false;
  662. }
  663. $('#'+gname).datagrid('clearChecked');
  664. $('#'+gname).datagrid('rejectChanges');
  665. }
  666. //上报
  667. function putout(){
  668. //排班月度
  669. var yearmonth=$("#yearmonth").val();
  670. //项目id
  671. var pid=$("#pid").val();
  672. var date = new Date();
  673. var day = date.getDate();
  674. if(day> 1 && day <6){
  675. layer.alert("每月2日~5日为考勤和工资核算期, 无法操作");
  676. return false;
  677. }
  678. //日历id
  679. var calendaridStr=$("#calendaridStr").val();
  680. //排班状态1已上报
  681. // var arrangeDutyStatus="1";
  682. /* var flag=arrangeDateRule(yearmonth);
  683. if(flag==false){
  684. layer.alert("项目处排班时间为每月1-20号,只能向后排一个月的,排班上报时间截止到每月20号 23:59分,21号到月末默认不可提交;");
  685. return false;
  686. } */
  687. //获得所有行数据
  688. var rows = $("#projarrangeDetailList").datagrid('getData').rows;
  689. if (rows.length>0) {
  690. var flag=true;
  691. var strmap="[";
  692. for(var i=0;i<rows.length;i++){
  693. strmap+="{";
  694. for(var d in rows[i]){
  695. strmap+='"'+d+'":"'+rows[i][d]+'",';
  696. if(d=="pjtPostId"){
  697. if(rows[i][d]==""){
  698. flag=false;
  699. }
  700. }
  701. }
  702. if(i!=rows.length-1){
  703. strmap+="},";
  704. }else{
  705. strmap+="}";
  706. }
  707. }
  708. strmap+="]";
  709. $.ajax({
  710. url:"projarrangeDetailController.do?checkMonthArrangeDutyStatus",
  711. type:"post",
  712. data: {
  713. pid:pid,
  714. yearmonth:yearmonth
  715. },
  716. cache : false,
  717. success:function(data){
  718. var d = data; // ------ $.parseJSON(data);
  719. if(d.msg==""){
  720. layer.alert("没有排班数据,请先进行排班");
  721. return false;
  722. }else if(d.msg=="0"){//可以上报
  723. if(flag==false){
  724. $.messager.confirm("有员工未排班", "确定要上报吗?", function (r) {
  725. if (r) {
  726. putOutEnd(yearmonth,pid);
  727. }
  728. });
  729. }else{
  730. putOutEnd(yearmonth,pid);
  731. }
  732. }else if(d.msg=="1"){//已经上报,再次上报
  733. $.messager.confirm("已有上报记录", "确定要再次上报吗?", function (r) {
  734. if (r) {
  735. putOutEnd(yearmonth,pid);
  736. }
  737. });
  738. }else if(d.msg=="2"){
  739. layer.alert("排班已经确认,无法再次上报");
  740. return false;
  741. }
  742. }
  743. });
  744. }else{
  745. layer.alert("没有需要上报的数据!");
  746. return false;
  747. }
  748. }
  749. //排班上报最终提交代码
  750. function putOutEnd(yearmonth,pid){
  751. $.ajax({
  752. url:"projarrangeDetailController.do?putOutProjarrange",
  753. type:"post",
  754. data: {
  755. "yearmonth":yearmonth,
  756. "pid":pid
  757. },
  758. cache : false,
  759. success:function(data){
  760. var d = data; // ------ $.parseJSON(data);
  761. if(d.success){
  762. tip(d.msg);
  763. refresh();
  764. }else{
  765. layer.alert(d.msg);
  766. }
  767. }
  768. });
  769. }
  770. //保存数据
  771. function saveData(title,addurl,gname){
  772. if(!endEdit(gname)){
  773. return false;
  774. }
  775. var rows=$('#'+gname).datagrid("getChanges","inserted");
  776. var uprows=$('#'+gname).datagrid("getChanges","updated");
  777. rows=rows.concat(uprows);
  778. if(rows.length<=0){
  779. layer.alert("您没有任何操作!");
  780. return false;
  781. }
  782. //排班月度
  783. var yearmonth=$("#yearmonth").val();
  784. //项目pid
  785. var pid=$("#pid").val();
  786. //日历id
  787. var calendaridStr=$("#calendaridStr").val();
  788. //排班状态0未上报
  789. var arrangeDutyStatus="0";
  790. var strmap="[";
  791. for(var i=0;i<rows.length;i++){
  792. strmap+="{";
  793. for(var d in rows[i]){
  794. //result["projectPostUserMiniDaoDtoList["+i+"]."+d]=rows[i][d];
  795. /* if(strmap.length==2){
  796. strmap+='"'+d+'":"'+rows[i][d]+'"';
  797. }else{
  798. strmap+=',"'+d+'":"'+rows[i][d]+'"';
  799. } */
  800. strmap+='"'+d+'":"'+rows[i][d]+'",';
  801. }
  802. if(i!=rows.length-1){
  803. strmap+="},";
  804. }else{
  805. strmap+="}";
  806. }
  807. }
  808. strmap+="]";
  809. //验证班次是否为停用状态,为停用状态则不可编辑
  810. $.ajax({
  811. url:"projarrangeDetailController.do?checkShiftStatus",
  812. type:"post",
  813. data: {
  814. "strmap":strmap
  815. },
  816. cache : false,
  817. success:function(data){
  818. var d = data; // ------ $.parseJSON(data);
  819. if(d.success){
  820. $.ajax({
  821. url:"projarrangeDetailController.do?saveRows",
  822. type:"post",
  823. data: {"strmap":strmap,
  824. "calendaridStr":calendaridStr,
  825. "yearmonth":yearmonth,
  826. "pid":pid,
  827. "arrangeDutyStatus":arrangeDutyStatus},
  828. cache : false,
  829. success:function(data){
  830. var d = data; // ------ $.parseJSON(data);
  831. if(d.success){
  832. tip(d.msg);
  833. refresh();
  834. }else{
  835. layer.alert(d.msg);
  836. return false;
  837. }
  838. }
  839. });
  840. }else{
  841. layer.alert(d.msg);
  842. for(var i=0;i<rows.length;i++){
  843. var index= $('#'+gname).datagrid('getRowIndex', rows[i]);
  844. $('#'+gname).datagrid('beginEdit', index);
  845. }
  846. return false;
  847. }
  848. }
  849. });
  850. }
  851. // 重新计算超时加班时长、国定加班时长等
  852. function recalculateDuration(title, addurl, gname){
  853. $.messager.confirm("确认", "您确定刷新数据?<br/>刷新会更新核算数据,耗时较长请您耐心等待。", function (r) {
  854. if(r){
  855. if(!endEdit(gname)){
  856. return false;
  857. }
  858. // 获取所有行
  859. var rows=$('#'+gname).datagrid("getRows");
  860. if(rows.length<=0){
  861. layer.alert("没有数据无法进行此操作!");
  862. return false;
  863. }
  864. //排班月度
  865. var yearmonth=$("#yearmonth").val();
  866. //项目pid
  867. var pid=$("#pid").val();
  868. //日历id
  869. var calendaridStr=$("#calendaridStr").val();
  870. //排班状态0未上报
  871. var arrangeDutyStatus="0";
  872. var strmap="[";
  873. for(var i=0;i<rows.length;i++){
  874. strmap+="{";
  875. for(var d in rows[i]){
  876. strmap+='"'+d+'":"'+rows[i][d]+'",';
  877. }
  878. if(i!=rows.length-1){
  879. strmap+="},";
  880. }else{
  881. strmap+="}";
  882. }
  883. }
  884. strmap+="]";
  885. //验证班次是否为停用状态,为停用状态则不可编辑
  886. $.ajax({
  887. url:"projarrangeDetailController.do?checkShiftStatus",
  888. type:"post",
  889. data: {
  890. "strmap":strmap
  891. },
  892. cache : false,
  893. success:function(data){
  894. var d = data; // ------ $.parseJSON(data);
  895. if(d.success){
  896. $.ajax({
  897. url:"projarrangeDetailController.do?saveRows",
  898. type:"post",
  899. data: { "strmap":strmap,
  900. "calendaridStr":calendaridStr,
  901. "yearmonth":yearmonth,
  902. "pid":pid,
  903. "arrangeDutyStatus":arrangeDutyStatus},
  904. cache : false,
  905. success:function(data){
  906. var d = data; // ------ $.parseJSON(data);
  907. if(d.success){
  908. tip(d.msg);
  909. refresh();
  910. }else{
  911. layer.alert(d.msg);
  912. return false;
  913. }
  914. }
  915. });
  916. }else{
  917. layer.alert(d.msg);
  918. for(var i=0;i<rows.length;i++){
  919. var index= $('#'+gname).datagrid('getRowIndex', rows[i]);
  920. $('#'+gname).datagrid('beginEdit', index);
  921. }
  922. return false;
  923. }
  924. }
  925. });
  926. }
  927. });
  928. }
  929. //刷新表格数据
  930. function refresh(){
  931. var pid = $('#pid').val();
  932. if(pid.length==0){
  933. return false;
  934. }
  935. //先清除选中,再刷新
  936. $("#projarrangeDetailList").datagrid('clearChecked');
  937. $("#projarrangeDetailList").datagrid('unselectAll');
  938. // $(".datagrid-htable tr:not(:first)").empty("");
  939. //$(".pagination-load").click();
  940. $("#projarrangeDetailList").datagrid('reload');
  941. }
  942. //复制上月月度排班,只复制做五休二运转类型的排班
  943. function copyLastMonthArrange(){
  944. //debugger;
  945. var yearmonth = $("#yearmonth").val();
  946. var pid = $("#pid").val();
  947. if(pid.length<10){
  948. layer.alert("请选择项目名称");
  949. return false;
  950. }
  951. var date = new Date();
  952. var day = date.getDate();
  953. if(day> 1 && day <6){
  954. layer.alert("每月2日~5日为考勤和工资核算期, 不能修改排班");
  955. return false;
  956. }
  957. $.ajax({
  958. url:"projarrangeDetailController.do?copyLastMonthArrange",
  959. type:"post",
  960. data: {
  961. pid:pid,
  962. yearmonth:yearmonth
  963. },
  964. cache : false,
  965. success:function(data){
  966. var d = data; // ------ $.parseJSON(data);
  967. if(d.success == false)
  968. layer.alert(d.msg);
  969. refresh();
  970. return true;
  971. }
  972. })
  973. }
  974. function RedoArrange() {
  975. var pid=$("#pid").val();
  976. if(optAuthPid.indexOf(pid) == -1){
  977. tip("此功能正在开发中,敬请等待");
  978. return;
  979. }
  980. var yearmonth = $("#yearmonth").val();
  981. var pid = $("#pid").val();
  982. if(pid.length<10){
  983. layer.alert("请选择项目名称");
  984. return false;
  985. }
  986. var date = new Date();
  987. var day = date.getDate();
  988. if(day> 1 && day <6){
  989. layer.alert("每月2日~5日为考勤和工资核算期, 不能修改排班");
  990. return false;
  991. }
  992. $.dialog.confirm('你确定恢复此项目'+yearmonth+'月度排班数据吗?', function(r) {
  993. if (r) {
  994. layer.msg('项目月度排班数据恢复中,请稍候···', {
  995. shade: 0.1});
  996. $.ajax({
  997. url:"projarrangeDetailController.do?redoArrange",
  998. type:"post",
  999. data: {
  1000. pid:pid,
  1001. yearmonth:yearmonth
  1002. },
  1003. cache : false,
  1004. success:function(data){
  1005. var d = data; // ------ $.parseJSON(data);
  1006. if(d.success == false)
  1007. layer.alert(d.msg);
  1008. refresh();
  1009. return true;
  1010. }
  1011. })
  1012. }
  1013. });
  1014. }
  1015. </script>