feat:图表交互

This commit is contained in:
2026-10-15 03:38:20 -07:00
parent 565ecf4558
commit 9b64f9fc0b
43 changed files with 1537 additions and 727 deletions
+6 -2
View File
@@ -22,12 +22,13 @@ def get_catalog_cache() -> ComponentCatalog | None:
# 手写的物料定义目录,只供导入脚本读取后写入 MongoDB,运行时不读取
MATERIALS_DIR = Path(__file__).resolve().parent / "materials"
FIELD_GROUPS_FILE = "field_groups.json"
EVENT_GROUPS_FILE = "event_groups.json"
def load_material_definitions(
directory: str | Path = MATERIALS_DIR,
) -> ComponentCatalog:
"""读取物料定义目录:共享字段分组一个文件,每个物料一个文件;不合法直接报错
"""读取物料定义目录:共享字段分组、共享事件组各一个文件,每个物料一个文件;不合法直接报错
version 为全部文件内容的摘要,定义有任何改动都会得到新版本
"""
@@ -38,13 +39,15 @@ def load_material_definitions(
if not any(path.name == FIELD_GROUPS_FILE for path in files):
raise FileNotFoundError(f"物料定义目录缺少 {FIELD_GROUPS_FILE}: {target}")
digest = hashlib.sha256()
components, field_groups = [], []
components, field_groups, event_groups = [], [], []
for path in files:
# utf-8-sig 同时兼容带 BOM 和不带 BOM 的 UTF-8 文件
text = path.read_text(encoding="utf-8-sig")
digest.update(path.name.encode() + b"\0" + text.encode())
if path.name == FIELD_GROUPS_FILE:
field_groups = json.loads(text)
elif path.name == EVENT_GROUPS_FILE:
event_groups = json.loads(text)
else:
components.append(json.loads(text))
# 文件名排序与展示顺序无关,物料按定义中的 order 排列,未写时排在最后
@@ -57,5 +60,6 @@ def load_material_definitions(
for item in components
],
"field_groups": field_groups,
"event_groups": event_groups,
}
)