| | |
| | | v-model="glassIdsInput" |
| | | type="textarea" |
| | | :rows="4" |
| | | placeholder="可选:如果输入玻璃ID,将使用输入的ID进行测试(代替卧转立扫码);如果不输入,将从数据库读取最近扫码的玻璃ID进行测试" |
| | | placeholder="可选:输入玻璃ID,将使用输入的ID进行测试" |
| | | show-word-limit |
| | | :maxlength="5000" |
| | | /> |
| | |
| | | <span v-else>未输入玻璃ID(正常模式:将从数据库读取最近扫码的玻璃ID)</span> |
| | | </div> |
| | | </el-form-item> |
| | | |
| | | <el-divider content-position="left">执行配置</el-divider> |
| | | |
| | | <el-form-item label="单片间隔 (秒)"> |
| | | <el-input-number |
| | | v-model="form.glassIntervalSeconds" |
| | | :min="0" |
| | | :max="60" |
| | | :step="0.1" |
| | | :precision="1" |
| | | placeholder="每个玻璃ID之间的间隔时间" |
| | | /> |
| | | <div class="form-tip">多个玻璃ID时,每个玻璃ID传递之间的间隔时间(秒),用于模拟玻璃每片运动的时间。0表示一次性全部传递</div> |
| | | </el-form-item> |
| | | |
| | | <el-form-item label="执行间隔 (ms)"> |
| | | <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> |
| | | |
| | | <!-- 设备组拓扑图 --> |
| | | <GroupTopology |
| | | v-if="group" |
| | | :group="group" |
| | | class="topology-section" |
| | | /> |
| | | </div> |
| | | </template> |
| | | |
| | |
| | | import { Delete, Promotion } from '@element-plus/icons-vue' |
| | | import { multiDeviceTaskApi } from '@/api/device/multiDeviceTask' |
| | | import { deviceGroupApi, deviceInteractionApi } from '@/api/device/deviceManagement' |
| | | import GroupTopology from '../DeviceGroup/GroupTopology.vue' |
| | | |
| | | const props = defineProps({ |
| | | group: { |
| | |
| | | |
| | | const emit = defineEmits(['task-started']) |
| | | //配置默认值 |
| | | const form = reactive({ |
| | | glassIntervalSeconds: 10, // 单片间隔,默认10秒 |
| | | executionInterval: 1000, |
| | | timeoutMinutes: 1, |
| | | retryCount: 3 |
| | | }) |
| | | const form = reactive({}) |
| | | |
| | | const formRef = ref(null) |
| | | |
| | |
| | | |
| | | // 构建任务参数 |
| | | // 如果输入了玻璃ID,使用输入的;如果没有输入,glassIds为空数组,后端会从数据库读取 |
| | | // 将秒转换为毫秒传给后端 |
| | | const glassIntervalMs = form.glassIntervalSeconds != null && form.glassIntervalSeconds !== undefined |
| | | ? Math.round(form.glassIntervalSeconds * 1000) |
| | | : 1000 |
| | | const parameters = { |
| | | glassIds: glassIds.value.length > 0 ? glassIds.value : [], |
| | | glassIntervalMs: glassIntervalMs, |
| | | executionInterval: form.executionInterval || 1000 |
| | | } |
| | | |
| | | // 设备特定配置已移除,如有需要可在此扩展 |
| | | if (form.timeoutMinutes) { |
| | | parameters.timeoutMinutes = form.timeoutMinutes |
| | | } |
| | | if (form.retryCount !== null) { |
| | | parameters.retryCount = form.retryCount |
| | | glassIds: glassIds.value.length > 0 ? glassIds.value : [] |
| | | } |
| | | |
| | | // 异步启动任务,立即返回,不阻塞 |
| | |
| | | margin-top: 4px; |
| | | line-height: 1.4; |
| | | } |
| | | |
| | | .topology-section { |
| | | margin-top: 24px; |
| | | } |
| | | </style> |
| | | |