north-glass-erp/northglass-erp/src/components/pp/PrintCustomLabelDetails.vue
@@ -68,7 +68,6 @@ } } } console.log(props.lastList) } else { ElMessage.warning(res.msg) } north-glass-erp/northglass-erp/src/components/pp/PrintCustomLabelProject.vue
New file @@ -0,0 +1,308 @@ <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//标签类型 }) const {currentRoute} = useRouter() const route = currentRoute.value let type = props.type let faceOrientation = props.faceOrientation if (type.indexOf("英文")>-1 && faceOrientation==="此面为室内面"){ faceOrientation='INSIDE' } else if (type.indexOf("英文")>-1 && faceOrientation==="此面为室外面"){ faceOrientation='OUTSIDE' } let lableType = props.lableType data.value.printList = JSON.parse(props.list) onMounted(() => { request.post(`/processCard/getPrintCustomDataProjectNoDetail/${type}`, data.value).then((res) => { if (res.code == 200) { console.log(res.data.data) produceList.value = deepClone(res.data.title) list.value = deepClone(res.data.data) const data = produceList.value[0].value dataList = JSON.parse(`[${data}]`); labelList = dataList[0] for (let i = 0; i < list.value.length; i++) { let count = list.value[i].data.length for (let j = 0; j < count; j++) { lastList.value.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 并更新对应的属性 lastList.value.forEach(obj => { // 获取前缀和 orderId const prefix = lastList.value[id].processId.substring(0, 11); const orderId = obj.orderId; const glassNumber=lastList.value[id].glassNumber const customerName = obj.customerName // 根据 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; } }); } </script> <template> <div id="print" :class="company.printLabel.className.custom.printFlowCardName()"> <div v-for="(item1,index) in 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 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> </div> </template> <style scoped> * { margin: 0; padding: 0; } textarea { border: none; /* 取消默认边框 */ padding: 0; /* 取消默认内边距 */ margin: 0; /* 取消默认外边距 */ resize: none; /* 禁用调整大小功能 */ font-family: Arial; /* 设置自定义字体 */ font-size: 12px; /* 设置自定义字体大小 */ line-height: 1; /* 设置行高 */ width: 100%; /* 设置宽度为100% */ height: auto; /* 高度根据内容自动调整 */ box-sizing: border-box; /* 使宽高包括内边距和边框 */ overflow-y: hidden; } body { overflow: hidden; font-family: Arial; font-size: 7px; } #printButton { margin-top: -20px; width: 100px; } .print{ width: 100%; height: 100%; } /*成*/ .printFlowCard_finished { /* font-family: 'Microsoft YaHei', '微软雅黑', sans-serif; */ flex-wrap: nowrap; 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; /*display: flex; justify-content:space-evenly;*/ } .row3 label { margin-top: 28px; } .contentRow { font-weight: bolder; display: flex; text-align: center; width: 100%; } label { /*font-family: 'Microsoft YaHei', '微软雅黑', sans-serif;*/ } .contentRow .row1 { width: 100%; } .entirety_finished .row4 { font-weight: bolder; text-align: right; margin-right: 20px; } .contentRow .row1, .contentRow .row2 { text-align: left; } input{ width: 100%; border: none; } @page { size: auto; /* auto is the initial value */ margin: 13mm 5mm 0mm 7mm; /* this affects the margin in the printer settings */ } @media print { div { page-break-inside: avoid; } .entirety_finished { page-break-before: always; } } .printFlowCard_finished1 { flex-wrap: wrap; display: flex; flex-direction: column; } /*成*/ .entirety_finished1 { display: flex; text-align: center; flex-direction: column; margin-left: 10px; width: 337px; height: 120px; } .contentRow1 { font-weight: bolder; display: flex; text-align: center; width: 100%; } .contentRow1 .row1 { width: 30%; font-weight: bolder; } .entirety_finished1 .row4 { font-weight: bolder; text-align: right; margin-right: 10px; } .contentRow1 .row1, .contentRow1 .row2 { text-align: left; font-weight: bolder; } </style> north-glass-erp/northglass-erp/src/components/pp/PrintProcess.vue
@@ -41,6 +41,7 @@ if (like == '') { like = null } let name=company.companyName data.value.printList = JSON.parse(props.printList) let flowCardCount = '' onMounted(() => { @@ -278,7 +279,8 @@ <tr v-for="(itemDatile,index) in item.detailList" :key="index"> <td>{{ itemDatile.order_number }}</td> <td>{{ itemDatile.mapNumber }}</td> <td>{{ itemDatile.s01Value }}</td> <td v-if="name='金华福喜天成玻璃有限公司'">{{ itemDatile.building_number }}</td> <td v-else>{{ itemDatile.s01Value }}</td> <td>{{ itemDatile.technology_number }}</td> <td>{{ itemDatile.child_width }}</td> <td class="item" style="width: 5%;height: 100%;"> north-glass-erp/northglass-erp/src/components/pp/TagStyleDesigner.vue
@@ -278,6 +278,18 @@ } }, { tid: 'quantity', title: '订单数量', data: '', type: 'text', options: { field: 'quantity', testData: '', width:270, height: 16, fontSize: 11.25, textAlign: "left", textContentVerticalAlign: "middle" } }, { tid: 'orderNumber', title: '订单序号', data: '', type: 'text', options: { field: 'orderNumber', north-glass-erp/northglass-erp/src/views/mm/ingredientStock/CreateOutBound.vue
@@ -103,25 +103,27 @@ //页面第一次加载 request.get(`/BasicWarehouse/BasicWarehouseTypes/`+t('ingredientsStock.materialOutboundType')).then((res) => { const initOrder = async ()=> { await request.get(`/BasicWarehouse/BasicWarehouseTypes/` + t('ingredientsStock.materialOutboundType')).then((res) => { if(res.code==200){ if (res.code == 200) { titleSelectJson.value=deepClone(res.data) const today = new Date today.setTime(today.getTime() + (15 * 24 * 60 * 60 * 1000)) titleUploadData.value.materialRequisitionDate = today.getFullYear() + '-' + ("0" + (today.getMonth() + 1)).slice(-2) + '-' + ("0" + today.getDate()).slice(-2) getWork() }else{ ElMessage.warning(res.msg) } }) titleSelectJson.value = deepClone(res.data) console.log("a"+titleSelectJson.value) const today = new Date today.setTime(today.getTime() + (15 * 24 * 60 * 60 * 1000)) titleUploadData.value.materialRequisitionDate = today.getFullYear() + '-' + ("0" + (today.getMonth() + 1)).slice(-2) + '-' + ("0" + today.getDate()).slice(-2) getWork() } else { ElMessage.warning(res.msg) } }) } //列查询 const getWork = () => { request.get(`/BasicWarehouse/BasicWarehouseType/`+t('ingredients.originalFilm')+'|'+t('ingredients.accessories')).then((res) => { const getWork = async ()=> { await request.get(`/BasicWarehouse/BasicWarehouseType/`+t('ingredients.originalFilm')+'|'+t('ingredients.accessories')).then((res) => { if(res.code==200){ gridOptions.columns=[] BasicData.value = res.data @@ -149,7 +151,10 @@ const number = ref(); onMounted(()=>{ onMounted(async()=>{ await initOrder() //启用表格拖动选中 addListener(xGrid.value,gridOptions,cellArea.value) //出库新增 @@ -163,7 +168,7 @@ request.post("/materialInventory/getSelectMaterialInventory/1/100",filterData.value).then((res) => { if(res.code==200){ console.log("b"+titleSelectJson.value) titleUploadData.value.warehouseManager=userStore.user.userName titleUploadData.value.outboundType = titleSelectJson.value.outboundType[0].operateTypeName materialStore.value=[] north-glass-erp/northglass-erp/src/views/pp/processCard/PrintProjectDetails.vue
@@ -15,6 +15,7 @@ import PrintCustomLabelSemi from '@/components/pp/PrintCustomLabelSemi.vue' import PrintCustomLabelXJ from '@/components/pp/PrintCustomLabelTwo.vue' import PrintCustomLabelXJTwo from '@/components/pp/PrintCustomLabelXJTwo.vue' import PrintCustomLabelProject from '@/components/pp/PrintCustomLabelProject.vue' import SortDetail from '@/components/pp/SelectSortDetailProcessCard.vue' import footSum from "@/hook/footSum" import companyInfo from "@/stores/sd/companyInfo" @@ -32,6 +33,7 @@ const dialogTableVisibleCustomLabel = ref(false) const dialogTableVisibleLabelXJ = ref(false) const dialogTableVisibleLabelXJTwo = ref(false) const dialogTableVisibleLabelProject = ref(false) const printVisible = ref(false) let selectRecords = ref(null) let titleStyleVisible = ref(false) @@ -546,10 +548,21 @@ } } let name=company.companyName labelRow.value.list = JSON.stringify(selectRecords) labelRow.value.type = '恒鑫带数量' labelRow.value.dataType=3 dialogTableVisibleLabelXJTwo.value = true if (name == '金华福喜天成玻璃有限公司'){ labelRow.value.type = '成品标签' labelRow.value.dataType=3 labelRow.value.lableType = lableTypes dialogTableVisibleLabelProject.value = true } else { labelRow.value.type = '恒鑫带数量' labelRow.value.dataType=3 dialogTableVisibleLabelXJTwo.value = true } break @@ -763,6 +776,24 @@ :dataType="labelRow.dataType" style="width: 100%;height: 100%"/> </el-dialog> <!-- 成品标签工程打印--> <el-dialog id="sizeCustom" v-model="dialogTableVisibleLabelProject" :title="$t('processCard.printLabel')" destroy-on-close style="width: 80%;height:75% "> <template #header="{ close, titleId, titleClass }"> <el-button v-print="printContentLabel" :icon="Printer" circle/> </template> <print-custom-label-project id="childLabel" :faceOrientation="labelRow.faceOrientation" :lableType="labelRow.lableType" :list="labelRow.list" :type="labelRow.type" style="width: 100%;height: 100%"/> </el-dialog> </div> </template> north-glass-erp/northglass-erp/src/views/pp/processCard/SelectPrintProject.vue
@@ -112,7 +112,12 @@ const button = {'code': 'printLabel', status: 'primary', 'name': t('processCard.finishedProductPrinting2')} gridOptions.toolbarConfig.buttons.push(button) let name=company.companyName if (name != '金华福喜天成玻璃有限公司') { gridOptions.toolbarConfig.buttons.push(button) } const button2 = {'code': 'detailPrinting', status: 'primary', @@ -276,7 +281,16 @@ id: 'childLabel', }) const hideButton = () => { let name=company.companyName // 根据条件值 hidePrintLabels 过滤按钮数组 gridOptions.toolbarConfig.buttons = gridOptions.toolbarConfig.buttons.filter(button => { // 这里根据 hidePrintLabels 的值决定是否隐藏 printLabel 和 printLabel2 if (name == '金华福喜天成玻璃有限公司') { return button.code !== 'printLabel'; } }) } </script> <template> north-glass-erp/src/main/java/com/example/erp/service/mm/MaterialInventoryService.java
@@ -327,6 +327,15 @@ materialOutboundId = object.get("materialOutboundId").toString(); } if(materialOutboundId!=null){ List<MaterialOutboundDetail> materialOutboundDetailLists = materialInventoryMapper.getIsNotMaterialOutboundDetail(materialOutboundId); if (!materialOutboundDetailLists.isEmpty()) { for (MaterialOutboundDetail materialOutboundDetail : materialOutboundDetailLists) { //还原物料库存数 materialInventoryMapper.updateMaterialInventoryAvailableInt(materialOutboundDetail.getInventoryId(), materialOutboundDetail.getOutboundQuantity()); } } materialInventoryMapper.deleteMaterialOutboundDetail(materialOutboundId); materialInventoryMapper.deleteMaterialOutbound(materialOutboundId); materialInventoryMapper.deleteMaterialLog(materialOutboundId); @@ -363,6 +372,15 @@ returningId = object.get("returningId").toString(); } if(returningId!=null){ List<ReturningWarehouseDetail> returningWarehouseDetailLists = materialInventoryMapper.getIsNotReturningWarehouseDetail(returningId); if (!returningWarehouseDetailLists.isEmpty()) { for (ReturningWarehouseDetail returningWarehouseDetail : returningWarehouseDetailLists) { //还原物料库存数 materialInventoryMapper.updateMaterialInventoryAvailableOut(returningWarehouseDetail.getInventoryId(), returningWarehouseDetail.getReturnQuantity()); } } materialInventoryMapper.deleteReturningWarehouseDetail(returningId); materialInventoryMapper.deleteReturningWarehouse(returningId); materialInventoryMapper.deleteMaterialLog(returningId); north-glass-erp/src/main/resources/mapper/mm/MaterialInventory.xml
@@ -562,11 +562,23 @@ </delete> <select id="getMaximum" > select count(*) from mm.material_outbound where date(create_time)=CURDATE() select ifnull(SUBSTR(max(right(material_outbound_id,8)) from 7),0) from mm.material_outbound as a where date(a.create_time) = curdate() </select> <select id="getMaximums" > select count(*) from mm.returning_warehouse where date(create_time)=CURDATE() select ifnull(SUBSTR(max(right(returning_id,8)) from 7),0) from mm.returning_warehouse as a where date(a.create_time) = curdate() </select> <select id="getMaterialOutboundCount" > north-glass-erp/src/main/resources/mapper/pp/FolwCard.xml
@@ -667,7 +667,8 @@ round(ogd.child_height) as height, pd.separation, fc.technology_number, IFNULL(JSON_UNQUOTE(JSON_EXTRACT(od.other_columns, '$.S02')),'') as mapNumber IFNULL(JSON_UNQUOTE(JSON_EXTRACT(od.other_columns, '$.S02')),'') as mapNumber, od.building_number from flow_card as fc left join sd.order_glass_detail as ogd on fc.order_id = ogd.order_id and fc.order_number = ogd.order_number and @@ -1217,7 +1218,8 @@ round(ogd.child_height) as height, pd.separation, fc.technology_number, IFNULL(JSON_UNQUOTE(JSON_EXTRACT(od.other_columns, '$.S02')),'') as mapNumber IFNULL(JSON_UNQUOTE(JSON_EXTRACT(od.other_columns, '$.S02')),'') as mapNumber, od.building_number from flow_card as fc left join sd.order_glass_detail as ogd on fc.order_id = ogd.order_id and fc.order_number = ogd.order_number and @@ -2187,7 +2189,8 @@ '文本' as custom2, '文本' as custom3, '文本' as custom4, '文本' as custom5 '文本' as custom5, od.quantity from optimize_detail as opt left join flow_card as fc on opt.project_no=fc.project_no and opt.process_id=fc.process_id and opt.layer=fc.technology_number and opt.order_sort=fc.order_number left join sd.order as o on o.order_id=fc.order_id @@ -2334,7 +2337,8 @@ '文本' as custom2, '文本' as custom3, '文本' as custom4, '文本' as custom5 '文本' as custom5, od.quantity from optimize_detail as opt left join flow_card as fc on opt.project_no=fc.project_no and opt.process_id=fc.process_id and opt.layer=fc.technology_number and opt.order_sort=fc.order_number left join sd.order as o on o.order_id=fc.order_id north-glass-erp/src/main/resources/mapper/sd/DeliveryMapper.xml
@@ -42,7 +42,12 @@ <select id="getmaximum" > select count(*) from sd.delivery where date(create_time)=CURDATE() select ifnull(SUBSTR(max(right(delivery_id,8)) from 7),0) from sd.delivery as a where date(a.create_time) = curdate() </select> <select id="getmaximumMonth">