Исправления фронта
Множество оптимизаций по фронту
This commit is contained in:
54
front_vue/src/stores/dialogs.js
Normal file
54
front_vue/src/stores/dialogs.js
Normal file
@@ -0,0 +1,54 @@
|
||||
/**
|
||||
* Конфигурация диалогов подтверждения
|
||||
* Используется в ConfirmDialog через prop "type"
|
||||
*/
|
||||
export const DIALOGS = {
|
||||
// Архивация задачи
|
||||
archive: {
|
||||
title: 'Архивировать задачу?',
|
||||
message: 'Задача будет перемещена в архив.<br>Вы сможете восстановить её позже.',
|
||||
confirmText: 'В архив',
|
||||
variant: 'warning'
|
||||
},
|
||||
|
||||
// Восстановление из архива
|
||||
restore: {
|
||||
title: 'Вернуть из архива?',
|
||||
message: 'Задача будет возвращена на доску<br>в колонку «Готово».',
|
||||
confirmText: 'Вернуть',
|
||||
variant: 'warning'
|
||||
},
|
||||
|
||||
// Удаление задачи
|
||||
deleteTask: {
|
||||
title: 'Удалить задачу?',
|
||||
message: 'Это действие нельзя отменить.<br>Задача будет удалена навсегда.',
|
||||
confirmText: 'Удалить',
|
||||
variant: 'danger'
|
||||
},
|
||||
|
||||
// Удаление комментария
|
||||
deleteComment: {
|
||||
title: 'Удалить комментарий?',
|
||||
message: 'Комментарий будет удалён навсегда.',
|
||||
confirmText: 'Удалить',
|
||||
variant: 'danger'
|
||||
},
|
||||
|
||||
// Удаление файла
|
||||
deleteFile: {
|
||||
title: 'Удалить изображение?',
|
||||
message: 'Изображение будет удалено из задачи.',
|
||||
confirmText: 'Удалить',
|
||||
variant: 'danger'
|
||||
},
|
||||
|
||||
// Несохранённые изменения
|
||||
unsavedChanges: {
|
||||
title: 'Обнаружены изменения',
|
||||
message: 'У вас есть несохранённые изменения.<br>Что вы хотите сделать?',
|
||||
confirmText: 'Сохранить',
|
||||
showDiscard: true,
|
||||
variant: 'default'
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
import { defineStore } from 'pinia'
|
||||
import { ref, computed } from 'vue'
|
||||
import { projectsApi, usersApi, authApi } from '../api'
|
||||
import { projectsApi, usersApi, authApi, cardsApi } from '../api'
|
||||
|
||||
export const useProjectsStore = defineStore('projects', () => {
|
||||
// ==================== СОСТОЯНИЕ ====================
|
||||
@@ -9,6 +9,9 @@ export const useProjectsStore = defineStore('projects', () => {
|
||||
const labels = ref([])
|
||||
const columns = ref([])
|
||||
const users = ref([])
|
||||
const cards = ref([]) // Активные карточки текущего проекта
|
||||
const archivedCards = ref([]) // Архивные карточки текущего проекта
|
||||
const cardsLoading = ref(false) // Загрузка карточек
|
||||
const loading = ref(false)
|
||||
const initialized = ref(false)
|
||||
const currentUser = ref(null) // Текущий авторизованный пользователь
|
||||
@@ -33,6 +36,12 @@ export const useProjectsStore = defineStore('projects', () => {
|
||||
|
||||
// ID текущего пользователя
|
||||
const currentUserId = computed(() => currentUser.value?.id || null)
|
||||
|
||||
// Имя текущего пользователя
|
||||
const currentUserName = computed(() => currentUser.value?.name || '')
|
||||
|
||||
// Аватар текущего пользователя
|
||||
const currentUserAvatar = computed(() => currentUser.value?.avatar_url || '')
|
||||
|
||||
// Является ли текущий пользователь админом проекта
|
||||
// Сервер возвращает id_admin: true только если текущий пользователь — админ
|
||||
@@ -139,6 +148,65 @@ export const useProjectsStore = defineStore('projects', () => {
|
||||
}
|
||||
}
|
||||
|
||||
// ==================== КАРТОЧКИ ====================
|
||||
// Загрузка активных карточек (silent = тихое обновление без loading)
|
||||
const fetchCards = async (silent = false) => {
|
||||
if (!currentProjectId.value) {
|
||||
cardsLoading.value = false
|
||||
return
|
||||
}
|
||||
|
||||
if (!silent) cardsLoading.value = true
|
||||
try {
|
||||
const result = await cardsApi.getAll(currentProjectId.value)
|
||||
if (result.success) cards.value = result.data
|
||||
} finally {
|
||||
if (!silent) cardsLoading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
// Загрузка архивных карточек
|
||||
const fetchArchivedCards = async () => {
|
||||
if (!currentProjectId.value) return
|
||||
|
||||
cardsLoading.value = true
|
||||
try {
|
||||
const result = await cardsApi.getAll(currentProjectId.value, 1) // archive = 1
|
||||
if (result.success) {
|
||||
archivedCards.value = result.data.map(card => ({
|
||||
id: card.id,
|
||||
title: card.title,
|
||||
description: card.descript,
|
||||
details: card.descript_full,
|
||||
departmentId: card.id_department,
|
||||
labelId: card.id_label,
|
||||
accountId: card.id_account,
|
||||
assignee: card.avatar_img,
|
||||
dueDate: card.date,
|
||||
dateCreate: card.date_create,
|
||||
dateClosed: card.date_closed,
|
||||
columnId: card.column_id,
|
||||
order: card.order ?? 0,
|
||||
comments_count: card.comments_count || 0,
|
||||
files: card.files || (card.file_img || []).map(f => ({
|
||||
name: f.name,
|
||||
url: f.url,
|
||||
size: f.size,
|
||||
preview: f.url
|
||||
}))
|
||||
}))
|
||||
}
|
||||
} finally {
|
||||
cardsLoading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
// Очистка карточек при смене проекта
|
||||
const clearCards = () => {
|
||||
cards.value = []
|
||||
archivedCards.value = []
|
||||
}
|
||||
|
||||
// Сброс при выходе
|
||||
const reset = () => {
|
||||
projects.value = []
|
||||
@@ -146,6 +214,8 @@ export const useProjectsStore = defineStore('projects', () => {
|
||||
labels.value = []
|
||||
columns.value = []
|
||||
users.value = []
|
||||
cards.value = []
|
||||
archivedCards.value = []
|
||||
currentProjectId.value = null
|
||||
currentUser.value = null
|
||||
initialized.value = false
|
||||
@@ -160,6 +230,9 @@ export const useProjectsStore = defineStore('projects', () => {
|
||||
labels,
|
||||
columns,
|
||||
users,
|
||||
cards,
|
||||
archivedCards,
|
||||
cardsLoading,
|
||||
loading,
|
||||
initialized,
|
||||
currentProjectId,
|
||||
@@ -168,11 +241,16 @@ export const useProjectsStore = defineStore('projects', () => {
|
||||
currentProject,
|
||||
doneColumnId,
|
||||
currentUserId,
|
||||
currentUserName,
|
||||
currentUserAvatar,
|
||||
isProjectAdmin,
|
||||
// Действия
|
||||
init,
|
||||
selectProject,
|
||||
fetchProjectData,
|
||||
fetchCards,
|
||||
fetchArchivedCards,
|
||||
clearCards,
|
||||
reset
|
||||
}
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user