fillSignCardEditEx_UAT.js 24 KB

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