SecureKey-v9#X7m!2kZ@9pLq$5nR8bVw

در حال بارگزاری سیستم...

لطفاً صبر کنید

ding Overlay -->

در حال بارگزاری سیستم...

لطفاً صبر کنید

/* انیمیشن‌های پیشرفته */ .fade-enter-active, .fade-leave-active { transition: opacity 0.3s ease; } .fade-enter-from, .fade-leave-to { opacity: 0; } .slide-up-enter-active, .slide-up-leave-active { transition: all 0.3s ease; } .slide-up-enter-from, .slide-up-leave-to { opacity: 0; transform: translateY(20px); } /* افکت‌های هاور پیشرفته */ .hover-lift { transition: all 0.3s ease; } .hover-lift:hover { transform: translateY(-2px); box-shadow: 0 10px 25px rgba(0,0,0,0.1); } /* لودر زیبا */ .loading-spinner { border: 3px solid #f3f3f3; border-top: 3px solid #2563eb; border-radius: 50%; width: 24px; height: 24px; animation: spin 1s linear infinite; } @keyframes spin { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } } /* افکت شیشه‌ای */ .glass-effect { backdrop-filter: blur(10px); background: rgba(255, 255, 255, 0.9); } /* انیمیشن پالس برای دکمه‌ها */ .pulse-animation { animation: pulse 2s infinite; } @keyframes pulse { 0% { box-shadow: 0 0 0 0 rgba(37, 99, 235, 0.7); } 70% { box-shadow: 0 0 0 10px rgba(37, 99, 235, 0); } 100% { box-shadow: 0 0 0 0 rgba(37, 99, 235, 0); } } /* استایل‌های واکنش‌گرا */ .container-responsive { width: 100%; max-width: 1400px; margin: 0 auto; padding: 0 1rem; } /* موبایل اول - طراحی واکنش‌گرا */ @media (max-width: 640px) { .container-responsive { padding: 0 0.5rem; } .text-xs { font-size: 0.65rem; } .text-sm { font-size: 0.75rem; } .p-4 { padding: 0.75rem; } .p-6 { padding: 1rem; } .grid-cols-2 { grid-template-columns: 1fr; } .md\:grid-cols-2 { grid-template-columns: 1fr; } .md\:grid-cols-4 { grid-template-columns: repeat(2, 1fr); } } @media (max-width: 768px) { .mobile-nav-container { position: fixed; bottom: 0; left: 0; right: 0; background: rgba(255, 255, 255, 0.98); border-top: 1px solid #cbd5e1; z-index: 100; padding-bottom: env(safe-area-inset-bottom); height: 60px; box-shadow: 0 -4px 15px rgba(0,0,0,0.08); display: block !important; } .desktop-sidebar { display: none !important; } .main-content { margin-right: 0 !important; padding-bottom: 80px !important; } .search-box { width: 100% !important; } .grid-cols-2 { grid-template-columns: 1fr; } .md\:grid-cols-2 { grid-template-columns: 1fr; } .lg\:grid-cols-4 { grid-template-columns: repeat(2, 1fr); } } @media (min-width: 769px) { .mobile-nav-container { display: none !important; } .desktop-sidebar { display: flex !important; } .main-content { margin-right: 16rem !important; padding-bottom: 2rem !important; } } /* بهبود اسکرول */ .main-content { overflow-y: auto; overflow-x: hidden; min-height: 100vh; } .desktop-sidebar { overflow-y: auto; overflow-x: hidden; } /* استایل برای موبایل */ .mobile-nav-flex { display: flex; justify-content: space-around; align-items: center; height: 100%; width: 100%; } .nav-item { flex: 1; display: flex; flex-direction: column; align-items: center; justify-content: center; color: #94a3b8; font-size: 0.65rem; transition: all 0.2s; height: 100%; padding-top: 4px; } .nav-item.active { color: #2563eb; font-weight: 800; } .nav-item.active i { transform: translateY(-2px); color: #2563eb; } .nav-item i { font-size: 1.1rem; margin-bottom: 2px; } /* بهبود جداول برای موبایل */ .table-responsive { overflow-x: auto; -webkit-overflow-scrolling: touch; } @media (max-width: 640px) { .text-xs { font-size: 0.65rem; } .text-sm { font-size: 0.75rem; } .p-4 { padding: 0.75rem; } .p-6 { padding: 1rem; } .rounded-xl { border-radius: 0.5rem; } .text-lg { font-size: 1rem; } } /* استایل برای صفحات باریک */ @media (max-width: 390px) { .text-xs { font-size: 0.6rem; } .p-4 { padding: 0.5rem; } .grid-cols-2 { grid-template-columns: 1fr; } .text-lg { font-size: 0.9rem; } } /* استایل برای تبلت */ @media (min-width: 768px) and (max-width: 1024px) { .lg\:grid-cols-4 { grid-template-columns: repeat(2, 1fr); } .container-responsive { padding: 0 1.5rem; } } /* استایل برای دسکتاپ بزرگ */ @media (min-width: 1440px) { .container-responsive { max-width: 1600px; padding: 0 2rem; } }
{{ activeTabLabel }}
{{ currentDate }}
نتایج جستجو: {{ searchQuery }}
{{ res.title }}
{{ res.subtitle }}
{{ res.type }}
چیزی یافت نشد.

وضعیت پروژه

هشدار ثبت تکراری!

این فعالیت قبلاً در {{ duplicateWarning.projectName }} ثبت شده است.

هزینه {{ dashboardStageId ? 'مرحله' : 'کل' }}

{{ formatPrice(projectStats.totalCost) }}

پرداختی (تایید شده)

{{ formatPrice(projectStats.totalPaid) }}

مانده بدهی

{{ formatPrice(projectStats.debt) }}

پیشرفت مالی

{{ projectStats.progress }}%

مدیریت مراحل پروژه

{{ s.name }}

لطفا ابتدا پروژه را از داشبورد انتخاب کنید.

ثبت هزینه جدید {{ activeProject.name }}
این فعالیت قبلاً ثبت شده است!

افزودن شخص/فروشگاه

{{ p.name }}
{{ p.role || '---' }}
{{ getPersonBalanceText(p.id) }}
شرح هزینه/کارکرد پرداختی مانده واحد پروژه عملیات
{{ getPersonName(t.personId) }}
{{ t.date }} - {{ t.description }}
{{ formatPrice(t.amount) }} {{ formatPrice(t.paid) }} {{ formatPrice((t.amount||0)-(t.paid||0)) }} {{ t.quantity ? t.quantity + ' ' + (t.unit || '') : '-' }}
{{ getProjectName(t.projectId) }}
({{ getStageName(t.stageId) }})

فیلترهای انتخاب شخص

{{ getPersonBalanceText(paymentPersonId) }}
اقلام تسویه نشده (تیک بزنید)
جمع: {{ formatPrice(selectedTotal) }}
هیچ بدهی بازی وجود ندارد.

پرداخت مستقیم (علی‌الحساب)

پشتیبان‌گیری

ویرایش تراکنش

انتقال فعالیت به پروژه دیگر

اطلاعات فعلی:
پروژه: {{ getProjectName(transferData.sourceProjectId) }}
مرحله: {{ getStageName(transferData.sourceStageId) || 'بدون مرحله' }}
شخص: {{ getPersonName(transferData.personId) }}
شرح: {{ transferData.description }}
مبلغ: {{ formatPrice(transferData.amount) }}
این فعالیت قبلاً در پروژه مقصد ثبت شده است!

ریز حساب: {{ selectedPerson.name }}

وضعیت کلی: {{ getPersonBalanceText(selectedPerson.id) }}
{{ t.date }}
{{ t.description }} ({{ getProjectName(t.projectId) }})
{{ t.quantity }} {{ t.unit }}
{{ formatPrice(t.amount) }}
پ: {{ formatPrice(t.paid) }}

پروژه

.md\:grid-cols-4 { grid-template-columns: repeat(2, 1fr); } } @media (max-width: 768px) { .mobile-nav-container { position: fixed; bottom: 0; left: 0; right: 0; background: rgba(255, 255, 255, 0.98); border-top: 1px solid #cbd5e1; z-index: 100; padding-bottom: env(safe-area-inset-bottom); height: 60px; box-shadow: 0 -4px 15px rgba(0,0,0,0.08); display: block !important; } .desktop-sidebar { display: none !important; } .main-content { margin-right: 0 !important; padding-bottom: 80px !important; } .search-box { width: 100% !important; } .grid-cols-2 { grid-template-columns: 1fr; } .md\:grid-cols-2 { grid-template-columns: 1fr; } .lg\:grid-cols-4 { grid-template-columns: repeat(2, 1fr); } } @media (min-width: 769px) { .mobile-nav-container { display: none !important; } .desktop-sidebar { display: flex !important; } .main-content { margin-right: 16rem !important; padding-bottom: 2rem !important; } } /* بهبود اسکرول */ .main-content { overflow-y: auto; overflow-x: hidden; min-height: 100vh; } .desktop-sidebar { overflow-y: auto; overflow-x: hidden; } /* استایل برای موبایل */ .mobile-nav-flex { display: flex; justify-content: space-around; align-items: center; height: 100%; width: 100%; } .nav-item { flex: 1; display: flex; flex-direction: column; align-items: center; justify-content: center; color: #94a3b8; font-size: 0.65rem; transition: all 0.2s; height: 100%; padding-top: 4px; } .nav-item.active { color: #2563eb; font-weight: 800; } .nav-item.active i { transform: translateY(-2px); color: #2563eb; } .nav-item i { font-size: 1.1rem; margin-bottom: 2px; } /* بهبود جداول برای موبایل */ .table-responsive { overflow-x: auto; -webkit-overflow-scrolling: touch; } @media (max-width: 640px) { .text-xs { font-size: 0.65rem; } .text-sm { font-size: 0.75rem; } .p-4 { padding: 0.75rem; } .p-6 { padding: 1rem; } .rounded-xl { border-radius: 0.5rem; } .text-lg { font-size: 1rem; } } /* استایل برای صفحات باریک */ @media (max-width: 390px) { .text-xs { font-size: 0.6rem; } .p-4 { padding: 0.5rem; } .grid-cols-2 { grid-template-columns: 1fr; } .text-lg { font-size: 0.9rem; } } /* استایل برای تبلت */ @media (min-width: 768px) and (max-width: 1024px) { .lg\:grid-cols-4 { grid-template-columns: repeat(2, 1fr); } .container-responsive { padding: 0 1.5rem; } } /* استایل برای دسکتاپ بزرگ */ @media (min-width: 1440px) { .container-responsive { max-width: 1600px; padding: 0 2rem; } }
{{ activeTabLabel }}
{{ currentDate }}
نتایج جستجو: {{ searchQuery }}
{{ res.title }}
{{ res.subtitle }}
{{ res.type }}
چیزی یافت نشد.

وضعیت پروژه

هشدار ثبت تکراری!

این فعالیت قبلاً در {{ duplicateWarning.projectName }} ثبت شده است.

هزینه {{ dashboardStageId ? 'مرحله' : 'کل' }}

{{ formatPrice(projectStats.totalCost) }}

پرداختی (تایید شده)

{{ formatPrice(projectStats.totalPaid) }}

مانده بدهی

{{ formatPrice(projectStats.debt) }}

پیشرفت مالی

{{ projectStats.progress }}%

مدیریت مراحل پروژه

{{ s.name }}

لطفا ابتدا پروژه را از داشبورد انتخاب کنید.

ثبت هزینه جدید {{ activeProject.name }}
این فعالیت قبلاً ثبت شده است!

افزودن شخص/فروشگاه

{{ p.name }}
{{ p.role || '---' }}
{{ getPersonBalanceText(p.id) }}
شرح هزینه/کارکرد پرداختی مانده واحد پروژه عملیات
{{ getPersonName(t.personId) }}
{{ t.date }} - {{ t.description }}
{{ formatPrice(t.amount) }} {{ formatPrice(t.paid) }} {{ formatPrice((t.amount||0)-(t.paid||0)) }} {{ t.quantity ? t.quantity + ' ' + (t.unit || '') : '-' }}
{{ getProjectName(t.projectId) }}
({{ getStageName(t.stageId) }})

فیلترهای انتخاب شخص

{{ getPersonBalanceText(paymentPersonId) }}
اقلام تسویه نشده (تیک بزنید)
جمع: {{ formatPrice(selectedTotal) }}
هیچ بدهی بازی وجود ندارد.

پرداخت مستقیم (علی‌الحساب)

پشتیبان‌گیری

ویرایش تراکنش

انتقال فعالیت به پروژه دیگر

اطلاعات فعلی:
پروژه: {{ getProjectName(transferData.sourceProjectId) }}
مرحله: {{ getStageName(transferData.sourceStageId) || 'بدون مرحله' }}
شخص: {{ getPersonName(transferData.personId) }}
شرح: {{ transferData.description }}
مبلغ: {{ formatPrice(transferData.amount) }}
این فعالیت قبلاً در پروژه مقصد ثبت شده است!

ریز حساب: {{ selectedPerson.name }}

وضعیت کلی: {{ getPersonBalanceText(selectedPerson.id) }}
{{ t.date }}
{{ t.description }} ({{ getProjectName(t.projectId) }})
{{ t.quantity }} {{ t.unit }}
{{ formatPrice(t.amount) }}
پ: {{ formatPrice(t.paid) }}

پروژه