feat: implement project management and portal client detail views with dashboard shell and layout components
This commit is contained in:
@@ -96,7 +96,7 @@ export function ClientDetailClient({ client, activities }: { client: ClientDetai
|
||||
}
|
||||
|
||||
return (
|
||||
<div className="mx-auto flex max-w-5xl flex-col gap-6 animate-in fade-in slide-in-from-bottom-4 duration-500">
|
||||
<div className="mx-auto flex max-w-7xl flex-col gap-6 animate-in fade-in slide-in-from-bottom-4 duration-500">
|
||||
{/* Header Info */}
|
||||
<div className="flex flex-col gap-4 md:flex-row md:items-start justify-between">
|
||||
<div className="flex items-center gap-4">
|
||||
|
||||
@@ -250,8 +250,8 @@ export function ClientsClient({
|
||||
|
||||
<TabsContent value="list" className="mt-0">
|
||||
{filteredClients.length > 0 ? (
|
||||
<div className="overflow-hidden rounded-sm border border-border">
|
||||
<div className="hidden grid-cols-[1.5fr_1fr_1fr_1fr_0.8fr_0.8fr] gap-4 border-b border-border bg-muted/40 px-4 py-3 text-xs font-medium uppercase text-muted-foreground lg:grid">
|
||||
<div className="overflow-hidden">
|
||||
<div className="hidden grid-cols-[1.5fr_1fr_1fr_1fr_0.8fr_0.8fr] gap-4 border-b border-border px-4 py-3 text-xs font-medium uppercase text-muted-foreground lg:grid">
|
||||
<span>Müşteri</span>
|
||||
<span>İletişim</span>
|
||||
<span>Aşama</span>
|
||||
|
||||
@@ -297,14 +297,14 @@ export function ProjectDetailClient({
|
||||
<TabButton active={activeTab === "finance"} onClick={() => setActiveTab("finance")}>
|
||||
Finans
|
||||
</TabButton>
|
||||
{revisions.length > 0 && (
|
||||
<TabButton active={activeTab === "revisions"} onClick={() => setActiveTab("revisions")}>
|
||||
Revizyonlar
|
||||
<TabButton active={activeTab === "revisions"} onClick={() => setActiveTab("revisions")}>
|
||||
Revizyonlar
|
||||
{revisions.filter(r => r.status === 'pending').length > 0 && (
|
||||
<Badge variant="secondary" className="ml-2 px-1 py-0 h-4 text-[10px]">
|
||||
{revisions.filter(r => r.status === 'pending').length}
|
||||
</Badge>
|
||||
</TabButton>
|
||||
)}
|
||||
)}
|
||||
</TabButton>
|
||||
</div>
|
||||
|
||||
{activeTab === "planning" ? (
|
||||
|
||||
@@ -659,14 +659,24 @@ function ProjectFormFields({
|
||||
</div>
|
||||
<div className="grid gap-2">
|
||||
<Label htmlFor={`progress-${project?.id || "new"}`}>İlerleme (%)</Label>
|
||||
<Input
|
||||
id={`progress-${project?.id || "new"}`}
|
||||
name="progress"
|
||||
type="number"
|
||||
min="0"
|
||||
max="100"
|
||||
defaultValue={project?.progress ?? 0}
|
||||
/>
|
||||
<div className="flex items-center gap-3">
|
||||
<Input
|
||||
id={`progress-${project?.id || "new"}`}
|
||||
name="progress"
|
||||
type="range"
|
||||
min="0"
|
||||
max="100"
|
||||
defaultValue={project?.progress ?? 0}
|
||||
className="flex-1 cursor-pointer accent-primary"
|
||||
onChange={(e) => {
|
||||
const el = document.getElementById(`progress-val-${project?.id || "new"}`);
|
||||
if (el) el.textContent = `%${e.target.value}`;
|
||||
}}
|
||||
/>
|
||||
<span id={`progress-val-${project?.id || "new"}`} className="w-10 text-sm font-medium text-right">
|
||||
%{project?.progress ?? 0}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user