You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
498 lines
14 KiB
498 lines
14 KiB
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, |
|
note: instance.validateForm.value.note, |
|
isActive: true, |
|
}; |
|
this.http.post(this.addUrl, body).subscribe( |
|
(data: any) => { |
|
resolve(data); |
|
this.message.create("success", "创建成功!"); |
|
this.SkipCount = 0; |
|
this.getAllUsers(); |
|
|
|
this.isShowNewPassword = true; |
|
let obj = { |
|
title: "用户" + data.result.userName + "创建成功", |
|
newPassword: data.result.newPassword, |
|
}; |
|
this.newPasswordObj = obj; |
|
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; |
|
if (this.level == 1) { |
|
body = { |
|
userId: item.id, |
|
}; |
|
} else { |
|
if (item.userId) { |
|
body = { |
|
userId: item.userId, |
|
}; |
|
} else { |
|
this.message.create("warning", "审核未完成的不能重置密码"); |
|
return; |
|
} |
|
} |
|
|
|
this.http |
|
.post("/api/services/app/User/ResetPassword", body) |
|
.subscribe((data: any) => { |
|
this.isShowNewPassword = true; |
|
let obj = { |
|
title: "用户" + item.userName + "密码重置成功", |
|
newPassword: data.result.newPassword, |
|
}; |
|
this.newPasswordObj = 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() { |
|
let str = |
|
this.newPasswordObj.title + |
|
",当前密码为" + |
|
this.newPasswordObj.newPassword; |
|
this.handleCopyValue(str) |
|
.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: () => {}, |
|
}); |
|
} |
|
}
|
|
|