diff --git a/panel.html b/panel.html
index f2b481b..f6420b6 100644
--- a/panel.html
+++ b/panel.html
@@ -1433,6 +1433,12 @@
accept=".json,application/json"
hidden
/>
+
{
+ const file = importAllInput.files?.[0];
+ if (!file) return;
+ try {
+ const text = await file.text();
+ const parsed = JSON.parse(text);
+ if (parsed?.format !== "st-bme-all-task-profiles" || !parsed?.profiles) {
+ throw new Error("文件格式不正确,请选择「导出全部」生成的文件");
+ }
+ const settings = _getSettings?.() || {};
+ let mergedProfiles = settings.taskProfiles || {};
+ let importedCount = 0;
+ for (const [taskType, entry] of Object.entries(parsed.profiles)) {
+ try {
+ const imported = parseImportedTaskProfile(
+ mergedProfiles,
+ entry,
+ taskType,
+ );
+ mergedProfiles = imported.taskProfiles;
+ importedCount++;
+ } catch (innerError) {
+ console.warn(`[ST-BME] 跳过导入任务 ${taskType}:`, innerError);
+ }
+ }
+ if (importedCount === 0) {
+ toastr.warning("没有成功导入任何预设", "ST-BME");
+ return;
+ }
+ _patchTaskProfiles(mergedProfiles);
+ toastr.success(`已导入 ${importedCount} 个任务预设`, "ST-BME");
+ } catch (error) {
+ console.error("[ST-BME] 导入全部预设失败:", error);
+ toastr.error(`导入全部预设失败: ${error?.message || error}`, "ST-BME");
+ } finally {
+ importAllInput.value = "";
+ }
+ });
+ importAllInput.dataset.bmeBound = "true";
+ }
}
function _handleTaskProfileWorkspaceInput(event) {
@@ -2025,6 +2068,12 @@ async function _handleTaskProfileWorkspaceClick(event) {
case "import-profile":
document.getElementById("bme-task-profile-import")?.click();
return;
+ case "export-all-profiles":
+ _downloadAllTaskProfiles(state.taskProfiles);
+ return;
+ case "import-all-profiles":
+ document.getElementById("bme-task-profile-import-all")?.click();
+ return;
case "restore-default-profile": {
const confirmed = window.confirm(
"这会重建当前任务的默认预设,并切换到默认预设。是否继续?",
@@ -2100,6 +2149,13 @@ function _renderTaskProfileWorkspace(state) {
`,
)
.join("")}
+
+
+