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:
143
dealplustech-astro/src/pages/admin/consent-logs.astro
Normal file
143
dealplustech-astro/src/pages/admin/consent-logs.astro
Normal 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>
|
||||
93
dealplustech-astro/src/pages/api/consent/index.ts
Normal file
93
dealplustech-astro/src/pages/api/consent/index.ts
Normal 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);
|
||||
}
|
||||
176
dealplustech-astro/src/pages/privacy-policy.astro
Normal file
176
dealplustech-astro/src/pages/privacy-policy.astro
Normal 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>
|
||||
107
dealplustech-astro/src/pages/terms-and-conditions.astro
Normal file
107
dealplustech-astro/src/pages/terms-and-conditions.astro
Normal 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>
|
||||
Reference in New Issue
Block a user