You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

667 lines
33 KiB

2 years ago
  1. 'use strict';
  2. var sProgramId = getProgramId(),
  3. sQueryPrgId = getQueryPrgId(),
  4. sViewPrgId = sProgramId.replace('_Upd', '_View'),
  5. sAction = getUrlParam('Action') || 'Add',
  6. sDataId = getUrlParam('Guid'),
  7. sCheckId = sDataId,
  8. fnPageInit = function () {
  9. var oCurData = { CheckOrder: [] },
  10. oForm = $('#form_main'),
  11. oValidator = null,
  12. oGrid = null,
  13. saUsers = [],
  14. /**
  15. * 獲取資料
  16. */
  17. fnGet = function () {
  18. if (sDataId) {
  19. return g_api.ConnectLite(sQueryPrgId, ComFn.GetOne,
  20. {
  21. Guid: sDataId
  22. },
  23. function (res) {
  24. if (res.RESULT) {
  25. var oRes = res.DATA.rel;
  26. oCurData = oRes;
  27. oCurData.CheckOrder = $.parseJSON(oCurData.CheckOrder);
  28. setFormVal(oForm, oRes);
  29. $('#FillBrushDate').val(newDate(oCurData.FillBrushDate, true));
  30. $('.AskTheDummy').text(oCurData.AskTheDummyName + '(' + oCurData.AskTheDummy + ') ' + oCurData.DeptName);
  31. fnGetUploadFiles(oCurData.Guid, fnUpload);
  32. if (oCurData.Handle_DeptID) {
  33. fnSetUserDrop([
  34. {
  35. Select: $('#Handle_Person'),
  36. DepartmentID: oCurData.Handle_DeptID,
  37. ShowId: true,
  38. Select2: true,
  39. Action: sAction,
  40. DefultVal: oCurData.Handle_Person
  41. }
  42. ]);
  43. }
  44. if (oCurData.Flows_Lock === 'Y') {
  45. $(".checkordertoolbox").hide();
  46. }
  47. else {
  48. $(".checkordertoolbox").show();
  49. }
  50. if (oCurData.Handle_Lock === 'Y') {
  51. $("#Handle_DeptID,#Handle_Person").attr('disabled', true);
  52. }
  53. else {
  54. $("#Handle_DeptID,#Handle_Person").removeAttr('disabled');
  55. }
  56. $("#jsGrid").jsGrid("loadData");
  57. setNameById().done(function () {
  58. getPageVal();//緩存頁面值,用於清除
  59. });
  60. }
  61. });
  62. }
  63. else {
  64. $('.AskTheDummy').text(parent.UserInfo.MemberName + '(' + parent.UserInfo.MemberID + ') ' + parent.UserInfo.DepartmentName);
  65. $('#AskTheDummy').val(parent.UserInfo.MemberID);
  66. oCurData.CheckOrder = [];
  67. oCurData.Guid = guid();
  68. fnUpload();
  69. return $.Deferred().resolve().promise();
  70. }
  71. },
  72. /**
  73. * 新增資料
  74. * @param {String} sFlag 新增或儲存後新增
  75. */
  76. fnAdd = function (flag) {
  77. var data = getFormSerialize(oForm);
  78. data = packParams(data);
  79. data.OrgID = parent.OrgID;
  80. data.Guid = oCurData.Guid;
  81. data.SignedNumber = 'SerialNumber|' + parent.UserInfo.OrgID + '|AD|MinYear|3|' + parent.UserInfo.ServiceCode + '|' + parent.UserInfo.ServiceCode;
  82. data.CheckFlows = fnCheckFlows(oCurData, false, true, saUsers);
  83. data.HandleFlows = fnHandleFlows(oCurData, saUsers);
  84. data.CheckOrder = JSON.stringify(oCurData.CheckOrder);
  85. data.Status = 'A';
  86. data.IsHandled = 'N';
  87. data.Inspectors = '';
  88. data.Reminders = '';
  89. data.Flows_Lock = oCurData.Flows_Lock;
  90. data.Handle_Lock = oCurData.Handle_Lock;
  91. CallAjax(ComFn.W_Com, ComFn.GetAdd, {
  92. Params: {
  93. attendancediff: data
  94. }
  95. }, function (res) {
  96. if (res.d > 0) {
  97. bRequestStorage = false;
  98. if (flag == 'add') {
  99. showMsgAndGo(i18next.t("message.Save_Success"), sProgramId, '?Action=Upd&Guid=' + data.Guid); // ╠message.Save_Success⇒新增成功╣
  100. }
  101. else {
  102. showMsgAndGo(i18next.t("message.Save_Success"), sProgramId, '?Action=Add'); // ╠message.Save_Success⇒新增成功╣
  103. }
  104. }
  105. else {
  106. showMsg(i18next.t("message.Save_Failed"), 'error'); // ╠message.Save_Failed⇒新增失敗╣
  107. }
  108. }, function () {
  109. showMsg(i18next.t("message.Save_Failed"), 'error'); // ╠message.Save_Failed⇒新增失敗╣
  110. });
  111. },
  112. /**
  113. * 修改資料
  114. * @param {Boolean} balert 是否提示
  115. */
  116. fnUpd = function (balert) {
  117. var data = getFormSerialize(oForm);
  118. data = packParams(data, 'upd');
  119. data.CheckFlows = fnCheckFlows(oCurData, false, true, saUsers);
  120. data.HandleFlows = fnHandleFlows(oCurData, saUsers);
  121. data.CheckOrder = JSON.stringify(oCurData.CheckOrder);
  122. data.Flows_Lock = oCurData.Flows_Lock;
  123. data.Handle_Lock = oCurData.Handle_Lock;
  124. return CallAjax(ComFn.W_Com, ComFn.GetUpd, {
  125. Params: {
  126. attendancediff: {
  127. values: data,
  128. keys: { Guid: sDataId }
  129. }
  130. }
  131. }, function (res) {
  132. if (res.d > 0) {
  133. if (!balert) {
  134. bRequestStorage = false;
  135. showMsg(i18next.t("message.Modify_Success"), 'success'); //╠message.Modify_Success⇒修改成功╣
  136. if (window.bLeavePage) {
  137. setTimeout(function () {
  138. pageLeave();
  139. }, 1000);
  140. }
  141. }
  142. }
  143. else {
  144. showMsg(i18next.t("message.Modify_Failed"), 'error');//╠message.Modify_Failed⇒修改失敗╣
  145. }
  146. }, function () {
  147. showMsg(i18next.t("message.Modify_Failed"), 'error');//╠message.Modify_Failed⇒修改失敗╣
  148. });
  149. },
  150. /**
  151. * 資料刪除
  152. * @param
  153. * @return
  154. * 起始作者John
  155. * 起始日期2016/05/21
  156. * 最新修改人John
  157. * 最新修日期2016/11/03
  158. */
  159. fnDel = function () {
  160. CallAjax(ComFn.W_Com, ComFn.GetDel, {
  161. Params: {
  162. attendancediff: {
  163. Guid: sDataId
  164. }
  165. }
  166. }, function (res) {
  167. if (res.d > 0) {
  168. DelTask(sDataId);
  169. showMsgAndGo(i18next.t("message.Delete_Success"), sQueryPrgId); // ╠message.Delete_Success⇒刪除成功╣
  170. }
  171. else {
  172. showMsg(i18next.t("message.Delete_Failed"), 'error'); // ╠message.Delete_Failed⇒刪除失敗╣
  173. }
  174. }, function () {
  175. showMsg(i18next.t("message.Delete_Failed"), 'error'); // ╠message.Delete_Failed⇒刪除失敗╣
  176. });
  177. },
  178. /**
  179. * 上傳附件
  180. * @param {Array} files 上傳的文件
  181. */
  182. fnUpload = function (files) {
  183. var option = {};
  184. option.input = $('#fileInput');
  185. option.theme = 'dragdropbox';
  186. option.folder = 'AttendanceDiff';
  187. option.type = 'list';
  188. option.parentid = oCurData.Guid;
  189. if (files) {
  190. option.files = files;
  191. }
  192. fnUploadRegister(option);
  193. },
  194. /**
  195. * 提交簽呈
  196. * @param
  197. * @return
  198. * 起始作者John
  199. * 起始日期2018/01/17
  200. * 最新修改人John
  201. * 最新修日期2018/01/17
  202. */
  203. fnSubmitPetition = function () {
  204. g_api.ConnectLite(sProgramId, 'AttendanceDiffToAudit', {
  205. guid: oCurData.Guid
  206. }, function (res) {
  207. if (res.RESULT) {
  208. showMsgAndGo(i18next.t("message.ToAudit_Success"), sViewPrgId, '?Action=Upd&Guid=' + oCurData.Guid);// ╠message.ToAudit_Success⇒提交審核成功╣
  209. parent.msgs.server.pushTips(parent.fnReleaseUsers(res.DATA.rel));
  210. }
  211. else {
  212. showMsg(i18next.t('message.ToAudit_Failed') + '<br>' + res.MSG, 'error'); // ╠message.ToAudit_Failed⇒提交審核失敗╣
  213. }
  214. }, function () {
  215. showMsg(i18next.t('message.ToAudit_Failed'), 'error'); // ╠message.ToAudit_Failed⇒提交審核失敗╣
  216. });
  217. },
  218. /**
  219. * ToolBar 按鈕事件 function
  220. * @paraminst {Object} 按鈕物件對象
  221. * @parame {Object}事件對象
  222. * @return
  223. * 起始作者John
  224. * 起始日期2016/05/21
  225. * 最新修改人John
  226. * 最新修日期2016/11/03
  227. */
  228. fnButtonHandler = function (inst, e) {
  229. var sId = inst.id;
  230. switch (sId) {
  231. case "Toolbar_Qry":
  232. break;
  233. case "Toolbar_Save":
  234. if (!$("#form_main").valid()) {
  235. oValidator.focusInvalid();
  236. return false;
  237. }
  238. if (sAction === 'Add') {
  239. fnAdd('add');
  240. }
  241. else {
  242. fnUpd();
  243. }
  244. break;
  245. case "Toolbar_ReAdd":
  246. if (!$("#form_main").valid()) {
  247. oValidator.focusInvalid();
  248. return false;
  249. }
  250. fnAdd('readd');
  251. break;
  252. case "Toolbar_Clear":
  253. clearPageVal();
  254. break;
  255. case "Toolbar_Leave":
  256. pageLeave();
  257. break;
  258. case "Toolbar_Add":
  259. break;
  260. case "Toolbar_Upd":
  261. break;
  262. case "Toolbar_Copy":
  263. break;
  264. case "Toolbar_Petition":
  265. if (!$("#form_main").valid()) {
  266. oValidator.focusInvalid();
  267. return false;
  268. }
  269. fnUpd(true).done(function () {
  270. fnSubmitPetition();
  271. });
  272. break;
  273. case "Toolbar_Del": // ╠message.ConfirmToDelete⇒確定要刪除嗎 ?╣ ╠common.Tips⇒提示╣
  274. layer.confirm(i18next.t("message.ConfirmToDelete"), { icon: 3, title: i18next.t('common.Tips') }, function (index) {
  275. fnDel();
  276. layer.close(index);
  277. });
  278. break;
  279. default:
  280. alert("No handle '" + sId + "'");
  281. break;
  282. }
  283. },
  284. /**
  285. * 初始化 function
  286. * @param
  287. * @return
  288. * 起始作者John
  289. * 起始日期2016/05/21
  290. * 最新修改人John
  291. * 最新修日期2016/11/03
  292. */
  293. init = function () {
  294. var saCusBtns = null;
  295. if (sAction === 'Upd') {
  296. saCusBtns = [{
  297. id: 'Toolbar_Petition',
  298. value: 'common.SubmitPetition'// ╠common.SubmitPetition⇒提交簽呈╣
  299. }];
  300. }
  301. commonInit({
  302. PrgId: sProgramId,
  303. ButtonHandler: fnButtonHandler,
  304. Buttons: saCusBtns,
  305. GoTop: true
  306. });
  307. oValidator = $("#form_main").validate();
  308. $.whenArray([
  309. fnSetDeptDrop($('#Handle_DeptID')),
  310. fnSetFlowDrop({
  311. Flow_Type: parent.SysSet.Eip_003,
  312. ShareTo: parent.UserID,
  313. CallBack: function (data) {
  314. $.each(data, function (idx, item) {
  315. var saFlows = $.parseJSON(item.Flows),
  316. saFlowsText = [],
  317. sFlowsText = '';
  318. $.each(saFlows, function (idx, flow) {
  319. var sFlowType = i18next.t('common.' + flow.SignedWay);
  320. if (flow.SignedWay !== 'flow1') {
  321. saFlowsText.push(sFlowType + '(' + Enumerable.From(flow.SignedMember).ToString(",", "$.name") + ')');
  322. }
  323. else {
  324. saFlowsText.push(Enumerable.From(flow.SignedMember).ToString(",", "$.name"));
  325. }
  326. });
  327. sFlowsText = saFlowsText.join(' → ');
  328. item.text = item.Flow_Name + ' - ' + (sFlowsText.length > 60 ? sFlowsText.substr(0, 60) + '...' : sFlowsText);
  329. });
  330. $('#FlowId').html(createOptions(data, 'Guid', 'text')).on('change', function () {
  331. var sFlowId = this.value;
  332. if (sFlowId) {
  333. CallAjax(ComFn.W_Com, ComFn.GetOne, {
  334. Type: '',
  335. Params: {
  336. checkflow: {
  337. Guid: sFlowId
  338. }
  339. }
  340. }, function (res) {
  341. if (res.d) {
  342. var oRes = $.parseJSON(res.d);
  343. oRes.Flows = $.parseJSON(oRes.Flows);
  344. oCurData.CheckOrder = oRes.Flows;
  345. oCurData.Flows_Lock = oRes.Flows_Lock;
  346. oCurData.Handle_Lock = oRes.Handle_Lock;
  347. $("#Handle_DeptID").val(oRes.Handle_DeptID);
  348. $("#Handle_Person").val(oRes.Handle_Person).trigger('change');
  349. if (oRes.Flows_Lock === 'Y') {
  350. $(".checkordertoolbox").hide();
  351. }
  352. else {
  353. $(".checkordertoolbox").show();
  354. }
  355. if (oRes.Handle_Lock === 'Y') {
  356. $("#Handle_DeptID,#Handle_Person").attr('disabled', true);
  357. }
  358. else {
  359. $("#Handle_DeptID,#Handle_Person").removeAttr('disabled');
  360. }
  361. $("#jsGrid").jsGrid("loadData");
  362. }
  363. });
  364. }
  365. else {
  366. oCurData.CheckOrder = [];
  367. $(".checkordertoolbox").hide();
  368. $("#jsGrid").jsGrid("loadData");
  369. $("#Handle_DeptID,#Handle_Person").removeAttr('disabled');
  370. }
  371. });
  372. }
  373. }),
  374. fnSetUserDrop([
  375. {
  376. Select: $('#Handle_Person'),
  377. Select2: true,
  378. ShowId: true,
  379. Action: sAction,
  380. CallBack: function (data) {
  381. saUsers = data;
  382. }
  383. }
  384. ])
  385. ])
  386. .done(function () {
  387. fnGet();
  388. });
  389. $('#Handle_DeptID').on('change', function () {
  390. fnSetUserDrop([
  391. {
  392. Select: $('#Handle_Person'),
  393. DepartmentID: this.value,
  394. ShowId: true,
  395. Select2: true,
  396. Action: sAction
  397. }
  398. ]);
  399. });
  400. $('#Agent_Person').on('change', function () {
  401. oCurData.Agent_Person = this.value;
  402. });
  403. $('.flowlink').on('click', function () {
  404. var oOption = {};
  405. oOption.SignedWay = this.id;
  406. oOption.Callback = function (data) {
  407. if (data.Users.length > 0) {
  408. var oFlow = {};
  409. if (data.FlowType === 'flow1') {
  410. $.each(data.Users, function (idx, user) {
  411. oFlow = {};
  412. oFlow.id = guid();
  413. oFlow.Order = oCurData.CheckOrder.length + 1;
  414. oFlow.SignedWay = data.FlowType;
  415. oFlow.SignedMember = [{
  416. id: user.id,
  417. name: user.name,
  418. deptname: user.deptname,
  419. jobname: user.jobname
  420. }];
  421. oCurData.CheckOrder.push(oFlow);
  422. });
  423. }
  424. else {
  425. var saUsers = [];
  426. $.each(data.Users, function (idx, user) {
  427. saUsers.push({
  428. id: user.id,
  429. name: user.name,
  430. deptname: user.deptname,
  431. jobname: user.jobname
  432. });
  433. });
  434. oFlow.id = guid();
  435. oFlow.Order = oCurData.CheckOrder.length + 1;
  436. oFlow.SignedWay = data.FlowType;
  437. oFlow.SignedMember = saUsers;
  438. oCurData.CheckOrder.push(oFlow);
  439. }
  440. oCurData.CheckOrder = releaseGridList(oCurData.CheckOrder);
  441. $("#jsGrid").jsGrid("loadData");
  442. }
  443. };
  444. oPenUserListPop(oOption);
  445. });
  446. $("#jsGrid").jsGrid({
  447. width: "100%",
  448. height: "auto",
  449. autoload: true,
  450. filtering: false,
  451. pageLoading: true,
  452. pageIndex: 1,
  453. pageSize: 10000,
  454. fields: [
  455. {
  456. name: "Order", title: 'common.Order', width: 50, align: "center",
  457. itemTemplate: function (val, item) {
  458. return val < 10 ? '0' + val : val;
  459. }
  460. },
  461. {
  462. name: "SignedWay", title: 'common.SignedWay', width: 120, align: "center",
  463. itemTemplate: function (val, item) {
  464. return i18next.t('common.' + val);
  465. }
  466. },
  467. {
  468. type: "Icon", width: 50, align: "center",
  469. itemTemplate: function (val, item) {
  470. var oIcon = {
  471. flow1: '<img src="../../images/flow_check.gif">',
  472. flow2: '<img src="../../images/flow_check.gif"><img src="../../images/flow_check.gif">',
  473. flow3: '<img src="../../images/flow_check.gif"><img src="../../images/flow_nocheck.gif">',
  474. flow4: '<img src="../../images/flow4.gif">'
  475. },
  476. sIcon = oIcon[item.SignedWay];
  477. if (item.Order !== oCurData.CheckOrder.length) {
  478. sIcon += '<br><img src="../../images/flow_arrow.gif" style="vertical-align:top;">'
  479. }
  480. return sIcon;
  481. }
  482. },
  483. {
  484. name: "SignedMember", title: 'common.SignedMember', width: 500,
  485. itemTemplate: function (val, item) {
  486. return Enumerable.From(val).ToString(",", "$.name");
  487. }
  488. },
  489. {
  490. type: "control", title: 'common.Action', width: 200,
  491. itemTemplate: function (val, item) {
  492. var oBtns = [$('<div>', { class: 'fa-item col-sm-3' }).append($('<i>', {
  493. class: 'glyphicon glyphicon-pencil' + (oCurData.Flows_Lock === 'Y' ? ' disabled' : ''),
  494. title: i18next.t('common.Edit'),// ╠common.Edit⇒編輯╣
  495. click: function () {
  496. if ($(this).hasClass('disabled')) { return false; }
  497. var oOption = {};
  498. oOption.SignedWay = item.SignedWay;
  499. oOption.SignedMember = item.SignedMember;
  500. oOption.Callback = function (data) {
  501. if (data.Users.length > 0) {
  502. var oFlow = {};
  503. if (data.FlowType === 'flow1') {
  504. $.each(data.Users, function (idx, user) {
  505. var oFlow = {};
  506. oFlow.id = guid();
  507. oFlow.Order = item.Order + idx;
  508. oFlow.SignedWay = data.FlowType;
  509. oFlow.SignedMember = [{
  510. id: user.id,
  511. name: user.name,
  512. deptname: user.deptname,
  513. jobname: user.jobname
  514. }];
  515. oCurData.CheckOrder.insert(item.Order + idx, oFlow);
  516. });
  517. }
  518. else {
  519. var saUsers = [];
  520. $.each(data.Users, function (idx, user) {
  521. saUsers.push({
  522. id: user.id,
  523. name: user.name,
  524. deptname: user.deptname,
  525. jobname: user.jobname
  526. });
  527. });
  528. oFlow.id = guid();
  529. oFlow.Order = item.Order;
  530. oFlow.SignedWay = data.FlowType;
  531. oFlow.SignedMember = saUsers;
  532. oCurData.CheckOrder.insert(item.Order, oFlow);
  533. }
  534. var iOrder = 1;
  535. $.each(oCurData.CheckOrder, function (idx, _data) {
  536. if (item.id !== _data.id) {
  537. _data.Order = iOrder;
  538. iOrder++;
  539. }
  540. });
  541. oCurData.CheckOrder = Enumerable.From(oCurData.CheckOrder).Where(function (e) { return e.id !== item.id; }).ToArray();
  542. oCurData.CheckOrder = releaseGridList(oCurData.CheckOrder);
  543. $("#jsGrid").jsGrid("loadData");
  544. }
  545. };
  546. oPenUserListPop(oOption);
  547. }
  548. })),
  549. $('<div>', { class: 'fa-item col-sm-3' }).append($('<i>', {
  550. class: 'glyphicon glyphicon-trash' + (oCurData.Flows_Lock === 'Y' ? ' disabled' : ''),
  551. title: i18next.t('common.Toolbar_Del'),// ╠common.Toolbar_Del⇒刪除╣
  552. click: function () {
  553. if ($(this).hasClass('disabled')) { return false; }
  554. var saNewList = Enumerable.From(oCurData.CheckOrder).Where(function (e) { return e.id !== item.id; }).ToArray();
  555. oCurData.CheckOrder = saNewList;
  556. $.each(oCurData.CheckOrder, function (idx, _data) {
  557. _data.Order = idx + 1;
  558. });
  559. oCurData.CheckOrder = releaseGridList(oCurData.CheckOrder);
  560. $("#jsGrid").jsGrid("loadData");
  561. }
  562. }))];
  563. if (oCurData.CheckOrder.length !== item.Order) {
  564. oBtns.push($('<div>', { class: 'fa-item col-sm-3' }).append($('<i>', {
  565. class: 'glyphicon glyphicon-arrow-down' + (oCurData.Flows_Lock === 'Y' ? ' disabled' : ''),
  566. title: i18next.t('common.Down'),// ╠common.Down⇒下移╣
  567. click: function () {
  568. if ($(this).hasClass('disabled')) { return false; }
  569. var sOrder = Enumerable.From(oCurData.CheckOrder).Where(function (e) { return e.id === item.id; }).ToString('', '$.Order'),
  570. iOrder = sOrder * 1;
  571. $.each(oCurData.CheckOrder, function (idx, _data) {
  572. if (iOrder === _data.Order) {
  573. _data.Order++;
  574. }
  575. else if ((iOrder + 1) === _data.Order) {
  576. _data.Order--;
  577. }
  578. });
  579. oCurData.CheckOrder = releaseGridList(oCurData.CheckOrder);
  580. $("#jsGrid").jsGrid("loadData");
  581. }
  582. })));
  583. }
  584. else {
  585. oBtns.push($('<div>', { class: 'fa-item col-sm-3' }));
  586. }
  587. if (1 !== item.Order) {
  588. oBtns.push($('<div>', { class: 'fa-item col-sm-3' }).append($('<i>', {
  589. class: 'glyphicon glyphicon-arrow-up' + (oCurData.Flows_Lock === 'Y' ? ' disabled' : ''),
  590. title: i18next.t('common.Up'),// ╠common.Up⇒上移╣
  591. click: function () {
  592. if ($(this).hasClass('disabled')) { return false; }
  593. var sOrder = Enumerable.From(oCurData.CheckOrder).Where(function (e) { return e.id === item.id; }).ToString('', '$.Order'),
  594. iOrder = sOrder * 1;
  595. $.each(oCurData.CheckOrder, function (idx, _data) {
  596. if (iOrder === _data.Order) {
  597. _data.Order--;
  598. }
  599. else if ((iOrder - 1) === _data.Order) {
  600. _data.Order++;
  601. }
  602. });
  603. oCurData.CheckOrder = releaseGridList(oCurData.CheckOrder);
  604. $("#jsGrid").jsGrid("loadData");
  605. }
  606. })));
  607. }
  608. return oBtns;
  609. }
  610. }
  611. ],
  612. controller: {
  613. loadData: function (args) {
  614. return {
  615. data: oCurData.CheckOrder,
  616. itemsCount: oCurData.CheckOrder.length //data.length
  617. };
  618. },
  619. insertItem: function (args) {
  620. },
  621. updateItem: function (args) {
  622. },
  623. deleteItem: function (args) {
  624. }
  625. },
  626. onInit: function (args) {
  627. oGrid = args.grid;
  628. }
  629. });
  630. };
  631. init();
  632. };
  633. require(['base', 'select2', 'jsgrid', 'filer', 'common_eip', 'util'], fnPageInit);