mirror of
https://github.com/ReCloudStudio/WebHooker.git
synced 2026-09-22 16:11:29 +00:00
feat(admin): group-centric console navigation and group-scoped routes API
Add GET/PUT /api/groups/:groupId/routes endpoints that filter and merge routes by group (backend forces groupId from the path param). Rework the console so the top level lists groups; entering a group shows and manages only that group's routes. Drop the route-level group selector and the now-redundant group badge on route cards.
This commit is contained in:
parent
62985a2f3f
commit
d3c1349d00
5 changed files with 327 additions and 186 deletions
|
|
@ -6,35 +6,36 @@
|
|||
<input type="checkbox" :checked="route.enabled" @change="onToggle" />
|
||||
<span class="track"></span>
|
||||
</label>
|
||||
<span class="route-name">{{ route.name || "(untitled)" }}</span>
|
||||
<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="groupName" class="badge group">{{ groupName }}</span>
|
||||
</div>
|
||||
<div class="card-actions">
|
||||
<button class="icon-btn" title="Edit" @click="$emit('edit', route)">✎</button>
|
||||
<button class="icon-btn danger" title="Delete" @click="$emit('delete', route)">✕</button>
|
||||
<button class="icon-btn" :title="t('routeEditor.editTitle')" @click="$emit('edit', route)">✎</button>
|
||||
<button class="icon-btn danger" :title="t('routeEditor.close')" @click="$emit('delete', route)">✕</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="chips">
|
||||
<span v-for="(f, i) in route.filters" :key="i" class="chip" :class="{ exclude: f.exclude }">
|
||||
<span class="f-type">{{ f.exclude ? "NOT " : "" }}{{ FILTER_LABELS[f.type] || f.type }}</span>
|
||||
<span class="f-type">{{ f.exclude ? t("routeEditor.not") + " " : "" }}{{ t("filter." + f.type) }}</span>
|
||||
<span class="f-val">{{ fmtMatch(f.match) }}</span>
|
||||
</span>
|
||||
<span v-if="!route.filters.length" class="chip"><span class="f-type">no filters</span></span>
|
||||
<span v-if="!route.filters.length" class="chip"><span class="f-type">{{ t("route.noFilters") }}</span></span>
|
||||
</div>
|
||||
<div class="target">
|
||||
<span><b>CHANNEL</b><code>{{ route.target.channelId }}</code></span>
|
||||
<span v-if="route.target.threadId"><b>THREAD</b><code>{{ route.target.threadId }}</code></span>
|
||||
<span><b>{{ t("route.channel") }}</b><code>{{ route.target.channelId }}</code></span>
|
||||
<span v-if="route.target.threadId"><b>{{ t("route.thread") }}</b><code>{{ route.target.threadId }}</code></span>
|
||||
</div>
|
||||
</article>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import type { Route } from "~/types";
|
||||
import { FILTER_LABELS, fmtMatch } from "~/types";
|
||||
import { fmtMatch } from "~/types";
|
||||
|
||||
const props = defineProps<{ route: Route; groupName?: string }>();
|
||||
const { t } = useI18n();
|
||||
|
||||
const props = defineProps<{ route: Route }>();
|
||||
const emit = defineEmits<{
|
||||
(e: "toggle", route: Route): void;
|
||||
(e: "edit", route: Route): void;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue