user.js 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297
  1. /**
  2. * admin/user
  3. */
  4. var mcare_admin_user = function(){
  5. //상속
  6. mcare_admin.call(this);
  7. var self = this;
  8. //변수
  9. var $grid = $("#grid"),
  10. $userDelBtn = $(".userDelBtn"),
  11. $crudServiceBaseUrl = contextPath + "/admin/user";
  12. /**
  13. * 초기화
  14. */
  15. this.init = function(){
  16. initGrid();
  17. addEvent();
  18. };
  19. /**
  20. * 이벤트 등록
  21. */
  22. var addEvent = function(){
  23. $userDelBtn.on("click",function(e){
  24. e.preventDefault();
  25. userDelete(e);
  26. });
  27. };
  28. var setDataSource = function(){
  29. // 데이터소스
  30. var dataSource = new kendo.data.DataSource({
  31. transport: {
  32. read: {
  33. url: $crudServiceBaseUrl + "/getList.json",
  34. method: "post",
  35. dataType: "json",
  36. contentType: "application/json",
  37. complete:"gridReadComplete"
  38. },
  39. create: {
  40. url: $crudServiceBaseUrl + "/save.json",
  41. method: "post",
  42. dataType: "json",
  43. complete: gridActionComplete
  44. },
  45. update: {
  46. url: $crudServiceBaseUrl + "/clear.json",
  47. method: "post",
  48. dataType: "json",
  49. complete: gridActionComplete
  50. },
  51. destroy: {
  52. url: $crudServiceBaseUrl + "/remove.json",
  53. method: "post",
  54. dataType: "json",
  55. complete: gridActionComplete
  56. },
  57. parameterMap: function( options, operation ) {
  58. if( operation === "destroy" ){
  59. return self.util.stringifyJson( checkedIds );
  60. }else if( operation !== "destroy" && operation !== "read" && options.models ) {
  61. return self.util.stringifyJson( options.models[0] );
  62. } else if( operation === "read" ){
  63. return self.util.stringifyJson( options );
  64. }
  65. }
  66. },
  67. batch: true,
  68. pageSize: 15,
  69. serverPaging : true,
  70. serverSorting: true,
  71. schema: {
  72. data : function(result){
  73. var $withdrawalDate = parseFloat( $("#withdrawalDate").val() );
  74. if( result.msg !== undefined ){
  75. alert(result.msg);
  76. return [];
  77. } else if( typeof result === "object" && result.data === undefined ){
  78. var cnt = result.lastAccessDay;
  79. result["withdrawalYn"] = (cnt > $withdrawalDate ? "Y" : "N");
  80. return result;
  81. }else {
  82. var resultList = result.data;
  83. for( var i = 0; i < resultList.length; i++ ){
  84. var item = resultList[i];
  85. var cnt = item.lastAccessDay;
  86. item["withdrawalYn"] = (cnt > $withdrawalDate ? "Y" : "N");
  87. }
  88. return resultList;
  89. }
  90. },
  91. total : "totalCount",
  92. model: {
  93. id: "rnum",
  94. fields: {
  95. rnum: { type: "number", editable: false},
  96. userId: { type: "string", editable: false},
  97. loginFailCnt : { type:"number"},
  98. accessDt : {type:"number",editable:false},
  99. lastAccessDay : {type:"number",editable:false},
  100. registerDt : {type:"number",editable:false},
  101. registerDay : {type:"number",editable:false},
  102. withdrawalYn : {type:"string",editable:false}
  103. }
  104. }
  105. }
  106. });
  107. /**
  108. * 그리드 이벤트 동작 complate
  109. * @private
  110. */
  111. function gridActionComplete( e ){
  112. var result = self.util.parseJson( e.responseText );
  113. if( result.msg )
  114. alert( result.msg );
  115. $grid.data("kendoGrid").dataSource.read();
  116. };
  117. /**
  118. * 그리드 이벤트 동작 complate
  119. * @private
  120. */
  121. function gridReadComplete( e ){
  122. var result = self.util.parseJson( e.responseText );
  123. if( result.msg ){
  124. alert( result.msg );
  125. if( result.type == "AuthException" ){
  126. window.location.href = contextPath + "/admin/logout.page";
  127. return;
  128. }
  129. }
  130. };
  131. return dataSource;
  132. };
  133. var dataSource = setDataSource();
  134. /**
  135. * 그리드 초기화
  136. */
  137. var checkedIds = {};
  138. var initGrid = function(){
  139. // 그리드 옵션
  140. var option = {
  141. dataSource: dataSource,
  142. pageable: true,
  143. sortable: true,
  144. resizable: true,
  145. height: 580,
  146. columns: [
  147. { field: "check",title:"",sortable:false, filterable:false, template: "<input type='checkbox' class='checkbox' />" , width: 20, attributes: {style: "text-align: center;"}}
  148. ,{ field: "rnum", title: "",hidden:true, width: 50, attributes: {style: "text-align: center;"}}
  149. ,{ field: "userId", title: "사용자 ID", width: 100, attributes: {style: "text-align: center;"}}
  150. ,{ field: "loginFailCnt",filterable:false, title: "로그인실패횟수", width: 50, attributes: {style: "text-align: center;"}}
  151. ,{ field: "accessDt", title: "최근 접속일",filterable:false, width: 80, attributes: {style: "text-align: center;"},
  152. template:function(dataItem) {
  153. return dateTemplate(dataItem.accessDt);
  154. }
  155. }
  156. ,{ field: "lastAccessDay", title: "비접속기간",filterable:false,sortable:true, width: 80, attributes: {style: "text-align: center;"}}
  157. ,{ field: "registerDt",filterable:false, title: "가입일자", width: 100, attributes: {style: "text-align: center;"},
  158. template:function(dataItem) {
  159. return dateTemplate(dataItem.registerDt);
  160. }
  161. }
  162. ,{ field: "registerDay", title: "가입기간",filterable:false,sortable:true, width: 80, attributes: {style: "text-align: center;"}}
  163. ,{ field: "withdrawalYn", title: "탈퇴대상여부",sortable:false, width: 50, attributes: {style: "text-align: center;"}}
  164. // ,{ command: [/*{name:"edit",text:"Block 해제"},*/{name:"destroy",text:"탈퇴처리"}], title: "&nbsp;", width: 100, attributes: {style: "text-align: center;"}}
  165. ],
  166. filterable: {
  167. extra : false,
  168. operators : {
  169. string : {
  170. contains : " 포함 "
  171. }
  172. }
  173. },
  174. editable: {
  175. mode:"popup",
  176. confirmation:"정말 삭제하시겠습니까?"
  177. },
  178. dataBound: function () {
  179. var rowCount = $grid.find( ".k-grid-content tbody tr" ).length;
  180. if( rowCount < dataSource._take ) {
  181. var addRows = dataSource._take - rowCount;
  182. for( var i = 0; i < addRows; i++ ) {
  183. $grid.find( ".k-grid-content tbody" )
  184. .append( "<tr class='kendo-data-row'><td>&nbsp;</td></tr>" );
  185. }
  186. }
  187. //선택된 row 정보 binding
  188. var view = this.dataSource.view();
  189. for(var i = 0; i < view.length;i++){
  190. if(checkedIds[view[i].id]){
  191. this.tbody.find("tr[data-uid='" + view[i].uid + "']")
  192. .find(".checkbox")
  193. .attr("checked","checked");
  194. }
  195. }
  196. //전체 선택 부분 체크박스 생성 및 이벤트
  197. var $check = $grid.find( "th.k-header[data-field=check]" ),
  198. allCheck = $("<input></input>").attr({"type":"checkbox","id":"allCheck"});
  199. $check.html(allCheck);
  200. var callback = function(e){
  201. var $check = $("input.checkbox");
  202. var grid = $grid.data("kendoGrid");
  203. //전체 선택
  204. if( this.checked ){
  205. $check.prop("checked",true);
  206. $.each( $check, function(idx){
  207. var row = $($check[idx]).closest("tr"),
  208. dataItem = grid.dataItem(row);
  209. checkedIds[dataItem.id] = dataItem.userId;
  210. });
  211. //전체 선택 해제
  212. } else {
  213. $check.prop("checked",false);
  214. $.each( $check, function(idx){
  215. var row = $($check[idx]).closest("tr"),
  216. dataItem = grid.dataItem(row);
  217. delete checkedIds[dataItem.id];
  218. });
  219. }
  220. };
  221. self.event.addEvent( allCheck, "change", callback );
  222. //row 선택 이벤트
  223. var selectRow = function(e){
  224. var checked = this.checked,
  225. row = $(this).closest("tr"),
  226. grid = $grid.data("kendoGrid"),
  227. dataItem = grid.dataItem(row);
  228. checkedIds[dataItem.id] = dataItem.userId;
  229. //선택되면 강조색
  230. // if (checked) {
  231. // //-select the row
  232. // row.addClass("k-state-selected");
  233. // } else {
  234. // //-remove selection
  235. // row.removeClass("k-state-selected");
  236. // }
  237. };
  238. self.event.addEvent( $("input.checkbox"), "click", selectRow );
  239. }
  240. // ,
  241. // edit: function(e){
  242. // e.model.dirty = true;
  243. // e.container.children().find("[class*=edit]").hide();
  244. // $(e.container.children().children()[0]).before("<div><p>Block을 해제하시겠습니까?</p></div>");
  245. // }
  246. };
  247. function dateTemplate(e){
  248. return e!==null?kendo.toString( new Date(e), 'yyyy-MM-dd HH:mm:ss') : "";
  249. }
  250. //그리드 초기화
  251. self.grid( $grid, option );
  252. };
  253. /**
  254. * 사용자 삭제
  255. */
  256. var userDelete = function(e){
  257. var option = {
  258. url: $crudServiceBaseUrl + "/remove.json",
  259. method: "POST",
  260. dataType: "JSON",
  261. data : self.util.stringifyJson( checkedIds )
  262. };
  263. //성공
  264. var sFn = function(data){
  265. if( data.msg !== undefined ){
  266. alert( data.msg );
  267. } else {
  268. //성공하고 결과
  269. if( data.result !== undefined && data.result.type === "success" ){
  270. alert( data.result.msg );
  271. checkedIds= {};
  272. $grid.data("kendoGrid").dataSource.page(1);
  273. //실패 결과
  274. } else if( data.result !== undefined && data.result.type === "fail" ){
  275. alert( data.result.msg );
  276. }
  277. }
  278. };
  279. //에러
  280. var eFn = function(e,xhr,t){
  281. console.log("error");
  282. console.log(e);
  283. console.log(xhr);
  284. };
  285. self.ajaxAdmin( option, sFn, eFn );
  286. };
  287. };