feat: add gitea/forgejo support

This commit is contained in:
RhenCloud 2026-08-11 22:01:04 +08:00
parent ace036c209
commit aec0d1a257
43 changed files with 683 additions and 130 deletions

View file

@ -56,6 +56,31 @@
/>
<div class="hint">{{ t("groupEditor.ownersHint") }}</div>
</div>
<div class="field">
<label
>{{ t("groupEditor.providers") }}
<span class="lbl-note">{{ t("groupEditor.providersNote") }}</span></label
>
<div class="provider-options">
<label class="inline">
<input
type="checkbox"
:checked="form.providers.includes('github')"
@change="toggleProvider('github', $event)"
/>
<span>GitHub</span>
</label>
<label class="inline">
<input
type="checkbox"
:checked="form.providers.includes('gitea')"
@change="toggleProvider('gitea', $event)"
/>
<span>Gitea</span>
</label>
</div>
<div class="hint">{{ t("groupEditor.providersHint") }}</div>
</div>
<label class="inline">
<input v-model="form.emoji" type="checkbox" />
<span>{{ t("groupEditor.emoji") }}</span>
@ -95,6 +120,7 @@ const form = reactive({
name: "",
adminIds: "",
owners: "",
providers: [] as ("github" | "gitea")[],
emoji: true,
});
@ -105,6 +131,13 @@ function splitList(text: string): string[] {
.filter(Boolean);
}
function toggleProvider(p: "github" | "gitea", e: Event): void {
const checked = (e.target as HTMLInputElement).checked;
form.providers = checked
? [...new Set([...form.providers, p])]
: form.providers.filter((x) => x !== p);
}
watch(
() => props.open,
(open) => {
@ -114,6 +147,9 @@ watch(
form.name = g?.name ?? "";
form.adminIds = (g?.adminIds ?? []).join(", ");
form.owners = (g?.owners ?? []).join(", ");
form.providers = (g?.providers ?? []).filter(
(p): p is "github" | "gitea" => p === "github" || p === "gitea",
);
form.emoji = g?.emoji ?? true;
formError.value = "";
},
@ -141,6 +177,7 @@ function save(): void {
name,
adminIds: splitList(form.adminIds),
owners: owners.length ? owners : undefined,
providers: form.providers.length ? form.providers : undefined,
emoji: form.emoji,
});
}

View file

@ -126,6 +126,10 @@ const en: Dict = {
"groupEditor.ownersPlaceholder": "my-org, some-user",
"groupEditor.ownersHint":
"Only webhook events from these orgs/users enter this group's routes. Leave empty for no restriction.",
"groupEditor.providers": "Source platforms",
"groupEditor.providersNote": "(leave both unchecked = all)",
"groupEditor.providersHint":
"Only webhook events from the checked forges (GitHub / Gitea) enter this group's routes.",
"groupEditor.emoji": "Show emojis in messages",
"groupEditor.cancel": "Cancel",
"groupEditor.save": "Save group",
@ -292,6 +296,10 @@ const zh: Dict = {
"groupEditor.ownersPlaceholder": "my-org, some-user",
"groupEditor.ownersHint":
"只有来自这些组织/用户的 webhook 事件才会进入本分组的路由。留空表示不限制。",
"groupEditor.providers": "来源平台",
"groupEditor.providersNote": "(都不勾选 = 全部来源)",
"groupEditor.providersHint":
"只有来自所勾选 forgeGitHub / Gitea的 webhook 事件才会进入本分组的路由。",
"groupEditor.emoji": "消息中显示表情符号",
"groupEditor.cancel": "取消",
"groupEditor.save": "保存分组",

View file

@ -30,6 +30,7 @@ export interface Group {
name: string;
adminIds: string[];
owners?: string[];
providers?: ("github" | "gitea" | "gitlab")[];
emoji?: boolean;
}