mirror of
https://github.com/ReCloudStudio/WebHooker.git
synced 2026-09-23 00:21:28 +00:00
feat: add fallback routes and repository event enrichment
This commit is contained in:
parent
44b8fead78
commit
d419b9c940
11 changed files with 104 additions and 8 deletions
|
|
@ -14,6 +14,8 @@
|
|||
--accent-text: #3730a3;
|
||||
--ok: #16a34a;
|
||||
--ok-dim: #ecfdf3;
|
||||
--warn: #b45309;
|
||||
--warn-dim: #fef3c7;
|
||||
--bad: #dc2626;
|
||||
--bad-dim: #fef2f2;
|
||||
--dot: rgba(15, 23, 42, 0.05);
|
||||
|
|
@ -44,6 +46,8 @@
|
|||
--accent-text: #c7d2fe;
|
||||
--ok: #22c55e;
|
||||
--ok-dim: #10241a;
|
||||
--warn: #fbbf24;
|
||||
--warn-dim: #2a2410;
|
||||
--bad: #f05252;
|
||||
--bad-dim: #2a1618;
|
||||
--dot: rgba(148, 163, 184, 0.08);
|
||||
|
|
@ -345,6 +349,12 @@ main {
|
|||
border: 1px solid transparent;
|
||||
}
|
||||
|
||||
.badge.fallback {
|
||||
background: var(--warn-dim);
|
||||
color: var(--warn);
|
||||
border: 1px solid transparent;
|
||||
}
|
||||
|
||||
.card-actions {
|
||||
display: flex;
|
||||
gap: 6px;
|
||||
|
|
|
|||
|
|
@ -9,6 +9,7 @@
|
|||
<span class="route-name">{{ route.name || t("route.untitled") }}</span>
|
||||
<span class="route-id">{{ route.id }}</span>
|
||||
<span v-if="route.lang" class="badge lang">{{ route.lang }}</span>
|
||||
<span v-if="route.fallback" class="badge fallback">{{ t("route.fallback") }}</span>
|
||||
</div>
|
||||
<div class="card-actions">
|
||||
<button class="icon-btn" :title="t('routeEditor.editTitle')" @click="$emit('edit', route)">✎</button>
|
||||
|
|
|
|||
|
|
@ -30,6 +30,10 @@
|
|||
<input v-model="form.enabled" type="checkbox" />
|
||||
<span>{{ t("routeEditor.enabled") }}</span>
|
||||
</div>
|
||||
<div class="field inline">
|
||||
<input v-model="form.fallback" type="checkbox" />
|
||||
<span>{{ t("routeEditor.fallback") }} <span class="lbl-note">{{ t("routeEditor.fallbackHint") }}</span></span>
|
||||
</div>
|
||||
<div class="field">
|
||||
<label>{{ t("routeEditor.filters") }} <span class="lbl-note">{{ t("routeEditor.filtersNote") }}</span></label>
|
||||
<div v-for="(f, i) in form.filters" :key="i" class="filter-row">
|
||||
|
|
@ -91,6 +95,7 @@ const form = reactive({
|
|||
name: "",
|
||||
lang: "",
|
||||
enabled: true,
|
||||
fallback: false,
|
||||
channelId: "",
|
||||
threadId: "",
|
||||
filters: [] as FilterForm[],
|
||||
|
|
@ -123,6 +128,7 @@ watch(
|
|||
form.name = r?.name ?? "";
|
||||
form.lang = r?.lang ?? "";
|
||||
form.enabled = r?.enabled ?? true;
|
||||
form.fallback = r?.fallback ?? false;
|
||||
form.channelId = r?.target.channelId ?? "";
|
||||
form.threadId = r?.target.threadId ?? "";
|
||||
form.filters = (r && r.filters.length
|
||||
|
|
@ -158,6 +164,7 @@ function collect(): Route | null {
|
|||
id: form.id.trim(),
|
||||
name: form.name.trim(),
|
||||
enabled: form.enabled,
|
||||
fallback: form.fallback || undefined,
|
||||
lang: form.lang.trim() || undefined,
|
||||
filters,
|
||||
target: {
|
||||
|
|
|
|||
|
|
@ -34,6 +34,7 @@ const en: Dict = {
|
|||
"route.noFilters": "no filters",
|
||||
"route.channel": "CHANNEL",
|
||||
"route.thread": "THREAD",
|
||||
"route.fallback": "fallback",
|
||||
"filter.event": "Event",
|
||||
"filter.repo": "Repo",
|
||||
"filter.actor": "Actor",
|
||||
|
|
@ -51,6 +52,8 @@ const en: Dict = {
|
|||
"routeEditor.langPlaceholder": "en",
|
||||
"routeEditor.langHint": "en or zh; custom via KV i18n:<lang>",
|
||||
"routeEditor.enabled": "Route enabled",
|
||||
"routeEditor.fallback": "Fallback route",
|
||||
"routeEditor.fallbackHint": "Only fires when no other route matched",
|
||||
"routeEditor.filters": "Filters",
|
||||
"routeEditor.filtersNote": "(all must match · AND)",
|
||||
"routeEditor.matchPlaceholder": "match value",
|
||||
|
|
@ -137,6 +140,7 @@ const zh: Dict = {
|
|||
"route.noFilters": "无过滤器",
|
||||
"route.channel": "频道",
|
||||
"route.thread": "子区",
|
||||
"route.fallback": "兜底",
|
||||
"filter.event": "事件",
|
||||
"filter.repo": "仓库",
|
||||
"filter.actor": "操作者",
|
||||
|
|
@ -154,6 +158,8 @@ const zh: Dict = {
|
|||
"routeEditor.langPlaceholder": "zh",
|
||||
"routeEditor.langHint": "en 或 zh;可通过 KV i18n:<lang> 自定义",
|
||||
"routeEditor.enabled": "启用路由",
|
||||
"routeEditor.fallback": "兜底路由",
|
||||
"routeEditor.fallbackHint": "仅当没有其它路由匹配该事件时才发送",
|
||||
"routeEditor.filters": "过滤器",
|
||||
"routeEditor.filtersNote": "(全部匹配 · AND)",
|
||||
"routeEditor.matchPlaceholder": "匹配值",
|
||||
|
|
|
|||
|
|
@ -15,6 +15,7 @@ export interface Route {
|
|||
};
|
||||
lang?: string;
|
||||
groupId?: string;
|
||||
fallback?: boolean;
|
||||
}
|
||||
|
||||
export interface Group {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue