Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop
This commit is contained in:
@ -1,10 +1,10 @@
|
||||
<nz-card [nzLoading]="loadingInfo" [nzBordered]="false">
|
||||
<se-container se-container="1">
|
||||
<se label="接口权限" required [labelWidth]="120">
|
||||
<app-cuc-menu #menu (changeData)="getData($event)" [type]="'edit'"
|
||||
<app-menu-tree #menu (changeData)="getData($event)" [type]="'edit'"
|
||||
[roleId]="params.id" [appId]="params.appId" [isAuthorityIdDTOList]="roleInfoData.authority || []"
|
||||
[authorityAssistId]="roleInfoData.authorityAssistId || []" (changeIF)="changeIF($event)">
|
||||
</app-cuc-menu>
|
||||
</app-menu-tree>
|
||||
</se>
|
||||
</se-container>
|
||||
</nz-card>
|
||||
|
||||
@ -0,0 +1,23 @@
|
||||
<div class="treeWrap">
|
||||
<div class="leftBox">
|
||||
<nz-tree #nzTreeComponent [nzData]="functionList" (nzClick)="nzEvent($event)" nzCheckable
|
||||
[nzCheckedKeys]="authorityAssistId" [nzExpandedKeys]="defaultExpandedKeys" style="max-height: 600px;
|
||||
overflow: auto;">
|
||||
</nz-tree>
|
||||
</div>
|
||||
<div class="rightBox">
|
||||
<nz-tabset [nzSize]="'small'">
|
||||
<nz-tab nzTitle="操作权限">
|
||||
<div *ngIf="origin.buttonInfoList && origin.buttonInfoList.length">
|
||||
<label style="width: 100%" nz-checkbox [(ngModel)]="item.checked"
|
||||
*ngFor="let item of origin.buttonInfoList" (ngModelChange)="addAuthority(origin, node, item)"
|
||||
[disabled]="source === 'onlyAuth'">{{
|
||||
item.permissionsName }}</label>
|
||||
</div>
|
||||
<nz-empty nzNotFoundImage="simple" *ngIf="origin.buttonInfoList && origin.buttonInfoList.length === 0">
|
||||
</nz-empty>
|
||||
</nz-tab>
|
||||
</nz-tabset>
|
||||
</div>
|
||||
</div>
|
||||
<nz-empty nzNotFoundImage="simple" *ngIf="functionList.length === 0"></nz-empty>
|
||||
@ -0,0 +1,211 @@
|
||||
:host {
|
||||
.toolbar-btn {
|
||||
padding-left: 0;
|
||||
}
|
||||
|
||||
::ng-deep {
|
||||
.ant-checkbox-wrapper+.ant-checkbox-wrapper {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.listDiv {
|
||||
cdk-virtual-scroll-viewport {
|
||||
border: 1px solid rgba(242, 242, 240, 1);
|
||||
}
|
||||
|
||||
.selectedItem {
|
||||
background: #e6f7ff;
|
||||
|
||||
span {
|
||||
a {
|
||||
color: rgba(212, 72, 86, 1);
|
||||
}
|
||||
}
|
||||
|
||||
ul>li>a>i {
|
||||
color: rgba(212, 72, 86, 1);
|
||||
}
|
||||
}
|
||||
|
||||
.listBottom {
|
||||
height : 2.5rem;
|
||||
overflow : hidden;
|
||||
text-align : center;
|
||||
background-color: rgba(245, 245, 245, 0.7);
|
||||
|
||||
&:hover {
|
||||
background-color: rgba(245, 245, 245, 1);
|
||||
transition : all 1s;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.ant-tabs-nav {
|
||||
width : 100%;
|
||||
margin: 0 !important;
|
||||
}
|
||||
|
||||
.buttons {
|
||||
padding: 0;
|
||||
|
||||
button {
|
||||
display : block;
|
||||
max-width: 10rem;
|
||||
margin : 0.3rem 0.5rem 0 0;
|
||||
}
|
||||
|
||||
.ant-btn+.ant-btn:not(.ant-btn-link),
|
||||
.ant-btn+nz-popconfirm,
|
||||
nz-popconfirm+.ant-btn,
|
||||
nz-popconfirm+nz-popconfirm,
|
||||
.ant-btn+nz-button-group,
|
||||
nz-button-group+.ant-btn,
|
||||
.ant-btn+nz-dropdown,
|
||||
nz-dropdown+.ant-btn,
|
||||
nz-popconfirm+nz-button-group,
|
||||
nz-button-group+nz-popconfirm {
|
||||
margin-left: 0;
|
||||
}
|
||||
}
|
||||
|
||||
.ant-tabs-bar {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
// .ant-tree-node-selected {
|
||||
// background: none !important;
|
||||
// }
|
||||
// .ant-tree-node-content-wrapper:hover {
|
||||
// background: none;
|
||||
// }
|
||||
.ant-tree-node-content-wrapper {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.ant-tabs .ant-tabs-tabpane {
|
||||
padding : 10px 10px 2px 10px;
|
||||
background : #fdfdfd;
|
||||
border-right : solid 1px #eee;
|
||||
border-bottom: solid 1px #eee;
|
||||
border-left : solid 1px #eee;
|
||||
}
|
||||
|
||||
// .ant-tabs-tab {
|
||||
// width: 50%;
|
||||
// text-align: center;
|
||||
// }
|
||||
// .ant-tabs-tab-arrow-show {
|
||||
// display: none;
|
||||
// }
|
||||
ul {
|
||||
margin : 0;
|
||||
padding: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.firstStepBox {
|
||||
width : 100%;
|
||||
line-height: 50px;
|
||||
text-align : center;
|
||||
background : #f7f7f7;
|
||||
}
|
||||
|
||||
.itemBox {
|
||||
width : 100%;
|
||||
height : 50px;
|
||||
padding : 0 0 0 60px;
|
||||
color : #5f5f5f;
|
||||
line-height: 50px;
|
||||
cursor : pointer;
|
||||
|
||||
&:hover {
|
||||
background: #e6f7ff;
|
||||
}
|
||||
}
|
||||
|
||||
.twoStepBox {
|
||||
width : 100%;
|
||||
line-height: 50px;
|
||||
text-align : center;
|
||||
background : #f7f7f7;
|
||||
|
||||
span {
|
||||
display: inline-block;
|
||||
margin : 0 auto;
|
||||
}
|
||||
|
||||
>i {
|
||||
float : right;
|
||||
margin: 20px 20px 0 0;
|
||||
}
|
||||
|
||||
button {
|
||||
float : right;
|
||||
margin: 8px 20px 0 0;
|
||||
}
|
||||
|
||||
.blueFont {
|
||||
color: #1890ff;
|
||||
}
|
||||
}
|
||||
|
||||
.folder-desc i {
|
||||
margin: 0 5px;
|
||||
}
|
||||
|
||||
.flexBox {
|
||||
.titleBox {
|
||||
display : flex;
|
||||
justify-content: space-between;
|
||||
|
||||
i {
|
||||
margin: 0 8px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ul {
|
||||
display: block;
|
||||
}
|
||||
|
||||
li {
|
||||
line-height: 30px;
|
||||
list-style : none;
|
||||
}
|
||||
|
||||
.dictData {
|
||||
dl {
|
||||
margin : 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
dt {
|
||||
margin : 0 0 5px 0;
|
||||
padding : 3px 0;
|
||||
color : #999;
|
||||
font-weight : normal;
|
||||
font-size : 13px;
|
||||
border-bottom: solid 1px #eee;
|
||||
}
|
||||
}
|
||||
|
||||
label {
|
||||
color : #666;
|
||||
font-size: 13px;
|
||||
}
|
||||
|
||||
.treeWrap {
|
||||
display: flex;
|
||||
width : 700px;
|
||||
|
||||
.leftBox {
|
||||
width : 40%;
|
||||
// border-right: solid 1px #eee;
|
||||
}
|
||||
|
||||
.rightBox {
|
||||
width : 60%;
|
||||
padding: 0 0 0 20px;
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,413 @@
|
||||
import { ChangeDetectorRef, Component, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges, ViewChild } from '@angular/core';
|
||||
import { EAEnvironmentService } from '@shared';
|
||||
import { NzTreeComponent } from 'ng-zorro-antd/tree';
|
||||
import { SystemService } from '../../../services/system.service';
|
||||
|
||||
@Component({
|
||||
selector: 'app-menu-tree',
|
||||
templateUrl: './menu-tree.component.html',
|
||||
styleUrls: ['./menu-tree.component.less']
|
||||
})
|
||||
export class MenuTreeComponent implements OnInit, OnChanges {
|
||||
@ViewChild('nzTreeComponent', { static: false }) nzTreeComponent!: NzTreeComponent;
|
||||
origin: any = { buttonInfoList: [], dictList: [] };
|
||||
node: any = {};
|
||||
authority: any[] = [];
|
||||
defaultSelectedKeys: any[] = [];
|
||||
defaultExpandedKeys: any[] = [];
|
||||
defaultCheckedKeys: any[] = [];
|
||||
functionList: any[] = [];
|
||||
allChecked = false;
|
||||
indeterminate = true;
|
||||
@Input() type = 'edit';
|
||||
@Input() source = '';
|
||||
@Input() appId = this.envSrv.env.appId;
|
||||
@Input() isAuthorityIdDTOList: any[] = [];
|
||||
@Input() authorityAssistId: any[] = [];
|
||||
@Input() roleId: any;
|
||||
@Output() changeData = new EventEmitter<any>();
|
||||
constructor(public service: SystemService, private cdr: ChangeDetectorRef, private envSrv: EAEnvironmentService) {}
|
||||
ngOnChanges(changes: SimpleChanges): void {
|
||||
if (changes.isAuthorityIdDTOList) {
|
||||
if (this.type === 'edit') {
|
||||
this.authority = this.isAuthorityIdDTOList || [];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ngOnInit() {
|
||||
this.getAllFunction();
|
||||
}
|
||||
getAllFunction() {
|
||||
this.service
|
||||
.request(this.service.$api_getAllFunctionInfoByAppId, { appId: this.appId || this.envSrv.env.appId }, 'POST', true, 'FORM')
|
||||
.subscribe(res => {
|
||||
this.functionList = res;
|
||||
this.authorityAssistId = [...this.authorityAssistId];
|
||||
this.cdr.detectChanges();
|
||||
});
|
||||
}
|
||||
|
||||
addAuthority(origin: { id: any; all: any }, node: { buttonInfoList: any[] }, item?: { checked: any; functionButtonId: any }) {
|
||||
console.log(origin, node);
|
||||
|
||||
if (this.authority?.length && this.authority.filter(authItem => authItem.authorityId === origin.id).length) {
|
||||
// 判断此菜单权限是否已经存在权限列表中
|
||||
// 当前操作菜单id存在权限列表里
|
||||
this.authority.forEach(menuItem => {
|
||||
console.log(menuItem);
|
||||
console.log(item);
|
||||
|
||||
if (menuItem.authorityId === origin.id) {
|
||||
menuItem.buttonAuthorityIds = menuItem.buttonAuthorityIds || []; // 防止属性不存在,给属性指定数据类型
|
||||
if (item) {
|
||||
// 单选
|
||||
if (item.checked) {
|
||||
if (menuItem.buttonAuthorityIds.indexOf(item.functionButtonId) === -1) {
|
||||
// 如果该按钮在数据权限数组中不存在
|
||||
menuItem.buttonAuthorityIds.push(item.functionButtonId);
|
||||
}
|
||||
} else {
|
||||
if (menuItem.buttonAuthorityIds && menuItem.buttonAuthorityIds.length) {
|
||||
menuItem.buttonAuthorityIds.forEach((btnItem: any, index: any) => {
|
||||
if (btnItem === item.functionButtonId) {
|
||||
menuItem.buttonAuthorityIds.splice(index, 1);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// 全选
|
||||
if (origin.all) {
|
||||
node.buttonInfoList.forEach((nodeItem: { id: any; checked: boolean }) => {
|
||||
if (menuItem.buttonAuthorityIds.indexOf(nodeItem.id) === -1) {
|
||||
menuItem.buttonAuthorityIds.push(nodeItem.id);
|
||||
nodeItem.checked = true;
|
||||
}
|
||||
});
|
||||
} else {
|
||||
if (menuItem.buttonAuthorityIds && menuItem.buttonAuthorityIds.length) {
|
||||
menuItem.buttonAuthorityIds = [];
|
||||
node.buttonInfoList.forEach((nodeItem: { checked: boolean }) => {
|
||||
nodeItem.checked = false;
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
} else {
|
||||
// 数组为空的时候
|
||||
const buttonAuthorityIds = [];
|
||||
if (item) {
|
||||
// 全选
|
||||
buttonAuthorityIds.push(item.functionButtonId);
|
||||
} else {
|
||||
node.buttonInfoList.forEach((nodeItem: { id: any; checked: boolean; _isHalfChecked: boolean }) => {
|
||||
if (origin.all) {
|
||||
buttonAuthorityIds.push(nodeItem.id);
|
||||
nodeItem.checked = true;
|
||||
}
|
||||
});
|
||||
}
|
||||
const obj: any = {
|
||||
authorityId: origin.id,
|
||||
buttonAuthorityIds
|
||||
};
|
||||
this.authority.push(obj);
|
||||
}
|
||||
this.checkTreeNode(node, origin);
|
||||
}
|
||||
|
||||
addDict(item: { checked: any; itemId: any; itemKey: any }, dictItem: { dictId: any }, origin: { id: any }, node: any) {
|
||||
if (this.authority.length) {
|
||||
// 判断此菜单权限是否已经存在权限列表中
|
||||
if (this.authority.filter(authItem => authItem.authorityId === origin.id).length) {
|
||||
// 当前操作菜单id存在权限列表里
|
||||
this.authority.forEach((menuItem, menuIndex) => {
|
||||
if (menuItem.authorityId === origin.id) {
|
||||
menuItem.dataAuthority = menuItem.dataAuthority || []; // 防止属性不存在,给属性指定数据类型
|
||||
if (item.checked) {
|
||||
if (menuItem.dataAuthority.filter((ele: { dictItemId: any }) => ele.dictItemId === item.itemId).length === 0) {
|
||||
// 如果该按钮在数据权限数组中不存在
|
||||
menuItem.dataAuthority.push({ dictItemId: item.itemId, itemKey: item.itemKey, dictId: dictItem.dictId });
|
||||
}
|
||||
} else {
|
||||
if (menuItem.dataAuthority && menuItem.dataAuthority.length) {
|
||||
menuItem.dataAuthority.forEach((btnItem: { dictItemId: any }, index: any) => {
|
||||
if (btnItem.dictItemId === item.itemId) {
|
||||
menuItem.dataAuthority.splice(index, 1);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
} else {
|
||||
// 当前操作菜单id不存在权限列表里
|
||||
const dataAuthority = [];
|
||||
dataAuthority.push({ dictItemId: item.itemId, itemKey: item.itemKey, dictId: dictItem.dictId });
|
||||
const obj: any = {
|
||||
authorityId: origin.id,
|
||||
dataAuthority
|
||||
};
|
||||
this.authority.push(obj);
|
||||
}
|
||||
} else {
|
||||
// 数组为空的时候
|
||||
const dataAuthority = [];
|
||||
dataAuthority.push({ dictItemId: item.itemId, itemKey: item.itemKey, dictId: dictItem.dictId });
|
||||
const obj: any = {
|
||||
authorityId: origin.id,
|
||||
dataAuthority
|
||||
};
|
||||
this.authority.push(obj);
|
||||
}
|
||||
this.checkTreeNode(node, origin);
|
||||
}
|
||||
|
||||
checkTreeNode(node: any, origin: { id: any }) {
|
||||
const checkedNode: any = this.nzTreeComponent.getCheckedNodeList();
|
||||
const allCheckedArr: any[] = [];
|
||||
this.overTree(checkedNode, allCheckedArr);
|
||||
this.authority.forEach(authItem => {
|
||||
if (authItem.authorityId === origin.id) {
|
||||
if (
|
||||
(authItem.buttonAuthorityIds && authItem.buttonAuthorityIds.length) ||
|
||||
(authItem.dataAuthority && authItem.dataAuthority.length)
|
||||
) {
|
||||
if (allCheckedArr.indexOf(node.key) === -1) {
|
||||
allCheckedArr.push(node.key);
|
||||
}
|
||||
} else {
|
||||
if (allCheckedArr.indexOf(node.key) !== -1) {
|
||||
allCheckedArr.forEach((ele, index) => {
|
||||
if (ele === origin.id) {
|
||||
allCheckedArr.splice(index, 1);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
this.defaultCheckedKeys = allCheckedArr;
|
||||
}
|
||||
|
||||
overTree(children: any[], a: any[]) {
|
||||
children.forEach(item => {
|
||||
a.push(item.key);
|
||||
if (item.isLeaf) {
|
||||
return;
|
||||
}
|
||||
if (item.children && item.children.length) {
|
||||
this.overTree(item.children, a);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
addDisabledTree(arr: any[]) {
|
||||
arr.forEach((item: any) => {
|
||||
item.disableCheckbox = true;
|
||||
if (item.isLeaf) {
|
||||
return;
|
||||
}
|
||||
if (item.children && item.children.length) {
|
||||
this.addDisabledTree(item.children);
|
||||
}
|
||||
});
|
||||
}
|
||||
addDisabledLeafTree(arr: any[]) {
|
||||
arr.forEach((item: any) => {
|
||||
if (item.isLeaf) {
|
||||
return;
|
||||
}
|
||||
item.disableCheckbox = true;
|
||||
if (item.children && item.children.length) {
|
||||
this.addDisabledLeafTree(item.children);
|
||||
}
|
||||
});
|
||||
}
|
||||
nzEvent(event: any): void {
|
||||
this.origin = event.node.origin;
|
||||
this.node = event.node.origin;
|
||||
if (!event.node.origin.isLeaf) {
|
||||
event.node.isExpanded = !event.node.isExpanded;
|
||||
} else {
|
||||
this.initButtonList(event.node.key, event.node.origin);
|
||||
// this.initDictList(event.node.key, event.node.origin);
|
||||
}
|
||||
}
|
||||
|
||||
washTree() {
|
||||
const authorityMenu: any[] = []; // this.authority
|
||||
const tempAuthorityIdDTOListMenu: any[] = [];
|
||||
const checkedNode: any = this.nzTreeComponent.getCheckedNodeList();
|
||||
const halfCheckedNode: any = this.nzTreeComponent.getHalfCheckedNodeList();
|
||||
this.authorityAssistId = [];
|
||||
halfCheckedNode.forEach((item: { key: any }) => {
|
||||
authorityMenu.push({ authorityId: item.key, isUpdateAuthority: 0 });
|
||||
tempAuthorityIdDTOListMenu.push(item.key);
|
||||
});
|
||||
this.overWashTree(checkedNode, tempAuthorityIdDTOListMenu, authorityMenu);
|
||||
if (this.authority && this.authority.length) {
|
||||
this.authority.forEach(item => {
|
||||
item.isUpdateAuthority = 1;
|
||||
if (tempAuthorityIdDTOListMenu.indexOf(item.authorityId) !== -1) {
|
||||
tempAuthorityIdDTOListMenu.forEach((oldItem, oldIndex) => {
|
||||
if (oldItem === item.authorityId) {
|
||||
authorityMenu[oldIndex] = item;
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
const result = {
|
||||
authority: authorityMenu,
|
||||
authorityAssistId: this.authorityAssistId
|
||||
};
|
||||
this.changeData.emit(result);
|
||||
return result;
|
||||
}
|
||||
overWashTree(children: any[], tempAuthorityIdDTOListMenu: any[], authorityMenu: any[]) {
|
||||
children.forEach((item: any) => {
|
||||
this.authorityAssistId.push(item.key);
|
||||
tempAuthorityIdDTOListMenu.push(item.key);
|
||||
authorityMenu.push({ authorityId: item.key, isUpdateAuthority: 1 });
|
||||
if (item.isLeaf) {
|
||||
return;
|
||||
}
|
||||
if (item.children) {
|
||||
this.overWashTree(item.children, tempAuthorityIdDTOListMenu, authorityMenu);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
initButtonList(id: any, origin: any) {
|
||||
if (origin.expanded) {
|
||||
origin.children.forEach((item: any, index: number) => {
|
||||
if (item.selected) {
|
||||
if (origin.checked) {
|
||||
this.authority.splice(index, 1);
|
||||
const buttonAuthorityIds: any = [];
|
||||
item.buttonInfoList.forEach((btnItem: any) => {
|
||||
btnItem.checked = true;
|
||||
buttonAuthorityIds.push(btnItem.functionButtonId);
|
||||
});
|
||||
this.authority.push({ authorityId: origin.key, buttonAuthorityIds, isUpdateAuthority: 1 });
|
||||
} else {
|
||||
this.authority.splice(index, 1);
|
||||
item.buttonInfoList.forEach((btnItem: any) => {
|
||||
btnItem.checked = false;
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
const params = {
|
||||
id
|
||||
};
|
||||
this.service.request(this.service.$api_getFunctionButtonInfo, params).subscribe(res => {
|
||||
if (res) {
|
||||
origin.buttonInfoList = res;
|
||||
origin.all = false;
|
||||
console.log(origin);
|
||||
|
||||
// 判断此菜单下是否已有此按钮权限
|
||||
this.againGetBtn(id, origin);
|
||||
}
|
||||
});
|
||||
}
|
||||
// 再次请求,需要判断暂存权限数组是否已有此权限
|
||||
againGetBtn(id: any, origin: any) {
|
||||
if (this.authority && this.authority.length === 0) {
|
||||
const buttonAuthorityIds: any = [];
|
||||
if (origin.checked) {
|
||||
origin.buttonInfoList.forEach((btnItem: { functionButtonId: any; checked: boolean }) => {
|
||||
btnItem.checked = true;
|
||||
buttonAuthorityIds.push(btnItem.functionButtonId);
|
||||
});
|
||||
this.authority.push({ authorityId: origin.key, buttonAuthorityIds, isUpdateAuthority: 1 });
|
||||
}
|
||||
} else {
|
||||
if (origin.checked) {
|
||||
//菜单勾选情况下
|
||||
if (this.authority.some(item => item.authorityId === id)) {
|
||||
this.authority.forEach(item => {
|
||||
if (item.authorityId === id) {
|
||||
// 如果当前菜单Id存在权限列表里,并且等于暂存权限数组的Id
|
||||
if (item.buttonAuthorityIds && item.buttonAuthorityIds.length) {
|
||||
// 如果当前菜单Id权限数组不为空
|
||||
origin.buttonInfoList.forEach((btnItem: { functionButtonId: any; checked: boolean }) => {
|
||||
// 判断已有权限id是否存在
|
||||
if (item.buttonAuthorityIds.indexOf(btnItem.functionButtonId) !== -1) {
|
||||
btnItem.checked = true;
|
||||
} else {
|
||||
btnItem.checked = false;
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
} else {
|
||||
this.authority.push({ authorityId: origin.key, buttonAuthorityIds: [], isUpdateAuthority: 1 });
|
||||
this.authority.forEach(item => {
|
||||
origin.buttonInfoList.forEach((btnItem: { functionButtonId: any; checked: boolean }) => {
|
||||
btnItem.checked = true;
|
||||
item.buttonAuthorityIds.push(btnItem.functionButtonId);
|
||||
});
|
||||
});
|
||||
}
|
||||
} else {
|
||||
// 菜单未勾选,要删除权限
|
||||
this.authority.forEach((item, index) => {
|
||||
if (item.authorityId === id) {
|
||||
// 如果当前菜单Id存在权限列表里,并且等于暂存权限数组的Id
|
||||
this.authority.splice(index, 1);
|
||||
origin.buttonInfoList.forEach((btnItem: { functionButtonId: any; checked: boolean }) => {
|
||||
btnItem.checked = false;
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
initDictList(id: any, origin: any) {
|
||||
const params = {
|
||||
id
|
||||
};
|
||||
this.service.request(this.service.$api_getFunctionDataInfo, params).subscribe(res => {
|
||||
if (res) {
|
||||
origin.dictList = res;
|
||||
// 判断此菜单下是否已有此按钮权限
|
||||
this.againGetDict(id, origin);
|
||||
}
|
||||
});
|
||||
}
|
||||
// 再次请求,需要判断暂存权限数组是否已有此权限
|
||||
againGetDict(id: any, origin: any) {
|
||||
if (this.authority.length === 0) {
|
||||
return;
|
||||
}
|
||||
this.authority.forEach(item => {
|
||||
if (item.authorityId === id) {
|
||||
// 如果当前菜单Id等于暂存权限数组的Id
|
||||
if (item.dataAuthority && item.dataAuthority.length) {
|
||||
// 如果当前菜单Id权限数组不为空
|
||||
origin.dictList.forEach((ele: { dictItem: any[] }) => {
|
||||
// 判断已有权限id是否存在
|
||||
ele.dictItem.forEach((dictItem: { itemId: any; checked: boolean; cheked: boolean }) => {
|
||||
item.dataAuthority.forEach((dataItem: { dictItemId: any }) => {
|
||||
if (dataItem.dictItemId === dictItem.itemId) {
|
||||
dictItem.checked = true;
|
||||
} else {
|
||||
dictItem.cheked = false;
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
@ -37,6 +37,7 @@ import { SmsTemplateComponent } from './components/sms-template/sms-template.com
|
||||
import { OrganizationManagementComponent } from './components/organization-management/organization-management.component';
|
||||
import { OrganizationModalComponent } from './components/organization-management/organization-modal/organization-modal.component';
|
||||
import { ApiAuthModalComponent } from './components/organization-management/api-auth-modal/api-auth-modal.component';
|
||||
import { MenuTreeComponent } from './components/organization-management/menu-tree/menu-tree.component';
|
||||
|
||||
const COMPONENTS = [
|
||||
StaffManagementComponent,
|
||||
@ -66,10 +67,12 @@ const NOTROUTECOMPONENTS = [
|
||||
CartConfigActionModalComponent,
|
||||
SettingRoleEditComponent,
|
||||
SettingMenuComponent,
|
||||
OrganizationModalComponent
|
||||
OrganizationModalComponent,
|
||||
ApiAuthModalComponent,
|
||||
MenuTreeComponent
|
||||
];
|
||||
@NgModule({
|
||||
declarations: [...COMPONENTS, ...NOTROUTECOMPONENTS, ApiAuthModalComponent],
|
||||
declarations: [...COMPONENTS, ...NOTROUTECOMPONENTS],
|
||||
imports: [CommonModule, SysSettingRoutingModule, SharedModule, DynamicSettingModule]
|
||||
})
|
||||
export class SysSettingModule {}
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
<!--
|
||||
* @Description :
|
||||
* @Description :
|
||||
* @Version : 1.0
|
||||
* @Author : Shiming
|
||||
* @Date : 2022-01-12 10:52:50
|
||||
@ -33,7 +33,7 @@
|
||||
</div>
|
||||
</div>
|
||||
</nz-card>
|
||||
<nz-card [nzExtra]="extraTemplate" >
|
||||
<nz-card [nzExtra]="extraTemplate">
|
||||
<!-- 数据列表 -->
|
||||
<!-- [data]="service.$api_get_supplier_page" -->
|
||||
|
||||
@ -58,11 +58,13 @@
|
||||
{{ item.contacter }}<br>/{{item.mobile}}
|
||||
</ng-template>
|
||||
<ng-template st-row="partnerName" let-item let-index="index">
|
||||
{{ item.partnerName }}<br>/{{item.promotersTelephone}}
|
||||
{{ item.partnerName }}<br>/{{item.partnerMobile}}
|
||||
</ng-template>
|
||||
<ng-template st-row="promotersTelephone" let-item let-index="index">
|
||||
<a acl [acl-ability]="['USERCENTER-FREIGHT-LIST-salesman']" (click)="addPromoter(item)">{{ item.promotersTelephone
|
||||
|| '添加' }}</a>
|
||||
<!-- <a acl [acl-ability]="['USERCENTER-FREIGHT-LIST-salesman']" (click)="addPromoter(item)">{{ item.channelName
|
||||
}}<br>{{ item.channelMobile
|
||||
|| '添加' }}</a> -->
|
||||
{{ item.channelName }}<br>{{ item.channelMobile }}
|
||||
</ng-template>
|
||||
</st>
|
||||
</nz-card>
|
||||
@ -78,7 +80,9 @@
|
||||
</ng-template>
|
||||
<ng-template #extraTemplate>
|
||||
<div>
|
||||
<button nz-button nzType="primary" (click)="editPartner()" acl [acl-ability]="['ORDER-RISK-batchAudit']"> 修改合伙人 </button>
|
||||
<button nz-button nzType="primary" (click)="editSale()" acl [acl-ability]="['ORDER-RISK-batchAudit']"> 修改渠道销售 </button>
|
||||
<button nz-button nzType="primary" (click)="editPartner()" acl [acl-ability]="['ORDER-RISK-batchAudit']"> 修改合伙人
|
||||
</button>
|
||||
<button nz-button nzType="primary" (click)="editSale()" acl [acl-ability]="['ORDER-RISK-batchAudit']"> 修改渠道销售
|
||||
</button>
|
||||
</div>
|
||||
</ng-template>
|
||||
</ng-template>
|
||||
|
||||
Reference in New Issue
Block a user