廖井涛
2025-07-17 60f72bb072b825bcbf05c892b96622e3a79d1d32
发货打印新增样式
5个文件已修改
2个文件已添加
556 ■■■■■ 已修改文件
north-glass-erp/northglass-erp/src/components/sd/delivery/PrintSheetLuoyang.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/components/sd/delivery/PrintSheetLuoyangDetails.vue 400 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/sd/delivery/SelectDelivery.vue 76 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/package-lock.json 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/java/com/example/erp/mapper/sd/DeliveryDetailMapper.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/java/com/example/erp/service/sd/DeliveryService.java 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/resources/mapper/sd/DeliveryDetailMapper.xml 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/components/sd/delivery/PrintSheetLuoyang.vue
@@ -111,6 +111,7 @@
      }
      //给数据进行分页
      pageData.value = groupArrayByFive(produceList2.value[0].data)
      console.log(pageData.value)
      delivery.value = produceList2.value[0].delivery
      console.log(delivery.value)
north-glass-erp/northglass-erp/src/components/sd/delivery/PrintSheetLuoyangDetails.vue
New file
@@ -0,0 +1,400 @@
<script setup>
import request from "@/utils/request"
import {computed, onMounted, ref} from "vue"
import PrintFoot from "@/components/sd/order/PrintFoot.vue"
import companyInfo from "@/stores/sd/companyInfo"
import deepClone from "@/utils/deepClone";
import {ElMessage} from "element-plus";
import {add,addAuto} from '@/utils/decimal';
const company = companyInfo()
let produceList = ref([])
let otherMoney = []
let otherMoney1 = []
let delivery = ref([])
let money = ref("")
let otherMoneys = 0
let sumMoney = 0
let takeCare =ref("具体规格详见清单")
let remark =ref(company.deliveryRemark)
let props = defineProps({
  deliveryId:null,
  type:null
})
const form = ref({
})
let produceList2 = ref([])
const deliveryId = ref()
const pageData = ref()
const getData = () => {
  if(props.deliveryId===null  || props.deliveryId===undefined || props.deliveryId===''){
    return
  }
  deliveryId.value = props.deliveryId[0].deliveryId
  form.value.deliveryId=props.deliveryId
  form.value.type=company.productName
  form.value.state=props.type
  request.post(`/delivery/getSelectDeliveryPrinting`,form.value).then((res) => {
    if(res.code==200){
      console.log(res.data)
      produceList.value = deepClone(res.data)
      for(let i=0;i<produceList.value.length;i++){
        produceList.value[i].data.forEach(item =>{
        })
        let produceList1= ({
          data:null,
          otherMoney:null,
          otherMoney1:null,
          delivery:null,
          money:null,
          otherMoneys:0,
          sumMoney:0
        })
        produceList1.data=produceList.value[i].data
        produceList1.delivery=produceList.value[i].delivery
        produceList1.money=produceList.value[i].money
        produceList1.otherMoney=produceList.value[i].otherMoney
        for(let j=0;j<produceList1.data.length;j++){
          produceList1.sumMoney+=produceList1.data[j].DeliveryDetail.money
        }
        otherMoney1=[]
        for(let i=0;i<produceList1.otherMoney.length;i++){
          if(produceList1.otherMoney[i].DeliveryDetailOtherMoney.monery!=null){
            produceList1.otherMoneys+=produceList1.otherMoney[i].DeliveryDetailOtherMoney.monery
            if(otherMoney1.length===0){
              otherMoney1.push(produceList1.otherMoney[i])
            }
            else{
              for(let s=0;s<otherMoney1.length;s++){
                if(produceList1.otherMoney[i].DeliveryDetailOtherMoney.alias===otherMoney1[s].DeliveryDetailOtherMoney.alias){
                  otherMoney1[s].DeliveryDetailOtherMoney.count=add(produceList1.otherMoney[i].DeliveryDetailOtherMoney.count,otherMoney1[s].DeliveryDetailOtherMoney.count)
                  otherMoney1[s].DeliveryDetailOtherMoney.monery =add(produceList1.otherMoney[i].DeliveryDetailOtherMoney.monery,otherMoney1[s].DeliveryDetailOtherMoney.monery)
                  break
                }
                if(s+1===otherMoney1.length){
                  otherMoney1.push(produceList1.otherMoney[i])
                  break
                }
              }
            }
          }
        }
        produceList1.otherMoney1=otherMoney1
        produceList2.value.push(produceList1)
      }
      for(let j=0;j<produceList2.value.length;j++){
        if(produceList2.value[j].delivery.money.toFixed(0)!==(produceList2.value[j].otherMoneys
            +produceList2.value[j].sumMoney+produceList2.value[j].delivery.freight).toFixed(0)){
          console.log(produceList2.value[j])
          console.log(produceList2.value[j].delivery.money)
          console.log((produceList2.value[j].otherMoneys
              +produceList2.value[j].sumMoney).toFixed(0))
          console.log(produceList2.value[j].delivery.deliveryId)
        }
      }
      //给数据进行分页
      pageData.value = groupArrayByFive(produceList2.value[0].data)
      console.log(pageData.value)
      delivery.value = produceList2.value[0].delivery
      console.log(delivery.value)
    }else{
      ElMessage.warning(res.msg)
      router.push("/login")
    }
  })
}
function groupArrayByFive(arr) {
  let result = [];
  let productName=ref()
  arr.forEach(item=>{
    for (let i = 0; i < item.DeliveryDetailList.length; i += 8) {
      let resultMap = {
        id:null,
        DeliveryDetail:null,
        DeliveryDetailList:[]
      };
      resultMap.DeliveryDetail=item.DeliveryDetail
      resultMap.id=item.DeliveryDetailList.slice(i, i + 8).length
      resultMap.DeliveryDetailList.push(item.DeliveryDetailList.slice(i, i + 8))
      result.push(resultMap)
    }
  })
  return result;
}
let deliveryDate = ref()
onMounted(() => {
  const today = new Date
  today.setTime(today.getTime())
  deliveryDate.value = today.getFullYear() +
      '-' + ("0" + (today.getMonth() + 1)).slice(-2)
      + '-' + ("0" + today.getDate()).slice(-2)
  getData()
})
const printSheet = () => {
}
let companyName = ref('洛阳玻璃公司')
const getQuantitySum = (page)=>{
  if(pageData.value[page] === undefined){
    return  0
  }
  return pageData.value[page].DeliveryDetailList[0].reduce((accumulator, currentValue) => {
    return add(accumulator,currentValue.quantity)
  }, 0)
}
const getAreaSum = (page)=>{
  if(pageData.value[page] === undefined){
    return  0
  }
  return pageData.value[page].DeliveryDetailList[0].reduce((accumulator, currentValue) => {
    return addAuto(accumulator,currentValue.area,2)
  }, 0)
}
const getMoneySum = (page)=>{
  if(pageData.value[page] === undefined){
    return  0
  }
  return pageData.value[page].DeliveryDetailList[0].reduce((accumulator, currentValue) => {
    return addAuto(accumulator,currentValue.money,2)
  }, 0)
}
defineExpose({
  printSheet
});
</script>
<template>
  <div >
    <el-row id="footsum" :gutter="20" >
      <el-col :span="20"></el-col>
      <el-col :span="4" style="font-weight: bolder;font-size: 19px" >{{delivery.creator}}</el-col>
    </el-row>
    <el-row id="footsum1" :gutter="20" >
      <el-col :span="2" ></el-col>
      <el-col :span="5" style="font-weight: bolder;font-size: 19px">{{ delivery.contacts }}</el-col>
      <el-col :span="5" style="font-weight: bolder;font-size: 19px">{{ delivery.contactNumber }}</el-col>
      <el-col :span="1" ></el-col>
      <el-col :span="11" style="font-weight: bolder;font-size: 19px">{{ delivery.deliveryAddress }}</el-col>
    </el-row>
    <table  class="content1" v-for="(page,pageIndex) in pageData" >
      <thead>
        <tr style="height: 3.2cm"><td></td></tr>
        <tr>
          <td colspan="6" >
            <el-row :gutter="20">
              <el-col :span="2"></el-col>
              <el-col :span="9">
                <input v-model="companyName"
                       style="border: 0;width: 100%;
                       height: 100%;font-size:19px;font-weight: bolder "/>
              </el-col>
              <el-col :span="5" style="font-size:19px;font-weight: bolder"> {{deliveryId}} </el-col>
              <el-col :span="5"></el-col>
              <el-col :span="3" style="white-space: nowrap;font-size:19px;font-weight: bolder">{{deliveryDate}}</el-col>
            </el-row>
          </td>
        </tr>
        <tr style="height: 0.5cm"><td></td></tr>
        <tr style="margin-top: 20px">
          <td colspan="6">
            <el-row :gutter="20">
              <el-col :span="3"></el-col>
              <el-col :span="9" style="font-size: 21px;font-weight: bolder">{{delivery.customerName }}</el-col>
              <el-col :span="3"> </el-col>
              <el-col :span="9" style="font-size: 21px;font-weight: bolder;white-space: nowrap;"> {{delivery.project }}</el-col>
            </el-row>
          </td>
        </tr>
        <tr style="height: 0.3cm"><td></td></tr>
        <tr>
          <td colspan="6">
            <el-row :gutter="20">
              <el-col :span="2"></el-col>
              <el-col :span="12" style="font-size: 17px;font-weight: bolder"> {{delivery.orderId }}</el-col>
            </el-row>
          </td>
        </tr>
        <tr style="height: 0.2cm"><td></td></tr>
      </thead>
      <tbody  >
      <template v-for="(items,index1) in page.DeliveryDetailList[0]">
        <tr>
          <td style="width: 20cm" :rowspan="page.id" v-if="index1===0">
            <el-input  class="textarea" type="textarea"
                       :autosize="{ minRows: 1, maxRows: 20 }"
                       v-model="page.DeliveryDetail.orderDetail.productName" />
          </td>
          <td style="width: 0.8cm"></td>
          <td style="width: 10cm">
            <el-input  class="textarea" type="textarea"
                       style="font-weight: bolder;"
                       :autosize="{ minRows: 1, maxRows: 20 }"
                       v-model="items.width" />
          </td>
           <td style="width: 10cm">
              <el-input  class="textarea" type="textarea"
                         style="font-weight: bolder;"
                         :autosize="{ minRows: 1, maxRows: 20 }"
                         v-model="items.height" />
           </td>
         <td style="width: 60px">
            {{items.quantity}}
          </td>
          <td style="width: 100px">
            <input  style="border: 0" v-model="items.area">
          </td>
          <td
              v-if="props.type===1||props.type===3"
              style="width: 80px"
          >
            {{items.price}}
          </td>
          <td
              v-if="props.type===1||props.type===3"
          >
            {{items.money}}
          </td>
        </tr>
      </template>
        <tr>
          <td></td>
          <td></td>
          <td></td>
          <td></td>
          <td>
            {{getQuantitySum(pageIndex)}}
          </td>
          <td>
            <input  style="border: 0" :value="getAreaSum(pageIndex)">
          </td>
          <td></td>
          <td v-if="props.type===1||props.type===3">
            {{getMoneySum(pageIndex)}}
          </td>
        </tr>
      </tbody>
    </table>
  </div>
