From d098e2e3a16837ad0a61c1a2df93b27c7d16bfd2 Mon Sep 17 00:00:00 2001 From: zhouwx <1175765986@qq.com> Date: 星期五, 06 九月 2024 17:10:29 +0800 Subject: [PATCH] 批量导入 --- src/views/hazardousChemicals/warehouseManage/components/printCode.vue | 130 ++++++++++++++++++++++++++++++++----------- 1 files changed, 96 insertions(+), 34 deletions(-) diff --git a/src/views/hazardousChemicals/warehouseManage/components/printCode.vue b/src/views/hazardousChemicals/warehouseManage/components/printCode.vue index 6c776a9..a92c71e 100644 --- a/src/views/hazardousChemicals/warehouseManage/components/printCode.vue +++ b/src/views/hazardousChemicals/warehouseManage/components/printCode.vue @@ -3,26 +3,45 @@ <el-dialog v-model="dialogVisible" :title="title == 'pro' ? '成品二维码打印' : '危化品二维码打印'" - width="600px" + width="650px" :before-close="handleClose" :close-on-press-escape="false" :close-on-click-modal="false" > + <div style="display: flex;justify-content: space-between"> + <el-form :inline="true" style="display: flex;align-items: center;flex-wrap: wrap;" > + <el-form-item label="条码编号:" > + <el-input v-model="state.queryParams.code" placeholder="请输入条码编号" ></el-input> + </el-form-item> + <el-form-item > + <el-button + type="primary" + @click="getList" + >查询</el-button> + <el-button + type="primary" + plain + @click="reset" + >重置</el-button> + </el-form-item> + </el-form> + </div> <el-table v-loading="state.loading" :data="state.dataList" :border="true" :show-header="false" height="550" @selection-change="handleSelectionChange"> <el-table-column type="selection" width="55" align="center" /> <el-table-column align="center" > <template #default="scope"> <div :id="scope.row.code"> - <div style="display: flex;flex-direction: column;align-items: center;justify-content: center"> - <div style="font-size:14px;margin-top:10px;">{{scope.row.name}}—{{scope.row.productSn}}</div> - <vue-qr :size="80" :margin="0" :auto-color="true" :dot-scale="1" :text="scope.row.code" style="margin-top:10px;"></vue-qr> - <div style="font-size:10px;margin-top:10px;">{{scope.row.code}}</div> + <div style="display: flex;flex-direction: column;align-items: center;justify-content: center;"> + <div style="font-size:14px;margin-bottom: 2px" id="codeTitle">{{scope.row.name}}—{{scope.row.productSn}}</div> + <vue-qr :size="100" :correctLevel="3" colorDark="black" :margin="0" :auto-color="true" :text="scope.row.code"></vue-qr> + <div style="font-size:10px;margin-top: 2px">{{scope.row.code}}</div> </div> </div> </template> </el-table-column> </el-table> <pagination + v-model:pager-count="pageCount" v-show="state.total > 0" :total="state.total" v-model:page="state.queryParams.pageNum" @@ -42,9 +61,12 @@ import {reactive, ref, toRefs} from 'vue' import VueQr from 'vue-qr/src/packages/vue-qr.vue' import {ElMessage} from "element-plus"; +import printJS from 'print-js'; import {addWarehouse, checkName, editWarehouse} from "@/api/hazardousChemicals/warehouse"; import {verifyPhone} from "@/utils/validate"; import {checkBasicName} from "@/api/hazardousChemicals/basicInfo"; +import {getProDetail, getProductRecord, getWhProDetail} from "@/api/hazardousChemicals/productRecord"; +import {getRawDetail, getWhRawDetail} from "@/api/hazardousChemicals/rawRecord"; const dialogVisible = ref(false); const title = ref(""); @@ -58,38 +80,24 @@ total: 0, queryParams:{ pageNum: 1, - pageSize: 5 + pageSize: 5, + // warehouseId: null, + // basicId: null, + entryId: null, + code: '' }, chooseList: [] }) - +const pageCount = ref(3) const originalList = ref([]) const openDialog = async (type,value) => { + // state.queryParams.warehouseId =value.warehouseId + // state.queryParams.basicId =value.basicId + state.queryParams.entryId = value.id title.value = type; - if(type == 'pro'){ - for(let i=value.startCode ; i<=value.endCode;i++){ - const obj = { - name: value.productBasic.name, - productSn: value.productBasic.productSn, - code: value.codePrex+(i+"").padStart(4,'0') - } - state.dataList.push(obj) - } - }else { + await getList() - for(let i=value.startCode ; i<=value.endCode;i++){ - const obj = { - name: value.hazmatBasic.name, - productSn: value.hazmatBasic.productSn, - code: value.codePrex+(i+"").padStart(4,'0') - } - state.dataList.push(obj) - } - } - state.total = state.dataList.length - originalList.value = state.dataList - getList() console.log('state.dataList',state.dataList) dialogVisible.value = true; } @@ -115,16 +123,52 @@ state.dataList = []; state.queryParams = { pageNum: 1, - pageSize: 5 + pageSize: 5, + entryId: null, + code: '' } state.total = 0 state.chooseList = [] } -const getList = () => { - state.dataList = originalList.value.slice((state.queryParams.pageNum-1) * state.queryParams.pageSize, state.queryParams.pageNum * state.queryParams.pageSize) +const getList = async () => { + if(title.value == 'pro'){ + const res = await getWhProDetail(state.queryParams) + if(res.code == 200){ + state.dataList = res.data.list.map(item => { + return{ + ...item, + name: item.productBasic.name, + productSn: item.productBasic.productSn + } + }) + state.total = res.data.total + originalList.value = state.dataList + }else{ + ElMessage.warning(res.message) + } + }else { + const res = await getWhRawDetail(state.queryParams) + if(res.code == 200){ + state.dataList = res.data.list.map(item => { + return{ + ...item, + name: item.hazmatBasic.name, + productSn: item.hazmatBasic.productSn + } + }) + state.total = res.data.total + originalList.value = state.dataList + }else{ + ElMessage.warning(res.message) + } + } + + + } const printEvent=() => { + let data = [] if(state.chooseList && state.chooseList.length>0){ data = state.chooseList @@ -134,10 +178,11 @@ let qrCodes='' for(let index in data){ console.log(index,'index') - qrCodes+=`<div class="my-list-col"><div class="centered-content">${document.getElementById(data[index].code).innerHTML}</div></div>` + qrCodes+=`<div class="my-list-col"><div class="centered-content changeFont">${document.getElementById(data[index].code).innerHTML}</div></div>` } const printContent=document.createElement('div') printContent.innerHTML=qrCodes + //创建一个新的隐藏的iframe元素 const printFrame =document.createElement('iframe') printFrame.style.display='none' @@ -152,8 +197,9 @@ <style> @media print { .page-break { page-break-after:always;} /* 定义分页符格式*/ - .centered-content { text-align:center;} /* 居中对齐内容*/ + .centered-content { display: flex;justify-content: center; align-items: center;height: 90vh;} /* 居中对齐内容*/ @page { size:50mm 40mm;margin:0mm; } + .changeFont{font-size:12px;transform: scale(0.8);-webkit-transform: scale(0.85);} } </style> </head> @@ -161,7 +207,18 @@ </html> `) printDocument.close() + let ct = document.getElementById('codeTitle').offsetWidth + console.log('ct',ct) //在打印窗口中调用打印功能 + // debugger + // if(ct >= 180) { + + // }else { + // + // printFrame.contentWindow.document.body.style.zoom = '100%' + // } + + printFrame.contentWindow.print() //移除隐藏的iframe元素 document.body.removeChild(printFrame) @@ -180,10 +237,15 @@ :deep(.el-form .el-form-item__label) { font-size: 15px; } + :deep(.el-dialog__body) { + padding: 10px 20px 0 20px; + } + .file { display: flex; flex-direction: column; align-items: flex-start; } + } </style> -- Gitblit v1.9.2