💄 队伍出场页面UI调整

This commit is contained in:
目棃
2024-10-30 22:49:33 +08:00
parent 9d08880c10
commit 41e71357ef
3 changed files with 73 additions and 57 deletions

View File

@@ -15,29 +15,19 @@
<div v-if="select" class="hta-tt-flex"> <div v-if="select" class="hta-tt-flex">
<div class="hta-tuf-box"> <div class="hta-tuf-box">
<div class="hta-tuf-title">上半</div> <div class="hta-tuf-title">上半</div>
<div v-for="items in selectItem.Up" :key="items.Rate" class="hta-tuf-item"> <v-virtual-scroll :items="selectItem.Up" item-height="100" class="hta-tuf-item">
<div class="hta-tuf-item-icons"> <template #default="{ item }">
<TibWikiAbyss2 <HtaTeamLine :model-value="item" />
v-for="item in items.Item.split(',')" </template>
:key="item" </v-virtual-scroll>
:model-value="item"
/>
</div>
<div class="hta-tuf-item-rate">上场{{ items.Rate }}</div>
</div>
</div> </div>
<div class="hta-tuf-box"> <div class="hta-tuf-box">
<div class="hta-tuf-title">下半</div> <div class="hta-tuf-title">下半</div>
<div v-for="items in selectItem.Down" :key="items.Rate" class="hta-tuf-item"> <v-virtual-scroll :items="selectItem.Down" item-height="100" class="hta-tuf-item">
<div class="hta-tuf-item-icons"> <template #default="{ item }">
<TibWikiAbyss2 <HtaTeamLine :model-value="item" />
v-for="item in items.Item.split(',')" </template>
:key="item" </v-virtual-scroll>
:model-value="item"
/>
</div>
<div class="hta-tuf-item-rate">上场{{ items.Rate }}</div>
</div>
</div> </div>
</div> </div>
</v-window-item> </v-window-item>
@@ -47,7 +37,7 @@
<script lang="ts" setup> <script lang="ts" setup>
import { onMounted, ref } from "vue"; import { onMounted, ref } from "vue";
import TibWikiAbyss2 from "../itembox/tib-wiki-abyss-2.vue"; import HtaTeamLine from "./hta-team-line.vue";
interface HtaTabTeamProps { interface HtaTabTeamProps {
modelValue: TGApp.Plugins.Hutao.Abyss.TeamCombination[]; modelValue: TGApp.Plugins.Hutao.Abyss.TeamCombination[];
@@ -117,29 +107,10 @@ onMounted(async () => {
} }
.hta-tuf-item { .hta-tuf-item {
display: flex; position: relative;
width: 100%; width: 100%;
height: 100px; max-height: calc(100vh - 200px);
align-items: center;
justify-content: flex-start;
padding: 5px;
border-radius: 5px; border-radius: 5px;
background: var(--box-bg-1); background: var(--box-bg-1);
column-gap: 10px;
}
.hta-tuf-item-icons {
display: grid;
column-gap: 10px;
grid-template-columns: repeat(4, 1fr);
}
.hta-tuf-item-rate {
display: flex;
width: calc(100% - 360px);
height: 100%;
align-items: center;
justify-content: center;
font-family: var(--font-title);
} }
</style> </style>

View File

@@ -0,0 +1,48 @@
<template>
<div class="hta-tl-box">
<div class="hta-tl-item">
<TibWikiAbyss2
v-for="item in props.modelValue.Item.split(',')"
:key="item"
:model-value="item"
/>
</div>
<div class="hta-tl-rate">上场{{ props.modelValue.Rate }}</div>
</div>
</template>
<script lang="ts" setup>
import TibWikiAbyss2 from "../itembox/tib-wiki-abyss-2.vue";
interface HtaTeamLineProps {
modelValue: { Item: string; Rate: number };
}
const props = defineProps<HtaTeamLineProps>();
</script>
<style lang="css" scoped>
.hta-tl-box {
position: relative;
display: flex;
width: calc(100% - 20px);
align-items: center;
justify-content: space-between;
padding: 10px;
border-radius: 5px;
margin: 10px;
background: var(--box-bg-2);
}
.hta-tl-item {
display: grid;
column-gap: 10px;
grid-template-columns: repeat(4, 1fr);
}
.hta-tl-rate {
display: flex;
height: 100%;
align-items: center;
justify-content: center;
font-family: var(--font-title);
}
</style>

View File

@@ -32,7 +32,7 @@
<HtaTabUp v-if="abyssData.up !== null" :data="abyssData.up" /> <HtaTabUp v-if="abyssData.up !== null" :data="abyssData.up" />
</v-window-item> </v-window-item>
<v-window-item value="team"> <v-window-item value="team">
<HtaTabTeam v-if="abyssData.team !== null" :data="abyssData.team" /> <HtaTabTeam v-if="abyssData.team !== null" :model-value="abyssData.team" />
</v-window-item> </v-window-item>
<v-window-item value="hold"> <v-window-item value="hold">
<HtaTabHold v-if="abyssData.hold !== null" :data="abyssData.hold" /> <HtaTabHold v-if="abyssData.hold !== null" :data="abyssData.hold" />
@@ -63,15 +63,15 @@ enum AbyssTabEnum {
type AbyssTab = keyof typeof AbyssTabEnum; type AbyssTab = keyof typeof AbyssTabEnum;
type AbyssList = Array<{ label: AbyssTabEnum; value: AbyssTab }>; type AbyssList = Array<{ label: AbyssTabEnum; value: AbyssTab }>;
export type AbyssDataItem<T> = { cur: T; last: T }; export type AbyssDataItem<T> = { cur: T; last: T };
export type AbyssDataItemType<T extends AbyssTab> = AbyssDataItem< export type AbyssDataItemType<T extends AbyssTab> = T extends "use"
T extends "use" ? AbyssDataItem<TGApp.Plugins.Hutao.Abyss.AvatarUse[]>
? TGApp.Plugins.Hutao.Abyss.AvatarUse[] : T extends "up"
: T extends "up" ? AbyssDataItem<TGApp.Plugins.Hutao.Abyss.AvatarUp[]>
? TGApp.Plugins.Hutao.Abyss.AvatarUp[] : T extends "team"
: T extends "team" ? TGApp.Plugins.Hutao.Abyss.TeamCombination[]
? TGApp.Plugins.Hutao.Abyss.TeamCombination[] : T extends "hold"
: TGApp.Plugins.Hutao.Abyss.AvatarHold[] ? AbyssDataItem<TGApp.Plugins.Hutao.Abyss.AvatarHold[]>
>; : null;
type AbyssData = { type AbyssData = {
[key in AbyssTab]: AbyssDataItemType<key> | null; [key in AbyssTab]: AbyssDataItemType<key> | null;
}; };
@@ -106,7 +106,7 @@ onMounted(async () => {
last: await Hutao.Abyss.getOverview(true), last: await Hutao.Abyss.getOverview(true),
}; };
loadT.value = "正在获取深渊数据"; loadT.value = "正在获取深渊数据";
const useData = await getData("use"); const useData = <AbyssDataItem<TGApp.Plugins.Hutao.Abyss.AvatarUse[]>>await getData("use");
abyssData.value = { use: useData, up: null, team: null, hold: null }; abyssData.value = { use: useData, up: null, team: null, hold: null };
loading.value = false; loading.value = false;
}); });
@@ -151,10 +151,7 @@ async function getData(type: AbyssTab): Promise<AbyssDataItemType<AbyssTab>> {
last: await Hutao.Abyss.avatar.getUpRate(true), last: await Hutao.Abyss.avatar.getUpRate(true),
}; };
case "team": case "team":
return { return await Hutao.Abyss.getTeamCollect();
cur: await Hutao.Abyss.getTeamCollect(),
last: await Hutao.Abyss.getTeamCollect(true),
};
case "hold": case "hold":
return { return {
cur: await Hutao.Abyss.avatar.getHoldRate(), cur: await Hutao.Abyss.avatar.getHoldRate(),