From b5c803a700e5bb47e5ee357e4267507d09964843 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=90=B4=E6=99=AE=E5=BB=BA?= <450837357@qq.com> Date: Fri, 16 May 2025 09:49:27 +0800 Subject: [PATCH] first --- src/service/api/produre/workRecords/index.ts | 4 + src/typings/produce.d.ts | 3 + src/views/board/kanBan/compents/leftBot.vue | 282 ++++++++++++++---- .../compents/options/left_bot_options2.js | 205 +++++++++++++ src/views/board/kanBan/index.vue | 4 +- src/views/plan/drawingWorkOrder/index.vue | 19 +- src/views/plan/paintJobOrder/index.vue | 20 +- src/views/procure/procureOrder/index.vue | 1 + src/views/produce/workRecords/index.vue | 39 +-- src/views/sale/saleOrder/index.vue | 2 +- 10 files changed, 493 insertions(+), 86 deletions(-) create mode 100644 src/views/board/kanBan/compents/options/left_bot_options2.js diff --git a/src/service/api/produre/workRecords/index.ts b/src/service/api/produre/workRecords/index.ts index f1d8617..6269c4b 100644 --- a/src/service/api/produre/workRecords/index.ts +++ b/src/service/api/produre/workRecords/index.ts @@ -7,3 +7,7 @@ export const getOutputLog = (params: any) => { export const getOutputLog2 = (params: any) => { return request.get(`/mes/mesOutputLog/list2`, { params }); }; + +export const getOutputLog3 = (params: any) => { + return request.get(`/mes/mesOutputLog/list3`, { params }); +}; diff --git a/src/typings/produce.d.ts b/src/typings/produce.d.ts index 68a7129..0db5f8b 100644 --- a/src/typings/produce.d.ts +++ b/src/typings/produce.d.ts @@ -135,6 +135,9 @@ declare namespace workRecords { alexPositionNumber: string | number; alexLot: string; inputSn: string; + workGroupValue?: string; + qbPrintValue?: string; + outputTareWeight?: string; } } diff --git a/src/views/board/kanBan/compents/leftBot.vue b/src/views/board/kanBan/compents/leftBot.vue index ad2f9d0..bf3cfcd 100644 --- a/src/views/board/kanBan/compents/leftBot.vue +++ b/src/views/board/kanBan/compents/leftBot.vue @@ -1,73 +1,231 @@ + + diff --git a/src/views/board/kanBan/compents/options/left_bot_options2.js b/src/views/board/kanBan/compents/options/left_bot_options2.js new file mode 100644 index 0000000..83a7149 --- /dev/null +++ b/src/views/board/kanBan/compents/options/left_bot_options2.js @@ -0,0 +1,205 @@ +import * as echarts from 'echarts'; + +// 示例数据:包含多条生产线的转速数据 +const productionLines = [ + { + name: "生产线A", + data: [67, 70, 72, 71, 69, 64, 70, 73, 68] + }, + { + name: "生产线B", + data: [72, 69, 71, 73, 70, 68, 65] + }, + { + name: "生产线C", + data: [65, 68, 70, 67, 69] + } +]; + +// 生成多条线的配置 +export let option = { + grid: { + left: "4%", + right: "13%", + bottom: "4%", + top: "13%", + containLabel: true, + }, + tooltip: { + trigger: "axis", + backgroundColor: "rgba(10, 43, 113, 0.9)", + borderColor: "rgba(143, 225, 252, 0.9)", + padding: 10, + axisPointer: { + lineStyle: { + color: "#3763cd", + type: "solid", + }, + }, + textStyle: { + color: "#ffffff", + fontSize: 14 + }, + formatter: function (params) { + let result = `
批次:LX-013
`; + params.forEach(function (item) { + const lineName = item.seriesName; + const value = item.value; + const percent = (Math.min(value / 70 * 100, 100)).toFixed(2) + '%'; + const status = percent >= 95 ? '正常' : '异常'; + const statusColor = status === '正常' ? '#00ff00' : '#ff0000'; + + result += ` +
+ ${lineName}: ${value}转/秒 + (${status}) +
+
完成率: ${percent}
+ `; + }); + return result; + } + }, + xAxis: { + data: ["06:00", "08:00", "10:00", "12:00", "14:00", "16:00", "18:00", "20:00", "22:00"], + axisLine: { + show: true, + lineStyle: { + color: "rgba(30, 78, 123, 1)", + width: 2, + }, + }, + axisTick: { + show: false, + }, + axisLabel: { + show: true, + rotate: 45, + color: "#fff", + fontSize: 14, + }, + }, + yAxis: [ + { + name: "转速/秒", + nameTextStyle: { + color: "#fff", + fontSize: 15 + }, + type: "value", + splitLine: { + show: false, + lineStyle: { + color: "rgba(30, 78, 123, 0.5)", + width: 1, + }, + }, + axisTick: { + show: false, + }, + axisLine: { + show: true, + width: 2, + lineStyle: { color: "rgba(30, 78, 123, 1)" }, + }, + axisLabel: { + show: true, + color: "#fff", + fontSize: 14, + }, + }, + ], + legend: { + show: true, + type: 'scroll', + orient: 'horizontal', + right: '5%', + top: '5%', + textStyle: { + color: '#fff', + fontSize: 14 + }, + pageIconColor: '#fff', + pageTextStyle: { + color: '#fff' + } + }, + series: productionLines.map((line, index) => { + // 为不同生产线生成不同颜色 + const colors = [ + '#53D7F7', '#FF7D00', '#7CFFB2', '#FF6699', '#9966FF', + '#FF9933', '#33CCFF', '#FF3366', '#66CC99', '#CC99FF' + ]; + const color = colors[index % colors.length]; + + return { + name: line.name, + type: "line", + barWidth: 15, + showSymbol: true, + symbolSize: 10, + symbol: "circle", + lineStyle: { + color: color, + width: 2 + }, + itemStyle: { + color: color, + borderColor: color, + borderWidth: 2, + }, + data: line.data.map(value => ({ + value, + itemStyle: { + color: value / 70 * 100 >= 95 ? '#00ff00' : '#ff0000', + } + })), + label: { + show: false, // 默认不显示标签,避免图表拥挤 + position: 'top', + distance: 10, + color: 'rgba(255, 255, 255, 1)', + fontWeight: 300, + fontSize: 12, + }, + markLine: { + silent: true, + data: [ + { + name: "标准值70", + yAxis: 70, + label: { + show: index === 0, // 只在第一个系列显示标准值标签 + formatter: '标准值70', + color: "#fff", + position: 'end', + distance: 1, + fontSize: 12, + borderRadius: 3 + } + } + ], + lineStyle: { + color: 'red', + type: 'dashed', + width: 3 + }, + symbol: ['none', 'none'] + }, + areaStyle: { + normal: { + color: new echarts.graphic.LinearGradient( + 0, 0, 0, 1, + [ + { offset: 0, color: echarts.color.modifyAlpha(color, 0.1) }, + { offset: 1, color: echarts.color.modifyAlpha(color, 0) } + ], + false + ), + shadowColor: echarts.color.modifyAlpha(color, 0.1), + shadowBlur: 12, + }, + }, + }; + }), +}; diff --git a/src/views/board/kanBan/index.vue b/src/views/board/kanBan/index.vue index 2794334..d32e08a 100644 --- a/src/views/board/kanBan/index.vue +++ b/src/views/board/kanBan/index.vue @@ -34,9 +34,9 @@ -
+
- 质检良品率 + 在线质检
diff --git a/src/views/plan/drawingWorkOrder/index.vue b/src/views/plan/drawingWorkOrder/index.vue index 67aa330..8054154 100644 --- a/src/views/plan/drawingWorkOrder/index.vue +++ b/src/views/plan/drawingWorkOrder/index.vue @@ -462,8 +462,25 @@ const columns2: Ref> = ref([ key: 'taskStatus', width: 130, render: row => { - return '未开始'; + const now = new Date(); + const startDate = new Date(row.startDate? row.startDate : '2000-01-01'); + const endDate = new Date(row.endDate? row.endDate : '2000-01-01'); + let status, color; + + if (now < startDate) { + status = '未开始'; + color = '#8c8c8c'; // 灰色 + } else if (now <= endDate) { + status = '进行中'; + color = '#108ee9'; // 蓝色 + } else { + status = '已结束'; + color = '#52c41a'; // 绿色 + } + + return h('span', { style: `color: ${color}` }, status); } + }, { title: '班组信息', diff --git a/src/views/plan/paintJobOrder/index.vue b/src/views/plan/paintJobOrder/index.vue index 1a40414..a068cb8 100644 --- a/src/views/plan/paintJobOrder/index.vue +++ b/src/views/plan/paintJobOrder/index.vue @@ -361,7 +361,7 @@ import {getWorkgroupAll} from "@/service/api/md/workgroup"; defineOptions({ name: 'PaintJobOrder' }); -import type { Ref } from 'vue'; +import {h, Ref} from 'vue'; import { ref, onMounted } from 'vue'; import { useMessage, useDialog } from 'naive-ui'; import type { DataTableColumns, FormInst } from 'naive-ui'; @@ -804,7 +804,23 @@ const columns2: Ref> = ref([ key: 'taskStatus', width: 130, render: row => { - return '未开始'; + const now = new Date(); + const startDate = new Date(row.startDate? row.startDate : '2000-01-01'); + const endDate = new Date(row.endDate? row.endDate : '2000-01-01'); + let status, color; + + if (now < startDate) { + status = '未开始'; + color = '#8c8c8c'; // 灰色 + } else if (now <= endDate) { + status = '进行中'; + color = '#108ee9'; // 蓝色 + } else { + status = '已结束'; + color = '#52c41a'; // 绿色 + } + + return h('span', { style: `color: ${color}` }, status); } }, { diff --git a/src/views/procure/procureOrder/index.vue b/src/views/procure/procureOrder/index.vue index 008b955..1422b9d 100644 --- a/src/views/procure/procureOrder/index.vue +++ b/src/views/procure/procureOrder/index.vue @@ -612,6 +612,7 @@ function handleAudit(type){ showPasModal.value = true; auditForm.value.purchaseId = dialogForm.value.purchaseId; auditForm.value.status = type == 0 ? 'APPROVE' : 'REJECT'; + auditForm.value.attr2 = type == 0 ? '通过' : 'REJECT'; } function onPositivePasClick() { diff --git a/src/views/produce/workRecords/index.vue b/src/views/produce/workRecords/index.vue index 482c6db..9ecd431 100644 --- a/src/views/produce/workRecords/index.vue +++ b/src/views/produce/workRecords/index.vue @@ -285,12 +285,12 @@ const columns: Ref> = ref([ ); } }, - { - title: '产品型号', - align: 'center', - key: 'productModel', - width: 100 - }, + // { + // title: '产品型号', + // align: 'center', + // key: 'productModel', + // width: 100 + // }, { title: '产品规格', align: 'center', @@ -309,12 +309,12 @@ const columns: Ref> = ref([ key: 'itemSpecification', width: 100 }, - { - title: '单位', - align: 'center', - key: 'measureName', - width: 100 - }, + // { + // title: '单位', + // align: 'center', + // key: 'measureName', + // width: 100 + // }, { title: '报工时间', align: 'center', @@ -327,12 +327,15 @@ const columns: Ref> = ref([ key: 'createBy', width: 100 }, - // { - // title: '报工工号', - // align: 'center', - // key: 'jobNumber', - // width: 100 - // }, + { + title: '机台转速(转/S)', + align: 'center', + key: 'outputTareWeight', + width: 100, + render: row => { + return row.workGroupValue == 'CNC'|| row.qbPrintValue?.includes('CNC') ? row.outputTareWeight : ''; + } + }, { title: '批号', align: 'center', diff --git a/src/views/sale/saleOrder/index.vue b/src/views/sale/saleOrder/index.vue index c262326..074297d 100644 --- a/src/views/sale/saleOrder/index.vue +++ b/src/views/sale/saleOrder/index.vue @@ -452,7 +452,7 @@ const columns: Ref> = ref([ width: 250, render: row => { return [ - handleInfo(row)}> + handleInfo(row)}> 下发工单 ,