userAttendanceTotalList.jsp 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342
  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. <link rel="stylesheet" type="text/css" href="css/commoncss.css"/>
  5. <div class="easyui-layout" fit="true">
  6. <div region="center" style="padding:0px;border:0px">
  7. <t:datagrid name="userAttendanceTotalList"
  8. autoLoadData="false"
  9. checkbox="true" fitColumns="true" title="考勤上报" pagination="false" sortName="inPostid" sortOrder="asc"
  10. actionUrl="userAttendanceTotalController.do?datagrid" idField="id" fit="true" queryMode="group">
  11. <t:dgCol title="主键" field="id" hidden="true" queryMode="single" width="120"></t:dgCol>
  12. <t:dgCol title="员工工号" field="userCode" queryMode="single" width="120"></t:dgCol>
  13. <t:dgCol title="员工姓名" field="userId" queryMode="single" dictionary="t_s_base_user,id,realname" width="120"></t:dgCol>
  14. <t:dgCol title="月度" field="yearmonth" queryMode="single" style="text-align:center," width="100"></t:dgCol>
  15. <%--
  16. 修复bug :WYH-66
  17. 2017/12/13下午确认结果:
  18. 1,所属部门 显示OK
  19. 2,考勤上报一览里,有项目 "所属项目",考勤审核一览里 没有。
  20. 其实 如果 项目名称必须 输入的 话,显示 的人 应该都是同一个项目的。一览里,项目名称 可以不显示。
  21. 也就是说 考勤上报一览里 ,可以去掉 所属项目。
  22. <t:dgCol title="所属项目" field="pid" dictionary="t_s_depart,id,departname, and org_type != '1' " queryMode="single" width="120"></t:dgCol>
  23. --%>
  24. <t:dgCol title="所属部门" field="departid" dictionary="t_s_depart,id,departname, and org_type != '1' " queryMode="single" width="120"></t:dgCol>
  25. <t:dgCol title="所属岗位" field="inPostid" defaultVal="${queryParams.inPostid}" query="false" queryMode="single" dictionary="t_bus_post,id,post_name, and delete_flag = 0 and status = 0" width="120"></t:dgCol>
  26. <t:dgCol title="应出勤时长" field="datumAttendanceDate" formatterjs="minsToHoursandMinsfmt" style="text-align:right," queryMode="single" width="120"></t:dgCol>
  27. <t:dgCol title="实际出勤时长" field="actualAttendanceDate" formatterjs="minsToHoursandMinsfmt" style="text-align:right," queryMode="single" width="120"></t:dgCol>
  28. <t:dgCol title="时间差" field="timeDifferenceTotal" formatterjs="minsToHoursandMinsfmt" style="text-align:right," queryMode="single" width="120"></t:dgCol>
  29. <t:dgCol title="加班时长" field="overtimeTotalTime" formatterjs="minsToHoursandMinsfmt" style="text-align:right," queryMode="single" width="120"></t:dgCol>
  30. <t:dgCol title="休假时长" field="leaveTotalTime" formatterjs="minsToHoursandMinsfmt" style="text-align:right," queryMode="single" width="120"></t:dgCol>
  31. <t:dgCol title="调整记录" field="adjustRecord" defaultVal="${queryParams.adjustRecord}" style="text-align:center," query="false" dictionary="attendance_adjust_status" queryMode="single" width="120"></t:dgCol>
  32. <t:dgCol title="状态" field="confirmStatus" defaultVal="${queryParams.confirmStatus}" style="text-align:center," query="false" dictionary="attendance_report_status" queryMode="single" width="120"></t:dgCol>
  33. <%-- <t:dgToolBar title="计算考勤(临时按钮)" operationCode="readonly" icon="icon-add" operationCode="add" url="userAttendanceTotalController.do?goAdd" funname="chongxinjisuan"></t:dgToolBar> --%>
  34. <t:dgToolBar title="修改" operationCode="updatebtn" icon="icon-edit" operationCode="edit" url="userAttendanceTotalController.do?goUpdate&conform=false" funname="update"></t:dgToolBar>
  35. <t:dgToolBar title="上报" icon="icon-report" url="userAttendanceTotalController.do?doBatchReport" funname="BatchReport"></t:dgToolBar>
  36. <t:dgToolBar title="导出" icon="icon-put" operationCode="put" funname="ExportXls"></t:dgToolBar>
  37. </t:datagrid>
  38. </div>
  39. </div>
  40. <div id="pinjie1">
  41. <div name="pinjie2" style="padding:3px; height: auto" class="datagrid-toolbar">
  42. <table style="height:85px;padding:0px" cellpadding="0" cellspacing="1" >
  43. <tbody>
  44. <tr>
  45. <td align="right" style="width: 74px;">
  46. <label class="Validform_label">
  47. <span color="red" class="requiredIcon">*</span>项目名称:
  48. </label>
  49. </td>
  50. <td class="value">
  51. <input readonly="true" type="text" id="departname" value="${queryParams.departname}" name="departname" style="width: 157px" placeholder="请选择项目名称" onclick="openDepartmentSelect()"/>
  52. <input id="departid" name='departid' type="hidden" value="${queryParams.departid}" />
  53. <a href="#" class="easyui-linkbutton" plain="true" icon="icon-select" id="departSearch" onclick="openDepartmentSelect()">选择</a>
  54. <a href="#" class="easyui-linkbutton" plain="true" icon="icon-clean" id="departRedo" onclick="callbackClean()">清空</a>
  55. </td>
  56. <td align="right" style="width: 74px;">
  57. <label class="Validform_label">
  58. 员工姓名:
  59. </label>
  60. </td>
  61. <td class="value">
  62. <input type="text" id="userId" name="userId" value="${queryParams.userId}" style="width: 157px" placeholder="请输入员工姓名" />
  63. </td>
  64. <td align="right" style="width: 74px;">
  65. <label class="Validform_label">
  66. 月度:
  67. </label>
  68. </td>
  69. <td class="value">
  70. <input type="text" id="yearmonth" name="yearmonth" style="width: 157px" value="${queryParams.yearmonth}" class="Wdate" onClick='WdatePicker({readOnly:true,maxDate:"${maxdate}",enableKeyboard:false,enableInputMask:false,dateFmt: "yyyy-MM"})' />
  71. </td>
  72. </tr>
  73. <tr>
  74. <td align="right">
  75. <label class="Validform_label">
  76. 所属岗位:
  77. </label>
  78. </td>
  79. <td class="value">
  80. <t:dictSelect field="inPostid" defaultVal="${queryParams.inPostid}" dictTable="t_bus_post" dictCondition="where delete_flag=0 and status=0" dictField="id" dictText="post_name" title="所属岗位" ></t:dictSelect>
  81. </td>
  82. <td align="right">
  83. <label class="Validform_label">
  84. 调整记录:
  85. </label>
  86. </td>
  87. <td class="value">
  88. <t:dictSelect field="adjustRecord" type="select" defaultVal="${queryParams.adjustRecord}" typeGroupCode="attendance_adjust_status" hasLabel="false" title="调整记录" ></t:dictSelect>
  89. </td>
  90. <td align="right">
  91. <label class="Validform_label">
  92. 状态:
  93. </label>
  94. </td>
  95. <td class="value">
  96. <t:dictSelect field="confirmStatus" type="select" defaultVal="${queryParams.confirmStatus}" typeGroupCode="attendance_report_status" hasLabel="false" title="状态" ></t:dictSelect>
  97. </td>
  98. </tr>
  99. </tbody>
  100. </table>
  101. </div>
  102. </div>
  103. <div id="pinjiechaxun1">
  104. <div name="pinjiechaxun2" style="padding:3px; height: auto" class="datagrid-toolbar">
  105. <div style="float: right;">
  106. <span>
  107. <a href="#" class="easyui-linkbutton" plain="true" icon="icon-search" id="userAttendanceTotalSearch" onclick="userAttendanceTotalListsearch()">查询</a>
  108. </span>
  109. <span>
  110. <a href="#" class="easyui-linkbutton" plain="true" icon="icon-reload " id="userAttendanceTotalRedo" onclick="searchReset('userAttendanceTotalList')">重置</a>
  111. </span>
  112. </div>
  113. </div>
  114. </div>
  115. <!--
  116. <div id="yearmonth1" style="display: none;">
  117. <label class="Validform_label">
  118. &nbsp;&nbsp;&nbsp;&nbsp;<span color="red" class="requiredIcon">*</span>项目名称:
  119. </label>
  120. <input readonly="true" type="text" id="departname" value="${queryParams.departname}" name="departname" style="width: 150px" placeholder="请选择项目名称" onclick="openDepartmentSelect()"/>
  121. <input id="departid" name='departid' type="hidden" value="${queryParams.departid}" />
  122. <a href="#" class="easyui-linkbutton" plain="true" icon="icon-search" id="departSearch" onclick="openDepartmentSelect()">选择</a>
  123. <a href="#" class="easyui-linkbutton" plain="true" icon="icon-redo" id="departRedo" onclick="callbackClean()">清空</a>
  124. <label class="Validform_label">
  125. &nbsp;&nbsp;&nbsp;&nbsp;员工姓名:
  126. </label>
  127. <input type="text" id="userId" name="userId" value="${queryParams.userId}" style="width: 150px" placeholder="请输入员工姓名" />
  128. <label class="Validform_label">
  129. &nbsp;&nbsp;&nbsp;&nbsp;月度:
  130. </label>
  131. <input type="text" id="yearmonth" name="yearmonth" value="${queryParams.yearmonth}" class="Wdate" onClick='WdatePicker({readOnly:true,maxDate:"${maxdate}",enableKeyboard:false,enableInputMask:false,dateFmt: "yyyy-MM"})' />
  132. </div>
  133. -->
  134. <script type="text/javascript">
  135. $(function() {
  136. /**
  137. var datagrid = $("#userAttendanceTotalListtb");
  138. datagrid.find("div[name='searchColums']").find("form#userAttendanceTotalListForm").prepend($("#yearmonth1").html());
  139. $("#yearmonth1").html('');
  140. */
  141. var datagrid = $("#userAttendanceTotalListtb");
  142. datagrid.prepend($("#pinjie1 div[name='pinjie2']").html());
  143. $("#pinjie1").html('');
  144. datagrid.children(".datagrid-toolbar").children("span:first").after($("#pinjiechaxun1 div[name='pinjiechaxun2']").html());
  145. $("#pinjiechaxun1").html('');
  146. var queryParams = $('#userAttendanceTotalList').datagrid('options').queryParams;
  147. $('#userAttendanceTotalListtb').find('*').each(function() {
  148. queryParams[$(this).attr('name')] = $(this).val();
  149. });
  150. if(null!= queryParams.departid&&''!=queryParams.departid){
  151. userAttendanceTotalListsearch();
  152. }
  153. });
  154. /**
  155. * 批量上报
  156. * @param title
  157. * @param url
  158. * @param gname
  159. * @return
  160. */
  161. function BatchReport(title,url,gname) {
  162. gridname=gname;
  163. var ids = [];
  164. var rows = $("#"+gname).datagrid('getSelections');
  165. if (rows.length > 0) {
  166. for ( var i = 0; i < rows.length; i++) {
  167. ids.push(rows[i].id);
  168. if(rows[i].confirmStatus==0||rows[i].confirmStatus=="0"){
  169. }else{
  170. layer.alert("该员工考勤已上报");
  171. return false;
  172. }
  173. }
  174. $.ajax({
  175. url : url,
  176. type : 'post',
  177. data : {
  178. ids : ids.join(',')
  179. },
  180. cache : false,
  181. success : function(data) {
  182. var d = data; // ------ $.parseJSON(data);
  183. if (d.success) {
  184. var msg = d.msg;
  185. tip(msg);
  186. reloadTable();
  187. $("#"+gname).datagrid('unselectAll');
  188. ids='';
  189. } else {
  190. layer.alert(d.msg);
  191. }
  192. }
  193. });
  194. } else {
  195. layer.alert("请选择需要上报的数据");
  196. }
  197. }
  198. function callbackClean(){
  199. $('#departname').val('');
  200. $('#departid').val('');
  201. }
  202. //导入
  203. function ImportXls() {
  204. openuploadwin('Excel导入', 'userAttendanceTotalController.do?upload', "userAttendanceTotalList");
  205. }
  206. //导出
  207. function ExportXls() {
  208. JeecgExcelExport("userAttendanceTotalController.do?exportXls","userAttendanceTotalList");
  209. }
  210. //选择项目名称,列表================
  211. function openDepartmentSelect() {
  212. //$.dialog.setting.zIndex = getzIndex();
  213. var orgIds = $("#departid").val();
  214. $
  215. .dialog(
  216. {
  217. content : 'url:dialogDealController.do?projectDepartTablePart&ids='
  218. + orgIds,
  219. zIndex : getzIndex(),
  220. title : '项目列表',
  221. lock : true,
  222. width : '600px',
  223. height : '350px',
  224. opacity : 0.4,
  225. button : [
  226. {
  227. name : '<t:mutiLang langKey="common.confirm"/>',
  228. callback : function() {
  229. var iframe = this.iframe.contentWindow;
  230. if (iframe.getReason().length > 0) {
  231. var strData = eval(iframe
  232. .getReason());
  233. for ( var key in strData[0]) {
  234. if (key == "strPId") {
  235. $("#departid")
  236. .val(
  237. strData[0][key]);
  238. } else if (key == "strDepartName") {
  239. $("#departname")
  240. .val(
  241. strData[0][key]);
  242. }
  243. }
  244. }
  245. },
  246. focus : true
  247. },
  248. {
  249. name : '<t:mutiLang langKey="common.cancel"/>',
  250. callback : function() {
  251. }
  252. }
  253. ]
  254. }).zindex();
  255. }
  256. //模板下载
  257. function ExportXlsByT() {
  258. JeecgExcelExport("userAttendanceTotalController.do?exportXlsByT",
  259. "userAttendanceTotalList");
  260. }
  261. //新增
  262. function add(title, url, id) {
  263. window.location.href = url;
  264. }
  265. //修改
  266. function update(title, url, id) {
  267. var rowsData = $('#' + id).datagrid('getSelections');
  268. if (!rowsData || rowsData.length == 0) {
  269. layer.alert('请选择编辑项目');
  270. return;
  271. }
  272. if (rowsData.length > 1) {
  273. layer.alert('请选择一条记录再编辑');
  274. return;
  275. }
  276. url += '&id=' + rowsData[0].id;
  277. var queryParams = $('#userAttendanceTotalList').datagrid('options').queryParams;
  278. $('#userAttendanceTotalListtb').find('*').each(function() {
  279. queryParams[$(this).attr('name')] = $(this).val();
  280. });
  281. url +="&queryParams="+encodeURI(JSON.stringify(queryParams));
  282. if (rowsData[0].confirmStatus != '2') {
  283. window.location.href = url;
  284. } else {
  285. layer.alert('该考勤已确认, 不可再编辑');
  286. }
  287. // updateNotCreateWin("修改",url, "userAttendanceTotalList",false);
  288. }
  289. function chongxinjisuan(){
  290. layer.alert("重新计算考勤相关数据 会删除掉数据库中现有的未上报&&未调整的数据(已调整的 以及已确认的数据不再清除),你确定要重新计算考勤吗? ", function(index){
  291. layer.close(index);
  292. createwindow('', 'userAttendanceTotalController.do?goAdd');
  293. });
  294. }
  295. function userAttendanceTotalListsearch() {
  296. try {
  297. if (!$("#userAttendanceTotalListForm").Validform({
  298. tiptype : 3
  299. }).check()) {
  300. return false;
  301. }
  302. } catch (e) {
  303. }
  304. if (true) {
  305. var queryParams = $('#userAttendanceTotalList').datagrid('options').queryParams;
  306. $('#userAttendanceTotalListtb').find('*').each(function() {
  307. queryParams[$(this).attr('name')] = $(this).val();
  308. });
  309. if(queryParams.departid ==null||queryParams.departid ==''){
  310. layer.alert('项目名称必须输入');
  311. return false;
  312. }
  313. $('#userAttendanceTotalList')
  314. .datagrid(
  315. {
  316. url : 'userAttendanceTotalController.do?datagrid&field=id,userCode,userId,yearmonth,pid,departid,inPostid,datumAttendanceDate,actualAttendanceDate,timeDifferenceTotal,overtimeTotalTime,leaveTotalTime,adjustRecord,confirmStatus,',
  317. pageNumber : 1
  318. });
  319. }
  320. }
  321. </script>