更新资源文件
All checks were successful
ci/woodpecker/push/check_format Pipeline was successful

This commit is contained in:
fuyn101 2025-07-08 15:18:01 +08:00
parent 6a836b2505
commit 31e7242edc
52 changed files with 1043 additions and 856 deletions

@ -1 +1 @@
Subproject commit 39e36ab39ed8df3a68e8e424a08ab17edc0f0b09
Subproject commit 521d803b9647e42feb774630790adc703d75724c

@ -1 +1 @@
Subproject commit d6bad2e63c9c8055db38f231ede203de1280dde3
Subproject commit b29dbac9695b219094b0763018510b4bcc82ea6a

@ -1 +1 @@
Subproject commit a4869a31c7fc316e9fe2b4f2c7c26d4842ef8450
Subproject commit 83bf369929da847be61e7e9e2309028f4619260c

View file

@ -27,29 +27,47 @@ def 加载json(file_path):
class Arknights数据处理器:
def __init__(self):
self.当前时间戳 = datetime.now().timestamp()
仓库_1 = "ArknightsGameResource/gamedata/excel" # noqa: F841
仓库_2 = "ArknightsGameData/zh_CN/gamedata/excel" # noqa: F841
仓库_3 = "ArknightsResource/gamedata/excel" # noqa: F841
self.物品表 = 加载json(f"./{仓库_1}/item_table.json")
self.干员表 = 加载json(f"./{仓库_1}/character_table.json")
self.阿米娅表 = 加载json(f"./{仓库_1}/char_patch_table.json")
self.抽卡表 = 加载json(f"./{仓库_1}/gacha_table.json")
self.关卡表 = 加载json(f"./{仓库_1}/stage_table.json")
self.活动表 = 加载json(f"./{仓库_1}/activity_table.json")
self.基建表 = 加载json(f"./{仓库_1}/building_data.json")
self.游戏变量 = 加载json(f"./{仓库_1}/gamedata_const.json")
self.模组 = 加载json(f"./{仓库_1}/uniequip_table.json")
self.战斗技能 = 加载json(f"./{仓库_1}/skill_table.json")
self.物品表 = 加载json(f"./{仓库_2}/item_table.json")
self.干员表 = 加载json(f"./{仓库_2}/character_table.json")
self.阿米娅表 = 加载json(f"./{仓库_2}/char_patch_table.json")
self.抽卡表 = 加载json(f"./{仓库_2}/gacha_table.json")
self.关卡表 = 加载json(f"./{仓库_2}/stage_table.json")
self.活动表 = 加载json(f"./{仓库_2}/activity_table.json")
self.基建表 = 加载json(f"./{仓库_2}/building_data.json")
self.游戏变量 = 加载json(f"./{仓库_2}/gamedata_const.json")
self.模组 = 加载json(f"./{仓库_2}/uniequip_table.json")
self.战斗技能 = 加载json(f"./{仓库_2}/skill_table.json")
self.装仓库物品的字典 = {"NORMAL": [], "CONSUME": [], "MATERIAL": []}
self.常驻关卡 = 加载json("mower/data/stage_data.json")
self.所有buff = []
self.限定十连 = self.抽卡表["limitTenGachaItem"]
self.联动十连 = self.抽卡表["linkageTenGachaItem"]
self.普通十连 = self.抽卡表["normalGachaItem"]
self.所有卡池 = self.限定十连 + self.联动十连 + self.普通十连
self.总掉落表 = []
def 添加物品至前端文件(self):
@ -57,16 +75,21 @@ class Arknights数据处理器:
def 检查图标代码匹配(目标图标代码, 物品类型, 分类类型, 排序代码):
匹配结果 = False
for 池子限时物品 in self.所有卡池:
if (
池子限时物品["itemId"] == 目标图标代码
and self.当前时间戳 > 池子限时物品["endTime"]
):
匹配结果 = True
break
分割部分 = 目标图标代码.split("_")
if len(分割部分) == 2 and 分割部分[0].endswith("recruitment10"):
匹配结果 = True
if len(分割部分) == 6 and int(分割部分[5]) < 2023:
匹配结果 = True
@ -75,91 +98,136 @@ class Arknights数据处理器:
if len(分割部分) == 3 and 目标图标代码.startswith("voucher_full"):
匹配结果 = True
if 目标图标代码 == "ap_supply_lt_60":
匹配结果 = True
抽卡 = self.抽卡表.get("gachaPoolClient", [])
for 卡池 in 抽卡:
if 卡池["LMTGSID"] == 目标图标代码 and self.当前时间戳 > int(
卡池["endTime"]
):
匹配结果 = True
if 分类类型 == "NONE":
匹配结果 = True
if 排序代码 <= 0:
匹配结果 = True
if 分类类型 == "NONE":
for item in self.总掉落表:
if 目标图标代码 == item["id"]:
匹配结果 = False
return 匹配结果
self.物品_名称_输出用 = {}
self.物品_名称_模型用 = {}
if not os.path.exists("./ui/public/depot/理智.webp"):
png_image = Image.open("./ArknightsGameResource/item/AP_GAMEPLAY.png")
png_image.save("./ui/public/depot/理智.webp", "WEBP")
if not os.path.exists("./ui/public/depot/EXP.webp"):
png_image = Image.open("./ArknightsGameResource/item/EXP_PLAYER.png")
png_image.save("./ui/public/depot/EXP.webp", "WEBP")
for 物品代码, 物品数据 in self.物品表["items"].items():
中文名称 = 物品数据.get("name", "")
图标代码 = 物品数据.get("iconId", "")
排序代码 = 物品数据.get("sortId", "")
分类类型 = 物品数据.get("classifyType", "")
物品类型 = 物品数据.get("itemType", "")
# 源文件路径 = f"./ArknightsGameResource/item/{图标代码}.png"
源文件路径 = f"./ArknightsResource/items/{图标代码}.png"
排除开关 = False
排除开关 = 检查图标代码匹配(图标代码, 物品类型, 分类类型, 排序代码)
if not 排除开关:
if os.path.exists(源文件路径):
目标文件路径 = f"./ui/public/depot/{中文名称}.webp"
if not os.path.exists(目标文件路径):
png_image = Image.open(源文件路径)
png_image.save(目标文件路径, "WEBP")
if 分类类型 != "NONE":
self.装仓库物品的字典[分类类型].append(
[目标文件路径, 源文件路径]
)
templist = [物品代码, 图标代码, 中文名称, 分类类型, 排序代码]
self.物品_名称_输出用[物品代码] = templist
self.物品_名称_模型用[中文名称] = templist
self.物品_名称_模型用[物品代码] = templist
print(f"复制 {源文件路径}{目标文件路径}")
with open("./mower/data/key_mapping.json", "w", encoding="utf8") as json_file:
json.dump(self.物品_名称_输出用, json_file, ensure_ascii=False, indent=4)
print()
def 干员列表(self):
"""读取干员列表并输出至./mower/data/agent.json"""
干员_名称字典 = {}
for 干员代码, 干员数据 in self.干员表.items():
if not 干员数据["itemObtainApproach"]:
continue
干员名 = 干员数据["name"]
干员_名称字典[干员名] = {
"key": 干员代码,
"profession": 干员数据["profession"],
"name": 干员数据["appellation"],
}
干员头像路径 = f"./ArknightsGameResource/avatar/{干员代码}.png"
# 干员头像路径 = f"./ArknightsResource/avatar/ASSISTANT/{干员代码}.png"
目标路径 = f"./ui/public/avatar/{干员数据['name']}.webp"
if os.path.exists(目标路径):
continue
print(f"{干员名}: {干员代码}")
png_image = Image.open(干员头像路径)
png_image.save(目标路径, "WEBP")
干员_名称字典 = dict(
sorted(干员_名称字典.items(), key=lambda item: len(item[0]))
)
with open("./mower/data/agent.json", "w", encoding="utf-8") as f:
json.dump(干员_名称字典, f, ensure_ascii=False, indent=4)
def 读取卡池(self):
"""读取当前开放的卡池,暂无输出"""
抽卡 = self.抽卡表.get("gachaPoolClient", [])
卡池类型映射 = {
"SINGLE": "单人池",
"LIMITED": "限定池",
@ -173,85 +241,121 @@ class Arknights数据处理器:
for in 抽卡:
卡池名称 = .get("gachaPoolName")
开始时间戳 = .get("openTime")
结束时间戳 = .get("endTime")
卡池类型代码 = .get("gachaPoolId")
卡池出人 = .get("dynMeta")
if self.当前时间戳 < 结束时间戳:
卡池类型 = 卡池类型映射.get(卡池类型代码.split("_")[0], 卡池类型代码)
if 卡池类型代码.split("_")[1] == "ATTAIN":
卡池类型 = "跨年中坚池"
if 卡池名称 == "适合多种场合的强力干员":
卡池名称 = 卡池类型
开始时间 = datetime.fromtimestamp(开始时间戳)
结束时间 = datetime.fromtimestamp(结束时间戳 + 1)
print("卡池名称:", 卡池名称)
print("卡池类型:", 卡池类型)
if 卡池类型 == "中坚池":
print(
卡池出人["main6RarityCharId"],
卡池出人["sub6RarityCharId"],
卡池出人["rare5CharList"],
)
if self.当前时间戳 > 开始时间戳:
print("正在进行")
print("卡池结束时间:", 结束时间)
else:
print("卡池开始时间:", 开始时间)
print("卡池结束时间:", 结束时间)
print(卡池类型代码)
print()
def 输出_活动关卡和掉落(self):
"""读取活动关卡及掉落物并写入./ui/src/pages/stage_data/event_data.json"""
关卡 = self.关卡表["stageValidInfo"]
还未结束的非常驻关卡 = {
:
for , in 关卡.items()
if ["endTs"] != -1 and ["endTs"] > self.当前时间戳
}
还未结束的非常驻关卡 = dict(sorted(还未结束的非常驻关卡.items()))
for , _ in 还未结束的非常驻关卡.items():
关卡代码 = self.关卡表["stages"][]["code"]
if .endswith("#f#"):
关卡代码 += " 突袭"
关卡名称 = self.关卡表["stages"][]["name"]
关卡开始时间戳 = 还未结束的非常驻关卡[]["startTs"]
关卡结束时间戳 = 还未结束的非常驻关卡[]["endTs"]
关卡消耗理智 = self.关卡表["stages"][]["apCost"]
# 关卡结束时间 = datetime.fromtimestamp(还未结束的非常驻关卡[键]["endTs"] + 1)
关卡掉落表 = self.关卡表["stages"][]["stageDropInfo"][
"displayDetailRewards"
]
# print(f"{关卡代码=}{关卡掉落表=}")
self.总掉落表.extend(关卡掉落表)
关卡掉落 = {}
突袭首次掉落 = [
self.物品表.get("items", {}).get(item["id"], {}).get("name", item["id"])
for item in 关卡掉落表
if item["dropType"] in {1, "ONCE"}
]
常规掉落 = [
self.物品表.get("items", {}).get(item["id"], {}).get("name", item["id"])
for item in 关卡掉落表
if item["dropType"] in {2, "NORMAL"}
]
特殊掉落 = [
self.物品表.get("items", {}).get(item["id"], {}).get("name", item["id"])
for item in 关卡掉落表
if item["dropType"] in {3, "SPECIAL"}
]
额外物资 = [
self.物品表.get("items", {}).get(item["id"], {}).get("name", item["id"])
for item in 关卡掉落表
if item["dropType"] in {4, "ADDITIONAL"}
]
首次掉落 = [
self.物品表.get("items", {}).get(item["id"], {}).get("name", item["id"])
for item in 关卡掉落表
if item["dropType"] in {8, "COMPLETE"}
]
关卡掉落 = {
"突袭首次掉落": 突袭首次掉落,
"常规掉落": 常规掉落,
@ -278,10 +382,14 @@ class Arknights数据处理器:
"周日": 1,
}
)
unkey = 0
for item in self.常驻关卡:
item["key"] = unkey
unkey += 1
with open(
"./ui/src/pages/stage_data/event_data.json", "w", encoding="utf-8"
) as f:
@ -289,6 +397,7 @@ class Arknights数据处理器:
def 输出_公招资源(self):
recruit_data = {}
recruit_result_data = {
4: [],
3: [],
@ -296,29 +405,47 @@ class Arknights数据处理器:
1: [],
-1: [],
}
# for 干员代码, 干员数据 in self.干员表.items():
# print(干员代码,干员数据)
recruit_list = self.抽卡表["recruitDetail"].replace("\\n<@rc.eml>", "")
recruit_list = recruit_list.replace("\\n", "")
recruit_list = recruit_list.replace("\r", "")
recruit_list = recruit_list.replace("", "")
recruit_list = recruit_list.replace("<@rc.eml>", "")
recruit_list = recruit_list.replace("</>", "")
recruit_list = recruit_list.replace("/", "")
recruit_list = recruit_list.replace(" ", "\n")
recruit_list = recruit_list.replace("--------------------", "")
recruit_list = recruit_list.replace("<@rc.title>公开招募说明", "")
recruit_list = recruit_list.replace("<@rc.em>※稀有职业需求招募说明※", "")
recruit_list = recruit_list.replace(
"<@rc.em>当职业需求包含高级资深干员,且招募时限为9小时时,招募必得6星干员",
"",
)
recruit_list = recruit_list.replace(
"<@rc.em>当职业需求包含资深干员同时不包含高级资深干员,且招募时限为9小时,则该次招募必得5星干员",
"",
)
recruit_list = recruit_list.replace("<@rc.subtitle>※全部可能出现的干员※", "")
recruit_list = recruit_list.replace("绿色高亮的不可寻访干员,可以在此招募", "")
recruit_list = recruit_list.split("\n")
profession = {
@ -340,28 +467,37 @@ class Arknights数据处理器:
if 干员名 in recruit_list:
tag = 干员数据["tagList"]
# 数据中稀有度从0-5
if isinstance(干员数据["rarity"], str) and 干员数据[
"rarity"
].startswith("TIER_"):
干员数据["rarity"] = int(干员数据["rarity"][-1]) # 减一没了
elif isinstance(干员数据["rarity"], int):
干员数据["rarity"] += 1
else:
raise ValueError(
f"出错:数据结构不对,内容是 {干员数据['rarity']},类型是 {type(干员数据['rarity'])}"
)
if len(干员名) <= 4:
recruit_result_data[len(干员名)].append(干员代码)
else:
recruit_result_data[-1].append(干员代码)
if 干员数据["rarity"] == 5:
tag.append("资深干员")
elif 干员数据["rarity"] == 6:
tag.append("高级资深干员")
if 干员数据["position"] == "MELEE":
tag.append("近战位")
elif 干员数据["position"] == "RANGED":
tag.append("远程位")
@ -377,13 +513,16 @@ class Arknights数据处理器:
干员名, 干员数据["rarity"], 干员数据["tagList"]
)
)
print("载入公招干员数据{}".format(len(recruit_data)))
with open("./mower/data/recruit.json", "w", encoding="utf-8") as f:
json.dump(recruit_data, f, ensure_ascii=False, indent=4)
def 训练仓库的knn模型(self, 模板文件夹, 模型保存路径):
def 提取特征点(模板):
模板 = 模板[40:173, 40:173]
hog_features = hog(
模板,
orientations=18,
@ -398,20 +537,29 @@ class Arknights数据处理器:
def 加载图片特征点_标签(模板类型):
特征点列表 = []
标签列表 = []
for [目标文件路径, 源文件路径] in self.装仓库物品的字典[模板类型]:
模板 = cv2.imread(源文件路径)
模板 = cv2.resize(模板, (213, 213))
特征点 = 提取特征点(模板)
特征点列表.append(特征点)
标签列表.append(self.物品_名称_模型用[目标文件路径[18:-5]][2])
return 特征点列表, 标签列表
def 训练knn模型(images, labels):
knn_classifier = KNeighborsClassifier(
weights="distance", n_neighbors=1, n_jobs=1
)
knn_classifier.fit(images, labels)
return knn_classifier
def 保存knn模型(classifier, filename):
@ -419,16 +567,21 @@ class Arknights数据处理器:
pickle.dump(classifier, f)
模板特征点, 模板标签 = 加载图片特征点_标签(模板文件夹)
knn模型 = 训练knn模型(模板特征点, 模板标签)
保存knn模型(knn模型, 模型保存路径)
def 输出_扫仓库模型(self):
"""输出扫描仓库的Knn模型
和添加物品至前端文件() 有联动 添加物品提供了分类的图片位置"""
self.训练仓库的knn模型("NORMAL", "./mower/static/NORMAL.pkl")
self.训练仓库的knn模型("CONSUME", "./mower/static/CONSUME.pkl")
self.训练仓库的knn模型("MATERIAL", "./mower/static/MATERIAL.pkl")
def 输出_在房间内的干员名的模型(self):
@ -440,22 +593,36 @@ class Arknights数据处理器:
with open("./mower/data/agent.json", "r", encoding="utf-8") as f:
agent_list = json.load(f)
for operator in sorted(agent_list, key=lambda x: len(x), reverse=True):
img = Image.new(mode="L", size=(400, 100))
draw = ImageDraw.Draw(img)
draw.text((50, 20), operator, fill=(255,), font=font)
img = np.array(img, dtype=np.uint8)
img = thres2(img, 200)
dilation = cv2.dilate(img, kernel, iterations=1)
contours, _ = cv2.findContours(
dilation, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE
)
rect = map(lambda c: cv2.boundingRect(c), contours)
x, y, w, h = sorted(rect, key=lambda c: c[0])[0]
img = img[y : y + h, x : x + w]
tpl = np.zeros((46, 265), dtype=np.uint8)
tpl[: img.shape[0], : img.shape[1]] = img
# cv2.imwrite(f"/home/zhao/Desktop/data/{operator}.png", tpl)
data[operator] = tpl
with lzma.open("mower/static/operator_room.model", "wb") as f:
@ -463,70 +630,109 @@ class Arknights数据处理器:
def avatar_and_portrait(self, save_img=False):
mapping = {} # char_285_medic2 -> Lancet-2
for name, data in self.干员表.items():
mapping[name] = data["name"]
for name in self.阿米娅表["infos"]["char_002_amiya"]["tmplIds"]:
mapping[name] = "阿米娅"
def extract(name, scope):
data_path = f"./ArknightsGameResource/{name}"
# data_path = f"./ArknightsResource/{name}"
file_list = os.listdir(data_path)
h, w = loadimg(os.path.join(data_path, file_list[0]), True).shape
total = len(file_list)
col = math.ceil(math.sqrt(total * h / w))
row = math.ceil(total / col)
full = np.zeros((row * h, col * w), dtype=np.uint8)
mask = full.copy()
name_list = []
i = 0
trap_list = []
for filename in file_list:
if filename == "char_017_huang2.png":
continue
x = (i % col) * w
y = (i // col) * h
mx, my = sa(scope, (x, y))
# filename: char_285_medic2_1.png
for j, k in mapping.items():
# j: char_285_medic2
# k: Lancet-2
if filename.startswith(j):
if filename.startswith("trap_"):
if k in trap_list:
break
trap_list.append(k)
img = loadimg(os.path.join(data_path, filename), True)
if img.shape != (h, w):
img = cv2.resize(img, (w, h))
full[y : y + h, x : x + w] = img
cv2.rectangle(mask, mx, my, (255,), -1)
name_list.append(k)
i += 1
break
if save_img:
disp = cv2.bitwise_and(full, mask)
cv2.imwrite(f"{name}.png", disp)
kp, des = fast_keypoints(full, mask)
pt = [p.pt for p in kp]
data = {"w": w, "h": h, "col": col, "name": name_list, "pt": pt, "des": des}
if name == "avatar/ASSISTANT":
name = "avatar"
if name == "charpor":
name = "portrait"
with lzma.open(f"./mower/static/{name}.pkl", "wb") as f:
pickle.dump(data, f)
extract("avatar", ((20, 51), (160, 146)))
extract("portrait", ((20, 115), (160, 190)))
# extract("avatar/ASSISTANT", ((20, 51), (160, 146)))
# extract("charpor", ((20, 51), (160, 146)))
def 获得干员基建描述(self):
buff描述 = self.基建表["buffs"]
buff_table = {}
for buff名称, 相关buff in buff描述.items():
buff_table[buff名称] = [
相关buff["buffName"],
@ -541,6 +747,7 @@ class Arknights数据处理器:
干员技能列表 = []
name_key = 0
for 角色id, 相关buff in self.基建表["chars"].items():
干员技能字典 = {
"key": 0,
@ -549,11 +756,20 @@ class Arknights数据处理器:
"child_skill": [],
}
干员技能字典["name"] = self.干员表[角色id]["name"]
try:
干员技能字典["name"] = self.干员表[角色id]["name"]
except KeyError:
print(f"警告:在干员表中找不到 角色id '{角色id}',已跳过。")
continue
skill_key = 0
name_key += 1
干员技能字典["key"] = name_key
for item in 相关buff["buffChar"]:
skill_level = 0
@ -562,8 +778,11 @@ class Arknights数据处理器:
干员技能详情 = {}
干员技能详情["skill_key"] = skill_key
干员技能详情["skill_level"] = skill_level
skill_level += 1
phase = (
item2["cond"]["phase"][-1]
if isinstance(item2["cond"]["phase"], (list, str))
@ -573,55 +792,84 @@ class Arknights数据处理器:
干员技能详情["phase_level"] = (
f"{phase} {item2['cond']['level']}"
)
干员技能详情["skillname"] = buff_table[item2["buffId"]][0]
text = buff_table[item2["buffId"]][1]
pattern = r"<\$(.*?)>"
matches = re.findall(pattern, text)
ex_string = []
干员技能详情["buffer"] = False
干员技能详情["buffer_des"] = []
if matches:
干员技能详情["buffer"] = True
ex_string = list(
set([match.replace(".", "_") for match in matches])
)
ex_string.sort()
干员技能详情["buffer_des"] = ex_string
self.所有buff.extend(ex_string)
干员技能详情["des"] = text
干员技能详情["roomType"] = roomType[
buff_table[item2["buffId"]][2]
]
干员技能详情["buffCategory"] = buff_table[item2["buffId"]][3]
干员技能详情["skillIcon"] = buff_table[item2["buffId"]][4]
干员技能详情["buffColor"] = buff_table[item2["buffId"]][5]
干员技能详情["textColor"] = buff_table[item2["buffId"]][6]
干员技能字典["child_skill"].append(干员技能详情)
干员技能详情 = []
干员技能字典["span"] = len(干员技能字典["child_skill"])
skill_key += 1
干员技能列表.append(干员技能字典.copy())
干员技能列表 = sorted(干员技能列表, key=lambda x: (-x["key"]))
# print(干员技能列表)
with open("./mower/data/building_skill/skill.json", "w", encoding="utf-8") as f:
json.dump(干员技能列表, f, ensure_ascii=False, indent=4)
def 转换输出基建buff(self):
buff_table = {}
pattern = r"<\$(.*?)>"
for item in self.游戏变量["termDescriptionDict"]:
matches = re.findall(
pattern, self.游戏变量["termDescriptionDict"][item]["description"]
)
matches = [match.replace(".", "_") for match in matches]
dict1 = self.游戏变量["termDescriptionDict"][item]
dict1["buffer"] = []
if item.startswith("cc") and matches:
dict1["buffer"] = matches
buff_table[item.replace(".", "_")] = dict1
with open(
@ -631,41 +879,58 @@ class Arknights数据处理器:
def 添加基建技能图标(self):
# 源目录和目标目录
source_dir = "./ArknightsGameResource/building_skill"
destination_dir = "./ui/public/building_skill"
# 创建目标目录(如果不存在)
os.makedirs(destination_dir, exist_ok=True)
# 遍历源目录中的所有文件
for root, dirs, files in os.walk(source_dir):
for file in files:
if file.endswith(".png"):
src_file_path = os.path.join(root, file)
# 修改文件扩展名为 .webp
dest_file_name = os.path.splitext(file)[0] + ".webp"
dest_file_path = os.path.join(destination_dir, dest_file_name)
if not os.path.exists(dest_file_path):
with Image.open(src_file_path) as img:
img.save(dest_file_path, "webp")
print(f"转换: {src_file_path}{dest_file_path}")
else:
print(f"跳过: {dest_file_path} 已存在")
def 输出_前端基建资源(self):
self.获得干员基建描述()
self.转换输出基建buff()
self.添加基建技能图标()
def levels(self):
levels_json = 加载json("./ArknightsGameResource/levels.json")
LEVELS = [Level.from_json(data) for data in levels_json]
with lzma.open("mower/static/levels.pkl", "wb") as f:
pickle.dump(LEVELS, f)
def 读取模组(self):
_ = []
for item in self.模组["missionList"]:
_.append(self.模组["missionList"][item]["template"])
template_list = list({}.fromkeys(_).keys())
print(template_list)
@ -673,21 +938,30 @@ class Arknights数据处理器:
for 干员代码, 干员数据 in self.干员表.items():
if not 干员数据["itemObtainApproach"]:
continue
干员名 = 干员数据["name"]
print(干员名)
for 技能数, item in enumerate(干员数据["skills"]):
技能图标名 = self.战斗技能[item["skillId"]]["iconId"] or item["skillId"]
干员技能路径 = f"./ArknightsResource/skills/skill_icon_{技能图标名}.png"
os.makedirs(
f"./mower/static/avatar_skill/{干员数据['name']}", exist_ok=True
)
目标路径 = (
f"./mower/static/avatar_skill/{干员数据['name']}/{技能数 + 1}.png"
)
if not os.path.exists(目标路径):
try:
shutil.copy(干员技能路径, 目标路径)
print(目标路径)
except Exception:
pass

View file

@ -1394,6 +1394,11 @@
"profession": "MEDIC",
"name": "Warfarin"
},
"录武官": {
"key": "char_4196_reckpr",
"profession": "MEDIC",
"name": "Record Keeper"
},
"诺威尔": {
"key": "char_4173_nowell",
"profession": "MEDIC",
@ -1719,6 +1724,11 @@
"profession": "WARRIOR",
"name": "Entelechia"
},
"司霆惊蛰": {
"key": "char_1043_leizi2",
"profession": "WARRIOR",
"name": "Leizi the Thunderbringer"
},
"正义骑士号": {
"key": "char_4000_jnight",
"profession": "SNIPER",

View file

@ -1,4 +1,74 @@
[
{
"key": 376,
"name": "司霆惊蛰",
"span": 2,
"child_skill": [
{
"skill_key": 0,
"skill_level": 0,
"phase_level": "精0 1级",
"skillname": "雷法专精",
"buffer": false,
"buffer_des": [],
"des": "进驻发电站时,无人机充能速度<@cc.vup>+10%</>",
"roomType": "发电站",
"buffCategory": "OUTPUT",
"skillIcon": "bskill_pow_spd1",
"buffColor": "#8fc31f",
"textColor": "#ffffff"
},
{
"skill_key": 1,
"skill_level": 0,
"phase_level": "精2 1级",
"skillname": "克己严修",
"buffer": false,
"buffer_des": [],
"des": "进驻加工站加工<@cc.kw>技巧概要</>时,副产品的产出概率提升<@cc.vup>80%</>",
"roomType": "加工站",
"buffCategory": "FUNCTION",
"skillIcon": "bskill_ws_skill3",
"buffColor": "#e3eb00",
"textColor": "#333333"
}
]
},
{
"key": 375,
"name": "录武官",
"span": 2,
"child_skill": [
{
"skill_key": 0,
"skill_level": 0,
"phase_level": "精0 1级",
"skillname": "医疗专精·α",
"buffer": false,
"buffer_des": [],
"des": "进驻训练室协助位时,<@cc.kw>医疗</>干员的专精技能训练速度<@cc.vup>+30%</>",
"roomType": "训练室",
"buffCategory": "FUNCTION",
"skillIcon": "bskill_train_medic1",
"buffColor": "#7d0022",
"textColor": "#ffffff"
},
{
"skill_key": 1,
"skill_level": 0,
"phase_level": "精2 1级",
"skillname": "学无不精·α",
"buffer": false,
"buffer_des": [],
"des": "进驻训练室协助位时,干员的专精技能训练速度<@cc.vup>+25%</>",
"roomType": "训练室",
"buffCategory": "FUNCTION",
"skillIcon": "bskill_train_all",
"buffColor": "#7d0022",
"textColor": "#ffffff"
}
]
},
{
"key": 374,
"name": "Miss.Christine",

View file

@ -3625,6 +3625,13 @@
"MATERIAL",
700169
],
"p_char_4196_reckpr": [
"p_char_4196_reckpr",
"p_char_4196_reckpr",
"录武官的信物",
"MATERIAL",
700170
],
"p_char_103_angel": [
"p_char_103_angel",
"p_char_103_angel",
@ -4409,6 +4416,13 @@
"MATERIAL",
600112
],
"p_char_1043_leizi2": [
"p_char_1043_leizi2",
"p_char_1043_leizi2",
"司霆惊蛰的信物",
"MATERIAL",
600113
],
"class_p_char_123_fang": [
"class_p_char_123_fang",
"class_p_char_123_fang",

BIN
mower/static/MATERIAL.pkl (Stored with Git LFS)

Binary file not shown.

BIN
mower/static/avatar.pkl (Stored with Git LFS)

Binary file not shown.

BIN
mower/static/avatar_skill/司霆惊蛰/1.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
mower/static/avatar_skill/司霆惊蛰/2.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
mower/static/avatar_skill/司霆惊蛰/3.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
mower/static/avatar_skill/录武官/1.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
mower/static/avatar_skill/录武官/2.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
mower/static/operator_room.model (Stored with Git LFS)

Binary file not shown.

BIN
mower/static/portrait.pkl (Stored with Git LFS)

Binary file not shown.

View file

@ -106,7 +106,7 @@ const cc_c_abyssal2_3 = { "termId": "cc.c.abyssal2_3", "termName": "特殊叠加
const cc_c_room1 = { "termId": "cc.c.room1", "termName": "部分设施", "description": "包含以下设施\n发电站、人力办公室、会客室", "buffer": [] };
const cc_c_room2 = { "termId": "cc.c.room2", "termName": "其他设施", "description": "包含以下设施\n发电站、制造站、贸易站、人力办公室、会客室", "buffer": [] };
const cc_c_room3 = { "termId": "cc.c.room3", "termName": "工作场所", "description": "包含以下设施\n发电站、制造站、贸易站、人力办公室、会客室、控制中枢、训练室", "buffer": [] };
const cc_c_skill = { "termId": "cc.c.skill", "termName": "部分技能", "description": "包含以下技能\n左膀右臂、S.W.E.E.P.、零食网络、清理协议、替身、必要责任、护卫、小小的领袖、独善其身、笑靥如春、金盏花诗会、捍卫之道、博识生手", "buffer": [] };
const cc_c_skill = { "termId": "cc.c.skill", "termName": "部分技能", "description": "包含以下技能\r\n左膀右臂、S.W.E.E.P.、零食网络、清理协议、替身、必要责任、护卫、小小的领袖、独善其身、笑靥如春、金盏花诗会、捍卫之道、博识生手、点滴关照", "buffer": [] };
const cc_t_strong2 = { "termId": "cc.t.strong2", "termName": "特殊叠加规则", "description": "无法单独与<$cc.t.snsant1><@cc.rem>天道酬勤·α</></>、<$cc.t.snsant2><@cc.rem>天道酬勤·β</></>进行叠加,且优先生效\n当<$cc.t.snsant1><@cc.rem>天道酬勤·α</></>、<$cc.t.snsant2><@cc.rem>天道酬勤·β</></>与其他技能进行叠加时,该技能会对此叠加效果进行叠加", "buffer": ["cc_t_snsant1", "cc_t_snsant2", "cc_t_snsant1", "cc_t_snsant2"] };
const cc_c_sui2_1 = { "termId": "cc.c.sui2_1", "termName": "特殊比较规则", "description": "在<@cc.kw>公事公办</>,<@cc.kw>孤光共照</>,<@cc.kw>巴别塔之帜</>提供的<$cc.c.room2><@cc.kw>其他设施</></>每小时心情恢复值中取最高生效", "buffer": ["cc_c_room2"] };
const cc_m_pow1 = { "termId": "cc.m.pow1", "termName": "自动化·α", "description": "由以下干员提供\n温蒂、森蚺、异客", "buffer": [] };

View file

@ -8,10 +8,10 @@
}
/* Styles 部分保持不变 */
.float-btn[data-v-249c7f74] {
.float-btn[data-v-0185b520] {
z-index: 9999;
}
.settings-panel[data-v-249c7f74] {
.settings-panel[data-v-0185b520] {
width: 850px;
height: calc(min(100vh - 70px, 630px));
background-color: #f8f8f8;
@ -19,7 +19,7 @@
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);
overflow: hidden;
}
.settings-content-area[data-v-249c7f74] {
.settings-content-area[data-v-0185b520] {
height: 100%;
overflow-y: auto;
background-color: #fff;

View file

@ -1327,7 +1327,7 @@ const _sfc_main = {
};
}
};
const DesktopSettings = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-249c7f74"]]);
const DesktopSettings = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-0185b520"]]);
export {
DesktopSettings as default
};

View file

@ -1,5 +1,5 @@
.loading[data-v-f9ae5a23] {
.loading[data-v-69c55212] {
position: absolute;
top: 48px;
font-size: 28px;

View file

@ -46,7 +46,7 @@ const _sfc_main = {
};
}
};
const Doc = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-f9ae5a23"]]);
const Doc = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-69c55212"]]);
export {
Doc as default
};

View file

@ -1,4 +1,4 @@
.help[data-v-e18814d8] {
.help[data-v-587b8b4b] {
z-index: 100;
}

View file

@ -53,7 +53,7 @@ function _sfc_render(_ctx, _cache) {
_: 3
});
}
const __unplugin_components_0 = /* @__PURE__ */ _export_sfc(_sfc_main, [["render", _sfc_render], ["__scopeId", "data-v-e18814d8"]]);
const __unplugin_components_0 = /* @__PURE__ */ _export_sfc(_sfc_main, [["render", _sfc_render], ["__scopeId", "data-v-587b8b4b"]]);
export {
__unplugin_components_0
};

View file

@ -1,38 +1,38 @@
.log[data-v-06f47113] {
.log[data-v-bb8daf92] {
overflow: hidden;
flex: 1;
}
.task-table[data-v-06f47113] {
.task-table[data-v-bb8daf92] {
position: relative;
max-width: 600px;
}
.task-table th[data-v-06f47113] {
.task-table th[data-v-bb8daf92] {
padding: 2px 16px;
}
.task-table td[data-v-06f47113] {
.task-table td[data-v-bb8daf92] {
height: 24px;
padding: 2px 8px;
}
.task-table td[data-v-06f47113]:last-child {
.task-table td[data-v-bb8daf92]:last-child {
width: 100%;
}
.action-container[data-v-06f47113] {
.action-container[data-v-bb8daf92] {
display: flex;
align-items: center;
gap: 12px;
z-index: 15;
}
.toggle-table-collapse-btn[data-v-06f47113] {
.toggle-table-collapse-btn[data-v-bb8daf92] {
position: absolute;
top: 0;
right: 0;
}
.toggle-fullscreen-btn[data-v-06f47113] {
.toggle-fullscreen-btn[data-v-bb8daf92] {
position: absolute;
top: 0;
right: 38px;
}
.log-bg[data-v-06f47113] {
.log-bg[data-v-bb8daf92] {
content: "";
width: 100%;
height: 100%;
@ -42,12 +42,12 @@
opacity: 0.25;
background-image: url(/bg1.webp), url(/bg2.webp);
background-repeat: no-repeat;
background-size: var(--d21ecd16);
background-position: var(--0bab789d);
background-size: var(--72ac3b4a);
background-position: var(--8bac42fa);
pointer-events: none;
z-index: 14;
}
.sc[data-v-06f47113] {
.sc[data-v-bb8daf92] {
max-width: 480px;
max-height: 270px;
border-radius: 6px;

View file

@ -829,8 +829,8 @@ const _sfc_main = {
__name: "Log",
setup(__props) {
useCssVars((_ctx) => ({
"d21ecd16": unref(bg_size),
"0bab789d": unref(bg_position)
"72ac3b4a": unref(bg_size),
"8bac42fa": unref(bg_position)
}));
const mower_store = useMowerStore();
const { ws, log, log_mobile, thread_status, task_list, get_task_id, sc_uri } = storeToRefs(mower_store);
@ -1037,7 +1037,7 @@ const _sfc_main = {
};
}
};
const Log = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-06f47113"]]);
const Log = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-bb8daf92"]]);
export {
Log as default
};

View file

@ -1,44 +1,44 @@
@charset "UTF-8";
.coord-label[data-v-bd41e82d] {
.coord-label[data-v-f4ed7511] {
width: 40px;
padding-left: 8px;
}
.card-title[data-v-bd41e82d] {
.card-title[data-v-f4ed7511] {
margin-right: 8px;
}
.threshold[data-v-9ffc8196] {
.threshold[data-v-17303244] {
display: flex;
align-items: center;
gap: 14px;
width: 100%;
}
.email-title[data-v-f611d9fe] {
.email-title[data-v-3b2776a3] {
width: 100%;
}
.expand[data-v-f611d9fe] {
.expand[data-v-3b2776a3] {
flex-grow: 1;
}
.email-table[data-v-f611d9fe] {
.email-table[data-v-3b2776a3] {
width: 100%;
margin-bottom: 12px;
}
.email-test[data-v-f611d9fe] {
.email-test[data-v-3b2776a3] {
display: flex;
align-items: center;
gap: 16px;
}
.email-mode[data-v-f611d9fe] {
.email-mode[data-v-3b2776a3] {
margin-left: 20px;
}
.email-label[data-v-f611d9fe] {
.email-label[data-v-3b2776a3] {
width: 68px;
}
p[data-v-f611d9fe] {
p[data-v-3b2776a3] {
margin: 0 0 10px 0;
}
.mt-16[data-v-f611d9fe] {
.mt-16[data-v-3b2776a3] {
margin-top: 16px;
}
@ -49,122 +49,122 @@ p[data-v-f611d9fe] {
gap: 12px;
}
.subtitle[data-v-e24fdfe6] {
.subtitle[data-v-4f64e716] {
margin: 12px 0 6px;
}
.scale[data-v-60093aec] {
.scale[data-v-26ad4730] {
width: 60px;
text-align: right;
}
.scale-apply[data-v-60093aec] {
.scale-apply[data-v-26ad4730] {
margin-left: 24px;
}
.waiting-table {
th,
td {
&[data-v-60093aec] {
&[data-v-26ad4730] {
padding: 4px;
min-width: 70px;
width: 100px;
}
&[data-v-60093aec]:first-child {
&[data-v-26ad4730]:first-child {
width: auto;
padding: 4px 8px;
}
}
}
.item[data-v-2ceb271c] {
.item[data-v-9889efe8] {
font-weight: 500;
font-size: 16px;
}
.n-divider[data-v-2ceb271c]:not(.n-divider--vertical) {
.n-divider[data-v-9889efe8]:not(.n-divider--vertical) {
margin: 6px 0;
}
.telemetry[data-v-2ceb271c] {
.telemetry[data-v-9889efe8] {
border-collapse: collapse;
table-layout: fixed;
margin-bottom: 6px;
}
th[data-v-2ceb271c],
td[data-v-2ceb271c] {
th[data-v-9889efe8],
td[data-v-9889efe8] {
border: 1px solid white;
padding: 2px 6px;
}
p[data-v-e83a44f6] {
p[data-v-46384f04] {
margin: 0 0 8px 0;
}
h4[data-v-e83a44f6] {
h4[data-v-46384f04] {
margin: 12px 0 10px 0;
}
.big-table[data-v-e83a44f6] {
.big-table[data-v-46384f04] {
margin-top: 10px;
max-width: 320px;
}
.big-table th[data-v-e83a44f6] {
.big-table th[data-v-46384f04] {
text-align: center;
}
.big-table tr[data-v-e83a44f6] {
.big-table tr[data-v-46384f04] {
width: 70px;
}
.big-table td[data-v-e83a44f6] {
.big-table td[data-v-46384f04] {
height: 24px;
}
.big-table td[data-v-e83a44f6]:nth-child(1) {
.big-table td[data-v-46384f04]:nth-child(1) {
width: 70px;
text-align: center;
}
.big-table td[data-v-e83a44f6]:nth-child(2) {
.big-table td[data-v-46384f04]:nth-child(2) {
width: 420px;
}
.final[data-v-e83a44f6] {
.final[data-v-46384f04] {
margin: 16px 0 0;
}p[data-v-70be2e67] {
}p[data-v-83ca4317] {
margin: 2px 0;
}
h4[data-v-70be2e67] {
h4[data-v-83ca4317] {
margin: 12px 0 8px 0;
}
table[data-v-70be2e67] {
table[data-v-83ca4317] {
width: 100%;
}
td[data-v-70be2e67]:nth-child(1) {
td[data-v-83ca4317]:nth-child(1) {
width: 80px;
}
.ignore-blacklist[data-v-70be2e67] {
.ignore-blacklist[data-v-83ca4317] {
margin-bottom: 10px;
display: flex;
gap: 12px;
}
.h4[data-v-70be2e67] {
.h4[data-v-83ca4317] {
font-size: 16px;
font-weight: 500;
}
.maa-shop[data-v-70be2e67] {
.maa-shop[data-v-83ca4317] {
margin: 8px 0;
}
.item[data-v-70be2e67] {
.item[data-v-83ca4317] {
font-weight: 500;
font-size: 16px;
}
/* 表单和活动区域样式调整 (可选) */
.form-item .n-flex[data-v-1081049d] {
.form-item .n-flex[data-v-d720c1de] {
gap: 8px 12px;
}
.activity .n-tag[data-v-1081049d] {
.activity .n-tag[data-v-d720c1de] {
margin-bottom: 4px;
}
/* 周计划表格容器 */
.plan-container[data-v-1081049d] {
.plan-container[data-v-d720c1de] {
border: 1px solid var(--n-border-color);
border-radius: var(--n-border-radius);
margin-top: 12px;
}
/* 表头行样式 */
.plan-header[data-v-1081049d] {
.plan-header[data-v-d720c1de] {
font-size: 12px;
color: var(--n-text-color-2);
padding: 6px 10px;
@ -173,7 +173,7 @@ td[data-v-70be2e67]:nth-child(1) {
}
/* 表头 - 关卡列 */
.header-stage[data-v-1081049d] {
.header-stage[data-v-d720c1de] {
width: 120px; /* 固定宽度 */
flex-shrink: 0;
text-align: left;
@ -182,22 +182,22 @@ td[data-v-70be2e67]:nth-child(1) {
}
/* 表头 - 日期列 */
.header-days[data-v-1081049d] {
.header-days[data-v-d720c1de] {
flex-grow: 1;
text-align: center;
min-width: 210px; /* 保证容纳7个按钮的宽度 */
}
.header-days .today-header[data-v-1081049d] {
.header-days .today-header[data-v-d720c1de] {
font-weight: normal;
color: var(--n-text-color-1);
}
.header-days .today-name[data-v-1081049d] {
.header-days .today-name[data-v-d720c1de] {
font-weight: bold;
color: var(--n-color-error); /* 高亮当天星期名称 */
}
/* 表头 - 操作列 */
.header-action[data-v-1081049d] {
.header-action[data-v-d720c1de] {
width: 40px; /* 固定宽度 */
flex-shrink: 0;
text-align: center;
@ -206,19 +206,19 @@ td[data-v-70be2e67]:nth-child(1) {
}
/* 计划项目行样式 */
.plan-item[data-v-1081049d] {
.plan-item[data-v-d720c1de] {
padding: 6px 10px;
border-bottom: 1px solid var(--n-border-color);
}
.plan-item[data-v-1081049d]:last-child {
.plan-item[data-v-d720c1de]:last-child {
border-bottom: none;
}
.plan-item[data-v-1081049d]:nth-child(even) {
.plan-item[data-v-d720c1de]:nth-child(even) {
background-color: var(--n-action-color); /* 斑马条纹 */
}
/* 行内 - 关卡区域 */
.stage-area[data-v-1081049d] {
.stage-area[data-v-d720c1de] {
width: 120px; /* 同表头宽度 */
flex-shrink: 0;
display: flex;
@ -227,7 +227,7 @@ td[data-v-70be2e67]:nth-child(1) {
text-overflow: ellipsis;
white-space: nowrap;
}
.stage-area .stage-name[data-v-1081049d] {
.stage-area .stage-name[data-v-d720c1de] {
font-size: 14px;
overflow: hidden;
text-overflow: ellipsis;
@ -235,18 +235,18 @@ td[data-v-70be2e67]:nth-child(1) {
padding-left: 4px;
cursor: default; /* 显示 title 提示 */
}
.stage-area .stage-name[title][data-v-1081049d] {
.stage-area .stage-name[title][data-v-d720c1de] {
/* 确保 title 属性生效 */
cursor: default;
}
.stage-area .custom-stage-input[data-v-1081049d],
.stage-area .custom-stage-tag[data-v-1081049d] {
.stage-area .custom-stage-input[data-v-d720c1de],
.stage-area .custom-stage-tag[data-v-d720c1de] {
width: 100%;
}
.stage-area .custom-stage-tag[data-v-1081049d] {
.stage-area .custom-stage-tag[data-v-d720c1de] {
justify-content: space-between;
}
.stage-area .custom-stage-tag[data-v-1081049d] .n-tag__content {
.stage-area .custom-stage-tag[data-v-d720c1de] .n-tag__content {
/* 确保标签内容不溢出 */
overflow: hidden;
text-overflow: ellipsis;
@ -255,14 +255,14 @@ td[data-v-70be2e67]:nth-child(1) {
}
/* 行内 - 每日切换按钮区域 */
.day-toggles[data-v-1081049d] {
.day-toggles[data-v-d720c1de] {
flex-grow: 1;
justify-content: space-around; /* 均匀分布按钮 */
min-width: 210px; /* 同表头估算宽度 */
/* 每个按钮的占位容器 */
/* 每日切换按钮样式 */
}
.day-toggles .day-toggle-placeholder[data-v-1081049d] {
.day-toggles .day-toggle-placeholder[data-v-d720c1de] {
width: 28px; /* 固定宽度 */
height: 28px; /* 固定高度 */
display: flex;
@ -270,7 +270,7 @@ td[data-v-70be2e67]:nth-child(1) {
align-items: center;
flex-shrink: 0;
}
.day-toggles .day-toggle[data-v-1081049d] {
.day-toggles .day-toggle[data-v-d720c1de] {
width: 28px;
height: 28px;
padding: 0;
@ -283,7 +283,7 @@ td[data-v-70be2e67]:nth-child(1) {
/* 未选中按钮 (ghost) active 状态 */
/* 选中按钮 (success) active 状态 */
}
.day-toggles .day-toggle.today-button[data-v-1081049d] {
.day-toggles .day-toggle.today-button[data-v-d720c1de] {
font-weight: bold; /* !!! 新增:当天按钮字体加粗 !!! */
/* 当天且未选中的按钮,边框高亮 */
/* 当天且未选中的按钮 (ghost 状态),文字颜色也高亮 */
@ -291,56 +291,56 @@ td[data-v-70be2e67]:nth-child(1) {
/* 当天且选中的按钮 (success 状态),添加外边框 */
/* 当天且未选中的按钮 (ghost 状态) active */
}
.day-toggles .day-toggle.today-button[data-v-1081049d]:not(.n-button--success) {
.day-toggles .day-toggle.today-button[data-v-d720c1de]:not(.n-button--success) {
border-color: var(--n-color-info);
}
.day-toggles .day-toggle.today-button.n-button--ghost[data-v-1081049d]:not(:disabled) {
.day-toggles .day-toggle.today-button.n-button--ghost[data-v-d720c1de]:not(:disabled) {
color: var(--n-color-info);
}
.day-toggles .day-toggle.today-button.n-button--ghost[data-v-1081049d]:not(:disabled):hover {
.day-toggles .day-toggle.today-button.n-button--ghost[data-v-d720c1de]:not(:disabled):hover {
border-color: var(--n-color-info-hover);
color: var(--n-color-info-hover);
}
.day-toggles .day-toggle.today-button.n-button--success[data-v-1081049d] {
.day-toggles .day-toggle.today-button.n-button--success[data-v-d720c1de] {
outline: 1px solid var(--n-color-info-hover);
outline-offset: 1px;
}
.day-toggles .day-toggle.today-button.n-button--ghost[data-v-1081049d]:not(:disabled):active {
.day-toggles .day-toggle.today-button.n-button--ghost[data-v-d720c1de]:not(:disabled):active {
background-color: var(--n-color-info-pressed);
color: #fff;
border-color: var(--n-color-info-pressed);
}
.day-toggles .day-toggle.n-button--ghost[data-v-1081049d]:not(:disabled) {
.day-toggles .day-toggle.n-button--ghost[data-v-d720c1de]:not(:disabled) {
color: var(--n-text-color-3); /* 稍暗的颜色 */
border-color: var(--n-border-color); /* 标准边框 */
}
.day-toggles .day-toggle.n-button--ghost[data-v-1081049d]:not(:disabled):hover {
.day-toggles .day-toggle.n-button--ghost[data-v-d720c1de]:not(:disabled):hover {
border-color: var(--n-color-primary-hover);
color: var(--n-color-primary-hover);
}
.day-toggles .day-toggle.n-button--success[data-v-1081049d] {
.day-toggles .day-toggle.n-button--success[data-v-d720c1de] {
background-color: var(--n-color-success-suppl); /* 浅成功色背景 */
color: var(--n-color-success-hover); /* 深成功色文字 */
border-color: var(--n-color-success-hover); /* 成功色边框 */
}
.day-toggles .day-toggle.n-button--success[data-v-1081049d]:hover {
.day-toggles .day-toggle.n-button--success[data-v-d720c1de]:hover {
background-color: var(--n-color-success-hover);
color: #fff;
border-color: var(--n-color-success-hover);
}
.day-toggles .day-toggle.n-button--ghost[data-v-1081049d]:not(:disabled):active {
.day-toggles .day-toggle.n-button--ghost[data-v-d720c1de]:not(:disabled):active {
background-color: var(--n-color-primary-pressed);
color: #fff;
border-color: var(--n-color-primary-pressed);
}
.day-toggles .day-toggle.n-button--success[data-v-1081049d]:active {
.day-toggles .day-toggle.n-button--success[data-v-d720c1de]:active {
background-color: var(--n-color-success-pressed);
color: #fff;
border-color: var(--n-color-success-pressed);
}
/* 行内 - 操作按钮区域 */
.action-area[data-v-1081049d] {
.action-area[data-v-d720c1de] {
width: 40px; /* 同表头宽度 */
flex-shrink: 0;
text-align: right;
@ -348,12 +348,12 @@ td[data-v-70be2e67]:nth-child(1) {
justify-content: center;
align-items: center;
}
.action-area .n-button[data-v-1081049d] {
.action-area .n-button[data-v-d720c1de] {
padding: 0 4px; /* 图标按钮减小内边距 */
}
/* 活动标签进度条样式 (与原版一致) */
.progress-tag[data-v-1081049d] {
.progress-tag[data-v-d720c1de] {
position: relative;
padding-bottom: 5px;
height: auto;
@ -364,7 +364,7 @@ td[data-v-70be2e67]:nth-child(1) {
align-items: center;
overflow: hidden;
}
.progress[data-v-1081049d] {
.progress[data-v-d720c1de] {
position: absolute;
bottom: 0;
left: 0;
@ -372,7 +372,7 @@ td[data-v-70be2e67]:nth-child(1) {
background-color: var(--n-color-success);
transition: width 0.3s ease;
}
.progress-bar[data-v-1081049d] {
.progress-bar[data-v-d720c1de] {
position: absolute;
bottom: 0;
left: 0;
@ -382,84 +382,84 @@ td[data-v-70be2e67]:nth-child(1) {
}
/* 禁用状态标题样式 */
.card-title.disabled[data-v-1081049d] {
.card-title.disabled[data-v-d720c1de] {
color: var(--n-text-color-disabled);
}
.container[data-v-16974522] {
.container[data-v-350b6de3] {
display: flex;
width: 100%;
gap: 8px;
}
.wrapper[data-v-16974522] {
.wrapper[data-v-350b6de3] {
white-space: pre-wrap;
user-select: text;
}
.title[data-v-16974522] {
.title[data-v-350b6de3] {
font-size: 18px;
font-weight: 500;
margin-bottom: 6px;
}
.operator-grid[data-v-16974522] {
.operator-grid[data-v-350b6de3] {
display: grid;
gap: 8px 16px;
align-items: center;
}
/* 非干员组的干员列表 - 桌面端 */
:not(.mobile) .operator-grid[data-v-16974522]:not([class*='operator-group-']) {
:not(.mobile) .operator-grid[data-v-350b6de3]:not([class*='operator-group-']) {
grid-template-columns: repeat(3, 1fr);
}
/* 非干员组的干员列表 - 移动端 */
.mobile .operator-grid[data-v-16974522]:not([class*='operator-group-']) {
.mobile .operator-grid[data-v-350b6de3]:not([class*='operator-group-']) {
grid-template-columns: repeat(2, 1fr);
}
/* 干员组内样式 */
.n-card .operator-grid.operator-group-desktop[data-v-16974522] {
.n-card .operator-grid.operator-group-desktop[data-v-350b6de3] {
grid-template-columns: 1fr;
}
.n-card .operator-grid.operator-group-mobile[data-v-16974522] {
.n-card .operator-grid.operator-group-mobile[data-v-350b6de3] {
grid-template-columns: repeat(2, 1fr);
}
.operator-item[data-v-16974522] {
.operator-item[data-v-350b6de3] {
display: flex;
align-items: center;
margin: 0;
}
.operator-info[data-v-16974522] {
.operator-info[data-v-350b6de3] {
display: flex;
flex-direction: column;
margin-left: 8px;
}
.operator-name[data-v-16974522] {
.operator-name[data-v-350b6de3] {
font-weight: bold;
font-size: 1.1em;
}
.operator-skill[data-v-16974522] {
.operator-skill[data-v-350b6de3] {
font-size: 1em;
}
p[data-v-d479d5bf] {
p[data-v-b2d35691] {
margin: 0 0 10px 0;
}
.misc-container[data-v-d479d5bf] {
.misc-container[data-v-b2d35691] {
display: flex;
align-items: center;
gap: 12px;
}
.header[data-v-d479d5bf] {
.header[data-v-b2d35691] {
margin: 12px 0;
}
.trials-container[data-v-a4610cbf] {
.trials-container[data-v-a113295f] {
display: flex;
width: 100%;
gap: 8px;
}
.wrapper[data-v-a4610cbf] {
.wrapper[data-v-a113295f] {
white-space: pre-wrap;
user-select: text;
}
.title[data-v-a4610cbf] {
.title[data-v-a113295f] {
font-size: 18px;
font-weight: 500;
margin-bottom: 6px;

View file

@ -1822,7 +1822,7 @@ const _sfc_main$j = {
};
}
};
const Device = /* @__PURE__ */ _export_sfc(_sfc_main$j, [["__scopeId", "data-v-bd41e82d"]]);
const Device = /* @__PURE__ */ _export_sfc(_sfc_main$j, [["__scopeId", "data-v-f4ed7511"]]);
const _hoisted_1$7 = { class: "threshold" };
const _sfc_main$i = {
__name: "RIIC",
@ -2117,7 +2117,7 @@ const _sfc_main$i = {
};
}
};
const RIIC = /* @__PURE__ */ _export_sfc(_sfc_main$i, [["__scopeId", "data-v-9ffc8196"]]);
const RIIC = /* @__PURE__ */ _export_sfc(_sfc_main$i, [["__scopeId", "data-v-17303244"]]);
const _hoisted_1$6 = { key: 0 };
const _hoisted_2$5 = { key: 1 };
const _hoisted_3$2 = { key: 0 };
@ -2372,7 +2372,7 @@ const _sfc_main$h = {
};
}
};
const Email = /* @__PURE__ */ _export_sfc(_sfc_main$h, [["__scopeId", "data-v-f611d9fe"]]);
const Email = /* @__PURE__ */ _export_sfc(_sfc_main$h, [["__scopeId", "data-v-3b2776a3"]]);
const _hoisted_1$5 = { style: { "display": "flex", "align-items": "center", "width": "100%" } };
const _hoisted_2$4 = { class: "misc-container" };
const _sfc_main$g = {
@ -2604,7 +2604,7 @@ const _sfc_main$f = {
};
}
};
const AutoFight = /* @__PURE__ */ _export_sfc(_sfc_main$f, [["__scopeId", "data-v-e24fdfe6"]]);
const AutoFight = /* @__PURE__ */ _export_sfc(_sfc_main$f, [["__scopeId", "data-v-4f64e716"]]);
const _sfc_main$e = {
__name: "Appearance",
setup(__props) {
@ -2727,7 +2727,7 @@ const _sfc_main$e = {
};
}
};
const Appearance = /* @__PURE__ */ _export_sfc(_sfc_main$e, [["__scopeId", "data-v-60093aec"]]);
const Appearance = /* @__PURE__ */ _export_sfc(_sfc_main$e, [["__scopeId", "data-v-26ad4730"]]);
const _sfc_main$d = {
__name: "DailyMission",
setup(__props) {
@ -3044,7 +3044,7 @@ const _sfc_main$d = {
};
}
};
const DailyMission = /* @__PURE__ */ _export_sfc(_sfc_main$d, [["__scopeId", "data-v-2ceb271c"]]);
const DailyMission = /* @__PURE__ */ _export_sfc(_sfc_main$d, [["__scopeId", "data-v-9889efe8"]]);
const _sfc_main$c = {
__name: "Recruit",
setup(__props) {
@ -3197,7 +3197,7 @@ const _sfc_main$c = {
};
}
};
const Recruit = /* @__PURE__ */ _export_sfc(_sfc_main$c, [["__scopeId", "data-v-e83a44f6"]]);
const Recruit = /* @__PURE__ */ _export_sfc(_sfc_main$c, [["__scopeId", "data-v-46384f04"]]);
const _hoisted_1$4 = { style: { "display": "flex", "align-items": "center", "width": "100%" } };
const _hoisted_2$3 = { style: { "margin-right": "24px" } };
const _sfc_main$b = {
@ -3682,7 +3682,7 @@ const _sfc_main$9 = {
};
}
};
const Clue = /* @__PURE__ */ _export_sfc(_sfc_main$9, [["__scopeId", "data-v-70be2e67"]]);
const Clue = /* @__PURE__ */ _export_sfc(_sfc_main$9, [["__scopeId", "data-v-83ca4317"]]);
class LuxonError extends Error {
}
class InvalidDateTimeError extends LuxonError {
@ -10701,7 +10701,7 @@ const _sfc_main$8 = {
};
}
};
const WeeklyPlan = /* @__PURE__ */ _export_sfc(_sfc_main$8, [["__scopeId", "data-v-1081049d"]]);
const WeeklyPlan = /* @__PURE__ */ _export_sfc(_sfc_main$8, [["__scopeId", "data-v-d720c1de"]]);
const _sfc_main$7 = {
__name: "ReclamationAlgorithm",
setup(__props) {
@ -10969,7 +10969,7 @@ const _sfc_main$6 = {
};
}
};
const MaaCopilotImporter = /* @__PURE__ */ _export_sfc(_sfc_main$6, [["__scopeId", "data-v-16974522"]]);
const MaaCopilotImporter = /* @__PURE__ */ _export_sfc(_sfc_main$6, [["__scopeId", "data-v-350b6de3"]]);
const _sfc_main$5 = {
__name: "Sss",
setup(__props) {
@ -11203,7 +11203,7 @@ const _sfc_main$4 = {
};
}
};
const __unplugin_components_0 = /* @__PURE__ */ _export_sfc(_sfc_main$4, [["__scopeId", "data-v-d479d5bf"]]);
const __unplugin_components_0 = /* @__PURE__ */ _export_sfc(_sfc_main$4, [["__scopeId", "data-v-b2d35691"]]);
const _sfc_main$3 = {
__name: "MaaRogue",
setup(__props) {
@ -11630,7 +11630,7 @@ const _sfc_main$1 = {
};
}
};
const Trials = /* @__PURE__ */ _export_sfc(_sfc_main$1, [["__scopeId", "data-v-a4610cbf"]]);
const Trials = /* @__PURE__ */ _export_sfc(_sfc_main$1, [["__scopeId", "data-v-a113295f"]]);
const _sfc_main = {
__name: "LongTasks",
setup(__props) {

File diff suppressed because one or more lines are too long

View file

@ -1,56 +1,56 @@
.select-label[data-v-ef0a8ed8] {
.select-label[data-v-5c30c73a] {
width: 44px;
}
.type-select[data-v-ef0a8ed8] {
.type-select[data-v-5c30c73a] {
width: 100px;
margin-right: 8px;
}
.product-select[data-v-ef0a8ed8] {
.product-select[data-v-5c30c73a] {
width: 180px;
margin-right: 8px;
}
.operator-select[data-v-ef0a8ed8] {
.operator-select[data-v-5c30c73a] {
width: 220px;
}
.replacement-select[data-v-ef0a8ed8] {
.replacement-select[data-v-5c30c73a] {
min-width: 400px;
}
.plan-container[data-v-ef0a8ed8] {
.plan-container[data-v-5c30c73a] {
width: 980px;
min-width: 980px;
display: flex;
flex-direction: column;
gap: 12px;
}
.group[data-v-ef0a8ed8] {
.group[data-v-5c30c73a] {
width: 160px;
}
.facility-2[data-v-ef0a8ed8] {
.facility-2[data-v-5c30c73a] {
width: 124px;
height: 76px;
margin: 2px 3px;
}
.facility-3[data-v-ef0a8ed8] {
.facility-3[data-v-5c30c73a] {
width: 175px;
height: 76px;
margin: 2px 3px;
}
.facility-5[data-v-ef0a8ed8] {
.facility-5[data-v-5c30c73a] {
width: 277px;
height: 76px;
margin: 2px 3px;
}
.avatars[data-v-ef0a8ed8] {
.avatars[data-v-5c30c73a] {
display: flex;
gap: 6px;
z-index: 5;
}
.avatars img[data-v-ef0a8ed8] {
.avatars img[data-v-5c30c73a] {
box-sizing: content-box;
border-radius: 2px;
background: lightgray;
}
.facility-name[data-v-ef0a8ed8] {
.facility-name[data-v-5c30c73a] {
margin-bottom: 4px;
text-align: center;
line-height: 1;
@ -58,83 +58,83 @@
justify-content: space-around;
z-index: 5;
}
.outer[data-v-ef0a8ed8] {
.outer[data-v-5c30c73a] {
display: flex;
margin: 0 auto;
}
.left_box[data-v-ef0a8ed8] {
.left_box[data-v-5c30c73a] {
display: flex;
flex-direction: column;
gap: 4px;
padding-top: 82px;
padding-right: 2px;
}
.left_box .left_contain[data-v-ef0a8ed8] {
.left_box .left_contain[data-v-5c30c73a] {
display: grid;
grid-template-columns: 1fr 1fr 1fr;
gap: 4px;
}
.left_box .left_contain > div[data-v-ef0a8ed8] {
.left_box .left_contain > div[data-v-5c30c73a] {
box-sizing: border-box;
width: 175px;
height: 76px;
cursor: pointer;
}
.left_box .left_contain .info[data-v-ef0a8ed8] {
.left_box .left_contain .info[data-v-5c30c73a] {
background-color: rgba(32, 128, 240, 0.16);
border-radius: 3px;
border: 1px solid transparent;
transition: all 0.3s;
position: relative;
}
.left_box .left_contain .info[data-v-ef0a8ed8]:hover {
.left_box .left_contain .info[data-v-5c30c73a]:hover {
background-color: rgba(32, 128, 240, 0.22);
}
.left_box .left_contain .info.true[data-v-ef0a8ed8] {
.left_box .left_contain .info.true[data-v-5c30c73a] {
background-color: var(--n-color);
border: 1px solid rgb(32, 128, 240);
}
.left_box .left_contain .info .facility-name[data-v-ef0a8ed8] {
.left_box .left_contain .info .facility-name[data-v-5c30c73a] {
color: #2080f0;
}
.left_box .left_contain .warning[data-v-ef0a8ed8] {
.left_box .left_contain .warning[data-v-5c30c73a] {
background-color: rgba(240, 160, 32, 0.16);
border-radius: 3px;
border: 1px solid transparent;
transition: all 0.3s;
position: relative;
}
.left_box .left_contain .warning[data-v-ef0a8ed8]:hover {
.left_box .left_contain .warning[data-v-5c30c73a]:hover {
background-color: rgba(240, 160, 32, 0.22);
}
.left_box .left_contain .warning.true[data-v-ef0a8ed8] {
.left_box .left_contain .warning.true[data-v-5c30c73a] {
background-color: var(--n-color);
border: 1px solid rgb(240, 160, 32);
}
.left_box .left_contain .warning .facility-name[data-v-ef0a8ed8] {
.left_box .left_contain .warning .facility-name[data-v-5c30c73a] {
color: #f0a020;
}
.left_box .left_contain .primary[data-v-ef0a8ed8] {
.left_box .left_contain .primary[data-v-5c30c73a] {
background-color: rgba(24, 160, 88, 0.16);
border-radius: 3px;
border: 1px solid transparent;
transition: all 0.3s;
}
.left_box .left_contain .primary[data-v-ef0a8ed8]:hover {
.left_box .left_contain .primary[data-v-5c30c73a]:hover {
background-color: rgba(24, 160, 88, 0.22);
}
.left_box .left_contain .primary.true[data-v-ef0a8ed8] {
.left_box .left_contain .primary.true[data-v-5c30c73a] {
background-color: var(--n-color);
border: 1px solid rgb(24, 160, 88);
}
.left_box .left_contain .primary .facility-name[data-v-ef0a8ed8] {
.left_box .left_contain .primary .facility-name[data-v-5c30c73a] {
color: #18a058;
}
.mid_box[data-v-ef0a8ed8] {
.mid_box[data-v-5c30c73a] {
display: flex;
flex-direction: column;
}
.waiting[data-v-ef0a8ed8] {
.waiting[data-v-5c30c73a] {
width: 100%;
height: 100%;
display: flex;
@ -146,15 +146,15 @@
cursor: pointer;
border-radius: 3px;
}
.waiting[data-v-ef0a8ed8]:hover {
.waiting[data-v-5c30c73a]:hover {
opacity: 1;
border: 1px dashed rgb(54, 173, 106);
color: rgb(54, 173, 106);
}
.waiting div[data-v-ef0a8ed8] {
.waiting div[data-v-5c30c73a] {
text-align: center;
}
.draggable[data-v-ef0a8ed8] {
.draggable[data-v-5c30c73a] {
width: 100%;
height: 100%;
display: flex;
@ -162,7 +162,7 @@
align-items: center;
justify-content: center;
}
.product-bg[data-v-ef0a8ed8] {
.product-bg[data-v-5c30c73a] {
content: "";
position: absolute;
top: 0;
@ -176,10 +176,10 @@
z-index: 3;
pointer-events: none;
}
.avatar-wrapper[data-v-ef0a8ed8] {
.avatar-wrapper[data-v-5c30c73a] {
position: relative;
}
.workaholic[data-v-ef0a8ed8] {
.workaholic[data-v-5c30c73a] {
position: absolute;
content: "";
top: 0;
@ -194,18 +194,18 @@
display: none;
}
.dropdown[data-v-c4c4a151] {
padding-left: var(--179f97e8);
padding-right: var(--179f97e8);
.dropdown[data-v-01fc4d7e] {
padding-left: var(--5dbb34be);
padding-right: var(--5dbb34be);
}
.n-table[data-v-ab1299ac] {
.n-table[data-v-1ad93d71] {
min-width: 100%;
}
.n-table th[data-v-ab1299ac] {
.n-table th[data-v-1ad93d71] {
width: 124px;
box-sizing: border-box;
}
.label[data-v-ab1299ac] {
.label[data-v-1ad93d71] {
display: flex;
flex-direction: row;
align-items: center;
@ -223,26 +223,26 @@
.dropdown-select {
flex: 1;
}
.w-980[data-v-d06834f4] {
.w-980[data-v-a3e17cad] {
width: 100%;
max-width: 980px;
}
.mx-auto[data-v-d06834f4] {
.mx-auto[data-v-a3e17cad] {
margin: 0 auto;
}
.mt-12[data-v-d06834f4] {
.mt-12[data-v-a3e17cad] {
margin-top: 12px;
}
.mb-12[data-v-d06834f4] {
.mb-12[data-v-a3e17cad] {
margin-bottom: 12px;
}
.px-12[data-v-d06834f4] {
.px-12[data-v-a3e17cad] {
padding: 0 12px;
}
.mw-980[data-v-d06834f4] {
.mw-980[data-v-a3e17cad] {
min-width: 980px;
}
.plan-bar[data-v-d06834f4] {
.plan-bar[data-v-a3e17cad] {
display: flex;
flex-direction: row;
flex-grow: 0;

View file

@ -1430,7 +1430,7 @@ const _sfc_main$5 = {
};
}
};
const __unplugin_components_9 = /* @__PURE__ */ _export_sfc(_sfc_main$5, [["__scopeId", "data-v-ef0a8ed8"]]);
const __unplugin_components_9 = /* @__PURE__ */ _export_sfc(_sfc_main$5, [["__scopeId", "data-v-5c30c73a"]]);
var MdArrowDropup = {};
var hasRequiredMdArrowDropup;
function requireMdArrowDropup() {
@ -1527,7 +1527,7 @@ const _sfc_main$4 = {
},
setup(__props) {
useCssVars((_ctx) => ({
"179f97e8": unref(btn_pad)
"5dbb34be": unref(btn_pad)
}));
const mobile = inject("mobile");
const btn_pad = computed(() => {
@ -1577,7 +1577,7 @@ const _sfc_main$4 = {
};
}
};
const __unplugin_components_8 = /* @__PURE__ */ _export_sfc(_sfc_main$4, [["__scopeId", "data-v-c4c4a151"]]);
const __unplugin_components_8 = /* @__PURE__ */ _export_sfc(_sfc_main$4, [["__scopeId", "data-v-01fc4d7e"]]);
const _sfc_main$3 = {
__name: "TriggerString",
props: ["data"],
@ -1834,7 +1834,7 @@ const _sfc_main$2 = {
};
}
};
const __unplugin_components_2 = /* @__PURE__ */ _export_sfc(_sfc_main$2, [["__scopeId", "data-v-ab1299ac"]]);
const __unplugin_components_2 = /* @__PURE__ */ _export_sfc(_sfc_main$2, [["__scopeId", "data-v-1ad93d71"]]);
const _hoisted_1$1 = { class: "dropdown-container" };
const _hoisted_2 = { class: "dropdown-label" };
const _sfc_main$1 = {
@ -5474,7 +5474,7 @@ const _sfc_main = {
};
}
};
const Plan = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-d06834f4"]]);
const Plan = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-a3e17cad"]]);
export {
Plan as default
};

View file

@ -1,8 +1,8 @@
[data-v-b9b10beb] .n-modal-container {
[data-v-b9d6a27e] .n-modal-container {
top: 0 !important;
left: 0 !important;
}
[data-v-b9b10beb] .n-card__content {
[data-v-b9d6a27e] .n-card__content {
height: calc(100% - 60px); /* 60px为header高度 */
}

View file

@ -169,7 +169,7 @@ const _sfc_main = {
};
}
};
const RecordLine = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-b9b10beb"]]);
const RecordLine = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-b9d6a27e"]]);
export {
RecordLine as default
};

View file

@ -1,4 +1,4 @@
.width100[data-v-67be031c] {
.width100[data-v-2ee926d4] {
width: 100%;
}

View file

@ -4754,7 +4754,7 @@ const _sfc_main = {
};
}
};
const __unplugin_components_16 = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-67be031c"]]);
const __unplugin_components_16 = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-2ee926d4"]]);
export {
__unplugin_components_14,
__unplugin_components_16,

View file

@ -1,35 +1,35 @@
.button_row[data-v-c3862e91] {
.button_row[data-v-9e1304bf] {
margin-top: 8px;
}
.task_row[data-v-c3862e91] {
.task_row[data-v-9e1304bf] {
display: flex;
align-items: center;
gap: 8px;
width: 100%;
}
.task_row .n-input[data-v-c3862e91] {
.task_row .n-input[data-v-9e1304bf] {
width: 140px;
}
.outer[data-v-c3862e91] {
.outer[data-v-9e1304bf] {
display: flex;
flex-direction: row;
align-items: center;
gap: 18px;
}
.inner[data-v-c3862e91] {
.inner[data-v-9e1304bf] {
display: flex;
flex-direction: column;
gap: 8px;
}
.task-col[data-v-c3862e91] {
.task-col[data-v-9e1304bf] {
display: flex;
flex-direction: row;
gap: 8px;
align-items: center;
}
.n-dynamic-tags[data-v-c3862e91] {
.n-dynamic-tags[data-v-9e1304bf] {
align-items: center;
}
.ml[data-v-c3862e91] {
.ml[data-v-9e1304bf] {
margin-left: 16px;
}

View file

@ -10340,7 +10340,7 @@ const _sfc_main = {
};
}
};
const __unplugin_components_1 = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-c3862e91"]]);
const __unplugin_components_1 = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-9e1304bf"]]);
export {
__unplugin_components_1,
__unplugin_components_4,

View file

@ -1,46 +1,46 @@
.info-container[data-v-6f42e5d7] {
.info-container[data-v-f632a889] {
margin-top: 2rem;
gap: 12px;
}
.scan-time[data-v-6f42e5d7] {
.scan-time[data-v-f632a889] {
font-size: 0.95rem;
color: var(--n-text-color);
}
.notes[data-v-6f42e5d7] {
.notes[data-v-f632a889] {
font-size: 0.9rem;
line-height: 1.5;
}
.action-group[data-v-6f42e5d7] {
.action-group[data-v-f632a889] {
padding: 8px 0;
}
.action-btn[data-v-6f42e5d7] {
.action-btn[data-v-f632a889] {
transition: transform 0.2s ease;
}
.action-btn[data-v-6f42e5d7]:hover {
.action-btn[data-v-f632a889]:hover {
transform: translateY(-1px);
}
.category-title[data-v-6f42e5d7] {
.category-title[data-v-f632a889] {
margin: 1rem 0;
color: var(--n-title-text-color);
}
.material-grid[data-v-6f42e5d7] {
.material-grid[data-v-f632a889] {
padding: 0 8px;
}
.material-card[data-v-6f42e5d7] {
.material-card[data-v-f632a889] {
padding: 4px;
background: var(--n-color-modal);
border-radius: 8px;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.05);
transition: box-shadow 0.2s ease;
}
.material-card[data-v-6f42e5d7]:hover {
.material-card[data-v-f632a889]:hover {
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
}
.material-name[data-v-6f42e5d7] {
.material-name[data-v-f632a889] {
font-weight: 500;
font-size: 1rem;
}
.material-count[data-v-6f42e5d7] {
.material-count[data-v-f632a889] {
font-size: 0.9rem;
}

View file

@ -386,7 +386,7 @@ const _sfc_main = {
};
}
};
const depot = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-6f42e5d7"]]);
const depot = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-f632a889"]]);
export {
depot as default
};

View file

@ -7,10 +7,10 @@
pointer-events: none !important;
}
.tabs[data-v-c1c8fa28] {
.tabs[data-v-92d60a24] {
height: 100%;
}
.layout-container[data-v-c1c8fa28] {
.layout-container[data-v-92d60a24] {
height: 100%;
}
html,

View file

@ -28142,7 +28142,7 @@ const _sfc_main = {
};
}
};
const App = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-c1c8fa28"]]);
const App = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-92d60a24"]]);
/*!
* vue-router v4.5.0
* (c) 2024 Eduardo San Martin Morote

View file

@ -1,17 +1,17 @@
/* Alert 样式 */
.custom-alert[data-v-01ea1f7d] {
.custom-alert[data-v-a64db44c] {
position: fixed;
z-index: 5000;
margin-top: 10px;
left: var(--abe189c8);
right: var(--abe189c8);
left: var(--1b8e3d43);
right: var(--1b8e3d43);
background: linear-gradient(to right, rgba(0, 0, 0, 0), rgba(0, 0, 255, 0.5), rgba(0, 0, 0, 0));
}
/* Marquee 样式 */
.custom-marquee[data-v-01ea1f7d] {
.custom-marquee[data-v-a64db44c] {
pointer-events: none;
}

View file

@ -294,7 +294,7 @@ const _sfc_main = {
__name: "paomadeng",
setup(__props) {
useCssVars((_ctx) => ({
"abe189c8": margin_x.value
"1b8e3d43": margin_x.value
}));
const mower_store = useMowerStore();
const { speed_msg } = storeToRefs(mower_store);
@ -343,7 +343,7 @@ const _sfc_main = {
};
}
};
const paomadeng = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-01ea1f7d"]]);
const paomadeng = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-a64db44c"]]);
export {
paomadeng as default
};

View file

@ -1,8 +1,8 @@
.chart[data-v-291ce212] {
.chart[data-v-d6be4beb] {
height: 400px;
}
.report-card_1[data-v-291ce212] {
.report-card_1[data-v-d6be4beb] {
display: gird;
flex-direction: column;
align-items: center;

View file

@ -565,7 +565,7 @@ const _sfc_main = {
};
}
};
const report = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-291ce212"]]);
const report = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-d6be4beb"]]);
export {
report as default
};

24
ui/dist/index.html vendored
View file

@ -1,14 +1,14 @@
<!doctype html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8" />
<link rel="icon" href="/favicon.ico" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>mower-ng webui</title>
<!doctype html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8" />
<link rel="icon" href="/favicon.ico" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>mower-ng webui</title>
<script type="module" crossorigin src="/assets/index.js"></script>
<link rel="stylesheet" crossorigin href="/assets/index.css">
</head>
<body>
<div id="app"></div>
</body>
</html>
</head>
<body>
<div id="app"></div>
</body>
</html>

BIN
ui/public/avatar/司霆惊蛰.webp (Stored with Git LFS) Normal file

Binary file not shown.

BIN
ui/public/avatar/录武官.webp (Stored with Git LFS) Normal file

Binary file not shown.

BIN
ui/public/depot/“棠梨儿”.webp (Stored with Git LFS) Normal file

Binary file not shown.

BIN
ui/public/depot/司霆惊蛰的信物.webp (Stored with Git LFS) Normal file

Binary file not shown.

BIN
ui/public/depot/录武官的信物.webp (Stored with Git LFS) Normal file

Binary file not shown.

View file

@ -628,7 +628,7 @@
"cc_c_skill": {
"termId": "cc.c.skill",
"termName": "部分技能",
"description": "包含以下技能\n左膀右臂、S.W.E.E.P.、零食网络、清理协议、替身、必要责任、护卫、小小的领袖、独善其身、笑靥如春、金盏花诗会、捍卫之道、博识生手",
"description": "包含以下技能\r\n左膀右臂、S.W.E.E.P.、零食网络、清理协议、替身、必要责任、护卫、小小的领袖、独善其身、笑靥如春、金盏花诗会、捍卫之道、博识生手、点滴关照",
"buffer": []
},
"cc_t_strong2": {

View file

@ -180,19 +180,31 @@
"key": 11
},
{
"id": "TN-1",
"id_key": "act5bossrush_01",
"name": "严寒骤血",
"id": "FM-1",
"id_key": "act19mini_01",
"name": "求同则塞",
"drop": {
"突袭首次掉落": [],
"常规掉落": [],
"首次掉落": [],
"特殊掉落": [],
"常规掉落": [
"酯原料",
"破损装置",
"异铁碎片",
"双酮",
"代糖",
"源岩"
],
"首次掉落": [
"“棠梨儿”",
"至纯源石"
],
"特殊掉落": [
"“棠梨儿”"
],
"额外物资": []
},
"start": 1750752000,
"end": 1751918399,
"理智消耗": 0,
"start": 1751947200,
"end": 1752523199,
"理智消耗": 9,
"周一": 1,
"周二": 1,
"周三": 1,
@ -203,19 +215,23 @@
"key": 12
},
{
"id": "TN-2",
"id_key": "act5bossrush_02",
"name": "无声破裂",
"id": "FM-1 突袭",
"id_key": "act19mini_01#f#",
"name": "求同则塞",
"drop": {
"突袭首次掉落": [],
"突袭首次掉落": [
"“棠梨儿”"
],
"常规掉落": [],
"首次掉落": [],
"首次掉落": [
"至纯源石"
],
"特殊掉落": [],
"额外物资": []
},
"start": 1750752000,
"end": 1751918399,
"理智消耗": 0,
"start": 1751947200,
"end": 1752523199,
"理智消耗": 9,
"周一": 1,
"周二": 1,
"周三": 1,
@ -226,19 +242,31 @@
"key": 13
},
{
"id": "TN-3",
"id_key": "act5bossrush_03",
"name": "幕间重影",
"id": "FM-2",
"id_key": "act19mini_02",
"name": "求异则悖",
"drop": {
"突袭首次掉落": [],
"常规掉落": [],
"首次掉落": [],
"特殊掉落": [],
"常规掉落": [
"酯原料",
"破损装置",
"异铁碎片",
"双酮",
"代糖",
"源岩"
],
"首次掉落": [
"“棠梨儿”",
"至纯源石"
],
"特殊掉落": [
"“棠梨儿”"
],
"额外物资": []
},
"start": 1750752000,
"end": 1751918399,
"理智消耗": 0,
"start": 1751947200,
"end": 1752523199,
"理智消耗": 9,
"周一": 1,
"周二": 1,
"周三": 1,
@ -249,19 +277,23 @@
"key": 14
},
{
"id": "TN-4",
"id_key": "act5bossrush_04",
"name": "沸海遮日",
"id": "FM-2 突袭",
"id_key": "act19mini_02#f#",
"name": "求异则悖",
"drop": {
"突袭首次掉落": [],
"突袭首次掉落": [
"“棠梨儿”"
],
"常规掉落": [],
"首次掉落": [],
"首次掉落": [
"至纯源石"
],
"特殊掉落": [],
"额外物资": []
},
"start": 1750752000,
"end": 1751918399,
"理智消耗": 0,
"start": 1751947200,
"end": 1752523199,
"理智消耗": 9,
"周一": 1,
"周二": 1,
"周三": 1,
@ -272,19 +304,31 @@
"key": 15
},
{
"id": "TN-1",
"id_key": "act5bossrush_ex01",
"name": "严寒骤血",
"id": "FM-3",
"id_key": "act19mini_03",
"name": "求遐则失",
"drop": {
"突袭首次掉落": [],
"常规掉落": [],
"首次掉落": [],
"特殊掉落": [],
"常规掉落": [
"酯原料",
"破损装置",
"异铁碎片",
"双酮",
"代糖",
"源岩"
],
"首次掉落": [
"“棠梨儿”",
"至纯源石"
],
"特殊掉落": [
"“棠梨儿”"
],
"额外物资": []
},
"start": 1750752000,
"end": 1751918399,
"理智消耗": 0,
"start": 1751947200,
"end": 1752523199,
"理智消耗": 12,
"周一": 1,
"周二": 1,
"周三": 1,
@ -295,19 +339,23 @@
"key": 16
},
{
"id": "TN-2",
"id_key": "act5bossrush_ex02",
"name": "无声破裂",
"id": "FM-3 突袭",
"id_key": "act19mini_03#f#",
"name": "求遐则失",
"drop": {
"突袭首次掉落": [],
"突袭首次掉落": [
"“棠梨儿”"
],
"常规掉落": [],
"首次掉落": [],
"首次掉落": [
"至纯源石"
],
"特殊掉落": [],
"额外物资": []
},
"start": 1750752000,
"end": 1751918399,
"理智消耗": 0,
"start": 1751947200,
"end": 1752523199,
"理智消耗": 12,
"周一": 1,
"周二": 1,
"周三": 1,
@ -318,19 +366,31 @@
"key": 17
},
{
"id": "TN-3",
"id_key": "act5bossrush_ex03",
"name": "幕间重影",
"id": "FM-4",
"id_key": "act19mini_04",
"name": "求迩则乱",
"drop": {
"突袭首次掉落": [],
"常规掉落": [],
"首次掉落": [],
"特殊掉落": [],
"常规掉落": [
"酯原料",
"破损装置",
"异铁碎片",
"双酮",
"代糖",
"源岩"
],
"首次掉落": [
"“棠梨儿”",
"至纯源石"
],
"特殊掉落": [
"“棠梨儿”"
],
"额外物资": []
},
"start": 1750752000,
"end": 1751918399,
"理智消耗": 0,
"start": 1751947200,
"end": 1752523199,
"理智消耗": 12,
"周一": 1,
"周二": 1,
"周三": 1,
@ -341,19 +401,23 @@
"key": 18
},
{
"id": "TN-4",
"id_key": "act5bossrush_ex04",
"name": "沸海遮日",
"id": "FM-4 突袭",
"id_key": "act19mini_04#f#",
"name": "求迩则乱",
"drop": {
"突袭首次掉落": [],
"突袭首次掉落": [
"“棠梨儿”"
],
"常规掉落": [],
"首次掉落": [],
"首次掉落": [
"至纯源石"
],
"特殊掉落": [],
"额外物资": []
},
"start": 1750752000,
"end": 1751918399,
"理智消耗": 0,
"start": 1751947200,
"end": 1752523199,
"理智消耗": 12,
"周一": 1,
"周二": 1,
"周三": 1,
@ -364,19 +428,34 @@
"key": 19
},
{
"id": "TN-4",
"id_key": "act5bossrush_fin04",
"name": "沸海遮日",
"id": "FM-5",
"id_key": "act19mini_05",
"name": "求缓则迟",
"drop": {
"突袭首次掉落": [],
"常规掉落": [],
"首次掉落": [],
"特殊掉落": [],
"额外物资": []
"常规掉落": [
"装置"
],
"首次掉落": [
"“棠梨儿”",
"至纯源石"
],
"特殊掉落": [
"“棠梨儿”"
],
"额外物资": [
"源岩",
"酯原料",
"破损装置",
"赤金",
"固源岩",
"聚酸酯",
"装置"
]
},
"start": 1750752000,
"end": 1751918399,
"理智消耗": 0,
"start": 1751947200,
"end": 1752523199,
"理智消耗": 15,
"周一": 1,
"周二": 1,
"周三": 1,
@ -387,19 +466,23 @@
"key": 20
},
{
"id": "TN-1",
"id_key": "act5bossrush_tm01",
"name": "严寒骤血",
"id": "FM-5 突袭",
"id_key": "act19mini_05#f#",
"name": "求缓则迟",
"drop": {
"突袭首次掉落": [],
"突袭首次掉落": [
"“棠梨儿”"
],
"常规掉落": [],
"首次掉落": [],
"首次掉落": [
"至纯源石"
],
"特殊掉落": [],
"额外物资": []
},
"start": 1750752000,
"end": 1751918399,
"理智消耗": 0,
"start": 1751947200,
"end": 1752523199,
"理智消耗": 15,
"周一": 1,
"周二": 1,
"周三": 1,
@ -410,19 +493,35 @@
"key": 21
},
{
"id": "TN-2",
"id_key": "act5bossrush_tm02",
"name": "无声破裂",
"id": "FM-6",
"id_key": "act19mini_06",
"name": "求速则贪",
"drop": {
"突袭首次掉落": [],
"常规掉落": [],
"首次掉落": [],
"特殊掉落": [],
"额外物资": []
"常规掉落": [
"酮凝集"
],
"首次掉落": [
"“棠梨儿”",
"至纯源石"
],
"特殊掉落": [
"“棠梨儿”"
],
"额外物资": [
"代糖",
"异铁碎片",
"双酮",
"基础作战记录",
"糖",
"异铁",
"酮凝集",
"初级作战记录"
]
},
"start": 1750752000,
"end": 1751918399,
"理智消耗": 0,
"start": 1751947200,
"end": 1752523199,
"理智消耗": 15,
"周一": 1,
"周二": 1,
"周三": 1,
@ -433,19 +532,23 @@
"key": 22
},
{
"id": "TN-3",
"id_key": "act5bossrush_tm03",
"name": "幕间重影",
"id": "FM-6 突袭",
"id_key": "act19mini_06#f#",
"name": "求速则贪",
"drop": {
"突袭首次掉落": [],
"突袭首次掉落": [
"“棠梨儿”"
],
"常规掉落": [],
"首次掉落": [],
"首次掉落": [
"至纯源石"
],
"特殊掉落": [],
"额外物资": []
},
"start": 1750752000,
"end": 1751918399,
"理智消耗": 0,
"start": 1751947200,
"end": 1752523199,
"理智消耗": 15,
"周一": 1,
"周二": 1,
"周三": 1,
@ -456,19 +559,39 @@
"key": 23
},
{
"id": "TN-4",
"id_key": "act5bossrush_tm04",
"name": "沸海遮日",
"id": "FM-7",
"id_key": "act19mini_07",
"name": "求退则惘",
"drop": {
"突袭首次掉落": [],
"常规掉落": [],
"首次掉落": [],
"特殊掉落": [],
"额外物资": []
"常规掉落": [
"RMA70-12"
],
"首次掉落": [
"“棠梨儿”",
"至纯源石"
],
"特殊掉落": [
"“棠梨儿”"
],
"额外物资": [
"酯原料",
"双酮",
"聚酸酯",
"酮凝集",
"聚酸酯组",
"酮凝集组",
"研磨石",
"晶体元件",
"RMA70-12",
"化合切削液",
"半自然溶剂",
"环烃聚质"
]
},
"start": 1750752000,
"end": 1751918399,
"理智消耗": 0,
"start": 1751947200,
"end": 1752523199,
"理智消耗": 21,
"周一": 1,
"周二": 1,
"周三": 1,
@ -477,5 +600,151 @@
"周六": 1,
"周日": 1,
"key": 24
},
{
"id": "FM-7 突袭",
"id_key": "act19mini_07#f#",
"name": "求退则惘",
"drop": {
"突袭首次掉落": [
"“棠梨儿”"
],
"常规掉落": [],
"首次掉落": [
"至纯源石"
],
"特殊掉落": [],
"额外物资": []
},
"start": 1751947200,
"end": 1752523199,
"理智消耗": 21,
"周一": 1,
"周二": 1,
"周三": 1,
"周四": 1,
"周五": 1,
"周六": 1,
"周日": 1,
"key": 25
},
{
"id": "FM-8",
"id_key": "act19mini_08",
"name": "求进则愎",
"drop": {
"突袭首次掉落": [],
"常规掉落": [
"转质盐组"
],
"首次掉落": [
"“棠梨儿”",
"至纯源石"
],
"特殊掉落": [
"“棠梨儿”"
],
"额外物资": [
"源岩",
"破损装置",
"固源岩",
"装置",
"固源岩组",
"全新装置",
"扭转醇",
"凝胶",
"褐素纤维",
"赤金"
]
},
"start": 1751947200,
"end": 1752523199,
"理智消耗": 21,
"周一": 1,
"周二": 1,
"周三": 1,
"周四": 1,
"周五": 1,
"周六": 1,
"周日": 1,
"key": 26
},
{
"id": "FM-8 突袭",
"id_key": "act19mini_08#f#",
"name": "求进则愎",
"drop": {
"突袭首次掉落": [
"furni_terracommericials_SuisGarden_01",
"“棠梨儿”"
],
"常规掉落": [],
"首次掉落": [
"至纯源石"
],
"特殊掉落": [],
"额外物资": []
},
"start": 1751947200,
"end": 1752523199,
"理智消耗": 21,
"周一": 1,
"周二": 1,
"周三": 1,
"周四": 1,
"周五": 1,
"周六": 1,
"周日": 1,
"key": 27
},
{
"id": "FM-S-1",
"id_key": "act19mini_s01",
"name": "有求则苦",
"drop": {
"突袭首次掉落": [],
"常规掉落": [],
"首次掉落": [
"至纯源石"
],
"特殊掉落": [],
"额外物资": []
},
"start": 1751947200,
"end": 1752523199,
"理智消耗": 0,
"周一": 1,
"周二": 1,
"周三": 1,
"周四": 1,
"周五": 1,
"周六": 1,
"周日": 1,
"key": 28
},
{
"id": "FM-S-2",
"id_key": "act19mini_s02",
"name": "莫向外求",
"drop": {
"突袭首次掉落": [],
"常规掉落": [],
"首次掉落": [
"至纯源石"
],
"特殊掉落": [],
"额外物资": []
},
"start": 1751947200,
"end": 1752523199,
"理智消耗": 0,
"周一": 1,
"周二": 1,
"周三": 1,
"周四": 1,
"周五": 1,
"周六": 1,
"周日": 1,
"key": 29
}
]