diff --git a/api/src/main/java/com/databasir/api/OpenAuth2AppController.java b/api/src/main/java/com/databasir/api/LoginAppController.java similarity index 90% rename from api/src/main/java/com/databasir/api/OpenAuth2AppController.java rename to api/src/main/java/com/databasir/api/LoginAppController.java index 8d3748b..f9cea3a 100644 --- a/api/src/main/java/com/databasir/api/OpenAuth2AppController.java +++ b/api/src/main/java/com/databasir/api/LoginAppController.java @@ -4,6 +4,7 @@ import com.databasir.common.JsonData; import com.databasir.core.domain.app.OpenAuthAppService; import com.databasir.core.domain.app.data.*; import com.databasir.core.domain.app.handler.OpenAuthHandlers; +import com.databasir.core.domain.log.annotation.Operation; import lombok.RequiredArgsConstructor; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; @@ -21,7 +22,7 @@ import static org.springframework.data.domain.Sort.Direction.DESC; @Controller @RequiredArgsConstructor -public class OpenAuth2AppController { +public class LoginAppController { private final OpenAuthAppService openAuthAppService; @@ -30,22 +31,22 @@ public class OpenAuth2AppController { /** * 无需授权 */ - @GetMapping("/oauth2/authorization/{registrationId}") + @GetMapping("/oauth2/apps") @ResponseBody - public JsonData authorization(@PathVariable String registrationId, - HttpServletRequest request) { - Map parameters = request.getParameterMap(); - String authorization = openAuthHandlers.authorizeUrl(registrationId, parameters); - return JsonData.ok(authorization); + public JsonData> listApps() { + return JsonData.ok(openAuthAppService.listAll()); } /** * 无需授权 */ - @GetMapping("/oauth2/apps") + @GetMapping("/oauth2/authorization/{registrationId}") @ResponseBody - public JsonData> listApps() { - return JsonData.ok(openAuthAppService.listAll()); + public JsonData authorization(@PathVariable String registrationId, + HttpServletRequest request) { + Map parameters = request.getParameterMap(); + String authorization = openAuthHandlers.authorizeUrl(registrationId, parameters); + return JsonData.ok(authorization); } @GetMapping(Routes.OAuth2App.LIST_PAGE) @@ -68,6 +69,7 @@ public class OpenAuth2AppController { @PostMapping(Routes.OAuth2App.CREATE) @PreAuthorize("hasAnyAuthority('SYS_OWNER')") @ResponseBody + @Operation(module = Operation.Modules.LOGIN_APP, name = "创建登录应用") public JsonData create(@RequestBody @Valid OAuthAppCreateRequest request) { Integer id = openAuthAppService.create(request); return JsonData.ok(id); @@ -76,6 +78,7 @@ public class OpenAuth2AppController { @PatchMapping(Routes.OAuth2App.UPDATE) @PreAuthorize("hasAnyAuthority('SYS_OWNER')") @ResponseBody + @Operation(module = Operation.Modules.LOGIN_APP, name = "更新登录应用") public JsonData updateById(@RequestBody @Valid OAuthAppUpdateRequest request) { openAuthAppService.updateById(request); return JsonData.ok(); @@ -84,6 +87,7 @@ public class OpenAuth2AppController { @DeleteMapping(Routes.OAuth2App.DELETE) @PreAuthorize("hasAnyAuthority('SYS_OWNER')") @ResponseBody + @Operation(module = Operation.Modules.LOGIN_APP, name = "删除登录应用") public JsonData deleteById(@PathVariable Integer id) { openAuthAppService.deleteById(id); return JsonData.ok(); diff --git a/api/src/main/java/com/databasir/api/SettingController.java b/api/src/main/java/com/databasir/api/SettingController.java index 5b4eeda..6478957 100644 --- a/api/src/main/java/com/databasir/api/SettingController.java +++ b/api/src/main/java/com/databasir/api/SettingController.java @@ -28,13 +28,14 @@ public class SettingController { } @DeleteMapping(Routes.Setting.DELETE_SYS_EMAIL) + @Operation(module = Operation.Modules.SETTING, name = "重置系统邮箱") public JsonData deleteSysEmail() { systemService.deleteSystemEmail(); return JsonData.ok(); } @PostMapping(Routes.Setting.UPDATE_SYS_EMAIL) - @Operation(module = Operation.Modules.PROJECT, name = "更新邮件配置") + @Operation(module = Operation.Modules.SETTING, name = "更新邮件配置") public JsonData updateSystemEmailSetting(@RequestBody @Valid SystemEmailUpdateRequest request) { systemService.updateEmailSetting(request); return JsonData.ok(); diff --git a/api/src/main/resources/application-local.properties b/api/src/main/resources/application-local.properties index 60c4656..a2ddb89 100644 --- a/api/src/main/resources/application-local.properties +++ b/api/src/main/resources/application-local.properties @@ -5,7 +5,6 @@ spring.datasource.username=root spring.datasource.password=123456 spring.datasource.url=jdbc:mysql://localhost:3306/databasir spring.jooq.sql-dialect=mysql - spring.flyway.enabled=true spring.flyway.baseline-on-migrate=true spring.flyway.locations=classpath:db/migration diff --git a/api/src/main/resources/static/index.html b/api/src/main/resources/static/index.html index d9f6bec..629b014 100644 --- a/api/src/main/resources/static/index.html +++ b/api/src/main/resources/static/index.html @@ -1 +1 @@ -databasir-frontend
\ No newline at end of file +databasir-frontend
\ No newline at end of file diff --git a/api/src/main/resources/static/js/940-legacy.90bc5a5b.js b/api/src/main/resources/static/js/940-legacy.90bc5a5b.js deleted file mode 100644 index 5ca5ddc..0000000 --- a/api/src/main/resources/static/js/940-legacy.90bc5a5b.js +++ /dev/null @@ -1,2 +0,0 @@ -"use strict";(self["webpackChunkdatabasir_frontend"]=self["webpackChunkdatabasir_frontend"]||[]).push([[940],{5430:function(e,t,a){a.d(t,{v:function(){return r}});var n=a(3872),o="/api/v1.0/operation_logs",r=function(e){return n.Z.get(o,{params:e})}},3940:function(e,t,a){a.r(t),a.d(t,{default:function(){return P}});var n=a(6252),o=a(3577),r={key:0},u=(0,n.Uk)("成功"),l={key:1},p=(0,n.Uk)("失败"),i={key:0},c={key:1};function g(e,t,a,g,s,d){var f=(0,n.up)("el-table-column"),m=(0,n.up)("el-option"),P=(0,n.up)("el-select"),h=(0,n.up)("el-tag"),j=(0,n.up)("el-table"),b=(0,n.up)("el-main"),L=(0,n.up)("el-pagination"),O=(0,n.up)("el-footer"),w=(0,n.up)("el-container");return(0,n.wg)(),(0,n.j4)(w,null,{default:(0,n.w5)((function(){return[(0,n.Wm)(b,null,{default:(0,n.w5)((function(){return[(0,n.Wm)(j,{data:s.projectOperationLogPageData.data},{default:(0,n.w5)((function(){return[(0,n.Wm)(f,{prop:"id",label:""}),(0,n.Wm)(f,{prop:"operationModule",label:"系统模块"}),(0,n.Wm)(f,{prop:"operatorNickname",label:"操作人"}),(0,n.Wm)(f,{prop:"operationName",label:"操作"}),(0,n.Wm)(f,{label:"状态"},{header:(0,n.w5)((function(){return[(0,n.Wm)(P,{modelValue:s.projectOperationLogPageQuery.isSuccess,"onUpdate:modelValue":t[0]||(t[0]=function(e){return s.projectOperationLogPageQuery.isSuccess=e}),placeholder:"状态",onChange:d.onQuery,clearable:"",size:"small","tag-type":"success"},{default:(0,n.w5)((function(){return[((0,n.wg)(),(0,n.iD)(n.HY,null,(0,n.Ko)([!0,!1],(function(e){return(0,n.Wm)(m,{key:e,label:e?"成功":"失败",value:e},null,8,["label","value"])})),64))]})),_:1},8,["modelValue","onChange"])]})),default:(0,n.w5)((function(e){return[e.row.isSuccess?((0,n.wg)(),(0,n.iD)("span",r,[(0,n.Wm)(h,{type:"success"},{default:(0,n.w5)((function(){return[u]})),_:1})])):((0,n.wg)(),(0,n.iD)("span",l,[(0,n.Wm)(h,{type:"danger"},{default:(0,n.w5)((function(){return[p]})),_:1})]))]})),_:1}),(0,n.Wm)(f,{label:"错误信息"},{default:(0,n.w5)((function(e){return[e.row.isSuccess?((0,n.wg)(),(0,n.iD)("span",i)):((0,n.wg)(),(0,n.iD)("span",c,(0,o.zw)(e.row.operationResponse.errMessage),1))]})),_:1}),(0,n.Wm)(f,{prop:"involvedGroupId",label:"涉及分组"}),(0,n.Wm)(f,{prop:"involvedProjectId",label:"涉及项目"}),(0,n.Wm)(f,{prop:"involvedUserId",label:"涉及用户"}),(0,n.Wm)(f,{prop:"createAt",label:"记录时间"})]})),_:1},8,["data"])]})),_:1}),(0,n.Wm)(O,null,{default:(0,n.w5)((function(){return[(0,n.Wm)(L,{layout:"prev, pager, next","hide-on-single-page":!1,currentPage:s.projectOperationLogPageData.number,"page-size":s.projectOperationLogPageData.size,"page-count":s.projectOperationLogPageData.totalPages,onCurrentChange:d.onProjectOperationLogCurrentPageChange},null,8,["currentPage","page-size","page-count","onCurrentChange"])]})),_:1})]})),_:1})}var s=a(5430),d={data:function(){return{projectOperationLogPageData:{data:[],number:1,size:10,totalElements:0,totalPages:1},projectOperationLogPageQuery:{page:0,size:10,isSuccess:null,involveProjectId:null,module:null}}},created:function(){this.fetchProjectOperationLogs()},methods:{fetchProjectOperationLogs:function(e){var t=this;this.projectOperationLogPageQuery.page=e?e-1:null,(0,s.v)(this.projectOperationLogPageQuery).then((function(e){e.errCode||(t.projectOperationLogPageData.data=e.data.content,t.projectOperationLogPageData.number=e.data.number+1,t.projectOperationLogPageData.size=e.data.size,t.projectOperationLogPageData.totalPages=e.data.totalPages,t.projectOperationLogPageData.totalElements=e.data.totalElements)}))},onProjectOperationLogCurrentPageChange:function(e){e&&e-1!=this.projectOperationLogPageQuery.page&&(this.projectOperationLogPageQuery.page=e-1,this.fetchProjectOperationLogs(e))},onQuery:function(){this.fetchProjectOperationLogs()}}},f=a(3744);const m=(0,f.Z)(d,[["render",g]]);var P=m}}]); -//# sourceMappingURL=940-legacy.90bc5a5b.js.map \ No newline at end of file diff --git a/api/src/main/resources/static/js/940-legacy.90bc5a5b.js.map b/api/src/main/resources/static/js/940-legacy.90bc5a5b.js.map deleted file mode 100644 index 4f0c61a..0000000 --- a/api/src/main/resources/static/js/940-legacy.90bc5a5b.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"js/940-legacy.90bc5a5b.js","mappings":"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","sources":["webpack://databasir-frontend/./src/api/OperationLog.js","webpack://databasir-frontend/./src/views/SysLog.vue","webpack://databasir-frontend/./src/views/SysLog.vue?436f"],"sourcesContent":["import axios from '@/utils/fetch';\r\n\r\nconst base = '/api/v1.0/operation_logs'\r\n\r\nexport const listOperationLogs = (pageQuery) => {\r\n return axios.get(base, {\r\n params: pageQuery\r\n })\r\n}\r\n","\r\n\r\n","import { render } from \"./SysLog.vue?vue&type=template&id=cacf9a26\"\nimport script from \"./SysLog.vue?vue&type=script&lang=js\"\nexport * from \"./SysLog.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"E:\\\\git_workspace\\\\databasir-frontend\\\\node_modules\\\\vue-loader\\\\dist\\\\exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__"],"names":["base","listOperationLogs","pageQuery","axios","params","_createBlock","_component_el_container","_createVNode","_component_el_main","_component_el_table","data","$data","_component_el_table_column","prop","label","header","_component_el_select","isSuccess","$event","placeholder","onChange","$options","clearable","size","_createElementBlock","_Fragment","_renderList","item","_component_el_option","key","value","scope","row","_hoisted_1","_component_el_tag","type","_hoisted_3","_hoisted_5","_hoisted_6","_toDisplayString","operationResponse","errMessage","_component_el_footer","_component_el_pagination","layout","currentPage","number","totalPages","onCurrentChange","projectOperationLogPageData","totalElements","projectOperationLogPageQuery","page","involveProjectId","module","created","this","fetchProjectOperationLogs","methods","then","resp","errCode","content","onProjectOperationLogCurrentPageChange","onQuery","__exports__","render"],"sourceRoot":""} \ No newline at end of file diff --git a/api/src/main/resources/static/js/940.0286114f.js b/api/src/main/resources/static/js/940.0286114f.js deleted file mode 100644 index c5cd1c6..0000000 --- a/api/src/main/resources/static/js/940.0286114f.js +++ /dev/null @@ -1,2 +0,0 @@ -"use strict";(self["webpackChunkdatabasir_frontend"]=self["webpackChunkdatabasir_frontend"]||[]).push([[940],{5430:function(e,a,t){t.d(a,{v:function(){return n}});var o=t(3872);const r="/api/v1.0/operation_logs",n=e=>o.Z.get(r,{params:e})},3940:function(e,a,t){t.r(a),t.d(a,{default:function(){return h}});var o=t(6252),r=t(3577);const n={key:0},l=(0,o.Uk)("成功"),p={key:1},u=(0,o.Uk)("失败"),i={key:0},g={key:1};function s(e,a,t,s,c,d){const m=(0,o.up)("el-table-column"),P=(0,o.up)("el-option"),h=(0,o.up)("el-select"),j=(0,o.up)("el-tag"),f=(0,o.up)("el-table"),b=(0,o.up)("el-main"),L=(0,o.up)("el-pagination"),O=(0,o.up)("el-footer"),w=(0,o.up)("el-container");return(0,o.wg)(),(0,o.j4)(w,null,{default:(0,o.w5)((()=>[(0,o.Wm)(b,null,{default:(0,o.w5)((()=>[(0,o.Wm)(f,{data:c.projectOperationLogPageData.data},{default:(0,o.w5)((()=>[(0,o.Wm)(m,{prop:"id",label:""}),(0,o.Wm)(m,{prop:"operationModule",label:"系统模块"}),(0,o.Wm)(m,{prop:"operatorNickname",label:"操作人"}),(0,o.Wm)(m,{prop:"operationName",label:"操作"}),(0,o.Wm)(m,{label:"状态"},{header:(0,o.w5)((()=>[(0,o.Wm)(h,{modelValue:c.projectOperationLogPageQuery.isSuccess,"onUpdate:modelValue":a[0]||(a[0]=e=>c.projectOperationLogPageQuery.isSuccess=e),placeholder:"状态",onChange:d.onQuery,clearable:"",size:"small","tag-type":"success"},{default:(0,o.w5)((()=>[((0,o.wg)(),(0,o.iD)(o.HY,null,(0,o.Ko)([!0,!1],(e=>(0,o.Wm)(P,{key:e,label:e?"成功":"失败",value:e},null,8,["label","value"]))),64))])),_:1},8,["modelValue","onChange"])])),default:(0,o.w5)((e=>[e.row.isSuccess?((0,o.wg)(),(0,o.iD)("span",n,[(0,o.Wm)(j,{type:"success"},{default:(0,o.w5)((()=>[l])),_:1})])):((0,o.wg)(),(0,o.iD)("span",p,[(0,o.Wm)(j,{type:"danger"},{default:(0,o.w5)((()=>[u])),_:1})]))])),_:1}),(0,o.Wm)(m,{label:"错误信息"},{default:(0,o.w5)((e=>[e.row.isSuccess?((0,o.wg)(),(0,o.iD)("span",i)):((0,o.wg)(),(0,o.iD)("span",g,(0,r.zw)(e.row.operationResponse.errMessage),1))])),_:1}),(0,o.Wm)(m,{prop:"involvedGroupId",label:"涉及分组"}),(0,o.Wm)(m,{prop:"involvedProjectId",label:"涉及项目"}),(0,o.Wm)(m,{prop:"involvedUserId",label:"涉及用户"}),(0,o.Wm)(m,{prop:"createAt",label:"记录时间"})])),_:1},8,["data"])])),_:1}),(0,o.Wm)(O,null,{default:(0,o.w5)((()=>[(0,o.Wm)(L,{layout:"prev, pager, next","hide-on-single-page":!1,currentPage:c.projectOperationLogPageData.number,"page-size":c.projectOperationLogPageData.size,"page-count":c.projectOperationLogPageData.totalPages,onCurrentChange:d.onProjectOperationLogCurrentPageChange},null,8,["currentPage","page-size","page-count","onCurrentChange"])])),_:1})])),_:1})}var c=t(5430),d={data(){return{projectOperationLogPageData:{data:[],number:1,size:10,totalElements:0,totalPages:1},projectOperationLogPageQuery:{page:0,size:10,isSuccess:null,involveProjectId:null,module:null}}},created(){this.fetchProjectOperationLogs()},methods:{fetchProjectOperationLogs(e){this.projectOperationLogPageQuery.page=e?e-1:null,(0,c.v)(this.projectOperationLogPageQuery).then((e=>{e.errCode||(this.projectOperationLogPageData.data=e.data.content,this.projectOperationLogPageData.number=e.data.number+1,this.projectOperationLogPageData.size=e.data.size,this.projectOperationLogPageData.totalPages=e.data.totalPages,this.projectOperationLogPageData.totalElements=e.data.totalElements)}))},onProjectOperationLogCurrentPageChange(e){e&&e-1!=this.projectOperationLogPageQuery.page&&(this.projectOperationLogPageQuery.page=e-1,this.fetchProjectOperationLogs(e))},onQuery(){this.fetchProjectOperationLogs()}}},m=t(3744);const P=(0,m.Z)(d,[["render",s]]);var h=P}}]); -//# sourceMappingURL=940.0286114f.js.map \ No newline at end of file diff --git a/api/src/main/resources/static/js/940.0286114f.js.map b/api/src/main/resources/static/js/940.0286114f.js.map deleted file mode 100644 index 769c136..0000000 --- a/api/src/main/resources/static/js/940.0286114f.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"js/940.0286114f.js","mappings":"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","sources":["webpack://databasir-frontend/./src/api/OperationLog.js","webpack://databasir-frontend/./src/views/SysLog.vue","webpack://databasir-frontend/./src/views/SysLog.vue?436f"],"sourcesContent":["import axios from '@/utils/fetch';\r\n\r\nconst base = '/api/v1.0/operation_logs'\r\n\r\nexport const listOperationLogs = (pageQuery) => {\r\n return axios.get(base, {\r\n params: pageQuery\r\n })\r\n}\r\n","\r\n\r\n","import { render } from \"./SysLog.vue?vue&type=template&id=cacf9a26\"\nimport script from \"./SysLog.vue?vue&type=script&lang=js\"\nexport * from \"./SysLog.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"E:\\\\git_workspace\\\\databasir-frontend\\\\node_modules\\\\vue-loader\\\\dist\\\\exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__"],"names":["base","listOperationLogs","pageQuery","axios","params","_createBlock","_component_el_container","_createVNode","_component_el_main","_component_el_table","data","$data","_component_el_table_column","prop","label","header","_component_el_select","isSuccess","$event","placeholder","onChange","$options","clearable","size","_createElementBlock","_Fragment","_renderList","item","_component_el_option","key","value","scope","row","_hoisted_1","_component_el_tag","type","_hoisted_3","_hoisted_5","_hoisted_6","_toDisplayString","operationResponse","errMessage","_component_el_footer","_component_el_pagination","layout","currentPage","number","totalPages","onCurrentChange","projectOperationLogPageData","totalElements","projectOperationLogPageQuery","page","involveProjectId","module","created","this","fetchProjectOperationLogs","methods","then","resp","errCode","content","onProjectOperationLogCurrentPageChange","onQuery","__exports__","render"],"sourceRoot":""} \ No newline at end of file diff --git a/api/src/main/resources/static/js/99-legacy.618121ce.js b/api/src/main/resources/static/js/99-legacy.618121ce.js new file mode 100644 index 0000000..283e0f5 --- /dev/null +++ b/api/src/main/resources/static/js/99-legacy.618121ce.js @@ -0,0 +1,2 @@ +"use strict";(self["webpackChunkdatabasir_frontend"]=self["webpackChunkdatabasir_frontend"]||[]).push([[99],{5430:function(e,t,a){a.d(t,{v:function(){return r}});var n=a(3872),o="/api/v1.0/operation_logs",r=function(e){return n.Z.get(o,{params:e})}},2099:function(e,t,a){a.r(t),a.d(t,{default:function(){return h}});a(8309);var n=a(6252),o=a(3577),r={key:0},u=(0,n.Uk)("成功"),l={key:1},i=(0,n.Uk)("失败"),p={key:0},c={key:1},g={key:1},s={key:1},d={key:1};function f(e,t,a,f,w,m){var P=(0,n.up)("el-table-column"),j=(0,n.up)("el-option"),h=(0,n.up)("el-select"),v=(0,n.up)("el-tag"),y=(0,n.up)("el-link"),b=(0,n.up)("el-table"),k=(0,n.up)("el-main"),L=(0,n.up)("el-pagination"),O=(0,n.up)("el-footer"),D=(0,n.up)("el-container");return(0,n.wg)(),(0,n.j4)(D,null,{default:(0,n.w5)((function(){return[(0,n.Wm)(k,null,{default:(0,n.w5)((function(){return[(0,n.Wm)(b,{data:w.projectOperationLogPageData.data},{default:(0,n.w5)((function(){return[(0,n.Wm)(P,{prop:"id",label:""}),(0,n.Wm)(P,{prop:"operationModule",label:"系统模块"}),(0,n.Wm)(P,{prop:"operatorNickname",label:"操作人"}),(0,n.Wm)(P,{prop:"operationName",label:"操作"}),(0,n.Wm)(P,{label:"状态"},{header:(0,n.w5)((function(){return[(0,n.Wm)(h,{modelValue:w.projectOperationLogPageQuery.isSuccess,"onUpdate:modelValue":t[0]||(t[0]=function(e){return w.projectOperationLogPageQuery.isSuccess=e}),placeholder:"状态",onChange:m.onQuery,clearable:"",size:"small","tag-type":"success"},{default:(0,n.w5)((function(){return[((0,n.wg)(),(0,n.iD)(n.HY,null,(0,n.Ko)([!0,!1],(function(e){return(0,n.Wm)(j,{key:e,label:e?"成功":"失败",value:e},null,8,["label","value"])})),64))]})),_:1},8,["modelValue","onChange"])]})),default:(0,n.w5)((function(e){return[e.row.isSuccess?((0,n.wg)(),(0,n.iD)("span",r,[(0,n.Wm)(v,{type:"success"},{default:(0,n.w5)((function(){return[u]})),_:1})])):((0,n.wg)(),(0,n.iD)("span",l,[(0,n.Wm)(v,{type:"danger"},{default:(0,n.w5)((function(){return[i]})),_:1})]))]})),_:1}),(0,n.Wm)(P,{label:"错误信息"},{default:(0,n.w5)((function(e){return[e.row.isSuccess?((0,n.wg)(),(0,n.iD)("span",p)):((0,n.wg)(),(0,n.iD)("span",c,(0,o.zw)(e.row.operationResponse.errMessage),1))]})),_:1}),(0,n.Wm)(P,{label:"涉及分组"},{default:(0,n.w5)((function(e){return[e.row.involvedGroup?((0,n.wg)(),(0,n.j4)(y,{key:0},{default:(0,n.w5)((function(){return[(0,n.Uk)((0,o.zw)(e.row.involvedGroup.name),1)]})),_:2},1024)):((0,n.wg)(),(0,n.iD)("span",g," - "))]})),_:1}),(0,n.Wm)(P,{label:"涉及项目"},{default:(0,n.w5)((function(e){return[e.row.involvedProject?((0,n.wg)(),(0,n.j4)(y,{key:0},{default:(0,n.w5)((function(){return[(0,n.Uk)((0,o.zw)(e.row.involvedProject.name),1)]})),_:2},1024)):((0,n.wg)(),(0,n.iD)("span",s," - "))]})),_:1}),(0,n.Wm)(P,{label:"涉及用户"},{default:(0,n.w5)((function(e){return[e.row.involvedUser?((0,n.wg)(),(0,n.j4)(y,{key:0},{default:(0,n.w5)((function(){return[(0,n.Uk)((0,o.zw)(e.row.involvedUser.nickname),1)]})),_:2},1024)):((0,n.wg)(),(0,n.iD)("span",d," - "))]})),_:1}),(0,n.Wm)(P,{prop:"createAt",label:"记录时间"})]})),_:1},8,["data"])]})),_:1}),(0,n.Wm)(O,null,{default:(0,n.w5)((function(){return[(0,n.Wm)(L,{layout:"prev, pager, next","hide-on-single-page":!1,currentPage:w.projectOperationLogPageData.number,"page-size":w.projectOperationLogPageData.size,"page-count":w.projectOperationLogPageData.totalPages,onCurrentChange:m.onProjectOperationLogCurrentPageChange},null,8,["currentPage","page-size","page-count","onCurrentChange"])]})),_:1})]})),_:1})}var w=a(5430),m={data:function(){return{projectOperationLogPageData:{data:[],number:1,size:10,totalElements:0,totalPages:1},projectOperationLogPageQuery:{page:0,size:10,isSuccess:null,involveProjectId:null,module:null}}},created:function(){this.fetchProjectOperationLogs()},methods:{fetchProjectOperationLogs:function(e){var t=this;this.projectOperationLogPageQuery.page=e?e-1:null,(0,w.v)(this.projectOperationLogPageQuery).then((function(e){e.errCode||(t.projectOperationLogPageData.data=e.data.content,t.projectOperationLogPageData.number=e.data.number+1,t.projectOperationLogPageData.size=e.data.size,t.projectOperationLogPageData.totalPages=e.data.totalPages,t.projectOperationLogPageData.totalElements=e.data.totalElements)}))},onProjectOperationLogCurrentPageChange:function(e){e&&e-1!=this.projectOperationLogPageQuery.page&&(this.projectOperationLogPageQuery.page=e-1,this.fetchProjectOperationLogs(e))},onQuery:function(){this.fetchProjectOperationLogs()}}},P=a(3744);const j=(0,P.Z)(m,[["render",f]]);var h=j}}]); +//# sourceMappingURL=99-legacy.618121ce.js.map \ No newline at end of file diff --git a/api/src/main/resources/static/js/99-legacy.618121ce.js.map b/api/src/main/resources/static/js/99-legacy.618121ce.js.map new file mode 100644 index 0000000..dd8cd9f --- /dev/null +++ b/api/src/main/resources/static/js/99-legacy.618121ce.js.map @@ -0,0 +1 @@ +{"version":3,"file":"js/99-legacy.618121ce.js","mappings":"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","sources":["webpack://databasir-frontend/./src/api/OperationLog.js","webpack://databasir-frontend/./src/views/SysLog.vue","webpack://databasir-frontend/./src/views/SysLog.vue?436f"],"sourcesContent":["import axios from '@/utils/fetch';\r\n\r\nconst base = '/api/v1.0/operation_logs'\r\n\r\nexport const listOperationLogs = (pageQuery) => {\r\n return axios.get(base, {\r\n params: pageQuery\r\n })\r\n}\r\n","\r\n\r\n","import { render } from \"./SysLog.vue?vue&type=template&id=1037a612\"\nimport script from \"./SysLog.vue?vue&type=script&lang=js\"\nexport * from \"./SysLog.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"E:\\\\git_workspace\\\\databasir-frontend\\\\node_modules\\\\vue-loader\\\\dist\\\\exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__"],"names":["base","listOperationLogs","pageQuery","axios","params","_createBlock","_component_el_container","_createVNode","_component_el_main","_component_el_table","data","$data","_component_el_table_column","prop","label","header","_component_el_select","isSuccess","$event","placeholder","onChange","$options","clearable","size","_createElementBlock","_Fragment","_renderList","item","_component_el_option","key","value","scope","row","_hoisted_1","_component_el_tag","type","_hoisted_3","_hoisted_5","_hoisted_6","_toDisplayString","operationResponse","errMessage","involvedGroup","_component_el_link","name","_hoisted_7","involvedProject","_hoisted_8","involvedUser","nickname","_hoisted_9","_component_el_footer","_component_el_pagination","layout","currentPage","number","totalPages","onCurrentChange","projectOperationLogPageData","totalElements","projectOperationLogPageQuery","page","involveProjectId","module","created","this","fetchProjectOperationLogs","methods","then","resp","errCode","content","onProjectOperationLogCurrentPageChange","onQuery","__exports__","render"],"sourceRoot":""} \ No newline at end of file diff --git a/api/src/main/resources/static/js/99.c134b829.js b/api/src/main/resources/static/js/99.c134b829.js new file mode 100644 index 0000000..43cf439 --- /dev/null +++ b/api/src/main/resources/static/js/99.c134b829.js @@ -0,0 +1,2 @@ +"use strict";(self["webpackChunkdatabasir_frontend"]=self["webpackChunkdatabasir_frontend"]||[]).push([[99],{5430:function(e,a,t){t.d(a,{v:function(){return n}});var o=t(3872);const r="/api/v1.0/operation_logs",n=e=>o.Z.get(r,{params:e})},2099:function(e,a,t){t.r(a),t.d(a,{default:function(){return j}});var o=t(6252),r=t(3577);const n={key:0},l=(0,o.Uk)("成功"),p={key:1},u=(0,o.Uk)("失败"),i={key:0},g={key:1},s={key:1},c={key:1},d={key:1};function w(e,a,t,w,m,P){const f=(0,o.up)("el-table-column"),h=(0,o.up)("el-option"),j=(0,o.up)("el-select"),v=(0,o.up)("el-tag"),y=(0,o.up)("el-link"),b=(0,o.up)("el-table"),k=(0,o.up)("el-main"),L=(0,o.up)("el-pagination"),O=(0,o.up)("el-footer"),D=(0,o.up)("el-container");return(0,o.wg)(),(0,o.j4)(D,null,{default:(0,o.w5)((()=>[(0,o.Wm)(k,null,{default:(0,o.w5)((()=>[(0,o.Wm)(b,{data:m.projectOperationLogPageData.data},{default:(0,o.w5)((()=>[(0,o.Wm)(f,{prop:"id",label:""}),(0,o.Wm)(f,{prop:"operationModule",label:"系统模块"}),(0,o.Wm)(f,{prop:"operatorNickname",label:"操作人"}),(0,o.Wm)(f,{prop:"operationName",label:"操作"}),(0,o.Wm)(f,{label:"状态"},{header:(0,o.w5)((()=>[(0,o.Wm)(j,{modelValue:m.projectOperationLogPageQuery.isSuccess,"onUpdate:modelValue":a[0]||(a[0]=e=>m.projectOperationLogPageQuery.isSuccess=e),placeholder:"状态",onChange:P.onQuery,clearable:"",size:"small","tag-type":"success"},{default:(0,o.w5)((()=>[((0,o.wg)(),(0,o.iD)(o.HY,null,(0,o.Ko)([!0,!1],(e=>(0,o.Wm)(h,{key:e,label:e?"成功":"失败",value:e},null,8,["label","value"]))),64))])),_:1},8,["modelValue","onChange"])])),default:(0,o.w5)((e=>[e.row.isSuccess?((0,o.wg)(),(0,o.iD)("span",n,[(0,o.Wm)(v,{type:"success"},{default:(0,o.w5)((()=>[l])),_:1})])):((0,o.wg)(),(0,o.iD)("span",p,[(0,o.Wm)(v,{type:"danger"},{default:(0,o.w5)((()=>[u])),_:1})]))])),_:1}),(0,o.Wm)(f,{label:"错误信息"},{default:(0,o.w5)((e=>[e.row.isSuccess?((0,o.wg)(),(0,o.iD)("span",i)):((0,o.wg)(),(0,o.iD)("span",g,(0,r.zw)(e.row.operationResponse.errMessage),1))])),_:1}),(0,o.Wm)(f,{label:"涉及分组"},{default:(0,o.w5)((e=>[e.row.involvedGroup?((0,o.wg)(),(0,o.j4)(y,{key:0},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.row.involvedGroup.name),1)])),_:2},1024)):((0,o.wg)(),(0,o.iD)("span",s," - "))])),_:1}),(0,o.Wm)(f,{label:"涉及项目"},{default:(0,o.w5)((e=>[e.row.involvedProject?((0,o.wg)(),(0,o.j4)(y,{key:0},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.row.involvedProject.name),1)])),_:2},1024)):((0,o.wg)(),(0,o.iD)("span",c," - "))])),_:1}),(0,o.Wm)(f,{label:"涉及用户"},{default:(0,o.w5)((e=>[e.row.involvedUser?((0,o.wg)(),(0,o.j4)(y,{key:0},{default:(0,o.w5)((()=>[(0,o.Uk)((0,r.zw)(e.row.involvedUser.nickname),1)])),_:2},1024)):((0,o.wg)(),(0,o.iD)("span",d," - "))])),_:1}),(0,o.Wm)(f,{prop:"createAt",label:"记录时间"})])),_:1},8,["data"])])),_:1}),(0,o.Wm)(O,null,{default:(0,o.w5)((()=>[(0,o.Wm)(L,{layout:"prev, pager, next","hide-on-single-page":!1,currentPage:m.projectOperationLogPageData.number,"page-size":m.projectOperationLogPageData.size,"page-count":m.projectOperationLogPageData.totalPages,onCurrentChange:P.onProjectOperationLogCurrentPageChange},null,8,["currentPage","page-size","page-count","onCurrentChange"])])),_:1})])),_:1})}var m=t(5430),P={data(){return{projectOperationLogPageData:{data:[],number:1,size:10,totalElements:0,totalPages:1},projectOperationLogPageQuery:{page:0,size:10,isSuccess:null,involveProjectId:null,module:null}}},created(){this.fetchProjectOperationLogs()},methods:{fetchProjectOperationLogs(e){this.projectOperationLogPageQuery.page=e?e-1:null,(0,m.v)(this.projectOperationLogPageQuery).then((e=>{e.errCode||(this.projectOperationLogPageData.data=e.data.content,this.projectOperationLogPageData.number=e.data.number+1,this.projectOperationLogPageData.size=e.data.size,this.projectOperationLogPageData.totalPages=e.data.totalPages,this.projectOperationLogPageData.totalElements=e.data.totalElements)}))},onProjectOperationLogCurrentPageChange(e){e&&e-1!=this.projectOperationLogPageQuery.page&&(this.projectOperationLogPageQuery.page=e-1,this.fetchProjectOperationLogs(e))},onQuery(){this.fetchProjectOperationLogs()}}},f=t(3744);const h=(0,f.Z)(P,[["render",w]]);var j=h}}]); +//# sourceMappingURL=99.c134b829.js.map \ No newline at end of file diff --git a/api/src/main/resources/static/js/99.c134b829.js.map b/api/src/main/resources/static/js/99.c134b829.js.map new file mode 100644 index 0000000..1124cef --- /dev/null +++ b/api/src/main/resources/static/js/99.c134b829.js.map @@ -0,0 +1 @@ +{"version":3,"file":"js/99.c134b829.js","mappings":"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","sources":["webpack://databasir-frontend/./src/api/OperationLog.js","webpack://databasir-frontend/./src/views/SysLog.vue","webpack://databasir-frontend/./src/views/SysLog.vue?436f"],"sourcesContent":["import axios from '@/utils/fetch';\r\n\r\nconst base = '/api/v1.0/operation_logs'\r\n\r\nexport const listOperationLogs = (pageQuery) => {\r\n return axios.get(base, {\r\n params: pageQuery\r\n })\r\n}\r\n","\r\n\r\n","import { render } from \"./SysLog.vue?vue&type=template&id=1037a612\"\nimport script from \"./SysLog.vue?vue&type=script&lang=js\"\nexport * from \"./SysLog.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"E:\\\\git_workspace\\\\databasir-frontend\\\\node_modules\\\\vue-loader\\\\dist\\\\exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__"],"names":["base","listOperationLogs","pageQuery","axios","params","_createBlock","_component_el_container","_createVNode","_component_el_main","_component_el_table","data","$data","_component_el_table_column","prop","label","header","_component_el_select","isSuccess","$event","placeholder","onChange","$options","clearable","size","_createElementBlock","_Fragment","_renderList","item","_component_el_option","key","value","scope","row","_hoisted_1","_component_el_tag","type","_hoisted_3","_hoisted_5","_hoisted_6","_toDisplayString","operationResponse","errMessage","involvedGroup","_component_el_link","name","_hoisted_7","involvedProject","_hoisted_8","involvedUser","nickname","_hoisted_9","_component_el_footer","_component_el_pagination","layout","currentPage","number","totalPages","onCurrentChange","projectOperationLogPageData","totalElements","projectOperationLogPageQuery","page","involveProjectId","module","created","this","fetchProjectOperationLogs","methods","then","resp","errCode","content","onProjectOperationLogCurrentPageChange","onQuery","__exports__","render"],"sourceRoot":""} \ No newline at end of file diff --git a/api/src/main/resources/static/js/app-legacy.e577c571.js b/api/src/main/resources/static/js/app-legacy.30c52ca0.js similarity index 56% rename from api/src/main/resources/static/js/app-legacy.e577c571.js rename to api/src/main/resources/static/js/app-legacy.30c52ca0.js index 91b1372..ec813c1 100644 --- a/api/src/main/resources/static/js/app-legacy.e577c571.js +++ b/api/src/main/resources/static/js/app-legacy.30c52ca0.js @@ -1,2 +1,2 @@ -(function(){"use strict";var e={3710:function(e,n,t){t(6992),t(8674),t(9601),t(7727),t(1539),t(4747),t(7941);var r=t(9963),o=t(2610),u=t(695),a=(t(4415),t(5954)),i=t(4239),c=t(6252);function s(e,n){var t=(0,c.up)("router-view");return(0,c.wg)(),(0,c.j4)(t)}var l=t(3744);const d={},f=(0,l.Z)(d,[["render",s]]);var m=f,p=t(1836),h=t(3577),g=["src"],v=["src"];function w(e,n,r,o,u,a){var i=(0,c.up)("el-tooltip");return"mysql"==r.databaseType.toLowerCase()?((0,c.wg)(),(0,c.j4)(i,{key:0,content:r.databaseType,placement:"left"},{default:(0,c.w5)((function(){return[(0,c._)("img",{src:t(2357),style:{"max-width":"33px","max-height":"33px"}},null,8,g)]})),_:1},8,["content"])):"postgresql"==r.databaseType.toLowerCase()?((0,c.wg)(),(0,c.j4)(i,{key:1,content:r.databaseType,placement:"left"},{default:(0,c.w5)((function(){return[(0,c._)("img",{src:t(3609),style:{"max-width":"33px","max-height":"33px"}},null,8,v)]})),_:1},8,["content"])):((0,c.wg)(),(0,c.iD)(c.HY,{key:2},[(0,c.Uk)((0,h.zw)(r.databaseType),1)],64))}var b={props:{databaseType:String}};const y=(0,l.Z)(b,[["render",w]]);var k=y,_=(0,r.ri)(m);Object.keys(u).forEach((function(e){_.component(e,u[e])})),_.component("database-icon",k),_.directive("require-roles",{mounted:function(e,n){var t=n.value;p.E.hasAnyRoles(t)||e.parentNode&&e.parentNode.removeChild(e)}}),_.directive("select-more",{updated:function(e,n){var t=e.querySelector(".select-trigger"),r=t.getAttribute("aria-describedby"),o=document.getElementById(r),u=o.querySelector(".el-scrollbar .el-select-dropdown__wrap");u.addEventListener("scroll",(function(){var e=this.scrollHeight-this.scrollTop-1<=this.clientHeight;e&&n.value()}))}}),_.use(i.Z),_.use(o.Z),_.use(a.Z),_.mount("#app")},5954:function(e,n,t){t.d(n,{Z:function(){return $}});t(1539),t(8783),t(3948);var r=t(2119),o=t(6252);function u(e,n,t,r,u,a){var i=(0,o.up)("AppNav"),c=(0,o.up)("el-aside"),s=(0,o.up)("Breadcrumb"),l=(0,o.up)("Avatar"),d=(0,o.up)("el-header"),f=(0,o.up)("router-view"),m=(0,o.up)("el-main"),p=(0,o.up)("el-container");return(0,o.wg)(),(0,o.j4)(p,{class:"databasir"},{default:(0,o.w5)((function(){return[(0,o.Wm)(c,null,{default:(0,o.w5)((function(){return[(0,o.Wm)(i,{class:"databasir-nav"})]})),_:1}),(0,o.Wm)(d,{class:"databasir-main-header"},{default:(0,o.w5)((function(){return[(0,o.Wm)(s),(0,o.Wm)(l)]})),_:1}),(0,o.Wm)(m,{class:"databasir-main"},{default:(0,o.w5)((function(){return[(0,o.Wm)(p,null,{default:(0,o.w5)((function(){return[(0,o.Wm)(m,{class:"databasir-main-content"},{default:(0,o.w5)((function(){return[(0,o.Wm)(f)]})),_:1})]})),_:1})]})),_:1})]})),_:1})}var a=t(3577),i=(0,o._)("span",null,"Databasir",-1);function c(e,n,t,r,u,c){var s=(0,o.up)("home-filled"),l=(0,o.up)("el-icon"),d=(0,o.up)("el-menu-item"),f=(0,o.up)("el-sub-menu"),m=(0,o.up)("el-menu");return(0,o.wg)(),(0,o.j4)(m,{router:"",collapse:r.isCollapse,mode:"vertical",class:"left-menu"},{default:(0,o.w5)((function(){return[(0,o.Wm)(d,{index:"/"},{title:(0,o.w5)((function(){return[i]})),default:(0,o.w5)((function(){return[(0,o.Wm)(l,null,{default:(0,o.w5)((function(){return[(0,o.Wm)(s)]})),_:1})]})),_:1}),((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(r.routes,(function(e,n){return(0,o.wg)(),(0,o.iD)(o.HY,{key:n},[r.isShowMenu(e)&&e.children.length>0&&e.children.some((function(e){return!e.hidden}))?((0,o.wg)(),(0,o.j4)(f,{key:0,index:e.path},{title:(0,o.w5)((function(){return[(0,o.Wm)(l,null,{default:(0,o.w5)((function(){return[((0,o.wg)(),(0,o.j4)((0,o.LL)(e.icon)))]})),_:2},1024),(0,o._)("span",null,(0,a.zw)(e.meta.nav),1)]})),default:(0,o.w5)((function(){return[((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(e.children,(function(t,r){return(0,o.wg)(),(0,o.iD)(o.HY,{key:n+"-"+r},[t.hidden?(0,o.kq)("",!0):((0,o.wg)(),(0,o.j4)(d,{key:0,index:e.path+"/"+t.path},{title:(0,o.w5)((function(){return[(0,o._)("span",null,(0,a.zw)(t.meta.nav),1)]})),default:(0,o.w5)((function(){return[t.icon?((0,o.wg)(),(0,o.j4)(l,{key:0},{default:(0,o.w5)((function(){return[((0,o.wg)(),(0,o.j4)((0,o.LL)(t.icon)))]})),_:2},1024)):(0,o.kq)("",!0)]})),_:2},1032,["index"]))],64)})),128))]})),_:2},1032,["index"])):r.isShowMenu(e)?((0,o.wg)(),(0,o.j4)(d,{key:1,index:e.path},{title:(0,o.w5)((function(){return[(0,o._)("span",null,(0,a.zw)(e.meta.nav),1)]})),default:(0,o.w5)((function(){return[(0,o.Wm)(l,null,{default:(0,o.w5)((function(){return[((0,o.wg)(),(0,o.j4)((0,o.LL)(e.icon)))]})),_:2},1024)]})),_:2},1032,["index"])):(0,o.kq)("",!0)],64)})),128))]})),_:1},8,["collapse"])}var s=t(2262),l=t(1836),d=t(4239),f={setup:function(){var e=(0,s.Fl)((function(){return d.Z.state.menu.isCollapse})),n=(0,r.tv)(),t=n.options.routes,o=function(e){if(e.hidden)return!1;if(e.meta.requireAnyRoles&&e.meta.requireAnyRoles.length>0){var n=l.E.hasAnyRoles(e.meta.requireAnyRoles);if(!n)return!1}return!0},u=function(){d.Z.commit("expandMenu")};return{isCollapse:e,isShowMenu:o,expandMenu:u,routes:t}}},m=t(3744);const p=(0,m.Z)(f,[["render",c]]);var h=p;t(8309);function g(e,n,t,r,u,i){var c=(0,o.up)("fold"),s=(0,o.up)("el-icon"),l=(0,o.up)("el-link"),d=(0,o.up)("el-breadcrumb-item"),f=(0,o.up)("el-breadcrumb");return(0,o.wg)(),(0,o.j4)(f,{separator:"/"},{default:(0,o.w5)((function(){return[i.menuIsCollapse?(0,o.kq)("",!0):((0,o.wg)(),(0,o.j4)(d,{key:0},{default:(0,o.w5)((function(){return[(0,o.Wm)(l,{onClick:n[0]||(n[0]=function(e){return i.onFoldMenu()}),underline:!1},{default:(0,o.w5)((function(){return[(0,o.Wm)(s,null,{default:(0,o.w5)((function(){return[(0,o.Wm)(c)]})),_:1})]})),_:1})]})),_:1})),((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(i.breadcrumbs,(function(e,n){return(0,o.wg)(),(0,o.j4)(d,{key:n,to:e.to},{default:(0,o.w5)((function(){return[(0,o.Uk)((0,a.zw)(e.name),1)]})),_:2},1032,["to"])})),128))]})),_:1})}var v={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 w=(0,m.Z)(v,[["render",g]]);var b=w,y=(0,o.Uk)("个人中心"),k=(0,o.Uk)("注销登陆");function _(e,n,t,r,u,i){var c=(0,o.up)("el-avatar"),s=(0,o.up)("el-dropdown-item"),l=(0,o.up)("el-dropdown-menu"),d=(0,o.up)("el-dropdown");return(0,o.wg)(),(0,o.j4)(d,null,{dropdown:(0,o.w5)((function(){return[(0,o.Wm)(l,null,{default:(0,o.w5)((function(){return[(0,o.Wm)(s,null,{default:(0,o.w5)((function(){return[(0,o.Uk)((0,a.zw)(i.userNickname),1)]})),_:1}),(0,o.Wm)(s,{icon:"user",divided:"",onClick:n[0]||(n[0]=function(e){return i.toProfilePage()})},{default:(0,o.w5)((function(){return[y]})),_:1}),(0,o.Wm)(s,{icon:"back",onClick:n[1]||(n[1]=function(e){return i.onLogout()})},{default:(0,o.w5)((function(){return[k]})),_:1})]})),_:1})]})),default:(0,o.w5)((function(){return[(0,o.Wm)(c,{size:36,src:i.avatarUrl,icon:"avatar"},null,8,["src"])]})),_:1})}var j={computed:{userNickname:function(){return this.$store.state.user.nickname},avatarUrl:function(){return this.$store.state.user.avatar}},methods:{onLogout:function(){l.E.removeUserLoginData(),this.$router.push({path:"/login"})},toProfilePage:function(){this.$router.push({path:"/profile"})}}};const S=(0,m.Z)(j,[["render",_]]);var A=S,L={components:{AppNav:h,Breadcrumb:b,Avatar:A}};const T=(0,m.Z)(L,[["render",u]]);var N=T;function q(){return{name:"首页",to:{path:"/"}}}function E(){return{name:"项目中心",to:{name:"groupListPage"}}}function x(e){var n="项目组";return e.query.groupName&&(n=e.query.groupName),{name:n,to:{path:"/groups/"+e.params.groupId}}}function C(e){var n="项目文档";e.query.projectName&&(n=e.query.projectName);var t=e.params.projectId,r=e.params.groupId;return{name:n,to:{path:"/groups/"+r+"/projects/"+t+"/documents",query:{projectName:n}}}}function P(){return{name:"用户列表",to:{path:"/users"}}}function I(){return{name:"个人中心",to:{path:"/profile"}}}function O(){return{name:"邮箱设置",to:{path:"/settings/sysEmail"}}}function W(){return{name:"操作日志",to:{path:"/settings/sysLog"}}}function D(){return{name:"登录设置",to:{path:"/settings/sysOauth2"}}}var M={index:function(){return[q()]},groupList:function(){return[q(),E()]},groupDashboard:function(e,n){return[q(),E(),x(e,n)]},groupProjectDocument:function(e,n){return[q(),E(),x(e,n),C(e)]},userProfile:function(){return[q(),I()]},userList:function(){return[q(),P()]},sysEmailEdit:function(){return[q(),O()]},sysLog:function(){return[q(),W()]},sysOauth2:function(){return[q(),D()]}},U=M,Z=[{path:"/login",component:function(){return Promise.all([t.e(269),t.e(139)]).then(t.bind(t,1139))},hidden:!0,meta:{requireAuth:!1}},{path:"/login/oauth2/:id",component:function(){return Promise.all([t.e(269),t.e(865)]).then(t.bind(t,8865))},hidden:!0,props:!0,meta:{requireAuth:!1}},{path:"/",hidden:!0,component:N,children:[{path:"",hidden:!0,component:function(){return Promise.all([t.e(269),t.e(924),t.e(352)]).then(t.bind(t,2352))},meta:{breadcrumb:U.groupList}}]},{path:"/groups",icon:"Collection",component:N,meta:{nav:"项目中心"},children:[{path:"",name:"groupListPage",hidden:!0,component:function(){return Promise.all([t.e(269),t.e(924),t.e(352)]).then(t.bind(t,2352))},meta:{breadcrumb:U.groupList}},{path:":groupId",hidden:!0,component:function(){return Promise.all([t.e(269),t.e(924),t.e(713)]).then(t.bind(t,2713))},meta:{breadcrumb:U.groupDashboard}},{path:":groupId/projects/:projectId/documents",hidden:!0,component:function(){return Promise.all([t.e(269),t.e(33)]).then(t.bind(t,3033))},meta:{breadcrumb:U.groupProjectDocument}}]},{path:"/users",icon:"List",component:N,meta:{nav:"用户中心",requireAnyRoles:["SYS_OWNER"]},children:[{path:"",hidden:!0,component:function(){return Promise.all([t.e(269),t.e(719)]).then(t.bind(t,9719))},meta:{breadcrumb:U.userList}}]},{path:"/profile",icon:"User",component:N,meta:{nav:"个人中心",breadcrumb:U.userProfile},children:[{path:"",hidden:!0,component:function(){return Promise.all([t.e(269),t.e(469)]).then(t.bind(t,6469))}}]},{path:"/settings",icon:"Setting",component:N,meta:{nav:"系统中心",requireAnyRoles:["SYS_OWNER"]},children:[{path:"sysEmail",icon:"Notification",component:function(){return Promise.all([t.e(269),t.e(596)]).then(t.bind(t,7596))},meta:{nav:"邮箱设置",breadcrumb:U.sysEmailEdit}},{path:"sysLog",icon:"Document",component:function(){return Promise.all([t.e(269),t.e(940)]).then(t.bind(t,3940))},meta:{nav:"操作日志",breadcrumb:U.sysLog}},{path:"sysOauth2",icon:"Connection",component:function(){return Promise.all([t.e(269),t.e(754)]).then(t.bind(t,7754))},meta:{nav:"登陆设置",breadcrumb:U.sysOauth2}},{path:"sysKey",icon:"Key",hidden:"true",component:N,meta:{nav:"系统秘钥",breadcrumb:U.sysKeyEdit}}]}],R=(0,r.p7)({history:(0,r.PO)(),routes:Z});R.beforeEach((function(e,n,t){0==e.meta.requireAuth?"/login"==e.path&&l.r.hasAccessToken()?t(n):t():l.r.hasAccessToken()?t():t({path:"/login"})})),R.beforeEach((function(e,n,t){!e.query.groupName&&n.query.groupName&&(e.query.groupName=n.query.groupName),!e.query.projectName&&n.query.projectName&&(e.query.projectName=n.query.projectName),t()}));var $=R},4239:function(e,n,t){var r=t(8637),o=t(1836),u=(0,r.MT)({state:function(){var e={user:{nickname:null,usernmae:null,email:null,avatar:null},groupListActiveTab:null,menu:{isCollapse:!0}},n=o.E.loadUserLoginData();return n&&(e.user.nickname=n.nickname,e.user.usernmae=n.usernmae,e.user.email=n.email,e.user.avatar=n.avatar),e},mutations:{userUpdate:function(e,n){n.nickname&&(e.user.nickname=n.nickname),n.usernmae&&(e.user.usernmae=n.usernmae),n.email&&(e.user.email=n.email),n.avatar&&(e.user.avatar=n.avatar)},foldMenu:function(e){e.menu.isCollapse=!0},expandMenu:function(e){e.menu.isCollapse=!1},switchGroupListActiveTab:function(e,n){n&&(e.groupListActiveTab=n)}}});n["Z"]=u},1836:function(e,n,t){t.d(n,{r:function(){return a},E:function(){return i}});t(8862),t(1539),t(1249);var r="accessToken",o="accessTokenExpireAt",u="userLoginData",a={hasAccessToken:function(){var e=this.loadAccessToken();return e},hasValidAccessToken:function(){var e=this.loadAccessToken(),n=window.localStorage.getItem(o);return e&&n?n>(new Date).getTime():(console.log("warn: not found accessToken and expireAt key"),!1)},saveAccessToken:function(e,n){window.localStorage.setItem(r,e),window.localStorage.setItem(o,n)},loadAccessToken:function(){var e=window.localStorage.getItem(r);return e||null}},i={saveUserLoginData:function(e){window.localStorage.setItem(r,e.accessToken),window.localStorage.setItem(o,e.accessTokenExpireAt),window.localStorage.setItem(u,JSON.stringify(e))},removeUserLoginData:function(){window.localStorage.removeItem(u),window.localStorage.removeItem(r),window.localStorage.removeItem(o)},loadUserLoginData:function(){if(!window.localStorage.getItem(u))return null;var e=window.localStorage.getItem(u);return JSON.parse(e)},hasAnyRoles:function(e){var n=window.localStorage.getItem(u);if(null==n)return!1;var t=JSON.parse(n);return t.roles.map((function(e){return e.groupId?e.role+"?groupId="+e.groupId:e.role})).some((function(n){return e.some((function(e){return e==n}))}))},getRefreshToken:function(){var e=window.localStorage.getItem(u);if(null==e)return null;var n=JSON.parse(e);return n.refreshToken}}},2357:function(e,n,t){e.exports=t.p+"img/MySQL.c8f47618.svg"},3609:function(e,n,t){e.exports=t.p+"img/PostgreSQL.6e3d3a5e.svg"}},n={};function t(r){var o=n[r];if(void 0!==o)return o.exports;var u=n[r]={id:r,loaded:!1,exports:{}};return e[r].call(u.exports,u,u.exports,t),u.loaded=!0,u.exports}t.m=e,function(){var e=[];t.O=function(n,r,o,u){if(!r){var a=1/0;for(l=0;l=u)&&Object.keys(t.O).every((function(e){return t.O[e](r[c])}))?r.splice(c--,1):(i=!1,u0&&e[l-1][2]>u;l--)e[l]=e[l-1];e[l]=[r,o,u]}}(),function(){t.n=function(e){var n=e&&e.__esModule?function(){return e["default"]}:function(){return e};return t.d(n,{a:n}),n}}(),function(){t.d=function(e,n){for(var r in n)t.o(n,r)&&!t.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:n[r]})}}(),function(){t.f={},t.e=function(e){return Promise.all(Object.keys(t.f).reduce((function(n,r){return t.f[r](e,n),n}),[]))}}(),function(){t.u=function(e){return"js/"+e+"-legacy."+{33:"7e612922",139:"a43600d3",269:"85927c51",352:"82ca5000",469:"3e02203b",596:"3a4a4c9d",713:"468a031c",719:"85eb5e28",754:"2b22ae65",865:"fc2fd7b3",924:"804cf0e0",940:"90bc5a5b"}[e]+".js"}}(),function(){t.miniCssF=function(e){return"css/"+e+"."+{33:"1dda4c12",139:"a7dec339",352:"356dcf0b",713:"82a2f213",865:"7df1e56e"}[e]+".css"}}(),function(){t.g=function(){if("object"===typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"===typeof window)return window}}()}(),function(){t.o=function(e,n){return Object.prototype.hasOwnProperty.call(e,n)}}(),function(){var e={},n="databasir-frontend:";t.l=function(r,o,u,a){if(e[r])e[r].push(o);else{var i,c;if(void 0!==u)for(var s=document.getElementsByTagName("script"),l=0;l0&&e.children.some((function(e){return!e.hidden}))?((0,o.wg)(),(0,o.j4)(f,{key:0,index:e.path},{title:(0,o.w5)((function(){return[(0,o.Wm)(l,null,{default:(0,o.w5)((function(){return[((0,o.wg)(),(0,o.j4)((0,o.LL)(e.icon)))]})),_:2},1024),(0,o._)("span",null,(0,a.zw)(e.meta.nav),1)]})),default:(0,o.w5)((function(){return[((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(e.children,(function(t,r){return(0,o.wg)(),(0,o.iD)(o.HY,{key:n+"-"+r},[t.hidden?(0,o.kq)("",!0):((0,o.wg)(),(0,o.j4)(d,{key:0,index:e.path+"/"+t.path},{title:(0,o.w5)((function(){return[(0,o._)("span",null,(0,a.zw)(t.meta.nav),1)]})),default:(0,o.w5)((function(){return[t.icon?((0,o.wg)(),(0,o.j4)(l,{key:0},{default:(0,o.w5)((function(){return[((0,o.wg)(),(0,o.j4)((0,o.LL)(t.icon)))]})),_:2},1024)):(0,o.kq)("",!0)]})),_:2},1032,["index"]))],64)})),128))]})),_:2},1032,["index"])):r.isShowMenu(e)?((0,o.wg)(),(0,o.j4)(d,{key:1,index:e.path},{title:(0,o.w5)((function(){return[(0,o._)("span",null,(0,a.zw)(e.meta.nav),1)]})),default:(0,o.w5)((function(){return[(0,o.Wm)(l,null,{default:(0,o.w5)((function(){return[((0,o.wg)(),(0,o.j4)((0,o.LL)(e.icon)))]})),_:2},1024)]})),_:2},1032,["index"])):(0,o.kq)("",!0)],64)})),128))]})),_:1},8,["collapse"])}var s=t(2262),l=t(1836),d=t(4239),f={setup:function(){var e=(0,s.Fl)((function(){return d.Z.state.menu.isCollapse})),n=(0,r.tv)(),t=n.options.routes,o=function(e){if(e.hidden)return!1;if(e.meta.requireAnyRoles&&e.meta.requireAnyRoles.length>0){var n=l.E.hasAnyRoles(e.meta.requireAnyRoles);if(!n)return!1}return!0},u=function(){d.Z.commit("expandMenu")};return{isCollapse:e,isShowMenu:o,expandMenu:u,routes:t}}},m=t(3744);const p=(0,m.Z)(f,[["render",c]]);var h=p;t(8309);function g(e,n,t,r,u,i){var c=(0,o.up)("fold"),s=(0,o.up)("el-icon"),l=(0,o.up)("el-link"),d=(0,o.up)("el-breadcrumb-item"),f=(0,o.up)("el-breadcrumb");return(0,o.wg)(),(0,o.j4)(f,{separator:"/"},{default:(0,o.w5)((function(){return[i.menuIsCollapse?(0,o.kq)("",!0):((0,o.wg)(),(0,o.j4)(d,{key:0},{default:(0,o.w5)((function(){return[(0,o.Wm)(l,{onClick:n[0]||(n[0]=function(e){return i.onFoldMenu()}),underline:!1},{default:(0,o.w5)((function(){return[(0,o.Wm)(s,null,{default:(0,o.w5)((function(){return[(0,o.Wm)(c)]})),_:1})]})),_:1})]})),_:1})),((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(i.breadcrumbs,(function(e,n){return(0,o.wg)(),(0,o.j4)(d,{key:n,to:e.to},{default:(0,o.w5)((function(){return[(0,o.Uk)((0,a.zw)(e.name),1)]})),_:2},1032,["to"])})),128))]})),_:1})}var v={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 w=(0,m.Z)(v,[["render",g]]);var b=w,y=(0,o.Uk)("个人中心"),k=(0,o.Uk)("注销登陆");function _(e,n,t,r,u,i){var c=(0,o.up)("el-avatar"),s=(0,o.up)("el-dropdown-item"),l=(0,o.up)("el-dropdown-menu"),d=(0,o.up)("el-dropdown");return(0,o.wg)(),(0,o.j4)(d,null,{dropdown:(0,o.w5)((function(){return[(0,o.Wm)(l,null,{default:(0,o.w5)((function(){return[(0,o.Wm)(s,null,{default:(0,o.w5)((function(){return[(0,o.Uk)((0,a.zw)(i.userNickname),1)]})),_:1}),(0,o.Wm)(s,{icon:"user",divided:"",onClick:n[0]||(n[0]=function(e){return i.toProfilePage()})},{default:(0,o.w5)((function(){return[y]})),_:1}),(0,o.Wm)(s,{icon:"back",onClick:n[1]||(n[1]=function(e){return i.onLogout()})},{default:(0,o.w5)((function(){return[k]})),_:1})]})),_:1})]})),default:(0,o.w5)((function(){return[(0,o.Wm)(c,{size:36,src:i.avatarUrl,icon:"avatar"},null,8,["src"])]})),_:1})}var j={computed:{userNickname:function(){return this.$store.state.user.nickname},avatarUrl:function(){return this.$store.state.user.avatar}},methods:{onLogout:function(){l.E.removeUserLoginData(),this.$router.push({path:"/login"})},toProfilePage:function(){this.$router.push({path:"/profile"})}}};const S=(0,m.Z)(j,[["render",_]]);var A=S,L={components:{AppNav:h,Breadcrumb:b,Avatar:A}};const T=(0,m.Z)(L,[["render",u]]);var N=T;function q(){return{name:"首页",to:{path:"/"}}}function E(){return{name:"项目中心",to:{name:"groupListPage"}}}function x(e){var n="项目组";return e.query.groupName&&(n=e.query.groupName),{name:n,to:{path:"/groups/"+e.params.groupId}}}function C(e){var n="项目文档";e.query.projectName&&(n=e.query.projectName);var t=e.params.projectId,r=e.params.groupId;return{name:n,to:{path:"/groups/"+r+"/projects/"+t+"/documents",query:{projectName:n}}}}function P(){return{name:"用户列表",to:{path:"/users"}}}function I(){return{name:"个人中心",to:{path:"/profile"}}}function O(){return{name:"邮箱设置",to:{path:"/settings/sysEmail"}}}function W(){return{name:"操作日志",to:{path:"/settings/sysLog"}}}function D(){return{name:"登录设置",to:{path:"/settings/sysOauth2"}}}var M={index:function(){return[q()]},groupList:function(){return[q(),E()]},groupDashboard:function(e,n){return[q(),E(),x(e,n)]},groupProjectDocument:function(e,n){return[q(),E(),x(e,n),C(e)]},userProfile:function(){return[q(),I()]},userList:function(){return[q(),P()]},sysEmailEdit:function(){return[q(),O()]},sysLog:function(){return[q(),W()]},sysOauth2:function(){return[q(),D()]}},U=M,Z=[{path:"/login",component:function(){return Promise.all([t.e(269),t.e(139)]).then(t.bind(t,1139))},hidden:!0,meta:{requireAuth:!1}},{path:"/login/oauth2/:id",component:function(){return Promise.all([t.e(269),t.e(865)]).then(t.bind(t,8865))},hidden:!0,props:!0,meta:{requireAuth:!1}},{path:"/",hidden:!0,component:N,children:[{path:"",hidden:!0,component:function(){return Promise.all([t.e(269),t.e(924),t.e(352)]).then(t.bind(t,2352))},meta:{breadcrumb:U.groupList}}]},{path:"/groups",icon:"Collection",component:N,meta:{nav:"项目中心"},children:[{path:"",name:"groupListPage",hidden:!0,component:function(){return Promise.all([t.e(269),t.e(924),t.e(352)]).then(t.bind(t,2352))},meta:{breadcrumb:U.groupList}},{path:":groupId",hidden:!0,component:function(){return Promise.all([t.e(269),t.e(924),t.e(713)]).then(t.bind(t,2713))},meta:{breadcrumb:U.groupDashboard}},{path:":groupId/projects/:projectId/documents",hidden:!0,component:function(){return Promise.all([t.e(269),t.e(33)]).then(t.bind(t,3033))},meta:{breadcrumb:U.groupProjectDocument}}]},{path:"/users",icon:"List",component:N,meta:{nav:"用户中心",requireAnyRoles:["SYS_OWNER"]},children:[{path:"",hidden:!0,component:function(){return Promise.all([t.e(269),t.e(719)]).then(t.bind(t,9719))},meta:{breadcrumb:U.userList}}]},{path:"/profile",icon:"User",component:N,meta:{nav:"个人中心",breadcrumb:U.userProfile},children:[{path:"",hidden:!0,component:function(){return Promise.all([t.e(269),t.e(469)]).then(t.bind(t,6469))}}]},{path:"/settings",icon:"Setting",component:N,meta:{nav:"系统中心",requireAnyRoles:["SYS_OWNER"]},children:[{path:"sysEmail",icon:"Notification",component:function(){return Promise.all([t.e(269),t.e(596)]).then(t.bind(t,7596))},meta:{nav:"邮箱设置",breadcrumb:U.sysEmailEdit}},{path:"sysLog",icon:"Document",component:function(){return Promise.all([t.e(269),t.e(99)]).then(t.bind(t,2099))},meta:{nav:"操作日志",breadcrumb:U.sysLog}},{path:"sysOauth2",icon:"Connection",component:function(){return Promise.all([t.e(269),t.e(754)]).then(t.bind(t,7754))},meta:{nav:"登陆设置",breadcrumb:U.sysOauth2}},{path:"sysKey",icon:"Key",hidden:"true",component:N,meta:{nav:"系统秘钥",breadcrumb:U.sysKeyEdit}}]}],R=(0,r.p7)({history:(0,r.PO)(),routes:Z});R.beforeEach((function(e,n,t){0==e.meta.requireAuth?"/login"==e.path&&l.r.hasAccessToken()?t(n):t():l.r.hasAccessToken()?t():t({path:"/login"})})),R.beforeEach((function(e,n,t){!e.query.groupName&&n.query.groupName&&(e.query.groupName=n.query.groupName),!e.query.projectName&&n.query.projectName&&(e.query.projectName=n.query.projectName),t()}));var $=R},4239:function(e,n,t){var r=t(8637),o=t(1836),u=(0,r.MT)({state:function(){var e={user:{nickname:null,usernmae:null,email:null,avatar:null},groupListActiveTab:null,menu:{isCollapse:!0}},n=o.E.loadUserLoginData();return n&&(e.user.nickname=n.nickname,e.user.usernmae=n.usernmae,e.user.email=n.email,e.user.avatar=n.avatar),e},mutations:{userUpdate:function(e,n){n.nickname&&(e.user.nickname=n.nickname),n.usernmae&&(e.user.usernmae=n.usernmae),n.email&&(e.user.email=n.email),n.avatar&&(e.user.avatar=n.avatar)},foldMenu:function(e){e.menu.isCollapse=!0},expandMenu:function(e){e.menu.isCollapse=!1},switchGroupListActiveTab:function(e,n){n&&(e.groupListActiveTab=n)}}});n["Z"]=u},1836:function(e,n,t){t.d(n,{r:function(){return a},E:function(){return i}});t(8862),t(1539),t(1249);var r="accessToken",o="accessTokenExpireAt",u="userLoginData",a={hasAccessToken:function(){var e=this.loadAccessToken();return e},hasValidAccessToken:function(){var e=this.loadAccessToken(),n=window.localStorage.getItem(o);return e&&n?n>(new Date).getTime():(console.log("warn: not found accessToken and expireAt key"),!1)},saveAccessToken:function(e,n){window.localStorage.setItem(r,e),window.localStorage.setItem(o,n)},loadAccessToken:function(){var e=window.localStorage.getItem(r);return e||null}},i={saveUserLoginData:function(e){window.localStorage.setItem(r,e.accessToken),window.localStorage.setItem(o,e.accessTokenExpireAt),window.localStorage.setItem(u,JSON.stringify(e))},removeUserLoginData:function(){window.localStorage.removeItem(u),window.localStorage.removeItem(r),window.localStorage.removeItem(o)},loadUserLoginData:function(){if(!window.localStorage.getItem(u))return null;var e=window.localStorage.getItem(u);return JSON.parse(e)},hasAnyRoles:function(e){var n=window.localStorage.getItem(u);if(null==n)return!1;var t=JSON.parse(n);return t.roles.map((function(e){return e.groupId?e.role+"?groupId="+e.groupId:e.role})).some((function(n){return e.some((function(e){return e==n}))}))},getRefreshToken:function(){var e=window.localStorage.getItem(u);if(null==e)return null;var n=JSON.parse(e);return n.refreshToken}}},2357:function(e,n,t){e.exports=t.p+"img/MySQL.c8f47618.svg"},3609:function(e,n,t){e.exports=t.p+"img/PostgreSQL.6e3d3a5e.svg"}},n={};function t(r){var o=n[r];if(void 0!==o)return o.exports;var u=n[r]={id:r,loaded:!1,exports:{}};return e[r].call(u.exports,u,u.exports,t),u.loaded=!0,u.exports}t.m=e,function(){var e=[];t.O=function(n,r,o,u){if(!r){var a=1/0;for(l=0;l=u)&&Object.keys(t.O).every((function(e){return t.O[e](r[c])}))?r.splice(c--,1):(i=!1,u0&&e[l-1][2]>u;l--)e[l]=e[l-1];e[l]=[r,o,u]}}(),function(){t.n=function(e){var n=e&&e.__esModule?function(){return e["default"]}:function(){return e};return t.d(n,{a:n}),n}}(),function(){t.d=function(e,n){for(var r in n)t.o(n,r)&&!t.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:n[r]})}}(),function(){t.f={},t.e=function(e){return Promise.all(Object.keys(t.f).reduce((function(n,r){return t.f[r](e,n),n}),[]))}}(),function(){t.u=function(e){return"js/"+e+"-legacy."+{33:"7e612922",99:"618121ce",139:"a43600d3",269:"85927c51",352:"82ca5000",469:"3e02203b",596:"3a4a4c9d",713:"468a031c",719:"85eb5e28",754:"2b22ae65",865:"fc2fd7b3",924:"804cf0e0"}[e]+".js"}}(),function(){t.miniCssF=function(e){return"css/"+e+"."+{33:"1dda4c12",139:"a7dec339",352:"356dcf0b",713:"82a2f213",865:"7df1e56e"}[e]+".css"}}(),function(){t.g=function(){if("object"===typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"===typeof window)return window}}()}(),function(){t.o=function(e,n){return Object.prototype.hasOwnProperty.call(e,n)}}(),function(){var e={},n="databasir-frontend:";t.l=function(r,o,u,a){if(e[r])e[r].push(o);else{var i,c;if(void 0!==u)for(var s=document.getElementsByTagName("script"),l=0;l\r\n \r\n\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\\\\dist\\\\exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\r\n\r\n\r\n\r\n","import { render } from \"./DatabaseIcon.vue?vue&type=template&id=154abc1d\"\nimport script from \"./DatabaseIcon.vue?vue&type=script&lang=js\"\nexport * from \"./DatabaseIcon.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"E:\\\\git_workspace\\\\databasir-frontend\\\\node_modules\\\\vue-loader\\\\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\nimport DatabaseIcon from './components/DatabaseIcon.vue'\r\n\r\n// element icon\r\nconst app = createApp(App)\r\nObject.keys(Icons).forEach(key => {\r\n app.component(key, Icons[key])\r\n})\r\napp.component('database-icon', DatabaseIcon)\r\n\r\n// permission directive\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\n// custom select directive\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","\r\n\r\n\r\n","\r\n\r\n","import { render } from \"./AppNav.vue?vue&type=template&id=2cfaad82\"\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=2cfaad82&lang=css\"\n\nimport exportComponent from \"E:\\\\git_workspace\\\\databasir-frontend\\\\node_modules\\\\vue-loader\\\\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\\\\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=34a219c2\"\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\\\\dist\\\\exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { render } from \"./Layout.vue?vue&type=template&id=6923c0fa\"\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=6923c0fa&lang=css\"\n\nimport exportComponent from \"E:\\\\git_workspace\\\\databasir-frontend\\\\node_modules\\\\vue-loader\\\\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\nfunction sysLog() {\r\n return {\r\n name:'操作日志',\r\n to: {\r\n path: '/settings/sysLog'\r\n } \r\n }\r\n}\r\n\r\nfunction sysOauth2() {\r\n return {\r\n name:'登录设置',\r\n to: {\r\n path: '/settings/sysOauth2'\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 sysLog: () => [index(), sysLog()],\r\n sysOauth2: () => [index(), sysOauth2()],\r\n\r\n}\r\n\r\nexport default breadcurmbMap","import { createRouter, createWebHistory } 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: '/login/oauth2/:id',\r\n component: () => import('@/views/OAuth2Login.vue'),\r\n hidden: true,\r\n props: 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 {\r\n path: 'sysLog',\r\n icon: 'Document',\r\n component: () => import('@/views/SysLog.vue'),\r\n meta: {\r\n nav: '操作日志',\r\n breadcrumb: breadcurmbMap.sysLog\r\n }\r\n },\r\n {\r\n path: 'sysOauth2',\r\n icon: 'Connection',\r\n component: () => import('@/views/SysOauth2.vue'),\r\n meta: {\r\n nav: '登陆设置',\r\n breadcrumb: breadcurmbMap.sysOauth2\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: createWebHistory(),\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;","import { createStore } from 'vuex'\r\nimport { user } from '../utils/auth'\r\n\r\nconst store = createStore({\r\n state() {\r\n const data = {\r\n user: {\r\n nickname: null,\r\n usernmae: null,\r\n email: null,\r\n avatar: null,\r\n },\r\n groupListActiveTab: null,\r\n menu: {\r\n isCollapse: true,\r\n }\r\n }\r\n const loginData = user.loadUserLoginData()\r\n if (loginData) {\r\n data.user.nickname = loginData.nickname\r\n data.user.usernmae = loginData.usernmae\r\n data.user.email = loginData.email\r\n data.user.avatar = loginData.avatar\r\n }\r\n return data;\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 if (param.avatar) {\r\n state.user.avatar = param.avatar\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 switchGroupListActiveTab(state, groupListActiveTab) {\r\n if (groupListActiveTab) {\r\n state.groupListActiveTab = groupListActiveTab\r\n }\r\n }\r\n }\r\n})\r\n\r\nexport default store","const accessTokenKey = 'accessToken'\r\nconst accessTokenExpireAtKey = 'accessTokenExpireAt'\r\nconst userLoginDataKey = 'userLoginData'\r\n\r\nexport const token = {\r\n\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 let token = window.localStorage.getItem(accessTokenKey)\r\n if (token) {\r\n return token\r\n }\r\n return null\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 } \r\n const data = window.localStorage.getItem(userLoginDataKey)\r\n return JSON.parse(data)\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","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","var deferred = [];\n__webpack_require__.O = function(result, chunkIds, fn, priority) {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar chunkIds = deferred[i][0];\n\t\tvar fn = deferred[i][1];\n\t\tvar priority = deferred[i][2];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every(function(key) { return __webpack_require__.O[key](chunkIds[j]); })) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = function(chunkId) {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce(function(promises, key) {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = function(chunkId) {\n\t// return url for filenames based on template\n\treturn \"js/\" + chunkId + \"-legacy.\" + {\"33\":\"7e612922\",\"139\":\"a43600d3\",\"269\":\"85927c51\",\"352\":\"82ca5000\",\"469\":\"3e02203b\",\"596\":\"3a4a4c9d\",\"713\":\"468a031c\",\"719\":\"85eb5e28\",\"754\":\"2b22ae65\",\"865\":\"fc2fd7b3\",\"924\":\"804cf0e0\",\"940\":\"90bc5a5b\"}[chunkId] + \".js\";\n};","// This function allow to reference async chunks\n__webpack_require__.miniCssF = function(chunkId) {\n\t// return url for filenames based on template\n\treturn \"css/\" + chunkId + \".\" + {\"33\":\"1dda4c12\",\"139\":\"a7dec339\",\"352\":\"356dcf0b\",\"713\":\"82a2f213\",\"865\":\"7df1e56e\"}[chunkId] + \".css\";\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","var inProgress = {};\nvar dataWebpackPrefix = \"databasir-frontend:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = function(url, done, key, chunkId) {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tscript.timeout = 120;\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = function(prev, event) {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach(function(fn) { return fn(event); });\n\t\tif(prev) return prev(event);\n\t}\n\t;\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = function(module) {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.p = \"/\";","var createStylesheet = function(chunkId, fullhref, resolve, reject) {\n\tvar linkTag = document.createElement(\"link\");\n\n\tlinkTag.rel = \"stylesheet\";\n\tlinkTag.type = \"text/css\";\n\tvar onLinkComplete = function(event) {\n\t\t// avoid mem leaks.\n\t\tlinkTag.onerror = linkTag.onload = null;\n\t\tif (event.type === 'load') {\n\t\t\tresolve();\n\t\t} else {\n\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\tvar realHref = event && event.target && event.target.href || fullhref;\n\t\t\tvar err = new Error(\"Loading CSS chunk \" + chunkId + \" failed.\\n(\" + realHref + \")\");\n\t\t\terr.code = \"CSS_CHUNK_LOAD_FAILED\";\n\t\t\terr.type = errorType;\n\t\t\terr.request = realHref;\n\t\t\tlinkTag.parentNode.removeChild(linkTag)\n\t\t\treject(err);\n\t\t}\n\t}\n\tlinkTag.onerror = linkTag.onload = onLinkComplete;\n\tlinkTag.href = fullhref;\n\n\tdocument.head.appendChild(linkTag);\n\treturn linkTag;\n};\nvar findStylesheet = function(href, fullhref) {\n\tvar existingLinkTags = document.getElementsByTagName(\"link\");\n\tfor(var i = 0; i < existingLinkTags.length; i++) {\n\t\tvar tag = existingLinkTags[i];\n\t\tvar dataHref = tag.getAttribute(\"data-href\") || tag.getAttribute(\"href\");\n\t\tif(tag.rel === \"stylesheet\" && (dataHref === href || dataHref === fullhref)) return tag;\n\t}\n\tvar existingStyleTags = document.getElementsByTagName(\"style\");\n\tfor(var i = 0; i < existingStyleTags.length; i++) {\n\t\tvar tag = existingStyleTags[i];\n\t\tvar dataHref = tag.getAttribute(\"data-href\");\n\t\tif(dataHref === href || dataHref === fullhref) return tag;\n\t}\n};\nvar loadStylesheet = function(chunkId) {\n\treturn new Promise(function(resolve, reject) {\n\t\tvar href = __webpack_require__.miniCssF(chunkId);\n\t\tvar fullhref = __webpack_require__.p + href;\n\t\tif(findStylesheet(href, fullhref)) return resolve();\n\t\tcreateStylesheet(chunkId, fullhref, resolve, reject);\n\t});\n}\n// object to store loaded CSS chunks\nvar installedCssChunks = {\n\t143: 0\n};\n\n__webpack_require__.f.miniCss = function(chunkId, promises) {\n\tvar cssChunks = {\"33\":1,\"139\":1,\"352\":1,\"713\":1,\"865\":1};\n\tif(installedCssChunks[chunkId]) promises.push(installedCssChunks[chunkId]);\n\telse if(installedCssChunks[chunkId] !== 0 && cssChunks[chunkId]) {\n\t\tpromises.push(installedCssChunks[chunkId] = loadStylesheet(chunkId).then(function() {\n\t\t\tinstalledCssChunks[chunkId] = 0;\n\t\t}, function(e) {\n\t\t\tdelete installedCssChunks[chunkId];\n\t\t\tthrow e;\n\t\t}));\n\t}\n};\n\n// no hmr","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t143: 0\n};\n\n__webpack_require__.f.j = function(chunkId, promises) {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\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\tif(true) { // all chunks have JS\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise(function(resolve, reject) { installedChunkData = installedChunks[chunkId] = [resolve, reject]; });\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = function(event) {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t} else installedChunks[chunkId] = 0;\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = function(chunkId) { return installedChunks[chunkId] === 0; };\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = function(parentChunkLoadingFunction, data) {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some(function(id) { return installedChunks[id] !== 0; })) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunkdatabasir_frontend\"] = self[\"webpackChunkdatabasir_frontend\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [998], function() { return __webpack_require__(3710); })\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["_createBlock","_component_router_view","script","__exports__","render","$props","toLowerCase","_component_el_tooltip","content","placement","_createElementVNode","src","require","style","_createElementBlock","_Fragment","key","props","databaseType","String","app","createApp","App","Object","keys","Icons","forEach","component","DatabaseIcon","directive","mounted","el","binding","roles","value","user","parentNode","removeChild","updated","child","querySelector","id","getAttribute","poper","document","getElementById","selector","addEventListener","condition","this","scrollHeight","scrollTop","clientHeight","use","store","ElementPlus","router","mount","_component_el_container","class","_createVNode","_component_el_aside","_component_AppNav","_component_el_header","_component_Breadcrumb","_component_Avatar","_component_el_main","_component_el_menu","collapse","$setup","mode","_component_el_menu_item","index","title","_hoisted_1","_component_el_icon","_component_home_filled","_renderList","menu","children","length","some","ele","hidden","_component_el_sub_menu","path","_resolveDynamicComponent","icon","_toDisplayString","meta","nav","childIndex","setup","isCollapse","computed","useRouter","routes","options","isShowMenu","requireAnyRoles","hasAnyRoles","expandMenu","_component_el_breadcrumb","separator","$options","_component_el_breadcrumb_item","_component_el_link","onClick","underline","_component_fold","item","to","name","data","breadcrumbs","$route","breadcrumb","$store","state","menuIsCollapse","methods","onFoldMenu","commit","_component_el_dropdown","dropdown","_component_el_dropdown_menu","_component_el_dropdown_item","divided","_component_el_avatar","size","userNickname","nickname","avatarUrl","avatar","onLogout","$router","push","toProfilePage","components","AppNav","Breadcrumb","Avatar","groupList","groupDashboard","route","groupName","query","params","groupId","groupProjectDocument","projectName","projectId","userList","userProfile","sysEmailEdit","sysLog","sysOauth2","breadcurmbMap","requireAuth","Layout","createRouter","history","createWebHistory","beforeEach","from","next","token","createStore","usernmae","email","groupListActiveTab","loginData","mutations","userUpdate","param","foldMenu","switchGroupListActiveTab","accessTokenKey","accessTokenExpireAtKey","userLoginDataKey","hasAccessToken","accessToken","loadAccessToken","hasValidAccessToken","expireAt","window","localStorage","getItem","Date","getTime","console","log","saveAccessToken","tokenExpireAt","setItem","saveUserLoginData","userLoginData","accessTokenExpireAt","JSON","stringify","removeUserLoginData","removeItem","loadUserLoginData","parse","map","role","exists","expected","getRefreshToken","refreshToken","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","exports","module","loaded","__webpack_modules__","call","m","deferred","O","result","chunkIds","fn","priority","notFulfilled","Infinity","i","fulfilled","j","every","splice","r","n","getter","__esModule","d","a","definition","o","defineProperty","enumerable","get","f","e","chunkId","Promise","all","reduce","promises","u","miniCssF","g","globalThis","Function","obj","prop","prototype","hasOwnProperty","inProgress","dataWebpackPrefix","l","url","done","needAttach","scripts","getElementsByTagName","s","createElement","charset","timeout","nc","setAttribute","onScriptComplete","prev","event","onerror","onload","clearTimeout","doneFns","setTimeout","bind","type","target","head","appendChild","Symbol","toStringTag","nmd","paths","p","createStylesheet","fullhref","resolve","reject","linkTag","rel","onLinkComplete","errorType","realHref","href","err","Error","code","request","findStylesheet","existingLinkTags","tag","dataHref","existingStyleTags","loadStylesheet","installedCssChunks","miniCss","cssChunks","then","installedChunks","installedChunkData","promise","error","loadingEnded","realSrc","message","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","chunkLoadingGlobal","self","__webpack_exports__"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"js/app-legacy.30c52ca0.js","mappings":"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","sources":["webpack://databasir-frontend/./src/App.vue","webpack://databasir-frontend/./src/App.vue?7ccd","webpack://databasir-frontend/./src/components/DatabaseIcon.vue","webpack://databasir-frontend/./src/components/DatabaseIcon.vue?d57f","webpack://databasir-frontend/./src/main.js","webpack://databasir-frontend/./src/layouts/Layout.vue","webpack://databasir-frontend/./src/components/AppNav.vue","webpack://databasir-frontend/./src/components/AppNav.vue?b6ff","webpack://databasir-frontend/./src/components/Breadcrumb.vue","webpack://databasir-frontend/./src/components/Breadcrumb.vue?ef20","webpack://databasir-frontend/./src/components/Avatar.vue","webpack://databasir-frontend/./src/components/Avatar.vue?e66a","webpack://databasir-frontend/./src/layouts/Layout.vue?7cb6","webpack://databasir-frontend/./src/router/breadcurmb.js","webpack://databasir-frontend/./src/router/index.js","webpack://databasir-frontend/./src/store/index.js","webpack://databasir-frontend/./src/utils/auth.js","webpack://databasir-frontend/webpack/bootstrap","webpack://databasir-frontend/webpack/runtime/chunk loaded","webpack://databasir-frontend/webpack/runtime/compat get default export","webpack://databasir-frontend/webpack/runtime/define property getters","webpack://databasir-frontend/webpack/runtime/ensure chunk","webpack://databasir-frontend/webpack/runtime/get javascript chunk filename","webpack://databasir-frontend/webpack/runtime/get mini-css chunk filename","webpack://databasir-frontend/webpack/runtime/global","webpack://databasir-frontend/webpack/runtime/hasOwnProperty shorthand","webpack://databasir-frontend/webpack/runtime/load script","webpack://databasir-frontend/webpack/runtime/make namespace object","webpack://databasir-frontend/webpack/runtime/node module decorator","webpack://databasir-frontend/webpack/runtime/publicPath","webpack://databasir-frontend/webpack/runtime/css loading","webpack://databasir-frontend/webpack/runtime/jsonp chunk loading","webpack://databasir-frontend/webpack/startup"],"sourcesContent":["\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\\\\dist\\\\exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\r\n\r\n\r\n\r\n","import { render } from \"./DatabaseIcon.vue?vue&type=template&id=154abc1d\"\nimport script from \"./DatabaseIcon.vue?vue&type=script&lang=js\"\nexport * from \"./DatabaseIcon.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"E:\\\\git_workspace\\\\databasir-frontend\\\\node_modules\\\\vue-loader\\\\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\nimport DatabaseIcon from './components/DatabaseIcon.vue'\r\n\r\n// element icon\r\nconst app = createApp(App)\r\nObject.keys(Icons).forEach(key => {\r\n app.component(key, Icons[key])\r\n})\r\napp.component('database-icon', DatabaseIcon)\r\n\r\n// permission directive\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\n// custom select directive\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","\r\n\r\n\r\n","\r\n\r\n","import { render } from \"./AppNav.vue?vue&type=template&id=2cfaad82\"\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=2cfaad82&lang=css\"\n\nimport exportComponent from \"E:\\\\git_workspace\\\\databasir-frontend\\\\node_modules\\\\vue-loader\\\\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\\\\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=34a219c2\"\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\\\\dist\\\\exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { render } from \"./Layout.vue?vue&type=template&id=6923c0fa\"\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=6923c0fa&lang=css\"\n\nimport exportComponent from \"E:\\\\git_workspace\\\\databasir-frontend\\\\node_modules\\\\vue-loader\\\\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\nfunction sysLog() {\r\n return {\r\n name:'操作日志',\r\n to: {\r\n path: '/settings/sysLog'\r\n } \r\n }\r\n}\r\n\r\nfunction sysOauth2() {\r\n return {\r\n name:'登录设置',\r\n to: {\r\n path: '/settings/sysOauth2'\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 sysLog: () => [index(), sysLog()],\r\n sysOauth2: () => [index(), sysOauth2()],\r\n\r\n}\r\n\r\nexport default breadcurmbMap","import { createRouter, createWebHistory } 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: '/login/oauth2/:id',\r\n component: () => import('@/views/OAuth2Login.vue'),\r\n hidden: true,\r\n props: 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 {\r\n path: 'sysLog',\r\n icon: 'Document',\r\n component: () => import('@/views/SysLog.vue'),\r\n meta: {\r\n nav: '操作日志',\r\n breadcrumb: breadcurmbMap.sysLog\r\n }\r\n },\r\n {\r\n path: 'sysOauth2',\r\n icon: 'Connection',\r\n component: () => import('@/views/SysOauth2.vue'),\r\n meta: {\r\n nav: '登陆设置',\r\n breadcrumb: breadcurmbMap.sysOauth2\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: createWebHistory(),\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;","import { createStore } from 'vuex'\r\nimport { user } from '../utils/auth'\r\n\r\nconst store = createStore({\r\n state() {\r\n const data = {\r\n user: {\r\n nickname: null,\r\n usernmae: null,\r\n email: null,\r\n avatar: null,\r\n },\r\n groupListActiveTab: null,\r\n menu: {\r\n isCollapse: true,\r\n }\r\n }\r\n const loginData = user.loadUserLoginData()\r\n if (loginData) {\r\n data.user.nickname = loginData.nickname\r\n data.user.usernmae = loginData.usernmae\r\n data.user.email = loginData.email\r\n data.user.avatar = loginData.avatar\r\n }\r\n return data;\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 if (param.avatar) {\r\n state.user.avatar = param.avatar\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 switchGroupListActiveTab(state, groupListActiveTab) {\r\n if (groupListActiveTab) {\r\n state.groupListActiveTab = groupListActiveTab\r\n }\r\n }\r\n }\r\n})\r\n\r\nexport default store","const accessTokenKey = 'accessToken'\r\nconst accessTokenExpireAtKey = 'accessTokenExpireAt'\r\nconst userLoginDataKey = 'userLoginData'\r\n\r\nexport const token = {\r\n\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 let token = window.localStorage.getItem(accessTokenKey)\r\n if (token) {\r\n return token\r\n }\r\n return null\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 } \r\n const data = window.localStorage.getItem(userLoginDataKey)\r\n return JSON.parse(data)\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","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","var deferred = [];\n__webpack_require__.O = function(result, chunkIds, fn, priority) {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar chunkIds = deferred[i][0];\n\t\tvar fn = deferred[i][1];\n\t\tvar priority = deferred[i][2];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every(function(key) { return __webpack_require__.O[key](chunkIds[j]); })) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = function(chunkId) {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce(function(promises, key) {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = function(chunkId) {\n\t// return url for filenames based on template\n\treturn \"js/\" + chunkId + \"-legacy.\" + {\"33\":\"7e612922\",\"99\":\"618121ce\",\"139\":\"a43600d3\",\"269\":\"85927c51\",\"352\":\"82ca5000\",\"469\":\"3e02203b\",\"596\":\"3a4a4c9d\",\"713\":\"468a031c\",\"719\":\"85eb5e28\",\"754\":\"2b22ae65\",\"865\":\"fc2fd7b3\",\"924\":\"804cf0e0\"}[chunkId] + \".js\";\n};","// This function allow to reference async chunks\n__webpack_require__.miniCssF = function(chunkId) {\n\t// return url for filenames based on template\n\treturn \"css/\" + chunkId + \".\" + {\"33\":\"1dda4c12\",\"139\":\"a7dec339\",\"352\":\"356dcf0b\",\"713\":\"82a2f213\",\"865\":\"7df1e56e\"}[chunkId] + \".css\";\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","var inProgress = {};\nvar dataWebpackPrefix = \"databasir-frontend:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = function(url, done, key, chunkId) {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tscript.timeout = 120;\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = function(prev, event) {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach(function(fn) { return fn(event); });\n\t\tif(prev) return prev(event);\n\t}\n\t;\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = function(module) {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.p = \"/\";","var createStylesheet = function(chunkId, fullhref, resolve, reject) {\n\tvar linkTag = document.createElement(\"link\");\n\n\tlinkTag.rel = \"stylesheet\";\n\tlinkTag.type = \"text/css\";\n\tvar onLinkComplete = function(event) {\n\t\t// avoid mem leaks.\n\t\tlinkTag.onerror = linkTag.onload = null;\n\t\tif (event.type === 'load') {\n\t\t\tresolve();\n\t\t} else {\n\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\tvar realHref = event && event.target && event.target.href || fullhref;\n\t\t\tvar err = new Error(\"Loading CSS chunk \" + chunkId + \" failed.\\n(\" + realHref + \")\");\n\t\t\terr.code = \"CSS_CHUNK_LOAD_FAILED\";\n\t\t\terr.type = errorType;\n\t\t\terr.request = realHref;\n\t\t\tlinkTag.parentNode.removeChild(linkTag)\n\t\t\treject(err);\n\t\t}\n\t}\n\tlinkTag.onerror = linkTag.onload = onLinkComplete;\n\tlinkTag.href = fullhref;\n\n\tdocument.head.appendChild(linkTag);\n\treturn linkTag;\n};\nvar findStylesheet = function(href, fullhref) {\n\tvar existingLinkTags = document.getElementsByTagName(\"link\");\n\tfor(var i = 0; i < existingLinkTags.length; i++) {\n\t\tvar tag = existingLinkTags[i];\n\t\tvar dataHref = tag.getAttribute(\"data-href\") || tag.getAttribute(\"href\");\n\t\tif(tag.rel === \"stylesheet\" && (dataHref === href || dataHref === fullhref)) return tag;\n\t}\n\tvar existingStyleTags = document.getElementsByTagName(\"style\");\n\tfor(var i = 0; i < existingStyleTags.length; i++) {\n\t\tvar tag = existingStyleTags[i];\n\t\tvar dataHref = tag.getAttribute(\"data-href\");\n\t\tif(dataHref === href || dataHref === fullhref) return tag;\n\t}\n};\nvar loadStylesheet = function(chunkId) {\n\treturn new Promise(function(resolve, reject) {\n\t\tvar href = __webpack_require__.miniCssF(chunkId);\n\t\tvar fullhref = __webpack_require__.p + href;\n\t\tif(findStylesheet(href, fullhref)) return resolve();\n\t\tcreateStylesheet(chunkId, fullhref, resolve, reject);\n\t});\n}\n// object to store loaded CSS chunks\nvar installedCssChunks = {\n\t143: 0\n};\n\n__webpack_require__.f.miniCss = function(chunkId, promises) {\n\tvar cssChunks = {\"33\":1,\"139\":1,\"352\":1,\"713\":1,\"865\":1};\n\tif(installedCssChunks[chunkId]) promises.push(installedCssChunks[chunkId]);\n\telse if(installedCssChunks[chunkId] !== 0 && cssChunks[chunkId]) {\n\t\tpromises.push(installedCssChunks[chunkId] = loadStylesheet(chunkId).then(function() {\n\t\t\tinstalledCssChunks[chunkId] = 0;\n\t\t}, function(e) {\n\t\t\tdelete installedCssChunks[chunkId];\n\t\t\tthrow e;\n\t\t}));\n\t}\n};\n\n// no hmr","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t143: 0\n};\n\n__webpack_require__.f.j = function(chunkId, promises) {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\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\tif(true) { // all chunks have JS\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise(function(resolve, reject) { installedChunkData = installedChunks[chunkId] = [resolve, reject]; });\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = function(event) {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t} else installedChunks[chunkId] = 0;\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = function(chunkId) { return installedChunks[chunkId] === 0; };\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = function(parentChunkLoadingFunction, data) {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some(function(id) { return installedChunks[id] !== 0; })) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunkdatabasir_frontend\"] = self[\"webpackChunkdatabasir_frontend\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [998], function() { return __webpack_require__(3710); })\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["_createBlock","_component_router_view","script","__exports__","render","$props","toLowerCase","_component_el_tooltip","content","placement","_createElementVNode","src","require","style","_createElementBlock","_Fragment","key","props","databaseType","String","app","createApp","App","Object","keys","Icons","forEach","component","DatabaseIcon","directive","mounted","el","binding","roles","value","user","parentNode","removeChild","updated","child","querySelector","id","getAttribute","poper","document","getElementById","selector","addEventListener","condition","this","scrollHeight","scrollTop","clientHeight","use","store","ElementPlus","router","mount","_component_el_container","class","_createVNode","_component_el_aside","_component_AppNav","_component_el_header","_component_Breadcrumb","_component_Avatar","_component_el_main","_component_el_menu","collapse","$setup","mode","_component_el_menu_item","index","title","_hoisted_1","_component_el_icon","_component_home_filled","_renderList","menu","children","length","some","ele","hidden","_component_el_sub_menu","path","_resolveDynamicComponent","icon","_toDisplayString","meta","nav","childIndex","setup","isCollapse","computed","useRouter","routes","options","isShowMenu","requireAnyRoles","hasAnyRoles","expandMenu","_component_el_breadcrumb","separator","$options","_component_el_breadcrumb_item","_component_el_link","onClick","underline","_component_fold","item","to","name","data","breadcrumbs","$route","breadcrumb","$store","state","menuIsCollapse","methods","onFoldMenu","commit","_component_el_dropdown","dropdown","_component_el_dropdown_menu","_component_el_dropdown_item","divided","_component_el_avatar","size","userNickname","nickname","avatarUrl","avatar","onLogout","$router","push","toProfilePage","components","AppNav","Breadcrumb","Avatar","groupList","groupDashboard","route","groupName","query","params","groupId","groupProjectDocument","projectName","projectId","userList","userProfile","sysEmailEdit","sysLog","sysOauth2","breadcurmbMap","requireAuth","Layout","createRouter","history","createWebHistory","beforeEach","from","next","token","createStore","usernmae","email","groupListActiveTab","loginData","mutations","userUpdate","param","foldMenu","switchGroupListActiveTab","accessTokenKey","accessTokenExpireAtKey","userLoginDataKey","hasAccessToken","accessToken","loadAccessToken","hasValidAccessToken","expireAt","window","localStorage","getItem","Date","getTime","console","log","saveAccessToken","tokenExpireAt","setItem","saveUserLoginData","userLoginData","accessTokenExpireAt","JSON","stringify","removeUserLoginData","removeItem","loadUserLoginData","parse","map","role","exists","expected","getRefreshToken","refreshToken","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","exports","module","loaded","__webpack_modules__","call","m","deferred","O","result","chunkIds","fn","priority","notFulfilled","Infinity","i","fulfilled","j","every","splice","r","n","getter","__esModule","d","a","definition","o","defineProperty","enumerable","get","f","e","chunkId","Promise","all","reduce","promises","u","miniCssF","g","globalThis","Function","obj","prop","prototype","hasOwnProperty","inProgress","dataWebpackPrefix","l","url","done","needAttach","scripts","getElementsByTagName","s","createElement","charset","timeout","nc","setAttribute","onScriptComplete","prev","event","onerror","onload","clearTimeout","doneFns","setTimeout","bind","type","target","head","appendChild","Symbol","toStringTag","nmd","paths","p","createStylesheet","fullhref","resolve","reject","linkTag","rel","onLinkComplete","errorType","realHref","href","err","Error","code","request","findStylesheet","existingLinkTags","tag","dataHref","existingStyleTags","loadStylesheet","installedCssChunks","miniCss","cssChunks","then","installedChunks","installedChunkData","promise","error","loadingEnded","realSrc","message","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","chunkLoadingGlobal","self","__webpack_exports__"],"sourceRoot":""} \ No newline at end of file diff --git a/api/src/main/resources/static/js/app.56c0e3ab.js b/api/src/main/resources/static/js/app.16e9daea.js similarity index 55% rename from api/src/main/resources/static/js/app.56c0e3ab.js rename to api/src/main/resources/static/js/app.16e9daea.js index b91b327..281c350 100644 --- a/api/src/main/resources/static/js/app.56c0e3ab.js +++ b/api/src/main/resources/static/js/app.16e9daea.js @@ -1,2 +1,2 @@ -(function(){"use strict";var e={3710:function(e,t,n){var r=n(9963),o=n(2610),a=n(695),u=(n(4415),n(9048)),i=n(4239),s=n(6252);function l(e,t){const n=(0,s.up)("router-view");return(0,s.wg)(),(0,s.j4)(n)}var c=n(3744);const d={},m=(0,c.Z)(d,[["render",l]]);var p=m,f=n(1836),h=n(3577);const g=["src"],w=["src"];function b(e,t,r,o,a,u){const i=(0,s.up)("el-tooltip");return"mysql"==r.databaseType.toLowerCase()?((0,s.wg)(),(0,s.j4)(i,{key:0,content:r.databaseType,placement:"left"},{default:(0,s.w5)((()=>[(0,s._)("img",{src:n(2357),style:{"max-width":"33px","max-height":"33px"}},null,8,g)])),_:1},8,["content"])):"postgresql"==r.databaseType.toLowerCase()?((0,s.wg)(),(0,s.j4)(i,{key:1,content:r.databaseType,placement:"left"},{default:(0,s.w5)((()=>[(0,s._)("img",{src:n(3609),style:{"max-width":"33px","max-height":"33px"}},null,8,w)])),_:1},8,["content"])):((0,s.wg)(),(0,s.iD)(s.HY,{key:2},[(0,s.Uk)((0,h.zw)(r.databaseType),1)],64))}var v={props:{databaseType:String}};const y=(0,c.Z)(v,[["render",b]]);var k=y;const _=(0,r.ri)(p);Object.keys(a).forEach((e=>{_.component(e,a[e])})),_.component("database-icon",k),_.directive("require-roles",{mounted(e,t){const n=t.value;f.E.hasAnyRoles(n)||e.parentNode&&e.parentNode.removeChild(e)}}),_.directive("select-more",{updated(e,t){const n=e.querySelector(".select-trigger"),r=n.getAttribute("aria-describedby"),o=document.getElementById(r),a=o.querySelector(".el-scrollbar .el-select-dropdown__wrap");a.addEventListener("scroll",(function(){const e=this.scrollHeight-this.scrollTop-1<=this.clientHeight;e&&t.value()}))}}),_.use(i.Z),_.use(o.Z),_.use(u.Z),_.mount("#app")},9048:function(e,t,n){n.d(t,{Z:function(){return $}});var r=n(2119),o=n(6252);function a(e,t,n,r,a,u){const i=(0,o.up)("AppNav"),s=(0,o.up)("el-aside"),l=(0,o.up)("Breadcrumb"),c=(0,o.up)("Avatar"),d=(0,o.up)("el-header"),m=(0,o.up)("router-view"),p=(0,o.up)("el-main"),f=(0,o.up)("el-container");return(0,o.wg)(),(0,o.j4)(f,{class:"databasir"},{default:(0,o.w5)((()=>[(0,o.Wm)(s,null,{default:(0,o.w5)((()=>[(0,o.Wm)(i,{class:"databasir-nav"})])),_:1}),(0,o.Wm)(d,{class:"databasir-main-header"},{default:(0,o.w5)((()=>[(0,o.Wm)(l),(0,o.Wm)(c)])),_:1}),(0,o.Wm)(p,{class:"databasir-main"},{default:(0,o.w5)((()=>[(0,o.Wm)(f,null,{default:(0,o.w5)((()=>[(0,o.Wm)(p,{class:"databasir-main-content"},{default:(0,o.w5)((()=>[(0,o.Wm)(m)])),_:1})])),_:1})])),_:1})])),_:1})}var u=n(3577);const i=(0,o._)("span",null,"Databasir",-1);function s(e,t,n,r,a,s){const l=(0,o.up)("home-filled"),c=(0,o.up)("el-icon"),d=(0,o.up)("el-menu-item"),m=(0,o.up)("el-sub-menu"),p=(0,o.up)("el-menu");return(0,o.wg)(),(0,o.j4)(p,{router:"",collapse:r.isCollapse,mode:"vertical",class:"left-menu"},{default:(0,o.w5)((()=>[(0,o.Wm)(d,{index:"/"},{title:(0,o.w5)((()=>[i])),default:(0,o.w5)((()=>[(0,o.Wm)(c,null,{default:(0,o.w5)((()=>[(0,o.Wm)(l)])),_:1})])),_:1}),((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(r.routes,((e,t)=>((0,o.wg)(),(0,o.iD)(o.HY,{key:t},[r.isShowMenu(e)&&e.children.length>0&&e.children.some((e=>!e.hidden))?((0,o.wg)(),(0,o.j4)(m,{key:0,index:e.path},{title:(0,o.w5)((()=>[(0,o.Wm)(c,null,{default:(0,o.w5)((()=>[((0,o.wg)(),(0,o.j4)((0,o.LL)(e.icon)))])),_:2},1024),(0,o._)("span",null,(0,u.zw)(e.meta.nav),1)])),default:(0,o.w5)((()=>[((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(e.children,((n,r)=>((0,o.wg)(),(0,o.iD)(o.HY,{key:t+"-"+r},[n.hidden?(0,o.kq)("",!0):((0,o.wg)(),(0,o.j4)(d,{key:0,index:e.path+"/"+n.path},{title:(0,o.w5)((()=>[(0,o._)("span",null,(0,u.zw)(n.meta.nav),1)])),default:(0,o.w5)((()=>[n.icon?((0,o.wg)(),(0,o.j4)(c,{key:0},{default:(0,o.w5)((()=>[((0,o.wg)(),(0,o.j4)((0,o.LL)(n.icon)))])),_:2},1024)):(0,o.kq)("",!0)])),_:2},1032,["index"]))],64)))),128))])),_:2},1032,["index"])):r.isShowMenu(e)?((0,o.wg)(),(0,o.j4)(d,{key:1,index:e.path},{title:(0,o.w5)((()=>[(0,o._)("span",null,(0,u.zw)(e.meta.nav),1)])),default:(0,o.w5)((()=>[(0,o.Wm)(c,null,{default:(0,o.w5)((()=>[((0,o.wg)(),(0,o.j4)((0,o.LL)(e.icon)))])),_:2},1024)])),_:2},1032,["index"])):(0,o.kq)("",!0)],64)))),128))])),_:1},8,["collapse"])}var l=n(2262),c=n(1836),d=n(4239),m={setup(){const e=(0,l.Fl)((()=>d.Z.state.menu.isCollapse)),t=(0,r.tv)(),n=t.options.routes,o=e=>{if(e.hidden)return!1;if(e.meta.requireAnyRoles&&e.meta.requireAnyRoles.length>0){const t=c.E.hasAnyRoles(e.meta.requireAnyRoles);if(!t)return!1}return!0},a=()=>{d.Z.commit("expandMenu")};return{isCollapse:e,isShowMenu:o,expandMenu:a,routes:n}}},p=n(3744);const f=(0,p.Z)(m,[["render",s]]);var h=f;function g(e,t,n,r,a,i){const s=(0,o.up)("fold"),l=(0,o.up)("el-icon"),c=(0,o.up)("el-link"),d=(0,o.up)("el-breadcrumb-item"),m=(0,o.up)("el-breadcrumb");return(0,o.wg)(),(0,o.j4)(m,{separator:"/"},{default:(0,o.w5)((()=>[i.menuIsCollapse?(0,o.kq)("",!0):((0,o.wg)(),(0,o.j4)(d,{key:0},{default:(0,o.w5)((()=>[(0,o.Wm)(c,{onClick:t[0]||(t[0]=e=>i.onFoldMenu()),underline:!1},{default:(0,o.w5)((()=>[(0,o.Wm)(l,null,{default:(0,o.w5)((()=>[(0,o.Wm)(s)])),_:1})])),_:1})])),_:1})),((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(i.breadcrumbs,((e,t)=>((0,o.wg)(),(0,o.j4)(d,{key:t,to:e.to},{default:(0,o.w5)((()=>[(0,o.Uk)((0,u.zw)(e.name),1)])),_:2},1032,["to"])))),128))])),_:1})}var w={data(){},computed:{breadcrumbs:function(){return"function"===typeof this.$route.meta.breadcrumb?this.$route.meta.breadcrumb(this.$route,this.$store.state):[]},menuIsCollapse(){return this.$store.state.menu.isCollapse}},methods:{onFoldMenu(){this.$store.commit("foldMenu")}}};const b=(0,p.Z)(w,[["render",g]]);var v=b;const y=(0,o.Uk)("个人中心"),k=(0,o.Uk)("注销登陆");function _(e,t,n,r,a,i){const s=(0,o.up)("el-avatar"),l=(0,o.up)("el-dropdown-item"),c=(0,o.up)("el-dropdown-menu"),d=(0,o.up)("el-dropdown");return(0,o.wg)(),(0,o.j4)(d,null,{dropdown:(0,o.w5)((()=>[(0,o.Wm)(c,null,{default:(0,o.w5)((()=>[(0,o.Wm)(l,null,{default:(0,o.w5)((()=>[(0,o.Uk)((0,u.zw)(i.userNickname),1)])),_:1}),(0,o.Wm)(l,{icon:"user",divided:"",onClick:t[0]||(t[0]=e=>i.toProfilePage())},{default:(0,o.w5)((()=>[y])),_:1}),(0,o.Wm)(l,{icon:"back",onClick:t[1]||(t[1]=e=>i.onLogout())},{default:(0,o.w5)((()=>[k])),_:1})])),_:1})])),default:(0,o.w5)((()=>[(0,o.Wm)(s,{size:36,src:i.avatarUrl,icon:"avatar"},null,8,["src"])])),_:1})}var j={computed:{userNickname(){return this.$store.state.user.nickname},avatarUrl(){return this.$store.state.user.avatar}},methods:{onLogout(){c.E.removeUserLoginData(),this.$router.push({path:"/login"})},toProfilePage(){this.$router.push({path:"/profile"})}}};const S=(0,p.Z)(j,[["render",_]]);var A=S,L={components:{AppNav:h,Breadcrumb:v,Avatar:A}};const T=(0,p.Z)(L,[["render",a]]);var N=T;function q(){return{name:"首页",to:{path:"/"}}}function E(){return{name:"项目中心",to:{name:"groupListPage"}}}function x(e){var t="项目组";return e.query.groupName&&(t=e.query.groupName),{name:t,to:{path:"/groups/"+e.params.groupId}}}function C(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 P(){return{name:"用户列表",to:{path:"/users"}}}function I(){return{name:"个人中心",to:{path:"/profile"}}}function O(){return{name:"邮箱设置",to:{path:"/settings/sysEmail"}}}function W(){return{name:"操作日志",to:{path:"/settings/sysLog"}}}function D(){return{name:"登录设置",to:{path:"/settings/sysOauth2"}}}const M={index:()=>[q()],groupList:()=>[q(),E()],groupDashboard:(e,t)=>[q(),E(),x(e,t)],groupProjectDocument:(e,t)=>[q(),E(),x(e,t),C(e)],userProfile:()=>[q(),I()],userList:()=>[q(),P()],sysEmailEdit:()=>[q(),O()],sysLog:()=>[q(),W()],sysOauth2:()=>[q(),D()]};var U=M;const Z=[{path:"/login",component:()=>Promise.all([n.e(269),n.e(139)]).then(n.bind(n,1139)),hidden:!0,meta:{requireAuth:!1}},{path:"/login/oauth2/:id",component:()=>Promise.all([n.e(269),n.e(865)]).then(n.bind(n,8865)),hidden:!0,props:!0,meta:{requireAuth:!1}},{path:"/",hidden:!0,component:N,children:[{path:"",hidden:!0,component:()=>Promise.all([n.e(269),n.e(352)]).then(n.bind(n,2352)),meta:{breadcrumb:U.groupList}}]},{path:"/groups",icon:"Collection",component:N,meta:{nav:"项目中心"},children:[{path:"",name:"groupListPage",hidden:!0,component:()=>Promise.all([n.e(269),n.e(352)]).then(n.bind(n,2352)),meta:{breadcrumb:U.groupList}},{path:":groupId",hidden:!0,component:()=>Promise.all([n.e(269),n.e(713)]).then(n.bind(n,2713)),meta:{breadcrumb:U.groupDashboard}},{path:":groupId/projects/:projectId/documents",hidden:!0,component:()=>Promise.all([n.e(269),n.e(33)]).then(n.bind(n,3033)),meta:{breadcrumb:U.groupProjectDocument}}]},{path:"/users",icon:"List",component:N,meta:{nav:"用户中心",requireAnyRoles:["SYS_OWNER"]},children:[{path:"",hidden:!0,component:()=>Promise.all([n.e(269),n.e(719)]).then(n.bind(n,9719)),meta:{breadcrumb:U.userList}}]},{path:"/profile",icon:"User",component:N,meta:{nav:"个人中心",breadcrumb:U.userProfile},children:[{path:"",hidden:!0,component:()=>Promise.all([n.e(269),n.e(469)]).then(n.bind(n,6469))}]},{path:"/settings",icon:"Setting",component:N,meta:{nav:"系统中心",requireAnyRoles:["SYS_OWNER"]},children:[{path:"sysEmail",icon:"Notification",component:()=>Promise.all([n.e(269),n.e(596)]).then(n.bind(n,7596)),meta:{nav:"邮箱设置",breadcrumb:U.sysEmailEdit}},{path:"sysLog",icon:"Document",component:()=>Promise.all([n.e(269),n.e(940)]).then(n.bind(n,3940)),meta:{nav:"操作日志",breadcrumb:U.sysLog}},{path:"sysOauth2",icon:"Connection",component:()=>Promise.all([n.e(269),n.e(754)]).then(n.bind(n,7754)),meta:{nav:"登陆设置",breadcrumb:U.sysOauth2}},{path:"sysKey",icon:"Key",hidden:"true",component:N,meta:{nav:"系统秘钥",breadcrumb:U.sysKeyEdit}}]}],R=(0,r.p7)({history:(0,r.PO)(),routes:Z});R.beforeEach(((e,t,n)=>{0==e.meta.requireAuth?"/login"==e.path&&c.r.hasAccessToken()?n(t):n():c.r.hasAccessToken()?n():n({path:"/login"})})),R.beforeEach(((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()}));var $=R},4239:function(e,t,n){var r=n(8637),o=n(1836);const a=(0,r.MT)({state(){const e={user:{nickname:null,usernmae:null,email:null,avatar:null},groupListActiveTab:null,menu:{isCollapse:!0}},t=o.E.loadUserLoginData();return t&&(e.user.nickname=t.nickname,e.user.usernmae=t.usernmae,e.user.email=t.email,e.user.avatar=t.avatar),e},mutations:{userUpdate(e,t){t.nickname&&(e.user.nickname=t.nickname),t.usernmae&&(e.user.usernmae=t.usernmae),t.email&&(e.user.email=t.email),t.avatar&&(e.user.avatar=t.avatar)},foldMenu(e){e.menu.isCollapse=!0},expandMenu(e){e.menu.isCollapse=!1},switchGroupListActiveTab(e,t){t&&(e.groupListActiveTab=t)}}});t["Z"]=a},1836:function(e,t,n){n.d(t,{r:function(){return u},E:function(){return i}});const r="accessToken",o="accessTokenExpireAt",a="userLoginData",u={hasAccessToken(){const e=this.loadAccessToken();return e},hasValidAccessToken(){const e=this.loadAccessToken(),t=window.localStorage.getItem(o);return e&&t?t>(new Date).getTime():(console.log("warn: not found accessToken and expireAt key"),!1)},saveAccessToken(e,t){window.localStorage.setItem(r,e),window.localStorage.setItem(o,t)},loadAccessToken(){let e=window.localStorage.getItem(r);return e||null}},i={saveUserLoginData(e){window.localStorage.setItem(r,e.accessToken),window.localStorage.setItem(o,e.accessTokenExpireAt),window.localStorage.setItem(a,JSON.stringify(e))},removeUserLoginData(){window.localStorage.removeItem(a),window.localStorage.removeItem(r),window.localStorage.removeItem(o)},loadUserLoginData(){if(!window.localStorage.getItem(a))return null;const e=window.localStorage.getItem(a);return JSON.parse(e)},hasAnyRoles(e){const t=window.localStorage.getItem(a);if(null==t)return!1;const n=JSON.parse(t);return n.roles.map((e=>e.groupId?e.role+"?groupId="+e.groupId:e.role)).some((t=>e.some((e=>e==t))))},getRefreshToken(){const e=window.localStorage.getItem(a);if(null==e)return null;const t=JSON.parse(e);return t.refreshToken}}},2357:function(e,t,n){e.exports=n.p+"img/MySQL.c8f47618.svg"},3609:function(e,t,n){e.exports=n.p+"img/PostgreSQL.6e3d3a5e.svg"}},t={};function n(r){var o=t[r];if(void 0!==o)return o.exports;var a=t[r]={id:r,loaded:!1,exports:{}};return e[r].call(a.exports,a,a.exports,n),a.loaded=!0,a.exports}n.m=e,function(){var e=[];n.O=function(t,r,o,a){if(!r){var u=1/0;for(c=0;c=a)&&Object.keys(n.O).every((function(e){return n.O[e](r[s])}))?r.splice(s--,1):(i=!1,a0&&e[c-1][2]>a;c--)e[c]=e[c-1];e[c]=[r,o,a]}}(),function(){n.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return n.d(t,{a:t}),t}}(),function(){n.d=function(e,t){for(var r in t)n.o(t,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})}}(),function(){n.f={},n.e=function(e){return Promise.all(Object.keys(n.f).reduce((function(t,r){return n.f[r](e,t),t}),[]))}}(),function(){n.u=function(e){return"js/"+e+"."+{33:"cac6bbd9",139:"909d89d2",269:"8e27371c",352:"2b068778",469:"8c3ea567",596:"afe6b2d4",713:"b4144758",719:"df03c200",754:"d037cc5e",865:"ebbb1893",940:"0286114f"}[e]+".js"}}(),function(){n.miniCssF=function(e){return"css/"+e+"."+{33:"1dda4c12",139:"a7dec339",352:"356dcf0b",713:"82a2f213",865:"7df1e56e"}[e]+".css"}}(),function(){n.g=function(){if("object"===typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"===typeof window)return window}}()}(),function(){n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)}}(),function(){var e={},t="databasir-frontend:";n.l=function(r,o,a,u){if(e[r])e[r].push(o);else{var i,s;if(void 0!==a)for(var l=document.getElementsByTagName("script"),c=0;c[(0,s._)("img",{src:n(2357),style:{"max-width":"33px","max-height":"33px"}},null,8,g)])),_:1},8,["content"])):"postgresql"==r.databaseType.toLowerCase()?((0,s.wg)(),(0,s.j4)(i,{key:1,content:r.databaseType,placement:"left"},{default:(0,s.w5)((()=>[(0,s._)("img",{src:n(3609),style:{"max-width":"33px","max-height":"33px"}},null,8,w)])),_:1},8,["content"])):((0,s.wg)(),(0,s.iD)(s.HY,{key:2},[(0,s.Uk)((0,h.zw)(r.databaseType),1)],64))}var v={props:{databaseType:String}};const y=(0,c.Z)(v,[["render",b]]);var k=y;const _=(0,r.ri)(p);Object.keys(a).forEach((e=>{_.component(e,a[e])})),_.component("database-icon",k),_.directive("require-roles",{mounted(e,t){const n=t.value;f.E.hasAnyRoles(n)||e.parentNode&&e.parentNode.removeChild(e)}}),_.directive("select-more",{updated(e,t){const n=e.querySelector(".select-trigger"),r=n.getAttribute("aria-describedby"),o=document.getElementById(r),a=o.querySelector(".el-scrollbar .el-select-dropdown__wrap");a.addEventListener("scroll",(function(){const e=this.scrollHeight-this.scrollTop-1<=this.clientHeight;e&&t.value()}))}}),_.use(i.Z),_.use(o.Z),_.use(u.Z),_.mount("#app")},9048:function(e,t,n){n.d(t,{Z:function(){return $}});var r=n(2119),o=n(6252);function a(e,t,n,r,a,u){const i=(0,o.up)("AppNav"),s=(0,o.up)("el-aside"),l=(0,o.up)("Breadcrumb"),c=(0,o.up)("Avatar"),d=(0,o.up)("el-header"),m=(0,o.up)("router-view"),p=(0,o.up)("el-main"),f=(0,o.up)("el-container");return(0,o.wg)(),(0,o.j4)(f,{class:"databasir"},{default:(0,o.w5)((()=>[(0,o.Wm)(s,null,{default:(0,o.w5)((()=>[(0,o.Wm)(i,{class:"databasir-nav"})])),_:1}),(0,o.Wm)(d,{class:"databasir-main-header"},{default:(0,o.w5)((()=>[(0,o.Wm)(l),(0,o.Wm)(c)])),_:1}),(0,o.Wm)(p,{class:"databasir-main"},{default:(0,o.w5)((()=>[(0,o.Wm)(f,null,{default:(0,o.w5)((()=>[(0,o.Wm)(p,{class:"databasir-main-content"},{default:(0,o.w5)((()=>[(0,o.Wm)(m)])),_:1})])),_:1})])),_:1})])),_:1})}var u=n(3577);const i=(0,o._)("span",null,"Databasir",-1);function s(e,t,n,r,a,s){const l=(0,o.up)("home-filled"),c=(0,o.up)("el-icon"),d=(0,o.up)("el-menu-item"),m=(0,o.up)("el-sub-menu"),p=(0,o.up)("el-menu");return(0,o.wg)(),(0,o.j4)(p,{router:"",collapse:r.isCollapse,mode:"vertical",class:"left-menu"},{default:(0,o.w5)((()=>[(0,o.Wm)(d,{index:"/"},{title:(0,o.w5)((()=>[i])),default:(0,o.w5)((()=>[(0,o.Wm)(c,null,{default:(0,o.w5)((()=>[(0,o.Wm)(l)])),_:1})])),_:1}),((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(r.routes,((e,t)=>((0,o.wg)(),(0,o.iD)(o.HY,{key:t},[r.isShowMenu(e)&&e.children.length>0&&e.children.some((e=>!e.hidden))?((0,o.wg)(),(0,o.j4)(m,{key:0,index:e.path},{title:(0,o.w5)((()=>[(0,o.Wm)(c,null,{default:(0,o.w5)((()=>[((0,o.wg)(),(0,o.j4)((0,o.LL)(e.icon)))])),_:2},1024),(0,o._)("span",null,(0,u.zw)(e.meta.nav),1)])),default:(0,o.w5)((()=>[((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(e.children,((n,r)=>((0,o.wg)(),(0,o.iD)(o.HY,{key:t+"-"+r},[n.hidden?(0,o.kq)("",!0):((0,o.wg)(),(0,o.j4)(d,{key:0,index:e.path+"/"+n.path},{title:(0,o.w5)((()=>[(0,o._)("span",null,(0,u.zw)(n.meta.nav),1)])),default:(0,o.w5)((()=>[n.icon?((0,o.wg)(),(0,o.j4)(c,{key:0},{default:(0,o.w5)((()=>[((0,o.wg)(),(0,o.j4)((0,o.LL)(n.icon)))])),_:2},1024)):(0,o.kq)("",!0)])),_:2},1032,["index"]))],64)))),128))])),_:2},1032,["index"])):r.isShowMenu(e)?((0,o.wg)(),(0,o.j4)(d,{key:1,index:e.path},{title:(0,o.w5)((()=>[(0,o._)("span",null,(0,u.zw)(e.meta.nav),1)])),default:(0,o.w5)((()=>[(0,o.Wm)(c,null,{default:(0,o.w5)((()=>[((0,o.wg)(),(0,o.j4)((0,o.LL)(e.icon)))])),_:2},1024)])),_:2},1032,["index"])):(0,o.kq)("",!0)],64)))),128))])),_:1},8,["collapse"])}var l=n(2262),c=n(1836),d=n(4239),m={setup(){const e=(0,l.Fl)((()=>d.Z.state.menu.isCollapse)),t=(0,r.tv)(),n=t.options.routes,o=e=>{if(e.hidden)return!1;if(e.meta.requireAnyRoles&&e.meta.requireAnyRoles.length>0){const t=c.E.hasAnyRoles(e.meta.requireAnyRoles);if(!t)return!1}return!0},a=()=>{d.Z.commit("expandMenu")};return{isCollapse:e,isShowMenu:o,expandMenu:a,routes:n}}},p=n(3744);const f=(0,p.Z)(m,[["render",s]]);var h=f;function g(e,t,n,r,a,i){const s=(0,o.up)("fold"),l=(0,o.up)("el-icon"),c=(0,o.up)("el-link"),d=(0,o.up)("el-breadcrumb-item"),m=(0,o.up)("el-breadcrumb");return(0,o.wg)(),(0,o.j4)(m,{separator:"/"},{default:(0,o.w5)((()=>[i.menuIsCollapse?(0,o.kq)("",!0):((0,o.wg)(),(0,o.j4)(d,{key:0},{default:(0,o.w5)((()=>[(0,o.Wm)(c,{onClick:t[0]||(t[0]=e=>i.onFoldMenu()),underline:!1},{default:(0,o.w5)((()=>[(0,o.Wm)(l,null,{default:(0,o.w5)((()=>[(0,o.Wm)(s)])),_:1})])),_:1})])),_:1})),((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(i.breadcrumbs,((e,t)=>((0,o.wg)(),(0,o.j4)(d,{key:t,to:e.to},{default:(0,o.w5)((()=>[(0,o.Uk)((0,u.zw)(e.name),1)])),_:2},1032,["to"])))),128))])),_:1})}var w={data(){},computed:{breadcrumbs:function(){return"function"===typeof this.$route.meta.breadcrumb?this.$route.meta.breadcrumb(this.$route,this.$store.state):[]},menuIsCollapse(){return this.$store.state.menu.isCollapse}},methods:{onFoldMenu(){this.$store.commit("foldMenu")}}};const b=(0,p.Z)(w,[["render",g]]);var v=b;const y=(0,o.Uk)("个人中心"),k=(0,o.Uk)("注销登陆");function _(e,t,n,r,a,i){const s=(0,o.up)("el-avatar"),l=(0,o.up)("el-dropdown-item"),c=(0,o.up)("el-dropdown-menu"),d=(0,o.up)("el-dropdown");return(0,o.wg)(),(0,o.j4)(d,null,{dropdown:(0,o.w5)((()=>[(0,o.Wm)(c,null,{default:(0,o.w5)((()=>[(0,o.Wm)(l,null,{default:(0,o.w5)((()=>[(0,o.Uk)((0,u.zw)(i.userNickname),1)])),_:1}),(0,o.Wm)(l,{icon:"user",divided:"",onClick:t[0]||(t[0]=e=>i.toProfilePage())},{default:(0,o.w5)((()=>[y])),_:1}),(0,o.Wm)(l,{icon:"back",onClick:t[1]||(t[1]=e=>i.onLogout())},{default:(0,o.w5)((()=>[k])),_:1})])),_:1})])),default:(0,o.w5)((()=>[(0,o.Wm)(s,{size:36,src:i.avatarUrl,icon:"avatar"},null,8,["src"])])),_:1})}var j={computed:{userNickname(){return this.$store.state.user.nickname},avatarUrl(){return this.$store.state.user.avatar}},methods:{onLogout(){c.E.removeUserLoginData(),this.$router.push({path:"/login"})},toProfilePage(){this.$router.push({path:"/profile"})}}};const S=(0,p.Z)(j,[["render",_]]);var A=S,L={components:{AppNav:h,Breadcrumb:v,Avatar:A}};const T=(0,p.Z)(L,[["render",a]]);var N=T;function q(){return{name:"首页",to:{path:"/"}}}function E(){return{name:"项目中心",to:{name:"groupListPage"}}}function x(e){var t="项目组";return e.query.groupName&&(t=e.query.groupName),{name:t,to:{path:"/groups/"+e.params.groupId}}}function C(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 P(){return{name:"用户列表",to:{path:"/users"}}}function I(){return{name:"个人中心",to:{path:"/profile"}}}function O(){return{name:"邮箱设置",to:{path:"/settings/sysEmail"}}}function W(){return{name:"操作日志",to:{path:"/settings/sysLog"}}}function D(){return{name:"登录设置",to:{path:"/settings/sysOauth2"}}}const M={index:()=>[q()],groupList:()=>[q(),E()],groupDashboard:(e,t)=>[q(),E(),x(e,t)],groupProjectDocument:(e,t)=>[q(),E(),x(e,t),C(e)],userProfile:()=>[q(),I()],userList:()=>[q(),P()],sysEmailEdit:()=>[q(),O()],sysLog:()=>[q(),W()],sysOauth2:()=>[q(),D()]};var U=M;const Z=[{path:"/login",component:()=>Promise.all([n.e(269),n.e(139)]).then(n.bind(n,1139)),hidden:!0,meta:{requireAuth:!1}},{path:"/login/oauth2/:id",component:()=>Promise.all([n.e(269),n.e(865)]).then(n.bind(n,8865)),hidden:!0,props:!0,meta:{requireAuth:!1}},{path:"/",hidden:!0,component:N,children:[{path:"",hidden:!0,component:()=>Promise.all([n.e(269),n.e(352)]).then(n.bind(n,2352)),meta:{breadcrumb:U.groupList}}]},{path:"/groups",icon:"Collection",component:N,meta:{nav:"项目中心"},children:[{path:"",name:"groupListPage",hidden:!0,component:()=>Promise.all([n.e(269),n.e(352)]).then(n.bind(n,2352)),meta:{breadcrumb:U.groupList}},{path:":groupId",hidden:!0,component:()=>Promise.all([n.e(269),n.e(713)]).then(n.bind(n,2713)),meta:{breadcrumb:U.groupDashboard}},{path:":groupId/projects/:projectId/documents",hidden:!0,component:()=>Promise.all([n.e(269),n.e(33)]).then(n.bind(n,3033)),meta:{breadcrumb:U.groupProjectDocument}}]},{path:"/users",icon:"List",component:N,meta:{nav:"用户中心",requireAnyRoles:["SYS_OWNER"]},children:[{path:"",hidden:!0,component:()=>Promise.all([n.e(269),n.e(719)]).then(n.bind(n,9719)),meta:{breadcrumb:U.userList}}]},{path:"/profile",icon:"User",component:N,meta:{nav:"个人中心",breadcrumb:U.userProfile},children:[{path:"",hidden:!0,component:()=>Promise.all([n.e(269),n.e(469)]).then(n.bind(n,6469))}]},{path:"/settings",icon:"Setting",component:N,meta:{nav:"系统中心",requireAnyRoles:["SYS_OWNER"]},children:[{path:"sysEmail",icon:"Notification",component:()=>Promise.all([n.e(269),n.e(596)]).then(n.bind(n,7596)),meta:{nav:"邮箱设置",breadcrumb:U.sysEmailEdit}},{path:"sysLog",icon:"Document",component:()=>Promise.all([n.e(269),n.e(99)]).then(n.bind(n,2099)),meta:{nav:"操作日志",breadcrumb:U.sysLog}},{path:"sysOauth2",icon:"Connection",component:()=>Promise.all([n.e(269),n.e(754)]).then(n.bind(n,7754)),meta:{nav:"登陆设置",breadcrumb:U.sysOauth2}},{path:"sysKey",icon:"Key",hidden:"true",component:N,meta:{nav:"系统秘钥",breadcrumb:U.sysKeyEdit}}]}],R=(0,r.p7)({history:(0,r.PO)(),routes:Z});R.beforeEach(((e,t,n)=>{0==e.meta.requireAuth?"/login"==e.path&&c.r.hasAccessToken()?n(t):n():c.r.hasAccessToken()?n():n({path:"/login"})})),R.beforeEach(((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()}));var $=R},4239:function(e,t,n){var r=n(8637),o=n(1836);const a=(0,r.MT)({state(){const e={user:{nickname:null,usernmae:null,email:null,avatar:null},groupListActiveTab:null,menu:{isCollapse:!0}},t=o.E.loadUserLoginData();return t&&(e.user.nickname=t.nickname,e.user.usernmae=t.usernmae,e.user.email=t.email,e.user.avatar=t.avatar),e},mutations:{userUpdate(e,t){t.nickname&&(e.user.nickname=t.nickname),t.usernmae&&(e.user.usernmae=t.usernmae),t.email&&(e.user.email=t.email),t.avatar&&(e.user.avatar=t.avatar)},foldMenu(e){e.menu.isCollapse=!0},expandMenu(e){e.menu.isCollapse=!1},switchGroupListActiveTab(e,t){t&&(e.groupListActiveTab=t)}}});t["Z"]=a},1836:function(e,t,n){n.d(t,{r:function(){return u},E:function(){return i}});const r="accessToken",o="accessTokenExpireAt",a="userLoginData",u={hasAccessToken(){const e=this.loadAccessToken();return e},hasValidAccessToken(){const e=this.loadAccessToken(),t=window.localStorage.getItem(o);return e&&t?t>(new Date).getTime():(console.log("warn: not found accessToken and expireAt key"),!1)},saveAccessToken(e,t){window.localStorage.setItem(r,e),window.localStorage.setItem(o,t)},loadAccessToken(){let e=window.localStorage.getItem(r);return e||null}},i={saveUserLoginData(e){window.localStorage.setItem(r,e.accessToken),window.localStorage.setItem(o,e.accessTokenExpireAt),window.localStorage.setItem(a,JSON.stringify(e))},removeUserLoginData(){window.localStorage.removeItem(a),window.localStorage.removeItem(r),window.localStorage.removeItem(o)},loadUserLoginData(){if(!window.localStorage.getItem(a))return null;const e=window.localStorage.getItem(a);return JSON.parse(e)},hasAnyRoles(e){const t=window.localStorage.getItem(a);if(null==t)return!1;const n=JSON.parse(t);return n.roles.map((e=>e.groupId?e.role+"?groupId="+e.groupId:e.role)).some((t=>e.some((e=>e==t))))},getRefreshToken(){const e=window.localStorage.getItem(a);if(null==e)return null;const t=JSON.parse(e);return t.refreshToken}}},2357:function(e,t,n){e.exports=n.p+"img/MySQL.c8f47618.svg"},3609:function(e,t,n){e.exports=n.p+"img/PostgreSQL.6e3d3a5e.svg"}},t={};function n(r){var o=t[r];if(void 0!==o)return o.exports;var a=t[r]={id:r,loaded:!1,exports:{}};return e[r].call(a.exports,a,a.exports,n),a.loaded=!0,a.exports}n.m=e,function(){var e=[];n.O=function(t,r,o,a){if(!r){var u=1/0;for(c=0;c=a)&&Object.keys(n.O).every((function(e){return n.O[e](r[s])}))?r.splice(s--,1):(i=!1,a0&&e[c-1][2]>a;c--)e[c]=e[c-1];e[c]=[r,o,a]}}(),function(){n.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return n.d(t,{a:t}),t}}(),function(){n.d=function(e,t){for(var r in t)n.o(t,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})}}(),function(){n.f={},n.e=function(e){return Promise.all(Object.keys(n.f).reduce((function(t,r){return n.f[r](e,t),t}),[]))}}(),function(){n.u=function(e){return"js/"+e+"."+{33:"cac6bbd9",99:"c134b829",139:"909d89d2",269:"8e27371c",352:"2b068778",469:"8c3ea567",596:"afe6b2d4",713:"b4144758",719:"df03c200",754:"d037cc5e",865:"ebbb1893"}[e]+".js"}}(),function(){n.miniCssF=function(e){return"css/"+e+"."+{33:"1dda4c12",139:"a7dec339",352:"356dcf0b",713:"82a2f213",865:"7df1e56e"}[e]+".css"}}(),function(){n.g=function(){if("object"===typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"===typeof window)return window}}()}(),function(){n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)}}(),function(){var e={},t="databasir-frontend:";n.l=function(r,o,a,u){if(e[r])e[r].push(o);else{var i,s;if(void 0!==a)for(var l=document.getElementsByTagName("script"),c=0;c\r\n \r\n\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\\\\dist\\\\exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\r\n\r\n\r\n\r\n","import { render } from \"./DatabaseIcon.vue?vue&type=template&id=154abc1d\"\nimport script from \"./DatabaseIcon.vue?vue&type=script&lang=js\"\nexport * from \"./DatabaseIcon.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"E:\\\\git_workspace\\\\databasir-frontend\\\\node_modules\\\\vue-loader\\\\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\nimport DatabaseIcon from './components/DatabaseIcon.vue'\r\n\r\n// element icon\r\nconst app = createApp(App)\r\nObject.keys(Icons).forEach(key => {\r\n app.component(key, Icons[key])\r\n})\r\napp.component('database-icon', DatabaseIcon)\r\n\r\n// permission directive\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\n// custom select directive\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","\r\n\r\n\r\n","\r\n\r\n","import { render } from \"./AppNav.vue?vue&type=template&id=2cfaad82\"\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=2cfaad82&lang=css\"\n\nimport exportComponent from \"E:\\\\git_workspace\\\\databasir-frontend\\\\node_modules\\\\vue-loader\\\\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\\\\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=34a219c2\"\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\\\\dist\\\\exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { render } from \"./Layout.vue?vue&type=template&id=6923c0fa\"\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=6923c0fa&lang=css\"\n\nimport exportComponent from \"E:\\\\git_workspace\\\\databasir-frontend\\\\node_modules\\\\vue-loader\\\\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\nfunction sysLog() {\r\n return {\r\n name:'操作日志',\r\n to: {\r\n path: '/settings/sysLog'\r\n } \r\n }\r\n}\r\n\r\nfunction sysOauth2() {\r\n return {\r\n name:'登录设置',\r\n to: {\r\n path: '/settings/sysOauth2'\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 sysLog: () => [index(), sysLog()],\r\n sysOauth2: () => [index(), sysOauth2()],\r\n\r\n}\r\n\r\nexport default breadcurmbMap","import { createRouter, createWebHistory } 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: '/login/oauth2/:id',\r\n component: () => import('@/views/OAuth2Login.vue'),\r\n hidden: true,\r\n props: 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 {\r\n path: 'sysLog',\r\n icon: 'Document',\r\n component: () => import('@/views/SysLog.vue'),\r\n meta: {\r\n nav: '操作日志',\r\n breadcrumb: breadcurmbMap.sysLog\r\n }\r\n },\r\n {\r\n path: 'sysOauth2',\r\n icon: 'Connection',\r\n component: () => import('@/views/SysOauth2.vue'),\r\n meta: {\r\n nav: '登陆设置',\r\n breadcrumb: breadcurmbMap.sysOauth2\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: createWebHistory(),\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;","import { createStore } from 'vuex'\r\nimport { user } from '../utils/auth'\r\n\r\nconst store = createStore({\r\n state() {\r\n const data = {\r\n user: {\r\n nickname: null,\r\n usernmae: null,\r\n email: null,\r\n avatar: null,\r\n },\r\n groupListActiveTab: null,\r\n menu: {\r\n isCollapse: true,\r\n }\r\n }\r\n const loginData = user.loadUserLoginData()\r\n if (loginData) {\r\n data.user.nickname = loginData.nickname\r\n data.user.usernmae = loginData.usernmae\r\n data.user.email = loginData.email\r\n data.user.avatar = loginData.avatar\r\n }\r\n return data;\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 if (param.avatar) {\r\n state.user.avatar = param.avatar\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 switchGroupListActiveTab(state, groupListActiveTab) {\r\n if (groupListActiveTab) {\r\n state.groupListActiveTab = groupListActiveTab\r\n }\r\n }\r\n }\r\n})\r\n\r\nexport default store","const accessTokenKey = 'accessToken'\r\nconst accessTokenExpireAtKey = 'accessTokenExpireAt'\r\nconst userLoginDataKey = 'userLoginData'\r\n\r\nexport const token = {\r\n\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 let token = window.localStorage.getItem(accessTokenKey)\r\n if (token) {\r\n return token\r\n }\r\n return null\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 } \r\n const data = window.localStorage.getItem(userLoginDataKey)\r\n return JSON.parse(data)\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","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","var deferred = [];\n__webpack_require__.O = function(result, chunkIds, fn, priority) {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar chunkIds = deferred[i][0];\n\t\tvar fn = deferred[i][1];\n\t\tvar priority = deferred[i][2];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every(function(key) { return __webpack_require__.O[key](chunkIds[j]); })) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = function(chunkId) {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce(function(promises, key) {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = function(chunkId) {\n\t// return url for filenames based on template\n\treturn \"js/\" + chunkId + \".\" + {\"33\":\"cac6bbd9\",\"139\":\"909d89d2\",\"269\":\"8e27371c\",\"352\":\"2b068778\",\"469\":\"8c3ea567\",\"596\":\"afe6b2d4\",\"713\":\"b4144758\",\"719\":\"df03c200\",\"754\":\"d037cc5e\",\"865\":\"ebbb1893\",\"940\":\"0286114f\"}[chunkId] + \".js\";\n};","// This function allow to reference async chunks\n__webpack_require__.miniCssF = function(chunkId) {\n\t// return url for filenames based on template\n\treturn \"css/\" + chunkId + \".\" + {\"33\":\"1dda4c12\",\"139\":\"a7dec339\",\"352\":\"356dcf0b\",\"713\":\"82a2f213\",\"865\":\"7df1e56e\"}[chunkId] + \".css\";\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","var inProgress = {};\nvar dataWebpackPrefix = \"databasir-frontend:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = function(url, done, key, chunkId) {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tscript.timeout = 120;\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = function(prev, event) {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach(function(fn) { return fn(event); });\n\t\tif(prev) return prev(event);\n\t}\n\t;\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = function(module) {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.p = \"/\";","var createStylesheet = function(chunkId, fullhref, resolve, reject) {\n\tvar linkTag = document.createElement(\"link\");\n\n\tlinkTag.rel = \"stylesheet\";\n\tlinkTag.type = \"text/css\";\n\tvar onLinkComplete = function(event) {\n\t\t// avoid mem leaks.\n\t\tlinkTag.onerror = linkTag.onload = null;\n\t\tif (event.type === 'load') {\n\t\t\tresolve();\n\t\t} else {\n\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\tvar realHref = event && event.target && event.target.href || fullhref;\n\t\t\tvar err = new Error(\"Loading CSS chunk \" + chunkId + \" failed.\\n(\" + realHref + \")\");\n\t\t\terr.code = \"CSS_CHUNK_LOAD_FAILED\";\n\t\t\terr.type = errorType;\n\t\t\terr.request = realHref;\n\t\t\tlinkTag.parentNode.removeChild(linkTag)\n\t\t\treject(err);\n\t\t}\n\t}\n\tlinkTag.onerror = linkTag.onload = onLinkComplete;\n\tlinkTag.href = fullhref;\n\n\tdocument.head.appendChild(linkTag);\n\treturn linkTag;\n};\nvar findStylesheet = function(href, fullhref) {\n\tvar existingLinkTags = document.getElementsByTagName(\"link\");\n\tfor(var i = 0; i < existingLinkTags.length; i++) {\n\t\tvar tag = existingLinkTags[i];\n\t\tvar dataHref = tag.getAttribute(\"data-href\") || tag.getAttribute(\"href\");\n\t\tif(tag.rel === \"stylesheet\" && (dataHref === href || dataHref === fullhref)) return tag;\n\t}\n\tvar existingStyleTags = document.getElementsByTagName(\"style\");\n\tfor(var i = 0; i < existingStyleTags.length; i++) {\n\t\tvar tag = existingStyleTags[i];\n\t\tvar dataHref = tag.getAttribute(\"data-href\");\n\t\tif(dataHref === href || dataHref === fullhref) return tag;\n\t}\n};\nvar loadStylesheet = function(chunkId) {\n\treturn new Promise(function(resolve, reject) {\n\t\tvar href = __webpack_require__.miniCssF(chunkId);\n\t\tvar fullhref = __webpack_require__.p + href;\n\t\tif(findStylesheet(href, fullhref)) return resolve();\n\t\tcreateStylesheet(chunkId, fullhref, resolve, reject);\n\t});\n}\n// object to store loaded CSS chunks\nvar installedCssChunks = {\n\t143: 0\n};\n\n__webpack_require__.f.miniCss = function(chunkId, promises) {\n\tvar cssChunks = {\"33\":1,\"139\":1,\"352\":1,\"713\":1,\"865\":1};\n\tif(installedCssChunks[chunkId]) promises.push(installedCssChunks[chunkId]);\n\telse if(installedCssChunks[chunkId] !== 0 && cssChunks[chunkId]) {\n\t\tpromises.push(installedCssChunks[chunkId] = loadStylesheet(chunkId).then(function() {\n\t\t\tinstalledCssChunks[chunkId] = 0;\n\t\t}, function(e) {\n\t\t\tdelete installedCssChunks[chunkId];\n\t\t\tthrow e;\n\t\t}));\n\t}\n};\n\n// no hmr","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t143: 0\n};\n\n__webpack_require__.f.j = function(chunkId, promises) {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\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\tif(true) { // all chunks have JS\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise(function(resolve, reject) { installedChunkData = installedChunks[chunkId] = [resolve, reject]; });\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = function(event) {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t} else installedChunks[chunkId] = 0;\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = function(chunkId) { return installedChunks[chunkId] === 0; };\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = function(parentChunkLoadingFunction, data) {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some(function(id) { return installedChunks[id] !== 0; })) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunkdatabasir_frontend\"] = self[\"webpackChunkdatabasir_frontend\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [998], function() { return __webpack_require__(3710); })\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["_createBlock","_component_router_view","script","__exports__","render","$props","toLowerCase","_component_el_tooltip","content","placement","_createElementVNode","src","require","style","_createElementBlock","_Fragment","key","props","databaseType","String","app","createApp","App","Object","keys","Icons","forEach","component","DatabaseIcon","directive","mounted","el","binding","roles","value","user","parentNode","removeChild","updated","child","querySelector","id","getAttribute","poper","document","getElementById","selector","addEventListener","condition","this","scrollHeight","scrollTop","clientHeight","use","store","ElementPlus","router","mount","_component_el_container","class","_createVNode","_component_el_aside","_component_AppNav","_component_el_header","_component_Breadcrumb","_component_Avatar","_component_el_main","_component_el_menu","collapse","$setup","mode","_component_el_menu_item","index","title","_hoisted_1","_component_el_icon","_component_home_filled","_renderList","menu","children","length","some","ele","hidden","_component_el_sub_menu","path","_resolveDynamicComponent","icon","_toDisplayString","meta","nav","childIndex","setup","isCollapse","computed","useRouter","routes","options","isShowMenu","requireAnyRoles","hasAnyRoles","expandMenu","_component_el_breadcrumb","separator","$options","_component_el_breadcrumb_item","_component_el_link","onClick","underline","_component_fold","item","to","name","data","breadcrumbs","$route","breadcrumb","$store","state","menuIsCollapse","methods","onFoldMenu","commit","_component_el_dropdown","dropdown","_component_el_dropdown_menu","_component_el_dropdown_item","divided","_component_el_avatar","size","userNickname","nickname","avatarUrl","avatar","onLogout","$router","push","toProfilePage","components","AppNav","Breadcrumb","Avatar","groupList","groupDashboard","route","groupName","query","params","groupId","groupProjectDocument","projectName","projectId","userList","userProfile","sysEmailEdit","sysLog","sysOauth2","breadcurmbMap","requireAuth","Layout","createRouter","history","createWebHistory","beforeEach","from","next","token","createStore","usernmae","email","groupListActiveTab","loginData","mutations","userUpdate","param","foldMenu","switchGroupListActiveTab","accessTokenKey","accessTokenExpireAtKey","userLoginDataKey","hasAccessToken","accessToken","loadAccessToken","hasValidAccessToken","expireAt","window","localStorage","getItem","Date","getTime","console","log","saveAccessToken","tokenExpireAt","setItem","saveUserLoginData","userLoginData","accessTokenExpireAt","JSON","stringify","removeUserLoginData","removeItem","loadUserLoginData","parse","map","role","exists","expected","getRefreshToken","refreshToken","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","exports","module","loaded","__webpack_modules__","call","m","deferred","O","result","chunkIds","fn","priority","notFulfilled","Infinity","i","fulfilled","j","every","splice","r","n","getter","__esModule","d","a","definition","o","defineProperty","enumerable","get","f","e","chunkId","Promise","all","reduce","promises","u","miniCssF","g","globalThis","Function","obj","prop","prototype","hasOwnProperty","inProgress","dataWebpackPrefix","l","url","done","needAttach","scripts","getElementsByTagName","s","createElement","charset","timeout","nc","setAttribute","onScriptComplete","prev","event","onerror","onload","clearTimeout","doneFns","setTimeout","bind","type","target","head","appendChild","Symbol","toStringTag","nmd","paths","p","createStylesheet","fullhref","resolve","reject","linkTag","rel","onLinkComplete","errorType","realHref","href","err","Error","code","request","findStylesheet","existingLinkTags","tag","dataHref","existingStyleTags","loadStylesheet","installedCssChunks","miniCss","cssChunks","then","installedChunks","installedChunkData","promise","error","loadingEnded","realSrc","message","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","chunkLoadingGlobal","self","__webpack_exports__"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"js/app.16e9daea.js","mappings":"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","sources":["webpack://databasir-frontend/./src/App.vue","webpack://databasir-frontend/./src/App.vue?7ccd","webpack://databasir-frontend/./src/components/DatabaseIcon.vue","webpack://databasir-frontend/./src/components/DatabaseIcon.vue?d57f","webpack://databasir-frontend/./src/main.js","webpack://databasir-frontend/./src/layouts/Layout.vue","webpack://databasir-frontend/./src/components/AppNav.vue","webpack://databasir-frontend/./src/components/AppNav.vue?b6ff","webpack://databasir-frontend/./src/components/Breadcrumb.vue","webpack://databasir-frontend/./src/components/Breadcrumb.vue?ef20","webpack://databasir-frontend/./src/components/Avatar.vue","webpack://databasir-frontend/./src/components/Avatar.vue?e66a","webpack://databasir-frontend/./src/layouts/Layout.vue?7cb6","webpack://databasir-frontend/./src/router/breadcurmb.js","webpack://databasir-frontend/./src/router/index.js","webpack://databasir-frontend/./src/store/index.js","webpack://databasir-frontend/./src/utils/auth.js","webpack://databasir-frontend/webpack/bootstrap","webpack://databasir-frontend/webpack/runtime/chunk loaded","webpack://databasir-frontend/webpack/runtime/compat get default export","webpack://databasir-frontend/webpack/runtime/define property getters","webpack://databasir-frontend/webpack/runtime/ensure chunk","webpack://databasir-frontend/webpack/runtime/get javascript chunk filename","webpack://databasir-frontend/webpack/runtime/get mini-css chunk filename","webpack://databasir-frontend/webpack/runtime/global","webpack://databasir-frontend/webpack/runtime/hasOwnProperty shorthand","webpack://databasir-frontend/webpack/runtime/load script","webpack://databasir-frontend/webpack/runtime/make namespace object","webpack://databasir-frontend/webpack/runtime/node module decorator","webpack://databasir-frontend/webpack/runtime/publicPath","webpack://databasir-frontend/webpack/runtime/css loading","webpack://databasir-frontend/webpack/runtime/jsonp chunk loading","webpack://databasir-frontend/webpack/startup"],"sourcesContent":["\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\\\\dist\\\\exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\r\n\r\n\r\n\r\n","import { render } from \"./DatabaseIcon.vue?vue&type=template&id=154abc1d\"\nimport script from \"./DatabaseIcon.vue?vue&type=script&lang=js\"\nexport * from \"./DatabaseIcon.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"E:\\\\git_workspace\\\\databasir-frontend\\\\node_modules\\\\vue-loader\\\\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\nimport DatabaseIcon from './components/DatabaseIcon.vue'\r\n\r\n// element icon\r\nconst app = createApp(App)\r\nObject.keys(Icons).forEach(key => {\r\n app.component(key, Icons[key])\r\n})\r\napp.component('database-icon', DatabaseIcon)\r\n\r\n// permission directive\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\n// custom select directive\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","\r\n\r\n\r\n","\r\n\r\n","import { render } from \"./AppNav.vue?vue&type=template&id=2cfaad82\"\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=2cfaad82&lang=css\"\n\nimport exportComponent from \"E:\\\\git_workspace\\\\databasir-frontend\\\\node_modules\\\\vue-loader\\\\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\\\\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=34a219c2\"\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\\\\dist\\\\exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { render } from \"./Layout.vue?vue&type=template&id=6923c0fa\"\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=6923c0fa&lang=css\"\n\nimport exportComponent from \"E:\\\\git_workspace\\\\databasir-frontend\\\\node_modules\\\\vue-loader\\\\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\nfunction sysLog() {\r\n return {\r\n name:'操作日志',\r\n to: {\r\n path: '/settings/sysLog'\r\n } \r\n }\r\n}\r\n\r\nfunction sysOauth2() {\r\n return {\r\n name:'登录设置',\r\n to: {\r\n path: '/settings/sysOauth2'\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 sysLog: () => [index(), sysLog()],\r\n sysOauth2: () => [index(), sysOauth2()],\r\n\r\n}\r\n\r\nexport default breadcurmbMap","import { createRouter, createWebHistory } 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: '/login/oauth2/:id',\r\n component: () => import('@/views/OAuth2Login.vue'),\r\n hidden: true,\r\n props: 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 {\r\n path: 'sysLog',\r\n icon: 'Document',\r\n component: () => import('@/views/SysLog.vue'),\r\n meta: {\r\n nav: '操作日志',\r\n breadcrumb: breadcurmbMap.sysLog\r\n }\r\n },\r\n {\r\n path: 'sysOauth2',\r\n icon: 'Connection',\r\n component: () => import('@/views/SysOauth2.vue'),\r\n meta: {\r\n nav: '登陆设置',\r\n breadcrumb: breadcurmbMap.sysOauth2\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: createWebHistory(),\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;","import { createStore } from 'vuex'\r\nimport { user } from '../utils/auth'\r\n\r\nconst store = createStore({\r\n state() {\r\n const data = {\r\n user: {\r\n nickname: null,\r\n usernmae: null,\r\n email: null,\r\n avatar: null,\r\n },\r\n groupListActiveTab: null,\r\n menu: {\r\n isCollapse: true,\r\n }\r\n }\r\n const loginData = user.loadUserLoginData()\r\n if (loginData) {\r\n data.user.nickname = loginData.nickname\r\n data.user.usernmae = loginData.usernmae\r\n data.user.email = loginData.email\r\n data.user.avatar = loginData.avatar\r\n }\r\n return data;\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 if (param.avatar) {\r\n state.user.avatar = param.avatar\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 switchGroupListActiveTab(state, groupListActiveTab) {\r\n if (groupListActiveTab) {\r\n state.groupListActiveTab = groupListActiveTab\r\n }\r\n }\r\n }\r\n})\r\n\r\nexport default store","const accessTokenKey = 'accessToken'\r\nconst accessTokenExpireAtKey = 'accessTokenExpireAt'\r\nconst userLoginDataKey = 'userLoginData'\r\n\r\nexport const token = {\r\n\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 let token = window.localStorage.getItem(accessTokenKey)\r\n if (token) {\r\n return token\r\n }\r\n return null\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 } \r\n const data = window.localStorage.getItem(userLoginDataKey)\r\n return JSON.parse(data)\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","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","var deferred = [];\n__webpack_require__.O = function(result, chunkIds, fn, priority) {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar chunkIds = deferred[i][0];\n\t\tvar fn = deferred[i][1];\n\t\tvar priority = deferred[i][2];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every(function(key) { return __webpack_require__.O[key](chunkIds[j]); })) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = function(chunkId) {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce(function(promises, key) {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = function(chunkId) {\n\t// return url for filenames based on template\n\treturn \"js/\" + chunkId + \".\" + {\"33\":\"cac6bbd9\",\"99\":\"c134b829\",\"139\":\"909d89d2\",\"269\":\"8e27371c\",\"352\":\"2b068778\",\"469\":\"8c3ea567\",\"596\":\"afe6b2d4\",\"713\":\"b4144758\",\"719\":\"df03c200\",\"754\":\"d037cc5e\",\"865\":\"ebbb1893\"}[chunkId] + \".js\";\n};","// This function allow to reference async chunks\n__webpack_require__.miniCssF = function(chunkId) {\n\t// return url for filenames based on template\n\treturn \"css/\" + chunkId + \".\" + {\"33\":\"1dda4c12\",\"139\":\"a7dec339\",\"352\":\"356dcf0b\",\"713\":\"82a2f213\",\"865\":\"7df1e56e\"}[chunkId] + \".css\";\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","var inProgress = {};\nvar dataWebpackPrefix = \"databasir-frontend:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = function(url, done, key, chunkId) {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tscript.timeout = 120;\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = function(prev, event) {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach(function(fn) { return fn(event); });\n\t\tif(prev) return prev(event);\n\t}\n\t;\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = function(module) {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.p = \"/\";","var createStylesheet = function(chunkId, fullhref, resolve, reject) {\n\tvar linkTag = document.createElement(\"link\");\n\n\tlinkTag.rel = \"stylesheet\";\n\tlinkTag.type = \"text/css\";\n\tvar onLinkComplete = function(event) {\n\t\t// avoid mem leaks.\n\t\tlinkTag.onerror = linkTag.onload = null;\n\t\tif (event.type === 'load') {\n\t\t\tresolve();\n\t\t} else {\n\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\tvar realHref = event && event.target && event.target.href || fullhref;\n\t\t\tvar err = new Error(\"Loading CSS chunk \" + chunkId + \" failed.\\n(\" + realHref + \")\");\n\t\t\terr.code = \"CSS_CHUNK_LOAD_FAILED\";\n\t\t\terr.type = errorType;\n\t\t\terr.request = realHref;\n\t\t\tlinkTag.parentNode.removeChild(linkTag)\n\t\t\treject(err);\n\t\t}\n\t}\n\tlinkTag.onerror = linkTag.onload = onLinkComplete;\n\tlinkTag.href = fullhref;\n\n\tdocument.head.appendChild(linkTag);\n\treturn linkTag;\n};\nvar findStylesheet = function(href, fullhref) {\n\tvar existingLinkTags = document.getElementsByTagName(\"link\");\n\tfor(var i = 0; i < existingLinkTags.length; i++) {\n\t\tvar tag = existingLinkTags[i];\n\t\tvar dataHref = tag.getAttribute(\"data-href\") || tag.getAttribute(\"href\");\n\t\tif(tag.rel === \"stylesheet\" && (dataHref === href || dataHref === fullhref)) return tag;\n\t}\n\tvar existingStyleTags = document.getElementsByTagName(\"style\");\n\tfor(var i = 0; i < existingStyleTags.length; i++) {\n\t\tvar tag = existingStyleTags[i];\n\t\tvar dataHref = tag.getAttribute(\"data-href\");\n\t\tif(dataHref === href || dataHref === fullhref) return tag;\n\t}\n};\nvar loadStylesheet = function(chunkId) {\n\treturn new Promise(function(resolve, reject) {\n\t\tvar href = __webpack_require__.miniCssF(chunkId);\n\t\tvar fullhref = __webpack_require__.p + href;\n\t\tif(findStylesheet(href, fullhref)) return resolve();\n\t\tcreateStylesheet(chunkId, fullhref, resolve, reject);\n\t});\n}\n// object to store loaded CSS chunks\nvar installedCssChunks = {\n\t143: 0\n};\n\n__webpack_require__.f.miniCss = function(chunkId, promises) {\n\tvar cssChunks = {\"33\":1,\"139\":1,\"352\":1,\"713\":1,\"865\":1};\n\tif(installedCssChunks[chunkId]) promises.push(installedCssChunks[chunkId]);\n\telse if(installedCssChunks[chunkId] !== 0 && cssChunks[chunkId]) {\n\t\tpromises.push(installedCssChunks[chunkId] = loadStylesheet(chunkId).then(function() {\n\t\t\tinstalledCssChunks[chunkId] = 0;\n\t\t}, function(e) {\n\t\t\tdelete installedCssChunks[chunkId];\n\t\t\tthrow e;\n\t\t}));\n\t}\n};\n\n// no hmr","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t143: 0\n};\n\n__webpack_require__.f.j = function(chunkId, promises) {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\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\tif(true) { // all chunks have JS\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise(function(resolve, reject) { installedChunkData = installedChunks[chunkId] = [resolve, reject]; });\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = function(event) {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t} else installedChunks[chunkId] = 0;\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = function(chunkId) { return installedChunks[chunkId] === 0; };\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = function(parentChunkLoadingFunction, data) {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some(function(id) { return installedChunks[id] !== 0; })) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunkdatabasir_frontend\"] = self[\"webpackChunkdatabasir_frontend\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [998], function() { return __webpack_require__(3710); })\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["_createBlock","_component_router_view","script","__exports__","render","$props","toLowerCase","_component_el_tooltip","content","placement","_createElementVNode","src","require","style","_createElementBlock","_Fragment","key","props","databaseType","String","app","createApp","App","Object","keys","Icons","forEach","component","DatabaseIcon","directive","mounted","el","binding","roles","value","user","parentNode","removeChild","updated","child","querySelector","id","getAttribute","poper","document","getElementById","selector","addEventListener","condition","this","scrollHeight","scrollTop","clientHeight","use","store","ElementPlus","router","mount","_component_el_container","class","_createVNode","_component_el_aside","_component_AppNav","_component_el_header","_component_Breadcrumb","_component_Avatar","_component_el_main","_component_el_menu","collapse","$setup","mode","_component_el_menu_item","index","title","_hoisted_1","_component_el_icon","_component_home_filled","_renderList","menu","children","length","some","ele","hidden","_component_el_sub_menu","path","_resolveDynamicComponent","icon","_toDisplayString","meta","nav","childIndex","setup","isCollapse","computed","useRouter","routes","options","isShowMenu","requireAnyRoles","hasAnyRoles","expandMenu","_component_el_breadcrumb","separator","$options","_component_el_breadcrumb_item","_component_el_link","onClick","underline","_component_fold","item","to","name","data","breadcrumbs","$route","breadcrumb","$store","state","menuIsCollapse","methods","onFoldMenu","commit","_component_el_dropdown","dropdown","_component_el_dropdown_menu","_component_el_dropdown_item","divided","_component_el_avatar","size","userNickname","nickname","avatarUrl","avatar","onLogout","$router","push","toProfilePage","components","AppNav","Breadcrumb","Avatar","groupList","groupDashboard","route","groupName","query","params","groupId","groupProjectDocument","projectName","projectId","userList","userProfile","sysEmailEdit","sysLog","sysOauth2","breadcurmbMap","requireAuth","Layout","createRouter","history","createWebHistory","beforeEach","from","next","token","createStore","usernmae","email","groupListActiveTab","loginData","mutations","userUpdate","param","foldMenu","switchGroupListActiveTab","accessTokenKey","accessTokenExpireAtKey","userLoginDataKey","hasAccessToken","accessToken","loadAccessToken","hasValidAccessToken","expireAt","window","localStorage","getItem","Date","getTime","console","log","saveAccessToken","tokenExpireAt","setItem","saveUserLoginData","userLoginData","accessTokenExpireAt","JSON","stringify","removeUserLoginData","removeItem","loadUserLoginData","parse","map","role","exists","expected","getRefreshToken","refreshToken","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","exports","module","loaded","__webpack_modules__","call","m","deferred","O","result","chunkIds","fn","priority","notFulfilled","Infinity","i","fulfilled","j","every","splice","r","n","getter","__esModule","d","a","definition","o","defineProperty","enumerable","get","f","e","chunkId","Promise","all","reduce","promises","u","miniCssF","g","globalThis","Function","obj","prop","prototype","hasOwnProperty","inProgress","dataWebpackPrefix","l","url","done","needAttach","scripts","getElementsByTagName","s","createElement","charset","timeout","nc","setAttribute","onScriptComplete","prev","event","onerror","onload","clearTimeout","doneFns","setTimeout","bind","type","target","head","appendChild","Symbol","toStringTag","nmd","paths","p","createStylesheet","fullhref","resolve","reject","linkTag","rel","onLinkComplete","errorType","realHref","href","err","Error","code","request","findStylesheet","existingLinkTags","tag","dataHref","existingStyleTags","loadStylesheet","installedCssChunks","miniCss","cssChunks","then","installedChunks","installedChunkData","promise","error","loadingEnded","realSrc","message","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","chunkLoadingGlobal","self","__webpack_exports__"],"sourceRoot":""} \ No newline at end of file diff --git a/core/src/main/java/com/databasir/core/domain/log/annotation/Operation.java b/core/src/main/java/com/databasir/core/domain/log/annotation/Operation.java index 17bfa21..9c3d0f5 100644 --- a/core/src/main/java/com/databasir/core/domain/log/annotation/Operation.java +++ b/core/src/main/java/com/databasir/core/domain/log/annotation/Operation.java @@ -33,6 +33,7 @@ public @interface Operation { String PROJECT = "project"; String USER = "user"; String GROUP = "group"; + String LOGIN_APP = "login_app"; String SETTING = "setting"; } diff --git a/core/src/main/java/com/databasir/core/domain/log/converter/OperationLogPojoConverter.java b/core/src/main/java/com/databasir/core/domain/log/converter/OperationLogPojoConverter.java index e69349d..58fc027 100644 --- a/core/src/main/java/com/databasir/core/domain/log/converter/OperationLogPojoConverter.java +++ b/core/src/main/java/com/databasir/core/domain/log/converter/OperationLogPojoConverter.java @@ -2,12 +2,41 @@ package com.databasir.core.domain.log.converter; import com.databasir.core.domain.log.data.OperationLogPageResponse; import com.databasir.core.infrastructure.converter.JsonConverter; +import com.databasir.dao.tables.pojos.GroupPojo; import com.databasir.dao.tables.pojos.OperationLogPojo; +import com.databasir.dao.tables.pojos.ProjectPojo; +import com.databasir.dao.tables.pojos.UserPojo; import org.mapstruct.Mapper; +import org.mapstruct.Mapping; + +import java.util.Map; @Mapper(componentModel = "spring", uses = JsonConverter.class) public interface OperationLogPojoConverter { - OperationLogPageResponse to(OperationLogPojo pojo); + @Mapping(target = "id", source = "pojo.id") + @Mapping(target = "createAt", source = "pojo.createAt") + OperationLogPageResponse to(OperationLogPojo pojo, + GroupPojo involvedGroup, + UserPojo involvedUser, + ProjectPojo involvedProject); + default OperationLogPageResponse to(OperationLogPojo operationLogPojo, + Map groupMapById, + Map userMapById, + Map projectMapById) { + GroupPojo group = null; + if (operationLogPojo.getInvolvedGroupId() != null) { + group = groupMapById.get(operationLogPojo.getInvolvedGroupId()); + } + UserPojo user = null; + if (operationLogPojo.getInvolvedUserId() != null) { + user = userMapById.get(operationLogPojo.getInvolvedUserId()); + } + ProjectPojo project = null; + if (operationLogPojo.getInvolvedProjectId() != null) { + project = projectMapById.get(operationLogPojo.getInvolvedProjectId()); + } + return to(operationLogPojo, group, user, project); + } } diff --git a/core/src/main/java/com/databasir/core/domain/log/data/OperationLogPageResponse.java b/core/src/main/java/com/databasir/core/domain/log/data/OperationLogPageResponse.java index be94bf1..5047b93 100644 --- a/core/src/main/java/com/databasir/core/domain/log/data/OperationLogPageResponse.java +++ b/core/src/main/java/com/databasir/core/domain/log/data/OperationLogPageResponse.java @@ -1,8 +1,10 @@ package com.databasir.core.domain.log.data; import com.databasir.common.JsonData; +import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; +import lombok.NoArgsConstructor; import java.time.LocalDateTime; @@ -28,12 +30,43 @@ public class OperationLogPageResponse { private Boolean isSuccess; - private Integer involvedProjectId; + private InvolvedProjectData involvedProject; - private Integer involvedGroupId; + private InvolvedGroupData involvedGroup; - private Integer involvedUserId; + private InvolvedUserData involvedUser; private LocalDateTime createAt; + @Data + @NoArgsConstructor + @AllArgsConstructor + public static class InvolvedProjectData { + + private Integer id; + + private String name; + } + + @Data + @NoArgsConstructor + @AllArgsConstructor + public static class InvolvedGroupData { + + private Integer id; + + private String name; + } + + @Data + @NoArgsConstructor + @AllArgsConstructor + public static class InvolvedUserData { + + private Integer id; + + private String email; + + private String nickname; + } } diff --git a/core/src/main/java/com/databasir/core/domain/log/service/OperationLogService.java b/core/src/main/java/com/databasir/core/domain/log/service/OperationLogService.java index ccd990f..f62544e 100644 --- a/core/src/main/java/com/databasir/core/domain/log/service/OperationLogService.java +++ b/core/src/main/java/com/databasir/core/domain/log/service/OperationLogService.java @@ -5,19 +5,36 @@ import com.databasir.core.domain.log.converter.OperationLogRequestConverter; import com.databasir.core.domain.log.data.OperationLogPageCondition; import com.databasir.core.domain.log.data.OperationLogPageResponse; import com.databasir.core.domain.log.data.OperationLogRequest; +import com.databasir.dao.impl.GroupDao; import com.databasir.dao.impl.OperationLogDao; +import com.databasir.dao.impl.ProjectDao; +import com.databasir.dao.impl.UserDao; +import com.databasir.dao.tables.pojos.GroupPojo; import com.databasir.dao.tables.pojos.OperationLogPojo; +import com.databasir.dao.tables.pojos.ProjectPojo; +import com.databasir.dao.tables.pojos.UserPojo; import lombok.RequiredArgsConstructor; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; +import java.util.List; +import java.util.Map; +import java.util.function.Function; +import java.util.stream.Collectors; + @Service @RequiredArgsConstructor public class OperationLogService { private final OperationLogDao operationLogDao; + private final UserDao userDao; + + private final GroupDao groupDao; + + private final ProjectDao projectDao; + private final OperationLogRequestConverter operationLogRequestConverter; private final OperationLogPojoConverter operationLogPojoConverter; @@ -30,6 +47,26 @@ public class OperationLogService { public Page list(Pageable page, OperationLogPageCondition condition) { Page pojoData = operationLogDao.selectByPage(page, condition.toCondition()); - return pojoData.map(operationLogPojoConverter::to); + List groupIds = pojoData.filter(p -> p.getInvolvedGroupId() != null) + .map(OperationLogPojo::getInvolvedGroupId) + .toList(); + Map groupMapById = groupDao.selectAllInIds(groupIds) + .stream() + .collect(Collectors.toMap(GroupPojo::getId, Function.identity())); + + List userIds = pojoData.filter(p -> p.getInvolvedUserId() != null) + .map(OperationLogPojo::getInvolvedUserId) + .toList(); + Map userMapById = userDao.selectInIds(userIds) + .stream() + .collect(Collectors.toMap(UserPojo::getId, Function.identity())); + + List projectIds = pojoData.filter(p -> p.getInvolvedProjectId() != null) + .map(OperationLogPojo::getInvolvedProjectId) + .toList(); + Map projectMapById = projectDao.selectInIds(projectIds) + .stream() + .collect(Collectors.toMap(ProjectPojo::getId, Function.identity())); + return pojoData.map(pojo -> operationLogPojoConverter.to(pojo, groupMapById, userMapById, projectMapById)); } } diff --git a/dao/src/main/java/com/databasir/dao/impl/GroupDao.java b/dao/src/main/java/com/databasir/dao/impl/GroupDao.java index e843d17..685819e 100644 --- a/dao/src/main/java/com/databasir/dao/impl/GroupDao.java +++ b/dao/src/main/java/com/databasir/dao/impl/GroupDao.java @@ -56,4 +56,17 @@ public class GroupDao extends BaseDao { .where(GROUP.ID.in(ids)).and(GROUP.DELETED.eq(false)) .fetchInto(GroupPojo.class); } + + /** + * with deleted + */ + public List selectAllInIds(List ids) { + if (ids == null || ids.isEmpty()) { + return Collections.emptyList(); + } + return getDslContext() + .select(GROUP.fields()).from(GROUP) + .where(GROUP.ID.in(ids)) + .fetchInto(GroupPojo.class); + } } \ No newline at end of file