</template>
<style scoped>
*{
  color: rgba(0, 0, 0, 0.8); /* 更深的黑色 */
  font-family: 'Microsoft YaHei', '微软雅黑', sans-serif;
  outline: none;
}
#sheet{
  width: 21cm;
}
table{
  width: 21cm
}
.content1{
  page-break-after: always;
}
span{
  width: 7cm;
  text-align: center;
}
tbody *{
  font-size: 16px;  font-weight: bolder;
}
tbody *{
  font-size: 16px;  font-weight: bolder;
}
#footsum1,#footsum{
  font-weight: bolder;font-size: 17px;
}
@media print {
  #footsum{
    position: fixed;
    bottom: 4.2cm;
    width: 100%; /* 或者设置成具体的宽度 */
    font-size: 17px;
  }
  #footsum1{
    position: fixed;
    bottom: 1.8cm;
    width: 100%; /* 或者设置成具体的宽度 */
  }
}
.textarea{
--el-border-color: rgba(255,255,255,0.0);
--el-input-focus-border-color: rgba(255,255,255,0.0);
--el-input-focus-border-width: 0px;
--el-input-hover-border-color: rgba(255,255,255,0.0);
--el-input-hover-border-width: 0px;
}
/*textarea {
  font-size: 16px;
  border:none;
  text-align: right;
  font-weight: bolder;
  width: 100%;
  height: 100%;
}*/
:deep(.el-textarea__inner){
  font-weight: bolder;
  color: #333333;
  font-family: 'Microsoft YaHei', '微软雅黑', sans-serif;
}
</style>
north-glass-erp/northglass-erp/src/views/sd/delivery/SelectDelivery.vue
@@ -14,6 +14,7 @@
import PrintSheet1 from "@/components/sd/delivery/PrintSheet1.vue";
import PrintSheet2 from "@/components/sd/delivery/PrintSheet2.vue";
import PrintSheetLuoyang from "@/components/sd/delivery/PrintSheetLuoyang.vue";
import PrintSheetLuoyangDetails from "@/components/sd/delivery/PrintSheetLuoyangDetails.vue";
import useOrderInfoStore from "@/stores/sd/order/orderInfo";
import { saveAs } from "file-saver"
import companyInfo from "@/stores/sd/companyInfo";
@@ -113,6 +114,8 @@
    if(company.companyName=='洛阳北方玻璃技术股份有限公司'){
      xGrid.value.menuConfig.body.options[0][2].visible=true
      xGrid.value.menuConfig.body.options[0][3].visible=true
      xGrid.value.menuConfig.body.options[0][4].visible=true
      xGrid.value.menuConfig.body.options[0][5].visible=true
    }
    xGrid.value.loadData(produceList)
    gridOptions.loading=false
