修复用户组bug

This commit is contained in:
MaxKey 2023-09-15 22:08:37 +08:00
parent 77182946e0
commit 32656d5aa5
11 changed files with 196 additions and 83 deletions

View File

@ -26,7 +26,7 @@ import jakarta.persistence.Id;
import jakarta.persistence.Table;
@Entity
@Table(name = "MXK_ROLE_MEMBER")
@Table(name = "mxk_group_member")
public class GroupMember extends UserInfo implements Serializable{
/**

View File

@ -80,7 +80,7 @@ public class GroupMemberService extends JpaService<GroupMember>{
if(entity.getPageNumber() == 1 && totalPage < entity.getPageSize()) {
totalCount = totalPage;
}else {
totalCount = parseCount(getMapper().fetchPageResults(entity));
totalCount = parseCount(getMapper().fetchCount(entity));
}
return new JpaPageResults<Groups>(entity.getPageNumber(),entity.getPageSize(),totalPage,totalCount,resultslist);

View File

@ -3,48 +3,68 @@
<div nz-row [nzGutter]="{ xs: 8, sm: 8, md: 8, lg: 24, xl: 48, xxl: 48 }">
<div nz-col nzMd="14" nzSm="24">
<nz-form-item>
<nz-form-label nzFor="name">{{ 'mxk.roles.name' | i18n }}</nz-form-label>
<nz-form-label nzFor="name">{{ 'mxk.groups.name' | i18n }}</nz-form-label>
<nz-form-control>
<input nz-input [(ngModel)]="query.params.groupName" [ngModelOptions]="{ standalone: true }" name="groupName"
placeholder="" id="groupName" />
<input
nz-input
[(ngModel)]="query.params.groupName"
[ngModelOptions]="{ standalone: true }"
name="groupName"
placeholder=""
id="groupName"
/>
</nz-form-control>
</nz-form-item>
</div>
<div nz-col [nzSpan]="query.expandForm ? 24 : 10" [class.text-right]="query.expandForm">
<button nz-button type="submit" [nzType]="'primary'" [nzLoading]="query.submitLoading">{{ 'mxk.text.query' | i18n
}}</button>
<button nz-button type="reset" (click)="onReset()" class="mx-sm" style="display: none">{{ 'mxk.text.reset' | i18n
}}</button>
<button nz-button type="submit" [nzType]="'primary'" [nzLoading]="query.submitLoading">{{ 'mxk.text.query' | i18n }}</button>
<button nz-button type="reset" (click)="onReset()" class="mx-sm" style="display: none">{{ 'mxk.text.reset' | i18n }}</button>
<button nz-button (click)="query.expandForm = !query.expandForm" class="mx-sm" style="display: none">
{{ query.expandForm ? ('mxk.text.collapse' | i18n) : ('mxk.text.expand' | i18n) }}</button>
{{ query.expandForm ? ('mxk.text.collapse' | i18n) : ('mxk.text.expand' | i18n) }}</button
>
<button nz-button nzType="primary" (click)="onSubmit($event)">{{ 'mxk.text.confirm' | i18n }}</button>
</div>
</div>
</form>
<nz-table #dynamicTable nzTableLayout="auto" nzSize="small" nzBordered nzShowSizeChanger [nzData]="query.results.rows"
[nzFrontPagination]="false" [nzTotal]="query.results.records" [nzPageSizeOptions]="query.params.pageSizeOptions"
[nzPageSize]="query.params.pageSize" [nzPageIndex]="query.params.pageNumber" [nzLoading]="this.query.tableLoading"
(nzQueryParams)="onQueryParamsChange($event)" nzWidth="100%">
<nz-table
#dynamicTable
nzTableLayout="auto"
nzSize="small"
nzBordered
nzShowSizeChanger
[nzData]="query.results.rows"
[nzFrontPagination]="false"
[nzTotal]="query.results.records"
[nzPageSizeOptions]="query.params.pageSizeOptions"
[nzPageSize]="query.params.pageSize"
[nzPageIndex]="query.params.pageNumber"
[nzLoading]="this.query.tableLoading"
(nzQueryParams)="onQueryParamsChange($event)"
nzWidth="100%"
>
<thead>
<tr>
<th></th>
<th nzAlign="center" style="display: none">Id</th>
<th nzAlign="center">{{ 'mxk.roles.name' | i18n }}</th>
<th nzAlign="center">{{ 'mxk.roles.category' | i18n }}</th>
<th nzAlign="center">{{ 'mxk.groups.name' | i18n }}</th>
<th nzAlign="center">{{ 'mxk.groups.category' | i18n }}</th>
</tr>
</thead>
<tbody>
<tr *ngFor="let data of query.results.rows">
<td [nzChecked]="query.tableCheckedId.has(data.id)" [nzDisabled]="data.disabled"
(nzCheckedChange)="onTableItemChecked(data.id, $event)"></td>
<td
[nzChecked]="query.tableCheckedId.has(data.id)"
[nzDisabled]="data.disabled"
(nzCheckedChange)="onTableItemChecked(data.id, $event)"
></td>
<td nzAlign="left" style="display: none">
<span>{{ data.id }}</span>
</td>
<td nzAlign="left"> {{ data.roleName }}</td>
<td nzAlign="center" *ngIf="data.category == 'dynamic'"> {{ 'mxk.roles.category.dynamic' | i18n }}</td>
<td nzAlign="center" *ngIf="data.category == 'static'"> {{ 'mxk.roles.category.static' | i18n }}</td>
<td nzAlign="center" *ngIf="data.category == 'app'"> {{ 'mxk.roles.category.app' | i18n }}</td>
<td nzAlign="left"> {{ data.groupName }}</td>
<td nzAlign="center" *ngIf="data.category == 'dynamic'"> {{ 'mxk.groups.category.dynamic' | i18n }}</td>
<td nzAlign="center" *ngIf="data.category == 'static'"> {{ 'mxk.groups.category.static' | i18n }}</td>
<td nzAlign="center" *ngIf="data.category == 'app'"> {{ 'mxk.groups.category.app' | i18n }}</td>
</tr>
</tbody>
</nz-table>

View File

@ -162,13 +162,13 @@ export class MemberGroupsEditerComponent implements OnInit {
let selectedData = listOfEnabledData.filter(({ id, name }) => {
return this.query.tableCheckedId.has(id);
});
let roleIds = '';
let roleNames = '';
let groupIds = '';
let groupNames = '';
for (let i = 0; i < selectedData.length; i++) {
roleIds = `${roleIds},${selectedData[i].id}`;
roleNames = `${roleNames},${selectedData[i].name}`;
groupIds = `${groupIds},${selectedData[i].id}`;
groupNames = `${groupNames},${selectedData[i].name}`;
}
this.groupMembersService.addMember2Roles({ username: this.username, roleId: roleIds, roleName: roleNames }).subscribe(res => {
this.groupMembersService.addMember2Groups({ username: this.username, groupId: groupIds, groupName: groupNames }).subscribe(res => {
this.query.results = res.data;
this.query.submitLoading = false;
this.query.tableLoading = false;

View File

@ -7,18 +7,23 @@
<nz-form-item>
<nz-form-label nzFor="name">{{ 'mxk.users.username' | i18n }}</nz-form-label>
<nz-form-control>
<input nz-input [(ngModel)]="query.params.username" [ngModelOptions]="{ standalone: true }" name="username"
placeholder="" id="username" />
<input
nz-input
[(ngModel)]="query.params.username"
[ngModelOptions]="{ standalone: true }"
name="username"
placeholder=""
id="username"
/>
</nz-form-control>
</nz-form-item>
</div>
<div nz-col [nzSpan]="query.expandForm ? 24 : 8" [class.text-right]="query.expandForm">
<button nz-button type="submit" [nzType]="'primary'" [nzLoading]="query.submitLoading">{{ 'mxk.text.query' |
i18n }}</button>
<button nz-button type="reset" (click)="onReset()" class="mx-sm" style="display: none">{{ 'mxk.text.reset' |
i18n }}</button>
<button nz-button type="submit" [nzType]="'primary'" [nzLoading]="query.submitLoading">{{ 'mxk.text.query' | i18n }}</button>
<button nz-button type="reset" (click)="onReset()" class="mx-sm" style="display: none">{{ 'mxk.text.reset' | i18n }}</button>
<button nz-button (click)="query.expandForm = !query.expandForm" class="mx-sm" style="display: none">
{{ query.expandForm ? ('mxk.text.collapse' | i18n) : ('mxk.text.expand' | i18n) }}</button>
{{ query.expandForm ? ('mxk.text.collapse' | i18n) : ('mxk.text.expand' | i18n) }}</button
>
</div>
</div>
</form>
@ -37,8 +42,15 @@
</button>
</div>
<div nz-col [nzSpan]="6" class="grid-border">
<nz-tree nzShowLine="false" [nzCheckable]="treeNodes.checkable" nzBlockNode [nzData]="treeNodes.nodes"
(nzClick)="activeNode($event)" (nzDblClick)="openFolder($event)" [nzTreeTemplate]="nzTreeTemplate"></nz-tree>
<nz-tree
nzShowLine="false"
[nzCheckable]="treeNodes.checkable"
nzBlockNode
[nzData]="treeNodes.nodes"
(nzClick)="activeNode($event)"
(nzDblClick)="openFolder($event)"
[nzTreeTemplate]="nzTreeTemplate"
></nz-tree>
<ng-template #nzTreeTemplate let-node let-origin="origin">
<span class="custom-node">
<span *ngIf="!node.isLeaf" (contextmenu)="contextMenu($event, menu)">
@ -59,15 +71,26 @@
</nz-dropdown-menu>
</div>
<div nz-col nzMd="18" nzSm="24" class="grid-border">
<nz-table #dynamicTable nzTableLayout="auto" nzSize="small" nzBordered sizeChanger="true" nzShowSizeChanger
[nzData]="query.results.rows" [nzFrontPagination]="false" [nzTotal]="query.results.records"
[nzPageSizeOptions]="query.params.pageSizeOptions" [nzPageSize]="query.params.pageSize"
[nzPageIndex]="query.params.pageNumber" [nzLoading]="this.query.tableLoading"
(nzQueryParams)="onQueryParamsChange($event)" nzWidth="100%">
<nz-table
#dynamicTable
nzTableLayout="auto"
nzSize="small"
nzBordered
sizeChanger="true"
nzShowSizeChanger
[nzData]="query.results.rows"
[nzFrontPagination]="false"
[nzTotal]="query.results.records"
[nzPageSizeOptions]="query.params.pageSizeOptions"
[nzPageSize]="query.params.pageSize"
[nzPageIndex]="query.params.pageNumber"
[nzLoading]="this.query.tableLoading"
(nzQueryParams)="onQueryParamsChange($event)"
nzWidth="100%"
>
<thead>
<tr>
<th [nzChecked]="query.checked" [nzIndeterminate]="query.indeterminate"
(nzCheckedChange)="onTableAllChecked($event)"></th>
<th [nzChecked]="query.checked" [nzIndeterminate]="query.indeterminate" (nzCheckedChange)="onTableAllChecked($event)"></th>
<th nzAlign="center" style="display: none">{{ 'mxk.text.id' | i18n }}</th>
<th nzAlign="center">{{ 'mxk.users.username' | i18n }}</th>
<th nzAlign="center">{{ 'mxk.users.displayName' | i18n }}</th>
@ -81,8 +104,11 @@
</thead>
<tbody>
<tr *ngFor="let data of query.results.rows">
<td [nzChecked]="query.tableCheckedId.has(data.id)" [nzDisabled]="data.disabled"
(nzCheckedChange)="onTableItemChecked(data.id, $event)"></td>
<td
[nzChecked]="query.tableCheckedId.has(data.id)"
[nzDisabled]="data.disabled"
(nzCheckedChange)="onTableItemChecked(data.id, $event)"
></td>
<td nzAlign="left" style="display: none">
<span>{{ data.id }}</span>
</td>
@ -91,8 +117,7 @@
<td nzAlign="left"> {{ data.employeeNumber }}</td>
<td nzAlign="left"> {{ data.department }}</td>
<td nzAlign="left"> {{ data.jobTitle }}</td>
<td nzAlign="center"> {{ data.gender == 1 ? ('mxk.users.gender.female' | i18n) : ('mxk.users.gender.male' |
i18n) }}</td>
<td nzAlign="center"> {{ data.gender == 1 ? ('mxk.users.gender.female' | i18n) : ('mxk.users.gender.male' | i18n) }}</td>
<td nzAlign="center">
<a title="{{ 'mxk.users.status.active' | i18n }}" *ngIf="data.status == 1">
<i nz-icon nzType="check-circle" nzTheme="fill" style="color: green"> </i>
@ -125,15 +150,13 @@
</button>
<nz-dropdown-menu #menuMoreAction="nzDropdownMenu">
<ul nz-menu>
<li nz-menu-item *ngIf="data.status == 1"
(click)="onNavToUrl($event, data.id, data.username, 'roles')">{{
'mxk.text.roles' | i18n
<li nz-menu-item *ngIf="data.status == 1" (click)="onNavToUrl($event, data.id, data.username, 'groups')">{{
'mxk.text.groups' | i18n
}}</li>
<li nz-menu-item *ngIf="data.status == 1" (click)="changePasswordById($event, data.id)">{{
'mxk.text.changepassword' | i18n
}}</li>
<li nz-menu-item *ngIf="data.status == 1" (click)="onUpdateStatus($event, data.id, 5)">{{
'mxk.text.lock' | i18n }}</li>
<li nz-menu-item *ngIf="data.status == 1" (click)="onUpdateStatus($event, data.id, 5)">{{ 'mxk.text.lock' | i18n }}</li>
<li nz-menu-item *ngIf="data.status == 1" (click)="onUpdateStatus($event, data.id, 4)">{{
'mxk.text.disable' | i18n
}}</li>

View File

@ -221,8 +221,8 @@ export class UsersComponent implements OnInit {
onNavToUrl(e: MouseEvent, userId: String, username: String, navType: String) {
e.preventDefault();
if (navType === 'roles') {
this.router.navigateByUrl(`/access/rolemembers?username=${username}&userId=${userId}`);
if (navType === 'groups') {
this.router.navigateByUrl(`/idm/groupmembers?username=${username}&userId=${userId}`);
}
}

View File

@ -40,7 +40,7 @@ export class GroupMembersService extends BaseService<GroupMembers> {
});
}
addMember2Roles(body: any): Observable<Message<PageResults>> {
addMember2Groups(body: any): Observable<Message<PageResults>> {
return this.http.post<Message<PageResults>>(`${`${this.server.urls.base}/addMember2Groups`}`, body);
}
}

View File

@ -505,6 +505,28 @@
"suspendTime": "Suspend Time",
"isdefault": "Is Default"
},
"groups": {
"name": "Group Name",
"type": {
"":"Member Type",
"user":"User",
"user-dynamic":"User-Dynamic",
"post":"Post"
},
"member": "Member",
"permissions": "Permissions",
"category": {
"":"Category",
"dynamic":"Dynamic",
"static":"Static",
"app":"App"
},
"filters": "Attributes Filter",
"orgIdsList": "Dept List",
"resumeTime": "Join Time",
"suspendTime": "Suspend Time",
"isdefault": "Is Default"
},
"resources": {
"id": "ID",
"name": "Resource",

View File

@ -503,6 +503,28 @@
"suspendTime": "挂起时间",
"isdefault": "是否默认角色"
},
"groups": {
"name": "用户组名称",
"type": {
"":"成员类型",
"user":"用户",
"user-dynamic":"用户-动态",
"post":"岗位"
},
"member": "成员",
"permissions": "访问权限",
"category": {
"":"类型",
"dynamic":"动态",
"static":"静态",
"app":"应用"
},
"filters": "属性过滤器",
"orgIdsList": "部门列表",
"resumeTime": "加入时间",
"suspendTime": "挂起时间",
"isdefault": "是否默认角色"
},
"resources": {
"id": "资源编码",
"name": "资源名称",

View File

@ -504,6 +504,28 @@
"suspendTime": "掛起時間",
"isdefault": "是否默認角色"
},
"groups": {
"name": "用戶组名稱",
"type": {
"":"成員類型",
"user":"用戶",
"user-dynamic":"用戶-動態",
"post":"崗位"
},
"member": "成員",
"permissions": "存取控制",
"category": {
"":"類型",
"dynamic":"動態",
"static":"靜態",
"app":"應用"
},
"filters": "屬性過濾器",
"orgIdsList": "部門列表",
"resumeTime": "加入時間",
"suspendTime": "掛起時間",
"isdefault": "是否默認角色"
},
"resources": {
"id": "資源編碼",
"name": "資源名稱",

View File

@ -123,6 +123,7 @@ public class GroupMemberController {
groupMember.setType("USER");
}
for (int i = 0; i < arrMemberIds.length; i++) {
if(StringUtils.isNotBlank(arrMemberIds[i])) {
GroupMember newGroupMember =
new GroupMember(
groupId,
@ -134,6 +135,7 @@ public class GroupMemberController {
newGroupMember.setId(WebContext.genId());
result = service.insert(newGroupMember);
}
}
if(result) {
return new Message<GroupMember>(Message.SUCCESS).buildResponse();
}
@ -164,6 +166,7 @@ public class GroupMemberController {
String[] arrGroupNames = groupNames.split(",");
for (int i = 0; i < arrGroupIds.length; i++) {
if(StringUtils.isNotBlank(arrGroupIds[i])) {
GroupMember newGroupMember =
new GroupMember(
arrGroupIds[i],
@ -175,6 +178,7 @@ public class GroupMemberController {
newGroupMember.setId(WebContext.genId());
result = service.insert(newGroupMember);
}
}
if(result) {
return new Message<GroupMember>(Message.SUCCESS).buildResponse();
}