| | |
| | | </div> |
| | | <!-- <div class="info-item"> |
| | | <span class="info-label">工单状态</span> |
| | | <span class="info-value">{{ |
| | | transferCardRowData.status === 1 ? '待确认' : |
| | | transferCardRowData.status === 2 ? '待生产' : |
| | | transferCardRowData.status === 3 ? '生产中' : |
| | | transferCardRowData.status === 4 ? '已生产' : |
| | | transferCardRowData.status |
| | | <span class="info-value">{{ |
| | | transferCardRowData.status === 1 ? '待确认' : |
| | | transferCardRowData.status === 2 ? '待生产' : |
| | | transferCardRowData.status === 3 ? '生产中' : |
| | | transferCardRowData.status === 4 ? '已生产' : |
| | | transferCardRowData.status |
| | | }}</span> |
| | | </div> --> |
| | | <div class="info-item"> |
| | |
| | | </div> |
| | | </el-dialog> |
| | | <el-dialog v-model="reportDialogVisible" |
| | | title="报工" |
| | | :title="`报工(机台:${currentReportRowData?.deviceName || '-'})`" |
| | | width="500px"> |
| | | <el-form ref="reportFormRef" |
| | | :model="reportForm" |
| | |
| | | :value="user.userId" /> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="开始时间" |
| | | prop="startTime"> |
| | | <el-date-picker v-model="reportForm.startTime" |
| | | type="datetime" |
| | | value-format="YYYY-MM-DD HH:mm:ss" |
| | | format="YYYY-MM-DD HH:mm:ss" |
| | | style="width: 300px" |
| | | placeholder="请选择开始时间" |
| | | clearable /> |
| | | </el-form-item> |
| | | <el-form-item label="结束时间" |
| | | prop="endTime"> |
| | | <el-date-picker v-model="reportForm.endTime" |
| | | type="datetime" |
| | | value-format="YYYY-MM-DD HH:mm:ss" |
| | | format="YYYY-MM-DD HH:mm:ss" |
| | | style="width: 300px" |
| | | placeholder="请选择结束时间" |
| | | clearable /> |
| | | </el-form-item> |
| | | <el-form-item label="审核人" prop="auditUserId"> |
| | | <el-select v-model="reportForm.auditUserId" |
| | | style="width: 300px" |
| | | placeholder="请选择审核人" |
| | | clearable |
| | | filterable |
| | | @change="handleReviewerIdChange"> |
| | | <el-option v-for="user in userOptions" |
| | | :key="user.userId" |
| | | :label="user.nickName" |
| | | :value="user.userId" /> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-form> |
| | | <template #footer> |
| | | <span class="dialog-footer"> |
| | |
| | | </span> |
| | | </template> |
| | | </el-dialog> |
| | | <el-dialog |
| | | v-model="auditDialogVisible" |
| | | title="审核" |
| | | width="1000px" |
| | | :close-on-click-modal="false" |
| | | > |
| | | <el-table :data="auditTableData" border style="width: 100%" v-loading="auditLoading"> |
| | | <el-table-column label="产品名称" prop="productName" min-width="140" show-overflow-tooltip /> |
| | | <el-table-column label="规格" prop="model" min-width="120" show-overflow-tooltip /> |
| | | <el-table-column label="单位" prop="unit" width="80" /> |
| | | <el-table-column label="工序名称" prop="processName" min-width="120" show-overflow-tooltip /> |
| | | <el-table-column label="需求数量" prop="planQuantity" width="110" /> |
| | | <el-table-column label="完成数量" prop="completeQuantity" width="110" /> |
| | | <el-table-column label="完成进度" prop="completionStatus" width="140"> |
| | | <template #default="{ row }"> |
| | | <el-progress |
| | | :percentage="toProgressPercentage(row?.completionStatus)" |
| | | :color="progressColor(toProgressPercentage(row?.completionStatus))" |
| | | :status="toProgressPercentage(row?.completionStatus) >= 100 ? 'success' : ''" |
| | | /> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="计划开始时间" prop="planStartTime" width="140" /> |
| | | <el-table-column label="计划结束时间" prop="planEndTime" width="140" /> |
| | | </el-table> |
| | | <template #footer> |
| | | <span class="dialog-footer"> |
| | | <el-button type="primary" :loading="auditLoading" @click="submitAudit(1)">通过</el-button> |
| | | <el-button type="danger" :loading="auditLoading" @click="submitAudit(2)">不通过</el-button> |
| | | <el-button :disabled="auditLoading" @click="auditDialogVisible = false">取消</el-button> |
| | | </span> |
| | | </template> |
| | | </el-dialog> |
| | | <FilesDia ref="workOrderFilesRef" /> |
| | | </div> |
| | | </template> |
| | | |
| | | <script setup> |
| | | import { onMounted, ref, nextTick } from "vue"; |
| | | import { ElMessageBox } from "element-plus"; |
| | | import { ElMessageBox, ElMessage } from "element-plus"; |
| | | import dayjs from "dayjs"; |
| | | import { |
| | | productWorkOrderPage, |
| | |
| | | { |
| | | label: "工序名称", |
| | | prop: "processName", |
| | | }, |
| | | { |
| | | label: "机台名称", |
| | | prop: "deviceName", |
| | | }, |
| | | { |
| | | label: "需求数量", |
| | |
| | | clickFun: row => { |
| | | handleEdit(row); |
| | | }, |
| | | // 当需求数量等于完成数量的时候,按钮不可点击 |
| | | disabled: row => Number(row?.planQuantity) === Number(row?.completeQuantity), |
| | | }, |
| | | { |
| | | name: "流转卡", |
| | |
| | | clickFun: row => { |
| | | showReportDialog(row); |
| | | }, |
| | | disabled: row => row.planQuantity <= 0, |
| | | disabled: row => Number(row?.planQuantity) <= Number(row?.completeQuantity) || row.planQuantity <= 0, |
| | | }, |
| | | // { |
| | | // name:"审核", |
| | | // color: "#f56c6c", |
| | | // clickFun: row => { |
| | | // handleAudit(row); |
| | | // }, |
| | | // disabled: row => Number(row?.auditStatus) === 1, |
| | | // } |
| | | ], |
| | | }, |
| | | ]); |
| | |
| | | const transferCardQrUrl = ref(""); |
| | | const transferCardRowData = ref(null); |
| | | const reportDialogVisible = ref(false); |
| | | const auditDialogVisible = ref(false); |
| | | const auditRowData = ref(null); |
| | | const auditTableData = ref([]); |
| | | const auditLoading = ref(false); |
| | | const workOrderFilesRef = ref(null); |
| | | const reportFormRef = ref(null); |
| | | const userOptions = ref([]); |
| | |
| | | planQuantity: 0, |
| | | quantity: null, |
| | | scrapQty: null, |
| | | startTime: "", |
| | | endTime: "", |
| | | userName: "", |
| | | workOrderId: "", |
| | | reportWork: "", |
| | |
| | | callback(); |
| | | }; |
| | | |
| | | // 审核 |
| | | const handleAudit = (row) => { |
| | | if (Number(row?.auditStatus) === 1) { |
| | | ElMessage.warning("该工单已审核"); |
| | | return; |
| | | } |
| | | auditRowData.value = row; |
| | | const workOrderNo = row?.workOrderNo; |
| | | const related = workOrderNo |
| | | ? tableData.value.filter(r => r?.workOrderNo === workOrderNo) |
| | | : []; |
| | | auditTableData.value = related.length > 0 ? related : [row]; |
| | | auditDialogVisible.value = true; |
| | | }; |
| | | |
| | | const submitAudit = async (result) => { |
| | | const current = auditRowData.value; |
| | | if (!current) return; |
| | | if (auditLoading.value) return; |
| | | |
| | | const confirmText = result === 1 ? "确定审核通过吗?" : "确定审核不通过吗?"; |
| | | try { |
| | | await ElMessageBox.confirm(confirmText, "提示", { |
| | | confirmButtonText: "确定", |
| | | cancelButtonText: "取消", |
| | | type: "warning", |
| | | }); |
| | | } catch { |
| | | return; |
| | | } |
| | | |
| | | auditLoading.value = true; |
| | | try { |
| | | const updates = auditTableData.value.map(item => { |
| | | const id = item?.id; |
| | | if (!id) return Promise.resolve(); |
| | | return updateProductWorkOrder({ id, auditStatus: result }); |
| | | }); |
| | | await Promise.all(updates); |
| | | ElMessage.success("审核成功"); |
| | | auditDialogVisible.value = false; |
| | | getList(); |
| | | } finally { |
| | | auditLoading.value = false; |
| | | } |
| | | }; |
| | | |
| | | // 查看详情 |
| | | const handleView = (row) => { |
| | | const { workOrderId } = row; |
| | | router.push({ |
| | | path: "/productionManagement/workOrderDetail", |
| | | query: { workOrderId }, |
| | | }); |
| | | } |
| | | |
| | | // 验证规则 |
| | | const reportFormRules = { |
| | | quantity: [{ required: true, validator: validateQuantity, trigger: "blur" }], |
| | | scrapQty: [{ validator: validateScrapQty, trigger: "blur" }], |
| | | startTime: [{ required: true, message: "请选择开始时间", trigger: "change" }], |
| | | endTime: [{ required: true, message: "请选择结束时间", trigger: "change" }], |
| | | auditUserId: [{ required: true, message: "请选择审核人", trigger: "change" }], |
| | | }; |
| | | |
| | | // 处理本次生产数量输入,限制必须大于等于1 |
| | |
| | | }; |
| | | |
| | | const showReportDialog = row => { |
| | | const nowTime = dayjs().format("YYYY-MM-DD HH:mm:ss"); |
| | | currentReportRowData.value = row; |
| | | reportForm.planQuantity = row.planQuantity; |
| | | reportForm.planQuantity = row.planQuantity - row.completeQuantity; |
| | | reportForm.quantity = |
| | | row.quantity !== undefined && row.quantity !== null ? row.quantity : null; |
| | | reportForm.productProcessRouteItemId = row.productProcessRouteItemId; |
| | | reportForm.workOrderId = row.id; |
| | | reportForm.reportWork = row.reportWork; |
| | | reportForm.productMainId = row.productMainId; |
| | | reportForm.startTime = nowTime; |
| | | reportForm.endTime = nowTime; |
| | | reportForm.scrapQty = |
| | | row.scrapQty !== undefined && row.scrapQty !== null ? row.scrapQty : null; |
| | | nextTick(() => { |
| | |
| | | return; |
| | | } |
| | | |
| | | if (!reportForm.startTime || !reportForm.endTime) { |
| | | ElMessageBox.alert("开始时间和结束时间不能为空", "提示", { |
| | | confirmButtonText: "确定", |
| | | }); |
| | | return; |
| | | } |
| | | |
| | | if (dayjs(reportForm.startTime).isSame(dayjs(reportForm.endTime)) || dayjs(reportForm.startTime).isAfter(dayjs(reportForm.endTime))) { |
| | | ElMessageBox.alert("开始时间必须小于结束时间", "提示", { |
| | | confirmButtonText: "确定", |
| | | }); |
| | | return; |
| | | } |
| | | |
| | | const submitData = { |
| | | ...reportForm, |
| | | quantity: quantity, |
| | |
| | | reportForm.userName = ""; |
| | | } |
| | | }; |
| | | // 审核人 |
| | | const handleReviewerIdChange = userId => { |
| | | if (userId) { |
| | | const selectedUser = userOptions.value.find(user => user.userId === userId); |
| | | if (selectedUser) { |
| | | reportForm.auditUserName = selectedUser.nickName; |
| | | } |
| | | } else { |
| | | reportForm.auditUserName = ""; |
| | | } |
| | | } |
| | | |
| | | onMounted(() => { |
| | | getList(); |