@@ -344,6 +347,71 @@
          break
        }
        case 'sheet5': {
          const selectRecords = $grid.getCheckboxRecords()
          if (selectRecords.length === 0) {
            if(rowClickIndex.value.deliveryState>0){
              ElMessage.warning(t('order.printingNumber')+rowClickIndex.value.printingNumber)
              let delivery=([])
              delivery.push(rowClickIndex.value)
              flowData.value.delivery=delivery
              dialogTableVisible.value = true
              sheetIndex.value=5
            }else{
              ElMessage.warning(t('order.orderNotApproved'))
            }
          }else{
            let a=0
            selectRecords.forEach((item) => {
              if(item.deliveryState==0){
                ElMessage.warning(t('order.orderNotApproved'))
                a=1
              }
            })
            if(a==0){
              flowData.value.delivery=selectRecords
              dialogTableVisible.value = true
              sheetIndex.value=5
            }
          }
          break
        }
        case 'sheet6': {
          const selectRecords = $grid.getCheckboxRecords()
          if (selectRecords.length === 0) {
            if(rowClickIndex.value.deliveryState>0){
              ElMessage.warning(t('order.printingNumber')+rowClickIndex.value.printingNumber)
              let delivery=([])
              delivery.push(rowClickIndex.value)
              flowData.value.delivery=delivery
              dialogTableVisible.value = true
              sheetIndex.value=6
            }else{
              ElMessage.warning(t('order.orderNotApproved'))
            }
          }else{
            let a=0
            selectRecords.forEach((item) => {
              if(item.deliveryState==0){
                ElMessage.warning(t('order.orderNotApproved'))
                a=1
              }
            })
            if(a==0){
              flowData.value.delivery=selectRecords
              dialogTableVisible.value = true
              sheetIndex.value=6
            }
          }
          break
        }
      }
    }
  },
