From c11805aff197a0b557ddbb0eccf03e309f171f0b Mon Sep 17 00:00:00 2001
From: 86156 <823267011@qq.com>
Date: Mon, 5 Jan 2026 14:57:22 +0800
Subject: [PATCH] =?UTF-8?q?=E4=BA=8C=E7=BA=A7=E4=BF=AE=E6=94=B9?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
apps/l2/src/views/l2/send/drive.vue | 210 ++++++++++++++++++++++++--
apps/l2/src/views/l2/send/furnace.vue | 2 +-
2 files changed, 200 insertions(+), 12 deletions(-)
diff --git a/apps/l2/src/views/l2/send/drive.vue b/apps/l2/src/views/l2/send/drive.vue
index 81d4b07..eff3eca 100644
--- a/apps/l2/src/views/l2/send/drive.vue
+++ b/apps/l2/src/views/l2/send/drive.vue
@@ -17,6 +17,50 @@
+
+
+
+
+
+
+
+
+ {{ plan.status === 'PRODUCING' ? '生产中' :
+ plan.status === 'READY' ? '就绪' : '新建' }}
+
+
+
+ {{ plan.planid }}
+ {{ plan.coilid }}
+
+
+
+ 暂无生产计划
+
+
+
+
@@ -60,10 +104,19 @@
type="primary"
size="mini"
icon="el-icon-s-promotion"
- @click="handleSend(setup)"
+ @click="handleSendCurrent(setup)"
:loading="setup.sending"
>
- 下发
+ 当前计划下发
+
+
+ 下一计划下发
@@ -103,6 +156,7 @@
import { listSetup } from '@/api/business/setup'
import { createSendJob, executeSendJob } from '@/api/l2/sendJob'
import { getLastSuccess } from '@/api/l2/sendTemplate'
+import { listPlan } from '@/api/l2/plan'
// 传动字段定义(中文界面,贴合工业场景)
const DRIVE_FIELDS = [
@@ -165,6 +219,8 @@ export default {
loading: false,
lastSuccess: null,
setups: [],
+ planQueueLoading: false,
+ planQueue: [],
driveFields: DRIVE_FIELDS,
driveAddress: { ...DRIVE_ADDRESS }
}
@@ -172,8 +228,53 @@ export default {
created() {
this.reload()
},
+ computed: {
+ // 生产队列(不含已完成),按优先级排序:生产中 > 就绪 > 新建
+ sortedPlanQueue() {
+ const statusPriority = { PRODUCING: 1, READY: 2, NEW: 3 }
+ return (this.planQueue || []).slice().sort((a, b) => {
+ const pa = statusPriority[a.status] || 999
+ const pb = statusPriority[b.status] || 999
+ return pa - pb
+ })
+ },
+ // 下一计划:队列中第一个非生产中计划(READY/NEW);若没有则取队列第一个
+ nextPlan() {
+ const list = this.sortedPlanQueue
+ if (!list.length) return null
+ const next = list.find(p => p.status !== 'PRODUCING')
+ return next || list[0]
+ }
+ },
methods: {
+ // 获取生产计划队列
+ async getPlanQueue() {
+ this.planQueueLoading = true
+ try {
+ // 查询状态为 PRODUCING, READY, NEW 的计划
+ const res = await listPlan({
+ status: 'PRODUCING,READY,NEW',
+ pageSize: 100, // 获取足够多的计划
+ pageNum: 1
+ })
+ this.planQueue = res.data || []
+ } catch (e) {
+ console.error('获取计划队列失败:', e)
+ this.$message.error('获取计划队列失败')
+ } finally {
+ this.planQueueLoading = false
+ }
+ },
+
async reload() {
+ // 同时加载计划队列和设置
+ await Promise.all([
+ this.getPlanQueue(),
+ this.loadSetups()
+ ])
+ },
+
+ async loadSetups() {
this.loading = true
try {
// 1. 获取传动模块上次成功下发数据
@@ -204,7 +305,8 @@ export default {
return {
...s,
params,
- sending: false
+ sending: false,
+ sendingNext: false
}
})
} catch (e) {
@@ -242,7 +344,7 @@ export default {
return new Date(t).toLocaleString()
},
- handleSend(setup) {
+ handleSendCurrent(setup) {
this.$confirm(
`确认要下发【${setup.coilid || '-'}】钢卷的传动参数吗?`,
'提示',
@@ -254,29 +356,53 @@ export default {
).then(() => this.doSend(setup)).catch(() => {})
},
- async doSend(setup) {
- setup.sending = true
+ handleSendNext(setup) {
+ if (!this.nextPlan) {
+ this.$message.warning('暂无下一计划')
+ return
+ }
+ const plan = this.nextPlan
+ this.$confirm(
+ `确认要按下一计划【${plan.coilid || '-'}】下发传动参数吗?`,
+ '提示',
+ {
+ confirmButtonText: '确认',
+ cancelButtonText: '取消',
+ type: 'warning'
+ }
+ ).then(() => this.doSendNextPlan(setup, plan)).catch(() => {})
+ },
+
+ async doSend(setup, plan) {
+ const isNextPlan = !!plan
+ if (isNextPlan) {
+ setup.sendingNext = true
+ } else {
+ setup.sending = true
+ }
+
try {
const items = this.driveFields.map(f => ({
paramCode: f.key,
address: this.driveAddress[f.key],
valueRaw: String(setup.params[f.key] || ''),
setTime: new Date()
- })).filter(it => !!it.address) // 过滤无OPC地址的项
+ })).filter(it => !!it.address)
if (!items.length) {
this.$message.warning('OPC地址未配置,无可下发内容')
return
}
+ const bizKey = isNextPlan ? plan.coilid : setup.coilid
const dto = {
deviceName: 'CGL_LINE_1',
- bizKey: setup.coilid,
+ bizKey: bizKey,
groups: [
{
groupNo: 1,
groupType: 'DRIVE',
- groupName: `传动参数_${setup.coilid || ''}`,
+ groupName: `传动参数_${bizKey || ''}`,
items
}
]
@@ -294,8 +420,16 @@ export default {
console.error(e)
this.$message.error(e.message || '下发失败')
} finally {
- setup.sending = false
+ if (isNextPlan) {
+ setup.sendingNext = false
+ } else {
+ setup.sending = false
+ }
}
+ },
+
+ doSendNextPlan(setup, plan) {
+ this.doSend(setup, plan)
}
}
}
@@ -303,6 +437,60 @@ export default {
\ No newline at end of file
diff --git a/apps/l2/src/views/l2/send/furnace.vue b/apps/l2/src/views/l2/send/furnace.vue
index 31e0714..a708c8b 100644
--- a/apps/l2/src/views/l2/send/furnace.vue
+++ b/apps/l2/src/views/l2/send/furnace.vue
@@ -177,7 +177,7 @@ export default {
templateItems() {
if (!this.template || !Array.isArray(this.template.items)) return []
return [...this.template.items]
- .filter(i => i.enabled === undefined || i.enabled === 1)
+ .filter(i => i.enabled === undefined || i.enabled === 1 || i.enabled === null)
.sort((a, b) => (a.itemNo || 0) - (b.itemNo || 0))
},