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
94 lines
3.4 KiB
Vue
94 lines
3.4 KiB
Vue
<template>
|
|
<div class="bg-layer border border-layer-line rounded-lg shadow-xs p-5">
|
|
<h3 class="text-sm font-semibold text-foreground mb-4">Быстрые действия</h3>
|
|
<div class="grid grid-cols-1 sm:grid-cols-2 gap-3">
|
|
<Link
|
|
v-for="action in actions"
|
|
:key="action.route"
|
|
:href="route(action.route)"
|
|
class="group flex items-center gap-3 p-3 rounded-lg border border-transparent transition-all duration-150"
|
|
:class="action.hoverClass"
|
|
>
|
|
<div class="w-9 h-9 rounded-lg flex items-center justify-center flex-shrink-0 transition-colors" :class="action.bgClass">
|
|
<DashboardIcon :name="action.icon" size="4" :class="action.iconClass" />
|
|
</div>
|
|
<div>
|
|
<p class="text-sm font-medium text-foreground transition-colors" :class="action.textClass">
|
|
{{ action.label }}
|
|
</p>
|
|
<p class="text-xs text-muted-foreground-1">{{ action.desc }}</p>
|
|
</div>
|
|
</Link>
|
|
</div>
|
|
</div>
|
|
</template>
|
|
|
|
<script>
|
|
import { Link } from '@inertiajs/vue3';
|
|
import DashboardIcon from '../DashboardIcon.vue';
|
|
|
|
export default {
|
|
name: 'QuickActions',
|
|
components: {
|
|
Link,
|
|
DashboardIcon,
|
|
},
|
|
data() {
|
|
return {
|
|
actions: [
|
|
{
|
|
route: 'dashboard.posts.create',
|
|
label: 'Создать новость',
|
|
desc: 'Новая публикация на сайт',
|
|
icon: 'plus',
|
|
bgClass: 'bg-blue-500/10 group-hover:bg-blue-500/20',
|
|
iconClass: 'text-blue-600',
|
|
textClass: 'group-hover:text-primary',
|
|
hoverClass: 'hover:border-primary/20 hover:bg-primary/5',
|
|
},
|
|
{
|
|
route: 'dashboard.schedules.upload.create',
|
|
label: 'Загрузить расписание',
|
|
desc: 'Массовая загрузка файлов',
|
|
icon: 'arrow-up-tray',
|
|
bgClass: 'bg-emerald-500/10 group-hover:bg-emerald-500/20',
|
|
iconClass: 'text-emerald-600',
|
|
textClass: 'group-hover:text-emerald-600',
|
|
hoverClass: 'hover:border-emerald-500/20 hover:bg-emerald-500/5',
|
|
},
|
|
{
|
|
route: 'dashboard.educational-groups.create',
|
|
label: 'Добавить группу',
|
|
desc: 'Учебная группа',
|
|
icon: 'user-group',
|
|
bgClass: 'bg-violet-500/10 group-hover:bg-violet-500/20',
|
|
iconClass: 'text-violet-600',
|
|
textClass: 'group-hover:text-violet-600',
|
|
hoverClass: 'hover:border-violet-500/20 hover:bg-violet-500/5',
|
|
},
|
|
{
|
|
route: 'dashboard.quick-upload.create',
|
|
label: 'Быстрая загрузка',
|
|
desc: 'Загрузка файлов',
|
|
icon: 'paper-clip',
|
|
bgClass: 'bg-amber-500/10 group-hover:bg-amber-500/20',
|
|
iconClass: 'text-amber-600',
|
|
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',
|
|
},
|
|
],
|
|
};
|
|
},
|
|
}
|
|
</script>
|