+
+
标准事件目录
按业务选择标准事件,自定义事件名称与它建立映射。支付、注册结果和投递结果等事件仅允许服务端上报。
+ | 分类 / 事件 | 必选参数 | 可选参数 | 来源 / 去重键 |
{catalog && Object.entries(catalog.events).map(([id, item]) => {item.category} {item.title}
{id} | {item.required.join("、")} | {Object.keys(item.fields).filter((field) => !item.required.includes(field)).join("、") || "—"} | {item.source === "server" ? "可信服务端" : "SDK / 服务端"} {item.business_keys.join(" + ") || "event_id"} |
)}
+
+
+
规则试算
{preview !== null && {JSON.stringify(preview, null, 2)}}
+
{busy ? "正在处理…" : message}
+
标准特征
{catalog && Object.entries(catalog.features).map(([id, feature]) => - {feature.title} ·
{id} · 最近 {feature.window_days} 天 · 上限 {feature.cap} )}
+
已注册事件
{items.length === 0 ? 加载应用后在这里查看事件与版本。
: items.map((item) => {item.name} · 参数版本 {item.version} · {item.status} · 规则版本 {item.revision}
)}
+
;
+}
diff --git a/src/styles.css b/src/styles.css
index ff2a4b0..234fe5e 100644
--- a/src/styles.css
+++ b/src/styles.css
@@ -38,3 +38,19 @@ input { border: 1px solid #ccd5e4; border-radius: 7px; padding: 12px; flex: 1; m
.drafts li { display: flex; align-items: center; justify-content: space-between; gap: 16px; padding: 16px 0; border-top: 1px solid #edf0f5; overflow-wrap: anywhere; }
@media (max-width: 1000px) { .metrics { grid-template-columns: repeat(2, minmax(0, 1fr)); } main { padding: 0 24px 32px; } }
@media (max-width: 640px) { .layout { grid-template-columns: 1fr; } aside { padding: 20px; } nav { grid-template-columns: repeat(3, 1fr); margin-top: 20px; } nav button { text-align: center; padding: 12px 6px; } .aside-note { display: none; } header { flex-wrap: wrap; padding: 16px 0; } .form-row { flex-direction: column; } }
+
+.registry { display: grid; gap: 20px; }
+.registry-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 16px; }
+.registry label { display: grid; gap: 8px; margin: 14px 0; }
+.registry input, .registry select, .registry textarea { box-sizing: border-box; width: 100%; padding: 10px; border: 1px solid #cbd5e1; border-radius: 8px; background: #fff; color: #15253a; font: inherit; }
+.registry textarea, .registry pre, .registry code { font-family: ui-monospace, monospace; }
+.registry textarea { resize: vertical; }
+.table-scroll { overflow-x: auto; max-height: 520px; }
+.registry table { width: 100%; border-collapse: collapse; font-size: 13px; }
+.registry th, .registry td { padding: 12px; border-bottom: 1px solid #e2e8f0; text-align: left; vertical-align: top; }
+.registry th { position: sticky; top: 0; background: #f8fafc; }
+.registry pre { padding: 14px; background: #f1f5f9; overflow: auto; }
+.registry .actions { display: flex; flex-wrap: wrap; gap: 12px; }
+.definition-row { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 12px 0; border-bottom: 1px solid #e2e8f0; }
+.registry button:disabled { opacity: .5; cursor: wait; }
+@media (max-width: 850px) { .registry-grid { grid-template-columns: 1fr; } }