north-glass-erp/northglass-erp/src/components/sd/order/OrderSizeCheck.vue
@@ -95,7 +95,7 @@ ElMessage.error(t('basicData.msg.checkoutLose')) return } emit('getParent') //emit('getParent') break } } north-glass-erp/northglass-erp/src/components/sd/order/PrintSheet4.vue
New file @@ -0,0 +1,227 @@ <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 useUserInfoStore from "@/stores/userInfo"; const company = companyInfo() const userStore = useUserInfoStore() const username = userStore.user.userName let props = defineProps({ orderId:null }) let data = ref({ order:{ processingNote:'' }, orderProductDetail:[] }) const grossNum = ref({ quantity: 0, grossArea: 0, perimeter: 0 }) const getData = () => { request.get(`/order/printOrderProductDetail/${props.orderId}`).then(res => { console.log(res.data) data.value= res.data data.value.orderProductDetail.forEach(item => { grossNum.value.quantity += getQuantity(item.productDetail) grossNum.value.grossArea += getArea(item.productDetail) grossNum.value.perimeter += getPerimeter(item.productDetail) stringToJson(item.productDetail) }) grossNum.value.quantity = parseFloat(grossNum.value.quantity.toFixed(3)) grossNum.value.grossArea = parseFloat(grossNum.value.grossArea.toFixed(3)) grossNum.value.perimeter = parseFloat(grossNum.value.perimeter.toFixed(3)) }) } onMounted(() => { getData() }) const stringToJson = (productList) => { productList.forEach(item => { item.otherColumns = JSON.parse(item.otherColumns) }) } const getQuantity = (productList) => { let quantity = 0 productList.forEach(item => { quantity += item.quantity }) return parseFloat(quantity.toFixed(3)) } const getArea = (productList) => { let area = 0 productList.forEach(item => { area += item.grossArea }) return parseFloat(area.toFixed(3)) } const getPerimeter = (productList) => { let perimeter = 0 productList.forEach(item => { perimeter += item.perimeter }) return parseFloat(perimeter.toFixed(3)) } const printSheet = () => { } defineExpose({ printSheet }); </script> <template> <div id="sheet"> <table border="1" > <tr class="title-s"> <th colspan="13"> <h1> {{company.companyName}} </h1> </th> </tr> <tr class="title-s"> <th colspan="2"></th> <th colspan="5"> <h3>生成任务单(成品)</h3> </th> <th colspan="2" style="text-align: left;font-weight: bold;">订单编号:<span>{{data.order.orderId}}</span></th> </tr> <tr> <th style="text-align: left;border:none;font-weight: bold;" colspan="4">客户名称:<span>{{data.order.customerName}}</span></th> <th style="text-align: left;border:none;font-weight: bold;" colspan="3">项目名称:<span>{{data.order.project}}</span></th> <th style="text-align: left;border:none;font-weight: bold;" colspan="2">发货日期:<span>{{data.order.deliveryDate}}</span></th> </tr> <tr> <th style="text-align: left;border:none;font-weight: bold;" colspan="7">送货地址:<span>{{data.order.project}}</span></th> <th style="text-align: left;border:none;font-weight: bold;" colspan="2">联系电话:<span>{{data.order.project}}</span></th> </tr> <tr> <th style="width: 6%;font-weight: bold;">序</th> <th style="width: 20%;font-weight: bold;">楼层编号</th> <th style="width: 20%;font-weight: bold;" colspan="2">宽(弧度)*高</th> <th style="width: 10%;font-weight: bold;">数量</th> <th style="width: 10%;font-weight: bold;">面积</th> <th style="width: 12%;font-weight: bold;" colspan="2">加工要求</th> </tr> <template v-for="(item, index) in data.orderProductDetail" :key="index" > <tr> <td style="font-size: 15px;font-weight: bold;text-align: left" colspan="8">产品名称:<span>{{item.productName}}</span></td> </tr> <tr class="day-in" v-for="(items, index1) in item.productDetail" :key="index1"> <td>{{items.orderNumber}}</td> <td>{{items.buildingNumber}}</td> <td colspan="2" style="font-size: 15px;font-weight: bold;">{{items.width}}x{{items.height}}</td> <td>{{items.quantity}}</td> <td>{{items.grossArea}}</td> <td colspan="2">{{items.processingNote}}</td> </tr> <tr class="day-in" > <td style="font-size: 15px;font-weight: bold;" colspan="3">小计:</td> <td>{{getQuantity(item.productDetail)}}</td> <td>{{getArea(item.productDetail)}}</td> <td></td> </tr> </template> <tr class="day-in"> <td style="font-size: 15px;font-weight: bold;" colspan="3">合计:</td> <td>{{grossNum.quantity}}</td> <td>{{grossNum.grossArea}}</td> <td></td> </tr> <tr class="day-in"> <td style="text-align: left;border-width: 0 1px 0 0; border-style: solid; border-color: #d3dce6" colspan="6"> <template v-for="(item,index) in data.order.processingNote.split('\n')"> {{item}} <br> </template> </td> </tr> </table> <el-row :gutter="20"> <el-col :span="4"><div class="bottom">制单员:{{data.order.creator}}<span style="font-size: 10px"></span></div></el-col> <el-col :span="4"><div class="bottom">制单日期:{{data.order.createTime}}<span style="font-size: 10px"></span></div></el-col> <el-col :span="4"><div class="bottom">审核员:{{data.order.verifier}}</div></el-col> <el-col :span="3"><div class="bottom">审核日期:{{data.order.updateTime}}</div></el-col> <el-col :span="4"><div class="bottom">打印人:{{username}}</div></el-col> </el-row> </div> </template> <style scoped> h1,h3{ left:0; right:0; top:0; bottom:0; margin:auto; } h1{ font-size: 1.5rem; } h3{ font-size: 1.2rem; font-weight: bolder; } table{ border-collapse: collapse; width: 100%; text-align: center; } tr,td,th{ border: 1px solid black; } th,.no-change-row { white-space: nowrap; } .title-1{ width: 76px; } .title-s,.title-s th{ border:0 } .hr-border{ height: 2px; width: 100%; background-color: black; color: black; } </style> north-glass-erp/northglass-erp/src/hook/mouseMove.ts
@@ -28,9 +28,11 @@ xGrid.value = xGrids gridOptions = gridOption let newElement = document.createElement('div') let leftElement = document.createElement('div') const parser = new DOMParser(); const htmlDoc = parser.parseFromString(cellarea.value, 'text/html') newElement.innerHTML = htmlDoc.body.innerHTML leftElement.innerHTML = htmlDoc.body.innerHTML //cellarea.value = newElement //添加多选列 nextTick(() => { @@ -58,7 +60,7 @@ // }) } /*setTimeout(() => { setTimeout(() => { //#region 左侧固定列 let leftfixedtbody = getTablexGrid().$el.querySelector(".vxe-table--fixed-wrapper .vxe-table--fixed-left-wrapper .vxe-table--body-wrapper table tbody")//获取fixedtbody区域 @@ -73,12 +75,12 @@ let leftFixedBodyWrapper = getTablexGrid().$el.querySelector(".vxe-table--fixed-wrapper .vxe-table--fixed-left-wrapper .vxe-table--body-wrapper") if (leftFixedBodyWrapper) { //注意这里的ref名称,这里是fixed区域的框的名称 leftFixedBodyWrapper.appendChild(leftfixedcellarea.value) leftFixedBodyWrapper.appendChild(leftElement) } //#endregion //#region 右侧固定列 let rightfixedtbody = getTablexGrid().$el.querySelector(".vxe-table--fixed-wrapper .vxe-table--fixed-right-wrapper .vxe-table--body-wrapper table tbody")//获取fixedtbody区域 /* let rightfixedtbody = getTablexGrid().$el.querySelector(".vxe-table--fixed-wrapper .vxe-table--fixed-right-wrapper .vxe-table--body-wrapper table tbody")//获取fixedtbody区域 if (rightfixedtbody) { rightfixedtbody.addEventListener("mousedown", tbodymousedown)//给表格中的rightfixedtbody添加鼠标按下事件 @@ -92,10 +94,10 @@ if (rightFixedBodyWrapper) { //注意这里的ref名称,这里是fixed区域的框的名称 rightFixedBodyWrapper.appendChild(rightfixedcellarea.value) } }*/ //#endregion }, 100)*/ }, 100) }) } north-glass-erp/northglass-erp/src/layout/MainErpView.vue
@@ -16,7 +16,7 @@ const router = useRouter() const userStore = useUserInfoStore() const user = userStore.user.userName const user = userStore.user?.userName //监听异步返回代码 watch(()=>userStore.responseCode,(newVal) => { switch (newVal){ north-glass-erp/northglass-erp/src/views/pp/processCard/PrintCustomLabel1.vue
@@ -110,7 +110,7 @@ </div> <div class="row2"> <span>{{ item.project }}</span> <span>{{ item.building_number }}</span> <span>{{ item.buildingNumber }}</span> </div> <div class="row3">{{item.width}}*{{item.height}}={{item.quantity}}</div> <div class="row5"> @@ -186,7 +186,7 @@ @page { size: auto; /* auto is the initial value */ margin: 7mm 4mm 2mm 6mm /* this affects the margin in the printer settings */ margin: 12mm 4mm 2mm 6mm /* this affects the margin in the printer settings */ } north-glass-erp/northglass-erp/src/views/pp/processCard/PrintCustomLabelSemi1.vue
@@ -110,7 +110,7 @@ </div> <div class="row2"> <span>{{ item.project }}</span> <span>{{ item.building_number }}</span> <span>{{ item.buildingNumber }}</span> </div> <div class="row3">{{item.width}}*{{item.height}}={{item.quantity}}</div> <div class="row5"> @@ -174,6 +174,9 @@ font-weight: bold; font-size: 12pt; } .row5 span { font-size: 10pt; } .row6 { height: 15px; north-glass-erp/northglass-erp/src/views/pp/processCard/PrintLabel.vue
@@ -129,10 +129,12 @@ </div> </div>--> <div id="entirety" v-for="(item,id) in labelList" > <div class="row1">{{ item.customer_name }}</div> <div class="row1"> <span>{{ item.customer_name }}</span> <span>{{ item.type_name }}</span> </div> <div class="row2"> <span>{{ item.order_id }}</span> <span>{{ item.type_name }}</span> </div> <div class="row3">{{item.width}}*{{item.height}}={{item.quantity}}</div> <div class="row5"> north-glass-erp/northglass-erp/src/views/sd/delivery/CreateDelivery.vue
@@ -396,6 +396,7 @@ otherMoney:otherMoney.value }) console.log(flowData.value) request.post("/Delivery/insertDelivery", flowData.value).then((res) => { if(res.code==200 && res.data===true){ ElMessage.success(t('delivery.deliveryNoteSubmittedSuccessfully')) north-glass-erp/northglass-erp/src/views/sd/delivery/SelectDelivery.vue
@@ -345,7 +345,7 @@ <el-button @click="getTableRow(row,'edit')" v-if="userStore.user.permissions.indexOf('selectDelivery.edit') > -1" link type="primary" size="small">{{$t('basicData.edit')}}</el-button> <el-button @click="getTableRow(row,'printing')" :disabled="row.deliveryState!==2" link type="primary" size="small">打印</el-button> <!-- <el-button @click="getTableRow(row,'printing')" :disabled="row.deliveryState!==2" link type="primary" size="small">打印</el-button>--> <el-popconfirm @confirm="getTableRow(row,'delete')" :title="$t('searchOrder.deleteConfirm')"> <template #reference> <el-button :disabled="row.deliveryState===2" link type="primary" size="small">{{ $t('basicData.delete') }}</el-button> north-glass-erp/northglass-erp/src/views/sd/order/CreateOrder.vue
@@ -109,7 +109,7 @@ { code: 'computedMoney', name: t('basicData.calculateAmount'), prefixIcon: 'vxe-icon-chart-bar-x', visible: true, disabled: true }, { code: 'errorArea', name: t('basicData.errorSettlementArea'), prefixIcon: 'vxe-icon-chart-bar-x', visible: true, disabled: false }, { code: 'otherMoney', name: t('basicData.otherAmounts'), prefixIcon: 'vxe-icon-chart-bar-x', visible: true, disabled: false }, { code: 'sizeCheck', name: t('basicData.sizeReview'), prefixIcon: 'vxe-icon-eye-fill', visible: true, disabled: true } { code: 'sizeCheck', name: t('basicData.sizeReview'), prefixIcon: 'vxe-icon-eye-fill', visible: true, disabled: false } ] ] } @@ -672,7 +672,7 @@ //工艺审核后,订单未审核 取消审核按钮禁用和尺寸审核 if(res.data.order.processReview === 2 && res.data.order.orderReview === 0){ gridOptions.toolbarConfig.buttons[2].disabled = false gridOptions.menuConfig.body.options[0][8].disabled =false //gridOptions.menuConfig.body.options[0][8].disabled =false } //按钮审核过后变为反审 north-glass-erp/northglass-erp/src/views/sd/order/SelectOrder.vue
@@ -18,6 +18,7 @@ import {CircleCheck, Download, Printer} from "@element-plus/icons-vue/global" import { saveAs } from "file-saver" import PrintSheet3 from "@/components/sd/order/PrintSheet3.vue"; import PrintSheet4 from "@/components/sd/order/PrintSheet4.vue"; const { t } = useI18n() const userStore = useUserInfoStore() const company = companyInfo() @@ -182,7 +183,7 @@ return } dialogTableVisible.value = true sheetIndex.value=1 sheetIndex.value=4 if(rowClickIndex.value.processReview===2 && rowClickIndex.value.orderReview===0){ reviewDisabled.value=false } @@ -536,6 +537,7 @@ <print-sheet1 id="child" v-if="sheetIndex===1" :orderId="rowClickIndex.orderId" /> <print-sheet2 id="child" v-else-if="sheetIndex===2" :orderId="rowClickIndex.orderId" /> <print-sheet3 id="child" v-else-if="sheetIndex===3" :orderId="rowClickIndex.orderId" /> <print-sheet4 id="child" v-else-if="sheetIndex===4" :orderId="rowClickIndex.orderId" /> </el-dialog> north-glass-erp/src/main/java/com/example/erp/mapper/sd/DeliveryMapper.java
@@ -36,6 +36,8 @@ @Param("pageSize") Integer pageSize,String startDate, String endDate, @Param("order") Order order); Order selectOrderId(String orderId); Map<String,Integer> getSelectOrderInventoryPageTotal(Integer offset, Integer pageSize,String startDate, String endDate, Order order); Boolean insertDelivery(@Param("delivery") Delivery delivery,@Param("number") String number,@Param("orderId") String orderId); north-glass-erp/src/main/java/com/example/erp/service/sd/DeliveryService.java
@@ -222,19 +222,28 @@ //获取对象集合循环进行新增修改 if (!orderDetaillist.isEmpty()) { for (OrderDetail orderDetail : orderDetaillist) { //根据订单计算方式进行金额计算 Integer calculateType=0; if (orderDetail.getOrder().getOrderId()==null){ Order order=deliveryMapper.selectOrderId(orderDetail.getOrderId()); calculateType=order.getCalculateType(); }else{ calculateType=orderDetail.getOrder().getCalculateType(); } double deliveryDetailMoney = 0.0; if (orderDetail.getOrder().getCalculateType()==1){ if (calculateType==1){ deliveryDetailMoney=Double.valueOf(String.format("%.2f",Double.valueOf(String.format("%.2f", (orderDetail.getWidth()*orderDetail.getHeight()/1000000))) *orderDetail.getDeliveryDetail().getQuantity()*orderDetail.getPrice())); }else if (orderDetail.getOrder().getCalculateType()==2){ }else if (calculateType==2){ deliveryDetailMoney=Double.valueOf(String.format("%.2f",Double.valueOf( String.format("%.2f", (orderDetail.getWidth()*orderDetail.getHeight()/1000000)*orderDetail.getDeliveryDetail().getQuantity()) )*orderDetail.getPrice())); }else if (orderDetail.getOrder().getCalculateType()==3){ )*orderDetail.getPrice())); }else if (calculateType==3){ deliveryDetailMoney=Double.valueOf(String.format("%.2f",orderDetail.getPrice() * orderDetail.getDeliveryDetail().getQuantity())); } //根据订单计算方式进行金额计算 //对循环明细的数据进行累加 quantity += orderDetail.getDeliveryDetail().getQuantity(); north-glass-erp/src/main/resources/mapper/pp/FolwCard.xml
@@ -575,7 +575,8 @@ fc.technology_number as technologyNumber, ogd.glass_child, c.customer_abbreviation as customer_name, ifnull(od.processing_note,'') as processing_note ifnull(od.processing_note,'') as processing_note, bgt.type_name from sd.order as o left join sd.order_detail as od on o.order_id = od.order_id left join sd.order_glass_detail as ogd on ogd.order_id=od.order_id and ogd.order_number=od.order_number @@ -583,6 +584,7 @@ od.order_number = fc.order_number and fc.technology_number=ogd.technology_number left join sd.product pt on pt.id=od.product_id left join sd.customer c on c.id=o.customer_id left join sd.basic_glass_type bgt on bgt.type_id=pt.type_id where fc.process_id = #{processId} and fc.technology_number=#{technologyNumber} group by od.order_number,od.width,od.height north-glass-erp/src/main/resources/mapper/sd/DeliveryMapper.xml
@@ -130,6 +130,10 @@ limit #{offset},#{pageSize}; </select> <select id="selectOrderId" > select * from sd.`order` where order_id=#{orderId} </select> <select id="getSelectOrderInventoryPageTotal" > select CEILING(count(zu.order_id)/#{pageSize}) as 'pageTotal', count(zu.order_id) as 'total' from