| | |
| | | import { ref } from 'vue' |
| | | import { computed, ref } from 'vue' |
| | | import { defineStore } from 'pinia' |
| | | import type { Task } from '@/api/task' |
| | | import type { Task, TasksGroupByChannel, TasksResponse } from '@/api/task' |
| | | import type { TaskListParams } from '@/api' |
| | | import { getTaskList } from '@/api' |
| | | |
| | | export interface ChannelMoreBtnStatus { |
| | | /** true 任务未加载完 false 所有任务已经加载完成*/ |
| | | [channel: number]: boolean |
| | | } |
| | | |
| | | export const useTasksStore = defineStore('tasks', () => { |
| | | const channels = ref<TasksGroupByChannel>({}) |
| | | |
| | | const currentType = ref<1 | 2 | 3>(1) |
| | | |
| | | /** |
| | | * 获取任务数据 |
| | | * @param type 1未完成2今天未完成3已完成 |
| | | */ |
| | | function getChannels(type: 1 | 2 | 3) { |
| | | currentType.value = type |
| | | const params: TaskListParams = { |
| | | type, |
| | | offset: 0, |
| | | limit: 3 |
| | | } |
| | | getTaskList(params) |
| | | .then((res) => { |
| | | channels.value = res.data |
| | | }) |
| | | .catch((err) => { |
| | | console.error(err) |
| | | channels.value = [] |
| | | }) |
| | | } |
| | | |
| | | function moreChannelTasksBtn(channelNumber: number) { |
| | | const taskLength = channels.value[channelNumber].Tasks?.length ?? 0 |
| | | const params: TaskListParams = { |
| | | type: currentType.value, |
| | | channel: channelNumber, |
| | | offset: taskLength, |
| | | limit: 10 |
| | | } |
| | | getTaskList(params) |
| | | .then((res) => { |
| | | const existTasks = channels.value![channelNumber].Tasks ?? [] |
| | | channels.value[channelNumber] = res.data[channelNumber] ?? {} |
| | | channels.value[channelNumber].Tasks = channels.value[channelNumber].Tasks ?? [] |
| | | channels.value[channelNumber].Tasks = [...existTasks, ...channels.value[channelNumber].Tasks] |
| | | }) |
| | | .catch((err) => { |
| | | console.error(err) |
| | | }) |
| | | } |
| | | |
| | | function foldChannelTasksBtn(channelNumber: number) { |
| | | const tasks = channels.value[channelNumber].Tasks ?? [] |
| | | channels.value[channelNumber].Tasks = tasks.slice(0, 3) |
| | | } |
| | | |
| | | const moreBtnStatus = computed(() => { |
| | | return Object.entries(channels.value).reduce((pre, currentValue) => { |
| | | const channelNumber = +currentValue[0] |
| | | const channelData = currentValue[1] as TasksResponse |
| | | pre[channelNumber] = channelData.TaskCount > (channelData.Tasks?.length ?? 0) |
| | | return pre |
| | | }, {} as ChannelMoreBtnStatus) |
| | | }) |
| | | |
| | | /** 当前高亮的任务 */ |
| | | const activeTask = ref<Task>() |
| | | function setActiveTask(task: Task) { |
| | | activeTask.value = task |
| | | } |
| | | return { activeTask, setActiveTask } |
| | | |
| | | const requestParamsMap = ref<{ |
| | | [channel: number]: TaskListParams |
| | | }>({}) |
| | | function getParamsByChannel(channel: number) { |
| | | return ( |
| | | requestParamsMap.value[channel] ?? { |
| | | type: 1, |
| | | offset: 0, |
| | | limit: 3 |
| | | } |
| | | ) |
| | | } |
| | | |
| | | function setParamsByChannel(channel: number, params: TaskListParams) { |
| | | requestParamsMap.value[channel] = params |
| | | } |
| | | return { |
| | | channels, |
| | | getChannels, |
| | | moreBtnStatus, |
| | | activeTask, |
| | | setActiveTask, |
| | | requestParamsMap, |
| | | getParamsByChannel, |
| | | setParamsByChannel, |
| | | moreChannelTasksBtn, |
| | | foldChannelTasksBtn |
| | | } |
| | | }) |