廖井涛
2025-09-16 1bc69caa8283a61557e286839306ded07dedf087
Merge branch 'master' of http://10.153.19.25:10105/r/ERP_override
1个文件已添加
12个文件已修改
1011 ■■■■ 已修改文件
north-glass-erp/northglass-erp/src/components/pp/PrintReworkCustomLabel.vue 300 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/components/pp/TagStyleDesigner.vue 47 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/hook/createTemplateTag.js 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/lang/zh.js 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/pp/processCard/PrintFlowCardDetails.vue 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/pp/processCard/PrintProjectDetails.vue 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/pp/replenish/PrintReplenishFlowCard.vue 61 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/pp/rework/PrintReworkFlowCard.vue 340 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/java/com/example/erp/controller/pp/ReworkController.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/java/com/example/erp/mapper/pp/FlowCardMapper.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/java/com/example/erp/service/pp/FlowCardService.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/java/com/example/erp/service/pp/ReworkService.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/resources/mapper/pp/FolwCard.xml 168 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/components/pp/PrintReworkCustomLabel.vue
New file
@@ -0,0 +1,300 @@
<script setup>
import request from "@/utils/request"
import {ElDatePicker, ElMessage} from "element-plus"
import {nextTick, onMounted, onUnmounted, reactive, ref, watch} from "vue"
import {Search} from "@element-plus/icons-vue"
import {useRouter} from 'vue-router'
import {changeFilterEvent, filterChanged} from "@/hook"
import {useI18n} from 'vue-i18n'
import deepClone from "@/utils/deepClone";
import companyInfo from "@/stores/sd/companyInfo";
const company = companyInfo()
//语言获取
const {t} = useI18n()
let router = useRouter()
let produceList = ref([])
let labelList = ref([])
let titleList = ref([])
let dataList = ref([])
let list = ref([])
let lastList = ref([])
let filterData = ref({})
const data = ref({
  printList: []
})
let props = defineProps({
  list:null,//勾选的数据
  faceOrientation:null,//内外面
  type:null,//标签模板
  lableType:null,//标签类型
  titleList:null,//标题
  switch:null,//判断是否为新打印,
  lastList:[],
  detailType:null
})
const {currentRoute} = useRouter()
const route = currentRoute.value
let type = props.type
let lableType = props.lableType
let switchType = props.switch
let detailType= props.detailType
data.value.printList = JSON.parse(props.list)
onMounted(() => {
  console.log(type,lableType)
      request.post(`/rework/getSelectReworkPrintCustomLabel/${type}/${lableType}`, data.value).then((res) => {
        if (res.code == 200) {
          produceList.value = deepClone(res.data.title)
          console.log(res.data)
          list.value = deepClone(res.data.data)
          const data = produceList.value[0].value
          dataList = JSON.parse(`[${data}]`);
          const printElements = dataList[0].panels[0].printElements;
          let a = []
          printElements.forEach(element => {
            if(element.options.field==='table'){
              element.options.columns[0].forEach(elements => {
                if(elements.field){
                  a.push({
                        title: elements.title,
                        name: elements.field
                      }
                  )
                }
              })
            }else{
              a.push({
                title: element.options.title,
                name: element.options.field
              })
            }
          })
          labelList = a
          for (let i = 0; i < list.value.length; i++) {
            let count = list.value[i].data.length
            for (let j = 0; j < count; j++) {
              if (detailType==0){
                for (let k = 0; k < list.value[i].data[j].quantity; k++) {
                  props.lastList.push(list.value[i].data[j])
                }
              }
              else {
                for (let k = 0; k < list.value[i].data[j].quantity; k++) {
                props.lastList.push(list.value[i].data[j])
                }
              }
            }
          }
        } else {
          ElMessage.warning(res.msg)
          router.push("/login")
        }
      })
    }
)
//修改相同产品名称标签
const updateProductName = (event, index,id) => {
  // 创建映射对象
  const propertyMapping = {};
  labelList.forEach(item => {
    propertyMapping[item.name] = item.title;
  });
  // 输入的值
  const newValue = event.target.innerText;
  const parts = newValue.split(':');
  const result = parts[1]; // 获取冒号后的部分
  // 获取映射中所有的键
  const keys = Object.keys(propertyMapping);
  // 根据 index 获取对应的属性名
  const propertyName = keys[index];
  // 如果映射中没有该 index,直接返回
  if (!propertyName) {
    console.warn('Unsupported index:', index);
    return;
  }
  // 遍历 lastList 并更新对应的属性
  props.lastList.forEach(obj => {
    // 获取前缀和 orderId
    const prefix = props.lastList[id].processId.substring(0, 11);
    const orderId = obj.orderId;
    const glassNumber=props.lastList[id].glassNumber
    // 根据 propertyName 更新属性
    if (propertyName === 'productAbbreviation' && prefix === obj.processId.substring(0, 11)) {
      obj.productAbbreviation = result;
    }
    if (propertyName === 'project' && orderId === obj.orderId) {
      obj.project = result;
    }
    if (propertyName === 'productName' && prefix === obj.processId.substring(0, 11)){
      obj.productName = result;
    }
    if (propertyName === 'customerName' && orderId === obj.orderId){
      obj.customerName = result;
    }
    if (propertyName === 'orderId' && orderId === obj.orderId){
      obj.orderId = result;
    }
    if (propertyName === 'glassNumber' && glassNumber === obj.glassNumber){
      obj.glassNumber = result;
    }
    if (propertyName === 'width' && glassNumber === obj.glassNumber){
      obj.width = result;
    }
    if (propertyName === 'height' && glassNumber === obj.glassNumber){
      obj.height = result;
    }
    if (propertyName === 'custom1' && orderId === obj.orderId){
      obj.custom1 = result;
    }
    if (propertyName === 'custom2' && orderId === obj.orderId){
      obj.custom2 = result;
    }
    if (propertyName === 'custom3' && orderId === obj.orderId){
      obj.custom3 = result;
    }
    if (propertyName === 'custom4' && orderId === obj.orderId){
      obj.custom4 = result;
    }
    if (propertyName === 'custom5' && orderId === obj.orderId){
      obj.custom5 = result;
    }
  });
}
</script>
<template>
  <div id="print" :class="company.printLabel.className.custom.printFlowCardName()">
    <div v-for="(item1,index) in props.lastList" :class="company.printLabel.className.custom.entiretyName()">
      <div class="row4">{{ faceOrientation }}</div>
      <div v-for="(item,id) in labelList" :class="company.printLabel.className.custom.contentRowName()">
        <div v-if="item1[item.name] != null && item1[item.name] !== ''" class="row1"  contenteditable="true" @input="updateProductName($event, id,index)" v-text="item.title+':'+item1[item.name]"></div>
        <div v-else class="row1"  contenteditable="true" @input="updateProductName($event, id,index)" v-text="item.title+':'"></div>
        <!--          <div class="row2" style="width: 100%;"><input class="contentRow2" v-model="item1[item.name]"  @keyup="updataProductName()" style="border: none;"/></div>-->
        <!--          <div v-if="item1[item.name] != null && item1[item.name] !== ''" class="row2" style="width: 100%;" contenteditable="true" @input="updateProductName($event, id)" v-text="item1[item.name]"></div>-->
      </div>
      <!--        <div v-html="company.printLabel.custom(item1)"></div>-->
      <div v-if="(id + 1) % 2 === 0" class="pagebreak"></div>
    </div>
  </div>
