改用一般 Router 並支援 LINE 無綁定自動建帳號

根本原因:
1. Hash router 網址帶 /#/ 不美觀且與一般網站行為不一致。
2. register.line_login 收到 status 12(LINE 帳號無綁定)時直接中止,
   新 token 無法登入。

影響:
網址改為一般路徑(自動偵測部署子路徑,不需放網站根目錄);靜態主機在
/lobby 重新整理由殘根導回入口頁。無綁定帳號時自動 account.create 取得
[id, pw] 後直接 account.login,登入面板顯示建立進度。

修法:
- index.tsx:createHashRouter 改 createBrowserRouter,getBasename() 依
  location.pathname 推導子路徑並去除已知路由字尾
- build-templates/lobby/index.html:靜態主機 SPA 殘根,重整時導回 ../
- Login.tsx:status 12 時走 createAccountAndLogin()(account.create 回傳
  格式為 [id, pw] 陣列)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-03 11:30:24 +08:00
co-authored by Claude Fable 5
parent 1637a56908
commit d391726dd1
3 changed files with 45 additions and 6 deletions
+14 -3
View File
@@ -5,7 +5,7 @@ import "dayjs/locale/zh-tw";
import React from "react";
import ReactDOM from "react-dom/client";
import { createHashRouter, RouterProvider } from "react-router-dom";
import { createBrowserRouter, RouterProvider } from "react-router-dom";
import { BaseEnumerator } from "./Engine/CatanEngine/CoroutineV2/Core/BaseEnumerator";
import { GameItemsProvider } from "@/context/GameItemsContext";
@@ -27,11 +27,22 @@ BaseEnumerator.Init();
// 設定 dayjs 語言
dayjs.locale("zh-tw");
// 依目前網址推導部署子路徑(專案不一定放在網站根目錄,例如 /Line_Project_Bot/
function getBasename(): string {
let path: string = location.pathname.replace(/index\.html$/, "");
// 去除已知路由字尾,避免在 /lobby 重新整理時把路由誤當成資料夾
path = path.replace(/lobby\/?$/, "");
if (!path.endsWith("/")) {
path += "/";
}
return path;
}
// 路由設定
const router = createHashRouter([
const router = createBrowserRouter([
{ path: "/", element: <Login /> },
{ path: "/lobby", element: <Lobby /> },
]);
], { basename: getBasename() });
// Render
// 注意:不能用 React.StrictMode — 開發模式雙重掛載會讓 NetManagerSD 等靜態單例的連線互相覆蓋