[fix]:[FL-55][ATP模型管理和线路管理菜单冲突]

Co-authored-by: multica-agent <github@multica.ai>
This commit is contained in:
chengkai3
2026-06-09 00:11:06 +08:00
parent 738d0b599a
commit 2a10cc62d8
6 changed files with 33 additions and 3 deletions
+1 -1
View File
@@ -163,7 +163,7 @@ SYNTHETIC_LEGACY_MENU_ROWS: list[dict[str, Any]] = [
"menu_label": "ATP模型管理",
"menu_type": "MENU",
"parent_id": None,
"url": "/admin/power-lines/atp-viewer",
"url": "/admin/atp-models",
"menu_icon": "Experiment",
"seq": 55,
"state": "ENABLED",
+1 -1
View File
@@ -299,7 +299,7 @@ DEFAULT_MENUS: list[dict[str, object]] = [
{
"code": "admin.atp_models",
"name": "ATP模型管理",
"path": "/admin/power-lines/atp-viewer",
"path": "/admin/atp-models",
"icon": "Experiment",
"parent_code": None,
"type": "menu",
+15 -1
View File
@@ -20,7 +20,7 @@ from api.app.core.database import Base, get_db, init_db
from api.app.core.dependencies import CurrentUser, get_current_user
from api.app.models.menu import Menu
from api.app.models.user import User
from api.app.services.legacy_authz_service import DEFAULT_ADMIN_PERMISSION_CODES
from api.app.services.legacy_authz_service import DEFAULT_ADMIN_PERMISSION_CODES, SYNTHETIC_LEGACY_MENU_ROWS
from api.app.services.seed_service import DEFAULT_MENUS, DEFAULT_PERMISSIONS, DEFAULT_ROLES, SeedDefaultsResult, seed_defaults
from api.app.services.topic_registry import TOPIC_RULES
@@ -93,6 +93,11 @@ class LegacyQuizCleanupContractTest(unittest.TestCase):
self.assertNotIn("question_bank.read", DEFAULT_ROLES["admin"]["permissions"])
self.assertNotIn("question_bank.manage", DEFAULT_ROLES["admin"]["permissions"])
def test_legacy_authz_uses_standalone_atp_models_menu_url(self) -> None:
atp_menu = next(row for row in SYNTHETIC_LEGACY_MENU_ROWS if row["menu_id"] == "admin.atp_models")
self.assertEqual(atp_menu["url"], "/admin/atp-models")
class SeedDefaultsServiceTest(DatabaseFixtureTestCase):
def setUp(self) -> None:
@@ -151,6 +156,15 @@ class SeedDefaultsServiceTest(DatabaseFixtureTestCase):
self.assertTrue(result.overwrote_existing)
self.assertGreater(result.summary["menus"].overwritten, 0)
def test_seed_defaults_use_standalone_atp_models_path(self) -> None:
self._run_seed()
menu = self._load_menu("admin.atp_models")
default_menu = DEFAULT_MENU_BY_CODE["admin.atp_models"]
self.assertEqual(str(default_menu["path"]), "/admin/atp-models")
self.assertEqual(menu.path, "/admin/atp-models")
class SeedDefaultsEndpointTest(DatabaseFixtureTestCase):
def setUp(self) -> None:
+5
View File
@@ -0,0 +1,5 @@
import PowerLinesAtpViewerPage from "../power-lines/atp-viewer/page";
export default function AtpModelsPage() {
return <PowerLinesAtpViewerPage />;
}
+10
View File
@@ -0,0 +1,10 @@
import assert from "node:assert/strict";
import test from "node:test";
import { normalizeAppRoutePath } from "./app-route-path.ts";
test("normalizeAppRoutePath maps legacy ATP viewer routes to the standalone ATP models route", () => {
assert.equal(normalizeAppRoutePath("/admin/power-lines/atp-viewer"), "/atp-models");
assert.equal(normalizeAppRoutePath("/power-lines/atp-viewer"), "/atp-models");
assert.equal(normalizeAppRoutePath("/admin/atp-models"), "/atp-models");
});
+1
View File
@@ -6,6 +6,7 @@ const APP_ROUTE_ALIASES: Record<string, string> = {
"/menu": "/menus",
"/system-param": "/system-params",
"/power-line": "/power-lines",
"/power-lines/atp-viewer": "/atp-models",
"/lightning-current": "/lightning-currents",
"/worker": "/workers",
"/tower-model": "/tower-models",