From 3a3cc473c33cb4a97399ace76a1b35e9ffd68525 Mon Sep 17 00:00:00 2001
From: songshankun <songshankun@foxmail.com>
Date: 星期一, 20 十一月 2023 16:45:17 +0800
Subject: [PATCH] feat: 无任务选中通道时从p[lc读取统计

---
 src/stores/plc.ts                                  |    5 ++---
 src/views/dashboard/components/ChannelCollapse.vue |   30 ++++++++++++++++++++++--------
 src/stores/tasks.ts                                |   15 +++++++++++++--
 src/api/index.ts                                   |    1 -
 4 files changed, 37 insertions(+), 14 deletions(-)

diff --git a/src/api/index.ts b/src/api/index.ts
index 8c68113..818c651 100644
--- a/src/api/index.ts
+++ b/src/api/index.ts
@@ -43,7 +43,6 @@
 
 export interface ProductProgressParams {
   channel: number
-  procedureId: number
 }
 
 /**
diff --git a/src/stores/plc.ts b/src/stores/plc.ts
index b42f370..88d0122 100644
--- a/src/stores/plc.ts
+++ b/src/stores/plc.ts
@@ -27,8 +27,7 @@
   } = useRequest(
     () =>
       getProductProgress({
-        channel: taskStore.activeTask?.Channel,
-        procedureId: taskStore.activeTask?.Procedure.ID
+        channel: taskStore.activeChannel ?? 0
       } as ProductProgressParams),
     {
       manual: true,
@@ -42,7 +41,7 @@
      * 濡傛灉鍒囨崲鍒板叾浠栭�氶亾鐨勪换鍔�,鍒欓噸鏂拌疆璇lc
      */
     unwatch.value = watch(
-      () => taskStore.activeTask?.Channel,
+      () => taskStore.activeChannel,
       () => {
         cancelPLCPolling()
         startPLCPolling()
diff --git a/src/stores/tasks.ts b/src/stores/tasks.ts
index 971a627..6ebd205 100644
--- a/src/stores/tasks.ts
+++ b/src/stores/tasks.ts
@@ -49,9 +49,13 @@
     if (firstNotEmptyChannel) {
       const channelNumber = +firstNotEmptyChannel[0]
       activeTask.value = channels[channelNumber].Tasks[0]
+      setActiveChannel(channelNumber)
     } else {
       // 濡傛灉娌℃湁浠诲姟灏辨竻绌哄綋鍓嶉�変腑鐨勪换鍔�
       activeTask.value = undefined
+      if (channels[0]) {
+        setActiveChannel(0)
+      }
     }
   }
 
@@ -125,8 +129,13 @@
 
   /** 褰撳墠楂樹寒鐨勪换鍔� */
   const activeTask = ref<Task>()
-  function setActiveTask(task: Task) {
+  function setActiveTask(task: Task | undefined) {
     activeTask.value = task
+  }
+
+  const activeChannel = ref<number>(0)
+  function setActiveChannel(channelNumber: number) {
+    activeChannel.value = channelNumber
   }
 
   return {
@@ -138,6 +147,8 @@
     setActiveTask,
     moreChannelTasksBtn,
     foldChannelTasksBtn,
-    reloadAllData
+    reloadAllData,
+    activeChannel,
+    setActiveChannel
   }
 })
diff --git a/src/views/dashboard/components/ChannelCollapse.vue b/src/views/dashboard/components/ChannelCollapse.vue
index 1f483b7..8dda63a 100644
--- a/src/views/dashboard/components/ChannelCollapse.vue
+++ b/src/views/dashboard/components/ChannelCollapse.vue
@@ -1,19 +1,19 @@
 <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
@@ -39,11 +39,12 @@
 </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
@@ -59,6 +60,19 @@
   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">

--
Gitblit v1.8.0