From d8743368ffda9bc0fb2c6818f695a9a6b1079e57 Mon Sep 17 00:00:00 2001
From: cuiqian2004 <cuiqian2004@163.com>
Date: 星期五, 19 九月 2025 18:22:15 +0800
Subject: [PATCH] laster

---
 pages/task/list.vue |  183 ++++++++++++++++++++++++++++-----------------
 1 files changed, 115 insertions(+), 68 deletions(-)

diff --git a/pages/task/list.vue b/pages/task/list.vue
index 0f2d992..4d85b88 100644
--- a/pages/task/list.vue
+++ b/pages/task/list.vue
@@ -3,11 +3,12 @@
 		<view class="list-content" v-if="list.length > 0">
 			<view class="list-header" v-if="fixedList.length > 0">鍥哄畾浠诲姟</view>
 			<uni-swipe-action class="list">
-				<uni-swipe-action-item :class="index== 0 ?'':'list-item'" v-for="(item,index) in fixedList" :key="index"
+				<uni-swipe-action-item class="list-item" v-for="(item,index) in fixedList" :key="index"
 					:auto-close="true" :disabled="taskStatus.taskGroupID == item.taskGroupID">
-					<TaskItemView :taskData="item" :taskStatus="taskStatus" @click-item="clickEditTask"
-						@click-play="clickPlayTask" @click-pause="clickPauseTask" @click-stop="clickStopTask"
-						@click-skip="clickSkipTask" @click-repeat="clickRepeatTask">
+					<TaskItemView :taskData="item" :taskStatus="taskStatus" :showTaskRunning="showTaskRunning"
+						@click-btn="clickTaskBtn" @click-item="clickEditTask" @click-play="clickPlayTask"
+						@click-pause="clickPauseTask" @click-stop="clickStopTask" @click-skip="clickSkipTask"
+						@click-repeat="clickRepeatTask">
 					</TaskItemView>
 					<template v-slot:right>
 						<view class="btn-del" @click="clickDelSetTask(item)">鍒犻櫎</view>
@@ -16,12 +17,12 @@
 			</uni-swipe-action>
 			<view class="list-header" v-if="tempList.length > 0">涓存椂浠诲姟</view>
 			<uni-swipe-action class="list">
-				<uni-swipe-action-item :class="index== 0 ?'':'list-item'" v-for="(item,index) in tempList" :key="index"
+				<uni-swipe-action-item class="list-item" v-for="(item,index) in tempList" :key="index"
 					:auto-close="true" :disabled="taskStatus.taskGroupID == item.taskGroupID">
-					<TaskItemView :taskData="item" :taskStatus="taskStatus" @click-item="clickEditTask"
-						@click-play="clickPlayTask" @click-pause="clickPauseTask" @click-stop="clickStopTask"
-						@click-skip="clickSkipTask" @click-repeat="clickRepeatTask">
-					</TaskItemView>
+					<TaskItemView :taskData="item" :taskStatus="taskStatus" :showTaskRunning="showTaskRunning"
+						@click-btn="clickTaskBtn" @click-item="clickEditTask" @click-play="clickPlayTask"
+						@click-pause="clickPauseTask" @click-stop="clickStopTask" @click-skip="clickSkipTask"
+						@click-repeat="clickRepeatTask"></TaskItemView>
 					<template v-slot:right>
 						<view class="btn-del" @click="clickDelSetTask(item)">鍒犻櫎</view>
 					</template>
@@ -32,7 +33,7 @@
 			<uni-icons color="#ccc" type="info" size="128"></uni-icons>
 			<view class="space">娌℃湁鎵惧埌绗﹀悎鏉′欢鐨勪换鍔�/view>
 		</view>
-		<view class="position-add" @click="clickAddTask()" @touchstart='btnAddTouchStart' @touchmove='btnAddTouchMove'
+		<view class="position-add" @click="clickAddTask"  @touchstart='btnAddTouchStart' @touchmove='btnAddTouchMove'
 			:style="{transform:`translate(${btnAddInfo.x}px,${btnAddInfo.y}px) scale(1)`}">
 			<uni-icons class="img" type="plus-filled" size="80" color="#1890FF"></uni-icons>
 		</view>
@@ -44,6 +45,8 @@
 		showToast,
 		showModal,
 		session,
