auth.js 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633
  1. /**
  2. * admin/menu
  3. */
  4. var mplus_admin_auth = function( language_code ){
  5. //상속
  6. mplus_admin.call(this);
  7. var self = this;
  8. //언어코드
  9. var DEFAULT_LANGUAGE = language_code;
  10. //변수
  11. var $txtAuthId = $('#txtAuthId'),
  12. $txtAuthName = $('#txtAuthName'),
  13. $txtAuthDesc = $('#txtAuthDesc'),
  14. $btnSave = $('#btnSave'),
  15. $btnRemove = $('#btnRemove'),
  16. $btnSearch = $('#btnSearch'),
  17. $btnConfirmAttr = $('#btnConfirmAttr'),
  18. $btnEditPlusAttr = $('#btnEditPlusAttr'),
  19. $btnEditMinusAttr = $('#btnEditMinusAttr'),
  20. $crudServiceBaseUrl = contextPath + "/admin/auth"
  21. $attrCrudServiceBaseUrl = contextPath + "/admin/attr"; //속성 관련 요청을 위해 별도로 작성
  22. var authInfo = {};
  23. var authList = [];
  24. var totalCount = 0;
  25. var plusAttrList = [];
  26. var plusAttrEditList = [];
  27. var minusAttrList = [];
  28. var minusAttrEditList = [];
  29. var hospitalList = [];
  30. var dutyList = [];
  31. var workList = [];
  32. var attrTypeList = [];
  33. /**
  34. * 객체 초기화
  35. */
  36. this.init = function(){
  37. initAuthList();
  38. initAttrTypeList();
  39. //설명 글자수 이벤트 - core에 선언
  40. self.checkDescBytes($txtAuthDesc);
  41. addEvent();
  42. if($('#table_authAttr tr')[0]==undefined){
  43. $('#authDetail').css('display', 'none');
  44. $('#authDetailEmpty').css('display', 'block');
  45. }else{
  46. $('#table_authAttr tr')[0].click();
  47. };
  48. };
  49. /**
  50. * 이벤트 등록
  51. */
  52. var addEvent = function(){
  53. $('#btnNew, #btnNewEmpty').on('click', function(e){
  54. newItem();
  55. });
  56. $btnSave.on('click', function(e){
  57. saveItem();
  58. });
  59. $btnRemove.on('click', function(e){
  60. removeItem();
  61. });
  62. $btnEditPlusAttr.on('click', function(e){
  63. editAttr('plus');
  64. });
  65. $btnEditMinusAttr.on('click', function(e){
  66. editAttr('minus');
  67. });
  68. };
  69. var initAuthList = function(){
  70. var opt = {
  71. url: $crudServiceBaseUrl + "/getList.json",
  72. type : "post",
  73. async: false,
  74. dataType: "json",
  75. contentType: "application/json"
  76. }
  77. var success = function(result){
  78. authList = result;
  79. totalCount = result.totalCount;
  80. $('#table_authAttr').empty();
  81. for(var i=0; i<authList.length; i++){
  82. var tr = $('<tr></tr>').clone().attr('seq', i).attr('authSeq', authList[i].authSeq).attr('authId', authList[i].authId);
  83. var tdAuthId = $('<td></td>').clone().text(authList[i].authId);
  84. var tdAuthName = $('<td></td>').clone().text(authList[i].authName);
  85. $('#table_authAttr').append(tr.append(tdAuthId).append(tdAuthName));
  86. };
  87. $('#table_authAttr tr').on('click', function(e){
  88. getAuthInfo(e.currentTarget.attributes.seq.value);
  89. $('#table_authAttr tr').removeClass('active');
  90. $(this).addClass('active');
  91. })
  92. }
  93. var error = function(xhr,d,t){
  94. console.log(xhr);
  95. console.log(t);
  96. };
  97. self.ajaxAdmin( opt, success, error );
  98. };
  99. var initAttrTypeList = function(){
  100. var opt = {
  101. url: $attrCrudServiceBaseUrl + "/getAttrTypeList.json",
  102. type : "post",
  103. async: false,
  104. dataType: "json",
  105. contentType: "application/json"
  106. }
  107. var success = function(result){
  108. var typeList = result.attrTypeList;
  109. for(var i=0; i<typeList.length; i++){
  110. if(typeList[i].attrType!='extra'){
  111. var option = $('<option></option>').clone().attr('value', typeList[i].attrType).text(typeList[i].attrTypeName);
  112. $('#sltAttrType').append(option);
  113. attrTypeList[typeList[i].attrType] = typeList[i].attrTypeName;
  114. };
  115. };
  116. $('#sltAttrType').on('change', function(e){
  117. if(e.currentTarget.value!=''){
  118. getLowerAttrList(e.currentTarget.value);
  119. };
  120. });
  121. }
  122. var error = function(xhr,d,t){
  123. console.log(xhr);
  124. console.log(t);
  125. };
  126. self.ajaxAdmin( opt, success, error );
  127. };
  128. var getLowerAttrList = function(attrType){
  129. $('#sltAttr').empty();
  130. var opt = {
  131. url: $attrCrudServiceBaseUrl + "/getAttrList.json",
  132. type: "post",
  133. dataType: "json",
  134. async: false,
  135. contentType: "application/json",
  136. data: self.util.stringifyJson({
  137. attrType: attrType
  138. })
  139. };
  140. var success = function(result){
  141. var attrList = result.attrList;
  142. var option = $('<option></option>').clone().attr('value', '').text('선택');
  143. $('#sltAttr').append(option);
  144. for(var i=0; i<attrList.length; i++){
  145. var option = $('<option></option>').clone().attr('value', attrList[i].attrId).text(attrList[i].attrName);
  146. $('#sltAttr').append(option);
  147. };
  148. };
  149. var error = function(xhr,d,t){
  150. console.log(xhr);
  151. console.log(t);
  152. };
  153. self.ajaxAdmin( opt, success, error );
  154. }
  155. var getAuthInfo = function(seq){
  156. authInfo = authList[seq];
  157. $txtAuthId.val(authInfo.authId);
  158. $txtAuthName.val(authInfo.authName);
  159. $txtAuthDesc.val(authInfo.authDesc);
  160. getAttrList(authInfo.authId, 'plus');
  161. getAttrList(authInfo.authId, 'minus');
  162. $txtAuthId.attr('readonly', true);
  163. $('#authDetail').css('display', 'block');
  164. $('#authDetailEmpty').css('display', 'none');
  165. };
  166. var getAttrList = function(authId, type){
  167. var opt = {
  168. url: $crudServiceBaseUrl + "/getAuthAttrList.json",
  169. type : "POST",
  170. async: false,
  171. dataType: "json",
  172. contentType: "application/json",
  173. data: self.util.stringifyJson({authId: authId,
  174. authType: type})
  175. }
  176. var success = function(result){
  177. if(type=='plus'){
  178. plusAttrList = result;
  179. $('#table_plusAuth_view').empty();
  180. for(var i=0; i<plusAttrList.length; i++){
  181. var tr = $('<tr></tr>').clone().attr('seq', i);
  182. var tdAuthId = $('<td></td>').clone().text(attrTypeList[plusAttrList[i].authAttrType]);
  183. var tdAuthName = $('<td></td>').clone().text(plusAttrList[i].attrName);
  184. $('#table_plusAuth_view').append(tr.append(tdAuthId).append(tdAuthName));
  185. }
  186. }else{
  187. minusAttrList = result;
  188. $('#table_minusAuth_view').empty();
  189. for(var i=0; i<minusAttrList.length; i++){
  190. var tr = $('<tr></tr>').clone().attr('seq', i);
  191. var tdAuthId = $('<td></td>').clone().text(attrTypeList[minusAttrList[i].authAttrType]);
  192. var tdAuthName = $('<td></td>').clone().text(minusAttrList[i].attrName);
  193. $('#table_minusAuth_view').append(tr.append(tdAuthId).append(tdAuthName));
  194. }
  195. };
  196. }
  197. var error = function(xhr,d,t){
  198. console.log(xhr);
  199. console.log(t);
  200. };
  201. self.ajaxAdmin( opt, success, error );
  202. };
  203. var newItem = function(){
  204. authInfo = {};
  205. $txtAuthId.val('');
  206. $txtAuthName.val('');
  207. $txtAuthDesc.val('');
  208. plusAttrList = [];
  209. plusAttrEditList = [];
  210. minusAttrList = [];
  211. minusAttrEditList = [];
  212. $('#table_plusAuth_view').empty();
  213. $('#table_minusAuth_view').empty();
  214. $txtAuthId.attr('readonly', false);
  215. $('#table_authAttr tr').removeClass('active');
  216. $('#authDetail').css('display', 'block');
  217. $('#authDetailEmpty').css('display', 'none');
  218. $txtAuthId.focus();
  219. };
  220. var saveItem = function(){
  221. var param = {};
  222. var authAttrList = [];
  223. if($txtAuthId.val()==''){
  224. alert('아이디를 입력해주세요.');
  225. return;
  226. };
  227. if($txtAuthName.val()==''){
  228. alert('이름을 입력해주세요.');
  229. return;
  230. };
  231. for(var i=0; i<plusAttrList.length; i++){
  232. authAttrList.push({'attrName': plusAttrList[i].attrName,
  233. 'attrTypeName': plusAttrList[i].attrTypeName,
  234. 'authAttrId': plusAttrList[i].authAttrId,
  235. 'authAttrType': plusAttrList[i].authAttrType,
  236. 'authId': authInfo.authId,
  237. 'authType': 'plus'
  238. });
  239. };
  240. for(var j=0; j<minusAttrList.length; j++){
  241. authAttrList.push({'attrName': minusAttrList[j].attrName,
  242. 'attrTypeName': minusAttrList[j].attrTypeName,
  243. 'authAttrId': minusAttrList[j].authAttrId,
  244. 'authAttrType': minusAttrList[j].authAttrType,
  245. 'authId': authInfo.authId,
  246. 'authType': 'minus'
  247. });
  248. };
  249. if(authInfo.authId==undefined){
  250. param = {
  251. authId: $txtAuthId.val(),
  252. authName: $txtAuthName.val(),
  253. authDesc: $txtAuthDesc.val(),
  254. authSeq: null,
  255. authAttrList: authAttrList
  256. }
  257. }else{
  258. param = {
  259. authId: authInfo.authId,
  260. authSeq: authInfo.authSeq,
  261. authName: $txtAuthName.val(),
  262. authDesc: $txtAuthDesc.val(),
  263. authAttrList: authAttrList,
  264. }
  265. };
  266. var opt = {
  267. url : $crudServiceBaseUrl + "/save.json",
  268. method : "POST",
  269. data : self.util.stringifyJson(param),
  270. dataType : "json",
  271. contentType: "application/json; charset=UTF-8"
  272. };
  273. var success = function(data){
  274. alert("저장 되었습니다");
  275. initAuthList();
  276. $('#table_authAttr tr[authId='+data.authId+']').click();
  277. };
  278. var error = function(xhr,d,t){
  279. console.log(xhr);
  280. console.log(t);
  281. };
  282. self.ajaxAdmin( opt, success, error );
  283. };
  284. var removeItem = function(e){
  285. if($('#table_authAttr tr.active').length==0){
  286. alert('삭제할 권한을 선택해주세요.');
  287. return;
  288. };
  289. if(confirm('해당 권한을 삭제하시겠습니까?')){
  290. var param = {
  291. authId: authInfo.authId
  292. };
  293. var opt = {
  294. url : $crudServiceBaseUrl + "/remove.json",
  295. method : "POST",
  296. data : self.util.stringifyJson(param),
  297. dataType : "json",
  298. contentType: "application/json; charset=UTF-8"
  299. };
  300. var success = function(data){
  301. alert("삭제 되었습니다");
  302. initAuthList();
  303. $('#authDetail').css('display', 'none');
  304. $('#authDetailEmpty').css('display', 'block');
  305. };
  306. var error = function(xhr,d,t){
  307. console.log(xhr);
  308. console.log(t);
  309. };
  310. self.ajaxAdmin( opt, success, error );
  311. }
  312. }
  313. var editAttr = function(type){
  314. $("#sltAttrType").val($("#sltAttrType option:first").val());
  315. $("#sltAttr").val('');
  316. var viewList = [];
  317. var editList = [];
  318. if(type=='plus'){
  319. $('#modalHeaderText').text('⊙ 속성 추가 리스트 정보');
  320. viewList = plusAttrList;
  321. editList = plusAttrEditList;
  322. }else{
  323. $('#modalHeaderText').text('⊙ 속성 제거 리스트 정보');
  324. viewList = minusAttrList;
  325. editList = minusAttrEditList;
  326. };
  327. $('#table_attr').empty();
  328. for (var i = 0; i < viewList.length; i++) {
  329. var tr = $('<tr itemData="' + viewList[i].authAttrId + '/' + viewList[i].authAttrType + '"></tr>').clone();
  330. var tdAttrType = $('<td></td>').clone().text(attrTypeList[viewList[i].authAttrType]);
  331. var tdAttrName = $('<td></td>').clone().text(viewList[i].attrName);
  332. var tdEdit = $('<td></td>').clone().append(
  333. '<button type="button" class="btn btn-default btn-xs" itemData="' + viewList[i].authAttrId + '/' + viewList[i].authAttrType + '"><span class="glyphicon glyphicon-minus">&nbsp;삭제</span></button>');
  334. $('#table_attr').append(tr.append(tdAttrType).append(tdAttrName).append(tdEdit));
  335. };
  336. editList = [];
  337. $.extend(editList, viewList); // 객체 복사, 위의 방식으로하면 객체 공유가 되어버림!
  338. if(type=='plus'){
  339. plusAttrEditList = editList;
  340. }else{
  341. minusAttrEditList = editList;
  342. };
  343. $('#btnSaveAttr').unbind();
  344. $('#btnSaveAttr').on('click', function() {
  345. var param = {
  346. 'authAttrType' : $('#sltAttrType').val(),
  347. 'attrTypeName': $('#sltAttrType option:selected').text(),
  348. 'authAttrId' : $('#sltAttr').val(),
  349. 'attrName' : $('#sltAttr option:selected').text()
  350. };
  351. saveItemAttr(param, 'new', type);
  352. });
  353. $('#btnConfirmAttr').unbind();
  354. $('#btnConfirmAttr').on('click', function(){
  355. confirmItemAttr(type);
  356. });
  357. $('#btnNewItem_attr').unbind();
  358. $('#btnNewItem_attr').on('click', function(){
  359. newItemAttr(type);
  360. });
  361. $('#table_attr tr').unbind();
  362. $('#table_attr tr').on('click', function(e) {
  363. editItemAttr(e, type);
  364. $('#table_attr tr').removeClass('active');
  365. $(this).addClass('active');
  366. });
  367. $('#table_attr tr td button').unbind();
  368. $('#table_attr tr td button').on('click', function(e) {
  369. removeItemAttr(e, type);
  370. });
  371. $('#attrModal').modal('show');
  372. $('#attrModal').on('shown.bs.modal', function () {
  373. $('#sltAttrType').focus();
  374. });
  375. if($('#table_attr tr').length>0){
  376. $('#table_attr tr')[0].click();
  377. $('#modalAttrDetail').css('display', 'block');
  378. $('#modalAttrDetailEmpty').css('display', 'none');
  379. }else{
  380. $('#modalAttrDetail').css('display', 'none');
  381. $('#modalAttrDetailEmpty').css('display', 'block');
  382. };
  383. };
  384. var newItemAttr = function(type) {
  385. $("#sltAttrType").val($("#sltAttrType option:first").val());
  386. $("#sltAttr").val('');
  387. $('#table_attr tr').removeClass('active');
  388. $('#modalAttrDetail').css('display', 'block');
  389. $('#modalAttrDetailEmpty').css('display', 'none');
  390. $('#sltAttrType').focus();
  391. $('#btnSaveAttr').unbind();
  392. $('#btnSaveAttr').on('click', function() {
  393. var param = {
  394. 'authAttrType' : $('#sltAttrType').val(),
  395. 'attrTypeName': $('#sltAttrType option:selected').text(),
  396. 'authAttrId' : $('#sltAttr').val(),
  397. 'attrName' : $('#sltAttr option:selected').text()
  398. };
  399. saveItemAttr(param, 'new', type);
  400. });
  401. };
  402. var saveItemAttr = function(param, newYn, type){
  403. if(param.authAttrType == '' || param.authAttrType == null || param.authAttrId == '' || param.authAttrId == null){
  404. alert('저장할 속성을 선택해주세요.');
  405. return;
  406. };
  407. if($('#table_attr tr[class!="active"][itemData="'+param.authAttrId + '/' + param.authAttrType +'"]').length>0){
  408. alert('이미 추가된 속성입니다.');
  409. return;
  410. };
  411. if(newYn=='edit'){
  412. olderValue = $('#table_attr tr.active')[0].attributes.itemData.value;
  413. olderValueAuthAttrId = olderValue.split('/')[0];
  414. olderValueAuthAttrType = olderValue.split('/')[1];
  415. $('#table_attr tr[itemData="'+olderValue+'"]')[0].children[0].innerText=param.attrTypeName;
  416. $('#table_attr tr[itemData="'+olderValue+'"]')[0].children[1].innerText=param.attrName;
  417. $('#table_attr tr[itemData="'+olderValue+'"]')[0].children[2].children[0].attributes.itemData.value=param.authAttrId + '/' + param.authAttrType;
  418. $('#table_attr tr[itemData="'+olderValue+'"]')[0].attributes.itemdata.value=param.authAttrId + '/' + param.authAttrType;
  419. if(type=='plus'){
  420. for(var i=0; i<plusAttrEditList.length; i++){
  421. if(plusAttrEditList[i].authAttrId==olderValueAuthAttrId
  422. && plusAttrEditList[i].authAttrType==olderValueAuthAttrType){
  423. plusAttrEditList[i].authAttrId = param.authAttrId;
  424. plusAttrEditList[i].attrName = param.attrName;
  425. plusAttrEditList[i].authAttrType = param.authAttrType;
  426. plusAttrEditList[i].attrTypeName = param.attrTypeName;
  427. }
  428. };
  429. }else{
  430. for(var i=0; i<minusAttrEditList.length; i++){
  431. if(minusAttrEditList[i].authAttrId==olderValueAuthAttrId
  432. && minusAttrEditList[i].authAttrType==olderValueAuthAttrType){
  433. minusAttrEditList[i].authAttrId = param.authAttrId;
  434. minusAttrEditList[i].attrName = param.attrName;
  435. minusAttrEditList[i].authAttrType = param.authAttrType;
  436. minusAttrEditList[i].attrTypeName = param.attrTypeName;
  437. }
  438. };
  439. }
  440. }else{
  441. var tr = $('<tr itemData="'+ param.authAttrId + '/' + param.authAttrType +'"></tr>').clone();
  442. var tdName = $('<td></td>').clone().text(attrTypeList[param.authAttrType]);
  443. var tdValue = $('<td></td>').clone().text(param.attrName);
  444. var tdEdit = $('<td></td>').clone().append(
  445. '<button type="button" class="btn btn-default btn-xs" itemData="' + param.authAttrId + '/' + param.authAttrType + '"><span class="glyphicon glyphicon-minus">&nbsp;삭제</span></button>');
  446. $('#table_attr').append(tr.append(tdName).append(tdValue).append(tdEdit));
  447. if(type=='plus'){
  448. plusAttrEditList.push(param);
  449. }else{
  450. minusAttrEditList.push(param);
  451. }
  452. };
  453. $('#table_attr tr').unbind();
  454. $('#table_attr tr').on('click', function(e) {
  455. editItemAttr(e, type);
  456. $('#table_attr tr').removeClass('active');
  457. $(this).addClass('active');
  458. });
  459. $('#table_attr tr td button').unbind();
  460. $('#table_attr tr td button').on('click', function(e) {
  461. removeItemAttr(e, type);
  462. });
  463. $('#table_attr tr[itemData="'+ param.authAttrId + '/' + param.authAttrType +'"]').click();
  464. };
  465. var getItemData = function(itemList, tableCheckValue, checkValue){
  466. var itemData = {};
  467. var tableCheckValue1 = tableCheckValue.split('/')[0];
  468. var tableCheckValue2 = tableCheckValue.split('/')[1];
  469. var checkValue1 = checkValue.split('/')[0];
  470. var checkValue2 = checkValue.split('/')[1];
  471. for(i=0; i<itemList.length; i++){
  472. if(itemList[i][tableCheckValue1] == checkValue1
  473. && itemList[i][tableCheckValue2] == checkValue2){
  474. itemData = itemList[i];
  475. break;
  476. }
  477. };
  478. return itemData;
  479. };
  480. var editItemAttr = function(e, type) {
  481. var editList = [];
  482. if(type=='plus'){
  483. editList = plusAttrEditList;
  484. }else{
  485. editList = minusAttrEditList;
  486. };
  487. var itemData = getItemData(editList, 'authAttrId/authAttrType', e.currentTarget.attributes.itemData.value);
  488. if(itemData==undefined || itemData ==null){
  489. alert('정상적인 데이터가 아닙니다.'); //이표시가 맞을까?
  490. return;
  491. };
  492. $('#sltAttrType').val(itemData.authAttrType);
  493. getLowerAttrList(itemData.authAttrType);
  494. $('#sltAttr').val(itemData.authAttrId);
  495. $('#btnSaveAttr').unbind();
  496. $('#btnSaveAttr').on('click', function() {
  497. var param = {
  498. 'authAttrType' : $('#sltAttrType').val(),
  499. 'attrTypeName': $('#sltAttrType option:selected').text(),
  500. 'authAttrId' : $('#sltAttr').val(),
  501. 'attrName' : $('#sltAttr option:selected').text()
  502. };
  503. saveItemAttr(param, 'edit', type);
  504. });
  505. $('#modalAttrDetail').css('display', 'block');
  506. $('#modalAttrDetailEmpty').css('display', 'none');
  507. };
  508. var removeItemAttr = function(e, type){
  509. $('#table_attr tr[itemData="'+e.currentTarget.attributes.itemData.value+'"]').remove();
  510. var editList = [];
  511. if(type=='plus'){
  512. editList = plusAttrEditList;
  513. }else{
  514. editList = minusAttrEditList;
  515. };
  516. var olderValue = e.currentTarget.attributes.itemData.value;
  517. var olderValueAuthAttrId = olderValue.split('/')[0];
  518. var olderValueAuthAttrType = olderValue.split('/')[1];
  519. for(var i=0; i<editList.length; i++){
  520. if(editList[i].authAttrId == olderValueAuthAttrId
  521. && editList[i].authAttrType == olderValueAuthAttrType){
  522. editList.splice(i, 1);
  523. break;
  524. }
  525. };
  526. $('#table_attr tr').removeClass('active');
  527. $('#modalAttrDetail').css('display', 'none');
  528. $('#modalAttrDetailEmpty').css('display', 'block');
  529. };
  530. var confirmItemAttr = function(type){
  531. $('#attrModal').modal('hide');
  532. $('#table_'+type+'Auth_view').empty();
  533. var editList = [];
  534. var viewList = [];
  535. if(type=='plus'){
  536. editList = plusAttrEditList;
  537. viewList = plusAttrList;
  538. }else{
  539. editList = minusAttrEditList;
  540. viewList = minusAttrList;
  541. };
  542. for (var i = 0; i < editList.length; i++) {
  543. var tr = $('<tr>').clone();
  544. var tdAttrType = $('<td></td>').clone().text(attrTypeList[editList[i].authAttrType]);
  545. var tdAttrName = $('<td></td>').clone().text(editList[i].attrName);
  546. $('#table_'+type+'Auth_view').append(tr.append(tdAttrType).append(tdAttrName));
  547. };
  548. viewList = [];
  549. $.extend(viewList, editList); // 객체 복사
  550. if(type=='plus'){
  551. plusAttrList = viewList;
  552. }else{
  553. minusAttrList = viewList;
  554. };
  555. };
  556. };
  557. var rowNum = 0;
  558. function resetRowNum(){
  559. rowNum = 0;
  560. }
  561. function getNum(){
  562. return ++rowNum;
  563. }