| | |
| | | prefix-icon="Search" /> |
| | | </div> |
| | | <div class="search-item"> |
| | | <span class="search_title">生产订单号:</span> |
| | | <el-input v-model="searchForm.productOrderNpsNo" |
| | | style="width: 240px" |
| | | placeholder="请输入" |
| | | @change="handleQuery" |
| | | clearable |
| | | prefix-icon="Search" /> |
| | | </div> |
| | | <div class="search-item"> |
| | | <el-button type="primary" |
| | | @click="handleQuery">搜索</el-button> |
| | | </div> |
| | |
| | | </template> |
| | | </PIMTable> |
| | | </div> |
| | | |
| | | <!-- 流转卡弹窗 --> |
| | | <el-dialog v-model="transferCardVisible" |
| | | title="流转卡" |
| | |
| | | @click="printTransferCard">打印流转卡</el-button> |
| | | </div> |
| | | </el-dialog> |
| | | |
| | | <!-- 报工弹窗 --> |
| | | <el-dialog v-model="reportDialogVisible" |
| | | title="报工" |
| | |
| | | :value="user.userId" /> |
| | | </el-select> |
| | | </el-form-item> |
| | | <div v-if="params.length > 0" |
| | | class="param-grid" |
| | | v-loading="paramLoading"> |
| | | <el-form-item v-for="param in params" |
| | | :key="param.id" |
| | | :label="param.paramName" |
| | | :label-width="120" |
| | | class="param-item"> |
| | | <template v-if="param.paramType == '1'"> |
| | | <div class="param-input-group"> |
| | | <el-input-number v-model="reportForm.paramGroups[param.id]" |
| | | controls-position="right" |
| | | :key="param.id" |
| | | style="width: 250px" |
| | | class="param-input" /> |
| | | <span v-if="param.unit && param.unit != '/'" |
| | | class="param-unit">{{ param.unit }}</span> |
| | | </div> |
| | | </template> |
| | | <template v-else-if="param.paramType == '2'"> |
| | | <div class="param-input-group"> |
| | | <el-input v-model="reportForm.paramGroups[param.id]" |
| | | :key="param.id" |
| | | style="width: 250px" |
| | | class="param-input" /> |
| | | <span v-if="param.unit && param.unit != '/'" |
| | | class="param-unit">{{ param.unit }}</span> |
| | | </div> |
| | | </template> |
| | | <template v-else-if="param.paramType == '3'"> |
| | | <div class="param-input-group"> |
| | | <el-select v-model="reportForm.paramGroups[param.id]" |
| | | placeholder="请选择" |
| | | :key="param.id" |
| | | class="param-select" |
| | | style="width: 250px"> |
| | | <el-option v-for="option in dictOptions[param.paramFormat] || []" |
| | | :key="option.dictLabel" |
| | | :label="option.dictLabel" |
| | | :value="option.dictLabel" /> |
| | | </el-select> |
| | | <span v-if="param.unit && param.unit != '/'" |
| | | class="param-unit">{{ param.unit }}</span> |
| | | </div> |
| | | </template> |
| | | <template v-else-if="param.paramType == '4'"> |
| | | <div class="param-input-group"> |
| | | <el-date-picker :value-format="param.paramFormat.replace('yyyy', 'YYYY').replace('dd', 'DD')" |
| | | :format="param.paramFormat.replace('yyyy', 'YYYY').replace('dd', 'DD')" |
| | | :key="param.id" |
| | | :type="param.paramFormat=='yyyy-MM-dd'?'date':'datetime'" |
| | | v-model="reportForm.paramGroups[param.id]" |
| | | class="param-input" |
| | | style="width: 250px" /> |
| | | <span v-if="param.unit && param.unit != '/'" |
| | | class="param-unit">{{ param.unit }}</span> |
| | | </div> |
| | | </template> |
| | | <template v-else> |
| | | <div class="param-input-group"> |
| | | <el-input v-model="reportForm.paramGroups[param.id]" |
| | | :key="param.id" |
| | | class="param-input" /> |
| | | <span v-if="param.unit && param.unit != '/'" |
| | | class="param-unit">{{ param.unit }}</span> |
| | | </div> |
| | | </template> |
| | | </el-form-item> |
| | | </div> |
| | | </el-form> |
| | | <template #footer> |
| | | <span class="dialog-footer"> |
| | |
| | | </span> |
| | | </template> |
| | | </el-dialog> |
| | | |
| | | <MaterialDialog v-model="materialDialogVisible" |
| | | :row-data="currentMaterialOrderRow" |
| | | @refresh="getList" /> |
| | | <FilesDia ref="workOrderFilesRef" /> |
| | | </div> |
| | | </template> |
| | |
| | | addProductMain, |
| | | downProductWorkOrder, |
| | | } from "@/api/productionManagement/workOrder.js"; |
| | | import { findProcessParamListOrder } from "@/api/productionManagement/productProcessRoute.js"; |
| | | import { getUserProfile, userListNoPageByTenantId } from "@/api/system/user.js"; |
| | | import { getDicts } from "@/api/system/dict/data"; |
| | | import QRCode from "qrcode"; |
| | | import { getCurrentInstance, reactive, toRefs } from "vue"; |
| | | import FilesDia from "./components/filesDia.vue"; |
| | | import MaterialDialog from "./components/MaterialDialog.vue"; |
| | | const { proxy } = getCurrentInstance(); |
| | | |
| | | const tableColumn = ref([ |
| | |
| | | }, |
| | | { |
| | | label: "生产订单号", |
| | | prop: "productOrderNpsNo", |
| | | prop: "npsNo", |
| | | width: "140", |
| | | }, |
| | | { |
| | |
| | | }, |
| | | { |
| | | label: "工序名称", |
| | | prop: "processName", |
| | | prop: "operationName", |
| | | width: "100", |
| | | }, |
| | | { |
| | | label: "需求数量", |
| | |
| | | }, |
| | | { |
| | | label: "操作", |
| | | width: "200", |
| | | width: "260", |
| | | align: "center", |
| | | dataType: "action", |
| | | fixed: "right", |
| | |
| | | openWorkOrderFiles(row); |
| | | }, |
| | | }, |
| | | // { |
| | | // name: "物料", |
| | | // clickFun: row => { |
| | | // openMaterialDialog(row); |
| | | // }, |
| | | // }, |
| | | { |
| | | name: "报工", |
| | | clickFun: row => { |
| | |
| | | ], |
| | | }, |
| | | ]); |
| | | |
| | | |
| | | const tableData = ref([]); |
| | | const tableLoading = ref(false); |
| | | const transferCardVisible = ref(false); |
| | |
| | | productProcessRouteItemId: "", |
| | | userId: "", |
| | | productMainId: null, |
| | | productionOrderRoutingOperationId: "", |
| | | productionOrderId: "", |
| | | paramGroups: {}, |
| | | }); |
| | | |
| | | const params = ref({}); |
| | | const dictOptions = ref({}); |
| | | const paramLoading = ref(false); |
| | | |
| | | // 本次生产数量验证规则 |
| | | const validateQuantity = (rule, value, callback) => { |
| | |
| | | // 有效的非负整数(包括0) |
| | | reportForm.scrapQty = num; |
| | | }; |
| | | |
| | | |
| | | const currentReportRowData = ref(null); |
| | | const materialDialogVisible = ref(false); |
| | | const currentMaterialOrderRow = ref(null); |
| | | const page = reactive({ |
| | | current: 1, |
| | | size: 100, |
| | |
| | | const data = reactive({ |
| | | searchForm: { |
| | | workOrderNo: "", |
| | | productOrderNpsNo: "", |
| | | }, |
| | | }); |
| | | const { searchForm } = toRefs(data); |
| | |
| | | page.current = 1; |
| | | getList(); |
| | | }; |
| | | |
| | | |
| | | const pagination = obj => { |
| | | page.current = obj.page; |
| | | page.size = obj.limit; |
| | | getList(); |
| | | }; |
| | | |
| | | |
| | | const getList = () => { |
| | | tableLoading.value = true; |
| | | const params = { ...searchForm.value, ...page }; |
| | |
| | | reportForm.productMainId = row.productMainId; |
| | | reportForm.scrapQty = |
| | | row.scrapQty !== undefined && row.scrapQty !== null ? row.scrapQty : null; |
| | | reportForm.productionOrderRoutingOperationId = |
| | | row.productionOrderRoutingOperationId; |
| | | reportForm.productionOrderId = row.productionOrderId; |
| | | nextTick(() => { |
| | | reportFormRef.value?.clearValidate(); |
| | | if (row.productionOrderRoutingOperationId && row.productionOrderId) { |
| | | loadParams(row.productionOrderRoutingOperationId, row.productionOrderId); |
| | | } |
| | | }); |
| | | // 获取当前登录用户信息,设置为默认选中 |
| | | getUserProfile() |
| | | .then(res => { |
| | | if (res.code === 200) { |
| | |
| | | }); |
| | | |
| | | reportDialogVisible.value = true; |
| | | }; |
| | | |
| | | const openMaterialDialog = row => { |
| | | currentMaterialOrderRow.value = row; |
| | | materialDialogVisible.value = true; |
| | | }; |
| | | |
| | | const handleReport = () => { |
| | |
| | | return; |
| | | } |
| | | |
| | | const params = { |
| | | const productionOperationParamList = params.value.map(param => ({ |
| | | ...param, |
| | | inputValue: reportForm.paramGroups[param.id] ?? "", |
| | | })); |
| | | |
| | | const submitParams = { |
| | | quantity: quantity, |
| | | scrapQty: isNaN(scrapQty) ? 0 : scrapQty, |
| | | userId: reportForm.userId, |
| | | userName: reportForm.userName, |
| | | workOrderId: reportForm.workOrderId, |
| | | productionOperationTaskId: reportForm.workOrderId, |
| | | productProcessRouteItemId: reportForm.productProcessRouteItemId, |
| | | reportWork: reportForm.reportWork, |
| | | productMainId: reportForm.productMainId, |
| | | productionOrderRoutingOperationId: |
| | | reportForm.productionOrderRoutingOperationId, |
| | | productionOrderId: reportForm.productionOrderId, |
| | | productionOperationParamList: productionOperationParamList, |
| | | }; |
| | | |
| | | addProductMain(params) |
| | | addProductMain(submitParams) |
| | | .then(res => { |
| | | proxy.$modal.msgSuccess("报工成功"); |
| | | reportDialogVisible.value = false; |
| | |
| | | const handleUserChange = val => { |
| | | const user = userOptions.value.find(item => item.userId === val); |
| | | reportForm.userName = user ? user.nickName : ""; |
| | | }; |
| | | |
| | | const getDictOptions = async dictType => { |
| | | if (!dictType) return []; |
| | | if (dictOptions.value[dictType]) return dictOptions.value[dictType]; |
| | | try { |
| | | const res = await getDicts(dictType); |
| | | if (res.code === 200) { |
| | | dictOptions.value[dictType] = res.data; |
| | | return res.data; |
| | | } |
| | | return []; |
| | | } catch (error) { |
| | | console.error("获取字典数据失败:", error); |
| | | return []; |
| | | } |
| | | }; |
| | | |
| | | const loadParams = (productionOrderRoutingOperationId, productionOrderId) => { |
| | | paramLoading.value = true; |
| | | findProcessParamListOrder({ |
| | | productionOrderRoutingOperationId, |
| | | productionOrderId, |
| | | }) |
| | | .then(res => { |
| | | if (res.code === 200) { |
| | | const paramList = res.data || []; |
| | | params.value = paramList; |
| | | reportForm.paramGroups = {}; |
| | | paramList.forEach(param => { |
| | | if (!reportForm.paramGroups[param.id]) { |
| | | reportForm.paramGroups[param.id] = ""; |
| | | } |
| | | if (param.paramType == "3" && param.paramFormat) { |
| | | getDictOptions(param.paramFormat); |
| | | } |
| | | }); |
| | | } |
| | | }) |
| | | .catch(err => { |
| | | console.error("获取工序参数失败:", err); |
| | | }) |
| | | .finally(() => { |
| | | paramLoading.value = false; |
| | | }); |
| | | }; |
| | | |
| | | onMounted(() => { |
| | |
| | | .print-button-container { |
| | | text-align: center; |
| | | margin-top: 20px; |
| | | } |
| | | .param-grid { |
| | | margin-top: 10px; |
| | | border-top: 1px solid #ebe9f3; |
| | | padding-top: 10px; |
| | | } |
| | | .param-item { |
| | | margin-bottom: 12px; |
| | | } |
| | | .param-input-group { |
| | | display: flex; |
| | | align-items: center; |
| | | gap: 8px; |
| | | } |
| | | .param-input { |
| | | flex: 1; |
| | | } |
| | | .param-select { |
| | | flex: 1; |
| | | } |
| | | .param-unit { |
| | | color: #909399; |
| | | font-size: 12px; |
| | | min-width: 30px; |
| | | } |
| | | </style> |
| | | |
| | |
| | | height: 140px !important; |
| | | } |
| | | } |
| | | </style> |
| | | </style> |