Browse Source

Merge pull request #95 from colinin/3.1

No navigation properties are required to query the log list
pull/115/head
cKey 5 years ago
committed by GitHub
parent
commit
6d9de7f1f0
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 6
      aspnet-core/database/ApiGateway-Init-SqlServer.sql
  2. 8
      aspnet-core/database/ApiGateway-Init.sql
  3. 2
      aspnet-core/modules/auditing/LINGYUN.Abp.Auditing.Application.Contracts/LINGYUN/Abp/Auditing/Logging/IAuditLogAppService.cs
  4. 2
      aspnet-core/modules/auditing/LINGYUN.Abp.Auditing.Application.Contracts/LINGYUN/Abp/Auditing/Security/ISecurityLogAppService.cs
  5. 15
      aspnet-core/modules/auditing/LINGYUN.Abp.Auditing.Application/LINGYUN/Abp/Auditing/Logging/AuditLogAppService.cs
  6. 10
      aspnet-core/modules/auditing/LINGYUN.Abp.Auditing.Application/LINGYUN/Abp/Auditing/Security/SecurityLogAppService.cs
  7. 7
      aspnet-core/modules/auditing/LINGYUN.Abp.Auditing.HttpApi/LINGYUN/Abp/Auditing/Logging/AuditLogController.cs
  8. 7
      aspnet-core/modules/auditing/LINGYUN.Abp.Auditing.HttpApi/LINGYUN/Abp/Auditing/Security/SecurityLogController.cs
  9. BIN
      aspnet-core/services/apigateway/LINGYUN.ApiGateway.Host/event-bus-cap.db
  10. 10
      vueJs/src/api/auditing.ts
  11. 10
      vueJs/src/views/admin/auditing/audit-log/components/AuditLogDialog.vue
  12. 18
      vueJs/src/views/admin/auditing/audit-log/components/AuditLogProfile.vue
  13. 6
      vueJs/src/views/admin/auditing/audit-log/index.vue
  14. 9
      vueJs/src/views/admin/auditing/security-log/components/SecurityLogDialog.vue
  15. 16
      vueJs/src/views/admin/auditing/security-log/components/SecurityLogProfile.vue
  16. 7
      vueJs/src/views/admin/auditing/security-log/index.vue

6
aspnet-core/database/ApiGateway-Init-SqlServer.sql

File diff suppressed because one or more lines are too long

8
aspnet-core/database/ApiGateway-Init.sql

