206 lines
7.5 KiB
TypeScript
206 lines
7.5 KiB
TypeScript
'use client';
|
||
|
||
import React, { useState } from 'react';
|
||
import {
|
||
ArrowLeft,
|
||
Plus,
|
||
QrCode,
|
||
Settings,
|
||
CheckCircle2,
|
||
AlertCircle,
|
||
Hash,
|
||
MoveUp,
|
||
Weight,
|
||
Tag
|
||
} from 'lucide-react';
|
||
import { useParams, useRouter } from 'next/navigation';
|
||
|
||
export default function BinaDetay() {
|
||
const params = useParams();
|
||
const router = useRouter();
|
||
const [showAddForm, setShowAddForm] = useState(false);
|
||
|
||
// Mock Data
|
||
const building = { id: params.id, name: 'Güneş Apartmanı', address: 'Huzur Mah. 123. Sokak No:5, Ankara' };
|
||
|
||
const elevators = [
|
||
{
|
||
id: 1,
|
||
label: 'A Blok - Sol',
|
||
kimlikNo: '12345678',
|
||
kapasite: '630 Kg / 8 Kişi',
|
||
etiket: 'Yeşil',
|
||
gecerlilik: '01.01.2027',
|
||
durum: 'Aktif'
|
||
},
|
||
{
|
||
id: 2,
|
||
label: 'A Blok - Sağ',
|
||
kimlikNo: '12345679',
|
||
kapasite: '630 Kg / 8 Kişi',
|
||
etiket: 'Mavi',
|
||
gecerlilik: '15.06.2026',
|
||
durum: 'Bakımda'
|
||
},
|
||
];
|
||
|
||
return (
|
||
<div>
|
||
<div style={{ marginBottom: '2rem' }}>
|
||
<button
|
||
onClick={() => router.back()}
|
||
style={{
|
||
background: 'none',
|
||
border: 'none',
|
||
display: 'flex',
|
||
alignItems: 'center',
|
||
gap: '0.5rem',
|
||
color: 'var(--muted-foreground)',
|
||
cursor: 'pointer',
|
||
marginBottom: '1rem',
|
||
fontWeight: 500
|
||
}}
|
||
>
|
||
<ArrowLeft size={18} /> Geri Dön
|
||
</button>
|
||
<div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'flex-end' }}>
|
||
<div>
|
||
<h1 style={{ fontSize: '1.75rem', fontWeight: 800, color: 'var(--secondary)' }}>{building.name}</h1>
|
||
<p style={{ color: 'var(--muted-foreground)' }}>{building.address}</p>
|
||
</div>
|
||
<button
|
||
onClick={() => setShowAddForm(true)}
|
||
className="btn-primary"
|
||
>
|
||
<Plus size={18} />
|
||
Yeni Asansör Ekle
|
||
</button>
|
||
</div>
|
||
</div>
|
||
|
||
<div style={{ display: 'grid', gridTemplateColumns: 'repeat(auto-fit, minmax(400px, 1fr))', gap: '1.5rem' }}>
|
||
{elevators.map((elev) => (
|
||
<div key={elev.id} className="premium-card" style={{ padding: '0' }}>
|
||
<div style={{ padding: '1.5rem', borderBottom: '1px solid var(--border)', display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>
|
||
<div style={{ display: 'flex', alignItems: 'center', gap: '0.75rem' }}>
|
||
<div style={{
|
||
background: 'var(--primary)15',
|
||
padding: '0.5rem',
|
||
borderRadius: '0.5rem',
|
||
color: 'var(--primary)'
|
||
}}>
|
||
<MoveUp size={20} />
|
||
</div>
|
||
<div>
|
||
<h3 style={{ fontWeight: 700 }}>{elev.label}</h3>
|
||
<span style={{ fontSize: '0.75rem', color: 'var(--muted-foreground)' }}>ID: {elev.kimlikNo}</span>
|
||
</div>
|
||
</div>
|
||
<div style={{ display: 'flex', alignItems: 'center', gap: '0.5rem' }}>
|
||
<span style={{
|
||
fontSize: '0.7rem',
|
||
fontWeight: 700,
|
||
padding: '0.2rem 0.5rem',
|
||
borderRadius: '4px',
|
||
background: elev.etiket === 'Yeşil' ? '#10b981' : elev.etiket === 'Mavi' ? '#3b82f6' : '#f59e0b',
|
||
color: 'white'
|
||
}}>
|
||
{elev.etiket} Etiket
|
||
</span>
|
||
<button style={{ background: 'none', border: 'none', cursor: 'pointer', color: 'var(--muted-foreground)' }}>
|
||
<Settings size={18} />
|
||
</button>
|
||
</div>
|
||
</div>
|
||
|
||
<div style={{ padding: '1.25rem', display: 'grid', gridTemplateColumns: '1fr 1fr', gap: '1rem' }}>
|
||
<div style={{ display: 'flex', alignItems: 'center', gap: '0.5rem' }}>
|
||
<Weight size={16} color="var(--muted-foreground)" />
|
||
<span style={{ fontSize: '0.85rem' }}>{elev.kapasite}</span>
|
||
</div>
|
||
<div style={{ display: 'flex', alignItems: 'center', gap: '0.5rem' }}>
|
||
<Tag size={16} color="var(--muted-foreground)" />
|
||
<span style={{ fontSize: '0.85rem' }}>Son Kontrol: {elev.gecerlilik}</span>
|
||
</div>
|
||
</div>
|
||
|
||
<div style={{ padding: '1rem 1.5rem', background: 'var(--muted)', borderBottomLeftRadius: 'var(--radius)', borderBottomRightRadius: 'var(--radius)', display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>
|
||
<div style={{ display: 'flex', alignItems: 'center', gap: '0.4rem' }}>
|
||
{elev.durum === 'Aktif' ? <CheckCircle2 size={14} color="#10b981" /> : <AlertCircle size={14} color="#f59e0b" />}
|
||
<span style={{ fontSize: '0.8rem', fontWeight: 600 }}>{elev.durum}</span>
|
||
</div>
|
||
<button style={{
|
||
background: 'white',
|
||
border: '1px solid var(--border)',
|
||
padding: '0.4rem 0.75rem',
|
||
borderRadius: '0.5rem',
|
||
fontSize: '0.8rem',
|
||
fontWeight: 600,
|
||
display: 'flex',
|
||
alignItems: 'center',
|
||
gap: '0.4rem',
|
||
cursor: 'pointer'
|
||
}}>
|
||
<QrCode size={14} /> Karekod Yazdır
|
||
</button>
|
||
</div>
|
||
</div>
|
||
))}
|
||
</div>
|
||
|
||
{/* Placeholder for Add Form Modal */}
|
||
{showAddForm && (
|
||
<div style={{
|
||
position: 'fixed',
|
||
inset: 0,
|
||
background: 'rgba(0,0,0,0.5)',
|
||
display: 'flex',
|
||
alignItems: 'center',
|
||
justifyContent: 'center',
|
||
backdropFilter: 'blur(4px)',
|
||
zIndex: 100
|
||
}}>
|
||
<div className="premium-card" style={{ width: '100%', maxWidth: '500px' }}>
|
||
<h2 style={{ marginBottom: '1.5rem', fontWeight: 800 }}>Yeni Asansör Kaydı</h2>
|
||
<div style={{ display: 'flex', flexDirection: 'column', gap: '1rem' }}>
|
||
<input placeholder="Asansör Adı (Örn: A Blok)" style={inputStyle} />
|
||
<input placeholder="Belediye/Bakanlık Kimlik No" style={inputStyle} />
|
||
<div style={{ display: 'grid', gridTemplateColumns: '1fr 1fr', gap: '1rem' }}>
|
||
<input placeholder="Kapasite (Kg)" style={inputStyle} />
|
||
<input placeholder="Kişi Sayısı" style={inputStyle} />
|
||
</div>
|
||
<select style={inputStyle}>
|
||
<option>Etiket Rengi Seçiniz</option>
|
||
<option>Yeşil</option>
|
||
<option>Mavi</option>
|
||
<option>Sarı</option>
|
||
<option>Kırmızı</option>
|
||
</select>
|
||
<div style={{ display: 'flex', gap: '1rem', marginTop: '1rem' }}>
|
||
<button
|
||
onClick={() => setShowAddForm(false)}
|
||
className="btn-primary"
|
||
style={{ background: 'var(--muted)', color: 'var(--secondary)', flex: 1 }}
|
||
>
|
||
İptal
|
||
</button>
|
||
<button className="btn-primary" style={{ flex: 1 }}>Kaydet</button>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
)}
|
||
</div>
|
||
);
|
||
}
|
||
|
||
const inputStyle = {
|
||
width: '100%',
|
||
padding: '0.75rem 1rem',
|
||
borderRadius: '0.75rem',
|
||
border: '1px solid var(--border)',
|
||
background: 'var(--muted)',
|
||
fontSize: '0.9rem',
|
||
outline: 'none'
|
||
};
|