From ceef9c8971dd58954c684b6c6a3282b23bbf7b05 Mon Sep 17 00:00:00 2001 From: yan Date: Sun, 8 Feb 2026 12:53:32 +0800 Subject: [PATCH] =?UTF-8?q?feat(config):=20=E6=B7=BB=E5=8A=A0=E8=AE=BE?= =?UTF-8?q?=E7=BD=AE=E5=88=9D=E5=A7=8B=E5=8C=96=E5=92=8C=E5=A4=9A=E5=A4=8D?= =?UTF-8?q?=E9=80=89=E6=A1=86=E9=85=8D=E7=BD=AE=E7=AE=A1=E7=90=86=E5=8A=9F?= =?UTF-8?q?=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增info对象用于存储manifest和settings信息 - 添加manifest.json路径配置 - 实现initSettings函数用于读取和解析设置文件 - 实现getMultiCheckboxMap函数用于获取多复选框映射表 - 实现getValueByMultiCheckboxName函数用于获取复选框组对应值 - 在main.js中引入并调用initSettings进行设置初始化 - 扩展导出接口包含新的设置管理函数 --- repo/js/AutoPlanDomain/config/config.js | 92 +++++++++++++++++++++++++ repo/js/AutoPlanDomain/main.js | 3 +- 2 files changed, 94 insertions(+), 1 deletion(-) diff --git a/repo/js/AutoPlanDomain/config/config.js b/repo/js/AutoPlanDomain/config/config.js index a03ebe34b..eb63edb2c 100644 --- a/repo/js/AutoPlanDomain/config/config.js +++ b/repo/js/AutoPlanDomain/config/config.js @@ -3,8 +3,13 @@ const config = { domain: { config: '' }, + info: { + manifest:{}, + settings: undefined + }, // path: { + manifest: "manifest.json", domain: `./config/domain.json` }, //所有秘境信息 @@ -21,6 +26,90 @@ const config = { domainItemsMap: new Map(), } +/** + * 初始化设置函数 + * 从配置文件中读取设置信息并返回 + * @returns {Object} 返回解析后的JSON设置对象 + */ +async function initSettings() { + // 默认设置文件路径 + let settings_ui = "settings.json"; + try { + // 读取并解析manifest.json文件 + config.info.manifest = JSON.parse(file.readTextSync(config.path.manifest)); + // 调试日志:输出manifest内容 + log.debug("manifest={key}", config.info.manifest); + // 调试日志:输出manifest中的settings_ui配置 + log.debug("settings_ui={key}", config.info.manifest.settings_ui); + log.info(`|脚本名称:{name},版本:{version}`, config.info.manifest.name, config.info.manifest.version); + if (config.info.manifest.bgi_version) { + log.info(`|最小可执行BGI版本:{bgi_version}`, config.info.manifest.bgi_version); + } + log.info(`|脚本作者:{authors}\n`, config.info.manifest.authors.map(a => a.name).join(",")); + // 更新settings_ui变量为manifest中指定的路径 + settings_ui = config.info.manifest.settings_ui + } catch (error) { + // 捕获并记录可能的错误 + log.warn("{error}", error.message); + } + // 读取并解析设置文件 + const settingsJson = JSON.parse(file.readTextSync(settings_ui)); + // 如果configSettings未定义,则将其设置为解析后的设置对象 + if (!config.info.settings) { + config.info.settings = settingsJson + } + // 调试日志:输出最终解析的设置对象 + log.debug("settingsJson={key}", settingsJson); + // 返回设置对象 + return settingsJson +} +/** + * 获取多复选框的映射表 + * 该函数会从初始化的设置中提取所有类型为"multi-checkbox"的条目, + * 并将这些条目的名称和对应的选项值存储在一个Map对象中返回 + * @returns {Promise} 返回一个Promise对象,解析为包含多复选框配置的Map + */ +async function getMultiCheckboxMap() { + // 如果configSettings存在则使用它,否则调用initSettings()函数获取 + const settingsJson = config.info.settings ? config.info.settings : await initSettings(); + // 创建一个新的Map对象用于存储多复选框的配置 + // Map结构为: {名称: 选项数组} + let multiCheckboxMap = new Map(); + // 遍历设置JSON中的每个条目 + settingsJson.forEach((entry) => { + // 如果条目没有name属性或者类型不是"multi-checkbox",则跳过该条目 + if (!entry.name || entry.type !== "multi-checkbox") return; + // 解构条目中的name和label属性,便于后续使用 + const {name, label} = entry; + // 获取当前name对应的设置值,如果存在则转换为数组,否则使用空数组 + const options = settings[name] ? Array.from(settings[name]) : []; + // 记录调试信息,包含名称、标签、选项和选项数量 + log.debug("name={key1},label={key2},options={key3},length={key4}", name, label, JSON.stringify(options), options.length); + // 将名称和对应的选项数组存入Map + multiCheckboxMap.set(name, options); + }) + // 返回包含多复选框配置的Map + return multiCheckboxMap +} + +/** + * 根据复选框组名称获取对应的值 + * 这是一个异步函数,用于从复选框映射中获取指定名称的值 + * @param {string} name - 复选框组的名称 + * @returns {Promise} 返回一个Promise,解析为复选框组对应的值 + */ +async function getValueByMultiCheckboxName(name) { + // 获取复选框映射表,这是一个异步操作 + let multiCheckboxMap = await getMultiCheckboxMap() + // log.debug("multiCheckboxMap={key}", JSON.stringify(multiCheckboxMap)) + // multiCheckboxMap.entries().forEach(([name, options]) => { + // log.debug("name={key1},options={key2}", name, JSON.stringify(options)) + // }) + // 从映射表中获取并返回指定名称对应的值 + let values = multiCheckboxMap.get(name); + log.debug("values={key}", JSON.stringify(values)) + return values +} async function initConfig() { /* const domainList = [ { @@ -301,5 +390,8 @@ async function initConfig() { export { config, + initSettings, + getMultiCheckboxMap, + getValueByMultiCheckboxName, initConfig } \ No newline at end of file diff --git a/repo/js/AutoPlanDomain/main.js b/repo/js/AutoPlanDomain/main.js index ad31a82aa..3ca005d15 100644 --- a/repo/js/AutoPlanDomain/main.js +++ b/repo/js/AutoPlanDomain/main.js @@ -1,4 +1,4 @@ -import {config, initConfig} from './config/config'; +import {config, initConfig,initSettings} from './config/config'; /** * 自动执行秘境任务的异步函数 @@ -89,6 +89,7 @@ function initDomainOrderList(domainConfig) { async function init() { // 调用initConfig函数并等待其完成 // 这是一个异步初始化配置的步骤 + await initSettings() await initConfig(); }