@ -11,7 +11,7 @@
Target Server Version : 80020 Target Server Version : 80020
File Encoding : 65001 File Encoding : 65001
Date: 28/09/2020 18:35:48 Date: 28/09/2020 20:41:21
*/ */
SET NAMES utf8mb4; SET NAMES utf8mb4;
@ -435,7 +435,7 @@ INSERT INTO `appapigatewaycacheoptions` VALUES (127, 1304679169305694208, NULL,
INSERT INTO `appapigatewaycacheoptions` VALUES (128, 1310460417141817344, 0, ''); INSERT INTO `appapigatewaycacheoptions` VALUES (128, 1310460417141817344, 0, '');
INSERT INTO `appapigatewaycacheoptions` VALUES (129, 1310502391475519488, 0, ''); INSERT INTO `appapigatewaycacheoptions` VALUES (129, 1310502391475519488, 0, '');
INSERT INTO `appapigatewaycacheoptions` VALUES (130, 1310515546943569920, NULL, NULL); INSERT INTO `appapigatewaycacheoptions` VALUES (130, 1310515546943569920, NULL, NULL);
INSERT INTO `appapigatewaycacheoptions` VALUES (131, 1310515735292985344, 0, ''); INSERT INTO `appapigatewaycacheoptions` VALUES (131, 1310515735292985344, NULL, NULL);
-- ---------------------------- -- ----------------------------
-- Table structure for appapigatewaydiscovery -- Table structure for appapigatewaydiscovery
@ -1062,8 +1062,8 @@ INSERT INTO `appapigatewayreroute` VALUES (133, '{}', '40a150f629b047f587c91a943
INSERT INTO `appapigatewayreroute` VALUES (134, '{}', '3a2d5d538fa44ac690402fc5c4e1a401', 1304679169305694208, '【身份认证服务】- 框架配置', '/api/abp/application-configuration', '', '', '/api/abp/identity-server/application-configuration', 'GET,', '', '', '', '', '', '', '', 1, '', '', 'HTTP', '127.0.0.1:30015,', '', '', 'identity-server-configuration', 0, 30000, 1, '', 'TEST-APP'); INSERT INTO `appapigatewayreroute` VALUES (134, '{}', '3a2d5d538fa44ac690402fc5c4e1a401', 1304679169305694208, '【身份认证服务】- 框架配置', '/api/abp/application-configuration', '', '', '/api/abp/identity-server/application-configuration', 'GET,', '', '', '', '', '', '', '', 1, '', '', 'HTTP', '127.0.0.1:30015,', '', '', 'identity-server-configuration', 0, 30000, 1, '', 'TEST-APP');
INSERT INTO `appapigatewayreroute` VALUES (135, '{}', '2ecfe7483bc94c28ad0769b654eb765d', 1310460417141817344, '【后台管理】- 审计日志列表', '/api/auditing/audit-log', '', '', '/api/auditing/audit-log', 'GET,', '', '', '', '', '', '', '', 1, '', '', 'HTTP', '127.0.0.1:30010,', '', '', '', 0, 30000, 1, '', 'TEST-APP'); INSERT INTO `appapigatewayreroute` VALUES (135, '{}', '2ecfe7483bc94c28ad0769b654eb765d', 1310460417141817344, '【后台管理】- 审计日志列表', '/api/auditing/audit-log', '', '', '/api/auditing/audit-log', 'GET,', '', '', '', '', '', '', '', 1, '', '', 'HTTP', '127.0.0.1:30010,', '', '', '', 0, 30000, 1, '', 'TEST-APP');
INSERT INTO `appapigatewayreroute` VALUES (136, '{}', '744e340c0024462d88458b7ea9605b3c', 1310502391475519488, '【后台服务】- 安全日志列表', '/api/auditing/security-log', '', '', '/api/auditing/security-log', 'GET,', '', '', '', '', '', '', '', 1, '', '', 'HTTP', '127.0.0.1:30010,', '', '', '', 0, 30000, 1, '', 'TEST-APP'); INSERT INTO `appapigatewayreroute` VALUES (136, '{}', '744e340c0024462d88458b7ea9605b3c', 1310502391475519488, '【后台服务】- 安全日志列表', '/api/auditing/security-log', '', '', '/api/auditing/security-log', 'GET,', '', '', '', '', '', '', '', 1, '', '', 'HTTP', '127.0.0.1:30010,', '', '', '', 0, 30000, 1, '', 'TEST-APP');
INSERT INTO `appapigatewayreroute` VALUES (137, '{}', 'ba9455ce031148e98c5ea19317548b16', 1310515546943569920, '【后台服务】- 删除安全日志', '/api/auditing/security-log/{id}', '', '', '/api/auditing/security-log/{id}', 'DELETE,', '', '', '', '', '', '', '', 1, '', '', 'HTTP', '127.0.0.1:30010,', '', '', '', 0, 30000, 1, '', 'TEST-APP'); INSERT INTO `appapigatewayreroute` VALUES (137, '{}', 'a99639f4172547c4ba9b4f4ca5cb4ab9', 1310515546943569920, '【后台服务】- 安全日志', '/api/auditing/security-log/{id}', '', '', '/api/auditing/security-log/{id}', 'DELETE,GET,', '', '', '', '', '', '', '', 1, '', '', 'HTTP', '127.0.0.1:30010,', '', '', '', 0, 30000, 1, '', 'TEST-APP');
INSERT INTO `appapigatewayreroute` VALUES (138, '{}', '2ea67855ef7448859d4d3f2a9a8faa15', 1310515735292985344, '【后台管理】- 删除审计日志', '/api/auditing/audit-log/{id}', '', '', '/api/auditing/audit-log/{id}', 'DELETE,', '', '', '', '', '', '', '', 1, '', '', 'HTTP', '127.0.0.1:30010,', '', '', '', 0, 30000, 1, '', 'TEST-APP'); INSERT INTO `appapigatewayreroute` VALUES (138, '{}', 'c3ebc82d55f640fb9d70a911e97e4ec1', 1310515735292985344, '【后台管理】- 审计日志', '/api/auditing/audit-log/{id}', '', '', '/api/auditing/audit-log/{id}', 'DELETE,GET,', '', '', '', '', '', '', '', 1, '', '', 'HTTP', '127.0.0.1:30010,', '', '', '', 0, 30000, 1, '', 'TEST-APP');
-- ---------------------------- -- ----------------------------
-- Table structure for appapigatewayroutegroup -- Table structure for appapigatewayroutegroup

2
aspnet-core/modules/auditing/LINGYUN.Abp.Auditing.Application.Contracts/LINGYUN/Abp/Auditing/Logging/IAuditLogAppService.cs

@ -9,6 +9,8 @@ namespace LINGYUN.Abp.Auditing.Logging
{ {
Task<PagedResultDto<AuditLogDto>> GetListAsync(AuditLogGetByPagedDto input); Task<PagedResultDto<AuditLogDto>> GetListAsync(AuditLogGetByPagedDto input);
Task<AuditLogDto> GetAsync(Guid id);
Task DeleteAsync(Guid id); Task DeleteAsync(Guid id);
} }
} }