</template>
<style scoped>
* {
  margin: 0;
  padding: 0;
}
body{
  font-weight: bolder;
  overflow: hidden;
}
#printButton {
  margin-top: -20px;
  width: 100px;
}
/*成*/
.printFlowCard_finished {
  /*
  font-family: 'Microsoft YaHei', '微软雅黑', sans-serif;
  */
  flex-wrap: nowrap;
  font-size: 12pt;
  display: flex;
  flex-direction:column;
}
/*成*/
.entirety_finished {
  display: flex;
  text-align: center;
  flex-direction:column;
  margin-left: 10px;
  width: 100%;
  height: 100%;
}
/*div{
  font-family: 'Microsoft YaHei', '微软雅黑', sans-serif;
}*/
.row3{
  text-align: center;
  font-weight: bolder;
  font-size: 22px;
  /*display: flex;
  justify-content:space-evenly;*/
}
.row3 label{
  font-size: 22px;
  margin-top: 28px;
}
.contentRow{
  font-weight: bolder;
  display: flex;
  text-align: center;
  width: 100%;
}
label{
  font-weight: bolder;
  /*font-family: 'Microsoft YaHei', '微软雅黑', sans-serif;*/
}
.row1{
  width: 30%;
  font-weight: bolder;
}
.row4{
  font-weight: bolder;
  text-align: right;
  margin-right: 10px;
}
.row1,.row2{
  text-align: left;
  font-weight: bolder;
}
@page {
  size: auto;  /* auto is the initial value */
  margin: 13mm 4mm 0mm 6mm;  /* this affects the margin in the printer settings */
}
@media print {
  div {
    page-break-inside: avoid;
  }
.entirety_finished{
  page-break-before: always;
}
  .pagebreak {
    page-break-after: always;
  }
}
</style>
north-glass-erp/northglass-erp/src/components/pp/TagStyleDesigner.vue
@@ -627,13 +627,13 @@
    }
  },
  {
    tid: 'heat_layout_sort', title: '玻璃ID',  type: 'text',
    tid: 'heat_layout_sort', title: '玻璃ID二维码',  type: 'text',
    options: {
      field: 'heat_layout_sort',
      testData: '玻璃ID',
      height: 32,
      fontSize: 12,
      lineHeight: 18,
      testData: '玻璃ID二维码',
      height: 42,
      fontSize: 10,
      lineHeight: 42,
      textType: "qrcode"
    }
  },
@@ -924,9 +924,11 @@
const printOrder = (type) => {
  hiprintTemplate.value.update(tag.value.value)
  tag.value.value = JSON.parse(JSON.stringify(hiprintTemplate.value.getJson()))
  /*hiprintTemplate.value.update(tag.value.value)
  tag.value.value = JSON.parse(JSON.stringify(hiprintTemplate.value.getJson()))*/
  const list = JSON.parse(JSON.stringify(hiprintTemplate.value.getJson()))
  const restore = list
  list.panels[0].printElements.forEach(element => {
    element.options.fontFamily = 'Arial'
@@ -956,7 +958,6 @@
    }*/
  })
  hiprintTemplate.value.update(list)
  let object =  lastList.value
  //判断是否为表格
@@ -969,7 +970,7 @@
  //判断是否有 嵌套自定义纸张
  if(tag.value.tagHeight && tag.value.tagWidth){
    const print =createTemplate(hiprintTemplate.value.getJson(),object,tag.value.tagWidth,tag.value.tagHeight)
    const print =createTemplate(list,object,tag.value.tagWidth,tag.value.tagHeight)
    hiprintTemplate.value.update(print.template)
    object = print.printData
  }
