From 1519870c0e18171ced014a840e86a459dc6b00f1 Mon Sep 17 00:00:00 2001
From: yangfeng <wanwan926_4@163.com>
Date: 星期二, 12 十二月 2023 17:26:06 +0800
Subject: [PATCH] 报工记录列表增加人员姓名

---
 src/stores/tasks.ts |   99 +++++++++++++++++++++++++++++++++++++++----------
 1 files changed, 78 insertions(+), 21 deletions(-)

diff --git a/src/stores/tasks.ts b/src/stores/tasks.ts
index 8f8599d..33df9a7 100644
--- a/src/stores/tasks.ts
+++ b/src/stores/tasks.ts
@@ -3,6 +3,7 @@
 import type { Task, TasksGroupByChannel, TasksResponse } from '@/api/task'
 import type { TaskListParams } from '@/api'
 import { getTaskList } from '@/api'
+import { isNumber } from 'lodash-es'
 
 export interface ChannelMoreBtnStatus {
   /** true 浠诲姟鏈姞杞藉畬  false 鎵�鏈変换鍔″凡缁忓姞杞藉畬鎴�*/
@@ -17,15 +18,16 @@
   /**
    * 鑾峰彇浠诲姟鏁版嵁
    * @param type 1鏈畬鎴�2浠婂ぉ鏈畬鎴�3宸插畬鎴�
+   * @param init 鏄惁鏄娆¤幏鍙�,棣栨闇�瑕侀�変腑绗竴椤逛换鍔�
    */
-  function getChannels(type: 1 | 2 | 3) {
+  function getChannels(type: 1 | 2 | 3, init = false) {
     currentType.value = type
     const params: TaskListParams = {
       type,
       offset: 0,
       limit: 3
     }
-    getTaskList(params)
+    return getTaskList(params)
       .then((res) => {
         channels.value = res.data
       })
@@ -33,6 +35,68 @@
         console.error(err)
         channels.value = []
       })
+      .finally(() => {
+        if (init) {
+          // 棣栨鑾峰彇閫氶亾鏁版嵁鏃惰嚜鍔ㄩ�変腑绗竴涓换鍔�
+          selectFirstTask(channels.value)
+        }
+      })
+  }
+
+  function selectFirstTask(channels: TasksGroupByChannel) {
+    const firstNotEmptyChannel = Object.entries(channels).find((ele) => {
+      const taskList = (ele[1] as TasksResponse)?.Tasks
+
+      return !!taskList?.length
+    })
+
+    if (firstNotEmptyChannel) {
+      const channelNumber = +firstNotEmptyChannel[0]
+      activeTask.value = channels[channelNumber].Tasks[0]
+      setActiveChannel(channelNumber)
+    } else {
+      // 濡傛灉娌℃湁浠诲姟灏辨竻绌哄綋鍓嶉�変腑鐨勪换鍔�
+      activeTask.value = undefined
+      if (channels[0]) {
+        setActiveChannel(0)
+      }
+    }
+  }
+
+  /**
+   * 鏁版嵁鍔犺浇瀹屾垚鍚庤嚜鍔ㄩ�変腑涓�涓换鍔�
+   */
+  function autoSelectTask(channel: number) {
+    const currentChannelTaskList = channels.value[channel].Tasks
+    if (currentChannelTaskList?.length) {
+      activeTask.value = currentChannelTaskList[0]
+      setActiveChannel(channel)
+    } else {
+      const firstNotEmptyChannel = Object.entries(channels.value).find((ele) => {
+        const taskList = (ele[1] as TasksResponse)?.Tasks
+
+        return !!taskList.length
+      })
+
+      if (firstNotEmptyChannel) {
+        const channelNumber = +firstNotEmptyChannel[0]
+        activeTask.value = channels.value[channelNumber].Tasks[0]
+        setActiveChannel(channel)
+      }
+    }
+  }
+
+  /**
+   * 鍒锋柊鎵�鏈夋暟鎹�
+   */
+  function reloadChannel(channel: number) {
+    return getChannels(currentType.value).then(() => {
+      autoSelectTask(channel)
+    })
+  }
+
+  function reloadAllData() {
+    getChannels(currentType.value)
   }
 
   function moreChannelTasksBtn(channelNumber: number) {
@@ -71,36 +135,29 @@
 
   /** 褰撳墠楂樹寒鐨勪换鍔� */
   const activeTask = ref<Task>()
-  function setActiveTask(task: Task) {
+  function setActiveTask(task: Task | undefined) {
     activeTask.value = task
+    if (isNumber(task?.Channel)) {
+      setActiveChannel(task?.Channel as number)
+    }
   }
 
-  const requestParamsMap = ref<{
-    [channel: number]: TaskListParams
-  }>({})
-  function getParamsByChannel(channel: number) {
-    return (
-      requestParamsMap.value[channel] ?? {
-        type: 1,
-        offset: 0,
-        limit: 3
-      }
-    )
+  const activeChannel = ref<number>(0)
+  function setActiveChannel(channelNumber: number) {
+    activeChannel.value = channelNumber
   }
 
-  function setParamsByChannel(channel: number, params: TaskListParams) {
-    requestParamsMap.value[channel] = params
-  }
   return {
     channels,
     getChannels,
     moreBtnStatus,
     activeTask,
+    reloadChannel,
     setActiveTask,
-    requestParamsMap,
-    getParamsByChannel,
-    setParamsByChannel,
     moreChannelTasksBtn,
-    foldChannelTasksBtn
+    foldChannelTasksBtn,
+    reloadAllData,
+    activeChannel,
+    setActiveChannel
   }
 })

--
Gitblit v1.8.0