2
aspnet-core/modules/auditing/LINGYUN.Abp.Auditing.Application.Contracts/LINGYUN/Abp/Auditing/Security/ISecurityLogAppService.cs

@ -9,6 +9,8 @@ namespace LINGYUN.Abp.Auditing.Security
{ {
Task<PagedResultDto<SecurityLogDto>> GetListAsync(SecurityLogGetByPagedDto input); Task<PagedResultDto<SecurityLogDto>> GetListAsync(SecurityLogGetByPagedDto input);
Task<SecurityLogDto> GetAsync(Guid id);
Task DeleteAsync(Guid id); Task DeleteAsync(Guid id);
} }
} }

15
aspnet-core/modules/auditing/LINGYUN.Abp.Auditing.Application/LINGYUN/Abp/Auditing/Logging/AuditLogAppService.cs

@ -22,6 +22,13 @@ namespace LINGYUN.Abp.Auditing.Logging
AuditLogRepository = auditLogRepository; AuditLogRepository = auditLogRepository;
} }
public virtual async Task<AuditLogDto> GetAsync(Guid id)
{
var auditLog = await AuditLogRepository.GetAsync(id, includeDetails: true);
return ObjectMapper.Map<AuditLog, AuditLogDto>(auditLog);
}
public virtual async Task<PagedResultDto<AuditLogDto>> GetListAsync(AuditLogGetByPagedDto input) public virtual async Task<PagedResultDto<AuditLogDto>> GetListAsync(AuditLogGetByPagedDto input)
{ {
var auditLogCount = await AuditLogRepository var auditLogCount = await AuditLogRepository
@ -30,21 +37,21 @@ namespace LINGYUN.Abp.Auditing.Logging
input.CorrelationId, input.MaxExecutionDuration, input.MinExecutionDuration, input.CorrelationId, input.MaxExecutionDuration, input.MinExecutionDuration,
input.HasException, input.HttpStatusCode); input.HasException, input.HttpStatusCode);
var auditLog = await AuditLogRepository var auditLogs = await AuditLogRepository
.GetListAsync(input.Sorting, input.MaxResultCount, input.SkipCount, .GetListAsync(input.Sorting, input.MaxResultCount, input.SkipCount,
input.StartTime, input.EndTime, input.StartTime, input.EndTime,
input.HttpMethod, input.Url, input.UserName, input.ApplicationName, input.HttpMethod, input.Url, input.UserName, input.ApplicationName,
input.CorrelationId, input.MaxExecutionDuration, input.MinExecutionDuration, input.CorrelationId, input.MaxExecutionDuration, input.MinExecutionDuration,
input.HasException, input.HttpStatusCode, true); input.HasException, input.HttpStatusCode, includeDetails: false);
return new PagedResultDto<AuditLogDto>(auditLogCount, return new PagedResultDto<AuditLogDto>(auditLogCount,
ObjectMapper.Map<List<AuditLog>, List<AuditLogDto>>(auditLog)); ObjectMapper.Map<List<AuditLog>, List<AuditLogDto>>(auditLogs));
} }
[Authorize(AuditingPermissionNames.AuditLog.Delete)] [Authorize(AuditingPermissionNames.AuditLog.Delete)]
public virtual async Task DeleteAsync([Required] Guid id) public virtual async Task DeleteAsync([Required] Guid id)
{ {
var auditLog = await AuditLogRepository.GetAsync(id, false); var auditLog = await AuditLogRepository.GetAsync(id);
await AuditLogRepository.DeleteAsync(auditLog); await AuditLogRepository.DeleteAsync(auditLog);
await CurrentUnitOfWork.SaveChangesAsync(); await CurrentUnitOfWork.SaveChangesAsync();

10
aspnet-core/modules/auditing/LINGYUN.Abp.Auditing.Application/LINGYUN/Abp/Auditing/Security/SecurityLogAppService.cs

@ -20,6 +20,13 @@ namespace LINGYUN.Abp.Auditing.Security
SecurityLogRepository = securityLogRepository; SecurityLogRepository = securityLogRepository;
} }
public virtual async Task<SecurityLogDto> GetAsync(Guid id)
{
var securityLog = await SecurityLogRepository.GetAsync(id, includeDetails: true);
return ObjectMapper.Map<IdentitySecurityLog, SecurityLogDto>(securityLog);
}
public virtual async Task<PagedResultDto<SecurityLogDto>> GetListAsync(SecurityLogGetByPagedDto input) public virtual async Task<PagedResultDto<SecurityLogDto>> GetListAsync(SecurityLogGetByPagedDto input)
{ {
var securityLogCount = await SecurityLogRepository var securityLogCount = await SecurityLogRepository
@ -32,7 +39,8 @@ namespace LINGYUN.Abp.Auditing.Security
.GetListAsync(input.Sorting, input.MaxResultCount, input.SkipCount, .GetListAsync(input.Sorting, input.MaxResultCount, input.SkipCount,
input.StartTime, input.EndTime, input.StartTime, input.EndTime,
input.ApplicationName, input.Identity, input.ActionName, input.ApplicationName, input.Identity, input.ActionName,
input.UserId, input.UserName, input.ClientId, input.CorrelationId input.UserId, input.UserName, input.ClientId, input.CorrelationId,
includeDetails: false
); );
return new PagedResultDto<SecurityLogDto>(securityLogCount, return new PagedResultDto<SecurityLogDto>(securityLogCount,

7
aspnet-core/modules/auditing/LINGYUN.Abp.Auditing.HttpApi/LINGYUN/Abp/Auditing/Logging/AuditLogController.cs

@ -27,6 +27,13 @@ namespace LINGYUN.Abp.Auditing.Logging
await AuditLogAppService.DeleteAsync(id); await AuditLogAppService.DeleteAsync(id);
} }
[HttpGet]
[Route("{id}")]
public virtual async Task<AuditLogDto> GetAsync(Guid id)
{
return await AuditLogAppService.GetAsync(id);
}
[HttpGet] [HttpGet]
public virtual async Task<PagedResultDto<AuditLogDto>> GetListAsync(AuditLogGetByPagedDto input) public virtual async Task<PagedResultDto<AuditLogDto>> GetListAsync(AuditLogGetByPagedDto input)
{ {

7
aspnet-core/modules/auditing/LINGYUN.Abp.Auditing.HttpApi/LINGYUN/Abp/Auditing/Security/SecurityLogController.cs

@ -27,6 +27,13 @@ namespace LINGYUN.Abp.Auditing.Security
await SecurityLogAppService.DeleteAsync(id); await SecurityLogAppService.DeleteAsync(id);
} }
[HttpGet]
[Route("{id}")]
public virtual async Task<SecurityLogDto> GetAsync(Guid id)
{
return await SecurityLogAppService.GetAsync(id);
}
[HttpGet] [HttpGet]
public virtual async Task<PagedResultDto<SecurityLogDto>> GetListAsync(SecurityLogGetByPagedDto input) public virtual async Task<PagedResultDto<SecurityLogDto>> GetListAsync(SecurityLogGetByPagedDto input)
{ {

BIN
aspnet-core/services/apigateway/LINGYUN.ApiGateway.Host/event-bus-cap.db

Binary file not shown.

10
vueJs/src/api/auditing.ts

@ -5,6 +5,11 @@ import { PagedAndSortedResultRequestDto, PagedResultDto } from './types'
const serviceUrl = process.env.VUE_APP_BASE_API const serviceUrl = process.env.VUE_APP_BASE_API
export default class AuditingService { export default class AuditingService {
public static getAuditLogById(id: string) {
const _url = '/api/auditing/audit-log/' + id
return ApiService.Get<AuditLog>(_url, serviceUrl)
}
public static getAuditLogs(payload: AuditLogGetPaged) { public static getAuditLogs(payload: AuditLogGetPaged) {
let _url = '/api/auditing/audit-log?' let _url = '/api/auditing/audit-log?'
payload.skipCount = abpPagerFormat(payload.skipCount, payload.maxResultCount) payload.skipCount = abpPagerFormat(payload.skipCount, payload.maxResultCount)
@ -17,6 +22,11 @@ export default class AuditingService {
return ApiService.Delete(_url, serviceUrl) return ApiService.Delete(_url, serviceUrl)
} }
public static getSecurityLogById(id: string) {
const _url = '/api/auditing/security-log/' + id
return ApiService.Get<SecurityLog>(_url, serviceUrl)
}
public static getSecurityLogs(payload: SecurityLogGetPaged) { public static getSecurityLogs(payload: SecurityLogGetPaged) {
let _url = '/api/auditing/security-log?' let _url = '/api/auditing/security-log?'
payload.skipCount = abpPagerFormat(payload.skipCount, payload.maxResultCount) payload.skipCount = abpPagerFormat(payload.skipCount, payload.maxResultCount)

10
vueJs/src/views/admin/auditing/audit-log/components/AuditLogDialog.vue

@ -6,12 +6,11 @@
:close-on-click-modal="true" :close-on-click-modal="true"
@close="onFormClosed" @close="onFormClosed"
> >
<audit-log-profile :audit-log="auditLog" /> <audit-log-profile :audit-log-id="auditLogId" />
</el-dialog> </el-dialog>
</template> </template>
<script lang="ts"> <script lang="ts">
import { AuditLog } from '@/api/auditing'
import { Component, Vue, Prop } from 'vue-property-decorator' import { Component, Vue, Prop } from 'vue-property-decorator'
import AuditLogProfile from './AuditLogProfile.vue' import AuditLogProfile from './AuditLogProfile.vue'
@ -25,13 +24,10 @@ export default class extends Vue {
@Prop({ default: false }) @Prop({ default: false })
private showDialog!: boolean private showDialog!: boolean
@Prop({ @Prop({ default: '' })
default: () => { return {} } private auditLogId!: string
})
private auditLog!: AuditLog
private onFormClosed() { private onFormClosed() {
console.log('关闭窗口')
this.$emit('closed') this.$emit('closed')
} }
} }

18
vueJs/src/views/admin/auditing/audit-log/components/AuditLogProfile.vue

@ -204,7 +204,7 @@
<script lang="ts"> <script lang="ts">
import { Component, Vue, Prop, Watch } from 'vue-property-decorator' import { Component, Vue, Prop, Watch } from 'vue-property-decorator'
import { Action, AuditLog } from '@/api/auditing' import AuditingService, { Action, AuditLog } from '@/api/auditing'
import { dateFormat } from '@/utils' import { dateFormat } from '@/utils'
import JsonEditor from '@/components/JsonEditor/index.vue' import JsonEditor from '@/components/JsonEditor/index.vue'
@ -244,16 +244,20 @@ import JsonEditor from '@/components/JsonEditor/index.vue'
} }
}) })
export default class extends Vue { export default class extends Vue {
@Prop({ @Prop({ default: '' })
default: () => { return {} } private auditLogId!: string
})
private auditLog!: AuditLog
private auditLog = new AuditLog()
private activedTabItem = 'application' private activedTabItem = 'application'
@Watch('auditLog') @Watch('auditLogId', { immediate: true })
private onAuditLogChanged() { private onAuditLogIdChanged() {
if (this.auditLogId) {
AuditingService.getAuditLogById(this.auditLogId).then(res => {
this.auditLog = res
this.activedTabItem = 'application' this.activedTabItem = 'application'
})
}
} }
get hasExtraProperties() { get hasExtraProperties() {

6
vueJs/src/views/admin/auditing/audit-log/index.vue

@ -268,7 +268,7 @@
/> />
<audit-log-dialog <audit-log-dialog
:audit-log="auditLog" :audit-log-id="auditLogId"
:show-dialog="showAuditLog" :show-dialog="showAuditLog"
@closed="onAuditLogDialogClosed" @closed="onAuditLogDialogClosed"
/> />
@ -319,7 +319,7 @@ const statusMap: { [key: string]: string } = {
} }
}) })
export default class extends mixins(DataListMiXin) { export default class extends mixins(DataListMiXin) {
private auditLog = new AuditLog() private auditLogId = ''
private showAuditLog = false private showAuditLog = false
public dataFilter = new AuditLogGetPaged() public dataFilter = new AuditLogGetPaged()
@ -333,7 +333,7 @@ export default class extends mixins(DataListMiXin) {
} }
private handleShowAuditLogDialog(auditLog: AuditLog) { private handleShowAuditLogDialog(auditLog: AuditLog) {
this.auditLog = auditLog this.auditLogId = auditLog.id
this.showAuditLog = true this.showAuditLog = true
} }

9
vueJs/src/views/admin/auditing/security-log/components/SecurityLogDialog.vue

@ -6,12 +6,11 @@
:close-on-click-modal="true" :close-on-click-modal="true"
@close="onFormClosed" @close="onFormClosed"
> >
<security-log-profile :security-log="securityLog" /> <security-log-profile :security-log-id="securityLogId" />
</el-dialog> </el-dialog>
</template> </template>
<script lang="ts"> <script lang="ts">
import { SecurityLog } from '@/api/auditing'
import { Component, Vue, Prop } from 'vue-property-decorator' import { Component, Vue, Prop } from 'vue-property-decorator'
import SecurityLogProfile from './SecurityLogProfile.vue' import SecurityLogProfile from './SecurityLogProfile.vue'
@ -25,10 +24,8 @@ export default class extends Vue {
@Prop({ default: false }) @Prop({ default: false })
private showDialog!: boolean private showDialog!: boolean
@Prop({ @Prop({ default: '' })
default: () => { return {} } private securityLogId!: string
})
private securityLog!: SecurityLog
private onFormClosed() { private onFormClosed() {
this.$emit('closed') this.$emit('closed')

16
vueJs/src/views/admin/auditing/security-log/components/SecurityLogProfile.vue

@ -107,7 +107,7 @@
<script lang="ts"> <script lang="ts">
import { Component, Vue, Prop, Watch } from 'vue-property-decorator' import { Component, Vue, Prop, Watch } from 'vue-property-decorator'
import { SecurityLog } from '@/api/auditing' import AuditingService, { SecurityLog } from '@/api/auditing'
import { dateFormat } from '@/utils' import { dateFormat } from '@/utils'
@Component({ @Component({
@ -121,11 +121,10 @@ import { dateFormat } from '@/utils'
} }
}) })
export default class extends Vue { export default class extends Vue {
@Prop({ @Prop({ default: '' })
default: () => { return {} } private securityLogId!: string
})
private securityLog!: SecurityLog
private securityLog = new SecurityLog()
private activedTabItem = 'application' private activedTabItem = 'application'
get hasExtraProperties() { get hasExtraProperties() {
@ -135,9 +134,14 @@ export default class extends Vue {
return false return false
} }
@Watch('securityLog') @Watch('securityLogId', { immediate: true })
private onSecurityLogChanged() { private onSecurityLogChanged() {
if (this.securityLogId) {
AuditingService.getSecurityLogById(this.securityLogId).then(res => {
this.securityLog = res
this.activedTabItem = 'application' this.activedTabItem = 'application'
})
}
} }
} }
</script> </script>

7
vueJs/src/views/admin/auditing/security-log/index.vue

@ -229,7 +229,7 @@
/> />
<security-log-dialog <security-log-dialog
:security-log="securityLog" :security-log-id="securityLogId"
:show-dialog="showSecurityLog" :show-dialog="showSecurityLog"
@closed="onSecurityLogDialogClosed" @closed="onSecurityLogDialogClosed"
/> />
@ -255,8 +255,7 @@ import SecurityLogDialog from './components/SecurityLogDialog.vue'
} }
}) })
export default class extends mixins(DataListMiXin) { export default class extends mixins(DataListMiXin) {
private securityLog = new SecurityLog() private securityLogId = ''
private showSecurityLog = false private showSecurityLog = false
public dataFilter = new SecurityLogGetPaged() public dataFilter = new SecurityLogGetPaged()
@ -269,7 +268,7 @@ export default class extends mixins(DataListMiXin) {
} }
private handleShowSecurityLogDialog(securityLog: SecurityLog) { private handleShowSecurityLogDialog(securityLog: SecurityLog) {
this.securityLog = securityLog this.securityLogId = securityLog.id
this.showSecurityLog = true this.showSecurityLog = true
} }

Loading…
Cancel
Save