diff --git a/src-tauri/src/apps/personemanagment/serializers.rs b/src-tauri/src/apps/personemanagment/serializers.rs index 15857e4..e9d487f 100644 --- a/src-tauri/src/apps/personemanagment/serializers.rs +++ b/src-tauri/src/apps/personemanagment/serializers.rs @@ -30,6 +30,7 @@ static TASK_TRANSFER_FIELDS: &[Field] = &[ Field::new("date_create").read_only(), Field::new("status"), Field::new("typ"), + Field::new("project_id"), ]; pub fn employee_serializer() -> ModelSerializer { diff --git a/src/apps/tasks/components/TaskListItem.vue b/src/apps/tasks/components/TaskListItem.vue new file mode 100644 index 0000000..9f3e6a2 --- /dev/null +++ b/src/apps/tasks/components/TaskListItem.vue @@ -0,0 +1,116 @@ + + + + + diff --git a/src/apps/tasks/views/TasksView.vue b/src/apps/tasks/views/TasksView.vue index 0a5b714..8176f31 100644 --- a/src/apps/tasks/views/TasksView.vue +++ b/src/apps/tasks/views/TasksView.vue @@ -12,6 +12,7 @@ import type { TaskUpdate, } from "../../../generated/models"; import { useModelApi } from "../../../shared/composables/useModelApi"; +import TaskListItem from "../components/TaskListItem.vue"; type CurrentEmployee = { id: number; @@ -125,72 +126,10 @@ const visibleDocTabs = computed(() => : [], ); -function personName( - person: { short_name?: string | null; name?: string | null } | null, -) { - if (!person) { - return "не указан"; - } - - return person.short_name ?? person.name ?? "не указан"; -} - -function taskTitle(task: { - id: number; - text?: string | null; - result?: string | null; -}) { - return task.text?.trim() || task.result?.trim() || `Задача #${task.id}`; -} - function badgeValue(count: number) { return count > 0 ? count : undefined; } -function isTaskTransfer(item: Task | TaskTransfer): item is TaskTransfer { - return "employee_from" in item; -} - -function itemTitle(item: Task | TaskTransfer) { - return isTaskTransfer(item) ? taskTitle(item.task) : taskTitle(item); -} - -function itemLabel(item: Task | TaskTransfer) { - if (isTaskTransfer(item)) { - return `Из ${personName(item.employee_from)} в ${personName(item.employee_to)} · Срок: ${item.task.deadline} · Создан: ${item.date_create}`; - } - - return `ID: ${item.id} · Исполнитель: ${personName(item.doer)} · Ответственный: ${personName(item.responsible)} · Срок: ${item.deadline}`; -} - -function itemStatus(item: Task | TaskTransfer) { - return isTaskTransfer(item) ? item.status : item.get_status || item.status; -} - -function itemStatusClass(item: Task | TaskTransfer) { - const statusClass = isTaskTransfer(item) ? item.task.status : item.get_status_class; - return statusClass || "status-default"; -} - -function itemStatusType(item: Task | TaskTransfer) { - const statusClass = itemStatusClass(item); - - if (/success|done|complete|green/i.test(statusClass)) { - return "success"; - } - if (/warning|pending|wait|yellow|orange/i.test(statusClass)) { - return "warning"; - } - if (/danger|error|red|fail/i.test(statusClass)) { - return "danger"; - } - - return "primary"; -} - -function itemPath(item: Task | TaskTransfer) { - return isTaskTransfer(item) ? `/tasks/${item.task.id}` : `/tasks/${item.id}`; -} function buildTaskParams( tab: MainTabKey, @@ -471,23 +410,12 @@ onMounted(async () => { /> - - - - + :item="item" + @open="router.push($event)" + />