fillSignCardEditEx.js 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622
  1. shr.defineClass("shr.customer.gtiit.FillSignCardEditEx",shr.ats.FillSignCardEdit,{
  2. initalizeDOM:function(){
  3. var _self = this;
  4. shr.customer.gtiit.FillSignCardEditEx.superClass.initalizeDOM.call(this);
  5. },
  6. setFSCEntry: function (rst) {
  7. var _self = this;
  8. if (
  9. rst.records != null &&
  10. rst.records > 0 &&
  11. rst.rows != null &&
  12. rst.rows.length > 0
  13. ) {
  14. var id,
  15. attendDate,
  16. type,
  17. fillCardTimeStr,
  18. remark,
  19. reason_id,
  20. reason_name;
  21. var billId = $("#id").val();
  22. var ramarkMap;
  23. _self.remoteCall({
  24. method: "getToremarks",
  25. param: {billId: billId},
  26. async: false,
  27. success: function(data) {
  28. ramarkMap = data;
  29. },
  30. error : function(){
  31. }
  32. });
  33. for (var i = 0; i < rst.rows.length; i++) {
  34. var row = rst.rows[i];
  35. /*
  36. (id = shr.xssFilter(row["id"])),
  37. (attendDate = shr.xssFilter(row["attendDate"])),
  38. (type_key = shr.xssFilter(row["type.key"])),
  39. (type_value = shr.xssFilter(row["type.value"])),
  40. (fillCardTimeStr = shr.xssFilter(row["fillCardTimeStr"])),
  41. (reason_id = shr.xssFilter(row["reason.id"])),
  42. (reason_name = shr.xssFilter(row["reason.name"])),
  43. if(ramarkMap ==null){
  44. (remark = null);
  45. }else{
  46. (remark = ramarkMap[row["id"]]);
  47. }*/
  48. var id = shr.xssFilter(row["id"]);
  49. var attendDate = shr.xssFilter(row["attendDate"]);
  50. var type_key = shr.xssFilter(row["type.key"]);
  51. var type_value = shr.xssFilter(row["type.value"]);
  52. var fillCardTimeStr = shr.xssFilter(row["fillCardTimeStr"]);
  53. var reason_id = shr.xssFilter(row["reason.id"]);
  54. var reason_name = shr.xssFilter(row["reason.name"]);
  55. var remark = null;
  56. // 注意这里将赋值操作改为比较操作,并且移除了逗号
  57. if (ramarkMap != null) {
  58. remark = ramarkMap[row["id"]];
  59. }
  60. var row_fields_work = "";
  61. if (
  62. _self.getOperateState() == "ADDNEW" ||
  63. _self.getOperateState() == "EDIT"
  64. ) {
  65. row_fields_work =
  66. '<div class="row-fluid row-block row_field">' +
  67. '<div class="spanSelf">' +
  68. '<input type="hidden" name="id' +
  69. i +
  70. '" value="' +
  71. correctValue(id) +
  72. '" />' +
  73. '<input type="text" id="attendDate' +
  74. i +
  75. '" name="attendDate' +
  76. i +
  77. '" value="' +
  78. correctValue(attendDate) +
  79. '"class="input-height cell-input" validate="{required:true}" />' +
  80. "</div>" +
  81. '<div class="spanSelf"><input type="text" name="type' +
  82. i +
  83. '" value="" class="input-height cell-input" validate="{required:true}"/></div>' +
  84. '<div class="spanSelf"><input type="text" name="reason' +
  85. i +
  86. '" value="" class="input-height cell-input" validate="{required:true}"/></div>' +
  87. '<div class="spanSelf"><input style="background-color:#daeef8" length="5" type="text" id="fillCardTimeStr' +
  88. i +
  89. '" name="fillCardTimeStr' +
  90. i +
  91. '" value="' +
  92. correctValue(fillCardTimeStr) +
  93. '" class="input-height cell-input fillCardTime" placeholder="' +
  94. jsBizMultLan.atsManager_fillSignCardEdit_i18n_17 +
  95. '" /></div>' +
  96. // + '<script type="text/javascript">$(function() {var text_json = {id:"fillCardTimeStr0",name: "fillCardTimeStr0",readonly: "",value: "0",validate: "{required:true,myTmVldt:true}",onChange: null};$("#fillCardTimeStr0").shrTextField(text_json);});</script>'
  97. '<div class="spanSelf"><input maxlength="255" type="text" name="toremarks' +
  98. i +
  99. '" value="' +
  100. correctValue(remark) +
  101. '" class="input-height cell-input"/></div>';
  102. if (i == 0) {
  103. row_fields_work +=
  104. '<div><a class="rowAdd cursor-pointer" style="font-size: 20px;">+</a></div>';
  105. } else {
  106. row_fields_work +=
  107. '<div><a class="rowAdd cursor-pointer" style="font-size: 20px;">+</a><a class="rowDel cursor-pointer" style="font-size: 17px;">x</a></div>';
  108. }
  109. row_fields_work += "</div>";
  110. $("#fillSignCardEntryInfo").append(row_fields_work);
  111. $(".fillCardTime").on("input", function (e) {
  112. var target = e.target;
  113. var val = $(target).val() || "";
  114. var hasSignal =
  115. val.indexOf(":") !== -1 || val.indexOf(":") !== -1;
  116. if (
  117. val.length === 4 &&
  118. /^\d+$/.test(val) &&
  119. !hasSignal
  120. ) {
  121. var hour = val.slice(0, 2);
  122. val = hour + ":" + val.slice(2);
  123. if (hour < 24) {
  124. $(target).val(val);
  125. }
  126. return;
  127. }
  128. if (
  129. val.length >= 5 &&
  130. /^(\d{2}[:|:]\d{2,})+$/.test(val)
  131. ) {
  132. var hour = val.slice(0, 2);
  133. val = val.slice(0, 5);
  134. if (hour < 24) {
  135. $(target).val(val);
  136. }
  137. return;
  138. }
  139. });
  140. var remarkObj = { l1: "", l2: "", l3: "" };
  141. remarkObj.l1 = correctValue(shr.xssFilter(row["remark_l1"]));
  142. remarkObj.l2 = correctValue(shr.xssFilter(row["remark_l2"]));
  143. remarkObj.l3 = correctValue(shr.xssFilter(row["remark_l3"]));
  144. _self.addRowFieldString(
  145. false,
  146. i,
  147. reason_id,
  148. reason_name,
  149. type_key,
  150. type_value,
  151. remarkObj
  152. );
  153. } else if (_self.getOperateState() == "VIEW") {
  154. row_fields_work =
  155. '<div class="row-fluid row-block row_field">' +
  156. '<div class="spanSelf">' +
  157. '<input type="hidden" name="id' +
  158. i +
  159. '" value="' +
  160. correctValue(id) +
  161. '" />' +
  162. '<input type="hidden" id="type' +
  163. i +
  164. '_el" value="' +
  165. correctValue(type_value) +
  166. '" />' +
  167. '<input type="hidden" id="reason' +
  168. i +
  169. '_el" value="' +
  170. correctValue(reason_id) +
  171. '" /> ' +
  172. '<span id="attendDate' +
  173. i +
  174. '" name="attendDate' +
  175. i +
  176. '" class="cell-input">' +
  177. correctValue(attendDate) +
  178. "</span>" +
  179. "</div>" +
  180. '<div class="spanSelf"><span name="type' +
  181. i +
  182. '" class="cell-input">' +
  183. correctValue(type_key) +
  184. "</span></div>" +
  185. '<div class="spanSelf"><span name="reason' +
  186. i +
  187. '" class="cell-input">' +
  188. correctValue(reason_name) +
  189. "</span></div>" +
  190. '<div class="spanSelf"><span name="fillCardTimeStr' +
  191. i +
  192. '" class="cell-input">' +
  193. correctValue(fillCardTimeStr) +
  194. "</span></div>" +
  195. '<div class="spanSelf"><span name="toremarks' +
  196. i +
  197. '" style = "word-break: break-word;" class="cell-input">' +
  198. correctValue(remark) +
  199. "</span></div>" +
  200. "</div>";
  201. $("#fillSignCardEntryInfo").append(row_fields_work);
  202. }
  203. atsMlUtile.setTransDateValue("attendDate" + i, attendDate);
  204. _self.initAtsBillExplain();
  205. }
  206. }
  207. //添加事件处理
  208. //新增
  209. $("#fillSignCardEntryInfo a.rowAdd").die("click");
  210. $("#fillSignCardEntryInfo a.rowAdd").live("click", function () {
  211. var vali = $(
  212. "#fillSignCardEntryInfo .row_field:last input[name^=attendDate]"
  213. ).attr("name");
  214. if (vali != null && vali != "") {
  215. var idx = new String(vali).substr(10);
  216. var idxA = new Number(idx) + 1;
  217. _self.addRowFieldString(
  218. true,
  219. idxA,
  220. null,
  221. null,
  222. null,
  223. null,
  224. null
  225. );
  226. }
  227. });
  228. //删除
  229. $("#fillSignCardEntryInfo a.rowDel").die("click");
  230. $("#fillSignCardEntryInfo a.rowDel").live("click", function () {
  231. var entryId = $(
  232. $(this).closest("div.row_field").children()[0]
  233. ).children()[0].value;
  234. if (entryId != "" && entryId != null && entryId != undefined) {
  235. deletedList += entryId + ",";
  236. }
  237. $(this).closest("div.row_field").remove();
  238. });
  239. },
  240. addRowFieldString: function (
  241. flag,
  242. i,
  243. reason_id,
  244. reason_name,
  245. type_key,
  246. type_value,
  247. remark
  248. ) {
  249. if (flag) {
  250. var row_fields_work =
  251. '<div class="row-fluid row-block row_field">' +
  252. '<div class="spanSelf"><input type="hidden" name="id' +
  253. i +
  254. '" value="" /><input type="text" id="attendDate' +
  255. i +
  256. '" name="attendDate' +
  257. i +
  258. '" value=""class="input-height cell-input" validate="{required:true}" /></div>' +
  259. '<div class="spanSelf"><input name="type' +
  260. i +
  261. '_el" type="hidden"/><input type="text" name="type' +
  262. i +
  263. '" value="" class="input-height cell-input" validate="{required:true}"/></div>' +
  264. '<div class="spanSelf"><input type="text" name="reason' +
  265. i +
  266. '" value="" class="input-height cell-input" validate="{required:true}"/></div>' +
  267. '<div class="spanSelf"><input style="background-color:#daeef8" length="5" type="text" name="fillCardTimeStr' +
  268. i +
  269. '" value="" class="input-height cell-input fillCardTime" placeholder="' +
  270. jsBizMultLan.atsManager_fillSignCardEdit_i18n_17 +
  271. '" /></div>' +
  272. '<div class="spanSelf"><input maxlength="255" type="text" name="toremarks' +
  273. i +
  274. '" value="" class="input-height cell-input"/></div>' +
  275. '<div><a class="rowAdd cursor-pointer" style="font-size: 20px;">+</a><a class="rowDel cursor-pointer" style="font-size: 17px;">x</a></div>' +
  276. "</div>";
  277. $("#fillSignCardEntryInfo").append(row_fields_work);
  278. $(".fillCardTime").on("input", function (e) {
  279. var v = $(e.target).val() || "";
  280. if (/[0-5][0-9][0-5][0-9]/.test(v) && v.length == 4) {
  281. v =
  282. $(e.target).val().substring(0, 2) +
  283. ":" +
  284. $(e.target).val().substring(2, 4);
  285. }
  286. if (
  287. (/[0-2][0-9]:[0-5][0-9]/.test(v) && v.length == 5) ||
  288. (/[0-2][0-9]:[0-5][0-9]/.test(v) && v.length == 5)
  289. ) {
  290. var h = new Number(v.substr(0, 2));
  291. if (h < 24) {
  292. v =
  293. $(e.target).val().substring(0, 2) +
  294. ":" +
  295. $(e.target).val().substring(3, 5);
  296. $(e.target).val(v);
  297. }
  298. }
  299. });
  300. }
  301. $('input[name="fillCardTimeStr' + i + '"]').attr(
  302. "validate",
  303. "{required:true,myTmVldt:true}"
  304. );
  305. $('input[name="attendDate' + i + '"]').attr(
  306. "validate",
  307. "{required:true,myTmVldt1:true}"
  308. );
  309. //将【考勤日期】 【补签卡类型】【补签卡原因】封装成F7
  310. //备注改成多语言
  311. /*$('input[name="remark' + i + '"]')
  312. .attr("id", "remark" + i)
  313. .shrMultiLangBox({
  314. readonly: "",
  315. value: remark,
  316. validate: "{maxlength:128}",
  317. trimAll: false,
  318. onChange: null
  319. });*/
  320. //针对从【考勤看板--我要补卡】中进入
  321. if (
  322. this.strdate != null &&
  323. this.strdate != undefined &&
  324. this.strdate != ""
  325. ) {
  326. $('input[name="attendDate' + i + '"]').shrDateTimePicker(
  327. "setValue",
  328. this.strdate
  329. );
  330. }
  331. //【补签卡类型】
  332. var that = this;
  333. var select_json = {
  334. id: "type" + i,
  335. readonly: "",
  336. value: "0",
  337. onChange: null,
  338. validate: "{required:true}",
  339. filter: ""
  340. };
  341. select_json.data = [
  342. {
  343. value: 1,
  344. alias: jsBizMultLan.atsManager_fillSignCardEdit_i18n_1
  345. }
  346. ];
  347. $('input[name="type' + i + '"]').shrSelect(select_json);
  348. if (!flag) {
  349. $('input[name="type' + i + '"]').val(type_key);
  350. $('input[name="type' + i + '_el"]').val(type_value);
  351. } else {
  352. //如果是新增,默认的就是补卡
  353. $('input[name="type' + i + '"]').val(
  354. jsBizMultLan.atsManager_fillSignCardEdit_i18n_1
  355. );
  356. $('input[name="type' + i + '_el"]').val(1);
  357. }
  358. //【考勤日期】
  359. var attendDate = atsMlUtile.getFieldOriginalValue("attendDate" + i);
  360. $('input[id="attendDate' + i + '"]').shrDateTimePicker({
  361. id: "attendDate" + i,
  362. tagClass: "block-father input-height",
  363. readonly: "",
  364. yearRange: "",
  365. ctrlType: "Date",
  366. value: attendDate,
  367. isAutoTimeZoneTrans: false,
  368. validate: "{dateISO:true,required:true}",
  369. onChange: function () {
  370. if (0 == i) {
  371. that.initAtsBillExplain();
  372. }
  373. },
  374. isNewDateCtrl: true
  375. });
  376. //【补签卡原因】
  377. var grid_f7_json = { id: "reason" + i, name: "reason" + i };
  378. grid_f7_json.subWidgetName = "shrPromptGrid";
  379. var object = $('input[name="reason' + i + '"]');
  380. grid_f7_json.subWidgetOptions = {
  381. title: jsBizMultLan.atsManager_fillSignCardEdit_i18n_4,
  382. uipk: "com.kingdee.eas.hr.ats.app.FillSignReason.AvailableList.F7",
  383. query: ""
  384. };
  385. grid_f7_json.subWidgetOptions.isHRBaseItem = true;
  386. grid_f7_json.subWidgetOptions.filterConfig = [
  387. {
  388. name: "isComUse",
  389. value: true,
  390. alias: jsBizMultLan.atsManager_fillSignCardEdit_i18n_20,
  391. widgetType: "checkbox"
  392. }
  393. ];
  394. grid_f7_json.subWidgetOptions.bizFilterFields = "hrOrgUnit";
  395. grid_f7_json.subWidgetOptions.f7ReKeyValue =
  396. "BaseInfo.id:BaseInfo.name";
  397. grid_f7_json.subWidgetName = "specialPromptGrid";
  398. grid_f7_json.validate = "{required:true}";
  399. object.shrPromptBox(grid_f7_json);
  400. if (!flag) {
  401. object.val(correctValue(reason_name));
  402. //利用F7de特性来设置值
  403. $("#reason" + i + "_el").val(correctValue(reason_id));
  404. } else {
  405. //新增行时,补签卡原因取自上一行
  406. var preRow = i - 1;
  407. $("#reason" + i + "_el").val(
  408. correctValue($("#reason" + preRow + "_el").val())
  409. );
  410. $("#reason" + i).val(correctValue($("#reason" + preRow).val()));
  411. }
  412. },
  413. assembleEntriesData: function () {
  414. var entries = [];
  415. var lengthArray = [];
  416. var personDateStr = "";
  417. if (_self.getOperateState().toUpperCase() != "VIEW") {
  418. $("#fillSignCardEntryInfo input[name^=attendDate]").each(function (
  419. i,
  420. domEle
  421. ) {
  422. var length = $(domEle)
  423. .attr("name")
  424. .substring("attendDate".length);
  425. lengthArray.push(parseInt(length));
  426. });
  427. //将数组由小到大排列
  428. if (lengthArray.length > 0) {
  429. lengthArray.sort(sortNumber);
  430. }
  431. for (var i = 0; i < lengthArray.length; i++) {
  432. var entrie = {
  433. id: correctValue(
  434. $(
  435. '#fillSignCardEntryInfo input[name="id' +
  436. lengthArray[i] +
  437. '"]'
  438. ).val()
  439. ),
  440. attendDate: atsMlUtile.getFieldOriginalValue(
  441. 'fillSignCardEntryInfo input[name="attendDate' +
  442. lengthArray[i] +
  443. '"]'
  444. ),
  445. type: new Number(
  446. $(
  447. '#fillSignCardEntryInfo input[type=hidden][id="type' +
  448. lengthArray[i] +
  449. '_el"]'
  450. ).val()
  451. ),
  452. reason: {
  453. id: correctValue(
  454. $(
  455. '#fillSignCardEntryInfo input[type=hidden][id="reason' +
  456. lengthArray[i] +
  457. '_el"]'
  458. ).val()
  459. ),
  460. name: correctValue(
  461. $(
  462. '#fillSignCardEntryInfo input[name="reason' +
  463. lengthArray[i] +
  464. '"]'
  465. ).val()
  466. )
  467. },
  468. fillCardTimeStr: correctValue(
  469. $(
  470. '#fillSignCardEntryInfo input[name="fillCardTimeStr' +
  471. lengthArray[i] +
  472. '"]'
  473. ).val()
  474. ),
  475. toremarks: document.querySelector('#fillSignCardEntryInfo input[name="toremarks'+lengthArray[i]+'"]').value,
  476. person: {
  477. id: $("#entries_person").shrPromptBox("getValue").id
  478. }
  479. };
  480. var date = entrie.attendDate;
  481. var personId = entrie.person.id;
  482. if (date && personId) {
  483. if (i > 0) {
  484. personDateStr += ",";
  485. }
  486. personDateStr += personId + "_" + date.substring(0, 10);
  487. }
  488. entries.push(entrie);
  489. }
  490. } else {
  491. $("#fillSignCardEntryInfo span[name^=attendDate]").each(function (
  492. i,
  493. domEle
  494. ) {
  495. var length = $(domEle)
  496. .attr("name")
  497. .substring("attendDate".length);
  498. lengthArray.push(parseInt(length));
  499. });
  500. //将数组由小到大排列
  501. if (lengthArray.length > 0) {
  502. lengthArray.sort(sortNumber);
  503. }
  504. for (var i = 0; i < lengthArray.length; i++) {
  505. var entrie = {
  506. id: correctValue(
  507. $(
  508. '#fillSignCardEntryInfo input[name="id' +
  509. lengthArray[i] +
  510. '"]'
  511. ).val()
  512. ),
  513. attendDate: atsMlUtile.getFieldOriginalValue(
  514. '#fillSignCardEntryInfo span[name="attendDate' +
  515. lengthArray[i] +
  516. '"]'
  517. ),
  518. type: new Number(
  519. $(
  520. '#fillSignCardEntryInfo input[type=hidden][id="type' +
  521. lengthArray[i] +
  522. '_el"]'
  523. ).val()
  524. ),
  525. reason: {
  526. id: correctValue(
  527. $(
  528. '#fillSignCardEntryInfo input[type=hidden][id="reason' +
  529. lengthArray[i] +
  530. '_el"]'
  531. ).val()
  532. ),
  533. name: correctValue(
  534. $(
  535. '#fillSignCardEntryInfo span[name="reason' +
  536. lengthArray[i] +
  537. '"]'
  538. ).text()
  539. )
  540. },
  541. fillCardTimeStr: correctValue(
  542. $(
  543. '#fillSignCardEntryInfo span[name="fillCardTimeStr' +
  544. lengthArray[i] +
  545. '"]'
  546. ).text()
  547. ),
  548. toremarks: document.querySelector('#fillSignCardEntryInfo input[name="toremarks'+lengthArray[i]+'"]').value,
  549. person: { id: $("#entries_person").val() }
  550. };
  551. var date = entrie.attendDate;
  552. var personId = entrie.person.id;
  553. if (date && personId) {
  554. if (i > 0) {
  555. personDateStr += ",";
  556. }
  557. personDateStr += personId + "_" + date.substring(0, 10);
  558. }
  559. entries.push(entrie);
  560. }
  561. }
  562. if (personDateStr) {
  563. _self.remoteCall({
  564. type: "post",
  565. method: "getPersonAdminOrgUnit",
  566. param: { personDateStr: personDateStr },
  567. async: false,
  568. success: function (res) {
  569. var info = res;
  570. var personAtsInfo = {};
  571. for (var i = 0; i < entries.length; i++) {
  572. var date = entries[i].attendDate;
  573. var personId = entries[i].person.id;
  574. if (date && personId) {
  575. var person_date =
  576. personId + "_" + date.substring(0, 10);
  577. personAtsInfo = info[person_date];
  578. if (personAtsInfo && personAtsInfo.adminOrgUnit) {
  579. entries[i]["adminOrgUnit"] =
  580. personAtsInfo.adminOrgUnit;
  581. entries[i]["position"] = personAtsInfo.position;
  582. }
  583. }
  584. }
  585. }
  586. });
  587. }
  588. return entries;
  589. }
  590. });