Files
admin/www/app/components/section/SectionCta.vue
T
2026-07-31 19:02:00 +08:00

60 lines
2.3 KiB
Vue

<script setup lang="ts">
import type { SectionBlock } from '~/types/site';
const props = defineProps<{ section: SectionBlock }>();
const { ctaPrimaryText, ctaSecondaryText, isDark } = useSectionContent(props.section);
const { isExternal, resolveLink } = useLinkResolver();
const primaryLink = computed(() => resolveLink(props.section.cta_primary_url));
const secondaryLink = computed(() => resolveLink(props.section.cta_secondary_url));
</script>
<template>
<div v-if="primaryLink || secondaryLink" class="flex flex-wrap items-center gap-16px">
<!-- CTA -->
<template v-if="primaryLink && ctaPrimaryText">
<a
v-if="isExternal(section.cta_primary_url)"
:href="section.cta_primary_url"
target="_blank"
rel="noopener noreferrer"
class="px-28px py-12px rounded-full text-sm font-medium transition-all"
:class="isDark ? 'bg-white text-gray-900 hover:bg-gray-200' : 'bg-primary text-white hover:opacity-90'"
>
{{ ctaPrimaryText }}
</a>
<NuxtLink
v-else
:to="primaryLink"
class="px-28px py-12px rounded-full text-sm font-medium transition-all"
:class="isDark ? 'bg-white text-gray-900 hover:bg-gray-200' : 'bg-primary text-white hover:opacity-90'"
>
{{ ctaPrimaryText }}
</NuxtLink>
</template>
<!-- CTA -->
<template v-if="secondaryLink && ctaSecondaryText">
<a
v-if="isExternal(section.cta_secondary_url)"
:href="section.cta_secondary_url"
target="_blank"
rel="noopener noreferrer"
class="px-28px py-12px rounded-full text-sm font-medium border transition-all"
:class="isDark ? 'border-white/40 text-white hover:bg-white/10' : 'border-gray-300 text-gray-700 hover:border-primary hover:text-primary dark:border-dark-600 dark:text-gray-200'"
>
{{ ctaSecondaryText }}
</a>
<NuxtLink
v-else
:to="secondaryLink"
class="px-28px py-12px rounded-full text-sm font-medium border transition-all"
:class="isDark ? 'border-white/40 text-white hover:bg-white/10' : 'border-gray-300 text-gray-700 hover:border-primary hover:text-primary dark:border-dark-600 dark:text-gray-200'"
>
{{ ctaSecondaryText }}
</NuxtLink>
</template>
</div>
</template>