| | <!DOCTYPE html> |
| | <html lang="th"> |
| | <head> |
| | <meta charset="UTF-8"> |
| | <meta name="viewport" content="width=device-width, initial-scale=1.0"> |
| | <title>ยุทธศาสตร์เลือกตั้ง 2569: ธนอนันต์ เมนะสวัสดิ์ (อุดรฯ เขต 6)</title> |
| | |
| | |
| | <script src="https://cdn.tailwindcss.com"></script> |
| | |
| | |
| | <script src="https://cdn.jsdelivr.net/npm/chart.js"></script> |
| |
|
| | |
| | <script type="importmap"> |
| | { |
| | "imports": { |
| | "@google/generative-ai": "https://esm.run/@google/generative-ai" |
| | } |
| | } |
| | </script> |
| |
|
| | |
| | <link href="https://fonts.googleapis.com/css2?family=Noto+Sans+Thai:wght@300;400;600;800&display=swap" rel="stylesheet"> |
| |
|
| | <style> |
| | body { |
| | font-family: 'Noto Sans Thai', sans-serif; |
| | background-color: #F8F7FF; |
| | color: #1F2937; |
| | } |
| | |
| | .chart-container { |
| | position: relative; |
| | width: 100%; |
| | max-width: 600px; |
| | margin-left: auto; |
| | margin-right: auto; |
| | height: 350px; |
| | max-height: 400px; |
| | } |
| | |
| | .info-card { |
| | background-color: white; |
| | border-radius: 0.75rem; |
| | box-shadow: 0 4px 6px -1px rgba(106, 13, 173, 0.1), 0 2px 4px -1px rgba(106, 13, 173, 0.06); |
| | padding: 1.5rem; |
| | transition: transform 0.2s; |
| | border-top: 4px solid transparent; |
| | } |
| | |
| | .info-card:hover { |
| | transform: translateY(-2px); |
| | border-top-color: #6A0DAD; |
| | } |
| | |
| | .loader { |
| | border: 4px solid #f3f3f3; |
| | border-top: 4px solid #6A0DAD; |
| | border-radius: 50%; |
| | width: 24px; |
| | height: 24px; |
| | animation: spin 1s linear infinite; |
| | display: inline-block; |
| | } |
| | |
| | @keyframes spin { |
| | 0% { transform: rotate(0deg); } |
| | 100% { transform: rotate(360deg); } |
| | } |
| | </style> |
| | </head> |
| | <body class="bg-gray-100"> |
| |
|
| | |
| | <header class="bg-gradient-to-r from-purple-800 via-purple-700 to-indigo-900 text-white py-12 px-4 shadow-xl text-center"> |
| | <div class="max-w-6xl mx-auto"> |
| | <div class="inline-block bg-white text-purple-900 px-4 py-1 rounded-full text-sm font-bold mb-4 shadow-md"> |
| | ROADMAP TO VICTORY 2026 (2569) |
| | </div> |
| | <h1 class="text-4xl md:text-6xl font-extrabold mb-2">ธนอนันต์ เมนะสวัสดิ์</h1> |
| | <h2 class="text-2xl md:text-3xl font-light opacity-90">พรรคกล้าธรรม | อุดรธานี เขต 6</h2> |
| | </div> |
| | </header> |
| |
|
| | <main class="max-w-7xl mx-auto p-4 md:p-8 space-y-8"> |
| |
|
| | |
| | <section class="grid grid-cols-1 md:grid-cols-4 gap-6"> |
| | <div class="info-card border-l-8 border-purple-600 text-center"> |
| | <div class="text-gray-500 font-bold uppercase text-xs">เป้าหมายคะแนน</div> |
| | <div class="text-4xl font-extrabold text-purple-700 mt-2">42,000+</div> |
| | </div> |
| | <div class="info-card border-l-8 border-yellow-500 text-center"> |
| | <div class="text-gray-500 font-bold uppercase text-xs">กลุ่มเป้าหมายหลัก</div> |
| | <div class="text-4xl font-extrabold text-yellow-600 mt-2">New Gen</div> |
| | </div> |
| | <div class="info-card border-l-8 border-indigo-500 text-center"> |
| | <div class="text-gray-500 font-bold uppercase text-xs">ฐานเสียงเดิม</div> |
| | <div class="text-4xl font-extrabold text-indigo-600 mt-2">Family</div> |
| | </div> |
| | <div class="info-card border-l-8 border-pink-500 text-center"> |
| | <div class="text-gray-500 font-bold uppercase text-xs">งบดิจิทัล</div> |
| | <div class="text-4xl font-extrabold text-pink-600 mt-2">40%</div> |
| | </div> |
| | </section> |
| |
|
| | |
| | <section class="bg-red-50 border-2 border-red-200 rounded-2xl p-6 shadow-sm"> |
| | <h3 class="text-xl font-bold text-red-700 flex items-center gap-2 mb-4"> |
| | ⚖️ ศูนย์เฝ้าระวังระเบียบ กกต. (ECT Compliance Monitor) |
| | </h3> |
| | <div class="grid grid-cols-1 md:grid-cols-3 gap-4 text-sm"> |
| | <div class="bg-white p-3 rounded-lg border border-red-100"> |
| | <h4 class="font-bold text-red-600 mb-1">🚫 มาตรา 73 (ข้อห้ามหาเสียง)</h4> |
| | <ul class="list-disc list-inside text-gray-600 space-y-1"> |
| | <li>ห้ามสัญญาว่าจะให้เงิน/ทรัพย์สิน</li> |
| | <li>ห้ามจัดเลี้ยงหรือรับจัดเลี้ยง</li> |
| | <li>ห้ามใส่ร้ายด้วยความเท็จ</li> |
| | </ul> |
| | </div> |
| | <div class="bg-white p-3 rounded-lg border border-red-100"> |
| | <h4 class="font-bold text-red-600 mb-1">📱 ระเบียบโซเชียลมิเดีย</h4> |
| | <ul class="list-disc list-inside text-gray-600 space-y-1"> |
| | <li>แจ้งบัญชีโซเชียลต่อ กกต. ก่อนโพสต์</li> |
| | <li>บันทึกค่า Ads เป็นงบเลือกตั้ง</li> |
| | <li>ห้ามใช้ AI บิดเบือนภาพเพื่อโจมตี</li> |
| | </ul> |
| | </div> |
| | <div class="bg-white p-3 rounded-lg border border-red-100"> |
| | <h4 class="font-bold text-red-600 mb-1">🛡️ การป้องกันส่วนบุคคล</h4> |
| | <ul class="list-disc list-inside text-gray-600 space-y-1"> |
| | <li>ห้ามพาดพิงสถาบันพระมหากษัตริย์</li> |
| | <li>ห้ามโพสต์หาเสียงหลัง 18:00 น. ก่อนวันเลือกตั้ง</li> |
| | <li>ห้ามเผยแพร่ผล Poll 7 วันสุดท้าย</li> |
| | </ul> |
| | </div> |
| | </div> |
| | </section> |
| |
|
| | |
| | <section class="bg-gradient-to-br from-indigo-900 to-purple-800 rounded-2xl p-8 text-white shadow-xl"> |
| | <h3 class="text-3xl font-bold mb-8 border-b border-purple-400 pb-4">🤖 AI Strategic Partner</h3> |
| | <div class="grid grid-cols-1 md:grid-cols-2 gap-8"> |
| | |
| | <div class="bg-white text-gray-800 rounded-xl p-6 border-t-8 border-red-500 shadow-lg"> |
| | <h4 class="text-xl font-bold text-purple-800 mb-1">✍️ ผู้ช่วยเขียนแคปชั่น</h4> |
| | <p class="text-xs text-red-500 mb-4 font-bold flex items-center gap-1"> |
| | <span class="w-2 h-2 bg-red-500 rounded-full animate-ping"></span> |
| | ระบบตรวจสอบระเบียบ กกต. ทำงานอยู่ |
| | </p> |
| | <input type="text" id="captionTopic" class="w-full border p-2 rounded mb-4" placeholder="หัวข้อคอนเทนต์ หรือ นโยบาย..."> |
| | <select id="captionPlatform" class="w-full border p-2 rounded mb-4"> |
| | <option value="TikTok">TikTok (เน้นสั้น/ภาษาอีสาน)</option> |
| | <option value="Facebook">Facebook (เน้นข้อมูล/ผลงาน)</option> |
| | <option value="Line OA">Line OA (เน้นความใกล้ชิด)</option> |
| | </select> |
| | <button id="btnGenerateCaption" class="w-full bg-purple-600 hover:bg-purple-700 text-white font-bold py-3 rounded-lg transition-all shadow-md"> |
| | ✨ สร้างแคปชั่น (Safe Mode) |
| | </button> |
| | <div id="captionOutputArea" class="hidden mt-4"> |
| | <div id="captionOutput" class="p-4 bg-gray-50 rounded-lg border border-gray-200 text-sm whitespace-pre-line max-h-40 overflow-y-auto"></div> |
| | </div> |
| | </div> |
| |
|
| | |
| | <div class="bg-white text-gray-800 rounded-xl p-6 border-t-8 border-blue-500 shadow-lg"> |
| | <h4 class="text-xl font-bold text-blue-800 mb-1">💬 ผู้ช่วยตอบคอมเมนต์</h4> |
| | <p class="text-xs text-blue-500 mb-4 font-bold">ตอบเร็ว ตรงประเด็น ได้ใจชาวบ้าน</p> |
| | |
| | <textarea id="commentInput" rows="3" class="w-full border p-2 rounded mb-3 text-sm" placeholder="วางคอมเมนต์จากชาวเน็ตที่นี่..."></textarea> |
| | |
| | <select id="replyTone" class="w-full border p-2 rounded mb-4 text-sm"> |
| | <option value="Friendly">เป็นกันเอง + ภาษาอีสาน (สำหรับ FC)</option> |
| | <option value="Polite">สุภาพทางการ (สำหรับผู้ใหญ่/ข้าราชการ)</option> |
| | <option value="Clarify">ชี้แจงข้อเท็จจริง (สำหรับคำถามนโยบาย)</option> |
| | <option value="Deescalate">ลดอุณหภูมิ (สำหรับคอมเมนต์ลบ)</option> |
| | </select> |
| |
|
| | <button id="btnGenerateReply" class="w-full bg-blue-600 hover:bg-blue-700 text-white font-bold py-3 rounded-lg transition-all shadow-md"> |
| | ✨ ร่างคำตอบ |
| | </button> |
| | <div id="replyOutputArea" class="hidden mt-4"> |
| | <div id="replyOutput" class="p-4 bg-blue-50 rounded-lg border border-blue-200 text-sm whitespace-pre-line relative group"></div> |
| | <p class="text-[10px] text-gray-400 mt-1 text-right">คลิกที่ข้อความเพื่อคัดลอก</p> |
| | </div> |
| | </div> |
| |
|
| | |
| | <div class="bg-white text-gray-800 rounded-xl p-6 border-t-8 border-green-500 shadow-lg"> |
| | <h4 class="text-xl font-bold text-green-700 mb-1">🎤 ผู้ช่วยร่างคำปราศรัย</h4> |
| | <p class="text-xs text-green-600 mb-4 font-bold">สคริปต์พูดหน้างาน มัดใจคนฟัง</p> |
| | |
| | <div class="grid grid-cols-2 gap-2 mb-3"> |
| | <select id="speechOccasion" class="border p-2 rounded text-sm w-full"> |
| | <option value="ประชุมหมู่บ้าน">ประชุมหมู่บ้าน</option> |
| | <option value="งานแต่งงาน">งานแต่งงาน</option> |
| | <option value="งานศพ">งานขาวดำ (งานศพ)</option> |
| | <option value="ขึ้นบ้านใหม่">ขึ้นบ้านใหม่</option> |
| | <option value="เวทีปราศรัยใหญ่">เวทีปราศรัยใหญ่</option> |
| | </select> |
| | <input type="text" id="speechLocation" class="border p-2 rounded text-sm w-full" placeholder="สถานที่ (เช่น บ้านหนองกุง)"> |
| | </div> |
| | <input type="text" id="speechTheme" class="w-full border p-2 rounded mb-4 text-sm" placeholder="ประเด็นที่จะเน้น (เช่น แก้หนี้, น้ำประปา)"> |
| |
|
| | <button id="btnGenerateSpeech" class="w-full bg-green-600 hover:bg-green-700 text-white font-bold py-3 rounded-lg transition-all shadow-md"> |
| | ✨ ร่างสคริปต์พูด (3 นาที) |
| | </button> |
| | <div id="speechOutputArea" class="hidden mt-4"> |
| | <div id="speechOutput" class="p-4 bg-green-50 rounded-lg border border-green-200 text-sm whitespace-pre-line max-h-48 overflow-y-auto"></div> |
| | </div> |
| | </div> |
| |
|
| | |
| | <div class="bg-white text-gray-800 rounded-xl p-6 border-t-8 border-gray-800 shadow-lg"> |
| | <h4 class="text-xl font-bold text-gray-800 mb-4">🛡️ ที่ปรึกษาแก้เกมดราม่า</h4> |
| | <textarea id="crisisInput" rows="3" class="w-full border p-2 rounded mb-4" placeholder="ระบุสถานการณ์หรือข้อกล่าวหา..."></textarea> |
| | <button id="btnGenerateStrategy" class="w-full bg-gray-800 hover:bg-black text-white font-bold py-3 rounded-lg transition-all shadow-md"> |
| | ✨ วิเคราะห์แนวทางแก้เกม |
| | </button> |
| | <div id="strategyOutput" class="mt-4 p-4 bg-gray-50 rounded-lg hidden text-sm border-l-4 border-gray-400 max-h-40 overflow-y-auto"></div> |
| | </div> |
| | </div> |
| | </section> |
| |
|
| | |
| | <section class="bg-white rounded-2xl shadow-xl p-8 border border-purple-100"> |
| | <h3 class="text-2xl font-bold mb-6 text-gray-800 border-b pb-2">📊 Digital Landscape: อุดรฯ เขต 6</h3> |
| | <div class="grid grid-cols-1 lg:grid-cols-2 gap-8 items-center"> |
| | <div class="chart-container"> |
| | <canvas id="socialChart"></canvas> |
| | </div> |
| | <div class="space-y-4"> |
| | <div class="p-4 bg-purple-50 rounded-xl border border-purple-100"> |
| | <h5 class="font-bold text-purple-800">🎯 First Voters & New Gen</h5> |
| | <p class="text-sm text-gray-600 mt-1">กลุ่ม TikTok อายุ 18-35 ปี คือกุญแจสำคัญในการทำลายฐานเสียงเดิม</p> |
| | </div> |
| | <div class="p-4 bg-blue-50 rounded-xl border border-blue-100"> |
| | <h5 class="font-bold text-blue-800">💬 Local Communities</h5> |
| | <p class="text-sm text-gray-600 mt-1">เน้นการทำคอนเทนต์ "บ้านเฮา" โดยใช้ภาษาอีสานและวิถีชีวิตจริง</p> |
| | </div> |
| | </div> |
| | </div> |
| | </section> |
| |
|
| | </main> |
| |
|
| | <script type="module"> |
| | import { GoogleGenerativeAI } from "@google/generative-ai"; |
| | |
| | const apiKey = "AIzaSyBZl-6U8PaTWAVOd-sd1E9TxYOpUG4okZQ"; |
| | const genAI = new GoogleGenerativeAI(apiKey); |
| | const model = genAI.getGenerativeModel({ model: "gemini-2.5-flash-preview-09-2025" }); |
| | |
| | |
| | const complianceInstruction = ` |
| | [SYSTEM ROLE]: คุณคือ "ผู้เชี่ยวชาญด้านยุทธศาสตร์ดิจิทัล" ประจำทีมคุณธนอนันต์ เมนะสวัสดิ์ (พรรคกล้าธรรม อุดรธานี เขต 6) |
| | |
| | [ECT COMPLIANCE GUARDRAILS - กฎเหล็ก กกต.]: |
| | 1. (มาตรา 73) ห้ามเขียนข้อความเชิงสัญญาว่าจะให้เงิน ทรัพย์สิน หรือประโยชน์อื่นใดทั้งทางตรงและทางอ้อม |
| | 2. (นโยบาย) หากพูดถึงนโยบาย ให้ใช้คำว่า "นโยบายที่เราจะทำจริง" หรือ "วิสัยทัศน์เพื่อชาวเขต 6" แทนการรับปากส่วนตัว |
| | 3. (ความเท็จ) ห้ามโจมตีบุคคลอื่นด้วยข้อมูลที่อาจเป็นเท็จ หรือใช้ภาษาที่รุนแรงใส่ร้าย |
| | 4. (สถาบันฯ) ห้ามพาดพิงสถาบันพระมหากษัตริย์ไม่ว่ากรณีใดๆ |
| | 5. (ภาษา) ใช้ภาษาอีสานผสมผสานอย่างลงตัว ดูจริงใจ เป็นกันเอง แต่สุภาพและมีความเป็นมืออาชีพ |
| | 6. (ระเบียบโซเชียล) หากเป็นโพสต์ที่มีค่าใช้จ่าย ให้เน้นว่าเป็นการนำเสนอนโยบายเพื่อประโยชน์ส่วนรวม |
| | `; |
| | |
| | function setLoading(btnId, outputAreaId, isLoading) { |
| | const btn = document.getElementById(btnId); |
| | const area = document.getElementById(outputAreaId); |
| | const defaultText = { |
| | 'btnGenerateCaption': '✨ สร้างแคปชั่น (Safe Mode)', |
| | 'btnGenerateReply': '✨ ร่างคำตอบ', |
| | 'btnGenerateStrategy': '✨ วิเคราะห์แนวทางแก้เกม', |
| | 'btnGenerateSpeech': '✨ ร่างสคริปต์พูด (3 นาที)' |
| | }; |
| | |
| | if (isLoading) { |
| | btn.disabled = true; |
| | btn.innerHTML = '<span class="loader"></span> กำลังคิด...'; |
| | if(area) area.classList.remove('hidden'); |
| | } else { |
| | btn.disabled = false; |
| | btn.innerHTML = defaultText[btnId]; |
| | } |
| | } |
| | |
| | |
| | document.getElementById('btnGenerateCaption').addEventListener('click', async () => { |
| | const topic = document.getElementById('captionTopic').value; |
| | const platform = document.getElementById('captionPlatform').value; |
| | if(!topic) return; |
| | |
| | setLoading('btnGenerateCaption', 'captionOutputArea', true); |
| | const output = document.getElementById('captionOutput'); |
| | output.innerHTML = "กำลังตรวจสอบกฎ กกต. และสร้างเนื้อหา..."; |
| | |
| | try { |
| | const prompt = ` |
| | ${complianceInstruction} |
| | หัวข้อคอนเทนต์: "${topic}" |
| | แพลตฟอร์ม: "${platform}" |
| | |
| | TASK: เขียนแคปชั่นที่น่าสนใจ ดึงดูดชาวอุดรธานี เขต 6 ให้เข้าถึงนโยบายและวิสัยทัศน์ของคุณธนอนันต์ |
| | - หากเป็น TikTok ให้เน้น Hook 3 วินาทีแรก และคำคมอีสาน |
| | - หากเป็น Facebook ให้เน้นรายละเอียดที่จับต้องได้ |
| | - ทุกคำต้องผ่านกฎการหาเสียง กกต. 100% |
| | `; |
| | |
| | const result = await model.generateContent(prompt); |
| | output.innerHTML = result.response.text().trim(); |
| | } catch (err) { |
| | console.error(err); |
| | output.innerHTML = "ขออภัย เกิดข้อผิดพลาดในระบบ AI"; |
| | } finally { |
| | setLoading('btnGenerateCaption', null, false); |
| | } |
| | }); |
| | |
| | |
| | document.getElementById('btnGenerateReply').addEventListener('click', async () => { |
| | const comment = document.getElementById('commentInput').value; |
| | const tone = document.getElementById('replyTone').value; |
| | if(!comment) return; |
| | |
| | setLoading('btnGenerateReply', 'replyOutputArea', true); |
| | const output = document.getElementById('replyOutput'); |
| | output.innerHTML = "กำลังร่างคำตอบ..."; |
| | |
| | try { |
| | const prompt = ` |
| | ${complianceInstruction} |
| | คอมเมนต์จากประชาชน: "${comment}" |
| | โทนการตอบ: "${tone}" |
| | |
| | TASK: เขียนคำตอบกลับคอมเมนต์ (Reply) ในนาม "คุณธนอนันต์" (ผู้สมัคร) ตอบด้วยตนเอง |
| | - ใช้สรรพนามแทนตัวว่า "ผม" หรือ "อ้าย" (ตามความเหมาะสมกับโทน) เพื่อความจริงใจและใกล้ชิด |
| | - สั้น กระชับ ได้ใจความ เหมือนคุยกับพี่น้อง |
| | - หากเป็นคำถามเชิงลบ ให้ตอบด้วยความสุภาพ พลิกวิกฤตเป็นโอกาสในการชี้แจง |
| | - ใช้ภาษาถิ่นอีสานได้ตามความเหมาะสมกับโทนที่เลือก |
| | - ห้ามสัญญาว่าจะให้ผลตอบแทนเด็ดขาด (Safe 100%) |
| | `; |
| | |
| | const result = await model.generateContent(prompt); |
| | output.innerHTML = result.response.text().trim(); |
| | |
| | output.onclick = () => { |
| | navigator.clipboard.writeText(output.innerText); |
| | alert("คัดลอกข้อความแล้ว!"); |
| | }; |
| | } catch (err) { |
| | console.error(err); |
| | output.innerHTML = "ไม่สามารถสร้างคำตอบได้ในขณะนี้"; |
| | } finally { |
| | setLoading('btnGenerateReply', null, false); |
| | } |
| | }); |
| | |
| | |
| | document.getElementById('btnGenerateSpeech').addEventListener('click', async () => { |
| | const occasion = document.getElementById('speechOccasion').value; |
| | const location = document.getElementById('speechLocation').value; |
| | const theme = document.getElementById('speechTheme').value; |
| | |
| | if(!location && !theme) return; |
| | |
| | setLoading('btnGenerateSpeech', 'speechOutputArea', true); |
| | const output = document.getElementById('speechOutput'); |
| | output.innerHTML = "กำลังร่างสคริปต์ปราศรัย..."; |
| | |
| | try { |
| | const prompt = ` |
| | ${complianceInstruction} |
| | โอกาส/งาน: "${occasion}" |
| | สถานที่: "${location}" |
| | ประเด็นหลักที่ต้องการเน้น: "${theme}" |
| | |
| | TASK: ร่างสคริปต์คำพูด (Speech Script) สั้นๆ สำหรับคุณธนอนันต์พูดหน้างาน |
| | - เริ่มต้นด้วยการทักทายพี่น้องชาว "${location}" อย่างเป็นกันเอง (ภาษาอีสาน) |
| | - แสดงความยินดี/เสียใจ ให้เหมาะสมกับ "${occasion}" |
| | - เชื่อมโยงเข้าสู่ประเด็น "${theme}" อย่างแนบเนียน ไม่ดูเป็นการหาเสียงที่แข็งกระด้างเกินไป |
| | - จบด้วยการให้กำลังใจและการฝากเนื้อฝากตัว |
| | - ใช้เวลาพูดประมาณ 2-3 นาที |
| | `; |
| | |
| | const result = await model.generateContent(prompt); |
| | output.innerHTML = result.response.text().trim(); |
| | } catch (err) { |
| | console.error(err); |
| | output.innerHTML = "เกิดข้อผิดพลาดในการร่างสคริปต์"; |
| | } finally { |
| | setLoading('btnGenerateSpeech', null, false); |
| | } |
| | }); |
| | |
| | |
| | document.getElementById('btnGenerateStrategy').addEventListener('click', async () => { |
| | const situation = document.getElementById('crisisInput').value; |
| | if(!situation) return; |
| | |
| | setLoading('btnGenerateStrategy', 'strategyOutput', true); |
| | const output = document.getElementById('strategyOutput'); |
| | output.innerHTML = "กำลังวิเคราะห์สถานการณ์..."; |
| | |
| | try { |
| | const prompt = ` |
| | ${complianceInstruction} |
| | สถานการณ์: "${situation}" |
| | |
| | TASK: แนะนำวิธีรับมือในเชิงยุทธศาสตร์การสื่อสาร (Crisis Management) |
| | - ต้องไม่ใช่วิธีที่ผิดกฎหมายเลือกตั้ง |
| | - เน้นการชี้แจงด้วยข้อเท็จจริง |
| | - รักษาภาพลักษณ์ความ "กล้าธรรม" ของคุณธนอนันต์ |
| | `; |
| | |
| | const result = await model.generateContent(prompt); |
| | output.innerHTML = result.response.text().replace(/\n/g, '<br>'); |
| | } catch (err) { |
| | console.error(err); |
| | output.innerHTML = "ไม่สามารถวิเคราะห์ได้ในขณะนี้"; |
| | } finally { |
| | setLoading('btnGenerateStrategy', null, false); |
| | } |
| | }); |
| | |
| | |
| | window.onload = () => { |
| | const ctxSocial = document.getElementById('socialChart').getContext('2d'); |
| | new Chart(ctxSocial, { |
| | type: 'doughnut', |
| | data: { |
| | labels: ['TikTok (New Gen)', 'Facebook (Mass)', 'Line OA (Direct)', 'อื่นๆ'], |
| | datasets: [{ |
| | data: [50, 25, 20, 5], |
| | backgroundColor: ['#000000', '#1877F2', '#00B900', '#9333EA'], |
| | borderWidth: 0 |
| | }] |
| | }, |
| | options: { |
| | responsive: true, |
| | maintainAspectRatio: false, |
| | plugins: { |
| | legend: { position: 'bottom' }, |
| | title: { display: true, text: 'สัดส่วนเป้าหมายช่องทางดิจิทัล' } |
| | } |
| | } |
| | }); |
| | }; |
| | </script> |
| | </body> |
| | </html> |