roles.component.ts 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241
  1. import { ChangeDetectionStrategy, ViewContainerRef, ChangeDetectorRef, Component, OnInit, Inject } from '@angular/core';
  2. import { FormBuilder, FormGroup, Validators } from '@angular/forms';
  3. import { ActivatedRoute, Router } from '@angular/router';
  4. import { I18NService } from '@core';
  5. import { _HttpClient, ALAIN_I18N_TOKEN, SettingsService } from '@delon/theme';
  6. import { format, addDays } from 'date-fns';
  7. import { NzSafeAny } from 'ng-zorro-antd/core/types';
  8. import { NzMessageService } from 'ng-zorro-antd/message';
  9. import { NzModalRef, NzModalService } from 'ng-zorro-antd/modal';
  10. import { NzTableQueryParams } from 'ng-zorro-antd/table';
  11. import { RolesService } from '../../../service/roles.service';
  12. import { set2String } from '../../../shared/index';
  13. import { PermissionRoleComponent } from './permission-role/permission-role.component';
  14. import { RoleEditerComponent } from './role-editer/role-editer.component';
  15. @Component({
  16. selector: 'app-roles',
  17. templateUrl: './roles.component.html',
  18. styleUrls: ['./roles.component.less']
  19. })
  20. export class RolesComponent implements OnInit {
  21. query: {
  22. params: {
  23. appId: String;
  24. appName: String;
  25. roleName: String;
  26. displayName: String;
  27. employeeNumber: String;
  28. startDate: String;
  29. endDate: String;
  30. startDatePicker: Date;
  31. endDatePicker: Date;
  32. pageSize: number;
  33. pageNumber: number;
  34. pageSizeOptions: number[];
  35. };
  36. results: {
  37. records: number;
  38. rows: NzSafeAny[];
  39. };
  40. expandForm: Boolean;
  41. submitLoading: boolean;
  42. tableLoading: boolean;
  43. tableCheckedId: Set<String>;
  44. indeterminate: boolean;
  45. checked: boolean;
  46. } = {
  47. params: {
  48. appId: '',
  49. appName: '',
  50. roleName: '',
  51. displayName: '',
  52. employeeNumber: '',
  53. startDate: '',
  54. endDate: '',
  55. startDatePicker: addDays(new Date(), -30),
  56. endDatePicker: new Date(),
  57. pageSize: 10,
  58. pageNumber: 1,
  59. pageSizeOptions: [10, 20, 50]
  60. },
  61. results: {
  62. records: 0,
  63. rows: []
  64. },
  65. expandForm: false,
  66. submitLoading: false,
  67. tableLoading: false,
  68. tableCheckedId: new Set<String>(),
  69. indeterminate: false,
  70. checked: false
  71. };
  72. constructor(
  73. private modalService: NzModalService,
  74. private viewContainerRef: ViewContainerRef,
  75. private rolesService: RolesService,
  76. private fb: FormBuilder,
  77. private msg: NzMessageService,
  78. @Inject(ALAIN_I18N_TOKEN) private i18n: I18NService,
  79. private router: Router,
  80. private route: ActivatedRoute,
  81. private cdr: ChangeDetectorRef
  82. ) {}
  83. ngOnInit(): void {
  84. if (this.route.snapshot.queryParams['appId']) {
  85. this.query.params.appId = this.route.snapshot.queryParams['appId'];
  86. this.query.params.appName = this.route.snapshot.queryParams['appName'];
  87. this.fetch();
  88. }
  89. }
  90. onQueryParamsChange(tableQueryParams: NzTableQueryParams): void {
  91. this.query.params.pageNumber = tableQueryParams.pageIndex;
  92. this.query.params.pageSize = tableQueryParams.pageSize;
  93. this.fetch();
  94. }
  95. onSearch(): void {
  96. this.fetch();
  97. }
  98. onReset(): void {}
  99. onBatchDelete(): void {
  100. this.rolesService.delete(set2String(this.query.tableCheckedId)).subscribe(res => {
  101. if (res.code == 0) {
  102. this.msg.success(this.i18n.fanyi('mxk.alert.delete.success'));
  103. this.fetch();
  104. } else {
  105. this.msg.error(this.i18n.fanyi('mxk.alert.delete.error'));
  106. }
  107. this.cdr.detectChanges();
  108. });
  109. }
  110. onAdd(e: MouseEvent): void {
  111. e.preventDefault();
  112. const modal = this.modalService.create({
  113. nzContent: RoleEditerComponent,
  114. nzViewContainerRef: this.viewContainerRef,
  115. nzComponentParams: {
  116. isEdit: false,
  117. id: '',
  118. appId: this.query.params.appId,
  119. appName: this.query.params.appName
  120. },
  121. nzOnOk: () => new Promise(resolve => setTimeout(resolve, 1000))
  122. });
  123. // Return a result when closed
  124. modal.afterClose.subscribe(result => {
  125. if (result.refresh) {
  126. this.fetch();
  127. }
  128. });
  129. }
  130. onMembers(e: MouseEvent, roleId: String, roleName: String): void {
  131. this.router.navigateByUrl(`/permissions/apps/rolemembers?appId=${this.query.params.appId}&roleId=${roleId}&roleName=${roleName}`);
  132. }
  133. onEdit(e: MouseEvent, editiId: String): void {
  134. e.preventDefault();
  135. const modal = this.modalService.create({
  136. nzContent: RoleEditerComponent,
  137. nzViewContainerRef: this.viewContainerRef,
  138. nzComponentParams: {
  139. isEdit: true,
  140. id: editiId
  141. },
  142. nzOnOk: () => new Promise(resolve => setTimeout(resolve, 1000))
  143. });
  144. // Return a result when closed
  145. modal.afterClose.subscribe(result => {
  146. if (result.refresh) {
  147. this.fetch();
  148. }
  149. });
  150. }
  151. onPermissions(e: MouseEvent, roleId: String, roleName: String): void {
  152. e.preventDefault();
  153. const modal = this.modalService.create({
  154. nzContent: PermissionRoleComponent,
  155. nzViewContainerRef: this.viewContainerRef,
  156. nzComponentParams: {
  157. roleId: roleId,
  158. roleName: roleName,
  159. appId: this.query.params.appId,
  160. appName: this.query.params.appName
  161. },
  162. nzOnOk: () => new Promise(resolve => setTimeout(resolve, 1000))
  163. });
  164. // Return a result when closed
  165. modal.afterClose.subscribe(result => {
  166. if (result.refresh) {
  167. }
  168. });
  169. }
  170. onDelete(deleteId: String): void {
  171. this.rolesService.delete(deleteId).subscribe(res => {
  172. if (res.code == 0) {
  173. this.msg.success(this.i18n.fanyi('mxk.alert.delete.success'));
  174. this.fetch();
  175. } else {
  176. this.msg.error(this.i18n.fanyi('mxk.alert.delete.error'));
  177. }
  178. this.cdr.detectChanges();
  179. });
  180. }
  181. fetch(): void {
  182. this.query.submitLoading = true;
  183. this.query.tableLoading = true;
  184. this.query.indeterminate = false;
  185. this.query.checked = false;
  186. this.query.tableCheckedId.clear();
  187. if (this.query.expandForm) {
  188. this.query.params.endDate = format(this.query.params.endDatePicker, 'yyyy-MM-dd HH:mm:ss');
  189. this.query.params.startDate = format(this.query.params.startDatePicker, 'yyyy-MM-dd HH:mm:ss');
  190. } else {
  191. this.query.params.endDate = '';
  192. this.query.params.startDate = '';
  193. }
  194. this.rolesService.fetch(this.query.params).subscribe(res => {
  195. this.query.results = res.data;
  196. this.query.submitLoading = false;
  197. this.query.tableLoading = false;
  198. this.cdr.detectChanges();
  199. });
  200. }
  201. updateTableCheckedSet(id: String, checked: boolean): void {
  202. if (checked) {
  203. this.query.tableCheckedId.add(id);
  204. } else {
  205. this.query.tableCheckedId.delete(id);
  206. }
  207. }
  208. refreshTableCheckedStatus(): void {
  209. const listOfEnabledData = this.query.results.rows.filter(({ disabled }) => !disabled);
  210. this.query.checked = listOfEnabledData.every(({ id }) => this.query.tableCheckedId.has(id));
  211. this.query.indeterminate = listOfEnabledData.some(({ id }) => this.query.tableCheckedId.has(id)) && !this.query.checked;
  212. }
  213. onTableItemChecked(id: String, checked: boolean): void {
  214. this.updateTableCheckedSet(id, checked);
  215. this.refreshTableCheckedStatus();
  216. }
  217. onTableAllChecked(checked: boolean): void {
  218. this.query.results.rows.filter(({ disabled }) => !disabled).forEach(({ id }) => this.updateTableCheckedSet(id, checked));
  219. this.refreshTableCheckedStatus();
  220. }
  221. }