New file |
| | |
| | | <script setup> |
| | | import { ref } from 'vue'; |
| | | import { formatMessage } from '@/utils/localeUtils'; |
| | | import Template1 from './template/template1.vue'; |
| | | import Template2 from './template/template2.vue'; |
| | | import Template3 from './template/template3.vue'; |
| | | |
| | | const template = { |
| | | Template1, |
| | | Template2, |
| | | Template3, |
| | | } |
| | | const selectTemplate = ref('Template1'); |
| | | const printChild = ref(null); |
| | | |
| | | let open = ref(false); |
| | | let printData = ref([]); |
| | | let repeatNum = ref(1); |
| | | |
| | | const handleOk = () => { |
| | | |
| | | } |
| | | |
| | | const printObj = ref({ |
| | | id: "printMe", |
| | | beforeOpenCallback(vue) { |
| | | console.log('打开之前') |
| | | }, |
| | | openCallback(vue) { |
| | | console.log('执行了打印') |
| | | }, |
| | | closeCallback(vue) { |
| | | console.log('关闭了打印工具') |
| | | } |
| | | }); |
| | | |
| | | defineExpose({ |
| | | open, |
| | | printData, |
| | | }) |
| | | </script> |
| | | |
| | | <template> |
| | | <a-modal v-model:open="open" :title="formatMessage('db.man_zpallet_barcode.batchPrint', '批量打印')" @ok="handleOk"> |
| | | <div style="height: 500px;overflow-x: hidden;overflow-y: scroll;"> |
| | | <div style="display: flex;justify-content: center;"> |
| | | <a-radio-group v-model:value="selectTemplate" button-style="solid"> |
| | | <a-radio-button value="Template1"> |
| | | {{ formatMessage('common.template', '模板') }} 1 |
| | | </a-radio-button> |
| | | <a-radio-button value="Template2"> |
| | | {{ formatMessage('common.template', '模板') }} 2 |
| | | </a-radio-button> |
| | | <a-radio-button value="Template3"> |
| | | {{ formatMessage('common.template', '模板') }} 3 |
| | | </a-radio-button> |
| | | </a-radio-group> |
| | | </div> |
| | | <div style="display: flex;justify-content: center;margin-top: 20px;"> |
| | | <div style="width: 140px;text-align: center;"> |
| | | {{ formatMessage('common.repeatNum', '重复数量') }}<a-input-number :min="1" v-model:value="repeatNum" :placeholder="formatMessage('common.repeatNum', '重复数量')" /> |
| | | </div> |
| | | </div> |
| | | <div style="margin-top: 20px;"> |
| | | <component :is="template[selectTemplate]" ref="printChild" :list="printData" :repeatNum="repeatNum" /> |
| | | </div> |
| | | </div> |
| | | <template #footer> |
| | | <a-button key="submit" type="primary" v-print="printObj" @click="handleOk"> |
| | | {{ formatMessage('common.print', '打印') }} |
| | | </a-button> |
| | | </template> |
| | | </a-modal> |
| | | </template> |
| | | |
| | | <style></style> |
New file |
| | |
| | | <script setup> |
| | | import { toRefs, ref, defineProps } from 'vue'; |
| | | import { globalState } from '@/config.js' |
| | | import { formatMessage } from '@/utils/localeUtils'; |
| | | |
| | | const props = defineProps({ |
| | | list: { |
| | | type: Array, |
| | | default: [] |
| | | }, |
| | | repeatNum: { |
| | | type: Number, |
| | | default: 1 |
| | | } |
| | | }); |
| | | const { list, repeatNum } = toRefs(props) |
| | | </script> |
| | | |
| | | <template> |
| | | <div id="printMe"> |
| | | <div v-for="(item, index) in list" :key="index"> |
| | | <div v-for="count in repeatNum" style="font-size: 16px;margin-top: 20px;"> |
| | | <div> |
| | | <table class="contain" width="300" |
| | | style="overflow: hidden;font-size: xx-small;table-layout: fixed;"> |
| | | <tr style="height: 74px"> |
| | | <td colspan="3" align="center" scope="col">物料号</td> |
| | | <td class="barcode" colspan="9" align="center" scope="col"> |
| | | <img :src="globalState.url + '/api/code/auth?type=1¶m=' + item.matnr" width="90%;" /> |
| | | <div style="letter-spacing: 2px;margin-top: 1px; text-align: center;"> |
| | | <span>{{ item.matnr }}</span> |
| | | </div> |
| | | </td> |
| | | </tr> |
| | | <tr style="height: 74px"> |
| | | <td align="center" colspan="3">商品</td> |
| | | <td align="center" colspan="5">{{ item.maktx }}</td> |
| | | <td align="center" colspan="2">规格</td> |
| | | <td align="center" colspan="2">{{ item.specs }}</td> |
| | | </tr> |
| | | </table> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </template> |
| | | |
| | | <style> |
| | | @media print { |
| | | body { |
| | | margin: 0; |
| | | padding: 0; |
| | | } |
| | | |
| | | .print-area { |
| | | margin: 0; |
| | | padding: 0; |
| | | height: auto; |
| | | } |
| | | |
| | | |
| | | } |
| | | |
| | | .contain td { |
| | | border: 1px solid #000; |
| | | } |
| | | </style> |
New file |
| | |
| | | <script setup> |
| | | import { toRefs, ref, defineProps } from 'vue'; |
| | | import { globalState } from '@/config.js' |
| | | import { formatMessage } from '@/utils/localeUtils'; |
| | | |
| | | const props = defineProps({ |
| | | list: { |
| | | type: Array, |
| | | default: [] |
| | | }, |
| | | repeatNum: { |
| | | type: Number, |
| | | default: 1 |
| | | } |
| | | }); |
| | | const { list, repeatNum } = toRefs(props) |
| | | </script> |
| | | |
| | | <template> |
| | | <div id="printMe"> |
| | | <div v-for="(item, index) in list" :key="index"> |
| | | <div v-for="count in repeatNum" style="font-size: 16px;margin-top: 20px;"> |
| | | <div> |
| | | <table class="contain" width="280" style="overflow: hidden;font-size: xx-small;table-layout: fixed;"> |
| | | <tr style="height: 74px"> |
| | | <td align="center" scope="col" colspan="1">商品</td> |
| | | <td align="center" scope="col" colspan="1" style="">{{ item.maktx }}</td> |
| | | <td align="center" scope="col" colspan="2" rowspan="2"> |
| | | <img :src="globalState.url + '/api/code/auth?type=2¶m=' + item.matnr" width="80%;" /> |
| | | <div style="letter-spacing: 1px;margin-top: 1px; text-align: center"> |
| | | <span>{{ item.matnr }}</span> |
| | | </div> |
| | | </td> |
| | | </tr> |
| | | <tr style="height: 74px"> |
| | | <td align="center" colspan="1">规格</td> |
| | | <td align="center" colspan="1" style="text-overflow:ellipsis;">{{ item.specs }}</td> |
| | | </tr> |
| | | </table> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </template> |
| | | |
| | | <style> |
| | | @media print { |
| | | body { |
| | | margin: 0; |
| | | padding: 0; |
| | | } |
| | | |
| | | .print-area { |
| | | margin: 0; |
| | | padding: 0; |
| | | height: auto; |
| | | } |
| | | |
| | | |
| | | } |
| | | |
| | | .contain td { |
| | | border: 1px solid #000; |
| | | } |
| | | </style> |
New file |
| | |
| | | <script setup> |
| | | import { toRefs, ref, defineProps } from 'vue'; |
| | | import { globalState } from '@/config.js' |
| | | import { formatMessage } from '@/utils/localeUtils'; |
| | | |
| | | const props = defineProps({ |
| | | list: { |
| | | type: Array, |
| | | default: [] |
| | | }, |
| | | repeatNum: { |
| | | type: Number, |
| | | default: 1 |
| | | } |
| | | }); |
| | | const { list, repeatNum } = toRefs(props) |
| | | </script> |
| | | |
| | | <template> |
| | | <div id="printMe"> |
| | | <div v-for="(item, index) in list" :key="index"> |
| | | <div v-for="count in repeatNum" style="font-size: 16px;margin-top: 20px;"> |
| | | <div> |
| | | <table class="contain" width="280" |
| | | style="overflow: hidden;font-size: xx-small;table-layout: fixed;"> |
| | | <tr style="height: 74px"> |
| | | <td align="center" scope="col">商品</td> |
| | | <td align="center" scope="col" style="">{{ item.maktx }}</td> |
| | | <td align="center" scope="col" colspan="2"> |
| | | <img :src="globalState.url + '/api/code/auth?type=2¶m=' + item.matnr" |
| | | width="80%;" /> |
| | | <div style="letter-spacing: 1px;margin-top: 1px; text-align: center"><span>{{ item.matnr |
| | | }}</span></div> |
| | | </td> |
| | | </tr> |
| | | <tr style="height: 74px"> |
| | | <td align="center">规格</td> |
| | | <td align="center" colspan="3">{{ item.specs }}</td> |
| | | </tr> |
| | | </table> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </template> |
| | | |
| | | <style> |
| | | @media print { |
| | | body { |
| | | margin: 0; |
| | | padding: 0; |
| | | } |
| | | |
| | | .print-area { |
| | | margin: 0; |
| | | padding: 0; |
| | | height: auto; |
| | | } |
| | | |
| | | |
| | | } |
| | | |
| | | .contain td { |
| | | border: 1px solid #000; |
| | | } |
| | | </style> |
| | |
| | | import EditView from './edit.vue' |
| | | import {formatMessage} from '@/utils/localeUtils.js'; |
| | | import useTableSearch from '@/utils/tableUtils.jsx'; |
| | | import MatPrint from '@/components/print/matPrint/index.vue'; |
| | | import { |
| | | DownOutlined, |
| | | UploadOutlined, |
| | |
| | | model: null, |
| | | }) |
| | | const editChild = ref(null) |
| | | const printChild = ref(null); |
| | | |
| | | const state = reactive({ |
| | | selectedRowKeys: [], |
| | |
| | | } |
| | | }; |
| | | |
| | | const handlePrint = () => { |
| | | if (state.selectedRowKeys.length == 0) { |
| | | message.warning(formatMessage('common.select', '请选择')); |
| | | return; |
| | | } |
| | | let data = tableData.value.records; |
| | | let tmp = []; |
| | | data.forEach((item) => { |
| | | if (state.selectedRowKeys.indexOf(item.id) != -1) { |
| | | tmp.push(item); |
| | | } |
| | | }) |
| | | |
| | | printChild.value.printData = tmp; |
| | | printChild.value.open = true; |
| | | } |
| | | |
| | | </script> |
| | | |
| | | <script> |
| | |
| | | <DownOutlined/> |
| | | </a-button> |
| | | </a-dropdown> |
| | | <a-button @click="handlePrint()" type="primary"> |
| | | {{ formatMessage('db.man_zpallet_barcode.batchPrint', '批量打印') }} |
| | | </a-button> |
| | | <a-button @click="handleEdit(null)" type="primary">{{ formatMessage('page.add', '添加') }}</a-button> |
| | | <a-button @click="handleExport">{{ formatMessage('page.export', '导出') }}</a-button> |
| | | </div> |
| | |
| | | </template> |
| | | </a-table> |
| | | </div> |
| | | |
| | | <MatPrint ref="printChild" /> |
| | | </template> |
| | | |
| | | <style></style> |