修改前端展示信息来源,优化数据来源由原来的数据库改为前端表格数据
| | |
| | | </div>
|
| | | </div>
|
| | |
|
| | | <!-- <button @click="submitLayouts" style="position: fixed; top: 90px; right: 20px; padding: 10px; background: #409eff; color: white; border: none; border-radius: 5px; cursor: pointer;">-->
|
| | | <!-- 保存调整-->
|
| | | <!-- </button>-->
|
| | | <button @click="submitLayouts" style="position: fixed; top: 90px; right: 20px; padding: 10px; background: #409eff; color: white; border: none; border-radius: 5px; cursor: pointer;">
|
| | | 保存调整
|
| | | </button>
|
| | | </div>
|
| | | </template>
|
| | |
|
| | |
| | | const submitLayouts = async () => {
|
| | | layouts.value.forEach(layout => {
|
| | | layout.glassDetails.forEach(glassDetail => {
|
| | | glassDetail.x = Math.round(glassDetail.x);
|
| | | glassDetail.y = Math.round(glassDetail.y);
|
| | | glassDetail.width = Math.round(glassDetail.width);
|
| | | glassDetail.height = Math.round(glassDetail.height);
|
| | | glassDetail.x = parseFloat(glassDetail.x.toFixed(2));
|
| | | glassDetail.y = parseFloat(glassDetail.y.toFixed(2));
|
| | | glassDetail.width = parseFloat(glassDetail.width.toFixed(2));
|
| | | glassDetail.height = parseFloat(glassDetail.height.toFixed(2));
|
| | | });
|
| | | });
|
| | | const savedProjectNo = localStorage.getItem('projectNo');
|
| | |
| | | glassDetail.glassPoint.forEach(point => {
|
| | | point.X += offsetX;
|
| | | point.Y += offsetY;
|
| | | // 添加精度控制
|
| | | point.X = parseFloat(point.X.toFixed(2));
|
| | | point.Y = parseFloat(point.Y.toFixed(2));
|
| | | });
|
| | | }
|
| | |
|
| | |
| | | (props.gh - 100) / layout.height
|
| | | );
|
| | |
|
| | | glassDetail.x = Math.round(glassDetail.x);
|
| | | glassDetail.y = Math.round(glassDetail.y);
|
| | | glassDetail.x = parseFloat(glassDetail.x.toFixed(2));
|
| | | glassDetail.y = parseFloat(glassDetail.y.toFixed(2));
|
| | | adjustAlignmentPosition(layoutIndex, rectIndex);
|
| | | }
|
| | |
|
| | |
| | | else {
|
| | | // 无法合并,保存当前矩形,开始新的合并
|
| | | merged.push({
|
| | | x: Math.round(current.x),
|
| | | y: Math.round(current.y),
|
| | | width: Math.round(current.width),
|
| | | height: Math.round(current.height),
|
| | | x: current.x,
|
| | | y: current.y,
|
| | | width: current.width,
|
| | | height: current.height,
|
| | | isRemain: true
|
| | | });
|
| | | current = { ...next };
|
| | |
| | |
|
| | | // 添加最后一个矩形
|
| | | merged.push({
|
| | | x: Math.round(current.x),
|
| | | y: Math.round(current.y),
|
| | | width: Math.round(current.width),
|
| | | height: Math.round(current.height),
|
| | | x: current.x,
|
| | | y: current.y,
|
| | | width: current.width,
|
| | | height: current.height,
|
| | | isRemain: true
|
| | | });
|
| | |
|
| | |
| | | // 添加新的余料矩形
|
| | | uniqueArr.forEach((area) => {
|
| | | newGlassDetails.push({
|
| | | x: Math.round(area.x),
|
| | | y: Math.round(area.y),
|
| | | width: Math.round(area.width),
|
| | | height: Math.round(area.height),
|
| | | x: area.x,
|
| | | y: area.y,
|
| | | width: area.width,
|
| | | height: area.height,
|
| | | isRemain: true
|
| | | });
|
| | | });
|
| | |
| | | // 旋转90度后的坐标(顺时针)
|
| | | point.X = originalState.x + relY;
|
| | | point.Y = originalState.y + (originalState.width - relX);
|
| | | // 添加精度控制
|
| | | point.X = parseFloat(point.X.toFixed(2));
|
| | | point.Y = parseFloat(point.Y.toFixed(2));
|
| | | });
|
| | | }
|
| | | adjustGrayRectangles(layoutIndex);
|
| | |
| | | glassDetail.glassPoint.forEach(point => {
|
| | | point.X += offsetX;
|
| | | point.Y += offsetY;
|
| | | // 添加精度控制
|
| | | point.X = parseFloat(point.X.toFixed(2));
|
| | | point.Y = parseFloat(point.Y.toFixed(2));
|
| | | });
|
| | | }
|
| | | adjustGrayRectangles(layoutIndex);
|
| | |
| | | if (glassDetail.glassPoint && Array.isArray(glassDetail.glassPoint)) {
|
| | | glassDetail.glassPoint.forEach(point => {
|
| | | point.X = width - point.X;
|
| | | point.X = parseFloat(point.X.toFixed(2));
|
| | | point.Y = parseFloat(point.Y.toFixed(2));
|
| | | });
|
| | | }
|
| | | });
|
| | |
| | | if (glassDetail.glassPoint && Array.isArray(glassDetail.glassPoint)) {
|
| | | glassDetail.glassPoint.forEach(point => {
|
| | | point.Y = height - point.Y;
|
| | | // 添加精度控制
|
| | | point.X = parseFloat(point.X.toFixed(2));
|
| | | point.Y = parseFloat(point.Y.toFixed(2));
|
| | | });
|
| | | }
|
| | | });
|
| | |
| | | sortable: true |
| | | }, |
| | | { |
| | | field: 'product_name', |
| | | field: 'productName', |
| | | width: 150, |
| | | title: t('order.product'), |
| | | filters: [{data: ''}], |
| | |
| | | sortable: true |
| | | }, |
| | | { |
| | | field: 'building_number', |
| | | field: 'buildingNumber', |
| | | width: 150, |
| | | title: '楼层号', |
| | | filters: [{data: ''}], |
| | |
| | | sortable: true |
| | | }, |
| | | { |
| | | field: 'icon', |
| | | field: 'markIcon', |
| | | width: 150, |
| | | title: '印标类型', |
| | | filters: [{data: ''}], |
| | |
| | | } |
| | | emit('getSmallPieceData', 1); |
| | | optimizeData.value.glassDetails = []; |
| | | // 从后端接口获取 glassDetail 数据,而不是从表格中读取 |
| | | fetchGlassDetailData(); |
| | | // 从表格中获取 glassDetail 数据,而不是从后端接口读取 |
| | | const tableData = xGrid.value.getTableData().fullData; |
| | | const glassDetailData = tableData.map(item => { |
| | | let rackNoValue = 0; |
| | | if (item.rackNo !== undefined && item.rackNo !== null && item.rackNo !== '') { |
| | | rackNoValue = item.rackNo; |
| | | } |
| | | return { |
| | | width: item.width, |
| | | height: item.height, |
| | | processId: item.processId, |
| | | layer: item.layer, |
| | | totalLayer: item.totalLayer, |
| | | orderSort: item.order_number, |
| | | markIcon: item.markIcon, |
| | | quantity: item.quantity, |
| | | patchState: item.patchState, |
| | | upGrind: item.longGrind1, |
| | | downGrind: item.longGrind2, |
| | | leftGrind: item.shortGrind1, |
| | | rightGrind: item.shortGrind2, |
| | | heatLayoutId: item.heatLayoutId, |
| | | process: item.process, |
| | | orderNo: item.orderNo, |
| | | customerName: item.customerName, |
| | | processingNote: item.processingNote, |
| | | projectName: item.projectName, |
| | | productName: item.productName, |
| | | buildingNumber: item.buildingNumber, |
| | | rackNo: rackNoValue |
| | | }; |
| | | }); |
| | | |
| | | // xGrid.value.getTableData().fullData.forEach(items=>{ |
| | | // let rackNoValue = 0; |
| | | // if (items.rackNo !== undefined && items.rackNo !== null && items.rackNo !== '') { |
| | | // rackNoValue = items.rackNo; |
| | | // } |
| | | // const detail={ |
| | | // width :null, |
| | | // height :null, |
| | | // processId :null, |
| | | // layer :null, |
| | | // totalLayer :null, |
| | | // orderSort :null, |
| | | // markIcon :null, |
| | | // quantity:null, |
| | | // patchState :null, |
| | | // upGrind :null, |
| | | // downGrind :null, |
| | | // leftGrind:null, |
| | | // rightGrind :null, |
| | | // rackNo: rackNoValue |
| | | // } |
| | | // detail.width=items.width |
| | | // detail.height=items.height |
| | | // detail.processId=items.process_ids |
| | | // detail.layer=items.layer |
| | | // detail.totalLayer=items.total_layer |
| | | // detail.orderSort=items.order_number |
| | | // detail.markIcon=items.icon |
| | | // detail.patchState=items.patch_state |
| | | // detail.quantity=items.quantity |
| | | // detail.upGrind=items.longGrind1 |
| | | // detail.downGrind=items.longGrind2 |
| | | // detail.leftGrind=items.shortGrind1 |
| | | // detail.rightGrind=items.shortGrind2 |
| | | // detail.rackNo=items.rackNo |
| | | // |
| | | // optimizeData.value.glassDetails .push(detail) |
| | | // }) |
| | | // 更新 optimizeData 中的 glassDetails |
| | | optimizeData.value.glassDetails = glassDetailData; |
| | | |
| | | // 打开优化对话框 |
| | | dialogVisible.value[4] = true; |
| | | |
| | | }else{ |
| | | dialogVisible.value[index] = true; |
| | | } |
| | | }; |
| | | |
| | | const fetchGlassDetailData = async () => { |
| | | try { |
| | | const res = await request.post(`/glassOptimize/optimizeInfo/${projectNo.value}/${username}`); |
| | | console.log(res); |
| | | if (res.code === "200" && res.data && res.data.data) { |
| | | // 处理从后端获取的数据 |
| | | const glassDetailData = res.data.data.map(item => { |
| | | let rackNoValue = 0; |
| | | if (item.rackNo !== undefined && item.rackNo !== null && item.rackNo !== '') { |
| | | rackNoValue = item.rackNo; |
| | | } |
| | | return { |
| | | width: item.width, |
| | | height: item.height, |
| | | processId: item.processId, |
| | | layer: item.layer, |
| | | totalLayer: item.totalLayer, |
| | | orderSort: item.order_number, |
| | | markIcon: item.markIcon, |
| | | quantity: item.quantity, |
| | | patchState: item.patchState, |
| | | upGrind: item.upGrind, |
| | | downGrind: item.downGrind, |
| | | leftGrind: item.leftGrind, |
| | | rightGrind:item.rightGrind, |
| | | heatLayoutId:item.heatLayoutId, |
| | | process:item.process, |
| | | orderNo:item.orderNo, |
| | | customerName:item.customerName, |
| | | processingNote:item.processingNote, |
| | | projectName:item.projectName, |
| | | productName:item.productName, |
| | | buildingNumber:item.buildingNumber, |
| | | rackNo: rackNoValue |
| | | }; |
| | | }); |
| | | |
| | | // 更新 optimizeData 中的 glassDetails |
| | | optimizeData.value.glassDetails = glassDetailData; |
| | | |
| | | // 打开优化对话框 |
| | | dialogVisible.value[4] = true; |
| | | |
| | | console.log('获取到的 glassDetail 数据:', glassDetailData); |
| | | } else { |
| | | ElMessage.error('获取玻璃详情数据失败'); |
| | | } |
| | | } catch (error) { |
| | | console.error('获取 glassDetail 数据出错:', error); |
| | | ElMessage.error('获取玻璃详情数据时发生错误'); |
| | | } |
| | | }; |
| | | |
| | |
| | | const fetchData = () => { |
| | | //启用表格拖动选中 |
| | | addListener(xGrid.value,gridOptions,cellArea.value) |
| | | request.post(`/glassOptimize/projectInfo/${projectNo.value}/${username}`).then((res) => { |
| | | request.post(`/glassOptimize/optimizeInfo/${projectNo.value}/${username}`).then((res) => { |
| | | if ((Number(res.code) === 200)) { |
| | | let data = res.data.data; |
| | | const grindingTrimming = res.data.grindingTrimming; |
| | |
| | | } |
| | | } |
| | | } |
| | | map.put("optimizeState", Integer.parseInt(stringObjectMap.get("optimize_state").toString())); |
| | | map.put("data", dataList); |
| | | map.put("project", glassOptimizeMapper.selectProjectCount(projectNo)); |
| | | map.put("grindingTrimming", glassOptimizeMapper.getGrindingTrimming(username)); |
| | | return map; |
| | | } |
| | | |
| | |
| | | c.project_no, |
| | | d.child_width as 'width', |
| | | d.child_height as 'height', |
| | | (d.child_width + d.child_height) * 2 as 'perimeter', |
| | | c.quantity, |
| | | od.shape, |
| | | concat( c.process_id, '-', c.technology_number ) AS 'process_id', |
| | | c.process_id AS processId, |
| | | c.technology_number as layer, |
| | | c.layers_number as totalLayer, |
| | | d.glass_child, |
| | | od.price, |
| | | od.remarks, |
| | | round( d.area * c.quantity, 4 ) as 'area', |
| | | c.order_number, |
| | | d.icon AS markIcon, |
| | | op.project_name, |
| | | 0 as patchState, |
| | | c.rack AS rackNo, |
| | | 0 as heatLayoutId, |
| | | d.process, |
| | | o.order_id AS orderNo, |
| | | o.customer_name AS customerName, |
| | |
| | | c.project_no, |
| | | d.child_width as 'width', |
| | | d.child_height as 'height', |
| | | (d.child_width + d.child_height) * 2 as 'perimeter', |
| | | c.patch_num as quantity, |
| | | od.shape, |
| | | concat( c.process_id, '-', c.technology_number ) AS 'process_id', |
| | | c.process_id AS 'process_ids', |
| | | c.technology_number as layer, |
| | | fc.layers_number as total_layer, |
| | | d.glass_child, |
| | | od.price, |
| | | od.remarks, |
| | | round( d.area * c.patch_num, 4 ) as 'area', |
| | | c.order_sort as order_number, |
| | | d.icon, |
| | | op.project_name, |
| | | 1 as patch_state, |
| | | a.id as rackNo, |
| | | 0 as heatLayoutId, |
| | | d.process, |
| | | o.order_id AS orderNo, |
| | | o.customer_name AS customerName, |
| | |
| | | <!--优化查询--> |
| | | <select id="computeAndOptimization"> |
| | | SELECT |
| | | c.project_no, |
| | | c.rack AS rackNo, |
| | | h.layout_id as heatLayoutId, |
| | | # h.layout_id as heatLayoutId, |
| | | h.width AS width, |
| | | h.height AS height, |
| | | (h.width + h.height) * 2 as 'perimeter', |
| | | od.shape, |
| | | count( 1 ) AS quantity, |
| | | concat( h.process_id, '-', h.layer ) AS processId, |
| | | concat( h.process_id, '-', h.layer ) AS process_id, |
| | | c.process_id AS processId, |
| | | h.process_id as process_ids, |
| | | h.layer, |
| | | c.layers_number as totalLayer, |
| | | d.glass_child, |
| | | od.price, |
| | | od.remarks, |
| | | round( d.area * count( 1 ), 4 ) AS 'area', |
| | | c.order_number, |
| | | h.order_sort AS orderSort, |
| | |
| | | WHERE |
| | | h.project_no = #{projectNo} |
| | | GROUP BY |
| | | h.layout_id, |
| | | # h.layout_id, |
| | | h.width, |
| | | h.height, |
| | | h.process_id, |