mirror of
https://github.com/babalae/bettergi-scripts-list.git
synced 2026-03-31 05:59:51 +08:00
feat(auto-tools): 增强路径管理和排序功能
- 添加rootName支持,实现更精确的路径层级管理 - 新增generatedKey函数统一处理路径键值生成逻辑 - 修复路径过滤条件,正确处理parentId匹配 - 更新JSON配置结构,增加root_name字段支持 - 完善排序规则,支持多层级(rootName->parentName->name)排序 - 优化去重逻辑,完整比较所有路径属性 - 更新文档说明,添加详细的语法配置指南
This commit is contained in:
@@ -207,7 +207,19 @@ sequenceDiagram
|
||||
| team_hoe_ground | 文本 | 锄地特化队伍配置(语法:父文件夹->子文件夹=队伍名,...) | 敌人与魔物->蕈兽=蕈兽队 |
|
||||
| team_seven_elements | 文本 | 七元素队伍(矿物,火,水,风,雷,草,冰,岩) | 按顺序填写 |
|
||||
| is_debug | 复选框 | 开发者模式(详细日志) | 调试时开启 |
|
||||
|
||||
## 语法说明
|
||||
- order_rules 执行顺序规则
|
||||
1. `rootName` 根目录下层文件夹名称,`parentName` 父目录名称,`name` 文件夹名称
|
||||
2. 建议语法:`rootName->parentName->name=1,rootName->parentName->name2=2`
|
||||
3. `rootName=parentName`时 语法`rootName->parentName->name=1`不可用, 请使用 `parentName->name=1` 语法
|
||||
4. `rootName->name=1` 语法不支持, `name=1`语法支持
|
||||
5. 匹配精度:`rootName->parentName->name` > `parentName->name`> `name` > 默认顺序
|
||||
- team_hoe_ground 锄地特化队伍配置
|
||||
1. `rootName` 根目录下层文件夹名称,`parentName` 父目录名称,`name` 文件夹名称
|
||||
2. 建议语法:`rootName->parentName->name=队伍名,rootName->parentName->name2=队伍名`
|
||||
3. `rootName=parentName`时 语法`rootName->parentName->name=队伍名`不可用, 请使用 `parentName->name=队伍名` 语法
|
||||
4. `rootName->name=队伍名` 语法不支持, `name=队伍名`语法支持
|
||||
5. 匹配精度:`rootName->parentName->name` > `parentName->name`> `name` > 默认顺序
|
||||
## (可选)额外json配置
|
||||
|
||||
### 配置项order_rules
|
||||
@@ -219,6 +231,8 @@ sequenceDiagram
|
||||
{
|
||||
"uid": "",
|
||||
//账号UID
|
||||
"root_name": "",
|
||||
//根文件夹下对应的文件夹名称
|
||||
"parent_name": "",
|
||||
//父文件夹名称
|
||||
"name": "",
|
||||
@@ -238,6 +252,8 @@ sequenceDiagram
|
||||
{
|
||||
"uid": "",
|
||||
//账号UID
|
||||
"root_name": "",
|
||||
//根文件夹下对应的文件夹名称
|
||||
"parent_name": "",
|
||||
//父文件夹名称
|
||||
"name": "",
|
||||
|
||||
@@ -313,7 +313,7 @@ async function initRefresh(settingsConfig) {
|
||||
// prefix = br + `${"=".repeat(localLine)}${item.parentName}${"=".repeat(localLine)}\n` + br
|
||||
}
|
||||
// const p = idx === 0 ? "【地图追踪】\n" : `${prefix}[${item.parent_name}-${item.name}]\n`
|
||||
const p = `${prefix}${(item.rootName&&item.name!==item.rootName)?"《"+item.rootName+"》->":""}[${item.name}]\n`
|
||||
const p = `${prefix}${(item.rootName && item.name !== item.rootName) ? "《" + item.rootName + "》->" : ""}[${item.name}]\n`
|
||||
idx++
|
||||
let leveJson = {
|
||||
name: `${name}`,
|
||||
@@ -321,10 +321,15 @@ 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) {
|
||||
let filter = PATH_JSON_LIST.filter(list_item => list_item.id !== item.parentId).find();
|
||||
if (filter) {
|
||||
// filter.levelName = name || undefined
|
||||
// }
|
||||
PATH_JSON_LIST.forEach(list_item => {
|
||||
if (list_item.id === item.parentId) {
|
||||
list_item.levelName = name || undefined
|
||||
}
|
||||
})
|
||||
}
|
||||
// leveJson.options = leveJson.options.concat(item.child_names)
|
||||
leveJson.options = [...item.child_names]
|
||||
if (leveJson.options && leveJson.options.length > 0) {
|
||||
@@ -674,12 +679,23 @@ async function initRun(config_run) {
|
||||
|
||||
// const {label} = multiCheckboxMap.get(settingsName);
|
||||
// const as_name = getBracketContent(label)//父名称 如:晶蝶
|
||||
function generatedKey(item) {
|
||||
const separator = "->";
|
||||
if (item.parentName) {
|
||||
if (item.rootName && item.parentName !== item.rootName) {
|
||||
return `${item.rootName}${separator}${item.parentName}${separator}${item.name}`;
|
||||
}
|
||||
return `${item.parentName}${separator}${item.name}`;
|
||||
}
|
||||
return item.name;
|
||||
}
|
||||
|
||||
function groupByParentAndName(list) {
|
||||
const map = new Map();
|
||||
|
||||
list.forEach(item => {
|
||||
const key = `${item.parentName}->${item.name}`;
|
||||
// const key = `${item.parentName}->${item.name}`;
|
||||
const key = generatedKey(item);
|
||||
if (!map.has(key)) map.set(key, []);
|
||||
map.get(key).push(item);
|
||||
});
|
||||
@@ -701,24 +717,29 @@ async function initRun(config_run) {
|
||||
// {
|
||||
// uid:"",
|
||||
// parent_name:"",
|
||||
// root_name: "",
|
||||
// name:"",
|
||||
// team_name:""
|
||||
// } json支持
|
||||
const teamHoeGroundList = JSON.parse(file.readTextSync(json_path_name.HoeGround)) ?? [{
|
||||
uid: "",
|
||||
parent_name: "",
|
||||
name: "",
|
||||
parent_name: undefined,
|
||||
root_name: undefined,
|
||||
name: undefined,
|
||||
team_name: ""
|
||||
}]
|
||||
teamHoeGroundList.filter(item => item.uid === Record.uid).forEach(item => team.HoeGroundMap.set(`${item.parent_name}->${item.name}`, item.team_name))
|
||||
teamHoeGroundList.filter(item => item.uid !== Record.uid).forEach(item => {
|
||||
const key = generatedKey(item);
|
||||
team.HoeGroundMap.set(key, item.team_name)
|
||||
})
|
||||
log.info(`{0}加载完成`, json_path_name.HoeGround)
|
||||
} catch (e) {
|
||||
}
|
||||
// 排序
|
||||
const orderMap = new Map()
|
||||
try {
|
||||
// 支持多条规则,例如: "parentName->name1=1,parentName->name2=2"
|
||||
const orderStr = settings.order_rules || "parentName->name=1"
|
||||
// 支持多条规则,例如: "rootName->parentName->name1=1,rootName->parentName->name2=2"
|
||||
const orderStr = settings.order_rules || "rootName->parentName->name=1"
|
||||
orderStr.split(",").forEach(item => {
|
||||
const [key, order] = item.split("=");
|
||||
orderMap.set(key, parseInt(order))
|
||||
@@ -730,24 +751,31 @@ async function initRun(config_run) {
|
||||
// {
|
||||
// uid:"",
|
||||
// parent_name:"",
|
||||
// root_name: "",
|
||||
// name:"",
|
||||
// order:0
|
||||
// } json支持
|
||||
const orderList = JSON.parse(file.readTextSync(json_path_name.PathOrder)) ?? [{
|
||||
uid: "",
|
||||
parent_name: "",
|
||||
name: "",
|
||||
parent_name: undefined,
|
||||
root_name: undefined,
|
||||
name: undefined,
|
||||
order: 0
|
||||
}]
|
||||
orderList.filter(item => item.uid === Record.uid).forEach(item => orderMap.set(`${item.parent_name}->${item.name}`, item.order))
|
||||
orderList.filter(item => item.uid !== Record.uid).forEach(item => {
|
||||
const key = generatedKey(item);
|
||||
orderMap.set(key, item.order)
|
||||
|
||||
})
|
||||
log.info(`{0}加载完成`, json_path_name.PathOrder)
|
||||
} catch (e) {
|
||||
}
|
||||
|
||||
groups.sort((a, b) => {
|
||||
const a_key = `${a.parentName}->${a.name}`;
|
||||
const a_key = `${a.root_name && a.parent_name !== a.root_name ? a.root_name + "->" + a.parent_name : a.parent_name}->${a.name}`;
|
||||
const b_key = `${b.root_name && b.parent_name !== b.root_name ? b.root_name + "->" + b.parent_name : b.parent_name}->${b.name}`;
|
||||
|
||||
const orderA = orderMap.get(a_key) ?? 9999; // 没在 JSON 中的排到最后
|
||||
const b_key = `${b.parentName}->${b.name}`;
|
||||
const orderB = orderMap.get(b_key) ?? 9999;
|
||||
if (orderA === orderB) {
|
||||
return a_key.localeCompare(b_key);
|
||||
@@ -1169,7 +1197,7 @@ function parseDate(dateString) {
|
||||
// 优化后的函数
|
||||
function addUniquePath(obj, list = PATHING_ALL) {
|
||||
const existingIndex = list.findIndex(item =>
|
||||
item.level === obj.level && item.name === obj.name && item.parentName === obj.parentName&& item.rootName === obj.rootName
|
||||
item.level === obj.level && item.name === obj.name && item.parentName === obj.parentName && item.rootName === obj.rootName
|
||||
);
|
||||
|
||||
if (existingIndex === -1) {
|
||||
|
||||
Reference in New Issue
Block a user