mirror of
https://github.com/ReCloudStudio/WebHooker.git
synced 2026-09-22 16:11:29 +00:00
feat(admin): add stop toggle and badge to route editor UI
This commit is contained in:
parent
feada32e83
commit
ab98c84896
5 changed files with 24 additions and 0 deletions
|
|
@ -361,6 +361,12 @@ main {
|
||||||
border: 1px solid transparent;
|
border: 1px solid transparent;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.badge.stop {
|
||||||
|
background: var(--bad-dim);
|
||||||
|
color: var(--bad);
|
||||||
|
border: 1px solid transparent;
|
||||||
|
}
|
||||||
|
|
||||||
.card-actions {
|
.card-actions {
|
||||||
display: flex;
|
display: flex;
|
||||||
gap: 6px;
|
gap: 6px;
|
||||||
|
|
|
||||||
|
|
@ -17,6 +17,7 @@
|
||||||
>{{ tg.platform === "telegram" ? "Telegram" : "Discord" }}</span
|
>{{ tg.platform === "telegram" ? "Telegram" : "Discord" }}</span
|
||||||
>
|
>
|
||||||
<span v-if="route.fallback" class="badge fallback">{{ t("route.fallback") }}</span>
|
<span v-if="route.fallback" class="badge fallback">{{ t("route.fallback") }}</span>
|
||||||
|
<span v-if="route.stop" class="badge stop">{{ t("route.stop") }}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="card-actions">
|
<div class="card-actions">
|
||||||
<button
|
<button
|
||||||
|
|
|
||||||
|
|
@ -64,6 +64,13 @@
|
||||||
<span class="lbl-note">{{ t("routeEditor.fallbackHint") }}</span></span
|
<span class="lbl-note">{{ t("routeEditor.fallbackHint") }}</span></span
|
||||||
>
|
>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="field inline">
|
||||||
|
<input v-model="form.stop" type="checkbox" />
|
||||||
|
<span
|
||||||
|
>{{ t("routeEditor.stop") }}
|
||||||
|
<span class="lbl-note">{{ t("routeEditor.stopHint") }}</span></span
|
||||||
|
>
|
||||||
|
</div>
|
||||||
<div class="field">
|
<div class="field">
|
||||||
<label
|
<label
|
||||||
>{{ t("routeEditor.filters") }}
|
>{{ t("routeEditor.filters") }}
|
||||||
|
|
@ -195,6 +202,7 @@ const form = reactive({
|
||||||
lang: "",
|
lang: "",
|
||||||
enabled: true,
|
enabled: true,
|
||||||
fallback: false,
|
fallback: false,
|
||||||
|
stop: false,
|
||||||
targets: [] as TargetForm[],
|
targets: [] as TargetForm[],
|
||||||
filters: [] as FilterForm[],
|
filters: [] as FilterForm[],
|
||||||
});
|
});
|
||||||
|
|
@ -245,6 +253,7 @@ watch(
|
||||||
form.lang = r?.lang ?? "";
|
form.lang = r?.lang ?? "";
|
||||||
form.enabled = r?.enabled ?? true;
|
form.enabled = r?.enabled ?? true;
|
||||||
form.fallback = r?.fallback ?? false;
|
form.fallback = r?.fallback ?? false;
|
||||||
|
form.stop = r?.stop ?? false;
|
||||||
form.targets =
|
form.targets =
|
||||||
r && r.targets.length
|
r && r.targets.length
|
||||||
? r.targets.map((tg) => ({ ...blankTarget(), ...tg }))
|
? r.targets.map((tg) => ({ ...blankTarget(), ...tg }))
|
||||||
|
|
@ -311,6 +320,7 @@ function collect(): Route | null {
|
||||||
name: form.name.trim(),
|
name: form.name.trim(),
|
||||||
enabled: form.enabled,
|
enabled: form.enabled,
|
||||||
fallback: form.fallback || undefined,
|
fallback: form.fallback || undefined,
|
||||||
|
stop: form.stop || undefined,
|
||||||
lang: form.lang.trim() || undefined,
|
lang: form.lang.trim() || undefined,
|
||||||
filters,
|
filters,
|
||||||
targets,
|
targets,
|
||||||
|
|
|
||||||
|
|
@ -37,6 +37,7 @@ const en: Dict = {
|
||||||
"route.chat": "CHAT",
|
"route.chat": "CHAT",
|
||||||
"route.topic": "TOPIC",
|
"route.topic": "TOPIC",
|
||||||
"route.fallback": "fallback",
|
"route.fallback": "fallback",
|
||||||
|
"route.stop": "stop",
|
||||||
"route.moveUp": "Move up",
|
"route.moveUp": "Move up",
|
||||||
"route.moveDown": "Move down",
|
"route.moveDown": "Move down",
|
||||||
"filter.event": "Event",
|
"filter.event": "Event",
|
||||||
|
|
@ -73,6 +74,8 @@ const en: Dict = {
|
||||||
"routeEditor.enabled": "Route enabled",
|
"routeEditor.enabled": "Route enabled",
|
||||||
"routeEditor.fallback": "Fallback route",
|
"routeEditor.fallback": "Fallback route",
|
||||||
"routeEditor.fallbackHint": "Only fires when no other route matched; filters still apply",
|
"routeEditor.fallbackHint": "Only fires when no other route matched; filters still apply",
|
||||||
|
"routeEditor.stop": "Stop on match",
|
||||||
|
"routeEditor.stopHint": "When matched, no further routes are evaluated for this event",
|
||||||
"routeEditor.filters": "Filters",
|
"routeEditor.filters": "Filters",
|
||||||
"routeEditor.filtersNote": "(all must match · AND)",
|
"routeEditor.filtersNote": "(all must match · AND)",
|
||||||
"routeEditor.matchPlaceholder": "match value",
|
"routeEditor.matchPlaceholder": "match value",
|
||||||
|
|
@ -194,6 +197,7 @@ const zh: Dict = {
|
||||||
"route.chat": "群组",
|
"route.chat": "群组",
|
||||||
"route.topic": "话题",
|
"route.topic": "话题",
|
||||||
"route.fallback": "兜底",
|
"route.fallback": "兜底",
|
||||||
|
"route.stop": "停止",
|
||||||
"route.moveUp": "上移",
|
"route.moveUp": "上移",
|
||||||
"route.moveDown": "下移",
|
"route.moveDown": "下移",
|
||||||
"filter.event": "事件",
|
"filter.event": "事件",
|
||||||
|
|
@ -230,6 +234,8 @@ const zh: Dict = {
|
||||||
"routeEditor.enabled": "启用路由",
|
"routeEditor.enabled": "启用路由",
|
||||||
"routeEditor.fallback": "兜底路由",
|
"routeEditor.fallback": "兜底路由",
|
||||||
"routeEditor.fallbackHint": "仅当没有其它路由匹配该事件时才发送,其过滤器仍会生效",
|
"routeEditor.fallbackHint": "仅当没有其它路由匹配该事件时才发送,其过滤器仍会生效",
|
||||||
|
"routeEditor.stop": "匹配后停止",
|
||||||
|
"routeEditor.stopHint": "该路由匹配后,不再评估后续路由",
|
||||||
"routeEditor.filters": "过滤器",
|
"routeEditor.filters": "过滤器",
|
||||||
"routeEditor.filtersNote": "(全部匹配 · AND)",
|
"routeEditor.filtersNote": "(全部匹配 · AND)",
|
||||||
"routeEditor.matchPlaceholder": "匹配值",
|
"routeEditor.matchPlaceholder": "匹配值",
|
||||||
|
|
|
||||||
|
|
@ -21,6 +21,7 @@ export interface Route {
|
||||||
lang?: string;
|
lang?: string;
|
||||||
groupId?: string;
|
groupId?: string;
|
||||||
fallback?: boolean;
|
fallback?: boolean;
|
||||||
|
stop?: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface Group {
|
export interface Group {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue