于杰
2025-11-24 f99393ab00efa105eeef8dd87e65bbc5daba56e5
增加功能,工程信息界面可以临时添加小片数据并临时优化
4个文件已修改
166 ■■■■■ 已修改文件
north-glass-erp/northglass-erp/src/views/pp/glassOptimize/page/ProjectDetail.vue 126 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/java/com/example/erp/mapper/pp/GlassOptimizeMapper.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/java/com/example/erp/service/pp/GlassOptimizeService.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/resources/mapper/pp/GlassOptimize.xml 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/pp/glassOptimize/page/ProjectDetail.vue
@@ -55,18 +55,21 @@
    {field: 'width',
      width: 100,
      title: t('order.width'),
      editRender: { name: 'input' },
      sortable: true
    },
    {
      field: 'height',
      width: 100,
      title: t('order.height'),
      editRender: { name: 'input' },
      sortable: true
    },
    {
      field: 'quantity',
      width: 150,
      title: t('order.quantity'),
      editRender: { name: 'input' },
      filters: [{data: ''}],
      slots: {filter: 'num1_filter'},
      sortable: true
@@ -212,15 +215,28 @@
    body: {
      options: [
        [
          {code: 'setAmount', name: '设置统一磨量',},
          {code: 'setAmount', name: '设置统一磨量',prefixIcon:'vxe-icon-edit'},
          {code: 'addRow', name: '添加临时小片', prefixIcon: 'vxe-icon-add', visible: true, disabled: false},
          {code: 'displayProcessCard', name: '显示流程卡',},
          {code: 'hideProcessCard', name: '隐藏流程卡',},
          {code: 'setShape', name: '设置图形',},
          {code: 'Export', name: '数据导出', prefixIcon: 'vxe-icon-download', visible: true, disabled: false},
          {code: 'safeDXF', name: '图形另存为DXF',},
          {code: 'exportOPTIMA', name: '导出数据到OPTIMA',},
          {code: 'copyChecked', name: t('basicData.selectSame'), prefixIcon: 'vxe-icon-copy', visible: true, disabled: false },
          {code: 'copyAll', name: t('basicData.sameAfterwards'), prefixIcon: 'vxe-icon-feedback', visible: true, disabled: false },
          {
            code: 'copyChecked',
            name: t('basicData.selectSame'),
            prefixIcon: 'vxe-icon-copy',
            visible: true,
            disabled: false
          },
          {
            code: 'copyAll',
            name: t('basicData.sameAfterwards'),
            prefixIcon: 'vxe-icon-feedback',
            visible: true,
            disabled: false
          },
        ],
        []
      ]
@@ -307,10 +323,89 @@
    }
  },
  {
    code: 'Export', // 导出文件操作的配置
    successMsg: '文件导出成功!',
    code: 'addRow',
    successMsg: '已添加',
    gridRef: xGrid,
    requiresRow: false,
    addNewRow: async () => {
      // 获取当前的磨量配置
      let currentGrindConfig = null;
      try {
        const res = await request.post(`/glassOptimize/getConfiguration/磨量/${username}`);
        if (res.code == "200" && res.data.data && res.data.data.length > 0) {
          const rawData = res.data.data[0];
          currentGrindConfig = {};
          for (const key in rawData) {
            if (typeof rawData[key] === 'string') {
              currentGrindConfig[key] = rawData[key].replace(/^\"|\"$/g, '');
            } else {
              currentGrindConfig[key] = rawData[key];
            }
          }
        }
      } catch (error) {
        console.warn('获取磨量配置失败:', error);
      }
      // 根据磨量配置设置默认值
      let defaultLongGrind1 = 0;
      let defaultLongGrind2 = 0;
      let defaultShortGrind1 = 0;
      let defaultShortGrind2 = 0;
      if (currentGrindConfig) {
        defaultLongGrind1 = parseFloat(currentGrindConfig.leftEdge) || 0;
        defaultLongGrind2 = parseFloat(currentGrindConfig.rightEdge) || 0;
        defaultShortGrind1 = parseFloat(currentGrindConfig.upEdge) || 0;
        defaultShortGrind2 = parseFloat(currentGrindConfig.downEdge) || 0;
      }
      // 创建新行数据,将 width、height、quantity 设置为数值类型
      const newRow = {
        order_number: 0,
        width: 0,
        height: 0,
        quantity: 0,
        longGrind1: defaultLongGrind1,
        longGrind2: defaultLongGrind2,
        shortGrind1: defaultShortGrind1,
        shortGrind2: defaultShortGrind2,
        shape: '',
        process_id: '',
        productName: '',
        price: 0,
        remark: '',
        buildingNumber: '',
        perimeter: 0,
        area: 0,
        rackNo: 1,
        layer: 1,
        glass_child: '',
        markIcon: '',
        processId: '',
        totalLayer: 0,
        patchState: 0,
        heatLayoutId: 0,
        process: '',
        orderNo: '',
        customerName: '',
        processingNote: '',
        projectName: ''
      };
      // 将新行添加到表格数据中
      const currentData = gridOptions.data || [];
      const updatedData = [...currentData, newRow];
      gridOptions.data = updatedData;
      xGrid.value.loadData(updatedData);
      // 获取新添加行的索引
      const newIndex = updatedData.length - 1;
      // 选中并编辑新行
      await nextTick();
      xGrid.value.setActiveRow(newRow);
    }
  },
  {
    code: 'safeDXF',
@@ -358,6 +453,20 @@
        if (config.code === 'Export') {
          config.gridRef.value.exportData();
          ElMessage.success(config.successMsg);
          return;
        }
        if (config.code === 'addRow') {
          // 添加确认提示弹窗,询问用户是否进行当前操作
          ElMessageBox.confirm('是否添加临时小片?', '确认操作', {
            confirmButtonText: '确定',
            cancelButtonText: '取消',
            type: 'warning'
          }).then(() => {
            config.addNewRow();
            ElMessage.success(config.successMsg);
          }).catch(() => {
            ElMessage.info('已取消操作');
          });
          return;
        }
        if (config.code === 'copyChecked') {
@@ -493,14 +602,14 @@
        rackNoValue = item.rackNo;
      }
      return {
        width: item.width,
        height: item.height,
        width: parseFloat(item.width) || 0,
        height: parseFloat(item.height) || 0,
        processId: item.processId,
        layer: item.layer,
        totalLayer: item.totalLayer,
        orderSort: item.order_number,
        markIcon: item.markIcon,
        quantity: item.quantity,
        quantity: parseInt(item.quantity) || 0,
        patchState: item.patchState,
        upGrind: item.longGrind1,
        downGrind: item.longGrind2,
@@ -573,7 +682,6 @@
      }
    }
);
// 单独处理选中原片数据的逻辑
watch(
    () => props.CheckboxChangeData,
north-glass-erp/src/main/java/com/example/erp/mapper/pp/GlassOptimizeMapper.java
@@ -239,4 +239,6 @@
    Map<String, Object> getProjectState(String projectNo);
    void updateProjectTemperingId(String projectNumber);
    List<Map<String, Object>> optimizeTemp(String projectNo);
}
north-glass-erp/src/main/java/com/example/erp/service/pp/GlassOptimizeService.java
@@ -639,6 +639,10 @@
        } else {
            dataList = glassOptimizeMapper.directOptimization(projectNo);
        }
        List<Map<String, Object>> tempDataList = null;
        if (Integer.parseInt(stringObjectMap.get("optimize_state").toString())==1) {
            tempDataList = glassOptimizeMapper.optimizeTemp(projectNo);
        }
        // 获取磨量配置数据
        List<Map<String, Object>> grindingTrimmingList = glassOptimizeMapper.getGrindingOptimize(username);
