Files
shgx_tz_vue-sync/src/views/productManagement/workplan.vue
2023-12-12 22:34:16 +08:00

666 lines
28 KiB
Vue

<template>
<div class="app-container">
<div class="workplantable">
<div>
<el-form :model="search" inline>
<el-form-item label="年">
<el-input v-model="search.year" placeholder="输入年份"></el-input>
</el-form-item>
<el-form-item label="周">
<el-input v-model="search.week" placeholder="输入周"></el-input>
</el-form-item>
<el-form-item label="零件号">
<el-input v-model="search.partNumber" placeholder="输入零件号"></el-input>
</el-form-item>
<el-form-item label="颜色">
<el-input v-model="search.color" placeholder="输入颜色名称"></el-input>
</el-form-item>
<el-button type="primary" icon="el-icon-search" @click="getList">搜索</el-button>
</el-form>
</div>
<div>
<el-row :gutter="20">
<el-col :span="16"> <el-button type="primary" @click="newplan">新建生产计划</el-button> </el-col>
</el-row>
<el-table
border
stripe
:data="workplanList"
v-loading="loading_1"
style="width: 100%"
height="500"
highlight-current-row
:header-cell-style="{ 'text-align': 'center' }"
>
<el-table-column prop="id" label="流水号" sortable></el-table-column>
<el-table-column prop="year" label="年"> </el-table-column>
<el-table-column prop="week" label="周"> </el-table-column>
<el-table-column prop="source" label="来源"> </el-table-column>
<af-table-column prop="partnumber" label="零件号">
<template slot-scope="scope">
<div class="workplan_scope">{{ scope.row.partnumber }}</div>
</template>
</af-table-column>
<el-table-column prop="version" label="版本"> </el-table-column>
<af-table-column prop="color" label="颜色">
<template slot-scope="scope">
<div class="workplan_scope">{{ scope.row.color }}</div>
</template>
</af-table-column>
<el-table-column prop="colorcode" label="颜色代码"> </el-table-column>
<el-table-column prop="neednumber" label="本周要货数量"> </el-table-column>
<el-table-column prop="passpercent" label="产品合格率"> </el-table-column>
<el-table-column prop="batchNumber" label="每挂数量"> </el-table-column>
<el-table-column prop="productionRhythm" label="生产节拍"> </el-table-column>
<el-table-column prop="hangerNumber" label="总挂具数"> </el-table-column>
<el-table-column prop="needhangerNumber" label="订单需生产挂具数量"> </el-table-column>
<el-table-column prop="actualplanNumber" label="实际计划数量" fixed="right"> </el-table-column>
<el-table-column prop="carNumber" label="车数"> </el-table-column>
<el-table-column prop="circleNumber" label="圈数"> </el-table-column>
<el-table-column prop="producttime" label="订单生产时间(分钟)"> </el-table-column>
<el-table-column prop="needcertainty" label="计划需求定性"> </el-table-column>
<el-table-column prop="remark" label="备注"> </el-table-column>
<el-table-column fixed="right" label="操作" width="280">
<template slot-scope="scope">
<el-button size="mini" @click="workplan_handleUpdate(scope.$index, scope.row)">修改</el-button>
<el-button size="mini" type="danger" @click="workplan_handleDelete(scope.$index, scope.row)">删除</el-button>
<el-button size="mini" type="success" @click="workplan_select(scope.$index, scope.row)">查看工单</el-button>
</template>
</el-table-column>
</el-table>
<pagination
v-show="pagination.total > 0"
:total="pagination.total"
:page.sync="pagination.pageNum"
:limit.sync="pagination.pageSize"
@pagination="getList"
/>
</div>
</div>
<!-- 添加或修改生产计划对话框 -->
<el-dialog :title="dialog_1.title" :visible.sync="dialog_1.open" width="98%">
<el-form ref="dialog_1form" :model="dialog_1.form" :rules="dialog_1.rules" label-width="150px">
<el-row>
<el-col :span="6">
<el-form-item label="年份" prop="year"> <el-input v-model="dialog_1.form.year"></el-input> </el-form-item
></el-col>
<el-col :span="6">
<el-form-item label="周" prop="week"> <el-input v-model="dialog_1.form.week"></el-input> </el-form-item
></el-col>
<el-col :span="6">
<el-form-item label="来源" prop="source">
<el-select v-model="dialog_1.form.source" placeholder="请选择来源">
<el-option label="订单" value="订单"></el-option>
<el-option label="紧急插单" value="紧急插单"></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="零件号" prop="partnumber"> <el-input v-model="dialog_1.form.partnumber"></el-input> </el-form-item
></el-col>
</el-row>
<el-row>
<el-col :span="6">
<el-form-item label="版本" prop="version"> <el-input v-model="dialog_1.form.version"></el-input> </el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="颜色" prop="color"> <el-input v-model="dialog_1.form.color"></el-input> </el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="颜色代码"> <el-input v-model="dialog_1.form.colorcode"></el-input> </el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="要货数量"> <el-input v-model="dialog_1.form.neednumber"></el-input> </el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="6">
<el-form-item label="产品合格率"> <el-input v-model="dialog_1.form.passpercent"></el-input> </el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="每挂数量"> <el-input v-model="dialog_1.form.batchNumber"></el-input> </el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="生产节拍"> <el-input v-model="dialog_1.form.productionRhythm"></el-input> </el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="总挂具数"> <el-input v-model="dialog_1.form.hangerNumber"></el-input> </el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="6">
<el-form-item label="订单需生产挂具数量"> <el-input v-model="dialog_1.form.needhangerNumber"></el-input> </el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="实际计划数量"><el-input v-model="dialog_1.form.actualplanNumber"></el-input> </el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="车数"> <el-input v-model="dialog_1.form.carNumber"></el-input> </el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="订单生产时间(分钟)"> <el-input v-model="dialog_1.form.producttime"></el-input> </el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="6"
><el-form-item label="计划需求定性"> <el-input v-model="dialog_1.form.needcertainty"></el-input> </el-form-item
></el-col>
<el-col :span="6"
><el-form-item label="备注"> <el-input v-model="dialog_1.form.remark"></el-input> </el-form-item
></el-col>
</el-row>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm_1"> </el-button>
<el-button @click="cancel_1"> </el-button>
</div>
</el-dialog>
<div class="workordertable">
<el-row :gutter="20">
<el-col :span="16"> <el-button type="primary" @click="addNewworkorder">新建生产工单</el-button> </el-col>
<el-col :span="8"> 选中计划: {{ this.selectPlan.id }}</el-col>
</el-row>
<el-table border stripe :data="workOrderList" style="width: 100%" height="300">
<el-table-column prop="id" label="流水号"> </el-table-column>
<el-table-column prop="fkProPlanId" label="生产计划id"> </el-table-column>
<el-table-column prop="year" label="年份"> </el-table-column>
<el-table-column prop="week" label="周"> </el-table-column>
<el-table-column prop="date" label="周几">
<template slot-scope="scope">
<div class="workorder_scope">{{ scope.row.date }}</div>
</template>
</el-table-column>
<el-table-column prop="wrokerorder_status" label="工单状态">
<template slot-scope="scope">
<el-button v-if="scope.row.wrokerorder_status == 0" size="mini" type="success" round>未排程</el-button>
<el-button v-else-if="scope.row.wrokerorder_status == 1" size="mini" type="info" round>已排程</el-button>
<el-button v-else-if="scope.row.wrokerorder_status == 2" size="mini" type="info" round>领料中</el-button>
<el-button v-else-if="scope.row.wrokerorder_status == 3" size="mini" type="info" round>领料结束</el-button>
<el-button v-else-if="scope.row.wrokerorder_status == 4" size="mini" type="info" round>生产中</el-button>
<el-button v-else-if="scope.row.wrokerorder_status == 5" size="mini" type="info" round>生产完成</el-button>
</template>
</el-table-column>
<el-table-column prop="priority" label="优先级">
<template slot-scope="scope">
<div v-if="scope.row.priority == 100" style="color: red"></div>
<div v-else></div>
</template>
</el-table-column>
<!-- <el-table-column prop="arrange_starttime" label="排产开始时间"> <i class="el-icon-time"></i> </el-table-column>
<el-table-column prop="arrange_endtime" label="排产结束时间"> <i class="el-icon-time"></i></el-table-column> -->
<el-table-column prop="productionTime" label="预计工时"> </el-table-column>
<el-table-column prop="productionName" label="产品名称"> </el-table-column>
<el-table-column prop="color" label="颜色"> </el-table-column>
<el-table-column prop="paintCylinderNumber" label="油漆缸号"> </el-table-column>
<el-table-column prop="specification" label="规格"> </el-table-column>
<el-table-column prop="carnum" label="车数"> </el-table-column>
<el-table-column prop="rack" label="挂具摆放"> </el-table-column>
<el-table-column prop="requireNum" label="上件数"> </el-table-column>
<el-table-column prop="workblankpartnumber" label="毛坯零件号"> </el-table-column>
<el-table-column prop="finishedpartnumber" label="成品零件号"> </el-table-column>
<el-table-column prop="actualnumber" label="实际上件数" fixed="right"> </el-table-column>
<el-table-column fixed="right" label="操作" width="150">
<template slot-scope="scope">
<el-button size="mini" @click="workorder_updateEdit(scope.$index, scope.row)">修改</el-button>
<el-button size="mini" type="danger" @click="workorder_delete(scope.$index, scope.row)">删除</el-button>
</template>
</el-table-column>
</el-table>
</div>
<!-- 添加或者修改生产工单对话框 -->
<el-dialog :title="dialog_2.title" :visible.sync="dialog_2.open" width="98%">
<div class="planbak">
<div class="text-success">当前计划</div>
<el-form :model="this.selectPlan" label-width="150px">
<el-row>
<el-col :span="12">
<el-form-item label="零件号"> <el-input v-model="this.selectPlan.partnumber" disabled></el-input> </el-form-item
></el-col>
<el-col :span="12">
<el-form-item label="实际计划数量"> <el-input v-model="this.selectPlan.actualplanNumber" disabled></el-input> </el-form-item
></el-col>
</el-row>
</el-form>
</div>
<div class="planbak" style="margin-top: 20px">
<div class="text-success">{{ dialog_2.title }}</div>
<el-form ref="dialog_2form" :model="dialog_2.form" :rules="dialog_2.rules" label-width="150px">
<el-row>
<el-col :span="6">
<el-form-item label="周几" prop="date"> <el-input v-model="dialog_2.form.date"></el-input> </el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="预计工时" prop="productionTime"> <el-input v-model="dialog_2.form.productionTime"></el-input> </el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="产品名称" prop="productionName"> <el-input v-model="dialog_2.form.productionName"></el-input> </el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="颜色" prop="color"> <el-input v-model="dialog_2.form.color"></el-input> </el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="6">
<el-form-item label="油漆缸号" prop="paintCylinderNumber">
<el-input v-model="dialog_2.form.paintCylinderNumber"></el-input>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="规格" prop="specification"> <el-input v-model="dialog_2.form.specification"></el-input> </el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="车数" prop="carnum"> <el-input v-model="dialog_2.form.carnum"></el-input> </el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="挂具摆放" prop="rack"> <el-input v-model="dialog_2.form.rack"></el-input> </el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="6">
<el-form-item label="上件数" prop="requireNum"> <el-input v-model="dialog_2.form.requireNum"></el-input> </el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="毛坯零件号"> <el-input v-model="dialog_2.form.workblankpartnumber"></el-input> </el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="实际上件数" prop="actualnumber"> <el-input v-model="dialog_2.form.actualnumber"></el-input> </el-form-item>
</el-col>
<el-col :span="6"
><el-form-item label="排程优先级">
<el-select v-model="dialog_2.form.priority" placeholder="请选择来源">
<el-option label="紧急" :value="100"></el-option>
<el-option label="普通" :value="1"></el-option>
</el-select> </el-form-item
></el-col>
</el-row>
</el-form>
</div>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm_2"> </el-button>
<el-button @click="cancel_2"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import {
getWorkplanList,
addNewworkplan,
deleteworkplan,
updateworkplan,
getworkorderList,
insertNewworkorder,
deleteworkorder,
updateworkorder,
} from '@/api/productManagement/workplan.js'
export default {
name: 'workplan',
data() {
return {
flag: 'insert',
selectPlan: {
id: '',
},
search: {
year: new Date().getFullYear(),
week: null,
partNumber: '',
color: '',
},
workplanList: [], //生产计划列表
workOrderList: [], // 生产工单列表
pagination: {
total: 0,
pageNum: 1,
pageSize: 10,
},
loading_1: true,
dialog_1: {
title: '新增生产计划',
open: false,
form: {
id: '',
year: new Date().getFullYear(),
week: null,
source: null,
partnumber: null,
version: null,
color: null,
colorcode: null,
neednumber: null,
passpercent: null,
batchNumber: null,
productionRhythm: null,
actualplanNumber: null,
carNumber: null,
circleNumber: null,
producttime: 0,
needcertainty: null,
remark: null,
},
rules: {
year: [{ required: true, message: '年不能为空', trigger: 'blur' }],
week: [{ required: true, message: '周不能为空', trigger: 'blur' }],
source: [{ required: true, message: '来源不能为空', trigger: 'blur' }],
partnumber: [{ required: true, message: '零件号不能为空', trigger: 'blur' }],
color: [{ required: true, message: '颜色不能为空', trigger: 'blur' }],
},
},
dialog_2: {
title: '新增生产工单',
open: false,
rules: {
date: [{ required: true, message: '周几不能为空', trigger: 'blur' }],
productionTime: [{ required: true, message: '预计工时不能为空', trigger: 'blur' }],
productionName: [{ required: true, message: '产品名称不能为空', trigger: 'blur' }],
partnumber: [{ required: true, message: '零件号不能为空', trigger: 'blur' }],
color: [{ required: true, message: '颜色不能为空', trigger: 'blur' }],
paintCylinderNumber: [{ required: true, message: '颜色缸号不能为空', trigger: 'blur' }],
carnum: [{ required: true, message: '车数不能为空', trigger: 'blur' }],
rack: [{ required: true, message: '挂具摆放不能为空', trigger: 'blur' }],
requireNum: [{ required: true, message: '需求数量不能为空', trigger: 'blur' }],
actualnumber: [{ required: true, message: '实际上件数不能为空', trigger: 'blur' }],
},
form: {
id: '',
fkProPlanId: '',
year: null,
week: null,
date: null,
wrokerorder_status: '',
arrangeStarttime: null,
arrangeEndtime: null,
productionTime: null,
productionName: '',
color: '',
paintCylinderNumber: null,
specification: '',
carnum: null,
rack: null,
requireNum: null,
workblankpartnumber: '',
finishedpartnumber: '',
actualnumber: null,
},
},
}
},
mounted() {
this.getList()
},
methods: {
//todo 获取生产计划列表
getList() {
const query = { ...this.search, ...this.pagination }
if (query.week == null || query.week == undefined || query.week == '') query.week = -1
if (query.year == null || query.year == undefined || query.year == '') query.year = -1
getWorkplanList(query).then((res) => {
if (res.code == 200) {
this.loading_1 = false
this.workplanList = res.data.item1
this.pagination.total = res.data.item2
}
})
},
//新增按钮
newplan() {
this.dialog_1.open = true
this.dialog_1.title = '新增生产计划'
this.flag = 'insert'
},
//todo 新建生产工单
addNewworkorder() {
if (this.selectPlan.id == '' || this.selectPlan.id == undefined) {
this.$notify.error({
title: '错误',
message: '未选中生产计划不得新建生产工单',
})
return
}
this.dialog_2.open = true
this.dialog_2.title = '新增生产工单'
this.flag = 'insert'
},
// todo 新增修改提交计划处理
submitForm_1() {
if (this.flag == 'insert') {
this.$refs['dialog_1form'].validate((valid) => {
if (valid) {
addNewworkplan(this.dialog_1.form).then((res) => {
if (res.code == 200) {
this.$notify.success('新增成功')
this.getList()
this.dialog_1.open = false
}
})
}
})
} else if (this.flag == 'update') {
this.$refs['dialog_1form'].validate((valid) => {
if (valid) {
updateworkplan(this.dialog_1.form).then((res) => {
if (res.code == 200) {
this.$notify.success('修改成功')
this.getList()
this.dialog_1.open = false
}
})
}
})
}
// 清空表单
this.resetForm('dialog_1form')
},
// todo 新增修改 生产工单 处理
submitForm_2() {
if (this.flag == 'insert') {
this.$refs['dialog_2form'].validate((valid) => {
if (valid) {
const query = { ...this.dialog_2.form }
query.fkProPlanId = this.selectPlan.id
query.year = this.selectPlan.year
query.week = this.selectPlan.week
query.wrokerorder_status = 0
insertNewworkorder(query).then((res) => {
if (res.code == 200) {
if (res.data == 1) {
this.$notify.success('工单新增成功')
this.workplan_select(0, this.selectPlan)
this.dialog_2.open = false
// 清空表单
this.resetForm('dialog_2form')
} else if (res.data == 0) {
this.$notify.error('工单新增异常,请联系管理员')
this.dialog_2.open = false
} else if (res.data == 2) {
this.$notify.warning('工单生产数量超过计划,无法插入,请调整数量')
this.dialog_2.open = false
}
}
})
} else {
this.$notify.error('工单校验失败')
}
})
} else if (this.flag == 'update') {
this.$refs['dialog_2form'].validate((valid) => {
if (valid) {
updateworkorder(this.dialog_2.form).then((res) => {
if (res.code == 200) {
if (res.data == 1) {
this.$notify.success('修改成功')
this.workplan_select(0, this.selectPlan)
this.dialog_2.open = false
// 清空表单
this.resetForm('dialog_2form')
} else if (res.data == 0) {
this.$notify.error('修改失败,请联系管理员')
} else if (res.data == 2) {
this.$notify.warning('修改的工单生产数量超过计划,无法插入,请调整数量')
} else if (res.data == 3) {
this.dialog_2.open = false
this.$notify.error('该工单已经排程不能修改')
// 清空表单
this.resetForm('dialog_2form')
}
}
})
}
})
}
},
cancel_1() {
this.dialog_1.open = false
// this.dialog_1reset();
this.resetForm('dialog_1form')
},
cancel_2() {
this.dialog_2.open = false
// this.dialog_1reset();
this.resetForm('dialog_2form')
},
//todo 修改生产计划
workplan_handleUpdate(index, row) {
this.flag = 'update'
this.dialog_1.open = true
this.dialog_1.title = '修改生产计划'
this.dialog_1.form.id = row.id
this.dialog_1.form.year = row.year
this.dialog_1.form.week = row.week
this.dialog_1.form.source = row.source
this.dialog_1.form.partnumber = row.partnumber
this.dialog_1.form.version = row.version
this.dialog_1.form.color = row.color
this.dialog_1.form.colorcode = row.colorcode
this.dialog_1.form.neednumber = row.neednumber
this.dialog_1.form.passpercent = row.passpercent
this.dialog_1.form.batchNumber = row.batchNumber
this.dialog_1.form.productionRhythm = row.productionRhythm
this.dialog_1.form.actualplanNumber = row.actualplanNumber
this.dialog_1.form.carNumber = row.carNumber
this.dialog_1.form.circleNumber = row.circleNumber
this.dialog_1.form.producttime = row.producttime
this.dialog_1.form.needcertainty = row.needcertainty
this.dialog_1.form.remark = row.remark
},
//todo 删除生产计划
workplan_handleDelete(index, row) {
this.$modal
.confirm('是否确认删除生产计划名称为' + row.partnumber + '"的数据项?')
.then(function () {
return deleteworkplan(row.id)
})
.then(() => {
if (res.code == 200) {
if ((res.data ==1)) {
this.$notify.success('删除成功')
this.getList()
} else {
this.$notify.error('删除失败')
}
}
})
.catch(() => {})
},
//todo 删除生产工单
workorder_delete(index, row) {
this.$modal
.confirm('是否确认删除生产工单名称为' + row.id + '"的数据项?')
.then(function () {
return deleteworkorder(row.id)
})
.then((res) => {
if (res.code == 200) {
if (res.data == 1) {
this.$notify.success('删除成功')
this.workplan_select(0, this.selectPlan)
} else if (res.data == 0) {
this.$notify.error('删除失败')
} else if (res.data == 3) {
this.$notify.error('该工单已经排程不能删除')
}
}
})
.catch(() => {})
},
//todo 修改工单
workorder_updateEdit(index, row) {
this.dialog_2.open = true
this.flag = 'update'
this.dialog_2.title = '修改生产工单'
this.dialog_2.form.id = row.id
this.dialog_2.form.fkProPlanId = row.fkProPlanId
this.dialog_2.form.year = row.year
this.dialog_2.form.week = row.week
this.dialog_2.form.date = row.date
this.dialog_2.form.arrangeStarttime = row.arrangeStarttime
this.dialog_2.form.wrokerorder_status = row.wrokerorder_status
this.dialog_2.form.arrangeEndtime = row.arrangeEndtime
this.dialog_2.form.productionTime = row.productionTime
this.dialog_2.form.productionName = row.productionName
this.dialog_2.form.color = row.color
this.dialog_2.form.paintCylinderNumber = row.paintCylinderNumber
this.dialog_2.form.specification = row.specification
this.dialog_2.form.carnum = row.carnum
this.dialog_2.form.rack = row.rack
this.dialog_2.form.requireNum = row.requireNum
this.dialog_2.form.workblankpartnumber = row.workblankpartnumber
this.dialog_2.form.finishedpartnumber = row.finishedpartnumber
this.dialog_2.form.actualnumber = row.actualnumber
},
//todo 查看工单
workplan_select(index, row) {
this.selectPlan = row
getworkorderList(row.id).then((res) => {
if (res.code == 200) {
this.workOrderList = res.data
this.$notify.success('工单查看成功')
}
})
},
},
}
</script>
<style lang="scss" scoped>
.workplantable {
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.12), 0 0 6px rgba(0, 0, 0, 0.04);
}
.workordertable {
margin-top: 50px;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.12), 0 0 6px rgba(0, 0, 0, 0.04);
}
.workplan_scope {
color: #1890ff;
font-size: 10px;
font-weight: 700;
}
.workorder_scope {
color: #ff1869;
font-weight: 700;
}
.planbak {
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.12), 0 0 6px rgba(0, 0, 0, 0.04);
padding: 20;
}
</style>