解决导入不成功的问题

This commit is contained in:
yinjun.chen1
2026-09-18 09:26:21 +08:00
parent 1b0c3c012c
commit bca3006142
+41 -41
View File
@@ -135,7 +135,22 @@ export function initTransfer(ctx: PopupCtx) {
const { environments: existingEnvs, activeEnvId } = await loadEnvironments(); const { environments: existingEnvs, activeEnvId } = await loadEnvironments();
// 分支 A:导入 v3 环境结构 —— 按"环境名"匹配,已存在的环境跳过,新的环境整批导入 // 公共:构造一条 DomainConfig,允许 username/password 为空
const makeConfig = (cfg: any): DomainConfig => ({
id: cfg.id || genCfgId(),
domain: cfg.domain,
alias: cfg.alias || null,
username: cfg.username || "",
password: cfg.password || "",
autoSubmit: cfg.autoSubmit !== false,
usernameSelector: cfg.usernameSelector || null,
passwordSelector: cfg.passwordSelector || null,
submitSelector: cfg.submitSelector || null,
enabled: cfg.enabled !== false,
delayMs: cfg.delayMs || null,
});
// 分支 A:导入 v3 环境结构 —— 同名环境合并配置(按 domain 去重),新环境创建
if (incomingEnvironments) { if (incomingEnvironments) {
const existingNames = new Set(existingEnvs.map((e) => e.name)); const existingNames = new Set(existingEnvs.map((e) => e.name));
let addedEnvs = 0; let addedEnvs = 0;
@@ -146,39 +161,31 @@ export function initTransfer(ctx: PopupCtx) {
skippedCfgs += env?.configs?.length || 0; skippedCfgs += env?.configs?.length || 0;
continue; continue;
} }
let targetEnv: Environment;
if (existingNames.has(env.name)) { if (existingNames.has(env.name)) {
// 同名环境:跳过整个环境 // 同名环境:合并配置到现有环境
skippedCfgs += env.configs?.length || 0; targetEnv = existingEnvs.find((e) => e.name === env.name)!;
continue; } else {
} // 新环境:创建后再合并
existingNames.add(env.name); existingNames.add(env.name);
const newEnv: Environment = { targetEnv = { id: genId(), name: env.name, configs: [] };
id: genId(), existingEnvs.push(targetEnv);
name: env.name, addedEnvs++;
configs: [], }
}; const seenDomains = new Set(targetEnv.configs.map((c) => c.domain));
for (const cfg of env.configs || []) { for (const cfg of env.configs || []) {
if (!cfg || !cfg.domain || !cfg.username || !cfg.password) { if (!cfg?.domain) {
skippedCfgs++; skippedCfgs++;
continue; continue;
} }
newEnv.configs.push({ if (seenDomains.has(cfg.domain)) {
id: cfg.id || genCfgId(), skippedCfgs++;
domain: cfg.domain, continue;
alias: cfg.alias || null, }
username: cfg.username, seenDomains.add(cfg.domain);
password: cfg.password, targetEnv.configs.push(makeConfig(cfg));
autoSubmit: cfg.autoSubmit !== false,
usernameSelector: cfg.usernameSelector || null,
passwordSelector: cfg.passwordSelector || null,
submitSelector: cfg.submitSelector || null,
enabled: cfg.enabled !== false,
delayMs: cfg.delayMs || null,
});
addedCfgs++; addedCfgs++;
} }
existingEnvs.push(newEnv);
addedEnvs++;
} }
await saveEnvironments(existingEnvs, activeEnvId ?? undefined); await saveEnvironments(existingEnvs, activeEnvId ?? undefined);
await ctx.renderEnvSelect(); await ctx.renderEnvSelect();
@@ -188,12 +195,17 @@ export function initTransfer(ctx: PopupCtx) {
} }
// 分支 B:导入 v1/v2 配置数组 —— 合并到当前激活环境,相同 domain 跳过 // 分支 B:导入 v1/v2 配置数组 —— 合并到当前激活环境,相同 domain 跳过
const curEnv = existingEnvs.find((e) => e.id === activeEnvId) || existingEnvs[0]; let curEnv = existingEnvs.find((e) => e.id === activeEnvId) || existingEnvs[0];
if (!curEnv) {
// 无任何环境时先创建一个,否则没有地方放配置
curEnv = { id: genId(), name: "默认", configs: [] };
existingEnvs.push(curEnv);
}
const seenDomains = new Set(curEnv.configs.map((c) => c.domain)); const seenDomains = new Set(curEnv.configs.map((c) => c.domain));
let added = 0; let added = 0;
let skipped = 0; let skipped = 0;
for (const cfg of incomingConfigs || []) { for (const cfg of incomingConfigs || []) {
if (!cfg || !cfg.domain || !cfg.username || !cfg.password) { if (!cfg?.domain) {
skipped++; skipped++;
continue; continue;
} }
@@ -202,19 +214,7 @@ export function initTransfer(ctx: PopupCtx) {
continue; continue;
} }
seenDomains.add(cfg.domain); seenDomains.add(cfg.domain);
curEnv.configs.push({ curEnv.configs.push(makeConfig(cfg));
id: cfg.id || genCfgId(),
domain: cfg.domain,
alias: cfg.alias || null,
username: cfg.username,
password: cfg.password,
autoSubmit: cfg.autoSubmit !== false,
usernameSelector: cfg.usernameSelector || null,
passwordSelector: cfg.passwordSelector || null,
submitSelector: cfg.submitSelector || null,
enabled: cfg.enabled !== false,
delayMs: cfg.delayMs || null,
});
added++; added++;
} }
await saveEnvironments(existingEnvs); await saveEnvironments(existingEnvs);