+		showError,
+		showInfo
 	} from "@/comm/utils.js"
 	import TaskItemView from "./infos/task-item.vue"
 	import {
@@ -57,6 +60,9 @@
 	import {
 		v4 as uuidv4
 	} from 'uuid';
+	import {
+		filter
+	} from "rxjs";
 	export default {
 		name: "PagesTasklist",
 		components: {
@@ -64,6 +70,7 @@
 		},
 		data() {
 			return {
+				loading:false,
 				ip: "",
 				sceneId: "",
 				list: [],
@@ -85,6 +92,7 @@
 					x: 0,
 					y: 0
 				},
+				showTaskRunning: false,
 			}
 		},
 		computed: {
@@ -98,7 +106,23 @@
 		onLoad(option) {
 			this.ip = option.ip || ""
 			this.sceneId = option.sceneId || ""
-			this.loadData()
+			this.isPageVisible = true
+			this.$nextTick(()=>{
+				this.loadData()
+			})
+			
+		},
+		onShow() {
+			this.isPageVisible = true
+
+
+		},
+		onHide() {
+			this.isPageVisible = false
+
+		},
+		onUnload() {
+			this.isPageVisible = false
 		},
 		methods: {
 			setData(obj) {
@@ -135,56 +159,68 @@
 						}
 						this.btnAddInfo = btninfo
 					}
+					this.loadTaskList()
+					this.timerCheckTaskGroupStatus()
+
+				} catch (ex) {
+
+					showError(ex)
+				}
+			},
+			async loadTaskList() {
+				try {
 					const res = await tasks(this.ip)
 					const list = res?.data || []
 					this.list = list
-					if (this.list.length > 0) {
-						this.timerCheckTaskGroupStatus()
-					}
+					showToast(`瑁呰浇浜�{list.length}浠诲姟`)
 				} catch (ex) {
 
-					this.showError(ex)
+					showError(ex)
 				}
+				
 			},
