| | |
| | | <template> |
| | | <div class="channel-collapse"> |
| | | <el-collapse v-model="activeChannel"> |
| | | <el-collapse-item |
| | | v-for="(channel, channelNumber) in channels" |
| | | :key="channelNumber" |
| | | :title="CHANNEL_NAME_MAP[channelNumber] + ' 通道' + ' (' + (channel?.TaskCount ?? 0) + ')'" |
| | | :name="String(channelNumber)" |
| | | > |
| | | <el-collapse-item v-for="(channel, channelNumber) in channels" :key="channelNumber" :name="String(channelNumber)"> |
| | | <template #title> |
| | | <div style="width: 100%; text-align: left" @click="selectChannel(channelNumber)"> |
| | | {{ CHANNEL_NAME_MAP[channelNumber] + ' 通道' + ' (' + (channel?.TaskCount ?? 0) + ')' }} |
| | | </div> |
| | | </template> |
| | | <TaskInfo |
| | | v-for="task in channel.Tasks" |
| | | :key="task.Procedure.ID" |
| | | :active="task.Procedure.ID === tasksStore.activeTask?.Procedure.ID" |
| | | :task="task" |
| | | style="margin-bottom: 16px" |
| | | @click="tasksStore.setActiveTask(task)" |
| | | @click="selectTask(task)" |
| | | ></TaskInfo> |
| | | |
| | | <div |
| | |
| | | </template> |
| | | <script setup lang="ts"> |
| | | import { ref, watchEffect } from 'vue' |
| | | import type { TasksGroupByChannel } from '@/api/task' |
| | | import type { Task, TasksGroupByChannel } from '@/api/task' |
| | | import TaskInfo from './TaskInfo.vue' |
| | | import { CHANNEL_NAME_MAP } from '@/common/constants' |
| | | import { useTasksStore } from '@/stores/tasks' |
| | | import { ArrowDownBold, ArrowUpBold } from '@element-plus/icons-vue' |
| | | import { isNumber } from 'lodash-es' |
| | | |
| | | export interface ChannelCollapseProps { |
| | | channels: TasksGroupByChannel |
| | |
| | | const channelNumbers = Object.keys(props?.channels ?? {}).sort((a, b) => +a - +b) |
| | | activeChannel.value = [...channelNumbers] |
| | | }) |
| | | |
| | | function selectChannel(channelNumber: number) { |
| | | tasksStore.setActiveTask(undefined) |
| | | tasksStore.setActiveChannel(+channelNumber) |
| | | } |
| | | |
| | | function selectTask(task: Task | undefined) { |
| | | tasksStore.setActiveTask(task) |
| | | let channel = tasksStore?.activeTask?.Channel |
| | | if (isNumber(channel)) { |
| | | tasksStore.setActiveChannel(channel) |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style scoped lang="scss"> |