| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- # generate-test-report.ps1
- # 使用模拟数据测试 html-report-generator skill 的输出效果
- # Usage: .\workflows\generate-test-report.ps1 [-MockDataPath <path>]
- param(
- [string]$MockDataPath = (Join-Path $PSScriptRoot "output\mock-report-data.json")
- )
- $templatePath = Join-Path $PSScriptRoot "templates\report_template.html"
- $outputPath = Join-Path $PSScriptRoot "output\test-report-home-fragrance.html"
- # ============================================================
- # 验证文件存在
- # ============================================================
- if (-not (Test-Path $templatePath)) {
- Write-Error "Template not found: $templatePath"
- exit 1
- }
- if (-not (Test-Path $MockDataPath)) {
- Write-Error "Mock data not found: $MockDataPath"
- exit 1
- }
- $outputDir = Split-Path $outputPath
- if (-not (Test-Path $outputDir)) {
- New-Item -ItemType Directory -Path $outputDir -Force | Out-Null
- }
- # ============================================================
- # STEP 1: 读取 Mock 数据 JSON(UTF-8)
- # ============================================================
- $mockJson = [System.IO.File]::ReadAllText($MockDataPath, [System.Text.Encoding]::UTF8)
- $mockObj = $mockJson | ConvertFrom-Json
- $templateVars = $mockObj.templateVars
- $reportDataObj = $mockObj.reportData
- $reportDataStr = ($reportDataObj | ConvertTo-Json -Depth 20 -Compress:$false)
- # ============================================================
- # STEP 2: 读取 HTML 模板
- # ============================================================
- $html = [System.IO.File]::ReadAllText($templatePath, [System.Text.Encoding]::UTF8)
- # ============================================================
- # STEP 3: 替换 {{placeholder}} 变量
- # ============================================================
- $templateVars.PSObject.Properties | ForEach-Object {
- $html = $html.Replace("{{$($_.Name)}}", $_.Value)
- }
- # ============================================================
- # STEP 4: 注入 REPORT_DATA JSON
- # ============================================================
- $html = $html.Replace('/*{{REPORT_DATA_JSON}}*/', $reportDataStr)
- # ============================================================
- # STEP 5: 输出 HTML 文件(UTF-8 无 BOM)
- # ============================================================
- $utf8NoBom = New-Object System.Text.UTF8Encoding($false)
- [System.IO.File]::WriteAllText($outputPath, $html, $utf8NoBom)
- Write-Host "========================================"
- Write-Host " HTML Report Test Generated"
- Write-Host "========================================"
- Write-Host ""
- Write-Host "Output: $outputPath" -ForegroundColor Green
- Write-Host "Open in browser to preview the 9-slide report."
- Write-Host ""
- Write-Host "Template vars filled:" -ForegroundColor Cyan
- $templateVars.PSObject.Properties | ForEach-Object {
- Write-Host " {{$($_.Name)}} = $($_.Value)"
- }
- Write-Host ""
- Write-Host "REPORT_DATA fields injected:" -ForegroundColor Cyan
- $reportDataObj.PSObject.Properties.Name | ForEach-Object {
- Write-Host " $_"
- }
|