+
 			async timerCheckTaskGroupStatus() {
-				if (this.timerCheckStatusId) {
-					return
+				try {
+					if (this.isPageVisible)
+						await this.checkTaskGroupStatus()
+						setTimeout(this.timerCheckTaskGroupStatus, 1000);
+				} catch (ex) {
+					showError(ex).then((res)=>{
+						setTimeout(this.timerCheckTaskGroupStatus, 1000);
+					})
+				} finally {
+					
 				}
-				if (this.list.length == 0) {
-					return
-				}
-				await this.checkTaskGroupStatus()
-				this.timerCheckStatusId = setTimeout(() => {
-					this.timerCheckStatusId = 0
-					this.timerCheckTaskGroupStatus()
-				}, 1000)
 			},
 			async checkTaskGroupStatus() {
 				try {
-					const key = `task_cmd_id_${this.ip.replace(".","_")}`
-					const cmdID = session.getValue(key)
-					if (cmdID) {
-						const info = await taskGroupStatus(this.ip) || {}
-						if (info.taskGroupCmdID == cmdID) {
-
-							const list = info.taskStatusList || []
+					const info = await taskGroupStatus(this.ip) || {}
+					if (info.taskGroupID) {
+						if (this.list.length == 0) {
+							await this.loadTaskList()
+						}
+						const curIndex = this.list.findIndex((a) => a.taskGroupID == info.taskGroupID)
+						if (curIndex > -1) {
+							let list = info.taskStatusList || []
+							list = list.filter((a) => a.cycleNumber == info.curCycleNumber)
 							for (let i in list) {
-								if (list[i].status != 1 && list[i].status != 0) {
-									this.taskStatus = {}
+								if (list[i].status == 1 || list[i].status == 0) {
+									this.taskStatus = info
 									return
 								}
 							}
-							this.taskStatus = info
+							this.taskStatus = {}
 							return
 						}
-
 					}
+
 					this.taskStatus = {}
 
 				} catch (ex) {
 
 					this.taskStatus = {}
-					this.showError(ex)
+					showError(ex)
 				}
 			},
 			setTaskGroupStatus(cmdID) {
@@ -194,12 +230,13 @@
 			},
 			clickAddTask() {
 				const _this = this
+				
 				uni.navigateTo({
 					url: `/pages/task/add?ip=${this.ip}&title=鏂板浠诲姟`,
 					events: {
 						// 涓烘寚瀹氫簨浠舵坊鍔犱竴涓洃鍚櫒锛岃幏鍙栬鎵撳紑椤甸潰浼犻�鍒板綋鍓嶉〉闈㈢殑鏁版嵁
 						add_task: function(data) {
-							_this.loadData()
+							_this.loadTaskList()
 						},
 					}
 				})
@@ -244,8 +281,9 @@
 
 				session.setValue('task_btn_add', this.btnAddInfo)
 			},
-
-
+			clickTaskBtn(item) {
+				this.showTaskRunning = !this.showTaskRunning
+			},
 			clickEditTask(item) {
 				const _this = this
 				if (this.taskStatus.taskGroupID == item.taskGroupID) {
@@ -278,15 +316,16 @@
 					this.setTaskGroupStatus(cmdID)
 
 				} catch (ex) {
-					this.showError(ex)
+					showError(ex)
 				}
 			},
 
 			async clickStopTask(item) {
 				try {
 					await addTaskGroupCmd(this.ip, item.taskGroupID, this.taskStatus.taskGroupCmdID, 2)
+					showToast("缁堟浠诲姟鎴愬姛")
 				} catch (ex) {
-					this.showError(ex)
+					showError(ex)
 				}
 			},
 
@@ -294,7 +333,8 @@
 				try {
 
 
-					const taskStatusList = this.taskStatus.taskStatusList || []
+					let taskStatusList = this.taskStatus.taskStatusList || []
+					taskStatusList = taskStatusList.filter((a) => a.cycleNumber == this.taskStatus.curCycleNumber)
 					let curIdx = taskStatusList.findIndex((a) => a.status == 1)
 					if (curIdx < 0)
 						curIdx = taskStatusList.findIndex((a) => a.status == 0)
@@ -306,7 +346,7 @@
 						})
 						await cancelTask(this.ip,
 							item.taskGroupID,
-							 this.taskStatus.taskGroupCmdID,
+							this.taskStatus.taskGroupCmdID,
 							taskList
 						)
 
@@ -316,7 +356,7 @@
 						showToast("鏈壘鍒版湭寮�鎴栨鍦ㄦ墽琛岀殑瀛愪换鍔�)
 					}
 				} catch (ex) {
-					this.showError(ex)
+					showError(ex)
 				}
 			},
 
@@ -327,7 +367,7 @@
 
 			async clickPauseTask(item) {},
 			clickDelSetTask(item) {
-				showModal("纭鍒犻櫎浠诲姟璁剧疆", "璀﹀憡").then((res) => {
+				showModal("纭鍒犻櫎浠诲姟璁剧疆", "璀﹀憡", true, "纭畾", "鍙栨秷").then((res) => {
 					if (res) {
 						this.deleteTask(item)
 
@@ -343,26 +383,19 @@
 					const index = list.findIndex((a) =>
 						a.taskGroupID == item.taskGroupID
 					)
-					console.log(index, item, list)
+					showToast("鍒犻櫎浠诲姟鎴愬姛")
 					if (index < 0)
 						return
 					list.splice(index, 1)
 					this.list = [...list]
 
 				} catch (ex) {
-					this.showError(ex)
+					showError(ex)
 				}
 
 			},
 
 
-			showError(ex) {
-				let exStr = JSON.stringify(ex)
-				if (exStr == "{}")
-					exStr = ex
-				let tip = typeof ex.msg == "string" ? ex.msg : exStr
-				showModal(tip, "閿欒", false)
-			},
 		}
 	}
 </script>
@@ -378,15 +411,26 @@
 		.list-content {
 			display: flex;
 			width: 100%;
-			padding: 0 10px;
+			padding: 10rpx 10px;
 			flex: 1;
 			flex-direction: column;
 			overflow-y: auto;
 			overflow-x: hidden;
 
 			.list-header {
-				margin: 10px;
+				margin: 10rpx 10px;
 				// border-bottom: 1px solid #ddd;
+			}
+
+			.btn-del {
+				// margin: 10rpx;
+				display: flex;
+				padding: 0 10rpx;
+				background-color: #FF4D4F;
+				font-weight: 700;
+				color: #fff;
+				justify-content: center;
+				align-items: center;
 			}
 
 			.list {
@@ -397,20 +441,23 @@
 
 				.list-item {
 
-					border-top: 1px solid #ddd;
+					border-bottom: 1px solid #ddd;
 				}
+
+				.list-item:first-child {
+					border-top-right-radius: 10px;
+					/* 鍙充笅瑙�*/
+				}
+
+				.list-item:last-child {
+					border-bottom: 0;
+					border-bottom-right-radius: 10px;
+					/* 鍙充笅瑙�*/
+				}
+
 			}
 
-			.btn-del {
-				margin: 10rpx;
-				display: flex;
-				padding: 0 10rpx;
-				background-color: #FF4D4F;
-				font-weight: 700;
-				color: #fff;
-				justify-content: center;
-				align-items: center;
-			}
+
 
 		}
 

--
Gitblit v1.9.1