生产计划对接

This commit is contained in:
zzyuan 2025-07-15 18:21:37 +08:00
parent 827eb8694c
commit 576e266a02
2 changed files with 218 additions and 61 deletions

View File

@ -96,8 +96,8 @@
<div class="body-card">
<div v-for="dish in item.dishesList" :key="dish.dishesId" style="width: 100%;display: flex;justify-content: space-between;align-items: center;">
<span>{{dish.dishesName}}</span>
<el-input v-model="dish.number" placeholder="请输入份数" maxlength="10" clearable
@input="(v)=>(dish.number=v.replace(/[^\d]/g,''))" style="width: 100px;"/>
<el-input v-model="dish.dishesNum" placeholder="请输入份数" maxlength="10" clearable
@input="(v)=>(dish.dishesNum=v.replace(/[^\d]/g,''))" style="width: 100px;"/>
<!-- <i class="el-icon-delete" style="color: red;cursor: pointer;" @click="deleteDishes(item,dish)" v-if="dialogType==1"></i> -->
</div>
</div>
@ -179,9 +179,9 @@
<span v-if="scope.row.sizeType==2">大小份</span>
</template>
</el-table-column>
<el-table-column label="份数" align="center" prop="number">
<el-table-column label="份数" align="center" prop="dishesNum">
<template slot-scope="scope">
<el-input v-model="scope.row.number" placeholder="请输入份数" maxlength="10" clearable @input="(v)=>(scope.row.number=v.replace(/[^\d]/g,''))"/>
<el-input v-model="scope.row.dishesNum" placeholder="请输入份数" maxlength="10" clearable @input="(v)=>(scope.row.dishesNum=v.replace(/[^\d]/g,''))"/>
</template>
</el-table-column>
<el-table-column label="操作" align="center">
@ -220,6 +220,7 @@ export default {
loading:false,
loadingBtn:false,
baseInfo: {},
resDetailList:[],
//
baseRules: {
productionPlanName: [
@ -341,30 +342,65 @@ export default {
getStallByCanteenApi({ canteenId:this.baseInfo.canteenId }).then((response) => {
this.stallOptions=response.rows||[]
this.$set(this.baseInfo,"stallId",this.baseInfo.stallId)
});
});
getPageRecipeListAllApi({areaId:this.baseInfo.areaId,canteenId:this.baseInfo.canteenId,stallId:this.baseInfo.stallId,}).then((response) => {
this.recipeOptions = response.rows||[]
this.$set(this.baseInfo,"recipeId",this.baseInfo.recipeId)
});
var resDetailList = response.data.productionPlanDetailVOList;
this.dateRange=[resDetailList[0].detailDate,resDetailList[resDetailList.length-1].detailDate]
this.$set(this.baseInfo,"recipeId",this.baseInfo.recipeId)
});
this.resDetailList = response.data.productionPlanDetailVOList;
this.dateRange=[this.resDetailList[0].detailDate,this.resDetailList[this.resDetailList.length-1].detailDate]
this.dateRangeList = this.getDateRange(this.dateRange[0],this.dateRange[1])
this.dateRangeIndex = 0
this.dateRangeRadio = this.formatDate(this.dateRange[0]);
for (let i = 0; i < resDetailList.length; i++) {
this.dateRangeList.forEach(item=>{
if(resDetailList[i].detailDate==item.applyDate){
item.detailList.forEach(subItem=>{
if(resDetailList[i].mealtimeType==subItem.mealtimeType){
this.$set(resDetailList[i],'number',resDetailList[i].dishesNum)
subItem.dishesList.push(resDetailList[i])
}
})
}
})
this.dateRangeRadio = this.formatDate(this.dateRange[0]);
if(this.dialogType==1){
for (let i = 0; i < this.resDetailList.length; i++) {
this.dateRangeList.forEach(item=>{
if(this.resDetailList[i].detailDate==item.applyDate){
item.detailList.forEach(subItem=>{
if(this.resDetailList[i].mealtimeType==subItem.mealtimeType){
this.$set(this.resDetailList[i],'dishesNum',this.resDetailList[i].dishesNum)
subItem.dishesList.push(this.resDetailList[i])
}
})
}
})
}
this.detailList = this.dateRangeList[0].detailList;
}
this.detailList = this.dateRangeList[0].detailList;
if(this.dialogType==2){
let param = {
"applyDate": this.dateRangeRadio,
"recipeId": this.baseInfo.recipeId
}
getMenuRecipeDetailApi(param).then((response) => {
if(response.data.length>0){
for (let i = 0; i < response.data.length; i++) {
this.dateRangeList[0].detailList.forEach(item=>{
if(item.mealtimeType==response.data[i].mealtimeType){
item.dishesList = response.data[i].dishesList
}
})
}
for (let i = 0; i < this.resDetailList.length; i++) {
this.dateRangeList.forEach(item=>{
if(this.resDetailList[i].detailDate==item.applyDate){
item.detailList.forEach(subItem=>{
if(this.resDetailList[i].mealtimeType==subItem.mealtimeType){
subItem.dishesList.forEach(lastItem=>{
if(this.resDetailList[i].dishesId==lastItem.dishesId){
this.$set(lastItem,'dishesNum',this.resDetailList[i].dishesNum)
}
})
}
})
}
})
}
this.detailList = this.dateRangeList[0].detailList;
}
});
}
});
},
//
@ -546,7 +582,7 @@ export default {
let index = this.dishesList.findIndex(v=>v.dishesId==obj.dishesId)
if(index==-1){//-
let dish = Object.assign({}, obj)
this.$set(dish,'number',null)
this.$set(dish,'dishesNum',null)
this.dishesList.push(dish)
// this.dishesTableList.push(dish)
//
@ -585,7 +621,7 @@ export default {
//-
confirmChosen(){
console.log(this.dishesList)
let index = this.dishesList.findIndex(v=>v.number==null||v.number==0)
let index = this.dishesList.findIndex(v=>v.dishesNum==null||v.dishesNum==0)
console.log(index)
if(index>-1){
this.$modal.msgError("请填写菜品份数");
@ -623,7 +659,7 @@ export default {
this.dateRangeList[0].detailList.forEach(item=>{
if(item.mealtimeType==response.data[i].mealtimeType){
response.data[i].dishesList.forEach(dish=>{
this.$set(dish,'number',null)
this.$set(dish,'dishesNum',null)
});
item.dishesList = response.data[i].dishesList
}
@ -692,18 +728,35 @@ export default {
if(item.mealtimeType==response.data[i].mealtimeType){
item.dishesList = response.data[i].dishesList;
item.dishesList.forEach(dish=>{
this.$set(dish,'number',null)
this.$set(dish,'dishesNum',null)
})
}
})
}
// setTimeout(()=>{
for (let i = 0; i < this.resDetailList.length; i++) {
this.dateRangeList.forEach(item=>{
if(this.resDetailList[i].detailDate==item.applyDate){
item.detailList.forEach(subItem=>{
if(this.resDetailList[i].mealtimeType==subItem.mealtimeType){
subItem.dishesList.forEach(lastItem=>{
if(this.resDetailList[i].dishesId==lastItem.dishesId){
this.$set(lastItem,'dishesNum',this.resDetailList[i].dishesNum)
}
})
}
})
}
})
}
// },500)
}
});
},
//稿
confirmSave(){
this.$refs["baseInfo"].validate(valid => {
if (valid) {
if (valid) {
let param = Object.assign({},this.baseInfo);
param.ifRepeat=this.ifRepeat;
param.productionPlanType=this.dialogType;
@ -721,10 +774,10 @@ export default {
obj.detailDate = this.dateRangeList[i].applyDate
obj.dishesId=dishItem.dishesId;
obj.dishesName=dishItem.dishesName;
obj.dishesNum=Number(dishItem.number);
obj.dishesNum=Number(dishItem.dishesNum);
obj.mealtimeName=this.dateRangeList[0].detailList[j].mealtimeName;
obj.mealtimeType=this.dateRangeList[0].detailList[j].mealtimeType;
obj.number=dishItem.number;
obj.dishesNum=dishItem.dishesNum;
obj.sizeType=dishItem.sizeType;
param.productionPlanDetailAddList.push(obj)
})
@ -741,10 +794,10 @@ export default {
obj.detailDate = this.dateRangeList[i].applyDate
obj.dishesId=dishItem.dishesId;
obj.dishesName=dishItem.dishesName;
obj.dishesNum=Number(dishItem.number);
obj.dishesNum=Number(dishItem.dishesNum);
obj.mealtimeName=this.dateRangeList[i].detailList[j].mealtimeName;
obj.mealtimeType=this.dateRangeList[i].detailList[j].mealtimeType;
obj.number=dishItem.number;
obj.dishesNum=dishItem.dishesNum;
obj.sizeType=dishItem.sizeType;
param.productionPlanDetailAddList.push(obj)
})
@ -754,28 +807,38 @@ export default {
}
console.log(param.productionPlanDetailAddList)
}
if(this.dialogType==2){
console.log(this.dateRangeList)
if(this.dialogType==2){
var addList = []
for(let i =0 ;i < this.dateRangeList.length ;i++){
for(let j =0 ;j < this.dateRangeList[0].detailList.length;j++){
if(this.dateRangeList[i].detailList[j].dishesList.length>0){
this.dateRangeList[i].detailList[j].dishesList.forEach(dishItem=>{
if(dishItem.number>0){
if(dishItem.dishesNum>0){
let obj = Object.assign({}, dishItem)
obj.detailDate = this.dateRangeList[i].applyDate
obj.dishesId=dishItem.dishesId;
obj.dishesName=dishItem.dishesName;
obj.dishesNum=Number(dishItem.number);
obj.dishesNum=Number(dishItem.dishesNum);
obj.mealtimeName=this.dateRangeList[i].detailList[j].mealtimeName;
obj.mealtimeType=this.dateRangeList[i].detailList[j].mealtimeType;
obj.number=dishItem.number;
obj.dishesNum=dishItem.dishesNum;
obj.sizeType=dishItem.sizeType;
param.productionPlanDetailAddList.push(obj)
addList.push(obj)
}
})
}
}
}
console.log(addList)
if(param.productionPlanDetailVOList&&param.productionPlanDetailVOList.length>0){
addList.forEach(item=>{
let index = param.productionPlanDetailVOList.findIndex(v=>(v.detailDate==item.detailDate&&v.mealtimeType==item.mealtimeType&&v.dishesId==item.dishesId))
param.productionPlanDetailVOList[index].dishesNum = item.dishesNum
})
param.productionPlanDetailAddList = param.productionPlanDetailVOList
}else{
param.productionPlanDetailAddList = addList
}
console.log(param.productionPlanDetailAddList)
}
console.log(param)
@ -809,9 +872,112 @@ export default {
this.$refs["baseInfo"].validate(valid => {
if (valid) {
let param = Object.assign({},this.baseInfo);
// param.purchaseDate = this.formatDateTime(this.baseInfo.purchaseDate)
// param.deliverGoodsDate = this.formatDate(this.baseInfo.deliverGoodsDate)
// param.status=2
param.ifRepeat=this.ifRepeat;
param.productionPlanType=this.dialogType;
param.status=2;
param.goodsType=1;
param.productionPlanDetailAddList=[];
if(this.dialogType==1){
console.log(this.dateRangeList)
if(this.ifRepeat==1){
for(let i =0 ;i < this.dateRangeList.length ;i++){
for(let j =0 ;j < this.dateRangeList[0].detailList.length;j++){
if(this.dateRangeList[0].detailList[j].dishesList.length>0){
this.dateRangeList[0].detailList[j].dishesList.forEach(dishItem=>{
let obj = Object.assign({}, dishItem)
obj.detailDate = this.dateRangeList[i].applyDate
obj.dishesId=dishItem.dishesId;
obj.dishesName=dishItem.dishesName;
obj.dishesNum=Number(dishItem.dishesNum);
obj.mealtimeName=this.dateRangeList[0].detailList[j].mealtimeName;
obj.mealtimeType=this.dateRangeList[0].detailList[j].mealtimeType;
obj.dishesNum=dishItem.dishesNum;
obj.sizeType=dishItem.sizeType;
param.productionPlanDetailAddList.push(obj)
})
}
}
}
}
if(this.ifRepeat==2){
for(let i =0 ;i < this.dateRangeList.length ;i++){
for(let j =0 ;j < this.dateRangeList[0].detailList.length;j++){
if(this.dateRangeList[i].detailList[j].dishesList.length>0){
this.dateRangeList[i].detailList[j].dishesList.forEach(dishItem=>{
let obj = Object.assign({}, dishItem)
obj.detailDate = this.dateRangeList[i].applyDate
obj.dishesId=dishItem.dishesId;
obj.dishesName=dishItem.dishesName;
obj.dishesNum=Number(dishItem.dishesNum);
obj.mealtimeName=this.dateRangeList[i].detailList[j].mealtimeName;
obj.mealtimeType=this.dateRangeList[i].detailList[j].mealtimeType;
obj.dishesNum=dishItem.dishesNum;
obj.sizeType=dishItem.sizeType;
param.productionPlanDetailAddList.push(obj)
})
}
}
}
}
console.log(param.productionPlanDetailAddList)
}
if(this.dialogType==2){
var addList = []
for(let i =0 ;i < this.dateRangeList.length ;i++){
for(let j =0 ;j < this.dateRangeList[0].detailList.length;j++){
if(this.dateRangeList[i].detailList[j].dishesList.length>0){
this.dateRangeList[i].detailList[j].dishesList.forEach(dishItem=>{
if(dishItem.dishesNum>0){
let obj = Object.assign({}, dishItem)
obj.detailDate = this.dateRangeList[i].applyDate
obj.dishesId=dishItem.dishesId;
obj.dishesName=dishItem.dishesName;
obj.dishesNum=Number(dishItem.dishesNum);
obj.mealtimeName=this.dateRangeList[i].detailList[j].mealtimeName;
obj.mealtimeType=this.dateRangeList[i].detailList[j].mealtimeType;
obj.dishesNum=dishItem.dishesNum;
obj.sizeType=dishItem.sizeType;
addList.push(obj)
}
})
}
}
}
console.log(addList)
if(param.productionPlanDetailVOList&&param.productionPlanDetailVOList.length>0){
addList.forEach(item=>{
let index = param.productionPlanDetailVOList.findIndex(v=>(v.detailDate==item.detailDate&&v.mealtimeType==item.mealtimeType&&v.dishesId==item.dishesId))
param.productionPlanDetailVOList[index].dishesNum = item.dishesNum
})
param.productionPlanDetailAddList = param.productionPlanDetailVOList
}else{
param.productionPlanDetailAddList = addList
}
console.log(param.productionPlanDetailAddList)
}
console.log(param)
if(param.productionPlanDetailAddList.length==0){
this.$modal.msgError("请填写菜品份数!");
}else{
this.loadingBtn=true;
if (this.baseInfo.planId != undefined) {
editProductionPlanApi(param).then((response) => {
this.$modal.msgSuccess("修改成功");
this.loadingBtn=false
this.jumpList()
}).catch(() => {
this.loadingBtn=false
});
} else {
addProductionPlanApi(param).then((response) => {
this.$modal.msgSuccess("保存成功");
this.loadingBtn=false
this.jumpList()
}).catch(() => {
this.loadingBtn=false
});
}
}
}
});
},

View File

@ -1,6 +1,6 @@
<template>
<div class="app-container">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="90px">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="100px">
<el-form-item label="生产日期">
<el-date-picker
v-model="dateRange"
@ -15,18 +15,9 @@
:picker-options="pickerOptions" >
</el-date-picker>
</el-form-item>
<el-form-item label="关键字" prop="searchValue">
<el-input v-model="queryParams.searchValue" placeholder="请输入生产计划单号、名称" maxlength="20" clearable style="width: 240px"/>
</el-form-item>
<!-- <el-form-item label="供应商" prop="supplierId">
<el-select v-model="queryParams.supplierId" placeholder="请选择供应商" style="width: 240px;">
<el-option v-for="item in supplierOptions"
:key="item.supplierId"
:label="item.supplierName"
:value="item.supplierId"
></el-option>
</el-select>
</el-form-item> -->
<el-form-item label="生产计划名称" prop="productionPlanName">
<el-input v-model="queryParams.productionPlanName" placeholder="请输入生产计划名称" maxlength="20" clearable style="width: 100%"/>
</el-form-item>
<el-form-item label="所属区域" prop="areaId">
<el-cascader v-model="queryParams.areaId"
:options="treeAreaOptions" :filterable="true" style="width: 100%;" :show-all-levels="false"
@ -69,12 +60,12 @@
<el-option label="审批拒绝" :value="4"></el-option>
</el-select>
</el-form-item> -->
<el-form-item label="分解状态" prop="decompositionState">
<!-- <el-form-item label="分解状态" prop="decompositionState">
<el-select v-model="queryParams.decompositionState" placeholder="请选择分解状态" style="width: 240px;">
<el-option label="待分解" :value="1"></el-option>
<el-option label="已分解" :value="2"></el-option>
</el-select>
</el-form-item>
</el-form-item> -->
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
@ -111,10 +102,10 @@
<span>{{(queryParams.pageNum - 1) * queryParams.pageSize + scope.$index + 1}}</span>
</template>
</el-table-column>
<el-table-column label="分解状态" align="center" prop="decompositionState" :show-overflow-tooltip="true" width="100">
<el-table-column label="分解状态" align="center" prop="ifBreakDown" :show-overflow-tooltip="true" width="100">
<template slot-scope="scope">
<span v-if="scope.row.decompositionState==1">待分解</span>
<span v-if="scope.row.decompositionState==2">已分解</span>
<span v-if="!scope.row.ifBreakDown">待分解</span>
<span v-if="scope.row.ifBreakDown">已分解</span>
</template>
</el-table-column>
<el-table-column label="提交状态" align="center" prop="status" :show-overflow-tooltip="true" width="100">
@ -272,7 +263,7 @@ export default {
},
created() {
this.getAreaTreeData();
this.getSupplierData();
// this.getSupplierData();
this.getList();
},
methods: {
@ -391,7 +382,7 @@ export default {
/** 删除按钮操作 */
handleDelete(row) {
this.$modal.confirm('是否确认删除数据项?').then(function() {
return delProductionPlanApi({orderGoodsIds:[row.orderGoodsId]});
return delProductionPlanApi({planIds:[row.planId]});
}).then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");