| | |
| | | v-model="form.npsNo" |
| | | class="form-input" /> |
| | | </el-form-item> |
| | | <el-form-item label="班组" |
| | | prop="teamName" |
| | | required |
| | | class="form-item"> |
| | | <el-select v-model="form.teamName" |
| | | placeholder="请选择班组" |
| | | class="form-select"> |
| | | <el-option label="白班" |
| | | value="白班" /> |
| | | <el-option label="夜班" |
| | | value="夜班" /> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="产品编码" |
| | | prop="materialCode" |
| | | class="form-item"> |
| | |
| | | v-model="form.specification" |
| | | class="form-input" /> |
| | | </el-form-item> |
| | | <el-form-item label="创建时间" |
| | | prop="createTime" |
| | | class="form-item"> |
| | | <el-date-picker disabled |
| | | v-model="form.createTime" |
| | | type="datetime" |
| | | placeholder="请选择创建时间" |
| | | class="form-input" /> |
| | | </el-form-item> |
| | | <el-form-item label="班组" |
| | | prop="teamName" |
| | | required |
| | | class="form-item"> |
| | | <el-select v-model="form.teamName" |
| | | placeholder="请选择班组" |
| | | class="form-select"> |
| | | <el-option label="白班" |
| | | value="白班" /> |
| | | <el-option label="夜班" |
| | | value="夜班" /> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="创建人" |
| | | prop="createBy" |
| | | required |
| | |
| | | :label="user.nickName || user.userName" |
| | | :value="user.nickName || user.userName" /> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="创建时间" |
| | | prop="createTime" |
| | | class="form-item"> |
| | | <el-date-picker disabled |
| | | v-model="form.createTime" |
| | | type="datetime" |
| | | placeholder="请选择创建时间" |
| | | class="form-input" /> |
| | | </el-form-item> |
| | | </div> |
| | | </el-form> |
| | |
| | | @click="handleProcessClick(process.processId)"> |
| | | <span class="process-name">{{ process.processName }}</span> |
| | | <span class="process-badge" |
| | | v-if="getProcessInfo(parseInt(process.processId)).postPersonnel"> |
| | | {{ getProcessInfo(parseInt(process.processId)).postPersonnel }} |
| | | v-if="getProcessInfo(parseInt(process.processId)).postName"> |
| | | {{ getProcessInfo(parseInt(process.processId)).postName }} |
| | | </span> |
| | | </div> |
| | | </div> |
| | |
| | | <div class="form-grid"> |
| | | <el-form-item label="岗位人员" |
| | | class="form-item"> |
| | | <el-select v-model="getProcessInfo(parseInt(activeProcessId)).postPersonnel" |
| | | <el-select v-model="getProcessInfo(parseInt(activeProcessId)).postName" |
| | | placeholder="请选择岗位人员" |
| | | class="form-select" |
| | | :loading="userLoading"> |
| | |
| | | </el-form-item> |
| | | <el-form-item label="设备异常情况" |
| | | class="form-item"> |
| | | <el-input v-model="getProcessInfo(parseInt(activeProcessId)).equipmentAbnormality" |
| | | <el-input v-model="getProcessInfo(parseInt(activeProcessId)).equipmentMalfunction" |
| | | placeholder="请输入设备异常情况" |
| | | type="textarea" |
| | | :rows="2" |
| | |
| | | </el-form-item> |
| | | <el-form-item label="当班设备处置" |
| | | class="form-item"> |
| | | <el-input v-model="getProcessInfo(parseInt(activeProcessId)).equipmentHandling" |
| | | <el-input v-model="getProcessInfo(parseInt(activeProcessId)).equipmentDisposal" |
| | | placeholder="请输入当班设备处置" |
| | | type="textarea" |
| | | :rows="2" |
| | |
| | | </el-form-item> |
| | | <el-form-item label="工艺人员交待" |
| | | class="form-item"> |
| | | <el-input v-model="getProcessInfo(parseInt(activeProcessId)).processInstructions" |
| | | <el-input v-model="getProcessInfo(parseInt(activeProcessId)).processExplained" |
| | | placeholder="请输入工艺人员交待" |
| | | type="textarea" |
| | | :rows="2" |
| | |
| | | :key="param.id" |
| | | :label="param.paramName" |
| | | :label-width="120" |
| | | :prop="`paramGroups.${activeProcessId}.${index}.${param.id}`" |
| | | class="param-item"> |
| | | <template v-if="param.paramType == '1'"> |
| | | <!-- 数字类型 --> |
| | |
| | | <!-- 参数列 --> |
| | | <el-table-column v-for="param in params" |
| | | :key="param.id" |
| | | :label="param.paramName" |
| | | min-width="200"> |
| | | :min-width="200"> |
| | | <template #header> |
| | | <span>{{ param.paramName }}</span> |
| | | </template> |
| | | <template #default="{ row }"> |
| | | <template v-if="param.paramType == '1'"> |
| | | <!-- 数字类型 --> |
| | |
| | | <el-input-number v-model="form.outputVolume" |
| | | :min="0" |
| | | :precision="2" |
| | | @change="handleVolumeChange" |
| | | class="volume-input" /> |
| | | <span class="volume-unit">方</span> |
| | | </div> |
| | |
| | | <el-input-number v-model="form.unqualifiedVolume" |
| | | :min="0" |
| | | :precision="2" |
| | | @change="handleVolumeChange" |
| | | class="volume-input" /> |
| | | <span class="volume-unit">方</span> |
| | | </div> |
| | |
| | | import { useRouter, useRoute } from "vue-router"; |
| | | import { getDicts } from "@/api/system/dict/data"; |
| | | import { productOrderListPage } from "@/api/productionManagement/productionOrder.js"; |
| | | import { productionRecordAdd } from "@/api/productionManagement/productProcessRoute.js"; |
| | | import { |
| | | productionRecordAdd, |
| | | productionRecordAddSubmit, |
| | | } from "@/api/productionManagement/productProcessRoute.js"; |
| | | import { userListNoPage } from "@/api/system/user.js"; |
| | | import { getInfo } from "@/api/login.js"; |
| | | import { |
| | | Check, |
| | | Close, |
| | | Delete, |
| | | Plus, |
| | | ArrowLeft, |
| | | ArrowRight, |
| | | Loading, |
| | | Upload, |
| | | } from "@element-plus/icons-vue"; |
| | | import request from "@/utils/request"; |
| | | import { getToken } from "@/utils/auth"; |
| | | import dayjs from "dayjs"; |
| | | |
| | | const router = useRouter(); |
| | | |
| | |
| | | id: data.id || undefined, |
| | | orderId: data.orderId || "", |
| | | npsNo: data.npsNo || "", |
| | | teamName: data.teamName || "", |
| | | teamName: data.teamName || "白班", |
| | | materialCode: data.materialCode || "", |
| | | productName: data.productName || "", |
| | | specification: data.specification || "", |
| | |
| | | .finally(() => { |
| | | orderLoading.value = false; |
| | | }); |
| | | }; |
| | | const handleVolumeChange = () => { |
| | | form.completedVolume = form.outputVolume - form.unqualifiedVolume; |
| | | }; |
| | | |
| | | // 处理生产订单选择 |
| | |
| | | processList.value.forEach(process => { |
| | | form.processStructures[process.processId] = |
| | | process.orderStructureVos || []; |
| | | loadParams(process.processId, orderId); |
| | | }); |
| | | // 如果有工序,默认选择第一个 |
| | | if (processList.value.length > 0) { |
| | |
| | | processId.value = firstProcess.processId; |
| | | form.processId = firstProcess.processId; |
| | | // 加载第一个工序的参数 |
| | | loadParams(firstProcess.processId, orderId); |
| | | // loadParams(firstProcess.processId, orderId); |
| | | } |
| | | } |
| | | }) |
| | |
| | | } |
| | | if (!form.processInfo[processId]) { |
| | | form.processInfo[processId] = { |
| | | postPersonnel: "", |
| | | equipmentAbnormality: "", |
| | | equipmentHandling: "", |
| | | processInstructions: "", |
| | | postName: "", |
| | | equipmentMalfunction: "", |
| | | equipmentDisposal: "", |
| | | processExplained: "", |
| | | files: [], |
| | | consumables: {}, |
| | | }; |
| | |
| | | }; |
| | | |
| | | // 处理文件变更 |
| | | const handleFileChange = (file, fileList) => { |
| | | const handleFileChange = async (file, fileList) => { |
| | | console.log(file, fileList); |
| | | const formData = new FormData(); |
| | | formData.append("file", file.raw); |
| | | |
| | | const uploadRes = await request({ |
| | | url: "/file/upload", |
| | | method: "post", |
| | | data: formData, |
| | | headers: { |
| | | "Content-Type": "multipart/form-data", |
| | | Authorization: `Bearer ${getToken()}`, |
| | | }, |
| | | }); |
| | | console.log(uploadRes); |
| | | if (uploadRes.code === 200) { |
| | | const tempId = uploadRes.data.tempId; |
| | | // 将tempId存储到file对象中 |
| | | file.tempId = tempId; |
| | | } |
| | | const processId = parseInt(activeProcessId.value); |
| | | if (processId) { |
| | | const processInfo = getProcessInfo(processId); |
| | |
| | | } |
| | | }); |
| | | } else if (activeStep.value === 2) { |
| | | // 第三步:直接进入第四步 |
| | | activeStep.value = 3; |
| | | } |
| | | }; |
| | |
| | | formRef.value.validate(valid => { |
| | | if (valid) { |
| | | isSubmitting.value = true; |
| | | // 这里可以调用API进行提交 |
| | | setTimeout(() => { |
| | | ElMessage.success(data.id ? "修改成功" : "新增成功"); |
| | | router.back(); |
| | | isSubmitting.value = false; |
| | | }, 1000); |
| | | |
| | | // 构建请求参数 |
| | | const order = orderList.value.find(item => item.id === form.orderId); |
| | | console.log(order, "order"); |
| | | const submitParams = { |
| | | productOrderId: form.orderId, |
| | | productId: order ? order.productId : null, |
| | | postName: form.createBy, |
| | | schedule: form.teamName, |
| | | // reportingTime: dayjs(new Date()).format("YYYY-MM-DD HH:mm:ss"), |
| | | qualifiedQuantity: form.outputVolume - form.unqualifiedVolume, |
| | | unqualifiedQuantity: form.unqualifiedVolume, |
| | | quantity: form.outputVolume, |
| | | productionProductRouteItemDtoList: processList.value.map(process => { |
| | | const processInfo = getProcessInfo(process.processId); |
| | | const paramGroups = form.paramGroups[process.processId] || []; |
| | | const productionProductRouteItemParamDtoList = []; |
| | | |
| | | // 添加参数组 |
| | | paramGroups.forEach((group, index) => { |
| | | Object.entries(group).forEach(([paramId, value]) => { |
| | | // 从当前工序的参数列表中查找参数 |
| | | const processData = processList.value.find( |
| | | p => p.processId === process.processId |
| | | ); |
| | | const param = processData |
| | | ? processData.orderRouteItemParaVos.find( |
| | | p => p.id === parseInt(paramId) |
| | | ) |
| | | : null; |
| | | if (param) { |
| | | productionProductRouteItemParamDtoList.push({ |
| | | id: parseInt(paramId), |
| | | standardValue: param.standardValue, |
| | | minValue: param.minValue, |
| | | maxValue: param.maxValue, |
| | | productId: param.productId, |
| | | productValue: value, |
| | | sourceSort: index + 1, |
| | | unit: param.unit, |
| | | isRequired: param.isRequired, |
| | | }); |
| | | } |
| | | }); |
| | | }); |
| | | |
| | | // 添加BOM信息 |
| | | const structures = getProcessStructures(process.processId); |
| | | console.log(structures, "structures"); |
| | | structures.forEach(structure => { |
| | | const consumableValue = getConsumableValue( |
| | | process.processId, |
| | | structure.id |
| | | ); |
| | | if (consumableValue > 0) { |
| | | productionProductRouteItemParamDtoList.push({ |
| | | productId: structure.productModelId, |
| | | bomId: structure.bomId, |
| | | id: null, |
| | | productValue: consumableValue, |
| | | unit: structure.unit, |
| | | }); |
| | | } |
| | | }); |
| | | |
| | | return { |
| | | postName: processInfo.postName, |
| | | equipmentMalfunction: processInfo.equipmentMalfunction, |
| | | equipmentDisposal: processInfo.equipmentDisposal, |
| | | processExplained: processInfo.processExplained, |
| | | processId: process.processId, |
| | | productionProductRouteItemParamDtoList, |
| | | files: processInfo.files.map(file => file.tempId || file.uid), |
| | | }; |
| | | }), |
| | | }; |
| | | // 调用API进行提交 |
| | | productionRecordAddSubmit(submitParams) |
| | | .then(res => { |
| | | if (res.code === 200) { |
| | | ElMessage.success(data.id ? "修改成功" : "新增成功"); |
| | | router.back(); |
| | | } else { |
| | | ElMessage.error(res.msg || "提交失败"); |
| | | } |
| | | }) |
| | | .catch(error => { |
| | | ElMessage.error("提交失败,请稍后重试"); |
| | | console.error("提交错误:", error); |
| | | }) |
| | | .finally(() => { |
| | | isSubmitting.value = false; |
| | | }); |
| | | } |
| | | }); |
| | | }; |
| | |
| | | } |
| | | // 创建一个新的参数组,使用默认值 |
| | | const newGroup = {}; |
| | | params.value.forEach(param => { |
| | | newGroup[param.id] = param.standardValue || ""; |
| | | }); |
| | | // 从当前工序的参数列表中获取参数信息 |
| | | const process = processList.value.find( |
| | | p => p.processId === parseInt(processId) |
| | | ); |
| | | if (process) { |
| | | const processParams = process.orderRouteItemParaVos || []; |
| | | processParams.forEach(param => { |
| | | newGroup[param.id] = param.standardValue || ""; |
| | | }); |
| | | } |
| | | form.paramGroups[processId].push(newGroup); |
| | | }; |
| | | |