| | |
| | | const {t} = useI18n() |
| | | let router = useRouter() |
| | | const dialogTableVisible = ref(false) |
| | | let rowClickIndex = ref(null) |
| | | let selectRecords = ref(null) |
| | | |
| | | //定义滚动条高度 |
| | | let scrollTop = ref(null) |
| | |
| | | }) |
| | | |
| | | const gridEvents = { |
| | | async toolbarButtonClick({code}) { |
| | | toolbarButtonClick ({ code}) { |
| | | const $grid = xGrid.value |
| | | selectRecords = $grid.getCheckboxRecords() |
| | | if ($grid) { |
| | | switch (code) { |
| | | case 'print': { |
| | | const $table = xGrid.value |
| | | const selectRecords = $table.getCheckboxRecords() |
| | | console.log(selectRecords.order_id) |
| | | dialogTableVisible.value = true |
| | | return; |
| | | |
| | | if(selectRecords.value===null){ |
| | | ElMessage.warning(t('searchOrder.msgList.checkOrder')) |
| | | 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 + "|" |
| | | } |
| | | } |
| | | console.log(selectRecords) |
| | | router.push({path: '/main/processCard/printProcess', query: {printList: JSON.stringify(selectRecords)}}) |
| | | //dialogTableVisible.value = true |
| | | break |
| | | } |
| | | |
| | | } |
| | | } |
| | | }, |
| | |
| | | destroy-on-close |
| | | title="流程卡打印" |
| | | style="width: 80%;height:75% "> |
| | | <PrintProcess |
| | | <PrintProcess :printList="selectRecords" |
| | | style="width: 100%;height: 100%" /> |
| | | </el-dialog> |
| | | </div> |
| | |
| | | <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"; |
| | | //语言获取 |
| | | const {t} = useI18n() |
| | | let router = useRouter() |
| | | let produceList = ref([]) |
| | | let details = ref([]) |
| | | |
| | | const data = ref({ |
| | | printList:[] |
| | | }) |
| | | |
| | | const {currentRoute} = useRouter() |
| | | const route = currentRoute.value |
| | | data.value.printList = JSON.parse(route.query.printList) |
| | | let flowCardCount=data.value.printList.length |
| | | console.log(flowCardCount) |
| | | onMounted(() => { |
| | | // if (id === null || id === undefined || id === '') { |
| | | // return |
| | | // } |
| | | |
| | | request.post(`/processCard/getSelectPrinting`, data.value).then((res) => { |
| | | if (res.code == 200) { |
| | | |
| | | produceList.value = deepClone(res.data.data) |
| | | console.log(produceList.value) |
| | | |
| | | } else { |
| | | ElMessage.warning(res.msg) |
| | | router.push("/login") |
| | | } |
| | | }) |
| | | } |
| | | ) |
| | | |
| | | // 打印方法 |
| | | const printFlowCard = () => { |
| | | // 需要打印的局部区域赋予"print-wrap"的id |
| | | let el = document.getElementById("printFlowCard"); |
| | | let doc = document; |
| | | let body = doc.body || doc.getElementsByTagName("body")[0]; |
| | | let printId = "print-" + Date.now(); |
| | | |
| | | // 创建无副作用的打印容器(因不确定页面的打印元素有无其它样式) |
| | | let content = doc.createElement("div"); |
| | | content.id = printId; |
| | | |
| | | // 样式控制与打印无关的元素隐藏 |
| | | let style = doc.createElement("style"); |
| | | style.innerHTML = |
| | | "body>#" + |
| | | printId + |
| | | "{display:none}@media print{body>:not(#" + |
| | | printId + |
| | | "){display:none !important}body>#" + |
| | | printId + |
| | | "{display:block;padding-top:1px}}"; |
| | | // |
| | | content.innerHTML = el.outerHTML; |
| | | // // console.log("el.outerHTML", el.outerHTML); |
| | | body.appendChild(style); |
| | | |
| | | // 与style元素设置的样式相配合 |
| | | // 把打印内容的元素添加到body(作为body的子元素,可用body的子选择器 '>' 控制打印样式) |
| | | body.appendChild(content); |
| | | setTimeout(() => { |
| | | window.print(); |
| | | body.removeChild(content); |
| | | body.removeChild(style); |
| | | }, 20); |
| | | } |
| | | </script> |
| | | |
| | | <template> |
| | | <el-button id="printButton" @click="printFlowCard">打印</el-button> |
| | | <div id="printFlowCard"> |
| | | <table id="contentTable" > |
| | | <table v-for="(item,id) in produceList" id="contentTable" :key="id"> |
| | | <thead> |
| | | <tr> |
| | | <tr v-for="(itemFlow,index) in item.detail" :key="index"> |
| | | <td colspan="24"> |
| | | |
| | | <h1>吉利玻璃</h1> |
| | | <h1>生产流程卡</h1> |
| | | <div style="text-align: right">流程卡号: NG24041101A001 共*架<span class="technology">/1</span></div> |
| | | <div id="bj" style="float: right;font-size: 28px">{{ id+1 }}</div> |
| | | <div>常州市吉利玻璃有限公司</div> |
| | | <div>生产流程卡</div> |
| | | <div style="text-align: right;font-weight: bolder">流程卡号: {{ itemFlow.process_id }}/{{ itemFlow.technologyNumber }} 共 {{flowCardCount}} 架</div> |
| | | </td> |
| | | </tr> |
| | | <tr> |
| | | <tr v-for="(items,index) in item.detail" :key="index"> |
| | | <td>客户名称:</td> |
| | | <td colspan="2"></td> |
| | | <td colspan="2">{{ items.customer_name }}</td> |
| | | <td>项目名称:</td> |
| | | <td colspan="2"></td> |
| | | <td>工艺流程:</td> |
| | | <td colspan="16"></td> |
| | | <td colspan="2">{{ items.project }}</td> |
| | | <td style="width:100px">工艺流程:</td> |
| | | <td colspan="16">{{ items.process }}</td> |
| | | </tr> |
| | | <tr> |
| | | <tr v-for="(itemTr,index) in item.detail" :key="index"> |
| | | <td>磨边类型:</td> |
| | | <td colspan="2"></td> |
| | | <td colspan="2">{{ itemTr.edging_type }}</td> |
| | | <td>单片名称:</td> |
| | | <td colspan="2"></td> |
| | | <td colspan="2">{{ itemTr.glass_child }}</td> |
| | | <td>产品名称:</td> |
| | | <td colspan="16"></td> |
| | | <td colspan="16">{{ itemTr.product_name }}</td> |
| | | </tr> |
| | | |
| | | </thead> |
| | | <tbody> |
| | | <tr> |
| | | <td rowspan='2'>序号</td> |
| | | <td rowspan='2'>宽*高</td> |
| | |
| | | <td>正品</td> |
| | | <td>次品</td> |
| | | </tr> |
| | | </thead> |
| | | <tbody> |
| | | <tr></tr> |
| | | <tr v-for="(itemDatile,index) in item.detailList" :key="index"> |
| | | <td>{{ itemDatile.order_number }}</td> |
| | | <td>{{ itemDatile.child_width }}</td> |
| | | <td>{{ itemDatile.quantity }}</td> |
| | | <td>{{ itemDatile.total_area }}</td> |
| | | <td>{{ itemDatile.perimeter }}</td> |
| | | <td>{{ itemDatile.bend_radius }}</td> |
| | | <td>{{ itemDatile.order_number }}</td> |
| | | <td></td> |
| | | <td></td> |
| | | <td></td> |
| | | <td></td> |
| | | <td></td> |
| | | <td></td> |
| | | <td></td> |
| | | <td></td> |
| | | <td></td> |
| | | <td></td> |
| | | <td></td> |
| | | <td></td> |
| | | <td></td> |
| | | <td></td> |
| | | <td></td> |
| | | <td></td> |
| | | </tr> |
| | | </tbody> |
| | | <tfoot> |
| | | <tr> |
| | | <td colspan="24"> |
| | | <td colspan="24" v-for="(itemsum,index) in item.detail" :key="index"> |
| | | 数量: |
| | | <label>11</label> |
| | | <label>{{ itemsum.quantity }}</label> |
| | | 面积: |
| | | <label>1111</label> |
| | | <label>{{ itemsum.gross_area }}</label> |
| | | 重量: |
| | | <label>1111</label> |
| | | <label>{{ itemsum.gross_area }}</label> |
| | | </td> |
| | | </tr> |
| | | <tr> |
| | | <td colspan="6" rowspan="7" style="width: 470px"> |
| | | <textarea style="height: 98%;width: 98%"></textarea> |
| | | <tr v-for="(itemtextarea,index) in item.detail" :key="index"> |
| | | <td colspan="6" rowspan="6" style="width: 450px;height: 150px "> |
| | | <div style="width: 100%;height: 100%"><textarea style="height: 98%;width: 98%">{{ itemtextarea.processing_note }}</textarea></div> |
| | | </td> |
| | | <td>完工签名</td> |
| | | <td></td> |
| | |
| | | padding: 0; |
| | | } |
| | | |
| | | #printButton{ |
| | | margin-top: -40px; |
| | | width: 100px; |
| | | } |
| | | |
| | | #printFlowCard { |
| | | margin-top: -40px; |
| | | text-align: center; |
| | | width: 100%; |
| | | height: 100%; |
| | | //font-weight: bolder; |
| | | height: 600px; |
| | | } |
| | | |
| | | #contentTable { |
| | | border-collapse: collapse; |
| | | border: 1px solid black; |
| | | height: 100%; |
| | | width: 100%; |
| | | |
| | | } |
| | | |
| | | #contentTable thead { |
| | | font-size: 13px; |
| | | font-weight: bolder; |
| | | } |
| | | |
| | | #contentTable thead div { |
| | | font-size: 15px; |
| | | font-weight: bolder; |
| | | } |
| | | |
| | | #contentTable tr td { |
| | | border: 1px solid black; |
| | | height: 30px; |
| | | height: 22px; |
| | | font-weight: bolder; |
| | | } |
| | | #contentTable tbody{ |
| | | height: 22px; |
| | | } |
| | | |
| | | #contentTable tbody td { |
| | | width: 50px; |
| | | } |
| | | |
| | | #contentTable tfoot{ |
| | | font-size: 12px; |
| | | font-weight: bolder; |
| | | } |
| | | |
| | | |
| | | footer {page-break-after: always;} |
| | | |
| | | tbody{display:table-row-group;} |
| | | |
| | | table { page-break-inside:auto; } |
| | | tr { page-break-inside:avoid; } |
| | | td { page-break-inside:avoid; } |
| | | thead { display:table-header-group; } |
| | | tfoot { display:table-footer-group;page-break-inside:avoid; } |
| | | |
| | | |
| | | </style> |
| | |
| | | |
| | | let startTime = form.date1[0] |
| | | let endTime = form.date1[1] |
| | | request.post(`/processCard/selectAddProcess/${startTime}/${endTime}`).then((res) => { |
| | | let orderId=form.orderId |
| | | let project=form.project |
| | | |
| | | if (orderId==''){ |
| | | orderId=null |
| | | } |
| | | if (project==''){ |
| | | project=null |
| | | } |
| | | request.post(`/processCard/selectPrintFlowCard/${startTime}/${endTime}/${orderId}/${project}`, filterData.value).then((res) => { |
| | | if (res.code == 200) { |
| | | |
| | | xGrid.value.loadData(res.data.data) |
| | |
| | | |
| | | const checkClose = async (done) => { |
| | | if(brokenGrid.value.getTableData().fullData.length===0){ |
| | | console.log(brokenRow.value) |
| | | brokenRow.value.breakageQuantity=null |
| | | brokenRow.value.completedQuantity = brokenRow.value.quantity |
| | | brokenRow.value.damageDetails=[] |
| | |
| | | |
| | | import com.example.erp.common.Constants; |
| | | import com.example.erp.entity.pp.FlowCard; |
| | | import com.example.erp.entity.sd.DeliveryDetail; |
| | | import com.example.erp.entity.sd.Order; |
| | | import com.example.erp.common.Result; |
| | | import com.example.erp.entity.sd.OrderDetail; |
| | |
| | | return Result.seccess(flowCardService.selectPrintSv(orderId,flowCard)); |
| | | |
| | | } |
| | | |
| | | @ApiOperation("打印流程卡数据查询接口") |
| | | @PostMapping("/getSelectPrinting") |
| | | public Result getSelectPrinting( @RequestBody Map<String,Object> object){ |
| | | System.out.println(object); |
| | | return Result.seccess(flowCardService.getSelectPrintingSv(object)); |
| | | } |
| | | } |
| | |
| | | List<Map<String, String>> selectPrintFlowCardMp(Date selectTime1, Date selectTime2, String orderId, String project, FlowCard flowCard); |
| | | |
| | | List<Map<String, String>> selectPrintMp(String orderId, FlowCard flowCard); |
| | | |
| | | List<Map<String, String>> getPrimaryList(String processId, Integer technologyNumber); |
| | | |
| | | List<Map<String, Object>> getDetailList(String processId, Integer technologyNumber); |
| | | |
| | | List<Map<String, Object>> getProcessList(String processId, Integer technologyNumber); |
| | | } |
| | |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | import java.sql.Date; |
| | | import java.util.ArrayList; |
| | | import java.util.HashMap; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | |
| | | } |
| | | |
| | | public Object selectPrintFlowCardSv(Date selectTime1, Date selectTime2, String orderId, String project, FlowCard flowCard) { |
| | | if("null".equals(orderId)){ |
| | | orderId=""; |
| | | if ("null".equals(orderId)) { |
| | | orderId = ""; |
| | | } |
| | | if("null".equals(project)){ |
| | | project=""; |
| | | if ("null".equals(project)) { |
| | | project = ""; |
| | | } |
| | | Map<String, Object> map = new HashMap<>(); |
| | | map.put("data", flowCardMapper.selectPrintFlowCardMp(selectTime1, selectTime2,orderId,project,flowCard)); |
| | | map.put("data", flowCardMapper.selectPrintFlowCardMp(selectTime1, selectTime2, orderId, project, flowCard)); |
| | | return map; |
| | | } |
| | | |
| | |
| | | map.put("data", flowCardMapper.selectPrintMp(orderId, flowCard)); |
| | | return map; |
| | | } |
| | | |
| | | public Map<String, Object> getSelectPrintingSv(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) { |
| | | Map<String, Object> itemmap = new HashMap<>(); |
| | | //流程卡表头表尾数据 |
| | | itemmap.put("detail", flowCardMapper.getPrimaryList(flowCard.getProcessId(), flowCard.getTechnologyNumber())); |
| | | //流程卡明细数据 |
| | | List<Map<String, Object>> detailList = flowCardMapper.getDetailList(flowCard.getProcessId(), flowCard.getTechnologyNumber()); |
| | | //工艺流程 |
| | | List<Map<String, Object>> processList = flowCardMapper.getProcessList(flowCard.getProcessId(), flowCard.getTechnologyNumber()); |
| | | itemmap.put("detailList", detailList); |
| | | itemmap.put("processList", processList); |
| | | list.add(itemmap); |
| | | |
| | | |
| | | } |
| | | } |
| | | map.put("data", list); |
| | | return map; |
| | | } |
| | | } |
| | |
| | | </select> |
| | | |
| | | <select id="selectPrintMp"> |
| | | select fc.order_id, |
| | | select fc.id, |
| | | fc.order_id, |
| | | fc.process_id, |
| | | o.customer_name, |
| | | o.project, |
| | |
| | | order by fc.process_id, ogd.technology_number |
| | | |
| | | </select> |
| | | |
| | | <select id="getPrimaryList"> |
| | | select o.customer_name, |
| | | o.project, |
| | | ogd.process, |
| | | od.edging_type, |
| | | ogd.glass_child, |
| | | od.product_name, |
| | | o.processing_note, |
| | | fc.process_id, |
| | | SUM( od.quantity) as quantity, |
| | | SUM(od.gross_area) as gross_area, |
| | | #{technologyNumber} as technologyNumber |
| | | 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 |
| | | fc.technology_number = ogd.technology_number |
| | | left join sd.order_detail as od on od.order_id = fc.order_id and od.order_number = fc.order_number |
| | | left join sd.`order` as o on o.order_id = fc.order_id |
| | | where fc.process_id = #{processId} |
| | | and fc.technology_number = #{technologyNumber} |
| | | group by fc.process_id, fc.technology_number |
| | | </select> |
| | | |
| | | <select id="getDetailList"> |
| | | select fc.order_number, |
| | | concat(ogd.child_width, "*", ogd.child_height) as child_width, |
| | | od.quantity, |
| | | ogd.total_area, |
| | | od.perimeter, |
| | | od.bend_radius, |
| | | od.remarks |
| | | 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 |
| | | fc.technology_number = ogd.technology_number |
| | | left join sd.order_detail as od on od.order_id = fc.order_id and od.order_number = fc.order_number |
| | | where fc.process_id = #{processId} |
| | | and fc.technology_number = #{technologyNumber} |
| | | group by fc.process_id, fc.order_number |
| | | order by fc.order_number |
| | | limit 10 |
| | | </select> |
| | | |
| | | <select id="getProcessList"> |
| | | select * |
| | | from sd.order_process_detail |
| | | where process_id = #{processId} |
| | | and technology_number = #{technologyNumber} |
| | | group by process |
| | | </select> |
| | | </mapper> |
| | |
| | | </select> |
| | | |
| | | <select id="selectPrintMp"> |
| | | select fc.order_id, |
| | | select fc.id, |
| | | fc.order_id, |
| | | fc.process_id, |
| | | o.customer_name, |
| | | o.project, |
| | |
| | | order by fc.process_id, ogd.technology_number |
| | | |
| | | </select> |
| | | |
| | | <select id="getPrimaryList"> |
| | | select o.customer_name, |
| | | o.project, |
| | | ogd.process, |
| | | od.edging_type, |
| | | ogd.glass_child, |
| | | od.product_name, |
| | | o.processing_note, |
| | | fc.process_id, |
| | | SUM( od.quantity) as quantity, |
| | | SUM(od.gross_area) as gross_area, |
| | | #{technologyNumber} as technologyNumber |
| | | 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 |
| | | fc.technology_number = ogd.technology_number |
| | | left join sd.order_detail as od on od.order_id = fc.order_id and od.order_number = fc.order_number |
| | | left join sd.`order` as o on o.order_id = fc.order_id |
| | | where fc.process_id = #{processId} |
| | | and fc.technology_number = #{technologyNumber} |
| | | group by fc.process_id, fc.technology_number |
| | | </select> |
| | | |
| | | <select id="getDetailList"> |
| | | select fc.order_number, |
| | | concat(ogd.child_width, "*", ogd.child_height) as child_width, |
| | | od.quantity, |
| | | ogd.total_area, |
| | | od.perimeter, |
| | | od.bend_radius, |
| | | od.remarks |
| | | 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 |
| | | fc.technology_number = ogd.technology_number |
| | | left join sd.order_detail as od on od.order_id = fc.order_id and od.order_number = fc.order_number |
| | | where fc.process_id = #{processId} |
| | | and fc.technology_number = #{technologyNumber} |
| | | group by fc.process_id, fc.order_number |
| | | order by fc.order_number |
| | | limit 10 |
| | | </select> |
| | | |
| | | <select id="getProcessList"> |
| | | select * |
| | | from sd.order_process_detail |
| | | where process_id = #{processId} |
| | | and technology_number = #{technologyNumber} |
| | | group by process |
| | | </select> |
| | | </mapper> |