@@ -386,8 +454,10 @@
        [
          { code: 'sheet1', name: t('basicData.print'), prefixIcon: 'vxe-icon-file-txt', visible: true},
          { code: 'sheet2', name: t('basicData.print')+ t('delivery.noMoney'), prefixIcon: 'vxe-icon-file-txt', visible: true},
          { code: 'sheet3', name: t('洛阳打印'), prefixIcon: 'vxe-icon-file-txt', visible: false},
          { code: 'sheet4', name: t('洛阳打印')+ t('delivery.noMoney'), prefixIcon: 'vxe-icon-file-txt', visible: false},
          { code: 'sheet3', name: t('洛阳打印无尺寸'), prefixIcon: 'vxe-icon-file-txt', visible: false},
          { code: 'sheet4', name: t('洛阳打印无尺寸')+ t('delivery.noMoney'), prefixIcon: 'vxe-icon-file-txt', visible: false},
          { code: 'sheet5', name: t('洛阳打印有尺寸'), prefixIcon: 'vxe-icon-file-txt', visible: false},
          { code: 'sheet6', name: t('洛阳打印有尺寸')+ t('delivery.noMoney'), prefixIcon: 'vxe-icon-file-txt', visible: false},
        ]
      ]
    }
@@ -586,6 +656,8 @@
      <print-sheet2 id="child"  v-if="sheetIndex===2" :deliveryId="flowData.delivery" />
      <print-sheet-luoyang id="child"  v-if="sheetIndex===3" :deliveryId="flowData.delivery" :type="1" />
      <print-sheet-luoyang id="child"  v-if="sheetIndex===4" :deliveryId="flowData.delivery" :type="2" />
      <print-sheet-luoyang-details id="child"  v-if="sheetIndex===5" :deliveryId="flowData.delivery" :type="3" />
      <print-sheet-luoyang-details id="child"  v-if="sheetIndex===6" :deliveryId="flowData.delivery" :type="4" />
    </el-dialog>
  </div>
