From a80b9c2d15708f064b0aca502638a0cc3454aa60 Mon Sep 17 00:00:00 2001 From: yan Date: Tue, 20 Jan 2026 15:17:07 +0800 Subject: [PATCH] =?UTF-8?q?fix(FullyAutoAndSemiAutoTools):=20=E4=BC=98?= =?UTF-8?q?=E5=8C=96=E8=B7=AF=E5=BE=84=E7=AD=9B=E9=80=89=E9=80=BB=E8=BE=91?= =?UTF-8?q?=E5=B9=B6=E4=BF=AE=E5=A4=8D=E9=85=8D=E7=BD=AE=E5=8A=A0=E8=BD=BD?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 修改循环逻辑,仅遍历有子节点的路径项 - 添加父级节点的层级名称设置功能 - 增加路径配置列表加载检查,防止未初始化时出错 - 重构设置过滤逻辑,提高层级匹配准确性 - 优化路径匹配算法,确保只有含子节点的路径参与筛选 - 移除冗余代码,简化树形结构转列表逻辑 --- repo/js/FullyAutoAndSemiAutoTools/main.js | 62 +++++++++++++++++++---- 1 file changed, 53 insertions(+), 9 deletions(-) diff --git a/repo/js/FullyAutoAndSemiAutoTools/main.js b/repo/js/FullyAutoAndSemiAutoTools/main.js index 9d72815d4..8ff12456b 100644 --- a/repo/js/FullyAutoAndSemiAutoTools/main.js +++ b/repo/js/FullyAutoAndSemiAutoTools/main.js @@ -215,8 +215,8 @@ async function initRefresh(settingsConfig) { PATH_JSON_LIST = pathJsonList - - for (const element of pathJsonList) { + const forList=pathJsonList.filter(item=>item.child_names.length>0) + for (const element of forList) { const pathRun = element.path // 检查路径是否被允许 @@ -310,6 +310,10 @@ async function initRefresh(settingsConfig) { label: `${p}选择要执行的${item.level + 1}级路径`, options: [] } + let filter = PATH_JSON_LIST.filter(list_item => list_item.id === item.parentId).find(); + if (filter) { + filter.levelName = name || undefined + } // leveJson.options = leveJson.options.concat(item.child_names) leveJson.options = [...item.child_names] if (leveJson.options && leveJson.options.length > 0) { @@ -441,6 +445,11 @@ async function loadUidSettingsMap(uidSettingsMap) { let uidSettings = uidSettingsMap.get(Record.uid); // 如果存在用户设置 if (uidSettings) { + if (!loadPathJsonListByUid()) { + throw new Error( + "未找到 PATH_JSON_LIST,请先执行一次【刷新配置】" + ); + } try { // 筛选出名称为'config_run'的设置项 uidSettings.filter( @@ -455,7 +464,9 @@ async function loadUidSettingsMap(uidSettingsMap) { // 刷新settings自动设置执行 item.label = "当前配置uid:\{" + Record.uid + "\}\n(仅仅显示配置uid无其他作用)" }) + let filterSettings = [] const filterUidSettings = uidSettings.filter(item => item.name.startsWith(levelName)) + filterSettings = filterUidSettings uidSettings = Array.from(new Set(uidSettings).difference(new Set(filterUidSettings))) try { loadingLevel = parseInt(settings.loading_level) @@ -465,12 +476,48 @@ async function loadUidSettingsMap(uidSettingsMap) { // loadingLevel = loadingLevel < 1 ? 2 : loadingLevel } - const levelSettings = filterUidSettings.filter(item => { + //todo: 高阶层级过滤 + /** + * 实例:pathing\地方特产\ + * 地方特产 + * 实例:pathing\地方特产\枫丹\ + * 地方特产->枫丹 + * 实例:pathing\地方特产\枫丹\幽光星星\ + * 地方特产->枫丹->幽光星星 + * 实例:pathing\地方特产\枫丹\幽光星星\幽光星星@jbcaaa\ + * 地方特产->枫丹->幽光星星->幽光星星@jbcaaa + */ + // const keys = new Set([]) + // + // function countMatchingElements(mainSet, subset) { + // const mainSetObj = new Set(mainSet); + // return subset.filter(item => mainSetObj.has(item)).length; + // } + // + // const key = keys[keys.size - 1] + // // PATH_JSON_LIST.filter(item => item.level > 0) + // filterUidSettings.filter(item => { + // const bracketContent = getBracketContent(item.label); + // if (key.includes(bracketContent)) { + // const fullPathNamesList = Array.from(new Set(PATH_JSON_LIST.filter(item => bracketContent.includes(item.name)).map(item => { + // const fileName = item.fullPathNames[item.fullPathNames.length - 1] + // if (fileName.endsWith(".json")) { + // const set = new Set(item.fullPathNames); + // set.delete(fileName) + // return Array.from(set) + // } + // return item.fullPathNames + // }))); + // + // } + // }) + const levelSettings = filterSettings.filter(item => { const level_all = item.name.replaceAll(levelName, ""); // 获取级别 const level = level_all.split("_").filter(item => item?.trim() !== "").map(parseInt)[0] if (false && loadingLevel === level + 1) { - //只加载对应级别的设置 + //只加载对应级别的设置 + return loadingLevel === level + 1 } // 检查级别是否大于等于加载层级 return loadingLevel > level @@ -538,7 +585,7 @@ async function initRun(config_run) { const selectedOptions = multiJson.options; // 2. 从 PATH_JSON_LIST 中筛选命中的路径 - let matchedPaths = PATH_JSON_LIST.filter(item => { + let matchedPaths = PATH_JSON_LIST.filter(item => item.child_names.length > 0).filter(item => { const hitParent = item.fullPathNames.includes(labelParentName); const hitOption = selectedOptions.some(opt => item.fullPathNames.some(name => name.includes(opt)) @@ -1237,7 +1284,6 @@ async function getValueByMultiCheckboxName(name) { } - /** * 获取字符串中第一个方括号对之间的内容 * @param {string} str - 输入的字符串 @@ -1786,9 +1832,7 @@ async function treeToList(treeList = []) { if (element.isFile) { list.push(element); } - if (child && child.length > 0) { - list = [...list, ...await treeToList(child)] - } + list = [...list, ...await treeToList(child)] } return list }