anycoder-cddd2a1b / index.html
Esmaeilkianii's picture
Upload folder using huggingface_hub
1b58f7a verified
<!DOCTYPE html>
<html lang="fa" dir="rtl">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>نرم‌افزار مدیریت آزمایشگاه آب و خاک - آزمایشگاه اهواز</title>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
<style>
:root {
--primary-color: #2c3e50;
--secondary-color: #3498db;
--accent-color: #e74c3c;
--success-color: #27ae60;
--warning-color: #f39c12;
--light-color: #ecf0f1;
--dark-color: #2c3e50;
--text-color: #333;
--text-light: #7f8c8d;
--shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
--border-radius: 8px;
--transition: all 0.3s ease;
}
* {
margin: 0;
padding: 0;
box-sizing: border-box;
font-family: 'Vazirmatn', 'IranYekan', 'Tahoma', sans-serif;
}
@font-face {
font-family: 'Vazirmatn';
src: url('https://cdn.jsdelivr.net/gh/rastikerdar/vazirmatn@v33.003/Vazirmatn-font-face.css');
}
body {
background-color: #f5f7fa;
color: var(--text-color);
line-height: 1.6;
}
.container {
display: grid;
grid-template-columns: 250px 1fr;
min-height: 100vh;
}
/* Sidebar */
.sidebar {
background-color: var(--primary-color);
color: white;
padding: 1.5rem;
position: sticky;
top: 0;
height: 100vh;
overflow-y: auto;
}
.sidebar-header {
display: flex;
flex-direction: column;
align-items: center;
margin-bottom: 2rem;
padding-bottom: 1rem;
border-bottom: 1px solid rgba(255, 255, 255, 0.1);
}
.sidebar-header h2 {
font-size: 1.2rem;
margin-top: 0.5rem;
text-align: center;
}
.sidebar-header p {
font-size: 0.8rem;
opacity: 0.8;
text-align: center;
}
.sidebar-menu {
list-style: none;
}
.sidebar-menu li {
margin-bottom: 0.5rem;
}
.sidebar-menu a {
display: flex;
align-items: center;
padding: 0.8rem 1rem;
color: white;
text-decoration: none;
border-radius: var(--border-radius);
transition: var(--transition);
}
.sidebar-menu a:hover, .sidebar-menu a.active {
background-color: rgba(255, 255, 255, 0.1);
}
.sidebar-menu i {
margin-left: 0.8rem;
font-size: 1.1rem;
}
/* Main Content */
.main-content {
padding: 1.5rem;
background-color: #f5f7fa;
}
.header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 1.5rem;
padding-bottom: 1rem;
border-bottom: 1px solid #ddd;
}
.header h1 {
font-size: 1.5rem;
color: var(--primary-color);
}
.header-actions {
display: flex;
gap: 1rem;
}
.btn {
padding: 0.5rem 1rem;
border: none;
border-radius: var(--border-radius);
cursor: pointer;
transition: var(--transition);
display: flex;
align-items: center;
gap: 0.5rem;
}
.btn-primary {
background-color: var(--secondary-color);
color: white;
}
.btn-primary:hover {
background-color: #2980b9;
}
.btn-success {
background-color: var(--success-color);
color: white;
}
.btn-success:hover {
background-color: #219653;
}
.btn-warning {
background-color: var(--warning-color);
color: white;
}
.btn-warning:hover {
background-color: #d35400;
}
.btn-danger {
background-color: var(--accent-color);
color: white;
}
.btn-danger:hover {
background-color: #c0392b;
}
.btn-outline {
background-color: transparent;
border: 1px solid var(--secondary-color);
color: var(--secondary-color);
}
.btn-outline:hover {
background-color: rgba(52, 152, 219, 0.1);
}
/* Cards */
.card {
background-color: white;
border-radius: var(--border-radius);
box-shadow: var(--shadow);
padding: 1.5rem;
margin-bottom: 1.5rem;
}
.card-header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 1rem;
padding-bottom: 1rem;
border-bottom: 1px solid #eee;
}
.card-title {
font-size: 1.2rem;
color: var(--primary-color);
}
/* Dashboard Stats */
.stats-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
gap: 1.5rem;
margin-bottom: 1.5rem;
}
.stat-card {
background-color: white;
border-radius: var(--border-radius);
box-shadow: var(--shadow);
padding: 1.5rem;
text-align: center;
transition: var(--transition);
}
.stat-card:hover {
transform: translateY(-5px);
box-shadow: 0 6px 12px rgba(0, 0, 0, 0.15);
}
.stat-card i {
font-size: 2rem;
margin-bottom: 0.5rem;
color: var(--secondary-color);
}
.stat-card h3 {
font-size: 2rem;
margin-bottom: 0.5rem;
}
.stat-card p {
color: var(--text-light);
font-size: 0.9rem;
}
/* Sample Table */
.table-responsive {
overflow-x: auto;
}
table {
width: 100%;
border-collapse: collapse;
}
th, td {
padding: 1rem;
text-align: center;
border-bottom: 1px solid #eee;
}
th {
background-color: var(--light-color);
color: var(--primary-color);
font-weight: 600;
}
tr:hover {
background-color: rgba(52, 152, 219, 0.05);
}
.status-badge {
padding: 0.3rem 0.8rem;
border-radius: 20px;
font-size: 0.8rem;
font-weight: 600;
}
.status-received {
background-color: #fff3cd;
color: #856404;
}
.status-processing {
background-color: #d1ecf1;
color: #0c5460;
}
.status-completed {
background-color: #d4edda;
color: #155724;
}
.status-rejected {
background-color: #f8d7da;
color: #721c24;
}
/* Modal */
.modal {
display: none;
position: fixed;
z-index: 1000;
left: 0;
top: 0;
width: 100%;
height: 100%;
background-color: rgba(0, 0, 0, 0.5);
}
.modal-content {
background-color: white;
margin: 5% auto;
padding: 2rem;
border-radius: var(--border-radius);
width: 90%;
max-width: 600px;
box-shadow: 0 5px 15px rgba(0, 0, 0, 0.3);
animation: modalopen 0.3s;
}
@keyframes modalopen {
from {opacity: 0; transform: translateY(-50px);}
to {opacity: 1; transform: translateY(0);}
}
.modal-header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 1.5rem;
padding-bottom: 1rem;
border-bottom: 1px solid #eee;
}
.modal-header h2 {
font-size: 1.3rem;
}
.close-btn {
background: none;
border: none;
font-size: 1.5rem;
cursor: pointer;
color: var(--text-light);
}
.modal-body {
margin-bottom: 1.5rem;
}
.form-group {
margin-bottom: 1rem;
}
.form-group label {
display: block;
margin-bottom: 0.5rem;
font-weight: 600;
}
.form-control {
width: 100%;
padding: 0.7rem;
border: 1px solid #ddd;
border-radius: var(--border-radius);
font-size: 1rem;
}
.modal-footer {
display: flex;
justify-content: flex-end;
gap: 1rem;
}
/* Charts */
.chart-container {
background-color: white;
border-radius: var(--border-radius);
box-shadow: var(--shadow);
padding: 1.5rem;
margin-bottom: 1.5rem;
}
.chart-header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 1.5rem;
}
.chart-title {
font-size: 1.2rem;
color: var(--primary-color);
}
/* Responsive */
@media (max-width: 768px) {
.container {
grid-template-columns: 1fr;
}
.sidebar {
position: fixed;
top: 0;
left: -100%;
width: 200px;
height: 100vh;
z-index: 1000;
transition: var(--transition);
}
.sidebar.active {
left: 0;
}
.main-content {
padding: 1rem;
}
.header {
flex-direction: column;
align-items: flex-start;
gap: 1rem;
}
.stats-grid {
grid-template-columns: 1fr;
}
}
/* AnyCoder Link */
.anycoder-link {
position: fixed;
bottom: 1rem;
left: 1rem;
background-color: var(--primary-color);
color: white;
padding: 0.5rem 1rem;
border-radius: var(--border-radius);
text-decoration: none;
font-size: 0.8rem;
z-index: 1000;
box-shadow: var(--shadow);
}
.anycoder-link:hover {
background-color: #1a252f;
}
</style>
</head>
<body>
<div class="container">
<!-- Sidebar -->
<aside class="sidebar">
<div class="sidebar-header">
<i class="fas fa-flask fa-2x"></i>
<h2>آزمایشگاه آب و خاک اهواز</h2>
<p>سیستم مدیریت اطلاعات آزمایشگاهی</p>
</div>
<ul class="sidebar-menu">
<li><a href="#" class="active"><i class="fas fa-home"></i>داشبورد</a></li>
<li><a href="#"><i class="fas fa-vial"></i>نمونه‌ها</a></li>
<li><a href="#"><i class="fas fa-microscope"></i>آزمایش‌ها</a></li>
<li><a href="#"><i class="fas fa-file-alt"></i>گزارش‌ها</a></li>
<li><a href="#"><i class="fas fa-users"></i>کاربران</a></li>
<li><a href="#"><i class="fas fa-cogs"></i>تنظیمات</a></li>
<li><a href="#"><i class="fas fa-chart-line"></i>آمار و نمودار</a></li>
<li><a href="#"><i class="fas fa-calendar-alt"></i>تقویم</a></li>
</ul>
</aside>
<!-- Main Content -->
<main class="main-content">
<!-- Header -->
<header class="header">
<h1>داشبورد مدیریت آزمایشگاه</h1>
<div class="header-actions">
<button class="btn btn-primary"><i class="fas fa-plus"></i>نمونه جدید</button>
<button class="btn btn-outline"><i class="fas fa-sync-alt"></i>بروزرسانی</button>
</div>
</header>
<!-- Stats Cards -->
<div class="stats-grid">
<div class="stat-card">
<i class="fas fa-vial"></i>
<h3>1</h3>
<p>کل نمونه‌ها</p>
</div>
<div class="stat-card">
<i class="fas fa-check-circle"></i>
<h3>2</h3>
<p>آزمایش‌های تکمیل شده</p>
</div>
<div class="stat-card">
<i class="fas fa-file-pdf"></i>
<h3>1</h3>
<p>گزارش‌های صادر شده</p>
</div>
<div class="stat-card">
<i class="fas fa-clock"></i>
<h3>0</h3>
<p>نمونه‌های در انتظار</p>
</div>
</div>
<!-- Recent Samples -->
<div class="card">
<div class="card-header">
<h3 class="card-title">آخرین نمونه‌ها</h3>
<a href="#" class="btn btn-outline">مشاهده همه</a>
</div>
<div class="table-responsive">
<table>
<thead>
<tr>
<th>شناسه نمونه</th>
<th>نوع</th>
<th>موقعیت</th>
<th>تاریخ جمع‌آوری</th>
<th>وضعیت</th>
<th>عملیات</th>
</tr>
</thead>
<tbody>
<tr>
<td>SAMPLE_DKH_2025_001</td>
<td>خاک</td>
<td>مزرعه شماره 12 - دهخدا</td>
<td>2025-09-28</td>
<td><span class="status-badge status-received">دریافت شده</span></td>
<td>
<button class="btn btn-success btn-sm"><i class="fas fa-eye"></i></button>
<button class="btn btn-primary btn-sm"><i class="fas fa-edit"></i></button>
<button class="btn btn-danger btn-sm"><i class="fas fa-trash"></i></button>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<!-- Charts -->
<div class="chart-container">
<div class="chart-header">
<h3 class="chart-title">روند پارامترهای خاک</h3>
<div>
<button class="btn btn-outline btn-sm">هفته</button>
<button class="btn btn-outline btn-sm">ماه</button>
<button class="btn btn-outline btn-sm">سال</button>
</div>
</div>
<div style="height: 300px; background-color: #f8f9fa; border-radius: var(--border-radius); display: flex; align-items: center; justify-content: center;">
<p>نمودار روند پارامترها (pH, EC, N, P, K) در اینجا نمایش داده می‌شود</p>
</div>
</div>
<!-- Instruments Status -->
<div class="card">
<div class="card-header">
<h3 class="card-title">وضعیت دستگاه‌ها</h3>
</div>
<div class="table-responsive">
<table>
<thead>
<tr>
<th>شناسه</th>
<th>نام دستگاه</th>
<th>نوع</th>
<th>وضعیت</th>
<th>آخرین کالیبراسیون</th>
</tr>
</thead>
<tbody>
<tr>
<td>I001</td>
<td>EC/pH Meter</td>
<td>رسانایی و pH</td>
<td><span class="status-badge status-completed">فعال</span></td>
<td>2025-08-01</td>
</tr>
<tr>
<td>I002</td>
<td>Spectrophotometer</td>
<td>اسپکتروفتومتر</td>
<td><span class="status-badge status-completed">فعال</span></td>
<td>2025-07-15</td>
</tr>
</tbody>
</table>
</div>
</div>
</main>
</div>
<!-- Sample Details Modal -->
<div id="sampleModal" class="modal">
<div class="modal-content">
<div class="modal-header">
<h2>جزئیات نمونه</h2>
<button class="close-btn" onclick="closeModal('sampleModal')">&times;</button>
</div>
<div class="modal-body">
<div class="form-group">
<label>شناسه نمونه</label>
<input type="text" class="form-control" value="SAMPLE_DKH_2025_001" readonly>
</div>
<div class="form-group">
<label>نوع نمونه</label>
<input type="text" class="form-control" value="خاک" readonly>
</div>
<div class="form-group">
<label>نام مشتری</label>
<input type="text" class="form-control" value="کشت و صنعت دهخدا" readonly>
</div>
<div class="form-group">
<label>موقعیت</label>
<input type="text" class="form-control" value="مزرعه شماره 12 - دهخدا" readonly>
</div>
<div class="form-group">
<label>تاریخ جمع‌آوری</label>
<input type="text" class="form-control" value="2025-09-28" readonly>
</div>
<div class="form-group">
<label>وضعیت</label>
<input type="text" class="form-control" value="دریافت شده" readonly>
</div>
</div>
<div class="modal-footer">
<button class="btn btn-outline" onclick="closeModal('sampleModal')">بستن</button>
<button class="btn btn-primary">ویرایش</button>
</div>
</div>
</div>
<!-- AnyCoder Link -->
<a href="https://huggingface.co/spaces/akhaliq/anycoder" class="anycoder-link" target="_blank">
<i class="fas fa-code"></i> Built with anycoder
</a>
<script>
// Mobile sidebar toggle
const sidebar = document.querySelector('.sidebar');
const toggleBtn = document.createElement('button');
toggleBtn.innerHTML = '<i class="fas fa-bars"></i>';
toggleBtn.className = 'btn btn-primary';
toggleBtn.style.position = 'fixed';
toggleBtn.style.top = '1rem';
toggleBtn.style.left = '1rem';
toggleBtn.style.zIndex = '1001';
toggleBtn.style.display = 'none';
toggleBtn.onclick = () => sidebar.classList.toggle('active');
document.body.appendChild(toggleBtn);
// Check screen size and show/hide toggle button
function checkScreenSize() {
if (window.innerWidth <= 768) {
toggleBtn.style.display = 'block';
sidebar.classList.remove('active');
} else {
toggleBtn.style.display = 'none';
sidebar.classList.add('active');
}
}
window.addEventListener('resize', checkScreenSize);
checkScreenSize();
// Modal functions
function openModal(modalId) {
document.getElementById(modalId).style.display = 'block';
}
function closeModal(modalId) {
document.getElementById(modalId).style.display = 'none';
}
// Close modal when clicking outside
window.onclick = function(event) {
if (event.target.className === 'modal') {
event.target.style.display = 'none';
}
}
// Sample data for charts (would be implemented with Chart.js in a real app)
const chartData = {
labels: ['فروردین', 'اردیبهشت', 'خرداد', 'تیر', 'مرداد', 'شهریور'],
datasets: [
{
label: 'pH',
data: [7.2, 7.3, 7.5, 7.4, 7.6, 7.5],
borderColor: '#3498db',
backgroundColor: 'rgba(52, 152, 219, 0.1)'
},
{
label: 'EC (µS/cm)',
data: [1100, 1150, 1200, 1180, 1220, 1200],
borderColor: '#e74c3c',
backgroundColor: 'rgba(231, 76, 60, 0.1)'
}
]
};
// Initialize dashboard
document.addEventListener('DOMContentLoaded', function() {
// Add event listeners to view buttons
document.querySelectorAll('.btn-success').forEach(btn => {
btn.addEventListener('click', function() {
openModal('sampleModal');
});
});
// Add active class to current page in sidebar
const currentPage = window.location.pathname.split('/').pop();
document.querySelectorAll('.sidebar-menu a').forEach(link => {
if (link.getAttribute('href') === currentPage) {
link.classList.add('active');
}
});
});
</script>
</body>
</html>