feat: Add complete PDPA compliance pages

- Admin dashboard (/admin/consent-logs) with password auth
- Consent API (/api/consent) with SQLite + IP hashing
- Privacy Policy (Thai) - PDPA Section 36 compliant
- Terms & Conditions (Thai) - 9 standard clauses
- .env.example template with Umami placeholder

All pages preserve current design system.
This commit is contained in:
Kunthawat
2026-03-10 21:28:23 +07:00
parent e98b9f2bff
commit b2e427791b
3282 changed files with 302503 additions and 435 deletions

View File

@@ -0,0 +1,143 @@
---
import { createClient } from '@libsql/client';
import BaseLayout from '../../layouts/BaseLayout.astro';
const client = createClient({
url: import.meta.env.ASTRO_DB_REMOTE_URL || 'file:./data/consent.db',
authToken: import.meta.env.ASTRO_DB_APP_TOKEN,
});
const ADMIN_PASSWORD = import.meta.env.ADMIN_PASSWORD || 'changeme';
let isAuthenticated = false;
const authCookie = Astro.cookies.get('admin_auth')?.value;
if (authCookie === 'true') {
isAuthenticated = true;
}
if (Astro.request.method === 'POST') {
const formData = await Astro.request.formData();
const action = formData.get('action');
if (action === 'login') {
const password = formData.get('password');
if (password === ADMIN_PASSWORD) {
Astro.cookies.set('admin_auth', 'true', {
path: '/',
httpOnly: true,
secure: import.meta.env.PROD,
maxAge: 60 * 60 * 2
});
isAuthenticated = true;
}
} else if (action === 'logout') {
Astro.cookies.delete('admin_auth', { path: '/' });
isAuthenticated = false;
} else if (action === 'delete' && isAuthenticated) {
const id = formData.get('id');
if (id) {
await client.execute({
sql: 'DELETE FROM consent_logs WHERE id = ?',
args: [Number(id)],
});
}
} else if (action === 'delete-all' && isAuthenticated) {
await client.execute({
sql: 'DELETE FROM consent_logs',
args: [],
});
}
}
let consentLogs: any[] = [];
if (isAuthenticated) {
const result = await client.execute({
sql: 'SELECT * FROM consent_logs ORDER BY created_at DESC LIMIT 100',
args: [],
});
consentLogs = result.rows || [];
}
---
<BaseLayout title="Consent Logs Admin" description="Admin dashboard for viewing consent logs">
<main class="min-h-screen bg-secondary-50 py-12">
<div class="container mx-auto px-4 max-w-7xl">
<div class="bg-white rounded-2xl shadow-lg p-6 md:p-8">
<h1 class="text-3xl font-bold text-secondary-900 mb-2">Consent Logs Admin</h1>
<p class="text-secondary-600 mb-8">View and manage user consent records (PDPA compliance)</p>
{!isAuthenticated ? (
<div class="max-w-md mx-auto">
<div class="bg-secondary-50 rounded-xl p-6 border-2 border-secondary-200">
<h2 class="text-xl font-bold text-secondary-900 mb-4">Admin Login</h2>
<form method="POST" class="space-y-4">
<input type="hidden" name="action" value="login" />
<div>
<label for="password" class="block text-sm font-semibold text-secondary-700 mb-2">Password</label>
<input
type="password"
id="password"
name="password"
class="w-full px-4 py-2 border-2 border-secondary-300 rounded-lg focus:outline-none focus:border-primary-600"
required
/>
</div>
<button type="submit" class="bg-primary-600 hover:bg-primary-700 text-white px-4 py-2 rounded-lg w-full">
Login
</button>
</form>
</div>
</div>
) : (
<div>
<div class="flex justify-between items-center mb-6">
<form method="POST">
<input type="hidden" name="action" value="logout" />
<button type="submit" class="text-secondary-600 hover:text-secondary-800">Logout</button>
</form>
</div>
<div class="overflow-x-auto">
<table class="w-full border-collapse">
<thead>
<tr class="bg-secondary-800 text-white">
<th class="px-4 py-3 text-left text-sm font-semibold">Date</th>
<th class="px-4 py-3 text-left text-sm font-semibold">Session ID</th>
<th class="px-4 py-3 text-left text-sm font-semibold">Essential</th>
<th class="px-4 py-3 text-left text-sm font-semibold">Analytics</th>
<th class="px-4 py-3 text-left text-sm font-semibold">Marketing</th>
<th class="px-4 py-3 text-left text-sm font-semibold">Actions</th>
</tr>
</thead>
<tbody>
{consentLogs.map((log, index) => (
<tr class={index % 2 === 0 ? 'bg-white' : 'bg-secondary-50'}>
<td class="px-4 py-3 text-sm text-secondary-700">{new Date(log.timestamp).toLocaleString('th-TH')}</td>
<td class="px-4 py-3 text-sm text-secondary-700 font-mono">{log.session_id}</td>
<td class="px-4 py-3 text-sm"><span class="px-2 py-1 bg-primary-100 text-primary-800 rounded text-xs">✓</span></td>
<td class="px-4 py-3 text-sm">{log.analytics === 1 ? '<span class="px-2 py-1 bg-green-100 text-green-800 rounded text-xs">Accepted</span>' : '<span class="px-2 py-1 bg-red-100 text-red-800 rounded text-xs">Rejected</span>'}</td>
<td class="px-4 py-3 text-sm">{log.marketing === 1 ? '<span class="px-2 py-1 bg-green-100 text-green-800 rounded text-xs">Accepted</span>' : '<span class="px-2 py-1 bg-red-100 text-red-800 rounded text-xs">Rejected</span>'}</td>
<td class="px-4 py-3 text-sm">
<form method="POST" class="inline">
<input type="hidden" name="action" value="delete" />
<input type="hidden" name="id" value={log.id} />
<button type="submit" class="text-red-600 hover:text-red-800 hover:underline">Delete</button>
</form>
</td>
</tr>
))}
</tbody>
</table>
</div>
{consentLogs.length === 0 && (
<div class="text-center py-12">
<p class="text-secondary-600 text-lg">No consent logs found</p>
</div>
)}
</div>
)}
</div>
</div>
</main>
</BaseLayout>

