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((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((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((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((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.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() { let str = "用户" + this.newPasswordObj.userName + "的密码重置成功,当前密码为" + 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: () => {}, }); } }