diff --git a/backend/api/routes/info.py b/backend/api/routes/info.py index be079eda..b77c0368 100644 --- a/backend/api/routes/info.py +++ b/backend/api/routes/info.py @@ -11,7 +11,7 @@ from api.dp import RedisDep, AltersDep from core.basic.equipment import get_equipment from core.character.adventure import get_adv_list from core.basic.character import createCharacter -from core.open.helper import get_user_info_by_id, get_user_list_by_id +from core.open.helper import get_user_info_by_id, get_user_info_by_role_id, get_user_list_by_id, getRoleJobCode from core.open.skillTree import get_skill_tree_info from api.core.exception import ResponseException @@ -34,9 +34,12 @@ def replace_placeholders(template): @router.get('/adventure') -async def get_adventure_info(request: Request, redis: RedisDep): +async def get_adventure_info(request: Request, redis: RedisDep, name: str = None): adventure_info = get_redis_info(redis, 'dcalc:adventure', get_adv_list) - + if name: + total = [item for job in adventure_info for item in job.get('children', [])] + code = getRoleJobCode(name) + adventure_info = next((x for x in total if (x['title'] == name or x['name'] == code) and x['open']), None) return response(data=adventure_info) @@ -128,6 +131,18 @@ async def get_dnfhelper_list(uid: str, redis: RedisDep): # return response(code=500, message='Failed to fetch DNFHelper list', data=None) +@router.get('/dnfhelper/{uid}/{id}/') +async def get_dnfhelper_detail(uid: str, id: str, state: AltersDep, redis: RedisDep): + cache_key = f'dnfhelper:{uid}:{id}' + + async def get_detail(): + return await get_user_info_by_role_id(uid, id, state) + + result = await get_redis_info_async(redis, cache_key, get_detail, expire=12 * 60 * 60) + return response(data=result) + # return response(code=500, message='Failed to fetch DNFHelper detail', data=None) + + @router.get('/dnfhelper/{uid}/') async def get_info_by_dnfhelper(uid: str, state: AltersDep, redis: RedisDep): try: diff --git a/backend/core/open/helper.py b/backend/core/open/helper.py index bd4e6495..a8f11c55 100644 --- a/backend/core/open/helper.py +++ b/backend/core/open/helper.py @@ -86,6 +86,19 @@ async def get_user_list_by_id(user_id: str): return helper_list +def getRoleJobCode(jobName: str): + return job_mapping.get(jobName, None) + + +async def get_user_info_by_role_id(user_id: str, role_id: str, alter: AltersDep): + # 通过OCR助手获取用户信息 + helper_info = await get_main_user_info_by_id(user_id, None, role_id) + if helper_info is None: + raise ResponseException('当前助手ID不存在或已隐藏,请确认后重试') + else: + return trans_to_dcalc_set(helper_info, alter) + + async def get_user_info_by_id(user_id: str, alter: AltersDep): if alter is None: raise ResponseException('登录过期或无效Token,请刷新后重试') diff --git a/backend/openapi b/backend/openapi index be3ff246..0c65d37e 160000 --- a/backend/openapi +++ b/backend/openapi @@ -1 +1 @@ -Subproject commit be3ff246ed3e77b7e95714df0c4cf74dc915eb60 +Subproject commit 0c65d37e637b864d7d0f76ace989a788742b3619 diff --git a/frontend/src/api/info/index.ts b/frontend/src/api/info/index.ts index 48a5dca2..add44682 100644 --- a/frontend/src/api/info/index.ts +++ b/frontend/src/api/info/index.ts @@ -1,5 +1,5 @@ import { defineRequest } from '../common' -import type { IAdventureInfo, ICharacterInfo, IHelperInfo, ISkillInfo } from './type' +import type { IAdventureInfo, IAlterInfo, ICharacterInfo, IHelperInfo, ISkillInfo } from './type' export default defineRequest((request) => { return { @@ -7,6 +7,10 @@ export default defineRequest((request) => { const res = await request.get('/adventure') return res.data }, + async alterByName(name: string) { + const res = await request.get('/adventure', { params: { name } }) + return res.data + }, async createToken(alter: string, equVersion?: string) { const res = await request.get(`/token/get/${alter}`, { params: { equVersion } }) return res.data @@ -23,6 +27,10 @@ export default defineRequest((request) => { const res = await request.get(`/dnfhelper/${uid}/`) return res.data }, + async getConfigFromHelperAlter(uid: string, alter: string) { + const res = await request.get(`/dnfhelper/${uid}/${alter}`) + return res.data + }, async getSkillFromCode(code: string) { const res = await request.post(`/skillTree/`, { code }) return res.data diff --git a/frontend/src/api/info/type.ts b/frontend/src/api/info/type.ts index a76ffb79..0659c95b 100644 --- a/frontend/src/api/info/type.ts +++ b/frontend/src/api/info/type.ts @@ -216,15 +216,17 @@ export interface Attribute { detail: string } +export interface IHelperRoleInfo { + roleId: string + roleName: string + roleJob: string + avatarLink: string + fame: number +} + export interface IHelperInfo { id: string avatar: string name: string - roleList: { - roleId: string - roleName: string - roleJob: string - avatarLink: string - fame: number - }[] + roleList: IHelperRoleInfo[] } diff --git a/frontend/src/pages/Character/Config/importDnfhelper.vue b/frontend/src/pages/Character/Config/importDnfhelper.vue new file mode 100644 index 00000000..663799b8 --- /dev/null +++ b/frontend/src/pages/Character/Config/importDnfhelper.vue @@ -0,0 +1,80 @@ + diff --git a/frontend/src/pages/Character/Index.vue b/frontend/src/pages/Character/Index.vue index f8424edf..eef55aba 100644 --- a/frontend/src/pages/Character/Index.vue +++ b/frontend/src/pages/Character/Index.vue @@ -1,7 +1,7 @@ diff --git a/frontend/src/router/index.ts b/frontend/src/router/index.ts index 16ba4c0a..9ba1e296 100644 --- a/frontend/src/router/index.ts +++ b/frontend/src/router/index.ts @@ -17,7 +17,7 @@ const routes: RouteRecordRaw[] = [ { path: '/character/:alter', redirect: (to) => { - return { path: `/character/equipment/${to.params.alter}` } + return { path: `/character/equipment/${to.params.alter}`, query: to.query } }, props: true, name: 'character', diff --git a/frontend/vite.config.ts b/frontend/vite.config.ts index f2566b02..d379e29b 100644 --- a/frontend/vite.config.ts +++ b/frontend/vite.config.ts @@ -49,12 +49,12 @@ export default defineConfig({ proxy: { '/api': { target: 'http://127.0.0.1:47173/api', - changeOrigin: true, + changeOrigin: false, rewrite: (path) => path.replace(/^\/api/, ''), }, '/image': { target: 'http://127.0.0.1:3000', - changeOrigin: true, + changeOrigin: false, rewrite: (path) => path.replace(/^\/image/, ''), }, },