| | |
| | | const {currentRoute} = useRouter() |
| | | const route = currentRoute.value |
| | | |
| | | let orderId = route.query.orderId |
| | | let productionId = route.query.productionId |
| | | const orderId = route.query.orderId |
| | | const productionId = route.query.productionId |
| | | const orderQuantity = route.query.quantity |
| | | |
| | | const orderOtherMoney = ref(null) |
| | | |
| | |
| | | filters: [{data: ''}], |
| | | slots: {filter: 'num1_filter'}, |
| | | filterMethod: filterChanged, |
| | | sortable: true |
| | | } |
| | | |
| | | gridOptions.columns.push(column) |
| | |
| | | filterConfig: { //筛选配置项 |
| | | //remote: true |
| | | }, |
| | | formConfig: { |
| | | data: { |
| | | shelfThickness: 800, |
| | | spacerThickness: 0, |
| | | inWeight: 4000, |
| | | inMaxQuantity: 20, |
| | | inLenMin:400, |
| | | inLenMax:3500, |
| | | inShortMax:2500, |
| | | inShortMin:400 |
| | | }, |
| | | rules:{ |
| | | shelfThickness: [ |
| | | { required: true, message: t('basicData.msg.greater0'),type:'number',pattern:/^[1-9]\d*$/ } |
| | | ], |
| | | spacerThickness: [ |
| | | { required: true, message: t('delivery.pleaseEnterANumericalValueGreaterThanOrEqualTo0'),type:'number',pattern:/^[0-9]\d*$/ } |
| | | ], |
| | | inWeight: [ |
| | | { required: true, message: t('basicData.msg.greater0'),type:'number',pattern:/^[1-9]\d*$/ } |
| | | ], |
| | | inMaxQuantity: [ |
| | | { required: true, message: t('basicData.msg.greater0'),type:'number',pattern:/^[1-9]\d*$/ } |
| | | ] |
| | | }, |
| | | items:[ |
| | | { field: 'shelfThickness', title: '架子纵深(mm)', itemRender: { name: 'VxeInput' },span:8,folding: true}, |
| | | { field: 'inWeight', title: '架子承重(KG)', itemRender: { name: 'VxeInput' },span:8,folding: true }, |
| | | { field: 'spacerThickness', title: '间隔厚度(mm)', itemRender: { name: 'VxeInput' } ,span:8,folding: true}, |
| | | { field: 'inLenMax', title: '长边最大(mm)', itemRender: { name: 'VxeInput' },span:8,folding: true }, |
| | | { field: 'inLenMin', title: '长边最短(mm)', itemRender: { name: 'VxeInput' },span:8,folding: true }, |
| | | { field: 'inMaxQuantity', title: '最大数量', itemRender: { name: 'VxeInput' } ,span:8,folding: true}, |
| | | { field: 'inShortMax', title: '短边最大(mm)', itemRender: { name: 'VxeInput' },span:8,folding: true }, |
| | | { field: 'inShortMin', title: '短边最短(mm)', itemRender: { name: 'VxeInput' },span:8,folding: true }, |
| | | { |
| | | span: 24, |
| | | collapseNode: true, |
| | | align: 'center', |
| | | itemRender: { |
| | | name: 'VxeButtonGroup', |
| | | options: [ |
| | | { type: 'submit', content: '智能分架', status: 'primary' }, |
| | | { type: 'reset', content: '重置' } |
| | | ] |
| | | } |
| | | } |
| | | ] |
| | | }, |
| | | customConfig: { |
| | | storage: true |
| | | }, |
| | |
| | | filterMethod: filterChanged, |
| | | width: '78px' |
| | | }, |
| | | { |
| | | field: 'building_number', |
| | | title: t('order.buildingNumber'), |
| | | sortable: true, |
| | | filters: [{data: ''}], |
| | | slots: {filter: 'num1_filter'}, |
| | | filterMethod: filterChanged, |
| | | width: '120px' |
| | | }, |
| | | {field: 'baiscQuantity', title: t('processCard.quantityToDivided'), showOverflow: "ellipsis", width: '80px'}, |
| | | {field: 'computeGrossArea', title: t('processCard.areaToDivided'), width: '80px'}, |
| | | {field: 'totalThickness', title: t('processCard.totalThickness'), width: '80px'}, |
| | | {field: 'thickness', title: t('processCard.glassThickness'), width: '80px'}, |
| | | {field: 'weight', title: t('processCard.weight'), slots: {default: 'weight_sum'}, width: '85px'}, |
| | | {field: 'remarks', title: t('processCard.notes'), width: '85px',filters: [{data: ''}], slots: {filter: 'num1_filter'},filterMethod: filterChanged}, |
| | | {field: 'processing_note', title: t('order.processingNote'), width: '105px',filters: [{data: ''}], slots: {filter: 'num1_filter'},filterMethod: filterChanged}, |
| | | {field: 'bend_radius', title: t('order.bendRadius'), width: '120px',filters: [{data: ''}], slots: {filter: 'num1_filter'},filterMethod: filterChanged,sortable: true,} |
| | | |
| | | ],//表头按钮 |
| | |
| | | }) |
| | | return parseFloat(count.toFixed(2)) |
| | | } |
| | | |
| | | return '' |
| | | }) |
| | | ] |
| | | }, |
| | | |
| | | }) |
| | | const gridEventsRight = { |
| | | formSubmit () { |
| | | let form = gridOptions.formConfig.data |
| | | form.orderId =orderId |
| | | form.productionId = productionId |
| | | request.post(`/processCard/processCardAutoRack`,form).then(res => { |
| | | xGridLeft.value.reloadData(res.data.orderDetailList) |
| | | xGrid.value.reloadData(res.data.orderDetailsNotScope) |
| | | }) |
| | | }, |
| | | formReset () { |
| | | router.push({ |
| | | path: '/main/processCard/AddProcessCard', |
| | | query: {orderId: orderId, |
| | | productionId: productionId, |
| | | random:Math.random() |
| | | } |
| | | }) |
| | | } |
| | | } |
| | | |
| | | //左侧子组件接收参数 |
| | | const xGridLeft = ref() |
| | |
| | | slots: {filter: 'num1_filter'}, |
| | | filterMethod: filterChanged, |
| | | width:70 |
| | | }, |
| | | { |
| | | field: 'building_number', |
| | | title: t('order.buildingNumber'), |
| | | sortable: true, |
| | | filters: [{data: ''}], |
| | | slots: {filter: 'num1_filter'}, |
| | | filterMethod: filterChanged, |
| | | width: '120px' |
| | | }, |
| | | {field: 'width', title: t('order.width'), showOverflow: "ellipsis",width:70}, |
| | | {field: 'height', title: t('order.height'),width:70}, |
| | |
| | | //清除两边复选框 |
| | | $gridLeft.clearCheckboxRow() |
| | | $grid.clearCheckboxRow() |
| | | } |
| | | if (checkedNum.value){ |
| | | checkedNum.value ='' |
| | | } |
| | | } |
| | | |
| | |
| | | |
| | | } else { |
| | | |
| | | |
| | | // item.baiscQuantity = item.baiscQuantity * 1 + leftData[leftfilterIndex].quantity * 1 |
| | | // item.computeGrossArea=(item.width*item.height*item.baiscQuantity/1000000).toFixed(2) |
| | | //item.computeGrossArea=(item.width*item.height*item.baiscQuantity/1000000).toFixed(2) |
| | | // for (let i = 0; i <checkedList.length ; i++) { |
| | | // |
| | | // if (checkedList[i].orderNumber === item.orderNumber){ |
| | | // console.log(item.baiscQuantity +"---"+ checkedList[i].quantity ) |
| | | // item.baiscQuantity = item.baiscQuantity * 1 + checkedList[i].quantity * 1 |
| | | // } |
| | | // } |
| | | |
| | | delete item._X_ROW_KEY |
| | | $grid.insert(item) |
| | | |
| | | |
| | | } |
| | | |
| | | $gridLeft.remove(item) |
| | | }) |
| | | |
| | | |
| | | } |
| | | |
| | | let leftDataList = $gridLeft.getTableData().fullData; |
| | | let baseProcessId = productionId; // 固定的前缀 |
| | | |
| | | // 统计所有不重复的 processId |
| | | let uniqueProcessIds = new Set(leftDataList.map(item => item.processId)); |
| | | // 不重复的 processId 的总个数 |
| | | let totalUniqueCount = uniqueProcessIds.size; |
| | | // 用于记录已经分配的 processId |
| | | let usedProcessIds = new Set(); |
| | | |
| | | leftDataList.forEach((item) => { |
| | | let newProcessId; |
| | | // 如果该 processId 是第一次出现,使用递减的编号生成新的 processId |
| | | if (!usedProcessIds.has(item.processId)) { |
| | | newProcessId = `${baseProcessId}${(totalUniqueCount).toString().padStart(3, '0')}`; |
| | | usedProcessIds.add(item.processId); // 标记该 processId 已使用 |
| | | totalUniqueCount--; // 递减 |
| | | |
| | | } else { |
| | | // 如果该 processId 已经使用过,继续使用已分配的编号 |
| | | newProcessId = `${baseProcessId}${(totalUniqueCount + 1).toString().padStart(3, '0')}`; |
| | | |
| | | } |
| | | // 更新 item.processId |
| | | item.processId = newProcessId; |
| | | }); |
| | | // 获取剩余数据,用于对落架顺序重新赋值 |
| | | let remainingData = $gridLeft.getTableData().fullData; |
| | | // 按 processId 分组 |
| | | let groupedData = remainingData.reduce((acc, curr) => { |
| | | if (!acc[curr.processId]) { |
| | | acc[curr.processId] = []; |
| | | } |
| | | acc[curr.processId].push(curr); |
| | | return acc; |
| | | }, {}); |
| | | |
| | | // 按 processId 排序(倒序) |
| | | let sortedProcessIds = Object.keys(groupedData).sort((a, b) => b - a); |
| | | |
| | | // 更新每个分组的 landingSequence |
| | | sortedProcessIds.forEach((processId, index) => { |
| | | let group = groupedData[processId]; |
| | | |
| | | // 对每个 processId 分组内的数据,不改变顺序,直接赋相同的 landingSequence |
| | | group.forEach((item) => { |
| | | item.landingSequence = sortedProcessIds.length - index; // 按倒序设置 landingSequence |
| | | }); |
| | | }); |
| | | //清除两边复选框 |
| | | $gridLeft.clearCheckboxRow() |
| | | $grid.clearCheckboxRow() |
| | | |
| | | } catch (e) { |
| | | ElMessage.warning(e.message) |
| | | } |
| | | //每次点击情况输入框 |
| | | if (checkedNum.value){ |
| | | checkedNum.value ='' |
| | | } |
| | | } |
| | | |
| | | |
| | | //向左边表格添加数据 |
| | | const addLeft = () => { |
| | | try { |
| | |
| | | if (item.baiscQuantity === 0) { |
| | | $grid.remove(item) |
| | | } |
| | | $gridLeft.reloadData([...$gridLeft.getTableData().fullData]) |
| | | //delete item._X_ROW_KEY |
| | | } else { |
| | | item.quantity = checkedNum.value |
| | |
| | | checkedList.forEach((item) => { |
| | | item.processId = checkedListLeft[0].processId |
| | | item.landingSequence = checkedListLeft[0].landingSequence |
| | | item.quantity = checkedListLeft[0].baiscQuantity |
| | | item.quantity = item.baiscQuantity |
| | | item.computeGrossArea = (item.computeGrossArea - checkedListLeft[0].width * checkedListLeft[0].height * checkedListLeft[0].baiscQuantity / 1000000).toFixed(2) |
| | | |
| | | delete item._X_ROW_KEY |
| | | }) |
| | | $gridLeft.insertAt(checkedList) |
| | |
| | | } catch (e) { |
| | | ElMessage.warning(e.message) |
| | | } |
| | | if (checkedNum.value){ |
| | | checkedNum.value ='' |
| | | } |
| | | } |
| | | |
| | | |
| | |
| | | if ($grid) { |
| | | switch (code) { |
| | | case 'saveFlowCard': { |
| | | gridLeftOptions.toolbarConfig.buttons[0].disabled=true |
| | | const $table = xGridLeft.value |
| | | const $tableRight = xGrid.value |
| | | if ($table) { |
| | |
| | | let leftData = $tableRight.getTableData().fullData |
| | | if (selectRecords.length === 0) { |
| | | ElMessage.warning(t('processCard.pleaseSelectTheSavedDataFirst')) |
| | | gridLeftOptions.toolbarConfig.buttons[0].disabled=false |
| | | return |
| | | } |
| | | |
| | | if (leftData.length > 0) { |
| | | ElMessage.warning(t('processCard.pleaseFirstCreateAProcessCardForAllTheDataOnTheRightSideAndSaveIt')) |
| | | gridLeftOptions.toolbarConfig.buttons[0].disabled=false |
| | | return; |
| | | } |
| | | |
| | | // 计算 $table 里 quantity 字段的总和 |
| | | let totalQuantity = selectRecords.reduce((sum, record) => sum + (Number(record.quantity) || 0), 0); |
| | | // 对比全局变量 orderQuantity |
| | | if (totalQuantity !== orderQuantity*1) { |
| | | ElMessage.warning(`所选数据的数量总和 (${totalQuantity}) 与订单数量 (${orderQuantity}) 不匹配,请检查后重试!`); |
| | | gridLeftOptions.toolbarConfig.buttons[0].disabled = false; |
| | | return; |
| | | } |
| | | // if (leftData.length!=selectRecords.length){ |
| | | // ElMessage.warning('请勾选所有数据进行保存') |
| | | // gridLeftOptions.toolbarConfig.buttons[0].disabled=false |
| | | // return; |
| | | // } |
| | | let flowCardData = ref({ |
| | | flowCard: selectRecords, |
| | | userName: username, |
| | |
| | | userId:user.user.userId |
| | | }) |
| | | |
| | | request.post("/processCard/addFlowCard", flowCardData.value).then((res) => { |
| | | request.post(`/processCard/addFlowCard/${orderId}`, flowCardData.value).then((res) => { |
| | | if (res.code == 200) { |
| | | ElMessage.success(t('basicData.msg.saveSuccess')) |
| | | //router.push('/main/processCard/SplittingDetails?orderId=${orderId}') |
| | |
| | | <div v-for="(option, index) in column.filters" :key="index"> |
| | | <input v-model="option.data" |
| | | type="text" |
| | | @keyup.enter.native="$panel.confirmFilter()" |
| | | @input="changeFilterEvent($event, option, $panel)"/> |
| | | </div> |
| | | </div> |
| | |
| | | <span><el-input v-model="quantit" style="width: 80px;"/></span> |
| | | <span><el-input v-model="weight" style="width: 80px;"/></span> |
| | | </div> |
| | | <span>{{ $t('processCard.selectedQuantity') }}:<el-input v-model="checkedNum" clearable |
| | | <span>{{ $t('processCard.selectedQuantity') }}:<el-input id="checkedNum" v-model="checkedNum" clearable |
| | | type="number"></el-input></span><br> |
| | | <el-button style="width: 40px;" type="primary" @click="addRight"> →</el-button> |
| | | <br> |
| | |
| | | <el-button type="primary" @click="createProcessCard">{{ $t('processCard.establishProcessCards') }} |
| | | </el-button> |
| | | <br><br><br><br><br> |
| | | <el-button type="primary" @click="createProcessCardNo">按序号创建 |
| | | <el-button type="primary" @click="createProcessCardNo">{{ $t('processCard.createBySequenceNumber') }} |
| | | </el-button> |
| | | </el-main> |
| | | </div> |
| | |
| | | class="mytable-scrollbar" |
| | | height="100%" |
| | | v-bind="gridOptions" |
| | | v-on="gridEventsRight" |
| | | @checkbox-change="handleCheckboxChange" |
| | | > |
| | | <!-- @toolbar-button-click="toolbarButtonClickEvent"--> |
| | |
| | | <div v-for="(option, index) in column.filters" :key="index"> |
| | | <input v-model="option.data" |
| | | type="text" |
| | | @keyup.enter.native="$panel.confirmFilter()" |
| | | @input="changeFilterEvent($event, option, $panel)"/> |
| | | </div> |
| | | </div> |