|
|
|
@ -1,8 +1,8 @@ |
|
|
|
<template> |
|
|
|
<div class="mod-config"> |
|
|
|
<el-form :inline="true" label-position="top" class="query-form"> |
|
|
|
<el-form-item label="任务单号"> |
|
|
|
<el-input v-model="searchData.taskNo" clearable placeholder="请输入任务单号" style="width: 150px"></el-input> |
|
|
|
<el-form-item label="项目号"> |
|
|
|
<el-input v-model="searchData.projectNo" clearable placeholder="请输入项目号" style="width: 150px"></el-input> |
|
|
|
</el-form-item> |
|
|
|
<el-form-item label="任务类型"> |
|
|
|
<el-select v-model="searchData.taskType" clearable placeholder="全部" style="width: 120px"> |
|
|
|
@ -10,8 +10,17 @@ |
|
|
|
<el-option label="COP自制" value="COP自制"></el-option> |
|
|
|
</el-select> |
|
|
|
</el-form-item> |
|
|
|
<el-form-item label="来源项目号"> |
|
|
|
<el-input v-model="searchData.sourceProjectNo" clearable placeholder="请输入项目号" style="width: 140px"></el-input> |
|
|
|
<el-form-item label="类别"> |
|
|
|
<el-select v-model="searchData.category" clearable placeholder="全部" style="width: 120px"> |
|
|
|
<el-option label="新梯" value="新梯"></el-option> |
|
|
|
<el-option label="售后" value="售后"></el-option> |
|
|
|
</el-select> |
|
|
|
</el-form-item> |
|
|
|
<el-form-item label="物料名称"> |
|
|
|
<el-input v-model="searchData.materialName" clearable placeholder="请输入物料名称" style="width: 140px"></el-input> |
|
|
|
</el-form-item> |
|
|
|
<el-form-item label="规格"> |
|
|
|
<el-input v-model="searchData.materialSpec" clearable placeholder="请输入规格" style="width: 140px"></el-input> |
|
|
|
</el-form-item> |
|
|
|
<el-form-item label="状态"> |
|
|
|
<el-select v-model="searchData.status" clearable placeholder="全部" style="width: 120px"> |
|
|
|
@ -52,15 +61,15 @@ |
|
|
|
</template> |
|
|
|
</el-table-column> |
|
|
|
<el-table-column type="index" label="#" width="50" align="center"></el-table-column> |
|
|
|
<el-table-column prop="taskNo" label="任务单号" width="140" align="center"></el-table-column> |
|
|
|
<el-table-column prop="projectNo" label="项目号" width="140" align="center"></el-table-column> |
|
|
|
<el-table-column prop="taskType" label="任务类型" width="100" align="center"> |
|
|
|
<template slot-scope="scope"> |
|
|
|
<el-tag :type="scope.row.taskType === '线缆自制' ? 'primary' : 'success'" size="small">{{ scope.row.taskType }}</el-tag> |
|
|
|
</template> |
|
|
|
</el-table-column> |
|
|
|
<el-table-column prop="sourceProjectNo" label="来源项目号" width="120" align="center"></el-table-column> |
|
|
|
<el-table-column prop="modelNo" label="型号" width="110" align="center"></el-table-column> |
|
|
|
<el-table-column prop="taskQty" label="任务数量" width="90" align="center"></el-table-column> |
|
|
|
<el-table-column prop="category" label="类别" width="90" align="center"></el-table-column> |
|
|
|
<el-table-column prop="materialName" label="物料名称" width="140" align="center" show-overflow-tooltip></el-table-column> |
|
|
|
<el-table-column prop="materialSpec" label="规格" width="140" align="center" show-overflow-tooltip></el-table-column> |
|
|
|
<el-table-column prop="reportQty" label="累计报工数量" width="110" align="center"></el-table-column> |
|
|
|
<el-table-column prop="currentNode" label="当前节点" width="110" align="center"></el-table-column> |
|
|
|
<el-table-column prop="assigneeSummary" label="节点负责人" min-width="160" show-overflow-tooltip></el-table-column> |
|
|
|
@ -154,15 +163,22 @@ |
|
|
|
label-position="top" |
|
|
|
class="edit-form"> |
|
|
|
<el-row :gutter="20"> |
|
|
|
<el-col :span="12"><el-form-item label="任务单号" required><el-input v-model="saveHeaderData.taskNo"></el-input></el-form-item></el-col> |
|
|
|
<el-col :span="12"><el-form-item label="项目号" required><el-input v-model="saveHeaderData.projectNo"></el-input></el-form-item></el-col> |
|
|
|
<el-col :span="12"><el-form-item label="任务类型" required><el-select v-model="saveHeaderData.taskType" style="width: 100%"><el-option label="线缆自制" value="线缆自制"></el-option><el-option label="COP自制" value="COP自制"></el-option></el-select></el-form-item></el-col> |
|
|
|
</el-row> |
|
|
|
<el-row :gutter="20"> |
|
|
|
<el-col :span="12"><el-form-item label="来源项目号"><el-input v-model="saveHeaderData.sourceProjectNo"></el-input></el-form-item></el-col> |
|
|
|
<el-col :span="12"><el-form-item label="型号"><el-input v-model="saveHeaderData.modelNo"></el-input></el-form-item></el-col> |
|
|
|
<el-col :span="12"> |
|
|
|
<el-form-item label="类别" required> |
|
|
|
<el-select v-model="saveHeaderData.category" style="width: 100%"> |
|
|
|
<el-option label="新梯" value="新梯"></el-option> |
|
|
|
<el-option label="售后" value="售后"></el-option> |
|
|
|
</el-select> |
|
|
|
</el-form-item> |
|
|
|
</el-col> |
|
|
|
<el-col :span="12"><el-form-item label="物料名称" required><el-input v-model="saveHeaderData.materialName"></el-input></el-form-item></el-col> |
|
|
|
</el-row> |
|
|
|
<el-row :gutter="20"> |
|
|
|
<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="规格" required><el-input v-model="saveHeaderData.materialSpec"></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-row :gutter="20"> |
|
|
|
@ -202,7 +218,7 @@ |
|
|
|
|
|
|
|
<el-dialog title="车间节点报工" :visible.sync="setUp.reportFlag" width="460px" :close-on-click-modal="false" v-drag> |
|
|
|
<el-form :model="reportData" label-width="110px" label-position="top"> |
|
|
|
<el-form-item label="任务单号"><el-input v-model="reportData.taskNo" disabled></el-input></el-form-item> |
|
|
|
<el-form-item label="项目号"><el-input v-model="reportData.taskNo" disabled></el-input></el-form-item> |
|
|
|
<el-form-item label="报工节点"> |
|
|
|
<el-select v-model="reportData.nodeCode" placeholder="请选择节点" style="width: 100%"> |
|
|
|
<el-option v-for="item in reportNodeOptions" :key="item.nodeCode" :label="item.nodeName" :value="item.nodeCode"></el-option> |
|
|
|
@ -242,7 +258,7 @@ export default { |
|
|
|
name: 'ProductionPlanCableCopTask', |
|
|
|
data() { |
|
|
|
return { |
|
|
|
searchData: { taskNo: '', taskType: '', sourceProjectNo: '', status: '', planStartDate: '', planEndDate: '', page: 1, limit: 20 }, |
|
|
|
searchData: { projectNo: '', taskType: '', category: '', materialName: '', materialSpec: '', status: '', planStartDate: '', planEndDate: '', page: 1, limit: 20 }, |
|
|
|
saveHeaderData: {}, |
|
|
|
reportData: { orderNo: '', taskNo: '', nodeCode: '', reportQty: 1, remark: '' }, |
|
|
|
reportNodeOptions: [], |
|
|
|
@ -267,10 +283,15 @@ export default { |
|
|
|
methods: { |
|
|
|
searchTable(flag) { |
|
|
|
if (flag === 'Y') this.pageIndex = 1 |
|
|
|
this.searchData.page = this.pageIndex |
|
|
|
this.searchData.limit = this.pageSize |
|
|
|
const queryData = { |
|
|
|
...this.searchData, |
|
|
|
page: this.pageIndex, |
|
|
|
limit: this.pageSize, |
|
|
|
sourceProjectNo: this.searchData.category |
|
|
|
} |
|
|
|
delete queryData.category |
|
|
|
this.dataListLoading = true |
|
|
|
getCableCopTaskList(this.searchData).then(({data}) => { |
|
|
|
getCableCopTaskList(queryData).then(({data}) => { |
|
|
|
this.dataListLoading = false |
|
|
|
if (data && data.code === 0) { |
|
|
|
this.dataList = (data.page.list || []).map(this.normalizeRow) |
|
|
|
@ -287,17 +308,35 @@ 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, nodeReportMode: row.nodeReportMode || 'PARALLEL', nodeList: list, nodeDoneCount: done, nodeTotalCount: list.length, currentNode: row.currentNode || currentNode, reportQty: row.reportQty || 0, assigneeSummary: assigneeSummary || '-' } |
|
|
|
const projectNo = row.projectNo || row.taskNo || '' |
|
|
|
return { |
|
|
|
...row, |
|
|
|
projectNo: projectNo, |
|
|
|
taskNo: row.taskNo || projectNo, |
|
|
|
category: row.category || row.sourceProjectNo || '', |
|
|
|
materialName: row.materialName || '', |
|
|
|
materialSpec: row.materialSpec || '', |
|
|
|
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 = [ |
|
|
|
{ |
|
|
|
orderNo: 'MOCK-CABLE-001', |
|
|
|
taskNo: 'TASK-XL-202604-001', |
|
|
|
projectNo: 'PJT-XL-202604-001', |
|
|
|
taskNo: 'PJT-XL-202604-001', |
|
|
|
taskType: '线缆自制', |
|
|
|
sourceProjectNo: 'LC-202604-001', |
|
|
|
modelNo: 'LC-HOME-820', |
|
|
|
taskQty: 6, |
|
|
|
category: '新梯', |
|
|
|
sourceProjectNo: '新梯', |
|
|
|
materialName: '线缆总成', |
|
|
|
materialSpec: 'XL-6X2.5', |
|
|
|
reportQty: 2, |
|
|
|
autoAssignAllUsers: true, |
|
|
|
nodeReportMode: 'PARALLEL', |
|
|
|
@ -311,11 +350,13 @@ export default { |
|
|
|
}, |
|
|
|
{ |
|
|
|
orderNo: 'MOCK-CABLE-002', |
|
|
|
taskNo: 'TASK-COP-202604-002', |
|
|
|
projectNo: 'PJT-COP-202604-002', |
|
|
|
taskNo: 'PJT-COP-202604-002', |
|
|
|
taskType: 'COP自制', |
|
|
|
sourceProjectNo: 'LC-202604-002', |
|
|
|
modelNo: 'LC-HOME-1050', |
|
|
|
taskQty: 8, |
|
|
|
category: '售后', |
|
|
|
sourceProjectNo: '售后', |
|
|
|
materialName: 'COP面板组件', |
|
|
|
materialSpec: 'COP-MB-02', |
|
|
|
reportQty: 0, |
|
|
|
autoAssignAllUsers: true, |
|
|
|
nodeReportMode: 'PARALLEL', |
|
|
|
@ -372,18 +413,29 @@ export default { |
|
|
|
}) |
|
|
|
}, |
|
|
|
resetQuery() { |
|
|
|
this.searchData = { taskNo: '', taskType: '', sourceProjectNo: '', status: '', planStartDate: '', planEndDate: '', page: 1, limit: 20 } |
|
|
|
this.searchData = { projectNo: '', taskType: '', category: '', materialName: '', materialSpec: '', status: '', planStartDate: '', planEndDate: '', page: 1, limit: 20 } |
|
|
|
this.searchTable('Y') |
|
|
|
}, |
|
|
|
openEditDialog(row) { |
|
|
|
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.saveHeaderData = row |
|
|
|
? { ...row, projectNo: row.projectNo || row.taskNo || '', category: row.category || row.sourceProjectNo || '', autoAssignAllUsers: !!row.autoAssignAllUsers, nodeReportMode: row.nodeReportMode || 'PARALLEL' } |
|
|
|
: { orderNo: '', projectNo: '', taskType: '线缆自制', category: '新梯', materialName: '', materialSpec: '', reportQty: 0, planFinishDate: '', status: '已排产', autoAssignAllUsers: true, nodeReportMode: 'PARALLEL', nodeList: [] } |
|
|
|
this.setUp.reviewFlag = true |
|
|
|
}, |
|
|
|
saveTask() { |
|
|
|
if (!this.saveHeaderData.taskNo || !this.saveHeaderData.taskType) return this.$message.warning('请先填写任务单号和任务类型') |
|
|
|
this.saveHeaderData.projectNo = this.saveHeaderData.taskNo |
|
|
|
if (!this.saveHeaderData.projectNo || !this.saveHeaderData.taskType) return this.$message.warning('请先填写项目号和任务类型') |
|
|
|
if (!this.saveHeaderData.category) return this.$message.warning('请选择类别') |
|
|
|
if (!this.saveHeaderData.materialName) return this.$message.warning('请先填写物料名称') |
|
|
|
if (!this.saveHeaderData.materialSpec) return this.$message.warning('请先填写规格') |
|
|
|
const payload = { |
|
|
|
...this.saveHeaderData, |
|
|
|
taskNo: this.saveHeaderData.projectNo, |
|
|
|
projectNo: this.saveHeaderData.projectNo, |
|
|
|
sourceProjectNo: this.saveHeaderData.category |
|
|
|
} |
|
|
|
delete payload.category |
|
|
|
this.setUp.saveButton = true |
|
|
|
saveCableCopTask(this.saveHeaderData).then(({data}) => { |
|
|
|
saveCableCopTask(payload).then(({data}) => { |
|
|
|
this.setUp.saveButton = false |
|
|
|
if (data && data.code === 0) { |
|
|
|
this.$message.success(data.msg || '保存成功') |
|
|
|
@ -392,12 +444,12 @@ export default { |
|
|
|
} else this.$message.error(data.msg || '保存失败') |
|
|
|
}).catch(() => { |
|
|
|
this.setUp.saveButton = false |
|
|
|
const orderNo = this.saveHeaderData.orderNo || String(Date.now()) |
|
|
|
const orderNo = payload.orderNo || String(Date.now()) |
|
|
|
const index = this.dataList.findIndex(item => item.orderNo === orderNo) |
|
|
|
const saveData = this.normalizeRow({ |
|
|
|
...this.saveHeaderData, |
|
|
|
...payload, |
|
|
|
orderNo: orderNo, |
|
|
|
nodeList: this.saveHeaderData.nodeList && this.saveHeaderData.nodeList.length ? this.saveHeaderData.nodeList : [ |
|
|
|
nodeList: payload.nodeList && payload.nodeList.length ? payload.nodeList : [ |
|
|
|
{ nodeCode: 'lineProduction', nodeName: '线缆生产', status: '未开始' }, |
|
|
|
{ nodeCode: 'copProduction', nodeName: 'COP生产', status: '未开始' } |
|
|
|
] |
|
|
|
@ -411,7 +463,7 @@ export default { |
|
|
|
}, |
|
|
|
openReportDialog(row) { |
|
|
|
this.reportNodeOptions = (row.nodeList || []).filter(item => item.status !== '已完成') |
|
|
|
this.reportData = { orderNo: row.orderNo, taskNo: row.taskNo, nodeCode: '', reportQty: 1, remark: '' } |
|
|
|
this.reportData = { orderNo: row.orderNo, taskNo: row.projectNo || row.taskNo, nodeCode: '', reportQty: 1, remark: '' } |
|
|
|
this.setUp.reportFlag = true |
|
|
|
}, |
|
|
|
openAssignDialog(row) { |
|
|
|
@ -493,7 +545,7 @@ export default { |
|
|
|
}).catch(() => { |
|
|
|
row.status = '已完成' |
|
|
|
row.finishDate = this.dayjs().format('YYYY-MM-DD') |
|
|
|
row.reportQty = row.taskQty |
|
|
|
row.reportQty = row.taskQty == null ? Number(row.reportQty || 0) : row.taskQty |
|
|
|
row.nodeList = row.nodeList.map(item => ({ ...item, status: '已完成' })) |
|
|
|
row.currentNode = '全部完成' |
|
|
|
row.nodeDoneCount = row.nodeTotalCount |
|
|
|
|