userAttendanceTotalAllList.jsp 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440
  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,autocomplete"></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?datagridAll" 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" hidden="true" 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?goUpdateAll&conform=false" funname="update"></t:dgToolBar>
  35. <t:dgToolBar title="生成考勤" icon="icon-report" funname="createUserAttendance"></t:dgToolBar>
  36. <t:dgToolBar title="重新核算考勤" icon="icon-report" url="userAttendanceTotalController.do?calcuUserAttendance" funname="calcuUserAttendance"></t:dgToolBar>
  37. <t:dgToolBar title="导出" icon="icon-put" operationCode="put" funname="ExportXls"></t:dgToolBar>
  38. </t:datagrid>
  39. </div>
  40. </div>
  41. <div id="pinjie1">
  42. <div name="pinjie2" style="padding:3px; height: auto" class="datagrid-toolbar">
  43. <table style="height:85px;padding:0px" cellpadding="0" cellspacing="1" >
  44. <tbody>
  45. <tr>
  46. <td align="right" style="width: 74px;">
  47. <label class="Validform_label">
  48. <span color="red" class="requiredIcon">*</span>项目名称:
  49. </label>
  50. </td>
  51. <!-- <td class="value"> -->
  52. <%-- <input readonly="true" type="text" id="departname" value="${queryParams.departname}" name="departname" style="width: 157px" placeholder="请选择项目名称" onclick="openDepartmentSelect()"/> --%>
  53. <td class="value">
  54. <t:autocomplete entityName="TSDepart" width="250" scrollWidth="400" scrollHeight="400" defValue="${queryParams.departname}"
  55. hiddenInputId="departid" valueField="id" labelField="departname" searchField="departname" name="departname"></t:autocomplete>
  56. <input id="departid" name='departid' type="hidden" value="${queryParams.departid}" />
  57. <!-- <a href="#" class="easyui-linkbutton" plain="true" icon="icon-select" id="departSearch" onclick="openDepartmentSelect()">选择</a> -->
  58. <!-- <a href="#" class="easyui-linkbutton" plain="true" icon="icon-clean" id="departRedo" onclick="callbackClean()">清空</a> -->
  59. <!-- </td> -->
  60. <td align="right" style="width: 74px;">
  61. <label class="Validform_label">
  62. 员工姓名:
  63. </label>
  64. </td>
  65. <td class="value">
  66. <input type="text" id="userId" name="userId" value="${queryParams.userId}" style="width: 157px" placeholder="请输入员工姓名" />
  67. </td>
  68. <td align="right" style="width: 74px;">
  69. <label class="Validform_label">
  70. 月度:
  71. </label>
  72. </td>
  73. <td class="value">
  74. <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"})' />
  75. </td>
  76. </tr>
  77. <tr>
  78. <td align="right">
  79. <label class="Validform_label">
  80. 所属岗位:
  81. </label>
  82. </td>
  83. <td class="value">
  84. <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>
  85. </td>
  86. <td align="right">
  87. <label class="Validform_label">
  88. 调整记录:
  89. </label>
  90. </td>
  91. <td class="value">
  92. <t:dictSelect field="adjustRecord" type="select" defaultVal="${queryParams.adjustRecord}" typeGroupCode="attendance_adjust_status" hasLabel="false" title="调整记录" ></t:dictSelect>
  93. </td>
  94. <td align="right">
  95. <label class="Validform_label">
  96. 状态:
  97. </label>
  98. </td>
  99. <td class="value">
  100. <t:dictSelect field="confirmStatus" type="select" defaultVal="${queryParams.confirmStatus}" typeGroupCode="attendance_report_status" hasLabel="false" title="状态" ></t:dictSelect>
  101. </td>
  102. </tr>
  103. </tbody>
  104. </table>
  105. </div>
  106. </div>
  107. <div id="pinjiechaxun1">
  108. <div name="pinjiechaxun2" style="padding:3px; height: auto" class="datagrid-toolbar">
  109. <div style="float: right;">
  110. <span>
  111. <a href="#" class="easyui-linkbutton" plain="true" icon="icon-search" id="userAttendanceTotalSearch" onclick="userAttendanceTotalListsearch()">查询</a>
  112. </span>
  113. <span>
  114. <a href="#" class="easyui-linkbutton" plain="true" icon="icon-reload " id="userAttendanceTotalRedo" onclick="searchReset('userAttendanceTotalList')">重置</a>
  115. </span>
  116. </div>
  117. </div>
  118. </div>
  119. <!--
  120. <div id="yearmonth1" style="display: none;">
  121. <label class="Validform_label">
  122. &nbsp;&nbsp;&nbsp;&nbsp;<span color="red" class="requiredIcon">*</span>项目名称:
  123. </label>
  124. <input readonly="true" type="text" id="departname" value="${queryParams.departname}" name="departname" style="width: 150px" placeholder="请选择项目名称" onclick="openDepartmentSelect()"/>
  125. <input id="departid" name='departid' type="hidden" value="${queryParams.departid}" />
  126. <a href="#" class="easyui-linkbutton" plain="true" icon="icon-search" id="departSearch" onclick="openDepartmentSelect()">选择</a>
  127. <a href="#" class="easyui-linkbutton" plain="true" icon="icon-redo" id="departRedo" onclick="callbackClean()">清空</a>
  128. <label class="Validform_label">
  129. &nbsp;&nbsp;&nbsp;&nbsp;员工姓名:
  130. </label>
  131. <input type="text" id="userId" name="userId" value="${queryParams.userId}" style="width: 150px" placeholder="请输入员工姓名" />
  132. <label class="Validform_label">
  133. &nbsp;&nbsp;&nbsp;&nbsp;月度:
  134. </label>
  135. <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"})' />
  136. </div>
  137. -->
  138. <script type="text/javascript">
  139. $(function() {
  140. /**
  141. var datagrid = $("#userAttendanceTotalListtb");
  142. datagrid.find("div[name='searchColums']").find("form#userAttendanceTotalListForm").prepend($("#yearmonth1").html());
  143. $("#yearmonth1").html('');
  144. */
  145. var datagrid = $("#userAttendanceTotalListtb");
  146. datagrid.prepend($("#pinjie1 div[name='pinjie2']").html());
  147. $("#pinjie1").html('');
  148. datagrid.children(".datagrid-toolbar").children("span:first").after($("#pinjiechaxun1 div[name='pinjiechaxun2']").html());
  149. $("#pinjiechaxun1").html('');
  150. var queryParams = $('#userAttendanceTotalList').datagrid('options').queryParams;
  151. $('#userAttendanceTotalListtb').find('*').each(function() {
  152. queryParams[$(this).attr('name')] = $(this).val();
  153. });
  154. if(null!= queryParams.departid&&''!=queryParams.departid){
  155. userAttendanceTotalListsearch();
  156. }
  157. });
  158. /**
  159. * 批量上报
  160. * @param title
  161. * @param url
  162. * @param gname
  163. * @return
  164. */
  165. function calcuUserAttendance(title,url,gname) {
  166. gridname=gname;
  167. var ids = [];
  168. var rowsData = $('#' + gname).datagrid('getSelections');
  169. if (!rowsData || rowsData.length == 0) {
  170. layer.alert('请选择核算的人员');
  171. return;
  172. }
  173. if (rowsData.length > 1) {
  174. layer.alert('请选择一条记录');
  175. return;
  176. }
  177. url += '&id=' + rowsData[0].id;
  178. layer.msg('考勤核算中,请稍候···', {
  179. time : 5000,
  180. shade: 0.1});
  181. $.ajax({
  182. url : url,
  183. type : 'post',
  184. data : {
  185. ids : ids.join(',')
  186. },
  187. cache : false,
  188. success : function(data) {
  189. var d = data; // ------ $.parseJSON(data);
  190. if (d.success) {
  191. var msg = d.msg;
  192. tip(msg);
  193. reloadTable();
  194. $("#"+gname).datagrid('unselectAll');
  195. ids='';
  196. } else {
  197. layer.alert(d.msg);
  198. }
  199. }
  200. });
  201. }
  202. /**
  203. * 批量上报
  204. * @param title
  205. * @param url
  206. * @param gname
  207. * @return
  208. */
  209. function BatchReport(title,url,gname) {
  210. gridname=gname;
  211. var ids = [];
  212. var rows = $("#"+gname).datagrid('getSelections');
  213. if (rows.length > 0) {
  214. for ( var i = 0; i < rows.length; i++) {
  215. ids.push(rows[i].id);
  216. if(rows[i].confirmStatus==0||rows[i].confirmStatus=="0"){
  217. }else{
  218. layer.alert("该员工考勤已上报");
  219. return false;
  220. }
  221. }
  222. $.ajax({
  223. url : url,
  224. type : 'post',
  225. data : {
  226. ids : ids.join(',')
  227. },
  228. cache : false,
  229. success : function(data) {
  230. var d = data; // ------ $.parseJSON(data);
  231. if (d.success) {
  232. var msg = d.msg;
  233. tip(msg);
  234. reloadTable();
  235. $("#"+gname).datagrid('unselectAll');
  236. ids='';
  237. } else {
  238. layer.alert(d.msg);
  239. }
  240. }
  241. });
  242. } else {
  243. layer.alert("请选择需要上报的数据");
  244. }
  245. }
  246. function callbackClean(){
  247. $('#departname').val('');
  248. $('#departid').val('');
  249. }
  250. //导入
  251. function ImportXls() {
  252. openuploadwin('Excel导入', 'userAttendanceTotalController.do?upload', "userAttendanceTotalList");
  253. }
  254. function createUserAttendance(){
  255. var pid = $("#departid").val();
  256. var yearmonth = $("#yearmonth").val();
  257. $.dialog({content: 'url:userAttendanceTotalController.do?personnelBaseArchivesManageSelectList&pid='+pid+'&yearmonth='+yearmonth, zIndex: getzIndex(), title: '员工选择', lock: true, width: '650px', height: '400px',
  258. opacity: 0.4, button: [
  259. {name: '<t:mutiLang langKey="common.confirm"/>', callback: function (){
  260. //var postGeneralId=$("#id").val();
  261. //父页面接子页面传值
  262. //获得子页面getReason()方法中的值
  263. var iframe = this.iframe.contentWindow;
  264. var userid="";
  265. if(iframe.getReason().length>0){
  266. var strData=eval(iframe.getReason());
  267. for(var key in strData[0]){
  268. if(key=="strUserId"){
  269. userid=strData[0][key];
  270. }
  271. }
  272. if(userid.length==0){
  273. layer.alert("请选择员工");
  274. return false;
  275. }
  276. $.ajax({
  277. url : 'userAttendanceTotalController.do?createUserAttendance&userid='+userid+'&yearmonth='+yearmonth,
  278. type : 'post',
  279. data : {
  280. userid : userid,
  281. yearmonth : yearmonth
  282. },
  283. cache : false,
  284. success : function(data) {
  285. var d = data; // ------ $.parseJSON(data);
  286. if (d.success) {
  287. var msg = d.msg;
  288. tip(msg);
  289. reloadTable();
  290. $("#"+gname).datagrid('unselectAll');
  291. } else {
  292. layer.alert(d.msg);
  293. }
  294. }
  295. });
  296. }
  297. }, focus: true},
  298. {name: '<t:mutiLang langKey="common.cancel"/>', callback: function (){}}
  299. ]}).zindex();
  300. }
  301. //导出
  302. function ExportXls() {
  303. JeecgExcelExport("userAttendanceTotalController.do?exportXls","userAttendanceTotalList");
  304. }
  305. //选择项目名称,列表================
  306. function openDepartmentSelect() {
  307. //$.dialog.setting.zIndex = getzIndex();
  308. var orgIds = $("#departid").val();
  309. $
  310. .dialog(
  311. {
  312. content : 'url:dialogDealController.do?projectDepartTableAll&ids='
  313. + orgIds,
  314. zIndex : getzIndex(),
  315. title : '项目列表',
  316. lock : true,
  317. width : '600px',
  318. height : '350px',
  319. opacity : 0.4,
  320. button : [
  321. {
  322. name : '<t:mutiLang langKey="common.confirm"/>',
  323. callback : function() {
  324. var iframe = this.iframe.contentWindow;
  325. if (iframe.getReason().length > 0) {
  326. var strData = eval(iframe
  327. .getReason());
  328. for ( var key in strData[0]) {
  329. if (key == "strPId") {
  330. $("#departid")
  331. .val(
  332. strData[0][key]);
  333. } else if (key == "strDepartName") {
  334. $("#departname")
  335. .val(
  336. strData[0][key]);
  337. }
  338. }
  339. }
  340. },
  341. focus : true
  342. },
  343. {
  344. name : '<t:mutiLang langKey="common.cancel"/>',
  345. callback : function() {
  346. }
  347. }
  348. ]
  349. }).zindex();
  350. }
  351. //模板下载
  352. function ExportXlsByT() {
  353. JeecgExcelExport("userAttendanceTotalController.do?exportXlsByT",
  354. "userAttendanceTotalList");
  355. }
  356. //新增
  357. function add(title, url, id) {
  358. window.location.href = url;
  359. }
  360. //修改
  361. function update(title, url, id) {
  362. var rowsData = $('#' + id).datagrid('getSelections');
  363. if (!rowsData || rowsData.length == 0) {
  364. layer.alert('请选择编辑项目');
  365. return;
  366. }
  367. if (rowsData.length > 1) {
  368. layer.alert('请选择一条记录再编辑');
  369. return;
  370. }
  371. url += '&id=' + rowsData[0].id;
  372. var queryParams = $('#userAttendanceTotalList').datagrid('options').queryParams;
  373. $('#userAttendanceTotalListtb').find('*').each(function() {
  374. queryParams[$(this).attr('name')] = $(this).val();
  375. });
  376. url +="&queryParams="+encodeURI(JSON.stringify(queryParams));
  377. if (rowsData[0].confirmStatus != '2') {
  378. window.location.href = url;
  379. } else {
  380. layer.alert('该考勤已确认, 不可再编辑');
  381. }
  382. // updateNotCreateWin("修改",url, "userAttendanceTotalList",false);
  383. }
  384. function chongxinjisuan(){
  385. layer.alert("重新计算考勤相关数据 会删除掉数据库中现有的未上报&&未调整的数据(已调整的 以及已确认的数据不再清除),你确定要重新计算考勤吗? ", function(index){
  386. layer.close(index);
  387. createwindow('', 'userAttendanceTotalController.do?goAdd');
  388. });
  389. }
  390. function userAttendanceTotalListsearch() {
  391. try {
  392. if (!$("#userAttendanceTotalListForm").Validform({
  393. tiptype : 3
  394. }).check()) {
  395. return false;
  396. }
  397. } catch (e) {
  398. }
  399. if (true) {
  400. var queryParams = $('#userAttendanceTotalList').datagrid('options').queryParams;
  401. $('#userAttendanceTotalListtb').find('*').each(function() {
  402. queryParams[$(this).attr('name')] = $(this).val();
  403. });
  404. if(queryParams.departid ==null||queryParams.departid ==''){
  405. layer.alert('项目名称必须输入');
  406. return false;
  407. }
  408. $('#userAttendanceTotalList')
  409. .datagrid(
  410. {
  411. url : 'userAttendanceTotalController.do?datagrid&field=id,userCode,userId,yearmonth,pid,departid,inPostid,datumAttendanceDate,actualAttendanceDate,timeDifferenceTotal,overtimeTotalTime,leaveTotalTime,adjustRecord,confirmStatus,',
  412. pageNumber : 1
  413. });
  414. }
  415. }
  416. </script>