diff --git a/app/tmpl/page.tsx b/app/tmpl/page.tsx index fa31778..c394d9f 100644 --- a/app/tmpl/page.tsx +++ b/app/tmpl/page.tsx @@ -15,7 +15,7 @@ export default function HomePage() { const handleTmplSelect = (template: string, data: string) => { //console.log('Location Selected:', { template, data }); }; - const handleInput = (e: ChangeEvent)=>{ + const handleInput = (e: ChangeEvent) => { // console.log(e.target) return true; } @@ -24,8 +24,8 @@ export default function HomePage() {

ตัวอย่างการใช้ สร้างเอกสารจาก Template

- ตัวอย่าง Frontend ส่งข้อมูลผ่าน <form>(POST) หรือ <a>(GET) - เพื่อรองรับ Vanilla JavaScript และ Classic Framework ใช้การเปลี่ยนหน้าเพื่อดาว์นโหลดไฟล์ + ตัวอย่าง Frontend ส่งข้อมูลผ่าน <form>(POST) หรือ <a>(GET) + เพื่อรองรับ Vanilla JavaScript และ Classic Framework ใช้การเปลี่ยนหน้าเพื่อดาว์นโหลดไฟล์ ตัวอย่างหน้าแบบ Plain HTML
@@ -35,10 +35,10 @@ export default function HomePage() { label1="Template(tid):" label2="ข้อมูล(fid):" onSelectChange={handleTmplSelect} />
- uid: + uid:
- uname: + uname:
); } \ No newline at end of file diff --git a/app/wordaddin/install-word-addins.ps1/route.ts b/app/wordaddin/install-word-addins.ps1/route.ts new file mode 100644 index 0000000..5c34392 --- /dev/null +++ b/app/wordaddin/install-word-addins.ps1/route.ts @@ -0,0 +1,17 @@ +import fs from "node:fs"; +import path from "node:path"; +import { requestOrigin } from "@/utils/request-origin"; +// GET /wordaddin/install-word-addin.ps1 — สำหรับติดตั้ง Word add-in +const DEV_ORIGIN = "https://localhost:3000"; +const TEMPLATE = path.join(process.cwd(),"app","wordaddin","install-word-addins.ps1", "template.ps1"); +export function GET(req: Request): Response { + const template = fs.readFileSync(TEMPLATE, "utf8"); + const manifest = template.replaceAll(DEV_ORIGIN, requestOrigin(req)); + return new Response(manifest, { + headers: { + "content-type": "text/plain; charset=utf-8", + "Content-Disposition": "attachment; filename=install-word-addins.ps1", + "cache-control": "no-store", + }, + }); +} diff --git a/app/wordaddin/install-word-addins.ps1/template.ps1 b/app/wordaddin/install-word-addins.ps1/template.ps1 new file mode 100644 index 0000000..cfcd3b3 --- /dev/null +++ b/app/wordaddin/install-word-addins.ps1/template.ps1 @@ -0,0 +1,98 @@ +# ติดตั้ง (sideload) / ถอด Word add-in "e-Court Documents Versioning" บน Windows +# เวอร์ชัน PowerShell แบบส่งให้เครื่องทดสอบที่ไม่มี Node/repo — คู่หูของ +# scripts/install-wordaddin.mjs (รันใน repo) และ scripts/install-wordaddin.sh (macOS) +# กลไกเดียวกันทั้งสามไฟล์: โหลด manifest จาก server เก็บไว้ +# %USERPROFILE%\Documents\wordaddin-manifest\ แล้วจดทะเบียน registry +# HKCU\Software\Microsoft\Office\16.0\Wef\Developer (กลไกเดียวกับ office-addin-dev-settings) +# +# ใช้: powershell -ExecutionPolicy Bypass -File install-wordaddin.ps1 [-Url ] [-Remove] +# -Url default https://ecourt-note.chamomind.com/docedit/wordaddin/manifest.xml +# -Remove ถอดการติดตั้ง +# +# (ไฟล์นี้ต้องมี BOM — Windows PowerShell 5.1 อ่าน UTF-8 ไม่มี BOM เป็น ANSI แล้วข้อความไทยพัง) +# หลังลง/ถอดต้อง restart Word ทุกครั้ง · รายละเอียดเต็ม: docs/WORDADDIN-DEV.md + +param( + [string]$Url = "https://localhost:3000/docedit/wordaddin/manifest.xml", + [switch]$Remove, + [switch]$Install +) + +$ErrorActionPreference = "Stop" +# ให้ console พิมพ์ไทย/✓ ถูกต้อง และบังคับ TLS 1.2 (PS 5.1 บางเครื่อง default ยังเป็น TLS 1.0) +try { [Console]::OutputEncoding = [System.Text.Encoding]::UTF8 } catch { } +[Net.ServicePointManager]::SecurityProtocol = ` + [Net.ServicePointManager]::SecurityProtocol -bor [Net.SecurityProtocolType]::Tls12 + +$Prefix = "[install-addin]" +$DevKeyCmd = "HKCU\Software\Microsoft\Office\16.0\Wef\Developer" +$ManifestDir = Join-Path $env:USERPROFILE "Documents\wordaddin-manifest" +$ManifestPath = Join-Path $ManifestDir "manifest.xml" + +function Fail($message) { + Write-Host "$Prefix ✗ $message" -ForegroundColor Red + exit 1 +} + + +if ($Remove) { + $Prefix = "[Uninstall-addin]" + Write-Host "$Prefix platform: win32 · โหมดถอดการติดตั้ง" + if (-not (Test-Path $ManifestPath)) { + Fail "ไม่พบ manifest ที่เก็บไว้ ($ManifestPath) จึงไม่รู้ GUID ของ add-in — ลบเองได้ที่: reg delete `"$DevKeyCmd`" /v /f" + } + $stored = Get-Content -Raw -Encoding UTF8 $ManifestPath + if ($stored -notmatch "([0-9a-fA-F-]{36})") { + Fail "อ่าน GUID จาก $ManifestPath ไม่ได้" + } + $guid = $Matches[1].ToLower() + & reg.exe delete $DevKeyCmd /v $guid /f | Out-Null + if ($LASTEXITCODE -ne 0) { + Fail "reg delete ไม่สำเร็จ (exit $LASTEXITCODE) — ลบเองได้ที่: reg delete `"$DevKeyCmd`" /v $guid /f" + } + Remove-Item $ManifestPath -ErrorAction SilentlyContinue + Write-Host "$Prefix ✓ ถอดการติดตั้งแล้ว (registry $guid + ไฟล์ $ManifestPath)" + Write-Host "$Prefix ✓ เสร็จ" + exit 0 +} + +if ($Install) { + Write-Host "$Prefix platform: win32" + Write-Host "Install from $Url" + try { + $response = Invoke-WebRequest -Uri $Url -UseBasicParsing -TimeoutSec 30 + } catch { + Fail "โหลด manifest จาก $Url ไม่ได้ ($_)" + } + $xml = $response.Content + if ($xml -notmatch "([0-9a-fA-F-]{36})") { + Fail "หา (GUID) ใน manifest ไม่เจอจาก $Url" + } + $guid = $Matches[1].ToLower() + + New-Item -ItemType Directory -Force -Path $ManifestDir | Out-Null + # เขียน UTF-8 ไม่มี BOM — ให้ manifest เหมือนต้นฉบับบน server เป๊ะ + [System.IO.File]::WriteAllText($ManifestPath, $xml, (New-Object System.Text.UTF8Encoding($false))) + Write-Host "$Prefix ✓ เก็บ manifest ไว้ที่ $ManifestPath" + + & reg.exe add $DevKeyCmd /v $guid /t REG_SZ /d $ManifestPath /f | Out-Null + if ($LASTEXITCODE -ne 0) { + Fail "เขียน registry ไม่สำเร็จ (exit $LASTEXITCODE)" + } + Write-Host "$Prefix ✓ จดทะเบียน add-in ใน registry ($DevKeyCmd → $guid)" + Write-Host "$Prefix ✓ เสร็จ" + # Print-NextSteps + Write-Host "" + Write-Host "ขั้นต่อไป:" + Write-Host " 1. restart Word ให้ครบทุกหน้าต่าง (จำเป็นทุกครั้งหลังติดตั้ง/ถอนการติดตั้ง)" + Write-Host ' 2. เมนู Home > Add-ins> กดแล้วเลือก "e-Court Documents Versioning"' + Write-Host " 3. เปิดไฟล์ .docx ที่มี ticket ที่ยังไม่หมดอายุ เพื่อเริ่มทดสอบ" + exit 0 +} +Write-Host "วิธีการใช้:" +Write-Host "ปิด Microsoft Word แล้วเรียกคำสั่งนี้" +Write-Host " install-word-addins [-Install] [-Remove] [-Url http://domain/manifest.yaml]" +Write-Host "ถ้าติดสิทธิ์ในการรันสคริปต์ให้เรียกคำสั่งนี้:"