mirror of
https://github.com/babalae/bettergi-scripts-list.git
synced 2026-04-01 06:09:50 +08:00
feat(config): 添加设置初始化和多复选框配置管理功能
- 新增info对象用于存储manifest和settings信息 - 添加manifest.json路径配置 - 实现initSettings函数用于读取和解析设置文件 - 实现getMultiCheckboxMap函数用于获取多复选框映射表 - 实现getValueByMultiCheckboxName函数用于获取复选框组对应值 - 在main.js中引入并调用initSettings进行设置初始化 - 扩展导出接口包含新的设置管理函数
This commit is contained in:
@@ -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<Map>} 返回一个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<any>} 返回一个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
|
||||
}
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user