Browse Source

规格

master
han\hanst 3 days ago
parent
commit
a6608cde67
  1. 124
      src/views/modules/longtron/production-plan-cable-cop-task.vue
  2. 18
      src/views/modules/longtron/screen-renovation-progress.vue

124
src/views/modules/longtron/production-plan-cable-cop-task.vue

@ -1,8 +1,8 @@
<template> <template>
<div class="mod-config"> <div class="mod-config">
<el-form :inline="true" label-position="top" class="query-form"> <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>
<el-form-item label="任务类型"> <el-form-item label="任务类型">
<el-select v-model="searchData.taskType" clearable placeholder="全部" style="width: 120px"> <el-select v-model="searchData.taskType" clearable placeholder="全部" style="width: 120px">
@ -10,8 +10,17 @@
<el-option label="COP自制" value="COP自制"></el-option> <el-option label="COP自制" value="COP自制"></el-option>
</el-select> </el-select>
</el-form-item> </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>
<el-form-item label="状态"> <el-form-item label="状态">
<el-select v-model="searchData.status" clearable placeholder="全部" style="width: 120px"> <el-select v-model="searchData.status" clearable placeholder="全部" style="width: 120px">
@ -52,15 +61,15 @@
</template> </template>
</el-table-column> </el-table-column>
<el-table-column type="index" label="#" width="50" align="center"></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"> <el-table-column prop="taskType" label="任务类型" width="100" align="center">
<template slot-scope="scope"> <template slot-scope="scope">
<el-tag :type="scope.row.taskType === '线缆自制' ? 'primary' : 'success'" size="small">{{ scope.row.taskType }}</el-tag> <el-tag :type="scope.row.taskType === '线缆自制' ? 'primary' : 'success'" size="small">{{ scope.row.taskType }}</el-tag>
</template> </template>
</el-table-column> </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="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="currentNode" label="当前节点" width="110" align="center"></el-table-column>
<el-table-column prop="assigneeSummary" label="节点负责人" min-width="160" show-overflow-tooltip></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" label-position="top"
class="edit-form"> class="edit-form">
<el-row :gutter="20"> <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-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>
<el-row :gutter="20"> <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>
<el-row :gutter="20"> <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-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>
<!-- <el-row :gutter="20"> <!-- <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-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 :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-form-item label="报工节点">
<el-select v-model="reportData.nodeCode" placeholder="请选择节点" style="width: 100%"> <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> <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', name: 'ProductionPlanCableCopTask',
data() { data() {
return { 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: {}, saveHeaderData: {},
reportData: { orderNo: '', taskNo: '', nodeCode: '', reportQty: 1, remark: '' }, reportData: { orderNo: '', taskNo: '', nodeCode: '', reportQty: 1, remark: '' },
reportNodeOptions: [], reportNodeOptions: [],
@ -267,10 +283,15 @@ export default {
methods: { methods: {
searchTable(flag) { searchTable(flag) {
if (flag === 'Y') this.pageIndex = 1 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 this.dataListLoading = true
getCableCopTaskList(this.searchData).then(({data}) => {
getCableCopTaskList(queryData).then(({data}) => {
this.dataListLoading = false this.dataListLoading = false
if (data && data.code === 0) { if (data && data.code === 0) {
this.dataList = (data.page.list || []).map(this.normalizeRow) this.dataList = (data.page.list || []).map(this.normalizeRow)
@ -287,17 +308,35 @@ export default {
const done = list.filter(item => item.status === '已完成').length const done = list.filter(item => item.status === '已完成').length
const currentNode = (list.find(item => item.status !== '已完成') || {}).nodeName || '全部完成' const currentNode = (list.find(item => item.status !== '已完成') || {}).nodeName || '全部完成'
const assigneeSummary = list.filter(item => item.assigneeUserName).map(item => `${item.nodeName}:${item.assigneeUserName}`).join(';') 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() { loadMockData() {
this.dataList = [ this.dataList = [
{ {
orderNo: 'MOCK-CABLE-001', orderNo: 'MOCK-CABLE-001',
taskNo: 'TASK-XL-202604-001',
projectNo: 'PJT-XL-202604-001',
taskNo: 'PJT-XL-202604-001',
taskType: '线缆自制', taskType: '线缆自制',
sourceProjectNo: 'LC-202604-001',
modelNo: 'LC-HOME-820',
taskQty: 6,
category: '新梯',
sourceProjectNo: '新梯',
materialName: '线缆总成',
materialSpec: 'XL-6X2.5',
reportQty: 2, reportQty: 2,
autoAssignAllUsers: true, autoAssignAllUsers: true,
nodeReportMode: 'PARALLEL', nodeReportMode: 'PARALLEL',
@ -311,11 +350,13 @@ export default {
}, },
{ {
orderNo: 'MOCK-CABLE-002', orderNo: 'MOCK-CABLE-002',
taskNo: 'TASK-COP-202604-002',
projectNo: 'PJT-COP-202604-002',
taskNo: 'PJT-COP-202604-002',
taskType: 'COP自制', taskType: 'COP自制',
sourceProjectNo: 'LC-202604-002',
modelNo: 'LC-HOME-1050',
taskQty: 8,
category: '售后',
sourceProjectNo: '售后',
materialName: 'COP面板组件',
materialSpec: 'COP-MB-02',
reportQty: 0, reportQty: 0,
autoAssignAllUsers: true, autoAssignAllUsers: true,
nodeReportMode: 'PARALLEL', nodeReportMode: 'PARALLEL',
@ -372,18 +413,29 @@ export default {
}) })
}, },
resetQuery() { 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') this.searchTable('Y')
}, },
openEditDialog(row) { 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 this.setUp.reviewFlag = true
}, },
saveTask() { 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 this.setUp.saveButton = true
saveCableCopTask(this.saveHeaderData).then(({data}) => {
saveCableCopTask(payload).then(({data}) => {
this.setUp.saveButton = false this.setUp.saveButton = false
if (data && data.code === 0) { if (data && data.code === 0) {
this.$message.success(data.msg || '保存成功') this.$message.success(data.msg || '保存成功')
@ -392,12 +444,12 @@ export default {
} else this.$message.error(data.msg || '保存失败') } else this.$message.error(data.msg || '保存失败')
}).catch(() => { }).catch(() => {
this.setUp.saveButton = false 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 index = this.dataList.findIndex(item => item.orderNo === orderNo)
const saveData = this.normalizeRow({ const saveData = this.normalizeRow({
...this.saveHeaderData,
...payload,
orderNo: orderNo, 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: 'lineProduction', nodeName: '线缆生产', status: '未开始' },
{ nodeCode: 'copProduction', nodeName: 'COP生产', status: '未开始' } { nodeCode: 'copProduction', nodeName: 'COP生产', status: '未开始' }
] ]
@ -411,7 +463,7 @@ export default {
}, },
openReportDialog(row) { openReportDialog(row) {
this.reportNodeOptions = (row.nodeList || []).filter(item => item.status !== '已完成') 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 this.setUp.reportFlag = true
}, },
openAssignDialog(row) { openAssignDialog(row) {
@ -493,7 +545,7 @@ export default {
}).catch(() => { }).catch(() => {
row.status = '已完成' row.status = '已完成'
row.finishDate = this.dayjs().format('YYYY-MM-DD') 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.nodeList = row.nodeList.map(item => ({ ...item, status: '已完成' }))
row.currentNode = '全部完成' row.currentNode = '全部完成'
row.nodeDoneCount = row.nodeTotalCount row.nodeDoneCount = row.nodeTotalCount

18
src/views/modules/longtron/screen-renovation-progress.vue

@ -69,17 +69,16 @@
</div> </div>
<el-table class="board-table" :data="displayCableCopList" :height="tableHeightBottom" border stripe> <el-table class="board-table" :data="displayCableCopList" :height="tableHeightBottom" border stripe>
<el-table-column type="index" label="序号" width="54" align="center"></el-table-column> <el-table-column type="index" label="序号" width="54" align="center"></el-table-column>
<el-table-column prop="taskNo" label="任务单号" min-width="126" align="center"></el-table-column>
<el-table-column prop="taskType" label="类别" min-width="96" align="center">
<el-table-column prop="projectNo" label="项目号" min-width="126" align="center"></el-table-column>
<el-table-column prop="taskType" label="任务类型" min-width="96" align="center">
<template slot-scope="scope"> <template slot-scope="scope">
<el-tag class="board-tag" :class="getTaskTypeClass(scope.row.taskType)" size="small">{{ scope.row.taskType || '-' }}</el-tag> <el-tag class="board-tag" :class="getTaskTypeClass(scope.row.taskType)" size="small">{{ scope.row.taskType || '-' }}</el-tag>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="category" label="类别" min-width="84" align="center"></el-table-column>
<el-table-column prop="materialName" label="物料名称" min-width="126" align="center" show-overflow-tooltip></el-table-column>
<el-table-column prop="materialSpec" label="规格" min-width="110" align="center" show-overflow-tooltip></el-table-column>
<el-table-column prop="planFinishDate" label="计划完工日期" min-width="120" align="center"></el-table-column> <el-table-column prop="planFinishDate" label="计划完工日期" min-width="120" align="center"></el-table-column>
<el-table-column prop="taskQty" label="任务数量" min-width="84" align="center"></el-table-column>
<el-table-column prop="reportQty" label="已报工数量" min-width="84" align="center"></el-table-column>
<el-table-column label="线缆生产" width="86" align="center"><template slot-scope="scope"><span :class="getNodeCellClass(scope.row, 'lineProduction')"></span></template></el-table-column>
<el-table-column label="COP生产" width="86" align="center"><template slot-scope="scope"><span :class="getNodeCellClass(scope.row, 'copProduction')"></span></template></el-table-column>
<el-table-column prop="status" label="任务状态" width="96" align="center"> <el-table-column prop="status" label="任务状态" width="96" align="center">
<template slot-scope="scope"> <template slot-scope="scope">
<el-tag class="board-tag" :class="getStatusTagClass(scope.row.status)" size="small">{{ scope.row.status }}</el-tag> <el-tag class="board-tag" :class="getStatusTagClass(scope.row.status)" size="small">{{ scope.row.status }}</el-tag>
@ -279,13 +278,14 @@ export default {
return (sourceList || []) return (sourceList || [])
.filter(item => STATUS_ALLOW_LIST.includes(item.status)) .filter(item => STATUS_ALLOW_LIST.includes(item.status))
.map(item => ({ .map(item => ({
taskNo: item.taskNo || '',
sourceProjectNo: item.sourceProjectNo || '',
projectNo: item.projectNo || item.taskNo || '',
taskType: item.taskType || '', taskType: item.taskType || '',
category: item.sourceProjectNo || '',
materialName: item.materialName || '',
materialSpec: item.materialSpec || '',
planFinishDate: item.planFinishDate || '', planFinishDate: item.planFinishDate || '',
status: item.status || '', status: item.status || '',
finishDate: item.finishDate || '', finishDate: item.finishDate || '',
taskQty: item.taskQty == null ? 0 : item.taskQty,
reportQty: item.reportQty == null ? 0 : item.reportQty, reportQty: item.reportQty == null ? 0 : item.reportQty,
nodeStatusMap: this.toNodeStatusMap(item.nodeList, CABLE_COP_NODE_TEMPLATE) nodeStatusMap: this.toNodeStatusMap(item.nodeList, CABLE_COP_NODE_TEMPLATE)
})) }))

Loading…
Cancel
Save