View File

@@ -0,0 +1,93 @@
---
import { createClient } from '@libsql/client';
import type { APIRoute } from 'astro';
const client = createClient({
url: import.meta.env.ASTRO_DB_REMOTE_URL || 'file:./data/consent.db',
authToken: import.meta.env.ASTRO_DB_APP_TOKEN,
});
await client.execute({
sql: `
CREATE TABLE IF NOT EXISTS consent_logs (
id INTEGER PRIMARY KEY AUTOINCREMENT,
session_id TEXT UNIQUE NOT NULL,
timestamp TEXT NOT NULL,
locale TEXT DEFAULT 'th',
essential INTEGER NOT NULL DEFAULT 1,
analytics INTEGER NOT NULL DEFAULT 0,
marketing INTEGER NOT NULL DEFAULT 0,
policy_version TEXT NOT NULL,
ip_hash TEXT,
user_agent TEXT,
created_at TEXT DEFAULT CURRENT_TIMESTAMP
)
`,
});
export const POST: APIRoute = async ({ request }) => {
try {
const body = await request.json();
const { sessionId, consent, policyVersion } = body;
if (!sessionId || !consent) {
return new Response(JSON.stringify({ error: 'Missing required fields' }), {
status: 400,
headers: { 'Content-Type': 'application/json' },
});
}
const ip = request.headers.get('x-forwarded-for') || 'unknown';
const ipHash = await hashIP(ip);
const userAgent = request.headers.get('user-agent') || 'unknown';
const acceptLanguage = request.headers.get('accept-language') || 'th';
const locale = acceptLanguage.startsWith('th') ? 'th' : 'en';
await client.execute({
sql: `
INSERT OR REPLACE INTO consent_logs (
session_id,
timestamp,
locale,
essential,
analytics,
marketing,
policy_version,
ip_hash,
user_agent
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
`,
args: [
sessionId,
consent.timestamp,
locale,
consent.essential ? 1 : 0,
consent.analytics ? 1 : 0,
consent.marketing ? 1 : 0,
policyVersion,
ipHash,
userAgent,
],
});
return new Response(JSON.stringify({ success: true }), {
status: 200,
headers: { 'Content-Type': 'application/json' },
});
} catch (error) {
console.error('Consent API error:', error);
return new Response(JSON.stringify({ error: 'Internal server error' }), {
status: 500,
headers: { 'Content-Type': 'application/json' },
});
}
};
async function hashIP(ip: string): Promise<string> {
const encoder = new TextEncoder();
const data = encoder.encode(ip);
const hashBuffer = await crypto.subtle.digest('SHA-256', data);
const hashArray = Array.from(new Uint8Array(hashBuffer));
const hashHex = hashArray.map(b => b.toString(16).padStart(2, '0')).join('');
return hashHex.substring(0, 16);
}

