v0.4.0: Gateway 进程守护、配置自愈、双配置同步、流式超时、模型删除安全切换

This commit is contained in:
晴天
2026-03-05 20:44:47 +08:00
parent d27d5cc8af
commit 79cd15e1c4
30 changed files with 2257 additions and 295 deletions

View File

@@ -687,6 +687,78 @@
backdrop-filter: blur(4px);
}
/* 消息时间戳 */
.msg-time {
font-size: 11px;
color: var(--text-tertiary);
margin-top: 4px;
padding: 0 4px;
}
.msg-user .msg-time { text-align: right; }
.msg-ai .msg-time { text-align: left; }
/* 消息内图片 */
.msg-img {
max-width: 200px;
max-height: 200px;
border-radius: 6px;
cursor: pointer;
object-fit: cover;
}
/* 消息内视频 */
.msg-video {
max-width: 320px;
max-height: 240px;
border-radius: 6px;
margin-top: 8px;
}
/* 消息内音频 */
.msg-audio {
margin-top: 8px;
max-width: 280px;
height: 36px;
}
/* 文件卡片 */
.msg-file-card {
display: inline-flex;
align-items: center;
gap: 8px;
padding: 8px 12px;
margin-top: 8px;
background: var(--bg-tertiary);
border: 1px solid var(--border-primary);
border-radius: var(--radius-md);
font-size: var(--font-size-sm);
transition: background 0.15s;
}
.msg-file-card:hover {
background: var(--bg-hover);
}
.msg-file-icon {
font-size: 18px;
flex-shrink: 0;
}
.msg-file-info {
display: flex;
flex-direction: column;
gap: 2px;
min-width: 0;
}
.msg-file-name {
font-weight: 500;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
max-width: 200px;
}
.msg-file-size {
font-size: 11px;
color: var(--text-tertiary);
}
.chat-lightbox-img {
max-width: 90%;
max-height: 90%;

View File

@@ -1,3 +1,25 @@
/* 按钮加载状态 — 任意按钮加上 .btn-loading 即可获得内联 spinner */
.btn.btn-loading {
pointer-events: none;
opacity: 0.75;
}
.btn.btn-loading::before {
content: '';
display: inline-block;
width: 14px;
height: 14px;
border: 2px solid currentColor;
border-top-color: transparent;
border-radius: 50%;
animation: btn-spin 0.7s linear infinite;
margin-right: 6px;
vertical-align: -2px;
flex-shrink: 0;
}
@keyframes btn-spin {
to { transform: rotate(360deg); }
}
/* 骨架屏 */
.skeleton {
background: linear-gradient(90deg, var(--bg-secondary) 25%, var(--bg-tertiary, var(--bg-card-hover)) 50%, var(--bg-secondary) 75%);

View File

@@ -96,6 +96,63 @@
.service-actions {
display: flex;
gap: var(--space-sm);
align-items: center;
}
/* 服务操作加载状态 */
.service-loading {
display: flex;
align-items: center;
gap: var(--space-sm);
}
.service-spinner {
width: 18px;
height: 18px;
border: 2px solid var(--border-primary);
border-top-color: var(--primary);
border-radius: 50%;
animation: service-spin 0.8s linear infinite;
}
@keyframes service-spin {
to { transform: rotate(360deg); }
}
.service-loading-text {
font-size: var(--font-size-sm);
color: var(--text-secondary);
font-variant-numeric: tabular-nums;
min-width: 100px;
}
.service-cancel-btn {
font-size: var(--font-size-xs) !important;
color: var(--text-tertiary) !important;
padding: 2px 8px !important;
transition: color var(--transition-fast);
}
.service-cancel-btn:hover {
color: var(--error) !important;
}
/* 状态点:加载中脉冲动画 */
.status-dot.loading {
background: var(--warning, #f59e0b);
animation: dot-pulse 1s ease-in-out infinite;
}
@keyframes dot-pulse {
0%, 100% { opacity: 1; transform: scale(1); }
50% { opacity: 0.4; transform: scale(0.8); }
}
/* 日志加载状态 */
.log-loading {
display: flex;
align-items: center;
justify-content: center;
padding: var(--space-xl) 0;
}
/* 日志工具栏 */