From b06ed452dc08600f10de814f327293bcc8425fad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=A5=BF=E7=93=9C=C2=B0?= Date: Thu, 30 Apr 2026 13:59:58 +0800 Subject: [PATCH] dev --- backend/api/routes/info.py | 3 +- backend/core/open/helper.py | 46 +++++++++++++------ backend/database/models.py | 1 + backend/openapi | 2 +- .../src/pages/Character/Config/import.vue | 14 +++--- 5 files changed, 43 insertions(+), 23 deletions(-) diff --git a/backend/api/routes/info.py b/backend/api/routes/info.py index 6efa584a..5e546875 100644 --- a/backend/api/routes/info.py +++ b/backend/api/routes/info.py @@ -121,7 +121,8 @@ async def get_info_by_dnfhelper(uid: str, state: AltersDep, redis: RedisDep): result = await get_user_info_by_id(uid, state) return response(data=result) except Exception as e: - return response(code=500, message=str(e), data=None) + if isinstance(e, ResponseException): + return response(code=500, message=str(e), data=None) return response(code=500, message='Failed to fetch DNFHelper info', data=None) diff --git a/backend/core/open/helper.py b/backend/core/open/helper.py index 2222c446..d4f5c211 100644 --- a/backend/core/open/helper.py +++ b/backend/core/open/helper.py @@ -83,7 +83,6 @@ async def get_user_info_by_id(user_id: str, alter: AltersDep): name = next((k for k, v in job_mapping.items() if v == alter.origin), '') # 通过OCR助手获取用户信息 helper_info = await get_main_user_info_by_id(user_id, name) - print(helper_info) if helper_info is None: raise ResponseException('当前助手ID不存在或已隐藏,请确认后重试') else: @@ -97,13 +96,10 @@ def trans_to_dcalc_set(detail, alter: AltersDep): raise ResponseException('未能匹配到当前职业对应的角色信息,请确认后重试') basic = get_equipment('0') basicAvatars = basic.funs.get_dress_list([]) - equs = detail.get('equs', []) - avatars = detail.get('avatars', []) - emblems = detail.get('emblems', []) equips = {} avatar = {} - emblem = {} - for equ in equs: + emblems = {} + for equ in detail.get('equs', []): info = { 'id': '0', # 强化 @@ -133,12 +129,12 @@ def trans_to_dcalc_set(detail, alter: AltersDep): # if dcalcEquFusion: # info['fusion'] = dcalcEquFusion.id info['enchant'] = getEnchatIdByName(equ.get('enchant', ''), equ.get('posName', ''), basic.enchants) - emblems = [getEmblemIdByName(i.get('detail', ''), i.get('categorize', ''), i.get('rarity', ''), basic.emblems) for i in equ.get('emblems', [])] + # emblems = [getEmblemIdByName(i.get('detail', ''), i.get('categorize', ''), i.get('rarity', ''), basic.emblems) for i in equ.get('emblems', [])] # info['emblem_0'] = emblems[0] if len(emblems) > 0 else 0 # info['emblem_1'] = emblems[1] if len(emblems) > 1 else 0 equips[equ['posName']] = info - for item in avatars: + for item in detail.get('avatars', []): info = { 'id': '', 'option': '', @@ -176,15 +172,28 @@ def trans_to_dcalc_set(detail, alter: AltersDep): # 先默认这个了 不管了 item['enchant'] = 'Lv1~95+1|攻击强化(12%)|增益量(7%)' info['enchant'] = getEnchatIdByName(item.get('enchant', ''), item.get('posName', ''), basic.enchants) - emblems = [getEmblemIdByName(i.get('detail', ''), i.get('categorize', ''), i.get('rarity', ''), basic.emblems) for i in item.get('emblems', [])] - info['emblem_0'] = emblems[0] if len(emblems) > 0 else 0 - info['emblem_1'] = emblems[1] if len(emblems) > 1 else 0 + # emblems = [getEmblemIdByName(i.get('detail', ''), i.get('categorize', ''), i.get('rarity', ''), basic.emblems) for i in item.get('emblems', [])] + # info['emblem_0'] = emblems[0] if len(emblems) > 0 else 0 + # info['emblem_1'] = emblems[1] if len(emblems) > 1 else 0 avatar[item['posName']] = info + + rarities = ['稀有', '神器', '传说', '史诗'] + for item in detail.get('emblems', []): + pos = item.get('pos', '') + if not pos: + continue + rarity = item.get('rarity', '') + lv = item.get('lv', 1) + if rarity in rarities: + lv += rarities.index(rarity) * 5 - 1 + emblems[pos] = {'lv': lv, 'items': [getEmblemIdByAttr(i.get('attr', ''), i.get('rarity', ''), i.get('type', ''), basic.emblems) for i in item.get('items', [])]} return { 'job': job, 'equips': equips, 'avatars': avatar, + 'emblems': emblems, 'avatarLink': detail.get('avatarLink', ''), + 'fogOathLv': detail.get('fogOathLv', 0), 'dressInfo': [ { 'dress': i.get('name', ''), @@ -194,9 +203,6 @@ def trans_to_dcalc_set(detail, alter: AltersDep): for i in detail.get('avatars', []) ], } - # 处理装备 - # 处理时装 - pass def getEnchatIdByName(name: str, position: str, items: list): @@ -220,3 +226,15 @@ def getEmblemIdByName(detail: str, categorize: str, rarity: str, items: list): return 0 except Exception as _: return 0 + + +def getEmblemIdByAttr(attr: str, rarity: str, type: str, items: list): + try: + if type == '白金': + return attr + for item in items: + if item.get('attr', '') == attr and item.get('type', '') == type and item.get('rarity', '') == rarity: + return item.get('id', 0) + return 0 + except Exception as _: + return 0 diff --git a/backend/database/models.py b/backend/database/models.py index bddce708..6b246922 100644 --- a/backend/database/models.py +++ b/backend/database/models.py @@ -110,6 +110,7 @@ class EmblemData(Base): type = Column(Text) value = Column(Text) fame = Column(Integer) + attr = Column(Text) class JadeData(Base): diff --git a/backend/openapi b/backend/openapi index 60d8022f..4a72406b 160000 --- a/backend/openapi +++ b/backend/openapi @@ -1 +1 @@ -Subproject commit 60d8022f367b6f16a63aa6537b65cf260e3d47af +Subproject commit 4a72406baacf9c36a8f80d3f6ebb56078a820f00 diff --git a/frontend/src/pages/Character/Config/import.vue b/frontend/src/pages/Character/Config/import.vue index 6269395b..e49d4887 100644 --- a/frontend/src/pages/Character/Config/import.vue +++ b/frontend/src/pages/Character/Config/import.vue @@ -17,6 +17,8 @@ export default defineComponent({ configStore.config.equips = res.equips configStore.config.avatar = res.avatars configStore.config.avatarLink = res.avatarLink + configStore.config.emblems = res.emblems + configStore.config.sundry.fog = res.fogOathLv const { alert } = useDialog() visible.value = false await alert({ @@ -51,15 +53,13 @@ export default defineComponent({
-

- * 点击导入后会从助手通过文字识别获取打造 -

-

- * 部分打造无法获取,此处仅做快捷导入 -

+

* 点击导入后会从助手通过文字识别获取打造

+

* 部分打造无法获取,此处仅做快捷导入

- 导入 + + 导入 + (visible.value = false)}>取消