@@ -657,6 +661,9 @@
                }
            }
        }
        if (tempDataList != null && !tempDataList.isEmpty()) {
            dataList.addAll(tempDataList);
        }
        map.put("optimizeState", Integer.parseInt(stringObjectMap.get("optimize_state").toString()));
        map.put("data", dataList);
        map.put("project", glassOptimizeMapper.selectProjectCount(projectNo));
north-glass-erp/src/main/resources/mapper/pp/GlassOptimize.xml
@@ -185,7 +185,7 @@
             c.project_no,
             d.child_width as 'width',
             d.child_height as 'height',
             (d.child_width + d.child_height) * 2 as 'perimeter',
             (d.child_width + d.child_height) * 2/ 1000 as 'perimeter',
             c.quantity,
             od.shape,
             concat( c.process_id, '-', c.technology_number ) AS 'process_id',
@@ -229,7 +229,7 @@
                c.project_no,
                d.child_width as 'width',
                d.child_height as 'height',
                (d.child_width + d.child_height) * 2 as 'perimeter',
                (d.child_width + d.child_height) * 2/ 1000 as 'perimeter',
                c.patch_num as quantity,
                od.shape,
                concat( c.process_id, '-', c.technology_number ) AS 'process_id',
@@ -343,7 +343,7 @@
#             h.layout_id as heatLayoutId,
            h.width AS width,
            h.height AS height,
            (h.width + h.height) * 2 as 'perimeter',
            (h.width + h.height) * 2 / 1000 as 'perimeter',
            od.shape,
            count( 1 ) AS quantity,
            concat( h.process_id, '-', h.layer ) AS process_id,
@@ -2148,6 +2148,31 @@
        WHERE
            project_no = #{projectNo}
    </select>
    <select id="optimizeTemp" resultType="java.util.Map" parameterType="java.lang.String">
        SELECT
        project_no,
        layer,
        o_width as width,
        o_height as height,
        rack_no as rackNo,
        COUNT(*) as quantity,
        ROUND((o_width + o_height) * 2 / 1000, 2) as perimeter,
        ROUND(o_width * o_height * COUNT(*) / 1000000, 4) as area
    FROM
        pp.`optimize_detail`
    WHERE
        project_no =  #{projectNo}
      AND process_id = ''
    GROUP BY
        project_no,
        layer,
        o_width,
        o_height,
        rack_no
    ORDER BY
        o_width,
        o_height
    </select>
</mapper>