web(ui): migrate operations and module detail to ui patterns

Co-authored-by: Cursor <[email protected]>
This commit is contained in:
Denozordec
2026-05-19 12:01:15 +07:00
co-authored by Cursor
parent 9808aca44f
commit 1f9930d467
2 changed files with 38 additions and 48 deletions
+30 -33
View File
@@ -75,6 +75,7 @@
import Upload from '@lucide/svelte/icons/upload'; import Upload from '@lucide/svelte/icons/upload';
import Download from '@lucide/svelte/icons/download'; import Download from '@lucide/svelte/icons/download';
import Blocks from '@lucide/svelte/icons/blocks'; import Blocks from '@lucide/svelte/icons/blocks';
import PageHeader from '$lib/ui/app/page-header/page-header.svelte';
import ArrowDownUp from '@lucide/svelte/icons/arrow-down-up'; import ArrowDownUp from '@lucide/svelte/icons/arrow-down-up';
import Timer from '@lucide/svelte/icons/timer'; import Timer from '@lucide/svelte/icons/timer';
import ShieldCheck from '@lucide/svelte/icons/shield-check'; import ShieldCheck from '@lucide/svelte/icons/shield-check';
@@ -788,6 +789,7 @@
{#if loadingMod} {#if loadingMod}
<div class="text-muted-foreground flex h-32 items-center justify-center">Загрузка…</div> <div class="text-muted-foreground flex h-32 items-center justify-center">Загрузка…</div>
{:else if mod} {:else if mod}
{@const m = mod}
<div class="space-y-6"> <div class="space-y-6">
<input <input
class="hidden" class="hidden"
@@ -796,45 +798,40 @@
bind:this={csvFileInput} bind:this={csvFileInput}
onchange={handleImportCsvChange} onchange={handleImportCsvChange}
/> />
<!-- Header --> <div class="flex min-w-0 items-start gap-2">
<div class="flex flex-col gap-3 xl:flex-row xl:items-start xl:justify-between"> <Button variant="ghost" size="icon-sm" class="mt-1 shrink-0" href={resolve('/modules')}>
<div class="flex min-w-0 items-start gap-3"> <ArrowLeft class="size-4" />
<Button variant="ghost" size="icon-sm" href={resolve('/modules')}> </Button>
<ArrowLeft class="size-4" /> <PageHeader
</Button> class="min-w-0 flex-1"
<div title={m.name}
class="bg-chart-2/15 text-chart-2 flex size-11 shrink-0 items-center justify-center rounded-xl" description={m.id}
aria-hidden="true" icon={Blocks}
> iconClass="bg-chart-2/15 text-chart-2"
<Blocks class="size-6" /> >
</div> {#snippet actions()}
<div class="min-w-0">
<div class="flex flex-wrap items-center gap-2"> <div class="flex flex-wrap items-center gap-2">
<h1 class="min-w-0 break-words text-2xl font-semibold tracking-tight">{mod.name}</h1> <Badge variant="outline">{moduleTypeRu(m.type)}</Badge>
<Badge variant="outline">{moduleTypeRu(mod.type)}</Badge> {#if m.enabled}
{#if mod.enabled}
<Badge variant="default" class="text-xs">вкл</Badge> <Badge variant="default" class="text-xs">вкл</Badge>
{:else} {:else}
<Badge variant="secondary" class="text-xs">выкл</Badge> <Badge variant="secondary" class="text-xs">выкл</Badge>
{/if} {/if}
<Button variant="outline" size="sm" onclick={refreshMod} disabled={refreshing}>
<RefreshCw class={refreshing ? 'animate-spin' : ''} />
Обновить
</Button>
<Button variant="outline" size="sm" onclick={openEditMod}>
<Pencil />
Редактировать
</Button>
<Button variant="destructive" size="sm" onclick={() => (deleteModDialog = true)}>
<Trash2 />
Удалить
</Button>
</div> </div>
<p class="text-muted-foreground mt-0.5 break-all font-mono text-xs">{mod.id}</p> {/snippet}
</div> </PageHeader>
</div>
<div class="flex flex-wrap gap-2">
<Button variant="outline" size="sm" onclick={refreshMod} disabled={refreshing}>
<RefreshCw class={refreshing ? 'animate-spin' : ''} />
Обновить
</Button>
<Button variant="outline" size="sm" onclick={openEditMod}>
<Pencil />
Редактировать
</Button>
<Button variant="destructive" size="sm" onclick={() => (deleteModDialog = true)}>
<Trash2 />
Удалить
</Button>
</div>
</div> </div>
<!-- Module metadata --> <!-- Module metadata -->
+8 -15
View File
@@ -67,6 +67,7 @@
import { cn } from '$lib/utils.js'; import { cn } from '$lib/utils.js';
import { toast } from 'svelte-sonner'; import { toast } from 'svelte-sonner';
import Zap from '@lucide/svelte/icons/zap'; import Zap from '@lucide/svelte/icons/zap';
import PageHeader from '$lib/ui/app/page-header/page-header.svelte';
// Revisions // Revisions
let revisions = $state<RevisionRow[]>([]); let revisions = $state<RevisionRow[]>([]);
@@ -727,21 +728,13 @@
} }
</script> </script>
<div class="space-y-6"> <div class="flex flex-col gap-6">
<div class="flex items-start gap-3"> <PageHeader
<div title="Операции"
class="bg-chart-2/15 text-chart-2 flex size-11 shrink-0 items-center justify-center rounded-xl" description="Деплой конфигурации, управление ревизиями и задачами."
aria-hidden="true" icon={Zap}
> iconClass="bg-chart-2/15 text-chart-2"
<Zap class="size-6" /> />
</div>
<div class="min-w-0">
<h1 class="text-2xl font-semibold tracking-tight">Операции</h1>
<p class="mt-1 text-sm text-muted-foreground">
Деплой конфигурации, управление ревизиями и задачами.
</p>
</div>
</div>
<OperationsQuickActions <OperationsQuickActions
{applying} {applying}