-
-
{{ scope.row.overallProgress }}%
+
+ {{ formatPlanDateTime(scope.row.planStartTime) }}
+ ~
+ {{ formatPlanDateTime(scope.row.planFinishTime) }}
+
+
+ {{ scope.row.overallPlanQty }}
+
+
+
+
+ {{ scope.row.overallOkQty }}
+
+
+
+
+
@@ -237,9 +214,9 @@
工序详情
- 单据编码:{{ processDialogBillNo }}
- 生产执行单号:{{ processDialogBatchNo }}
- 物料编码:{{ processDialogProduct }}
+ {{ processDialogBillNo }}
+ {{ processDialogBatchNo }}
+ {{ processDialogProduct }}
@@ -411,7 +388,7 @@
-
diff --git a/src/views/system/plmReceiveLog/index.vue b/src/views/system/plmReceiveLog/index.vue
new file mode 100644
index 0000000..5d91ab8
--- /dev/null
+++ b/src/views/system/plmReceiveLog/index.vue
@@ -0,0 +1,586 @@
+
+
+
+
+
+
+
+
+
PLM 工艺 / 总装 BOM 接收留痕
+
记录 PLM 推送的完整报文,防先删后插后扯皮;可按令号、类型、状态追溯。
+
+
+
+
+ 当前页
+ {{ logList.length }}
+
+
+ 累计
+ {{ total }}
+
+
+ 本页成功
+ {{ pageSuccessCount }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 搜索
+ 重置
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ scope.row.productionOrderNo || '-' }}
+
+
+
+
+
+ {{ bizTypeLabel(scope.row.bizType) }}
+
+
+
+
+
+
+ {{ scope.row.status === 'SUCCESS' ? '成功' : '失败' }}
+
+
+
+
+
+
+
+ {{ scope.row.replaced === true ? '是' : (scope.row.replaced === false ? '否' : '-') }}
+
+
+
+
+ {{ formatSize(scope.row.payloadSize) }}
+
+
+
+
+
+ {{ parseTime(scope.row.receiveTime, '{y}-{m}-{d} {h}:{i}:{s}') }}
+
+
+
+
+
+ 详情
+ 写入BOM明细
+
+
+
+
+
+
+
+
+
+
+
+
+ 生产令号
+ {{ detail.productionOrderNo || '-' }}
+
+
+ 业务类型
+ {{ bizTypeLabel(detail.bizType) }}
+
+
+ 状态
+
+ {{ detail.status === 'SUCCESS' ? '成功' : '失败' }}
+
+
+
+ 接口
+ {{ detail.apiPath || '-' }}
+
+
+ 行数 / 入库
+ {{ detail.lineCount != null ? detail.lineCount : '-' }} / {{ detail.savedCount != null ? detail.savedCount : '-' }}
+
+
+ 报文大小
+ {{ formatSize(detail.payloadSize) }}
+
+
+ SHA-256
+ {{ detail.payloadSha256 || '-' }}
+
+
+ 接收时间
+ {{ parseTime(detail.receiveTime, '{y}-{m}-{d} {h}:{i}:{s}') }}
+
+
+ 失败原因
+ {{ detail.errorMsg }}
+
+
+
+
+ 写入 BOM 明细
+ 从 production_order 同步总装行到 bom_details(覆盖 bomType=0)
+
+
+
+
+
+ 复制报文
+
+ {{ formattedPayload }}
+
+
+
+ 复制摘要
+
+ {{ formattedSummary }}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/system/produceKanban/index.vue b/src/views/system/produceKanban/index.vue
new file mode 100644
index 0000000..821e503
--- /dev/null
+++ b/src/views/system/produceKanban/index.vue
@@ -0,0 +1,607 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ | 序号 |
+ 生产令号 |
+ 产品编码 |
+ 产品名称 |
+ 数量 |
+ 转入 |
+ 转出 |
+ 工序号 |
+ 作业 |
+ 计划开始时间 |
+ 计划结束时间 |
+ 延期 |
+
+
+
+
+
+
+
+
+ 数据加载中…
+
+
暂无生产数据
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ | {{ row._index }} |
+ {{ row.moOrderNo || '—' }} |
+ {{ row.materialNumber || '—' }} |
+ {{ row.materialName || '—' }} |
+ {{ formatQty(row.operQty) }} |
+ {{ formatQty(row.transInQty) }} |
+ {{ formatQty(row.transOutQty) }} |
+ {{ row.operNumber != null && row.operNumber !== '' ? row.operNumber : '—' }} |
+ {{ row.processName || '—' }} |
+ {{ formatPlanDate(row.operPlanStartTime) }} |
+ {{ formatPlanDate(row.operPlanFinishTime) }} |
+ {{ row._delayText }} |
+
+
+ | |
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/system/productionBoard/index.vue b/src/views/system/productionBoard/index.vue
new file mode 100644
index 0000000..43f853a
--- /dev/null
+++ b/src/views/system/productionBoard/index.vue
@@ -0,0 +1,1231 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 查询
+ 重置
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ card.title }}
+ {{ card.value }}
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ formatNumber(scope.row.moInstockQty) }}
+
+
+
+ {{ formatNumber(scope.row.overallProgress) }}
+
+
+
+
+
+ {{ scope.row.overallStatus || '-' }}
+
+
+
+
+
+ {{ formatOperText(scope.row) }}
+
+
+
+ {{ formatNumber(scope.row.planQty) }}
+
+
+ {{ formatNumber(scope.row.inQty) }}
+
+
+ {{ formatNumber(scope.row.okQty) }}
+
+
+ {{ formatNumber(scope.row.ngQty) }}
+
+
+ {{ formatNumber(scope.row.progress) }}
+
+
+ {{ scope.row.dayReportFinishQty == null ? '-' : formatNumber(scope.row.dayReportFinishQty) }}
+
+
+ {{ scope.row.dayReportQuaQty == null ? '-' : formatNumber(scope.row.dayReportQuaQty) }}
+
+
+ {{ scope.row.dayReportFailQty == null ? '-' : formatNumber(scope.row.dayReportFailQty) }}
+
+
+ {{ scope.row.operationInstockQty == null ? '-' : formatNumber(scope.row.operationInstockQty) }}
+
+
+
+
+ {{ scope.row.subcontractLeaveQtyBeforeReportDay == null ? '-' : formatNumber(scope.row.subcontractLeaveQtyBeforeReportDay) }}
+
+
+ {{ scope.row.subcontractEnterQtyBeforeReportDay == null ? '-' : formatNumber(scope.row.subcontractEnterQtyBeforeReportDay) }}
+
+
+ {{ scope.row.subcontractQualifiedQtyBeforeReportDay == null ? '-' : formatNumber(scope.row.subcontractQualifiedQtyBeforeReportDay) }}
+
+
+
+
+
+ {{ scope.row.subcontractLeaveQtyOnReportDay == null ? '-' : formatNumber(scope.row.subcontractLeaveQtyOnReportDay) }}
+
+
+ {{ scope.row.subcontractEnterQtyOnReportDay == null ? '-' : formatNumber(scope.row.subcontractEnterQtyOnReportDay) }}
+
+
+ {{ scope.row.subcontractQualifiedQtyOnReportDay == null ? '-' : formatNumber(scope.row.subcontractQualifiedQtyOnReportDay) }}
+
+
+ {{ scope.row.subcontractLeaveEnterSumOnReportDay == null ? '-' : formatNumber(scope.row.subcontractLeaveEnterSumOnReportDay) }}
+
+
+
+
+ {{ formatNumber(scope.row.transOutQty) }}
+
+
+
+
+
+
+
+
+
+
+
+ {{ formatNumber(scope.row.moQty) }}
+
+
+ {{ formatNumber(scope.row.productionInstockQty) }}
+
+
+ {{ formatNumber(scope.row.todayFinishQty) }}
+
+
+ {{ formatNumber(scope.row.todayQuaQty) }}
+
+
+ {{ formatNumber(scope.row.todayFailQty) }}
+
+
+
+
+
+
+
批次跟踪(productionTraceList)
+
+
+
+
+
+
+ {{ formatNumber(scope.row.qty) }}
+
+
+
+
+
+
+
+
+ {{ formatNumber(scope.row.instockQty) }}
+
+
+
+
订单跟踪(orders.moTraceRows)
+
+
+
+
+
+
+ {{ formatNumber(scope.row.qty) }}
+
+
+
+
+
+
+
+
+ {{ formatNumber(scope.row.instockQty) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ formatNumber(scope.row.purchaseQty) }}
+
+
+
+
+ {{ formatNumber(scope.row.instockQty) }}
+
+
+
+
+
+
+
+
+
+
+
+ {{ formatNumber(scope.row.sumPurchaseQty) }}
+
+
+ {{ formatNumber(scope.row.sumInstockQty) }}
+
+
+
+
+
+
+
+
+
+
+ 汇总完成: {{ formatNumber(getOperationReportSummary(item).totalFinishQty) }}
+ 汇总合格: {{ formatNumber(getOperationReportSummary(item).totalQuaQty) }}
+ 汇总不良: {{ formatNumber(getOperationReportSummary(item).totalFailQty) }}
+
+
+
+
+
+
+
+ {{ formatNumber(scope.row.finishQty) }}
+
+
+ {{ formatNumber(scope.row.quaQty) }}
+
+
+ {{ formatNumber(scope.row.failQty) }}
+
+
+
+
+
+
+
+
+
+
+ 发出(转出): {{ formatNumber(getSubcontractInOutSummary(item.orders).outQty) }}
+ 转入: {{ formatNumber(getSubcontractInOutSummary(item.orders).inQty) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/system/productionRemind/index.vue b/src/views/system/productionRemind/index.vue
new file mode 100644
index 0000000..07a10fa
--- /dev/null
+++ b/src/views/system/productionRemind/index.vue
@@ -0,0 +1,567 @@
+
+
+
+
+
+
+
+
委外发出 / 接收汇总(按订单合并)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ row.moOrderNo || '—' }}
+
+
+
+ {{ row.outSupplierName || '—' }}
+
+
+ {{ row.inSupplierName || '—' }}
+
+
+
+
+ {{ row.operQty == null || row.operQty === '' ? '—' : formatQtyVal(row.operQty) }}
+
+
+ {{ formatQtyVal(row.operTransferQty) }}
+
+
+ {{ formatQtyVal(row.receiveTransferQty) }}
+
+
+
+ {{ formatQtyVal(row.qtyDiff) }}
+
+
+
+
+ {{ formatQtyVal(row.returnDiff) }}
+
+
+
+ {{ formatDate(row.billDate) }}
+
+
+ {{ formatOperNo(row.inOperNumber) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/system/ratio/index.vue b/src/views/system/ratio/index.vue
new file mode 100644
index 0000000..1daf6f6
--- /dev/null
+++ b/src/views/system/ratio/index.vue
@@ -0,0 +1,185 @@
+
+
+
+
+
+
+
+
+
+
+ 查询
+ 重置
+
+
+
+
+
+
+ 速比齐套查询结果
+
+ 速比: {{ reportData.ratioValue }}
+ 最大输出扭矩: {{ reportData.maxTorqueNm }} Nm
+
+ 输入数量: {{ reportData.inputQty }}
+
+
+ 最大可齐套数量: {{ reportData.maxBuildQty || 0 }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 可用
+
+
+
+
+
+ {{ scope.row.availableQty || 0 }}
+
+
+
+
+
+
+
+
+
采购在途明细:
+
+ 单号: {{ item.billNo }}
+ 未入库: {{ item.notInstockQty }} |
+ 交期: {{ item.deliveryDate ? item.deliveryDate.substring(0, 10) : '-' }}
+
+
+
+ {{ scope.row.poNotInQty || 0 }}
+
+
+ {{ scope.row.poNotInQty || 0 }}
+
+
+
+
+
+
+
+
生产在途明细:
+
+ 单号: {{ item.billNo }}
+ 未入库: {{ item.notInstockQty }} |
+ 计划完工: {{ item.planFinishDate ? item.planFinishDate.substring(0, 10) : '-' }}
+
+
+
+ {{ scope.row.moNotInQty || 0 }}
+
+
+ {{ scope.row.moNotInQty || 0 }}
+
+
+
+
+
+
+ {{ scope.row.finalAvailableQty || 0 }}
+
+
+
+
+
+
+
+
+ {{ scope.row.shortageQty || 0 }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/system/route/bomfrom.vue b/src/views/system/route/bomfrom.vue
index d8b2225..0f4e4e7 100644
--- a/src/views/system/route/bomfrom.vue
+++ b/src/views/system/route/bomfrom.vue
@@ -2,6 +2,7 @@
推送工艺
+
+ 审核通过
+
+
@@ -154,10 +159,20 @@
-
-
-
-
+
+
{{ scope.row.processControl }}
@@ -323,10 +338,10 @@
-
+
-
+
@@ -353,10 +368,20 @@
-
-
-
-
+
+
@@ -609,7 +634,7 @@ import {
import { getToken } from "../../../utils/auth";
import Fromed from './fromed'
import Bomfrom from './bomfrom'
-import { getProcessInfoList, pushRouteBom, onSave, getBomInfo, getProcessRouteList } from "@/api/system/route";
+import { getProcessInfoList, pushRouteBom, approveRoute, onSave, getBomInfo, getProcessRouteList } from "@/api/system/route";
import { listMaterial } from "@/api/system/material";
import dict from "@/utils/dict";
@@ -647,6 +672,12 @@ export default {
url: process.env.VUE_APP_BASE_API + "/system/route/importDataTime"
},
materialOptions: [], // 用于存储物料信息
+ processControlOptions: [
+ '汇报+免检',
+ '汇报+质量',
+ '委外+质量',
+ '委外+汇报'
+ ],
showtable: true,
expand: true,
bomData: [],
@@ -718,14 +749,14 @@ export default {
},
// 对应关系映射:工序名称 -> 工作中心
processToWorkCenterMap: {
- // 铆焊工段
- '数控火焰下料': '铆焊工段',
- '数控激光下料': '铆焊工段',
- '数控切管下料': '铆焊工段',
- '水虎鱼剪折冲': '铆焊工段',
- '锯床下料': '铆焊工段',
- '抛丸': '铆焊工段',
- '组焊': '铆焊工段',
+ // 下料工段
+ '数控火焰下料': '下料工段',
+ '数控激光下料': '下料工段',
+ '数控切管下料': '下料工段',
+ '水虎鱼剪折冲': '下料工段',
+ '锯床下料': '下料工段',
+ '抛丸': '下料工段',
+ '组焊': '下料工段',
'普车': '机一工段',
'普铣': '机一工段',
'龙门铣': '机一工段',
@@ -738,14 +769,14 @@ export default {
'双主轴': '机二工段',
'车铣复合': '机二工段',
'线切割': '机二工段',
- '卧加63': '机三工段',
- '5032龙门': '机三工段',
- '3018龙门': '机三工段',
- '2013龙门': '机三工段',
- '立加1370': '机三工段',
- '立加1177': '机三工段',
- '立加850': '机三工段',
- '数插5035': '机三工段',
+ '卧加63': '焊接工段',
+ '5032龙门': '焊接工段',
+ '3018龙门': '焊接工段',
+ '2013龙门': '焊接工段',
+ '立加1370': '焊接工段',
+ '立加1177': '焊接工段',
+ '立加850': '焊接工段',
+ '数插5035': '焊接工段',
'装配1': '装一工段',
'装配2': '装二工段',
'电装': '电钳工段',
@@ -1014,98 +1045,12 @@ export default {
},
- // 处理工作中心变化
- handleWorkCenterChange(scope) {
- const { row } = scope;
- const currentIndex = this.form.routeList.findIndex(item => item === row);
-
- // 移除自动设置工序控制码的逻辑
- // 只需记录工作中心的变化,不再自动填写
- console.log("工作中心变化:", row.workCenter);
- },
-
- // 验证工序控制
- validateProcessControl(row, index) {
- // 验证逻辑保持不变
- if (row.workCenter === '委外中心' && row.processControl !== '委外+质量') {
- return {
- valid: false,
- message: '委外中心的工序控制必须为"委外+质量"',
- correctValue: '委外+质量'
- };
- }
-
- if (index > 0) {
- const previousRow = this.form.routeList[index - 1];
- if (previousRow.workCenter === row.workCenter &&
- previousRow.workCenter !== '委外中心' &&
- row.processControl !== '汇报+免检') {
- return {
- valid: false,
- message: '与上道工序工作中心相同时,工序控制应为"汇报+免检"',
- correctValue: '汇报+免检'
- };
- }
- }
-
- return { valid: true };
- },
-
// 开始编辑行
handleRowEdit(scope) {
- // 保存原始数据
scope.row.originalData = JSON.parse(JSON.stringify(scope.row));
- // 设置编辑状态
this.$set(scope.row, 'isEdit', true);
-
- // 如果是委外中心,确保工序控制正确
- if (scope.row.workCenter === '委外中心') {
- this.$set(scope.row, 'processControl', '委外+质量');
- }
},
- // 判断工序控制是否应该禁用
- isProcessControlDisabled(row, index) {
- return row.workCenter === '委外中心' || this.shouldBeAutoFreeInspection(row, index);
- },
-
- // 设置工序控制
- setProcessControl(row, index) {
- console.log('进入setProcessControl方法'); // 添加日志
- if (row.workCenter === '委外中心') {
- console.log('设置委外+质量'); // 添加日志
- this.$set(row, 'processControl', '委外+质量');
- } else if (this.shouldBeAutoFreeInspection(row, index)) {
- console.log('设置汇报+免检'); // 添加日志
- this.$set(row, 'processControl', '汇报+免检');
- }
- },
- // 验证工序控制
-
- // 判断是否应该自动设置为免检
- shouldBeAutoFreeInspection(row, index) {
- if (!row.parentId || index === 0 || row.workCenter === '委外中心') {
- return false;
- }
-
- // 获取上一道工序
- const parent = this.form.routeList.find(item => item.id === row.parentId);
- if (!parent || !parent.children) {
- return false;
- }
-
- const currentIndex = parent.children.findIndex(item => item === row);
- if (currentIndex <= 0) {
- return false;
- }
-
- const prevProcess = parent.children[currentIndex - 1];
-
-
- return prevProcess && prevProcess.workCenter === row.workCenter;
- },
-
-
/** 导入时间按钮操作 */
handleImportTime() {
this.timeUpload.title = "导入时间";
@@ -1268,14 +1213,6 @@ export default {
};
routeList.push(newRow);
this.showParentSaveBtn = props.row.id;
-
- // 添加新行后,监听工作中心变化
- this.$nextTick(() => {
- if (newRow.workCenter) {
- this.setProcessControl(newRow, routeList.length - 1);
- }
- });
-
},
// 删除子集
@@ -1479,9 +1416,8 @@ export default {
},
- /**推送工艺 */
- async pushRouteBom() {
- // 获取生产订单号
+ /** 推送工艺 / 审核并推送 共用逻辑 */
+ async executeRoutePush({ confirmMessage, loadingText, apiFn, errorTitle, successTitle }) {
const productionOrderNo = this.params.productionOrderNo;
if (!productionOrderNo) {
this.$modal.msgError("未获取到生产订单号,请检查!");
@@ -1491,47 +1427,36 @@ export default {
this.$modal.msgError("请填写分组名称!");
return;
}
+ let loading = null;
try {
- // 显示确认对话框
- await this.$confirm(
- '推送工艺可能需要较长时间,请耐心等待。是否继续?',
- '提示',
- {
- confirmButtonText: '确定',
- cancelButtonText: '取消',
- type: 'warning'
- }
- );
- // 显示全屏 loading
- const loading = this.$loading({
+ await this.$confirm(confirmMessage, '提示', {
+ confirmButtonText: '确定',
+ cancelButtonText: '取消',
+ type: 'warning'
+ });
+ loading = this.$loading({
lock: true,
- text: '正在推送工艺,请稍候...',
+ text: loadingText,
spinner: 'el-icon-loading',
background: 'rgba(0, 0, 0, 0.7)'
});
- // 重置表单状态
this.reset();
- // 设置超时检测
- const timeout = 600000; // 10分钟超时
+ const timeout = 600000;
const timeoutPromise = new Promise((_, reject) => {
setTimeout(() => {
reject(new Error('推送操作超时,请检查后台处理状态'));
}, timeout);
});
- // 调用推送 API 并设置超时
const response = await Promise.race([
- pushRouteBom(productionOrderNo, this.routeGroupName.trim()),
+ apiFn(productionOrderNo, this.routeGroupName.trim()),
timeoutPromise
]);
- // 处理后端返回的数据 - 适配新的返回结构 R
const { duplicateRoutes, failedRoutes, successfulRoutes } = response.data;
- // 提取物料编码和错误信息
const duplicateCodes = duplicateRoutes.join(', ');
const failedInfo = failedRoutes.map(route =>
`${route.materialCode} (${route.errorMessage || '未知错误'})`
).join(', ');
const successfulCodes = successfulRoutes.map(route => route.materialCode).join(', ');
- // 显示成功消息
this.$alert(`
成功 (${successfulRoutes.length}):
${successfulCodes || '无'}
@@ -1539,38 +1464,71 @@ export default {
${failedInfo || '无'}
重复 (${duplicateRoutes.length}):
${duplicateCodes || '无'}
- `, '推送完成', {
+ `, successTitle || '推送完成', {
dangerouslyUseHTMLString: true,
confirmButtonText: '确定'
});
-
- // 刷新列表
await this.getList();
-
- // 关闭 loading
- loading.close();
-
} catch (error) {
- // 错误处理
- console.error('[推送工艺失败]:', error);
-
- // 显示错误通知
+ console.error(`[${errorTitle}]:`, error);
this.$notify({
- title: '推送工艺失败',
- message: error.message || '推送工艺失败,请重试!',
+ title: errorTitle,
+ message: error.message || `${errorTitle},请重试!`,
type: 'error',
duration: 0,
showClose: true
});
-
} finally {
- // 确保 loading 被关闭
- if (this.$loading) {
- this.$loading().close();
+ if (loading) {
+ loading.close();
}
this.loading = false;
}
},
+
+ /**推送工艺 */
+ pushRouteBom() {
+ return this.executeRoutePush({
+ confirmMessage: '推送工艺可能需要较长时间,请耐心等待。是否继续?',
+ loadingText: '正在推送工艺,请稍候...',
+ apiFn: pushRouteBom,
+ errorTitle: '推送工艺失败'
+ });
+ },
+
+ /** 审核通过:更新状态并发送钉钉通知,不推送金蝶、不发送工艺计划表 */
+ async approveRoute() {
+ const productionOrderNo = this.params.productionOrderNo;
+ if (!productionOrderNo) {
+ this.$modal.msgError("未获取到生产订单号,请检查!");
+ return;
+ }
+ try {
+ await this.$confirm(
+ '将通过工艺审核并发送钉钉通知,不会推送金蝶。是否继续?',
+ '提示',
+ { confirmButtonText: '确定', cancelButtonText: '取消', type: 'warning' }
+ );
+ const loading = this.$loading({
+ lock: true,
+ text: '正在审核并发送通知...',
+ spinner: 'el-icon-loading',
+ background: 'rgba(0, 0, 0, 0.7)'
+ });
+ try {
+ const res = await approveRoute(productionOrderNo);
+ this.$modal.msgSuccess((res && res.msg) || '审核通过');
+ await this.getList();
+ } finally {
+ loading.close();
+ }
+ } catch (error) {
+ if (error !== 'cancel') {
+ this.$modal.msgError(error.message || '审核失败');
+ }
+ }
+ },
+
/** 更新计划时间间*/
updateProcessPlan(row) {
// 若未勾选任何行,则提示并返回
@@ -1704,8 +1662,6 @@ export default {
}
});
},
- // 验证所有工序控制
-
/** 删除按钮操作 */
handleDelete(scope) {
const ids = [scope.row.id];
@@ -1847,8 +1803,6 @@ export default {
this.loading = true;
// 获取行数据并创建副本
const row = scope.row;
- // 验证委外中心的工序控制
-
const saveData = {
id: row.id,
parentId: row.parentId,
diff --git a/src/views/system/route/index_backup.vue b/src/views/system/route/index_backup.vue
index ec72791..cd0fb4c 100644
--- a/src/views/system/route/index_backup.vue
+++ b/src/views/system/route/index_backup.vue
@@ -345,10 +345,10 @@
-
+
-
+
@@ -742,14 +742,14 @@ export default {
},
// 对应关系映射:工序名称 -> 工作中心
processToWorkCenterMap: {
- // 铆焊工段
- '数控火焰下料': '铆焊工段',
- '数控激光下料': '铆焊工段',
- '数控切管下料': '铆焊工段',
- '水虎鱼剪折冲': '铆焊工段',
- '锯床下料': '铆焊工段',
- '抛丸': '铆焊工段',
- '组焊': '铆焊工段',
+ // 下料工段
+ '数控火焰下料': '下料工段',
+ '数控激光下料': '下料工段',
+ '数控切管下料': '下料工段',
+ '水虎鱼剪折冲': '下料工段',
+ '锯床下料': '下料工段',
+ '抛丸': '下料工段',
+ '组焊': '下料工段',
'普车': '机一工段',
'普铣': '机一工段',
'龙门铣': '机一工段',
@@ -762,14 +762,14 @@ export default {
'双主轴': '机二工段',
'车铣复合': '机二工段',
'线切割': '机二工段',
- '卧加63': '机三工段',
- '5032龙门': '机三工段',
- '3018龙门': '机三工段',
- '2013龙门': '机三工段',
- '立加1370': '机三工段',
- '立加1177': '机三工段',
- '立加850': '机三工段',
- '数插5035': '机三工段',
+ '卧加63': '焊接工段',
+ '5032龙门': '焊接工段',
+ '3018龙门': '焊接工段',
+ '2013龙门': '焊接工段',
+ '立加1370': '焊接工段',
+ '立加1177': '焊接工段',
+ '立加850': '焊接工段',
+ '数插5035': '焊接工段',
'装配1': '装一工段',
'装配2': '装二工段',
'电装': '电钳工段',
diff --git a/src/views/system/workAlertPushConfig/index.vue b/src/views/system/workAlertPushConfig/index.vue
new file mode 100644
index 0000000..58522cf
--- /dev/null
+++ b/src/views/system/workAlertPushConfig/index.vue
@@ -0,0 +1,424 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 搜索
+ 重置
+
+
+
+
+
+ 新增
+
+
+ 修改
+
+
+ 删除
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ row.enabled === '1' ? '启用' : '停用' }}
+
+
+
+
+
+ {{ formatRecipientSummary(row.recipientRules) }}
+ —
+
+
+
+ {{ row.lastPushDate || '—' }}
+
+
+
+
+
+ 立即推送
+ 编辑
+ 删除
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.name }}
+ {{ item.code }}
+
+
+
+
+
+
+
+
+
+
+
+
各工段长 StaffId(逗号分隔)。有数据且已填写的工段才会收到本工段单 Sheet Excel。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 启用
+ 停用
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/system/workCenterAlert/index.vue b/src/views/system/workCenterAlert/index.vue
new file mode 100644
index 0000000..e9b3083
--- /dev/null
+++ b/src/views/system/workCenterAlert/index.vue
@@ -0,0 +1,1827 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
{{ activeCategory.label }}
+
{{ activeCategory.desc }}
+
+
+
+
+
+
+
+
+
+
+
+
+ 导出
+
+
+ 共 {{ currentDisplayCount }} 条记录
+ (未回来 {{ subcontractNotBackCount }})
+
+
+ 延期工序 {{ jjRemindMeta.delayRowCount }}
+ · 订单 {{ jjRemindMeta.delayMoCount }}
+ · 转移 {{ jjRemindMeta.transferCount }} 条
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ row.moBillNo }}
+ {{ row.moBillNo || '—' }}
+
+
+
+
+
+
+
+
+
+
+
+ {{ row.materialStatus || '—' }}
+
+
+
+
+
+
+ {{ row.delayDays }}
+ —
+
+
+
+
+
+
+
+
+ {{ row.prevOperStatus || '—' }}
+
+
+
+
+
+
+
+ {{ row.returnStatus || '—' }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ row.approvalCategoryLabel || '—' }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ row.instockAlertReason || '—' }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 委外发出 / 接收明细
+ {{ subcontractDrawerMoBillNo || '—' }}
+
+
+
+ 令号 {{ subcontractDrawerContext.moOrderNo || '—' }}
+ 产品 {{ subcontractDrawerContext.materialNumber || '—' }}
+ {{ subcontractDrawerContext.materialName || '—' }}
+
+
+
+ 已发出
+ {{ formatSummaryQty(subcontractSendQty) }}
+ {{ subcontractSendCount }} 笔
+
+
+ 已接收
+ {{ formatSummaryQty(subcontractRecvQty) }}
+ {{ subcontractRecvCount }} 笔
+
+
+ 差额(未回)
+ {{ formatSummaryQty(subcontractDiffQty) }}
+ 发出 − 接收
+
+
+ 明细
+ {{ subcontractTransferDetailList.length }}
+ 条
+
+
+
+
+
+
+
+
+ {{ row.transferType === 'C' ? '发出' : row.transferType === 'G' ? '接收' : (row.transferType || '—') }}
+
+
+
+
+
+
+
+
+ {{ formatReportDate(row.billDate) || '—' }}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vue.config.js b/vue.config.js
index f372002..99567af 100644
--- a/vue.config.js
+++ b/vue.config.js
@@ -31,8 +31,16 @@ module.exports = {
devServer: {
host: '0.0.0.0',
port: port,
- open: true,
+ open: false,
proxy: {
+ // 出图状态接口的跨域代理
+ '/plot-api': {
+ target: 'http://192.168.5.18:9000',
+ changeOrigin: true,
+ pathRewrite: {
+ '^/plot-api': ''
+ }
+ },
// detail: https://cli.vuejs.org/config/#devserver-proxy
[process.env.VUE_APP_BASE_API]: {
target: `http://127.0.0.1:8033`,
@@ -144,5 +152,10 @@ module.exports = {
transpileDependencies: [
'vue-echarts',
'resize-detector'
- ]
+ ],
+ pluginOptions: {
+ electronBuilder: {
+ nodeIntegration: true
+ }
+ }
}