Files
LinkDesk/frontend/src/components/layout/AppLayout.vue
T
indigo d44398033a Add shot table column lock with two-pane horizontal scroll
Add a lock toggle to the shot table toolbar that freezes the
checkbox, thumbnail, and shot name columns. When locked, the table
splits into a fixed left pane and a horizontally scrollable right
pane so the scrollbar spans only the movable columns. Constrain the
table to fill the viewport height so the scrollbar stays at the
screen bottom, and add min-w-0 to the layout to keep horizontal
overflow inside the table instead of the page.

Also fix the asset Task Status filter to render task type groups by
using the object-aware TaskStatusBadge.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-22 10:04:55 +08:00

51 lines
1.5 KiB
Vue

<template>
<SidebarProvider>
<div class="flex h-screen w-full">
<!-- Main Sidebar -->
<AppSidebar />
<!-- Main Content Area -->
<SidebarInset class="flex-1 flex flex-col min-w-0">
<!-- Header -->
<AppHeader />
<!-- Content Area -->
<main class="flex-1 flex overflow-hidden">
<!-- Main Content -->
<div class="flex-1 overflow-auto">
<router-view />
</div>
<!-- Detail Panel (conditionally shown) -->
<div
v-if="showDetailPanel"
class="w-80 border-l bg-background overflow-auto"
>
<slot name="detail-panel">
<!-- Default detail panel content -->
<div class="p-4">
<h3 class="text-lg font-semibold mb-4">Details</h3>
<p class="text-muted-foreground">Select an item to view details</p>
</div>
</slot>
</div>
</main>
</SidebarInset>
</div>
</SidebarProvider>
</template>
<script setup lang="ts">
import { computed } from 'vue'
import { useRoute } from 'vue-router'
import { SidebarProvider, SidebarInset } from '@/components/ui/sidebar'
import AppSidebar from './AppSidebar.vue'
import AppHeader from './AppHeader.vue'
// Show detail panel based on route or store state
const route = useRoute()
const showDetailPanel = computed(() => {
// Show detail panel for certain routes or when an item is selected
return route.meta?.showDetailPanel || false
})
</script>