Browse Source

计划日期”改成不受状态限制,始终可修改

master
han\hanst 3 weeks ago
parent
commit
a7cd3163cc
  1. 16
      src/views/modules/longtron/production-plan-cable-cop-task.vue
  2. 16
      src/views/modules/longtron/production-plan-home-order.vue
  3. 14
      src/views/modules/longtron/production-plan-machining-task.vue
  4. 16
      src/views/modules/longtron/production-plan-renovation-order.vue
  5. 12
      src/views/modules/longtron/production-work-report.vue
  6. 11
      src/views/modules/longtron/screen-factory-overview.vue

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

@ -63,7 +63,7 @@
@current-change="onCurrentRowChange"> @current-change="onCurrentRowChange">
<el-table-column label="操作" width="200" align="center"> <el-table-column label="操作" width="200" align="center">
<template slot-scope="scope"> <template slot-scope="scope">
<a type="text" @click="openEditDialog(scope.row)" v-if="scope.row.status === '已排产'">修改</a>
<a type="text" @click="openEditDialog(scope.row)">修改</a>
<a type="text" @click="openAssignDialog(scope.row)" v-if="scope.row.status !== '已完成' && scope.row.currentNode!=='全部完成'">分配人员</a> <a type="text" @click="openAssignDialog(scope.row)" v-if="scope.row.status !== '已完成' && scope.row.currentNode!=='全部完成'">分配人员</a>
<a type="text" style="color:#F56C6C" @click="deleteTask(scope.row)" v-if="scope.row.status !== '已完成'">删除</a> <a type="text" style="color:#F56C6C" @click="deleteTask(scope.row)" v-if="scope.row.status !== '已完成'">删除</a>
</template> </template>
@ -183,22 +183,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.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-input v-model="saveHeaderData.projectNo" :disabled="isDateOnlyEditMode()"></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%" :disabled="isDateOnlyEditMode()"><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-col :span="12">
<el-form-item label="类别" required> <el-form-item label="类别" required>
<el-select v-model="saveHeaderData.category" style="width: 100%">
<el-select v-model="saveHeaderData.category" style="width: 100%" :disabled="isDateOnlyEditMode()">
<el-option label="新梯" value="新梯"></el-option> <el-option label="新梯" value="新梯"></el-option>
<el-option label="售后" value="售后"></el-option> <el-option label="售后" value="售后"></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </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-col :span="12"><el-form-item label="物料名称" required><el-input v-model="saveHeaderData.materialName" :disabled="isDateOnlyEditMode()"></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="规格" required><el-input v-model="saveHeaderData.materialSpec"></el-input></el-form-item></el-col>
<el-col :span="12"><el-form-item label="规格" required><el-input v-model="saveHeaderData.materialSpec" :disabled="isDateOnlyEditMode()"></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">
@ -406,6 +406,10 @@ export default {
this.releaseMediaFileUrls() this.releaseMediaFileUrls()
}, },
methods: { methods: {
isDateOnlyEditMode() {
const status = String(this.saveHeaderData.status || '').trim()
return !!this.saveHeaderData.orderNo && !!status && status !== '已排产'
},
getExpectedNodeCodeByTaskType(taskType) { getExpectedNodeCodeByTaskType(taskType) {
const text = (taskType || '').trim() const text = (taskType || '').trim()
if (text.includes('线缆')) return 'lineProduction' if (text.includes('线缆')) return 'lineProduction'

16
src/views/modules/longtron/production-plan-home-order.vue

@ -54,7 +54,7 @@
@current-change="onCurrentRowChange"> @current-change="onCurrentRowChange">
<el-table-column label="操作" width="180" align="center" > <el-table-column label="操作" width="180" align="center" >
<template slot-scope="scope"> <template slot-scope="scope">
<a type="text" @click="openEditDialog(scope.row)" v-if="scope.row.status === '已排产'">修改</a>
<a type="text" @click="openEditDialog(scope.row)">修改</a>
<a type="text" @click="openAssignDialog(scope.row)" v-if="scope.row.status !== '已完成' && scope.row.currentNode!=='全部完成'">分配人员</a> <a type="text" @click="openAssignDialog(scope.row)" v-if="scope.row.status !== '已完成' && scope.row.currentNode!=='全部完成'">分配人员</a>
<a type="text" style="color:#F56C6C" @click="deleteOrder(scope.row)" v-if="scope.row.status !== '已完成'">删除</a> <a type="text" style="color:#F56C6C" @click="deleteOrder(scope.row)" v-if="scope.row.status !== '已完成'">删除</a>
</template> </template>
@ -168,12 +168,12 @@
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.projectNo"></el-input></el-form-item></el-col>
<el-col :span="12"><el-form-item label="型号" required><el-input v-model="saveHeaderData.modelNo"></el-input></el-form-item></el-col>
<el-col :span="12"><el-form-item label="项目号" required><el-input v-model="saveHeaderData.projectNo" :disabled="isDateOnlyEditMode()"></el-input></el-form-item></el-col>
<el-col :span="12"><el-form-item label="型号" required><el-input v-model="saveHeaderData.modelNo" :disabled="isDateOnlyEditMode()"></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.color"></el-input></el-form-item></el-col>
<el-col :span="12"><el-form-item label="层数"><el-input v-model="saveHeaderData.floorCount" :min="1" :max="99" style="width: 100%"></el-input></el-form-item></el-col>
<el-col :span="12"><el-form-item label="颜色"><el-input v-model="saveHeaderData.color" :disabled="isDateOnlyEditMode()"></el-input></el-form-item></el-col>
<el-col :span="12"><el-form-item label="层数"><el-input v-model="saveHeaderData.floorCount" :min="1" :max="99" style="width: 100%" :disabled="isDateOnlyEditMode()"></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-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-date-picker v-model="saveHeaderData.planDeliveryDate" type="date" value-format="yyyy-MM-dd" style="width: 100%"></el-date-picker></el-form-item></el-col>
@ -207,7 +207,7 @@
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row>--> </el-row>-->
<el-form-item label="特殊要求"><el-input v-model="saveHeaderData.specialRequirement" type="textarea" :rows="3"></el-input></el-form-item>
<el-form-item label="特殊要求"><el-input v-model="saveHeaderData.specialRequirement" type="textarea" :rows="3" :disabled="isDateOnlyEditMode()"></el-input></el-form-item>
</el-form> </el-form>
<el-footer style="height: 40px; margin-top: 50px; text-align: center"> <el-footer style="height: 40px; margin-top: 50px; text-align: center">
<el-button plain class="reset-btn" @click="setUp.reviewFlag = false">取消</el-button> <el-button plain class="reset-btn" @click="setUp.reviewFlag = false">取消</el-button>
@ -385,6 +385,10 @@ export default {
this.releaseMediaFileUrls() this.releaseMediaFileUrls()
}, },
methods: { methods: {
isDateOnlyEditMode() {
const status = String(this.saveHeaderData.status || '').trim()
return !!this.saveHeaderData.orderNo && !!status && status !== '已排产'
},
getDataList(flag) { getDataList(flag) {
if (flag === 'Y') this.pageIndex = 1 if (flag === 'Y') this.pageIndex = 1
this.searchData.page = this.pageIndex this.searchData.page = this.pageIndex

14
src/views/modules/longtron/production-plan-machining-task.vue

@ -51,7 +51,7 @@
@current-change="onCurrentRowChange"> @current-change="onCurrentRowChange">
<el-table-column label="操作" width="200" align="center"> <el-table-column label="操作" width="200" align="center">
<template slot-scope="scope"> <template slot-scope="scope">
<a type="text" @click="openEditDialog(scope.row)" v-if="scope.row.status === '已排产'">修改</a>
<a type="text" @click="openEditDialog(scope.row)">修改</a>
<a type="text" @click="openAssignDialog(scope.row)" v-if="scope.row.status !== '已完成' && scope.row.currentNode!=='全部完成'">分配人员</a> <a type="text" @click="openAssignDialog(scope.row)" v-if="scope.row.status !== '已完成' && scope.row.currentNode!=='全部完成'">分配人员</a>
<a type="text" style="color:#F56C6C" @click="deleteTask(scope.row)" v-if="scope.row.status !== '已完成'">删除</a> <a type="text" style="color:#F56C6C" @click="deleteTask(scope.row)" v-if="scope.row.status !== '已完成'">删除</a>
</template> </template>
@ -167,12 +167,12 @@
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.modelNo"></el-input></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-col :span="12"><el-form-item label="物料号" required><el-input v-model="saveHeaderData.modelNo" :disabled="isDateOnlyEditMode()"></el-input></el-form-item></el-col>
<el-col :span="12"><el-form-item label="物料名称" required><el-input v-model="saveHeaderData.materialName" :disabled="isDateOnlyEditMode()"></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="规格" required><el-input v-model="saveHeaderData.materialSpec"></el-input></el-form-item></el-col>
<el-col :span="12"><el-form-item label="计划数量" required><el-input v-model="saveHeaderData.taskQty" :min="1" :max="999999" 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" :disabled="isDateOnlyEditMode()"></el-input></el-form-item></el-col>
<el-col :span="12"><el-form-item label="计划数量" required><el-input v-model="saveHeaderData.taskQty" :min="1" :max="999999" style="width: 100%" :disabled="isDateOnlyEditMode()"></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="计划完工日期" required><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="计划完工日期" required><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>
@ -407,6 +407,10 @@ export default {
this.releaseMediaFileUrls() this.releaseMediaFileUrls()
}, },
methods: { methods: {
isDateOnlyEditMode() {
const status = String(this.saveHeaderData.status || '').trim()
return !!this.saveHeaderData.orderNo && !!status && status !== '已排产'
},
searchTable(flag) { searchTable(flag) {
if (flag === 'Y') this.pageIndex = 1 if (flag === 'Y') this.pageIndex = 1
this.searchData.page = this.pageIndex this.searchData.page = this.pageIndex

16
src/views/modules/longtron/production-plan-renovation-order.vue

@ -51,7 +51,7 @@
@current-change="onCurrentRowChange"> @current-change="onCurrentRowChange">
<el-table-column label="操作" width="200" align="center" > <el-table-column label="操作" width="200" align="center" >
<template slot-scope="scope"> <template slot-scope="scope">
<a type="text" @click="openEditDialog(scope.row)" v-if="scope.row.status === '已排产'">修改</a>
<a type="text" @click="openEditDialog(scope.row)">修改</a>
<a type="text" @click="openAssignDialog(scope.row)" v-if="scope.row.status !== '已完成' && scope.row.currentNode!=='全部完成'">分配人员</a> <a type="text" @click="openAssignDialog(scope.row)" v-if="scope.row.status !== '已完成' && scope.row.currentNode!=='全部完成'">分配人员</a>
<a type="text" style="color:#F56C6C" @click="deleteOrder(scope.row)" v-if="scope.row.status !== '已完成'">删除</a> <a type="text" style="color:#F56C6C" @click="deleteOrder(scope.row)" v-if="scope.row.status !== '已完成'">删除</a>
</template> </template>
@ -166,12 +166,12 @@
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.projectNo"></el-input></el-form-item></el-col>
<el-col :span="12"><el-form-item label="型号" required><el-input v-model="saveHeaderData.modelNo"></el-input></el-form-item></el-col>
<el-col :span="12"><el-form-item label="项目号" required><el-input v-model="saveHeaderData.projectNo" :disabled="isDateOnlyEditMode()"></el-input></el-form-item></el-col>
<el-col :span="12"><el-form-item label="型号" required><el-input v-model="saveHeaderData.modelNo" :disabled="isDateOnlyEditMode()"></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.color"></el-input></el-form-item></el-col>
<el-col :span="12"><el-form-item label="层数"><el-input v-model="saveHeaderData.floorCount" :min="1" :max="99" style="width: 100%"></el-input></el-form-item></el-col>
<el-col :span="12"><el-form-item label="颜色"><el-input v-model="saveHeaderData.color" :disabled="isDateOnlyEditMode()"></el-input></el-form-item></el-col>
<el-col :span="12"><el-form-item label="层数"><el-input v-model="saveHeaderData.floorCount" :min="1" :max="99" style="width: 100%" :disabled="isDateOnlyEditMode()"></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-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-date-picker v-model="saveHeaderData.planDeliveryDate" type="date" value-format="yyyy-MM-dd" style="width: 100%"></el-date-picker></el-form-item></el-col>
@ -205,7 +205,7 @@
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row>--> </el-row>-->
<el-form-item label="特殊要求"><el-input v-model="saveHeaderData.specialRequirement" type="textarea" :rows="3"></el-input></el-form-item>
<el-form-item label="特殊要求"><el-input v-model="saveHeaderData.specialRequirement" type="textarea" :rows="3" :disabled="isDateOnlyEditMode()"></el-input></el-form-item>
</el-form> </el-form>
<el-footer style="height: 40px; margin-top: 50px; text-align: center"> <el-footer style="height: 40px; margin-top: 50px; text-align: center">
<el-button plain class="reset-btn" @click="setUp.reviewFlag = false">取消</el-button> <el-button plain class="reset-btn" @click="setUp.reviewFlag = false">取消</el-button>
@ -382,6 +382,10 @@ export default {
this.releaseMediaFileUrls() this.releaseMediaFileUrls()
}, },
methods: { methods: {
isDateOnlyEditMode() {
const status = String(this.saveHeaderData.status || '').trim()
return !!this.saveHeaderData.orderNo && !!status && status !== '已排产'
},
getDataList(flag) { getDataList(flag) {
if (flag === 'Y') this.pageIndex = 1 if (flag === 'Y') this.pageIndex = 1
this.searchData.page = this.pageIndex this.searchData.page = this.pageIndex

12
src/views/modules/longtron/production-work-report.vue

@ -428,7 +428,7 @@ export default {
return this.totalPage || 0 return this.totalPage || 0
}, },
pendingNodeCount () { pendingNodeCount () {
return this.dataList.reduce((sum, item) => sum + (item.visibleNodeList || []).filter(node => node.status !== '已完成').length, 0)
return this.dataList.reduce((sum, item) => sum + (item.visiblePendingNodeList || []).length, 0)
}, },
reportDialogTitle () { reportDialogTitle () {
return this.requiresMediaUpload(this.reportData.orderType, this.reportData.nodeCode, this.reportData.nodeName) ? '节点报工与影像上传' : '节点报工' return this.requiresMediaUpload(this.reportData.orderType, this.reportData.nodeCode, this.reportData.nodeName) ? '节点报工与影像上传' : '节点报工'
@ -481,7 +481,7 @@ export default {
const nodeDoneCount = typeof row.nodeDoneCount === 'number' ? row.nodeDoneCount : fallbackNodeDoneCount const nodeDoneCount = typeof row.nodeDoneCount === 'number' ? row.nodeDoneCount : fallbackNodeDoneCount
const nodeTotalCount = typeof row.nodeTotalCount === 'number' ? row.nodeTotalCount : nodeList.length const nodeTotalCount = typeof row.nodeTotalCount === 'number' ? row.nodeTotalCount : nodeList.length
const currentNode = row.currentNode || fallbackCurrentNodeObj.nodeName || '全部完成' const currentNode = row.currentNode || fallbackCurrentNodeObj.nodeName || '全部完成'
return {
const normalizedRow = {
...row, ...row,
nodeReportMode: this.resolveNodeReportMode(row.orderType, row.nodeReportMode), nodeReportMode: this.resolveNodeReportMode(row.orderType, row.nodeReportMode),
currentNodeCode: row.currentNodeCode || fallbackCurrentNodeObj.nodeCode || '', currentNodeCode: row.currentNodeCode || fallbackCurrentNodeObj.nodeCode || '',
@ -492,8 +492,12 @@ export default {
nodeDoneCount: nodeDoneCount, nodeDoneCount: nodeDoneCount,
nodeTotalCount: nodeTotalCount, nodeTotalCount: nodeTotalCount,
currentNode: currentNode, currentNode: currentNode,
visibleNodeList: nodeList,
visiblePendingNodeList: nodeList.filter(item => item.status !== '已完成')
visibleNodeList: nodeList
}
const visiblePendingNodeList = nodeList.filter(item => item.status !== '已完成' && this.canReportNode(normalizedRow, item))
return {
...normalizedRow,
visiblePendingNodeList: visiblePendingNodeList
} }
}, },
getOrderTypeName (orderType) { getOrderTypeName (orderType) {

11
src/views/modules/longtron/screen-factory-overview.vue

@ -31,10 +31,6 @@
<div class="kpi-label">近一月完工达成率</div> <div class="kpi-label">近一月完工达成率</div>
<div class="kpi-value highlight">{{ kpi.finishRate }}%</div> <div class="kpi-value highlight">{{ kpi.finishRate }}%</div>
</div> </div>
<div class="kpi-card">
<div class="kpi-label">当前在制总量</div>
<div class="kpi-value warning">{{ kpi.wipTotal }}</div>
</div>
<div class="kpi-card"> <div class="kpi-card">
<div class="kpi-label">订单准交率</div> <div class="kpi-label">订单准交率</div>
<div class="kpi-value success">{{ kpi.onTimeRate }}%</div> <div class="kpi-value success">{{ kpi.onTimeRate }}%</div>
@ -75,11 +71,11 @@ import echarts from 'echarts'
import { getFactoryOverviewBoardData } from '@/api/longchuang/productionPlan' import { getFactoryOverviewBoardData } from '@/api/longchuang/productionPlan'
const STATUS_ALLOW_LIST = ['已排产', '进行中', '已完成'] const STATUS_ALLOW_LIST = ['已排产', '进行中', '已完成']
const KEY_NODE_NAME_ORDER = ['仓库配料', 'VL2.5组装', '验', '打包', '线缆/COP', '机加工生产', '机加工检验']
const KEY_NODE_NAME_ORDER = ['仓库配料', 'VL2.5组装', 'VL2.5校验', '打包', '线缆/COP', '机加工生产', '机加工检验']
const NODE_NAME_BY_CODE = { const NODE_NAME_BY_CODE = {
stocking: '仓库配料', stocking: '仓库配料',
assy: 'VL2.5组装', assy: 'VL2.5组装',
inspect: '验',
inspect: 'VL2.5校验',
pack: '打包', pack: '打包',
lineProduction: '线缆/COP', lineProduction: '线缆/COP',
copProduction: '线缆/COP', copProduction: '线缆/COP',
@ -91,6 +87,7 @@ const NODE_NAME_BY_CODE = {
} }
const NODE_DISPLAY_NAME_ALIAS = { const NODE_DISPLAY_NAME_ALIAS = {
组装: 'VL2.5组装', 组装: 'VL2.5组装',
检验: 'VL2.5校验',
线缆生产: '线缆/COP', 线缆生产: '线缆/COP',
COP生产: '线缆/COP' COP生产: '线缆/COP'
} }
@ -593,7 +590,7 @@ export default {
.kpi-grid { .kpi-grid {
display: grid; display: grid;
grid-template-columns: repeat(7, minmax(0, 1fr));
grid-template-columns: repeat(6, minmax(0, 1fr));
gap: 14px; gap: 14px;
padding: 0 4px; padding: 0 4px;
margin-bottom: 14px; margin-bottom: 14px;

Loading…
Cancel
Save