up
This commit is contained in:
@@ -39,6 +39,7 @@
|
|||||||
]"
|
]"
|
||||||
:title="sidebarCollapsed ? t('app.dashboard') : ''"
|
:title="sidebarCollapsed ? t('app.dashboard') : ''"
|
||||||
>
|
>
|
||||||
|
<!-- Dashboard icon -->
|
||||||
<svg class="w-5 h-5 shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
<svg class="w-5 h-5 shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3 12l2-2m0 0l7-7 7 7M5 10v10a1 1 0 001 1h3m10-11l2 2m-2-2v10a1 1 0 01-1 1h-3m-6 0a1 1 0 001-1v-4a1 1 0 011-1h2a1 1 0 011 1v4a1 1 0 001 1m-6 0h6" />
|
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3 12l2-2m0 0l7-7 7 7M5 10v10a1 1 0 001 1h3m10-11l2 2m-2-2v10a1 1 0 01-1 1h-3m-6 0a1 1 0 001-1v-4a1 1 0 011-1h2a1 1 0 011 1v4a1 1 0 001 1m-6 0h6" />
|
||||||
</svg>
|
</svg>
|
||||||
@@ -55,6 +56,7 @@
|
|||||||
]"
|
]"
|
||||||
:title="sidebarCollapsed ? t('app.users') : ''"
|
:title="sidebarCollapsed ? t('app.users') : ''"
|
||||||
>
|
>
|
||||||
|
<!-- Users icon (multiple persons) -->
|
||||||
<svg class="w-5 h-5 shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
<svg class="w-5 h-5 shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 4.354a4 4 0 110 5.292M15 21H3v-1a6 6 0 0112 0v1zm0 0h6v-1a6 6 0 00-9-5.197M13 7a4 4 0 11-8 0 4 4 0 018 0z" />
|
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 4.354a4 4 0 110 5.292M15 21H3v-1a6 6 0 0112 0v1zm0 0h6v-1a6 6 0 00-9-5.197M13 7a4 4 0 11-8 0 4 4 0 018 0z" />
|
||||||
</svg>
|
</svg>
|
||||||
@@ -70,22 +72,24 @@
|
|||||||
]"
|
]"
|
||||||
:title="sidebarCollapsed ? t('app.restaurants') : ''"
|
:title="sidebarCollapsed ? t('app.restaurants') : ''"
|
||||||
>
|
>
|
||||||
<svg class="w-5 h-5 shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
<!-- Restaurant icon (fork & knife) -->
|
||||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3 12l2-2m0 0l7-7 7 7M5 10v10a1 1 0 001 1h3m10-11l2 2m-2-2v10a1 1 0 01-1 1h-3m-6 0a1 1 0 001-1v-4a1 1 0 011-1h2a1 1 0 011 1v4a1 1 0 001 1m-6 0h6" />
|
<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="M19 21V5a2 2 0 00-2-2H7a2 2 0 00-2 2v16m14 0h2m-2 0h-5m-9 0H3m2 0h5M9 7h1m-1 4h1m4-4h1m-1 4h1m-5 10v-5a1 1 0 011-1h2a1 1 0 011 1v5m-4 0h4" />
|
||||||
</svg>
|
</svg>
|
||||||
<span v-if="!sidebarCollapsed" class="truncate">{{ t('app.restaurants') }}</span>
|
<span v-if="!sidebarCollapsed" class="truncate">{{ t('app.restaurants') }}</span>
|
||||||
</router-link>
|
</router-link>
|
||||||
|
|
||||||
<router-link
|
<router-link
|
||||||
v-if="userStore.role === 'admin'"
|
v-if="userStore.role === 'admin'"
|
||||||
to="/olap-columns"
|
to="/olap/columns"
|
||||||
class="flex items-center rounded-lg hover:bg-gray-100 transition-colors group"
|
class="flex items-center rounded-lg hover:bg-gray-100 transition-colors group"
|
||||||
:class="[
|
:class="[
|
||||||
route.path === '/olap-columns' ? 'bg-primary-50 text-primary-700' : 'text-gray-700',
|
route.path === '/olap/columns' ? 'bg-primary-50 text-primary-700' : 'text-gray-700',
|
||||||
sidebarCollapsed ? 'justify-center p-2' : 'px-4 py-3 space-x-3'
|
sidebarCollapsed ? 'justify-center p-2' : 'px-4 py-3 space-x-3'
|
||||||
]"
|
]"
|
||||||
:title="sidebarCollapsed ? t('app.olapColumns') : ''"
|
:title="sidebarCollapsed ? t('app.olapColumns') : ''"
|
||||||
>
|
>
|
||||||
|
<!-- OLAP Columns icon (grid / columns) -->
|
||||||
<svg class="w-5 h-5 shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
<svg class="w-5 h-5 shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 6h16a2 2 0 012 2v8a2 2 0 01-2 2H4a2 2 0 01-2-2V8a2 2 0 012-2z" />
|
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 6h16a2 2 0 012 2v8a2 2 0 01-2 2H4a2 2 0 01-2-2V8a2 2 0 012-2z" />
|
||||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M8 6v12M16 6v12" />
|
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M8 6v12M16 6v12" />
|
||||||
@@ -101,13 +105,14 @@
|
|||||||
route.path === '/olap/queries' ? 'bg-primary-50 text-primary-700' : 'text-gray-700',
|
route.path === '/olap/queries' ? 'bg-primary-50 text-primary-700' : 'text-gray-700',
|
||||||
sidebarCollapsed ? 'justify-center p-2' : 'px-4 py-3 space-x-3'
|
sidebarCollapsed ? 'justify-center p-2' : 'px-4 py-3 space-x-3'
|
||||||
]"
|
]"
|
||||||
:title="sidebarCollapsed ? 'OLAP Queries' : ''"
|
:title="sidebarCollapsed ? 'OLAP Запросы' : ''"
|
||||||
>
|
>
|
||||||
|
<!-- Queries icon (magnifying glass over database) or document with lines -->
|
||||||
<svg class="w-5 h-5 shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
<svg class="w-5 h-5 shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 6h16a2 2 0 012 2v8a2 2 0 01-2 2H4a2 2 0 01-2-2V8a2 2 0 012-2z" />
|
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z" />
|
||||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M8 6v12M16 6v12" />
|
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M8 10h8M8 14h5" />
|
||||||
</svg>
|
</svg>
|
||||||
<span v-if="!sidebarCollapsed" class="truncate">OLAP Queries</span>
|
<span v-if="!sidebarCollapsed" class="truncate">OLAP запросы</span>
|
||||||
</router-link>
|
</router-link>
|
||||||
|
|
||||||
<router-link
|
<router-link
|
||||||
@@ -120,6 +125,7 @@
|
|||||||
]"
|
]"
|
||||||
:title="sidebarCollapsed ? t('dbConnections.pageName') : ''"
|
:title="sidebarCollapsed ? t('dbConnections.pageName') : ''"
|
||||||
>
|
>
|
||||||
|
<!-- Database icon (cylinder) -->
|
||||||
<svg class="w-5 h-5 shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
<svg class="w-5 h-5 shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 7v10c0 2.21 3.582 4 8 4s8-1.79 8-4V7M4 7c0 2.21 3.582 4 8 4s8-1.79 8-4M4 7c0-2.21 3.582-4 8-4s8 1.79 8 4m0 5c0 2.21-3.582 4-8 4s-8-1.79-8-4" />
|
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 7v10c0 2.21 3.582 4 8 4s8-1.79 8-4V7M4 7c0 2.21 3.582 4 8 4s8-1.79 8-4M4 7c0-2.21 3.582-4 8-4s8 1.79 8 4m0 5c0 2.21-3.582 4-8 4s-8-1.79-8-4" />
|
||||||
</svg>
|
</svg>
|
||||||
@@ -136,6 +142,7 @@
|
|||||||
]"
|
]"
|
||||||
:title="sidebarCollapsed ? t('app.settings') : ''"
|
:title="sidebarCollapsed ? t('app.settings') : ''"
|
||||||
>
|
>
|
||||||
|
<!-- Settings icon (gear) -->
|
||||||
<svg class="w-5 h-5 shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
<svg class="w-5 h-5 shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10.325 4.317c.426-1.756 2.924-1.756 3.35 0a1.724 1.724 0 002.573 1.066c1.543-.94 3.31.826 2.37 2.37a1.724 1.724 0 001.065 2.572c1.756.426 1.756 2.924 0 3.35a1.724 1.724 0 00-1.066 2.573c.94 1.543-.826 3.31-2.37 2.37a1.724 1.724 0 00-2.572 1.065c-.426 1.756-2.924 1.756-3.35 0a1.724 1.724 0 00-2.573-1.066c-1.543.94-3.31-.826-2.37-2.37a1.724 1.724 0 00-1.065-2.572c-1.756-.426-1.756-2.924 0-3.35a1.724 1.724 0 001.066-2.573c-.94-1.543.826-3.31 2.37-2.37.996.608 2.296.07 2.572-1.065z" />
|
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10.325 4.317c.426-1.756 2.924-1.756 3.35 0a1.724 1.724 0 002.573 1.066c1.543-.94 3.31.826 2.37 2.37a1.724 1.724 0 001.065 2.572c1.756.426 1.756 2.924 0 3.35a1.724 1.724 0 00-1.066 2.573c.94 1.543-.826 3.31-2.37 2.37a1.724 1.724 0 00-2.572 1.065c-.426 1.756-2.924 1.756-3.35 0a1.724 1.724 0 00-2.573-1.066c-1.543.94-3.31-.826-2.37-2.37a1.724 1.724 0 00-1.065-2.572c-1.756-.426-1.756-2.924 0-3.35a1.724 1.724 0 001.066-2.573c-.94-1.543.826-3.31 2.37-2.37.996.608 2.296.07 2.572-1.065z" />
|
||||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 12a3 3 0 11-6 0 3 3 0 016 0z" />
|
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 12a3 3 0 11-6 0 3 3 0 016 0z" />
|
||||||
|
|||||||
@@ -52,20 +52,10 @@ const routes = [
|
|||||||
meta: { requiresAuth: true, title: 'Restaurants' }
|
meta: { requiresAuth: true, title: 'Restaurants' }
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: '/olap-columns',
|
path: '/olap/columns',
|
||||||
component: OlapColumnsView,
|
component: OlapColumnsView,
|
||||||
meta: { requiresAuth: true, requiresAdmin: true, title: 'Olap Columns' }
|
meta: { requiresAuth: true, requiresAdmin: true, title: 'Olap Columns' }
|
||||||
},
|
},
|
||||||
{
|
|
||||||
path: '/database-connections',
|
|
||||||
component: DBConnections,
|
|
||||||
meta: { requiresAuth: true, requiresAdmin: true, title: 'Database Connections' }
|
|
||||||
},
|
|
||||||
{
|
|
||||||
path: '/settings',
|
|
||||||
component: AdminSettings,
|
|
||||||
meta: { requiresAuth: true, requiresAdmin: true, title: 'Settings' }
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
path: '/olap/queries',
|
path: '/olap/queries',
|
||||||
component: OlapQueriesPage,
|
component: OlapQueriesPage,
|
||||||
@@ -76,6 +66,16 @@ const routes = [
|
|||||||
component: OlapConstructor,
|
component: OlapConstructor,
|
||||||
meta: { requiresAuth: true, title: 'OLAP Constructor' }
|
meta: { requiresAuth: true, title: 'OLAP Constructor' }
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
path: '/database-connections',
|
||||||
|
component: DBConnections,
|
||||||
|
meta: { requiresAuth: true, requiresAdmin: true, title: 'Database Connections' }
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: '/settings',
|
||||||
|
component: AdminSettings,
|
||||||
|
meta: { requiresAuth: true, requiresAdmin: true, title: 'Settings' }
|
||||||
|
},
|
||||||
{
|
{
|
||||||
path: '/profile',
|
path: '/profile',
|
||||||
component: Profile,
|
component: Profile,
|
||||||
|
|||||||
@@ -10,15 +10,15 @@
|
|||||||
<table class="min-w-full divide-y divide-gray-200">
|
<table class="min-w-full divide-y divide-gray-200">
|
||||||
<thead class="bg-gray-50">
|
<thead class="bg-gray-50">
|
||||||
<tr>
|
<tr>
|
||||||
<th class="px-6 py-3 text-left text-xs font-medium text-gray-500">ID</th>
|
<th class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">ID</th>
|
||||||
<th class="px-6 py-3 text-left text-xs font-medium text-gray-500">Название</th>
|
<th class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">Название</th>
|
||||||
<th class="px-6 py-3 text-left text-xs font-medium text-gray-500">Активен</th>
|
<th class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">Активен</th>
|
||||||
<th class="px-6 py-3 text-left text-xs font-medium text-gray-500">Последнее выполнение</th>
|
<th class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">Последнее выполнение</th>
|
||||||
<th class="px-6 py-3 text-left text-xs font-medium text-gray-500">Результат</th>
|
<th class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">Результат</th>
|
||||||
<th class="px-6 py-3 text-left text-xs font-medium text-gray-500">Подключение</th>
|
<th class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">Подключение</th>
|
||||||
<th class="px-6 py-3 text-left text-xs font-medium text-gray-500">Рестораны</th>
|
<th class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">Рестораны</th>
|
||||||
<th class="px-6 py-3 text-left text-xs font-medium text-gray-500">Создан</th>
|
<th class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">Создан</th>
|
||||||
<th class="px-6 py-3 text-right text-xs font-medium text-gray-500">Действия</th>
|
<th class="px-6 py-3 text-right text-xs font-medium text-gray-500 uppercase tracking-wider">Действия</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody class="divide-y divide-gray-200 bg-white">
|
<tbody class="divide-y divide-gray-200 bg-white">
|
||||||
|
|||||||
Reference in New Issue
Block a user