diff --git a/API-UI/main.py b/API-UI/main.py index 4c4a1c4..7fba566 100644 --- a/API-UI/main.py +++ b/API-UI/main.py @@ -123,6 +123,18 @@ class ImportApp(QMainWindow): import_layout.addWidget(self.import_label) import_layout.addWidget(self.import_type) + # === parserName (если предусмотрен шаблоном) === + self.parser_label = QLabel("Parser name:") + self.parser_box = QComboBox() + self.parser_box.setEditable(True) # можно вписать вручную + self.parser_label.hide() + self.parser_box.hide() + + parser_layout = QHBoxLayout() + parser_layout.addWidget(self.parser_label) + parser_layout.addWidget(self.parser_box) + main_layout.addLayout(parser_layout) + # Кнопки Excel self.btn_load_excel = QPushButton("📂 Загрузить Excel-файл") self.btn_load_excel.clicked.connect(self.load_excel) @@ -206,6 +218,22 @@ class ImportApp(QMainWindow): with open(path, "r", encoding="utf-8") as f: self.current_mapping = json.load(f) self.log(f"📘 Загружен шаблон: {import_type}") + # Если шаблон содержит parserName с choices — показать выбор + fields = self.current_mapping.get("fields", {}) + parser_meta = fields.get("parserName", {}) + + if isinstance(parser_meta, dict) and "choices" in parser_meta: + self.parser_label.show() + self.parser_box.show() + self.parser_box.clear() + for opt in parser_meta["choices"]: + self.parser_box.addItem(opt) + # выбираем первый как дефолт + self.parser_box.setCurrentIndex(0) + else: + self.parser_label.hide() + self.parser_box.hide() + self.populate_map_table() except Exception as e: self.current_mapping = {} @@ -421,7 +449,19 @@ class ImportApp(QMainWindow): # "parserName": fixed или из поля, # "items": [ { category:{name}, brand:{name}, variant:{...} } ] # } - parser_name = fields_meta.get("parserName", {}).get("fixed", "ikea") + parser_meta = fields_meta.get("parserName", {}) + parser_name = "unknown" + + # если есть choices — берём выбранное из UI + if isinstance(parser_meta, dict) and "choices" in parser_meta: + parser_name = self.parser_box.currentText().strip() or parser_meta["choices"][0] + # иначе если fixed + elif isinstance(parser_meta, dict) and "fixed" in parser_meta: + parser_name = parser_meta["fixed"] + # fallback + else: + parser_name = "xlsx-parser" + result = {"parserName": parser_name, "items": []} # подготовим индекс колонок diff --git a/API-UI/mappings/products.json b/API-UI/mappings/products.json index bbbf298..96afff0 100644 --- a/API-UI/mappings/products.json +++ b/API-UI/mappings/products.json @@ -25,11 +25,11 @@ ] }, "fields": { - "parserName": { - "type": "string", - "fixed": "ikea", - "description": "Идентификатор парсера (постоянный)" - }, + "parserName": { + "type": "string", + "choices": ["ikea", "B2Parf", "Decathlon"], + "description": "Идентификатор парсера (выбор из списка)" + }, "category.name": { "type": "string", "source": "путь категории" }, "brand.name": { "type": "string", "source": "название бренда" }, "variant.status_id": { "type": "int", "default": 1 },