前端配置迁至 config/local.js,完善支付、模板库与部署脚本

- 页面直接引用 local.js 设置 SOON_DEPLOY_CONFIG,移除 deploy-config
- Docker sync-config 生成 local.js;更新 README 与 agent-core 说明
- 模板库自动扫描 .soon;新增后端部署/种子/排查脚本
- 完善支付配置、订阅弹窗与后台支付管理页

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
24kycj
2026-06-08 20:48:51 +08:00
parent 88c6ce8ccc
commit 152228d41f
47 changed files with 1448 additions and 486 deletions
+107 -16
View File
@@ -719,26 +719,117 @@ body.soon-admin-page .soon-admin-date-wrap input[type="date"].soon-input::-webki
white-space: nowrap;
}
.soon-admin-key-form-row {
display: grid;
grid-template-columns: 140px 1fr auto;
gap: var(--soon-space-sm);
align-items: start;
padding: var(--soon-space-md) 0;
border-bottom: 1px solid var(--soon-border);
.soon-admin-form--pay { padding: 0; }
.soon-admin-form-panel--pay {
padding: var(--soon-space-md) var(--soon-space-lg);
}
.soon-admin-key-form-row:last-child { border-bottom: none; }
.soon-admin-key-form-row__label {
font-size: var(--soon-font-sm);
color: var(--soon-text);
padding-top: 8px;
.soon-admin-form--pay .soon-admin-tabs {
margin-top: var(--soon-space-md);
padding-top: var(--soon-space-md);
border-top: 1px solid var(--soon-border);
}
.soon-admin-key-form-row__status {
.soon-admin-form--pay .soon-admin-form__actions {
margin-top: var(--soon-space-sm);
padding: var(--soon-space-sm) 0 0;
background: none;
border: none;
border-radius: 0;
}
.soon-admin-pay-status {
display: flex;
gap: 8px;
margin-bottom: var(--soon-space-md);
}
.soon-admin-pay-status__item {
padding: 2px 10px;
border-radius: 999px;
font-size: var(--soon-font-xs);
margin-top: 4px;
border: 1px solid var(--soon-border);
color: var(--soon-text-muted);
}
.soon-admin-pay-status__item.is-ok {
color: var(--soon-accent);
border-color: rgba(0, 150, 136, 0.35);
background: rgba(0, 150, 136, 0.08);
}
.soon-admin-pay-status__item.is-miss {
color: var(--soon-danger);
border-color: rgba(244, 67, 54, 0.35);
background: rgba(244, 67, 54, 0.08);
}
.soon-admin-pay-grid {
display: grid;
grid-template-columns: repeat(2, minmax(0, 1fr));
gap: 12px 20px;
}
@media (max-width: 768px) {
.soon-admin-pay-grid { grid-template-columns: 1fr; }
}
.soon-admin-pay-field { min-width: 0; }
.soon-admin-pay-field--wide { grid-column: 1 / -1; }
.soon-admin-pay-field__label {
display: block;
margin-bottom: 4px;
font-size: var(--soon-font-xs);
color: var(--soon-text-muted);
}
.soon-admin-pay-field__control { min-width: 0; }
.soon-admin-pay-field__control > .soon-input { width: 100%; }
.soon-admin-pay-checks {
display: flex;
flex-wrap: wrap;
gap: 12px 20px;
min-height: 32px;
align-items: center;
}
.soon-input--readonly {
opacity: 0.8;
cursor: default;
background: rgba(255, 255, 255, 0.03);
font-size: var(--soon-font-xs);
}
.soon-admin-pay-key {
display: flex;
flex-wrap: wrap;
align-items: center;
gap: 6px;
}
.soon-admin-pay-key__badge {
min-width: 48px;
padding: 1px 6px;
border-radius: 4px;
font-size: 11px;
text-align: center;
}
.soon-admin-pay-key__badge.is-ok {
color: var(--soon-accent);
background: rgba(0, 150, 136, 0.12);
}
.soon-admin-pay-key__badge.is-miss {
color: var(--soon-danger);
background: rgba(244, 67, 54, 0.1);
}
.soon-admin-pay-key__text { flex: 1; min-width: 0; }
.soon-admin-pay-key__file { cursor: pointer; margin: 0; }
.soon-admin-pay-key__paste {
display: none;
width: 100%;
margin-top: 6px;
}
.soon-admin-pay-key__paste.is-open { display: block; }
.soon-admin-pay-key__paste .soon-input { width: 100%; margin-bottom: 4px; }
.soon-admin-form-checks--inline {
margin-top: 0;
padding-top: 0;
border-top: none;
}
.soon-admin-key-form-row__status--ok { color: var(--soon-accent); }
.soon-admin-key-form-row__status--miss { color: var(--soon-danger); }
.soon-admin-btn-group {
display: flex;