jewelry.py
1.97 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
"""JewelryBridge — 款式设计 tab 桥层。
QML 需要的能力:
- 拿全部 9 个类别名(categories)
- 按类别拿候选词(getOptions)
- 增删词条 + 重置类别 / 全部
- 用户填完表后预览中文 prompt
后端:core.jewelry.JewelryLibraryManager + PromptAssembler。
"""
import logging
from typing import Any, Dict, List
from PySide6.QtCore import Property, QObject, Signal, Slot
from core.jewelry import PromptAssembler
class JewelryBridge(QObject):
libraryChanged = Signal(str) # category
def __init__(self, library_manager, parent=None):
super().__init__(parent)
self._logger = logging.getLogger(__name__)
self._lib = library_manager
@Property("QVariantList", constant=True)
def categories(self) -> List[str]:
"""9 个类别的中文名(顺序固定,与 QML 表单一致)。"""
return list(self._lib.library.keys())
@Slot(str, result="QVariantList")
def getOptions(self, category: str) -> List[str]:
return list(self._lib.library.get(category, []))
@Slot(str, str)
def addItem(self, category: str, value: str) -> None:
self._lib.add_item(category, value)
self.libraryChanged.emit(category)
@Slot(str, str)
def removeItem(self, category: str, value: str) -> None:
self._lib.remove_item(category, value)
self.libraryChanged.emit(category)
@Slot(str)
def resetCategory(self, category: str) -> None:
self._lib.reset_category(category)
self.libraryChanged.emit(category)
@Slot()
def resetAll(self) -> None:
self._lib.reset_all()
for c in self._lib.library.keys():
self.libraryChanged.emit(c)
@Slot("QVariantMap", result=str)
def previewPrompt(self, form_data: Dict[str, Any]) -> str:
"""form_data: { "主石形状": "圆形", "金属": "18K黄金", ... } —— 空字段允许。"""
return PromptAssembler.assemble({k: str(v or "") for k, v in form_data.items()})