north-glass-erp/package-lock.json
New file
@@ -0,0 +1,6 @@
{
  "name": "north-glass-erp",
  "lockfileVersion": 2,
  "requires": true,
  "packages": {}
}
north-glass-erp/src/main/java/com/example/erp/mapper/sd/DeliveryDetailMapper.java
@@ -31,9 +31,11 @@
    List<DeliveryDetail> getSelectDeliveryPrintingNoMoney(@Param("deliveryId") String deliveryId,@Param("type") String type);
    List<DeliveryDetail> getSelectDeliveryPrintingMoneySpecifications(@Param("deliveryId") String deliveryId,@Param("type") String type);
    List<Map<String, Object>> getSelectDeliveryPrintingMoneySpecifications(@Param("deliveryId") String deliveryId,
                                                                           @Param("productId") Integer productId,@Param("orderId") String orderId);
    List<DeliveryDetail> getSelectDeliveryPrintingNoMoneySpecifications(@Param("deliveryId") String deliveryId,@Param("type") String type);
    List<Map<String, Object>> getSelectDeliveryPrintingNoMoneySpecifications(@Param("deliveryId") String deliveryId,
                                                                             @Param("productId") Integer productId,@Param("orderId") String orderId);
    List<OrderDetail> getSelectOrderPrinting(Object productId, String orderId);
