d7e75f1a0a507d251589cf17e08808c399871890.svn-base 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400
  1. BemsWebApplication.UserGroup = function (params, viewInfo) {
  2. "use strict";
  3. var CmUserGroupDataSource = BemsWebApplication.db.createDataSource('CmUserGroup', true);
  4. var UserGroupInfo = ko.observableArray();
  5. var RowName;
  6. // Permission Index
  7. var PI_SEARCH = 0,
  8. PI_MODIFICATION = 1,
  9. PI_BUSINESS_FIELD = 2;
  10. var userGroupDataSource = BWA.db.createDataSource('CmUserGroup'),
  11. userGroupPermissionDataSource = BWA.db.createDataSource('CmUserGroupPermission'),
  12. userGroupPermissionDataArray = ko.observableArray(),
  13. popupVisible = ko.observable(false),
  14. selectedUserGroup = ko.observable(null),
  15. viewModel,
  16. //gridView,
  17. sidemenuHashSet;
  18. //var datagrid = $('#EnergySavingControlDataGridViewInSearchView').dxDataGrid('instance');
  19. //var gridView = $('#gridContainer2').dxDataGrid('instance');
  20. var headerCheckBoxValues = [ko.observable(false), ko.observable(false), ko.observable(false)];
  21. var headerTemplate = function (header, info) {
  22. var dataGrid = $('#gridContainer2').dxDataGrid('instance');
  23. var checkbox = $('<div>');
  24. checkbox.appendTo(header);
  25. checkbox.dxCheckBox({
  26. value: headerCheckBoxValues[info.columnIndex - 2],
  27. //value: e.value,
  28. valueChangeAction: function (e) {
  29. headerCheckBoxValues[info.columnIndex - 2](e.value);
  30. //gridView.refresh();
  31. /*
  32. var rows = utils.datagrid.getItems(gridView);
  33. _.each(rows, function (data, i) {
  34. data.checkboxes[info.columnIndex - 2].dxCheckBox({
  35. value: e.value
  36. });
  37. }); */
  38. for (var i = 0; i < 100; i++) {
  39. var cell = dataGrid.getCellElement(i, info.columnIndex);
  40. //var c = cell.children;
  41. //var c1 = cell.children[0];
  42. //cell.children.item.dxCheckBox({
  43. // value: e.value
  44. //});
  45. //var checkbox = $('<div>');
  46. //checkbox.appendTo(cell);
  47. /*cell.dxCheckBox({
  48. value: e.value
  49. });*/
  50. //var chechk = cell.getElementByClassName('checkbox');
  51. //cell.checkboxes[info.columnIndex - 2].dxCheckBox({
  52. //value: e.value
  53. //});
  54. }
  55. }
  56. });
  57. $('<div>')
  58. .css('display', 'inline-block')
  59. .html(info.column.caption)
  60. .appendTo(header);
  61. };
  62. //gridView = $('#gridContainer2').dxDataGrid('instance');
  63. // var dataGrid = $('#gridContainer').dxDataGrid('instance');
  64. var menuDataGridOptions = utils.datagrid.defaultOptions({
  65. dataSource: userGroupPermissionDataArray,
  66. width: '100%',
  67. //height: 706,
  68. height: 690,
  69. columns: [
  70. { dataField: 'MenuPath', caption: $G('menuPath'), width: '35%', sortOrder: 'asc' },
  71. { dataField: 'Name', caption: $G('name'), width: '25%' },
  72. { dataField: 'MenuPermission', caption: $G('searchPermission'), width: '13%', alignment: 'center', allowSorting: false },
  73. { dataField: 'MenuPermission', caption: $G('modificationPermission'), width: '13%', alignment: 'center', allowSorting: false },
  74. { dataField: 'MenuPermission', caption: $G('dependBusinessField'), width: '14%', alignment: 'center', allowSorting: false }
  75. ],
  76. // hcLee 2015 11 09
  77. paging: {
  78. enabled: false,
  79. pageSize: 17
  80. },
  81. pager: {
  82. //allowedPageSizes: true,
  83. showPageSizeSelector: true,
  84. allowedPageSizes: [17, 20],
  85. visible: false
  86. },
  87. customizeColumns: function (columns) {
  88. _.each(columns, function (element, i) {
  89. switch (i) {
  90. case 2:
  91. case 3:
  92. case 4:
  93. element.headerCellTemplate = headerTemplate;
  94. break;
  95. }
  96. });
  97. },
  98. selection: {
  99. mode: 'none'
  100. },
  101. /*
  102. contentReadyAction: function(e) {
  103. //gridView = e.component;
  104. //datagrid.filter(null);
  105. },*/
  106. cellPrepared: function (cellElement, cellInfo) {
  107. switch (cellInfo.columnIndex) {
  108. case 2:
  109. case 3:
  110. case 4:
  111. (function (element, info) {
  112. if (info.rowType == 'data') {
  113. var index = info.columnIndex - 2;
  114. var checker = (1 << index);
  115. var checked = (info.value & checker);
  116. $(cellElement).text('');
  117. // var check = ko.observable(checked > 0 ? true : false);
  118. var checkbox = $('<div>');
  119. checkbox.appendTo(element);
  120. checkbox.dxCheckBox({
  121. value: checked > 0 ? true : false,
  122. valueChangeAction: function (e) {
  123. var p = info.data.MenuPermission;
  124. if (e.value) {
  125. //if (p() & checker) {
  126. p(p() | checker);
  127. }
  128. else {
  129. p(p() & ~checker);
  130. }
  131. }
  132. });
  133. //var dataChecks = info.data.checks = info.data.checks || [];
  134. var dataCheckBoxes = info.data.checkboxes = info.data.checkboxes || [];
  135. //dataChecks[index] = check;
  136. dataCheckBoxes[index] = checkbox;
  137. }
  138. })(cellElement, cellInfo);
  139. break;
  140. }
  141. },
  142. });
  143. var viewModel = BWA.DataGrid.createViewWithDataGrid(params, viewInfo, 'CmUserGroup', {
  144. height: 690,
  145. popupWidth: 480,
  146. columns: [
  147. { dataField: 'Number', caption: $G('number'), width: '20%', allowSorting: false },
  148. { dataField: 'Name', caption: $G('permissionName'), width: '80%' }
  149. ],
  150. /*
  151. searchViewItems: [
  152. { id: 'MenuPath' },
  153. { id: 'Name' }
  154. ],*/
  155. //pager: {
  156. // //allowedPageSizes: false,
  157. // visible: true
  158. //},
  159. NoSearchView: true, // 2019.07.25 kgpark 검색버튼 삭제
  160. handleViewShown: function () {
  161. sidemenuHashSet = $SideMenu.getSidemenuHashSet();
  162. $SearchView.setPopupVisibleObservable(null);
  163. //$SearchView.visibleObservable(true); // hcLee 2016 02 01
  164. $("#gridContainer").dxDataGrid({
  165. paging: {
  166. pageSize: 19,
  167. enabled: true
  168. }
  169. });
  170. $("#gridContainer2").dxDataGrid({
  171. paging: {
  172. pageSize: 16,
  173. enabled: true
  174. },
  175. pager: {
  176. allowedPageSizes: false,
  177. visible: true
  178. }
  179. });
  180. },
  181. // 2016 02 13 hcLee 추가 (등록팝업후 그냥 닫기 하고 수정팝업하면 나오는 쿼리에러 해결함)
  182. handlePopupShowing2: function (selectedId) {
  183. var data = selectedUserGroup();
  184. selectedId.SiteId = data.SiteId();
  185. selectedId.UserGroupId = data.UserGroupId();
  186. selectedId.Name = data.Name();
  187. },
  188. /*
  189. handleAfterLoadingModelByKey: function(data, dataViewModel, isNewInPopup) {
  190. },*/
  191. /*
  192. handlePopupShowing: function(that) {
  193. },*/
  194. handleDataGridRowClick: function (id, dataGrid, clickRow, popupVisible) {
  195. var eq = BWA.DataUtil.constructEqualFilter;
  196. var and = BWA.DataUtil.andFilter;
  197. var data = clickRow.data;
  198. RowName = data.Name;
  199. selectedUserGroup(data);
  200. userGroupPermissionDataSource.filter([
  201. eq('SiteId', data.SiteId()),
  202. and,
  203. eq('UserGroupId', data.UserGroupId()),
  204. ]);
  205. userGroupPermissionDataSource.load().done(function (dbPermissions) {
  206. userGroupPermissionDataArray(_.map(dbPermissions, function (p) {
  207. var menu = sidemenuHashSet[p.MenuId()];
  208. if (_.has(menu, 'Name')) {
  209. p.Name = ko.observable(menu.Name);
  210. p.MenuPath = ko.observable(menu.MenuPath);
  211. return p;
  212. }
  213. }));
  214. //gridView.refresh();
  215. //dataGrid.refresh();
  216. $('#gridContainer2').dxDataGrid('instance').refresh();
  217. });
  218. //var data = clickRow.data;
  219. },
  220. handleSaveInPopup: function (dataViewModel, popupVisible) {
  221. dataViewModel.UserGroupId(0);
  222. var postData = dataViewModel.toJS();
  223. postData.UserGroupPermissions = $SideMenu.getSidemenusForPermission();
  224. var isDuplicated = false;
  225. for (var i = 0; i < UserGroupInfo().length; i++) {
  226. if (viewModel.dataModel.Name() == UserGroupInfo()[i].Name()) {
  227. isDuplicated = true;
  228. }
  229. }
  230. if (!BWA.DataUtil.isValidInputValue(viewModel.dataModel.Name())) {
  231. utils.toast.show('저장 혹은 수정 반드시 필수 입력 정보를 모두 입력하셔야 합니다 (앞뒤공백 허용안함)', 'error');
  232. return 0;
  233. }
  234. else {
  235. if (isDuplicated) {
  236. utils.toast.show('이미 동일 이름이 존재합니다.', 'error');
  237. return 0;
  238. }
  239. else
  240. return BWA.api.post('CmUserGroup/Insert', postData);
  241. }
  242. },
  243. // 이름 중복 방지
  244. handlePopupShowing: function (that) {
  245. CmUserGroupDataSource.filter([
  246. ["SiteId", "=", BWA.UserInfo.SiteId()]
  247. ]);
  248. CmUserGroupDataSource.load().done(function (result) {
  249. UserGroupInfo(result);
  250. });
  251. },
  252. beforeUpdateDataViewModel: function () {
  253. var isDuplicated = false;
  254. for (var i = 0; i < UserGroupInfo().length; i++) {
  255. if (viewModel.dataModel.Name() == UserGroupInfo()[i].Name() && RowName() != UserGroupInfo()[i].Name()) {
  256. isDuplicated = true;
  257. }
  258. }
  259. if (!BWA.DataUtil.isValidInputValue(viewModel.dataModel.Name())) {
  260. utils.toast.show('저장 혹은 수정 반드시 필수 입력 정보를 모두 입력하셔야 합니다 (앞뒤공백 허용안함)', 'error');
  261. return 0;
  262. }
  263. else {
  264. if (isDuplicated) {
  265. utils.toast.show('이미 동일 이름이 존재합니다.', 'error');
  266. return 0;
  267. }
  268. else
  269. return 2;
  270. }
  271. }
  272. });
  273. function handleSave() {
  274. var selectedData = selectedUserGroup();
  275. //var rows = utils.datagrid.getItems(gridView);
  276. var rows = utils.datagrid.getItems($('#gridContainer2').dxDataGrid('instance'));
  277. var postData = [];
  278. var itemKeys = BWA.db.CmUserGroupPermission.key();
  279. var toJS = BWA.DataUtil.convertViewModelToJS;
  280. itemKeys.push('MenuPermission');
  281. _.each(rows, function (item, i) {
  282. item = toJS(_.pick(item, itemKeys));
  283. postData.push(item);
  284. });
  285. BWA.api.post('CmUserGroup/UpdatePermission', postData).done(function () {
  286. utils.toast.show($G('successDatabaseProcessMsg'));
  287. });
  288. }
  289. function handleEdit() {
  290. // var data = selectedUserGroup();
  291. // var dataModel = viewModel.dataModel;
  292. // dataModel.Name = $KoSet(dataModel.Name, data['Name']);
  293. //viewModel.popupVisible(false);
  294. viewModel.popupVisible(true);
  295. //viewModel.popupVisible(true);
  296. }
  297. function handleHeaderCheckboxValueFunc(index) {
  298. return function (check) {
  299. //var rows = utils.datagrid.getItems(gridView);
  300. var rows = utils.datagrid.getItems($('#gridContainer2').dxDataGrid('instance'));
  301. _.each(rows, function (data, i) {
  302. data.checkboxes[index].dxCheckBox({
  303. value: check
  304. });
  305. });
  306. };
  307. }
  308. for (var i = PI_SEARCH ; i <= PI_BUSINESS_FIELD ; i++) {
  309. headerCheckBoxValues[i].subscribe(handleHeaderCheckboxValueFunc(i))
  310. }
  311. viewModel.popupVisible.subscribe(function (visible) {
  312. });
  313. viewModel.menuDataGridOptions = menuDataGridOptions;
  314. viewModel.handleSave = handleSave;
  315. viewModel.handleEdit = handleEdit;
  316. viewModel.selectedUserGroup = selectedUserGroup;
  317. //viewModel.handleSearchInSearchView = handleSearchInSearchView;
  318. // hcLee 2016 02 13
  319. viewModel.handleSearchInSearchView2 = function (filter) {
  320. var filterA = [];
  321. _.each(filter, function (x) {
  322. filterA.push(x);
  323. });
  324. userGroupPermissionDataSource.filter(filterA);
  325. userGroupPermissionDataSource.load().done(function (result) {
  326. //userGroupPermissionDataArray.load().done(function (result) {
  327. userGroupPermissionDataArray(result);
  328. });
  329. };
  330. return viewModel;
  331. };