File diff suppressed because it is too large
											Load Diff
										
									
								
							
						@ -1,52 +1,297 @@ | 
				
			||||
import { Component, Input, OnInit } from '@angular/core'; | 
				
			||||
import { Component, Input, OnInit, OnChanges, SimpleChanges, Output } from '@angular/core'; | 
				
			||||
import { NzMessageService } from 'ng-zorro-antd'; | 
				
			||||
import { NoticeService } from '../../../service/https/notice.service'; | 
				
			||||
import { exportAsExcelFile, convertKeys } from '../utils/utils'; | 
				
			||||
 | 
				
			||||
// data mapping
 | 
				
			||||
// IP
 | 
				
			||||
const ipKeyMaps = { | 
				
			||||
  'req_ip': '访问源IP', | 
				
			||||
'req_frequency': '访问频次' | 
				
			||||
}; | 
				
			||||
 | 
				
			||||
const accountKeyMaps = { | 
				
			||||
'req_account': '账号', | 
				
			||||
'req_frequency': '访问频次', | 
				
			||||
  'req_jobnum': '工号' | 
				
			||||
}; | 
				
			||||
 | 
				
			||||
const interfaceKeyMaps = { | 
				
			||||
'interface_addr': '接口地址', | 
				
			||||
  'req_ip': '访问IP', | 
				
			||||
'req_account': '访问账号', | 
				
			||||
'req_frequency': '访问频次'	, | 
				
			||||
'req_jobnum': '工号' | 
				
			||||
}; | 
				
			||||
 | 
				
			||||
const menuKeyMaps = { | 
				
			||||
  'menu_name': '菜单名称', | 
				
			||||
'req_ip': '访问IP', | 
				
			||||
'req_account': '访问账号', | 
				
			||||
'req_frequency': '访问频次'	, | 
				
			||||
'req_jobnum': '工号' | 
				
			||||
}; | 
				
			||||
 | 
				
			||||
@Component({ | 
				
			||||
  selector: 'app-path', | 
				
			||||
  templateUrl: './path.component.html', | 
				
			||||
  styleUrls: ['./path.component.styl'] | 
				
			||||
}) | 
				
			||||
export class PathComponent implements OnInit { | 
				
			||||
  @Input() datas: any; | 
				
			||||
 | 
				
			||||
export class PathComponent implements OnInit, OnChanges { | 
				
			||||
  @Input() detail_data: any; | 
				
			||||
  // @Output() detailDataChange = new EventEmitter();
 | 
				
			||||
  data; | 
				
			||||
  viewType = 0; | 
				
			||||
 | 
				
			||||
  whiteListParam = {}; | 
				
			||||
  greyListParam = {}; | 
				
			||||
  rules; | 
				
			||||
  queryLogUrl = "/WebApi/isoc/static/base/#/route/threat-state/log/action?" | 
				
			||||
  // /WebApi/isoc/static/base/#/route/threat-state/log/action?startTime=1717396269&endTime=1717403469&sip=zhang3
 | 
				
			||||
  startTime; | 
				
			||||
  endTime; | 
				
			||||
  constructor( | 
				
			||||
    private noticeService: NoticeService, | 
				
			||||
    public message: NzMessageService, | 
				
			||||
 | 
				
			||||
  ) {} | 
				
			||||
 | 
				
			||||
  ngOnInit() { | 
				
			||||
    // const jsonStr = '{"type":3,"http://190.89.233.2:8909/getpublicconfig":[{"req_ip":"192.156.3.12","interface_addr":"http://190.89.233.2:8909/getpublicconfig","req_jobnum":43327,"req_frequency":43,"req_account":"liuhr"},{"req_ip":"192.156.3.12","interface_addr":"http://190.89.233.2:8909/getpublicconfig","req_jobnum":43328,"req_frequency":44,"req_account":"sunxq01"},{"req_ip":"192.156.3.18","interface_addr":"http://190.89.233.2:8909/getpublicconfig","req_jobnum":65341,"req_frequency":45,"req_account":"shicl"},{"req_ip":"192.106.3.33","interface_addr":"http://190.89.233.2:8909/getpublicconfig","req_jobnum":65342,"req_frequency":46,"req_account":"gongxs"},{"req_ip":"192.106.3.34","interface_addr":"http://190.89.233.2:8909/getpublicconfig","req_jobnum":65343,"req_frequency":47,"req_account":"sunzs"}]}'
 | 
				
			||||
    // if (this.datas == null) {
 | 
				
			||||
    //   this.datas = JSON.parse(jsonStr);
 | 
				
			||||
    // if (this.detail_data == null) {
 | 
				
			||||
    //   this.detail_data = JSON.parse(jsonStr);
 | 
				
			||||
    // }
 | 
				
			||||
    this.parseData(this.datas); | 
				
			||||
  } | 
				
