feat(pokemon): enforce bidirectional opposite sync and hide opposite text

Add unique indexes and transactional sync for opposite configurations
Remove explicit opposite names and labels from Pokemon detail view
This commit is contained in:
2026-05-07 16:21:11 +08:00
parent 953b90eba1
commit 575597b146
6 changed files with 83 additions and 57 deletions

View File

@@ -790,9 +790,6 @@ watch(initialPokemon, applyInitialPokemon, { immediate: true });
<p class="meta-line pokemon-core-note">{{ t('pages.pokemon.environmentCoreNote') }}</p>
<div class="pokemon-core-value">
<span class="chip">{{ pokemon.environment.name }}</span>
<span v-if="pokemon.environment.opposite" class="chip chip--danger">
{{ t('pages.pokemon.opposite') }}: {{ pokemon.environment.opposite.name }}
</span>
</div>
<p v-if="pokemon.environment.description" class="detail-text">{{ pokemon.environment.description }}</p>
</DetailSection>
@@ -802,7 +799,6 @@ watch(initialPokemon, applyInitialPokemon, { immediate: true });
<div v-if="pokemon.favorite_things.length" class="pokemon-favourite-list">
<span v-for="thing in pokemon.favorite_things" :key="thing.id" class="chip pokemon-favourite-chip">
<span>{{ thing.name }}</span>
<span v-if="thing.opposite" class="pokemon-chip-note">{{ t('pages.pokemon.opposite') }}: {{ thing.opposite.name }}</span>
</span>
</div>
<p v-else class="meta-line">{{ t('common.none') }}</p>
@@ -887,8 +883,7 @@ watch(initialPokemon, applyInitialPokemon, { immediate: true });
'related-pokemon-row__environment--opposite': related.environment.isOpposite
}"
>
<span>{{ related.environment.name }}</span>
<span v-if="related.environment.isOpposite" class="related-relation-label">{{ t('pages.pokemon.opposite') }}</span>
{{ related.environment.name }}
</span>
</div>
</div>
@@ -902,8 +897,7 @@ watch(initialPokemon, applyInitialPokemon, { immediate: true });
class="chip related-favourite-chip"
:class="{ 'related-favourite-chip--match': thing.matches, 'related-favourite-chip--opposite': thing.isOpposite }"
>
<span>{{ thing.name }}</span>
<span v-if="thing.isOpposite" class="related-relation-label">{{ t('pages.pokemon.opposite') }}</span>
{{ thing.name }}
</span>
</div>
</div>