userAttr.js 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431
  1. /**
  2. * admin/vers
  3. */
  4. var mplus_admin_manager = function(){
  5. //상속
  6. mplus_admin.call(this);
  7. var self = this;
  8. //변수
  9. var $sltUser = $('#sltUser'),
  10. $txtSearch = $('#txtSearch'),
  11. $btnSearch = $('#btnSearch'),
  12. $txtUserId = $('#txtUserId'),
  13. $txtUserOrder = $('#txtUserOrder'),
  14. $sltHospital = $('#sltHospital'),
  15. $sltDuty = $('#sltDuty'),
  16. $sltWork = $('#sltWork'),
  17. $btnNew = $('#btnNew'),
  18. $btnSave = $('#btnSave'),
  19. div = $('<div></div>'),
  20. span = $('<span></span>'),
  21. label = $('<label></label>'),
  22. button = $('<button></button>'),
  23. $crudServiceBaseUrl = contextPath + "/admin/userAttr",
  24. $crudServiceAttrUrl = contextPath + "/admin/attr";
  25. var workList = [];
  26. var userInfo;
  27. var userList = [];
  28. var userAttrList = [];
  29. var totalCount = '';
  30. var pageSize = 15;
  31. /**
  32. * 초기화
  33. */
  34. this.init = function(){
  35. initUserAttrList(1, '', '');
  36. initDropDown();
  37. addEvent();
  38. if($('#table_user tr')[0]==undefined){
  39. $('#userAttrDetail').css('display', 'none');
  40. $('#userAttrDetailEmpty').css('display', 'block');
  41. }else{
  42. $('#table_user tr')[0].click();
  43. };
  44. };
  45. /**
  46. * 이벤트 등록
  47. */
  48. var addEvent = function(){
  49. $btnNew.on('click', function(e){
  50. newUserAttr(e);
  51. });
  52. $sltDuty.on('change', function(e){
  53. selectWorkChange(e);
  54. });
  55. $btnSave.on('click', function(e){
  56. saveUserAttr(e);
  57. });
  58. $btnSearch.on('click', function(e){
  59. initUserAttrList(1, $sltUser.val(), $txtSearch.val());
  60. });
  61. };
  62. var initUserAttrList = function(page, selectType, searchText){
  63. $('#divUserAttr').empty();
  64. $('#noUserAttr').css('display', 'block');
  65. $('#divUserAttr').css('display', 'none');
  66. userList = [];
  67. userAttrList = [];
  68. var opt = {
  69. url: $crudServiceBaseUrl + "/getList.json",
  70. type: "post",
  71. dataType: "json",
  72. async: false,
  73. contentType: "application/json",
  74. data: self.util.stringifyJson({
  75. pageSize: pageSize,
  76. page: page,
  77. selectUserType: selectType,
  78. searchText: searchText,
  79. hospitalId: "",
  80. dutyId: "",
  81. workId: ""
  82. })
  83. };
  84. var success = function(result){
  85. userList = result.data;
  86. totalCount = result.totalCount;
  87. $('#table_user').empty();
  88. for(var i=0; i<userList.length; i++){
  89. var tr = $('<tr></tr>').clone().attr('seq', i).attr('userId', userList[i].userId);
  90. var tdUserId = $('<td></td>').clone().text(userList[i].userId);
  91. var tdUserName = $('<td></td>').clone().text(userList[i].userName);
  92. $('#table_user').append(tr.append(tdUserId).append(tdUserName));
  93. };
  94. $('#table_user tr').on('click', function(e){
  95. getUserAttrList(e.currentTarget.attributes.seq.value);
  96. $('#table_user tr').removeClass('active');
  97. $(this).addClass('active');
  98. })
  99. if(page<11){
  100. $('#ulPagination').empty();
  101. if(totalCount>0){
  102. for(j=0; j<Math.ceil(totalCount/pageSize); j++ ){
  103. if(j<10){
  104. var li = $('<li></li>').clone();
  105. var a = $('<a></a>').clone().attr('seq', j+1).text(j+1);
  106. var span = $('<span></span>').clone().addClass('sr-only');
  107. $('#ulPagination').append(li.attr('id', 'page_'+(j+1)).append(a.append(span)));
  108. }else if(j==10){
  109. $('#ulPagination').append('<li id="next_'+(j+1)+'"><a href="#">>></a></li>');
  110. $('#next_'+(j+1)).on('click', function(e){
  111. next(e);
  112. });
  113. }else {};
  114. };
  115. }else{
  116. var li = $('<li></li>').clone();
  117. var a = $('<a></a>').clone().attr('seq', 1).text(1);
  118. var span = $('<span></span>').clone().addClass('sr-only');
  119. $('#ulPagination').append(li.attr('id', 'page_'+(1)).append(a.append(span)));
  120. };
  121. };
  122. $('#ulPagination li[id*="page_"]').removeClass('active');
  123. if($('#page_'+page)!=null) $('#page_'+page).addClass('active');
  124. $('#ulPagination li[id*="page_"]').unbind();
  125. $('#ulPagination li[id*="page_"]').on('click', function(e){
  126. initUserAttrList(Number(e.currentTarget.id.split('_')[1]), '', '');
  127. });
  128. };
  129. var error = function(xhr,d,t){
  130. console.log(xhr);
  131. console.log(t);
  132. };
  133. self.ajaxAdmin( opt, success, error );
  134. };
  135. var previous = function(e){
  136. var startNo = Number(e.currentTarget.id.split('_')[1]);
  137. if(startNo>Math.ceil(totalCount/pageSize)) return;
  138. $('#ulPagination').empty();
  139. if(startNo-10>1){
  140. $('#ulPagination').append('<li id="previous_'+(startNo-10)+'"><a href="#"><<</a></li>');
  141. $('#previous_'+(startNo-10)).on('click', function(e){
  142. previous(e);
  143. });
  144. };
  145. for(i=startNo-10; i<startNo; i++){
  146. $('#ulPagination').append('<li id="page_'+i+'"><a href="#">'+i+'</a></li>');
  147. $('#ulPagination li[id*="page_"]').unbind();
  148. $('#ulPagination li[id*="page_"]').on('click', function(e){
  149. initUserAttrList(Number(e.currentTarget.id.split('_')[1]), '','');
  150. });
  151. if((startNo)==(i+1)){
  152. $('#ulPagination').append('<li id="next_'+(i+1)+'"><a href="#">>></a></li>');
  153. $('#next_'+(i+1)).on('click', function(e){
  154. next(e);
  155. });
  156. };
  157. };
  158. };
  159. var next = function(){
  160. var startNo = Number(event.currentTarget.id.split('_')[1]);
  161. if(startNo>Math.ceil(totalCount/pageSize)) return;
  162. $('#ulPagination').empty();
  163. $('#ulPagination').append('<li id="previous_'+startNo+'"><a href="#"><<</a></li>');
  164. $('#previous_'+startNo).on('click', function(e){
  165. previous(e);
  166. });
  167. for(i=startNo; i<startNo+10; i++){
  168. if(i>Math.ceil(totalCount/pageSize)) return;
  169. $('#ulPagination').append('<li id="page_'+i+'"><a href="#">'+i+'</a></li>');
  170. $('#ulPagination li[id*="page_"]').unbind();
  171. $('#ulPagination li[id*="page_"]').on('click', function(e){
  172. initUserAttrList(Number(e.currentTarget.id.split('_')[1]), '', '');
  173. });
  174. if((startNo+10)==(i+1) && i!=Math.ceil(totalCount/pageSize)){
  175. $('#ulPagination').append('<li id="next_'+(i+1)+'"><a href="#">>></a></li>');
  176. $('#next_'+(i+1)).on('click', function(e){
  177. next(e);
  178. });
  179. };
  180. };
  181. };
  182. var initDropDown = function(){
  183. var opt = {
  184. url: $crudServiceAttrUrl + "/getAttrTypeList.json",
  185. type: "post",
  186. dataType: "json",
  187. contentType: "application/json"
  188. };
  189. var success = function(result){
  190. for(var i=0; i<result.attrTypeList.length; i++){
  191. var attrOpt = {
  192. url: $crudServiceAttrUrl + "/getAttrList.json",
  193. type: "post",
  194. dataType: "json",
  195. async: false,
  196. contentType: "application/json",
  197. data: self.util.stringifyJson({
  198. attrType: result.attrTypeList[i].attrType
  199. })
  200. };
  201. var attrSuccess = function(attrResult){
  202. if(result.attrTypeList[i].attrType=='hospital'){
  203. for(var j=0; j<attrResult.attrList.length; j++){
  204. var option = $('<option></option>').clone().attr('value', attrResult.attrList[j].attrId).text(attrResult.attrList[j].attrName);
  205. $sltHospital.append(option);
  206. };
  207. }else if(result.attrTypeList[i].attrType=='duty'){
  208. for(var j=0; j<attrResult.attrList.length; j++){
  209. var option = $('<option></option>').clone().attr('value', attrResult.attrList[j].attrId).text(attrResult.attrList[j].attrName);
  210. $sltDuty.append(option);
  211. };
  212. }else if(result.attrTypeList[i].attrType=='work'){
  213. workList = attrResult.attrList;
  214. }else{
  215. };
  216. };
  217. var attrError = function(xhr,d,t){
  218. console.log(xhr);
  219. console.log(t);
  220. };
  221. self.ajaxAdmin( attrOpt, attrSuccess, attrError );
  222. }
  223. };
  224. var error = function(xhr,d,t){
  225. console.log(xhr);
  226. console.log(t);
  227. };
  228. self.ajaxAdmin( opt, success, error );
  229. }
  230. var getUserAttrList = function(seq){
  231. userInfo = userList[seq];
  232. $('#userAttrDetail').css('display', 'block');
  233. $('#userAttrDetailEmpty').css('display', 'none');
  234. var opt = {
  235. url: $crudServiceBaseUrl + "/getUserAttrList.json",
  236. type: "post",
  237. dataType: "json",
  238. contentType: "application/json",
  239. data: self.util.stringifyJson({
  240. userId: userInfo.userId
  241. })
  242. };
  243. var success = function(result){
  244. $('#divUserAttr').empty();
  245. userAttrList = result;
  246. if(result.length==0){
  247. $('#noUserAttr').css('display', 'block');
  248. $('#divUserAttr').css('display', 'none');
  249. }else{
  250. $('#noUserAttr').css('display', 'none');
  251. $('#divUserAttr').css('display', 'block');
  252. for(var i=0; i<result.length; i++){
  253. var attrWrapper = div.clone().addClass('form-group col-md-4');
  254. var attrPanel = div.clone().addClass('panel panel-default');
  255. var attrPanelBody = div.clone().addClass('panel-body');
  256. var attrItemButton = button.clone().addClass('user-attr-remove').attr('id', 'btnUserAttr_' + i).append(span.clone().addClass('glyphicon glyphicon-remove'));
  257. var attrItemWrapper = div.clone().addClass('form-group col-md-12');
  258. var attrItemDetail = div.clone().addClass('col-md-4 text-center pd0');
  259. var attrItemDetail2 = div.clone().addClass('col-md-8 text-center');
  260. var attrItemHospital = attrItemWrapper.clone().append(attrItemDetail.clone().append(label.clone().text('소속'))).append(attrItemDetail2.clone().append(span.clone().text(result[i].hospitalName==null? '':result[i].hospitalName)));
  261. var attrItemDuty = attrItemWrapper.clone().append(attrItemDetail.clone().append(label.clone().text('직무'))).append(attrItemDetail2.clone().append(span.clone().text(result[i].dutyName==null? '': result[i].dutyName)));
  262. var attrItemWork = attrItemWrapper.clone().append(attrItemDetail.clone().append(label.clone().text('업무'))).append(attrItemDetail2.clone().append(span.clone().text(result[i].workName==null? '': result[i].workName)));
  263. var attrItem = attrWrapper.clone().attr('id', 'userAttrOrder_'+result[i].userAttrOrder).append(attrPanel.clone().append(attrPanelBody.clone().append(attrItemButton).append(attrItemHospital).append(attrItemDuty).append(attrItemWork)));
  264. $('#divUserAttr').append(attrItem);
  265. };
  266. $('#userAttrOrder_'+userInfo.useAttrOrder).addClass('use-attr-order');
  267. $('[id*=btnUserAttr_').on('click', function(e){
  268. removeUserAttr(e);
  269. });
  270. };
  271. };
  272. var error = function(xhr,d,t){
  273. console.log(xhr);
  274. console.log(t);
  275. };
  276. self.ajaxAdmin( opt, success, error );
  277. };
  278. var newUserAttr = function(){
  279. $txtUserId.val(userInfo.userId);
  280. $txtUserOrder.val(userInfo.userAttrOrder);
  281. $sltHospital.val('');
  282. $sltDuty.val('');
  283. $sltWork.val('');
  284. $('#addAttrModal').modal('show');
  285. $('#addAttrModal').on('shown.bs.modal', function () {
  286. $sltHospital.focus();
  287. });
  288. };
  289. var saveUserAttr = function(){
  290. var opt = {
  291. url: $crudServiceBaseUrl + "/save.json",
  292. type: "post",
  293. dataType: "json",
  294. async: false,
  295. contentType: "application/json",
  296. data: self.util.stringifyJson({
  297. userId: userInfo.userId,
  298. userAttrOrder: $('[id*=userAttrOrder_]').length+1,
  299. hospitalId: $sltHospital.val(),
  300. dutyId: $sltDuty.val(),
  301. workId: $sltWork.val()
  302. })
  303. };
  304. var success = function(result){
  305. $('#addAttrModal').modal('hide');
  306. if(userInfo.useAttrOrder==0 && confirm('해당 속성을 사용자의 선택속성으로 변경하시겠습니까?')){
  307. var changeAttrOpt = {
  308. url: $crudServiceBaseUrl + "/changeUserAttr.json",
  309. type: "post",
  310. async: false,
  311. contentType: "application/json",
  312. data: self.util.stringifyJson({
  313. userId: userInfo.userId,
  314. useAttrOrder: $('[id*=userAttrOrder_]').length+1
  315. })
  316. };
  317. var changeAttrSuccess = function(result){
  318. initUserAttrList(Number($('#ulPagination li.active')[0].id.split('_')[1]), '', '');
  319. $('#table_user tr[userId="'+userInfo.userId+'"]').click();
  320. };
  321. var changeAttrError = function(xhr,d,t){
  322. console.log(xhr);
  323. console.log(t);
  324. };
  325. self.ajaxAdmin( changeAttrOpt, changeAttrSuccess, changeAttrError );
  326. };
  327. initUserAttrList(Number($('#ulPagination li.active')[0].id.split('_')[1]), '', ''); //요거바꿔야함!!필수!!!!!!!!!!!!!!!!!!!!!★★★★★★★★★★★★★★★★★★★★★
  328. $('#table_user tr[userId="'+userInfo.userId+'"]').click();
  329. };
  330. var error = function(xhr,d,t){
  331. console.log(xhr);
  332. console.log(t);
  333. };
  334. self.ajaxAdmin( opt, success, error );
  335. };
  336. var removeUserAttr = function(e){
  337. if(confirm('해당속성을 삭제하시겠습니까?')){
  338. var attrSeq = e.currentTarget.id.split('_')[1];
  339. var attrInfo = userAttrList[attrSeq];
  340. var opt = {
  341. url: $crudServiceBaseUrl + "/remove.json",
  342. type: "post",
  343. dataType: "json",
  344. async: false,
  345. contentType: "application/json",
  346. data: self.util.stringifyJson({
  347. userId: attrInfo.userId,
  348. userAttrOrder: attrInfo.userAttrOrder,
  349. hospitalId: attrInfo.hospitalId,
  350. dutyId: attrInfo.dutyId,
  351. workId: attrInfo.workId
  352. })
  353. };
  354. var success = function(result){
  355. initUserAttrList(Number($('#ulPagination li.active')[0].id.split('_')[1]), '', '');
  356. $('#table_user tr[userId="'+userInfo.userId+'"]').click();
  357. };
  358. var error = function(xhr,d,t){
  359. console.log(xhr);
  360. console.log(t);
  361. };
  362. self.ajaxAdmin( opt, success, error );
  363. };
  364. };
  365. var selectWorkChange = function(e){
  366. var temWorkList=[];
  367. for(var i=0; i<workList.length; i++){
  368. if(e.currentTarget.value==workList[i].upperAttr){
  369. temWorkList.push(workList[i]);
  370. };
  371. };
  372. $sltWork.empty();
  373. var option = $('<option></option>').clone().attr('value', '').text('선택');
  374. $sltWork.append(option);
  375. for(var j=0; j<temWorkList.length; j++){
  376. var option = $('<option></option>').clone().attr('value', temWorkList[j].attrId).text(temWorkList[j].attrName);
  377. $sltWork.append(option);
  378. };
  379. };
  380. };