From 2ed115d070d7d3f0f05fd765b45c5615fe9bd92e Mon Sep 17 00:00:00 2001 From: vran Date: Fri, 18 Feb 2022 23:29:31 +0800 Subject: [PATCH] Feature: add operation log (#16) * feat: auto record operation log * feat: add list project operation log api * feat: update frontend resource --- .../com/databasir/api/DocumentController.java | 2 + .../api/DocumentRemarkController.java | 7 + .../com/databasir/api/GroupController.java | 20 + .../com/databasir/api/LoginController.java | 2 + .../databasir/api/OperationLogController.java | 30 + .../com/databasir/api/ProjectController.java | 12 + .../main/java/com/databasir/api/Routes.java | 4 + .../com/databasir/api/SettingController.java | 2 + .../com/databasir/api/UserController.java | 9 + .../api/advice/OperationLogAspect.java | 117 ++++ .../job/ProjectDocumentAutoSyncJob.java | 40 +- api/src/main/resources/static/.DS_Store | Bin 6148 -> 0 bytes .../{app.df19208c.css => app.36ecf611.css} | 0 ...cbc9e6.css => chunk-04ac1c26.00ac37b1.css} | 0 ...54ac4c.css => chunk-7e394785.e51aa148.css} | 0 ...9c1787.css => chunk-7fa689fe.80a92238.css} | 0 ...b9f9ad.css => chunk-c2109158.06814884.css} | 0 api/src/main/resources/static/index.html | 2 +- .../js/{app.943c1753.js => app.7a0ffda3.js} | 4 +- ...pp.943c1753.js.map => app.7a0ffda3.js.map} | 2 +- .../static/js/chunk-04ac1c26.b03a6105.js.map | 1 - ...b03a6105.js => chunk-04ac1c26.b5c879b8.js} | 2 +- .../static/js/chunk-04ac1c26.b5c879b8.js.map | 1 + ...feb081c8.js => chunk-2d0cc811.c5d1ef9e.js} | 2 +- .../static/js/chunk-2d0cc811.c5d1ef9e.js.map | 1 + .../static/js/chunk-2d0cc811.feb081c8.js.map | 1 - ...b43a95b4.js => chunk-48cebeac.162363c9.js} | 2 +- .../static/js/chunk-48cebeac.162363c9.js.map | 1 + .../static/js/chunk-48cebeac.b43a95b4.js.map | 1 - .../static/js/chunk-4fd080e4.d40c8d0d.js | 2 - .../static/js/chunk-4fd080e4.d40c8d0d.js.map | 1 - .../static/js/chunk-7e394785.b93f6d8c.js.map | 1 - ...b93f6d8c.js => chunk-7e394785.e090ef46.js} | 2 +- .../static/js/chunk-7e394785.e090ef46.js.map | 1 + ...e971bfe1.js => chunk-7fa689fe.337b34fc.js} | 2 +- .../static/js/chunk-7fa689fe.337b34fc.js.map | 1 + .../static/js/chunk-7fa689fe.e971bfe1.js.map | 1 - .../static/js/chunk-abb10c56.4c323350.js | 2 - .../static/js/chunk-abb10c56.4c323350.js.map | 1 - .../static/js/chunk-abb10c56.bd8d31bf.js | 2 + .../static/js/chunk-abb10c56.bd8d31bf.js.map | 1 + .../static/js/chunk-c2109158.94b6c554.js | 2 + .../static/js/chunk-c2109158.94b6c554.js.map | 1 + ...df1e960f.js => chunk-fffb1b64.1ffb9f27.js} | 2 +- .../static/js/chunk-fffb1b64.1ffb9f27.js.map | 1 + .../static/js/chunk-fffb1b64.df1e960f.js.map | 1 - .../static/js/chunk-vendors.8b5336af.js.map | 2 +- .../core/domain/log/annotation/Operation.java | 42 ++ .../converter/OperationLogPojoConverter.java | 13 + .../OperationLogRequestConverter.java | 13 + .../log/data/OperationLogPageCondition.java | 55 ++ .../log/data/OperationLogPageResponse.java | 39 ++ .../domain/log/data/OperationLogRequest.java | 32 + .../log/service/OperationLogService.java | 35 ++ .../converter/JsonConverter.java | 46 +- .../java/com/databasir/dao/Databasir.java | 7 + .../main/java/com/databasir/dao/Keys.java | 3 + .../main/java/com/databasir/dao/Tables.java | 6 + .../databasir/dao/tables/OperationLog.java | 204 ++++++ .../dao/tables/pojos/OperationLogPojo.java | 298 +++++++++ .../tables/records/OperationLogRecord.java | 590 ++++++++++++++++++ .../java/com/databasir/dao/impl/BaseDao.java | 55 +- .../com/databasir/dao/impl/DataSourceDao.java | 2 +- .../dao/impl/DataSourcePropertyDao.java | 3 +- .../dao/impl/DatabaseDocumentDao.java | 2 +- .../dao/impl/DatabaseDocumentHistoryDao.java | 3 +- .../databasir/dao/impl/DocumentRemarkDao.java | 3 +- .../java/com/databasir/dao/impl/GroupDao.java | 15 +- .../java/com/databasir/dao/impl/LoginDao.java | 3 +- .../databasir/dao/impl/OperationLogDao.java | 28 + .../com/databasir/dao/impl/ProjectDao.java | 8 +- .../dao/impl/ProjectSyncRuleDao.java | 2 +- .../com/databasir/dao/impl/SysKeyDao.java | 3 +- .../com/databasir/dao/impl/SysMailDao.java | 2 +- .../dao/impl/TableColumnDocumentDao.java | 3 +- .../databasir/dao/impl/TableDocumentDao.java | 3 +- .../dao/impl/TableIndexDocumentDao.java | 3 +- .../dao/impl/TableTriggerDocumentDao.java | 3 +- .../java/com/databasir/dao/impl/UserDao.java | 3 +- .../com/databasir/dao/impl/UserRoleDao.java | 3 +- .../db/migration/V1.2__operation_log.sql | 18 + 81 files changed, 1741 insertions(+), 98 deletions(-) create mode 100644 api/src/main/java/com/databasir/api/OperationLogController.java create mode 100644 api/src/main/java/com/databasir/api/advice/OperationLogAspect.java delete mode 100644 api/src/main/resources/static/.DS_Store rename api/src/main/resources/static/css/{app.df19208c.css => app.36ecf611.css} (100%) rename api/src/main/resources/static/css/{chunk-04ac1c26.a5cbc9e6.css => chunk-04ac1c26.00ac37b1.css} (100%) rename api/src/main/resources/static/css/{chunk-7e394785.ab54ac4c.css => chunk-7e394785.e51aa148.css} (100%) rename api/src/main/resources/static/css/{chunk-7fa689fe.a79c1787.css => chunk-7fa689fe.80a92238.css} (100%) rename api/src/main/resources/static/css/{chunk-4fd080e4.a5b9f9ad.css => chunk-c2109158.06814884.css} (100%) rename api/src/main/resources/static/js/{app.943c1753.js => app.7a0ffda3.js} (91%) rename api/src/main/resources/static/js/{app.943c1753.js.map => app.7a0ffda3.js.map} (53%) delete mode 100644 api/src/main/resources/static/js/chunk-04ac1c26.b03a6105.js.map rename api/src/main/resources/static/js/{chunk-04ac1c26.b03a6105.js => chunk-04ac1c26.b5c879b8.js} (99%) create mode 100644 api/src/main/resources/static/js/chunk-04ac1c26.b5c879b8.js.map rename api/src/main/resources/static/js/{chunk-2d0cc811.feb081c8.js => chunk-2d0cc811.c5d1ef9e.js} (98%) create mode 100644 api/src/main/resources/static/js/chunk-2d0cc811.c5d1ef9e.js.map delete mode 100644 api/src/main/resources/static/js/chunk-2d0cc811.feb081c8.js.map rename api/src/main/resources/static/js/{chunk-48cebeac.b43a95b4.js => chunk-48cebeac.162363c9.js} (99%) create mode 100644 api/src/main/resources/static/js/chunk-48cebeac.162363c9.js.map delete mode 100644 api/src/main/resources/static/js/chunk-48cebeac.b43a95b4.js.map delete mode 100644 api/src/main/resources/static/js/chunk-4fd080e4.d40c8d0d.js delete mode 100644 api/src/main/resources/static/js/chunk-4fd080e4.d40c8d0d.js.map delete mode 100644 api/src/main/resources/static/js/chunk-7e394785.b93f6d8c.js.map rename api/src/main/resources/static/js/{chunk-7e394785.b93f6d8c.js => chunk-7e394785.e090ef46.js} (98%) create mode 100644 api/src/main/resources/static/js/chunk-7e394785.e090ef46.js.map rename api/src/main/resources/static/js/{chunk-7fa689fe.e971bfe1.js => chunk-7fa689fe.337b34fc.js} (99%) create mode 100644 api/src/main/resources/static/js/chunk-7fa689fe.337b34fc.js.map delete mode 100644 api/src/main/resources/static/js/chunk-7fa689fe.e971bfe1.js.map delete mode 100644 api/src/main/resources/static/js/chunk-abb10c56.4c323350.js delete mode 100644 api/src/main/resources/static/js/chunk-abb10c56.4c323350.js.map create mode 100644 api/src/main/resources/static/js/chunk-abb10c56.bd8d31bf.js create mode 100644 api/src/main/resources/static/js/chunk-abb10c56.bd8d31bf.js.map create mode 100644 api/src/main/resources/static/js/chunk-c2109158.94b6c554.js create mode 100644 api/src/main/resources/static/js/chunk-c2109158.94b6c554.js.map rename api/src/main/resources/static/js/{chunk-fffb1b64.df1e960f.js => chunk-fffb1b64.1ffb9f27.js} (99%) create mode 100644 api/src/main/resources/static/js/chunk-fffb1b64.1ffb9f27.js.map delete mode 100644 api/src/main/resources/static/js/chunk-fffb1b64.df1e960f.js.map create mode 100644 core/src/main/java/com/databasir/core/domain/log/annotation/Operation.java create mode 100644 core/src/main/java/com/databasir/core/domain/log/converter/OperationLogPojoConverter.java create mode 100644 core/src/main/java/com/databasir/core/domain/log/converter/OperationLogRequestConverter.java create mode 100644 core/src/main/java/com/databasir/core/domain/log/data/OperationLogPageCondition.java create mode 100644 core/src/main/java/com/databasir/core/domain/log/data/OperationLogPageResponse.java create mode 100644 core/src/main/java/com/databasir/core/domain/log/data/OperationLogRequest.java create mode 100644 core/src/main/java/com/databasir/core/domain/log/service/OperationLogService.java create mode 100644 dao/generated-src/jooq/main/java/com/databasir/dao/tables/OperationLog.java create mode 100644 dao/generated-src/jooq/main/java/com/databasir/dao/tables/pojos/OperationLogPojo.java create mode 100644 dao/generated-src/jooq/main/java/com/databasir/dao/tables/records/OperationLogRecord.java create mode 100644 dao/src/main/java/com/databasir/dao/impl/OperationLogDao.java create mode 100644 dao/src/main/resources/db/migration/V1.2__operation_log.sql diff --git a/api/src/main/java/com/databasir/api/DocumentController.java b/api/src/main/java/com/databasir/api/DocumentController.java index 70885ed..b42a307 100644 --- a/api/src/main/java/com/databasir/api/DocumentController.java +++ b/api/src/main/java/com/databasir/api/DocumentController.java @@ -5,6 +5,7 @@ import com.databasir.common.SystemException; import com.databasir.core.domain.document.data.DatabaseDocumentResponse; import com.databasir.core.domain.document.data.DatabaseDocumentVersionResponse; import com.databasir.core.domain.document.service.DocumentService; +import com.databasir.core.domain.log.annotation.Operation; import lombok.RequiredArgsConstructor; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; @@ -33,6 +34,7 @@ public class DocumentController { private final DocumentService documentService; @PostMapping(Routes.Document.SYNC_ONE) + @Operation(module = Operation.Modules.PROJECT, name = "文档同步", involvedProjectId = "#projectId") public JsonData sync(@PathVariable Integer projectId) { documentService.syncByProjectId(projectId); return JsonData.ok(); diff --git a/api/src/main/java/com/databasir/api/DocumentRemarkController.java b/api/src/main/java/com/databasir/api/DocumentRemarkController.java index 68264a0..071cc5c 100644 --- a/api/src/main/java/com/databasir/api/DocumentRemarkController.java +++ b/api/src/main/java/com/databasir/api/DocumentRemarkController.java @@ -2,6 +2,7 @@ package com.databasir.api; import com.databasir.api.config.security.DatabasirUserDetails; import com.databasir.common.JsonData; +import com.databasir.core.domain.log.annotation.Operation; import com.databasir.core.domain.remark.data.RemarkCreateRequest; import com.databasir.core.domain.remark.data.RemarkListCondition; import com.databasir.core.domain.remark.data.RemarkResponse; @@ -38,6 +39,9 @@ public class DocumentRemarkController { @DeleteMapping(Routes.DocumentRemark.DELETE) @PreAuthorize("hasAnyAuthority('SYS_OWNER', 'GROUP_OWNER?groupId='+#groupId)") + @Operation(module = Operation.Modules.PROJECT, + name = "删除批注", + involvedProjectId = "#projectId") public JsonData delete(@PathVariable Integer groupId, @PathVariable Integer projectId, @PathVariable Integer remarkId) { @@ -47,6 +51,9 @@ public class DocumentRemarkController { @PostMapping(Routes.DocumentRemark.CREATE) @PreAuthorize("hasAnyAuthority('SYS_OWNER', 'GROUP_OWNER?groupId='+#groupId, 'GROUP_MEMBER?groupId='+#groupId)") + @Operation(module = Operation.Modules.PROJECT, + name = "新增批注", + involvedProjectId = "#projectId") public JsonData create(@PathVariable Integer groupId, @PathVariable Integer projectId, @RequestBody @Valid RemarkCreateRequest request) { diff --git a/api/src/main/java/com/databasir/api/GroupController.java b/api/src/main/java/com/databasir/api/GroupController.java index f69c7f5..cff4eb8 100644 --- a/api/src/main/java/com/databasir/api/GroupController.java +++ b/api/src/main/java/com/databasir/api/GroupController.java @@ -4,6 +4,7 @@ import com.databasir.api.validator.UserOperationValidator; import com.databasir.common.JsonData; import com.databasir.core.domain.group.data.*; import com.databasir.core.domain.group.service.GroupService; +import com.databasir.core.domain.log.annotation.Operation; import lombok.RequiredArgsConstructor; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; @@ -28,6 +29,7 @@ public class GroupController { @PostMapping(Routes.Group.CREATE) @PreAuthorize("hasAnyAuthority('SYS_OWNER')") + @Operation(module = Operation.Modules.GROUP, name = "创建分组") public JsonData create(@RequestBody @Valid GroupCreateRequest request) { groupService.create(request); return JsonData.ok(); @@ -35,6 +37,9 @@ public class GroupController { @PatchMapping(Routes.Group.UPDATE) @PreAuthorize("hasAnyAuthority('SYS_OWNER', 'GROUP_OWNER'.concat('?groupId='.concat(#request.id)))") + @Operation(module = Operation.Modules.GROUP, + name = "更新分组", + involvedGroupId = "#request.id") public JsonData update(@RequestBody @Valid GroupUpdateRequest request) { groupService.update(request); return JsonData.ok(); @@ -49,6 +54,9 @@ public class GroupController { @DeleteMapping(Routes.Group.DELETE) @PreAuthorize("hasAnyAuthority('SYS_OWNER', 'GROUP_OWNER'.concat('?groupId='.concat(#groupId)))") + @Operation(module = Operation.Modules.GROUP, + name = "删除分组", + involvedGroupId = "#groupId") public JsonData deleteById(@PathVariable Integer groupId) { groupService.delete(groupId); return JsonData.ok(); @@ -69,6 +77,10 @@ public class GroupController { @PostMapping(Routes.Group.ADD_MEMBER) @PreAuthorize("hasAnyAuthority('SYS_OWNER', 'GROUP_OWNER'.concat('?groupId='.concat(#groupId)))") + @Operation(module = Operation.Modules.GROUP, + name = "添加组员", + involvedGroupId = "#groupId", + involvedUserId = "#request.userId") public JsonData addGroupMember(@PathVariable Integer groupId, @RequestBody @Valid GroupMemberCreateRequest request) { userOperationValidator.forbiddenIfUpdateSelfRole(request.getUserId()); @@ -82,6 +94,10 @@ public class GroupController { @DeleteMapping(Routes.Group.DELETE_MEMBER) @PreAuthorize("hasAnyAuthority('SYS_OWNER', 'GROUP_OWNER'.concat('?groupId='.concat(#groupId)))") + @Operation(module = Operation.Modules.GROUP, + name = "移除组员", + involvedGroupId = "#groupId", + involvedUserId = "#userId") public JsonData removeGroupMember(@PathVariable Integer groupId, @PathVariable Integer userId) { userOperationValidator.forbiddenIfUpdateSelfRole(userId); @@ -91,6 +107,10 @@ public class GroupController { @PatchMapping(Routes.Group.UPDATE_MEMBER) @PreAuthorize("hasAnyAuthority('SYS_OWNER', 'GROUP_OWNER'.concat('?groupId='.concat(#groupId)))") + @Operation(module = Operation.Modules.GROUP, + name = "更新组员角色", + involvedGroupId = "#groupId", + involvedUserId = "#userId") public JsonData updateGroupMemberRole(@PathVariable Integer groupId, @PathVariable Integer userId, @RequestBody GroupMemberRoleUpdateRequest request) { diff --git a/api/src/main/java/com/databasir/api/LoginController.java b/api/src/main/java/com/databasir/api/LoginController.java index e060129..64b1244 100644 --- a/api/src/main/java/com/databasir/api/LoginController.java +++ b/api/src/main/java/com/databasir/api/LoginController.java @@ -4,6 +4,7 @@ import com.databasir.common.DatabasirException; import com.databasir.common.JsonData; import com.databasir.common.exception.InvalidTokenException; import com.databasir.core.domain.DomainErrors; +import com.databasir.core.domain.log.annotation.Operation; import com.databasir.core.domain.login.data.AccessTokenRefreshRequest; import com.databasir.core.domain.login.data.AccessTokenRefreshResponse; import com.databasir.core.domain.login.service.LoginService; @@ -32,6 +33,7 @@ public class LoginController { private final LoginService loginService; @GetMapping(Routes.Login.LOGOUT) + @Operation(module = Operation.Modules.USER, name = "注销登录") public JsonData logout() { SecurityContextHolder.clearContext(); return JsonData.ok(); diff --git a/api/src/main/java/com/databasir/api/OperationLogController.java b/api/src/main/java/com/databasir/api/OperationLogController.java new file mode 100644 index 0000000..7345735 --- /dev/null +++ b/api/src/main/java/com/databasir/api/OperationLogController.java @@ -0,0 +1,30 @@ +package com.databasir.api; + +import com.databasir.common.JsonData; +import com.databasir.core.domain.log.data.OperationLogPageCondition; +import com.databasir.core.domain.log.data.OperationLogPageResponse; +import com.databasir.core.domain.log.service.OperationLogService; +import lombok.RequiredArgsConstructor; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.domain.Sort; +import org.springframework.data.web.PageableDefault; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequiredArgsConstructor +@Validated +public class OperationLogController { + + private final OperationLogService operationLogService; + + @GetMapping(Routes.OperationLog.LIST) + public JsonData> list(@PageableDefault(sort = "id", direction = Sort.Direction.DESC) + Pageable page, + OperationLogPageCondition condition) { + Page pageData = operationLogService.list(page, condition); + return JsonData.ok(pageData); + } +} diff --git a/api/src/main/java/com/databasir/api/ProjectController.java b/api/src/main/java/com/databasir/api/ProjectController.java index c654e9e..3c82a4b 100644 --- a/api/src/main/java/com/databasir/api/ProjectController.java +++ b/api/src/main/java/com/databasir/api/ProjectController.java @@ -2,6 +2,7 @@ package com.databasir.api; import com.databasir.api.validator.CronExpressionValidator; import com.databasir.common.JsonData; +import com.databasir.core.domain.log.annotation.Operation; import com.databasir.core.domain.project.data.*; import com.databasir.core.domain.project.service.ProjectService; import lombok.RequiredArgsConstructor; @@ -26,6 +27,9 @@ public class ProjectController { @PostMapping(Routes.GroupProject.CREATE) @PreAuthorize("hasAnyAuthority('SYS_OWNER', 'GROUP_OWNER?groupId='+#request.groupId, 'GROUP_MEMBER?groupId='+#request.groupId)") + @Operation(module = Operation.Modules.PROJECT, + name = "创建项目", + involvedGroupId = "#request.groupId") public JsonData create(@RequestBody @Valid ProjectCreateRequest request) { cronExpressionValidator.isValidCron(request); projectService.create(request); @@ -34,6 +38,10 @@ public class ProjectController { @PatchMapping(Routes.GroupProject.UPDATE) @PreAuthorize("hasAnyAuthority('SYS_OWNER', 'GROUP_OWNER?groupId='+#groupId, 'GROUP_MEMBER?groupId='+#groupId)") + @Operation(module = Operation.Modules.PROJECT, + name = "更新项目", + involvedGroupId = "#groupId", + involvedProjectId = "#request.id") public JsonData update(@RequestBody @Valid ProjectUpdateRequest request, @PathVariable Integer groupId) { cronExpressionValidator.isValidCron(request); @@ -43,6 +51,10 @@ public class ProjectController { @DeleteMapping(Routes.GroupProject.DELETE) @PreAuthorize("hasAnyAuthority('SYS_OWNER', 'GROUP_OWNER?groupId='+#groupId, 'GROUP_MEMBER?groupId='+#groupId)") + @Operation(module = Operation.Modules.PROJECT, + name = "删除项目", + involvedGroupId = "#groupId", + involvedProjectId = "#projectId") public JsonData delete(@PathVariable Integer groupId, @PathVariable Integer projectId) { projectService.delete(projectId); diff --git a/api/src/main/java/com/databasir/api/Routes.java b/api/src/main/java/com/databasir/api/Routes.java index 406d09a..49b8697 100644 --- a/api/src/main/java/com/databasir/api/Routes.java +++ b/api/src/main/java/com/databasir/api/Routes.java @@ -94,4 +94,8 @@ public interface Routes { String REFRESH_ACCESS_TOKEN = "/access_tokens"; } + + interface OperationLog { + String LIST = BASE + "/operation_logs"; + } } diff --git a/api/src/main/java/com/databasir/api/SettingController.java b/api/src/main/java/com/databasir/api/SettingController.java index e54257c..910f2a5 100644 --- a/api/src/main/java/com/databasir/api/SettingController.java +++ b/api/src/main/java/com/databasir/api/SettingController.java @@ -2,6 +2,7 @@ package com.databasir.api; import com.databasir.common.JsonData; +import com.databasir.core.domain.log.annotation.Operation; import com.databasir.core.domain.system.data.SystemEmailResponse; import com.databasir.core.domain.system.data.SystemEmailUpdateRequest; import com.databasir.core.domain.system.service.SystemService; @@ -28,6 +29,7 @@ public class SettingController { } @PostMapping(Routes.Setting.UPDATE_SYS_EMAIL) + @Operation(module = Operation.Modules.PROJECT, name = "更新邮件配置") public JsonData updateSystemEmailSetting(@RequestBody @Valid SystemEmailUpdateRequest request) { systemService.updateEmailSetting(request); return JsonData.ok(); diff --git a/api/src/main/java/com/databasir/api/UserController.java b/api/src/main/java/com/databasir/api/UserController.java index 33f12a8..5c6fc03 100644 --- a/api/src/main/java/com/databasir/api/UserController.java +++ b/api/src/main/java/com/databasir/api/UserController.java @@ -3,6 +3,7 @@ package com.databasir.api; import com.databasir.api.validator.UserOperationValidator; import com.databasir.common.JsonData; import com.databasir.common.exception.Forbidden; +import com.databasir.core.domain.log.annotation.Operation; import com.databasir.core.domain.user.data.*; import com.databasir.core.domain.user.service.UserService; import lombok.RequiredArgsConstructor; @@ -34,6 +35,7 @@ public class UserController { @PostMapping(Routes.User.DISABLE) @PreAuthorize("hasAnyAuthority('SYS_OWNER')") + @Operation(module = Operation.Modules.USER, name = "禁用用户", involvedUserId = "#userId") public JsonData disableUser(@PathVariable Integer userId) { userService.switchEnableStatus(userId, false); return JsonData.ok(); @@ -41,6 +43,7 @@ public class UserController { @PostMapping(Routes.User.ENABLE) @PreAuthorize("hasAnyAuthority('SYS_OWNER')") + @Operation(module = Operation.Modules.USER, name = "启用用户", involvedUserId = "#userId") public JsonData enableUser(@PathVariable Integer userId) { userService.switchEnableStatus(userId, true); return JsonData.ok(); @@ -48,6 +51,7 @@ public class UserController { @PostMapping(Routes.User.CREATE) @PreAuthorize("hasAnyAuthority('SYS_OWNER')") + @Operation(module = Operation.Modules.USER, name = "创建用户") public JsonData create(@RequestBody @Valid UserCreateRequest request) { userService.create(request); return JsonData.ok(); @@ -60,6 +64,7 @@ public class UserController { @PostMapping(Routes.User.RENEW_PASSWORD) @PreAuthorize("hasAnyAuthority('SYS_OWNER')") + @Operation(module = Operation.Modules.USER, name = "重置用户密码", involvedUserId = "#userId") public JsonData renewPassword(@PathVariable Integer userId) { userService.renewPassword(userId); return JsonData.ok(); @@ -67,6 +72,7 @@ public class UserController { @PostMapping(Routes.User.ADD_OR_REMOVE_SYS_OWNER) @PreAuthorize("hasAnyAuthority('SYS_OWNER')") + @Operation(module = Operation.Modules.USER, name = "添加系统管理员", involvedUserId = "#userId") public JsonData addSysOwner(@PathVariable Integer userId) { userOperationValidator.forbiddenIfUpdateSelfRole(userId); userService.addSysOwnerTo(userId); @@ -75,6 +81,7 @@ public class UserController { @DeleteMapping(Routes.User.ADD_OR_REMOVE_SYS_OWNER) @PreAuthorize("hasAnyAuthority('SYS_OWNER')") + @Operation(module = Operation.Modules.USER, name = "移除系统管理员", involvedUserId = "#userId") public JsonData removeSysOwner(@PathVariable Integer userId) { userOperationValidator.forbiddenIfUpdateSelfRole(userId); userService.removeSysOwnerFrom(userId); @@ -82,6 +89,7 @@ public class UserController { } @PostMapping(Routes.User.UPDATE_PASSWORD) + @Operation(module = Operation.Modules.USER, name = "更新密码", involvedUserId = "#userId") public JsonData updatePassword(@PathVariable Integer userId, @RequestBody @Valid UserPasswordUpdateRequest request) { if (userOperationValidator.isMyself(userId)) { @@ -93,6 +101,7 @@ public class UserController { } @PostMapping(Routes.User.UPDATE_NICKNAME) + @Operation(module = Operation.Modules.USER, name = "更新昵称", involvedUserId = "#userId") public JsonData updateNickname(@PathVariable Integer userId, @RequestBody @Valid UserNicknameUpdateRequest request) { if (userOperationValidator.isMyself(userId)) { diff --git a/api/src/main/java/com/databasir/api/advice/OperationLogAspect.java b/api/src/main/java/com/databasir/api/advice/OperationLogAspect.java new file mode 100644 index 0000000..4b0695d --- /dev/null +++ b/api/src/main/java/com/databasir/api/advice/OperationLogAspect.java @@ -0,0 +1,117 @@ +package com.databasir.api.advice; + +import com.databasir.api.config.security.DatabasirUserDetails; +import com.databasir.common.JsonData; +import com.databasir.core.domain.log.annotation.Operation; +import com.databasir.core.domain.log.data.OperationLogRequest; +import com.databasir.core.domain.log.service.OperationLogService; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.annotation.AfterReturning; +import org.aspectj.lang.annotation.AfterThrowing; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.reflect.MethodSignature; +import org.springframework.core.LocalVariableTableParameterNameDiscoverer; +import org.springframework.core.ParameterNameDiscoverer; +import org.springframework.expression.EvaluationContext; +import org.springframework.expression.Expression; +import org.springframework.expression.spel.standard.SpelExpressionParser; +import org.springframework.expression.spel.support.StandardEvaluationContext; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.stereotype.Component; + +import java.lang.reflect.Method; +import java.util.Objects; +import java.util.Optional; + +@Component +@RequiredArgsConstructor +@Aspect +@Slf4j +public class OperationLogAspect { + + private final OperationLogService operationLogService; + + private SpelExpressionParser spelExpressionParser = new SpelExpressionParser(); + + private ParameterNameDiscoverer parameterNameDiscoverer = new LocalVariableTableParameterNameDiscoverer(); + + @AfterReturning(value = "@annotation(operation)", returning = "returnValue") + public void log(JoinPoint joinPoint, Object returnValue, Operation operation) { + saveLog(operation, joinPoint, (JsonData) returnValue); + } + + @AfterThrowing(value = "@annotation(operation)", throwing = "ex") + public void log(JoinPoint joinPoint, RuntimeException ex, Operation operation) { + saveLog(operation, joinPoint, JsonData.error("-1", ex.getMessage())); + throw ex; + } + + private void saveLog(Operation operation, JoinPoint joinPoint, JsonData result) { + MethodSignature signature = (MethodSignature) joinPoint.getSignature(); + Method method = signature.getMethod(); + Object[] arguments = joinPoint.getArgs(); + + DatabasirUserDetails principal = (DatabasirUserDetails) SecurityContextHolder.getContext() + .getAuthentication() + .getPrincipal(); + Integer involvedProjectId = getValueBySPEL(method, arguments, operation.involvedProjectId(), Integer.class) + .orElse(null); + Integer involvedGroupId = getValueBySPEL(method, arguments, operation.involvedGroupId(), Integer.class) + .orElse(null); + Integer involvedUserId = getValueBySPEL(method, arguments, operation.involvedUserId(), Integer.class) + .orElse(null); + int userId = userId(); + String username = principal.getUserPojo().getUsername(); + String nickname = principal.getUserPojo().getNickname(); + if (userId == Operation.Types.SYSTEM_USER_ID) { + username = "system"; + nickname = "system"; + } + OperationLogRequest request = OperationLogRequest.builder() + .operatorUserId(userId) + .operatorUsername(username) + .operatorNickname(nickname) + .operationModule(operation.module()) + .operationCode(method.getName()) + .operationName(operation.name()) + .operationResponse(result) + .isSuccess(result.getErrCode() == null) + .involvedProjectId(involvedProjectId) + .involvedGroupId(involvedGroupId) + .involvedUserId(involvedUserId) + .build(); + operationLogService.save(request); + } + + private int userId() { + DatabasirUserDetails principal = (DatabasirUserDetails) SecurityContextHolder.getContext() + .getAuthentication() + .getPrincipal(); + return principal.getUserPojo().getId(); + } + + private Optional getValueBySPEL(Method method, + Object[] arguments, + String expression, + Class valueType) { + if (expression == null || "N/A".equals(expression)) { + return Optional.empty(); + } + String[] parameterNames = + Objects.requireNonNullElse(parameterNameDiscoverer.getParameterNames(method), new String[0]); + EvaluationContext context = new StandardEvaluationContext(); + for (int len = 0; len < parameterNames.length; len++) { + context.setVariable(parameterNames[len], arguments[len]); + } + try { + Expression expr = spelExpressionParser.parseExpression(expression); + return Optional.ofNullable(expr.getValue(context, valueType)); + } catch (Exception e) { + log.warn("parse expression error: " + expression, e); + return Optional.empty(); + } + } + +} diff --git a/api/src/main/java/com/databasir/job/ProjectDocumentAutoSyncJob.java b/api/src/main/java/com/databasir/job/ProjectDocumentAutoSyncJob.java index 6ec5161..cfd3e77 100644 --- a/api/src/main/java/com/databasir/job/ProjectDocumentAutoSyncJob.java +++ b/api/src/main/java/com/databasir/job/ProjectDocumentAutoSyncJob.java @@ -1,6 +1,9 @@ package com.databasir.job; +import com.databasir.common.JsonData; import com.databasir.core.domain.document.service.DocumentService; +import com.databasir.core.domain.log.data.OperationLogRequest; +import com.databasir.core.domain.log.service.OperationLogService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.quartz.Job; @@ -12,14 +15,47 @@ import org.quartz.JobExecutionException; @Slf4j public class ProjectDocumentAutoSyncJob implements Job { + private final OperationLogService operationLogService; + @Override public void execute(JobExecutionContext context) throws JobExecutionException { JobDataMap dataMap = context.getMergedJobDataMap(); log.info("start sync project document: " + dataMap.toString()); DocumentService documentService = (DocumentService) dataMap.get("documentService"); Integer projectId = dataMap.getInt("projectId"); - documentService.syncByProjectId(projectId); - log.info("sync project document {} over....", projectId); + + try { + documentService.syncByProjectId(projectId); + OperationLogRequest request = OperationLogRequest.builder() + .isSuccess(true) + .operatorNickname("system") + .operatorUsername("system") + .operatorUserId(-1) + .operationName("文档自动同步") + .operationCode("autoSyncDocumentation") + .operationModule("project") + .operationResponse(JsonData.ok()) + .isSuccess(true) + .involvedProjectId(projectId) + .build(); + operationLogService.save(request); + log.info("sync project document {} over....", projectId); + } catch (Exception e) { + OperationLogRequest request = OperationLogRequest.builder() + .isSuccess(true) + .operatorNickname("system") + .operatorUsername("system") + .operatorUserId(-1) + .operationName("文档自动同步") + .operationCode("autoSyncDocumentation") + .operationModule("project") + .operationResponse(JsonData.error("-1", e.getMessage())) + .isSuccess(false) + .involvedProjectId(projectId) + .build(); + operationLogService.save(request); + throw e; + } } } diff --git a/api/src/main/resources/static/.DS_Store b/api/src/main/resources/static/.DS_Store deleted file mode 100644 index 55f87217e19e70a2f8ee3779eb73ce86b3de8536..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHKu};G<5Iv_If?%jRF?wX}AA~9hu_1LvLT#l2YLrwJyFY*xAwGebiJ4zuVBiDz z4Bq+N#A$#L0lJgU&$;vYDKAl+BO)`to{xwIM3llAlN}7780XnLmW0S2(C{9k$*e3Y zAMJNmYv4C3z|XEnGg{Mnxrm?N!LZ2`Wu8x$iz1?i$G1ue6{f5ie#7x_{7SBpv zdL~m-1yli5;14K(Gn*~l71U7`Pz6+hS^@q(SU6)A&KTdatabasir-frontend
\ No newline at end of file +databasir-frontend
\ No newline at end of file diff --git a/api/src/main/resources/static/js/app.943c1753.js b/api/src/main/resources/static/js/app.7a0ffda3.js similarity index 91% rename from api/src/main/resources/static/js/app.943c1753.js rename to api/src/main/resources/static/js/app.7a0ffda3.js index 147905b..1c1c9e9 100644 --- a/api/src/main/resources/static/js/app.943c1753.js +++ b/api/src/main/resources/static/js/app.7a0ffda3.js @@ -1,2 +1,2 @@ -(function(e){function t(t){for(var r,o,u=t[0],i=t[1],l=t[2],s=0,d=[];s(new Date).getTime():(console.log("warn: not found accessToken and expireAt key"),!1)},saveAccessToken:function(e,t){window.localStorage.setItem(r,e),window.localStorage.setItem(o,t)},loadAccessToken:function(){return window.localStorage.getItem(r)}},u={saveUserLoginData:function(e){window.localStorage.setItem(r,e.accessToken),window.localStorage.setItem(o,e.accessTokenExpireAt),window.localStorage.setItem(c,JSON.stringify(e))},removeUserLoginData:function(){window.localStorage.removeItem(c),window.localStorage.removeItem(r),window.localStorage.removeItem(o)},loadUserLoginData:function(){if(window.localStorage.getItem(c)){var e=window.localStorage.getItem(c);return JSON.parse(e)}return null},hasAnyRoles:function(e){var t=window.localStorage.getItem(c);if(null==t)return!1;var n=JSON.parse(t);return n.roles.map((function(e){return e.groupId?e.role+"?groupId="+e.groupId:e.role})).some((function(t){return e.some((function(e){return e==t}))}))},getRefreshToken:function(){var e=window.localStorage.getItem(c);if(null==e)return null;var t=JSON.parse(e);return t.refreshToken}}},"61b1":function(e,t,n){"use strict";n("8cd5")},"8cd5":function(e,t,n){},a18c:function(e,t,n){"use strict";n("d3b7"),n("3ca3"),n("ddb0");var r=n("6c02"),o=n("7a23");function c(e,t,n,r,c,a){var u=Object(o["resolveComponent"])("AppNav"),i=Object(o["resolveComponent"])("el-aside"),l=Object(o["resolveComponent"])("Breadcrumb"),s=Object(o["resolveComponent"])("Avatar"),d=Object(o["resolveComponent"])("el-header"),b=Object(o["resolveComponent"])("router-view"),f=Object(o["resolveComponent"])("el-main"),m=Object(o["resolveComponent"])("el-container");return Object(o["openBlock"])(),Object(o["createBlock"])(m,{class:"databasir"},{default:Object(o["withCtx"])((function(){return[Object(o["createVNode"])(i,null,{default:Object(o["withCtx"])((function(){return[Object(o["createVNode"])(u,{class:"databasir-nav"})]})),_:1}),Object(o["createVNode"])(d,{class:"databasir-main-header"},{default:Object(o["withCtx"])((function(){return[Object(o["createVNode"])(l),Object(o["createVNode"])(s)]})),_:1}),Object(o["createVNode"])(f,{class:"databasir-main"},{default:Object(o["withCtx"])((function(){return[Object(o["createVNode"])(m,null,{default:Object(o["withCtx"])((function(){return[Object(o["createVNode"])(f,{class:"databasir-main-content"},{default:Object(o["withCtx"])((function(){return[Object(o["createVNode"])(b)]})),_:1})]})),_:1})]})),_:1})]})),_:1})}var a=Object(o["createElementVNode"])("span",null,"Databasir",-1);function u(e,t,n,r,c,u){var i=Object(o["resolveComponent"])("expand"),l=Object(o["resolveComponent"])("el-icon"),s=Object(o["resolveComponent"])("el-menu-item"),d=Object(o["resolveComponent"])("home-filled"),b=Object(o["resolveComponent"])("el-sub-menu"),f=Object(o["resolveComponent"])("el-menu");return Object(o["openBlock"])(),Object(o["createBlock"])(f,{router:"",collapse:r.isCollapse,mode:"vertical",class:"left-menu"},{default:Object(o["withCtx"])((function(){return[r.isCollapse?(Object(o["openBlock"])(),Object(o["createBlock"])(s,{key:0,onClick:r.expandMenu,index:"#"},{default:Object(o["withCtx"])((function(){return[Object(o["createVNode"])(l,null,{default:Object(o["withCtx"])((function(){return[Object(o["createVNode"])(i)]})),_:1})]})),_:1},8,["onClick"])):Object(o["createCommentVNode"])("",!0),Object(o["createVNode"])(s,{index:"/"},{title:Object(o["withCtx"])((function(){return[a]})),default:Object(o["withCtx"])((function(){return[Object(o["createVNode"])(l,null,{default:Object(o["withCtx"])((function(){return[Object(o["createVNode"])(d)]})),_:1})]})),_:1}),(Object(o["openBlock"])(!0),Object(o["createElementBlock"])(o["Fragment"],null,Object(o["renderList"])(r.routes,(function(e,t){return Object(o["openBlock"])(),Object(o["createElementBlock"])(o["Fragment"],{key:t},[r.isShowMenu(e)&&e.children.length>0&&e.children.some((function(e){return!e.hidden}))?(Object(o["openBlock"])(),Object(o["createBlock"])(b,{key:0,index:e.path},{title:Object(o["withCtx"])((function(){return[Object(o["createVNode"])(l,null,{default:Object(o["withCtx"])((function(){return[(Object(o["openBlock"])(),Object(o["createBlock"])(Object(o["resolveDynamicComponent"])(e.icon)))]})),_:2},1024),Object(o["createElementVNode"])("span",null,Object(o["toDisplayString"])(e.meta.nav),1)]})),default:Object(o["withCtx"])((function(){return[(Object(o["openBlock"])(!0),Object(o["createElementBlock"])(o["Fragment"],null,Object(o["renderList"])(e.children,(function(n,r){return Object(o["openBlock"])(),Object(o["createElementBlock"])(o["Fragment"],{key:t+"-"+r},[n.hidden?Object(o["createCommentVNode"])("",!0):(Object(o["openBlock"])(),Object(o["createBlock"])(s,{key:0,index:e.path+"/"+n.path},{title:Object(o["withCtx"])((function(){return[Object(o["createElementVNode"])("span",null,Object(o["toDisplayString"])(n.meta.nav),1)]})),default:Object(o["withCtx"])((function(){return[n.icon?(Object(o["openBlock"])(),Object(o["createBlock"])(l,{key:0},{default:Object(o["withCtx"])((function(){return[(Object(o["openBlock"])(),Object(o["createBlock"])(Object(o["resolveDynamicComponent"])(n.icon)))]})),_:2},1024)):Object(o["createCommentVNode"])("",!0)]})),_:2},1032,["index"]))],64)})),128))]})),_:2},1032,["index"])):r.isShowMenu(e)?(Object(o["openBlock"])(),Object(o["createBlock"])(s,{key:1,index:e.path},{title:Object(o["withCtx"])((function(){return[Object(o["createElementVNode"])("span",null,Object(o["toDisplayString"])(e.meta.nav),1)]})),default:Object(o["withCtx"])((function(){return[Object(o["createVNode"])(l,null,{default:Object(o["withCtx"])((function(){return[(Object(o["openBlock"])(),Object(o["createBlock"])(Object(o["resolveDynamicComponent"])(e.icon)))]})),_:2},1024)]})),_:2},1032,["index"])):Object(o["createCommentVNode"])("",!0)],64)})),128))]})),_:1},8,["collapse"])}var i=n("5f87"),l=n("4360"),s={setup:function(){var e=Object(o["computed"])((function(){return l["a"].state.menu.isCollapse})),t=Object(r["d"])(),n=t.options.routes,c=function(e){if(e.hidden)return!1;if(e.meta.requireAnyRoles&&e.meta.requireAnyRoles.length>0){var t=i["b"].hasAnyRoles(e.meta.requireAnyRoles);if(!t)return!1}return!0},a=function(){l["a"].commit("expandMenu")};return{isCollapse:e,isShowMenu:c,expandMenu:a,routes:n}}},d=(n("61b1"),n("6b0d")),b=n.n(d);const f=b()(s,[["render",u]]);var m=f;n("b0c0");function p(e,t,n,r,c,a){var u=Object(o["resolveComponent"])("fold"),i=Object(o["resolveComponent"])("el-icon"),l=Object(o["resolveComponent"])("el-link"),s=Object(o["resolveComponent"])("el-breadcrumb-item"),d=Object(o["resolveComponent"])("el-breadcrumb");return Object(o["openBlock"])(),Object(o["createBlock"])(d,{separator:"/"},{default:Object(o["withCtx"])((function(){return[a.menuIsCollapse?Object(o["createCommentVNode"])("",!0):(Object(o["openBlock"])(),Object(o["createBlock"])(s,{key:0},{default:Object(o["withCtx"])((function(){return[Object(o["createVNode"])(l,{onClick:t[0]||(t[0]=function(e){return a.onFoldMenu()}),underline:!1},{default:Object(o["withCtx"])((function(){return[Object(o["createVNode"])(i,null,{default:Object(o["withCtx"])((function(){return[Object(o["createVNode"])(u)]})),_:1})]})),_:1})]})),_:1})),(Object(o["openBlock"])(!0),Object(o["createElementBlock"])(o["Fragment"],null,Object(o["renderList"])(a.breadcrumbs,(function(e,t){return Object(o["openBlock"])(),Object(o["createBlock"])(s,{key:t,to:e.to},{default:Object(o["withCtx"])((function(){return[Object(o["createTextVNode"])(Object(o["toDisplayString"])(e.name),1)]})),_:2},1032,["to"])})),128))]})),_:1})}var h={data:function(){},computed:{breadcrumbs:function(){return"function"===typeof this.$route.meta.breadcrumb?this.$route.meta.breadcrumb(this.$route,this.$store.state):[]},menuIsCollapse:function(){return this.$store.state.menu.isCollapse}},methods:{onFoldMenu:function(){this.$store.commit("foldMenu")}}};const j=b()(h,[["render",p]]);var O=j,v=Object(o["createTextVNode"])("个人中心"),k=Object(o["createTextVNode"])("注销登陆");function g(e,t,n,r,c,a){var u=Object(o["resolveComponent"])("el-avatar"),i=Object(o["resolveComponent"])("el-dropdown-item"),l=Object(o["resolveComponent"])("el-dropdown-menu"),s=Object(o["resolveComponent"])("el-dropdown");return Object(o["openBlock"])(),Object(o["createBlock"])(s,null,{dropdown:Object(o["withCtx"])((function(){return[Object(o["createVNode"])(l,null,{default:Object(o["withCtx"])((function(){return[Object(o["createVNode"])(i,null,{default:Object(o["withCtx"])((function(){return[Object(o["createTextVNode"])(Object(o["toDisplayString"])(a.userNickname),1)]})),_:1}),Object(o["createVNode"])(i,{icon:"user",divided:"",onClick:t[0]||(t[0]=function(e){return a.toProfilePage()})},{default:Object(o["withCtx"])((function(){return[v]})),_:1}),Object(o["createVNode"])(i,{icon:"back",onClick:t[1]||(t[1]=function(e){return a.onLogout()})},{default:Object(o["withCtx"])((function(){return[k]})),_:1})]})),_:1})]})),default:Object(o["withCtx"])((function(){return[Object(o["createVNode"])(u,{size:36,src:c.avatarUrl,icon:"avatar"},null,8,["src"])]})),_:1})}var w={data:function(){return{avatarUrl:null}},computed:{userNickname:function(){return this.$store.state.user.nickname}},methods:{onLogout:function(){i["b"].removeUserLoginData(),this.$router.push({path:"/login"})},toProfilePage:function(){this.$router.push({path:"/profile"})}}};const C=b()(w,[["render",g]]);var y=C,N={components:{AppNav:m,Breadcrumb:O,Avatar:y},data:function(){return{}}};n("f8c6");const x=b()(N,[["render",c]]);var B=x;function S(){return{name:"首页",to:{path:"/"}}}function _(){return{name:"项目中心",to:{name:"groupListPage"}}}function V(e){var t="项目组";return e.query.groupName&&(t=e.query.groupName),{name:t,to:{path:"/groups/"+e.params.groupId}}}function E(e){var t="项目文档";e.query.projectName&&(t=e.query.projectName);var n=e.params.projectId,r=e.params.groupId;return{name:t,to:{path:"/groups/"+r+"/projects/"+n+"/documents",query:{projectName:t}}}}function A(){return{name:"用户列表",to:{path:"/users"}}}function P(){return{name:"个人中心",to:{path:"/profile"}}}function T(){return{name:"邮箱设置",to:{path:"/settings/sysEmail"}}}var I={index:function(){return[S()]},groupList:function(){return[S(),_()]},groupDashboard:function(e,t){return[S(),_(),V(e,t)]},groupProjectDocument:function(e,t){return[S(),_(),V(e,t),E(e)]},userProfile:function(){return[S(),P()]},userList:function(){return[S(),A()]},sysEmailEdit:function(){return[S(),T()]}},q=I,L=[{path:"/login",component:function(){return Promise.all([n.e("chunk-48cebeac"),n.e("chunk-7e394785")]).then(n.bind(null,"a55b"))},hidden:!0,meta:{requireAuth:!1}},{path:"/",hidden:!0,component:B,children:[{path:"",hidden:!0,component:function(){return Promise.all([n.e("chunk-48cebeac"),n.e("chunk-04ac1c26")]).then(n.bind(null,"d648"))},meta:{breadcrumb:q.groupList}}]},{path:"/groups",icon:"Collection",component:B,meta:{nav:"项目中心"},children:[{path:"",name:"groupListPage",hidden:!0,component:function(){return Promise.all([n.e("chunk-48cebeac"),n.e("chunk-04ac1c26")]).then(n.bind(null,"d648"))},meta:{breadcrumb:q.groupList}},{path:":groupId",hidden:!0,component:function(){return Promise.all([n.e("chunk-48cebeac"),n.e("chunk-4fd080e4")]).then(n.bind(null,"3cd5"))},meta:{breadcrumb:q.groupDashboard}},{path:":groupId/projects/:projectId/documents",hidden:!0,component:function(){return Promise.all([n.e("chunk-48cebeac"),n.e("chunk-7fa689fe")]).then(n.bind(null,"0742"))},meta:{breadcrumb:q.groupProjectDocument}}]},{path:"/users",icon:"List",component:B,meta:{nav:"用户中心",requireAnyRoles:["SYS_OWNER"]},children:[{path:"",hidden:!0,component:function(){return Promise.all([n.e("chunk-48cebeac"),n.e("chunk-abb10c56")]).then(n.bind(null,"ab3a"))},meta:{breadcrumb:q.userList}}]},{path:"/profile",icon:"User",component:B,meta:{nav:"个人中心",breadcrumb:q.userProfile},children:[{path:"",hidden:!0,component:function(){return Promise.all([n.e("chunk-48cebeac"),n.e("chunk-fffb1b64")]).then(n.bind(null,"4a39"))}}]},{path:"/settings",icon:"Setting",component:B,meta:{nav:"系统中心",requireAnyRoles:["SYS_OWNER"]},children:[{path:"sysEmail",icon:"Notification",component:function(){return Promise.all([n.e("chunk-48cebeac"),n.e("chunk-2d0cc811")]).then(n.bind(null,"4de0"))},meta:{nav:"邮箱设置",breadcrumb:q.sysEmailEdit}},{path:"sysKey",icon:"Key",hidden:"true",component:B,meta:{nav:"系统秘钥",breadcrumb:q.sysKeyEdit}}]}],D=Object(r["a"])({history:Object(r["b"])(),routes:L});D.beforeEach((function(e,t,n){0==e.meta.requireAuth?"/login"==e.path&&i["a"].hasAccessToken()?n(t):n():i["a"].hasAccessToken()?n():n({path:"/login"})})),D.beforeEach((function(e,t,n){!e.query.groupName&&t.query.groupName&&(e.query.groupName=t.query.groupName),!e.query.projectName&&t.query.projectName&&(e.query.projectName=t.query.projectName),n()}));t["a"]=D},ee2f:function(e,t,n){},f8c6:function(e,t,n){"use strict";n("ee2f")}}); -//# sourceMappingURL=app.943c1753.js.map \ No newline at end of file +(function(e){function t(t){for(var r,o,u=t[0],i=t[1],l=t[2],s=0,d=[];s(new Date).getTime():(console.log("warn: not found accessToken and expireAt key"),!1)},saveAccessToken:function(e,t){window.localStorage.setItem(r,e),window.localStorage.setItem(o,t)},loadAccessToken:function(){return window.localStorage.getItem(r)}},u={saveUserLoginData:function(e){window.localStorage.setItem(r,e.accessToken),window.localStorage.setItem(o,e.accessTokenExpireAt),window.localStorage.setItem(c,JSON.stringify(e))},removeUserLoginData:function(){window.localStorage.removeItem(c),window.localStorage.removeItem(r),window.localStorage.removeItem(o)},loadUserLoginData:function(){if(window.localStorage.getItem(c)){var e=window.localStorage.getItem(c);return JSON.parse(e)}return null},hasAnyRoles:function(e){var t=window.localStorage.getItem(c);if(null==t)return!1;var n=JSON.parse(t);return n.roles.map((function(e){return e.groupId?e.role+"?groupId="+e.groupId:e.role})).some((function(t){return e.some((function(e){return e==t}))}))},getRefreshToken:function(){var e=window.localStorage.getItem(c);if(null==e)return null;var t=JSON.parse(e);return t.refreshToken}}},"61b1":function(e,t,n){"use strict";n("8cd5")},"8cd5":function(e,t,n){},a18c:function(e,t,n){"use strict";n("d3b7"),n("3ca3"),n("ddb0");var r=n("6c02"),o=n("7a23");function c(e,t,n,r,c,a){var u=Object(o["resolveComponent"])("AppNav"),i=Object(o["resolveComponent"])("el-aside"),l=Object(o["resolveComponent"])("Breadcrumb"),s=Object(o["resolveComponent"])("Avatar"),d=Object(o["resolveComponent"])("el-header"),b=Object(o["resolveComponent"])("router-view"),m=Object(o["resolveComponent"])("el-main"),f=Object(o["resolveComponent"])("el-container");return Object(o["openBlock"])(),Object(o["createBlock"])(f,{class:"databasir"},{default:Object(o["withCtx"])((function(){return[Object(o["createVNode"])(i,null,{default:Object(o["withCtx"])((function(){return[Object(o["createVNode"])(u,{class:"databasir-nav"})]})),_:1}),Object(o["createVNode"])(d,{class:"databasir-main-header"},{default:Object(o["withCtx"])((function(){return[Object(o["createVNode"])(l),Object(o["createVNode"])(s)]})),_:1}),Object(o["createVNode"])(m,{class:"databasir-main"},{default:Object(o["withCtx"])((function(){return[Object(o["createVNode"])(f,null,{default:Object(o["withCtx"])((function(){return[Object(o["createVNode"])(m,{class:"databasir-main-content"},{default:Object(o["withCtx"])((function(){return[Object(o["createVNode"])(b)]})),_:1})]})),_:1})]})),_:1})]})),_:1})}var a=Object(o["createElementVNode"])("span",null,"Databasir",-1);function u(e,t,n,r,c,u){var i=Object(o["resolveComponent"])("expand"),l=Object(o["resolveComponent"])("el-icon"),s=Object(o["resolveComponent"])("el-menu-item"),d=Object(o["resolveComponent"])("home-filled"),b=Object(o["resolveComponent"])("el-sub-menu"),m=Object(o["resolveComponent"])("el-menu");return Object(o["openBlock"])(),Object(o["createBlock"])(m,{router:"",collapse:r.isCollapse,mode:"vertical",class:"left-menu"},{default:Object(o["withCtx"])((function(){return[r.isCollapse?(Object(o["openBlock"])(),Object(o["createBlock"])(s,{key:0,onClick:r.expandMenu,index:"#"},{default:Object(o["withCtx"])((function(){return[Object(o["createVNode"])(l,null,{default:Object(o["withCtx"])((function(){return[Object(o["createVNode"])(i)]})),_:1})]})),_:1},8,["onClick"])):Object(o["createCommentVNode"])("",!0),Object(o["createVNode"])(s,{index:"/"},{title:Object(o["withCtx"])((function(){return[a]})),default:Object(o["withCtx"])((function(){return[Object(o["createVNode"])(l,null,{default:Object(o["withCtx"])((function(){return[Object(o["createVNode"])(d)]})),_:1})]})),_:1}),(Object(o["openBlock"])(!0),Object(o["createElementBlock"])(o["Fragment"],null,Object(o["renderList"])(r.routes,(function(e,t){return Object(o["openBlock"])(),Object(o["createElementBlock"])(o["Fragment"],{key:t},[r.isShowMenu(e)&&e.children.length>0&&e.children.some((function(e){return!e.hidden}))?(Object(o["openBlock"])(),Object(o["createBlock"])(b,{key:0,index:e.path},{title:Object(o["withCtx"])((function(){return[Object(o["createVNode"])(l,null,{default:Object(o["withCtx"])((function(){return[(Object(o["openBlock"])(),Object(o["createBlock"])(Object(o["resolveDynamicComponent"])(e.icon)))]})),_:2},1024),Object(o["createElementVNode"])("span",null,Object(o["toDisplayString"])(e.meta.nav),1)]})),default:Object(o["withCtx"])((function(){return[(Object(o["openBlock"])(!0),Object(o["createElementBlock"])(o["Fragment"],null,Object(o["renderList"])(e.children,(function(n,r){return Object(o["openBlock"])(),Object(o["createElementBlock"])(o["Fragment"],{key:t+"-"+r},[n.hidden?Object(o["createCommentVNode"])("",!0):(Object(o["openBlock"])(),Object(o["createBlock"])(s,{key:0,index:e.path+"/"+n.path},{title:Object(o["withCtx"])((function(){return[Object(o["createElementVNode"])("span",null,Object(o["toDisplayString"])(n.meta.nav),1)]})),default:Object(o["withCtx"])((function(){return[n.icon?(Object(o["openBlock"])(),Object(o["createBlock"])(l,{key:0},{default:Object(o["withCtx"])((function(){return[(Object(o["openBlock"])(),Object(o["createBlock"])(Object(o["resolveDynamicComponent"])(n.icon)))]})),_:2},1024)):Object(o["createCommentVNode"])("",!0)]})),_:2},1032,["index"]))],64)})),128))]})),_:2},1032,["index"])):r.isShowMenu(e)?(Object(o["openBlock"])(),Object(o["createBlock"])(s,{key:1,index:e.path},{title:Object(o["withCtx"])((function(){return[Object(o["createElementVNode"])("span",null,Object(o["toDisplayString"])(e.meta.nav),1)]})),default:Object(o["withCtx"])((function(){return[Object(o["createVNode"])(l,null,{default:Object(o["withCtx"])((function(){return[(Object(o["openBlock"])(),Object(o["createBlock"])(Object(o["resolveDynamicComponent"])(e.icon)))]})),_:2},1024)]})),_:2},1032,["index"])):Object(o["createCommentVNode"])("",!0)],64)})),128))]})),_:1},8,["collapse"])}var i=n("5f87"),l=n("4360"),s={setup:function(){var e=Object(o["computed"])((function(){return l["a"].state.menu.isCollapse})),t=Object(r["d"])(),n=t.options.routes,c=function(e){if(e.hidden)return!1;if(e.meta.requireAnyRoles&&e.meta.requireAnyRoles.length>0){var t=i["b"].hasAnyRoles(e.meta.requireAnyRoles);if(!t)return!1}return!0},a=function(){l["a"].commit("expandMenu")};return{isCollapse:e,isShowMenu:c,expandMenu:a,routes:n}}},d=(n("61b1"),n("6b0d")),b=n.n(d);const m=b()(s,[["render",u]]);var f=m;n("b0c0");function p(e,t,n,r,c,a){var u=Object(o["resolveComponent"])("fold"),i=Object(o["resolveComponent"])("el-icon"),l=Object(o["resolveComponent"])("el-link"),s=Object(o["resolveComponent"])("el-breadcrumb-item"),d=Object(o["resolveComponent"])("el-breadcrumb");return Object(o["openBlock"])(),Object(o["createBlock"])(d,{separator:"/"},{default:Object(o["withCtx"])((function(){return[a.menuIsCollapse?Object(o["createCommentVNode"])("",!0):(Object(o["openBlock"])(),Object(o["createBlock"])(s,{key:0},{default:Object(o["withCtx"])((function(){return[Object(o["createVNode"])(l,{onClick:t[0]||(t[0]=function(e){return a.onFoldMenu()}),underline:!1},{default:Object(o["withCtx"])((function(){return[Object(o["createVNode"])(i,null,{default:Object(o["withCtx"])((function(){return[Object(o["createVNode"])(u)]})),_:1})]})),_:1})]})),_:1})),(Object(o["openBlock"])(!0),Object(o["createElementBlock"])(o["Fragment"],null,Object(o["renderList"])(a.breadcrumbs,(function(e,t){return Object(o["openBlock"])(),Object(o["createBlock"])(s,{key:t,to:e.to},{default:Object(o["withCtx"])((function(){return[Object(o["createTextVNode"])(Object(o["toDisplayString"])(e.name),1)]})),_:2},1032,["to"])})),128))]})),_:1})}var h={data:function(){},computed:{breadcrumbs:function(){return"function"===typeof this.$route.meta.breadcrumb?this.$route.meta.breadcrumb(this.$route,this.$store.state):[]},menuIsCollapse:function(){return this.$store.state.menu.isCollapse}},methods:{onFoldMenu:function(){this.$store.commit("foldMenu")}}};const j=b()(h,[["render",p]]);var O=j,v=Object(o["createTextVNode"])("个人中心"),k=Object(o["createTextVNode"])("注销登陆");function g(e,t,n,r,c,a){var u=Object(o["resolveComponent"])("el-avatar"),i=Object(o["resolveComponent"])("el-dropdown-item"),l=Object(o["resolveComponent"])("el-dropdown-menu"),s=Object(o["resolveComponent"])("el-dropdown");return Object(o["openBlock"])(),Object(o["createBlock"])(s,null,{dropdown:Object(o["withCtx"])((function(){return[Object(o["createVNode"])(l,null,{default:Object(o["withCtx"])((function(){return[Object(o["createVNode"])(i,null,{default:Object(o["withCtx"])((function(){return[Object(o["createTextVNode"])(Object(o["toDisplayString"])(a.userNickname),1)]})),_:1}),Object(o["createVNode"])(i,{icon:"user",divided:"",onClick:t[0]||(t[0]=function(e){return a.toProfilePage()})},{default:Object(o["withCtx"])((function(){return[v]})),_:1}),Object(o["createVNode"])(i,{icon:"back",onClick:t[1]||(t[1]=function(e){return a.onLogout()})},{default:Object(o["withCtx"])((function(){return[k]})),_:1})]})),_:1})]})),default:Object(o["withCtx"])((function(){return[Object(o["createVNode"])(u,{size:36,src:c.avatarUrl,icon:"avatar"},null,8,["src"])]})),_:1})}var w={data:function(){return{avatarUrl:null}},computed:{userNickname:function(){return this.$store.state.user.nickname}},methods:{onLogout:function(){i["b"].removeUserLoginData(),this.$router.push({path:"/login"})},toProfilePage:function(){this.$router.push({path:"/profile"})}}};const C=b()(w,[["render",g]]);var y=C,N={components:{AppNav:f,Breadcrumb:O,Avatar:y},data:function(){return{}}};n("f8c6");const x=b()(N,[["render",c]]);var B=x;function S(){return{name:"首页",to:{path:"/"}}}function _(){return{name:"项目中心",to:{name:"groupListPage"}}}function V(e){var t="项目组";return e.query.groupName&&(t=e.query.groupName),{name:t,to:{path:"/groups/"+e.params.groupId}}}function E(e){var t="项目文档";e.query.projectName&&(t=e.query.projectName);var n=e.params.projectId,r=e.params.groupId;return{name:t,to:{path:"/groups/"+r+"/projects/"+n+"/documents",query:{projectName:t}}}}function A(){return{name:"用户列表",to:{path:"/users"}}}function P(){return{name:"个人中心",to:{path:"/profile"}}}function T(){return{name:"邮箱设置",to:{path:"/settings/sysEmail"}}}var I={index:function(){return[S()]},groupList:function(){return[S(),_()]},groupDashboard:function(e,t){return[S(),_(),V(e,t)]},groupProjectDocument:function(e,t){return[S(),_(),V(e,t),E(e)]},userProfile:function(){return[S(),P()]},userList:function(){return[S(),A()]},sysEmailEdit:function(){return[S(),T()]}},q=I,L=[{path:"/login",component:function(){return Promise.all([n.e("chunk-48cebeac"),n.e("chunk-7e394785")]).then(n.bind(null,"a55b"))},hidden:!0,meta:{requireAuth:!1}},{path:"/",hidden:!0,component:B,children:[{path:"",hidden:!0,component:function(){return Promise.all([n.e("chunk-48cebeac"),n.e("chunk-04ac1c26")]).then(n.bind(null,"d648"))},meta:{breadcrumb:q.groupList}}]},{path:"/groups",icon:"Collection",component:B,meta:{nav:"项目中心"},children:[{path:"",name:"groupListPage",hidden:!0,component:function(){return Promise.all([n.e("chunk-48cebeac"),n.e("chunk-04ac1c26")]).then(n.bind(null,"d648"))},meta:{breadcrumb:q.groupList}},{path:":groupId",hidden:!0,component:function(){return Promise.all([n.e("chunk-48cebeac"),n.e("chunk-c2109158")]).then(n.bind(null,"3cd5"))},meta:{breadcrumb:q.groupDashboard}},{path:":groupId/projects/:projectId/documents",hidden:!0,component:function(){return Promise.all([n.e("chunk-48cebeac"),n.e("chunk-7fa689fe")]).then(n.bind(null,"0742"))},meta:{breadcrumb:q.groupProjectDocument}}]},{path:"/users",icon:"List",component:B,meta:{nav:"用户中心",requireAnyRoles:["SYS_OWNER"]},children:[{path:"",hidden:!0,component:function(){return Promise.all([n.e("chunk-48cebeac"),n.e("chunk-abb10c56")]).then(n.bind(null,"ab3a"))},meta:{breadcrumb:q.userList}}]},{path:"/profile",icon:"User",component:B,meta:{nav:"个人中心",breadcrumb:q.userProfile},children:[{path:"",hidden:!0,component:function(){return Promise.all([n.e("chunk-48cebeac"),n.e("chunk-fffb1b64")]).then(n.bind(null,"4a39"))}}]},{path:"/settings",icon:"Setting",component:B,meta:{nav:"系统中心",requireAnyRoles:["SYS_OWNER"]},children:[{path:"sysEmail",icon:"Notification",component:function(){return Promise.all([n.e("chunk-48cebeac"),n.e("chunk-2d0cc811")]).then(n.bind(null,"4de0"))},meta:{nav:"邮箱设置",breadcrumb:q.sysEmailEdit}},{path:"sysKey",icon:"Key",hidden:"true",component:B,meta:{nav:"系统秘钥",breadcrumb:q.sysKeyEdit}}]}],D=Object(r["a"])({history:Object(r["b"])(),routes:L});D.beforeEach((function(e,t,n){0==e.meta.requireAuth?"/login"==e.path&&i["a"].hasAccessToken()?n(t):n():i["a"].hasAccessToken()?n():n({path:"/login"})})),D.beforeEach((function(e,t,n){!e.query.groupName&&t.query.groupName&&(e.query.groupName=t.query.groupName),!e.query.projectName&&t.query.projectName&&(e.query.projectName=t.query.projectName),n()}));t["a"]=D},ee2f:function(e,t,n){},f8c6:function(e,t,n){"use strict";n("ee2f")}}); +//# sourceMappingURL=app.7a0ffda3.js.map \ No newline at end of file diff --git a/api/src/main/resources/static/js/app.943c1753.js.map b/api/src/main/resources/static/js/app.7a0ffda3.js.map similarity index 53% rename from api/src/main/resources/static/js/app.943c1753.js.map rename to api/src/main/resources/static/js/app.7a0ffda3.js.map index 56c82c9..f97b430 100644 --- a/api/src/main/resources/static/js/app.943c1753.js.map +++ b/api/src/main/resources/static/js/app.7a0ffda3.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/store/index.js","webpack:///./src/App.vue","webpack:///./src/App.vue?8ecf","webpack:///./src/main.js","webpack:///./src/utils/auth.js","webpack:///./src/components/AppNav.vue?2477","webpack:///./src/layouts/Layout.vue","webpack:///./src/components/AppNav.vue","webpack:///./src/components/AppNav.vue?33c4","webpack:///./src/components/Breadcrumb.vue","webpack:///./src/components/Breadcrumb.vue?57f7","webpack:///./src/components/Avatar.vue","webpack:///./src/components/Avatar.vue?a351","webpack:///./src/layouts/Layout.vue?726f","webpack:///./src/router/breadcurmb.js","webpack:///./src/router/index.js","webpack:///./src/layouts/Layout.vue?f7ac"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","i","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","modules","parentJsonpFunction","shift","deferredModules","apply","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","installedModules","installedCssChunks","jsonpScriptSrc","p","exports","module","l","e","promises","cssChunks","Promise","resolve","reject","href","fullhref","existingLinkTags","document","getElementsByTagName","tag","dataHref","getAttribute","rel","existingStyleTags","linkTag","createElement","type","onload","onerror","event","request","target","src","err","Error","code","parentNode","removeChild","head","appendChild","then","installedChunkData","promise","onScriptComplete","script","charset","timeout","nc","setAttribute","error","clearTimeout","chunk","errorType","realSrc","message","name","undefined","setTimeout","all","m","c","d","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","oe","console","jsonpArray","window","oldJsonpFunction","slice","store","createStore","state","user","loadUserLoginData","userData","nickname","usernmae","email","menu","isCollapse","mutations","userUpdate","param","foldMenu","expandMenu","__exports__","render","app","createApp","App","keys","Icons","forEach","component","directive","mounted","el","binding","roles","hasAnyRoles","updated","child","querySelector","id","poper","getElementById","selector","addEventListener","condition","this","scrollHeight","scrollTop","clientHeight","use","ElementPlus","router","mount","accessTokenKey","accessTokenExpireAtKey","userLoginDataKey","token","hasAccessToken","accessToken","loadAccessToken","hasValidAccessToken","expireAt","localStorage","getItem","Date","getTime","log","saveAccessToken","tokenExpireAt","setItem","saveUserLoginData","userLoginData","accessTokenExpireAt","JSON","stringify","removeUserLoginData","removeItem","parse","map","role","groupId","some","exists","expected","getRefreshToken","refreshToken","class","collapse","index","title","routes","isShowMenu","children","ele","hidden","path","icon","meta","nav","childIndex","setup","options","requireAnyRoles","commit","separator","menuIsCollapse","onFoldMenu","underline","breadcrumbs","item","to","computed","$route","breadcrumb","$store","methods","dropdown","userNickname","divided","toProfilePage","onLogout","size","avatarUrl","$router","components","AppNav","Breadcrumb","Avatar","groupList","groupDashboard","route","groupName","query","params","groupProjectDocument","projectName","projectId","userList","userProfile","sysEmailEdit","breadcurmbMap","requireAuth","Layout","sysKeyEdit","createRouter","history","createWebHashHistory","beforeEach","from","next"],"mappings":"aACE,SAASA,EAAqBC,GAQ7B,IAPA,IAMIC,EAAUC,EANVC,EAAWH,EAAK,GAChBI,EAAcJ,EAAK,GACnBK,EAAiBL,EAAK,GAIHM,EAAI,EAAGC,EAAW,GACpCD,EAAIH,EAASK,OAAQF,IACzBJ,EAAUC,EAASG,GAChBG,OAAOC,UAAUC,eAAeC,KAAKC,EAAiBX,IAAYW,EAAgBX,IACpFK,EAASO,KAAKD,EAAgBX,GAAS,IAExCW,EAAgBX,GAAW,EAE5B,IAAID,KAAYG,EACZK,OAAOC,UAAUC,eAAeC,KAAKR,EAAaH,KACpDc,EAAQd,GAAYG,EAAYH,IAG/Be,GAAqBA,EAAoBhB,GAE5C,MAAMO,EAASC,OACdD,EAASU,OAATV,GAOD,OAHAW,EAAgBJ,KAAKK,MAAMD,EAAiBb,GAAkB,IAGvDe,IAER,SAASA,IAER,IADA,IAAIC,EACIf,EAAI,EAAGA,EAAIY,EAAgBV,OAAQF,IAAK,CAG/C,IAFA,IAAIgB,EAAiBJ,EAAgBZ,GACjCiB,GAAY,EACRC,EAAI,EAAGA,EAAIF,EAAed,OAAQgB,IAAK,CAC9C,IAAIC,EAAQH,EAAeE,GACG,IAA3BX,EAAgBY,KAAcF,GAAY,GAE3CA,IACFL,EAAgBQ,OAAOpB,IAAK,GAC5Be,EAASM,EAAoBA,EAAoBC,EAAIN,EAAe,KAItE,OAAOD,EAIR,IAAIQ,EAAmB,GAGnBC,EAAqB,CACxB,IAAO,GAMJjB,EAAkB,CACrB,IAAO,GAGJK,EAAkB,GAGtB,SAASa,EAAe7B,GACvB,OAAOyB,EAAoBK,EAAI,OAAS,GAAG9B,IAAUA,GAAW,IAAM,CAAC,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,YAAYA,GAAW,MAIpT,SAASyB,EAAoB1B,GAG5B,GAAG4B,EAAiB5B,GACnB,OAAO4B,EAAiB5B,GAAUgC,QAGnC,IAAIC,EAASL,EAAiB5B,GAAY,CACzCK,EAAGL,EACHkC,GAAG,EACHF,QAAS,IAUV,OANAlB,EAAQd,GAAUW,KAAKsB,EAAOD,QAASC,EAAQA,EAAOD,QAASN,GAG/DO,EAAOC,GAAI,EAGJD,EAAOD,QAKfN,EAAoBS,EAAI,SAAuBlC,GAC9C,IAAImC,EAAW,GAIXC,EAAY,CAAC,iBAAiB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,iBAAiB,GACxFR,EAAmB5B,GAAUmC,EAASvB,KAAKgB,EAAmB5B,IACzB,IAAhC4B,EAAmB5B,IAAkBoC,EAAUpC,IACtDmC,EAASvB,KAAKgB,EAAmB5B,GAAW,IAAIqC,SAAQ,SAASC,EAASC,GAIzE,IAHA,IAAIC,EAAO,QAAU,GAAGxC,IAAUA,GAAW,IAAM,CAAC,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,YAAYA,GAAW,OAC5RyC,EAAWhB,EAAoBK,EAAIU,EACnCE,EAAmBC,SAASC,qBAAqB,QAC7CxC,EAAI,EAAGA,EAAIsC,EAAiBpC,OAAQF,IAAK,CAChD,IAAIyC,EAAMH,EAAiBtC,GACvB0C,EAAWD,EAAIE,aAAa,cAAgBF,EAAIE,aAAa,QACjE,GAAe,eAAZF,EAAIG,MAAyBF,IAAaN,GAAQM,IAAaL,GAAW,OAAOH,IAErF,IAAIW,EAAoBN,SAASC,qBAAqB,SACtD,IAAQxC,EAAI,EAAGA,EAAI6C,EAAkB3C,OAAQF,IAAK,CAC7CyC,EAAMI,EAAkB7C,GACxB0C,EAAWD,EAAIE,aAAa,aAChC,GAAGD,IAAaN,GAAQM,IAAaL,EAAU,OAAOH,IAEvD,IAAIY,EAAUP,SAASQ,cAAc,QACrCD,EAAQF,IAAM,aACdE,EAAQE,KAAO,WACfF,EAAQG,OAASf,EACjBY,EAAQI,QAAU,SAASC,GAC1B,IAAIC,EAAUD,GAASA,EAAME,QAAUF,EAAME,OAAOC,KAAOjB,EACvDkB,EAAM,IAAIC,MAAM,qBAAuB5D,EAAU,cAAgBwD,EAAU,KAC/EG,EAAIE,KAAO,wBACXF,EAAIH,QAAUA,SACP5B,EAAmB5B,GAC1BkD,EAAQY,WAAWC,YAAYb,GAC/BX,EAAOoB,IAERT,EAAQV,KAAOC,EAEf,IAAIuB,EAAOrB,SAASC,qBAAqB,QAAQ,GACjDoB,EAAKC,YAAYf,MACfgB,MAAK,WACPtC,EAAmB5B,GAAW,MAMhC,IAAImE,EAAqBxD,EAAgBX,GACzC,GAA0B,IAAvBmE,EAGF,GAAGA,EACFhC,EAASvB,KAAKuD,EAAmB,QAC3B,CAEN,IAAIC,EAAU,IAAI/B,SAAQ,SAASC,EAASC,GAC3C4B,EAAqBxD,EAAgBX,GAAW,CAACsC,EAASC,MAE3DJ,EAASvB,KAAKuD,EAAmB,GAAKC,GAGtC,IACIC,EADAC,EAAS3B,SAASQ,cAAc,UAGpCmB,EAAOC,QAAU,QACjBD,EAAOE,QAAU,IACb/C,EAAoBgD,IACvBH,EAAOI,aAAa,QAASjD,EAAoBgD,IAElDH,EAAOZ,IAAM7B,EAAe7B,GAG5B,IAAI2E,EAAQ,IAAIf,MAChBS,EAAmB,SAAUd,GAE5Be,EAAOhB,QAAUgB,EAAOjB,OAAS,KACjCuB,aAAaJ,GACb,IAAIK,EAAQlE,EAAgBX,GAC5B,GAAa,IAAV6E,EAAa,CACf,GAAGA,EAAO,CACT,IAAIC,EAAYvB,IAAyB,SAAfA,EAAMH,KAAkB,UAAYG,EAAMH,MAChE2B,EAAUxB,GAASA,EAAME,QAAUF,EAAME,OAAOC,IACpDiB,EAAMK,QAAU,iBAAmBhF,EAAU,cAAgB8E,EAAY,KAAOC,EAAU,IAC1FJ,EAAMM,KAAO,iBACbN,EAAMvB,KAAO0B,EACbH,EAAMnB,QAAUuB,EAChBF,EAAM,GAAGF,GAEVhE,EAAgBX,QAAWkF,IAG7B,IAAIV,EAAUW,YAAW,WACxBd,EAAiB,CAAEjB,KAAM,UAAWK,OAAQa,MAC1C,MACHA,EAAOhB,QAAUgB,EAAOjB,OAASgB,EACjC1B,SAASqB,KAAKC,YAAYK,GAG5B,OAAOjC,QAAQ+C,IAAIjD,IAIpBV,EAAoB4D,EAAIxE,EAGxBY,EAAoB6D,EAAI3D,EAGxBF,EAAoB8D,EAAI,SAASxD,EAASkD,EAAMO,GAC3C/D,EAAoBgE,EAAE1D,EAASkD,IAClC1E,OAAOmF,eAAe3D,EAASkD,EAAM,CAAEU,YAAY,EAAMC,IAAKJ,KAKhE/D,EAAoBoE,EAAI,SAAS9D,GACX,qBAAX+D,QAA0BA,OAAOC,aAC1CxF,OAAOmF,eAAe3D,EAAS+D,OAAOC,YAAa,CAAEC,MAAO,WAE7DzF,OAAOmF,eAAe3D,EAAS,aAAc,CAAEiE,OAAO,KAQvDvE,EAAoBwE,EAAI,SAASD,EAAOE,GAEvC,GADU,EAAPA,IAAUF,EAAQvE,EAAoBuE,IAC/B,EAAPE,EAAU,OAAOF,EACpB,GAAW,EAAPE,GAA8B,kBAAVF,GAAsBA,GAASA,EAAMG,WAAY,OAAOH,EAChF,IAAII,EAAK7F,OAAO8F,OAAO,MAGvB,GAFA5E,EAAoBoE,EAAEO,GACtB7F,OAAOmF,eAAeU,EAAI,UAAW,CAAET,YAAY,EAAMK,MAAOA,IACtD,EAAPE,GAA4B,iBAATF,EAAmB,IAAI,IAAIM,KAAON,EAAOvE,EAAoB8D,EAAEa,EAAIE,EAAK,SAASA,GAAO,OAAON,EAAMM,IAAQC,KAAK,KAAMD,IAC9I,OAAOF,GAIR3E,EAAoB+E,EAAI,SAASxE,GAChC,IAAIwD,EAASxD,GAAUA,EAAOmE,WAC7B,WAAwB,OAAOnE,EAAO,YACtC,WAA8B,OAAOA,GAEtC,OADAP,EAAoB8D,EAAEC,EAAQ,IAAKA,GAC5BA,GAIR/D,EAAoBgE,EAAI,SAASgB,EAAQC,GAAY,OAAOnG,OAAOC,UAAUC,eAAeC,KAAK+F,EAAQC,IAGzGjF,EAAoBK,EAAI,IAGxBL,EAAoBkF,GAAK,SAAShD,GAA2B,MAApBiD,QAAQjC,MAAMhB,GAAYA,GAEnE,IAAIkD,EAAaC,OAAO,gBAAkBA,OAAO,iBAAmB,GAChEC,EAAmBF,EAAWjG,KAAK2F,KAAKM,GAC5CA,EAAWjG,KAAOf,EAClBgH,EAAaA,EAAWG,QACxB,IAAI,IAAI5G,EAAI,EAAGA,EAAIyG,EAAWvG,OAAQF,IAAKP,EAAqBgH,EAAWzG,IAC3E,IAAIU,EAAsBiG,EAI1B/F,EAAgBJ,KAAK,CAAC,EAAE,kBAEjBM,K,2EC1QT,4BAGM+F,EAAQC,eAAY,CACtBC,MADsB,WAElB,IAAMrH,EAAOsH,OAAKC,oBACZC,EAAW,CACbC,SAAU,KACVC,SAAU,KACVC,MAAO,MAOX,OALY,MAAR3H,IACAwH,EAASC,SAAWzH,EAAKyH,SACzBD,EAASE,SAAW1H,EAAK0H,SACzBF,EAASG,MAAQ3H,EAAK2H,OAEnB,CACHL,KAAME,EACNI,KAAM,CACFC,YAAY,KAIxBC,UAAW,CACPC,WADO,SACIV,EAAOW,GACVA,EAAMP,WACNJ,EAAMC,KAAKG,SAAWO,EAAMP,UAE5BO,EAAMN,WACNL,EAAMC,KAAKI,SAAWM,EAAMN,UAE5BM,EAAML,QACNN,EAAMC,KAAKK,MAAQK,EAAML,QAGjCM,SAZO,SAYEZ,GACLA,EAAMO,KAAKC,YAAa,GAE5BK,WAfO,SAeIb,GACPA,EAAMO,KAAKC,YAAa,MAKrBV,U,gSC3CT,yBAAc,G,yBCApB,MAAM3C,EAAS,GAGT2D,EAA2B,IAAgB3D,EAAQ,CAAC,CAAC,SAAS4D,KAErD,Q,YCGTC,EAAMC,uBAAUC,GACtB9H,OAAO+H,KAAKC,GAAOC,SAAQ,SAAAlC,GACvB6B,EAAIM,UAAUnC,EAAKiC,EAAMjC,OAE7B6B,EAAIO,UAAU,gBAAiB,CAC3BC,QAD2B,SACnBC,EAAIC,GACR,IAAMC,EAAQD,EAAQ7C,MACjBoB,OAAK2B,YAAYD,IAClBF,EAAG9E,YAAc8E,EAAG9E,WAAWC,YAAY6E,MAKvDT,EAAIO,UAAU,cAAe,CACzBM,QADyB,SACjBJ,EAAIC,GACR,IAAMI,EAAQL,EAAGM,cAAc,mBACzBC,EAAKF,EAAMlG,aAAa,oBACxBqG,EAAQzG,SAAS0G,eAAeF,GAChCG,EAAWF,EAAMF,cAAc,2CACrCI,EAASC,iBAAiB,UAAU,WAChC,IAAMC,EAAYC,KAAKC,aAAeD,KAAKE,UAAY,GAAKF,KAAKG,aAC7DJ,GACAX,EAAQ7C,cAMxBmC,EAAI0B,IAAI5C,QACRkB,EAAI0B,IAAIC,QACR3B,EAAI0B,IAAIE,QACR5B,EAAI6B,MAAM,S,0ICxCJC,EAAiB,cACjBC,EAAyB,sBACzBC,EAAmB,gBAEZC,EAAQ,CACjBC,eADiB,WAEb,IAAMC,EAAcb,KAAKc,kBACzB,OAAOD,GAGXE,oBANiB,WAOb,IAAMF,EAAcb,KAAKc,kBACnBE,EAAW3D,OAAO4D,aAAaC,QAAQT,GAC7C,OAAKI,GAAgBG,EAIdA,GAAW,IAAIG,MAAOC,WAHzBjE,QAAQkE,IAAI,iDACL,IAKfC,gBAhBiB,SAgBDX,EAAOY,GACnBlE,OAAO4D,aAAaO,QAAQhB,EAAgBG,GAC5CtD,OAAO4D,aAAaO,QAAQf,EAAwBc,IAGxDT,gBArBiB,WAsBb,OAAOzD,OAAO4D,aAAaC,QAAQV,KAI9B7C,EAAO,CAEhB8D,kBAFgB,SAEEC,GACdrE,OAAO4D,aAAaO,QAAQhB,EAAgBkB,EAAcb,aAC1DxD,OAAO4D,aAAaO,QAAQf,EAAwBiB,EAAcC,qBAClEtE,OAAO4D,aAAaO,QAAQd,EAAkBkB,KAAKC,UAAUH,KAGjEI,oBARgB,WASZzE,OAAO4D,aAAac,WAAWrB,GAC/BrD,OAAO4D,aAAac,WAAWvB,GAC/BnD,OAAO4D,aAAac,WAAWtB,IAGnC7C,kBAdgB,WAeZ,GAAKP,OAAO4D,aAAaC,QAAQR,GAE1B,CACH,IAAMrK,EAAMgH,OAAO4D,aAAaC,QAAQR,GACxC,OAAOkB,KAAKI,MAAM3L,GAHlB,OAAO,MAOfiJ,YAvBgB,SAuBJD,GACR,IAAMhJ,EAAOgH,OAAO4D,aAAaC,QAAQR,GACzC,GAAY,MAARrK,EACA,OAAO,EAEX,IAAMsH,EAAOiE,KAAKI,MAAM3L,GACxB,OAAOsH,EACN0B,MACA4C,KAAI,SAAAC,GACD,OAAIA,EAAKC,QACED,EAAKA,KAAO,YAAcA,EAAKC,QAE/BD,EAAKA,QAGnBE,MAAK,SAAAC,GAAM,OAAIhD,EAAM+C,MAAK,SAAAE,GAAQ,OAAIA,GAAYD,SAGvDE,gBAzCgB,WA0CZ,IAAMlM,EAAOgH,OAAO4D,aAAaC,QAAQR,GACzC,GAAY,MAARrK,EACA,OAAO,KAEX,IAAMsH,EAAOiE,KAAKI,MAAM3L,GACxB,OAAOsH,EAAK6E,gB,oCC7EpB,W,shBCCI,yBAee,GAfDC,MAAM,aAAW,C,8BAC3B,iBAEW,CAFX,yBAEW,Q,8BADP,iBAAuC,CAAvC,yBAAuC,GAA/BA,MAAM,sB,MAElB,yBAGY,GAHDA,MAAM,yBAAuB,C,8BACpC,iBAAyB,CAAzB,yBAAyB,GACzB,yBAAiB,O,MAErB,yBAMU,GANDA,MAAM,kBAAgB,C,8BAC3B,iBAIe,CAJf,yBAIe,Q,8BAHX,iBAEU,CAFV,yBAEU,GAFDA,MAAM,0BAAwB,C,8BACnC,iBAA2B,CAA3B,yBAA2B,O,0CCAvC,gCAAsB,YAAhB,aAAS,G,0UAXrB,yBA0CU,GAzCVnC,OAAA,GACCoC,SAAU,EAAAxE,WACXzB,KAAK,WACLgG,MAAM,a,+BACJ,iBAEe,CAFK,EAAAvE,Y,yBAApB,yBAEe,G,MAFkB,QAAO,EAAAK,WAAYoE,MAAM,K,+BACxD,iBAA6B,CAA7B,yBAA6B,Q,8BAApB,iBAAU,CAAV,yBAAU,O,sEAErB,yBAKe,GALDA,MAAM,KAAG,CAEVC,MAAK,sBACd,iBAAsB,CAAtB,M,8BAFF,iBAAkC,CAAlC,yBAAkC,Q,8BAAzB,iBAAe,CAAf,yBAAe,O,4CAK1B,gCA2BW,2CA3BuB,EAAAC,QAAM,SAAtB5E,EAAM0E,G,mFAAwBA,GAAK,CAChC,EAAAG,WAAW7E,IAASA,EAAK8E,SAASlM,OAAM,GAAQoH,EAAK8E,SAASX,MAAK,SAAAY,GAAG,OAAKA,EAAIC,W,yBAAlG,yBAiBc,G,MAjB8FN,MAAO1E,EAAKiF,M,CAC3GN,MAAK,sBACd,iBAEU,CAFV,yBAEU,Q,8BADR,iBAA6B,E,yBAA7B,yBAA6B,qCAAb3E,EAAKkF,Y,WAEvB,gCAAgC,yCAAvBlF,EAAKmF,KAAKC,KAAG,O,8BAEkB,iBAA4C,E,2BAAtF,gCASW,2CAT6DpF,EAAK8E,UAAQ,SAAnCvD,EAAO8D,G,mFAAzCX,EAAQ,IAAMW,G,CACP9D,EAAMyD,O,iEAA3B,yBAOe,G,MAPsBN,MAAO1E,EAAKiF,KAAI,IAAK1D,EAAM0D,M,CAInDN,MAAK,sBACd,iBAAiC,CAAjC,gCAAiC,yCAAxBpD,EAAM4D,KAAKC,KAAG,O,8BAJzB,iBAEU,CAFK7D,EAAM2D,M,yBAArB,yBAEU,W,8BADR,iBAA8B,E,yBAA9B,yBAA8B,qCAAd3D,EAAM2D,Y,qHAQJ,EAAAL,WAAW7E,I,yBAArC,yBAOe,G,MAP8B0E,MAAO1E,EAAKiF,M,CAI5CN,MAAK,sBACd,iBAAgC,CAAhC,gCAAgC,yCAAvB3E,EAAKmF,KAAKC,KAAG,O,8BAJxB,iBAEU,CAFV,yBAEU,Q,8BADR,iBAA6B,E,yBAA7B,yBAA6B,qCAAbpF,EAAKkF,Y,+IAoBhB,GACbI,MADa,WAEX,IAAMrF,EAAa,uBAAS,kBAAMV,EAAA,KAAME,MAAMO,KAAKC,cAC7CoC,EAAS,iBACTuC,EAASvC,EAAOkD,QAAQX,OAExBC,EAAa,SAAC7E,GAClB,GAAIA,EAAKgF,OACP,OAAO,EAET,GAAIhF,EAAKmF,KAAKK,iBAAmBxF,EAAKmF,KAAKK,gBAAgB5M,OAAS,EAAG,CACrE,IAAMyI,EAAc,OAAKA,YAAYrB,EAAKmF,KAAKK,iBAC/C,IAAKnE,EACH,OAAO,EAGX,OAAO,GAGHf,EAAa,WACjBf,EAAA,KAAMkG,OAAO,eAGf,MAAO,CACLxF,aACA4E,aACAvE,aACAsE,Y,iCC5EN,MAAMrE,EAA2B,IAAgB,EAAQ,CAAC,CAAC,SAAS,KAErD,Q,2SCRb,yBAOgB,GAPDmF,UAAU,KAAG,C,8BAC3B,iBAIqB,CAJM,EAAAC,e,iEAA3B,yBAIqB,W,8BAHjB,iBAEU,CAFV,yBAEU,GAFA,QAAK,+BAAE,EAAAC,eAAeC,WAAW,G,+BACtC,iBAA2B,CAA3B,yBAA2B,Q,8BAAlB,iBAAQ,CAAR,yBAAQ,O,uDAGrB,gCAAyH,2CAA5E,EAAAC,aAAW,SAA3BC,EAAMrB,G,gCAAnC,yBAAyH,GAA9D9F,IAAK8F,EAAQsB,GAAID,EAAKC,I,+BAAI,iBAAe,C,0DAAZD,EAAKxI,MAAI,O,qCAM3F,OACVnF,KADU,aAIV6N,SAAU,CACNH,YAAa,WACT,MAA2C,oBAAhC/D,KAAKmE,OAAOf,KAAKgB,WACjBpE,KAAKmE,OAAOf,KAAKgB,WAAWpE,KAAKmE,OAAQnE,KAAKqE,OAAO3G,OAErD,IAGfkG,eARM,WASF,OAAO5D,KAAKqE,OAAO3G,MAAMO,KAAKC,aAGtCoG,QAAS,CACLT,WADK,WAED7D,KAAKqE,OAAOX,OAAO,eC1B/B,MAAM,EAA2B,IAAgB,EAAQ,CAAC,CAAC,SAAS,KAErD,Q,+BCA4D,Q,+BACb,Q,gQAP1D,yBAUc,QARCa,SAAQ,sBACnB,iBAKmB,CALnB,yBAKmB,Q,8BAJf,iBAAuD,CAAvD,yBAAuD,Q,8BAArC,iBAAkB,C,0DAAf,EAAAC,cAAY,O,MAEjC,yBAAsF,GAApErB,KAAK,OAAOsB,QAAA,GAAS,QAAK,+BAAE,EAAAC,mB,+BAAiB,iBAAI,C,YACnE,yBAAyE,GAAvDvB,KAAK,OAAQ,QAAK,+BAAE,EAAAwB,c,+BAAY,iBAAI,C,wDAN1D,iBAAiE,CAAjE,yBAAiE,GAArDC,KAAM,GAAK3K,IAAK,EAAA4K,UAAW1B,KAAK,U,0BAerC,OACX9M,KADW,WAEP,MAAO,CACHwO,UAAW,OAGnBX,SAAU,CACNM,aADM,WAEF,OAAOxE,KAAKqE,OAAO3G,MAAMC,KAAKG,WAGtCwG,QAAS,CACLK,SADK,WAED,OAAK7C,sBACL9B,KAAK8E,QAAQ3N,KAAK,CAAC+L,KAAM,YAE7BwB,cALK,WAMD1E,KAAK8E,QAAQ3N,KAAK,CAAE+L,KAAM,gBC7BtC,MAAM,EAA2B,IAAgB,EAAQ,CAAC,CAAC,SAAS,KAErD,QNgEA,GACX6B,WAAY,CAAEC,SAAQC,aAAYC,UAElC7O,KAHW,WAIP,MAAO,K,UOpEf,MAAM,EAA2B,IAAgB,EAAQ,CAAC,CAAC,SAASoI,KAErD,QCTf,SAASkE,IACL,MAAO,CACHnH,KAAK,KACLyI,GAAI,CACAf,KAAM,MAKlB,SAASiC,IACL,MAAO,CACH3J,KAAK,OACLyI,GAAI,CACAzI,KAAM,kBAKlB,SAAS4J,EAAeC,GACpB,IAAIC,EAAY,MAIhB,OAHID,EAAME,MAAMD,YACZA,EAAYD,EAAME,MAAMD,WAErB,CACH9J,KAAM8J,EACNrB,GAAI,CACAf,KAAM,WAAWmC,EAAMG,OAAOrD,UAK1C,SAASsD,EAAqBJ,GAC1B,IAAI7J,EAAO,OACP6J,EAAME,MAAMG,cACZlK,EAAO6J,EAAME,MAAMG,aAEvB,IAAIC,EAAYN,EAAMG,OAAOG,UACzBxD,EAAUkD,EAAMG,OAAOrD,QAC3B,MAAO,CACH3G,KAAMA,EACNyI,GAAI,CACAf,KAAM,WAAaf,EAAU,aAAewD,EAAY,aACxDJ,MAAO,CACHG,YAAalK,KAM7B,SAASoK,IACL,MAAO,CACHpK,KAAK,OACLyI,GAAI,CACAf,KAAM,WAMlB,SAAS2C,IACL,MAAO,CACHrK,KAAK,OACLyI,GAAI,CACAf,KAAM,aAKlB,SAAS4C,IACL,MAAO,CACHtK,KAAK,OACLyI,GAAI,CACAf,KAAM,uBAKlB,IAAM6C,EAAgB,CAClBpD,MAAO,iBAAM,CAACA,MACdwC,UAAW,iBAAM,CAACxC,IAASwC,MAC3BC,eAAgB,SAACC,EAAO3H,GAAR,MAAkB,CAACiF,IAASwC,IAAaC,EAAeC,EAAO3H,KAC/E+H,qBAAsB,SAACJ,EAAO3H,GAAR,MAAkB,CAACiF,IAASwC,IAAaC,EAAeC,EAAO3H,GAAS+H,EAAqBJ,KACnHQ,YAAa,iBAAO,CAAClD,IAASkD,MAC9BD,SAAU,iBAAO,CAACjD,IAASiD,MAC3BE,aAAc,iBAAM,CAACnD,IAASmD,OAGnBC,IClFTlD,EAAS,CACX,CACIK,KAAM,SACNlE,UAAW,kBAAM,sFACjBiE,QAAQ,EACRG,KAAM,CACF4C,aAAa,IAGrB,CACI9C,KAAM,IACND,QAAQ,EACRjE,UAAWiH,EACXlD,SAAU,CACN,CACIG,KAAM,GACND,QAAQ,EACRjE,UAAW,kBAAM,sFACjBoE,KAAM,CACFgB,WAAY2B,EAAcZ,cAK1C,CACIjC,KAAM,UACNC,KAAM,aACNnE,UAAWiH,EACX7C,KAAM,CACFC,IAAK,QAETN,SAAU,CACN,CACIG,KAAM,GACN1H,KAAM,gBACNyH,QAAQ,EACRjE,UAAW,kBAAM,sFACjBoE,KAAM,CACFgB,WAAY2B,EAAcZ,YAGlC,CACIjC,KAAM,WACND,QAAQ,EACRjE,UAAW,kBAAM,sFACjBoE,KAAM,CACFgB,WAAY2B,EAAcX,iBAGlC,CACIlC,KAAM,yCACND,QAAQ,EACRjE,UAAW,kBAAM,sFACjBoE,KAAM,CACFgB,WAAY2B,EAAcN,yBAK1C,CACIvC,KAAM,SACNC,KAAM,OACNnE,UAAWiH,EACX7C,KAAM,CACFC,IAAI,OACJI,gBAAiB,CAAC,cAEtBV,SAAU,CACN,CACIG,KAAM,GACND,QAAQ,EACRjE,UAAW,kBAAM,sFACjBoE,KAAM,CACFgB,WAAY2B,EAAcH,aAK1C,CACI1C,KAAM,WACNC,KAAM,OACNnE,UAAWiH,EACX7C,KAAM,CACFC,IAAK,OACLe,WAAY2B,EAAcF,aAE9B9C,SAAU,CACN,CACIG,KAAM,GACND,QAAQ,EACRjE,UAAW,kBAAM,yFAI7B,CACIkE,KAAM,YACNC,KAAM,UACNnE,UAAWiH,EACX7C,KAAM,CACFC,IAAI,OACJI,gBAAiB,CAAC,cAEtBV,SAAU,CACN,CACIG,KAAM,WACNC,KAAM,eACNnE,UAAW,kBAAM,sFACjBoE,KAAM,CACFC,IAAK,OACLe,WAAY2B,EAAcD,eAIlC,CACI5C,KAAM,SACNC,KAAM,MACNF,OAAQ,OACRjE,UAAWiH,EACX7C,KAAM,CACFC,IAAK,OACLe,WAAY2B,EAAcG,gBAOxC5F,EAAS6F,eAAa,CACxBC,QAASC,iBACTxD,WAIJvC,EAAOgG,YAAW,SAACrC,EAAIsC,EAAMC,GACE,GAAvBvC,EAAGb,KAAK4C,YACO,UAAX/B,EAAGf,MAAoBvC,OAAMC,iBAC7B4F,EAAKD,GAELC,IAGD7F,OAAMC,iBACL4F,IAEAA,EAAK,CAAEtD,KAAM,cAMzB5C,EAAOgG,YAAW,SAACrC,EAAIsC,EAAMC,IACpBvC,EAAGsB,MAAMD,WAAaiB,EAAKhB,MAAMD,YAClCrB,EAAGsB,MAAMD,UAAYiB,EAAKhB,MAAMD,YAE/BrB,EAAGsB,MAAMG,aAAea,EAAKhB,MAAMG,cACpCzB,EAAGsB,MAAMG,YAAca,EAAKhB,MAAMG,aAEtCc,OAGWlG,U,yDCrKf","file":"js/app.943c1753.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded CSS chunks\n \tvar installedCssChunks = {\n \t\t\"app\": 0\n \t}\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t\"app\": 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// script path function\n \tfunction jsonpScriptSrc(chunkId) {\n \t\treturn __webpack_require__.p + \"js/\" + ({}[chunkId]||chunkId) + \".\" + {\"chunk-48cebeac\":\"b43a95b4\",\"chunk-04ac1c26\":\"b03a6105\",\"chunk-2d0cc811\":\"feb081c8\",\"chunk-4fd080e4\":\"d40c8d0d\",\"chunk-7e394785\":\"b93f6d8c\",\"chunk-7fa689fe\":\"e971bfe1\",\"chunk-abb10c56\":\"4c323350\",\"chunk-fffb1b64\":\"df1e960f\"}[chunkId] + \".js\"\n \t}\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n \t// This file contains only the entry chunk.\n \t// The chunk loading function for additional chunks\n \t__webpack_require__.e = function requireEnsure(chunkId) {\n \t\tvar promises = [];\n\n\n \t\t// mini-css-extract-plugin CSS loading\n \t\tvar cssChunks = {\"chunk-04ac1c26\":1,\"chunk-4fd080e4\":1,\"chunk-7e394785\":1,\"chunk-7fa689fe\":1};\n \t\tif(installedCssChunks[chunkId]) promises.push(installedCssChunks[chunkId]);\n \t\telse if(installedCssChunks[chunkId] !== 0 && cssChunks[chunkId]) {\n \t\t\tpromises.push(installedCssChunks[chunkId] = new Promise(function(resolve, reject) {\n \t\t\t\tvar href = \"css/\" + ({}[chunkId]||chunkId) + \".\" + {\"chunk-48cebeac\":\"31d6cfe0\",\"chunk-04ac1c26\":\"a5cbc9e6\",\"chunk-2d0cc811\":\"31d6cfe0\",\"chunk-4fd080e4\":\"a5b9f9ad\",\"chunk-7e394785\":\"ab54ac4c\",\"chunk-7fa689fe\":\"a79c1787\",\"chunk-abb10c56\":\"31d6cfe0\",\"chunk-fffb1b64\":\"31d6cfe0\"}[chunkId] + \".css\";\n \t\t\t\tvar fullhref = __webpack_require__.p + href;\n \t\t\t\tvar existingLinkTags = document.getElementsByTagName(\"link\");\n \t\t\t\tfor(var i = 0; i < existingLinkTags.length; i++) {\n \t\t\t\t\tvar tag = existingLinkTags[i];\n \t\t\t\t\tvar dataHref = tag.getAttribute(\"data-href\") || tag.getAttribute(\"href\");\n \t\t\t\t\tif(tag.rel === \"stylesheet\" && (dataHref === href || dataHref === fullhref)) return resolve();\n \t\t\t\t}\n \t\t\t\tvar existingStyleTags = document.getElementsByTagName(\"style\");\n \t\t\t\tfor(var i = 0; i < existingStyleTags.length; i++) {\n \t\t\t\t\tvar tag = existingStyleTags[i];\n \t\t\t\t\tvar dataHref = tag.getAttribute(\"data-href\");\n \t\t\t\t\tif(dataHref === href || dataHref === fullhref) return resolve();\n \t\t\t\t}\n \t\t\t\tvar linkTag = document.createElement(\"link\");\n \t\t\t\tlinkTag.rel = \"stylesheet\";\n \t\t\t\tlinkTag.type = \"text/css\";\n \t\t\t\tlinkTag.onload = resolve;\n \t\t\t\tlinkTag.onerror = function(event) {\n \t\t\t\t\tvar request = event && event.target && event.target.src || fullhref;\n \t\t\t\t\tvar err = new Error(\"Loading CSS chunk \" + chunkId + \" failed.\\n(\" + request + \")\");\n \t\t\t\t\terr.code = \"CSS_CHUNK_LOAD_FAILED\";\n \t\t\t\t\terr.request = request;\n \t\t\t\t\tdelete installedCssChunks[chunkId]\n \t\t\t\t\tlinkTag.parentNode.removeChild(linkTag)\n \t\t\t\t\treject(err);\n \t\t\t\t};\n \t\t\t\tlinkTag.href = fullhref;\n\n \t\t\t\tvar head = document.getElementsByTagName(\"head\")[0];\n \t\t\t\thead.appendChild(linkTag);\n \t\t\t}).then(function() {\n \t\t\t\tinstalledCssChunks[chunkId] = 0;\n \t\t\t}));\n \t\t}\n\n \t\t// JSONP chunk loading for javascript\n\n \t\tvar installedChunkData = installedChunks[chunkId];\n \t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n \t\t\t// a Promise means \"currently loading\".\n \t\t\tif(installedChunkData) {\n \t\t\t\tpromises.push(installedChunkData[2]);\n \t\t\t} else {\n \t\t\t\t// setup Promise in chunk cache\n \t\t\t\tvar promise = new Promise(function(resolve, reject) {\n \t\t\t\t\tinstalledChunkData = installedChunks[chunkId] = [resolve, reject];\n \t\t\t\t});\n \t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n \t\t\t\t// start chunk loading\n \t\t\t\tvar script = document.createElement('script');\n \t\t\t\tvar onScriptComplete;\n\n \t\t\t\tscript.charset = 'utf-8';\n \t\t\t\tscript.timeout = 120;\n \t\t\t\tif (__webpack_require__.nc) {\n \t\t\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n \t\t\t\t}\n \t\t\t\tscript.src = jsonpScriptSrc(chunkId);\n\n \t\t\t\t// create error before stack unwound to get useful stacktrace later\n \t\t\t\tvar error = new Error();\n \t\t\t\tonScriptComplete = function (event) {\n \t\t\t\t\t// avoid mem leaks in IE.\n \t\t\t\t\tscript.onerror = script.onload = null;\n \t\t\t\t\tclearTimeout(timeout);\n \t\t\t\t\tvar chunk = installedChunks[chunkId];\n \t\t\t\t\tif(chunk !== 0) {\n \t\t\t\t\t\tif(chunk) {\n \t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n \t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n \t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n \t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n \t\t\t\t\t\t\terror.type = errorType;\n \t\t\t\t\t\t\terror.request = realSrc;\n \t\t\t\t\t\t\tchunk[1](error);\n \t\t\t\t\t\t}\n \t\t\t\t\t\tinstalledChunks[chunkId] = undefined;\n \t\t\t\t\t}\n \t\t\t\t};\n \t\t\t\tvar timeout = setTimeout(function(){\n \t\t\t\t\tonScriptComplete({ type: 'timeout', target: script });\n \t\t\t\t}, 120000);\n \t\t\t\tscript.onerror = script.onload = onScriptComplete;\n \t\t\t\tdocument.head.appendChild(script);\n \t\t\t}\n \t\t}\n \t\treturn Promise.all(promises);\n \t};\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/\";\n\n \t// on error function for async loading\n \t__webpack_require__.oe = function(err) { console.error(err); throw err; };\n\n \tvar jsonpArray = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// add entry module to deferred list\n \tdeferredModules.push([0,\"chunk-vendors\"]);\n \t// run deferred modules when ready\n \treturn checkDeferredModules();\n","import { createStore } from 'vuex'\nimport { user } from '../utils/auth'\n\nconst store = createStore({\n state() {\n const data = user.loadUserLoginData()\n const userData = {\n nickname: null,\n usernmae: null,\n email: null,\n }\n if (data != null) {\n userData.nickname = data.nickname\n userData.usernmae = data.usernmae\n userData.email = data.email;\n }\n return {\n user: userData,\n menu: {\n isCollapse: true,\n }\n }\n },\n mutations: {\n userUpdate(state, param) {\n if (param.nickname) {\n state.user.nickname = param.nickname\n }\n if (param.usernmae) {\n state.user.usernmae = param.usernmae\n }\n if (param.email) {\n state.user.email = param.email\n }\n },\n foldMenu(state) {\n state.menu.isCollapse = true\n },\n expandMenu(state) {\n state.menu.isCollapse = false\n }\n }\n})\n\nexport default store","\n","import { render } from \"./App.vue?vue&type=template&id=2b08e877\"\nconst script = {}\n\nimport exportComponent from \"/Users/vrtia/workspace/vran/databasir-frontend/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { createApp } from 'vue'\nimport ElementPlus from 'element-plus'\nimport * as Icons from '@element-plus/icons'\nimport 'element-plus/dist/index.css'\nimport router from './router'\nimport store from './store'\nimport App from './App.vue'\nimport { user } from './utils/auth'\n\nconst app = createApp(App)\nObject.keys(Icons).forEach(key => {\n app.component(key, Icons[key])\n})\napp.directive('require-roles', {\n mounted(el, binding) {\n const roles = binding.value\n if (!user.hasAnyRoles(roles)) {\n el.parentNode && el.parentNode.removeChild(el)\n }\n },\n})\n\napp.directive(\"select-more\", {\n updated(el, binding) {\n const child = el.querySelector('.select-trigger');\n const id = child.getAttribute('aria-describedby');\n const poper = document.getElementById(id);\n const selector = poper.querySelector('.el-scrollbar .el-select-dropdown__wrap');\n selector.addEventListener('scroll', function () {\n const condition = this.scrollHeight - this.scrollTop - 1 <= this.clientHeight;\n if (condition) {\n binding.value();\n }\n });\n },\n});\n\napp.use(store)\napp.use(ElementPlus)\napp.use(router)\napp.mount('#app')\n\n","const accessTokenKey = 'accessToken'\nconst accessTokenExpireAtKey = 'accessTokenExpireAt'\nconst userLoginDataKey = 'userLoginData'\n\nexport const token = {\n hasAccessToken() {\n const accessToken = this.loadAccessToken()\n return accessToken\n },\n\n hasValidAccessToken() {\n const accessToken = this.loadAccessToken()\n const expireAt = window.localStorage.getItem(accessTokenExpireAtKey)\n if (!accessToken || !expireAt) {\n console.log('warn: not found accessToken and expireAt key')\n return false\n }\n return expireAt > new Date().getTime()\n },\n\n saveAccessToken(token, tokenExpireAt) {\n window.localStorage.setItem(accessTokenKey, token)\n window.localStorage.setItem(accessTokenExpireAtKey, tokenExpireAt)\n },\n\n loadAccessToken() {\n return window.localStorage.getItem(accessTokenKey)\n }\n}\n\nexport const user = {\n\n saveUserLoginData(userLoginData) {\n window.localStorage.setItem(accessTokenKey, userLoginData.accessToken)\n window.localStorage.setItem(accessTokenExpireAtKey, userLoginData.accessTokenExpireAt)\n window.localStorage.setItem(userLoginDataKey, JSON.stringify(userLoginData))\n },\n\n removeUserLoginData() {\n window.localStorage.removeItem(userLoginDataKey)\n window.localStorage.removeItem(accessTokenKey)\n window.localStorage.removeItem(accessTokenExpireAtKey)\n },\n\n loadUserLoginData() {\n if (!window.localStorage.getItem(userLoginDataKey)) {\n return null;\n } else {\n const data =window.localStorage.getItem(userLoginDataKey)\n return JSON.parse(data)\n }\n },\n\n hasAnyRoles(roles) {\n const data = window.localStorage.getItem(userLoginDataKey)\n if (data == null) {\n return false\n }\n const user = JSON.parse(data)\n return user\n .roles\n .map(role => {\n if (role.groupId) {\n return role.role + '?groupId=' + role.groupId\n } else {\n return role.role\n }\n })\n .some(exists => roles.some(expected => expected == exists))\n },\n\n getRefreshToken() {\n const data = window.localStorage.getItem(userLoginDataKey)\n if (data == null) {\n return null\n }\n const user = JSON.parse(data)\n return user.refreshToken\n }\n}\n","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader-v16/dist/index.js??ref--1-1!./AppNav.vue?vue&type=style&index=0&id=9b19d010&lang=css\"","\n\n\n","\n\n","import { render } from \"./AppNav.vue?vue&type=template&id=9b19d010\"\nimport script from \"./AppNav.vue?vue&type=script&lang=js\"\nexport * from \"./AppNav.vue?vue&type=script&lang=js\"\n\nimport \"./AppNav.vue?vue&type=style&index=0&id=9b19d010&lang=css\"\n\nimport exportComponent from \"/Users/vrtia/workspace/vran/databasir-frontend/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\n\n","import { render } from \"./Breadcrumb.vue?vue&type=template&id=f841bcd6\"\nimport script from \"./Breadcrumb.vue?vue&type=script&lang=js\"\nexport * from \"./Breadcrumb.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/Users/vrtia/workspace/vran/databasir-frontend/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\n\n\n","import { render } from \"./Avatar.vue?vue&type=template&id=41b59522\"\nimport script from \"./Avatar.vue?vue&type=script&lang=js\"\nexport * from \"./Avatar.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/Users/vrtia/workspace/vran/databasir-frontend/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { render } from \"./Layout.vue?vue&type=template&id=57316434\"\nimport script from \"./Layout.vue?vue&type=script&lang=js\"\nexport * from \"./Layout.vue?vue&type=script&lang=js\"\n\nimport \"./Layout.vue?vue&type=style&index=0&id=57316434&lang=css\"\n\nimport exportComponent from \"/Users/vrtia/workspace/vran/databasir-frontend/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","function index() {\n return {\n name:'首页',\n to: {\n path: '/'\n }\n }\n}\n\nfunction groupList() {\n return {\n name:'项目中心',\n to: {\n name: 'groupListPage'\n } \n }\n}\n\nfunction groupDashboard(route) {\n var groupName = '项目组'\n if (route.query.groupName) {\n groupName = route.query.groupName\n }\n return {\n name: groupName,\n to: {\n path: '/groups/'+route.params.groupId\n } \n }\n}\n\nfunction groupProjectDocument(route) {\n var name = '项目文档'\n if (route.query.projectName) {\n name = route.query.projectName\n }\n var projectId = route.params.projectId\n var groupId = route.params.groupId\n return {\n name: name,\n to: {\n path: '/groups/' + groupId + '/projects/' + projectId + '/documents',\n query: {\n projectName: name\n }\n } \n }\n}\n\nfunction userList() {\n return {\n name:'用户列表',\n to: {\n path: '/users'\n } \n }\n}\n\n\nfunction userProfile() {\n return {\n name:'个人中心',\n to: {\n path: '/profile'\n } \n }\n}\n\nfunction sysEmailEdit() {\n return {\n name:'邮箱设置',\n to: {\n path: '/settings/sysEmail'\n } \n }\n}\n\nconst breadcurmbMap = {\n index: () => [index() ],\n groupList: () => [index(), groupList()],\n groupDashboard: (route, state) => [index(), groupList(), groupDashboard(route, state)],\n groupProjectDocument: (route, state) => [index(), groupList(), groupDashboard(route, state), groupProjectDocument(route)],\n userProfile: () => [index(), userProfile()],\n userList: () => [index(), userList()],\n sysEmailEdit: () => [index(), sysEmailEdit()]\n}\n\nexport default breadcurmbMap","import { createRouter, createWebHashHistory } from 'vue-router';\nimport Layout from \"../layouts/Layout.vue\"\nimport breadcurmbMap from './breadcurmb'\nimport { token } from '../utils/auth';\n\nconst routes = [\n {\n path: '/login',\n component: () => import('@/views/Login.vue'),\n hidden: true,\n meta: {\n requireAuth: false\n }\n },\n {\n path: '/',\n hidden: true,\n component: Layout,\n children: [\n {\n path: '',\n hidden: true,\n component: () => import('@/views/GroupList.vue'),\n meta: {\n breadcrumb: breadcurmbMap.groupList\n }\n }\n ]\n },\n {\n path: '/groups',\n icon: 'Collection',\n component: Layout,\n meta: {\n nav: '项目中心',\n },\n children: [\n {\n path: '',\n name: 'groupListPage',\n hidden: true,\n component: () => import('@/views/GroupList.vue'),\n meta: {\n breadcrumb: breadcurmbMap.groupList\n }\n },\n {\n path: ':groupId',\n hidden: true,\n component: () => import('@/views/GroupDashboard.vue'),\n meta: {\n breadcrumb: breadcurmbMap.groupDashboard\n }\n },\n {\n path: ':groupId/projects/:projectId/documents',\n hidden: true,\n component: () => import('@/views/Document.vue'),\n meta: {\n breadcrumb: breadcurmbMap.groupProjectDocument\n }\n }\n ]\n },\n {\n path: '/users',\n icon: 'List',\n component: Layout,\n meta: {\n nav:'用户中心',\n requireAnyRoles: ['SYS_OWNER']\n },\n children: [\n {\n path: '',\n hidden: true,\n component: () => import('@/views/UserList.vue'),\n meta: {\n breadcrumb: breadcurmbMap.userList\n }\n }\n ]\n },\n {\n path: '/profile',\n icon: 'User',\n component: Layout,\n meta: {\n nav: '个人中心',\n breadcrumb: breadcurmbMap.userProfile\n },\n children: [\n {\n path: '',\n hidden: true,\n component: () => import('@/views/UserProfile.vue')\n }\n ]\n },\n {\n path: '/settings',\n icon: 'Setting',\n component: Layout,\n meta: {\n nav:'系统中心',\n requireAnyRoles: ['SYS_OWNER']\n },\n children: [\n {\n path: 'sysEmail',\n icon: 'Notification',\n component: () => import('@/views/SysEmailEdit.vue'),\n meta: {\n nav: '邮箱设置',\n breadcrumb: breadcurmbMap.sysEmailEdit\n }\n },\n // TODO\n {\n path: 'sysKey',\n icon: 'Key',\n hidden: 'true',\n component: Layout,\n meta: {\n nav: '系统秘钥',\n breadcrumb: breadcurmbMap.sysKeyEdit\n }\n }\n ]\n }\n];\n\nconst router = createRouter({\n history: createWebHashHistory(),\n routes\n});\n\n// 权限路由守卫\nrouter.beforeEach((to, from, next) => {\n if (to.meta.requireAuth == false) {\n if (to.path == '/login' && token.hasAccessToken()) {\n next(from)\n } else {\n next()\n }\n } else {\n if(token.hasAccessToken()) {\n next()\n } else {\n next({ path: '/login' })\n }\n }\n})\n\n// groupName 参数路由守卫\nrouter.beforeEach((to, from, next) => {\n if (!to.query.groupName && from.query.groupName) {\n to.query.groupName = from.query.groupName\n } \n if (!to.query.projectName && from.query.projectName) {\n to.query.projectName = from.query.projectName\n } \n next();\n})\n\nexport default router;","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader-v16/dist/index.js??ref--1-1!./Layout.vue?vue&type=style&index=0&id=57316434&lang=css\""],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/store/index.js","webpack:///./src/App.vue","webpack:///./src/App.vue?8ecf","webpack:///./src/main.js","webpack:///./src/utils/auth.js","webpack:///./src/components/AppNav.vue?2477","webpack:///./src/layouts/Layout.vue","webpack:///./src/components/AppNav.vue","webpack:///./src/components/AppNav.vue?33c4","webpack:///./src/components/Breadcrumb.vue","webpack:///./src/components/Breadcrumb.vue?57f7","webpack:///./src/components/Avatar.vue","webpack:///./src/components/Avatar.vue?a351","webpack:///./src/layouts/Layout.vue?726f","webpack:///./src/router/breadcurmb.js","webpack:///./src/router/index.js","webpack:///./src/layouts/Layout.vue?f7ac"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","i","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","modules","parentJsonpFunction","shift","deferredModules","apply","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","installedModules","installedCssChunks","jsonpScriptSrc","p","exports","module","l","e","promises","cssChunks","Promise","resolve","reject","href","fullhref","existingLinkTags","document","getElementsByTagName","tag","dataHref","getAttribute","rel","existingStyleTags","linkTag","createElement","type","onload","onerror","event","request","target","src","err","Error","code","parentNode","removeChild","head","appendChild","then","installedChunkData","promise","onScriptComplete","script","charset","timeout","nc","setAttribute","error","clearTimeout","chunk","errorType","realSrc","message","name","undefined","setTimeout","all","m","c","d","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","oe","console","jsonpArray","window","oldJsonpFunction","slice","store","createStore","state","user","loadUserLoginData","userData","nickname","usernmae","email","menu","isCollapse","mutations","userUpdate","param","foldMenu","expandMenu","__exports__","render","app","createApp","App","keys","Icons","forEach","component","directive","mounted","el","binding","roles","hasAnyRoles","updated","child","querySelector","id","poper","getElementById","selector","addEventListener","condition","this","scrollHeight","scrollTop","clientHeight","use","ElementPlus","router","mount","accessTokenKey","accessTokenExpireAtKey","userLoginDataKey","token","hasAccessToken","accessToken","loadAccessToken","hasValidAccessToken","expireAt","localStorage","getItem","Date","getTime","log","saveAccessToken","tokenExpireAt","setItem","saveUserLoginData","userLoginData","accessTokenExpireAt","JSON","stringify","removeUserLoginData","removeItem","parse","map","role","groupId","some","exists","expected","getRefreshToken","refreshToken","class","collapse","index","title","routes","isShowMenu","children","ele","hidden","path","icon","meta","nav","childIndex","setup","options","requireAnyRoles","commit","separator","menuIsCollapse","onFoldMenu","underline","breadcrumbs","item","to","computed","$route","breadcrumb","$store","methods","dropdown","userNickname","divided","toProfilePage","onLogout","size","avatarUrl","$router","components","AppNav","Breadcrumb","Avatar","groupList","groupDashboard","route","groupName","query","params","groupProjectDocument","projectName","projectId","userList","userProfile","sysEmailEdit","breadcurmbMap","requireAuth","Layout","sysKeyEdit","createRouter","history","createWebHashHistory","beforeEach","from","next"],"mappings":"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","file":"js/app.7a0ffda3.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded CSS chunks\n \tvar installedCssChunks = {\n \t\t\"app\": 0\n \t}\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t\"app\": 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// script path function\n \tfunction jsonpScriptSrc(chunkId) {\n \t\treturn __webpack_require__.p + \"js/\" + ({}[chunkId]||chunkId) + \".\" + {\"chunk-48cebeac\":\"162363c9\",\"chunk-04ac1c26\":\"b5c879b8\",\"chunk-2d0cc811\":\"c5d1ef9e\",\"chunk-7e394785\":\"e090ef46\",\"chunk-7fa689fe\":\"337b34fc\",\"chunk-abb10c56\":\"bd8d31bf\",\"chunk-c2109158\":\"94b6c554\",\"chunk-fffb1b64\":\"1ffb9f27\"}[chunkId] + \".js\"\n \t}\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n \t// This file contains only the entry chunk.\n \t// The chunk loading function for additional chunks\n \t__webpack_require__.e = function requireEnsure(chunkId) {\n \t\tvar promises = [];\n\n\n \t\t// mini-css-extract-plugin CSS loading\n \t\tvar cssChunks = {\"chunk-04ac1c26\":1,\"chunk-7e394785\":1,\"chunk-7fa689fe\":1,\"chunk-c2109158\":1};\n \t\tif(installedCssChunks[chunkId]) promises.push(installedCssChunks[chunkId]);\n \t\telse if(installedCssChunks[chunkId] !== 0 && cssChunks[chunkId]) {\n \t\t\tpromises.push(installedCssChunks[chunkId] = new Promise(function(resolve, reject) {\n \t\t\t\tvar href = \"css/\" + ({}[chunkId]||chunkId) + \".\" + {\"chunk-48cebeac\":\"31d6cfe0\",\"chunk-04ac1c26\":\"00ac37b1\",\"chunk-2d0cc811\":\"31d6cfe0\",\"chunk-7e394785\":\"e51aa148\",\"chunk-7fa689fe\":\"80a92238\",\"chunk-abb10c56\":\"31d6cfe0\",\"chunk-c2109158\":\"06814884\",\"chunk-fffb1b64\":\"31d6cfe0\"}[chunkId] + \".css\";\n \t\t\t\tvar fullhref = __webpack_require__.p + href;\n \t\t\t\tvar existingLinkTags = document.getElementsByTagName(\"link\");\n \t\t\t\tfor(var i = 0; i < existingLinkTags.length; i++) {\n \t\t\t\t\tvar tag = existingLinkTags[i];\n \t\t\t\t\tvar dataHref = tag.getAttribute(\"data-href\") || tag.getAttribute(\"href\");\n \t\t\t\t\tif(tag.rel === \"stylesheet\" && (dataHref === href || dataHref === fullhref)) return resolve();\n \t\t\t\t}\n \t\t\t\tvar existingStyleTags = document.getElementsByTagName(\"style\");\n \t\t\t\tfor(var i = 0; i < existingStyleTags.length; i++) {\n \t\t\t\t\tvar tag = existingStyleTags[i];\n \t\t\t\t\tvar dataHref = tag.getAttribute(\"data-href\");\n \t\t\t\t\tif(dataHref === href || dataHref === fullhref) return resolve();\n \t\t\t\t}\n \t\t\t\tvar linkTag = document.createElement(\"link\");\n \t\t\t\tlinkTag.rel = \"stylesheet\";\n \t\t\t\tlinkTag.type = \"text/css\";\n \t\t\t\tlinkTag.onload = resolve;\n \t\t\t\tlinkTag.onerror = function(event) {\n \t\t\t\t\tvar request = event && event.target && event.target.src || fullhref;\n \t\t\t\t\tvar err = new Error(\"Loading CSS chunk \" + chunkId + \" failed.\\n(\" + request + \")\");\n \t\t\t\t\terr.code = \"CSS_CHUNK_LOAD_FAILED\";\n \t\t\t\t\terr.request = request;\n \t\t\t\t\tdelete installedCssChunks[chunkId]\n \t\t\t\t\tlinkTag.parentNode.removeChild(linkTag)\n \t\t\t\t\treject(err);\n \t\t\t\t};\n \t\t\t\tlinkTag.href = fullhref;\n\n \t\t\t\tvar head = document.getElementsByTagName(\"head\")[0];\n \t\t\t\thead.appendChild(linkTag);\n \t\t\t}).then(function() {\n \t\t\t\tinstalledCssChunks[chunkId] = 0;\n \t\t\t}));\n \t\t}\n\n \t\t// JSONP chunk loading for javascript\n\n \t\tvar installedChunkData = installedChunks[chunkId];\n \t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n \t\t\t// a Promise means \"currently loading\".\n \t\t\tif(installedChunkData) {\n \t\t\t\tpromises.push(installedChunkData[2]);\n \t\t\t} else {\n \t\t\t\t// setup Promise in chunk cache\n \t\t\t\tvar promise = new Promise(function(resolve, reject) {\n \t\t\t\t\tinstalledChunkData = installedChunks[chunkId] = [resolve, reject];\n \t\t\t\t});\n \t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n \t\t\t\t// start chunk loading\n \t\t\t\tvar script = document.createElement('script');\n \t\t\t\tvar onScriptComplete;\n\n \t\t\t\tscript.charset = 'utf-8';\n \t\t\t\tscript.timeout = 120;\n \t\t\t\tif (__webpack_require__.nc) {\n \t\t\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n \t\t\t\t}\n \t\t\t\tscript.src = jsonpScriptSrc(chunkId);\n\n \t\t\t\t// create error before stack unwound to get useful stacktrace later\n \t\t\t\tvar error = new Error();\n \t\t\t\tonScriptComplete = function (event) {\n \t\t\t\t\t// avoid mem leaks in IE.\n \t\t\t\t\tscript.onerror = script.onload = null;\n \t\t\t\t\tclearTimeout(timeout);\n \t\t\t\t\tvar chunk = installedChunks[chunkId];\n \t\t\t\t\tif(chunk !== 0) {\n \t\t\t\t\t\tif(chunk) {\n \t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n \t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n \t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n \t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n \t\t\t\t\t\t\terror.type = errorType;\n \t\t\t\t\t\t\terror.request = realSrc;\n \t\t\t\t\t\t\tchunk[1](error);\n \t\t\t\t\t\t}\n \t\t\t\t\t\tinstalledChunks[chunkId] = undefined;\n \t\t\t\t\t}\n \t\t\t\t};\n \t\t\t\tvar timeout = setTimeout(function(){\n \t\t\t\t\tonScriptComplete({ type: 'timeout', target: script });\n \t\t\t\t}, 120000);\n \t\t\t\tscript.onerror = script.onload = onScriptComplete;\n \t\t\t\tdocument.head.appendChild(script);\n \t\t\t}\n \t\t}\n \t\treturn Promise.all(promises);\n \t};\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/\";\n\n \t// on error function for async loading\n \t__webpack_require__.oe = function(err) { console.error(err); throw err; };\n\n \tvar jsonpArray = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// add entry module to deferred list\n \tdeferredModules.push([0,\"chunk-vendors\"]);\n \t// run deferred modules when ready\n \treturn checkDeferredModules();\n","import { createStore } from 'vuex'\r\nimport { user } from '../utils/auth'\r\n\r\nconst store = createStore({\r\n state() {\r\n const data = user.loadUserLoginData()\r\n const userData = {\r\n nickname: null,\r\n usernmae: null,\r\n email: null,\r\n }\r\n if (data != null) {\r\n userData.nickname = data.nickname\r\n userData.usernmae = data.usernmae\r\n userData.email = data.email;\r\n }\r\n return {\r\n user: userData,\r\n menu: {\r\n isCollapse: true,\r\n }\r\n }\r\n },\r\n mutations: {\r\n userUpdate(state, param) {\r\n if (param.nickname) {\r\n state.user.nickname = param.nickname\r\n }\r\n if (param.usernmae) {\r\n state.user.usernmae = param.usernmae\r\n }\r\n if (param.email) {\r\n state.user.email = param.email\r\n }\r\n },\r\n foldMenu(state) {\r\n state.menu.isCollapse = true\r\n },\r\n expandMenu(state) {\r\n state.menu.isCollapse = false\r\n }\r\n }\r\n})\r\n\r\nexport default store","\r\n","import { render } from \"./App.vue?vue&type=template&id=2b08e877\"\nconst script = {}\n\nimport exportComponent from \"E:\\\\git_workspace\\\\databasir-frontend\\\\node_modules\\\\vue-loader-v16\\\\dist\\\\exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { createApp } from 'vue'\r\nimport ElementPlus from 'element-plus'\r\nimport * as Icons from '@element-plus/icons'\r\nimport 'element-plus/dist/index.css'\r\nimport router from './router'\r\nimport store from './store'\r\nimport App from './App.vue'\r\nimport { user } from './utils/auth'\r\n\r\nconst app = createApp(App)\r\nObject.keys(Icons).forEach(key => {\r\n app.component(key, Icons[key])\r\n})\r\napp.directive('require-roles', {\r\n mounted(el, binding) {\r\n const roles = binding.value\r\n if (!user.hasAnyRoles(roles)) {\r\n el.parentNode && el.parentNode.removeChild(el)\r\n }\r\n },\r\n})\r\n\r\napp.directive(\"select-more\", {\r\n updated(el, binding) {\r\n const child = el.querySelector('.select-trigger');\r\n const id = child.getAttribute('aria-describedby');\r\n const poper = document.getElementById(id);\r\n const selector = poper.querySelector('.el-scrollbar .el-select-dropdown__wrap');\r\n selector.addEventListener('scroll', function () {\r\n const condition = this.scrollHeight - this.scrollTop - 1 <= this.clientHeight;\r\n if (condition) {\r\n binding.value();\r\n }\r\n });\r\n },\r\n});\r\n\r\napp.use(store)\r\napp.use(ElementPlus)\r\napp.use(router)\r\napp.mount('#app')\r\n\r\n","const accessTokenKey = 'accessToken'\r\nconst accessTokenExpireAtKey = 'accessTokenExpireAt'\r\nconst userLoginDataKey = 'userLoginData'\r\n\r\nexport const token = {\r\n hasAccessToken() {\r\n const accessToken = this.loadAccessToken()\r\n return accessToken\r\n },\r\n\r\n hasValidAccessToken() {\r\n const accessToken = this.loadAccessToken()\r\n const expireAt = window.localStorage.getItem(accessTokenExpireAtKey)\r\n if (!accessToken || !expireAt) {\r\n console.log('warn: not found accessToken and expireAt key')\r\n return false\r\n }\r\n return expireAt > new Date().getTime()\r\n },\r\n\r\n saveAccessToken(token, tokenExpireAt) {\r\n window.localStorage.setItem(accessTokenKey, token)\r\n window.localStorage.setItem(accessTokenExpireAtKey, tokenExpireAt)\r\n },\r\n\r\n loadAccessToken() {\r\n return window.localStorage.getItem(accessTokenKey)\r\n }\r\n}\r\n\r\nexport const user = {\r\n\r\n saveUserLoginData(userLoginData) {\r\n window.localStorage.setItem(accessTokenKey, userLoginData.accessToken)\r\n window.localStorage.setItem(accessTokenExpireAtKey, userLoginData.accessTokenExpireAt)\r\n window.localStorage.setItem(userLoginDataKey, JSON.stringify(userLoginData))\r\n },\r\n\r\n removeUserLoginData() {\r\n window.localStorage.removeItem(userLoginDataKey)\r\n window.localStorage.removeItem(accessTokenKey)\r\n window.localStorage.removeItem(accessTokenExpireAtKey)\r\n },\r\n\r\n loadUserLoginData() {\r\n if (!window.localStorage.getItem(userLoginDataKey)) {\r\n return null;\r\n } else {\r\n const data = window.localStorage.getItem(userLoginDataKey)\r\n return JSON.parse(data)\r\n }\r\n },\r\n\r\n hasAnyRoles(roles) {\r\n const data = window.localStorage.getItem(userLoginDataKey)\r\n if (data == null) {\r\n return false\r\n }\r\n const user = JSON.parse(data)\r\n return user\r\n .roles\r\n .map(role => {\r\n if (role.groupId) {\r\n return role.role + '?groupId=' + role.groupId\r\n } else {\r\n return role.role\r\n }\r\n })\r\n .some(exists => roles.some(expected => expected == exists))\r\n },\r\n\r\n getRefreshToken() {\r\n const data = window.localStorage.getItem(userLoginDataKey)\r\n if (data == null) {\r\n return null\r\n }\r\n const user = JSON.parse(data)\r\n return user.refreshToken\r\n }\r\n}\r\n","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader-v16/dist/index.js??ref--1-1!./AppNav.vue?vue&type=style&index=0&id=9b19d010&lang=css\"","\r\n\r\n\r\n","\r\n\r\n","import { render } from \"./AppNav.vue?vue&type=template&id=9b19d010\"\nimport script from \"./AppNav.vue?vue&type=script&lang=js\"\nexport * from \"./AppNav.vue?vue&type=script&lang=js\"\n\nimport \"./AppNav.vue?vue&type=style&index=0&id=9b19d010&lang=css\"\n\nimport exportComponent from \"E:\\\\git_workspace\\\\databasir-frontend\\\\node_modules\\\\vue-loader-v16\\\\dist\\\\exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\r\n\r\n","import { render } from \"./Breadcrumb.vue?vue&type=template&id=f841bcd6\"\nimport script from \"./Breadcrumb.vue?vue&type=script&lang=js\"\nexport * from \"./Breadcrumb.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"E:\\\\git_workspace\\\\databasir-frontend\\\\node_modules\\\\vue-loader-v16\\\\dist\\\\exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\r\n\r\n\r\n","import { render } from \"./Avatar.vue?vue&type=template&id=41b59522\"\nimport script from \"./Avatar.vue?vue&type=script&lang=js\"\nexport * from \"./Avatar.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"E:\\\\git_workspace\\\\databasir-frontend\\\\node_modules\\\\vue-loader-v16\\\\dist\\\\exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { render } from \"./Layout.vue?vue&type=template&id=57316434\"\nimport script from \"./Layout.vue?vue&type=script&lang=js\"\nexport * from \"./Layout.vue?vue&type=script&lang=js\"\n\nimport \"./Layout.vue?vue&type=style&index=0&id=57316434&lang=css\"\n\nimport exportComponent from \"E:\\\\git_workspace\\\\databasir-frontend\\\\node_modules\\\\vue-loader-v16\\\\dist\\\\exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","function index() {\r\n return {\r\n name:'首页',\r\n to: {\r\n path: '/'\r\n }\r\n }\r\n}\r\n\r\nfunction groupList() {\r\n return {\r\n name:'项目中心',\r\n to: {\r\n name: 'groupListPage'\r\n } \r\n }\r\n}\r\n\r\nfunction groupDashboard(route) {\r\n var groupName = '项目组'\r\n if (route.query.groupName) {\r\n groupName = route.query.groupName\r\n }\r\n return {\r\n name: groupName,\r\n to: {\r\n path: '/groups/'+route.params.groupId\r\n } \r\n }\r\n}\r\n\r\nfunction groupProjectDocument(route) {\r\n var name = '项目文档'\r\n if (route.query.projectName) {\r\n name = route.query.projectName\r\n }\r\n var projectId = route.params.projectId\r\n var groupId = route.params.groupId\r\n return {\r\n name: name,\r\n to: {\r\n path: '/groups/' + groupId + '/projects/' + projectId + '/documents',\r\n query: {\r\n projectName: name\r\n }\r\n } \r\n }\r\n}\r\n\r\nfunction userList() {\r\n return {\r\n name:'用户列表',\r\n to: {\r\n path: '/users'\r\n } \r\n }\r\n}\r\n\r\n\r\nfunction userProfile() {\r\n return {\r\n name:'个人中心',\r\n to: {\r\n path: '/profile'\r\n } \r\n }\r\n}\r\n\r\nfunction sysEmailEdit() {\r\n return {\r\n name:'邮箱设置',\r\n to: {\r\n path: '/settings/sysEmail'\r\n } \r\n }\r\n}\r\n\r\nconst breadcurmbMap = {\r\n index: () => [index() ],\r\n groupList: () => [index(), groupList()],\r\n groupDashboard: (route, state) => [index(), groupList(), groupDashboard(route, state)],\r\n groupProjectDocument: (route, state) => [index(), groupList(), groupDashboard(route, state), groupProjectDocument(route)],\r\n userProfile: () => [index(), userProfile()],\r\n userList: () => [index(), userList()],\r\n sysEmailEdit: () => [index(), sysEmailEdit()]\r\n}\r\n\r\nexport default breadcurmbMap","import { createRouter, createWebHashHistory } from 'vue-router';\r\nimport Layout from \"../layouts/Layout.vue\"\r\nimport breadcurmbMap from './breadcurmb'\r\nimport { token } from '../utils/auth';\r\n\r\nconst routes = [\r\n {\r\n path: '/login',\r\n component: () => import('@/views/Login.vue'),\r\n hidden: true,\r\n meta: {\r\n requireAuth: false\r\n }\r\n },\r\n {\r\n path: '/',\r\n hidden: true,\r\n component: Layout,\r\n children: [\r\n {\r\n path: '',\r\n hidden: true,\r\n component: () => import('@/views/GroupList.vue'),\r\n meta: {\r\n breadcrumb: breadcurmbMap.groupList\r\n }\r\n }\r\n ]\r\n },\r\n {\r\n path: '/groups',\r\n icon: 'Collection',\r\n component: Layout,\r\n meta: {\r\n nav: '项目中心',\r\n },\r\n children: [\r\n {\r\n path: '',\r\n name: 'groupListPage',\r\n hidden: true,\r\n component: () => import('@/views/GroupList.vue'),\r\n meta: {\r\n breadcrumb: breadcurmbMap.groupList\r\n }\r\n },\r\n {\r\n path: ':groupId',\r\n hidden: true,\r\n component: () => import('@/views/GroupDashboard.vue'),\r\n meta: {\r\n breadcrumb: breadcurmbMap.groupDashboard\r\n }\r\n },\r\n {\r\n path: ':groupId/projects/:projectId/documents',\r\n hidden: true,\r\n component: () => import('@/views/Document.vue'),\r\n meta: {\r\n breadcrumb: breadcurmbMap.groupProjectDocument\r\n }\r\n }\r\n ]\r\n },\r\n {\r\n path: '/users',\r\n icon: 'List',\r\n component: Layout,\r\n meta: {\r\n nav:'用户中心',\r\n requireAnyRoles: ['SYS_OWNER']\r\n },\r\n children: [\r\n {\r\n path: '',\r\n hidden: true,\r\n component: () => import('@/views/UserList.vue'),\r\n meta: {\r\n breadcrumb: breadcurmbMap.userList\r\n }\r\n }\r\n ]\r\n },\r\n {\r\n path: '/profile',\r\n icon: 'User',\r\n component: Layout,\r\n meta: {\r\n nav: '个人中心',\r\n breadcrumb: breadcurmbMap.userProfile\r\n },\r\n children: [\r\n {\r\n path: '',\r\n hidden: true,\r\n component: () => import('@/views/UserProfile.vue')\r\n }\r\n ]\r\n },\r\n {\r\n path: '/settings',\r\n icon: 'Setting',\r\n component: Layout,\r\n meta: {\r\n nav:'系统中心',\r\n requireAnyRoles: ['SYS_OWNER']\r\n },\r\n children: [\r\n {\r\n path: 'sysEmail',\r\n icon: 'Notification',\r\n component: () => import('@/views/SysEmailEdit.vue'),\r\n meta: {\r\n nav: '邮箱设置',\r\n breadcrumb: breadcurmbMap.sysEmailEdit\r\n }\r\n },\r\n // TODO\r\n {\r\n path: 'sysKey',\r\n icon: 'Key',\r\n hidden: 'true',\r\n component: Layout,\r\n meta: {\r\n nav: '系统秘钥',\r\n breadcrumb: breadcurmbMap.sysKeyEdit\r\n }\r\n }\r\n ]\r\n }\r\n];\r\n\r\nconst router = createRouter({\r\n history: createWebHashHistory(),\r\n routes\r\n});\r\n\r\n// 权限路由守卫\r\nrouter.beforeEach((to, from, next) => {\r\n if (to.meta.requireAuth == false) {\r\n if (to.path == '/login' && token.hasAccessToken()) {\r\n next(from)\r\n } else {\r\n next()\r\n }\r\n } else {\r\n if(token.hasAccessToken()) {\r\n next()\r\n } else {\r\n next({ path: '/login' })\r\n }\r\n }\r\n})\r\n\r\n// groupName 参数路由守卫\r\nrouter.beforeEach((to, from, next) => {\r\n if (!to.query.groupName && from.query.groupName) {\r\n to.query.groupName = from.query.groupName\r\n } \r\n if (!to.query.projectName && from.query.projectName) {\r\n to.query.projectName = from.query.projectName\r\n } \r\n next();\r\n})\r\n\r\nexport default router;","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader-v16/dist/index.js??ref--1-1!./Layout.vue?vue&type=style&index=0&id=57316434&lang=css\""],"sourceRoot":""} \ No newline at end of file diff --git a/api/src/main/resources/static/js/chunk-04ac1c26.b03a6105.js.map b/api/src/main/resources/static/js/chunk-04ac1c26.b03a6105.js.map deleted file mode 100644 index 5611622..0000000 --- a/api/src/main/resources/static/js/chunk-04ac1c26.b03a6105.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["webpack:///./node_modules/core-js/internals/object-get-own-property-names-external.js","webpack:///./src/api/Group.js","webpack:///./node_modules/core-js/internals/path.js","webpack:///./node_modules/core-js/internals/array-slice-simple.js","webpack:///./node_modules/core-js/internals/define-well-known-symbol.js","webpack:///./node_modules/core-js/internals/create-property.js","webpack:///./src/views/GroupList.vue?f837","webpack:///./src/api/User.js","webpack:///./node_modules/core-js/modules/es.array.splice.js","webpack:///./node_modules/core-js/modules/es.symbol.js","webpack:///./src/views/GroupList.vue","webpack:///./src/views/GroupList.vue?90e1","webpack:///./node_modules/core-js/modules/es.symbol.description.js","webpack:///./node_modules/core-js/internals/well-known-symbol-wrapped.js","webpack:///./node_modules/core-js/modules/es.array.slice.js"],"names":["classof","toIndexedObject","$getOwnPropertyNames","f","arraySlice","windowNames","window","Object","getOwnPropertyNames","getWindowNames","it","error","module","exports","base","listGroups","pageQuery","axios","get","params","getGroup","id","createOrUpdateGroup","body","updateGroup","createGroup","post","patch","deleteGroup","delete","listGroupMembers","groupId","addGroupMember","removeGroupMember","userId","updateGroupMemberRole","role","global","toAbsoluteIndex","lengthOfArrayLike","createProperty","Array","max","Math","O","start","end","length","k","fin","undefined","result","n","path","hasOwn","wrappedWellKnownSymbolModule","defineProperty","NAME","Symbol","value","toPropertyKey","definePropertyModule","createPropertyDescriptor","object","key","propertyKey","listUsers","enableUser","disableUser","getByUserId","createUser","request","renewPassword","addSysOwnerTo","removeSysOwnerFrom","updatePassword","updateNickname","$","toIntegerOrInfinity","toObject","arraySpeciesCreate","arrayMethodHasSpeciesSupport","HAS_SPECIES_SUPPORT","TypeError","min","MAX_SAFE_INTEGER","MAXIMUM_ALLOWED_LENGTH_EXCEEDED","target","proto","forced","splice","deleteCount","insertCount","actualDeleteCount","A","from","to","this","len","actualStart","argumentsLength","arguments","getBuiltIn","apply","call","uncurryThis","IS_PURE","DESCRIPTORS","NATIVE_SYMBOL","fails","isArray","isCallable","isObject","isPrototypeOf","isSymbol","anObject","$toString","nativeObjectCreate","objectKeys","getOwnPropertyNamesModule","getOwnPropertyNamesExternal","getOwnPropertySymbolsModule","getOwnPropertyDescriptorModule","propertyIsEnumerableModule","redefine","shared","sharedKey","hiddenKeys","uid","wellKnownSymbol","defineWellKnownSymbol","setToStringTag","InternalStateModule","$forEach","forEach","HIDDEN","SYMBOL","PROTOTYPE","TO_PRIMITIVE","setInternalState","set","getInternalState","getterFor","ObjectPrototype","$Symbol","SymbolPrototype","QObject","$stringify","nativeGetOwnPropertyDescriptor","nativeDefineProperty","nativeGetOwnPropertyNames","nativePropertyIsEnumerable","push","AllSymbols","ObjectPrototypeSymbols","StringToSymbolRegistry","SymbolToStringRegistry","WellKnownSymbolsStore","USE_SETTER","findChild","setSymbolDescriptor","a","P","Attributes","ObjectPrototypeDescriptor","wrap","tag","description","symbol","type","$defineProperty","enumerable","$defineProperties","Properties","properties","keys","concat","$getOwnPropertySymbols","$propertyIsEnumerable","$create","V","$getOwnPropertyDescriptor","descriptor","names","IS_OBJECT_PROTOTYPE","setter","configurable","name","unsafe","sham","stat","string","keyFor","sym","useSetter","useSimple","create","defineProperties","getOwnPropertyDescriptor","getOwnPropertySymbols","FORCED_JSON_STRINGIFY","stringify","replacer","space","args","$replacer","valueOf","hint","class","style","gutter","span","content","placement","icon","toCreatePage","onQuery","groupPageQuery","groupNameContains","label","placeholder","prefix-icon","groupPageData","data","partitionArray","partition","index","group","shadow","header","underline","toGroupDashboard","size","toEditPage","circle","column","label-align","align","groupOwnerNames","owner","effect","projectCount","layout","hide-on-single-page","currentPage","number","page-size","page-count","totalPages","onPageChange","isShowEditGroupDialog","width","center","destroy-on-close","model","groupData","rules","groupDataRule","ref","label-position","prop","userQueryData","nicknameOrUsernameOrEmailContains","fetch-suggestions","queryUsersAsync","onGroupOwnerSelect","clearable","groupOwners","user","closable","disable-transitions","onGroupOwnerRemove","email","nickname","onGroupSave","title","onGroupDelete","requiredInputValidRule","nicknameContains","totalElements","page","created","fetchGroupsFunction","methods","isPermit","hasAnyRoles","jsonData","message","required","trigger","requiredGroupOwners","arr","output","idx","i","slice","query","callback","then","resp","users","map","u","$confirm","confirmButtonText","cancelButtonText","errCode","$message","success","$refs","groupFormRef","validate","valid","assign","groupOwnerUserIds","r","warning","item","some","groupName","$router","toGroupMemberListPage","__exports__","render","toString","copyConstructorProperties","NativeSymbol","prototype","EmptyStringDescriptionStore","SymbolWrapper","constructor","String","symbolToString","symbolValueOf","regexp","replace","stringSlice","desc","isConstructor","un$Slice","SPECIES","Constructor"],"mappings":"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","file":"js/chunk-04ac1c26.b03a6105.js","sourcesContent":["/* eslint-disable es/no-object-getownpropertynames -- safe */\nvar classof = require('../internals/classof-raw');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar $getOwnPropertyNames = require('../internals/object-get-own-property-names').f;\nvar arraySlice = require('../internals/array-slice-simple');\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function (it) {\n try {\n return $getOwnPropertyNames(it);\n } catch (error) {\n return arraySlice(windowNames);\n }\n};\n\n// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nmodule.exports.f = function getOwnPropertyNames(it) {\n return windowNames && classof(it) == 'Window'\n ? getWindowNames(it)\n : $getOwnPropertyNames(toIndexedObject(it));\n};\n","import axios from '@/utils/fetch';\n\nconst base = '/api/v1.0/groups'\n\nexport const listGroups = (pageQuery) => {\n return axios.get(base, {\n params: pageQuery\n })\n}\n\nexport const getGroup= (id) => {\n return axios.get(base + \"/\" + id)\n}\n\nexport const createOrUpdateGroup = (body) => {\n if (body.id && body.id != null) {\n return updateGroup(body)\n } else {\n return createGroup(body)\n }\n}\n\nexport const createGroup = (body) => {\n return axios.post(base, body)\n}\n\nexport const updateGroup = (body) => {\n return axios.patch(base, body)\n}\n\nexport const deleteGroup = (id) => {\n return axios.delete(base + '/' + id)\n}\n\nexport const listGroupMembers = (groupId, pageQuery) => {\n return axios.get(base + '/' + groupId + '/members', {\n params: pageQuery\n })\n}\n\nexport const addGroupMember = (groupId, body) => {\n return axios.post(base + '/' + groupId + '/members', body)\n}\n\nexport const removeGroupMember = (groupId, userId) => {\n return axios.delete(base +'/'+groupId+'/members/'+userId)\n}\n\nexport const updateGroupMemberRole = (groupId, userId, role) => {\n const body = {\n role: role\n }\n return axios.patch(base +'/'+groupId+'/members/'+userId, body)\n}\n\n\n\n\n\n","var global = require('../internals/global');\n\nmodule.exports = global;\n","var global = require('../internals/global');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar createProperty = require('../internals/create-property');\n\nvar Array = global.Array;\nvar max = Math.max;\n\nmodule.exports = function (O, start, end) {\n var length = lengthOfArrayLike(O);\n var k = toAbsoluteIndex(start, length);\n var fin = toAbsoluteIndex(end === undefined ? length : end, length);\n var result = Array(max(fin - k, 0));\n for (var n = 0; k < fin; k++, n++) createProperty(result, n, O[k]);\n result.length = n;\n return result;\n};\n","var path = require('../internals/path');\nvar hasOwn = require('../internals/has-own-property');\nvar wrappedWellKnownSymbolModule = require('../internals/well-known-symbol-wrapped');\nvar defineProperty = require('../internals/object-define-property').f;\n\nmodule.exports = function (NAME) {\n var Symbol = path.Symbol || (path.Symbol = {});\n if (!hasOwn(Symbol, NAME)) defineProperty(Symbol, NAME, {\n value: wrappedWellKnownSymbolModule.f(NAME)\n });\n};\n","'use strict';\nvar toPropertyKey = require('../internals/to-property-key');\nvar definePropertyModule = require('../internals/object-define-property');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\n\nmodule.exports = function (object, key, value) {\n var propertyKey = toPropertyKey(key);\n if (propertyKey in object) definePropertyModule.f(object, propertyKey, createPropertyDescriptor(0, value));\n else object[propertyKey] = value;\n};\n","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader-v16/dist/index.js??ref--1-1!./GroupList.vue?vue&type=style&index=0&id=b1e9490c&lang=css\"","import axios from '@/utils/fetch';\n\nconst base = '/api/v1.0/users'\n\nexport const listUsers = (pageQuery) => {\n return axios.get(base, {\n params: pageQuery\n })\n}\n\nexport const enableUser = (userId) => {\n return axios.post(base+\"/\"+userId+\"/enable\")\n\n}\n\nexport const disableUser = (userId) => {\n return axios.post(base+\"/\"+userId+\"/disable\")\n}\n\nexport const getByUserId = (userId) => {\n return axios.get(base+\"/\"+userId)\n}\n\nexport const createUser = (request) => {\n return axios.post(base, request)\n}\n\nexport const renewPassword = (id) => {\n return axios.post(base +'/' + id +'/renew_password')\n}\n\nexport const addSysOwnerTo = (userId) => {\n return axios.post(base +'/' + userId +'/sys_owners')\n}\n\nexport const removeSysOwnerFrom = (userId) => {\n return axios.delete(base +'/' + userId +'/sys_owners')\n}\n\nexport const updatePassword = (userId, body) => {\n return axios.post(base +'/' + userId +'/password', body)\n}\n\nexport const updateNickname = (userId, body) => {\n return axios.post(base +'/' + userId +'/nickname', body)\n}","'use strict';\nvar $ = require('../internals/export');\nvar global = require('../internals/global');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar toObject = require('../internals/to-object');\nvar arraySpeciesCreate = require('../internals/array-species-create');\nvar createProperty = require('../internals/create-property');\nvar arrayMethodHasSpeciesSupport = require('../internals/array-method-has-species-support');\n\nvar HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('splice');\n\nvar TypeError = global.TypeError;\nvar max = Math.max;\nvar min = Math.min;\nvar MAX_SAFE_INTEGER = 0x1FFFFFFFFFFFFF;\nvar MAXIMUM_ALLOWED_LENGTH_EXCEEDED = 'Maximum allowed length exceeded';\n\n// `Array.prototype.splice` method\n// https://tc39.es/ecma262/#sec-array.prototype.splice\n// with adding support of @@species\n$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT }, {\n splice: function splice(start, deleteCount /* , ...items */) {\n var O = toObject(this);\n var len = lengthOfArrayLike(O);\n var actualStart = toAbsoluteIndex(start, len);\n var argumentsLength = arguments.length;\n var insertCount, actualDeleteCount, A, k, from, to;\n if (argumentsLength === 0) {\n insertCount = actualDeleteCount = 0;\n } else if (argumentsLength === 1) {\n insertCount = 0;\n actualDeleteCount = len - actualStart;\n } else {\n insertCount = argumentsLength - 2;\n actualDeleteCount = min(max(toIntegerOrInfinity(deleteCount), 0), len - actualStart);\n }\n if (len + insertCount - actualDeleteCount > MAX_SAFE_INTEGER) {\n throw TypeError(MAXIMUM_ALLOWED_LENGTH_EXCEEDED);\n }\n A = arraySpeciesCreate(O, actualDeleteCount);\n for (k = 0; k < actualDeleteCount; k++) {\n from = actualStart + k;\n if (from in O) createProperty(A, k, O[from]);\n }\n A.length = actualDeleteCount;\n if (insertCount < actualDeleteCount) {\n for (k = actualStart; k < len - actualDeleteCount; k++) {\n from = k + actualDeleteCount;\n to = k + insertCount;\n if (from in O) O[to] = O[from];\n else delete O[to];\n }\n for (k = len; k > len - actualDeleteCount + insertCount; k--) delete O[k - 1];\n } else if (insertCount > actualDeleteCount) {\n for (k = len - actualDeleteCount; k > actualStart; k--) {\n from = k + actualDeleteCount - 1;\n to = k + insertCount - 1;\n if (from in O) O[to] = O[from];\n else delete O[to];\n }\n }\n for (k = 0; k < insertCount; k++) {\n O[k + actualStart] = arguments[k + 2];\n }\n O.length = len - actualDeleteCount + insertCount;\n return A;\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar global = require('../internals/global');\nvar getBuiltIn = require('../internals/get-built-in');\nvar apply = require('../internals/function-apply');\nvar call = require('../internals/function-call');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar IS_PURE = require('../internals/is-pure');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar NATIVE_SYMBOL = require('../internals/native-symbol');\nvar fails = require('../internals/fails');\nvar hasOwn = require('../internals/has-own-property');\nvar isArray = require('../internals/is-array');\nvar isCallable = require('../internals/is-callable');\nvar isObject = require('../internals/is-object');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar isSymbol = require('../internals/is-symbol');\nvar anObject = require('../internals/an-object');\nvar toObject = require('../internals/to-object');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar toPropertyKey = require('../internals/to-property-key');\nvar $toString = require('../internals/to-string');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar nativeObjectCreate = require('../internals/object-create');\nvar objectKeys = require('../internals/object-keys');\nvar getOwnPropertyNamesModule = require('../internals/object-get-own-property-names');\nvar getOwnPropertyNamesExternal = require('../internals/object-get-own-property-names-external');\nvar getOwnPropertySymbolsModule = require('../internals/object-get-own-property-symbols');\nvar getOwnPropertyDescriptorModule = require('../internals/object-get-own-property-descriptor');\nvar definePropertyModule = require('../internals/object-define-property');\nvar propertyIsEnumerableModule = require('../internals/object-property-is-enumerable');\nvar arraySlice = require('../internals/array-slice');\nvar redefine = require('../internals/redefine');\nvar shared = require('../internals/shared');\nvar sharedKey = require('../internals/shared-key');\nvar hiddenKeys = require('../internals/hidden-keys');\nvar uid = require('../internals/uid');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar wrappedWellKnownSymbolModule = require('../internals/well-known-symbol-wrapped');\nvar defineWellKnownSymbol = require('../internals/define-well-known-symbol');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar InternalStateModule = require('../internals/internal-state');\nvar $forEach = require('../internals/array-iteration').forEach;\n\nvar HIDDEN = sharedKey('hidden');\nvar SYMBOL = 'Symbol';\nvar PROTOTYPE = 'prototype';\nvar TO_PRIMITIVE = wellKnownSymbol('toPrimitive');\n\nvar setInternalState = InternalStateModule.set;\nvar getInternalState = InternalStateModule.getterFor(SYMBOL);\n\nvar ObjectPrototype = Object[PROTOTYPE];\nvar $Symbol = global.Symbol;\nvar SymbolPrototype = $Symbol && $Symbol[PROTOTYPE];\nvar TypeError = global.TypeError;\nvar QObject = global.QObject;\nvar $stringify = getBuiltIn('JSON', 'stringify');\nvar nativeGetOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;\nvar nativeDefineProperty = definePropertyModule.f;\nvar nativeGetOwnPropertyNames = getOwnPropertyNamesExternal.f;\nvar nativePropertyIsEnumerable = propertyIsEnumerableModule.f;\nvar push = uncurryThis([].push);\n\nvar AllSymbols = shared('symbols');\nvar ObjectPrototypeSymbols = shared('op-symbols');\nvar StringToSymbolRegistry = shared('string-to-symbol-registry');\nvar SymbolToStringRegistry = shared('symbol-to-string-registry');\nvar WellKnownSymbolsStore = shared('wks');\n\n// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\nvar USE_SETTER = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;\n\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar setSymbolDescriptor = DESCRIPTORS && fails(function () {\n return nativeObjectCreate(nativeDefineProperty({}, 'a', {\n get: function () { return nativeDefineProperty(this, 'a', { value: 7 }).a; }\n })).a != 7;\n}) ? function (O, P, Attributes) {\n var ObjectPrototypeDescriptor = nativeGetOwnPropertyDescriptor(ObjectPrototype, P);\n if (ObjectPrototypeDescriptor) delete ObjectPrototype[P];\n nativeDefineProperty(O, P, Attributes);\n if (ObjectPrototypeDescriptor && O !== ObjectPrototype) {\n nativeDefineProperty(ObjectPrototype, P, ObjectPrototypeDescriptor);\n }\n} : nativeDefineProperty;\n\nvar wrap = function (tag, description) {\n var symbol = AllSymbols[tag] = nativeObjectCreate(SymbolPrototype);\n setInternalState(symbol, {\n type: SYMBOL,\n tag: tag,\n description: description\n });\n if (!DESCRIPTORS) symbol.description = description;\n return symbol;\n};\n\nvar $defineProperty = function defineProperty(O, P, Attributes) {\n if (O === ObjectPrototype) $defineProperty(ObjectPrototypeSymbols, P, Attributes);\n anObject(O);\n var key = toPropertyKey(P);\n anObject(Attributes);\n if (hasOwn(AllSymbols, key)) {\n if (!Attributes.enumerable) {\n if (!hasOwn(O, HIDDEN)) nativeDefineProperty(O, HIDDEN, createPropertyDescriptor(1, {}));\n O[HIDDEN][key] = true;\n } else {\n if (hasOwn(O, HIDDEN) && O[HIDDEN][key]) O[HIDDEN][key] = false;\n Attributes = nativeObjectCreate(Attributes, { enumerable: createPropertyDescriptor(0, false) });\n } return setSymbolDescriptor(O, key, Attributes);\n } return nativeDefineProperty(O, key, Attributes);\n};\n\nvar $defineProperties = function defineProperties(O, Properties) {\n anObject(O);\n var properties = toIndexedObject(Properties);\n var keys = objectKeys(properties).concat($getOwnPropertySymbols(properties));\n $forEach(keys, function (key) {\n if (!DESCRIPTORS || call($propertyIsEnumerable, properties, key)) $defineProperty(O, key, properties[key]);\n });\n return O;\n};\n\nvar $create = function create(O, Properties) {\n return Properties === undefined ? nativeObjectCreate(O) : $defineProperties(nativeObjectCreate(O), Properties);\n};\n\nvar $propertyIsEnumerable = function propertyIsEnumerable(V) {\n var P = toPropertyKey(V);\n var enumerable = call(nativePropertyIsEnumerable, this, P);\n if (this === ObjectPrototype && hasOwn(AllSymbols, P) && !hasOwn(ObjectPrototypeSymbols, P)) return false;\n return enumerable || !hasOwn(this, P) || !hasOwn(AllSymbols, P) || hasOwn(this, HIDDEN) && this[HIDDEN][P]\n ? enumerable : true;\n};\n\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(O, P) {\n var it = toIndexedObject(O);\n var key = toPropertyKey(P);\n if (it === ObjectPrototype && hasOwn(AllSymbols, key) && !hasOwn(ObjectPrototypeSymbols, key)) return;\n var descriptor = nativeGetOwnPropertyDescriptor(it, key);\n if (descriptor && hasOwn(AllSymbols, key) && !(hasOwn(it, HIDDEN) && it[HIDDEN][key])) {\n descriptor.enumerable = true;\n }\n return descriptor;\n};\n\nvar $getOwnPropertyNames = function getOwnPropertyNames(O) {\n var names = nativeGetOwnPropertyNames(toIndexedObject(O));\n var result = [];\n $forEach(names, function (key) {\n if (!hasOwn(AllSymbols, key) && !hasOwn(hiddenKeys, key)) push(result, key);\n });\n return result;\n};\n\nvar $getOwnPropertySymbols = function getOwnPropertySymbols(O) {\n var IS_OBJECT_PROTOTYPE = O === ObjectPrototype;\n var names = nativeGetOwnPropertyNames(IS_OBJECT_PROTOTYPE ? ObjectPrototypeSymbols : toIndexedObject(O));\n var result = [];\n $forEach(names, function (key) {\n if (hasOwn(AllSymbols, key) && (!IS_OBJECT_PROTOTYPE || hasOwn(ObjectPrototype, key))) {\n push(result, AllSymbols[key]);\n }\n });\n return result;\n};\n\n// `Symbol` constructor\n// https://tc39.es/ecma262/#sec-symbol-constructor\nif (!NATIVE_SYMBOL) {\n $Symbol = function Symbol() {\n if (isPrototypeOf(SymbolPrototype, this)) throw TypeError('Symbol is not a constructor');\n var description = !arguments.length || arguments[0] === undefined ? undefined : $toString(arguments[0]);\n var tag = uid(description);\n var setter = function (value) {\n if (this === ObjectPrototype) call(setter, ObjectPrototypeSymbols, value);\n if (hasOwn(this, HIDDEN) && hasOwn(this[HIDDEN], tag)) this[HIDDEN][tag] = false;\n setSymbolDescriptor(this, tag, createPropertyDescriptor(1, value));\n };\n if (DESCRIPTORS && USE_SETTER) setSymbolDescriptor(ObjectPrototype, tag, { configurable: true, set: setter });\n return wrap(tag, description);\n };\n\n SymbolPrototype = $Symbol[PROTOTYPE];\n\n redefine(SymbolPrototype, 'toString', function toString() {\n return getInternalState(this).tag;\n });\n\n redefine($Symbol, 'withoutSetter', function (description) {\n return wrap(uid(description), description);\n });\n\n propertyIsEnumerableModule.f = $propertyIsEnumerable;\n definePropertyModule.f = $defineProperty;\n getOwnPropertyDescriptorModule.f = $getOwnPropertyDescriptor;\n getOwnPropertyNamesModule.f = getOwnPropertyNamesExternal.f = $getOwnPropertyNames;\n getOwnPropertySymbolsModule.f = $getOwnPropertySymbols;\n\n wrappedWellKnownSymbolModule.f = function (name) {\n return wrap(wellKnownSymbol(name), name);\n };\n\n if (DESCRIPTORS) {\n // https://github.com/tc39/proposal-Symbol-description\n nativeDefineProperty(SymbolPrototype, 'description', {\n configurable: true,\n get: function description() {\n return getInternalState(this).description;\n }\n });\n if (!IS_PURE) {\n redefine(ObjectPrototype, 'propertyIsEnumerable', $propertyIsEnumerable, { unsafe: true });\n }\n }\n}\n\n$({ global: true, wrap: true, forced: !NATIVE_SYMBOL, sham: !NATIVE_SYMBOL }, {\n Symbol: $Symbol\n});\n\n$forEach(objectKeys(WellKnownSymbolsStore), function (name) {\n defineWellKnownSymbol(name);\n});\n\n$({ target: SYMBOL, stat: true, forced: !NATIVE_SYMBOL }, {\n // `Symbol.for` method\n // https://tc39.es/ecma262/#sec-symbol.for\n 'for': function (key) {\n var string = $toString(key);\n if (hasOwn(StringToSymbolRegistry, string)) return StringToSymbolRegistry[string];\n var symbol = $Symbol(string);\n StringToSymbolRegistry[string] = symbol;\n SymbolToStringRegistry[symbol] = string;\n return symbol;\n },\n // `Symbol.keyFor` method\n // https://tc39.es/ecma262/#sec-symbol.keyfor\n keyFor: function keyFor(sym) {\n if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol');\n if (hasOwn(SymbolToStringRegistry, sym)) return SymbolToStringRegistry[sym];\n },\n useSetter: function () { USE_SETTER = true; },\n useSimple: function () { USE_SETTER = false; }\n});\n\n$({ target: 'Object', stat: true, forced: !NATIVE_SYMBOL, sham: !DESCRIPTORS }, {\n // `Object.create` method\n // https://tc39.es/ecma262/#sec-object.create\n create: $create,\n // `Object.defineProperty` method\n // https://tc39.es/ecma262/#sec-object.defineproperty\n defineProperty: $defineProperty,\n // `Object.defineProperties` method\n // https://tc39.es/ecma262/#sec-object.defineproperties\n defineProperties: $defineProperties,\n // `Object.getOwnPropertyDescriptor` method\n // https://tc39.es/ecma262/#sec-object.getownpropertydescriptors\n getOwnPropertyDescriptor: $getOwnPropertyDescriptor\n});\n\n$({ target: 'Object', stat: true, forced: !NATIVE_SYMBOL }, {\n // `Object.getOwnPropertyNames` method\n // https://tc39.es/ecma262/#sec-object.getownpropertynames\n getOwnPropertyNames: $getOwnPropertyNames,\n // `Object.getOwnPropertySymbols` method\n // https://tc39.es/ecma262/#sec-object.getownpropertysymbols\n getOwnPropertySymbols: $getOwnPropertySymbols\n});\n\n// Chrome 38 and 39 `Object.getOwnPropertySymbols` fails on primitives\n// https://bugs.chromium.org/p/v8/issues/detail?id=3443\n$({ target: 'Object', stat: true, forced: fails(function () { getOwnPropertySymbolsModule.f(1); }) }, {\n getOwnPropertySymbols: function getOwnPropertySymbols(it) {\n return getOwnPropertySymbolsModule.f(toObject(it));\n }\n});\n\n// `JSON.stringify` method behavior with symbols\n// https://tc39.es/ecma262/#sec-json.stringify\nif ($stringify) {\n var FORCED_JSON_STRINGIFY = !NATIVE_SYMBOL || fails(function () {\n var symbol = $Symbol();\n // MS Edge converts symbol values to JSON as {}\n return $stringify([symbol]) != '[null]'\n // WebKit converts symbol values to JSON as null\n || $stringify({ a: symbol }) != '{}'\n // V8 throws on boxed symbols\n || $stringify(Object(symbol)) != '{}';\n });\n\n $({ target: 'JSON', stat: true, forced: FORCED_JSON_STRINGIFY }, {\n // eslint-disable-next-line no-unused-vars -- required for `.length`\n stringify: function stringify(it, replacer, space) {\n var args = arraySlice(arguments);\n var $replacer = replacer;\n if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined\n if (!isArray(replacer)) replacer = function (key, value) {\n if (isCallable($replacer)) value = call($replacer, this, key, value);\n if (!isSymbol(value)) return value;\n };\n args[1] = replacer;\n return apply($stringify, null, args);\n }\n });\n}\n\n// `Symbol.prototype[@@toPrimitive]` method\n// https://tc39.es/ecma262/#sec-symbol.prototype-@@toprimitive\nif (!SymbolPrototype[TO_PRIMITIVE]) {\n var valueOf = SymbolPrototype.valueOf;\n // eslint-disable-next-line no-unused-vars -- required for .length\n redefine(SymbolPrototype, TO_PRIMITIVE, function (hint) {\n // TODO: improve hint logic\n return call(valueOf, this);\n });\n}\n// `Symbol.prototype[@@toStringTag]` property\n// https://tc39.es/ecma262/#sec-symbol.prototype-@@tostringtag\nsetToStringTag($Symbol, SYMBOL);\n\nhiddenKeys[HIDDEN] = true;\n","