Files
reui-blocks/blocks/case-study3.tsx
T

363 lines
17 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"use client";
import { AlignLeft, CheckCircle2, Lightbulb } from "lucide-react";
import { useEffect, useRef, useState } from "react";
import { FaFacebook, FaLinkedin, FaTwitter } from "react-icons/fa";
import { Alert, AlertDescription, AlertTitle } from "@/components/ui/alert";
import { Avatar, AvatarImage } from "@/components/ui/avatar";
import {
Breadcrumb,
BreadcrumbItem,
BreadcrumbLink,
BreadcrumbList,
BreadcrumbPage,
BreadcrumbSeparator,
} from "@/components/ui/breadcrumb";
import { Separator } from "@/components/ui/separator";
import { cn } from "@/lib/utils";
const PAGE_SECTIONS = [
{ id: "section1", title: "ارزیابی وضعیت فعلی" },
{ id: "section2", title: "طراحی جریان کار جدید" },
{ id: "section3", title: "استقرار و آموزش تیم" },
{ id: "section4", title: "نتایج و دستاوردها" },
];
const OUTCOMES = [
"داشبورد یکپارچه برای نمایش بلادرنگ شاخص‌های کلیدی عملکرد",
"سیستم مدیریت ارتباط با مشتری با قابلیت یکپارچه‌سازی با ابزارهای سازمانی",
"راهکار مقیاس‌پذیر با قابلیت توسعه همزمان با رشد سازمان",
];
interface CaseStudy3Props {
className?: string;
}
const CaseStudy3 = ({ className }: CaseStudy3Props) => {
const [activeSection, setActiveSection] = useState<string | null>(null);
const sectionRefs = useRef<Record<string, HTMLElement>>({});
useEffect(() => {
const sections = Object.keys(sectionRefs.current);
const observerCallback = (entries: IntersectionObserverEntry[]) => {
entries.forEach((entry) => {
if (entry.isIntersecting) {
setActiveSection(entry.target.id);
}
});
};
let observer: IntersectionObserver | null = new IntersectionObserver(
observerCallback,
{
root: null,
rootMargin: "0px",
threshold: 1,
},
);
sections.forEach((sectionId) => {
const element = sectionRefs.current[sectionId];
if (element) {
observer?.observe(element);
}
});
return () => {
observer?.disconnect();
observer = null;
};
}, []);
const addSectionRef = (id: string, ref: HTMLElement | null) => {
if (ref) {
sectionRefs.current[id] = ref;
}
};
return (
<section dir="rtl" lang="fa" className={cn("py-32", className)}>
<div className="container">
<div className="mx-auto flex max-w-prose flex-col items-center justify-between gap-10 lg:max-w-none lg:flex-row">
<div className="text-start">
<Breadcrumb>
<BreadcrumbList>
<BreadcrumbItem>
<BreadcrumbLink href="/">خانه</BreadcrumbLink>
</BreadcrumbItem>
<BreadcrumbSeparator />
<BreadcrumbItem>
<BreadcrumbLink href="#">گزارش‌های موفقیت</BreadcrumbLink>
</BreadcrumbItem>
<BreadcrumbSeparator />
<BreadcrumbItem>
<BreadcrumbPage>جریان کار تیم</BreadcrumbPage>
</BreadcrumbItem>
</BreadcrumbList>
</Breadcrumb>
<h1 className="mt-10 text-2xll font-semibold text-balance lg:text-2xll">
چگونه یک پلتفرم یکپارچه بهره‌وری تیم‌ها را افزایش داد
</h1>
<div className="mt-16">
<p className="font-medium">مطالعه موردی</p>
<div className="mt-4 flex items-center gap-4">
<Avatar className="size-16 rounded-xl border">
<AvatarImage
src="/block-media/shadcnblocks/block/avatar-1.webp"
alt="مهسا نوری"
/>
</Avatar>
<div className="flex flex-col">
<p className="font-semibold">مهسا نوری</p>
<p className="text-muted-foreground">مدیر ارشد محصول</p>
</div>
</div>
</div>
</div>
<img
src="/block-media/shadcnblocks/block/placeholder-1.svg"
alt="داشبورد مدیریت جریان کار تیم"
className="max-h-[524px] w-full rounded-xl object-cover lg:w-auto"
/>
</div>
<div className="relative mt-20 flex flex-col gap-x-6 gap-y-16 lg:flex-row">
<aside className="mx-auto h-fit max-w-prose text-start lg:sticky lg:top-10 lg:mx-0 lg:w-64 lg:max-w-none">
<img
src="/block-media/shadcnblocks/block/logos/shadcn-ui-wordmark.svg"
alt="لوگوی ری یو آی"
className="h-6 dark:invert"
/>
<div className="mt-6 grid grid-cols-2 gap-5 lg:grid-cols-1">
<div className="col-span-2 lg:col-span-1">
<h2 className="font-semibold">نمای کلی</h2>
<p className="mt-1 text-sm text-muted-foreground">
این پلتفرم با یکپارچه‌سازی داده‌ها، خودکارسازی فرایندها و ایجاد دیدی جامع از عملکرد سازمان، تصمیم‌گیری سریع‌تر و همکاری مؤثرتر میان تیم‌ها را ممکن کرده است.
</p>
</div>
<div>
<h2 className="font-semibold">حوزه</h2>
<p className="mt-1 text-sm text-muted-foreground">
فناوری؛ اتوماسیون
</p>
</div>
<div>
<h2 className="font-semibold">اندازه تیم</h2>
<p className="mt-1 text-sm text-muted-foreground">۱۰ تا ۱۰۰ نفر</p>
</div>
<div>
<h2 className="font-semibold">موقعیت</h2>
<p className="mt-1 text-sm text-muted-foreground">
سانفرانسیسکو، کالیفرنیا
</p>
</div>
<div>
<h2 className="font-semibold">تأسیس</h2>
<p className="mt-1 text-sm text-muted-foreground">۲۲۰</p>
</div>
<div>
<h2 className="font-semibold">سرمایه‌گذاری</h2>
<p className="mt-1 text-sm text-muted-foreground">
۲۵ میلیون دلار (سری A)
</p>
</div>
<div>
<h2 className="font-semibold">قابلیت‌های اصلی</h2>
<p className="mt-1 text-sm text-muted-foreground">
داشبوردها، ابزارها، یکپارچگی اتصال هوشمند
</p>
</div>
</div>
<div className="mt-10 flex flex-col">
<span className="mb-2 text-sm text-muted-foreground">
اشتراک‌گذاری این مطلب:
</span>
<div className="flex gap-4">
<a
href="#"
aria-label="اشتراک در شبکه حرفه‌ای"
className="text-muted-foreground hover:text-primary"
>
<FaLinkedin className="size-5" />
</a>
<a
href="#"
aria-label="اشتراک در شبکه اجتماعی"
className="text-muted-foreground hover:text-primary"
>
<FaTwitter className="size-5" />
</a>
<a
href="#"
aria-label="اشتراک در شبکه اجتماعی"
className="text-muted-foreground hover:text-primary"
>
<FaFacebook className="size-5" />
</a>
</div>
</div>
</aside>
<div className="flex">
<div className="mx-auto max-w-prose lg:max-w-4xl lg:px-20">
<div className="grid gap-x-10 gap-y-7 rounded-3xl border p-6 text-start lg:grid-cols-2 lg:gap-y-10 lg:border-none lg:p-0">
<div>
<h2 className="text-xl font-semibold">مسئله</h2>
<p className="mt-3 text-muted-foreground">
پراکندگی داده‌ها، ابزارهای متعدد و نبود یک منبع واحد اطلاعات باعث کاهش سرعت تصمیم‌گیری و ایجاد ناهماهنگی میان تیم‌های فروش، بازاریابی و محصول شده بود.
</p>
</div>
<Separator className="w-full lg:hidden" />
<div>
<h2 className="text-xl font-semibold">رویکرد</h2>
<p className="mt-3 text-muted-foreground">
یک پلتفرم متمرکز برای مدیریت داده‌ها و خودکارسازی فرایندها پیاده‌سازی شد تا همه تیم‌ها بر پایه اطلاعات یکسان تصمیم‌گیری کنند.
</p>
</div>
<div className="border-t pt-10 lg:col-span-2">
<h2 className="text-xl font-semibold">دستاوردها</h2>
<ul className="mt-3 grid gap-x-10 gap-y-3 lg:grid-cols-2">
{OUTCOMES.map((outcome) => (
<li key={outcome} className="flex gap-3">
<CheckCircle2 className="mt-0.5 size-5 shrink-0" />
<p className="font-semibold">{outcome}</p>
</li>
))}
</ul>
</div>
</div>
<div className="mt-20">
<section
id="section1"
ref={(ref) => addSectionRef("section1", ref)}
className="prose mb-8 text-start dark:prose-invert"
>
<h2>ارزیابی وضعیت فعلی</h2>
<p>
تیم پس از بررسی دقیق فرآیندهای داخلی، دریافت که ابزارهای
پراکنده و نبود یک منبع واحد حقیقت، بزرگ‌ترین مانع
هماهنگی بین بخش‌هاست.{" "}
<a href="#">گزارش ارزیابی</a> نشان داد بیش از ۴۰ درصد زمان تیم صرف انتقال اطلاعات و هماهنگی دستی میان ابزارهای مختلف می‌شود.
</p>
<blockquote>
«تا وقتی داده‌ها پراکنده باشند، هیچ جریان کاری واقعاً
کارآمد نخواهد بود.»
</blockquote>
</section>
<section
id="section2"
ref={(ref) => addSectionRef("section2", ref)}
className="prose mb-8 text-start dark:prose-invert"
>
<h2>طراحی جریان کار جدید</h2>
<p>
تیم فنی و محصول با همکاری نزدیک، معماری جدیدی طراحی کردند
که همه داده‌های مشتری و محصول را در یک پلتفرم متمرکز
می‌کند:
</p>
<ul>
<li>سطح ۱ یکپارچه‌سازی داده: اتصال سامانه ارتباط با مشتری و فروش و ابزارهای تحلیل</li>
<li>سطح ۲ خودکارسازی: حذف وظایف تکراری بین تیم‌ها</li>
<li>سطح ۳ بینش بلادرنگ: داشبوردهای تصمیم‌گیری برای مدیران</li>
</ul>
<p>
پیاده‌سازی مرحله‌ای باعث شد بدون ایجاد اختلال در فعالیت‌های روزانه، سامانه جدید به‌تدریج در کل سازمان مستقر شود.
</p>
</section>
<section
id="section3"
ref={(ref) => addSectionRef("section3", ref)}
className="prose mb-8 text-start dark:prose-invert"
>
<h2>استقرار و آموزش تیم</h2>
<p className="leading-7 not-first:mt-6">
استقرار به‌صورت مرحله‌ای انجام شد: ابتدا تیم فروش، سپس
پشتیبانی و در نهایت بازاریابی. هر فاز شامل کارگاه آموزشی،
مستندسازی و یک هفته پشتیبانی اختصاصی بود.
</p>
<p className="leading-7 not-first:mt-6">
تنها یک ماه پس از استقرار، بیشتر اعضای تیم به‌صورت مستقل از سامانه استفاده می‌کردند و زمان پاسخ‌گویی بین واحدها به میزان قابل توجهی کاهش یافت.
</p>
</section>
<section
id="section4"
ref={(ref) => addSectionRef("section4", ref)}
className="prose mb-8 text-start dark:prose-invert"
>
<h2>نتایج و دستاوردها</h2>
<p>
شش ماه پس از اجرای پروژه، شاخص‌های بهره‌وری، سرعت تصمیم‌گیری و همکاری میان تیم‌ها رشد محسوسی را تجربه کردند.
</p>
<div>
<table>
<thead>
<tr>
<th>کارایی تیم</th>
<th>رضایت مشتری</th>
</tr>
</thead>
<tbody>
<tr>
<td>پایین</td>
<td>متوسط</td>
</tr>
<tr className="m-0 border-t p-0 even:bg-muted">
<td>در حال بهبود</td>
<td>خوب</td>
</tr>
<tr className="m-0 border-t p-0 even:bg-muted">
<td>بالا</td>
<td>عالی</td>
</tr>
</tbody>
</table>
</div>
<p>
مهم‌ترین درس این پروژه آن بود که موفقیت هر تحول دیجیتال، علاوه بر فناوری، به آموزش کاربران و پذیرش تغییر در سازمان وابسته است.
</p>
<Alert>
<Lightbulb className="h-4 w-4" />
<AlertTitle>نکته کلیدی</AlertTitle>
<AlertDescription>
پیش از استقرار گسترده، یک پروژه آزمایشی کوچک با یک تیم
اجرا کنید و بازخورد واقعی جمع‌آوری کنید.
</AlertDescription>
</Alert>
</section>
</div>
</div>
<div className="sticky top-8 hidden h-fit shrink-0 text-start lg:block">
<span className="flex items-center gap-2 text-sm">
<AlignLeft className="h-4 w-4" />
در این صفحه
</span>
<nav className="mt-2 text-sm" aria-label="فهرست مطالب صفحه">
<ul>
{PAGE_SECTIONS.map((section) => (
<li key={section.id}>
<a
href={`#${section.id}`}
className={cn(
"block py-1 transition-colors duration-200",
activeSection === section.id
? "font-medium text-primary"
: "text-muted-foreground hover:text-primary",
)}
>
{section.title}
</a>
</li>
))}
</ul>
</nav>
</div>
</div>
</div>
</div>
</section>
);
};
export { CaseStudy3 };