hesabixSite/templates/base.html.twig
Hesabix 1467e83ccf
Some checks are pending
PHP Composer / build (push) Waiting to run
remove bootstrap
2025-09-05 11:52:08 +03:30

548 lines
22 KiB
Twig
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{% apply spaceless %}
<!DOCTYPE html>
<html lang="fa" dir="rtl">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta lang="fa">
<meta
content="width=device-width,initial-scale=1.0" name="viewport"/>
<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-K1R1SYQY8E"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag() {
dataLayer.push(arguments);
}
gtag('js', new Date());
gtag('config', 'G-K1R1SYQY8E');
</script>
{% if block('des') is not defined %}
<meta content="{{twigFunctions.systemSettings.des}}" name="description"/>
{% else %}
<meta content="{{block('des') | trim}}" name="description"/>
{% endif %}
{% if block('keywords') is not defined %}
<meta content="{{twigFunctions.systemSettings.siteKeywords}}" name="keywords"/>
{% else %}
<meta content="{{block('keywords') | trim}}" name="keywords"/>
{% endif %}
<meta content="Babak Alizadeh" name="author"/>
<title>حسابیکس -
{% block title %}{% endblock %}
</title>
<link rel="icon" href="{{ asset('/favicon/favicon.ico' )}}">
<link rel="stylesheet" href="{{asset('/fonts/yekanbakh/fontiran.css')}}">
{% block stylesheets %}
{# 'app' must match the first argument to addEntry() in webpack.config.js #}
{{ encore_entry_link_tags('app') }}
<style>
/* آیکون‌های SVG در نوار ناوبری */
.icon-svg {
width: 16px;
height: 16px;
display: inline-block;
vertical-align: middle;
}
.icon-svg svg {
fill: currentColor;
width: 100%;
height: 100%;
}
/* آیکون‌های رنگی */
.icon-user svg { fill: #3498db; }
.icon-cogs svg { fill: #95a5a6; }
.icon-sign-out svg { fill: #e74c3c; }
/* بهبود نمایش منوی dropdown */
.dropdown-menu {
border-radius: 10px;
box-shadow: 0 5px 15px rgba(0, 0, 0, 0.1);
border: none;
padding: 10px 0;
}
.dropdown-item {
padding: 10px 20px;
transition: all 0.3s ease;
display: flex;
align-items: center;
}
.dropdown-item.text-danger:hover {
background-color: #f8d7da;
color: #721c24;
}
/* استایل‌های گواهی‌های اعتماد */
.trust-seal-loading {
animation: pulse 1.5s ease-in-out infinite;
}
.trust-seals-content img {
transition: opacity 0.3s ease-in-out;
max-height: 50px;
width: auto;
}
.trust-seals-content img:hover {
opacity: 0.8;
transform: scale(1.05);
}
@keyframes pulse {
0% { opacity: 1; }
50% { opacity: 0.5; }
100% { opacity: 1; }
}
/* استایل‌های هدر جدید */
header {
backdrop-filter: blur(10px);
-webkit-backdrop-filter: blur(10px);
}
/* انیمیشن hover برای لینک‌ها */
.nav-link {
position: relative;
overflow: hidden;
}
.nav-link::before {
content: '';
position: absolute;
top: 0;
left: -100%;
width: 100%;
height: 100%;
background: linear-gradient(90deg, transparent, rgba(59, 130, 246, 0.1), transparent);
transition: left 0.5s;
}
.nav-link:hover::before {
left: 100%;
}
/* بهبود dropdown ها */
.group:hover .group-hover\:opacity-100 {
opacity: 1;
}
.group:hover .group-hover\:visible {
visibility: visible;
}
.group:hover .group-hover\:translate-y-0 {
transform: translateY(0);
}
/* انیمیشن برای دکمه‌ها */
.btn-primary {
position: relative;
overflow: hidden;
}
.btn-primary::before {
content: '';
position: absolute;
top: 0;
left: -100%;
width: 100%;
height: 100%;
background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.2), transparent);
transition: left 0.5s;
}
.btn-primary:hover::before {
left: 100%;
}
/* بهبود responsive */
@media (max-width: 1024px) {
header .container {
padding-left: 1rem;
padding-right: 1rem;
}
}
/* انیمیشن برای لوگو */
.logo-container {
transition: transform 0.3s ease;
}
.logo-container:hover {
transform: scale(1.05);
}
/* مدیریت responsive منو */
#desktopMenu {
display: none !important;
}
@media (min-width: 1024px) {
#desktopMenu {
display: flex !important;
}
/* مخفی کردن دکمه منوی موبایل در دسکتاپ */
#mobileMenuButton {
display: none !important;
}
}
@media (max-width: 1023px) {
#desktopMenu {
display: none !important;
}
/* نمایش دکمه منوی موبایل در موبایل */
#mobileMenuButton {
display: block !important;
}
}
</style>
{% endblock %}
{% block javascripts %}
{{ encore_entry_script_tags('app') }}
<!-- اسکریپت لود غیرهمزمان گواهی‌های اعتماد -->
<script>
document.addEventListener('DOMContentLoaded', function() {
// تابع لود غیرهمزمان اسکریپت
function loadScriptAsync(src, callback) {
const script = document.createElement('script');
script.src = src;
script.async = true;
script.onload = callback;
script.onerror = function() {
console.warn('خطا در بارگذاری اسکریپت:', src);
callback();
};
document.head.appendChild(script);
}
// تابع لود غیرهمزمان تصاویر
function loadImagesAsync() {
const images = document.querySelectorAll('.trust-seals-content img');
let loadedCount = 0;
const totalImages = images.length;
images.forEach(img => {
img.onload = function() {
loadedCount++;
if (loadedCount === totalImages) {
showTrustSeals();
}
};
img.onerror = function() {
loadedCount++;
if (loadedCount === totalImages) {
showTrustSeals();
}
};
});
// اگر هیچ تصویری وجود ندارد، فوراً نمایش بده
if (totalImages === 0) {
showTrustSeals();
}
}
// تابع نمایش گواهی‌های اعتماد
function showTrustSeals() {
const loadingElement = document.querySelector('.trust-seal-loading');
const contentElement = document.querySelector('.trust-seals-content');
if (loadingElement && contentElement) {
loadingElement.style.display = 'none';
contentElement.style.display = 'flex';
contentElement.style.gap = '1rem';
contentElement.style.alignItems = 'center';
contentElement.style.justifyContent = 'center';
}
}
// شروع لود اسکریپت زرین‌پال
loadScriptAsync('https://www.zarinpal.com/webservice/TrustCode', function() {
// بعد از لود اسکریپت زرین‌پال، تصاویر را لود کن
setTimeout(loadImagesAsync, 100);
});
// اگر اسکریپت زرین‌پال لود نشد، باز هم تصاویر را لود کن
setTimeout(function() {
if (document.querySelector('.trust-seal-loading').style.display !== 'none') {
loadImagesAsync();
}
}, 3000);
});
// تابع toggle برای mobile menu
function toggleMobileMenu() {
const menu = document.getElementById('navbarSupportedContent');
if (menu.classList.contains('hidden')) {
menu.classList.remove('hidden');
} else {
menu.classList.add('hidden');
}
}
// مدیریت نمایش منو بر اساس اندازه صفحه
function handleResponsiveMenu() {
const mobileMenu = document.getElementById('navbarSupportedContent');
if (window.innerWidth >= 1024) {
// دسکتاپ - مخفی کردن منوی موبایل
if (mobileMenu) {
mobileMenu.classList.add('hidden');
}
}
}
// اجرا در بارگذاری صفحه
document.addEventListener('DOMContentLoaded', function() {
handleResponsiveMenu();
});
// اجرا در تغییر اندازه صفحه
window.addEventListener('resize', function() {
handleResponsiveMenu();
});
</script>
{% endblock %}
</head>
<body>
<!-- هدر جدید با طراحی مدرن -->
<header class="bg-white/95 backdrop-blur-md border-b border-gray-100 shadow-lg sticky top-0 z-50">
<div class="container mx-auto px-4 lg:px-6">
<div class="flex items-center justify-between h-16">
<!-- لوگو و نام برند -->
<div class="flex items-center space-x-3 space-x-reverse">
<a href="{{path('app_home')}}" class="flex items-center space-x-3 space-x-reverse group logo-container">
<div class="relative">
<img src="{{asset('/favicon/favicon.svg')}}"
alt="نرم افزار حسابداری آنلاین حسابیکس"
width="36" height="36"
class="transition-transform duration-300 group-hover:scale-110">
<div class="absolute -top-1 -right-1 w-2.5 h-2.5 bg-green-500 rounded-full animate-pulse"></div>
</div>
<div class="flex flex-col">
<span class="text-xl font-bold bg-gradient-to-l from-blue-600 to-purple-600 bg-clip-text text-transparent">
حسابیکس
</span>
<span class="text-xs text-gray-500 -mt-0.5">نرم‌افزار حسابداری آنلاین</span>
</div>
</a>
</div>
<!-- منوی اصلی - دسکتاپ -->
<nav id="desktopMenu" class="items-center space-x-1 space-x-reverse">
<a href="{{path('app_guide')}}"
class="nav-link px-3 py-2 text-gray-700 hover:text-blue-600 hover:bg-blue-50 rounded-lg transition-all duration-200 font-medium text-sm">
راهنمای جامع
</a>
<a href="{{path('app_professional_support')}}"
class="nav-link px-3 py-2 text-gray-700 hover:text-blue-600 hover:bg-blue-50 rounded-lg transition-all duration-200 font-medium text-sm">
پشتیبانی سازمانی
</a>
<a href="{{path('app_blog_home')}}"
class="nav-link px-3 py-2 text-gray-700 hover:text-blue-600 hover:bg-blue-50 rounded-lg transition-all duration-200 font-medium text-sm">
وبلاگ
</a>
<a href="{{path('qa_index')}}"
class="nav-link px-3 py-2 text-gray-700 hover:text-blue-600 hover:bg-blue-50 rounded-lg transition-all duration-200 font-medium text-sm">
سوالات
</a>
<a href="{{path('app_page',{'url':'sponsors'})}}"
class="nav-link px-3 py-2 text-gray-700 hover:text-blue-600 hover:bg-blue-50 rounded-lg transition-all duration-200 font-medium text-sm">
حامیان مالی
</a>
<a href="{{path('app_page',{'url':'about'})}}"
class="nav-link px-3 py-2 text-gray-700 hover:text-blue-600 hover:bg-blue-50 rounded-lg transition-all duration-200 font-medium text-sm">
داستان حسابیکس
</a>
<a href="{{path('app_page',{'url':'contact'})}}"
class="nav-link px-3 py-2 text-gray-700 hover:text-blue-600 hover:bg-blue-50 rounded-lg transition-all duration-200 font-medium text-sm">
تماس با ما
</a>
</nav>
<!-- دکمه‌های کاربر -->
<div class="flex items-center space-x-3 space-x-reverse">
{% if app.user and app.user.roles is defined and 'ROLE_CUSTOMER' in app.user.roles %}
<!-- کاربر وارد شده -->
<div class="relative group">
<button class="flex items-center space-x-2 space-x-reverse px-3 py-2 bg-gradient-to-l from-blue-50 to-purple-50 text-gray-700 rounded-lg hover:from-blue-100 hover:to-purple-100 transition-all duration-200 border border-blue-200">
<div class="w-7 h-7 bg-gradient-to-l from-blue-500 to-purple-500 rounded-full flex items-center justify-center">
<span class="text-white text-xs font-bold">{{ app.user.name|slice(0,1) }}</span>
</div>
<span class="font-medium text-sm">{{ app.user.name }}</span>
<svg class="w-3 h-3 transition-transform duration-200 group-hover:rotate-180" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 9l-7 7-7-7"></path>
</svg>
</button>
<div class="absolute left-0 mt-2 w-56 bg-white rounded-xl shadow-xl border border-gray-100 py-3 opacity-0 invisible group-hover:opacity-100 group-hover:visible transition-all duration-300 transform translate-y-2 group-hover:translate-y-0">
<div class="px-4 py-2 border-b border-gray-100">
<div class="text-sm font-medium text-gray-900">{{ app.user.name }}</div>
<div class="text-xs text-gray-500">عضو باشگاه مشتریان</div>
</div>
<a href="{{ path('customer_dashboard') }}"
class="flex items-center space-x-3 space-x-reverse px-4 py-3 text-gray-700 hover:bg-blue-50 hover:text-blue-600 transition-colors duration-200">
<div class="w-7 h-7 bg-blue-100 rounded-lg flex items-center justify-center">
<svg class="w-3.5 h-3.5 text-blue-600" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3 7v10a2 2 0 002 2h14a2 2 0 002-2V9a2 2 0 00-2-2H5a2 2 0 00-2-2z"></path>
</svg>
</div>
<span class="text-sm">داشبورد</span>
</a>
<div class="px-4 py-2">
<a href="{{ path('customer_logout') }}"
class="flex items-center space-x-3 space-x-reverse px-3 py-2 text-red-600 hover:bg-red-50 rounded-lg transition-colors duration-200">
<div class="w-7 h-7 bg-red-100 rounded-lg flex items-center justify-center">
<svg class="w-3.5 h-3.5 text-red-600" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M17 16l4-4m0 0l-4-4m4 4H7m6 4v1a3 3 0 01-3 3H6a3 3 0 01-3-3V7a3 3 0 013-3h4a3 3 0 013 3v1"></path>
</svg>
</div>
<span class="text-sm">خروج</span>
</a>
</div>
</div>
</div>
{% else %}
<!-- کاربر وارد نشده -->
<a href="{{ path('customer_login') }}"
class="px-3 py-2 text-gray-700 hover:text-blue-600 hover:bg-blue-50 rounded-lg transition-all duration-200 font-medium text-sm">
باشگاه مشتریان
</a>
{% endif %}
<!-- دکمه ورود/عضویت -->
<a target="_blank"
href="https://app.hesabix.ir"
class="btn-primary px-5 py-2 bg-gradient-to-l from-blue-600 to-purple-600 text-white rounded-lg hover:from-blue-700 hover:to-purple-700 transition-all duration-200 font-medium text-sm shadow-lg hover:shadow-xl transform hover:-translate-y-0.5">
ورود / عضویت
</a>
<!-- دکمه منوی موبایل -->
<button id="mobileMenuButton" class="lg:hidden p-2 rounded-lg hover:bg-gray-100 transition-colors duration-200"
type="button"
onclick="toggleMobileMenu()"
aria-label="Toggle navigation">
<svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 6h16M4 12h16M4 18h16"></path>
</svg>
</button>
</div>
</div>
<!-- منوی موبایل -->
<div class="lg:hidden hidden" id="navbarSupportedContent">
<div class="py-4 border-t border-gray-100">
<div class="space-y-1">
<a href="{{path('app_guide')}}"
class="block px-4 py-3 text-gray-700 hover:bg-blue-50 hover:text-blue-600 rounded-lg transition-colors duration-200">
راهنمای جامع
</a>
<a href="{{path('app_professional_support')}}"
class="block px-4 py-3 text-gray-700 hover:bg-blue-50 hover:text-blue-600 rounded-lg transition-colors duration-200">
پشتیبانی سازمانی
</a>
<a href="{{path('app_blog_home')}}"
class="block px-4 py-3 text-gray-700 hover:bg-blue-50 hover:text-blue-600 rounded-lg transition-colors duration-200">
وبلاگ
</a>
<a href="{{path('qa_index')}}"
class="block px-4 py-3 text-gray-700 hover:bg-blue-50 hover:text-blue-600 rounded-lg transition-colors duration-200">
سوالات
</a>
<a href="{{path('app_page',{'url':'sponsors'})}}"
class="block px-4 py-3 text-gray-700 hover:bg-blue-50 hover:text-blue-600 rounded-lg transition-colors duration-200">
حامیان مالی
</a>
<a href="{{path('app_page',{'url':'about'})}}"
class="block px-4 py-3 text-gray-700 hover:bg-blue-50 hover:text-blue-600 rounded-lg transition-colors duration-200">
داستان حسابیکس
</a>
<a href="{{path('app_page',{'url':'contact'})}}"
class="block px-4 py-3 text-gray-700 hover:bg-blue-50 hover:text-blue-600 rounded-lg transition-colors duration-200">
تماس با ما
</a>
</div>
</div>
</div>
</div>
</header>
{% block body %}{% endblock %}
<footer class="py-6 my-8">
<div class="flex justify-center items-center gap-3 mb-6" id="trust-seals-container">
<!-- نشانگرهای بارگذاری -->
<div class="trust-seal-loading flex gap-3">
<div class="spinner-border" role="status" aria-hidden="true"></div>
<span class="text-gray-500 text-sm">در حال بارگذاری گواهی‌های اعتماد...</span>
</div>
<!-- محتوای اصلی که بعد از لود نمایش داده می‌شود -->
<div class="trust-seals-content hidden">
<a referrerpolicy='origin' target='_blank' href='https://trustseal.enamad.ir/?id=614357&Code=4ATiNTREoPRD5Lz3zwc9zyz0zWGJiZL3'>
<img referrerpolicy='origin' src='https://trustseal.enamad.ir/logo.aspx?id=614357&Code=4ATiNTREoPRD5Lz3zwc9zyz0zWGJiZL3' alt='گواهی اعتماد اناماد' class='cursor-pointer hover:opacity-80 transition-opacity duration-300 max-h-12 w-auto' code='4ATiNTREoPRD5Lz3zwc9zyz0zWGJiZL3' loading="lazy">
</a>
<a href="https://bitpay.ir/certificate-230498-hesabix.ir" target="_blank">
<img src="https://bitpay.ir/theme/public/images/trusted-logo.svg" alt="گواهی اعتماد بیت‌پی" class="hover:opacity-80 transition-opacity duration-300 max-h-12 w-auto" loading="lazy"/>
</a>
<img referrerpolicy='origin' id='rgvjoeukesgtapfufukzrgvj' class='cursor-pointer hover:opacity-80 transition-opacity duration-300 max-h-12 w-auto' onclick='window.open("https://logo.samandehi.ir/Verify.aspx?id=380563&p=xlaomcsiobpddshwgvkaxlao", "Popup","toolbar=no, scrollbars=no, location=no, statusbar=no, menubar=no, resizable=0, width=450, height=630, top=30")' alt='گواهی اعتماد ساماندهی' src='https://logo.samandehi.ir/logo.aspx?id=380563&p=qftiaqgwlymaujynwlbqqfti' loading="lazy"/>
</div>
</div>
<ul class="flex justify-center flex-wrap gap-4 border-b border-gray-200 pb-6 mb-6">
<li>
<a target="_blank" href="https://azadbeh.ir/projects/%D8%AD%D8%B3%D8%A7%D8%A8%DB%8C%DA%A9%D8%B3" class="text-gray-600 hover:text-primary-600 px-2 py-1 transition-colors duration-200">فرصت‌های شغلی</a>
</li>
<li>
<a href="{{path('app_page',{'url':'hsx'})}}" class="text-gray-600 hover:text-primary-600 px-2 py-1 transition-colors duration-200">توکن HSX</a>
</li>
<li>
<a href="{{path('app_api_docs',{'url':'home'})}}" class="text-gray-600 hover:text-primary-600 px-2 py-1 transition-colors duration-200">مستندات API</a>
</li>
<li>
<a href="{{path('app_changes')}}" class="text-gray-600 hover:text-primary-600 px-2 py-1 transition-colors duration-200">تغییرات</a>
</li>
<li>
<a href="https://source.hesabix.ir/morrning" target="_blank" class="text-gray-600 hover:text-primary-600 px-2 py-1 transition-colors duration-200">مخازن کد</a>
</li>
<li>
<a href="{{path('app_page',{'url':'open-source'})}}" class="text-gray-600 hover:text-primary-600 px-2 py-1 transition-colors duration-200">متن‌باز</a>
</li>
<li>
<a href="{{path('app_page',{'url':'inMedia'})}}" class="text-gray-600 hover:text-primary-600 px-2 py-1 transition-colors duration-200">در رسانه‌ها</a>
</li>
<li>
<a href="{{path('app_page',{'url':'terms'})}}" class="text-gray-600 hover:text-primary-600 px-2 py-1 transition-colors duration-200">قوانین ارائه خدمات</a>
</li>
<li>
<a href="{{path('app_page',{'url':'privacy'})}}" class="text-gray-600 hover:text-primary-600 px-2 py-1 transition-colors duration-200">حریم خصوصی</a>
</li>
</ul>
<div class="text-center p-4">
<div class="grid grid-cols-1 md:grid-cols-2 gap-4">
<div class="text-center text-gray-500">
<img src={{asset('/img/sp/parspack.svg')}} alt="Parspack Co" width="25" class="inline-block">
با خاطری آسوده،استوار بر روی راهکار‌های ابری
<a href="https://parspack.com" target="_blank" class="text-primary-600 hover:underline">پارس‌پک</a>
</div>
<div class="text-center text-gray-500">
حسابیکس با
<img src={{asset('/img/heart.png')}} alt="Love" width="25" class="inline-block">
متن باز است
</div>
</div>
</div>
</footer>
</body>
</html>
{% endapply %}