You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
dianshang-qianduan/convert-theme.ps1

226 lines
7.8 KiB
PowerShell

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# 仅在 <style> 块内进行深色->浅色科技蓝的颜色替换
$ErrorActionPreference = 'Stop'
$files = @(
'd:\TZ\dianshang-qianduan\src\views\channel\supplier.vue',
'd:\TZ\dianshang-qianduan\src\views\channel\index.vue',
'd:\TZ\dianshang-qianduan\src\views\test\promotion.vue',
'd:\TZ\dianshang-qianduan\src\views\test\index.vue'
)
# 规则用 "pattern|||replacement" 形式,避免大型哈希表数组解析问题
$rawRules = @'
#06111d|||#ffffff
rgba\(\s*8\s*,\s*18\s*,\s*28\s*,\s*\.6\s*\)|||#f0f6fd
rgba\(\s*17\s*,\s*126\s*,\s*178\s*,\s*\.36\s*\)|||#e3f2fd
rgba\(\s*1\s*,\s*18\s*,\s*31\s*,\s*\.62\s*\)|||#f0f6fd
rgba\(\s*3\s*,\s*27\s*,\s*43\s*,\s*\.(52|56|58|72)\s*\)|||#f0f6fd
rgba\(\s*8\s*,\s*92\s*,\s*131\s*,\s*\.52\s*\)|||#bbdefb
rgba\(\s*3\s*,\s*25\s*,\s*40\s*,\s*\.8\s*\)|||#e3f2fd
rgba\(\s*0\s*,\s*25\s*,\s*42\s*,\s*\.64\s*\)|||#f0f6fd
rgba\(\s*4\s*,\s*23\s*,\s*36\s*,\s*\.68\s*\)|||#f0f6fd
rgba\(\s*2\s*,\s*15\s*,\s*24\s*,\s*\.7\s*\)|||#ffffff
rgba\(\s*15\s*,\s*48\s*,\s*66\s*,\s*\.42\s*\)|||#e3f2fd
rgba\(\s*2\s*,\s*21\s*,\s*34\s*,\s*\.58\s*\)|||#ffffff
rgba\(\s*7\s*,\s*49\s*,\s*72\s*,\s*\.(74|26)\s*\)|||#e3f2fd
rgba\(\s*8\s*,\s*42\s*,\s*64\s*,\s*\.36\s*\)|||#e3f2fd
rgba\(\s*7\s*,\s*78\s*,\s*108\s*,\s*\.55\s*\)|||#bbdefb
rgba\(\s*7\s*,\s*116\s*,\s*161\s*,\s*\.94\s*\)|||#1565c0
rgba\(\s*16\s*,\s*85\s*,\s*121\s*,\s*\.2\s*\)|||#e3f2fd
rgba\(\s*1\s*,\s*14\s*,\s*26\s*,\s*\.72\s*\)|||#f0f6fd
rgba\(\s*4\s*,\s*31\s*,\s*46\s*,\s*0?\.78\s*\)|||#f0f6fd
rgba\(\s*3\s*,\s*20\s*,\s*31\s*,\s*0?\.95\s*\)|||#ffffff
rgba\(\s*2\s*,\s*20\s*,\s*31\s*,\s*0?\.82\s*\)|||#ffffff
rgba\(\s*1\s*,\s*17\s*,\s*27\s*,\s*0?\.3\s*\)|||#f0f6fd
rgba\(\s*3\s*,\s*17\s*,\s*27\s*,\s*0?\.94\s*\)|||#f0f6fd
rgba\(\s*5\s*,\s*19\s*,\s*30\s*,\s*0?\.98\s*\)|||#ffffff
rgba\(\s*4\s*,\s*39\s*,\s*58\s*,\s*\.9\s*\)|||#f0f6fd
rgba\(\s*2\s*,\s*20\s*,\s*33\s*,\s*\.94\s*\)|||#ffffff
rgba\(\s*8\s*,\s*55\s*,\s*82\s*,\s*\.98\s*\)|||#1565c0
rgba\(\s*13\s*,\s*64\s*,\s*88\s*,\s*\.62\s*\)|||#e3f2fd
rgba\(\s*6\s*,\s*42\s*,\s*61\s*,\s*\.58\s*\)|||#f0f6fd
rgba\(\s*1\s*,\s*18\s*,\s*31\s*,\s*\.42\s*\)|||#f0f6fd
rgba\(\s*15\s*,\s*129\s*,\s*189\s*,\s*0?\.16\s*\)|||rgba(30, 136, 229, 0.12)
#102233|||#ffffff
#0f1a24|||#ffffff
rgba\(\s*4\s*,\s*109\s*,\s*155\s*,\s*0?\.78\s*\)|||#1e88e5
rgba\(\s*5\s*,\s*62\s*,\s*102\s*,\s*0?\.64\s*\)|||#1565c0
rgba\(\s*7\s*,\s*156\s*,\s*207\s*,\s*\.85\s*\)|||#1e88e5
rgba\(\s*13\s*,\s*105\s*,\s*161\s*,\s*\.92\s*\)|||#1565c0
#08b7e8|||#1e88e5
#1375d0|||#1565c0
#0a6b9e|||#1e88e5
#0a5c86|||#1565c0
#0b84bd|||#1e88e5
#096491|||#1565c0
#168ab9|||#1e88e5
#0c628d|||#1565c0
#1b9ece|||#42a5f5
#0f709f|||#1e88e5
#0f76a9|||#1e88e5
#0a567e|||#1565c0
#0e96ca|||#1565c0
#18b6ec|||#1e88e5
#0c91c8|||#1565c0
#0c9dd6|||#1565c0
#63dcff|||#1e88e5
#71dfff|||#1e88e5
#53d8fb|||#1e88e5
#72e8ff|||#1e88e5
#52cef6|||#1e88e5
#6de4ff|||#1e88e5
#71dcfb|||#1e88e5
#62cef1|||#1565c0
#7ce4ff|||#1e88e5
#48d5ff|||#1e88e5
#91e2ff|||#1565c0
#66b6d4|||#1565c0
#78cfe9|||#1565c0
#7ec7e7|||#1565c0
#bdefff|||#1565c0
#b7dfed|||#1565c0
#a8d9eb|||#1565c0
#2c83aa|||#1e88e5
#ffffff|||#1e3a5f
#fff\b|||#1e3a5f
#eef5ff|||#1e3a5f
#dce9f2|||#2c4a6a
#d7ecff|||#2c4a6a
#dff5ff|||#2c4a6a
#dffbff|||#2c4a6a
#dff8ff|||#2c4a6a
#effaff|||#1e3a5f
#effbff|||#1e3a5f
#e2f3ff|||#1e3a5f
#e7f6fd|||#1e3a5f
#e7f5fb|||#1e3a5f
#f3fbff|||#1e3a5f
#ebf8ff|||#1e3a5f
#e9faff|||#1e3a5f
#e9fbff|||#1e3a5f
#e9f8ff|||#1e3a5f
#eaf7ff|||#1e3a5f
#edfbff|||#1e3a5f
#cfe2ec|||#2c4a6a
#d6ecf8|||#2c4a6a
#c8e5f1|||#2c4a6a
#d7f0fa|||#2c4a6a
#d8f2ff|||#2c4a6a
#9db4c4|||#5a7a9a
#93adbd|||#5a7a9a
#9db8c6|||#5a7a9a
#b7cbd6|||#5a7a9a
#95b2c3|||#5a7a9a
#99b5c7|||#5a7a9a
#8fa8b8|||#5a7a9a
#8cb7cb|||#5a7a9a
#9ab3d0|||#5a7a9a
#a8cde0|||#5a7a9a
#a6c4d9|||#5a7a9a
#7194a8|||#5a7a9a
#97bdce|||#5a7a9a
#d7edf8|||#2c4a6a
rgba\(\s*0\s*,\s*180\s*,\s*255\s*,\s*\.(2|25|3)\s*\)|||#cfe2f5
rgba\(\s*99\s*,\s*217\s*,\s*255\s*,\s*\.55\s*\)|||#cfe2f5
rgba\(\s*82\s*,\s*174\s*,\s*226\s*,\s*\.42\s*\)|||#cfe2f5
rgba\(\s*71\s*,\s*167\s*,\s*209\s*,\s*\.28\s*\)|||#cfe2f5
rgba\(\s*68\s*,\s*141\s*,\s*177\s*,\s*\.35\s*\)|||#cfe2f5
rgba\(\s*89\s*,\s*223\s*,\s*255\s*,\s*\.82\s*\)|||#1e88e5
rgba\(\s*101\s*,\s*176\s*,\s*208\s*,\s*\.6\s*\)|||#cfe2f5
rgba\(\s*99\s*,\s*183\s*,\s*222\s*,\s*\.(35|36|42|46)\s*\)|||#cfe2f5
rgba\(\s*111\s*,\s*190\s*,\s*225\s*,\s*\.3\s*\)|||#cfe2f5
rgba\(\s*54\s*,\s*174\s*,\s*221\s*,\s*0?\.42\s*\)|||#cfe2f5
rgba\(\s*63\s*,\s*164\s*,\s*207\s*,\s*0?\.36\s*\)|||#cfe2f5
rgba\(\s*76\s*,\s*169\s*,\s*211\s*,\s*0?\.48\s*\)|||#cfe2f5
rgba\(\s*55\s*,\s*174\s*,\s*221\s*,\s*0?\.(24|72)\s*\)|||#1e88e5
rgba\(\s*44\s*,\s*141\s*,\s*182\s*,\s*0?\.3\s*\)|||#cfe2f5
rgba\(\s*92\s*,\s*224\s*,\s*255\s*,\s*\.7\s*\)|||#1e88e5
rgba\(\s*89\s*,\s*226\s*,\s*255\s*,\s*0?\.85\s*\)|||#1e88e5
rgba\(\s*113\s*,\s*223\s*,\s*255\s*,\s*\.55\s*\)|||#cfe2f5
#2b5c73|||#cfe2f5
#315f75|||#cfe2f5
#73b1ce|||#5a7a9a
rgba\(\s*86\s*,\s*198\s*,\s*235\s*,\s*\.48\s*\)|||#cfe2f5
rgba\(\s*77\s*,\s*167\s*,\s*220\s*,\s*\.54\s*\)|||#cfe2f5
rgba\(\s*98\s*,\s*169\s*,\s*201\s*,\s*\.34\s*\)|||#cfe2f5
rgba\(\s*169\s*,\s*229\s*,\s*255\s*,\s*\.08\s*\)|||rgba(30, 136, 229, 0.1)
rgba\(\s*129\s*,\s*231\s*,\s*255\s*,\s*0?\.12\s*\)|||rgba(30, 136, 229, 0.12)
rgba\(\s*77\s*,\s*213\s*,\s*255\s*,\s*\.22\s*\)|||rgba(30, 136, 229, 0.18)
rgba\(\s*25\s*,\s*179\s*,\s*237\s*,\s*\.14\s*\)|||rgba(30, 136, 229, 0.12)
rgba\(\s*46\s*,\s*208\s*,\s*255\s*,\s*\.58\s*\)|||rgba(30, 136, 229, 0.35)
rgba\(\s*77\s*,\s*215\s*,\s*255\s*,\s*\.(13|4)\s*\)|||rgba(30, 136, 229, 0.15)
rgba\(\s*24\s*,\s*183\s*,\s*235\s*,\s*\.22\s*\)|||rgba(30, 136, 229, 0.2)
rgba\(\s*176\s*,\s*246\s*,\s*255\s*,\s*\.2\s*\)|||rgba(30, 136, 229, 0.15)
rgba\(\s*145\s*,\s*233\s*,\s*255\s*,\s*\.08\s*\)|||rgba(30, 136, 229, 0.08)
rgba\(\s*135\s*,\s*221\s*,\s*255\s*,\s*\.04\s*\)|||rgba(30, 136, 229, 0.05)
rgba\(\s*152\s*,\s*239\s*,\s*255\s*,\s*\.16\s*\)|||rgba(30, 136, 229, 0.12)
rgba\(\s*38\s*,\s*174\s*,\s*233\s*,\s*\.08\s*\)|||rgba(30, 136, 229, 0.08)
rgba\(\s*0\s*,\s*120\s*,\s*170\s*,\s*\.22\s*\)|||rgba(30, 136, 229, 0.18)
rgba\(\s*50\s*,\s*205\s*,\s*255\s*,\s*0?\.12\s*\)|||rgba(30, 136, 229, 0.12)
#1cb8e9|||#1e88e5
rgba\(\s*0\s*,\s*0\s*,\s*0\s*,\s*\.3\s*\)|||rgba(0, 0, 0, 0.05)
#062b37|||#ffffff
#062f30|||#ffffff
#0bb2ed|||#1e88e5
#a8f3ff|||#1e88e5
#dff7ff|||#2c4a6a
rgba\(\s*9\s*,\s*125\s*,\s*177\s*,\s*\.7\s*\)|||#1e88e5
'@
$map = @{}
$alts = New-Object System.Collections.Generic.List[string]
$i = 0
foreach ($line in ($rawRules -split "`r?`n")) {
$t = $line.Trim()
if ($t -eq '') { continue }
$idx = $t.IndexOf('|||')
if ($idx -lt 0) { continue }
$pat = $t.Substring(0, $idx)
$rep = $t.Substring($idx + 3)
$name = "g$i"
if (-not $map.ContainsKey($name)) {
$map[$name] = $rep
$alts.Add("(?<$name>$pat)")
$i++
}
}
Write-Host ("Loaded " + $map.Count + " rules")
$combined = $alts -join '|'
$combinedRegex = [regex]::new($combined)
function Apply-Rules {
param([string]$text)
$text = $combinedRegex.Replace($text, {
param($m)
foreach ($name in $map.Keys) {
if ($m.Groups[$name].Success) {
return $map[$name]
}
}
return $m.Value
})
# 对比度修正:蓝色背景上的文字必须为白色
# color 在前,background 在后
$text = $text -replace '(color:\s*)#1e3a5f(;\s*background:\s*(?:#1565c0|linear-gradient))', '$1#ffffff$2'
# background 在前(蓝色),color 在后
$text = $text -replace '(background:\s*(?:#1565c0|linear-gradient[^;]*);\s*color:\s*)#1e3a5f', '$1#ffffff'
return $text
}
foreach ($file in $files) {
$content = Get-Content -Raw -LiteralPath $file -Encoding UTF8
$pattern = '(?s)(<style[^>]*>)(.*?)(</style>)'
$newContent = [regex]::Replace($content, $pattern, {
param($m)
$inner = Apply-Rules $m.Groups[2].Value
return $m.Groups[1].Value + $inner + $m.Groups[3].Value
})
if ($newContent -ne $content) {
Set-Content -LiteralPath $file -Value $newContent -Encoding UTF8 -NoNewline
Write-Host "UPDATED: $file"
} else {
Write-Host "NOCHANGE: $file"
}
}
Write-Host "DONE"