diff --git a/assets/App.vue b/assets/App.vue
index 6cc71c38..e199dccb 100644
--- a/assets/App.vue
+++ b/assets/App.vue
@@ -1,73 +1,8 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
-
+
diff --git a/assets/layouts/default.vue b/assets/layouts/default.vue
new file mode 100644
index 00000000..5271d6c6
--- /dev/null
+++ b/assets/layouts/default.vue
@@ -0,0 +1,124 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/layouts/splash.vue b/assets/layouts/splash.vue
new file mode 100644
index 00000000..a103f135
--- /dev/null
+++ b/assets/layouts/splash.vue
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/assets/modules/router.ts b/assets/modules/router.ts
index 6c0c58d8..06ac79c3 100644
--- a/assets/modules/router.ts
+++ b/assets/modules/router.ts
@@ -1,11 +1,12 @@
import { type App } from "vue";
import { createRouter, createWebHistory } from "vue-router";
-import routes from "~pages";
+import pages from "~pages";
+import { setupLayouts } from "virtual:generated-layouts";
import config from "@/stores/config";
-
-
export const install = (app: App) => {
+ const routes = setupLayouts(pages);
+
const router = createRouter({
history: createWebHistory(`${config.base}/`),
routes,
diff --git a/assets/pages/Login.vue b/assets/pages/Login.vue
index b1114235..7a31c8e0 100644
--- a/assets/pages/Login.vue
+++ b/assets/pages/Login.vue
@@ -73,3 +73,7 @@ async function onLogin() {
}
}
+
+meta:
+ layout: splash
+
diff --git a/assets/pages/login.vue b/assets/pages/login.vue
index b1114235..7a31c8e0 100644
--- a/assets/pages/login.vue
+++ b/assets/pages/login.vue
@@ -73,3 +73,7 @@ async function onLogin() {
}
}
+
+meta:
+ layout: splash
+
diff --git a/package.json b/package.json
index aa705e34..c3115d60 100644
--- a/package.json
+++ b/package.json
@@ -50,6 +50,7 @@
"unplugin-vue-components": "^0.22.4",
"vite": "3.1.0",
"vite-plugin-pages": "^0.26.0",
+ "vite-plugin-vue-layouts": "^0.7.0",
"vue": "^3.2.39",
"vue-i18n": "^9.2.2",
"vue-router": "^4.1.5"
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 536f97f4..044f9b40 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -44,6 +44,7 @@ specifiers:
unplugin-vue-components: ^0.22.4
vite: 3.1.0
vite-plugin-pages: ^0.26.0
+ vite-plugin-vue-layouts: ^0.7.0
vitest: ^0.23.1
vue: ^3.2.39
vue-i18n: ^9.2.2
@@ -79,6 +80,7 @@ dependencies:
unplugin-vue-components: 0.22.4_vite@3.1.0+vue@3.2.39
vite: 3.1.0_sass@1.54.9
vite-plugin-pages: 0.26.0_6igbc34rdygfc6m44bomdw5yyu
+ vite-plugin-vue-layouts: 0.7.0_xik7h4qq3w5aalpcbhbvf3kbuu
vue: 3.2.39
vue-i18n: 9.2.2_vue@3.2.39
vue-router: 4.1.5_vue@3.2.39
@@ -4639,6 +4641,23 @@ packages:
- supports-color
dev: false
+ /vite-plugin-vue-layouts/0.7.0_xik7h4qq3w5aalpcbhbvf3kbuu:
+ resolution: {integrity: sha512-k5XDmRNFo4M/GmUjhbRXj2WmJiFcGoVI8l/uZ72RHyRDQr4wE/6Zq/KFq0lqXomWQxTSzakQRUswzNwtvZLE8A==}
+ peerDependencies:
+ vite: ^2.5.0 || ^3.0.0-0
+ vue: ^2.6.12 || ^3.2.4
+ vue-router: ^3.5.1 || ^ 4.0.11
+ dependencies:
+ '@vue/compiler-sfc': 3.2.39
+ debug: 4.3.4
+ fast-glob: 3.2.11
+ vite: 3.1.0_sass@1.54.9
+ vue: 3.2.39
+ vue-router: 4.1.5_vue@3.2.39
+ transitivePeerDependencies:
+ - supports-color
+ dev: false
+
/vite/3.1.0_sass@1.54.9:
resolution: {integrity: sha512-YBg3dUicDpDWFCGttmvMbVyS9ydjntwEjwXRj2KBFwSB8SxmGcudo1yb8FW5+M/G86aS8x828ujnzUVdsLjs9g==}
engines: {node: ^14.18.0 || >=16.0.0}
diff --git a/tsconfig.json b/tsconfig.json
index 5255b117..d5825a2e 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -17,7 +17,7 @@
"@/*": ["assets/*"]
},
"jsx": "preserve",
- "types": ["vitest", "vite/client", "vue/ref-macros", "vite-plugin-pages/client"]
+ "types": ["vitest", "vite/client", "vue/ref-macros", "vite-plugin-pages/client", "vite-plugin-vue-layouts/client"]
},
"include": ["assets/**/*.ts", "assets/**/*.d.ts", "assets/**/*.vue"],
diff --git a/vite.config.ts b/vite.config.ts
index 4cd0e613..d2c9c53b 100644
--- a/vite.config.ts
+++ b/vite.config.ts
@@ -6,6 +6,7 @@ import Components from "unplugin-vue-components/vite";
import AutoImport from "unplugin-auto-import/vite";
import IconsResolver from "unplugin-icons/resolver";
import Pages from "vite-plugin-pages";
+import Layouts from "vite-plugin-vue-layouts";
import VueI18n from "@intlify/vite-plugin-vue-i18n";
export default defineConfig(({ mode }) => ({
@@ -26,6 +27,9 @@ export default defineConfig(({ mode }) => ({
dirs: "assets/pages",
importMode: "sync",
}),
+ Layouts({
+ layoutsDirs: "assets/layouts",
+ }),
Components({
dirs: ["assets/components"],
resolvers: [