diff --git a/lesingle-edu-reading-platform-frontend/src/views/admin/LayoutView.vue b/lesingle-edu-reading-platform-frontend/src/views/admin/LayoutView.vue
index 8350ef7..a6f63ab 100644
--- a/lesingle-edu-reading-platform-frontend/src/views/admin/LayoutView.vue
+++ b/lesingle-edu-reading-platform-frontend/src/views/admin/LayoutView.vue
@@ -62,6 +62,9 @@
+
+ v{{ appVersion }}
+
@@ -133,6 +136,7 @@ import { useUserStore } from '@/stores/user';
const router = useRouter();
const route = useRoute();
const userStore = useUserStore();
+const appVersion = __APP_VERSION__;
const collapsed = ref(false);
const selectedKeys = ref(['dashboard']);
@@ -222,6 +226,8 @@ $bg-dark: #111827;
background: white !important;
box-shadow: 2px 0 8px rgba(0, 0, 0, 0.04);
border-right: 1px solid $border-color;
+ display: flex;
+ flex-direction: column;
.logo {
height: 72px;
@@ -314,7 +320,8 @@ $bg-dark: #111827;
}
.sider-menu-wrapper {
- height: calc(100vh - 72px);
+ flex: 1;
+ min-height: 0;
overflow: auto;
// 自定义侧边栏滚动条样式
@@ -332,6 +339,17 @@ $bg-dark: #111827;
}
}
+.sider-version {
+ padding: 10px 12px 14px;
+ border-top: 1px solid $border-color;
+ font-size: 12px;
+ color: #9CA3AF;
+ text-align: center;
+ line-height: 1.2;
+ background: #fff;
+ flex-shrink: 0;
+}
+
.admin-header {
background: white;
padding: 0 24px;
diff --git a/lesingle-edu-reading-platform-frontend/src/views/auth/LoginView.vue b/lesingle-edu-reading-platform-frontend/src/views/auth/LoginView.vue
index baa9b3e..8843713 100644
--- a/lesingle-edu-reading-platform-frontend/src/views/auth/LoginView.vue
+++ b/lesingle-edu-reading-platform-frontend/src/views/auth/LoginView.vue
@@ -66,6 +66,7 @@
@@ -83,6 +84,7 @@ import {
import { useUserStore } from '@/stores/user';
const userStore = useUserStore();
+const appVersion = __APP_VERSION__;
// 是否启用默认账号填充(开发/测试环境启用,生产环境禁用)
const enableDefaultAccount = import.meta.env.VITE_ENABLE_DEFAULT_ACCOUNT === 'true';
@@ -413,5 +415,14 @@ $bg-cream: #FEFEFE;
margin-top: 24px;
font-size: 12px;
color: $text-light;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ gap: 4px;
+}
+
+.app-version {
+ font-size: 11px;
+ letter-spacing: 0.3px;
}
diff --git a/lesingle-edu-reading-platform-frontend/src/views/parent/LayoutView.vue b/lesingle-edu-reading-platform-frontend/src/views/parent/LayoutView.vue
index 88855b4..8a6babc 100644
--- a/lesingle-edu-reading-platform-frontend/src/views/parent/LayoutView.vue
+++ b/lesingle-edu-reading-platform-frontend/src/views/parent/LayoutView.vue
@@ -46,6 +46,9 @@
+
+ v{{ appVersion }}
+
@@ -60,47 +63,50 @@
-
+
+
+ v{{ appVersion }}
+
@@ -225,6 +228,7 @@ import { useUserStore } from '@/stores/user';
const router = useRouter();
const route = useRoute();
const userStore = useUserStore();
+const appVersion = __APP_VERSION__;
const collapsed = ref(false);
const selectedKeys = ref(['dashboard']);
@@ -329,6 +333,8 @@ $bg-light: #FAFAFA;
background: white !important;
box-shadow: 2px 0 8px rgba(0, 0, 0, 0.06);
border-right: 1px solid $border-color;
+ display: flex;
+ flex-direction: column;
.logo {
height: 80px;
@@ -457,7 +463,8 @@ $bg-light: #FAFAFA;
}
.sider-menu-wrapper {
- height: calc(100vh - 80px);
+ flex: 1;
+ min-height: 0;
overflow: auto;
// 自定义侧边栏滚动条样式
@@ -475,6 +482,17 @@ $bg-light: #FAFAFA;
}
}
+.sider-version {
+ padding: 10px 12px 14px;
+ border-top: 1px solid $border-color;
+ font-size: 12px;
+ color: #9CA3AF;
+ text-align: center;
+ line-height: 1.2;
+ background: #fff;
+ flex-shrink: 0;
+}
+
.school-header {
background: white;
padding: 0 24px;
diff --git a/lesingle-edu-reading-platform-frontend/src/views/teacher/LayoutView.vue b/lesingle-edu-reading-platform-frontend/src/views/teacher/LayoutView.vue
index 6c7eb1d..6972c4a 100644
--- a/lesingle-edu-reading-platform-frontend/src/views/teacher/LayoutView.vue
+++ b/lesingle-edu-reading-platform-frontend/src/views/teacher/LayoutView.vue
@@ -69,6 +69,9 @@
+
+ v{{ appVersion }}
+
@@ -140,6 +143,7 @@ import { useUserStore } from '@/stores/user';
const router = useRouter();
const route = useRoute();
const userStore = useUserStore();
+const appVersion = __APP_VERSION__;
const collapsed = ref(false);
const selectedKeys = ref(['dashboard']);
@@ -225,6 +229,8 @@ $bg-light: #FAFAFA;
background: white !important;
box-shadow: 2px 0 8px rgba(0, 0, 0, 0.06);
border-right: 1px solid $border-color;
+ display: flex;
+ flex-direction: column;
.logo {
height: 80px;
@@ -316,7 +322,8 @@ $bg-light: #FAFAFA;
}
.sider-menu-wrapper {
- height: calc(100vh - 80px);
+ flex: 1;
+ min-height: 0;
overflow: auto;
// 自定义侧边栏滚动条样式
@@ -334,6 +341,17 @@ $bg-light: #FAFAFA;
}
}
+.sider-version {
+ padding: 10px 12px 14px;
+ border-top: 1px solid $border-color;
+ font-size: 12px;
+ color: #9CA3AF;
+ text-align: center;
+ line-height: 1.2;
+ background: #fff;
+ flex-shrink: 0;
+}
+
.teacher-header {
background: white;
padding: 0 24px;
diff --git a/lesingle-edu-reading-platform-frontend/src/vite-env.d.ts b/lesingle-edu-reading-platform-frontend/src/vite-env.d.ts
index 614ceda..089b04a 100644
--- a/lesingle-edu-reading-platform-frontend/src/vite-env.d.ts
+++ b/lesingle-edu-reading-platform-frontend/src/vite-env.d.ts
@@ -9,3 +9,5 @@ interface ImportMetaEnv {
interface ImportMeta {
readonly env: ImportMetaEnv
}
+
+declare const __APP_VERSION__: string
diff --git a/lesingle-edu-reading-platform-frontend/vite.config.ts b/lesingle-edu-reading-platform-frontend/vite.config.ts
index 569e01a..0f5272e 100644
--- a/lesingle-edu-reading-platform-frontend/vite.config.ts
+++ b/lesingle-edu-reading-platform-frontend/vite.config.ts
@@ -7,13 +7,18 @@ import { AntDesignVueResolver } from 'unplugin-vue-components/resolvers';
import viteCompression from 'vite-plugin-compression';
import fileRouter from 'unplugin-vue-router/vite';
import UnoCSS from 'unocss/vite';
+import packageJson from './package.json';
export default defineConfig(({ mode }) => {
const env = loadEnv(mode, process.cwd(), '');
const port = parseInt(env.VITE_APP_PORT) || 5173;
const backendPort = env.VITE_BACKEND_PORT || '8480';
+ const appVersion = packageJson.version;
return {
+ define: {
+ __APP_VERSION__: JSON.stringify(appVersion),
+ },
plugins: [
vue(),
UnoCSS(),