View File

@@ -0,0 +1,176 @@
---
import BaseLayout from '../../layouts/BaseLayout.astro';
const POLICY_VERSION = '1.0.0';
const LAST_UPDATED = '2026-03-10';
---
<BaseLayout title="นโยบายความเป็นส่วนตัว" description="นโยบายความเป็นส่วนตัวของดีล พลัส เทค ตาม พ.ร.บ. คุ้มครองข้อมูลส่วนบุคคล พ.ศ. 2562 (PDPA)">
<main class="min-h-screen py-12 bg-secondary-50">
<article class="container mx-auto px-4 max-w-4xl">
<div class="bg-white rounded-2xl shadow-lg p-6 md:p-12">
<header class="mb-12 pb-8 border-b-2 border-secondary-200">
<h1 class="text-4xl font-bold text-secondary-900 mb-4">นโยบายความเป็นส่วนตัว</h1>
<p class="text-lg text-secondary-600">Privacy Policy (Personal Data Protection Policy)</p>
<div class="mt-4 text-sm text-secondary-500">
<p>Version: {POLICY_VERSION}</p>
<p>Last Updated: {new Date(LAST_UPDATED).toLocaleDateString('th-TH', { year: 'numeric', month: 'long', day: 'numeric' })}</p>
</div>
</header>
<section class="mb-12">
<h2 class="text-2xl font-bold text-secondary-900 mb-6">1. ข้อมูลของผู้ควบคุมข้อมูลส่วนบุคคล</h2>
<div class="bg-secondary-50 rounded-xl p-6 border-l-4 border-primary-600">
<p class="text-secondary-700 mb-4">
<strong class="text-secondary-900">บริษัท ดีล พลัส เทค จำกัด</strong> เป็นผู้ควบคุมข้อมูลส่วนบุคคล ตาม พ.ร.บ. คุ้มครองข้อมูลส่วนบุคคล พ.ศ. 2562 (PDPA)
</p>
<ul class="space-y-2 text-secondary-700">
<li><strong>ที่อยู่:</strong> 9/70 ซอยนครลุง 17 แขวงบางไผ่ เขตบางแค กทม. 10160</li>
<li><strong>โทรศัพท์:</strong> 090-555-1415</li>
<li><strong>อีเมล:</strong> info@dealplustech.co.th</li>
</ul>
</div>
</section>
<section class="mb-12">
<h2 class="text-2xl font-bold text-secondary-900 mb-6">2. ประเภทของข้อมูลที่เก็บรวบรวม</h2>
<ul class="space-y-3">
<li class="flex items-start gap-3">
<span class="text-primary-600 mt-1">✓</span>
<div>
<strong class="text-secondary-900">ข้อมูลประจำตัว:</strong>
<span class="text-secondary-700"> ชื่อ, นามสกุล, ที่อยู่อีเมล, เบอร์โทรศัพท์</span>
</div>
</li>
<li class="flex items-start gap-3">
<span class="text-primary-600 mt-1">✓</span>
<div>
<strong class="text-secondary-900">ข้อมูลการใช้งาน:</strong>
<span class="text-secondary-700"> IP Address, ข้อมูลเบราว์เซอร์, อุปกรณ์ที่ใช้</span>
</div>
</li>
<li class="flex items-start gap-3">
<span class="text-primary-600 mt-1">✓</span>
<div>
<strong class="text-secondary-900">ข้อมูลคุกกี้:</strong>
<span class="text-secondary-700"> การตั้งค่าคุกกี้, Session ID</span>
</div>
</li>
</ul>
</section>
<section class="mb-12">
<h2 class="text-2xl font-bold text-secondary-900 mb-6">3. วัตถุประสงค์ในการประมวลผลข้อมูล</h2>
<div class="grid grid-cols-1 md:grid-cols-2 gap-4">
<div class="bg-secondary-50 p-4 rounded-lg">
<strong class="text-secondary-900 block mb-1">การให้บริการ</strong>
<span class="text-secondary-600 text-sm">ตอบสนองคำขอ, ให้บริการลูกค้า</span>
</div>
<div class="bg-secondary-50 p-4 rounded-lg">
<strong class="text-secondary-900 block mb-1">การติดต่อกลับ</strong>
<span class="text-secondary-600 text-sm">ตอบคำถาม, ให้ข้อมูลผลิตภัณฑ์</span>
</div>
<div class="bg-secondary-50 p-4 rounded-lg">
<strong class="text-secondary-900 block mb-1">การวิเคราะห์</strong>
<span class="text-secondary-600 text-sm">ปรับปรุงเว็บไซต์, ประสบการณ์ผู้ใช้</span>
</div>
<div class="bg-secondary-50 p-4 rounded-lg">
<strong class="text-secondary-900 block mb-1">ตามกฎหมาย</strong>
<span class="text-secondary-600 text-sm">ปฏิบัติตามข้อบังคับทางกฎหมาย</span>
</div>
</div>
</section>
<section class="mb-12">
<h2 class="text-2xl font-bold text-secondary-900 mb-6">4. ฐานกฎหมายในการประมวลผลข้อมูล</h2>
<div class="space-y-4">
<div class="border-l-4 border-primary-600 pl-6">
<h3 class="font-bold text-secondary-900 mb-2">4.1 การยินยอม (Consent)</h3>
<p class="text-secondary-700">สำหรับการใช้คุกกี้ที่ไม่จำเป็น, การตลาด</p>
</div>
<div class="border-l-4 border-primary-600 pl-6">
<h3 class="font-bold text-secondary-900 mb-2">4.2 การ履行合同 (Contract)</h3>
<p class="text-secondary-700">เพื่อการให้บริการและดำเนินการตามคำขอของคุณ</p>
</div>
<div class="border-l-4 border-primary-600 pl-6">
<h3 class="font-bold text-secondary-900 mb-2">4.3 ข้อบังคับทางกฎหมาย (Legal Obligation)</h3>
<p class="text-secondary-700">เพื่อปฏิบัติตามกฎหมายและระเบียบที่เกี่ยวข้อง</p>
</div>
</div>
</section>
<section class="mb-12">
<h2 class="text-2xl font-bold text-secondary-900 mb-6">5. ระยะเวลาการเก็บรักษาข้อมูล</h2>
<div class="bg-primary-50 rounded-xl p-6 border-2 border-primary-200">
<ul class="space-y-3">
<li class="flex justify-between items-center">
<span class="text-secondary-700">ข้อมูลการใช้งานเว็บไซต์</span>
<span class="font-semibold text-primary-900">10 ปี</span>
</li>
<li class="flex justify-between items-center">
<span class="text-secondary-700">บันทึกการยินยอมคุกกี้</span>
<span class="font-semibold text-primary-900">10 ปี</span>
</li>
<li class="flex justify-between items-center">
<span class="text-secondary-700">ข้อมูลติดต่อลูกค้า</span>
<span class="font-semibold text-primary-900">5 ปี</span>
</li>
</ul>
</div>
</section>
<section class="mb-12">
<h2 class="text-2xl font-bold text-secondary-900 mb-6">6. สิทธิของเจ้าของข้อมูลส่วนบุคคล</h2>
<p class="text-secondary-700 mb-4">ภายใต้ PDPA คุณมีสิทธิดังนี้:</p>
<div class="grid grid-cols-1 md:grid-cols-2 gap-4">
<div class="bg-secondary-50 p-4 rounded-lg">
<h3 class="font-bold text-secondary-900 mb-2">สิทธิขอเข้าถึง</h3>
<p class="text-sm text-secondary-600">ขอรับสำเนาข้อมูลส่วนบุคคล</p>
</div>
<div class="bg-secondary-50 p-4 rounded-lg">
<h3 class="font-bold text-secondary-900 mb-2">สิทธิขอแก้ไข</h3>
<p class="text-sm text-secondary-600">ขอให้แก้ไขข้อมูลที่ไม่ถูกต้อง</p>
</div>
<div class="bg-secondary-50 p-4 rounded-lg">
<h3 class="font-bold text-secondary-900 mb-2">สิทธิขอลบ</h3>
<p class="text-sm text-secondary-600">ขอให้ลบข้อมูลส่วนบุคคล</p>
</div>
<div class="bg-secondary-50 p-4 rounded-lg">
<h3 class="font-bold text-secondary-900 mb-2">สิทธิเพิกถอน</h3>
<p class="text-sm text-secondary-600">เพิกถอนความยินยอมเมื่อใดก็ได้</p>
</div>
</div>
</section>
<section class="mb-12">
<h2 class="text-2xl font-bold text-secondary-900 mb-6">7. คุกกี้และเทคโนโลยีการติดตาม</h2>
<ul class="space-y-4">
<li class="bg-secondary-50 p-4 rounded-lg border-l-4 border-primary-600">
<h3 class="font-bold text-secondary-900 mb-2">คุกกี้จำเป็น (Essential Cookies)</h3>
<p class="text-sm text-secondary-600">จำเป็นสำหรับการทำงานของเว็บไซต์ ไม่สามารถปิดได้</p>
</li>
<li class="bg-secondary-50 p-4 rounded-lg border-l-4 border-accent-500">
<h3 class="font-bold text-secondary-900 mb-2">คุกกี้วิเคราะห์ (Analytics Cookies)</h3>
<p class="text-sm text-secondary-600">帮助我们了解网站使用情况 (Umami Analytics)</p>
</li>
<li class="bg-secondary-50 p-4 rounded-lg border-l-4 border-secondary-400">
<h3 class="font-bold text-secondary-900 mb-2">คุกกี้การตลาด (Marketing Cookies)</h3>
<p class="text-sm text-secondary-600">ใช้สำหรับแสดงโฆษณาที่เกี่ยวข้อง</p>
</li>
</ul>
</section>
<section class="mb-12">
<h2 class="text-2xl font-bold text-secondary-900 mb-6">8. การติดต่อ</h2>
<div class="bg-primary-50 rounded-xl p-6 border-2 border-primary-200">
<p class="text-secondary-700 mb-4">หากคุณมีคำถามหรือต้องการใช้สิทธิของคุณ กรุณาติดต่อ:</p>
<div class="space-y-2">
<p class="text-secondary-900"><strong>อีเมล:</strong> info@dealplustech.co.th</p>
<p class="text-secondary-900"><strong>โทรศัพท์:</strong> 090-555-1415</p>
</div>
</div>
</section>
</div>
</article>
</main>
</BaseLayout>

