You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

912 lines
34 KiB
Vue

<template>
<div>
<el-card>
<el-form ref="form" :model="form" :rules="rules" label-width="120px">
<el-divider content-position="left"><span style="font-weight: bold; font-size: larger;">工单信息</span>
</el-divider>
<el-row :gutter="10">
<el-col :span="12">
<el-form-item label="任务编号:">{{ form.orderCode }}</el-form-item>
<el-form-item label="成品编码:">{{ form.materialCode }}</el-form-item>
<el-form-item label="计划开始时间:">{{ form.planBeginTime }}</el-form-item>
<el-form-item label="计划数量/已派工数量/完成数量:" label-width="220px">
{{
form.planAmount
}}/{{
form.dispatchAmount == null || form.dispatchAmount === undefined ? 0 : form.dispatchAmount
}}/{{ form.completeAmount }}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="工艺路线:">{{ form.dispatchName }}</el-form-item>
<el-form-item label="成品名称:">{{ form.materialName }}</el-form-item>
<el-form-item label="计划结束时间:">{{ form.planEndTime }}</el-form-item>
<el-form-item label="任务状态:">
<template #default="scope">
</template>
</el-form-item>
</el-col>
</el-row>
<el-divider content-position="left"><span style="font-weight: bold; font-size: larger;">派工信息</span>
</el-divider>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button icon="el-icon-plus" size="small" type="primary" @click="handleAddMesProductPlan"
v-if="form.orderStatus!==ORDER_STATUS.FINISHED && form.orderStatus!=ORDER_STATUS.RECALLED && form.orderStatus!=ORDER_STATUS.DELETED">
新增
</el-button>
</el-col>
</el-row>
<el-table ref="mesProductPlan" :data="mesProductPlanList"
:row-class-name="rowMesProductPlanIndex" @selection-change="handleMesProductPlanSelectionChange"
:tree-props="{children: 'children'}"
style="width: 100%;margin-bottom: 20px;"
row-key="id"
border
default-expand-all
>
<el-table-column label="序号" type="index" align="center">
</el-table-column>
<el-table-column
width="80"
label="删除"
type=""
>
<template #default="scope">
<el-button type="danger" icon="el-icon-delete" @click="handleDeleteMesProductPlan(scope)"
v-if="scope.row.firstFlag != null && scope.row.firstFlag === '1'
&& form.orderStatus!==ORDER_STATUS.FINISHED && form.orderStatus!==ORDER_STATUS.RECALLED && form.orderStatus!==ORDER_STATUS.DELETED"></el-button>
</template>
</el-table-column>
<!-- <el-table-column-->
<!-- width="80"-->
<!-- type=""-->
<!-- label="添加"-->
<!-- >-->
<!-- <template #default="scope" v-if="">-->
<!-- <el-button type="primary" icon="el-icon-plus" @click="addProcessUser(scope)"-->
<!-- v-if="(scope.row.children != null && scope.row.children !== undefined)-->
<!-- && scope.row.processType!== PROCESS_TYPE.AUTO && scope.row.displayFlag !== DISPLAY_FLAG.NO"-->
<!-- :disabled="scope.row.addFlag !=='1'-->
<!-- || form.orderStatus===ORDER_STATUS.FINISHED || form.orderStatus===ORDER_STATUS.RECALLED || form.orderStatus===ORDER_STATUS.DELETED">-->
<!-- </el-button>-->
<!-- </template>-->
<!-- </el-table-column>-->
<el-table-column
width="50"
>
<!-- <template #default="scope">-->
<!-- <el-button type="primary" icon="el-icon-plus" @click="add(scope)"></el-button>-->
<!-- </template>-->
</el-table-column>
<el-table-column align="center" label="派工单号" prop="dispatchCode" width="230">
<template #default="scope">
<el-input v-model="scope.row.dispatchCode" :disabled="true"
v-if="scope.row.children != null && scope.row.children !== undefined"/>
</template>
</el-table-column>
<el-table-column align="center" label="工序" prop="processName" width="140">
<template #default="scope">
<el-input v-model="scope.row.processName" :disabled="true"
v-if="scope.row.children != null && scope.row.children !== undefined"/>
</template>
</el-table-column>
<el-table-column align="center" label="步骤" prop="processOrder">
<template #default="scope">
<el-input v-model="scope.row.processOrder" :disabled="true"
v-if="scope.row.children != null && scope.row.children !== undefined"/>
</template>
</el-table-column>
<el-table-column align="center" label="派工数量" prop="dispatchAmount" width="100">
<template #default="scope">
<el-input v-model="scope.row.dispatchAmount" :disabled="scope.row.oldRowFlag"
v-if="scope.row.children != null && scope.row.children !== undefined
&& scope.row.firstFlag != null && scope.row.firstFlag === '1'"
/>
</template>
</el-table-column>
<!-- <el-table-column align="center" label="用户" prop="userId" width="140">
<template #default="scope">
<el-select v-model="scope.row.userId" placeholder="请选择用户"
v-if="scope.row.children == null || scope.row.children === undefined"
:disabled="scope.row.planId != null && scope.row.planId !== undefined && scope.row.planId !== ''"
>
<el-option
v-for="item in processUsers[scope.row.processId]"
:key="item.userId"
:label="item.userName"
:value="item.userId"
></el-option>
</el-select>
</template>
</el-table-column>-->
<el-table-column align="center" label="工位" prop="releaseId" width="140">
<template #default="scope">
<el-select v-model="scope.row.releaseId" placeholder="请选择"
v-if="scope.row.children == null || scope.row.children === undefined"
:disabled="scope.row.planId != null && scope.row.planId !== undefined && scope.row.planId !== ''"
>
<el-option
v-for="item in processStations[scope.row.processId]"
:key="item.stationId"
:label="item.stationName"
:value="item.stationId"
></el-option>
</el-select>
</template>
</el-table-column>
<el-table-column align="center" label="派工标准工时(小时)" prop="productionTime" width="180">
<template #default="scope">
<el-input-number style="width:150px;" :min="0" v-model="scope.row.productionTime"
:disabled="(scope.row.processType === PROCESS_TYPE.MANUAL && scope.row.children != null && scope.row.children !== undefined)
|| scope.row.planStatus=== PLAN_STATUS.FINISHED || form.orderStatus===ORDER_STATUS.FINISHED || form.orderStatus===ORDER_STATUS.RECALLED || form.orderStatus===ORDER_STATUS.DELETED"/>
</template>
</el-table-column>
<el-table-column align="center" label="计划开始时间" prop="planBeginTime" width="230">
<template #default="scope">
<el-date-picker v-model="scope.row.planBeginTime" style="width:200px;"
:disabled="(scope.row.processType === PROCESS_TYPE.MANUAL && scope.row.children != null && scope.row.children !== undefined)
|| scope.row.planStatus=== PLAN_STATUS.FINISHED || form.orderStatus===ORDER_STATUS.FINISHED || form.orderStatus===ORDER_STATUS.RECALLED || form.orderStatus===ORDER_STATUS.DELETED"
clearable
placeholder="请选择计划开始时间"
type="datetime" value-format="yyyy-MM-dd HH:mm:ss"
/>
</template>
</el-table-column>
<el-table-column align="center" label="计划完成时间" prop="planEndTime" width="230">
<template #default="scope">
<el-date-picker v-model="scope.row.planEndTime" style="width:200px;"
:disabled="(scope.row.processType === PROCESS_TYPE.MANUAL && scope.row.children != null && scope.row.children !== undefined)
|| scope.row.planStatus=== PLAN_STATUS.FINISHED || form.orderStatus===ORDER_STATUS.FINISHED || form.orderStatus===ORDER_STATUS.RECALLED || form.orderStatus===ORDER_STATUS.DELETED"
clearable
placeholder="请选择计划完成时间"
type="datetime" value-format="yyyy-MM-dd HH:mm:ss"/>
</template>
</el-table-column>
<el-table-column align="center" label="状态" prop="planStatus" width="150">
<template #default="scope">
{{scope.row.planStatus}}
</template>
</el-table-column>
<el-table-column align="center" class-name="small-padding fixed-width" label="操作" width="100">
<template #default="scope">
<el-button
icon="el-icon-delete"
size="small"
type="danger"
@click="handleDeleteDispatchUser(scope.row)"
v-if="(scope.row.children == null || false) "
:disabled="(scope.row.planStatus !== PLAN_STATUS.TO_DISPATCH && scope.row.planStatus !== PLAN_STATUS.DISPATCHED) || form.orderStatus===ORDER_STATUS.FINISHED || form.orderStatus===ORDER_STATUS.RECALLED || form.orderStatus===ORDER_STATUS.DELETED"
>删除
</el-button>
</template>
</el-table-column>
</el-table>
</el-form>
<el-form label-width="100px">
<el-form-item style="text-align: center;margin-left:-100px;margin-top:10px;">
<el-button type="primary" @click="submitForm()"
v-if="form.orderStatus!==ORDER_STATUS.FINISHED && form.orderStatus!==ORDER_STATUS.RECALLED && form.orderStatus!==ORDER_STATUS.DELETED">
提交
</el-button>
<el-button @click="close()"></el-button>
</el-form-item>
</el-form>
</el-card>
</div>
</template>
<script>
import { getOrderInfo } from "@/api/mes/orderInfo";
import { getBaseRouteProcesses, getDispatchCode, selectProductPlans } from '@/api/mes/planInfo';
import { getProdBaseProcessUserList } from '@/api/mes/prodBaseProcessUser';
import { getStationInfoList } from '@/api/mes/baseStationInfo';
import { getProdLineList } from '@/api/mes/baseProdLineInfo';
import { getBaseRouteList } from '@/api/mes/baseRoute';
import { getProcessInfoList } from '@/api/mes/baseProcessInfo';
let id = 0
export default {
name: "productPlanEdit",
dicts: ['plan_status', 'product_status', 'mes_dispatch_flag'],
props: {
value: [String, Object, Array, Number],
// sop文件数量限制
sopLimit: {
type: Number,
default: 20,
},
// 是否显示提示
isShowTip: {
type: Boolean,
default: true
}
},
data() {
return {
blueprintModel: false,
sopViewModel: false,
pictureDetailModel: false,
// 图片预览地址
dialogImageUrl: '',
// 非单个禁用
single: true,
checkedMesProductPlanList: [],
// 选中选项卡的 name
activeName: "columnInfo",
// 表格的高度
tableHeight: document.documentElement.scrollHeight - 245 + "px",
// 表信息
tables: [],
// 表列信息
columns: [],
// 生产计划表格数据
mesProductPlanList: [],
//待删除的生产计划ID
toDeletedPlanIds: [],
productPlanData: {},
// 表详细信息
info: {},
// 表单参数
form: {},
//自动化工序标识2楼和3楼
autoProcessFlag: false,
// 表单校验
rules: {
productOrderId: [
{required: true, message: "生产工单ID不能为空", trigger: "blur"}
],
planCode: [
{required: true, message: "计划编号不能为空", trigger: "blur"}
],
dispatchCode: [
{required: true, message: "派工单号不能为空", trigger: "blur"}
],
materialId: [
{required: true, message: "物料ID不能为空", trigger: "blur"}
],
materialBomId: [
{required: true, message: "物料bomID不能为空", trigger: "blur"}
],
stationId: [
{required: true, message: "工位ID不能为空", trigger: "blur"}
],
planStatus: [
{required: true, message: "计划状态不能为空", trigger: "change"}
],
isFlag: [
{required: true, message: "是否标识不能为空", trigger: "change"}
],
},
// 文件列表
fileList: [],
// 根据工序和派工单号分组Sop文件
groupSopFile: {},
// 根据工序和派工单号分组Sop文件列表
groupSopFileList: {},
// 上传SOP文件回调列表
uploadSopList: [],
// 根据工序和派工单号分组图纸文件
groupAttachFile: {},
// 根据工序和派工单号分组图纸文件列表
groupAttachFileList: {},
// 上传图纸文件回调列表
uploadAttachList: {},
previewSopFlag: {},//是否预览过SOP
previewDrawingFlag: {},//是否预览过图纸
// SOP文件大小限制(MB)
sopFileSize: 50,
// SOP文件类型,
sopFileType: ["png", "jpg", "jpeg"],
// 图纸文件大小限制(MB)
drawingFileSize: 50,
// 图纸文件类型, 例如['png', 'jpg', 'jpeg']
drawingFileType: ["dxf", "dwg"],
//文件上传-生产派工对象
addProductPlanObject: {},
headers: {
Authorization: "Bearer " ,
},
PROCESS_ID: {
BENDING_PROCESS_ID: 42
},
PROCESS_TYPE: {
MANUAL: '1',
AUTO: '3',
},
DISPLAY_FLAG: {
YES: '1',
NO: '0',
},
PLAN_STATUS: {
TO_DISPATCH: '0',//待派工
DISPATCHED: '1',//已派工
STARTED: '2',//已开始
FINISHED: '3' //已完成
},
ORDER_STATUS: {
TO_PUBLISHED: '0',//待发布
PUBLISHED: '1',//已发布
FINISHED: '2',//已完成
STARTED: '3',//已开始
PAUSE: '4',//已暂停
RECALLED: '8',//已撤回
DELETED: '9',//已删除
},
SALE_TYPE: {
INTERNAL: '2',//对内生产
},
id: 1,
ATTACH_TYPE: {
DRAWING: "1",//附件类别:加工图纸
SOP: "2",//附件类别:SOP
},
processUsers: [],
processStations:[],
//物料BOMList
attachInfoList: [],
//选中的BOMList
materialBomAttachIdList: [],
};
},
created() {
this.fetchOrderInfo();
},
methods: {
async fetchOrderInfo() {
const productOrderId = this.$route.params.productOrderId;
console.log("productOrderId", productOrderId);
if (productOrderId) {
try {
const response = await getOrderInfo(productOrderId);
this.form = response.data;
this.getProcessJoin(productOrderId);
} catch (error) {
console.error("Failed to fetch order info:", error);
}
}
},
async getProcessJoin(productOrderId) {
const routeId = this.form.dispatchId;
const processId = this.form.processId;
try {
const res = await getProdBaseProcessUserList({ routeId });
res.data.forEach(processUser => {
if (!this.processUsers[processUser.processId]) {
this.processUsers[processUser.processId] = [];
}
this.processUsers[processUser.processId].push(processUser);
});
console.log("this.processUsers", this.processUsers);
const station = await getStationInfoList({ processId });
console.log("getStationInfoList", station);
station.data.forEach(processStation => {
if (!this.processStations[processStation.processId]){
this.processStations[processStation.processId] = [];
}
this.processStations[processStation.processId].push(processStation);
});
const productPlansResponse = await selectProductPlans({ productOrderId: productOrderId });
this.groupProductPlans(productPlansResponse.data);
} catch (error) {
console.error("Failed to fetch process users or product plans:", error);
}
},
groupProductPlans(productPlans) {
const groupedProductPlans = {};
productPlans.forEach(productPlan => {
const key = `${productPlan.dispatchCode}-${productPlan.processId}`;
if (!groupedProductPlans[key]) {
groupedProductPlans[key] = [];
}
groupedProductPlans[key].push(productPlan);
});
let firstDispatch = {};
for (let dispatchCodeProcessId in groupedProductPlans) {
let productPlansByDispatch = groupedProductPlans[dispatchCodeProcessId];
// console.log(processId + ": " + JSON.stringify(groupedProductPlans[processId]));
let obj = {};
//每个派工单第一个工序才显示删除按钮
let dispatchCode = dispatchCodeProcessId.split("-")[0];
if (!firstDispatch[dispatchCode]) {
firstDispatch[dispatchCode] = "1";
obj.firstFlag = "1";
}
obj.id = this.id
this.id = this.id + 1;
obj.addFlag = "0";
let i = 0;
let processType;
productPlansByDispatch.forEach(groupedProductPlan => {
if (groupedProductPlan.planStatus !== this.PLAN_STATUS.FINISHED) {
obj.addFlag = "1";
}
processType = groupedProductPlan.processType;
groupedProductPlan.id = this.id;
this.id = this.id + 1;
groupedProductPlan.productionTime = parseFloat((groupedProductPlan.productionTime / 60 / 60).toFixed(1));
/* obj.sopId = groupedProductPlan.sopId;*/
obj.attachId = groupedProductPlan.attachId;
obj.productionTime = parseFloat((groupedProductPlan.processProductionTime / 60 / 60).toFixed(1));
if (i === 0 || groupedProductPlan.processType !== this.PROCESS_TYPE.MANUAL) {
obj.dispatchCode = groupedProductPlan.dispatchCode;
obj.planCode = groupedProductPlan.planCode;
obj.dispatchAmount = groupedProductPlan.dispatchAmount;
obj.processId = groupedProductPlan.processId;
obj.processName = groupedProductPlan.processName;
obj.lastProcessId = groupedProductPlan.lastProcessId;
obj.processType = groupedProductPlan.processType;
obj.processOrder = groupedProductPlan.processOrder;
/* obj.displayFlag = groupedProductPlan.displayFlag;*/
obj.finalProcessFlag = groupedProductPlan.finalProcessFlag;
obj.attachId = groupedProductPlan.attachId;
/* obj.sopId = groupedProductPlan.sopId;*/
obj.planBeginTime = this.form.planBeginTime;
obj.planEndTime = this.form.planEndTime;
obj.planStatus = groupedProductPlan.planStatus;
// obj.dispatchAmount = this.form.planAmount - this.form.dispatchAmount;
obj.materialId = this.form.materialId;
obj.materialBomId = this.form.materialBomId;
obj.productOrderId = this.form.productOrderId;
obj.saleOrderId = this.form.saleOrderId;
obj.saleorderCode = this.form.saleorderCode;
// 新添加列标识 false=新添加true=历史行
obj.oldRowFlag = true;
if (groupedProductPlan.processType !== this.PROCESS_TYPE.MANUAL) {
let cloneObj = deepClone(obj);
cloneObj.id = this.id
cloneObj.planId = groupedProductPlan.planId;
cloneObj.productionTime = parseFloat((groupedProductPlan.productionTime / 60 / 60).toFixed(1));
this.id = this.id + 1;
cloneObj.children = [];
this.mesProductPlanList.push(cloneObj);
}
i++;
}
});
if (processType === this.PROCESS_TYPE.MANUAL) {
obj.children = productPlansByDispatch;
this.mesProductPlanList.push(obj);
}
}
this.getId(this.mesProductPlanList);
console.log(this.mesProductPlanList)
},
async getId(arr) {
arr.forEach(element => {
this.id = this.id + 1;
if (Array.isArray(element.children)) {
this.getId(element.children)
}
})
},
/** 提交按钮 */
submitForm() {
// let dataList = this.mesProductPlanList.filter(plan => !plan.oldRowFlag);
if (this.mesProductPlanList.length === 0) {
this.$modal.msgError("无派工信息提交");
return;
}
let dataList = this.mesProductPlanList;
let toUpdatedProductPlans = [];
let undispathDesc;
let currentDispatchAmount = 0;
let planDispatchAmount = 0;
for (let i = 0; i < dataList.length; i++) {
let e = dataList[i];
if (e.firstFlag && e.firstFlag === "1") {//第一个标识,校验派工数量
let dispatchAmount = e.dispatchAmount;
const numericAmount = parseInt(dispatchAmount, 10);
if (!this.isPositiveInteger(numericAmount) || numericAmount <= 0) {
this.$modal.msgError("派工数量须为大于等于0的正整数");
return;
}
planDispatchAmount = numericAmount;
if (e.newFlag && e.newFlag === "1") {
currentDispatchAmount += numericAmount;
}
}
let dispatchFlag = false;
undispathDesc = "派工单号为[" + e.dispatchCode + "],工序为[" + e.processName + "],请选择用户派工";
if (e.processType !== this.PROCESS_TYPE.AUTO) {
if (!e.children || e.children.length <= 0) {//不是自动话产线需要派工到人
this.$modal.msgError(undispathDesc);
return;
}
for (let j = 0; j < e.children.length; j++) {
let processUser = e.children[j];
let toUpdatedProductPlan = deepClone(e);
if (processUser.userId && processUser.userId !== '') {
toUpdatedProductPlan.userId = processUser.userId;
if (processUser.planBeginTime && processUser.planBeginTime !== '' &&
(processUser.planBeginTime < this.form.planBeginTime || processUser.planBeginTime > this.form.planEndTime)){
this.$modal.msgError("序号" + (parseInt(e.index) + 1) + ":计划开始时间不在生产工单时间范围内");
return;
}
if (processUser.planEndTime && processUser.planEndTime !== '' &&
(processUser.planEndTime < this.form.planBeginTime || processUser.planEndTime > this.form.planEndTime)) {
this.$modal.msgError("序号" + (parseInt(e.index) + 1) + ":计划结束时间不在生产工单时间范围内");
return;
}
if (processUser.planBeginTime && processUser.planBeginTime !== '' &&
processUser.planEndTime && processUser.planEndTime !== '' &&
processUser.planBeginTime >= processUser.planEndTime) {
this.$modal.msgError("序号" + (parseInt(e.index) + 1) + ":计划开始时间须小于计划结束时间");
return;
}
toUpdatedProductPlan.planBeginTime = processUser.planBeginTime;
toUpdatedProductPlan.planEndTime = processUser.planEndTime;
toUpdatedProductPlan.planId = processUser.planId;
toUpdatedProductPlan.planStatus = processUser.planStatus;
toUpdatedProductPlan.attachId = processUser.attachId;
toUpdatedProductPlan.sopId = processUser.sopId;
toUpdatedProductPlan.planAmount = planDispatchAmount;
toUpdatedProductPlan.dispatchAmount = planDispatchAmount;
toUpdatedProductPlan.children = null;
let productionTimeHour = processUser.productionTime;
let productionTimeSecond = productionTimeHour * 60 * 60;
toUpdatedProductPlan.productionTime = productionTimeSecond;
toUpdatedProductPlans.push(toUpdatedProductPlan);
dispatchFlag = true;
} else {
this.$modal.msgError(undispathDesc);
return;
}
}
} else {
toUpdatedProductPlans.push(e);
}
if (toUpdatedProductPlans.length <= 0) {
this.$modal.msgError("无派工信息提交");
return;
}
}
//校验派工数量是否大于生产任务计划数量
let dispatchedAmount = this.form.dispatchAmount + currentDispatchAmount;//加上此次派工的数量,总共的派工数量
if (dispatchedAmount > this.form.planAmount) {
this.$modal.msgError("派工数量之和需小于等于该生产任务计划数量!");
return;
}
checkAddMesProductPlanList(
{
productOrderId: this.form.productOrderId,
dispatchAmount: currentDispatchAmount,
saleOrderId: this.form.saleOrderId,
mesProductPlanList: toUpdatedProductPlans,
})
.then(res => {
if (res?.msg && res.msg !== '') {
this.$modal.confirm('有以下用户派工冲突,请确认是否继续派工?' + res.msg).then(function () {
orderAddMesProductPlanList(currentDispatchAmount, toUpdatedProductPlans);
return true;
}).then(() => {
}).catch(() => {
});
} else {
this.orderAddMesProductPlanList(currentDispatchAmount, toUpdatedProductPlans);
}
});
},
orderAddMesProductPlanList(currentDispatchAmount, toUpdatedProductPlans) {
orderAddMesProductPlanList(
{
productOrderId: this.form.productOrderId,
dispatchAmount: currentDispatchAmount,
mesProductPlanList: toUpdatedProductPlans,
toDeletedPlanIds: this.toDeletedPlanIds
})
.then(res => {
this.$modal.msgSuccess(res.msg);
this.close();
});
},
/** 删除按钮操作 */
handleDeleteMesProductPlan(scope) {
let dispatchCode = scope.row.dispatchCode;
this.$modal.confirm('是否确认删除生产派工单号为"' + dispatchCode + '"的数据项?').then(function () {
return true;
}).then(() => {
if (this.form.orderStatus === this.ORDER_STATUS.RECALLED) {
this.$modal.msgError("此生产任务已经撤回,不能删除");
return;
}
if (this.form.orderStatus === this.ORDER_STATUS.FINISHED) {
this.$modal.msgError("此生产任务已经完成,不能删除");
return;
}
if (this.form.orderStatus === this.ORDER_STATUS.DELETED) {
this.$modal.msgError("此生产任务已经删除,不能删除");
return;
}
if (scope.row.newFlag != null || scope.row.newFlag === '1') {
//新增删除
this.mesProductPlanList = this.mesProductPlanList.filter(function (item) {
return scope.row.dispatchCode !== item.dispatchCode
});
} else {
//历史删除
let dispatchSum = 0; //需要减去的派工数量
try {
const planIds = this.mesProductPlanList.filter(function (item) {
return scope.row.dispatchCode === item.dispatchCode
}).map(item => {
if (item.planStatus !== this.PLAN_STATUS.DISPATCHED && item.planStatus !== this.PLAN_STATUS.TO_DISPATCH) {
throw Error("只能删除还未开始过状态的生产派工单!");
}
dispatchSum = item.dispatchAmount;//派工数量每一个工序都一样
return item.planId;
});
deleteProductPlansByDispatchCode({
productOrderId: this.form.productOrderId,
dispatchCode: dispatchCode,
dispatchAmount: dispatchSum
}).then(res => {
this.mesProductPlanList = this.mesProductPlanList.filter(function (item) {
return dispatchCode !== item.dispatchCode
});
this.form.dispatchAmount = this.form.dispatchAmount - dispatchSum;
this.$modal.msgSuccess("删除成功");
});
} catch (e) {
this.$modal.msgError(e);
}
}
}).catch(() => {
});
},
/** 生产计划明细序号 */
rowMesProductPlanIndex({row, rowIndex}) {
row.index = rowIndex + 1;
},
/** 复选框选中数据 */
handleMesProductPlanSelectionChange(selection) {
this.checkedMesProductPlanList = selection
this.single = selection.length !== 1
},
/** 关闭按钮 */
close() {
const obj = {path: "/mes/prod/orderInfo", query: {t: Date.now(), queryParams: this.queryParams}};
this.$tab.closeOpenPage(obj);
},
/** 生产计划添加按钮操作 */
async handleAddMesProductPlan() {
let dispatchCode = "";
dispatchCode = await getDispatchCode().then(res => res.msg);
console.log("dispatchCode", dispatchCode);
const baseRouteProcesses = await getBaseRouteProcesses({ routeId: this.form.dispatchId });
let lastProcessId = null;
let i = 0;
for (const e of baseRouteProcesses.data) {
let obj = {};
if (i === 0) {
obj.firstFlag = "1"; // 设置第一条标识
i++;
}
obj.id = this.id;
this.id = this.id + 1;
obj.dispatchCode = dispatchCode;
obj.processId = e.processId;
obj.processName = e.processName;
obj.processType = e.processType;
obj.processOrder = e.processOrder;
obj.productionTime = e.productionTime ? parseFloat((e.productionTime / 60 / 60).toFixed(1)) : 0;
obj.planBeginTime = this.form.planBeginTime;
obj.planEndTime = this.form.planEndTime;
obj.planStatus = '1';
if (this.form.saleType === this.SALE_TYPE.INTERNAL) {
obj.materialId = this.form.produceMaterialId;
} else {
obj.materialId = this.form.materialId;
}
obj.materialBomId = this.form.materialBomId;
obj.productOrderId = this.form.productOrderId;
obj.saleOrderId = this.form.saleOrderId;
obj.saleorderCode = this.form.saleorderCode;
obj.newFlag = "1"; // 代表新增
obj.addFlag = "1";
if (e.processType === this.PROCESS_TYPE.AUTO) {
obj.children = [];
} else {
obj.children = [{
id: this.id,
dispatchCode: obj.dispatchCode,
processId: obj.processId,
materialBomId: obj.materialBomId,
planStatus: this.PLAN_STATUS.DISPATCHED,
productionTime: obj.productionTime,
userId: null
}]
}
this.id += 1;
// 获取当前 processId 对应的工位信息
const stationResponse = await getStationInfoList({ processId: e.processId });
if (stationResponse.data && stationResponse.data.length > 0) {
this.processStations[e.processId] = stationResponse.data.map(station => ({
stationId: station.stationId,
stationName: station.stationName
}));
}
// 上一工序ID
if (lastProcessId == null) {
obj.lastProcessId = 0;
} else if (lastProcessId === obj.processId) {
obj.lastProcessId = this.mesProductPlanList[this.mesProductPlanList.length - 1].lastProcessId;
} else {
obj.lastProcessId = lastProcessId;
}
lastProcessId = e.processId;
obj.oldRowFlag = false;
this.mesProductPlanList.push(obj);
}
this.getId(this.mesProductPlanList);
console.log(this.mesProductPlanList);
},
isPositiveInteger(value) {
// 使用正则表达式匹配正整数
return /^[0-9]\d*$/.test(value);
},
handleDeleteDispatchUser(row) {
this.mesProductPlanList.forEach(mesProductPlan => {
mesProductPlan.children = mesProductPlan.children.filter(item => item.id !== row.id);
});
if (row.planId != null && row.planId !== '') {
this.toDeletedPlanIds.push(row.planId);
}
},
isOptionDisabled(attachId) {
// 根据业务逻辑,禁用某些选项的删除
return this.materialBomAttachIdList.includes(attachId); // 例如可以禁用某些特定选项
}
},
dispatchTypeList:[],
async dispatchTypeFunction () {
const dispatchTypeRes = await proxy?.getConfigKey('sys.orderInfo.dispatchType');
initFormData.dispatchType = dispatchTypeRes.data;
if (dispatchTypeRes.data === '1'){
dispatchTypeName.value = "产线";
const res = await getProdLineList(null);
dispatchTypeList.value = res.data.map(item => ({
id: item.prodLineId,
name: item.prodLineName
}));
} else if (dispatchTypeRes.data === '2'){
dispatchTypeName.value = "工艺路线";
const res = await getBaseRouteList(null);
dispatchTypeList.value = res.data.map(item => ({
id: item.routeId,
name: item.routeName
}));
} else if (dispatchTypeRes.data === '3'){
dispatchTypeName.value = "工序";
const res = await getProcessInfoList(null);
dispatchTypeList.value = res.data.map(item => ({
id: item.processId,
name: item.processName
}));
}
},
}
;
onMounted(() => {
dispatchTypeFunction(); //派工类型(1产线 2工艺路线 3工序)
});
</script>
<style scoped>
/deep/.el-icon-close{display:none}
/deep/.el-upload{
display: none;
}
</style>