projarrangeDetailAllList.jsp 35 KB

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