fix: 정규 표현식 수정 및 조건부 렌더링 개선; 코드 가독성 향상

This commit is contained in:
2026-01-17 15:24:27 +00:00
parent 43dd42d928
commit 70d4832af7
4 changed files with 17 additions and 17 deletions
+2 -2
View File
@@ -102,7 +102,7 @@ const parsePhpArray = (input: string): unknown => {
const parseNumber = () => {
let raw = '';
while (index < input.length && /[0-9.+\-]/.test(input[index] ?? '')) {
while (index < input.length && /[0-9.+-]/.test(input[index] ?? '')) {
raw += input[index];
index += 1;
}
@@ -121,7 +121,7 @@ const parsePhpArray = (input: string): unknown => {
if (char === '"' || char === "'") {
return parseString();
}
if (/[0-9.+\-]/.test(char)) {
if (/[0-9.+-]/.test(char)) {
return parseNumber();
}
if (input.startsWith('true', index)) {
+5 -5
View File
@@ -123,7 +123,7 @@ watch(
</button>
</div>
<div class="mobile-panel" v-if="mobileTab === 'map'">
<div v-if="mobileTab === 'map'" class="mobile-panel">
<PanelCard title="지도">
<MapViewer :map-data="worldMap" :map-layout="mapLayout" :loading="loading" />
</PanelCard>
@@ -132,7 +132,7 @@ watch(
</PanelCard>
</div>
<div class="mobile-panel" v-if="mobileTab === 'commands'">
<div v-if="mobileTab === 'commands'" class="mobile-panel">
<PanelCard title="명령 목록" subtitle="예턴/명령 배치 영역">
<CommandListPanel
:command-table="commandTable"
@@ -149,7 +149,7 @@ watch(
</PanelCard>
</div>
<div class="mobile-panel" v-if="mobileTab === 'status'">
<div v-if="mobileTab === 'status'" class="mobile-panel">
<PanelCard title="장수 스탯">
<GeneralBasicCard :general="general" :loading="loading" />
</PanelCard>
@@ -161,7 +161,7 @@ watch(
</PanelCard>
</div>
<div class="mobile-panel" v-if="mobileTab === 'world'">
<div v-if="mobileTab === 'world'" class="mobile-panel">
<PanelCard title="장수 동향">
<SkeletonLines v-if="loading" :lines="4" />
<div v-else class="placeholder">장수 동향은 실시간 스트림으로 연결 예정</div>
@@ -180,7 +180,7 @@ watch(
</PanelCard>
</div>
<div class="mobile-panel" v-if="mobileTab === 'messages'">
<div v-if="mobileTab === 'messages'" class="mobile-panel">
<PanelCard title="메시지함">
<MessagePanel
:messages="messages"
@@ -280,10 +280,10 @@ onMounted(() => {
</select>
<input v-model="filterText" class="filter-input" placeholder="도시 검색" />
<button
v-if="canAppoint"
class="ghost"
:class="{ active: showAppointment }"
@click="showAppointment = !showAppointment"
v-if="canAppoint"
>
관직 임명 모드
</button>
@@ -345,7 +345,7 @@ onMounted(() => {
</div>
<div v-if="showAppointment && canAppoint" class="city-appoint">
<div class="appoint-row" v-for="level in officerLevels" :key="level">
<div v-for="level in officerLevels" :key="level" class="appoint-row">
<span class="officer-label">{{ officerLabels[level] }}</span>
<select
v-model.number="appointmentDraft[city.id][level]"
@@ -314,14 +314,14 @@ onMounted(() => {
<div class="chief-name">
{{ chiefAssignments[level]?.name ?? '-' }}
</div>
<div class="chief-meta" v-if="chiefAssignments[level]">
<div v-if="chiefAssignments[level]" class="chief-meta">
{{ chiefAssignments[level]?.officerCityName ?? chiefAssignments[level]?.cityName ?? '-' }}
</div>
</div>
</div>
</PanelCard>
<PanelCard title="수뇌부 임명" subtitle="수뇌 관직 임명 및 해임" v-if="canAssign">
<PanelCard v-if="canAssign" title="수뇌부 임명" subtitle="수뇌 관직 임명 및 해임">
<div class="chief-appoint">
<div v-for="level in chiefLevels" :key="level" class="appoint-row">
<div class="appoint-label">{{ formatOfficerLevelText(level, nationLevel) }}</div>
@@ -336,7 +336,7 @@ onMounted(() => {
</div>
</PanelCard>
<PanelCard title="도시 관직 빠른 임명" subtitle="도시별 관직을 신속하게 배치합니다" v-if="canAssign">
<PanelCard v-if="canAssign" title="도시 관직 빠른 임명" subtitle="도시별 관직을 신속하게 배치합니다">
<div class="fast-appoint">
<div class="appoint-row">
<div class="appoint-label">도시</div>
@@ -397,7 +397,7 @@ onMounted(() => {
</div>
</PanelCard>
<PanelCard title="외교 권한" subtitle="외교권자/조언자 임명" v-if="isLeader">
<PanelCard v-if="isLeader" title="외교 권한" subtitle="외교권자/조언자 임명">
<div class="permission-grid">
<div>
<div class="permission-title">외교권자 (최대 2)</div>
@@ -408,9 +408,9 @@ onMounted(() => {
class="permission-item"
>
<input
v-model="ambassadorSelection"
type="checkbox"
:value="candidate.id"
v-model="ambassadorSelection"
@change="enforceAmbassadorLimit(candidate.id)"
/>
{{ candidate.name }}
@@ -427,9 +427,9 @@ onMounted(() => {
class="permission-item"
>
<input
v-model="auditorSelection"
type="checkbox"
:value="candidate.id"
v-model="auditorSelection"
@change="enforceAuditorLimit(candidate.id)"
/>
{{ candidate.name }}
@@ -440,7 +440,7 @@ onMounted(() => {
</div>
</PanelCard>
<PanelCard title="추방" subtitle="국가에서 장수를 추방합니다" v-if="canAssign">
<PanelCard v-if="canAssign" title="추방" subtitle="국가에서 장수를 추방합니다">
<div class="kick-panel">
<select v-model.number="kickTargetId" class="select-input">
<option :value="0">장수 선택</option>
@@ -448,7 +448,7 @@ onMounted(() => {
{{ general.name }}
</option>
</select>
<button class="ghost" @click="kickGeneral" :disabled="kickTargetId === 0">추방</button>
<button class="ghost" :disabled="kickTargetId === 0" @click="kickGeneral">추방</button>
</div>
</PanelCard>
</section>