diff --git a/src/components/userChallenge/tuc-challenge-item.vue b/src/components/userChallenge/tuc-challenge-item.vue
new file mode 100644
index 00000000..495abf92
--- /dev/null
+++ b/src/components/userChallenge/tuc-challenge-item.vue
@@ -0,0 +1,232 @@
+
+
+
+
+
{{ props.data.name }} Lv.{{ props.data.monster.level }}
+
+ 战斗用时:
+ {{ props.data.second }}
+ 秒
+
+
+
+
+
+
+
+
+
+
+ {{ avatar.type === 1 ? "最强一击" : "最高总伤害" }}
+ {{ avatar.dps }}
+
+
+
+
+
+
+
+
+
diff --git a/src/components/userChallenge/tuc-monster-tag.vue b/src/components/userChallenge/tuc-monster-tag.vue
new file mode 100644
index 00000000..19cb0068
--- /dev/null
+++ b/src/components/userChallenge/tuc-monster-tag.vue
@@ -0,0 +1,95 @@
+
+
+
+
+
+ {{ descItem.value }}
+
+
+
+
+
diff --git a/src/components/userChallenge/tuc-overview.vue b/src/components/userChallenge/tuc-overview.vue
new file mode 100644
index 00000000..ecef186b
--- /dev/null
+++ b/src/components/userChallenge/tuc-overview.vue
@@ -0,0 +1,84 @@
+
+
+
+
{{ props.title }}{{ props.data.has_data ? "" : " (无数据) " }}
+
+
+ 最佳记录
+
+
+ {{ getDiffTitle(props.data.best) }}
+ {{ props.data.best.second }}s
+
+
+
+
+
+
+
diff --git a/src/pages/User/Challenge.vue b/src/pages/User/Challenge.vue
index 571e222f..901f2064 100644
--- a/src/pages/User/Challenge.vue
+++ b/src/pages/User/Challenge.vue
@@ -95,7 +95,16 @@
class="ucb-window-item"
>
- {{ JSON.stringify(item, null, 2) }}
+
+
+ {{ item.name }}
+ {{ item.startTime }} ~ {{ item.endTime }}
+ 更新于 {{ item.updated }}
+
+
幽境危战 | Render by TeyvatGuide v{{ version }}
+
+
+
@@ -109,6 +118,7 @@
import showDialog from "@comp/func/dialog.js";
import showLoading from "@comp/func/loading.js";
import showSnackbar from "@comp/func/snackbar.js";
+import TucOverview from "@comp/userChallenge/tuc-overview.vue";
import TucPopItem from "@comp/userChallenge/tuc-pop-item.vue";
import { GameServerEnum, getGameServerDesc } from "@enum/game.js";
import recordReq from "@req/recordReq.js";
@@ -150,8 +160,8 @@ const popList = shallowRef>([]);
onMounted(async () => {
version.value = await getVersion();
await TGLogger.Info("[UserCombat][onMounted] 打开幽境危战页面");
- await refreshPopList();
await reloadChallenge();
+ await refreshPopList(false);
});
watch(
@@ -301,10 +311,12 @@ async function deleteChallenge(): Promise {
await reloadChallenge();
}
-async function refreshPopList(): Promise {
+async function refreshPopList(hint: boolean = true): Promise {
if (reqPop.value) return;
reqPop.value = true;
- await showLoading.start("正在加载赋光之人列表", `服务器: ${getGameServerDesc(server.value)}`);
+ if (hint) {
+ await showLoading.start("正在加载赋光之人列表", `服务器: ${getGameServerDesc(server.value)}`);
+ }
const resp = await recordReq.challenge.pop(server.value);
if (resp.retcode !== 0) {
reqPop.value = false;
@@ -461,7 +473,7 @@ async function refreshPopList(): Promise {
.ucb-window-box {
display: flex;
flex-direction: column;
- gap: 8px;
+ gap: 16px;
}
.ucb-empty {
@@ -479,4 +491,30 @@ async function refreshPopList(): Promise {
color: var(--common-text-title);
font-family: var(--font-title);
}
+
+.ucw-top {
+ display: flex;
+ width: 100%;
+ align-items: flex-start;
+ justify-content: space-between;
+}
+
+.ucw-title {
+ display: flex;
+ flex-direction: column;
+ column-gap: 4px;
+ font-size: 12px;
+
+ :first-child {
+ color: var(--common-text-title);
+ font-family: var(--font-title);
+ font-size: 20px;
+ }
+}
+
+.ucw-share {
+ z-index: -1;
+ font-size: 12px;
+ opacity: 0.8;
+}
diff --git a/src/types/Game/Challenge.d.ts b/src/types/Game/Challenge.d.ts
index 67ca2dc6..746c97b9 100644
--- a/src/types/Game/Challenge.d.ts
+++ b/src/types/Game/Challenge.d.ts
@@ -149,14 +149,14 @@ declare namespace TGApp.Game.Challenge {
* @since Beta v0.8.0
* @interface ChallengeList
* @property {string} name - 怪物名称
- * @property {number} seconds - 挑战用时(秒)
+ * @property {number} second - 挑战用时(秒)
* @property {Array} teams - 挑战队伍列表
* @property {Array} best_avatar - 最佳角色列表
* @property {ChallengeMonster} monster - 挑战怪物数据
*/
type ChallengeList = {
name: string;
- seconds: number;
+ second: number;
teams: Array;
best_avatar: Array;
monster: ChallengeMonster;
@@ -191,9 +191,9 @@ declare namespace TGApp.Game.Challenge {
* @property {number} avatar_id - 角色 ID
* @property {string} side_icon - 角色侧边图标 URL
* @property {string} dps - 角色 DPS 数据
- * @property {string} type - 1-最强一击,2-最高总伤害
+ * @property {number} type - 1-最强一击,2-最高总伤害
*/
- type ChallengeAvatar = { avatar_id: number; side_icon: string; dps: string; type: string };
+ type ChallengeAvatar = { avatar_id: number; side_icon: string; dps: string; type: number };
/**
* @description 单次挑战怪物数据