feat: 在工艺路线相关界面添加开数、工艺正数和加放数字段
- 在产品结构详情和工艺路线项列表/表单中新增开数、工艺正数、加放数字段
- 调整生产订单中绑定/查看工艺路线的显示条件,基于 printId 而非 processRouteCode
- 修复绑定工艺路线弹窗中切料数量字段的 placeholder 文本错误
- 在工作订单用户选择器中,将“任意用户”选项与团队用户列表分离显示
- 优化绑定工艺路线弹窗中切料图示的显示逻辑和表单字段默认值
| | |
| | | </el-table-column> |
| | | <el-table-column label="产品名称" prop="productName" min-width="160" /> |
| | | <el-table-column label="规格名称" prop="model" min-width="140" /> |
| | | <el-table-column label="开数" prop="processRouteOpenNum" min-width="140" /> |
| | | <el-table-column label="工艺正数" prop="processRouteNum" min-width="140" /> |
| | | <el-table-column label="加放数" prop="processRouteAddNum" min-width="140" /> |
| | | <el-table-column label="单位" prop="unit" width="100" /> |
| | | <el-table-column label="是否质检" prop="isQuality" width="100"> |
| | | <template #default="scope"> |
| | |
| | | : '选择产品' }} |
| | | </el-button> |
| | | </el-form-item> |
| | | |
| | | <el-form-item label="单位" prop="unit"> |
| | | <el-input |
| | | v-model="form.unit" |
| | |
| | | productModelId: undefined, |
| | | productName: "", |
| | | model: "", |
| | | processName: "", |
| | | openCount: "", |
| | | processPositive: "", |
| | | allowanceQty: "", |
| | | unit: "", |
| | | isQuality: false, |
| | | }); |
| | |
| | | productName: route.query.productName || '', |
| | | model: route.query.model || '', |
| | | bomNo: route.query.bomNo || '', |
| | | description: route.query.description || '' |
| | | description: route.query.description || '', |
| | | processRouteAddNum:route.query.processRouteAddNum || '', |
| | | processRouteNum:route.query.processRouteNum || '', |
| | | processRouteName:route.query.processRouteName || '', |
| | | processRouteOpenNum:route.query.processRouteOpenNum || '', |
| | | |
| | | }; |
| | | }; |
| | | |
| | |
| | | productModelId: row.productModelId, |
| | | productName: row.productName || "", |
| | | model: row.model || "", |
| | | processName: row.processName || "", |
| | | openCount: row.openCount || "", |
| | | processPositive: row.processPositive || "", |
| | | allowanceQty: row.allowanceQty || "", |
| | | unit: row.unit || "", |
| | | isQuality: row.isQuality, |
| | | }; |
| | |
| | | productRouteId: routeId.value, |
| | | processId: form.value.processId, |
| | | productModelId: form.value.productModelId, |
| | | processName: form.value.processName, |
| | | openCount: form.value.openCount, |
| | | processPositive: form.value.processPositive, |
| | | allowanceQty: form.value.allowanceQty, |
| | | isQuality: form.value.isQuality, |
| | | dragSort, |
| | | }) |
| | |
| | | routeId: routeId.value, |
| | | processId: form.value.processId, |
| | | productModelId: form.value.productModelId, |
| | | processName: form.value.processName, |
| | | openCount: form.value.openCount, |
| | | processPositive: form.value.processPositive, |
| | | allowanceQty: form.value.allowanceQty, |
| | | isQuality: form.value.isQuality, |
| | | dragSort, |
| | | }); |
| | |
| | | id: form.value.id, |
| | | processId: form.value.processId, |
| | | productModelId: form.value.productModelId, |
| | | processName: form.value.processName, |
| | | openCount: form.value.openCount, |
| | | processPositive: form.value.processPositive, |
| | | allowanceQty: form.value.allowanceQty, |
| | | isQuality: form.value.isQuality, |
| | | }) |
| | | : addOrUpdateProcessRouteItem({ |
| | |
| | | processId: form.value.processId, |
| | | productModelId: form.value.productModelId, |
| | | id: form.value.id, |
| | | processName: form.value.processName, |
| | | openCount: form.value.openCount, |
| | | processPositive: form.value.processPositive, |
| | | allowanceQty: form.value.allowanceQty, |
| | | isQuality: form.value.isQuality, |
| | | }); |
| | | |
| | |
| | | productModelId: undefined, |
| | | productName: "", |
| | | model: "", |
| | | processName: "", |
| | | openCount: "", |
| | | processPositive: "", |
| | | allowanceQty: "", |
| | | unit: "", |
| | | isQuality: false, |
| | | }; |
| | | formRef.value?.resetFields(); |
| | | }; |
| | |
| | | </el-form-item> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="开数" prop="processRouteOpenNum"/> |
| | | <el-table-column label="工艺正数" prop="processRouteNum"/> |
| | | <el-table-column label="加放数" prop="processRouteAddNum"/> |
| | | <el-table-column prop="unitQuantity" |
| | | label="单位用量"> |
| | | <template #default="{ row, $index }"> |
| | |
| | | :row-class-name="tableRowClassName" |
| | | > |
| | | <el-table-column label="序号" type="index" width="60" align="center" /> |
| | | <el-table-column label="合同号" prop="salesContractNo" width="200" /> |
| | | <el-table-column label="订单编号" prop="salesContractNo" width="200" /> |
| | | <el-table-column label="客户名称" prop="customerName" width="200" /> |
| | | <!-- <el-table-column label="项目名称" prop="projectName" width="250" /> --> |
| | | <el-table-column label="产品大类" prop="productCategory" width="150" /> |
| | |
| | | </el-descriptions-item> |
| | | </el-descriptions> |
| | | <!-- ================= 切料图示 ================= --> |
| | | <div class="section-title" v-if="formData.cuttingFileVo.length > 0">切料图示</div> |
| | | <div class="section-title" v-if="type === 'add' || (type === 'detail' && formData.cuttingFileVo.length > 0)">切料图示</div> |
| | | <ActionFileUpload |
| | | v-if="formData.cuttingFileVo.length > 0" |
| | | v-if="type === 'add' || (type === 'detail' && formData.cuttingFileVo.length > 0)" |
| | | style="width: 50%;float: left;" |
| | | v-model:file-list="formData.cuttingFileVo" |
| | | :action="upload.url" |
| | |
| | | :onDownload="onDownload" |
| | | :onRemove="onRemove" |
| | | :onPreview="onPreview" |
| | | :onView="type === 'detail' ? false : true" |
| | | :onView="type!=='detail'" |
| | | :tip-text="type === 'detail' ? '' : '支持图片(jpg, jpeg, png)格式'" |
| | | /> |
| | | <el-image |
| | |
| | | <el-input v-model="formData.cutNum" placeholder="切料尺寸" :disabled="isDetail" /> |
| | | </el-descriptions-item> |
| | | <el-descriptions-item label="切料数量" align="center"> |
| | | <el-input v-model="formData.cutSize" placeholder="切料尺寸" :disabled="isDetail" /> |
| | | <el-input v-model="formData.cutSize" placeholder="切料数量" :disabled="isDetail" /> |
| | | </el-descriptions-item> |
| | | <el-descriptions-item label="中盒数量" align="center"> |
| | | <el-input v-model="formData.mediumBoxQty" placeholder="中盒数量" :disabled="isDetail" /> |
| | |
| | | headers: { Authorization: 'Bearer ' + getToken() } |
| | | }) |
| | | |
| | | const showCuttingFile = computed(() => { |
| | | return props.type === 'detail' && Array.isArray(formData.cuttingFileVo) && formData.cuttingFileVo.length > 0 |
| | | }) |
| | | |
| | | const filePreviewRef = ref() |
| | | const formData = reactive({ |
| | | productOrderList:null, |
| | |
| | | no: "", |
| | | productName: "", |
| | | productDescription: "", |
| | | cuttingDiagramCheckout:"", |
| | | clientName: "", |
| | | finishedSize: "", |
| | | cutNum: "", |
| | |
| | | ], |
| | | processContent: [ |
| | | { |
| | | id: "1", |
| | | processId: "", |
| | | processName: "", |
| | | mediumBoxQty: "", |
| | |
| | | ], |
| | | materialInfo: [ |
| | | { |
| | | id: "1", |
| | | productId: "", |
| | | name: "", |
| | | productModelId: "", |
| | |
| | | no: "", |
| | | productName: "", |
| | | productDescription: "", |
| | | cuttingDiagramCheckout:"平张", |
| | | clientName: "", |
| | | finishedSize: "", |
| | | cutNum: "", |
| | |
| | | ], |
| | | processContent: [ |
| | | { |
| | | id: "1", |
| | | processId: "", |
| | | processName: "", |
| | | mediumBoxQty: "", |
| | |
| | | ], |
| | | materialInfo: [ |
| | | { |
| | | id: "1", |
| | | productId: "", |
| | | name: "", |
| | | productModelId: "", |
| | |
| | | |
| | | const addProcessRow = () => { |
| | | formData.processContent.push({ |
| | | id: Date.now().toString(), |
| | | processId: "", |
| | | processName: "", |
| | | openCount: "", |
| | |
| | | { |
| | | name: "绑定工艺路线", |
| | | type: "text", |
| | | showHide: row => !row.processRouteCode, |
| | | showHide: row => !row.printId, |
| | | clickFun: row => { |
| | | openBindRouteDialog(row); |
| | | }, |
| | |
| | | { |
| | | name: "查看工艺路线", |
| | | type: "text", |
| | | showHide: row => row.processRouteCode, |
| | | showHide: row => row.printId, |
| | | clickFun: row => { |
| | | openBindRouteDialog(row,"view"); |
| | | }, |
| | |
| | | style="width: 300px" |
| | | > |
| | | <el-option |
| | | v-for="user in userOptions" |
| | | v-for="user in userTeamOptions" |
| | | :key="user.userId" |
| | | :label="user.nickName" |
| | | :value="{ userId: user.userId, userName: user.nickName }" |
| | |
| | | |
| | | <script setup> |
| | | import { onMounted, ref, nextTick, computed } from "vue"; |
| | | import { deepClone } from "@/utils/index.js" |
| | | import { ElMessageBox, ElMessage } from "element-plus"; |
| | | import dayjs from "dayjs"; |
| | | import { |
| | |
| | | const workOrderFilesRef = ref(null); |
| | | const reportFormRef = ref(null); |
| | | const userOptions = ref([]); |
| | | const userTeamOptions = ref([]); |
| | | const reportForm = reactive({ |
| | | planQuantity: 0, |
| | | quantity: null, |
| | |
| | | userListNoPageByTenantId() |
| | | .then(res => { |
| | | if (res.code === 200) { |
| | | userOptions.value = res.data || []; |
| | | console.log(userOptions.value) |
| | | userOptions.value.unshift({ |
| | | nickName:"任意用户", |
| | | userId:"-1", |
| | | }) |
| | | const list = Array.isArray(res.data) ? res.data : [] |
| | | userOptions.value = [ |
| | | { nickName: "任意用户", userId: "-1" }, |
| | | ...deepClone(list) |
| | | ] |
| | | userTeamOptions.value = deepClone(list) |
| | | } |
| | | }) |
| | | .catch(err => { |