Управление проектами
Добавил возможность удаления, создание и редактирование проектов.
This commit is contained in:
@@ -7,12 +7,35 @@
|
||||
<DepartmentTags
|
||||
v-model="activeDepartment"
|
||||
@project-change="onProjectChange"
|
||||
@create-project="openCreateProjectPanel"
|
||||
@edit-project="openEditProjectPanel"
|
||||
/>
|
||||
</template>
|
||||
|
||||
<!-- Мобильный: Проект + Отделы -->
|
||||
<template #mobile-filters>
|
||||
<ProjectSelector @change="onProjectChange" />
|
||||
<ProjectSelector
|
||||
@change="onProjectChange"
|
||||
@edit="openEditProjectPanel"
|
||||
/>
|
||||
<!-- Кнопки управления проектами (мобильные) -->
|
||||
<div class="mobile-project-actions">
|
||||
<button
|
||||
v-if="store.isProjectAdmin"
|
||||
class="mobile-project-btn"
|
||||
title="Настройки проекта"
|
||||
@click="openEditProjectPanel(store.currentProject)"
|
||||
>
|
||||
<i data-lucide="settings"></i>
|
||||
</button>
|
||||
<button
|
||||
class="mobile-project-btn"
|
||||
title="Создать проект"
|
||||
@click="openCreateProjectPanel"
|
||||
>
|
||||
<i data-lucide="plus"></i>
|
||||
</button>
|
||||
</div>
|
||||
<MobileSelect
|
||||
v-model="activeDepartment"
|
||||
:options="departmentOptions"
|
||||
@@ -69,6 +92,13 @@
|
||||
@close="closePanel"
|
||||
@delete="handleDeleteTask"
|
||||
/>
|
||||
|
||||
<ProjectPanel
|
||||
:show="projectPanelOpen"
|
||||
:project="editingProject"
|
||||
@close="closeProjectPanel"
|
||||
@saved="onProjectSaved"
|
||||
/>
|
||||
</template>
|
||||
</PageLayout>
|
||||
</template>
|
||||
@@ -79,6 +109,7 @@ import PageLayout from '../components/PageLayout.vue'
|
||||
import Header from '../components/Header.vue'
|
||||
import Board from '../components/Board.vue'
|
||||
import TaskPanel from '../components/TaskPanel'
|
||||
import ProjectPanel from '../components/ProjectPanel.vue'
|
||||
import DepartmentTags from '../components/DepartmentTags.vue'
|
||||
import ProjectSelector from '../components/ProjectSelector.vue'
|
||||
import MobileSelect from '../components/ui/MobileSelect.vue'
|
||||
@@ -172,6 +203,33 @@ const handleArchiveTask = async (cardId) => {
|
||||
closePanel()
|
||||
}
|
||||
|
||||
// ==================== ПАНЕЛЬ ПРОЕКТА ====================
|
||||
const projectPanelOpen = ref(false)
|
||||
const editingProject = ref(null)
|
||||
|
||||
const openCreateProjectPanel = () => {
|
||||
editingProject.value = null
|
||||
projectPanelOpen.value = true
|
||||
}
|
||||
|
||||
const openEditProjectPanel = (project) => {
|
||||
editingProject.value = project
|
||||
projectPanelOpen.value = true
|
||||
}
|
||||
|
||||
const closeProjectPanel = () => {
|
||||
projectPanelOpen.value = false
|
||||
editingProject.value = null
|
||||
}
|
||||
|
||||
const onProjectSaved = async (projectId) => {
|
||||
// Перезагружаем данные если изменился текущий проект
|
||||
if (projectId === store.currentProjectId) {
|
||||
await store.fetchProjectData()
|
||||
await fetchCards()
|
||||
}
|
||||
}
|
||||
|
||||
// ==================== АВТООБНОВЛЕНИЕ (POLLING) ====================
|
||||
const REFRESH_INTERVAL = (window.APP_CONFIG?.IDLE_REFRESH_SECONDS ?? 30) * 1000
|
||||
let pollTimer = null
|
||||
@@ -231,4 +289,36 @@ onUnmounted(() => {
|
||||
.main.mobile {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
/* Мобильные кнопки управления проектами */
|
||||
.mobile-project-actions {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 2px;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
|
||||
.mobile-project-btn {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
width: 32px;
|
||||
height: 32px;
|
||||
background: none;
|
||||
border: none;
|
||||
border-radius: 6px;
|
||||
color: var(--text-muted);
|
||||
cursor: pointer;
|
||||
transition: all 0.15s;
|
||||
}
|
||||
|
||||
.mobile-project-btn:active {
|
||||
color: var(--accent);
|
||||
background: rgba(255, 255, 255, 0.06);
|
||||
}
|
||||
|
||||
.mobile-project-btn i {
|
||||
width: 18px;
|
||||
height: 18px;
|
||||
}
|
||||
</style>
|
||||
|
||||
Reference in New Issue
Block a user