erp-platform/ui/src/views/public/About.tsx
Sedat ÖZTÜRK 4e555e9cc6 Kurs -> Erp
2025-11-03 14:25:05 +03:00

137 lines
4.6 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.

import React, { useEffect, useState } from 'react'
import { Helmet } from 'react-helmet'
import navigationIcon from '@/configs/navigation-icon.config'
import { AboutDto } from '@/proxy/about/models'
import { getAbout } from '@/services/about'
import { useLocalization } from '@/utils/hooks/useLocalization'
import Loading from '@/components/shared/Loading'
const About: React.FC = () => {
const { translate } = useLocalization()
const [loading, setLoading] = useState(true)
const [about, setAbout] = useState<AboutDto>()
const iconColors = [
'text-blue-600',
'text-red-600',
'text-green-600',
'text-purple-600',
'text-yellow-600',
'text-indigo-600',
]
function getRandomColor() {
return iconColors[Math.floor(Math.random() * iconColors.length)]
}
useEffect(() => {
setLoading(true)
const fetchServices = async () => {
try {
const result = await getAbout()
setAbout(result.data)
} catch (error) {
console.error('About alınırken hata oluştu:', error)
} finally {
setLoading(false)
}
}
fetchServices()
}, [])
if (loading) {
return (
<div className="flex items-center justify-center min-h-screen bg-gray-50">
<div className="text-center">
<Loading loading={loading} />
</div>
</div>
)
}
return (
<>
<Helmet
titleTemplate="%s | Erp Platform"
title={translate('::' + 'Public.about.title')}
defaultTitle="Erp Platform"
></Helmet>
<div className="min-h-screen bg-gray-50">
{/* Hero Section */}
<div className="relative bg-blue-900 text-white py-12">
<div
className="absolute inset-0 opacity-20"
style={{
backgroundImage:
'url("https://images.pexels.com/photos/3183183/pexels-photo-3183183.jpeg?auto=compress&cs=tinysrgb&w=1920")',
backgroundSize: 'cover',
backgroundPosition: 'center',
}}
></div>
<div className="container mx-auto pt-20 relative">
<h1 className="text-5xl font-bold ml-4 mt-3 mb-2 text-white">
{translate('::Public.about.title')}
</h1>
<p className="text-xl max-w-3xl ml-4">{translate('::Public.about.subtitle')}</p>
</div>
</div>
{/* Stats Section */}
<div className="py-10 bg-white">
<div className="container mx-auto px-4">
<div className="grid grid-cols-1 md:grid-cols-4 gap-8">
{about?.statsDto.map((stat, index) => {
const IconComponent = navigationIcon[stat.icon || '']
let displayValue = stat.value
let elementRef = undefined
return (
<div key={index} className="text-center">
{IconComponent && (
<IconComponent className={`w-12 h-12 mx-auto mb-4 ${getRandomColor()}`} />
)}
<div className="text-4xl font-bold text-gray-900 mb-2">{displayValue}</div>
<div className="text-gray-600">{translate('::' + stat.labelKey)}</div>
</div>
)
})}
</div>
</div>
</div>
{/* Main Content */}
<div className="py-6">
<div className="container mx-auto px-4">
<div className="mb-6">
<div className="p-5 mx-auto mx-auto text-gray-800 text-lg leading-relaxed shadow-md bg-white border-l-4 border-blue-600">
<p>{translate('::' + about?.descriptionsDto[0])}</p>
<p className="text-center p-5 text-blue-800">
{translate('::' + about?.descriptionsDto[1])}
</p>
<p>{translate('::' + about?.descriptionsDto[2])}</p>
<p className="text-center p-5 text-blue-800">
{translate('::' + about?.descriptionsDto[3])}
</p>
</div>
</div>
<div className="grid grid-cols-1 lg:grid-cols-2 gap-12">
{about?.sectionsDto.map((section, index) => (
<div key={index} className="bg-white p-8 rounded-xl shadow-lg">
<h3 className="text-2xl font-bold text-gray-900 mb-4">
{translate('::' + section.key)}
</h3>
<p className="text-gray-700">{translate('::' + section.descKey)}</p>
</div>
))}
</div>
</div>
</div>
</div>
</>
)
}
export default About