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

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<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>