Files
ykxmz/_build/fix_admin_dark2.py
T
xmz7891 7b7830d8c5 阶段3+4+5:管理页白色化 + 局域网诊断 + 全量验收
阶段3 管理页
- 清掉全部深色主题残留(地址框 #0b1220、按钮悬停 #262c36、
  删除按钮 #2d1214 等 11 处),现在 0 处深色
- 接口全部正常:health / downloads / netcheck

阶段4 局域网诊断
- 查清楚"电脑不在同一网络"是怎么回事:被控端是**对的**
  (lan_ips() 报 ['192.168.2.64', '169.254.83.107'],真实地址排第一),
  是手表当时真不在 192.168.2.x —— 可能连了 5G 频段的另一个路由器,或开着移动数据
- 所以改了手表的提示:不再只说"不在同一网络",
  而是把**双方地址都打出来**,用户一眼能看出是网段不同还是连错 WiFi
- 端到端验证局域网路径:认证 1 ms,功能列表 207 项

阶段1 结论修正(一天内推翻自己两次,如实记录)
- 第一次判断"优选 IP 无用":错。半小时内确实能避开超时 IP
- 第二次固定优选 IP:也错。那些实测 138ms 的 IP 半小时后全不通了
  —— Cloudflare anycast 可达性随运营商路由变化,固定 IP 等于钉死到会失效的地址
- 最终:不固定,靠 GeoDNS + cloudflared 重试 + ha-connections 2 冗余
- 撤销后立即变好:连接稳定 2 条、超时告警 0 次、设备侧延迟 4.40s -> 1.66s
- **真正的瓶颈**:分段实测发现本机到 Cloudflare 的**裸 RTT 就 1439 ms**,
  比经隧道的请求(1215 ms)还慢。说明瓶颈是这条网络的 4G 上行本身,
  不是设备的隧道。公网侧已无优化空间。
- 局域网 118 ms vs 公网 1215 ms,快 10 倍 —— 这才是该走的路

阶段5 验收
- 全量回归 29 项全通过
- 设备侧验收 38 项全通过
- 成品:setup exe 14.37 MB / server zip / watch apk,已同步到设备下载区
2026-10-07 00:13:10 +08:00

80 lines
2.5 KiB
Python

# -*- coding: utf-8 -*-
r'''清掉管理页深色残留(修正版:CSS 在 f-string 里,大括号是双写的)。
上一版只改成功了 4 处,因为我的匹配串用了单大括号 {{ }},
而 relay.py 里那段 CSS 在 f-string 里,实际是 {{{{ }}}}。
'''
from __future__ import annotations
import ast
import re
import sys
from pathlib import Path
RELAY = Path(r"C:\Users\shu\Desktop\deepseekagent\LanRemote\relay" r"\relay.py")
# 用「深色值 -> 浅色值」直接替换,不管外层大括号怎么写的。
# 这样最稳,不会再被 f-string 的花括号坑到。
COLOR_MAP = [
("#262c36", "#f3f4f6"), # 按钮悬停底色
("#484f58", "#d0d7de"), # 边框/圆点
("#1b222c", "#f6f8fa"), # 表格行悬停
("#1c2733", "#eff6ff"), # 选中行
("#213042", "#dbeafe"), # 选中行悬停
("#2d1214", "#fff5f5"), # 删除按钮底
("#6e2b2b", "#ffc9c9"), # 删除按钮边
("#ff7b72", "#c92a2a"), # 删除按钮字
("#4a1a1e", "#ffe3e3"), # 删除悬停底
("#ffa198", "#a61b1b"), # 删除悬停字
("#4a95f8", "#1d4ed8"), # 主按钮悬停
("#0b1220", "#f6f8fa"), # 地址框底
("#1f6feb44", "#d0d7de"), # 地址框边
("#0008", "#0002"), # 提示条阴影
]
# 深色主题才用的值,替换后不该再有
DARK_LEFTOVERS = ["#0b1220", "#262c36", "#1b222c", "#1c2733", "#213042",
"#2d1214", "#4a1a1e", "#484f58", "#0d1117"]
def main() -> int:
text = RELAY.read_text(encoding="utf-8")
counts = {}
for dark, light in COLOR_MAP:
n = text.count(dark)
if n:
text = text.replace(dark, light)
counts[dark] = (light, n)
if counts:
RELAY.write_text(text, encoding="utf-8", newline="\n")
print(" 换了这些颜色:")
for dark, (light, n) in counts.items():
print(" %s -> %s (%d 处)" % (dark, light, n))
else:
print(" 没有要改的")
try:
ast.parse(text)
print(" 语法 OK")
except SyntaxError as exc:
print(" [失败] 语法错误: 行 %s: %s" % (exc.lineno, exc.msg))
return 1
print()
print(" 残留深色值:")
left = [c for c in DARK_LEFTOVERS if c in text]
if left:
for c in left:
print(" %s:" % c)
for m in re.finditer(r".*" + re.escape(c) + r".*", text):
print(" %s" % m.group(0).strip()[:76])
else:
print(" 无 ✓")
return 0
if __name__ == "__main__":
sys.exit(main())