diff --git a/frontend/components.d.ts b/frontend/components.d.ts
new file mode 100644
index 000000000..310ef8268
--- /dev/null
+++ b/frontend/components.d.ts
@@ -0,0 +1,33 @@
+// generated by unplugin-vue-components
+// We suggest you to commit this file into source control
+// Read more: https://github.com/vuejs/vue-next/pull/3399
+
+declare module 'vue' {
+ export interface GlobalComponents {
+ 403: typeof import('./src/components/error-message/403.vue')['default']
+ 404: typeof import('./src/components/error-message/404.vue')['default']
+ 500: typeof import('./src/components/error-message/500.vue')['default']
+ AppLayout: typeof import('./src/components/app-layout/index.vue')['default']
+ AppStatus: typeof import('./src/components/app-status/index.vue')['default']
+ BackButton: typeof import('./src/components/back-button/index.vue')['default']
+ BreadCrumbs: typeof import('./src/components/bread-crumbs/index.vue')['default']
+ BreadCrumbsItem: typeof import('./src/components/bread-crumbs/bread-crumbs-item.vue')['default']
+ CardWithHeader: typeof import('./src/components/card-with-header/index.vue')['default']
+ Codemirror: typeof import('./src/components/codemirror-dialog/codemirror.vue')['default']
+ ComplexTable: typeof import('./src/components/complex-table/index.vue')['default']
+ ConfirmDialog: typeof import('./src/components/confirm-dialog/index.vue')['default']
+ ContainerLog: typeof import('./src/components/container-log/index.vue')['default']
+ DrawerHeader: typeof import('./src/components/drawer-header/index.vue')['default']
+ ElConfigProvider: typeof import('element-plus/es')['ElConfigProvider']
+ FileList: typeof import('./src/components/file-list/index.vue')['default']
+ FileRole: typeof import('./src/components/file-role/index.vue')['default']
+ Footer: typeof import('./src/components/app-layout/footer/index.vue')['default']
+ Logo: typeof import('./src/components/app-layout/menu/components/Logo.vue')['default']
+ Menu: typeof import('./src/components/app-layout/menu/index.vue')['default']
+ Status: typeof import('./src/components/status/index.vue')['default']
+ SubItem: typeof import('./src/components/app-layout/menu/components/sub-item.vue')['default']
+ SvgIcon: typeof import('./src/components/svg-icon/svg-icon.vue')['default']
+ }
+}
+
+export { }
diff --git a/frontend/src/components/router-button/index.vue b/frontend/src/components/router-button/index.vue
new file mode 100644
index 000000000..f9dcbfef8
--- /dev/null
+++ b/frontend/src/components/router-button/index.vue
@@ -0,0 +1,103 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/frontend/src/layout/layout-content.vue b/frontend/src/layout/layout-content.vue
index ca13deabf..15ab34c7a 100644
--- a/frontend/src/layout/layout-content.vue
+++ b/frontend/src/layout/layout-content.vue
@@ -73,12 +73,6 @@ const showBack = computed(() => {