feat: 新增登录跳转逻辑

This commit is contained in:
duanshuwen
2025-11-17 20:52:45 +08:00
parent c990ad7bbc
commit 5e15a55596
6 changed files with 8173 additions and 17 deletions

View File

@@ -5,7 +5,7 @@
"description": "My Electron application description",
"main": ".vite/build/main.js",
"scripts": {
"start": "electron-forge start",
"start": "node node_modules/@electron-forge/cli/dist/electron-forge.js start",
"package": "electron-forge package",
"make": "electron-forge make",
"publish": "electron-forge publish",
@@ -17,6 +17,10 @@
"email": "duanshuwen@gogpay.cn"
},
"license": "MIT",
"resolutions": {
"node-gyp": "^10.2.0",
"@electron/node-gyp": "npm:node-gyp@^10.2.0"
},
"devDependencies": {
"@electron-forge/cli": "^7.10.2",
"@electron-forge/maker-deb": "^7.10.2",
@@ -48,5 +52,6 @@
"pinia": "^2.3.1",
"vue": "^3.5.22",
"vue-router": "^4.5.1"
}
},
"packageManager": "yarn@4.11.0+sha512.4e54aeace9141df2f0177c266b05ec50dc044638157dae128c471ba65994ac802122d7ab35bcd9e81641228b7dcf24867d28e750e0bcae8a05277d600008ad54"
}

View File

@@ -17,8 +17,8 @@ const createWindow = () => {
width: 900,
height: 670,
autoHideMenuBar: true,
// frame: false,
// windowButtonVisibility: false,
frame: false,
windowButtonVisibility: false,
resizable: true,
maximizable: true,
minimizable: true,
@@ -61,9 +61,9 @@ const createWindow = () => {
mainWindow.webContents.openDevTools();
}
const tabs = new TabManager(mainWindow)
registerTabIpc(tabs)
tabs.create('about:blank')
// const tabs = new TabManager(mainWindow)
// registerTabIpc(tabs)
// tabs.create('about:blank')
};
// This method will be called when Electron has finished

View File

@@ -10,6 +10,7 @@ const routes = [
path: "/browser",
name: "Browser",
component: () => import("@/views/browser/BrowserLayout.vue"),
meta: { requiresAuth: true },
},
{
path: "/about",
@@ -23,4 +24,17 @@ const router = createRouter({
routes,
});
router.beforeEach((to, _from, next) => {
const token = localStorage.getItem("token");
if (to.meta && (to.meta as any).requiresAuth && !token) {
next({ path: "/" });
return;
}
if (to.path === "/" && token) {
next({ path: "/browser" });
return;
}
next();
});
export default router;

View File

@@ -8,6 +8,10 @@ const instance = axios.create({
// 添加拦截器
instance.interceptors.request.use(
(config) => {
const token = localStorage.getItem('token')
if (token) {
config.headers = { ...(config.headers || {}), Authorization: `Bearer ${token}` }
}
return config
},
(error) => {
@@ -21,6 +25,10 @@ instance.interceptors.response.use(
return response.data
},
(error) => {
if (error && error.response && error.response.status === 401) {
try { localStorage.removeItem('token') } catch {}
if (typeof window !== 'undefined') window.location.href = '/'
}
return Promise.reject(error)
}
)

View File

@@ -37,10 +37,6 @@
placeholder="请输入密码"
@keyup.enter="onSubmit"
/>
<button
class="px-3 py-2 text-sm border rounded bg-gray-100 hover:bg-gray-200"
@click="togglePassword"
>{{ showPwd ? '隐藏' : '显示' }}</button>
</div>
<p v-if="errors.password" class="mt-1 text-xs text-red-500">{{ errors.password }}</p>
</div>
@@ -58,6 +54,7 @@
<script setup lang="ts">
import { ref, reactive } from "vue";
import { useRouter } from "vue-router";
import { login as apiLogin } from "@/api/login";
const router = useRouter();
const form = reactive({ account: "", password: "" });
@@ -81,17 +78,16 @@ const recalc = () => {
valid.value = validate();
};
const togglePassword = () => {
showPwd.value = !showPwd.value;
};
const onSubmit = async () => {
recalc();
if (!valid.value || loading.value) return;
loading.value = true;
try {
await new Promise((r) => setTimeout(r, 600));
router.push("/");
const res: any = await apiLogin({ account: form.account, password: form.password });
const token = res && (res.token || res.data?.token || res.access_token);
if (!token) throw new Error("登录失败");
localStorage.setItem("token", token);
router.replace("/browser");
} finally {
loading.value = false;
}

8133
yarn.lock Normal file

File diff suppressed because it is too large Load Diff