解决导入不成功的问题
This commit is contained in:
+41
-41
@@ -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);
|
||||||
|
targetEnv = { id: genId(), name: env.name, configs: [] };
|
||||||
|
existingEnvs.push(targetEnv);
|
||||||
|
addedEnvs++;
|
||||||
}
|
}
|
||||||
existingNames.add(env.name);
|
const seenDomains = new Set(targetEnv.configs.map((c) => c.domain));
|
||||||
const newEnv: Environment = {
|
|
||||||
id: genId(),
|
|
||||||
name: env.name,
|
|
||||||
configs: [],
|
|
||||||
};
|
|
||||||
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);
|
||||||
|
|||||||
Reference in New Issue
Block a user