feat: add Integration Credentials CRUD and Deploy UI

Integration Credentials:
- Add IntegrationCredential model with encrypted payload
- Add full CRUD: ManageIntegrationCredentialsAction, 4 Tasks, Controller, Requests
- Add migration for integration_credentials table
- Add Vue pages: Index, Create, Edit
- AI tasks now read API keys from DB instead of .env
- Add sidebar menu item

Deploy UI:
- Add DeployTask with full deploy lifecycle management
- Extend DeployController with index, log, history endpoints
- Add Deploy/Index.vue with live polling and deploy log viewer
- Add sidebar menu item and QuickAction for Sveden

UI:
- Add 'key' icon to SidebarNavItem
- Change deploy button color to amber in Main.vue
This commit is contained in:
F4ilji
2026-07-02 01:03:13 +05:00
parent 09bba25993
commit 8364b220cc
21 changed files with 1191 additions and 16 deletions
@@ -76,6 +76,7 @@ const iconMap = {
'arrow-path': 'arrow-path',
'academic-cap': 'academic-cap',
'clipboard-document-check': 'clipboard-document-check',
key: 'key',
};
const iconComponent = computed(() => iconMap[props.item.icon] || 'home');
@@ -121,6 +121,13 @@ export const menuItems = [
{ label: 'Все пользователи', route: 'dashboard.users.index' },
],
},
{
key: 'deploy',
label: 'Деплой',
icon: 'arrow-up-tray',
route: 'dashboard.deploy.index',
activePrefixes: ['dashboard.deploy'],
},
{
key: 'vikon-updates',
label: 'Обновления VIKON',
@@ -128,4 +135,11 @@ export const menuItems = [
route: 'dashboard.vikon-updates.index',
activePrefixes: ['dashboard.vikon-updates'],
},
{
key: 'integration-credentials',
label: 'Интеграционные ключи',
icon: 'key',
route: 'dashboard.integration-credentials.index',
activePrefixes: ['dashboard.integration-credentials'],
},
];
@@ -76,6 +76,16 @@ export default {
textClass: 'group-hover:text-amber-600',
hoverClass: 'hover:border-amber-500/20 hover:bg-amber-500/5',
},
{
route: 'dashboard.sveden',
label: 'Обновить Sveden',
desc: 'Заглушка для обновления',
icon: 'arrow-path',
bgClass: 'bg-cyan-500/10 group-hover:bg-cyan-500/20',
iconClass: 'text-cyan-600',
textClass: 'group-hover:text-cyan-600',
hoverClass: 'hover:border-cyan-500/20 hover:bg-cyan-500/5',
},
],
};
},