refactor: 清理废弃模块并重构管理端与全端代码

- 移除所有废弃的旧首页配置模块,包括destinationHero、demand相关、HomeExperience、vehicleService等表结构与代码,新增数据库迁移删除遗留表
- 重构管理端后台布局为标准RuoYi风格,新增Sidebar、Navbar、SettingsDrawer等组件,替换旧的过渡菜单实现
- 调整移动端响应断点为768px,更新布局相关测试用例,新增布局组件测试
- 删除OperationsTools发布/重置页面,移除/tools菜单入口,清理对应的API调用与测试代码
- 重构玩法模块编辑器:替换旧的图片手动输入框为图片上传组件,移除冗余的取消按钮
- 新增线索查询offset参数支持,完善查询参数处理逻辑
- 优化rbac菜单构建逻辑,新增可见性控制参数
- 修正管家编辑器提示文案,优化系统资源编辑器表单初始化逻辑
- 清理小程序端废弃的体验推荐组件与相关测试代码
- 更新文档与种子脚本,匹配新的API契约与使用说明
This commit is contained in:
duanshuwen committed 2026-08-26 23:24:28 +08:00
1 parent f6c5ad589f
commit fbf2c772a8
63 files changed
+2272 -1991

No files matched your search

+1 -98
View File
@@ -9,14 +9,13 @@ from app.database import get_db
from app.main import create_app
from app.models import (
AdminUser,
HomeExperience,
HomeTeamBuilding,
HomeWanfaRecommendation,
HomeWildArchive,
WanfaCategory,
WanfaRoute,
)
from app.schemas import HomeExperienceCreate, HomeTeamBuildingCreate, HomeWanfaRecommendationCreate, HomeWildArchiveCreate
from app.schemas import HomeTeamBuildingCreate, HomeWanfaRecommendationCreate, HomeWildArchiveCreate
class FakeScalarResult:
@@ -76,22 +75,6 @@ def make_admin_user():
)
def make_experience(**overrides):
return HomeExperience(
id=overrides.get("id", "waterfall-descent"),
badge=overrides.get("badge", "玩过推荐"),
category=overrides.get("category", "瀑降体验"),
title=overrides.get("title", "悬崖瀑降"),
englishTitle=overrides.get("englishTitle", "WATERFALL DESCENT"),
image=overrides.get("image", "https://example.test/waterfall.jpg"),
demandKeyword=overrides.get("demandKeyword", "悬崖瀑降"),
isActive=overrides.get("isActive", True),
sortOrder=overrides.get("sortOrder", 0),
createdAt=datetime(2026, 1, 1),
updatedAt=datetime(2026, 1, 2),
)
def make_team(**overrides):
return HomeTeamBuilding(
id=overrides.get("id", "wild-challenge"),
@@ -162,33 +145,6 @@ def admin_app(fake_db):
return app
def test_home_experience_schema_normalizes_text_and_url():
item = HomeExperienceCreate(
badge=" 玩过推荐 ",
category=" 瀑降体验 ",
title=" 悬崖瀑降 ",
englishTitle=" WATERFALL DESCENT ",
image=" https://example.test/waterfall.jpg ",
demandKeyword=" 悬崖瀑降 ",
)
assert item.title == "悬崖瀑降"
assert item.image == "https://example.test/waterfall.jpg"
assert item.sortOrder is None
def test_home_experience_schema_rejects_invalid_image_url():
with pytest.raises(ValidationError):
HomeExperienceCreate(
badge="玩过推荐",
category="瀑降体验",
title="悬崖瀑降",
englishTitle="WATERFALL DESCENT",
image="/waterfall.jpg",
demandKeyword="悬崖瀑降",
)
def test_home_wild_archive_schema_normalizes_detail_image_urls():
item = HomeWildArchiveCreate(
title=" 石龙洞 ",
@@ -217,21 +173,6 @@ def test_home_team_building_schema_normalizes_detail_content():
assert item.detailParagraphs == ["第一段", "第二段"]
def test_admin_home_experience_list_returns_full_record():
fake_db = FakeDb(items=[make_experience()])
app = admin_app(fake_db)
try:
response = TestClient(app).get("/api/admin/home/experiences")
finally:
app.dependency_overrides.clear()
assert response.status_code == 200
item = response.json()["data"]["items"][0]
assert item["id"] == "waterfall-descent"
assert item["isActive"] is True
assert item["createdAt"] == "2026-01-01T00:00:00"
def test_admin_home_team_create_appends_to_end():
fake_db = FakeDb(scalar_values=[2])
app = admin_app(fake_db)
@@ -321,42 +262,6 @@ def test_admin_home_wild_create_persists_detail_images():
]
def test_admin_home_delete_normalizes_remaining_order():
first = make_experience(id="experience-1", sortOrder=0)
second = make_experience(id="experience-2", sortOrder=1)
fake_db = FakeDb(items=[first, second])
app = admin_app(fake_db)
try:
response = TestClient(app).delete("/api/admin/home/experiences/experience-1")
finally:
app.dependency_overrides.clear()
assert response.status_code == 200
assert response.json() == {
"code": 200,
"msg": "success",
"data": {"id": "experience-1"},
}
assert second.sortOrder == 0
assert fake_db.committed
def test_admin_home_reorder_rejects_incomplete_ids():
fake_db = FakeDb(items=[make_experience(id="experience-1"), make_experience(id="experience-2", sortOrder=1)])
app = admin_app(fake_db)
try:
response = TestClient(app).patch(
"/api/admin/home/experiences/reorder",
json={"itemIds": ["experience-1"]},
)
finally:
app.dependency_overrides.clear()
assert response.status_code == 400
assert response.json()["errorCode"] == "HOME_REORDER_INVALID"
assert not fake_db.committed
def test_home_wanfa_recommendation_schema_requires_category_id():
item = HomeWanfaRecommendationCreate(categoryId=" family-route ")
@@ -386,7 +291,6 @@ def test_public_home_places_active_wanfa_category_recommendations_in_experiences
app = create_app()
fake_db = FakeDb(
items_by_model={
HomeExperience: [],
HomeTeamBuilding: [],
HomeWildArchive: [],
HomeWanfaRecommendation: [recommendation],
@@ -424,7 +328,6 @@ def test_public_home_returns_rendering_fields_for_all_sections():
app = create_app()
fake_db = FakeDb(
items_by_model={
HomeExperience: [make_experience()],
HomeTeamBuilding: [make_team()],
HomeWildArchive: [make_archive()],
}