2026-09-30 18:42:28 +03:30
|
|
|
|
<template>
|
|
|
|
|
|
<footer id="contact" class="relative overflow-hidden border-t border-white/[0.07]">
|
|
|
|
|
|
<div class="border-b border-white/[0.07] py-8 md:py-10">
|
|
|
|
|
|
<SiteMarquee
|
2026-09-30 21:36:43 +03:30
|
|
|
|
:items="data.marquee || []"
|
2026-09-30 18:42:28 +03:30
|
|
|
|
:duration="20"
|
2026-09-30 20:33:37 +03:30
|
|
|
|
class-name="font-display text-xl font-bold md:text-3xl"
|
2026-09-30 18:42:28 +03:30
|
|
|
|
/>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
|
|
<div class="mx-auto max-w-[1500px] px-6 py-20 md:px-10 md:py-28">
|
2026-09-30 21:36:43 +03:30
|
|
|
|
<SectionTag index="۰۶" :title="data.tag || 'تماس'" right="پاسخ تا ۲۴ ساعت" />
|
2026-09-30 18:42:28 +03:30
|
|
|
|
<div class="mt-14 grid gap-12 lg:grid-cols-[1.4fr_1fr]">
|
|
|
|
|
|
<div>
|
2026-09-30 20:33:37 +03:30
|
|
|
|
<h2 class="font-display text-[clamp(2.2rem,6vw,4.5rem)] font-extrabold leading-[1.15] tracking-[-0.02em]">
|
2026-09-30 21:36:43 +03:30
|
|
|
|
{{ data.cta || "شروع همکاری" }}
|
2026-09-30 18:42:28 +03:30
|
|
|
|
</h2>
|
|
|
|
|
|
<a
|
2026-09-30 21:36:43 +03:30
|
|
|
|
v-if="email"
|
|
|
|
|
|
:href="`mailto:${email}`"
|
2026-09-30 20:33:37 +03:30
|
|
|
|
class="mt-8 inline-flex items-center gap-3 border border-volt bg-volt px-6 py-3 text-sm text-ink transition hover:bg-transparent hover:text-volt"
|
|
|
|
|
|
dir="ltr"
|
2026-09-30 18:42:28 +03:30
|
|
|
|
>
|
2026-09-30 21:36:43 +03:30
|
|
|
|
{{ email }} ↗
|
2026-09-30 18:42:28 +03:30
|
|
|
|
</a>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
<div class="grid gap-8 sm:grid-cols-3 lg:grid-cols-1">
|
|
|
|
|
|
<div>
|
2026-09-30 20:33:37 +03:30
|
|
|
|
<p class="text-xs text-ash">کسبوکار جدید</p>
|
2026-09-30 21:36:43 +03:30
|
|
|
|
<p v-if="email" class="mt-2 text-sm" dir="ltr">{{ email }}</p>
|
|
|
|
|
|
<p v-if="phone" class="text-sm text-ash" dir="ltr">{{ phone }}</p>
|
2026-09-30 18:42:28 +03:30
|
|
|
|
</div>
|
|
|
|
|
|
<div>
|
2026-09-30 20:33:37 +03:30
|
|
|
|
<p class="text-xs text-ash">استودیو</p>
|
2026-09-30 21:36:43 +03:30
|
|
|
|
<p v-for="line in addressLines" :key="line" class="mt-1 text-sm text-ash">{{ line }}</p>
|
2026-09-30 18:42:28 +03:30
|
|
|
|
</div>
|
|
|
|
|
|
<div>
|
2026-09-30 20:33:37 +03:30
|
|
|
|
<p class="text-xs text-ash">شبکههای اجتماعی</p>
|
2026-09-30 21:36:43 +03:30
|
|
|
|
<template v-if="socialLinks.length">
|
|
|
|
|
|
<a
|
|
|
|
|
|
v-for="s in socialLinks"
|
|
|
|
|
|
:key="s.label + s.url"
|
|
|
|
|
|
:href="s.url || undefined"
|
|
|
|
|
|
class="mt-1 block text-sm text-ash hover:text-volt"
|
|
|
|
|
|
:target="s.url ? '_blank' : undefined"
|
|
|
|
|
|
rel="noopener"
|
|
|
|
|
|
>{{ s.label }}</a>
|
|
|
|
|
|
</template>
|
|
|
|
|
|
<p v-else-if="legacySocials.length" v-for="s in legacySocials" :key="s" class="mt-1 text-sm text-ash">{{ s }}</p>
|
2026-09-30 18:42:28 +03:30
|
|
|
|
</div>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</div>
|
2026-09-30 20:33:37 +03:30
|
|
|
|
<div class="mt-20 flex flex-wrap items-center justify-between gap-4 border-t border-white/[0.07] pt-6 text-xs text-ash">
|
2026-09-30 21:36:43 +03:30
|
|
|
|
<span>© {{ year }} گروه نرمافزاری {{ brand || "منتک" }}</span>
|
2026-09-30 20:41:48 +03:30
|
|
|
|
<span>{{ brand || "منتک" }}®</span>
|
2026-09-30 18:42:28 +03:30
|
|
|
|
</div>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</footer>
|
|
|
|
|
|
</template>
|
|
|
|
|
|
|
|
|
|
|
|
<script setup lang="ts">
|
2026-09-30 21:36:43 +03:30
|
|
|
|
const props = defineProps<{
|
2026-09-30 18:42:28 +03:30
|
|
|
|
brand?: string;
|
2026-09-30 21:36:43 +03:30
|
|
|
|
email?: string;
|
|
|
|
|
|
phone?: string;
|
|
|
|
|
|
address?: string;
|
|
|
|
|
|
socials?: Array<{ label: string; url: string }>;
|
2026-09-30 18:42:28 +03:30
|
|
|
|
data: {
|
2026-09-30 21:36:43 +03:30
|
|
|
|
tag?: string;
|
|
|
|
|
|
marquee?: string[];
|
|
|
|
|
|
cta?: string;
|
|
|
|
|
|
email?: string;
|
|
|
|
|
|
phone?: string;
|
|
|
|
|
|
address?: string[] | string;
|
|
|
|
|
|
socials?: string[] | Array<{ label: string; url: string }>;
|
2026-09-30 18:42:28 +03:30
|
|
|
|
};
|
|
|
|
|
|
}>();
|
2026-09-30 21:36:43 +03:30
|
|
|
|
|
2026-09-30 18:42:28 +03:30
|
|
|
|
const year = new Date().getFullYear();
|
2026-09-30 21:36:43 +03:30
|
|
|
|
|
|
|
|
|
|
const email = computed(() => props.email || props.data.email || "");
|
|
|
|
|
|
const phone = computed(() => props.phone || props.data.phone || "");
|
|
|
|
|
|
|
|
|
|
|
|
const addressLines = computed(() => {
|
|
|
|
|
|
if (props.address) {
|
|
|
|
|
|
return props.address
|
|
|
|
|
|
.split(/\n|,/)
|
|
|
|
|
|
.map((s) => s.trim())
|
|
|
|
|
|
.filter(Boolean);
|
|
|
|
|
|
}
|
|
|
|
|
|
const a = props.data.address;
|
|
|
|
|
|
if (Array.isArray(a)) return a;
|
|
|
|
|
|
if (typeof a === "string") return a.split(/\n|,/).map((s) => s.trim()).filter(Boolean);
|
|
|
|
|
|
return [];
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
const socialLinks = computed(() => {
|
|
|
|
|
|
if (props.socials?.length) return props.socials.filter((s) => s.label);
|
|
|
|
|
|
const raw = props.data.socials;
|
|
|
|
|
|
if (!Array.isArray(raw) || !raw.length) return [];
|
|
|
|
|
|
if (typeof raw[0] === "object" && raw[0] !== null) {
|
|
|
|
|
|
return (raw as Array<{ label: string; url: string }>).filter((s) => s.label);
|
|
|
|
|
|
}
|
|
|
|
|
|
return [];
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
const legacySocials = computed(() => {
|
|
|
|
|
|
const raw = props.data.socials;
|
|
|
|
|
|
if (!Array.isArray(raw) || !raw.length) return [] as string[];
|
|
|
|
|
|
if (typeof raw[0] === "string") return raw as string[];
|
|
|
|
|
|
return [];
|
|
|
|
|
|
});
|
2026-09-30 18:42:28 +03:30
|
|
|
|
</script>
|