chore: 解决 stash pop 与 device-link 合并冲突并收回本地 WIP

保留 ConnectionHub(deviceLink 导入/ECAT 自启/pmHold 幂等)与主线
WIP(断线清指标、AUTO_POLL=false、boot_ecat 等)。
This commit is contained in:
cbb
2026-09-16 12:31:39 +08:00
parent 0c772f5924
commit e98950cde2
12 changed files with 1026 additions and 248 deletions
+125 -2
View File
@@ -249,6 +249,69 @@ select option { background: var(--bg-panel); color: var(--text); }
color: #04142b;
box-shadow: 0 4px 16px rgba(95,168,255,.3), inset 0 1px 0 rgba(255,255,255,.25);
}
#modeEcatBtn.btn-primary {
background: linear-gradient(135deg, #8b5cf6 0%, #6366f1 100%);
color: #0f0a1f;
box-shadow: 0 4px 16px rgba(139,92,246,.3), inset 0 1px 0 rgba(255,255,255,.25);
}
#modeWifiBtn.btn-outline {
border-color: rgba(47,216,193,.45);
color: var(--esp32);
}
#modeBleBtn.btn-outline {
border-color: rgba(95,168,255,.45);
color: var(--ble);
}
#modeEcatBtn.btn-outline {
border-color: rgba(139,92,246,.45);
color: #a78bfa;
}
#modeWifiBtn.btn-outline:hover:not(:disabled) {
border-color: var(--esp32);
background: rgba(47,216,193,.08);
color: var(--esp32);
}
#modeBleBtn.btn-outline:hover:not(:disabled) {
border-color: var(--ble);
background: rgba(95,168,255,.08);
color: var(--ble);
}
#modeEcatBtn.btn-outline:hover:not(:disabled) {
border-color: #8b5cf6;
background: rgba(139,92,246,.08);
color: #a78bfa;
}
/* 升级目标:左右两个等宽扁按钮(GD32 琥珀 · ESP32 青绿) */
.target-tab-row {
display: flex;
gap: 8px;
margin-bottom: 14px;
}
.target-tab-btn {
flex: 1 1 0;
min-width: 0;
min-height: 40px;
padding: 10px 14px;
font-size: 14px;
font-weight: 700;
letter-spacing: .04em;
flex-direction: row;
gap: 8px;
border-radius: var(--radius-sm);
}
.target-tab-btn .target-tab-ico {
font-size: 15px;
line-height: 1;
opacity: .9;
}
.target-tab-btn .target-tab-txt {
line-height: 1.1;
}
.target-tab-btn.btn-outline {
border-width: 1.5px;
background: rgba(255,255,255,.03);
}
#targetGd32Tab.btn-primary {
background: linear-gradient(135deg, var(--gd32) 0%, #f59e0b 100%);
color: #2b1d02;
@@ -257,6 +320,58 @@ select option { background: var(--bg-panel); color: var(--text); }
#targetEsp32Tab.btn-primary {
background: linear-gradient(135deg, var(--esp32) 0%, #14b8a6 100%);
color: #04231e;
box-shadow: 0 4px 16px rgba(47,216,193,.28), inset 0 1px 0 rgba(255,255,255,.25);
}
/* 未选中时用各自子系统的淡描边,避免两个灰按钮看不出身份 */
#targetGd32Tab.btn-outline {
border-color: rgba(252,191,63,.45);
color: var(--gd32);
}
#targetEsp32Tab.btn-outline {
border-color: rgba(47,216,193,.45);
color: var(--esp32);
}
#targetGd32Tab.btn-outline:hover:not(:disabled) {
border-color: var(--gd32);
background: rgba(252,191,63,.08);
color: var(--gd32);
}
#targetEsp32Tab.btn-outline:hover:not(:disabled) {
border-color: var(--esp32);
background: rgba(47,216,193,.08);
color: var(--esp32);
}
#ppEcatOta.active {
color: #2b1d02;
background: linear-gradient(135deg, var(--gd32), #f59e0b);
box-shadow: 0 2px 12px rgba(252,191,63,.35);
}
/* EtherCAT 连接说明 + 探测:与卡片内其他控件同一套字重/字距 */
.ecat-mode-note {
margin: 0 0 12px;
padding: 10px 12px;
border-radius: var(--radius-sm);
border: 1px solid var(--border-subtle);
background: rgba(252,191,63,.06);
font-size: 12px;
line-height: 1.7;
color: var(--text-dim);
}
.ecat-mode-note b {
color: var(--gd32);
font-weight: 600;
}
#bootEcatProbeBtn {
margin-bottom: 10px;
border-color: rgba(252,191,63,.4);
color: var(--gd32);
background: rgba(252,191,63,.05);
}
#bootEcatProbeBtn:hover:not(:disabled) {
border-color: var(--gd32);
background: rgba(252,191,63,.12);
color: var(--gd32-hi);
}
/* GD32 OTA 大按钮 = 琥珀(区别于 ESP32 青绿) */
#uploadGd32Btn {
@@ -264,6 +379,14 @@ select option { background: var(--bg-panel); color: var(--text); }
color: #2b1d02;
box-shadow: 0 6px 20px rgba(252,191,63,.3), inset 0 1px 0 rgba(255,255,255,.3);
}
#bootEcatRunBtn {
background: linear-gradient(135deg, var(--gd32) 0%, #f59e0b 100%);
color: #2b1d02;
box-shadow: 0 6px 20px rgba(252,191,63,.3), inset 0 1px 0 rgba(255,255,255,.3);
}
#bootEcatRunBtn:disabled {
opacity: .38;
}
#uploadEsp32Btn {
box-shadow: 0 6px 20px rgba(47,216,193,.32), inset 0 1px 0 rgba(255,255,255,.28);
}
@@ -275,10 +398,10 @@ select option { background: var(--bg-panel); color: var(--text); }
background: var(--bg-elevated); border: 1px solid var(--border);
font-size: 13px; font-weight: 500;
}
.conn-indicator .light { width: 10px; height: 10px; border-radius: 50%; flex-shrink: 0; }
.conn-indicator .light { width: 10px; height: 10px; border-radius: 50%; flex-shrink: 0; background: var(--text-label); }
.conn-indicator.ok .light { background: var(--green); box-shadow: 0 0 8px rgba(61,220,142,.6); }
.conn-indicator.err .light { background: var(--red); box-shadow: 0 0 8px rgba(255,107,107,.5); }
.conn-indicator.warn .light { background: var(--amber); }
.conn-indicator.warn .light { background: var(--amber); box-shadow: 0 0 8px rgba(252,191,63,.45); }
.helper-note {
margin-top: 10px; padding: 10px 13px;