Compare commits
6 Commits
fa06ba7545
...
742303eb73
| Author | SHA1 | Date | |
|---|---|---|---|
| 742303eb73 | |||
| cfce7b8b3f | |||
| 13d12e4f8f | |||
| ba6431e500 | |||
| eca57bf9cc | |||
| 89b81e6ee8 |
@@ -6,27 +6,22 @@
|
|||||||
<div class="bg-slate-100 py-12 no-print">
|
<div class="bg-slate-100 py-12 no-print">
|
||||||
<div class="container max-w-6xl mx-auto px-4">
|
<div class="container max-w-6xl mx-auto px-4">
|
||||||
<!-- Verification Banner (e-Devlet Style) -->
|
<!-- Verification Banner (e-Devlet Style) -->
|
||||||
<div class="bg-emerald-50 border-l-4 border-emerald-500 p-6 rounded-2xl shadow-md mb-8 flex flex-col md:flex-row items-center justify-between gap-6">
|
<div class="bg-emerald-50 border-l-4 border-emerald-500 p-4 rounded-xl shadow-sm mb-6 flex flex-col lg:flex-row lg:items-center justify-between gap-4">
|
||||||
<div class="flex items-center gap-4">
|
<div class="flex items-center gap-3 flex-1 min-w-0">
|
||||||
<div class="w-12 h-12 rounded-full bg-emerald-500 text-white flex items-center justify-center flex-shrink-0 shadow-lg shadow-emerald-500/20">
|
<div class="w-10 h-10 rounded-full bg-emerald-500 text-white flex items-center justify-center flex-shrink-0 shadow-md shadow-emerald-500/10">
|
||||||
<i class="uil uil-shield-check text-2xl"></i>
|
<i class="uil uil-shield-check text-xl"></i>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div class="text-sm leading-normal">
|
||||||
<h3 class="text-lg font-bold text-slate-800">Güvenli Belge Doğrulama</h3>
|
<span class="font-bold text-slate-800">Güvenli Belge Doğrulama:</span>
|
||||||
<p class="text-sm text-slate-500 mt-1">Bu staj sertifikası ve transkripti, Trunçgil Teknopark sistemi üzerinden dijital olarak imzalanıp onaylanmıştır.</p>
|
<span class="text-slate-600 ml-1">Bu staj sertifikası ve transkripti, Trunçgil Teknopark sistemi üzerinden dijital olarak imzalanıp onaylanmıştır.</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="flex items-center gap-3 flex-wrap">
|
<div class="flex-shrink-0">
|
||||||
<!-- PDF Download Button -->
|
<!-- PDF Download Button -->
|
||||||
<button onclick="downloadPDF()" id="pdf-btn" class="px-6 py-3 bg-orange-600 hover:bg-orange-700 text-white font-bold rounded-xl transition-all shadow-lg shadow-orange-500/25 flex items-center gap-2">
|
<button onclick="downloadPDF()" id="pdf-btn" class="px-4 py-2 bg-orange-600 hover:bg-orange-700 text-white text-sm font-bold rounded-lg transition-all shadow-sm flex items-center gap-1.5 whitespace-nowrap">
|
||||||
<i class="uil uil-file-download text-lg" id="pdf-icon"></i>
|
<i class="uil uil-file-download text-base" id="pdf-icon"></i>
|
||||||
<span class="spinner-border spinner-border-sm hidden animate-spin w-4 h-4 border-2 border-white border-t-transparent rounded-full" id="pdf-spinner" role="status"></span>
|
<span class="spinner-border spinner-border-sm hidden animate-spin w-3.5 h-3.5 border-2 border-white border-t-transparent rounded-full" id="pdf-spinner" role="status"></span>
|
||||||
<span id="pdf-btn-text">PDF Olarak İndir</span>
|
<span id="pdf-btn-text">PDF İndir</span>
|
||||||
</button>
|
|
||||||
<!-- Print Button -->
|
|
||||||
<button onclick="window.print()" class="px-6 py-3 bg-slate-900 hover:bg-slate-800 text-white font-bold rounded-xl transition-all shadow-md flex items-center gap-2">
|
|
||||||
<i class="uil uil-print text-lg"></i>
|
|
||||||
<span>Yazdır</span>
|
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -47,8 +42,6 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Thin Minimal Orange/Slate Inner Border -->
|
<!-- Thin Minimal Orange/Slate Inner Border -->
|
||||||
<div class="absolute inset-6 border border-slate-200/50 rounded-[1.5rem] pointer-events-none z-10"></div>
|
|
||||||
<div class="absolute inset-[28px] border-2 border-orange-500/15 rounded-[1.3rem] pointer-events-none z-10"></div>
|
|
||||||
|
|
||||||
<div class="relative z-10 flex flex-col justify-between h-full min-h-[580px] md:min-h-[540px]">
|
<div class="relative z-10 flex flex-col justify-between h-full min-h-[580px] md:min-h-[540px]">
|
||||||
|
|
||||||
@@ -59,18 +52,17 @@
|
|||||||
<img src="{{ asset('logos/truncgil-yatay.svg') }}" alt="Trunçgil Teknoloji" class="h-16 md:h-20 object-contain">
|
<img src="{{ asset('logos/truncgil-yatay.svg') }}" alt="Trunçgil Teknoloji" class="h-16 md:h-20 object-contain">
|
||||||
</div>
|
</div>
|
||||||
<div class="w-1/3 text-right">
|
<div class="w-1/3 text-right">
|
||||||
<span class="text-[10px] font-bold text-slate-400 uppercase tracking-widest block">Verifikasyon No</span>
|
<span class="text-[10px] font-bold text-slate-400 tracking-widest block">VERİFİKASYON NO</span>
|
||||||
<span class="text-xs font-mono font-bold text-slate-800">{{ $application->certificate_code }}</span>
|
<span class="text-xs font-mono font-bold text-slate-800">{{ $application->certificate_code }}</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Main Content -->
|
<!-- Main Content -->
|
||||||
<div class="text-center my-auto px-4">
|
<div class="text-center my-auto px-4">
|
||||||
<h1 class="font-serif text-3xl md:text-5xl text-slate-900 uppercase mt-8 mb-2" style="font-weight: 900; letter-spacing: 0.04em;">Staj Bitirme Sertifikası</h1>
|
<h1 class="font-cinzel text-3xl md:text-5xl text-slate-900 mt-8 mb-2" style="font-weight: 900; letter-spacing: 0.04em;">STAJ BİTİRME<br>SERTİFİKASI</h1>
|
||||||
<div class="w-24 h-[3px] bg-orange-500 mx-auto mb-8"></div>
|
|
||||||
|
|
||||||
<p class="text-slate-400 text-xs md:text-sm uppercase tracking-wider mb-2">Sayın</p>
|
<p class="text-slate-400 text-xs md:text-sm tracking-wider mb-0">SAYIN</p>
|
||||||
<h2 class="font-serif text-2xl md:text-4xl font-extrabold text-slate-900 tracking-wide mb-6">{{ $application->name }}</h2>
|
<h2 class="font-cinzel text-2xl md:text-4xl font-extrabold text-slate-900 tracking-wide mb-6 mt-0">{{ $application->name }}</h2>
|
||||||
|
|
||||||
<div class="max-w-3xl mx-auto text-slate-700 leading-relaxed text-sm md:text-base space-y-4">
|
<div class="max-w-3xl mx-auto text-slate-700 leading-relaxed text-sm md:text-base space-y-4">
|
||||||
<p>
|
<p>
|
||||||
@@ -90,15 +82,15 @@
|
|||||||
<div class="flex items-center gap-4">
|
<div class="flex items-center gap-4">
|
||||||
<img src="https://api.qrserver.com/v1/create-qr-code/?size=150x150&data={{ urlencode(route('internship.verify', $application->certificate_code)) }}" alt="QR Code" class="w-28 h-28 border border-slate-200 p-1 rounded-xl bg-white shadow-sm">
|
<img src="https://api.qrserver.com/v1/create-qr-code/?size=150x150&data={{ urlencode(route('internship.verify', $application->certificate_code)) }}" alt="QR Code" class="w-28 h-28 border border-slate-200 p-1 rounded-xl bg-white shadow-sm">
|
||||||
<div class="text-left hidden sm:block">
|
<div class="text-left hidden sm:block">
|
||||||
<span class="text-[8px] font-bold text-slate-400 uppercase tracking-wider block">Dijital Doğrulama</span>
|
<span class="text-[8px] font-bold text-slate-400 tracking-wider block">DİJİTAL DOĞRULAMA</span>
|
||||||
<span class="text-[9px] text-slate-500 block">Karekod okutularak belgenin güncelliği e-Devlet stilinde doğrulanabilir.</span>
|
<span class="text-[9px] text-slate-500 block">Karekod okutularak belgenin güncelliği doğrulanabilir.</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Middle: Date -->
|
<!-- Middle: Date -->
|
||||||
<div class="text-center">
|
<div class="text-center">
|
||||||
<span class="text-[9px] text-slate-400 block uppercase tracking-wider">Düzenlenme Tarihi</span>
|
<span class="text-[9px] text-slate-600 block tracking-wider text-glow-white font-semibold">DÜZENLENME TARİHİ</span>
|
||||||
<span class="text-xs font-bold text-slate-700">{{ \Carbon\Carbon::parse($application->internship_end_date)->format('d.m.Y') }}</span>
|
<span class="text-xs font-bold text-slate-800 text-glow-white">{{ \Carbon\Carbon::parse($application->internship_end_date)->format('d.m.Y') }}</span>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Right: Authorized Signature -->
|
<!-- Right: Authorized Signature -->
|
||||||
@@ -106,10 +98,10 @@
|
|||||||
<div class="inline-block text-center pr-2">
|
<div class="inline-block text-center pr-2">
|
||||||
<!-- Digital Signature Stamp Concept -->
|
<!-- Digital Signature Stamp Concept -->
|
||||||
<div class="h-10 flex items-center justify-center mb-1">
|
<div class="h-10 flex items-center justify-center mb-1">
|
||||||
<span class="font-sans text-slate-800 font-bold text-sm tracking-wider">Trunçgil Teknoloji</span>
|
<span class="font-sans text-slate-900 font-extrabold text-sm tracking-wider text-glow-white">Trunçgil Teknoloji</span>
|
||||||
</div>
|
</div>
|
||||||
<span class="font-bold text-slate-800 block text-xs">Onay Makamı</span>
|
<span class="font-bold text-slate-900 block text-xs text-glow-white">Onay Makamı</span>
|
||||||
<span class="text-[9px] text-slate-400 block">Staj Koordinatörlüğü</span>
|
<span class="text-[9px] text-slate-700 font-semibold block text-glow-white">Staj Koordinatörlüğü</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -129,15 +121,15 @@
|
|||||||
<!-- Header -->
|
<!-- Header -->
|
||||||
<div class="flex justify-between items-center pb-2 border-b border-slate-100 mb-3">
|
<div class="flex justify-between items-center pb-2 border-b border-slate-100 mb-3">
|
||||||
<div>
|
<div>
|
||||||
<h2 class="font-serif font-bold text-slate-900 uppercase transcript-header-title">Staj Akademik Transkripti</h2>
|
<h2 class="font-serif font-bold text-slate-900 transcript-header-title">STAJ AKADEMİK TRANSKRİPTİ</h2>
|
||||||
<p class="text-slate-400 tracking-wider uppercase mt-0.5 transcript-header-subtitle">Ve Performans Değerlendirme Raporu</p>
|
<p class="text-slate-400 tracking-wider mt-0.5 transcript-header-subtitle">VE PERFORMANS DEĞERLENDİRME RAPORU</p>
|
||||||
</div>
|
</div>
|
||||||
<img src="{{ asset('logos/truncgil-yatay.svg') }}" alt="Trunçgil Logo" class="h-6 object-contain">
|
<img src="{{ asset('logos/truncgil-yatay.svg') }}" alt="Trunçgil Logo" class="h-6 object-contain">
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Student Info block -->
|
<!-- Student Info block -->
|
||||||
<div class="bg-slate-50 rounded-xl p-2.5 border border-slate-100 mb-3">
|
<div class="bg-slate-50 rounded-xl p-2.5 border border-slate-100 mb-3">
|
||||||
<h3 class="font-bold text-slate-400 uppercase tracking-widest mb-1.5 student-info-title">Öğrenci / Stajyer Bilgileri</h3>
|
<h3 class="font-bold text-slate-400 tracking-widest mb-1.5 student-info-title">ÖĞRENCİ / STAJYER BİLGİLERİ</h3>
|
||||||
<div class="grid grid-cols-1 md:grid-cols-2 gap-y-1 gap-x-8 student-info-grid">
|
<div class="grid grid-cols-1 md:grid-cols-2 gap-y-1 gap-x-8 student-info-grid">
|
||||||
<div class="flex justify-between border-b border-slate-200/50 pb-1">
|
<div class="flex justify-between border-b border-slate-200/50 pb-1">
|
||||||
<span class="text-slate-500">Adı Soyadı:</span>
|
<span class="text-slate-500">Adı Soyadı:</span>
|
||||||
@@ -169,7 +161,7 @@
|
|||||||
<div class="flex items-center gap-3">
|
<div class="flex items-center gap-3">
|
||||||
<img src="https://api.qrserver.com/v1/create-qr-code/?size=120x120&data={{ urlencode(route('internship.verify', $application->certificate_code)) }}" alt="QR Code" class="w-14 h-14 border border-slate-200 p-0.5 rounded-lg bg-white">
|
<img src="https://api.qrserver.com/v1/create-qr-code/?size=120x120&data={{ urlencode(route('internship.verify', $application->certificate_code)) }}" alt="QR Code" class="w-14 h-14 border border-slate-200 p-0.5 rounded-lg bg-white">
|
||||||
<div>
|
<div>
|
||||||
<span class="font-bold text-slate-400 uppercase tracking-wider block verify-code-label">Güvenli Doğrulama Kodu</span>
|
<span class="font-bold text-slate-400 tracking-wider block verify-code-label">GÜVENLİ DOĞRULAMA KODU</span>
|
||||||
<span class="font-mono font-bold text-slate-800 block verify-code">{{ $application->certificate_code }}</span>
|
<span class="font-mono font-bold text-slate-800 block verify-code">{{ $application->certificate_code }}</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -201,6 +193,13 @@
|
|||||||
.font-serif {
|
.font-serif {
|
||||||
font-family: 'Cinzel', 'Playfair Display', Georgia, serif;
|
font-family: 'Cinzel', 'Playfair Display', Georgia, serif;
|
||||||
}
|
}
|
||||||
|
.font-cinzel {
|
||||||
|
font-family: 'Cinzel', serif !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.text-glow-white {
|
||||||
|
text-shadow: 0 0 10px #ffffff, 0 0 6px #ffffff, 0 0 3px #ffffff;
|
||||||
|
}
|
||||||
|
|
||||||
/* Transcript typography helpers scaled globally */
|
/* Transcript typography helpers scaled globally */
|
||||||
.transcript-header-title {
|
.transcript-header-title {
|
||||||
@@ -375,6 +374,7 @@
|
|||||||
padding: 15mm !important;
|
padding: 15mm !important;
|
||||||
box-shadow: none !important;
|
box-shadow: none !important;
|
||||||
border: none !important;
|
border: none !important;
|
||||||
|
border-radius: 0 !important;
|
||||||
box-sizing: border-box !important;
|
box-sizing: border-box !important;
|
||||||
page-break-after: always !important;
|
page-break-after: always !important;
|
||||||
break-after: page !important;
|
break-after: page !important;
|
||||||
@@ -397,6 +397,7 @@
|
|||||||
padding: 10mm !important;
|
padding: 10mm !important;
|
||||||
box-shadow: none !important;
|
box-shadow: none !important;
|
||||||
border: none !important;
|
border: none !important;
|
||||||
|
border-radius: 0 !important;
|
||||||
box-sizing: border-box !important;
|
box-sizing: border-box !important;
|
||||||
overflow: hidden !important;
|
overflow: hidden !important;
|
||||||
}
|
}
|
||||||
@@ -469,16 +470,20 @@
|
|||||||
const origCertTransform = certEl.style.transform;
|
const origCertTransform = certEl.style.transform;
|
||||||
const origCertWidth = certEl.style.width;
|
const origCertWidth = certEl.style.width;
|
||||||
const origCertHeight = certEl.style.height;
|
const origCertHeight = certEl.style.height;
|
||||||
|
const origCertRadius = certEl.style.borderRadius;
|
||||||
const origTransTransform = transEl.style.transform;
|
const origTransTransform = transEl.style.transform;
|
||||||
const origTransWidth = transEl.style.width;
|
const origTransWidth = transEl.style.width;
|
||||||
const origTransHeight = transEl.style.height;
|
const origTransHeight = transEl.style.height;
|
||||||
|
const origTransRadius = transEl.style.borderRadius;
|
||||||
|
|
||||||
certEl.style.transform = 'none';
|
certEl.style.transform = 'none';
|
||||||
certEl.style.width = '1122px';
|
certEl.style.width = '1122px';
|
||||||
certEl.style.height = '794px';
|
certEl.style.height = '794px';
|
||||||
|
certEl.style.borderRadius = '0';
|
||||||
transEl.style.transform = 'none';
|
transEl.style.transform = 'none';
|
||||||
transEl.style.width = '794px';
|
transEl.style.width = '794px';
|
||||||
transEl.style.height = '1122px';
|
transEl.style.height = '1122px';
|
||||||
|
transEl.style.borderRadius = '0';
|
||||||
|
|
||||||
// Render Page 1 (Landscape)
|
// Render Page 1 (Landscape)
|
||||||
const certCanvas = await html2canvas(certEl, {
|
const certCanvas = await html2canvas(certEl, {
|
||||||
@@ -518,9 +523,11 @@
|
|||||||
certEl.style.transform = origCertTransform;
|
certEl.style.transform = origCertTransform;
|
||||||
certEl.style.width = origCertWidth;
|
certEl.style.width = origCertWidth;
|
||||||
certEl.style.height = origCertHeight;
|
certEl.style.height = origCertHeight;
|
||||||
|
certEl.style.borderRadius = origCertRadius;
|
||||||
transEl.style.transform = origTransTransform;
|
transEl.style.transform = origTransTransform;
|
||||||
transEl.style.width = origTransWidth;
|
transEl.style.width = origTransWidth;
|
||||||
transEl.style.height = origTransHeight;
|
transEl.style.height = origTransHeight;
|
||||||
|
transEl.style.borderRadius = origTransRadius;
|
||||||
|
|
||||||
// Trigger Save File
|
// Trigger Save File
|
||||||
pdf.save('{{ str()->slug($application->name) }}-staj-belgesi.pdf');
|
pdf.save('{{ str()->slug($application->name) }}-staj-belgesi.pdf');
|
||||||
|
|||||||
Reference in New Issue
Block a user