From c4edc315bfa4c1cbd4049df03bc2b0b3572ec930 Mon Sep 17 00:00:00 2001
From: yz <221840196@smail.nju.edu.cn>
Date: Sat, 18 Jan 2025 01:51:49 +0800
Subject: [PATCH] feat: "taskPool"

---
 entry/build-profile.json5              |  6 ++++
 entry/src/main/ets/pages/Index.ets     | 46 ++++++++++++--------------
 entry/src/main/ets/pages/LocalPage.ets | 46 +++++++++++++++++++++-----
 3 files changed, 65 insertions(+), 33 deletions(-)

diff --git a/entry/build-profile.json5 b/entry/build-profile.json5
index dfb34f7..81a2f0e 100644
--- a/entry/build-profile.json5
+++ b/entry/build-profile.json5
@@ -1,6 +1,12 @@
 {
   "apiType": "stageMode",
   "buildOption": {
+    "sourceOption": {
+      "workers": [
+        './src/main/ets/workers/Worker.ets',
+        './src/main/ets/workers/Worker1.ets'
+      ]
+    }
   },
   "buildOptionSet": [
     {
diff --git a/entry/src/main/ets/pages/Index.ets b/entry/src/main/ets/pages/Index.ets
index da74859..df3ce8f 100644
--- a/entry/src/main/ets/pages/Index.ets
+++ b/entry/src/main/ets/pages/Index.ets
@@ -4,32 +4,34 @@ import {LocalPage} from '../pages/LocalPage'
 import {Login} from '../pages/LoginPage'
 import webAPI from '../public/WebAPI';
 import TodoItemModel from '../viewmodel/TodoItemModel';
-import { taskpool } from '@kit.ArkTS';
 
-/*
- 骞跺彂鑾峰彇瀹屾垚鏁伴噺鍜屽垪琛�
- */
-@Concurrent
-async function showCompletedNum(): Promise<number> {
-  return await webAPI.getDone()
+function calUncompleted(tasks: Array<TodoItemModel>) {
+  let num = 0
+  for(const item of tasks) {
+    if(!item.isDone) num++
+  }
+  return num
 }
 
-@Concurrent
-async function showTodoList(): Promise<Array<TodoItemModel>> {
-  return await webAPI.getItems()
+function calImmediate(tasks: Array<TodoItemModel>) {
+  let num = 0
+  for(const item of tasks) {
+    if(item.ddl.substring(0,4)=='2025' && item.ddl.substring(5,7)=='01' && Number.parseInt(item.ddl.substring(5,7))-18<=7) num++
+  }
+  return num
 }
 
 @Entry
 @Component
 struct Index {
-
   @State state:number = 0
-  @State totalTasks: Array<TodoItemModel> = [] //寰呰幏鍙栫殑todolist鏁版嵁
+  @State totalTasks: Array<TodoItemModel> = []
   @State totalTaskCnt: number = 0
-  @State completedTaskCnt: number = 0
+  @State uncompletedCnt: number = 0
+  @State immediateCnt: number = 0
 
-  @State currentIndex: number = 0; //瀵艰埅鏍忎笅鏍�
-  private tabsController: TabsController = new TabsController();
+  @State currentIndex: number = 0 //瀵艰埅鏍忎笅鏍�
+  private tabsController: TabsController = new TabsController()
 
   @Builder //瀵艰埅鏍�
   tabBarBuilder(title: string, targetIndex: number, selectedIcon: Resource, unselectIcon: Resource) {
@@ -59,22 +61,18 @@ struct Index {
     Column() {
       Tabs({ barPosition: BarPosition.End, controller: this.tabsController }) {
         TabContent() {
-          LocalPage({state:this.state, totalTasks:this.totalTasks,
-            totalTaskCnt:this.totalTaskCnt, completedTaskCnt:this.completedTaskCnt})
+          LocalPage({state:this.state, totalTasks:this.totalTasks, uncompletedCnt:this.uncompletedCnt, immediateCnt:this.immediateCnt})
         }
         .onWillShow(async ()=>{
           // 鍦ㄦ樉绀轰箣鍓嶏紝鏇存柊寰呭姙浜嬮」鐘舵€�
           if(webAPI.token == '') this.state = 0
           else {
-            //this.totalTasks = await webAPI.getItems()
-            taskpool.execute(showCompletedNum).then((ret) => {
-              this.completedTaskCnt = ret as number
-            })
-            taskpool.execute(showTodoList).then((ret) => {
-              this.totalTasks = ret as Array<TodoItemModel>
-            })
+            this.totalTasks = await webAPI.getItems()
             if(this.totalTasks.length == 0) this.state = 1
             else this.state = 2
+
+            this.uncompletedCnt = calUncompleted(this.totalTasks)
+            this.immediateCnt = calImmediate(this.totalTasks)
           }
         })
         .tabBar(this.tabBarBuilder('寰呭姙', 0, $r('app.media.ic_01_on'), $r('app.media.ic_01_off')))
diff --git a/entry/src/main/ets/pages/LocalPage.ets b/entry/src/main/ets/pages/LocalPage.ets
index 4aed960..ebc37a4 100644
--- a/entry/src/main/ets/pages/LocalPage.ets
+++ b/entry/src/main/ets/pages/LocalPage.ets
@@ -6,13 +6,32 @@ import AddItem from '../view/AddItem';
 import ItemDetail from '../view/ItemDetail'
 import { promptAction } from '@kit.ArkUI';
 import webAPI from '../public/WebAPI';
+import { taskpool } from '@kit.ArkTS';
+
+@Concurrent
+function calUncompleted(tasks: Array<TodoItemModel>) {
+  let num = 0
+  for(const item of tasks) {
+    if(!item.isDone) num++
+  }
+  return num
+}
+
+@Concurrent
+function calImmediate(tasks: Array<TodoItemModel>) {
+  let num = 0
+  for(const item of tasks) {
+    if(item.ddl.substring(0,4)=='2025' && item.ddl.substring(5,7)=='01' && Number.parseInt(item.ddl.substring(5,7))-18<=7) num++
+  }
+  return num
+}
 
 @Component
 export struct LocalPage {
   @Link state: number
-  @Link totalTasks: Array<TodoItemModel>
-  @Link totalTaskCnt: number
-  @Link completedTaskCnt: number
+  @Link @Watch('conTask') totalTasks: Array<TodoItemModel>
+  @Link uncompletedCnt: number
+  @Link immediateCnt: number
 
   @Provide('localPageStack') LocalPageStack: NavPathStack = new NavPathStack(); //router
   @Builder
@@ -25,6 +44,16 @@ export struct LocalPage {
     }
   }
 
+  conTask() {
+    // 澶氱嚎绋嬭幏鍙栦簨椤逛俊鎭�
+    taskpool.execute(calUncompleted, this.totalTasks).then((ret) => {
+      if(ret.toString()) this.uncompletedCnt = ret as number
+    })
+    taskpool.execute(calImmediate, this.totalTasks).then((ret) => {
+      if(ret.toString()) this.immediateCnt = ret as number
+    })
+  }
+
   build() {
     Navigation(this.LocalPageStack) {
       Row() { //椤舵爮
@@ -76,22 +105,22 @@ export struct LocalPage {
       else {
         Column() { //宸插畬鎴愬拰鏈畬鎴愪换鍔℃暟閲�
           Row() {
-            Text('宸插畬鎴�: ' + this.completedTaskCnt)
+            Text('鏈畬鎴愭暟: ' + this.uncompletedCnt)
               .margin({top: 10})
               .fontSize(20)
               .fontColor('grey')
-              .width('50%')
-            Text('鏈畬鎴�: ' + (this.totalTaskCnt - this.completedTaskCnt))
+            Text('ddl涓磋繎鏁�: ' + this.immediateCnt)
               .margin({top: 10})
               .fontSize(20)
               .fontColor('grey')
-              .width('50%')
           }
+          .width('80%')
+          .justifyContent(FlexAlign.SpaceEvenly)
         }
         .align(Alignment.Top)
         .margin({top: 10})
         .width('100%')
-        .height('15%')
+        .height('10%')
         .backgroundColor($r("app.color.grey"))
         Scroll() { //浜嬮」
           Column({space: CommonConstants.column_space}) {
@@ -107,7 +136,6 @@ export struct LocalPage {
           .margin({bottom:10})
         }
         .align(Alignment.Top)
-        .margin({top: 10})
         .width('100%')
         .height('80%')
         .backgroundColor($r("app.color.grey"))
-- 
GitLab