Services.tsx 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. import { Card, CardDescription, CardHeader, CardTitle } from "./ui/card";
  2. import { MagnifierIcon, WalletIcon, ChartIcon } from "./Icons";
  3. import cubeLeg from "../assets/cube-leg.png";
  4. import {useEffect, useState} from "react";
  5. import {extractSubstring} from "@/services/api.ts";
  6. import axios from "axios";
  7. interface ServiceProps {
  8. title: string;
  9. content: string;
  10. icon: JSX.Element;
  11. }
  12. let serviceList: ServiceProps[] = [];
  13. const iconList = [<MagnifierIcon/>, <WalletIcon/>, <ChartIcon/>];
  14. // const serviceList: ServiceProps[] = [
  15. // {
  16. // title: "Code Collaboration",
  17. // description:
  18. // "Lorem ipsum dolor sit amet consectetur adipisicing elit. Nisi nesciunt est nostrum omnis ab sapiente.",
  19. // icon: <ChartIcon />,
  20. // },
  21. // {
  22. // title: "Project Management",
  23. // description:
  24. // "Lorem ipsum dolor sit amet consectetur adipisicing elit. Nisi nesciunt est nostrum omnis ab sapiente.",
  25. // icon: <WalletIcon />,
  26. // },
  27. // {
  28. // title: "Task Automation",
  29. // description:
  30. // "Lorem ipsum dolor sit amet consectetur adipisicing elit. Nisi nesciunt est nostrum omnis ab sapiente.",
  31. // icon: <MagnifierIcon />,
  32. // },
  33. // ];
  34. export const Services = () => {
  35. const [loading, setLoading] = useState(true);
  36. useEffect(() => {
  37. // 使用 axios 进行 API 调用
  38. const fetchData = async () => {
  39. try {
  40. const websiteCode = extractSubstring(window.location.pathname);
  41. const response = await axios.get('/api/website/template/getWebsiteByWebsiteCode', {
  42. params: {
  43. websiteCode: websiteCode
  44. }
  45. });
  46. const userWebsiteId = response.data.data.id;
  47. const response2 = await axios.get('/api/website/template/blogs', {
  48. params: {
  49. userWebsiteId: userWebsiteId
  50. }
  51. });
  52. serviceList = response2.data.data.map((item, index) => {
  53. return {
  54. title: item.name,
  55. content: item.content.substring(0, 200) + '...',
  56. icon: iconList[index % iconList.length],
  57. }
  58. })
  59. } catch (err) {
  60. console.error('Error fetching data:', err);
  61. } finally {
  62. setLoading(false);
  63. }
  64. };
  65. fetchData();
  66. }, []);
  67. // 处理加载和错误状态
  68. if (loading) {
  69. return <div>Loading...</div>;
  70. }
  71. return (
  72. <section id="services" className="container py-24 sm:py-32">
  73. <div className="grid lg:grid-cols-[1fr,1fr] gap-8 place-items-center">
  74. <div>
  75. <h2 className="text-3xl md:text-4xl font-bold">
  76. <span className="bg-gradient-to-b from-primary/60 to-primary text-transparent bg-clip-text">
  77. Blog
  78. </span>
  79. </h2>
  80. <p className="text-muted-foreground text-xl mt-4 mb-8 ">
  81. Latest blog.
  82. </p>
  83. <div className="flex flex-col gap-8">
  84. {serviceList.map(({ icon, title, content }: ServiceProps) => (
  85. <Card key={title}>
  86. <CardHeader className="space-y-1 flex md:flex-row justify-start items-start gap-4">
  87. <div className="mt-1 bg-primary/20 p-1 rounded-2xl">
  88. {icon}
  89. </div>
  90. <div>
  91. <CardTitle>{title}</CardTitle>
  92. <CardDescription className="text-md mt-2">
  93. {content}
  94. </CardDescription>
  95. </div>
  96. </CardHeader>
  97. </Card>
  98. ))}
  99. </div>
  100. </div>
  101. <img
  102. src={cubeLeg}
  103. className="w-[300px] md:w-[500px] lg:w-[600px] object-contain"
  104. alt="About services"
  105. />
  106. </div>
  107. </section>
  108. );
  109. };