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.

800 lines
41 KiB

3 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. oGrid = null,
  12. oValidator = null,
  13. oTR = null,
  14. oAddItem = {},
  15. saUsers = [],
  16. fnGetBillChangeInfo = function () {
  17. var saList = [];
  18. $('.billchangeinfo tr.data-item').each(function (idx) {
  19. saList.push({
  20. OldItem: $(this).find('[data-id="OldItem"]').val(),
  21. OldAmountCurrency: $(this).find('[data-id="OldAmountCurrency"]').val(),
  22. OldAmount: $(this).find('[data-id="OldAmount"]').val(),
  23. NewItem: $(this).find('[data-id="NewItem"]').val(),
  24. NewAmountCurrency: $(this).find('[data-id="NewAmountCurrency"]').val(),
  25. NewAmount: $(this).find('[data-id="NewAmount"]').val()
  26. });
  27. });
  28. return saList;
  29. },
  30. /**
  31. * 獲取資料
  32. */
  33. fnGet = function () {
  34. var deferred = $.Deferred();
  35. if (sDataId) {
  36. return g_api.ConnectLite(sQueryPrgId, ComFn.GetOne,
  37. {
  38. Guid: sDataId
  39. },
  40. function (res) {
  41. if (res.RESULT) {
  42. var oRes = res.DATA.rel;
  43. oCurData = oRes;
  44. oCurData.BillChanges = $.parseJSON(oCurData.BillChanges);
  45. oCurData.CheckOrder = $.parseJSON(oCurData.CheckOrder);
  46. setFormVal(oForm, oRes);
  47. $('.Applicant').text(oCurData.ApplicantName + '(' + oCurData.Applicant + ') ' + oCurData.DeptName);
  48. fnGetUploadFiles(oCurData.Guid, fnUpload);
  49. if (oCurData.Handle_DeptID) {
  50. fnSetUserDrop([
  51. {
  52. Select: $('#Handle_Person'),
  53. DepartmentID: oCurData.Handle_DeptID,
  54. ShowId: true,
  55. Select2: true,
  56. Action: sAction,
  57. DefultVal: oCurData.Handle_Person
  58. }
  59. ]);
  60. }
  61. if (oCurData.Flows_Lock === 'Y') {
  62. $(".checkordertoolbox").hide();
  63. }
  64. else {
  65. $(".checkordertoolbox").show();
  66. }
  67. if (oCurData.Handle_Lock === 'Y') {
  68. $("#Handle_DeptID,#Handle_Person").attr('disabled', true);
  69. }
  70. else {
  71. $("#Handle_DeptID,#Handle_Person").removeAttr('disabled');
  72. }
  73. $('[class="data-item"]').remove();
  74. $.each(oCurData.BillChanges.ChangeInfo || [], function (idx, item) {
  75. var oTrNew = oTR.clone(true);
  76. oTrNew.find('[data-id="OldItem"]').val(item.OldItem);
  77. oTrNew.find('[data-id="OldAmountCurrency"]').val(item.OldAmountCurrency);
  78. oTrNew.find('[data-id="OldAmount"]').val(item.OldAmount);
  79. oTrNew.find('[data-id="NewItem"]').val(item.NewItem);
  80. oTrNew.find('[data-id="NewAmountCurrency"]').val(item.NewAmountCurrency);
  81. oTrNew.find('[data-id="NewAmount"]').val(item.NewAmount);
  82. $('.billchangeinfo tr:last').before(oTrNew);
  83. });
  84. $("#jsGrid").jsGrid("loadData");
  85. setNameById().done(function () {
  86. getPageVal();//緩存頁面值,用於清除
  87. });
  88. moneyInput($('[data-type="int"]'), 2, true);
  89. }
  90. });
  91. }
  92. else {
  93. $('.Applicant').text(parent.UserInfo.MemberName + '(' + parent.UserInfo.MemberID + ') ' + parent.UserInfo.DepartmentName);
  94. $('#Applicant').val(parent.UserInfo.MemberID);
  95. oCurData.CheckOrder = [];
  96. oCurData.Guid = guid();
  97. fnUpload();
  98. return $.Deferred().resolve().promise();
  99. }
  100. },
  101. /**
  102. * 新增資料
  103. * @param {String} sFlag 新增或儲存後新增
  104. */
  105. fnAdd = function (flag) {
  106. var data = getFormSerialize(oForm);
  107. data = packParams(data);
  108. data.OrgID = parent.OrgID;
  109. data.Guid = oCurData.Guid;
  110. data.SignedNumber = 'SerialNumber|' + parent.UserInfo.OrgID + '|BCA|MinYear|3|' + parent.UserInfo.ServiceCode + '|' + parent.UserInfo.ServiceCode;
  111. data.CheckFlows = fnCheckFlows(oCurData, false, true, saUsers);
  112. data.HandleFlows = fnHandleFlows(oCurData, saUsers);
  113. data.BillChanges.ChangeInfo = fnGetBillChangeInfo();
  114. data.BillChanges.CustomerName = $('#BillChanges_CustomerID option:selected').text();
  115. data.BillChanges.ExhibitionName = $('#BillChanges_ExhibitionNO option:selected').text();
  116. data.BillChanges.ResponsiblePersonName = $('#BillChanges_ResponsiblePerson option:selected').text();
  117. data.BillChanges = JSON.stringify(data.BillChanges);
  118. data.CheckOrder = JSON.stringify(oCurData.CheckOrder);
  119. data.Status = 'A';
  120. data.IsHandled = 'N';
  121. data.Inspectors = '';
  122. data.Reminders = '';
  123. data.Flows_Lock = oCurData.Flows_Lock;
  124. data.Handle_Lock = oCurData.Handle_Lock;
  125. CallAjax(ComFn.W_Com, ComFn.GetAdd, {
  126. Params: {
  127. billchangeapply: data
  128. }
  129. }, function (res) {
  130. if (res.d > 0) {
  131. bRequestStorage = false;
  132. if (flag == 'add') {
  133. showMsgAndGo(i18next.t("message.Save_Success"), sProgramId, '?Action=Upd&Guid=' + data.Guid); // ╠message.Save_Success⇒新增成功╣
  134. }
  135. else {
  136. showMsgAndGo(i18next.t("message.Save_Success"), sProgramId, '?Action=Add'); // ╠message.Save_Success⇒新增成功╣
  137. }
  138. }
  139. else {
  140. showMsg(i18next.t("message.Save_Failed"), 'error'); // ╠message.Save_Failed⇒新增失敗╣
  141. }
  142. }, function () {
  143. showMsg(i18next.t("message.Save_Failed"), 'error'); // ╠message.Save_Failed⇒新增失敗╣
  144. });
  145. },
  146. /**
  147. * 修改資料
  148. * @param {Boolean} balert 是否提示
  149. */
  150. fnUpd = function (balert) {
  151. var data = getFormSerialize(oForm);
  152. data = packParams(data, 'upd');
  153. data.CheckFlows = fnCheckFlows(oCurData, false, true, saUsers);
  154. data.HandleFlows = fnHandleFlows(oCurData, saUsers);
  155. data.BillChanges.ChangeInfo = fnGetBillChangeInfo();
  156. data.BillChanges.CustomerName = $('#BillChanges_CustomerID option:selected').text();
  157. data.BillChanges.ExhibitionName = $('#BillChanges_ExhibitionNO option:selected').text();
  158. data.BillChanges.ResponsiblePersonName = $('#BillChanges_ResponsiblePerson option:selected').text();
  159. data.BillChanges = JSON.stringify(data.BillChanges);
  160. data.CheckOrder = JSON.stringify(oCurData.CheckOrder);
  161. data.Flows_Lock = oCurData.Flows_Lock;
  162. data.Handle_Lock = oCurData.Handle_Lock;
  163. return CallAjax(ComFn.W_Com, ComFn.GetUpd, {
  164. Params: {
  165. billchangeapply: {
  166. values: data,
  167. keys: { Guid: sDataId }
  168. }
  169. }
  170. }, function (res) {
  171. if (res.d > 0) {
  172. if (!balert) {
  173. bRequestStorage = false;
  174. showMsg(i18next.t("message.Modify_Success"), 'success'); //╠message.Modify_Success⇒修改成功╣
  175. if (window.bLeavePage) {
  176. setTimeout(function () {
  177. pageLeave();
  178. }, 1000);
  179. }
  180. }
  181. }
  182. else {
  183. showMsg(i18next.t("message.Modify_Failed"), 'error');//╠message.Modify_Failed⇒修改失敗╣
  184. }
  185. }, function () {
  186. showMsg(i18next.t("message.Modify_Failed"), 'error');//╠message.Modify_Failed⇒修改失敗╣
  187. });
  188. },
  189. /**
  190. * 資料刪除
  191. */
  192. fnDel = function () {
  193. CallAjax(ComFn.W_Com, ComFn.GetDel, {
  194. Params: {
  195. billchangeapply: {
  196. Guid: sDataId
  197. }
  198. }
  199. }, function (res) {
  200. if (res.d > 0) {
  201. DelTask(sDataId);
  202. showMsgAndGo(i18next.t("message.Delete_Success"), sQueryPrgId); // ╠message.Delete_Success⇒刪除成功╣
  203. }
  204. else {
  205. showMsg(i18next.t("message.Delete_Failed"), 'error'); // ╠message.Delete_Failed⇒刪除失敗╣
  206. }
  207. }, function () {
  208. showMsg(i18next.t("message.Delete_Failed"), 'error'); // ╠message.Delete_Failed⇒刪除失敗╣
  209. });
  210. },
  211. /**
  212. * 設定客戶下拉選單
  213. */
  214. setCustomersDrop = function () {
  215. return g_api.ConnectLite(Service.sys, 'GetCustomerlist', {}, function (res) {
  216. if (res.RESULT) {
  217. var saCustomers = res.DATA.rel,
  218. sCustomersOptionsHtml = createOptions(saCustomers, 'id', 'text');
  219. $('#BillChanges_CustomerID').html(sCustomersOptionsHtml);
  220. select2Init($('#BillChanges_CustomerID').parent());
  221. }
  222. });
  223. },
  224. setBillNumber = function () {
  225. return g_api.ConnectLite('BillChangeApply_Upd', 'GetBillNumber', {}, function (res) {
  226. if (res.RESULT) {
  227. var data = res.DATA.rel;
  228. var dataCount = data.length;
  229. var optionScript = '<option value="">請選擇...</option>';
  230. for (var i = 0; i < dataCount; i++) {
  231. optionScript += "<option value='" + data[i]['BillNO'] + "' title='" + data[i]['BillNO'] + "'>";
  232. optionScript += data[i]['BillNO'] += "</option>";
  233. }
  234. $('#BillChanges_BillNO').html(optionScript);
  235. select2Init($('#BillChanges_BillNO').parent());
  236. }
  237. })
  238. },
  239. /**
  240. * 上傳附件
  241. * @param {Array} files 上傳的文件
  242. */
  243. fnUpload = function (files) {
  244. var option = {};
  245. option.input = $('#fileInput');
  246. option.theme = 'dragdropbox';
  247. option.folder = 'BillChangeApply';
  248. option.type = 'list';
  249. option.parentid = oCurData.Guid;
  250. if (files) {
  251. option.files = files;
  252. }
  253. fnUploadRegister(option);
  254. },
  255. /**
  256. * 提交簽呈
  257. */
  258. fnSubmitPetition = function () {
  259. g_api.ConnectLite(sProgramId, 'BillChangeApplyToAudit', {
  260. guid: oCurData.Guid
  261. }, function (res) {
  262. if (res.RESULT) {
  263. showMsgAndGo(i18next.t("message.ToAudit_Success"), sViewPrgId, '?Action=Upd&Guid=' + oCurData.Guid);// ╠message.ToAudit_Success⇒提交審核成功╣
  264. parent.msgs.server.pushTips(parent.fnReleaseUsers(res.DATA.rel));
  265. }
  266. else {
  267. showMsg(i18next.t('message.ToAudit_Failed') + '<br>' + res.MSG, 'error'); // ╠message.ToAudit_Failed⇒提交審核失敗╣
  268. }
  269. }, function () {
  270. showMsg(i18next.t('message.ToAudit_Failed'), 'error'); // ╠message.ToAudit_Failed⇒提交審核失敗╣
  271. });
  272. },
  273. /**
  274. * 設定展覽下拉選單
  275. * @param {Object} drop 當前控件
  276. * @return {Object} Ajax 物件
  277. */
  278. fnSetEpoDrops = function (drop) {
  279. return g_api.ConnectLite('Exhibition_Upd', 'GetExhibitions',
  280. {
  281. SN: drop.SN || ''
  282. },
  283. function (res) {
  284. if (res.RESULT) {
  285. var saRes = res.DATA.rel;
  286. if (drop.Select) {
  287. drop.Select.html(createOptions(saRes, drop.IdName || 'SN', drop.TextName || 'ExhibitioFullName', drop.ShowId || false));
  288. if (drop.DefultVal) {
  289. drop.Select.val(drop.DefultVal);
  290. }
  291. if (drop.Select2) {
  292. drop.Select.each(function () {
  293. $(this).select2();
  294. $(this).next().after($(this));
  295. });
  296. }
  297. }
  298. if (drop.CallBack && typeof drop.CallBack === 'function') {
  299. drop.CallBack(saRes);
  300. }
  301. }
  302. });
  303. },
  304. /**
  305. * ToolBar 按鈕事件 function
  306. * @param {Object} inst 按鈕物件對象
  307. * @param {Object} e 事件對象
  308. */
  309. fnButtonHandler = function (inst, e) {
  310. var sId = inst.id;
  311. switch (sId) {
  312. case "Toolbar_Qry":
  313. break;
  314. case "Toolbar_Save":
  315. if (!$("#form_main").valid()) {
  316. oValidator.focusInvalid();
  317. return false;
  318. }
  319. if (sAction === 'Add') {
  320. fnAdd('add');
  321. }
  322. else {
  323. fnUpd();
  324. }
  325. break;
  326. case "Toolbar_ReAdd":
  327. if (!$("#form_main").valid()) {
  328. oValidator.focusInvalid();
  329. return false;
  330. }
  331. fnAdd('readd');
  332. break;
  333. case "Toolbar_Clear":
  334. clearPageVal();
  335. break;
  336. case "Toolbar_Leave":
  337. pageLeave();
  338. break;
  339. case "Toolbar_Add":
  340. break;
  341. case "Toolbar_Upd":
  342. break;
  343. case "Toolbar_Copy":
  344. break;
  345. case "Toolbar_Petition":
  346. if (!$("#form_main").valid()) {
  347. oValidator.focusInvalid();
  348. return false;
  349. }
  350. fnUpd(true).done(function () {
  351. fnSubmitPetition();
  352. });
  353. break;
  354. case "Toolbar_Del": // ╠message.ConfirmToDelete⇒確定要刪除嗎 ?╣ ╠common.Tips⇒提示╣
  355. layer.confirm(i18next.t("message.ConfirmToDelete"), { icon: 3, title: i18next.t('common.Tips') }, function (index) {
  356. fnDel();
  357. layer.close(index);
  358. });
  359. break;
  360. default:
  361. alert("No handle '" + sId + "'");
  362. break;
  363. }
  364. },
  365. /**
  366. * 初始化 function
  367. */
  368. init = function () {
  369. var saCusBtns = null;
  370. if (sAction === 'Upd') {
  371. saCusBtns = [{
  372. id: 'Toolbar_Petition',
  373. value: 'common.SubmitPetition'// ╠common.SubmitPetition⇒提交簽呈╣
  374. }];
  375. }
  376. commonInit({
  377. PrgId: sProgramId,
  378. ButtonHandler: fnButtonHandler,
  379. Buttons: saCusBtns,
  380. GoTop: true
  381. });
  382. oValidator = $("#form_main").validate();
  383. $.whenArray([
  384. setBillNumber(),
  385. fnSetDeptDrop($('#Handle_DeptID')),
  386. fnSetFlowDrop({
  387. Flow_Type: parent.SysSet.Eip_005,
  388. ShareTo: parent.UserID,
  389. CallBack: function (data) {
  390. $.each(data, function (idx, item) {
  391. var saFlows = $.parseJSON(item.Flows),
  392. saFlowsText = [],
  393. sFlowsText = '';
  394. $.each(saFlows, function (idx, flow) {
  395. var sFlowType = i18next.t('common.' + flow.SignedWay);
  396. if (flow.SignedWay !== 'flow1') {
  397. saFlowsText.push(sFlowType + '(' + Enumerable.From(flow.SignedMember).ToString(",", "$.name") + ')');
  398. }
  399. else {
  400. saFlowsText.push(Enumerable.From(flow.SignedMember).ToString(",", "$.name"));
  401. }
  402. });
  403. sFlowsText = saFlowsText.join(' → ');
  404. item.text = item.Flow_Name + ' - ' + (sFlowsText.length > 60 ? sFlowsText.substr(0, 60) + '...' : sFlowsText);
  405. });
  406. $('#FlowId').html(createOptions(data, 'Guid', 'text')).on('change', function () {
  407. var sFlowId = this.value;
  408. if (sFlowId) {
  409. CallAjax(ComFn.W_Com, ComFn.GetOne, {
  410. Type: '',
  411. Params: {
  412. checkflow: {
  413. Guid: sFlowId
  414. }
  415. }
  416. }, function (res) {
  417. if (res.d) {
  418. var oRes = $.parseJSON(res.d);
  419. oRes.Flows = $.parseJSON(oRes.Flows);
  420. oCurData.CheckOrder = oRes.Flows;
  421. oCurData.Flows_Lock = oRes.Flows_Lock;
  422. oCurData.Handle_Lock = oRes.Handle_Lock;
  423. $("#Handle_DeptID").val(oRes.Handle_DeptID);
  424. $("#Handle_Person").val(oRes.Handle_Person).trigger('change');
  425. if (oRes.Flows_Lock === 'Y') {
  426. $(".checkordertoolbox").hide();
  427. }
  428. else {
  429. $(".checkordertoolbox").show();
  430. }
  431. if (oRes.Handle_Lock === 'Y') {
  432. $("#Handle_DeptID,#Handle_Person").attr('disabled', true);
  433. }
  434. else {
  435. $("#Handle_DeptID,#Handle_Person").removeAttr('disabled');
  436. }
  437. $("#jsGrid").jsGrid("loadData");
  438. }
  439. });
  440. }
  441. else {
  442. oCurData.CheckOrder = [];
  443. $(".checkordertoolbox").hide();
  444. $("#jsGrid").jsGrid("loadData");
  445. $("#Handle_DeptID,#Handle_Person").removeAttr('disabled');
  446. }
  447. });
  448. }
  449. }),
  450. fnSetEpoDrops({
  451. Select: $('#BillChanges_ExhibitionNO'),
  452. IdName: 'ExhibitionCode',
  453. TextName: 'ExhibitioShotName_TW',
  454. Select2: true
  455. }),
  456. fnSetUserDrop([
  457. {
  458. ShowId: true,
  459. Select: $('#Handle_Person,#BillChanges_ResponsiblePerson'),
  460. Select2: true,
  461. Action: sAction,
  462. CallBack: function (data) {
  463. saUsers = data;
  464. }
  465. }
  466. ]),
  467. setCustomersDrop(),
  468. fnSetArgDrop([
  469. {
  470. ArgClassID: 'Currency',
  471. CallBack: function (data) {
  472. $('.select_currency').html(createOptions(data, 'id', 'id'))[0].remove(0);
  473. }
  474. }
  475. ])]).done(function () {
  476. $('.glyphicon-trash').on('click', function () {
  477. $(this).parent().parent().remove();
  478. });
  479. $('[data-id="OldAmount"]').on('change', function () {
  480. var iAllOldAmount = 0;
  481. $('[data-id="OldAmount"]').each(function () {
  482. iAllOldAmount += ($(this).attr('data-value') || 0) * 1;
  483. });
  484. $('#BillChanges_OldSumAmount').attr('data-value', iAllOldAmount).val(fMoney(iAllOldAmount, 2, 'NTD'));
  485. });
  486. $('[data-id="NewAmount"]').on('change', function () {
  487. var iAllNewAmount = 0;
  488. $('[data-id="NewAmount"]').each(function () {
  489. iAllNewAmount += ($(this).attr('data-value') || 0) * 1;
  490. });
  491. $('#BillChanges_NewSumAmount').attr('data-value', iAllNewAmount).val(fMoney(iAllNewAmount, 2, 'NTD'));
  492. });
  493. oTR = $('.billchangeinfo tr').eq(1).clone(true);
  494. $('.plustemplkey').on('click', function () {
  495. var oTrNew = oTR.clone(true);
  496. $('.billchangeinfo tr:last').before(oTrNew);
  497. });
  498. moneyInput($('[data-type="int"]'), 2, true);
  499. fnGet();
  500. });
  501. $('#Handle_DeptID').on('change', function () {
  502. fnSetUserDrop([
  503. {
  504. Select: $('#Handle_Person'),
  505. DepartmentID: this.value,
  506. ShowId: true,
  507. Select2: true,
  508. Action: sAction
  509. }
  510. ]);
  511. });
  512. $('#Agent_Person').on('change', function () {
  513. oCurData.Agent_Person = this.value;
  514. });
  515. function fnTrigEpoChange(res) {
  516. $("#BillChanges_ExhibitionNO").val(res);
  517. }
  518. function fnTrigCusChange(res) {
  519. $("#BillChanges_CustomerID").val(res);
  520. }
  521. function fnTrigRespersonChange(res) {
  522. $("#BillChanges_ResponsiblePerson").val(res);
  523. }
  524. $("#BillChanges_BillNO").on('change', function () {
  525. var Guid = $(this).val();
  526. ; return g_api.ConnectLite('BillChangeApply_Upd', 'GetBillByGuid', {
  527. Guid: Guid
  528. },
  529. function (res) {
  530. if (res.RESULT) {
  531. var data = res.DATA.rel;
  532. $("#BillChanges_ExhibitionNO").val(data[0]['ExhibitionCode']).change();
  533. $("#BillChanges_CustomerID").val(data[0]['Payer']).change();
  534. $("#BillChanges_ResponsiblePerson").val(data[0]['ResponsiblePerson']).change();
  535. }
  536. })
  537. });
  538. $('.flowlink').on('click', function () {
  539. var oOption = {};
  540. oOption.SignedWay = this.id;
  541. oOption.Callback = function (data) {
  542. if (data.Users.length > 0) {
  543. var oFlow = {};
  544. if (data.FlowType === 'flow1') {
  545. $.each(data.Users, function (idx, user) {
  546. oFlow = {};
  547. oFlow.id = guid();
  548. oFlow.Order = oCurData.CheckOrder.length + 1;
  549. oFlow.SignedWay = data.FlowType;
  550. oFlow.SignedMember = [{
  551. id: user.id,
  552. name: user.name,
  553. deptname: user.deptname,
  554. jobname: user.jobname
  555. }];
  556. oCurData.CheckOrder.push(oFlow);
  557. });
  558. }
  559. else {
  560. var saSignedMember = [];
  561. $.each(data.Users, function (idx, user) {
  562. saSignedMember.push({
  563. id: user.id,
  564. name: user.name,
  565. deptname: user.deptname,
  566. jobname: user.jobname
  567. });
  568. });
  569. oFlow.id = guid();
  570. oFlow.Order = oCurData.CheckOrder.length + 1;
  571. oFlow.SignedWay = data.FlowType;
  572. oFlow.SignedMember = saSignedMember;
  573. oCurData.CheckOrder.push(oFlow);
  574. }
  575. oCurData.CheckOrder = releaseGridList(oCurData.CheckOrder);
  576. $("#jsGrid").jsGrid("loadData");
  577. }
  578. };
  579. oPenUserListPop(oOption);
  580. });
  581. $("#jsGrid").jsGrid({
  582. width: "100%",
  583. height: "auto",
  584. autoload: true,
  585. filtering: false,
  586. pageLoading: true,
  587. pageIndex: 1,
  588. pageSize: 10000,
  589. fields: [
  590. {
  591. name: "Order", title: 'common.Order', width: 50, align: "center",
  592. itemTemplate: function (val, item) {
  593. return val < 10 ? '0' + val : val;
  594. }
  595. },
  596. {
  597. name: "SignedWay", title: 'common.SignedWay', width: 120, align: "center",
  598. itemTemplate: function (val, item) {
  599. return i18next.t('common.' + val);
  600. }
  601. },
  602. {
  603. type: "Icon", width: 50, align: "center",
  604. itemTemplate: function (val, item) {
  605. var oIcon = {
  606. flow1: '<img src="../../images/flow_check.gif">',
  607. flow2: '<img src="../../images/flow_check.gif"><img src="../../images/flow_check.gif">',
  608. flow3: '<img src="../../images/flow_check.gif"><img src="../../images/flow_nocheck.gif">',
  609. flow4: '<img src="../../images/flow4.gif">'
  610. },
  611. sIcon = oIcon[item.SignedWay];
  612. if (item.Order !== oCurData.CheckOrder.length) {
  613. sIcon += '<br><img src="../../images/flow_arrow.gif" style="vertical-align:top;">'
  614. }
  615. return sIcon;
  616. }
  617. },
  618. {
  619. name: "SignedMember", title: 'common.SignedMember', width: 500,
  620. itemTemplate: function (val, item) {
  621. return Enumerable.From(val).ToString(",", "$.name");
  622. }
  623. },
  624. {
  625. type: "control", title: 'common.Action', width: 200,
  626. itemTemplate: function (val, item) {
  627. var oBtns = [$('<div>', { class: 'fa-item col-sm-3' }).append($('<i>', {
  628. class: 'glyphicon glyphicon-pencil' + (oCurData.Flows_Lock === 'Y' ? ' disabled' : ''),
  629. title: i18next.t('common.Edit'),// ╠common.Edit⇒編輯╣
  630. click: function () {
  631. if ($(this).hasClass('disabled')) { return false; }
  632. var oOption = {};
  633. oOption.SignedWay = item.SignedWay;
  634. oOption.SignedMember = item.SignedMember;
  635. oOption.Callback = function (data) {
  636. if (data.Users.length > 0) {
  637. var oFlow = {};
  638. if (data.FlowType === 'flow1') {
  639. $.each(data.Users, function (idx, user) {
  640. var oFlow = {};
  641. oFlow.id = guid();
  642. oFlow.Order = item.Order + idx;
  643. oFlow.SignedWay = data.FlowType;
  644. oFlow.SignedMember = [{
  645. id: user.id,
  646. name: user.name,
  647. deptname: user.deptname,
  648. jobname: user.jobname
  649. }];
  650. oCurData.CheckOrder.insert(item.Order + idx, oFlow);
  651. });
  652. }
  653. else {
  654. var saSignedMember = [];
  655. $.each(data.Users, function (idx, user) {
  656. saSignedMember.push({
  657. id: user.id,
  658. name: user.name,
  659. deptname: user.deptname,
  660. jobname: user.jobname
  661. });
  662. });
  663. oFlow.id = guid();
  664. oFlow.Order = item.Order;
  665. oFlow.SignedWay = data.FlowType;
  666. oFlow.SignedMember = saSignedMember;
  667. oCurData.CheckOrder.insert(item.Order, oFlow);
  668. }
  669. var iOrder = 1;
  670. $.each(oCurData.CheckOrder, function (idx, _data) {
  671. if (item.id !== _data.id) {
  672. _data.Order = iOrder;
  673. iOrder++;
  674. }
  675. });
  676. oCurData.CheckOrder = Enumerable.From(oCurData.CheckOrder).Where(function (e) { return e.id !== item.id; }).ToArray();
  677. oCurData.CheckOrder = releaseGridList(oCurData.CheckOrder);
  678. $("#jsGrid").jsGrid("loadData");
  679. }
  680. };
  681. oPenUserListPop(oOption);
  682. }
  683. })),
  684. $('<div>', { class: 'fa-item col-sm-3' }).append($('<i>', {
  685. class: 'glyphicon glyphicon-trash' + (oCurData.Flows_Lock === 'Y' ? ' disabled' : ''),
  686. title: i18next.t('common.Toolbar_Del'),// ╠common.Toolbar_Del⇒刪除╣
  687. click: function () {
  688. if ($(this).hasClass('disabled')) { return false; }
  689. var saNewList = Enumerable.From(oCurData.CheckOrder).Where(function (e) { return e.id !== item.id; }).ToArray();
  690. oCurData.CheckOrder = saNewList;
  691. $.each(oCurData.CheckOrder, function (idx, _data) {
  692. _data.Order = idx + 1;
  693. });
  694. oCurData.CheckOrder = releaseGridList(oCurData.CheckOrder);
  695. $("#jsGrid").jsGrid("loadData");
  696. }
  697. }))];
  698. if (oCurData.CheckOrder.length !== item.Order) {
  699. oBtns.push($('<div>', { class: 'fa-item col-sm-3' }).append($('<i>', {
  700. class: 'glyphicon glyphicon-arrow-down' + (oCurData.Flows_Lock === 'Y' ? ' disabled' : ''),
  701. title: i18next.t('common.Down'),// ╠common.Down⇒下移╣
  702. click: function () {
  703. if ($(this).hasClass('disabled')) { return false; }
  704. var sOrder = Enumerable.From(oCurData.CheckOrder).Where(function (e) { return e.id === item.id; }).ToString('', '$.Order'),
  705. iOrder = sOrder * 1;
  706. $.each(oCurData.CheckOrder, function (idx, _data) {
  707. if (iOrder === _data.Order) {
  708. _data.Order++;
  709. }
  710. else if ((iOrder + 1) === _data.Order) {
  711. _data.Order--;
  712. }
  713. });
  714. oCurData.CheckOrder = releaseGridList(oCurData.CheckOrder);
  715. $("#jsGrid").jsGrid("loadData");
  716. }
  717. })));
  718. }
  719. else {
  720. oBtns.push($('<div>', { class: 'fa-item col-sm-3' }));
  721. }
  722. if (1 !== item.Order) {
  723. oBtns.push($('<div>', { class: 'fa-item col-sm-3' }).append($('<i>', {
  724. class: 'glyphicon glyphicon-arrow-up' + (oCurData.Flows_Lock === 'Y' ? ' disabled' : ''),
  725. title: i18next.t('common.Up'),// ╠common.Up⇒上移╣
  726. click: function () {
  727. if ($(this).hasClass('disabled')) { return false; }
  728. var sOrder = Enumerable.From(oCurData.CheckOrder).Where(function (e) { return e.id === item.id; }).ToString('', '$.Order'),
  729. iOrder = sOrder * 1;
  730. $.each(oCurData.CheckOrder, function (idx, _data) {
  731. if (iOrder === _data.Order) {
  732. _data.Order--;
  733. }
  734. else if ((iOrder - 1) === _data.Order) {
  735. _data.Order++;
  736. }
  737. });
  738. oCurData.CheckOrder = releaseGridList(oCurData.CheckOrder);
  739. $("#jsGrid").jsGrid("loadData");
  740. }
  741. })));
  742. }
  743. return oBtns;
  744. }
  745. }
  746. ],
  747. controller: {
  748. loadData: function (args) {
  749. return {
  750. data: oCurData.CheckOrder,
  751. itemsCount: oCurData.CheckOrder.length //data.length
  752. };
  753. },
  754. insertItem: function (args) {
  755. },
  756. updateItem: function (args) {
  757. },
  758. deleteItem: function (args) {
  759. }
  760. }
  761. });
  762. };
  763. init();
  764. };
  765. require(['base', 'select2', 'formatnumber', 'jsgrid', 'filer', 'common_eip', 'util'], fnPageInit);