arrangeDutyOperateList.jsp 35 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997
  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. <style>
  5. .tooltip {
  6. position: relative;
  7. display: inline-block;
  8. border-bottom: none;
  9. background: url('images/tip-3.png') no-repeat center center;
  10. width: 25px;
  11. height: 25px;
  12. vertical-align: middle;
  13. border-style: none;
  14. }
  15. .tooltip .tooltiptext {
  16. visibility: hidden;
  17. width: 180px;
  18. background-color: black;
  19. color: #fff;
  20. text-align: center;
  21. border-radius: 6px;
  22. padding: 5px 0;
  23. position: absolute;
  24. z-index: 1;
  25. bottom: 110%;
  26. left: -20%;
  27. margin-left: -60px;
  28. /* 淡入 - 1秒内从 0% 到 100% 显示: */
  29. opacity: 0;
  30. transition: opacity 1s;
  31. /* position: absolute;
  32. z-index: 1;
  33. top: -25px;
  34. right: 380%;
  35. font-size:14px; */
  36. }
  37. .tooltip .tooltiptext::after {
  38. content: "";
  39. position: absolute;
  40. top: 100%;
  41. left: 10%;
  42. margin-top: -5px;
  43. border-width: 5px;
  44. border-style: solid;
  45. border-color: transparent transparent transparent black;
  46. }
  47. .tooltip:hover .tooltiptext {
  48. visibility: visible;
  49. opacity: 1;
  50. }
  51. </style>
  52. <!-- 排班操作表 -->
  53. <div class="easyui-layout" fit="true">
  54. <input id="yearmonth" name="yearmonth" type="hidden" value="${yearmonth}"/>
  55. <input id="pid" name="pid" type="hidden" value="${pid}"/>
  56. <input id="arrangeDutyOperateId" name="arrangeDutyOperateId" type="hidden" value=""/>
  57. <!-- <input id="updateId" name="updateId" type="hidden" value=""/> -->
  58. <!-- <input id="addId" name="addId" type="hidden" value=""/> -->
  59. <div region="center" style="padding:0px;border:0px">
  60. <t:datagrid name="arrangeDutyOperateList" checkbox="false" fitColumns="true" actionUrl="arrangeDutyOperateController.do?datagrid&pid=${pid}&yearmonth=${yearmonth}" idField="id" fit="true" pagination="false" queryMode="group">
  61. <t:dgCol title="主键" field="id" hidden="true" queryMode="single" width="120"></t:dgCol>
  62. <t:dgCol title="月度" field="yearmonth" hidden="true" queryMode="single" width="120"></t:dgCol>
  63. <%-- <t:dgCol title="项目岗位" field="pjtPostId" queryMode="single" width="120"></t:dgCol> --%>
  64. <t:dgCol title="项目岗位" field="pjtPostId" queryMode="single" dictionary="t_bus_project_post_detail,id,ptj_post_name, and delete_flag = 0 and pid = '${pid}'" width="120"></t:dgCol>
  65. <t:dgCol title="运转方式" field="runway" queryMode="single" dictionary="runway" width="120"></t:dgCol>
  66. <t:dgCol title="出勤时间" field="attendanceCycle" queryMode="single" width="120"></t:dgCol>
  67. <t:dgCol title="班次" field="shiftid" queryMode="single" dictionary="t_bus_arrange_duty,id,duty_name, and pid = '${pid}'" width="120"></t:dgCol>
  68. <t:dgCol title="班次人员" field="userid" queryMode="single" dictionary="t_s_base_user,id,realname ,and id in(select user_id from t_s_user_org uo left join t_s_depart dept on dept.id = uo.org_id where org_id = '${pid}' or dept.parentdepartid = '${pid}') "
  69. width="120"></t:dgCol>
  70. <%-- --%>
  71. <t:dgCol title="配置人数" field="deployPeopleNum" queryMode="single" width="120"></t:dgCol>
  72. <t:dgCol title="创建人名称" field="createName" hidden="true" queryMode="single" width="120"></t:dgCol>
  73. <t:dgCol title="创建人登录名称" field="createBy" hidden="true" queryMode="single" width="120"></t:dgCol>
  74. <t:dgCol title="创建日期" field="createDate" formatter="yyyy-MM-dd hh:mm:ss" hidden="true" queryMode="single" width="120"></t:dgCol>
  75. <t:dgCol title="更新人名称" field="updateName" hidden="true" queryMode="single" width="120"></t:dgCol>
  76. <t:dgCol title="更新人登录名称" field="updateBy" hidden="true" queryMode="single" width="120"></t:dgCol>
  77. <t:dgCol title="更新日期" field="updateDate" formatter="yyyy-MM-dd hh:mm:ss" hidden="true" queryMode="single" width="120"></t:dgCol>
  78. <t:dgCol title="所属部门" field="sysOrgCode" hidden="true" queryMode="single" width="120"></t:dgCol>
  79. <t:dgCol title="所属公司" field="sysCompanyCode" hidden="true" queryMode="single" width="120"></t:dgCol>
  80. <%-- <t:dgCol title="逻辑删除标识" field="deleteFlag" hidden="true" queryMode="single" dictionary="del_flag" width="120"></t:dgCol> --%>
  81. <t:dgCol title="操作" field="opt"></t:dgCol>
  82. <t:dgDelOpt title="删除" url="arrangeDutyOperateController.do?doDel&id={id}&yearmonth=${yearmonth}&pid=${pid}" urlclass="ace_button" urlfont="fa-trash-o"/>
  83. <%-- <t:dgToolBar title="录入" icon="icon-add" operationCode="add" url="arrangeDutyOperateController.do?goAdd" funname="add"></t:dgToolBar>
  84. <t:dgToolBar title="修改" icon="icon-edit" operationCode="edit" url="arrangeDutyOperateController.do?goUpdate" funname="update"></t:dgToolBar>
  85. <t:dgToolBar title="批量删除" icon="icon-remove" operationCode="remove" url="arrangeDutyOperateController.do?doBatchDel" funname="deleteALLSelect"></t:dgToolBar>
  86. <t:dgToolBar title="查看" icon="icon-search" url="arrangeDutyOperateController.do?goUpdate" funname="detail"></t:dgToolBar>
  87. <t:dgToolBar title="导入" icon="icon-putout" operationCode="put" funname="ImportXls"></t:dgToolBar>
  88. <t:dgToolBar title="导出" icon="icon-put" operationCode="put" funname="ExportXls"></t:dgToolBar>
  89. <t:dgToolBar title="模板下载" icon="icon-putout" operationCode="putout" funname="ExportXlsByT"></t:dgToolBar> --%>
  90. </t:datagrid>
  91. <script>
  92. $(function() {
  93. var datagrid = $("#arrangeDutyOperateListtb");
  94. datagrid.children("div:first").before($("#pinjie1 div[name='pinjie11']").html());
  95. // datagrid.children("div:first").after($("#pinjie2 div[name='pinjie21']").html());
  96. // datagrid.children(".datagrid-toolbar").children("span:first").after($("#pinjie2 div[name='pinjie21']").html());
  97. // datagrid.append($("#pinjie2 div[name='pinjie21']").html());
  98. $("#pinjie12").next("div").attr("style","border-bottom-width:0;height:auto;");
  99. $("#pinjie12").next("div").attr("class","datagrid-toolbar");
  100. datagrid.children(".datagrid-toolbar").children("span:first").after($("#pinjie2 div[name='pinjie21']").html());
  101. $("#pinjie1").html('');
  102. $("#pinjie2").html('');
  103. });
  104. </script>
  105. <div id="pinjie1" style="display: none;">
  106. <div name="pinjie11">
  107. <div id="pinjie12" style="margin:10px 0 5px 0;" >
  108. <t:formvalid formid="formobj" dialog="false" tipSweep="true" layout="table" action="wagestrategyController.do?saveRows" tiptype="1" callback="callback">
  109. <div style="display:none"><input type="submit" id ="btnsub" value=""/></div>
  110. <input name="id" id="id" type="hidden" value="" />
  111. <div>
  112. <label class="Validform_label">
  113. <span color="red" class="requiredIcon">*</span>项目岗位:
  114. </label>
  115. <t:dictSelect field="pjtPostId" type="list" dictTable="t_bus_project_post_detail" dictField="id" dictText="ptj_post_name" dictCondition=" where delete_flag = 0 and pid = '${pid}'" defaultVal="${arrangeDutyPage.pjtPostId}" hasLabel="false" title="项目岗位" datatype="*"></t:dictSelect>
  116. <span class="Validform_checktip"></span>
  117. <label class="Validform_label" style="display: none;">项目岗位</label>
  118. <label class="Validform_label">
  119. <font color="#FF0000"></font>岗位可配置人数:
  120. </label>
  121. <input id="deployPeopleNum" name="deployPeopleNum" type="text" disabled="disabled" style="width: 150px" class="inputxt" maxlength="3" datatype="n1-3" errormsg="配置总人数为数字类型" placeholder="配置总人数" ignore="checked" />
  122. <span class="Validform_checktip"></span>
  123. <label class="Validform_label" style="display: none;">配置总人数</label>
  124. <label class="Validform_label">
  125. <span color="red" class="requiredIcon">*</span>运转方式:
  126. </label>
  127. <t:dictSelect field="runway" type="list" typeGroupCode="runway" defaultVal="${arrangeDutyPage.runway}" hasLabel="false" title="运转方式" datatype="*"></t:dictSelect>
  128. <span class="Validform_checktip"></span>
  129. <label class="Validform_label" style="display: none;">运转方式</label>
  130. </div>
  131. <table >
  132. <tr style="height: 50px;width: 300px;">
  133. <td align="left">
  134. <label class="Validform_label">
  135. 出勤时间:
  136. </label>
  137. </td>
  138. <td class="value">
  139. <table id="myWeek" style="width: 500px;">
  140. <thead>
  141. <td><label><span style="cursor: pointer;"><input value="周一" class="checkOne" type="checkbox" />周一</span></label></td>
  142. <td><label><span style="cursor: pointer;"><input value="周二" class="checkOne" type="checkbox" />周二</span></label></td>
  143. <td><label><span style="cursor: pointer;"><input value="周三" class="checkOne" type="checkbox" />周三</span></label></td>
  144. <td><label><span style="cursor: pointer;"><input value="周四" class="checkOne" type="checkbox" />周四</span></label></td>
  145. <td><label><span style="cursor: pointer;"><input value="周五" class="checkOne" type="checkbox" />周五</span></label></td>
  146. <td><label><span style="cursor: pointer;"><input value="周六" class="checkOne" type="checkbox" />周六</span></label></td>
  147. <td><label><span style="cursor: pointer;"><input value="周日" class="checkOne" type="checkbox" />周日</span></label></td>
  148. <!-- <td><span><input value="周二" class="checkOne" type="checkbox" style="cursor: pointer;"/>周二</span></td>
  149. <td><span><input value="周三" class="checkOne" type="checkbox" style="cursor: pointer;"/>周三</span></td>
  150. <td><span><input value="周四" class="checkOne" type="checkbox" style="cursor: pointer;"/>周四</span></td>
  151. <td><span><input value="周五" class="checkOne" type="checkbox" style="cursor: pointer;"/>周五</span></td>
  152. <td><span><input value="周六" class="checkOne" type="checkbox" style="cursor: pointer;"/>周六</span></td>
  153. <td><span><input value="周日" class="checkOne" type="checkbox" style="cursor: pointer;"/>周日</span></td> -->
  154. </thead>
  155. </table>
  156. <input id="attendanceCycle" name="attendanceCycle" type="hidden" style="width: 150px" class="inputxt" ignore="ignore" />
  157. </td>
  158. </tr>
  159. </table>
  160. <div>
  161. <label class="Validform_label">
  162. <span color="red" class="requiredIcon">*</span>班次:
  163. </label>
  164. <input readonly="true" type="text" id="dutyName" name="dutyName" value="" style="width: 150px" placeholder="请选择班次" onclick="openArrangeDutySelect()" datatype="*">
  165. <input id="shiftid" name="shiftid" type="hidden" value="${shiftid}">
  166. <span class="Validform_checktip"></span>
  167. <label class="Validform_label" style="display: none;">班次</label>
  168. <a href="#" class="easyui-linkbutton" plain="true" icon="icon-select" id="departSearch" onclick="openArrangeDutySelect()">选择</a>
  169. <a href="#" class="easyui-linkbutton" plain="true" icon="icon-clean" id="departRedo" onclick="callbackArrangeDutyClean()">清空</a>
  170. <label class="Validform_label">
  171. <span color="red" class="requiredIcon">*</span>班次员工:
  172. </label>
  173. <input readonly="true" type="text" id="realname" name="realname" value="" style="width: 150px" placeholder="请选择班次员工" onclick="openPersonnelBaseArchivesManageSelect()" datatype="*">
  174. <input id="userid" name="userid" type="hidden" value="">
  175. <span class="Validform_checktip"></span>
  176. <label class="Validform_label" style="display: none;">班次员工</label>
  177. <a href="#" class="easyui-linkbutton" plain="true" icon="icon-select" id="departSearch" onclick="openPersonnelBaseArchivesManageSelect()">选择</a>
  178. <a href="#" class="easyui-linkbutton" plain="true" icon="icon-clean" id="departRedo" onclick="callbackPersonnelBaseArchivesManageClean()">清空</a>
  179. <a href="#" class="easyui-linkbutton" plain="true" icon="icon-edit" operationCode="edit" id="personSort" onclick="openPersonSortList()" title="指定员工上班顺序,不指定随机按岗位排班">调整顺序</a>
  180. <a href="#" class="tooltip" plain="true" icon="icon-tip" > <span class="tooltiptext">指定员工月度1日开始的班次,不指定则随机按岗位排班。</span> </a>
  181. <!-- <img src="plug-in/easyui/themes/metrole/icons/tip.png" style="width: 20px; height: 20px; vertical-align: middle;" title="指定员工上班顺序,不指定随机按岗位排班"> </img> -->
  182. </div>
  183. <!-- <div class="tooltip">鼠标移动到这
  184. <span class="tooltiptext">提示文本</span>
  185. </div> -->
  186. </t:formvalid>
  187. </div>
  188. </div>
  189. </div>
  190. <div id="pinjie2" style="display: none;">
  191. <div name="pinjie21">
  192. <span style="float:right;margin-bottom:4px;">
  193. <a href="#" style="float: right;" class="easyui-linkbutton l-btn l-btn-plain" plain="true" icon="icon-clean" onclick="clearData()">清空</a>&nbsp;&nbsp;&nbsp;
  194. <a href="#" style="float: right;" class="easyui-linkbutton l-btn l-btn-plain" iconcls="icon-save" plain="true" onclick="saveArrangeDutyOperate()">保存</a>
  195. </span>
  196. </div>
  197. </div>
  198. </div>
  199. </div>
  200. <script src = "webpage/cn/com/lzt/arrangedutyoperate/arrangeDutyOperateList.js"></script>
  201. <script type="text/javascript">
  202. // 删除调用函数
  203. // function delObj(url,name) {
  204. // console.log(url);
  205. // gridname=name;
  206. // createdialog('删除确认 ', '确定删除该记录吗 ?', url,name);
  207. // }
  208. function openPersonSortList(){
  209. var dis = $("#personSort").is(":disabled");
  210. if( dis == "disabled"){
  211. return;
  212. }
  213. var userid = $("#userid").val();
  214. console.log(userid);
  215. var username = $("#realname").val();
  216. //运转方式
  217. var runwayOption=$("select[name='runway']");
  218. var runway=runwayOption.val();
  219. //项目岗位id
  220. var url = 'arrangeDutyOperateController.do?getPersonSortSwapList&userid='+userid+'&username='+username+'&runway='+runway;
  221. url=encodeURI(encodeURI(url));
  222. $.dialog({content: 'url:'+url, zIndex: getzIndex(), title: '班次员工排序', lock: true, width: '650px', height: '400px',
  223. opacity: 0.4, button: [
  224. {name: '<t:mutiLang langKey="common.confirm"/>', callback: function (){
  225. //获得子页面getReason()方法中的值
  226. var iframe = this.iframe.contentWindow;
  227. if(iframe.getReason().length>0){
  228. var strData=eval(iframe.getReason());
  229. for(var key in strData[0]){
  230. if(key=="strUserId"){
  231. console.log(strData[0][key]);
  232. $("#userid").val(strData[0][key]);
  233. }else if(key=="strRealName"){
  234. $("#realname").val(strData[0][key]);
  235. }
  236. }
  237. }
  238. }, focus: true},
  239. {name: '<t:mutiLang langKey="common.cancel"/>', callback: function (){}}
  240. ]}).zindex();
  241. }
  242. //删除调用函数
  243. function delObj(url,name) {
  244. $.messager.confirm("确认", "确定要删除这条数据?", function (r) {
  245. if (r) {
  246. // for ( var i = 0; i < rows.length; i++) {
  247. // id=rows[i].id;
  248. // }
  249. $.ajax({
  250. url : url,
  251. type : 'post',
  252. // data : {
  253. // id : id
  254. // },
  255. cache : false,
  256. success : function(data) {
  257. var d = data; // ------ $.parseJSON(data);
  258. // console.log(d);
  259. if (d.success) {
  260. tip(d.msg);
  261. refresh();
  262. }else{
  263. layer.alert(d.msg);
  264. }
  265. }
  266. });
  267. }
  268. });
  269. }
  270. /**
  271. * 创建询问窗口
  272. *
  273. * @param title
  274. * @param content
  275. * @param url
  276. */
  277. function createdialog(title, content, url,name) {
  278. $.dialog.setting.zIndex = getzIndex(true);
  279. // $.dialog.confirm(content, function(){
  280. // doSubmit(url,name);
  281. // rowid = '';
  282. // }, function(){
  283. // });
  284. //update--begin---author:zhangjiaqiang date:20170301 for:修订提示框
  285. var navigatorName = "Microsoft Internet Explorer";
  286. //update--begin--author:zhangjiaqiang date:20170711 for:TASK 2218 shortcut风格 使用jqueryui对话框
  287. if( navigator.appName == navigatorName ||"shortcut".indexOf(getCookie("JEECGINDEXSTYLE"))>=0){
  288. //update--begin--author:zhangjiaqiang date:20170711 for:TASK 2218 shortcut风格 使用jqueryui对话框
  289. $.dialog.confirm(content, function(){
  290. doSubmit(url,name);
  291. refresh();
  292. rowid = '';
  293. }, function(){
  294. });
  295. }else{
  296. layer.open({
  297. title:title,
  298. content:content,
  299. icon:7,
  300. yes:function(index){
  301. doSubmit(url,name);
  302. refresh();
  303. rowid = '';
  304. },
  305. btn:['确定','取消'],
  306. btn2:function(index){
  307. layer.close(index);
  308. }
  309. });
  310. }
  311. //update--end---author:zhangjiaqiang date:20170301 for:修订提示框
  312. }
  313. //刷新表格数据
  314. function refresh(){
  315. //先清除选中,再刷新
  316. $("#arrangeDutyOperateList").datagrid('clearChecked');
  317. $("#arrangeDutyOperateList").datagrid('unselectAll');
  318. // $(".datagrid-htable tr:not(:first)").empty("");
  319. //$(".pagination-load").click();
  320. $("#arrangeDutyOperateList").datagrid('reload');
  321. clearData();
  322. }
  323. //导入
  324. function ImportXls() {
  325. openuploadwin('Excel导入', 'arrangeDutyOperateController.do?upload', "arrangeDutyOperateList");
  326. }
  327. //导出
  328. function ExportXls() {
  329. JeecgExcelExport("arrangeDutyOperateController.do?exportXls","arrangeDutyOperateList");
  330. }
  331. //模板下载
  332. function ExportXlsByT() {
  333. JeecgExcelExport("arrangeDutyOperateController.do?exportXlsByT","arrangeDutyOperateList");
  334. }
  335. //新增
  336. function add(title,url,id){
  337. window.location.href=url
  338. }
  339. //修改
  340. function update(title,url, id){
  341. updateNotCreateWin("修改",url, "arrangeDutyOperateList",false);
  342. }
  343. //查看
  344. function view(title,url, id){
  345. viewNotCreateWin("查看",url, "arrangeDutyOperateList",false)
  346. }
  347. //排班操作表保存数据,由排班操作表保存总方法调用
  348. function saveArrangeDutyOperateLast(id,pid,yearmonth,pjtPostId,runway,deployPeopleNum,attendanceCycle,shiftid,userid){
  349. //需要排班的班次id
  350. var arrangeDutyOperateId=$("#arrangeDutyOperateId").val();
  351. //月度排班操作表保存
  352. $.ajax({
  353. url : "arrangeDutyOperateController.do?saveArrangeDutyOperate",
  354. type : 'post',
  355. data : {
  356. id : id,
  357. pid: pid,
  358. yearmonth : yearmonth,
  359. pjtPostId : pjtPostId,
  360. runway : runway,
  361. deployPeopleNum : deployPeopleNum,
  362. attendanceCycle : attendanceCycle,
  363. shiftid : shiftid,
  364. userid : userid,
  365. arrangeDutyOperateId:arrangeDutyOperateId,
  366. sign:"1"
  367. },
  368. cache : false,
  369. success : function(data) {
  370. var d = data; // ------ $.parseJSON(data);
  371. if(d.success){
  372. for(var key in d.attributes){
  373. if(key=="flg"){
  374. layer.alert(d.msg, function(){window.location.reload();});
  375. return;
  376. }
  377. if(key=="arrangeDutyOperateId"){
  378. if(arrangeDutyOperateId.length!=0){
  379. arrangeDutyOperateId+=","+d.attributes[key];
  380. }else{
  381. arrangeDutyOperateId=d.attributes[key];
  382. }
  383. }
  384. }
  385. $("#arrangeDutyOperateId").val(arrangeDutyOperateId);
  386. callback(d);
  387. }else{
  388. $.messager.confirm(d.msg, "确定要删除这条数据吗?", function (r) {
  389. if (r) {
  390. $.ajax({
  391. url : "arrangeDutyOperateController.do?saveArrangeDutyOperate",
  392. type : 'post',
  393. data : {
  394. id : id,
  395. pid: pid,
  396. yearmonth : yearmonth,
  397. pjtPostId : pjtPostId,
  398. runway : runway,
  399. deployPeopleNum : deployPeopleNum,
  400. attendanceCycle : attendanceCycle,
  401. shiftid : shiftid,
  402. userid : userid,
  403. arrangeDutyOperateId:arrangeDutyOperateId,
  404. sign:"0"
  405. },
  406. cache : false,
  407. success : function(data) {
  408. var d = data; // ------ $.parseJSON(data);
  409. if(d.success){
  410. var arrangeDutyOperateId=$("#arrangeDutyOperateId").val();
  411. for(var key in d.attributes){
  412. if(key=="arrangeDutyOperateId"){
  413. if(arrangeDutyOperateId.length!=0){
  414. arrangeDutyOperateId+=","+d.attributes[key];
  415. }else{
  416. arrangeDutyOperateId=d.attributes[key];
  417. }
  418. }
  419. }
  420. $("#arrangeDutyOperateId").val(arrangeDutyOperateId);
  421. callback(d);
  422. }
  423. }
  424. });
  425. }
  426. });
  427. }
  428. }
  429. });
  430. }
  431. //排班操作表保存总方法
  432. function saveArrangeDutyOperate(){
  433. //排班操作表id
  434. var id = $("#id").val();
  435. //项目id
  436. var pid = $("#pid").val();
  437. //月度
  438. var yearmonth = $("#yearmonth").val();
  439. //项目岗位id
  440. var pjtPostIdOption=$("select[name='pjtPostId']");
  441. var pjtPostId=pjtPostIdOption.val();
  442. //运转方式
  443. var runwayOption=$("select[name='runway']");
  444. var runway=runwayOption.val();
  445. //配置人数
  446. var deployPeopleNum=$('#deployPeopleNum').val();
  447. //出勤时间
  448. var attendanceCycle="";
  449. //var attendanceCycle=$("#attendanceCycle").val(attendanceCycle);
  450. //班次id
  451. var shiftid = $("#shiftid").val();
  452. //班次员工id
  453. var userid=$('#userid').val();
  454. var flag = $("#formobj").Validform().check(true);
  455. if(flag!=true){
  456. $("#btnsub").click();
  457. return false;
  458. }
  459. if(userid.indexOf(",")==-1){
  460. if(parseInt(deployPeopleNum)<1){
  461. layer.alert("可配置人数不足,无法排班");
  462. return false;
  463. }
  464. }else{
  465. if(parseInt(deployPeopleNum)<userid.split(",").length){
  466. layer.alert("排班人数不能超过岗位配置总人数");
  467. return false;
  468. }
  469. }
  470. var selectedPeopleNum = userid.split(",").length;
  471. if(runway=="f2t_jijiabanfei"||runway=="f2t_wujiabanfei"){
  472. $(".checkOne").each(function(){
  473. if($(this).prop("checked")){
  474. if(attendanceCycle.length==0){
  475. attendanceCycle=$(this).val();
  476. }else{
  477. attendanceCycle+=","+$(this).val();
  478. }
  479. }
  480. });
  481. if(attendanceCycle.indexOf(",")==-1){
  482. layer.alert("请至少选择五天出勤时间");
  483. return false;
  484. }else{
  485. var myArray=attendanceCycle.split(",");
  486. if(myArray.length<5){
  487. layer.alert("请至少选择五天出勤时间");
  488. return false;
  489. }else if(myArray.length>5){
  490. layer.alert("请最多选择五天出勤时间");
  491. return false;
  492. }else{
  493. saveArrangeDutyOperateLast(id,pid,yearmonth,pjtPostId,runway,selectedPeopleNum,attendanceCycle,shiftid,userid);
  494. }
  495. }
  496. }else if(runway=="other_jijiabanfei"||runway=="other_wujiabanfei"){
  497. $(".checkOne").each(function(){
  498. if($(this).prop("checked")){
  499. if(attendanceCycle.length==0){
  500. attendanceCycle=$(this).val();
  501. }else{
  502. attendanceCycle+=","+$(this).val();
  503. }
  504. }
  505. });
  506. if(attendanceCycle.length==0){
  507. layer.alert("请至少选择一天出勤时间");
  508. return false;
  509. }else{
  510. saveArrangeDutyOperateLast(id,pid,yearmonth,pjtPostId,runway,selectedPeopleNum,attendanceCycle,shiftid,userid);
  511. }
  512. }else if(runway=="t2o_jijiabanfei"||runway=="o2o_wujiabanfei"||runway=="t2t_wujiabanfei"){
  513. //判断运转方式和配置总人数关系
  514. //三班两运转-做二休一,员工数量为3的倍数
  515. //四班两运转A-做一休一,员工数量为4的倍数
  516. //四班两运转B-做二休二,员工数量为4的倍数
  517. if(runway=="t2o_jijiabanfei"){
  518. if(parseInt(selectedPeopleNum)%parseInt(3)!=0){
  519. layer.alert("三班两运转-做二休一,员工数量为3的倍数");
  520. return false;
  521. }
  522. }else if(runway=="o2o_wujiabanfei"){
  523. if(parseInt(selectedPeopleNum)%parseInt(4)!=0){
  524. layer.alert("四班两运转A-做一休一,员工数量为4的倍数");
  525. return false;
  526. }
  527. }else if(runway=="t2t_wujiabanfei"){
  528. if(parseInt(selectedPeopleNum)%parseInt(4)!=0){
  529. layer.alert("四班两运转B-做二休二,员工数量为4的倍数");
  530. return false;
  531. }
  532. }
  533. //验证选择的班次
  534. if(shiftid.length==0){
  535. layer.alert("请选择班次信息");
  536. return false;
  537. }else{
  538. if(shiftid.indexOf(",")==-1){
  539. layer.alert("请至少选择两个班次");
  540. return false;
  541. }else{
  542. var shiftidArr=shiftid.split(",");
  543. if(shiftidArr.length>2){
  544. layer.alert("请最多选择两个班次");
  545. return false;
  546. }else{
  547. //异步验证班次类型
  548. $.ajax({
  549. url : "arrangeDutyOperateController.do?getCheckShiftType",
  550. async : false,
  551. type : 'post',
  552. data : {
  553. shiftid : shiftid
  554. },
  555. cache : false,
  556. success : function(data) {
  557. var d = data; // ------ $.parseJSON(data);
  558. if(d.msg=="false"){
  559. layer.alert("班次类型只能选择'日班11h和夜班11.5'");
  560. return false;
  561. }else{
  562. //月度排班操作表保存
  563. saveArrangeDutyOperateLast(id,pid,yearmonth,pjtPostId,runway,selectedPeopleNum,attendanceCycle,shiftid,userid)
  564. }
  565. }
  566. });
  567. }
  568. }
  569. }
  570. }else if (runway=="2bandao" || runway=="2bandao_jijiabanfei"){//新增两班倒轮转方式,班次只能为1个,人员为2的倍数 2019-11-11 by dgq
  571. var shiftidArr=shiftid.split(",");
  572. if(shiftidArr.length>1){
  573. layer.alert("两班倒轮转方式只可选择一个班次");
  574. return false;
  575. }else if(parseInt(selectedPeopleNum)%parseInt(2)!=0){
  576. layer.alert("两班倒,所选员工数量应为2的倍数");
  577. return false;
  578. }else{
  579. saveArrangeDutyOperateLast(id,pid,yearmonth,pjtPostId,runway,selectedPeopleNum,attendanceCycle,shiftid,userid);
  580. }
  581. }
  582. }
  583. //保存数据后刷新当前页面数据
  584. function callback(data){
  585. //debugger;
  586. if(data.success){
  587. clearData();
  588. $("#arrangeDutyOperateList").datagrid('reload');
  589. top.tip(data.msg);
  590. }else{
  591. layer.alert(data.msg);
  592. }
  593. }
  594. //清空数据
  595. function clearData(){
  596. var rowData = {};
  597. fillData(rowData);
  598. $("#arrangeDutyOperateList").datagrid('clearChecked');
  599. var runwayOption=$("select[name='runway']");
  600. //var runway=pjtPostIdOption.val();
  601. runwayOption.find("option[value='']").attr("selected", true);
  602. $("#arrangeDutyOperateList").datagrid('unselectAll');
  603. dealPtjPostIdAppend();
  604. /* var pjtPostIdOption=$("select[name='pjtPostId']");
  605. var pjtPostId=pjtPostIdOption.val();
  606. pjtPostIdOption.empty();
  607. pjtPostIdOption.prepend("<option value='' >---请选择--- </option>"); //为Select插入一个Option(第一个位置)
  608. pjtPostIdOption.find("option[value='']").attr("selected", true); */
  609. }
  610. function fillData(rowData){
  611. //清空表单
  612. $("#formobj").form('clear');
  613. //填充数据
  614. for(var d in rowData){
  615. $("#"+d).val(rowData[d]);
  616. }
  617. }
  618. //编辑数据输入框复现
  619. $(function(){
  620. $("#arrangeDutyOperateList").datagrid({
  621. onClickRow: function(rowIndex, rowData){
  622. attendanceCycleClear();
  623. //fillData(rowData);
  624. /* $("#editPanel").panel({title:"修改数据"}); */
  625. $('#id').val(rowData.id);
  626. //项目岗位
  627. $("select[name='pjtPostId']").val(rowData.pjtPostId);
  628. //运转方式
  629. $("select[name='runway']").val(rowData.runway);
  630. //配置总人数
  631. //$('#deployPeopleNum').val(rowData.deployPeopleNum);
  632. var pid = $('#pid').val();
  633. var pjtPostId = rowData.pjtPostId;
  634. var yearmonth = $("#yearmonth").val();
  635. if(pjtPostId.length>0){
  636. $.ajax({
  637. url : "arrangeDutyOperateController.do?getDeployPeopleNumLeft",
  638. type : 'post',
  639. data : {
  640. pid : pid,
  641. pjtPostId: pjtPostId,
  642. yearmonth :yearmonth
  643. },
  644. cache : false,
  645. success : function(data) {
  646. var d = data; // ------ $.parseJSON(data);
  647. $("#deployPeopleNum").val(d.attributes["0"]);
  648. }
  649. });
  650. }
  651. //出勤时间
  652. $('#attendanceCycle').val(rowData.attendanceCycle);
  653. //班次
  654. $('#shiftid').val(rowData.shiftid);
  655. //员工
  656. $('#userid').val(rowData.userid);
  657. dealPtjPostIdAppend();
  658. //出勤时间回显
  659. var runwayOption=$("select[name='runway']");
  660. var runway=runwayOption.val();
  661. var attendanceCycle = $("#attendanceCycle").val();
  662. if(runway=="f2t_jijiabanfei"||runway=="f2t_wujiabanfei"||runway=="other_jijiabanfei"||runway=="other_wujiabanfei"){
  663. var myArray=attendanceCycle.split(",");
  664. for(var i=0;i<myArray.length;i++){
  665. $(".checkOne").each(function(){
  666. $(".checkOne").prop("disabled",false);
  667. if($(this).val()==myArray[i]){
  668. $(this).attr("checked", true);
  669. }
  670. });
  671. }
  672. }
  673. //查询班次和员工名称回显
  674. $.ajax({
  675. url : "arrangeDutyOperateController.do?getRealName",
  676. type : 'post',
  677. data : {
  678. shiftid : rowData.shiftid,
  679. shiftidDictionary : "t_bus_arrange_duty,id,duty_name",
  680. userid : rowData.userid
  681. },
  682. cache : false,
  683. success : function(data) {
  684. var d = data; // ------ $.parseJSON(data);
  685. $('#dutyName').val(d.attributes["dutyName"]);
  686. $('#realname').val(d.attributes["realName"]);
  687. }
  688. });
  689. }
  690. });
  691. });
  692. //当选择三班两运转和四班两运转处理周一到周日不可选
  693. /* $(function(){
  694. var runwayOption=$("select[name='runway']");
  695. runwayOption.change(function(){
  696. var runway=runwayOption.val();
  697. console.log(runway);
  698. });
  699. }); */
  700. //编辑时处理周一到周日默认选中
  701. $(function(){
  702. var pjtPostIdOption=$("select[name='runway']");
  703. pjtPostIdOption.change(function(){
  704. var runway=pjtPostIdOption.val();
  705. if(runway=="f2t_jijiabanfei"
  706. ||runway=="f2t_wujiabanfei"
  707. ||runway=="other_jijiabanfei"
  708. ||runway=="other_wujiabanfei"){
  709. attendanceCycleDefault();
  710. }else{
  711. attendanceCycleClear();
  712. }
  713. });
  714. });
  715. //选择做五休二默认选中周一至周五
  716. function attendanceCycleDefault(){
  717. $(".checkOne").each(function(){
  718. $(".checkOne").prop("disabled",false);
  719. var str=$(this).parent().text();
  720. if(str=="周一"
  721. ||str=="周二"
  722. ||str=="周三"
  723. ||str=="周四"
  724. ||str=="周五"
  725. ){
  726. $(this).attr("checked", true);
  727. }
  728. });
  729. }
  730. //清空出勤时间回显
  731. function attendanceCycleClear(){
  732. $(".checkOne").each(function(){
  733. $(".checkOne").prop("checked",false);
  734. $(".checkOne").prop("disabled",true);
  735. });
  736. }
  737. //班次选择
  738. function openArrangeDutySelect(){
  739. //项目id
  740. var pid = $("#pid").val();
  741. var shiftid = $("#shiftid").val();
  742. var pjtPostIdOption=$("select[name='runway']");
  743. var runway=pjtPostIdOption.val();
  744. $.dialog({content: 'url:arrangeDutyOperateController.do?arrangeDutySelectList&ids='+shiftid+'&pid='+pid, zIndex: getzIndex(), title: '班次选择', lock: true, width: '800px', height: '400px',
  745. opacity: 0.4, button: [
  746. {name: '<t:mutiLang langKey="common.confirm"/>', callback: function (){
  747. //var postGeneralId=$("#id").val();
  748. //父页面接子页面传值
  749. //获得子页面getReason()方法中的值
  750. var iframe = this.iframe.contentWindow;
  751. // var shiftid="";
  752. if(iframe.getReason().length>0){
  753. var strShiftData=eval(iframe.getReason());
  754. //页面存储班次数据,保存时验证
  755. for(var key in strShiftData[0]){
  756. if(key=="strShiftid"){
  757. $("#shiftid").val(strShiftData[0][key]);
  758. // shiftid=strShiftData[0][key];
  759. }else if(key=="strShiftName"){
  760. $("#dutyName").val(strShiftData[0][key]);
  761. }
  762. }
  763. }
  764. // if(shiftid.length==0){
  765. // tip("请选择班次");
  766. // return false;
  767. // }
  768. }, focus: true},
  769. {name: '<t:mutiLang langKey="common.cancel"/>', callback: function (){}}
  770. ]}).zindex();
  771. }
  772. //班次选择清空
  773. function callbackArrangeDutyClean(){
  774. $("#shiftid").val("");
  775. $("#dutyName").val("");
  776. }
  777. //班次员工选择
  778. function openPersonnelBaseArchivesManageSelect(){
  779. //项目id
  780. var pid = $("#pid").val();
  781. var userid = $("#userid").val();
  782. var yearmonth = $("#yearmonth").val();
  783. //项目岗位id
  784. var pjtPostIdOption=$("select[name='pjtPostId']");
  785. var pjtPostId=pjtPostIdOption.val();
  786. $.dialog({content: 'url:arrangeDutyOperateController.do?personnelBaseArchivesManageSelectList&userid='+userid+'&pid='+pid+'&yearmonth='+yearmonth+'&pjtPostId='+pjtPostId, zIndex: getzIndex(), title: '班次员工选择', lock: true, width: '650px', height: '400px',
  787. opacity: 0.4, button: [
  788. {name: '<t:mutiLang langKey="common.confirm"/>', callback: function (){
  789. //var postGeneralId=$("#id").val();
  790. //父页面接子页面传值
  791. //获得子页面getReason()方法中的值
  792. var iframe = this.iframe.contentWindow;
  793. // var userid="";
  794. if(iframe.getReason().length>0){
  795. var strData=eval(iframe.getReason());
  796. for(var key in strData[0]){
  797. if(key=="strUserId"){
  798. $("#userid").val(strData[0][key]);
  799. // userid=strData[0][key];
  800. }else if(key=="strRealName"){
  801. $("#realname").val(strData[0][key]);
  802. }
  803. }
  804. }
  805. // if(userid.length==0){
  806. // layer.alert("请选择班次员工");
  807. // return false;
  808. // }
  809. }, focus: true},
  810. {name: '<t:mutiLang langKey="common.cancel"/>', callback: function (){}}
  811. ]}).zindex();
  812. }
  813. /* function callbackPersonnelBaseArchivesManageSelectSure(){
  814. } */
  815. //清空班次员工
  816. function callbackPersonnelBaseArchivesManageClean(){
  817. $("#userid").val("");
  818. $("#realname").val("");
  819. }
  820. //点击删除按钮时删除上下布局中复现的参数值
  821. /* $(function(){
  822. $("#arrangeDutyOperateList").datagrid({
  823. onClickRow: function(rowIndex, rowData){
  824. clearData();
  825. }
  826. });
  827. }) */
  828. //编写自定义JS代码获得输入框中的值等父级页面调用取值
  829. function getReason(){
  830. var strData="",arrangeDutyOperateId="";
  831. arrangeDutyOperateId=$("#arrangeDutyOperateId").val();
  832. /* var strData='[{"addId":"'+addId+'","updateId":"'+updateId+'"}]'; */
  833. var strData='[{"arrangeDutyOperateId":"'+arrangeDutyOperateId+'"}]';
  834. return strData;
  835. }
  836. //处理项目岗位下拉框生成包括编辑默认选中
  837. function dealPtjPostIdAppend(){
  838. var pjtPostIdOption=$("select[name='pjtPostId']");
  839. var pjtPostId=pjtPostIdOption.val();
  840. pjtPostIdOption.empty();
  841. pjtPostIdOption.prepend("<option value='' >---请选择--- </option>"); //为Select插入一个Option(第一个位置)
  842. //pjtPostIdOption.val(pjtPostId);
  843. var pid = $('#pid').val();
  844. //根据项目名称查询项目岗位设定中的名称
  845. if(pid!=""){
  846. $.ajax({
  847. url : "arrangeDutyOperateController.do?getProjectPostDetail",
  848. type : 'post',
  849. data : {
  850. pid : pid
  851. },
  852. cache : false,
  853. success : function(data) {
  854. var d = data; // ------ $.parseJSON(data);
  855. for(var i=0;i<d.attributes[0].length;i++){
  856. if(d.attributes[0][i].id!=pjtPostId){
  857. $("select[name='pjtPostId']").append("<option value='"+d.attributes[0][i].id+"'>"+d.attributes[0][i].ptjPostName+"</option>");
  858. }else{
  859. $("select[name='pjtPostId']").append("<option selected='selected' value='"+d.attributes[0][i].id+"'>"+d.attributes[0][i].ptjPostName+"</option>");
  860. }
  861. }
  862. }
  863. });
  864. }
  865. //pjtPostIdOption.find("option[value='"+pjtPostId+"']").attr("selected", true);
  866. }
  867. $(function(){
  868. //进入排班操作页面默认拼接项目岗位
  869. dealPtjPostIdAppend();
  870. //选择项目岗位时把配置总人数填充
  871. var pjtPostIdOption=$("select[name='pjtPostId']");
  872. pjtPostIdOption.change(function(){
  873. var pid = $('#pid').val();
  874. var pjtPostId=pjtPostIdOption.val();
  875. var yearmonth = $("#yearmonth").val();
  876. if(pjtPostId.length>0){
  877. $.ajax({
  878. url : "arrangeDutyOperateController.do?getDeployPeopleNumLeft",
  879. type : 'post',
  880. data : {
  881. pid : pid,
  882. pjtPostId: pjtPostId,
  883. yearmonth :yearmonth
  884. },
  885. cache : false,
  886. success : function(data) {
  887. var d = data; // ------ $.parseJSON(data);
  888. $("#deployPeopleNum").val(d.attributes["0"]);
  889. }
  890. });
  891. }
  892. });
  893. })
  894. </script>