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