|
|
|
<template>
|
|
|
|
<a-card :bordered="false">
|
|
|
|
<p style="font-size: 30px;color:#333; padding-left: 30% ">{{ planInfo.productCode }}工单生产计划管理</p>
|
|
|
|
<template>
|
|
|
|
<div>
|
|
|
|
<el-descriptions border :column='4'>
|
|
|
|
<el-descriptions-item label="工单编号 ">{{ planInfo.productCode }}</el-descriptions-item>
|
|
|
|
<el-descriptions-item label="生产企业">{{ planInfo.productOrg }}</el-descriptions-item>
|
|
|
|
<!-- <el-descriptions-item label="企业负责人 ">admin</el-descriptions-item>-->
|
|
|
|
<el-descriptions-item label="车间 ">{{ planInfo.workshop }}</el-descriptions-item>
|
|
|
|
<!-- <el-descriptions-item label="车间负责人 ">admin</el-descriptions-item>-->
|
|
|
|
<el-descriptions-item label="班组">{{ planInfo.team }}</el-descriptions-item>
|
|
|
|
<el-descriptions-item label="班组长">{{ planInfo.teamLade }}</el-descriptions-item>
|
|
|
|
<el-descriptions-item label="产品类型">{{ planInfo.productType }}</el-descriptions-item>
|
|
|
|
<el-descriptions-item label="产品编号">{{ planInfo.productNo }}</el-descriptions-item>
|
|
|
|
<el-descriptions-item label="产品名称">{{ planInfo.productName }}</el-descriptions-item>
|
|
|
|
<el-descriptions-item label="开始时间">{{ planInfo.workTime }}</el-descriptions-item>
|
|
|
|
<el-descriptions-item label="生产时长">{{ planInfo.duration }}</el-descriptions-item>
|
|
|
|
<el-descriptions-item label="生产状态">{{ planInfo.status }}</el-descriptions-item>
|
|
|
|
<el-descriptions-item label="加急">{{ planInfo.speedUp }}</el-descriptions-item>
|
|
|
|
<el-descriptions-item label="销售企业">{{ planInfo.salesEnterprise }}</el-descriptions-item>
|
|
|
|
<el-descriptions-item label="订货期">{{ planInfo.orderTime }}</el-descriptions-item>
|
|
|
|
<!-- <el-descriptions-item label="制定人">100</el-descriptions-item>-->
|
|
|
|
<!-- <el-descriptions-item label="制定时间">100</el-descriptions-item>-->
|
|
|
|
<el-descriptions-item label="审核人">{{ planInfo.auditBy }}</el-descriptions-item>
|
|
|
|
<el-descriptions-item label="审核时间">{{ planInfo.auditTimr }}</el-descriptions-item>
|
|
|
|
</el-descriptions>
|
|
|
|
</div>
|
|
|
|
</template>
|
|
|
|
|
|
|
|
<!-- table区域-begin -->
|
|
|
|
<div>
|
|
|
|
<j-vxe-table
|
|
|
|
ref="xTable"
|
|
|
|
toolbar
|
|
|
|
:toolbarConfig="toolbarConfig"
|
|
|
|
row-number
|
|
|
|
row-selection
|
|
|
|
keep-source
|
|
|
|
:rowSelection="clickTrue"
|
|
|
|
:clickSelectRow="clickTrue"
|
|
|
|
:loading="loading"
|
|
|
|
:columns="columns"
|
|
|
|
@selectRowChange="handleSelectRowChange"
|
|
|
|
:dataSource="dataSource"
|
|
|
|
@valueChange="handleValueChange"
|
|
|
|
@save="handleTableSave"
|
|
|
|
>
|
|
|
|
<template v-slot:toolbarSuffix>
|
|
|
|
<a-button type="primary" icon="plus-circle" @click="syncProductProcess()">读取工序</a-button>
|
|
|
|
<a-button type="primary" icon="plus-circle" @click="autoFilling()">自动排位</a-button>
|
|
|
|
<a-button type="primary" icon="plus-circle" @click="createMaterialBill()">生成物料单
|
|
|
|
</a-button>
|
|
|
|
<a-button type="primary" icon="unordered-list" @click="viewMaterialBill()">查看物料单(计划面料&计划辅料)
|
|
|
|
</a-button>
|
|
|
|
<a-button type="primary" icon="unordered-list" @click="viewMaterialBill()">发送到仓库
|
|
|
|
</a-button>
|
|
|
|
<a-button type="primary" icon="download" @click="handleExportXls('计划工序')">导出</a-button>
|
|
|
|
<a-button type="primary" icon="rollback" @click="fanHui()">返回</a-button>
|
|
|
|
</template>
|
|
|
|
<template v-slot:action="props">
|
|
|
|
<a @click="jump2MianLiao(props)">面料</a>
|
|
|
|
<a-divider type="vertical"/>
|
|
|
|
<a @click="jump2FuLiao(props)">辅料</a>
|
|
|
|
<a-divider type="vertical"/>
|
|
|
|
<a @click="viewDetail(props)">详情</a>
|
|
|
|
</template>
|
|
|
|
</j-vxe-table>
|
|
|
|
</div>
|
|
|
|
<ZyPlanProcessDataDetail ref="zyPlanProcessDataDetail"></ZyPlanProcessDataDetail>
|
|
|
|
</a-card>
|
|
|
|
|
|
|
|
</template>
|
|
|
|
|
|
|
|
<script>
|
|
|
|
|
|
|
|
import '@/assets/less/TableExpand.less'
|
|
|
|
import {mixinDevice} from '@/utils/mixin'
|
|
|
|
import {JeecgListMixin} from '@/mixins/JeecgListMixin'
|
|
|
|
import {getAction, postAction} from "@api/manage";
|
|
|
|
import {filterObj, pushIfNotExist, randomNumber, randomUUID} from "@/utils/util";
|
|
|
|
import {JVXETypes} from '@/components/jeecg/JVxeTable'
|
|
|
|
import Area from "@comp/_util/Area";
|
|
|
|
import ZyPlanProcessDataDetail from '@views/productplan/ZyPlanProcessDataDetail'
|
|
|
|
|
|
|
|
export default {
|
|
|
|
name: 'ZyPlanProcessDataList',
|
|
|
|
mixins: [JeecgListMixin, mixinDevice],
|
|
|
|
components: {
|
|
|
|
ZyPlanProcessDataDetail,
|
|
|
|
},
|
|
|
|
data() {
|
|
|
|
return {
|
|
|
|
toolbarConfig: {
|
|
|
|
// add 新增按钮;remove 删除按钮;clearSelection 清空选择按钮
|
|
|
|
btn: ['save',]
|
|
|
|
},
|
|
|
|
description: '生产计划工序管理页面',
|
|
|
|
loading: false,
|
|
|
|
dataSource: [],
|
|
|
|
columns: [
|
|
|
|
{
|
|
|
|
title: '工序名称',
|
|
|
|
key: 'processName',
|
|
|
|
width: '180px',
|
|
|
|
},
|
|
|
|
{
|
|
|
|
title: '工位ID',
|
|
|
|
key: 'stationId',
|
|
|
|
type: JVXETypes.hidden,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
title: '工位名称',
|
|
|
|
key: 'stationName',
|
|
|
|
type: JVXETypes.select,
|
|
|
|
width: '200px',
|
|
|
|
options: [],
|
|
|
|
placeholder: '请选择${title}',
|
|
|
|
},
|
|
|
|
{
|
|
|
|
title: '工位序号',
|
|
|
|
key: 'stationNum',
|
|
|
|
width: '80px',
|
|
|
|
},
|
|
|
|
{
|
|
|
|
title: '设备名称',
|
|
|
|
key: 'machineIds',
|
|
|
|
type: JVXETypes.hidden
|
|
|
|
},
|
|
|
|
{
|
|
|
|
title: '设备名称',
|
|
|
|
key: 'machineNames',
|
|
|
|
type: JVXETypes.selectMultiple,
|
|
|
|
width: '180px',
|
|
|
|
options: [],
|
|
|
|
placeholder: '请选择${title}',
|
|
|
|
},
|
|
|
|
{
|
|
|
|
title: 'toodsIds',
|
|
|
|
key: 'toolsIds',
|
|
|
|
type: JVXETypes.hidden,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
title: '工具名称',
|
|
|
|
key: 'toolsNames',
|
|
|
|
type: JVXETypes.selectMultiple,
|
|
|
|
width: '180px',
|
|
|
|
options: [],
|
|
|
|
placeholder: '请选择${title}',
|
|
|
|
},
|
|
|
|
{key: 'proProcess', type: JVXETypes.hidden, title: '前导工序ID', width: '120px'},
|
|
|
|
{
|
|
|
|
title: '前导工序',
|
|
|
|
key: 'proProcessName',
|
|
|
|
type: JVXETypes.popup,
|
|
|
|
width: '180px',
|
|
|
|
popupCode: 'zy_process',
|
|
|
|
field: 'id,process_code,process_name,process_describe',
|
|
|
|
// orgFields: 'id,process_code,process_name,process_describe',
|
|
|
|
// destFields: 'proProcessName,process_code,process_name,process_describe',
|
|
|
|
orgFields: 'process_name,id',
|
|
|
|
destFields: 'proProcessName,proProcess',
|
|
|
|
},
|
|
|
|
{key: 'postProcess', type: JVXETypes.hidden, title: '后导工序ID', width: '120px'},
|
|
|
|
{
|
|
|
|
title: '后导工序',
|
|
|
|
key: 'postProcessName',
|
|
|
|
type: JVXETypes.popup,
|
|
|
|
width: '180px',
|
|
|
|
popupCode: 'zy_process',
|
|
|
|
field: 'id,process_code,process_name,process_describe',
|
|
|
|
orgFields: 'process_name,id',
|
|
|
|
destFields: 'postProcessName,postProcess',
|
|
|
|
},
|
|
|
|
{key: 'inputProduct', title: '输入产品', width: '150', type: JVXETypes.input},
|
|
|
|
{key: 'semiProduct', title: '成品/半成品', width: '150', type: JVXETypes.input},
|
|
|
|
{
|
|
|
|
title: '工人id',
|
|
|
|
key: 'userIds',
|
|
|
|
type: JVXETypes.hidden,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
title: '工人名称',
|
|
|
|
key: 'userNames',
|
|
|
|
type: JVXETypes.selectMultiple,
|
|
|
|
width: '200px',
|
|
|
|
options: [],
|
|
|
|
placeholder: '请选择${title}',
|
|
|
|
},
|
|
|
|
{key: 'totalMachine', title: '机器时长', width: '80', type: JVXETypes.normal},
|
|
|
|
{key: 'totalMaunal', title: '人工时长', width: '80', type: JVXETypes.normal},
|
|
|
|
{
|
|
|
|
title: '管理',
|
|
|
|
key: 'action',
|
|
|
|
type: JVXETypes.slot,
|
|
|
|
fixed: 'right',
|
|
|
|
minWidth: '150px',
|
|
|
|
align: 'center',
|
|
|
|
slotName: 'action',
|
|
|
|
},
|
|
|
|
],
|
|
|
|
url: {
|
|
|
|
list: "/org.jeecg.modules.productplan/zyPlanProcess/getProcessDatalist",
|
|
|
|
getPlanInfo: "/org.jeecg.modules.productplan/zyPlanProcess/getPlanInfo",
|
|
|
|
syncProductProcess: "/org.jeecg.modules.productplan/zyPlanProcess/syncProductProcess",
|
|
|
|
autoFilling: "/org.jeecg.modules.productplan/zyPlanProcess/autoFilling",
|
|
|
|
createMaterialBill: "/org.jeecg.modules.productplan/zyPlanProcess/createMaterialBill",
|
|
|
|
stationToolslist: "/stationTool/list2",
|
|
|
|
stationMachinelist: "/stationMachine/list2",
|
|
|
|
addProcessBatch: "/org.jeecg.modules.productplan/zyPlanProcess/addProcessBatch",
|
|
|
|
},
|
|
|
|
loadRouteType: false,
|
|
|
|
planId: "",
|
|
|
|
dictOptions: {},
|
|
|
|
planInfo: {},
|
|
|
|
superFieldList: [],
|
|
|
|
stationIdList: [],
|
|
|
|
userIdList: [],
|
|
|
|
toolsList: [],
|
|
|
|
machineList: [],
|
|
|
|
clickTrue: true,
|
|
|
|
}
|
|
|
|
},
|
|
|
|
created() {
|
|
|
|
this.loadParameter();
|
|
|
|
this.getPlanInfo(this.planId);
|
|
|
|
},
|
|
|
|
methods: {
|
|
|
|
// 详情
|
|
|
|
viewDetail(props) {
|
|
|
|
// alert("deatil row id:"+props.row.id);
|
|
|
|
this.$refs.zyPlanProcessDataDetail.showModal(props.row.id)
|
|
|
|
},
|
|
|
|
|
|
|
|
jump2MianLiao(props) {
|
|
|
|
console.log("mianLiao() ----props:", props)
|
|
|
|
this.$router.push({
|
|
|
|
path: '/productplan/ZyPlanProcessFabricDataList',
|
|
|
|
query: { // 路由携带参数
|
|
|
|
'planId': props.row.planId,
|
|
|
|
'planProcessId': props.row.processId,
|
|
|
|
},
|
|
|
|
});
|
|
|
|
},
|
|
|
|
|
|
|
|
jump2FuLiao(props) {
|
|
|
|
console.log("fuLiao() ----props:", props)
|
|
|
|
this.$router.push({
|
|
|
|
path: '/productplan/ZyPlanProcessAccessoriesDataList',
|
|
|
|
query: { // 路由携带参数
|
|
|
|
'planId': props.row.planId,
|
|
|
|
'planProcessId': props.row.processId,
|
|
|
|
},
|
|
|
|
});
|
|
|
|
},
|
|
|
|
getPlanInfo(planId) {
|
|
|
|
// debugger;
|
|
|
|
getAction(this.url.getPlanInfo, {"planId": planId}).then((res) => {
|
|
|
|
if (res.success) {
|
|
|
|
this.planInfo = res.result.records || res.result;
|
|
|
|
// console.log("getPlanInfo------------:" + JSON.stringify(this.planInfo));
|
|
|
|
} else {
|
|
|
|
// this.stationIdCode = "station,station_name,id,depart_id in (select workshop_id from zy_product_plan where id='" + this.planId + "')";
|
|
|
|
this.$message.warning(res.message)
|
|
|
|
}
|
|
|
|
}).finally(() => {
|
|
|
|
this.loading = false
|
|
|
|
})
|
|
|
|
},
|
|
|
|
|
|
|
|
// 【整体保存】点击保存按钮时触发的事件
|
|
|
|
handleTableSave({$table, target}) {
|
|
|
|
console.log("生产计划工序保存开始-----------------")
|
|
|
|
// 校验整个表格
|
|
|
|
$table.validate().then((errMap) => {
|
|
|
|
// 校验通过
|
|
|
|
if (!errMap) {
|
|
|
|
// 获取所有数据
|
|
|
|
let tableData = target.getTableData()
|
|
|
|
console.log('当前保存的数据是:', tableData)
|
|
|
|
// 【模拟保存】
|
|
|
|
this.loading = true
|
|
|
|
postAction(this.url.addProcessBatch, tableData).then(res => {
|
|
|
|
if (res.success) {
|
|
|
|
this.$message.success(`保存成功!`)
|
|
|
|
} else {
|
|
|
|
this.$message.warn(`保存失败:` + res.message)
|
|
|
|
}
|
|
|
|
}).finally(() => {
|
|
|
|
this.loading = false
|
|
|
|
this.loadData();
|
|
|
|
})
|
|
|
|
}
|
|
|
|
})
|
|
|
|
},
|
|
|
|
fanHui() {
|
|
|
|
this.$router.push({
|
|
|
|
path: '/productplan/ZyProductPlanList',
|
|
|
|
});
|
|
|
|
},
|
|
|
|
|
|
|
|
//读取工序
|
|
|
|
syncProductProcess() {
|
|
|
|
this.loading = true;
|
|
|
|
getAction(this.url.syncProductProcess, {"planId": this.planId}).then((res) => {
|
|
|
|
if (res.success) {
|
|
|
|
this.$message.success("操作成功");
|
|
|
|
this.loadData();
|
|
|
|
} else {
|
|
|
|
this.$message.warning(res.message)
|
|
|
|
}
|
|
|
|
}).finally(() => {
|
|
|
|
this.loading = false
|
|
|
|
})
|
|
|
|
},
|
|
|
|
|
|
|
|
//自动排位
|
|
|
|
/**
|
|
|
|
* 根据工序id,查询工序设备表zy_process_machine,用工序设备表数据与工位设备进行匹配(工位设备包含工序设备即是匹配成功,则自动填充工位、设备字段数据,匹配不上则不自动填充,由用户自己录入)
|
|
|
|
*/
|
|
|
|
autoFilling() {
|
|
|
|
this.loading = true;
|
|
|
|
getAction(this.url.autoFilling, {"planId": this.planId}).then((res) => {
|
|
|
|
if (res.success) {
|
|
|
|
this.$message.success("操作成功");
|
|
|
|
this.loadData();
|
|
|
|
} else {
|
|
|
|
this.$message.warning(res.message)
|
|
|
|
}
|
|
|
|
}).finally(() => {
|
|
|
|
this.loading = false
|
|
|
|
})
|
|
|
|
},
|
|
|
|
|
|
|
|
//生成物料单
|
|
|
|
/**
|
|
|
|
* 根据该生产计划的工序面料、工序辅料按类统计各种面料、辅料的用量汇总到计划面料、计划辅料表
|
|
|
|
*/
|
|
|
|
createMaterialBill() {
|
|
|
|
this.loading = true;
|
|
|
|
getAction(this.url.createMaterialBill, {"planId": this.planId}).then((res) => {
|
|
|
|
if (res.success) {
|
|
|
|
this.$message.success("操作成功");
|
|
|
|
this.loadData();
|
|
|
|
} else {
|
|
|
|
this.$message.warning(res.message)
|
|
|
|
}
|
|
|
|
}).finally(() => {
|
|
|
|
this.loading = false
|
|
|
|
})
|
|
|
|
},
|
|
|
|
|
|
|
|
//查看物料单
|
|
|
|
viewMaterialBill(props) {
|
|
|
|
// alert("deatil row id:"+props.row.id);
|
|
|
|
this.$refs.zyPlanProcessDataDetail.showModal(props.row.id)
|
|
|
|
},
|
|
|
|
|
|
|
|
//加载传递参数
|
|
|
|
loadParameter() {
|
|
|
|
// debugger;
|
|
|
|
if (this.loadRouteType === false) {
|
|
|
|
this.planId = this.$route.query.planId;
|
|
|
|
// this.biaoTi = this.$route.query.styleNames+"款式面料管理";
|
|
|
|
console.log("*******传递的planId:" + this.planId)
|
|
|
|
this.loadRouteType = true;
|
|
|
|
}
|
|
|
|
},
|
|
|
|
loadData(arg) {
|
|
|
|
console.log("the loadData---------开始");
|
|
|
|
// var that = this;
|
|
|
|
if (!this.url.list) {
|
|
|
|
this.$message.error("请设置url.list属性!")
|
|
|
|
return
|
|
|
|
}
|
|
|
|
//加载数据 若传入参数1则加载第一页的内容
|
|
|
|
this.loadParameter();
|
|
|
|
var params = this.getQueryParams();//查询条件
|
|
|
|
this.loading = true;
|
|
|
|
console.log("----------------the params:", params);
|
|
|
|
getAction(this.url.list, params).then((res) => {
|
|
|
|
if (res.success) {
|
|
|
|
this.dataSource = res.result.records || res.result;
|
|
|
|
this.stationIdList = this.dataSource[0].stationIdList;
|
|
|
|
this.userIdList = this.dataSource[0].userIdList;
|
|
|
|
} else {
|
|
|
|
// this.stationIdCode = "station,station_name,id,depart_id in (select workshop_id from zy_product_plan where id='" + this.planId + "')";
|
|
|
|
this.$message.warning(res.message)
|
|
|
|
}
|
|
|
|
}).finally(() => {
|
|
|
|
this.loading = false
|
|
|
|
})
|
|
|
|
},
|
|
|
|
getQueryParams() {
|
|
|
|
//获取查询条件
|
|
|
|
let sqp = {}
|
|
|
|
if (this.superQueryParams) {
|
|
|
|
sqp['superQueryParams'] = encodeURI(this.superQueryParams)
|
|
|
|
sqp['superQueryMatchType'] = this.superQueryMatchType
|
|
|
|
}
|
|
|
|
var param = Object.assign(sqp, this.queryParam, this.isorter, this.filters);
|
|
|
|
param.field = this.getQueryField();
|
|
|
|
param.pageNo = this.ipagination.current;
|
|
|
|
param.pageSize = this.ipagination.pageSize;
|
|
|
|
param.planId = this.planId;
|
|
|
|
return filterObj(param);
|
|
|
|
},
|
|
|
|
|
|
|
|
// 当选择的行变化时触发的事件
|
|
|
|
handleSelectRowChange(event) {
|
|
|
|
// console.log("handleSelectRowChange")
|
|
|
|
console.log("handleSelectRowChange-event:", event)
|
|
|
|
const {type, row, column, value, target, $table} = event
|
|
|
|
console.log("stationIdList", JSON.stringify(this.stationIdList));
|
|
|
|
console.log("---------userIdList", JSON.stringify(this.userIdList));
|
|
|
|
target.$refs.vxe.columns[4].options = this.stationIdList;
|
|
|
|
target.$refs.vxe.columns[17].options = this.userIdList;
|
|
|
|
},
|
|
|
|
/** 当选项被改变时,联动其他组件 */
|
|
|
|
handleValueChange(event) {
|
|
|
|
const {type, row, column, value, target} = event
|
|
|
|
console.log("选择列-" + column.key + ":的事件-----", event)
|
|
|
|
console.log("选择列-" + column.key + ":所在行数据-----", row)
|
|
|
|
// console.log("row", row)
|
|
|
|
// 选中工位列操作
|
|
|
|
if (column.key === 'stationName') {
|
|
|
|
let selectedStationId = event.value;
|
|
|
|
// 设置第二列的 options
|
|
|
|
// console.log('选择的工位列id---------:', selectedStationId)
|
|
|
|
row.stationId = selectedStationId;
|
|
|
|
// 清空后两列的数据
|
|
|
|
target.setValues([{
|
|
|
|
rowKey: row.id,
|
|
|
|
values: {machineIds: '', toolsIds: '', machineNames: '', toolsNames: ''}
|
|
|
|
}])
|
|
|
|
target.$refs.vxe.columns[7].options = []
|
|
|
|
target.$refs.vxe.columns[9].options = []
|
|
|
|
|
|
|
|
getAction(this.url.stationMachinelist, {"stationId": selectedStationId}).then((res) => {
|
|
|
|
if (res.success) {
|
|
|
|
this.machineList = res.result.records || res.result;
|
|
|
|
console.log("machineList", JSON.stringify(this.machineList))
|
|
|
|
target.$refs.vxe.columns[7].options = this.machineList;
|
|
|
|
} else {
|
|
|
|
this.$message.warning(res.message)
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
getAction(this.url.stationToolslist, {"stationId": selectedStationId}).then((res) => {
|
|
|
|
if (res.success) {
|
|
|
|
this.toolsList = res.result.records || res.result;
|
|
|
|
console.log("toolsList", JSON.stringify(this.toolsList))
|
|
|
|
target.$refs.vxe.columns[9].options = this.toolsList;
|
|
|
|
} else {
|
|
|
|
this.$message.warning(res.message)
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
//选中列操作
|
|
|
|
if (column.key === 'machineNames') {
|
|
|
|
row.machineIds = event.value;
|
|
|
|
}
|
|
|
|
if (column.key === 'toolsNames') {
|
|
|
|
row.toolsIds = event.value;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (column.key === 'userNames') {
|
|
|
|
row.userIds = event.value;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
};
|
|
|
|
</script>
|