feat: 新增登录跳转逻辑
This commit is contained in:
@@ -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"
|
||||
}
|
||||
|
||||
10
src/main.ts
10
src/main.ts
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
)
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user