feat: allow temporary intranet no-login mode

This commit is contained in:
2026-08-04 16:22:29 +08:00
parent 5ff58ac4d6
commit 1042b48102
6 changed files with 70 additions and 8 deletions
+12 -1
View File
@@ -50,8 +50,19 @@ const router = createRouter({
routes,
})
// 路由守卫:检查登录
// 默认运行在内网免登录模式;需要 Casdoor 时构建时设置 VITE_AUTH_ENABLED=true。
const authEnabled = import.meta.env.VITE_AUTH_ENABLED === 'true'
router.beforeEach((to, from, next) => {
if (!authEnabled) {
if (to.name === 'Login') {
next({ name: 'Dashboard' })
} else {
next()
}
return
}
const token = localStorage.getItem('token')
if (to.name !== 'Login' && !token) {
next({ name: 'Login' })
+12 -4
View File
@@ -3,12 +3,19 @@ import { ref, computed } from 'vue'
import { authApi, statsApi } from '@/api'
export const useAppStore = defineStore('app', () => {
const authEnabled = import.meta.env.VITE_AUTH_ENABLED === 'true'
const localAdmin = {
id: 0,
username: 'local-admin',
display_name: '本地管理员',
role: 'admin',
}
// 用户状态
const user = ref(JSON.parse(localStorage.getItem('user') || 'null'))
const user = ref(authEnabled ? JSON.parse(localStorage.getItem('user') || 'null') : localAdmin)
const token = ref(localStorage.getItem('token') || '')
const isLoggedIn = computed(() => !!token.value)
const isAdmin = computed(() => user.value?.role === 'admin')
const isLoggedIn = computed(() => !authEnabled || !!token.value)
const isAdmin = computed(() => !authEnabled || user.value?.role === 'admin')
function setUser(userData, tokenStr) {
user.value = userData
@@ -18,6 +25,7 @@ export const useAppStore = defineStore('app', () => {
}
function logout() {
if (!authEnabled) return
user.value = null
token.value = ''
localStorage.removeItem('user')
@@ -77,7 +85,7 @@ export const useAppStore = defineStore('app', () => {
}
return {
user, token, isLoggedIn, isAdmin,
user, token, authEnabled, isLoggedIn, isAdmin,
setUser, logout,
dashboardData, loading, fetchDashboard,
connectWebSocket,
+2 -1
View File
@@ -58,7 +58,7 @@
</el-breadcrumb>
</div>
<div class="header-right">
<el-dropdown @command="handleCommand">
<el-dropdown v-if="store.authEnabled" @command="handleCommand">
<span class="user-info">
{{ store.user?.display_name || store.user?.username }}
<el-icon><ArrowDown /></el-icon>
@@ -74,6 +74,7 @@
</el-dropdown-menu>
</template>
</el-dropdown>
<span v-else class="user-info">本地管理员</span>
</div>
</el-header>