Browse Source

节点报工模式可以选择并行还是按顺序

master
han\hanst 1 month ago
parent
commit
71c632d330
  1. 50
      src/views/modules/longchuang/production-plan-cable-cop-task.vue
  2. 43
      src/views/modules/longchuang/production-plan-home-order.vue
  3. 50
      src/views/modules/longchuang/production-plan-renovation-order.vue
  4. 14
      src/views/modules/longchuang/production-work-report.vue

50
src/views/modules/longchuang/production-plan-cable-cop-task.vue

@ -65,7 +65,6 @@
<template slot-scope="scope">
<a type="text" @click="openEditDialog(scope.row)">修改</a>
<a type="text" @click="openAssignDialog(scope.row)" :disabled="!scope.row.orderNo">分配人员</a>
<a type="text" @click="openReportDialog(scope.row)" :disabled="scope.row.status === '已完成'">节点报工</a>
<a type="text" @click="finishTask(scope.row)" :disabled="scope.row.status === '已完成'">完工</a>
<a type="text" style="color:#F56C6C" @click="deleteTask(scope.row)">删除</a>
</template>
@ -83,7 +82,7 @@
style="margin-top: 20px; text-align: right">
</el-pagination>
<el-dialog :title="saveHeaderData.orderNo ? '修改线缆/COP自制任务单' : '新增线缆/COP自制任务单'" :visible.sync="setUp.reviewFlag" width="720px" :close-on-click-modal="false" v-drag>
<el-dialog :title="saveHeaderData.orderNo ? '修改线缆/COP自制任务单' : '新增线缆/COP自制任务单'" :visible.sync="setUp.reviewFlag" width="550px" :close-on-click-modal="false" v-drag>
<el-form
ref="editForm"
:model="saveHeaderData"
@ -101,15 +100,34 @@
<el-col :span="12"><el-form-item label="任务数量"><el-input v-model="saveHeaderData.taskQty" :min="1" :max="9999" style="width: 100%"></el-input></el-form-item></el-col>
<el-col :span="12"><el-form-item label="计划完成日期"><el-date-picker v-model="saveHeaderData.planFinishDate" type="date" value-format="yyyy-MM-dd" style="width: 100%"></el-date-picker></el-form-item></el-col>
</el-row>
<el-form-item label="人员分配策略">
<el-switch
v-model="saveHeaderData.autoAssignAllUsers"
:active-value="true"
:inactive-value="false"
active-text="创建后默认分配对应角色全部人员"
inactive-text="手动分配人员">
</el-switch>
</el-form-item>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item>
<template slot="label">
人员分配策略
<el-tooltip effect="dark" placement="top">
<div slot="content">
默认分配创建订单后系统会按节点角色自动分配该角色下全部人员<br>
手动分配创建订单后不自动分配需要在分配人员里手工选择负责人
</div>
<i class="el-icon-question" style="margin-left:6px;color:#909399;cursor:pointer;"></i>
</el-tooltip>
</template>
<el-radio-group v-model="saveHeaderData.autoAssignAllUsers">
<el-radio :label="true">默认分配</el-radio>
<el-radio :label="false">手动分配</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="节点报工模式">
<el-radio-group v-model="saveHeaderData.nodeReportMode">
<el-radio label="PARALLEL">并行</el-radio>
<el-radio label="SEQUENTIAL">按顺序</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
</el-row>
</el-form>
<el-footer style="height: 40px; margin-top: 50px; text-align: center">
<el-button plain class="reset-btn" @click="setUp.reviewFlag = false">取消</el-button>
@ -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() {

43
src/views/modules/longchuang/production-plan-home-order.vue

@ -138,7 +138,7 @@
</el-tabs>
</div>
<el-dialog :title="saveHeaderData.orderNo ? '修改家用梯销售订单' : '新增家用梯销售订单'" :visible.sync="setUp.reviewFlag" width="700px" :close-on-click-modal="false" v-drag>
<el-dialog :title="saveHeaderData.orderNo ? '修改家用梯销售订单' : '新增家用梯销售订单'" :visible.sync="setUp.reviewFlag" width="550px" :close-on-click-modal="false" v-drag>
<el-form
ref="editForm"
:model="saveHeaderData"
@ -156,15 +156,34 @@
<el-col :span="12"><el-form-item label="计划发货日期"><el-date-picker v-model="saveHeaderData.planDeliveryDate" type="date" value-format="yyyy-MM-dd" style="width: 100%"></el-date-picker></el-form-item></el-col>
<el-col :span="12"><el-form-item label="状态"><el-select v-model="saveHeaderData.status" style="width: 100%"><el-option label="已排产" value="已排产"></el-option><el-option label="进行中" value="进行中"></el-option><el-option label="已完成" value="已完成"></el-option></el-select></el-form-item></el-col>
</el-row>
<el-form-item label="">
<el-switch
v-model="saveHeaderData.autoAssignAllUsers"
:active-value="true"
:inactive-value="false"
active-text="创建后默认分配对应角色全部人员"
inactive-text="手动分配人员">
</el-switch>
</el-form-item>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item>
<template slot="label">
人员分配策略
<el-tooltip effect="dark" placement="top">
<div slot="content">
默认分配创建订单后系统会按节点角色自动分配该角色下全部人员<br>
手动分配创建订单后不自动分配需要在分配人员里手工选择负责人
</div>
<i class="el-icon-question" style="margin-left:6px;color:#909399;cursor:pointer;"></i>
</el-tooltip>
</template>
<el-radio-group v-model="saveHeaderData.autoAssignAllUsers">
<el-radio :label="true">默认分配</el-radio>
<el-radio :label="false">手动分配</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="节点报工模式">
<el-radio-group v-model="saveHeaderData.nodeReportMode">
<el-radio label="PARALLEL">并行</el-radio>
<el-radio label="SEQUENTIAL">按顺序</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
</el-row>
<el-form-item label="特殊要求"><el-input v-model="saveHeaderData.specialRequirement" type="textarea" :rows="3"></el-input></el-form-item>
</el-form>
<el-footer style="height: 40px; margin-top: 50px; text-align: center">
@ -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() {

50
src/views/modules/longchuang/production-plan-renovation-order.vue

@ -57,7 +57,6 @@
<template slot-scope="scope">
<a type="text" @click="openEditDialog(scope.row)">修改</a>
<a type="text" @click="openAssignDialog(scope.row)" :disabled="!scope.row.orderNo">分配人员</a>
<a type="text" @click="openReportDialog(scope.row)" :disabled="scope.row.status === '已完成'">节点报工</a>
<a type="text" @click="finishOrder(scope.row)" :disabled="scope.row.status === '已完成'">完工</a>
<a type="text" style="color:#F56C6C" @click="deleteOrder(scope.row)">删除</a>
</template>
@ -75,7 +74,7 @@
style="margin-top: 20px; text-align: right">
</el-pagination>
<el-dialog :title="saveHeaderData.orderNo ? '修改改造项目订单' : '新增改造项目订单'" :visible.sync="setUp.reviewFlag" width="700px" :close-on-click-modal="false" v-drag>
<el-dialog :title="saveHeaderData.orderNo ? '修改改造项目订单' : '新增改造项目订单'" :visible.sync="setUp.reviewFlag" width="550px" :close-on-click-modal="false" v-drag>
<el-form
ref="editForm"
:model="saveHeaderData"
@ -93,15 +92,34 @@
<el-col :span="12"><el-form-item label="计划发货日期"><el-date-picker v-model="saveHeaderData.planDeliveryDate" type="date" value-format="yyyy-MM-dd" style="width: 100%"></el-date-picker></el-form-item></el-col>
<el-col :span="12"><el-form-item label="状态"><el-select v-model="saveHeaderData.status" style="width: 100%"><el-option label="已排产" value="已排产"></el-option><el-option label="进行中" value="进行中"></el-option><el-option label="已完成" value="已完成"></el-option></el-select></el-form-item></el-col>
</el-row>
<el-form-item label="人员分配策略">
<el-switch
v-model="saveHeaderData.autoAssignAllUsers"
:active-value="true"
:inactive-value="false"
active-text="创建后默认分配对应角色全部人员"
inactive-text="手动分配人员">
</el-switch>
</el-form-item>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item>
<template slot="label">
人员分配策略
<el-tooltip effect="dark" placement="top">
<div slot="content">
默认分配创建订单后系统会按节点角色自动分配该角色下全部人员<br>
手动分配创建订单后不自动分配需要在分配人员里手工选择负责人
</div>
<i class="el-icon-question" style="margin-left:6px;color:#909399;cursor:pointer;"></i>
</el-tooltip>
</template>
<el-radio-group v-model="saveHeaderData.autoAssignAllUsers">
<el-radio :label="true">默认分配</el-radio>
<el-radio :label="false">手动分配</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="节点报工模式">
<el-radio-group v-model="saveHeaderData.nodeReportMode">
<el-radio label="PARALLEL">并行</el-radio>
<el-radio label="SEQUENTIAL">按顺序</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
</el-row>
<el-form-item label="特殊要求"><el-input v-model="saveHeaderData.specialRequirement" type="textarea" :rows="3"></el-input></el-form-item>
</el-form>
<el-footer style="height: 40px; margin-top: 50px; text-align: center">
@ -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() {

14
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)">
报工
</el-button>
@ -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,

Loading…
Cancel
Save