			||||
    
 | 
				
			||||
  parseData(datas: any) { | 
				
			||||
    for (const dataKey in datas) { | 
				
			||||
      if (datas.hasOwnProperty(dataKey)) { | 
				
			||||
        if (dataKey === 'type') { | 
				
			||||
          this.viewType = datas[dataKey]; | 
				
			||||
    if (this.rules === undefined) { | 
				
			||||
      this.noticeService.getDefaultRule().subscribe( | 
				
			||||
        resp => { | 
				
			||||
          if (resp.code === 200) { | 
				
			||||
            this.rules = resp.data; | 
				
			||||
          } else { | 
				
			||||
          this.data = datas[dataKey]; | 
				
			||||
            this.message.error(resp.msg); | 
				
			||||
          } | 
				
			||||
        }, | 
				
			||||
        error => { | 
				
			||||
          this.message.error('服务器错误'); | 
				
			||||
        } | 
				
			||||
      ); | 
				
			||||
    } | 
				
			||||
  } | 
				
			||||
 | 
				
			||||
  ngOnChanges(changes: SimpleChanges) { | 
				
			||||
    if ('detail_data' in changes) { | 
				
			||||
      this.parseData(); | 
				
			||||
      // 在这里处理接收到的数据
 | 
				
			||||
    } | 
				
			||||
  } | 
				
			||||
 | 
				
			||||
  parseData() { | 
				
			||||
    for (const dataKey in this.detail_data) { | 
				
			||||
      if (this.detail_data.hasOwnProperty(dataKey)) { | 
				
			||||
 | 
				
			||||
        switch (dataKey) { | 
				
			||||
          case 'type': | 
				
			||||
            this.viewType = this.detail_data[dataKey]; | 
				
			||||
            break; | 
				
			||||
          case 'startTime': | 
				
			||||
            this.startTime = this.detail_data[dataKey]; | 
				
			||||
            break; | 
				
			||||
          case 'endTime': | 
				
			||||
            this.endTime = this.detail_data[dataKey]; | 
				
			||||
            break; | 
				
			||||
          default: | 
				
			||||
            this.data = this.detail_data[dataKey]; | 
				
			||||
            this.data.forEach(item => { | 
				
			||||
              item['is_in_white_list'] = 0; 
 | 
				
			||||
              item['is_in_grey_list'] = 0; 
 | 
				
			||||
            }); | 
				
			||||
        } | 
				
			||||
      } | 
				
			||||
    } | 
				
			||||
  } | 
				
			||||
 | 
				
			||||
  clickWihteList(data) { | 
				
			||||
    alert("点击白名单"); | 
				
			||||
    let index = -1; | 
				
			||||
    // this.message.success('添加白名单成功!');
 | 
				
			||||
    // this.data[index]['is_in_white_list'] = 1;
 | 
				
			||||
    this.whiteListParam['range'] = ["ueba"]; | 
				
			||||
    this.whiteListParam['des'] = ""; | 
				
			||||
    this.whiteListParam['is_enable'] = 1; | 
				
			||||
    switch(this.viewType) { | 
				
			||||
      case 1: | 
				
			||||
        this.whiteListParam['fields'] = ["sip"]; | 
				
			||||
        this.whiteListParam['name'] = data.req_ip + '-' + this.getCurrentTime(); | 
				
			||||
        this.whiteListParam['content'] = {"sip": data.req_ip}; | 
				
			||||
        this.whiteListParam['alert_rule_id'] = this.rules["white_list"]["ip"]; | 
				
			||||
        index = this.data.findIndex(item => item.req_ip === data.req_ip); | 
				
			||||
        break; | 
				
			||||
      case 2: | 
				
			||||
        this.whiteListParam['fields'] = ["url"]; | 
				
			||||
        this.whiteListParam['name'] = data.interface_addr + '-' + this.getCurrentTime(); | 
				
			||||
        this.whiteListParam['content'] = {"url": data.interface_addr}; | 
				
			||||
        this.whiteListParam['alert_rule_id'] = this.rules["white_list"]["interface"]; | 
				
			||||
        index = this.data.findIndex(item => item.interface_addr === data.interface_addr); | 
				
			||||
        break; | 
				
			||||
      case 3: | 
				
			||||
        break; | 
				
			||||
      case 4: | 
				
			||||
        break; | 
				
			||||
    } | 
				
			||||
    this.noticeService.addWhitelist(this.whiteListParam).subscribe( | 
				
			||||
      resp => { | 
				
			||||
        if (resp.code === 200) { | 
				
			||||
          this.message.success('添加白名单成功!'); | 
				
			||||
          this.data[index]['is_in_white_list'] = 1; | 
				
			||||
        } else { | 
				
			||||
          this.message.error(resp.msg); | 
				
			||||
        } | 
				
			||||
      }, | 
				
			||||
      error => { | 
				
			||||
        this.message.error('服务器错误'); | 
				
			||||
      } | 
				
			||||
    ); | 
				
			||||
    var log_params = { | 
				
			||||
      "action":"add wihte list", | 
				
			||||
      "params":this.whiteListParam | 
				
			||||
    } | 
				
			||||
 | 
				
			||||
    this.noticeService.writeAuditlog(log_params).subscribe(resp => { | 
				
			||||
        if (resp.code !== 200) { | 
				
			||||
          this.message.error("审计日志记录失败"); | 
				
			||||
        } | 
				
			||||
      }, | 
				
			||||
      error => { | 
				
			||||
        this.message.error('服务器错误'); | 
				
			||||
      }); | 
				
			||||
  } | 
				
			||||
 | 
				
			||||
  clickGreyList(data) { | 
				
			||||
    alert("点击灰名单"); | 
				
			||||
    let index = -1; | 
				
			||||
    // this.message.success('添加灰名单成功!');
 | 
				
			||||
    // this.data[index]['is_in_grey_list'] = 1;
 | 
				
			||||
    this.greyListParam['des'] = ""; | 
				
			||||
    this.greyListParam['is_enable'] = 1; | 
				
			||||
    switch(this.viewType) { | 
				
			||||
      case 1: | 
				
			||||
        this.greyListParam['fields'] = ["sip"]; | 
				
			||||
        this.greyListParam['name'] = data.req_ip + '-' + this.getCurrentTime(); | 
				
			||||
        this.greyListParam['content'] = {"sip": data.req_ip}; | 
				
			||||
        this.greyListParam['alert_rule_id'] = this.rules["grey_list"]["ip"]; | 
				
			||||
        index = this.data.findIndex(item => item.req_ip === data.req_ip); | 
				
			||||
        break; | 
				
			||||
      case 2: | 
				
			||||
        this.greyListParam['fields'] = ["url"]; | 
				
			||||
        this.greyListParam['name'] = data.interface_addr + '-' + this.getCurrentTime(); | 
				
			||||
        this.greyListParam['content'] = {"url": data.interface_addr}; | 
				
			||||
        this.greyListParam['alert_rule_id'] = this.rules["grey_list"]["interface"]; | 
				
			||||
        index = this.data.findIndex(item => item.interface_addr === data.interface_addr); | 
				
			||||
        break; | 
				
			||||
      case 3: | 
				
			||||
        break; | 
				
			||||
      case 4: | 
				
			||||
        break; | 
				
			||||
    } | 
				
			||||
    this.greyListParam["type"]=0; | 
				
			||||
    this.noticeService.addGreyList(this.greyListParam).subscribe( | 
				
			||||
      resp => { | 
				
			||||
        if (resp.code === 200) { | 
				
			||||
          this.message.success('添加灰名单成功!'); | 
				
			||||
          this.data[index]['is_in_grey_list'] = 1; | 
				
			||||
        } else { | 
				
			||||
          this.message.error(resp.msg); | 
				
			||||
        } | 
				
			||||
      }, | 
				
			||||
      error => { | 
				
			||||
        this.message.error('服务器错误'); | 
				
			||||
      } | 
				
			||||
    ); | 
				
			||||
 | 
				
			||||
   var log_params = { | 
				
			||||
      "action":"add greyList", | 
				
			||||
      "params":this.greyListParam | 
				
			||||
    } | 
				
			||||
 | 
				
			||||
  this.noticeService.writeAuditlog(log_params).subscribe(resp => { | 
				
			||||
      if (resp.code!== 200) { | 
				
			||||
        this.message.error("审计日志记录失败"); | 
				
			||||
      } | 
				
			||||
    }, | 
				
			||||
    error => { | 
				
			||||
      this.message.error('服务器错误'); | 
				
			||||
    }); | 
				
			||||
  } | 
				
			||||
 | 
				
			||||
  clickFrequency(data) { | 
				
			||||
    alert("点击超链接"); | 
				
			||||
    if(this.detail_data!=undefined){ | 
				
			||||
      var params = "startTime="+this.detail_data.startTime+"&endTime="+this.detail_data.endTime; | 
				
			||||
      switch(this.detail_data.type) { | 
				
			||||
        case 1: | 
				
			||||
          params += "&sip="+data.req_ip; | 
				
			||||
          break; | 
				
			||||
        case 2: | 
				
			||||
          params += "&sip="+data.req_account; | 
				
			||||
          break; | 
				
			||||
        case 3: | 
				
			||||
          params += "&sip="+data.interface_addr; | 
				
			||||
          break; | 
				
			||||
        case 4: | 
				
			||||
          params += "&sip="+data.menu_name; | 
				
			||||
          break; | 
				
			||||
      } | 
				
			||||
 | 
				
			||||
      window.open(this.queryLogUrl+params, '_blank'); | 
				
			||||
    } | 
				
			||||
  } | 
				
			||||
 | 
				
			||||
  // 在组件类中
 | 
				
			||||
  getCurrentTime(): string { | 
				
			||||
    const now = new Date(); | 
				
			||||
    const year = now.getFullYear(); | 
				
			||||
    const month = String(now.getMonth() + 1).padStart(2, '0'); // 月份是从0开始的
 | 
				
			||||
    const day = String(now.getDate()).padStart(2, '0'); | 
				
			||||
    const hours = String(now.getHours()).padStart(2, '0'); | 
				
			||||
    const minutes = String(now.getMinutes()).padStart(2, '0'); | 
				
			||||
    const seconds = String(now.getSeconds()).padStart(2, '0'); | 
				
			||||
    
 | 
				
			||||
    return `${year}/${month}/${day} ${hours}:${minutes}:${seconds}`; | 
				
			||||
  } | 
				
			||||
  exportExcel(){ | 
				
			||||
    var keysMap :any; | 
				
			||||
    var fileName = ""; | 
				
			||||
    switch(this.viewType){ | 
				
			||||
        case 1: | 
				
			||||
            keysMap= ipKeyMaps; | 
				
			||||
            fileName="ip维度" | 
				
			||||
            break; | 
				
			||||
        case 2: | 
				
			||||
            keysMap=  accountKeyMaps; | 
				
			||||
            fileName="账号维度" | 
				
			||||
            break; | 
				
			||||
        case 3: | 
				
			||||
            keysMap=  interfaceKeyMaps; | 
				
			||||
            fileName="接口维度" | 
				
			||||
            break; | 
				
			||||
        case 4: | 
				
			||||
            keysMap=  menuKeyMaps; | 
				
			||||
            fileName="菜单维度" | 
				
			||||
            break; | 
				
			||||
    } | 
				
			||||
    console.log(JSON.stringify(keysMap)); | 
				
			||||
    var data =convertKeys(this.data,keysMap) | 
				
			||||
    exportAsExcelFile(data,fileName); | 
				
			||||
  } | 
				
			||||
 | 
				
			||||
 | 
				
			||||
  // async getval(){
 | 
				
			||||
  //   const [ewAssetDetailsRes, assetTypeRes] = await Promise.all([
 | 
				
			||||
  //     this.noticeService.getUebaResult(this.di),
 | 
				
			||||
  //     this.noticeService.getQueryRange(this.di)
 | 
				
			||||
  // ]);
 | 
				
			||||
 | 
				
			||||
  // if(ewAssetDetailsRes && assetTypeRes){
 | 
				
			||||
  //     this.ewAssetDetails = ewAssetDetailsRes.data;
 | 
				
			||||
  //     this.assetType = assetTypeRes.data;
 | 
				
			||||
  // }
 | 
				
			||||
  // }
 | 
				
			||||
 | 
				
			||||
} | 
				
			||||
 | 
				
			||||
@ -0,0 +1,18 @@ | 
				
			||||
<nz-modal [(nzVisible)]="open" | 
				
			||||
          [nzMaskClosable]="false" | 
				
			||||
          [nzKeyboard]="false" | 
				
			||||
          (nzOnCancel)="justClose()" | 
				
			||||
          [nzFooter]="footer" | 
				
			||||
          nzTitle="搜索进度"> | 
				
			||||
    <nz-row> | 
				
			||||
        <nz-col nzSpan="4">查询进度</nz-col> | 
				
			||||
        <nz-col nzSpan="20"> | 
				
			||||
            <nz-progress [nzPercent]="process"> | 
				
			||||
            </nz-progress> | 
				
			||||
        </nz-col> | 
				
			||||
    </nz-row> | 
				
			||||
</nz-modal> | 
				
			||||
 | 
				
			||||
<ng-template #footer> | 
				
			||||
    <button nz-button (click)="cancel()">取消查询</button> | 
				
			||||
</ng-template> | 
				
			||||
@ -0,0 +1,28 @@ | 
				
			||||
/* tslint:disable:no-unused-variable */ | 
				
			||||
import { async, ComponentFixture, TestBed } from '@angular/core/testing'; | 
				
			||||
import { By } from '@angular/platform-browser'; | 
				
			||||
import { DebugElement } from '@angular/core'; | 
				
			||||
 | 
				
			||||
import { PathComponent } from './process.component'; | 
				
			||||
 | 
				
			||||
describe('PathComponent', () => { | 
				
			||||
  let component: PathComponent; | 
				
			||||
  let fixture: ComponentFixture<PathComponent>; | 
				
			||||
 | 
				
			||||
  beforeEach(async(() => { | 
				
			||||
    TestBed.configureTestingModule({ | 
				
			||||
      declarations: [ PathComponent ] | 
				
			||||
    }) | 
				
			||||
    .compileComponents(); | 
				
			||||
  })); | 
				
			||||
 | 
				
			||||
  beforeEach(() => { | 
				
			||||
    fixture = TestBed.createComponent(PathComponent); | 
				
			||||
    component = fixture.componentInstance; | 
				
			||||
    fixture.detectChanges(); | 
				
			||||
  }); | 
				
			||||
 | 
				
			||||
  it('should create', () => { | 
				
			||||
    expect(component).toBeTruthy(); | 
				
			||||
  }); | 
				
			||||
}); | 
				
			||||
@ -0,0 +1,88 @@ | 
				
			||||
import { | 
				
			||||
  ChangeDetectionStrategy, | 
				
			||||
  ChangeDetectorRef, | 
				
			||||
  Component, | 
				
			||||
  EventEmitter, | 
				
			||||
  Input, | 
				
			||||
  OnChanges, | 
				
			||||
  Output, | 
				
			||||
  SimpleChanges | 
				
			||||
} from '@angular/core'; | 
				
			||||
 | 
				
			||||
@Component({ | 
				
			||||
  selector: 'app-process', | 
				
			||||
  templateUrl: './process.component.html', | 
				
			||||
  styleUrls: ['./process.component.styl'], | 
				
			||||
  changeDetection: ChangeDetectionStrategy.OnPush | 
				
			||||
}) | 
				
			||||
// @ts-ignore
 | 
				
			||||
export class ProcessComponent implements OnChanges { | 
				
			||||
  // @ts-ignore
 | 
				
			||||
  @Input() visible = false; | 
				
			||||
  // @ts-ignore
 | 
				
			||||
  // tslint:disable-next-line:no-output-on-prefix
 | 
				
			||||
  @Output() onCancel = new EventEmitter(); | 
				
			||||
 | 
				
			||||
  open = false; | 
				
			||||
  process = 0; | 
				
			||||
  intervalId = -1; | 
				
			||||
 | 
				
			||||
  constructor( | 
				
			||||
      private cdr: ChangeDetectorRef | 
				
			||||
  ) {} | 
				
			||||
 | 
				
			||||
  ngOnChanges(changes: SimpleChanges): void { | 
				
			||||
      const visible = changes['visible']; | 
				
			||||
 | 
				
			||||
      if (visible.currentValue !== null) { | 
				
			||||
          if (visible.currentValue) { | 
				
			||||
              this.start(); | 
				
			||||
          } | 
				
			||||
      } | 
				
			||||
  } | 
				
			||||
 | 
				
			||||
  random() { | 
				
			||||
      const acc = Math.ceil(Math.random() * 10); | 
				
			||||
      const added = this.process + acc; | 
				
			||||
      this.process = added >= 99 ? 99 : added; | 
				
			||||
  } | 
				
			||||
 | 
				
			||||
  start() { | 
				
			||||
      this.open = true; | 
				
			||||
      this.process = 0; | 
				
			||||
      clearTimeout(this.intervalId); | 
				
			||||
      this.ticker(); | 
				
			||||
  } | 
				
			||||
 | 
				
			||||
  ticker() { | 
				
			||||
      this.intervalId = setTimeout(() => { | 
				
			||||
          if (this.visible) { | 
				
			||||
              this.random(); | 
				
			||||
              this.ticker(); | 
				
			||||
          } else { | 
				
			||||
              this.process = 100; | 
				
			||||
              this.autoClose(); | 
				
			||||
          } | 
				
			||||
          this.cdr.markForCheck(); | 
				
			||||
      }, 1000); | 
				
			||||
  } | 
				
			||||
 | 
				
			||||
  cancel() { | 
				
			||||
      this.open = false; | 
				
			||||
      clearTimeout(this.intervalId); | 
				
			||||
      this.onCancel.emit(); | 
				
			||||
  } | 
				
			||||
 | 
				
			||||
  autoClose() { | 
				
			||||
      clearTimeout(this.intervalId); | 
				
			||||
      setTimeout(() => { | 
				
			||||
          this.open = false; | 
				
			||||
          this.cdr.markForCheck(); | 
				
			||||
      }, 300); | 
				
			||||
  } | 
				
			||||
 | 
				
			||||
  justClose() { | 
				
			||||
      this.open = false; | 
				
			||||
      clearTimeout(this.intervalId); | 
				
			||||
  } | 
				
			||||
} | 
				
			||||
@ -0,0 +1,33 @@ | 
				
			||||
import * as XLSX from 'xlsx';  
 | 
				
			||||
import { saveAs } from 'file-saver';  
 | 
				
			||||
 | 
				
			||||
const EXCEL_TYPE = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=UTF-8';  
 | 
				
			||||
const EXCEL_EXTENSION = '.xlsx'; | 
				
			||||
export function exportAsExcelFile(json: any[], excelFileName: string): void {  
 | 
				
			||||
    const worksheet: XLSX.WorkSheet = XLSX.utils.json_to_sheet(json);  
 | 
				
			||||
    const workbook: XLSX.WorkBook = { Sheets: { 'data': worksheet }, SheetNames: ['data'] };  
 | 
				
			||||
    const excelBuffer: any = XLSX.write(workbook, { bookType: 'xlsx', type: 'array' });  
 | 
				
			||||
    saveAsExcelFile(excelBuffer, excelFileName);  
 | 
				
			||||
} | 
				
			||||
 | 
				
			||||
export function saveAsExcelFile(buffer: any, fileName: string): void {  
 | 
				
			||||
const data: Blob = new Blob([buffer], {  
 | 
				
			||||
  type: EXCEL_TYPE  
 | 
				
			||||
});  
 | 
				
			||||
saveAs(data, fileName + '_export_' + new Date().getTime() + EXCEL_EXTENSION);  
 | 
				
			||||
} | 
				
			||||
 | 
				
			||||
export function convertKeys<Raw = any, Target = any>(excelData: Raw[], keysMap: Record<string, string>): Target[] { | 
				
			||||
    return excelData.map(excelItem => { | 
				
			||||
      const reorderedItem: any = {}; | 
				
			||||
  
 | 
				
			||||
      // 按照keysMap中定义的顺序重建对象
 | 
				
			||||
      Object.entries(keysMap).forEach(([originalKey, newKey]) => { | 
				
			||||
        if (excelItem.hasOwnProperty(originalKey)) { | 
				
			||||
          reorderedItem[newKey] = excelItem[originalKey]; | 
				
			||||
        } | 
				
			||||
      }); | 
				
			||||
  
 | 
				
			||||
      return reorderedItem; | 
				
			||||
    }); | 
				
			||||
  } | 
				
			||||
@ -1,5 +1,5 @@ | 
				
			||||
export const environment = { | 
				
			||||
  production: true, | 
				
			||||
  productionUrls: '/WebApi/notice/static/dist/', | 
				
			||||
  productionUrls: '/WebApi/uebaMetricsAnalysis/static/dist/', | 
				
			||||
  hashPrefx: '' | 
				
			||||
}; | 
				
			||||
 | 
				
			||||
					Loading…
					
					
				
		Reference in new issue