tBusActivitiOvertime-add.jsp 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418
  1. <%@ page language="java" import="java.util.*" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
  2. <%@include file="/context/mytags.jsp"%>
  3. <!DOCTYPE html>
  4. <html>
  5. <head>
  6. <title>加班申请录入页面</title>
  7. <style>
  8. .ui-button {
  9. display: inline-block;
  10. padding: 2px 2px;
  11. margin-bottom: 0;
  12. font-size: 8px;
  13. font-weight: normal;
  14. line-height: 1.42857143;
  15. text-align: center;
  16. white-space: nowrap;
  17. vertical-align: middle;
  18. -ms-touch-action: manipulation;
  19. touch-action: manipulation;
  20. cursor: pointer;
  21. -webkit-user-select: none;
  22. -moz-user-select: none;
  23. -ms-user-select: none;
  24. user-select: none;
  25. background-image: none;
  26. border: 1px solid transparent;
  27. border-radius: 4px;
  28. }
  29. </style>
  30. <t:base type="jquery,easyui,tools,DatePicker"></t:base>
  31. <script src="webpage/cn/com/lzt/useractiviti/select_user_tools.js"></script>
  32. <script type="text/javascript">
  33. $(document).ready(function(){
  34. $('#tt').tabs({
  35. onSelect:function(title){
  36. changeTabHeight();
  37. }
  38. });
  39. $(".tabs-wrap").css('width','100%');
  40. $.Datatype.checkHour = function (val, obj, frm) {
  41. var msg = true;
  42. return msg;
  43. }
  44. });
  45. function changeTabHeight(){
  46. var height =window.top.document.body.offsetHeight;
  47. height = height -181.3 - 36 - 100 -4;//去掉底部输入框table高度、title高度、弹出框小于后台页面高度、文本格式高度
  48. $('#tt .panel-body').css('width','auto').css('height',height+'px');
  49. }
  50. var _t;
  51. function openSameDepartUserSelect() {
  52. _t= $(this);
  53. var departId=$('#departId').val();
  54. selectUserByDepart(departId,'选择加班员工',callbacSameDepartUserSelect);
  55. }
  56. function callbacSameDepartUserSelect(selectedRows){
  57. var one = selectedRows[0];
  58. var userid = one.id;
  59. var realName = one.realName;
  60. _t.val(realName);
  61. _t.parent().find('[name$="userid"]').val(userid);
  62. var index=getIndex(_t.attr('name'));
  63. $('#compensate'+index).change();
  64. }
  65. function moneySelectChange() {
  66. var val = $(this).find(':selected').val();
  67. var name = $(this).attr('name');
  68. var index = getIndex(name);
  69. var money=$('#money'+index);
  70. if(val=='exchange'){//调休
  71. money.val(0);
  72. money.attr('readonly','readonly');
  73. changeTotalMoney();
  74. //显示用户调休账户余额
  75. var userId=$('#userid'+index).val();
  76. if(userId){
  77. var month = $('#month').val();
  78. $.post('tBExchangeAccountController.do?getAccountBalance',{userId:userId,year:month},function (d) {
  79. $('#exchangeAccountLeft'+index).val(d);
  80. });
  81. }
  82. }else {//加班费
  83. money.removeAttr('readonly');
  84. $('#exchangeAccountLeft'+index).val('');
  85. changeMoney(index);
  86. }
  87. }
  88. function getIndex(name){
  89. var indexStart = name.indexOf('[');
  90. var indexEnd=name.indexOf(']');
  91. var index = name.substr(indexStart+1,(indexEnd-indexStart-1));
  92. return index;
  93. }
  94. function bindStartTimeClick(){
  95. /* var index = getIndex($(this).attr('name'));
  96. var endTimeId = "endTime"+index
  97. var overtimeMonth = $('#month').val();
  98. var minDate =overtimeMonth+'-01 0:0:0';
  99. var maxDate = "#F{$dp.$D('"+endTimeId+"')||'"+overtimeMonth+"-%ld 23:59:59'}";
  100. WdatePicker({ dateFmt:'yyyy-MM-dd HH:mm:ss',
  101. minDate:minDate,
  102. maxDate:maxDate
  103. });*/
  104. WdatePicker({dateFmt:'yyyy-MM-dd HH:mm:ss'});
  105. }
  106. function bindEndTimeClick(){
  107. /*var index = getIndex($(this).attr('name'));
  108. var startTimeId = "startTime"+index;
  109. var overtimeMonth = $('#month').val();
  110. var minDate ="#F{$dp.$D('"+startTimeId+"')||'"+overtimeMonth+"-01'}";
  111. var maxDate = overtimeMonth+'-%ld 23:59:59';
  112. WdatePicker({
  113. dateFmt:'yyyy-MM-dd HH:mm:ss',
  114. minDate:minDate,
  115. maxDate:maxDate
  116. });*/
  117. WdatePicker({dateFmt:'yyyy-MM-dd HH:mm:ss'});
  118. }
  119. function changeMonth() {
  120. $('#add_tBusActivitiOvertimeDetail_table').html('');
  121. changeTotalMoney();
  122. changeTotalTime();
  123. // $('#add_tBusActivitiOvertimeDetail_table').off('click','input[name$="startTime"]');
  124. // $('#add_tBusActivitiOvertimeDetail_table').on('click','input[name$="startTime"]',bindTimeClick);
  125. }
  126. </script>
  127. </head>
  128. <body style="overflow-x: hidden;">
  129. <%--处理回调--%>
  130. <c:set var="_callback">
  131. <c:choose>
  132. <c:when test="${in_process}">@Overridecallback</c:when>
  133. <c:otherwise>callback</c:otherwise>
  134. </c:choose>
  135. </c:set>
  136. <t:formvalid formid="formobj" dialog="true" usePlugin="password" layout="table" tiptype="1" action="tBusActivitiOvertimeController.do?doAdd"
  137. callback="${_callback}" beforeSubmit="beforeSubmit">
  138. <input id="id" name="id" type="hidden" value="${tBusActivitiOvertimePage.id }"/>
  139. <t:tabs id="tt" iframe="false" tabPosition="top" fit="false">
  140. <t:tab href="tBusActivitiOvertimeController.do?tBusActivitiOvertimeDetailList&id=${tBusActivitiOvertimePage.id}&in_process=${in_process}&flag=${param.flag}" icon="icon-search" title="加班明细" id="tBusActivitiOvertimeDetail"></t:tab>
  141. </t:tabs>
  142. <table cellpadding="0" cellspacing="1" class="formtable">
  143. <tr>
  144. <c:if test="${in_process}">
  145. <td align="right">
  146. <label class="Validform_label">申请人:</label>
  147. </td>
  148. <td class="value">
  149. ${tBusActivitiOvertimePage.createName}
  150. </td>
  151. </c:if>
  152. <td align="right">
  153. <label class="Validform_label">加班项目:</label>
  154. </td>
  155. <td class="value">
  156. <input type="hidden" name="departId" id="departId" value="${empty tBusActivitiOvertimePage.departId?param.departId:tBusActivitiOvertimePage.departId}"/>
  157. <input type="hidden" name="depName" id="depName" value="${empty tBusActivitiOvertimePage.depName?param.depName:tBusActivitiOvertimePage.depName}"/>
  158. ${empty tBusActivitiOvertimePage.depName?param.depName:tBusActivitiOvertimePage.depName}
  159. </td>
  160. <td align="right">
  161. <label class="Validform_label">核算工资月度:</label>
  162. </td>
  163. <td class="value">
  164. <input id="month" name="month" type="text" style="width: 70px" class="inputxt" datatype="*" readonly="readonly"
  165. value="${empty tBusActivitiOvertimePage.month?month:tBusActivitiOvertimePage.month}"
  166. onClick="WdatePicker({dateFmt:'yyyy-MM'})" onchange="changeMonth()"
  167. />
  168. <span class="Validform_checktip"></span>
  169. <label class="Validform_label" style="display: none;">核算工资月度</label>
  170. </td>
  171. <td align="right">
  172. <label class="Validform_label">加班时长总计:</label>
  173. </td>
  174. <td class="value">
  175. <input id="totalHour" name="totalHour" type="text" style="width: 70px" class="inputxt" readonly="readonly" value="${empty tBusActivitiOvertimePage.totalHour?0:tBusActivitiOvertimePage.totalHour}"/>
  176. <span class="Validform_checktip"></span>
  177. <label class="Validform_label" style="display: none;">加班时长总计</label>
  178. </td>
  179. <td align="right" style="display: none;">
  180. <label class="Validform_label">加班费总计:</label>
  181. </td>
  182. <td class="value" style="display: none;">
  183. <input id="totalMoney" name="totalMoney" type="text" style="width: 70px" class="inputxt" readonly="readonly" ignore="ignore" value="${empty tBusActivitiOvertimePage.totalMoney?0:tBusActivitiOvertimePage.totalMoney}"/>
  184. <span class="Validform_checktip"></span>
  185. <label class="Validform_label" style="display: none;">总金额</label>
  186. </td>
  187. <td align="right">
  188. <label class="Validform_label">餐费补助总计:</label>
  189. </td>
  190. <td class="value">
  191. <input id="totalMealsSubsidy" name="totalMealsSubsidy" type="text" style="width: 70px" class="inputxt" readonly="readonly"
  192. value="${empty tBusActivitiOvertimePage.totalMealsSubsidy?0:tBusActivitiOvertimePage.totalMealsSubsidy}"/>
  193. <span class="Validform_checktip"></span>
  194. <label class="Validform_label" style="display: none;">餐费补助总计</label>
  195. </td>
  196. </tr>
  197. <%--<c:if test="${in_process}">
  198. <tr>
  199. <td align="right">
  200. <label class="Validform_label">剩余预算时长:</label>
  201. </td>
  202. <td class="value">
  203. ${budget}小时
  204. </td>
  205. </tr>
  206. </c:if>--%>
  207. <tr>
  208. <td align="right">
  209. <label class="Validform_label">附件:</label>
  210. </td>
  211. <td class="value" align="left" colspan="3">
  212. <t:webUploader auto="true" busiId="${tBusActivitiOvertimePage.id}" readOnly="${param.load=='detail' || in_process}"
  213. busiTable="t_bus_activiti_overtime"
  214. bizType="overtime"
  215. extensions="png,jpg,jpeg,bmp"
  216. name="attachment" duplicate="true" fileNumLimit="10"
  217. nullMsg="附件不可为空"></t:webUploader>
  218. <span class="Validform_checktip Validform_right" style="display: none;">文件已上传</span>
  219. </td>
  220. </tr>
  221. <tr>
  222. <td align="right">
  223. <label class="Validform_label">加班原因:</label>
  224. </td>
  225. <td class="value" colspan="10">
  226. <textarea id="reason" class="inputxt" style="width:100%;height:60px" name="reason" datatype="*" >${tBusActivitiOvertimePage.reason }</textarea>
  227. <span class="Validform_checktip"></span>
  228. <label class="Validform_label" style="display: none;">加班原因</label>
  229. </td>
  230. </tr>
  231. </table>
  232. </t:formvalid>
  233. <!-- 添加 附表明细 模版 -->
  234. <table style="display:none">
  235. <tbody id="add_tBusActivitiOvertimeDetail_table_template">
  236. <tr>
  237. <td align="center"><div style="width: 25px;" name="xh"></div></td>
  238. <td align="center"><input style="width:20px;" type="checkbox" name="ck"/></td>
  239. <td align="left">
  240. <input name="tBusActivitiOvertimeDetailList[#index#].userid" id="userid#index#" maxlength="32" type="hidden" class="inputxt" datatype="*" />
  241. <input name="tBusActivitiOvertimeDetailList[#index#].realName" id="realName#index#"
  242. maxlength="32" type="text" readonly="readonly" class="inputxt" />
  243. <label class="Validform_label" style="display: none;">加班员工</label>
  244. </td>
  245. <td align="left">
  246. <input name="tBusActivitiOvertimeDetailList[#index#].startTime" id="startTime#index#" maxlength="32" type="text" class="Wdate" style="width:150px;" readonly="readonly"
  247. onchange="datejisuanOnOverTime(this)"
  248. />
  249. <label class="Validform_label" style="display: none;">加班开始时间</label>
  250. </td>
  251. <td align="left">
  252. <input name="tBusActivitiOvertimeDetailList[#index#].endTime" id="endTime#index#" maxlength="32" type="text" class="Wdate" style="width:150px;" readonly="readonly"
  253. onchange="datejisuanOnOverTime(this)"
  254. />
  255. <label class="Validform_label" style="display: none;">加班结束时间</label>
  256. </td>
  257. <td align="left">
  258. <input name="tBusActivitiOvertimeDetailList[#index#].hour" id="hour#index#" maxlength="32" type="text" class="inputxt" style="width:120px;" datatype="d"/>
  259. <%--<span>0小时</span>--%>
  260. <label class="Validform_label" style="display: none;">加班时长</label>
  261. </td>
  262. <td align="left">
  263. <t:dictSelect field="tBusActivitiOvertimeDetailList[#index#].compensate" type="list" id="compensate#index#"
  264. typeGroupCode="overtime_compensate" defaultVal="money" hasLabel="false" title="补偿方式" datatype="*"></t:dictSelect>
  265. <label class="Validform_label" style="display: none;">补偿方式</label>
  266. </td>
  267. <td align="left">
  268. <input name="tBusActivitiOvertimeDetailList[#index#].money" id="money#index#" maxlength="32" type="text" class="inputxt" style="width:120px;" datatype="d,fix2"
  269. value="0"
  270. onchange="changeTotalMoney()"
  271. />
  272. <label class="Validform_label" style="display: none;">加班费</label>
  273. </td>
  274. <td align="left">
  275. <input type="text" id="exchangeAccountLeft#index#" class="inputxt" style="width:120px;" readonly="readonly"/>
  276. </td>
  277. <td align="left">
  278. <input name="tBusActivitiOvertimeDetailList[#index#].mealsSubsidy" type="text" class="inputxt" id="mealsSubsidy#index#" style="width:120px;" datatype="d,fix2" value="0.00"/>
  279. <label class="Validform_label" style="display: none;">餐费补助</label>
  280. </td>
  281. <td align="center">
  282. <input name="tBusActivitiOvertimeDetailList[#index#].confirm" type="checkbox" class="checkbox" style="width:54px;text-align: center;margin-left: 30px" />
  283. <label class="Validform_label" style="display: none;">大合同以外费用</label>
  284. </td>
  285. <td align="left">
  286. <input name="tBusActivitiOvertimeDetailList[#index#].remark" maxlength="255" type="text" class="inputxt" style="width:300px;"/>
  287. <label class="Validform_label" style="display: none;">备注</label>
  288. </td>
  289. </tr>
  290. </tbody>
  291. </table>
  292. <table style="width: 100%">
  293. <tr>
  294. <td style="text-align:center;">
  295. <%@include file="../view_submit_buttons.jsp"%>
  296. </td>
  297. </tr>
  298. </table>
  299. </body>
  300. <script src = "webpage/cn/com/lzt/useractiviti/overtime/tBusActivitiOvertime.js"></script>
  301. <script>
  302. function datejisuan(obj){
  303. var index = getIndex($(obj).attr('name'));
  304. var startTime = $("#startTime"+index).val();
  305. var endTime = $("#endTime"+index).val();
  306. // console.log(index+","+startTime+","+endTime);
  307. if(startTime && endTime){
  308. var hours = diffTime(startTime,endTime);
  309. var hourInput = $('#hour'+index);
  310. hourInput.val(hours);
  311. // hourInput.next().html(hours+"小时");
  312. changeTotalTime();
  313. changeMoney(index);
  314. }
  315. }
  316. function changeTotalTime(){
  317. var totalHour = 0;
  318. $('input[name$="hour"]').each(function(){
  319. var hour = $(this).val();
  320. if(hour) {
  321. totalHour += parseFloat(hour);
  322. }
  323. })
  324. $('#totalHour').val(totalHour);
  325. $('#totalHourText').html(totalHour+"小时");
  326. }
  327. function changeMoney(index){
  328. var select =$('#compensate'+index);
  329. var selectVal = select.find(":selected").val();
  330. if(selectVal=='money') {//加班费
  331. var hour = $('#hour'+index).val();
  332. var userId =$('#userid'+index).val();
  333. if(hour){
  334. $.post('tBusActivitiOvertimeController.do?getBaseHourWage',{userId:userId},function(d){
  335. var money = parseFloat(hour)*d*1.5;
  336. $('#money'+index).val(money.toFixed(1));
  337. changeTotalMoney();
  338. });
  339. }
  340. }
  341. }
  342. function changeTotalMoney() {
  343. var totalMoney = 0;
  344. $('input[name$="money"]').each(function(){
  345. var money = $(this).val();
  346. if(money) {
  347. totalMoney += parseFloat(money);
  348. }
  349. });
  350. totalMoney=totalMoney.toFixed(1);
  351. $('#totalMoney').val(totalMoney);
  352. $('#totalMoneyText').html(totalMoney+"元");
  353. }
  354. function diffmm(startDate,endDate){
  355. var diff=Date.parse(endDate.replace(/-/g,"/")) - Date.parse(startDate.replace(/-/g,"/"));//时间差的毫秒数
  356. return Math.round(diff/(60*1000));
  357. }
  358. function diffTime(startDate,endDate) {
  359. var diff= Date.parse(endDate.replace(/-/g,"/")) - Date.parse(startDate.replace(/-/g,"/"));//时间差的毫秒数
  360. //计算出相差天数
  361. var days=Math.floor(diff/(24*3600*1000));
  362. //计算出小时数
  363. var leftHour=diff%(3600*1000)/3600/1000; //计算小时后剩余的毫秒数
  364. if(leftHour>=0.5){
  365. leftHour=0.5;
  366. }else {
  367. leftHour=0;
  368. }
  369. var hours=Math.floor(diff/(3600*1000))+leftHour;
  370. if(hours<0){
  371. hours=0;
  372. }
  373. //计算相差分钟数
  374. /*var leave2=leave1%(3600*1000); //计算小时数后剩余的毫秒数
  375. var minutes=Math.floor(leave2/(60*1000));
  376. //计算相差秒数
  377. /!* var leave3=leave2%(60*1000); //计算分钟数后剩余的毫秒数
  378. var seconds=Math.round(leave3/1000);
  379. var returnStr = seconds + "秒"; *!/
  380. var returnStr = "";
  381. if(minutes>0) {
  382. returnStr = minutes + "分" + returnStr;
  383. }else{
  384. returnStr = "0分" + returnStr;
  385. }
  386. if(hours>0) {
  387. returnStr = hours + "小时" + returnStr;
  388. }else{
  389. returnStr = "0小时" + returnStr;
  390. }
  391. if(days>0) {
  392. returnStr = days + "天" + returnStr;
  393. }*/
  394. return hours;
  395. }
  396. function beforeSubmit() {
  397. var length = $('#tt').find('input[name$="userid"]').length;
  398. if(length==0){
  399. tip('请添加加班用户');
  400. return false;
  401. }
  402. changeTotalTime();
  403. changeTotalMoney();
  404. return true;
  405. }
  406. </script>