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)) },