diff --git a/src/views/modules/longchuang/production-plan-cable-cop-task.vue b/src/views/modules/longchuang/production-plan-cable-cop-task.vue index 28533b5c..44ba1168 100644 --- a/src/views/modules/longchuang/production-plan-cable-cop-task.vue +++ b/src/views/modules/longchuang/production-plan-cable-cop-task.vue @@ -65,7 +65,6 @@ 修改 分配人员 - 节点报工 完工 删除 @@ -83,7 +82,7 @@ style="margin-top: 20px; text-align: right"> - + - - - - + + + + + 人员分配策略 + + + 默认分配:创建订单后,系统会按节点角色自动分配该角色下全部人员。 + 手动分配:创建订单后不自动分配,需要在“分配人员”里手工选择负责人。 + + + + + + 默认分配 + 手动分配 + + + + + + + 并行 + 按顺序 + + + + 取消 @@ -199,7 +217,7 @@ export default { const done = list.filter(item => item.status === '已完成').length const currentNode = (list.find(item => item.status !== '已完成') || {}).nodeName || '全部完成' const assigneeSummary = list.filter(item => item.assigneeUserName).map(item => `${item.nodeName}:${item.assigneeUserName}`).join(';') - return { ...row, autoAssignAllUsers: !!row.autoAssignAllUsers, nodeList: list, nodeDoneCount: done, nodeTotalCount: list.length, currentNode: row.currentNode || currentNode, reportQty: row.reportQty || 0, assigneeSummary: assigneeSummary || '-' } + return { ...row, autoAssignAllUsers: !!row.autoAssignAllUsers, nodeReportMode: row.nodeReportMode || 'PARALLEL', nodeList: list, nodeDoneCount: done, nodeTotalCount: list.length, currentNode: row.currentNode || currentNode, reportQty: row.reportQty || 0, assigneeSummary: assigneeSummary || '-' } }, loadMockData() { this.dataList = [ @@ -211,7 +229,8 @@ export default { modelNo: 'LC-HOME-820', taskQty: 6, reportQty: 2, - autoAssignAllUsers: false, + autoAssignAllUsers: true, + nodeReportMode: 'PARALLEL', planFinishDate: '2026-04-20', finishDate: '', status: '进行中', @@ -228,7 +247,8 @@ export default { modelNo: 'LC-HOME-1050', taskQty: 8, reportQty: 0, - autoAssignAllUsers: false, + autoAssignAllUsers: true, + nodeReportMode: 'PARALLEL', planFinishDate: '2026-04-22', finishDate: '', status: '已排产', @@ -245,7 +265,7 @@ export default { this.searchTable('Y') }, openEditDialog(row) { - this.saveHeaderData = row ? { ...row, autoAssignAllUsers: !!row.autoAssignAllUsers } : { orderNo: '', taskNo: '', taskType: '线缆自制', sourceProjectNo: '', modelNo: '', taskQty: 1, reportQty: 0, planFinishDate: '', status: '已排产', autoAssignAllUsers: false, nodeList: [] } + this.saveHeaderData = row ? { ...row, autoAssignAllUsers: !!row.autoAssignAllUsers, nodeReportMode: row.nodeReportMode || 'PARALLEL' } : { orderNo: '', taskNo: '', taskType: '线缆自制', sourceProjectNo: '', modelNo: '', taskQty: 1, reportQty: 0, planFinishDate: '', status: '已排产', autoAssignAllUsers: true, nodeReportMode: 'PARALLEL', nodeList: [] } this.setUp.reviewFlag = true }, saveTask() { diff --git a/src/views/modules/longchuang/production-plan-home-order.vue b/src/views/modules/longchuang/production-plan-home-order.vue index 3ebc5836..27e55a04 100644 --- a/src/views/modules/longchuang/production-plan-home-order.vue +++ b/src/views/modules/longchuang/production-plan-home-order.vue @@ -138,7 +138,7 @@ - + - - - - + + + + + 人员分配策略 + + + 默认分配:创建订单后,系统会按节点角色自动分配该角色下全部人员。 + 手动分配:创建订单后不自动分配,需要在“分配人员”里手工选择负责人。 + + + + + + 默认分配 + 手动分配 + + + + + + + 并行 + 按顺序 + + + + @@ -262,7 +281,7 @@ export default { const done = list.filter(item => item.status === '已完成').length const currentNode = (list.find(item => item.status !== '已完成') || {}).nodeName || '全部完成' const assigneeSummary = list.filter(item => item.assigneeUserName).map(item => `${item.nodeName}:${item.assigneeUserName}`).join(';') - return { ...row, autoAssignAllUsers: !!row.autoAssignAllUsers, nodeList: list, nodeDoneCount: done, nodeTotalCount: list.length, currentNode: row.currentNode || currentNode, assigneeSummary: assigneeSummary || '-' } + return { ...row, autoAssignAllUsers: !!row.autoAssignAllUsers, nodeReportMode: row.nodeReportMode || 'PARALLEL', nodeList: list, nodeDoneCount: done, nodeTotalCount: list.length, currentNode: row.currentNode || currentNode, assigneeSummary: assigneeSummary || '-' } }, loadMockData() { this.dataList = [].map(this.normalizeRow) @@ -314,7 +333,7 @@ export default { this.getDataList('Y') }, openEditDialog(row) { - this.saveHeaderData = row ? { ...row, autoAssignAllUsers: !!row.autoAssignAllUsers } : { orderNo: '', projectNo: '', modelNo: '', color: '', floorCount: 1, specialRequirement: '', planDeliveryDate: '', status: '已排产', autoAssignAllUsers: true, nodeList: [] } + this.saveHeaderData = row ? { ...row, autoAssignAllUsers: !!row.autoAssignAllUsers, nodeReportMode: row.nodeReportMode || 'PARALLEL' } : { orderNo: '', projectNo: '', modelNo: '', color: '', floorCount: 1, specialRequirement: '', planDeliveryDate: '', status: '已排产', autoAssignAllUsers: true, nodeReportMode: 'PARALLEL', nodeList: [] } this.setUp.reviewFlag = true }, saveOrder() { diff --git a/src/views/modules/longchuang/production-plan-renovation-order.vue b/src/views/modules/longchuang/production-plan-renovation-order.vue index 7836c3ff..c064bebf 100644 --- a/src/views/modules/longchuang/production-plan-renovation-order.vue +++ b/src/views/modules/longchuang/production-plan-renovation-order.vue @@ -57,7 +57,6 @@ 修改 分配人员 - 节点报工 完工 删除 @@ -75,7 +74,7 @@ style="margin-top: 20px; text-align: right"> - + - - - - + + + + + 人员分配策略 + + + 默认分配:创建订单后,系统会按节点角色自动分配该角色下全部人员。 + 手动分配:创建订单后不自动分配,需要在“分配人员”里手工选择负责人。 + + + + + + 默认分配 + 手动分配 + + + + + + + 并行 + 按顺序 + + + + @@ -191,7 +209,7 @@ export default { const done = list.filter(item => item.status === '已完成').length const currentNode = (list.find(item => item.status !== '已完成') || {}).nodeName || '全部完成' const assigneeSummary = list.filter(item => item.assigneeUserName).map(item => `${item.nodeName}:${item.assigneeUserName}`).join(';') - return { ...row, autoAssignAllUsers: !!row.autoAssignAllUsers, nodeList: list, nodeDoneCount: done, nodeTotalCount: list.length, currentNode: row.currentNode || currentNode, assigneeSummary: assigneeSummary || '-' } + return { ...row, autoAssignAllUsers: !!row.autoAssignAllUsers, nodeReportMode: row.nodeReportMode || 'PARALLEL', nodeList: list, nodeDoneCount: done, nodeTotalCount: list.length, currentNode: row.currentNode || currentNode, assigneeSummary: assigneeSummary || '-' } }, loadMockData() { this.dataList = [ @@ -201,7 +219,8 @@ export default { modelNo: 'LC-REN-630', color: '钛金灰', floorCount: 10, - autoAssignAllUsers: false, + autoAssignAllUsers: true, + nodeReportMode: 'PARALLEL', specialRequirement: '井道尺寸受限,需优化导轨方案', planDeliveryDate: '2026-04-28', status: '进行中', @@ -219,7 +238,8 @@ export default { modelNo: 'LC-REN-800', color: '深空黑', floorCount: 14, - autoAssignAllUsers: false, + autoAssignAllUsers: true, + nodeReportMode: 'PARALLEL', specialRequirement: '兼容旧楼层召唤系统', planDeliveryDate: '2026-05-06', status: '已排产', @@ -239,7 +259,7 @@ export default { this.getDataList('Y') }, openEditDialog(row) { - this.saveHeaderData = row ? { ...row, autoAssignAllUsers: !!row.autoAssignAllUsers } : { orderNo: '', projectNo: '', modelNo: '', color: '', floorCount: 1, specialRequirement: '', planDeliveryDate: '', status: '已排产', autoAssignAllUsers: false, nodeList: [] } + this.saveHeaderData = row ? { ...row, autoAssignAllUsers: !!row.autoAssignAllUsers, nodeReportMode: row.nodeReportMode || 'PARALLEL' } : { orderNo: '', projectNo: '', modelNo: '', color: '', floorCount: 1, specialRequirement: '', planDeliveryDate: '', status: '已排产', autoAssignAllUsers: true, nodeReportMode: 'PARALLEL', nodeList: [] } this.setUp.reviewFlag = true }, saveOrder() { diff --git a/src/views/modules/longchuang/production-work-report.vue b/src/views/modules/longchuang/production-work-report.vue index 0b93f4a3..a4b5206e 100644 --- a/src/views/modules/longchuang/production-work-report.vue +++ b/src/views/modules/longchuang/production-work-report.vue @@ -140,7 +140,7 @@ size="mini" type="primary" plain - :disabled="node.status === '已完成'" + :disabled="node.status === '已完成' || !canReportNode(item, node)" @click="directReportNode(item, node)"> 报工 @@ -331,6 +331,7 @@ export default { const currentNode = (nodeList.find(item => item.status !== '已完成') || {}).nodeName || '全部完成' return { ...row, + nodeReportMode: row.nodeReportMode || 'PARALLEL', orderTypeName: this.getOrderTypeName(row.orderType), productName: row.taskNo || row.projectNo || '-', planDate: row.planFinishDate || row.planDeliveryDate || '-', @@ -394,6 +395,17 @@ export default { } return 'card-plan' }, + canReportNode(order, node) { + if (!order || !node) { + return false + } + if ((order.nodeReportMode || 'PARALLEL') !== 'SEQUENTIAL') { + return true + } + const nodeList = order.visibleNodeList || [] + const firstUnDoneNode = nodeList.find(item => item.status !== '已完成') + return !!firstUnDoneNode && firstUnDoneNode.nodeCode === node.nodeCode + }, directReportNode(order, node) { this.reportData = { orderNo: order.orderNo,