@@ -981,9 +982,10 @@
      hiprintTemplate.value.print(object)
  }
  hiprintTemplate.value.update(restore)
}
const closeDialog = () => {
  hiprintTemplate.value.update(tag.value.value)
 // hiprintTemplate.value.update(tag.value.value)
}
const selectRecordsData = ref({
@@ -1217,10 +1219,27 @@
      @close="closeDialog"
      style="width: 80%;height:75% ">
    <template #header="{ close, titleId, titleClass }">
      <el-button @click="printOrder(2);printNumber()" :icon="View" circle/>
      <el-button @click="printOrder(1);printNumber()" :icon="Printer" circle/>
      <el-button @click="printOrder(3);printNumber()"  >{{ $t('processCard.noTitle') }}</el-button>
<!--      <el-button @click="printOrder(2);printNumber()" :icon="View" circle/>-->
<!--      <el-button @click="printOrder(1);printNumber()" :icon="Printer" circle/>-->
<!--      <el-button @click="printOrder(3);printNumber()"  >{{ $t('processCard.noTitle') }}</el-button>-->
      <el-tooltip
          class="box-item"
          effect="dark"
          :content="$t('processCard.yesTitle')"
          placement="top"
      >
        <el-button :icon="Printer" circle @click="printOrder(2);printNumber()"/>
      </el-tooltip>
      <el-tooltip
          class="box-item"
          effect="dark"
          :content="$t('processCard.noTitle')"
          placement="top"
      >
        <el-button @click="printOrder(3);printNumber()">
          <i class="vxe-icon-print"></i>
        </el-button>
      </el-tooltip>
    </template>
    <print-custom-label id="childLabel"
                        destroy-on-close
north-glass-erp/northglass-erp/src/hook/createTemplateTag.js
@@ -10,10 +10,12 @@
// 水平方向, 可以容纳多少个模板
    const hor = parseInt(width / hiprintTemplateMap.panels[0].width);
// 新的模板,宽高单位是 mm
    let template = {
        panels: [
            {
                type:"auto",
                index: 0,
                width,
                height,
@@ -63,7 +65,9 @@
        // 3.4 计算下一行 模板的 top 值 (单位转换)
        top += hinnn.mm.toPt(hiprintTemplateMap.panels[0].height)
    }
    if(hiprintTemplateMap.panels[0].type==="auto"){
        template = hiprintTemplateMap
    }
north-glass-erp/northglass-erp/src/lang/zh.js
@@ -427,7 +427,8 @@
            selectDetailProcessCard:"流程卡明细查询"
        },
        noTitle:'无标题',
        yesTitle:'有标题打印',
        noTitle:'无标题打印',
        buildingNumber:'楼号',
        longSide:'长边',
        shortSide:'短边',
north-glass-erp/northglass-erp/src/views/pp/processCard/PrintFlowCardDetails.vue
@@ -1051,8 +1051,24 @@
        destroy-on-close
        style="width: 80%;height:75% ">
      <template #header="{ close, titleId, titleClass }">
        <el-button :icon="Printer" circle @click="printOrder(1)"/>
        <el-button @click="printOrder(3)"  >{{ $t('processCard.noTitle') }}</el-button>
        <el-tooltip
            class="box-item"
            effect="dark"
            :content="$t('processCard.yesTitle')"
            placement="top"
        >
          <el-button :icon="Printer" circle @click="printOrder(1)"/>
        </el-tooltip>
        <el-tooltip
            class="box-item"
            effect="dark"
            :content="$t('processCard.noTitle')"
            placement="top"
        >
          <el-button @click="printOrder(3)">
            <i class="vxe-icon-print"></i>
          </el-button>
        </el-tooltip>
      </template>
      <print-custom-label-x-j id="childLabel"
                              :faceOrientation="labelRow.faceOrientation"
north-glass-erp/northglass-erp/src/views/pp/processCard/PrintProjectDetails.vue
@@ -410,8 +410,26 @@
        destroy-on-close
        style="width: 80%;height:75% ">
      <template #header="{ close, titleId, titleClass }">
        <el-button :icon="Printer" circle @click="printObjectProcess(1)"/>
        <el-button @click="printObjectProcess(3)"  >{{ $t('processCard.noTitle') }}</el-button>
<!--        <el-button :icon="Printer" circle @click="printObjectProcess(1)"/>-->
<!--        <el-button @click="printObjectProcess(3)"  >{{ $t('processCard.noTitle') }}</el-button>-->
        <el-tooltip
            class="box-item"
            effect="dark"
            :content="$t('processCard.yesTitle')"
            placement="top"
        >
          <el-button :icon="Printer" circle @click="printObjectProcess(1)"/>
        </el-tooltip>
        <el-tooltip
            class="box-item"
            effect="dark"
            :content="$t('processCard.noTitle')"
            placement="top"
        >
          <el-button @click="printObjectProcess(3)">
            <i class="vxe-icon-print"></i>
          </el-button>
        </el-tooltip>
      </template>
      <print-custom-label-project id="childLabel"
north-glass-erp/northglass-erp/src/views/pp/replenish/PrintReplenishFlowCard.vue
@@ -23,6 +23,7 @@
import QueuePrinter from "@/hook/queue";
import PrintCustomLabelProject from "@/components/pp/PrintCustomLabelProject.vue";
import PrintProcessConsolidated from '@/components/pp/PrintConsolidatedReplenish.vue'
import {createTemplate} from "@/hook/createTemplateTag";
const company = companyInfo()
//语言获取
const {t} = useI18n()
@@ -48,6 +49,7 @@
  value: null,
  size: null
})
let hiprintTemplate = ref(null)
let lastList = ref([])
const getTableRow = (row,type) =>{
  switch (type) {
@@ -176,6 +178,7 @@
onMounted(async () => {
  await getTags();
  await hiprint.init();
})
//打印类型
@@ -691,16 +694,20 @@
  })
}
const getTags = () => {
  request.get('tagStyle/getTagList').then(res => {
    tags.value = res.data
  })
}
let hiprintTemplate = ref()
const changeTag = () => {
  hiprintTemplate.value = new hiprint.PrintTemplate({});
  const json = JSON.parse(tag.value.value)
  hiprintTemplate.value.design("#hiprint-printTemplate1",{grid:true});
  const json = tag.value.value
  hiprintTemplate.value.update(json)
}
const getTags = () => {
  request.get('tagStyle/getTagList').then(res => {
    res.data.forEach(item => {
      item.value = JSON.parse(item.value)
    })
    tags.value = res.data
  })
}
// 监听打印完成事件
@@ -719,16 +726,35 @@
}
const printOrder = (type) => {
  const list = hiprintTemplate.value.getJson()
  const list = tag.value.value
  list.panels[0].printElements.forEach(element => {
    element.options.fontFamily = 'Arial'
    if( element.options.field !== undefined){
      if(type===3 ){
        element.options.hideTitle = true
      }
    }
    if(type!==3){
      element.options.hideTitle = false
      if( element.options.field === undefined){
        element.options.hideTitle = true
      }
    }
  })
  let object =  lastList.value
  //hiprintTemplate.value.update(list)
  let object =  JSON.parse(JSON.stringify(lastList.value))
  //判断是否为表格
  let columnsNum = null
  if(list.panels[0].printElements[0].options.field==='table'){
    object = {table:lastList.value}
    columnsNum = (list.panels[0].printElements[0].options.gridColumns || 1)
  }
  //判断是否有 嵌套自定义纸张
  if(tag.value.tagHeight && tag.value.tagWidth){
    const print =createTemplate(list,object,tag.value.tagWidth,tag.value.tagHeight)
    hiprintTemplate.value.update(print.template)
    object = print.printData
  }
  hiprintTemplate.value.print(object)
@@ -878,7 +904,24 @@
        destroy-on-close
        style="width: 80%;height:75% ">
      <template #header="{ close, titleId, titleClass }">
        <el-tooltip
            class="box-item"
            effect="dark"
            :content="$t('processCard.yesTitle')"
            placement="top"
        >
        <el-button :icon="Printer" circle @click="printOrder(1)"/>
        </el-tooltip>
        <el-tooltip
            class="box-item"
            effect="dark"
            :content="$t('processCard.noTitle')"
            placement="top"
        >
          <el-button @click="printOrder(3)">
            <i class="vxe-icon-print"></i>
          </el-button>
        </el-tooltip>
      </template>
      <print-custom-label id="childLabel"
                                  :detailType="labelRow.detailType"
north-glass-erp/northglass-erp/src/views/pp/rework/PrintReworkFlowCard.vue
@@ -11,13 +11,14 @@
import {addListener, toolbarButtonClickEvent} from "@/hook/mouseMove";
import PrintProcess from '@/components/pp/PrintReworkProcess.vue'
import PrintLabel from '@/views/pp/processCard/PrintLabel.vue'
import PrintCustomLabel from '@/components/pp/PrintCustomLabel.vue'
import footSum from "@/hook/footSum"
import {Search} from "@element-plus/icons-vue";
import companyInfo from "@/stores/sd/companyInfo"
import {CircleCheck, Download, Printer} from "@element-plus/icons-vue/global";
import SortDetail from "@/components/pp/SelectSortDetailProcessCard.vue";
import PrintCustomLabel from '@/components/pp/PrintReworkCustomLabel.vue'
import {hiprint} from "vue-plugin-hiprint";
import {createTemplate} from "@/hook/createTemplateTag";
const company = companyInfo()
//语言获取
const {t} = useI18n()
@@ -31,7 +32,7 @@
const xGrid = ref(null)
const xGridDetail =ref(null)
let hiprintTemplate = ref(null)
const getTableRow = (row,type) =>{
  switch (type) {
@@ -46,7 +47,13 @@
  }
}
//标签
let  labelRow = ref({
  list:null,//勾选的数据
  faceOrientation:null,//内外面
  type:null,//标签模板
  lableType:null//标签类型
})
//筛选条件,有外键需要先定义明细里面的数据
let filterData = ref({
@@ -61,6 +68,73 @@
})
let lastList = ref([])
const tags = ref([])
const tag = ref({
  id: null,
  name: null,
  type: 1,
  tagWidth: null,
  tagHeight: null,
  value: null,
  size: null
})
onMounted(async () => {
  await getTags();
  await hiprint.init();
})
const changeTag = () => {
  hiprintTemplate.value = new hiprint.PrintTemplate({});
  hiprintTemplate.value.design("#hiprint-printTemplate1",{grid:true});
  const json = tag.value.value
  hiprintTemplate.value.update(json)
}
const getTags = () => {
  request.get('tagStyle/getTagList').then(res => {
    res.data.forEach(item => {
      item.value = JSON.parse(item.value)
    })
    tags.value = res.data
  })
}
const printOrder = (type) => {
  const list = tag.value.value
  list.panels[0].printElements.forEach(element => {
    element.options.fontFamily = 'Arial'
    if( element.options.field !== undefined){
      if(type===3 ){
        element.options.hideTitle = true
      }
    }
    if(type!==3){
      element.options.hideTitle = false
      if( element.options.field === undefined){
        element.options.hideTitle = true
      }
    }
  })
  //hiprintTemplate.value.update(list)
  let object =  JSON.parse(JSON.stringify(lastList.value))
  //判断是否为表格
  let columnsNum = null
  if(list.panels[0].printElements[0].options.field==='table'){
    object = {table:lastList.value}
    columnsNum = (list.panels[0].printElements[0].options.gridColumns || 1)
  }
  //判断是否有 嵌套自定义纸张
  if(tag.value.tagHeight && tag.value.tagWidth){
    const print =createTemplate(list,object,tag.value.tagWidth,tag.value.tagHeight)
    hiprintTemplate.value.update(print.template)
    object = print.printData
  }
  hiprintTemplate.value.print(object)
}
//定义页面总页数
let pageTotal = ref('')
@@ -320,7 +394,7 @@
  toolbarConfig: {
    buttons: [
      {code: 'print', name: t('processCard.print'), status: 'primary'},
      //{code: 'customLabel', name: t('processCard.customLabelPrinting'), status: 'primary'},
      {code: 'customLabel', name: t('processCard.customLabelPrinting'), status: 'primary'},
      {code: 'printLabel', name: t('processCard.labelPrinting'), status: 'primary'},
      {code: 'printLabel2', name: t('processCard.labelPrinting2'), status: 'primary'},
@@ -430,31 +504,20 @@
            ElMessage.warning(t('searchOrder.msgList.checkOrder'))
            return
          }
          if (type===null||type===''||type===undefined){
            ElMessage.warning(t('processCard.pleaseSelectCustomPrintLabelStyle'))
          if (tag.value.name == null || tag.value.name == '') {
            ElMessage.warning(t('replenish.printPatchesMsg1'))
            return
          }
          let id = ""
          for (let i = 0; i < selectRecords.length; i++) {
            if (i + 1 === selectRecords.length) {
              id += selectRecords[i].id
            } else {
              id += selectRecords[i].id + "|"
            }
          }
          if (lableTypes==1){
            router.push({path: '/main/rework/PrintReworkCustomLabel', query: {type:type,faceOrientation:faceOrientation,lableType:lableTypes,  printList: JSON.stringify(selectRecords)}})
          }
          else {
            router.push({path: '/main/rework/PrintReworkCustomLabelSemi', query: {type:type,faceOrientation:faceOrientation,lableType:lableTypes,  printList: JSON.stringify(selectRecords)}})
          }
          labelRow.value.list = JSON.stringify(selectRecords)
          labelRow.value.type = tag.value.name
          labelRow.value.dataType = 3
          labelRow.value.lableType = 2
          labelRow.value.switch = true
          lastList.value = []
          dialogTableVisibleLabel.value = true
          break
        }
        case 'printLike': {
          if(selectRecords===null ||selectRecords===''||selectRecords.length===0){
@@ -488,133 +551,6 @@
const detailGridOptions = reactive({
  border: "full",//表格加边框
  keepSource: true,//保持源数据
  align: 'center',//文字居中
  stripe: true,//斑马纹
  rowConfig: {isCurrent: true, isHover: true, height: 30},//鼠标移动或选择高亮
  id: 'demo_1',
  showFooter: true,//显示脚
  printConfig: {},
  importConfig: {},
  exportConfig: {},
  scrollX: {enabled: true},
  scrollY: {enabled: true, gt: 0},//开启虚拟滚动
  showOverflow: true,
  columnConfig: {
    resizable: true,
    useKey: true
  },
  filterConfig: {   //筛选配置项
    // remote: true
  },
  customConfig: {
    storage: true
  },
  editConfig: {
    trigger: 'click',
    mode: 'row',
    showStatus: true
  },//表头参数
  columns: [
    {type: 'expand', fixed: "left", slots: {content: 'content'}, width: 50},
    {type: 'seq', fixed: "left", title: t('basicData.Number'), width: 50},
    {
      field: 'sort',
      width: 80,
      editRender: {name: 'input', attrs: {placeholder: ''}},
      title: t('processCard.sorting'),
    },
    {
      field: 'process_id',
      title: t('processCard.processId'),
      filters: [{data: ''}],
      slots: {filter: 'num1_filter'},
      filterMethod: filterChanged
    },
    {
      field: 'order_number',
      title: t('order.OrderNum'),
      filters: [{data: ''}],
      slots: {filter: 'num1_filter'},
      filterMethod: filterChanged
    },
    {
      field: 'technology_number',
      title: t('processCard.technologyNumber'),
      filters: [{data: ''}],
      slots: {filter: 'num1_filter'},
      filterMethod: filterChanged
    },
    {
      field: 'glass_address',
      title: t('processCard.glassAddress'),
      filters: [{data: ''}],
      slots: {filter: 'num1_filter'},
      filterMethod: filterChanged
    },
    {
      field: 'quantity',
      title: t('order.quantity'),
      filters: [{data: ''}],
      slots: {filter: 'num1_filter'},
      filterMethod: filterChanged
    },
    {
      field: 'child_width',
      title: t('order.width'),
      filters: [{data: ''}],
      slots: {filter: 'num1_filter'},
      filterMethod: filterChanged
    },
    {
      field: 'child_height',
      title: t('order.height'),
      filters: [{data: ''}],
      slots: {filter: 'num1_filter'},
      filterMethod: filterChanged
    },
    {
      field: 'area',
      title: t('order.area'),
      filters: [{data: ''}],
      slots: {filter: 'num1_filter'},
      filterMethod: filterChanged
    },
  ],//表头按钮
  toolbarConfig: {
    buttons: [
      {code: 'print', name: t('processCard.print'), status: 'primary'},
      {code: 'customLabel', name: t('processCard.customLabelPrinting'), status: 'primary'},
      {code: 'printLabel', name: t('processCard.labelPrinting'), status: 'primary'},
      {code: 'printLabel2', name: t('processCard.labelPrinting2'), status: 'primary'},
      {code: 'printLike', name: "同配置打印", status: 'primary'},
    ],
    // import: false,
    // export: true,
    //print: true,
    zoom: true,
    custom: true
  },
  data: null,//表格数据
  //脚部求和
  footerMethod ({ columns, data }) {//页脚函数
    return[
      columns.map((column, columnIndex) => {
        if (columnIndex === 0) {
          return t('basicData.total')
        }
        const List = ["quantity",'area',]
        if (List.includes(column.field)) {
          return footSum(data, column.field)
        }
        return ''
      })
    ]
  }
})
const openedTable = () => {
  let detail =ref(produceDetailList.value)
@@ -672,32 +608,32 @@
      <!--    <el-input clearable :placeholder="$t('processCard.mergePrinting')" v-model="printMerge" style="width: 90px"></el-input>-->
      &nbsp;
      <label>{{$t('processCard.labelStyle')}}:</label>
      <el-select v-model="printType" clearable default-value="default_city" :placeholder="$t('processCard.pleaseSelect')" style="width: 120px">
      <el-select v-model="tag" :placeholder="$t('replenish.listLabelTemplates')" style="width: 140px" @change="changeTag">
        <el-option
            v-for="item in titleSelectJson['dataType']"
            :key="item.id"
            :label="item.name"
            :value="item.name"
            v-for="(tag,index) in tags"
            :key="index"
            :label="tag.name"
            :value="tag"
        />
      </el-select>
      &nbsp;
      <el-select v-model="lableType" class="m-2" :placeholder="lableTypeOptions[0].label" style="width: 140px">
        <el-option
            v-for="item in filteredOptions"
            :key="item.value"
            :label="item.label"
            :value="item.value"
        />
      </el-select>
      &nbsp;
      <el-select v-model="stateValue" class="m-2" :placeholder="$t('processCard.pleaseSelect')" clearable allow-create filterable style="width: 140px">
        <el-option
            v-for="item in stateOptions"
            :key="item.value"
            :label="item.label"
            :value="item.value"
        />
      </el-select>
<!--      <el-select v-model="lableType" class="m-2" :placeholder="lableTypeOptions[0].label" style="width: 140px">-->
<!--        <el-option-->
<!--            v-for="item in filteredOptions"-->
<!--            :key="item.value"-->
<!--            :label="item.label"-->
<!--            :value="item.value"-->
<!--        />-->
<!--      </el-select>-->
<!--      &nbsp;-->
<!--      <el-select v-model="stateValue" class="m-2" :placeholder="$t('processCard.pleaseSelect')" clearable allow-create filterable style="width: 140px">-->
<!--        <el-option-->
<!--            v-for="item in stateOptions"-->
<!--            :key="item.value"-->
<!--            :label="item.label"-->
<!--            :value="item.value"-->
<!--        />-->
<!--      </el-select>-->
    </div>
    <div class="main-table">
      <vxe-grid
@@ -761,14 +697,14 @@
                     style="width: 100%;height: 100%" />
    </el-dialog>
    <el-dialog
        v-model="dialogTableVisibleLabel"
        destroy-on-close
        :title="$t('processCard.printLabel')"
        style="width: 80%;height:75% ">
      <PrintLabel :printList="selectRecords"
                  style="width: 100%;height: 100%" />
    </el-dialog>
<!--    <el-dialog-->
<!--        v-model="dialogTableVisibleLabel"-->
<!--        destroy-on-close-->
<!--        :title="$t('processCard.printLabel')"-->
<!--        style="width: 80%;height:75% ">-->
<!--      <PrintLabel :printList="selectRecords"-->
<!--                  style="width: 100%;height: 100%" />-->
<!--    </el-dialog>-->
    <el-dialog
        v-model="dialogTableVisibleCustomLabel"
@@ -788,7 +724,43 @@
      <sort-detail id="child"  :processId="editRow.processId" :technologyNumber="editRow.technologyNumber" />
    </el-dialog>
    <el-dialog
        id="sizeCustom"
        v-model="dialogTableVisibleLabel"
        :title="$t('processCard.printLabel')"
        destroy-on-close
        style="width: 80%;height:75% ">
      <template #header="{ close, titleId, titleClass }">
        <el-tooltip
            class="box-item"
            effect="dark"
            :content="$t('processCard.yesTitle')"
            placement="top"
        >
          <el-button :icon="Printer" circle @click="printOrder(1)"/>
        </el-tooltip>
        <el-tooltip
            class="box-item"
            effect="dark"
            :content="$t('processCard.noTitle')"
            placement="top"
        >
          <el-button @click="printOrder(3)">
            <i class="vxe-icon-print"></i>
          </el-button>
        </el-tooltip>
      </template>
      <print-custom-label id="childLabel"
                          :detailType="labelRow.detailType"
                          :faceOrientation="labelRow.faceOrientation"
                          :lableType="labelRow.lableType"
                          :lastList='lastList'
                          :list="labelRow.list"
                          :switch="labelRow.switch"
                          :titleList="labelRow.titleList"
                          :type="labelRow.type"
                          style="width: 100%;height: 100%"/>
    </el-dialog>
  </div>
</template>
north-glass-erp/src/main/java/com/example/erp/controller/pp/ReworkController.java
@@ -76,4 +76,13 @@
    public Result deleteRework( @RequestBody Map<String,Object> object){
        return Result.seccess(reworkService.deleteReworkSv(object));
    }
    @ApiOperation("返工打印自定义标签数据查询接口")
    @PostMapping("/getSelectReworkPrintCustomLabel/{type}/{lableType}")
    public Result getSelectReworkPrintCustomLabel( @PathVariable String type,
                                                   @PathVariable Integer lableType,
                                                   @RequestBody Map<String, Object> object) {
        return Result.seccess(reworkService.getSelectReworkPrintCustomLabel(type,lableType,object));
    }
}
north-glass-erp/src/main/java/com/example/erp/mapper/pp/FlowCardMapper.java
@@ -124,6 +124,9 @@
    List<Map<String, Object>> getRepairPrintCustomData(String processId, String technologyNumber, String reportingWorkId, Integer orderNumber);
    List<Map<String, Object>> getReworkPrintCustomData(String processId, String technologyNumber, String reportingWorkId, Integer orderNumber);
    List<Map<String, Object>> getGlassNumber(String technologyNumber, String processId);
    Boolean updatePrintStateMp(Integer printState, String processId, String technologyNumber);
@@ -168,6 +171,9 @@
    List<Map<String, String>> getRepairPrintCustomDataSemi(String processId, String technologyNumber, String reportingWorkId, Integer orderNumber);
    List<Map<String, String>> getReworkPrintCustomDataSemi(String processId, String technologyNumber, String reportingWorkId, Integer orderNumber);
    List<Map<String, String>> selectPrintAllMp(String orderId);
    Boolean printAddSortMp(String processId, Integer orderNumber, String technologyNumber, Integer sort, String process);
north-glass-erp/src/main/java/com/example/erp/service/pp/FlowCardService.java
@@ -1236,7 +1236,6 @@
                Map<String, Object> itemmap = new HashMap<>();
                //是否是工程明细打印
                if (detailType == 0) {//工程打印明细
                    itemmap.put("data", flowCardMapper.getPrintCustomDataProjectDetail(flowCard.getProjectNo(), flowCard.getStockId()));
                }
north-glass-erp/src/main/java/com/example/erp/service/pp/ReworkService.java
@@ -228,5 +228,33 @@
        return saveState;
    }
    public Map<String, Object> getSelectReworkPrintCustomLabel(String type, Integer lableType, Map<String, Object> object) {
        Map<String, Object> map = new HashMap<>();
        List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();//最终结果
        List<FlowCard> flowCardList = JSONArray.parseArray(JSONObject.toJSONString(object.get("printList")), FlowCard.class);
        if (!flowCardList.isEmpty()) {
            for (FlowCard flowCard : flowCardList) {
                if (lableType != 2){//成品标签
                    Map<String, Object> itemmap = new HashMap<>();
                    System.out.println(flowCard.getProcessId());
                    System.out.println("==============");
                    itemmap.put("data", flowCardMapper.getReworkPrintCustomData(flowCard.getProcessId(),flowCard.getTechnologyNumber(),flowCard.getReportingWorkId(),flowCard.getOrderNumber()));
                    list.add(itemmap);
                }
                else{//小片标签
                    Map<String, Object> itemmap = new HashMap<>();
                    itemmap.put("data", flowCardMapper.getReworkPrintCustomDataSemi(flowCard.getProcessId(),flowCard.getTechnologyNumber(),flowCard.getReportingWorkId(),flowCard.getOrderNumber()));
                    list.add(itemmap);
                }
            }
        }
        map.put("data", list);
        map.put("title", flowCardMapper.getPrintTitle(type));
        return map;
    }
}
north-glass-erp/src/main/resources/mapper/pp/FolwCard.xml
@@ -1368,6 +1368,87 @@
        order by IF(fc.sort != NULL or fc.sort != '', fc.sort, pl.order_sort)
    </select>
    <select id="getReworkPrintCustomData">
        select o.order_id                                            as orderId,
               o.project,
               o.customer_id                                         as customerId,
               o.customer_name                                       as customerName,
               o.order_type                                          as orderType,
               o.order_classify                                      as orderClassify,
               o.batch,
               o.icon,
               o.pack_type                                           as packType,
               o.delivery_date                                       as deliveryDate,
               o.al_type                                             as alType,
               o.money,
               contract_id                                           as contractId,
               customer_batch                                           customerBatch,
               contacts,
               o.delivery_address                                    as deliveryAddress,
               od.processing_note                                    as processingNote,
               od.width,
               od.height,
               pl.rework_num                                          as quantity,
               pl.order_sort                                         as orderNumber,
               pl.technology_number                                  as technologyNumber,
               od.building_number                                    as buildingNumber,
               od.product_name                                       as productName,
               od.edging_type                                        as edgingType,
               p.remarks,
               c.customer_abbreviation                               as customerAbbreviation,
               p.product_abbreviation                                as productAbbreviation,
               fc.process_id                                         as processId,
               SUBSTRING(fc.process_id,12  )                                        as processIdAD ,/*-流程卡简写-*/
               o.create_time                                         as createTime,
               JSON_UNQUOTE(JSON_EXTRACT(od.other_columns, '$.S01')) AS glassNumber,
               JSON_UNQUOTE(JSON_EXTRACT(od.other_columns, '$.S02')) AS figureNumber,
               JSON_UNQUOTE(JSON_EXTRACT(od.other_columns, '$.S03')) AS colourCeramicGlaze,
               JSON_UNQUOTE(JSON_EXTRACT(od.other_columns, '$.S04')) AS remarks1,
               JSON_UNQUOTE(JSON_EXTRACT(od.other_columns, '$.S05')) AS remarks2,
               JSON_UNQUOTE(JSON_EXTRACT(od.other_columns, '$.S06')) AS remarks3,
               JSON_UNQUOTE(JSON_EXTRACT(od.other_columns, '$.S07')) AS remarks4,
               JSON_UNQUOTE(JSON_EXTRACT(od.other_columns, '$.S08')) AS remarks5,
               p.remarks                                             as filmNumber,
               od.bend_radius                                        as bendRadius,
               CONCAT(
                       TRIM(TRAILING '.' FROM TRIM(TRAILING '0' FROM CAST(width AS CHAR))),
                       ' X ',
                       TRIM(TRAILING '.' FROM TRIM(TRAILING '0' FROM CAST(height AS CHAR))),
                       ' = ',pl.rework_num )      as size,
               CONCAT(
                       od.order_number,')      ',
                       TRIM(TRAILING '.' FROM TRIM(TRAILING '0' FROM CAST(width   AS CHAR))),
                       ' X ',
                       TRIM(TRAILING '.' FROM TRIM(TRAILING '0' FROM CAST(height    AS CHAR))),
                       ' = ',pl.rework_num )      as numberSize,
               CONCAT(
                       od.order_number,')','   ',
                       TRIM(TRAILING '.' FROM TRIM(TRAILING '0' FROM CAST(width   AS CHAR))),
                       ' X ',
                       TRIM(TRAILING '.' FROM TRIM(TRAILING '0' FROM CAST(height    AS CHAR))))      as numberSizeQuantity,
               '文本' as custom1,
               '文本' as custom2,
               '文本' as custom3,
               '文本' as custom4,
               '文本' as custom5
        from sd.order as o
            left join sd.order_detail as od on o.order_id = od.order_id
            left join flow_card as fc on o.order_id = fc.order_id and
            od.order_number = fc.order_number
            left join rework as pl on pl.process_id = fc.process_id and pl.order_sort = fc.order_number and
            pl.technology_number = fc.technology_number
            left join sd.product as p on p.id = od.product_id
            left join sd.customer as c on c.id = o.customer_id
            left join sd.product_detail as pd on pd.prod_id = p.id and pd.sort_num = od.order_number
        where pl.process_id = #{processId}
          and pl.order_sort=#{orderNumber}
          and pl.technology_number = #{technologyNumber}
          and pl.reporting_work_id = #{reportingWorkId}
        group by od.order_number, width, height
        order by IF(fc.sort != NULL or fc.sort != '', fc.sort, pl.order_sort)
    </select>
    <select id="getGlassNumber">
        select other_columns
        from sd.order_detail as od
@@ -2287,6 +2368,92 @@
        order by IF(fc.sort != NULL or fc.sort != '', fc.sort, pl.order_sort)
    </select>
    <select id="getReworkPrintCustomDataSemi">
        select o.order_id                                            as orderId,
               o.project,
               o.customer_id                                         as customerId,
               o.customer_name                                       as customerName,
               o.order_type                                          as orderType,
               o.order_classify                                      as orderClassify,
               o.batch,
               o.icon,
               o.pack_type                                           as packType,
               o.delivery_date                                       as deliveryDate,
               o.al_type                                             as alType,
               o.money,
               contract_id                                           as contractId,
               customer_batch                                           customerBatch,
               contacts,
               o.delivery_address                                    as deliveryAddress,
               od.processing_note                                    as processingNote,
               ogd.child_width                                as width,
               ogd.child_height                              as height,
               pl.rework_num                                          as quantity,
               pl.order_sort                                         as orderNumber,
               pl.technology_number                                  as technologyNumber,
               od.building_number                                    as buildingNumber,
               od.product_name                                       as productName,
               od.edging_type                                        as edgingType,
               p.remarks,
               c.customer_abbreviation                               as customerAbbreviation,
               p.product_abbreviation                                as productAbbreviation,
               CONCAT(fc.process_id, '/', fc.technology_number)      as processId,
               SUBSTRING(fc.process_id,12  )                                        as processIdAD ,/*-流程卡简写-*/
               o.create_time                                         as createTime,
               JSON_UNQUOTE(JSON_EXTRACT(od.other_columns, '$.S01')) AS glassNumber,
               JSON_UNQUOTE(JSON_EXTRACT(od.other_columns, '$.S02')) AS figureNumber,
               JSON_UNQUOTE(JSON_EXTRACT(od.other_columns, '$.S03')) AS colourCeramicGlaze,
               JSON_UNQUOTE(JSON_EXTRACT(od.other_columns, '$.S04')) AS remarks1,
               JSON_UNQUOTE(JSON_EXTRACT(od.other_columns, '$.S05')) AS remarks2,
               JSON_UNQUOTE(JSON_EXTRACT(od.other_columns, '$.S06')) AS remarks3,
               JSON_UNQUOTE(JSON_EXTRACT(od.other_columns, '$.S07')) AS remarks4,
               JSON_UNQUOTE(JSON_EXTRACT(od.other_columns, '$.S08')) AS remarks5,
               p.remarks                                             as filmNumber,
               od.bend_radius                                        as bendRadius,
               ogd.glass_child                                       as glassChild,
               ogd.glass_address                                     as glassAddress,
               JSON_UNQUOTE(JSON_EXTRACT(pd.separation, '$.color'))  AS color,
               CONCAT(
                       TRIM(TRAILING '.' FROM TRIM(TRAILING '0' FROM CAST(ogd.child_width AS CHAR))),
                       ' X ',
                       TRIM(TRAILING '.' FROM TRIM(TRAILING '0' FROM CAST(ogd.child_height AS CHAR))),
                       ' = ',pl.rework_num )      as size,
               CONCAT(
                       od.order_number,')      ',
                       TRIM(TRAILING '.' FROM TRIM(TRAILING '0' FROM CAST(ogd.child_width   AS CHAR))),
                       ' X ',
                       TRIM(TRAILING '.' FROM TRIM(TRAILING '0' FROM CAST(ogd.child_height    AS CHAR))),
                       ' = ',pl.rework_num )      as numberSize,
               CONCAT(
                       od.order_number,')','   ',
                       TRIM(TRAILING '.' FROM TRIM(TRAILING '0' FROM CAST(ogd.child_width   AS CHAR))),
                       ' X ',
                       TRIM(TRAILING '.' FROM TRIM(TRAILING '0' FROM CAST(ogd.child_height    AS CHAR))))      as numberSizeQuantity,
               '文本' as custom1,
               '文本' as custom2,
               '文本' as custom3,
               '文本' as custom4,
               '文本' as custom5
        from sd.order as o
            left join sd.order_detail as od on o.order_id = od.order_id
            left join flow_card as fc on o.order_id = fc.order_id and
            od.order_number = fc.order_number
            left join rework as pl on pl.process_id = fc.process_id and pl.order_sort = fc.order_number and
            pl.technology_number = fc.technology_number
            left join sd.product as p on p.id = od.product_id
            left join sd.customer as c on c.id = o.customer_id
            left join sd.product_detail as pd on pd.prod_id = p.id and pd.sort_num = od.order_number
            left join sd.order_glass_detail ogd
            on ogd.order_id = o.order_id and ogd.order_number = od.order_number and
            ogd.technology_number = fc.technology_number
        where pl.process_id = #{processId}
          and pl.order_sort=#{orderNumber}
          and pl.technology_number = #{technologyNumber}
          and pl.reporting_work_id = #{reportingWorkId}
        group by od.order_number, width, height
        order by IF(fc.sort != NULL or fc.sort != '', fc.sort, pl.order_sort)
    </select>
    <select id="selectPrintAllMp">
        select *
        from ((select fc.id,
@@ -2795,6 +2962,7 @@
    <select id="getPrintCustomDataProjectDetail">
        select
            opt.glass_id                                          as heat_layout_sort ,
            o.order_id                                            as orderId,
            project,
            customer_id                                           as customerId,