Further updates on 29-10-25
This commit is contained in:
918
package-lock.json
generated
918
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
12
public/images/cmclogo.svg
Normal file
12
public/images/cmclogo.svg
Normal file
File diff suppressed because one or more lines are too long
|
After Width: | Height: | Size: 352 KiB |
12
public/images/cmclogo1.svg
Normal file
12
public/images/cmclogo1.svg
Normal file
File diff suppressed because one or more lines are too long
|
After Width: | Height: | Size: 352 KiB |
BIN
public/images/default-blog-image.jpg
Normal file
BIN
public/images/default-blog-image.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 3.4 MiB |
BIN
public/images/pngcmclogo.png
Normal file
BIN
public/images/pngcmclogo.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 236 KiB |
@ -1,9 +1,9 @@
|
||||
import Header from "../../../components/Layouts/Header"; // Adjust path based on your project structure
|
||||
import { Footer } from "../../../components/Layouts/Footer"
|
||||
import BlogDetail from "../../../components/blogs/BlogDetail";
|
||||
import BlogDetail from "../../../components/publications/BlogDetail";
|
||||
|
||||
|
||||
export default function contact() {
|
||||
export default function publicationsdetails() {
|
||||
return (
|
||||
<>
|
||||
<Header />
|
||||
@ -1,9 +1,9 @@
|
||||
import Header from "../../components/Layouts/Header"; // Adjust path based on your project structure
|
||||
import { Footer } from "../../components/Layouts/Footer"
|
||||
import BlogListing from '../../components/blogs/BlogListing';
|
||||
import BlogListing from '../../components/publications/BlogListing';
|
||||
|
||||
|
||||
export default function contact() {
|
||||
export default function publications() {
|
||||
return (
|
||||
<>
|
||||
<Header />
|
||||
@ -11,6 +11,18 @@ const Header = () => {
|
||||
setIsMenuOpen(false);
|
||||
};
|
||||
|
||||
const menuItems = [
|
||||
{ href: "/", label: "Home" },
|
||||
{ href: "/about", label: "About" },
|
||||
{ href: "/teamMember", label: "Faculty Team" },
|
||||
{ href: "/education-training", label: "Academics" },
|
||||
{ href: "/research", label: "Research" },
|
||||
{ href: "/events", label: "Events" },
|
||||
{ href: "/publications", label: "Publications" },
|
||||
{ href: "/career", label: "Career" },
|
||||
{ href: "/contact", label: "Contact Us" },
|
||||
];
|
||||
|
||||
return (
|
||||
<header className="sticky bg-white top-0 z-50 shadow-sm">
|
||||
<div className="container max-w-none mx-auto px-4 sm:px-6">
|
||||
@ -20,7 +32,7 @@ const Header = () => {
|
||||
<Link href="/" onClick={closeAllMenus} className="flex items-center">
|
||||
<div className="relative w-60 sm:w-80 h-14 sm:h-18 mr-3 rounded overflow-hidden">
|
||||
<Image
|
||||
src="/images/cmctraumalogo.png"
|
||||
src="/images/cmclogo1.svg"
|
||||
alt="CMC Logo"
|
||||
fill
|
||||
className="object-fill"
|
||||
@ -32,22 +44,14 @@ const Header = () => {
|
||||
|
||||
{/* Desktop Navigation */}
|
||||
<nav className="hidden lg:flex items-start space-x-8">
|
||||
{["/", "/about", "/events", "/education-training", "/research", "/blogs", "/teamMember", "/career", "/contact"].map((href, idx) => (
|
||||
{menuItems.map((item, idx) => (
|
||||
<Link
|
||||
key={idx}
|
||||
href={href}
|
||||
href={item.href}
|
||||
className="text-blue-900 hover:text-red-600 transition-colors font-medium"
|
||||
onClick={closeAllMenus}
|
||||
>
|
||||
{href === "/" ? "Home" :
|
||||
href === "/about" ? "About" :
|
||||
href === "/events" ? "Events" :
|
||||
href === "/education-training" ? "Education" :
|
||||
href === "/research" ? "Research" :
|
||||
href === "/blogs" ? "Blogs" :
|
||||
href === "/teamMember" ? "Team Member" :
|
||||
href === "/career" ? "Career" :
|
||||
href === "/contact" ? "Contact Us" : ""}
|
||||
{item.label}
|
||||
</Link>
|
||||
))}
|
||||
</nav>
|
||||
@ -107,20 +111,14 @@ const Header = () => {
|
||||
<div className="lg:hidden bg-gray-100 border-t border-blue-900">
|
||||
<nav className="px-4 py-4">
|
||||
<ul className="space-y-4">
|
||||
{["/", "/about", "/events", "/blogs", "/career", "/contact", "/teamMember"].map((href, idx) => (
|
||||
{menuItems.map((item, idx) => (
|
||||
<li key={idx}>
|
||||
<Link
|
||||
href={href}
|
||||
href={item.href}
|
||||
className="block font-medium py-2 text-blue-900 hover:text-red-600 transition-colors"
|
||||
onClick={closeAllMenus}
|
||||
>
|
||||
{href === "/" ? "Home" :
|
||||
href === "/about" ? "About" :
|
||||
href === "/events" ? "Events" :
|
||||
href === "/blogs" ? "Blogs" :
|
||||
href === "/career" ? "Career" :
|
||||
href === "/contact" ? "Contact" :
|
||||
href === "/teamMember" ? "Team Member" : ""}
|
||||
{item.label}
|
||||
</Link>
|
||||
</li>
|
||||
))}
|
||||
|
||||
@ -1,27 +1,27 @@
|
||||
import React from 'react';
|
||||
import { Leaf, Car, Activity, Globe } from 'lucide-react';
|
||||
import { Users, Ambulance, Hospital, HeartPulse } from 'lucide-react';
|
||||
|
||||
const Services = () => {
|
||||
const services = [
|
||||
{
|
||||
icon: <Leaf className="w-6 h-6" />,
|
||||
title: "Multi-system Polytrauma",
|
||||
description: "Comprehensive care for patients with multiple severe injuries requiring urgent intervention."
|
||||
icon: <Users className="w-6 h-6" />,
|
||||
title: "Injury Prevention – Outreach Activity",
|
||||
description: "Community-based programs including first responder training for laypersons, schools and workplace groups. Education in helmet use, bleeding control, safe transport practices and initial life-saving care."
|
||||
},
|
||||
{
|
||||
icon: <Car className="w-6 h-6" />,
|
||||
title: "Road Traffic Injuries",
|
||||
description: "Expert trauma management for accidents involving motorbikes, cars, and other vehicles."
|
||||
icon: <Ambulance className="w-6 h-6" />,
|
||||
title: "Pre-Hospital Care",
|
||||
description: "24x7 ambulance service for trauma calls and transfers (Contact: +91 97919 79797). Early triage, stabilization and rapid transport to definitive care."
|
||||
},
|
||||
{
|
||||
icon: <Activity className="w-6 h-6" />,
|
||||
title: "Falls & Accidents",
|
||||
description: "Specialized treatment for injuries from falls, industrial incidents, and agricultural accidents."
|
||||
icon: <Hospital className="w-6 h-6" />,
|
||||
title: "Clinical Services - In-Hospital Care",
|
||||
description: "Level-1 trauma centre with dedicated trauma wards, ICU units, six trauma OTs, resuscitation bay, 24×7 consultant-led teams and on-call interventional radiology for polytrauma, road-traffic injuries, falls and complex cases."
|
||||
},
|
||||
{
|
||||
icon: <Globe className="w-6 h-6" />,
|
||||
title: "Referrals",
|
||||
description: "Providing trauma care support for referrals from Tamil Nadu, Andhra Pradesh, Karnataka, and overseas."
|
||||
icon: <HeartPulse className="w-6 h-6" />,
|
||||
title: "Post-Trauma Rehabilitation",
|
||||
description: "Structured recovery programs through PMR Department including physiotherapy, occupational therapy, prosthetic support and return-to-work planning."
|
||||
}
|
||||
];
|
||||
|
||||
|
||||
@ -357,17 +357,17 @@ const EventDetail = () => {
|
||||
{/* Image Section */}
|
||||
<div className="bg-white shadow-lg rounded-md overflow-hidden mb-6" style={{ borderColor: '#012068' }}>
|
||||
<div className="relative">
|
||||
<div className="grid grid-cols-1 md:grid-cols-3 gap-1 h-64 md:h-80">
|
||||
<div className="grid grid-cols-1 md:grid-cols-3 gap-1">
|
||||
<div className="md:col-span-2 relative overflow-hidden">
|
||||
<img
|
||||
src={mainImage}
|
||||
alt={eventData.title}
|
||||
className="w-full h-full object-cover hover:scale-105 transition-transform duration-300"
|
||||
className="w-full h-auto hover:scale-105 transition-transform duration-300"
|
||||
/>
|
||||
</div>
|
||||
<div className="hidden md:block space-y-1">
|
||||
<div className="hidden md:flex md:flex-col gap-1">
|
||||
{galleryImages.map((image, index) => (
|
||||
<div key={index} className="h-1/2 relative overflow-hidden">
|
||||
<div key={index} className="relative overflow-hidden flex-1">
|
||||
<img
|
||||
src={image}
|
||||
alt={`Gallery ${index + 1}`}
|
||||
|
||||
@ -129,7 +129,7 @@ const TeamListing: React.FC<TeamListingProps> = ({
|
||||
<h3 className="text-lg font-medium mb-2 group-hover:opacity-70 transition-opacity" style={{ color: '#012068' }}>
|
||||
{member.name}
|
||||
</h3>
|
||||
<p className="text-sm leading-relaxed" style={{ color: '#333' }}>
|
||||
<p className="text-sm leading-relaxed" style={{ color: '#e64838' }}>
|
||||
{member.position}
|
||||
</p>
|
||||
{member.department && (
|
||||
@ -138,7 +138,7 @@ const TeamListing: React.FC<TeamListingProps> = ({
|
||||
</p>
|
||||
)}
|
||||
{member.specialty && (
|
||||
<p className="text-xs mt-1 font-medium" style={{ color: '#e64838' }}>
|
||||
<p className="text-xs mt-1 font-medium" style={{ color: '#333' }}>
|
||||
{member.specialty}
|
||||
</p>
|
||||
)}
|
||||
|
||||
@ -31,12 +31,18 @@ const HeroSection = () => {
|
||||
</h1>
|
||||
|
||||
{/* CTA Button */}
|
||||
<button
|
||||
className="bg-red-600 hover:bg-red-700 text-white px-6 py-3 sm:px-8 sm:py-4 md:px-10 md:py-4 text-sm sm:text-base md:text-lg font-semibold rounded-lg transition-all duration-300 shadow-lg hover:shadow-xl hover:-translate-y-0.5 focus:outline-none focus:ring-4 focus:ring-red-300"
|
||||
style={{ backgroundColor: '#e64838' }}
|
||||
<a
|
||||
href="https://www.cmch-vellore.edu/"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
>
|
||||
Discover
|
||||
</button>
|
||||
<button
|
||||
className="bg-red-600 hover:bg-red-700 text-white px-6 py-3 sm:px-8 sm:py-4 md:px-10 md:py-4 text-sm sm:text-base md:text-lg font-semibold rounded-lg transition-all duration-300 shadow-lg hover:shadow-xl hover:-translate-y-0.5 focus:outline-none focus:ring-4 focus:ring-red-300"
|
||||
style={{ backgroundColor: '#e64838' }}
|
||||
>
|
||||
Discover
|
||||
</button>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@ -360,7 +360,7 @@ const BlogDetail: React.FC = () => {
|
||||
key={post.id}
|
||||
className="group bg-white rounded-lg overflow-hidden border border-gray-300 hover:shadow-lg transition-all duration-300"
|
||||
>
|
||||
<Link href={`/blog-detail/${post.id}`} className="block">
|
||||
<Link href={`/publications-detail/${post.id}`} className="block">
|
||||
<div className="relative h-40 overflow-hidden">
|
||||
<Image
|
||||
src={post.image}
|
||||
@ -268,7 +268,7 @@ const BlogListing: React.FC = () => {
|
||||
>
|
||||
{/* All cards redirect to blog detail page with ID */}
|
||||
<Link
|
||||
href={`/blog-detail/${blog.id}`}
|
||||
href={`/publications-detail/${blog.id}`}
|
||||
className="absolute top-0 left-0 h-full w-full z-10"
|
||||
aria-label={`Read article: ${blog.title}`}
|
||||
/>
|
||||
@ -63,9 +63,9 @@ export class FacultyService {
|
||||
'Content-Type': 'application/json',
|
||||
},
|
||||
});
|
||||
|
||||
|
||||
if (!response.ok) throw new Error(`HTTP error! status: ${response.status}`);
|
||||
|
||||
|
||||
const data: FacultyApiResponse = await response.json();
|
||||
return this.transformProfessorsToTeamMembers(data.content);
|
||||
} catch (error) {
|
||||
@ -81,7 +81,7 @@ export class FacultyService {
|
||||
if (typeof id === 'string' && id.includes('-')) {
|
||||
return await this.getFacultyByProfessorId(id);
|
||||
}
|
||||
|
||||
|
||||
// Otherwise, fetch all and find by numeric ID
|
||||
const allFaculty = await this.getAllFaculty();
|
||||
return allFaculty.find(member => member.id === id) || null;
|
||||
@ -99,11 +99,11 @@ export class FacultyService {
|
||||
'Content-Type': 'application/json',
|
||||
},
|
||||
});
|
||||
|
||||
|
||||
if (!response.ok) {
|
||||
throw new Error(`HTTP error! status: ${response.status}`);
|
||||
}
|
||||
|
||||
|
||||
const professor = await response.json();
|
||||
const transformed = this.transformProfessorsToTeamMembers([professor]);
|
||||
return transformed[0] || null;
|
||||
@ -144,7 +144,7 @@ export class FacultyService {
|
||||
// Create proper image URL - remove /api from baseUrl for images
|
||||
const imageBaseUrl = this.baseUrl;
|
||||
let imageUrl = '/images/default-avatar.jpg'; // Default fallback
|
||||
|
||||
|
||||
if (prof.profileImageUrl) {
|
||||
// If it's already a full URL, use it as is
|
||||
if (prof.profileImageUrl.startsWith('http')) {
|
||||
@ -183,23 +183,23 @@ export class FacultyService {
|
||||
name: skill.name,
|
||||
level: skill.level
|
||||
})) || [
|
||||
{ name: 'Clinical Practice', level: 90 },
|
||||
{ name: 'Research', level: 85 },
|
||||
{ name: 'Teaching', level: 88 }
|
||||
],
|
||||
{ name: 'Clinical Practice', level: 90 },
|
||||
{ name: 'Research', level: 85 },
|
||||
{ name: 'Teaching', level: 88 }
|
||||
],
|
||||
awards: prof.awards?.map((award: any) => ({
|
||||
title: award.title,
|
||||
year: award.year,
|
||||
description: award.description,
|
||||
image: award.imageUrl || '/images/award-icon.png'
|
||||
})) || [
|
||||
{
|
||||
title: 'Excellence in Medical Practice',
|
||||
year: new Date().getFullYear().toString(),
|
||||
description: 'Recognized for outstanding contribution to medical practice and patient care.',
|
||||
image: '/images/award-icon.png'
|
||||
}
|
||||
],
|
||||
{
|
||||
title: 'Excellence in Medical Practice',
|
||||
year: new Date().getFullYear().toString(),
|
||||
description: 'Recognized for outstanding contribution to medical practice and patient care.',
|
||||
image: '/images/award-icon.png'
|
||||
}
|
||||
],
|
||||
status: prof.status,
|
||||
department: prof.department,
|
||||
officeLocation: prof.officeLocation,
|
||||
|
||||
Reference in New Issue
Block a user