fillSignCardEditEx.js 24 KB

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