ITP_SYSTEM04010.js 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389
  1. const SYSTEM04010_GRID_ID = '#ITP_SYSTEM04010_jqGrid';
  2. const SYSTEM04010_GRID_LIST = SYSTEM04010_GRID_ID + '_list';
  3. const SYSTEM04010_GRID_PAGER = SYSTEM04010_GRID_ID + 'Pager';
  4. const SYSTEM04010_GRID_EMPTY = SYSTEM04010_GRID_ID + 'Empty';
  5. let SYSTEM04010_GRID_LAST_ROW_ID;
  6. let ITP_FORM_SYSTEM04010_IS_WRITING = false;
  7. let ITP_FORM_SYSTEM04010_IS_DUPLICATE = false;
  8. let SYSTEM04010_SCH_AUTH_NO; //
  9. let API_AUTH_DETAIL_GRID_LIST = '/api/menu/list-authmenu';
  10. let API_MENU_LIST_AUTHMENU = '/api/menu/list-authmenu';
  11. let AUTH_AUTH_SEARCH = '/api/auth/auth-search';
  12. let AUTH_SAVE_AUTH = '/api/auth/save-auth';
  13. let MENU_MENU_SEARCH = '/api/menu/menu-search';
  14. let AUTH_INFO_AUTH = '/api/auth/info-auth';
  15. let AUTH_CHECK_DUPLICATE = '/api/auth/check-duplicate';
  16. require(['config'], function() {
  17. require([
  18. 'jquery'
  19. ], function($) {
  20. // 버튼 권한설정
  21. fn_proc_btn_auth('SYSTEM04010');
  22. // 공통코드 표시
  23. fn_make_select(CODE_LIST, 'AUTH_TP_CD', 'ITP_SYSTEM04010_ADV_SRH_FORM_AUTH_TP_CD', true, '전체');
  24. fn_make_select(CODE_LIST, 'AUTH_TP_CD', 'ITP_FORM_SYSTEM04010_AUTH_TYPE_CD', true, '선택');
  25. fn_make_select(CODE_LIST, 'USE_YN', 'ITP_SYSTEM04010_ADV_SRH_FORM_USE_YN', true, '전체');
  26. fn_make_select(CODE_LIST, 'USE_YN', 'ITP_FORM_SYSTEM04010_USE_YN', true, '선택');
  27. // 상위메뉴조회
  28. itp_fn_SYSTEM04010_menu_search();
  29. itp_fn_SYSTEM04010_search();
  30. itp_fn_jqgrid_resize(SYSTEM04010_GRID_ID, SYSTEM04010_GRID_LIST, 'sm');
  31. itp_fn_SYSTEM04010_detail_grid.init();
  32. itp_fn_fire_window_resize();
  33. // 팝업 조회
  34. // fn_proc_popup_view('SYSTEM04010');
  35. $('#ITP_BTN_SYSTEM04010_SRH').on('click', function() {
  36. itp_fn_SYSTEM04010_search();
  37. });
  38. $('#ITP_AJAX_SYSTEM04010_SRH_CONTAINER').on('click', '.list-group .list-group-item', function() {
  39. const $this = $(this);
  40. var itemFn = {
  41. callBack: function(args) {
  42. itp_fn_form_clear_validate(null, '#ITP_FORM_SYSTEM04010_DETAIL');
  43. $('#ITP_AJAX_SYSTEM04010_SRH_CONTAINER .list-group .list-group-item').removeClass('active');
  44. $this.addClass('active');
  45. const txt = $this.find('.itp_param_key').text();
  46. // SYSTEM04010_SCH_TOP_MENU_NO = item.find('.itp_param_key').data('topMenuNo');
  47. itp_fn_SYSTEM04010_detail(txt);
  48. }
  49. };
  50. if (ITP_FORM_SYSTEM04010_IS_WRITING || itp_fn_check_grid_is_writing(SYSTEM04010_GRID_ID)) {
  51. itp_fn_modal_confirm(ITP_MSG_LOCALE.message.ajax.cancelData, itemFn, $this);
  52. } else {
  53. itemFn.callBack($this);
  54. }
  55. });
  56. $('#ITP_BTN_SYSTEM04010_NEW').on('click', function() {
  57. var newFn = {
  58. callBack: function(args) {
  59. itp_fn_form_clear_validate(null, '#ITP_FORM_SYSTEM04010_DETAIL');
  60. const item = $('#ITP_AJAX_SYSTEM04010_SRH_CONTAINER .list-group .list-group-item');
  61. item.removeClass('active');
  62. // 정보 초기화
  63. $('#ITP_FORM_SYSTEM04010_DETAIL input[name=viewCd]').val('C');
  64. $('#ITP_FORM_SYSTEM04010_AUTH_NO').val('');
  65. $('#ITP_FORM_SYSTEM04010_USE_YN').val('');
  66. $('#ITP_FORM_SYSTEM04010_AUTH_NM').val('');
  67. $('#ITP_FORM_SYSTEM04010_AUTH_TYPE_CD').val('');
  68. $('#ITP_FORM_SYSTEM04010_TOP_MENU_NO').val('');
  69. $('#ITP_FORM_SYSTEM04010_AUTH_NO').removeAttr('readonly');
  70. $('#ITP_FORM_SYSTEM04010_TOP_MENU_NO').removeAttr('disabled');
  71. $('#ITP_BTN_SYSTEM04010_DUP').removeAttr('disabled');
  72. // 그리드 초기화
  73. itp_fn_SYSTEM04010_detail_grid.clearData();
  74. }
  75. };
  76. if (ITP_FORM_SYSTEM04010_IS_WRITING || itp_fn_check_grid_is_writing(SYSTEM04010_GRID_ID)) {
  77. itp_fn_modal_confirm(ITP_MSG_LOCALE.message.ajax.cancelData, newFn, null);
  78. } else {
  79. newFn.callBack();
  80. }
  81. });
  82. $('#ITP_BTN_SYSTEM04010_SAVE').on('click', function() {
  83. const formId = '#ITP_FORM_SYSTEM04010';
  84. itp_fn_form_clear_validate(null, formId + '_DETAIL');
  85. var vali_authNo = itp_fn_form_validate(formId + '_DETAIL', formId + '_AUTH_NO', ['empty'], undefined);
  86. var vali_useYn = itp_fn_form_validate(formId + '_DETAIL', formId + '_USE_YN', ['empty'], undefined);
  87. var vali_authNmKr = itp_fn_form_validate(formId + '_DETAIL', formId + '_AUTH_NM_KR', ['empty'], undefined);
  88. var vali_authTypeCd = itp_fn_form_validate(formId + '_DETAIL', formId + '_AUTH_TYPE_CD', ['empty'], undefined);
  89. var vali_topMenuNo = itp_fn_form_validate(formId + '_DETAIL', formId + '_TOP_MENU_NO', ['empty'], undefined);
  90. if (vali_authNo && vali_useYn && vali_authNmKr && vali_authTypeCd && vali_topMenuNo) {
  91. if (ITP_FORM_SYSTEM04010_IS_DUPLICATE) {
  92. itp_fn_modal_duplicate(ITP_MSG_LOCALE.label.permitCd, formId + '_AUTH_NO');
  93. } else {
  94. //if (itp_fn_grid_validate_row(SYSTEM04010_GRID_ID)) {
  95. let gridInsertData = [];
  96. let gridUpdateData = [];
  97. let gridDeleteData = [];
  98. const rowData = $(SYSTEM04010_GRID_ID).getRowData();
  99. const keyValue = $(formId + '_AUTH_NO').val();
  100. $.each(rowData, function(key, value) {
  101. if (value.viewCd != 'R') {
  102. value.authNo = keyValue;
  103. if (value.readYn == 'N' && value.writeYn == 'Y') {
  104. value.readYn = 'Y';
  105. }
  106. if (value.viewCd == 'C') {
  107. gridInsertData.push(value);
  108. } else if (value.viewCd == 'U') {
  109. if (value.readYn == 'N' && value.writeYn == 'N') {
  110. value.viewCd = 'D';
  111. gridDeleteData.push(value);
  112. } else {
  113. gridUpdateData.push(value);
  114. }
  115. }
  116. }
  117. });
  118. let param = $(formId + '_DETAIL').serializeObject();
  119. param.topMenuNo = $(formId + '_TOP_MENU_NO').val();
  120. param.gridInsertData = gridInsertData;
  121. param.gridUpdateData = gridUpdateData;
  122. param.gridDeleteData = gridDeleteData;
  123. console.log(JSON.stringify(param));
  124. var searhFn = function() {
  125. SYSTEM04010_SCH_AUTH_NO = keyValue;
  126. var keyword = {keyword: $('#ITP_KEYWORD_SYSTEM04010_INPUT').val()};
  127. var param = $('#ITP_SYSTEM04010_ADV_SRH_FORM').serialize() + '&' + $.param(keyword);
  128. fn_ajax_call(AUTH_AUTH_SEARCH, param, itp_fn_SYSTEM04010_search_callback, 'GET');
  129. };
  130. fn_ajax_call(AUTH_SAVE_AUTH, JSON.stringify(param), searhFn, 'POST');
  131. //};
  132. }
  133. }
  134. });
  135. });
  136. });
  137. var itp_fn_SYSTEM04010_menu_search = function() {
  138. fn_ajax_call(MENU_MENU_SEARCH, null, itp_fn_SYSTEM04010_menu_search_callback, 'GET');
  139. };
  140. var itp_fn_SYSTEM04010_menu_search_callback = function(result) {
  141. fn_make_select_upper_menu(result.searchList, 'ITP_SYSTEM04010_ADV_SRH_FORM_TOP_MENU_NO', true, '전체');
  142. fn_make_select_upper_menu(result.searchList, 'ITP_FORM_SYSTEM04010_TOP_MENU_NO', true, '선택');
  143. };
  144. var itp_fn_SYSTEM04010_search = function() {
  145. var searhFn = {
  146. callBack: function(args) {
  147. var keyword = {keyword: $('#ITP_KEYWORD_SYSTEM04010_INPUT').val()};
  148. var param = $('#ITP_SYSTEM04010_ADV_SRH_FORM').serialize() + '&' + $.param(keyword);
  149. fn_ajax_call(AUTH_AUTH_SEARCH, param, itp_fn_SYSTEM04010_search_callback, 'GET');
  150. }
  151. };
  152. if (ITP_FORM_SYSTEM04010_IS_WRITING || itp_fn_check_grid_is_writing(SYSTEM04010_GRID_ID)) {
  153. itp_fn_modal_confirm(ITP_MSG_LOCALE.message.ajax.cancelData, searhFn, null);
  154. } else {
  155. searhFn.callBack();
  156. }
  157. };
  158. var itp_fn_SYSTEM04010_search_callback = function(result) {
  159. $('#ITP_AJAX_SYSTEM04010_SRH_CONTAINER > .list-group').empty(); // 초기화
  160. $.each(result.searchList, function(index, item) {
  161. $('#ITP_AJAX_SYSTEM04010_SRH_CONTAINER > .list-group').append($('#ITP_AJAX_SYSTEM04010_SRH_CONTAINER_ROWCOPY').val());
  162. $('#ITP_AJAX_SYSTEM04010_SRH_CONTAINER > .list-group > .list-group-item:last').find('.fnAuthNo').text(item.authNo);
  163. $('#ITP_AJAX_SYSTEM04010_SRH_CONTAINER > .list-group > .list-group-item:last').find('.fnAuthNo').attr('data-top-menu-no', item.topMenuNo);
  164. $('#ITP_AJAX_SYSTEM04010_SRH_CONTAINER > .list-group > .list-group-item:last').find('.fnAuthNm').text(item.authNm);
  165. $('#ITP_AJAX_SYSTEM04010_SRH_CONTAINER > .list-group > .list-group-item:last').find('.fnAuthTpNm').text(item.authTpNm);
  166. if(SYSTEM04010_SCH_AUTH_NO && SYSTEM04010_SCH_AUTH_NO == item.authNo) {
  167. $('#ITP_AJAX_SYSTEM04010_SRH_CONTAINER > .list-group > .list-group-item:last').addClass('active');
  168. }
  169. });
  170. // 첫번째 데이터 상세조회
  171. if($('#ITP_AJAX_SYSTEM04010_SRH_CONTAINER .list-group .list-group-item').length > 0) {
  172. if(SYSTEM04010_SCH_AUTH_NO && SYSTEM04010_SCH_AUTH_NO !== undefined) {
  173. itp_fn_SYSTEM04010_detail(SYSTEM04010_SCH_AUTH_NO);
  174. } else {
  175. const item = $('#ITP_AJAX_SYSTEM04010_SRH_CONTAINER .list-group .list-group-item').first();
  176. const authNo = item.find('.itp_param_key').text();
  177. // SYSTEM04010_SCH_TOP_MENU_NO = item.find('.itp_param_key').data('topMenuNo');
  178. item.addClass('active');
  179. itp_fn_SYSTEM04010_detail(authNo);
  180. }
  181. }
  182. };
  183. var itp_fn_SYSTEM04010_detail = function(key) {
  184. var authNo = {authNo: key};
  185. var param = $.param(authNo);
  186. fn_ajax_call(AUTH_INFO_AUTH, param, itp_fn_SYSTEM04010_detail_callback, 'GET');
  187. };
  188. var itp_fn_SYSTEM04010_detail_callback = function(result) {
  189. ITP_FORM_SYSTEM04010_IS_WRITING = false;
  190. // 상세정보 지정
  191. $('#ITP_FORM_SYSTEM04010_DETAIL input[name=viewCd]').val('U');
  192. $('#ITP_FORM_SYSTEM04010_AUTH_NO').val(result.authNo);
  193. $('#ITP_FORM_SYSTEM04010_USE_YN').val(result.useYn);
  194. $('#ITP_FORM_SYSTEM04010_AUTH_NM').val(result.authNm);
  195. $('#ITP_FORM_SYSTEM04010_AUTH_TYPE_CD').val(result.authTpCd);
  196. $('#ITP_FORM_SYSTEM04010_TOP_MENU_NO').val(result.topMenuNo);
  197. $('#ITP_FORM_SYSTEM04010_AUTH_NO').attr('readonly', true);
  198. $('#ITP_FORM_SYSTEM04010_TOP_MENU_NO').attr('disabled', true);
  199. $('#ITP_BTN_SYSTEM04010_DUP').attr('disabled', true);
  200. // 상세리스트 조회
  201. $(SYSTEM04010_GRID_ID).setGridParam({'url':DOMAIN + API_AUTH_DETAIL_GRID_LIST})
  202. const key = {authNo: result.authNo, topMenuNo: result.topMenuNo, gridSize: $.jgrid.defaults.rowNum};
  203. itp_fn_SYSTEM04010_detail_grid.unload();
  204. itp_fn_SYSTEM04010_detail_grid.callBack(key);
  205. };
  206. var itp_fn_SYSTEM04010_detail_grid = {
  207. init: function() {
  208. ITP_FORM_SYSTEM04010_IS_WRITING = false;
  209. ITP_FORM_SYSTEM04010_IS_DUPLICATE = false;
  210. $('#ITP_FORM_SYSTEM04010_DETAIL').on('change', 'input, select, textarea', function() {
  211. if (!ITP_FORM_SYSTEM04010_IS_WRITING) {
  212. ITP_FORM_SYSTEM04010_IS_WRITING = true;
  213. }
  214. if ($(this).attr('id') == 'ITP_FORM_SYSTEM04010_AUTH_NO') {
  215. ITP_FORM_SYSTEM04010_IS_DUPLICATE = true;
  216. } else if ($(this).attr('id') == 'ITP_FORM_SYSTEM04010_TOP_MENU_NO') {
  217. var changeFn = {
  218. callBack: function(args) {
  219. const key = {topMenuNo: args, viewCd: 'C'};
  220. $(SYSTEM04010_GRID_ID).setGridParam({'url':DOMAIN + API_MENU_LIST_AUTHMENU, 'postData': JSON.stringify(key)}).trigger('reloadGrid');
  221. }
  222. };
  223. const topMenu = $(this).val();
  224. const viewCd = $('#ITP_FORM_SYSTEM04010_VIEW_CD').val();
  225. if (viewCd != 'C') {
  226. itp_fn_modal_confirm(ITP_MSG_LOCALE.message.ajax.resetData, changeFn, topMenu);
  227. } else {
  228. changeFn.callBack(topMenu);
  229. }
  230. }
  231. });
  232. $('body').on('click', function(e) {
  233. var gridId = SYSTEM04010_GRID_ID.replace('#', '');
  234. itp_fn_grid_reset_selection(e, SYSTEM04010_GRID_LAST_ROW_ID, gridId, 'SYSTEM04010');
  235. });
  236. $('#ITP_BTN_SYSTEM04010_DUP').on('click', function() {
  237. const formId = '#ITP_FORM_SYSTEM04010';
  238. itp_fn_form_clear_validate(null, formId + '_DETAIL');
  239. var vali_authNo = itp_fn_form_validate(formId + '_DETAIL', formId + '_AUTH_NO', ['empty'], undefined);
  240. if (vali_authNo) {
  241. var dupFn = function(result) {
  242. if (result.code == 'N') {
  243. ITP_FORM_SYSTEM04010_IS_DUPLICATE = false;
  244. } else {
  245. ITP_FORM_SYSTEM04010_IS_DUPLICATE = true;
  246. }
  247. };
  248. const param = {'authNo': $(formId + '_AUTH_NO').val()};
  249. fn_ajax_call(AUTH_CHECK_DUPLICATE, param, dupFn, 'GET');
  250. }
  251. });
  252. },
  253. callBack: function(args) {
  254. $(SYSTEM04010_GRID_ID).jqGrid({
  255. colModel: [
  256. {
  257. index: 'VIEW_CD', name: 'viewCd',
  258. label: ITP_MSG_LOCALE.label.viewCd,
  259. width: '9', fixed: false, align: 'center',
  260. sortable: false, hidden: true
  261. },
  262. {
  263. index: 'AUTH_NO', name: 'authNo',
  264. label: ITP_MSG_LOCALE.label.permitCd,
  265. width: '9', fixed: false, align: 'center',
  266. sortable: false, hidden: true
  267. },
  268. {
  269. index: 'ACT_ID', name: 'actId',
  270. label: ITP_MSG_LOCALE.label.actionId,
  271. width: '9', fixed: false, align: 'center',
  272. sortable: false, hidden: true
  273. },
  274. {
  275. index: 'TOP_MENU_NO', name: 'topMenuNo',
  276. label: ITP_MSG_LOCALE.label.topMenu,
  277. width: '9', fixed: false, align: 'center',
  278. sortable: false, hidden: true
  279. },
  280. {
  281. index: 'MENU_NO', name: 'menuNo',
  282. label: ITP_MSG_LOCALE.label.subMenu,
  283. width: '9', fixed: false, align: 'center',
  284. sortable: false, hidden: true
  285. },
  286. {
  287. index: 'TOP_MENU_NM', name: 'topMenuNm',
  288. label: ITP_MSG_LOCALE.label.topMenu,
  289. width: '9', fixed: false, align: 'center',
  290. sortable: false, hidden: true
  291. },
  292. {
  293. index: 'MENU_NM', name: 'menuNm',
  294. label: ITP_MSG_LOCALE.label.menuName,
  295. width: '12', fixed: false, align: 'center',
  296. sortable: true, editable: false
  297. },
  298. {
  299. index: 'ACT_TP_NM', name: 'actTpNm',
  300. label: ITP_MSG_LOCALE.label.actionType,
  301. width: '9', fixed: false, align: 'center',
  302. sortable: false, hidden: true
  303. },
  304. {
  305. index: 'ACT_NM', name: 'actNm',
  306. label: ITP_MSG_LOCALE.label.menuDetail,
  307. width: '12', fixed: false, align: 'center',
  308. sortable: false, editable: false
  309. },
  310. {
  311. index: 'READ_YN', name: 'readYn',
  312. label: ITP_MSG_LOCALE.label.readPermit,
  313. width: '6', fixed: false, align: 'center',
  314. sortable: false, editable: true, formatter: 'checkbox', edittype: 'checkbox',
  315. editoptions: {value: 'Y:N', defaultValue: 'Y'},
  316. editrules: {required: true}
  317. },
  318. {
  319. index: 'WRITE_YN', name: 'writeYn',
  320. label: ITP_MSG_LOCALE.label.writePermit,
  321. width: '6', fixed: false, align: 'center',
  322. sortable: false, editable: true, formatter: 'checkbox', edittype: 'checkbox',
  323. editoptions: {value: 'Y:N', defaultValue: 'Y'},
  324. editrules: {required: true}
  325. }
  326. ],
  327. loadBeforeSend: function(jqXHR) {
  328. jqXHR.setRequestHeader('X-AUTH-TOKEN', CONN_KEY);
  329. },
  330. postData: JSON.stringify(args),
  331. url: DOMAIN + API_AUTH_DETAIL_GRID_LIST,
  332. pager: SYSTEM04010_GRID_PAGER,
  333. multiselect: false,
  334. rowNum: '',
  335. onCellSelect: function(rowId, cellIdx, cellValue) {
  336. SYSTEM04010_GRID_LAST_ROW_ID = itp_fn_set_data_editable(rowId, cellIdx, SYSTEM04010_GRID_LAST_ROW_ID, SYSTEM04010_GRID_ID);
  337. },
  338. loadComplete: function(data) {
  339. itp_fn_grid_load_complete(data, SYSTEM04010_GRID_ID, false, undefined, 'SYSTEM04010');
  340. },
  341. loadError: function(jqXHR, textStatus, errorThrown) {
  342. itp_fn_grid_load_error(jqXHR, textStatus, errorThrown);
  343. }
  344. }).navGrid(SYSTEM04010_GRID_PAGER, ITP_GRID_NAV_DEFAULTS.navGrid);
  345. },
  346. clearData : function() {
  347. $(SYSTEM04010_GRID_ID).jqGrid('clearGridData', true);
  348. $(SYSTEM04010_GRID_LIST).find('.ui-jqgrid-bdiv').css('min-height', '100px');
  349. $(SYSTEM04010_GRID_EMPTY).html(ITP_MSG_LOCALE.message.grid.noData);
  350. $(SYSTEM04010_GRID_EMPTY).show();
  351. },
  352. unload : function() {
  353. $.jgrid.gridUnload(SYSTEM04010_GRID_ID);
  354. }
  355. };