north-glass-erp/src/main/java/com/example/erp/service/sd/DeliveryService.java
@@ -545,8 +545,17 @@
                orderId=detail.getOrderDetail().getOrderId();
                Map<String, Object> itemmap = new HashMap<>();
                List<Map<String, Object>> deliveryDetailList2 = deliveryDetailMapper.getSelectDeliveryDetailPrinting(detail.getDeliveryId(),
                        detail.getOrderDetail().getProductId(), detail.getOrderDetail().getOrderId());
                List<Map<String, Object>> deliveryDetailList2;
                if(state==3){
                    deliveryDetailList2=deliveryDetailMapper.getSelectDeliveryPrintingMoneySpecifications(detail.getDeliveryId(),
                            detail.getOrderDetail().getProductId(), detail.getOrderDetail().getOrderId());
                }else if(state==4){
                    deliveryDetailList2=deliveryDetailMapper.getSelectDeliveryPrintingNoMoneySpecifications(detail.getDeliveryId(),
                            detail.getOrderDetail().getProductId(), detail.getOrderDetail().getOrderId());
                }else{
                    deliveryDetailList2 = deliveryDetailMapper.getSelectDeliveryDetailPrinting(detail.getDeliveryId(),
                            detail.getOrderDetail().getProductId(), detail.getOrderDetail().getOrderId());
                }
                for (Map<String, Object> stringObjectMap : deliveryDetailList2) {
                    if(stringObjectMap.get("other_columns")!=null){
north-glass-erp/src/main/resources/mapper/sd/DeliveryDetailMapper.xml
@@ -1147,44 +1147,38 @@
    </select>
    <select id="getSelectDeliveryPrintingMoneySpecifications" resultMap="selectDeliveryDetailOrderDetail" >
        select dd.delivery_id,
               od.order_id,
               IF(#{type} = 'product_abbreviation', pt.remarks, od.product_name) as product_name,
               dd.price,
    <select id="getSelectDeliveryPrintingMoneySpecifications" >
        select od.order_id,
               od.width,
               od.height,
               od.product_name,
               sum(dd.area)                                                      as area,
               sum(dd.money)                                                     as money,
               sum(dd.quantity)                                                  as quantity,
               o.contract_id,
               od.width,
               od.height
               dd.price
        from delivery_detail dd
                 left join (select product_name,order_id,product_id,order_number,width,height
                            from order_detail) as od on dd.order_id = od.order_id and dd.order_number = od.order_number
                 left join product pt on pt.id = od.product_id
                 left join sd.`order` o on o.order_id = dd.order_id
        where dd.delivery_id like concat('%', #{deliveryId}, '%')
        group by od.order_id, od.product_name,od.width,od.height, dd.price
                 left join order_detail od on dd.order_id = od.order_id and dd.order_number = od.order_number
                 left join product p on od.product_id = p.id
        where delivery_id = #{deliveryId}
          and od.order_id = #{orderId}
          and od.product_id = #{productId}
        group by od.width,od.height, dd.price
    </select>
    <select id="getSelectDeliveryPrintingNoMoneySpecifications" resultMap="selectDeliveryDetailOrderDetail" >
        select dd.delivery_id,
               od.order_id,
               IF(#{type} = 'product_abbreviation', pt.remarks, od.product_name) as product_name,
               sum(dd.area)                                                      as area,
               sum(dd.quantity)                                                  as quantity,
               o.contract_id,
    <select id="getSelectDeliveryPrintingNoMoneySpecifications"  >
        select od.order_id,
               od.width,
               od.height
               od.height,
               od.product_name,
               sum(dd.area)                                                     as area,
               sum(dd.quantity)                                                  as quantity
        from delivery_detail dd
                 left join (select product_name,order_id,product_id,order_number,width,height
                            from order_detail) as od on dd.order_id = od.order_id and dd.order_number = od.order_number
                 left join product pt on pt.id = od.product_id
                 left join sd.`order` o on o.order_id = dd.order_id
        where dd.delivery_id like concat('%', #{deliveryId}, '%')
        group by od.order_id, od.product_name, width, height
                 left join order_detail od on dd.order_id = od.order_id and dd.order_number = od.order_number
                 left join product p on od.product_id = p.id
        where delivery_id = #{deliveryId}
          and od.order_id = #{orderId}
          and od.product_id = #{productId}
        group by od.width,od.height
    </select>
    <select id="getSelectOrderPrinting"  >