|
|
|
import { Component, OnInit, TemplateRef, ViewChild, ViewContainerRef } from '@angular/core';
|
|
|
|
import { FormBuilder, FormGroup, Validators } from '@angular/forms';
|
|
|
|
import { NzFormatEmitEvent, NzTreeComponent, NzTreeNodeOptions } from 'ng-zorro-antd/tree';
|
|
|
|
import { NzModalService } from 'ng-zorro-antd/modal';
|
|
|
|
import { AdduserComponent } from './adduser/adduser.component';
|
|
|
|
import { NzMessageService } from 'ng-zorro-antd/message';
|
|
|
|
import { HttpClient } from '@angular/common/http';
|
|
|
|
import { EdituserComponent } from './edituser/edituser.component';
|
|
|
|
import { TreeService } from 'src/app/service/tree.service';
|
|
|
|
import { NzNotificationService } from 'ng-zorro-antd/notification';
|
|
|
|
|
|
|
|
@Component({
|
|
|
|
selector: 'app-user',
|
|
|
|
templateUrl: './user.component.html',
|
|
|
|
styleUrls: ['./user.component.scss']
|
|
|
|
})
|
|
|
|
export class UserComponent implements OnInit {
|
|
|
|
|
|
|
|
@ViewChild('newPassword', { static: false }) newPasswordtemplate?: TemplateRef<{}>;
|
|
|
|
|
|
|
|
validateForm!: FormGroup;
|
|
|
|
constructor(private fb: FormBuilder, private modal: NzModalService, private viewContainerRef: ViewContainerRef, private message: NzMessageService, private http: HttpClient, private toTree: TreeService, private notification: NzNotificationService, private notificationService: NzNotificationService) { }
|
|
|
|
|
|
|
|
level
|
|
|
|
getAllUrl
|
|
|
|
addUrl
|
|
|
|
editUrl
|
|
|
|
deleteUrl
|
|
|
|
CountsByOrganizations
|
|
|
|
ngOnInit(): void {
|
|
|
|
this.validateForm = this.fb.group({
|
|
|
|
search: [null]
|
|
|
|
});
|
|
|
|
this.level = JSON.parse(sessionStorage.getItem("userdata")).organization.level
|
|
|
|
if (this.level == 1) {
|
|
|
|
this.getAllUrl = '/api/services/app/User/GetAll'
|
|
|
|
this.addUrl = '/api/services/app/User/Create'
|
|
|
|
this.editUrl = '/api/services/app/User/Update'
|
|
|
|
this.deleteUrl = '/api/services/app/User/Delete'
|
|
|
|
this.CountsByOrganizations = '/api/services/app/User/GetCountsByOrganizations'
|
|
|
|
} else {
|
|
|
|
this.getAllUrl = '/api/services/app/EdittingUser/GetAll'
|
|
|
|
this.addUrl = '/api/services/app/EdittingUser/Create'
|
|
|
|
this.editUrl = '/api/services/app/EdittingUser/Update'
|
|
|
|
this.deleteUrl = '/api/services/app/EdittingUser/Delete'
|
|
|
|
this.CountsByOrganizations = '/api/services/app/EdittingUser/GetCountsByOrganizations'
|
|
|
|
}
|
|
|
|
this.getAllOrganization()
|
|
|
|
this.getAllRoles()
|
|
|
|
this.getAllRoles2()
|
|
|
|
}
|
|
|
|
nzSelectedKeys: any[] = []
|
|
|
|
defaultExpandedKeys = [];
|
|
|
|
IsContainsChildren = true
|
|
|
|
searchValue = '';
|
|
|
|
totalCount: string
|
|
|
|
//获取所有用户
|
|
|
|
usersLIst: any = []
|
|
|
|
usersNum: string
|
|
|
|
OrganizationUnitId
|
|
|
|
loading: boolean;
|
|
|
|
organizationsList = []
|
|
|
|
getAllUsers() {
|
|
|
|
this.loading = true
|
|
|
|
let params = {
|
|
|
|
Keyword: this.validateForm.value.search ? this.validateForm.value.search : '',
|
|
|
|
SkipCount: String(this.SkipCount),
|
|
|
|
MaxResultCount: String(this.MaxResultCount),
|
|
|
|
OrganizationUnitId: this.OrganizationUnitId,
|
|
|
|
IsContainsChildren: String(this.IsContainsChildren),
|
|
|
|
// Sorting: 'BuildingBasicInfo.Id asc'
|
|
|
|
}
|
|
|
|
this.http.get(this.getAllUrl, {
|
|
|
|
params: params
|
|
|
|
}).subscribe((data: any) => {
|
|
|
|
this.usersLIst = data.result.items
|
|
|
|
this.usersNum = data.result.totalCount
|
|
|
|
console.log('所有用户', this.usersLIst)
|
|
|
|
this.loading = false
|
|
|
|
})
|
|
|
|
}
|
|
|
|
SkipCount: number = 0 //0 16 32 48
|
|
|
|
MaxResultCount: number = 16
|
|
|
|
pageChange($event) {
|
|
|
|
this.SkipCount = ($event - 1) * this.MaxResultCount
|
|
|
|
this.getAllUsers()
|
|
|
|
}
|
|
|
|
|
|
|
|
listOfData: any = []
|
|
|
|
listOfData2: any = []
|
|
|
|
//获取角色列表
|
|
|
|
async getAllRoles() {
|
|
|
|
let params = {
|
|
|
|
SkipCount: '0',
|
|
|
|
MaxResultCount: '999'
|
|
|
|
}
|
|
|
|
await new Promise<void>((resolve, reject) => {
|
|
|
|
this.http.get('/api/services/app/Role/GetAll', {
|
|
|
|
params: params
|
|
|
|
}).subscribe((data: any) => {
|
|
|
|
resolve(data)
|
|
|
|
this.listOfData = data.result.items
|
|
|
|
})
|
|
|
|
})
|
|
|
|
}
|
|
|
|
async getAllRoles2() {
|
|
|
|
let params = {
|
|
|
|
SkipCount: '0',
|
|
|
|
MaxResultCount: '999',
|
|
|
|
IsViolationRoles: 'true'
|
|
|
|
}
|
|
|
|
await new Promise<void>((resolve, reject) => {
|
|
|
|
this.http.get('/api/services/app/Role/GetAll', {
|
|
|
|
params: params
|
|
|
|
}).subscribe((data: any) => {
|
|
|
|
resolve(data)
|
|
|
|
this.listOfData2 = data.result.items
|
|
|
|
})
|
|
|
|
})
|
|
|
|
}
|
|
|
|
//获取所有组织机构
|
|
|
|
nodes: any = []
|
|
|
|
organization
|
|
|
|
async getAllOrganization() {
|
|
|
|
let OrganizationUnitId = sessionStorage.getItem('isGasStation') == 'true' ? JSON.parse(sessionStorage.getItem('userdataOfgasstation')).organization.id : JSON.parse(sessionStorage.getItem('userdata')).organization.id
|
|
|
|
let params = {
|
|
|
|
OrganizationUnitId: OrganizationUnitId,
|
|
|
|
IsContainsChildren: "true"
|
|
|
|
}
|
|
|
|
await new Promise<void>((resolve, reject) => {
|
|
|
|
this.http.get('/api/services/app/Organization/GetAll', {
|
|
|
|
params: params
|
|
|
|
}).subscribe(async (data: any) => {
|
|
|
|
this.organization = data.result.items
|
|
|
|
await this.getuser(data.result.items)
|
|
|
|
resolve(data)
|
|
|
|
this.getAllUsers()
|
|
|
|
})
|
|
|
|
})
|
|
|
|
}
|
|
|
|
async getuser(e) {
|
|
|
|
let OrganizationUnitId = sessionStorage.getItem('isGasStation') == 'true' ? JSON.parse(sessionStorage.getItem('userdataOfgasstation')).organization.id : JSON.parse(sessionStorage.getItem('userdata')).organization.id
|
|
|
|
let params = {
|
|
|
|
OrganizationUnitId: OrganizationUnitId,
|
|
|
|
IsContainsChildren: "true",
|
|
|
|
IsUsersCountContainsChildren: String(this.IsContainsChildren)
|
|
|
|
}
|
|
|
|
await new Promise<void>((resolve, reject) => {
|
|
|
|
this.http.get(this.CountsByOrganizations, {
|
|
|
|
params: params
|
|
|
|
}).subscribe((data: any) => {
|
|
|
|
resolve(data)
|
|
|
|
this.organizationsList = data.result
|
|
|
|
const arrs = e.map(item => {
|
|
|
|
const data = this.organizationsList.find(i => item.id == i.organizationId)
|
|
|
|
return {
|
|
|
|
...item,
|
|
|
|
products: data ? data : false
|
|
|
|
}
|
|
|
|
})
|
|
|
|
|
|
|
|
for (let index = 0; index < arrs.length; index++) {
|
|
|
|
if (arrs[index].id == OrganizationUnitId) {
|
|
|
|
arrs[index].parentId = null
|
|
|
|
}
|
|
|
|
arrs[index].title = arrs[index].displayName
|
|
|
|
arrs[index].key = arrs[index].id
|
|
|
|
}
|
|
|
|
|
|
|
|
this.nodes = [...this.toTree.toTree(arrs)]
|
|
|
|
this.defaultExpandedKeys = [this.nodes[0].id]
|
|
|
|
this.nzSelectedKeys = [this.nodes[0].id]
|
|
|
|
this.OrganizationUnitId = [this.nodes[0].id]
|
|
|
|
console.log(this.nodes, 9000);
|
|
|
|
})
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
//搜索框提交
|
|
|
|
submitForm(): void {
|
|
|
|
for (const i in this.validateForm.controls) {
|
|
|
|
this.validateForm.controls[i].markAsDirty();
|
|
|
|
this.validateForm.controls[i].updateValueAndValidity();
|
|
|
|
}
|
|
|
|
this.getAllUsers()
|
|
|
|
}
|
|
|
|
nzClick(event: NzFormatEmitEvent) {
|
|
|
|
console.log(event);
|
|
|
|
this.nzSelectedKeys[0] = event.node.origin.id
|
|
|
|
this.nzSelectedKeys = [...this.nzSelectedKeys]
|
|
|
|
this.OrganizationUnitId = event.node.origin.id
|
|
|
|
this.getAllUsers()
|
|
|
|
}
|
|
|
|
//新增用户
|
|
|
|
addUser(): void {
|
|
|
|
const modal = this.modal.create({
|
|
|
|
nzTitle: '新增用户',
|
|
|
|
nzContent: AdduserComponent,
|
|
|
|
nzViewContainerRef: this.viewContainerRef,
|
|
|
|
nzWidth: 460,
|
|
|
|
nzMaskClosable: false,
|
|
|
|
nzComponentParams: {
|
|
|
|
title: '',
|
|
|
|
subtitle: ''
|
|
|
|
},
|
|
|
|
nzOnOk: async () => {
|
|
|
|
if (instance.validateForm.valid) {
|
|
|
|
await new Promise(resolve => {
|
|
|
|
let roleNames = [...instance.validateForm.value.role, ...instance.validateForm.value.role2]
|
|
|
|
let body = {
|
|
|
|
userName: instance.validateForm.value.account,
|
|
|
|
name: instance.validateForm.value.name,
|
|
|
|
organizationUnitId: Number(instance.validateForm.value.organization),
|
|
|
|
roleNames: roleNames,
|
|
|
|
phoneNumber: instance.validateForm.value.phonenum,
|
|
|
|
isActive: true
|
|
|
|
}
|
|
|
|
this.http.post(this.addUrl, body).subscribe((data: any) => {
|
|
|
|
resolve(data)
|
|
|
|
this.message.create('success', '创建成功!');
|
|
|
|
this.SkipCount = 0
|
|
|
|
this.getAllUsers()
|
|
|
|
this.notification.blank(
|
|
|
|
'用户' + data.result.userName + '创建成功',
|
|
|
|
'当前密码为:' + data.result.newPassword,
|
|
|
|
{ nzDuration: 0, nzPlacement: 'top', nzClass: 'resetPassword' }
|
|
|
|
);
|
|
|
|
return true
|
|
|
|
}, err => {
|
|
|
|
resolve(err)
|
|
|
|
this.message.create('warning', err.error.error.message);
|
|
|
|
return false
|
|
|
|
})
|
|
|
|
})
|
|
|
|
} else {
|
|
|
|
this.message.create('warning', '请填写完整!');
|
|
|
|
return false
|
|
|
|
}
|
|
|
|
}
|
|
|
|
});
|
|
|
|
const instance = modal.getContentComponent();
|
|
|
|
modal.afterOpen.subscribe(() => console.log('[afterOpen] emitted!'));
|
|
|
|
modal.afterClose.subscribe(result => console.log('[afterClose] The result is:', result));
|
|
|
|
}
|
|
|
|
|
|
|
|
//编辑用户
|
|
|
|
editUser(data): void {
|
|
|
|
console.log(data)
|
|
|
|
const modal = this.modal.create({
|
|
|
|
nzTitle: '编辑用户',
|
|
|
|
nzContent: EdituserComponent,
|
|
|
|
nzViewContainerRef: this.viewContainerRef,
|
|
|
|
nzWidth: 460,
|
|
|
|
nzFooter: null,
|
|
|
|
nzMaskClosable: false,
|
|
|
|
nzComponentParams: {
|
|
|
|
data: data,
|
|
|
|
listOfData: this.listOfData,
|
|
|
|
listOfData2: this.listOfData2,
|
|
|
|
nodes: this.nodes,
|
|
|
|
editUrl: this.editUrl
|
|
|
|
}
|
|
|
|
});
|
|
|
|
const instance = modal.getContentComponent();
|
|
|
|
modal.afterClose.subscribe(result => this.getAllUsers());
|
|
|
|
}
|
|
|
|
|
|
|
|
//重置密码
|
|
|
|
isShowNewPassword: boolean
|
|
|
|
newPasswordObj: any
|
|
|
|
resetPassword(item) {
|
|
|
|
// console.log(item)
|
|
|
|
this.modal.confirm({
|
|
|
|
nzTitle: `确定要重置${item.userName}这个账户的密码吗?`,
|
|
|
|
nzOkText: '确定',
|
|
|
|
nzOkType: 'primary',
|
|
|
|
nzOnOk: () => {
|
|
|
|
let body = {
|
|
|
|
userId: item.id
|
|
|
|
}
|
|
|
|
this.http.post('/api/services/app/User/ResetPassword', body).subscribe((data: any) => {
|
|
|
|
this.isShowNewPassword = true
|
|
|
|
let obj = {
|
|
|
|
userName: item.userName,
|
|
|
|
newPassword: data.result.newPassword
|
|
|
|
}
|
|
|
|
this.newPasswordObj = obj
|
|
|
|
// this.openNewPassword(obj)
|
|
|
|
})
|
|
|
|
},
|
|
|
|
nzCancelText: '取消',
|
|
|
|
nzOnCancel: () => {
|
|
|
|
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
|
|
|
close() {
|
|
|
|
this.isShowNewPassword = false
|
|
|
|
}
|
|
|
|
openNewPassword(data) {
|
|
|
|
this.notificationService.template(this.newPasswordtemplate, { nzData: data, nzDuration: 0, nzPlacement: 'top', nzClass: 'resetPassword' });
|
|
|
|
}
|
|
|
|
|
|
|
|
handleCopyValue(text) {
|
|
|
|
//浏览器禁用了非安全域的 navigator.clipboard 对象
|
|
|
|
//在线上环境会报错 TypeError: Cannot read properties of undefined (reading 'writeText')
|
|
|
|
if (!navigator.clipboard && window.isSecureContext) {
|
|
|
|
return navigator.clipboard.writeText(text)
|
|
|
|
} else {
|
|
|
|
// 判断是否支持拷贝
|
|
|
|
if (!document.execCommand('copy')) return Promise.reject()
|
|
|
|
// 创建标签,并隐藏
|
|
|
|
const textArea = document.createElement('textarea')
|
|
|
|
textArea.style.position = 'fixed'
|
|
|
|
textArea.style.top = textArea.style.left = '-100vh'
|
|
|
|
textArea.style.opacity = '0'
|
|
|
|
textArea.value = text
|
|
|
|
document.body.appendChild(textArea)
|
|
|
|
// 聚焦、复制
|
|
|
|
textArea.focus()
|
|
|
|
textArea.select()
|
|
|
|
return new Promise((resolve, reject) => {
|
|
|
|
// 不知为何,必须写这个三目,不然copy不上
|
|
|
|
document.execCommand('copy') ? resolve(0) : reject()
|
|
|
|
textArea.remove()
|
|
|
|
})
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
copy() {
|
|
|
|
this.handleCopyValue(this.newPasswordObj.newPassword)
|
|
|
|
.then(() => {
|
|
|
|
this.message.create('success', '复制成功!');
|
|
|
|
})
|
|
|
|
.catch(() => {
|
|
|
|
this.message.create('success', '自动复制失败,请手动复制!');
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//提交审核
|
|
|
|
audit(data, type) {
|
|
|
|
if (type && data.auditStatus == 5) {//提交审核
|
|
|
|
this.message.create('warning', '审核完成的不能重复提交,请编辑后提交');
|
|
|
|
return
|
|
|
|
}
|
|
|
|
let url
|
|
|
|
type ? url = '/api/services/app/EdittingUser/Commit' : url = '/api/services/app/EdittingUser/Uncommit'
|
|
|
|
this.http.post(url, '', {
|
|
|
|
params: {
|
|
|
|
id: data.id
|
|
|
|
}
|
|
|
|
}).subscribe(data => {
|
|
|
|
this.message.create('success', type ? '提交审核成功' : '撤销审核成功');
|
|
|
|
this.getAllUsers()
|
|
|
|
}, err => {
|
|
|
|
this.message.create('error', type ? '提交审核失败' : '撤销审核失败');
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
//停用启用
|
|
|
|
cancel(data, type) {
|
|
|
|
let url
|
|
|
|
if (this.level == 1) {
|
|
|
|
type ? url = '/api/services/app/User/Activate' : url = '/api/services/app/User/DeActivate'
|
|
|
|
|
|
|
|
} else {
|
|
|
|
type ? url = '/api/services/app/EdittingUser/Activate' : url = '/api/services/app/EdittingUser/DeActivate'
|
|
|
|
}
|
|
|
|
let body = {
|
|
|
|
id: data.id
|
|
|
|
}
|
|
|
|
this.http.post(url, body).subscribe(data => {
|
|
|
|
this.message.create('success', type ? '启用成功' : '停用成功');
|
|
|
|
this.getAllUsers()
|
|
|
|
}, err => {
|
|
|
|
this.message.create('error', type ? '启用失败' : '停用失败');
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//删除
|
|
|
|
delete(item) {
|
|
|
|
this.modal.confirm({
|
|
|
|
nzTitle: `确定要注销${item.userName}这个账户吗?`,
|
|
|
|
nzOkText: '确定',
|
|
|
|
nzOkType: 'primary',
|
|
|
|
nzOnOk: () => {
|
|
|
|
this.http.delete(this.deleteUrl, {
|
|
|
|
params: {
|
|
|
|
Id: item.id
|
|
|
|
}
|
|
|
|
}).subscribe(data => {
|
|
|
|
this.message.create('success', '注销成功!');
|
|
|
|
this.getAllUsers()
|
|
|
|
})
|
|
|
|
},
|
|
|
|
nzCancelText: '取消',
|
|
|
|
nzOnCancel: () => {
|
|
|
|
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
|
|
|
}
|