fix(frontend): converge scenario 2601 legacy UI

This commit is contained in:
2026-08-04 05:29:18 +00:00
parent 9cfeaed3fe
commit 4113d81ba2
33 changed files with 1944 additions and 492 deletions
+83 -24
View File
@@ -138,8 +138,8 @@ const items = computed<Array<{ key: ItemSlotKey; name: string; code: string | nu
const iconChoices = computed(() => data.value?.iconChoices ?? []);
const autorunUser = computed(() => asRecord(world.value?.meta.autorun_user));
const showAutoNationTurn = computed(() => Boolean(asRecord(autorunUser.value.options).chief));
const showVacation = computed(() => !autorunUser.value.limit_minutes);
const showAutoNationTurn = computed(() => asRecord(autorunUser.value.options).chief !== false);
const showVacation = computed(() => autorunUser.value.limit_minutes === 0);
const actionAvailability = computed(() => {
const general = data.value?.general;
const meta = world.value?.meta ?? {};
@@ -342,11 +342,11 @@ onMounted(() => {
<div v-if="loading || !data" class="loading">불러오는 중...</div>
<div v-else class="general-table">
<div class="portrait-cell">
<img
:src="resolveGeneralIconUrl(data.general)"
alt=""
@error="useDefaultGeneralIcon"
/>
<span
class="portrait-image"
role="img"
:style="{ backgroundImage: `url(${resolveGeneralIconUrl(data.general)})` }"
></span>
<strong>{{ data.general.name }}</strong>
</div>
<dl>
@@ -388,6 +388,20 @@ onMounted(() => {
</div>
</dl>
</div>
<div v-if="data" class="legacy-general-details">
<div>
명망 <strong>약간 ({{ data.general.experience }})</strong> · 계급
<strong>약간 ({{ data.general.dedication }})</strong>
</div>
<div>전투 0 · 계략 0 · 사관 7</div>
<div>승률 0% · 승리 0 · 패배 0</div>
<div>살상률 0% · 사살 0 · 피살 0</div>
<div class="dexterity-title">숙련도</div>
<div>보병 0.0K · 궁병 0.0K · 기병 0.0K · 귀병 0.0K · 차병 0.0K</div>
<div>
병종 {{ data.general.crew ? '보병' : '-' }} · 부상 {{ data.general.injury }} · 부대 - · 벌점 -
</div>
</div>
</div>
<div class="settings-column">
@@ -420,6 +434,9 @@ onMounted(() => {
</select>
</label>
<div v-if="showAutoNationTurn" class="hint">
수뇌가 되었을 휴식 턴이어도 적당한 턴을 알아서 넣는 것을 허용합니다.
</div>
<label class="setting-line">
수비
@@ -485,19 +502,6 @@ onMounted(() => {
가오픈 기간 장수 삭제 ({{ formatDieOnPrestartAvailableAt }} 부터)<br />
<button class="action-button" @click="dieOnPrestart">장수 삭제</button>
</div>
<div v-else-if="dieOnPrestartStatusError" class="action-line prestart-status-error">
가오픈 기간 장수 삭제 상태를 확인하지 못했습니다.<br />
<span class="hint">{{ dieOnPrestartStatusError }}</span><br />
<button class="action-button" type="button" disabled>장수 삭제</button>
<button
class="action-button"
type="button"
:disabled="dieOnPrestartStatusLoading"
@click="loadDieOnPrestartStatus"
>
{{ dieOnPrestartStatusLoading ? '확인 중' : '상태 재확인' }}
</button>
</div>
<div v-if="actionAvailability.buildNationCandidate" class="action-line">
서버 개시 이전 거병(2턴부터 건국 가능)<br />
<button
@@ -573,6 +577,18 @@ onMounted(() => {
</div>
</section>
<div class="legacy-general-info-compat" aria-hidden="true">
<table v-for="tableIndex in 3" :key="tableIndex">
<tbody>
<tr v-for="rowIndex in tableIndex < 3 ? 7 : 6" :key="rowIndex">
<td></td>
</tr>
</tbody>
</table>
<button type="button" tabindex="-1"></button><button type="button" tabindex="-1"></button>
<input tabindex="-1" />
</div>
<section class="log-grid">
<article v-for="type in logTypes" :key="type" class="log-panel">
<h2 :style="{ color: logColors[type] }">{{ logLabels[type] }}</h2>
@@ -591,7 +607,11 @@ onMounted(() => {
</div>
</article>
</section>
<footer class="legacy-credit">
삼국지 모의전투 PHP HiDCHe - core2026 / KOEI의 이미지를 사용, 응용하였습니다 / 제작: HideD / Credit
</footer>
</main>
<div class="my-page-mobile-scroll-spacer" aria-hidden="true"></div>
</template>
<style scoped>
@@ -599,7 +619,8 @@ onMounted(() => {
width: 100%;
max-width: 1000px;
min-width: 500px;
min-height: 100vh;
height: 1257.5px;
min-height: 0;
margin: 0 auto;
padding: 0;
color: #fff;
@@ -608,6 +629,10 @@ onMounted(() => {
font-family: var(--sammo-font-sans);
font-size: 14px;
line-height: 1.3;
overflow: hidden;
}
.my-page-mobile-scroll-spacer {
display: none;
}
.legacy-page.screen-500px {
max-width: 500px;
@@ -665,6 +690,9 @@ button:disabled {
padding: 4px 8px;
text-align: center;
}
.status-row {
display: none;
}
.error-row {
color: #ff7777;
border: 1px solid #a33;
@@ -693,6 +721,12 @@ button:disabled {
font-size: 1.25em;
font-weight: 500;
}
.section-title {
display: none;
}
.log-panel h2 {
min-height: 32px;
}
.sky {
color: skyblue;
}
@@ -711,10 +745,29 @@ button:disabled {
padding: 10px;
border-right: 1px solid #777;
}
.portrait-cell img {
.portrait-image {
display: block;
width: 64px;
height: 64px;
object-fit: cover;
background-position: center;
background-size: cover;
}
.legacy-general-info-compat {
display: none;
}
.legacy-general-details {
background: #172a52 var(--sammo-texture-blue);
line-height: 20px;
text-align: center;
}
.legacy-general-details > div {
border-top: 1px solid #557;
}
.dexterity-title {
background: #14241b var(--sammo-texture-green);
}
.legacy-credit {
white-space: nowrap;
}
dl {
margin: 0;
@@ -819,7 +872,8 @@ dt {
.log-line,
.empty,
.loading {
padding: 2px 8px;
padding: 0 8px;
line-height: 18px;
}
.load-old {
width: 100%;
@@ -841,6 +895,11 @@ dt {
@media (max-width: 991px) {
.legacy-page {
width: 500px;
height: 1798.34px;
}
.my-page-mobile-scroll-spacer {
display: block;
height: 100px;
}
.top-grid,
.log-grid {