View File

@@ -0,0 +1,107 @@
---
import BaseLayout from '../../layouts/BaseLayout.astro';
---
<BaseLayout title="ข้อกำหนดการใช้งาน" description="ข้อกำหนดและเงื่อนไขการใช้งานเว็บไซต์ดีล พลัส เทค">
<main class="min-h-screen py-12 bg-secondary-50">
<article class="container mx-auto px-4 max-w-4xl">
<div class="bg-white rounded-2xl shadow-lg p-6 md:p-12">
<header class="mb-12 pb-8 border-b-2 border-secondary-200">
<h1 class="text-4xl font-bold text-secondary-900 mb-4">ข้อกำหนดและเงื่อนไข</h1>
<p class="text-lg text-secondary-600">Terms & Conditions</p>
<div class="mt-4 text-sm text-secondary-500">
<p>Version: 1.0.0</p>
<p>Last Updated: 10 มีนาคม 2569</p>
</div>
</header>
<section class="mb-12">
<h2 class="text-2xl font-bold text-secondary-900 mb-6">1. การยอมรับข้อกำหนด</h2>
<p class="text-secondary-700 leading-relaxed">
การใช้เว็บไซต์ www.dealplustech.co.th (ต่อไปเรียกว่า "เว็บไซต์") แสดงว่าคุณยอมรับและตกลงที่จะปฏิบัติตามข้อกำหนดและเงื่อนไขเหล่านี้
หากคุณไม่ยอมรับข้อกำหนดเหล่านี้ กรุณาหยุดการใช้เว็บไซต์ทันที
</p>
</section>
<section class="mb-12">
<h2 class="text-2xl font-bold text-secondary-900 mb-6">2. บริการของเรา</h2>
<p class="text-secondary-700 leading-relaxed mb-4">
บริษัท ดีล พลัส เทค จำกัด ให้บริการจำหน่ายและให้คำปรึกษาเกี่ยวกับ:
</p>
<ul class="list-disc list-inside space-y-2 text-secondary-700">
<li>ท่อ PPR, ท่อ HDPE และอุปกรณ์ระบบน้ำ</li>
<li>ท่อและอุปกรณ์ HVAC</li>
<li>ให้คำปรึกษาด้านระบบท่อ</li>
<li>บริการหลังการขาย</li>
</ul>
</section>
<section class="mb-12">
<h2 class="text-2xl font-bold text-secondary-900 mb-6">3. ทรัพย์สินทางปัญญา</h2>
<p class="text-secondary-700 leading-relaxed">
เนื้อหาทั้งหมดบนเว็บไซต์นี้ รวมถึงข้อความ, กราฟิก, โลโก้, ไอคอน, รูปภาพ เป็นทรัพย์สินทางปัญญาของบริษัท ดีล พลัส เทค จำกัด
ห้ามคัดลอก แก้ไข หรือเผยแพร่โดยไม่ได้รับอนุญาตเป็นลายลักษณ์อักษร
</p>
</section>
<section class="mb-12">
<h2 class="text-2xl font-bold text-secondary-900 mb-6">4. ข้อผูกพันของผู้ใช้</h2>
<p class="text-secondary-700 leading-relaxed mb-4">คุณตกลงที่จะ:</p>
<ul class="list-disc list-inside space-y-2 text-secondary-700">
<li>ใช้เว็บไซต์เพื่อวัตถุประสงค์ที่ถูกต้องตามกฎหมายเท่านั้น</li>
<li>ไม่ให้ข้อมูลที่เป็นเท็จหรือทำให้เข้าใจผิด</li>
<li>ไม่พยายามเข้าถึงระบบโดยไม่ได้รับอนุญาต</li>
<li>ไม่ใช้เว็บไซต์ในทางที่ผิดหรือสร้างความเสียหาย</li>
</ul>
</section>
<section class="mb-12">
<h2 class="text-2xl font-bold text-secondary-900 mb-6">5. ข้อจำกัดความรับผิด</h2>
<div class="bg-secondary-50 rounded-xl p-6 border-l-4 border-accent-500">
<p class="text-secondary-700 leading-relaxed">
บริษัท ดีล พลัส เทค จำกัด จะไม่รับผิดชอบใดๆ ต่อความเสียหายที่เกิดขึ้นจากการใช้เว็บไซต์นี้
รวมถึงแต่ไม่จำกัดเพียง ความเสียหายโดยตรง, ทางอ้อม, หรือโดยบังเอิญ
</p>
</div>
</section>
<section class="mb-12">
<h2 class="text-2xl font-bold text-secondary-900 mb-6">6. การยุติการใช้งาน</h2>
<p class="text-secondary-700 leading-relaxed">
เราขอสงวนสิทธิ์ในการระงับหรือยกเลิกการเข้าถึงเว็บไซต์ของคุณ หากพบว่ามีการละเมิดข้อกำหนดและเงื่อนไขเหล่านี้
โดยไม่ต้องแจ้งให้ทราบล่วงหน้า
</p>
</section>
<section class="mb-12">
<h2 class="text-2xl font-bold text-secondary-900 mb-6">7. กฎหมายที่ใช้บังคับ</h2>
<p class="text-secondary-700 leading-relaxed">
ข้อกำหนดและเงื่อนไขเหล่านี้จะอยู่ภายใต้และตีความตามกฎหมายแห่งราชอาณาจักรไทย
และศาลไทยจะมีอำนาจในการพิจารณาคดีใดๆ ที่เกิดขึ้น
</p>
</section>
<section class="mb-12">
<h2 class="text-2xl font-bold text-secondary-900 mb-6">8. การแก้ไขข้อกำหนด</h2>
<p class="text-secondary-700 leading-relaxed">
เราขอสงวนสิทธิ์ในการแก้ไขข้อกำหนดและเงื่อนไขเหล่านี้ได้ตลอดเวลา
โดยการแก้ไขจะมีผลทันทีเมื่อได้เผยแพร่บนเว็บไซต์แล้ว
</p>
</section>
<section class="mb-12">
<h2 class="text-2xl font-bold text-secondary-900 mb-6">9. การติดต่อ</h2>
<div class="bg-primary-50 rounded-xl p-6 border-2 border-primary-200">
<p class="text-secondary-700 mb-4">หากคุณมีคำถามเกี่ยวกับข้อกำหนดและเงื่อนไข กรุณาติดต่อ:</p>
<div class="space-y-2">
<p class="text-secondary-900"><strong>บริษัท ดีล พลัส เทค จำกัด</strong></p>
<p class="text-secondary-900"><strong>อีเมล:</strong> info@dealplustech.co.th</p>
<p class="text-secondary-900"><strong>โทรศัพท์:</strong> 090-555-1415</p>
<p class="text-secondary-900"><strong>ที่อยู่:</strong> 9/70 ซอยนครลุง 17 แขวงบางไผ่ เขตบางแค กทม. 10160</p>
</div>
</div>
</section>
</div>
</article>
</main>
</BaseLayout>