From 19f59c243e8df97c8b9fd9dba4e758be8235d68b Mon Sep 17 00:00:00 2001
From: huang <1532065656@qq.com>
Date: 星期二, 25 十一月 2025 17:02:54 +0800
Subject: [PATCH] 添加卧转立扫码、卧转立、大车、大理片笼基础任务流转逻辑
---
mes-web/src/views/plcTest/components/MultiDeviceTest/TaskOrchestration.vue | 199 +++++++++++++++++++++++++++++++++++++++++++++----
1 files changed, 182 insertions(+), 17 deletions(-)
diff --git a/mes-web/src/views/plcTest/components/MultiDeviceTest/TaskOrchestration.vue b/mes-web/src/views/plcTest/components/MultiDeviceTest/TaskOrchestration.vue
index f3490b4..8cf1feb 100644
--- a/mes-web/src/views/plcTest/components/MultiDeviceTest/TaskOrchestration.vue
+++ b/mes-web/src/views/plcTest/components/MultiDeviceTest/TaskOrchestration.vue
@@ -5,7 +5,7 @@
<h3>澶氳澶囨祴璇曠紪鎺�</h3>
<p v-if="group">褰撳墠璁惧缁勶細{{ group.groupName }}锛坽{ group.deviceCount || '-' }} 鍙拌澶囷級</p>
<p v-else class="warning">璇峰厛鍦ㄥ乏渚ч�夋嫨涓�涓澶囩粍</p>
- <p v-if="group && loadDeviceName" class="sub-info">涓婂ぇ杞﹁澶囷細{{ loadDeviceName }}</p>
+ <p v-if="group && loadDeviceName" class="sub-info">褰撳墠璁惧锛歿{ loadDeviceName }}</p>
</div>
<div class="action-buttons">
<el-button
@@ -25,23 +25,94 @@
</div>
</div>
- <el-form :model="form" label-width="120px">
- <el-form-item label="鐜荤拑ID鍒楄〃">
+ <el-form :model="form" label-width="120px" :rules="rules" ref="formRef">
+ <el-form-item label="鐜荤拑ID鍒楄〃" prop="glassIds" required>
<el-input
v-model="glassIdsInput"
type="textarea"
:rows="4"
- placeholder="璇疯緭鍏ョ幓鐠冩潯鐮侊紝鏀寔澶氳鎴栭�楀彿鍒嗛殧"
+ placeholder="璇疯緭鍏ョ幓鐠冩潯鐮侊紝鏀寔澶氳鎴栭�楀彿鍒嗛殧锛屾瘡琛屼竴涓垨閫楀彿鍒嗛殧"
+ show-word-limit
+ :maxlength="5000"
/>
+ <div class="form-tip">
+ 宸茶緭鍏� {{ glassIds.length }} 涓幓鐠僆D
+ </div>
</el-form-item>
+
+ <el-divider content-position="left">璁惧鐗瑰畾閰嶇疆</el-divider>
+
<el-form-item label="浣嶇疆缂栫爜">
- <el-input v-model="form.positionCode" placeholder="渚嬪锛歅OS1" />
+ <el-input
+ v-model="form.positionCode"
+ placeholder="渚嬪锛歅OS1"
+ clearable
+ />
+ <div class="form-tip">涓婂ぇ杞﹁澶囩殑浣嶇疆缂栫爜</div>
</el-form-item>
+
+ <el-form-item label="浣嶇疆鍊�">
+ <el-input-number
+ v-model="form.positionValue"
+ :min="0"
+ :max="9999"
+ placeholder="浣嶇疆鏁板��"
+ />
+ <div class="form-tip">涓婂ぇ杞﹁澶囩殑浣嶇疆鏁板��</div>
+ </el-form-item>
+
<el-form-item label="瀛樺偍浣嶇疆">
- <el-input-number v-model="form.storagePosition" :min="1" :max="200" />
+ <el-input-number
+ v-model="form.storagePosition"
+ :min="1"
+ :max="200"
+ placeholder="瀛樺偍浣嶇疆缂栧彿"
+ />
+ <div class="form-tip">鐜荤拑瀛樺偍璁惧鐨勫瓨鍌ㄤ綅缃�</div>
</el-form-item>
+
+ <el-form-item label="澶勭悊绫诲瀷">
+ <el-select v-model="form.processType" placeholder="閫夋嫨澶勭悊绫诲瀷" clearable>
+ <el-option label="鏍囧噯澶勭悊" :value="1" />
+ <el-option label="蹇�熷鐞�" :value="2" />
+ <el-option label="鎱㈤�熷鐞�" :value="3" />
+ </el-select>
+ <div class="form-tip">澶х悊鐗囪澶囩殑澶勭悊绫诲瀷</div>
+ </el-form-item>
+
+ <el-divider content-position="left">鎵ц閰嶇疆</el-divider>
+
<el-form-item label="鎵ц闂撮殧 (ms)">
- <el-input-number v-model="form.executionInterval" :min="100" :max="10000" />
+ <el-input-number
+ v-model="form.executionInterval"
+ :min="100"
+ :max="10000"
+ :step="100"
+ placeholder="璁惧鎿嶄綔闂撮殧鏃堕棿"
+ />
+ <div class="form-tip">姣忎釜璁惧鎿嶄綔涔嬮棿鐨勯棿闅旀椂闂达紙姣锛�</div>
+ </el-form-item>
+
+ <el-form-item label="瓒呮椂鏃堕棿 (鍒嗛挓)">
+ <el-input-number
+ v-model="form.timeoutMinutes"
+ :min="1"
+ :max="60"
+ :step="1"
+ placeholder="浠诲姟瓒呮椂鏃堕棿"
+ />
+ <div class="form-tip">浠诲姟鎵ц鐨勬渶澶ц秴鏃舵椂闂�</div>
+ </el-form-item>
+
+ <el-form-item label="閲嶈瘯娆℃暟">
+ <el-input-number
+ v-model="form.retryCount"
+ :min="0"
+ :max="10"
+ :step="1"
+ placeholder="澶辫触閲嶈瘯娆℃暟"
+ />
+ <div class="form-tip">璁惧鎿嶄綔澶辫触鏃剁殑鏈�澶ч噸璇曟鏁�</div>
</el-form-item>
</el-form>
</div>
@@ -65,9 +136,41 @@
const form = reactive({
positionCode: '',
+ positionValue: null,
storagePosition: null,
- executionInterval: 1000
+ processType: null,
+ executionInterval: 1000,
+ timeoutMinutes: 30,
+ retryCount: 3
})
+
+const formRef = ref(null)
+
+const rules = {
+ glassIds: [
+ {
+ validator: (rule, value, callback) => {
+ if (glassIds.value.length === 0) {
+ callback(new Error('璇疯嚦灏戣緭鍏ヤ竴涓幓鐠僆D'))
+ } else if (glassIds.value.length > 100) {
+ callback(new Error('鐜荤拑ID鏁伴噺涓嶈兘瓒呰繃100涓�'))
+ } else {
+ // 楠岃瘉鐜荤拑ID鏍煎紡
+ const invalidIds = glassIds.value.filter(id => {
+ // 绠�鍗曠殑鏍煎紡楠岃瘉锛氫笉鑳戒负绌猴紝闀垮害鍦�1-50涔嬮棿
+ return !id || id.length === 0 || id.length > 50
+ })
+ if (invalidIds.length > 0) {
+ callback(new Error(`瀛樺湪鏃犳晥鐨勭幓鐠僆D鏍煎紡锛岃妫�鏌))
+ } else {
+ callback()
+ }
+ }
+ },
+ trigger: 'blur'
+ }
+ ]
+}
const glassIdsInput = ref('')
const loading = ref(false)
@@ -133,23 +236,78 @@
ElMessage.warning('璇峰厛閫夋嫨璁惧缁�')
return
}
+
+ // 琛ㄥ崟楠岃瘉
+ if (!formRef.value) return
+ try {
+ await formRef.value.validate()
+ } catch (error) {
+ ElMessage.warning('璇锋鏌ヨ〃鍗曡緭鍏�')
+ return
+ }
+
if (glassIds.value.length === 0) {
ElMessage.warning('璇疯嚦灏戣緭鍏ヤ竴涓幓鐠僆D')
return
}
+
try {
loading.value = true
- await multiDeviceTaskApi.startTask({
+
+ // 鏋勫缓浠诲姟鍙傛暟
+ const parameters = {
+ glassIds: glassIds.value,
+ executionInterval: form.executionInterval || 1000
+ }
+
+ // 娣诲姞鍙�夊弬鏁�
+ if (form.positionCode) {
+ parameters.positionCode = form.positionCode
+ }
+ if (form.positionValue !== null) {
+ parameters.positionValue = form.positionValue
+ }
+ if (form.storagePosition !== null) {
+ parameters.storagePosition = form.storagePosition
+ }
+ if (form.processType !== null) {
+ parameters.processType = form.processType
+ }
+ if (form.timeoutMinutes) {
+ parameters.timeoutMinutes = form.timeoutMinutes
+ }
+ if (form.retryCount !== null) {
+ parameters.retryCount = form.retryCount
+ }
+
+ // 寮傛鍚姩浠诲姟锛岀珛鍗宠繑鍥烇紝涓嶉樆濉�
+ const response = await multiDeviceTaskApi.startTask({
groupId: props.group.id || props.group.groupId,
- parameters: {
- glassIds: glassIds.value,
- positionCode: form.positionCode || null,
- storagePosition: form.storagePosition,
- executionInterval: form.executionInterval
- }
+ parameters
})
- ElMessage.success('浠诲姟宸插惎鍔�')
- emit('task-started')
+
+ const task = response?.data
+ if (task && task.taskId) {
+ ElMessage.success(`浠诲姟宸插惎鍔紙寮傛鎵ц锛�: ${task.taskId}`)
+ emit('task-started', task)
+
+ // 绔嬪嵆鍒锋柊鐩戞帶鍒楄〃锛屾樉绀烘柊鍚姩鐨勪换鍔�
+ setTimeout(() => {
+ emit('task-started')
+ }, 500)
+
+ // 閲嶇疆琛ㄥ崟锛堜繚鐣欓儴鍒嗛厤缃級锛屾柟渚跨户缁惎鍔ㄥ叾浠栬澶囩粍
+ glassIdsInput.value = ''
+ form.positionCode = ''
+ form.positionValue = null
+ form.storagePosition = null
+ form.processType = null
+
+ // 鎻愮ず鐢ㄦ埛鍙互缁х画鍚姩鍏朵粬璁惧缁�
+ ElMessage.info('鍙互缁х画閫夋嫨鍏朵粬璁惧缁勫惎鍔ㄦ祴璇曪紝澶氫釜璁惧缁勫皢骞惰鎵ц')
+ } else {
+ ElMessage.warning('浠诲姟鍚姩鍝嶅簲寮傚父')
+ }
} catch (error) {
ElMessage.error(error?.message || '浠诲姟鍚姩澶辫触')
} finally {
@@ -234,5 +392,12 @@
gap: 12px;
align-items: center;
}
+
+.form-tip {
+ font-size: 12px;
+ color: #909399;
+ margin-top: 4px;
+ line-height: 1.4;
+}
</style>
--
Gitblit v1.8.0