-
-
-
-
-
-
+
+
-
diff --git a/src/assets/vue.svg b/src/assets/vue.svg
deleted file mode 100644
index 770e9d3..0000000
--- a/src/assets/vue.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/src/components/ContextMenuRegion.vue b/src/components/ContextMenuRegion.vue
new file mode 100644
index 0000000..d8bd1e0
--- /dev/null
+++ b/src/components/ContextMenuRegion.vue
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/components/Header.vue b/src/components/Header.vue
new file mode 100644
index 0000000..96c0baf
--- /dev/null
+++ b/src/components/Header.vue
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/components/HelloWorld.vue b/src/components/HelloWorld.vue
deleted file mode 100644
index 7b25f3f..0000000
--- a/src/components/HelloWorld.vue
+++ /dev/null
@@ -1,38 +0,0 @@
-
-
-
- {{ msg }}
-
-
-
-
- Edit
- components/HelloWorld.vue
to test HMR
-
-
-
-
- Check out
- create-vue, the official Vue + Vite starter
-
-
- Install
- Volar
- in your IDE for a better DX
-
- Click on the Vite and Vue logos to learn more
-
-
-
diff --git a/src/components/Menu.vue b/src/components/Menu.vue
new file mode 100644
index 0000000..809c3e4
--- /dev/null
+++ b/src/components/Menu.vue
@@ -0,0 +1,39 @@
+
+
+
+
+
+ {{ route.meta.menu.name }}
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main.ts b/src/main.ts
index 2425c0f..47cb545 100644
--- a/src/main.ts
+++ b/src/main.ts
@@ -1,5 +1,10 @@
import { createApp } from 'vue'
-import './style.css'
import App from './App.vue'
-
-createApp(App).mount('#app')
+import router from "./router";
+import "./public-style-config.css";
+import {createPinia} from "pinia";
+const pinia = createPinia();
+const app = createApp(App);
+app.use(pinia);
+app.use(router);
+app.mount('#app')
diff --git a/src/public-style-config.css b/src/public-style-config.css
new file mode 100644
index 0000000..215a627
--- /dev/null
+++ b/src/public-style-config.css
@@ -0,0 +1,15 @@
+:root {
+ --header-height: 5vh;
+ --aside-width: 10vw;
+ --container-width: calc(100vh - var(--header-height));
+ --main-width: calc(100vw - var(--aside-width));
+}
+@media screen and (max-height: 800px) {
+ :root {
+ --header-height: 4vh;
+ }
+}
+body {
+ margin: 0;
+ padding: 0;
+}
\ No newline at end of file
diff --git a/src/router/index.ts b/src/router/index.ts
new file mode 100644
index 0000000..0963f61
--- /dev/null
+++ b/src/router/index.ts
@@ -0,0 +1,39 @@
+import {createRouter, createWebHashHistory, RouteMeta, RouteRecordRaw} from "vue-router";
+import {useUserStore} from "../store/UserStore.ts";
+import {Component} from "vue";
+import {HomeFilled} from "@element-plus/icons-vue";
+declare module 'vue-router' {
+ interface RouteMeta {
+ authorizedRequired?: boolean;
+ adminRequired?: boolean;
+ menu: {
+ name: string;
+ icon?: Component;
+ }
+ }
+}
+const routes: RouteRecordRaw[] = [
+ {name: "Home", component: () => import("../views/FileShare.vue"), path: "/", meta: {menu: {name: "文件分享站", icon: HomeFilled}}},
+ {name: "OfflineDownload", component: () => import("../views/OfflineDownload.vue"), path: "/offline", meta: {authorizedRequired: true, menu: {name: "离线下载"}}},
+ {name: "Transcoding", component: () => import("../views/VideoTranscoding.vue"), path: "/transcoding", meta: {authorizedRequired: true, menu: {name: "视频转码"}}},
+ {name: "User", component: () => import("../views/UserManager.vue"), path: "/user", meta: {authorizedRequired: true, adminRequired: true, menu: {name: "用户管理"}}},
+ {name: "Share", component: () => import("../views/ShareManager.vue"), path: "/share", meta: {authorizedRequired: true, adminRequired: true, menu: {name: "分享管理"}}}
+];
+const router = createRouter({history: createWebHashHistory(), routes});
+export const isRouterAccessible = (meta?: RouteMeta) => {
+ if (meta && meta.authorizedRequired){
+ const {token, isAdmin} = useUserStore();
+ if (token){
+ if (meta.adminRequired){
+ return isAdmin;
+ }
+ return !!token;
+ }
+ return false;
+ }
+ return true;
+}
+router.beforeEach((to) => {
+ return isRouterAccessible(to.meta)
+})
+export default router;
\ No newline at end of file
diff --git a/src/store/UserStore.ts b/src/store/UserStore.ts
new file mode 100644
index 0000000..43b33d5
--- /dev/null
+++ b/src/store/UserStore.ts
@@ -0,0 +1,11 @@
+import {defineStore} from "pinia";
+
+export const useUserStore = defineStore('user', {
+ state() {
+ return {
+ token: "",
+ username: "",
+ isAdmin: false
+ }
+ },
+})
\ No newline at end of file
diff --git a/src/style.css b/src/style.css
deleted file mode 100644
index bb131d6..0000000
--- a/src/style.css
+++ /dev/null
@@ -1,79 +0,0 @@
-:root {
- font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif;
- line-height: 1.5;
- font-weight: 400;
-
- color-scheme: light dark;
- color: rgba(255, 255, 255, 0.87);
- background-color: #242424;
-
- font-synthesis: none;
- text-rendering: optimizeLegibility;
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
-}
-
-a {
- font-weight: 500;
- color: #646cff;
- text-decoration: inherit;
-}
-a:hover {
- color: #535bf2;
-}
-
-body {
- margin: 0;
- display: flex;
- place-items: center;
- min-width: 320px;
- min-height: 100vh;
-}
-
-h1 {
- font-size: 3.2em;
- line-height: 1.1;
-}
-
-button {
- border-radius: 8px;
- border: 1px solid transparent;
- padding: 0.6em 1.2em;
- font-size: 1em;
- font-weight: 500;
- font-family: inherit;
- background-color: #1a1a1a;
- cursor: pointer;
- transition: border-color 0.25s;
-}
-button:hover {
- border-color: #646cff;
-}
-button:focus,
-button:focus-visible {
- outline: 4px auto -webkit-focus-ring-color;
-}
-
-.card {
- padding: 2em;
-}
-
-#app {
- max-width: 1280px;
- margin: 0 auto;
- padding: 2rem;
- text-align: center;
-}
-
-@media (prefers-color-scheme: light) {
- :root {
- color: #213547;
- background-color: #ffffff;
- }
- a:hover {
- color: #747bff;
- }
- button {
- background-color: #f9f9f9;
- }
-}
diff --git a/src/views/FileShare.vue b/src/views/FileShare.vue
new file mode 100644
index 0000000..96c0baf
--- /dev/null
+++ b/src/views/FileShare.vue
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/OfflineDownload.vue b/src/views/OfflineDownload.vue
new file mode 100644
index 0000000..96c0baf
--- /dev/null
+++ b/src/views/OfflineDownload.vue
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/ShareManager.vue b/src/views/ShareManager.vue
new file mode 100644
index 0000000..96c0baf
--- /dev/null
+++ b/src/views/ShareManager.vue
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/UserManager.vue b/src/views/UserManager.vue
new file mode 100644
index 0000000..96c0baf
--- /dev/null
+++ b/src/views/UserManager.vue
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/VideoTranscoding.vue b/src/views/VideoTranscoding.vue
new file mode 100644
index 0000000..96c0baf
--- /dev/null
+++ b/src/views/VideoTranscoding.vue
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
\ No newline at end of file