| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601 |
- <template>
- <div>
- <div v-show="printing">
- <Navbar title="标签打印" :is-go-back="true" />
- <div class="printDiv">
- <div>
- <span style="color: red"> * </span>
- <label>导入批次:</label>
- <a-select
- v-model:value="queryParams.batchNo"
- show-search
- class="commonStyle"
- :options="batchNos.map((item) => ({ value: item.label }))"
- @change="batchNoChange"
- />
- <label>保管人员:</label>
- <a-select
- v-model:value="queryParams.depositoryUser"
- show-search
- class="commonStyle"
- :options="depositoryUsers.map((item) => ({ value: item.label }))"
- @change="searchDatas"
- />
- <label>打印状态:</label>
- <a-select
- v-model:value="queryParams.labelPrintType"
- show-search
- class="commonStyle"
- :options="
- statusOptions.map((item) => ({
- value: item.value,
- label: item.label,
- }))
- "
- @change="searchDatas"
- />
- </div>
- <div style="margin: 8px 0 0 9px">
- <label>公司名称:</label>
- <a-select
- v-model:value="queryParams.clientName"
- show-search
- class="commonStyle"
- :options="clientNames.map((item) => ({ value: item.label }))"
- @change="searchDatas"
- />
- <label>所属部门:</label>
- <a-select
- v-model:value="queryParams.organizationName"
- show-search
- class="commonStyle"
- :options="organizationNames.map((item) => ({ value: item.label }))"
- @change="searchDatas"
- />
- <label>成本中心:</label>
- <a-select
- v-model:value="queryParams.costCenterName"
- show-search
- class="commonStyle"
- :options="costCenterNames.map((item) => ({ value: item.label }))"
- @change="searchDatas"
- />
- <a-button type="primary" @click="searchDatas">查询</a-button>
- </div>
- <div style="margin-top: 8px">
- <span style="color: red"> * </span>
- <label>打印模板:</label>
- <a-select
- v-model:value="printTemplate"
- show-search
- class="commonStyle"
- :options="
- templateNames.map((item) => ({
- value: `${item.id}-${item.name}`,
- label: item.name,
- }))
- "
- @change="getTemplateInfo"
- />
- <a-button
- type="dashed"
- style="margin-right: 16px"
- @click="printPreview"
- >
- 效果预览
- </a-button>
- <a-button
- type="dashed"
- style="margin-right: 16px"
- @click="showPrintInfo"
- >
- 打印
- </a-button>
- <a-button type="dashed" style="margin-right: 16px" @click="printAll">
- 打印全部
- </a-button>
- <a-button type="dashed" @click="downloadImageZip">
- 下载全部
- </a-button>
- </div>
- <a-divider />
- <CommonTable
- ref="table"
- :total="total"
- :columns="columns"
- :is-loading="isLoading"
- :is-select="isSelect"
- :data-source="dataSource"
- @get-selected="selectColumn"
- @get-pager="getPageParams"
- >
- <template #bodyCell="{ column, record }">
- <template v-if="column.key === 'imageUrl'">
- <a-image
- :width="100"
- :height="50"
- :src="getImageSrc(className, record.imageUrl)"
- />
- </template>
- </template>
- </CommonTable>
- <a-modal
- v-model:visible="printVisible"
- title="包装信息"
- ok-text="确认"
- cancel-text="取消"
- @ok="
- all === false
- ? printCard(select.selectedRows)
- : printCard(select.allData)
- "
- >
- <label>包装批号:</label>
- <a-input
- id="displayName"
- v-model:value="packageBatchNo"
- :disabled="true"
- />
- <label>上次的批号:</label>
- <a-input v-model:value="lastPackageBatchNo" :disabled="true" />
- <label>包装名称:</label>
- <a-input
- id="displayName"
- v-model:value="packageName"
- :disabled="true"
- />
- <label>上次的名称:</label>
- <a-input v-model:value="lastPackageName" :disabled="true" />
- <div class="operationBtn">
- <a-button type="dashed" style="width: 240px" @click="lastTime">
- 同上一次
- </a-button>
- <a-button
- type="dashed"
- style="width: 240px; margin-left: 4px"
- @click="createNew"
- >
- 生成新的
- </a-button>
- </div>
- </a-modal>
- <a-modal
- v-model:visible="imageVisible"
- title="效果预览"
- :mask-closable="false"
- :body-style="bodyStyle"
- >
- <a-image :src="imageUrls[0]" />
- <template #footer />
- </a-modal>
- <Loading v-if="globalLoading" :text="propText" />
- </div>
- </div>
- <div ref="hua" style="float: left; z-index: -999" />
- </div>
- </template>
- <script setup>
- import Common from '../common/Common';
- import CreateJPEG from '../common/X6';
- import { message } from 'ant-design-vue';
- import { base64toFile } from '../common/X6';
- import CommonTable from '../common/CommonTable.vue';
- import { SqlApi, Notify } from 'pc-component-v3';
- import { getImageSrc } from '../common/image-src';
- import { ref, reactive, onMounted, watch } from 'vue';
- import {
- columns,
- dateConvert,
- multipleImageUpload,
- getTemplate,
- downloadZip,
- } from './config';
- const className = ref('com.leanwo.prodog.print.model.LabelPrintLine');
- const table = ref(null);
- const imageUrls = reactive([]);
- const printing = ref(true);
- const total = ref(0);
- const isSelect = ref(true);
- const isLoading = ref(false);
- const select = reactive({ selectedRows: [], allData: [] });
- const dataSource = ref([]);
- const printVisible = ref(false);
- const imageVisible = ref(false);
- const visible = ref(false);
- const globalLoading = ref(false);
- const all = ref(false);
- const propText = ref('');
- const bodyStyle = {
- display: 'flex',
- justifyContent: 'center',
- };
- const batchNos = ref([]);
- const clientNames = ref([]);
- const depositoryUsers = ref([]);
- const costCenterNames = ref([]);
- const organizationNames = ref([]);
- const statusOptions = ref([
- {
- value: '',
- label: '',
- },
- {
- value: 'To_Be_Printed',
- label: '待打印',
- },
- {
- value: 'Printing',
- label: '打印中',
- },
- {
- value: 'Printed',
- label: '已打印',
- },
- ]);
- const queryParams = reactive({
- batchNo: '',
- depositoryUser: '',
- labelPrintType: '',
- clientName: '',
- organizationName: '',
- costCenterName: '',
- });
- const pager = reactive({
- start: 0,
- length: 20,
- });
- const templateId = ref('');
- const allTemplate = ref([]);
- const templateData = ref(null);
- const lastBatchNo = ref('');
- const printTemplate = ref('');
- const templateNames = ref([]);
- const packageBatchNo = ref('');
- const lastPackageBatchNo = ref('');
- const packageName = ref('');
- const lastPackageName = ref('');
- const newPackageName = ref('');
- const hua = ref(null);
- const clientId = ref('');
- let getBase64;
- // 获取分页
- const getPageParams = (start, length) => {
- pager.start = (start - 1) * length;
- pager.length = length;
- searchPrintInfo();
- };
- // 批次号切换
- const batchNoChange = () => {
- queryParams.clientName = '';
- queryParams.depositoryUser = '';
- queryParams.costCenterName = '';
- queryParams.organizationName = '';
- queryParams.labelPrintType = '';
- commonSqlApi('20230613_192444', depositoryUsers); // 查询保管人
- commonSqlApi('20230613_193808', clientNames); // 查询公司
- commonSqlApi('20230613_194108', organizationNames); // 查询部门
- commonSqlApi('20230613_194557', costCenterNames); // 查询成本中心
- table.value.clear(); // 清空选择
- table.value.backFirstPage(); // 回到第一页
- };
- // 查询回到第一页
- const searchDatas = () => {
- table.value.backFirstPage();
- };
- // 查询信息
- const searchPrintInfo = () => {
- isLoading.value = true;
- clientId.value = JSON.parse(localStorage.getItem('#LoginInfo')).loginClientId;
- let params = { ...queryParams, ...pager, clientId: clientId.value };
- if (queryParams.batchNo !== '') {
- SqlApi.execute('20230613_140456', params).then(
- successData => {
- const { lines, errorMessage, errorCode } = successData;
- if (errorCode == 0) {
- total.value = successData.total;
- dataSource.value = lines;
- select.allData = lines;
- isLoading.value = false;
- } else {
- Notify.error('查询异常', errorMessage, true);
- }
- isLoading.value = false;
- },
- errorData => {
- Common.processException(errorData);
- isLoading.value = false;
- },
- );
- } else {
- isLoading.value = false;
- }
- };
- // 获取所选项的数据
- const selectColumn = selected => {
- select.selectedRows = selected.selectedRows;
- // console.log('onSelectChange', select.selectedRows);
- };
- // 展开打印框
- const showPrintInfo = () => {
- if (printTemplate.value !== '' && queryParams.batchNo !== '') {
- printVisible.value = true;
- const nameArr = [];
- const obj = JSON.parse(JSON.stringify(queryParams));
- delete obj.labelPrintType;
- for (let key in obj) {
- if (obj[key] !== '') nameArr.push(obj[key]);
- }
- packageName.value = nameArr.join('-');
- newPackageName.value = nameArr.join('-');
- packageBatchNo.value = dateConvert(new Date());
- } else {
- message.warning('请检查是否已选择导入批次或模板!');
- }
- };
- // 同上一次包装信息
- const lastTime = () => {
- if (lastPackageName.value == null && lastPackageBatchNo.value == null) {
- message.info('没有上次的包装信息');
- } else {
- packageName.value = lastPackageName.value;
- packageBatchNo.value = lastPackageBatchNo.value;
- }
- };
- // 生产新的包装信息
- const createNew = () => {
- packageBatchNo.value = dateConvert(new Date());
- packageName.value = newPackageName.value;
- };
- // 获取模板数据及 ID
- const getTemplateInfo = async () => {
- templateId.value = printTemplate.value.slice(
- 0,
- printTemplate.value.indexOf('-'),
- );
- allTemplate.value.forEach(item => {
- if (item.id == templateId.value) {
- templateData.value = item.contentX6;
- }
- });
- };
- // 打印预览
- const printPreview = async () => {
- if (printTemplate.value !== '' && queryParams.batchNo !== '') {
- imageVisible.value = true;
- printing.value = false;
- imageUrls.length = 0;
- let tempStr = JSON.stringify(templateData.value);
- const rows = JSON.parse(JSON.stringify(dataSource.value[0]));
- let base64 = await getBase64(rows, tempStr);
- imageUrls.push(base64);
- printing.value = true;
- } else {
- message.warning('请检查是否已选择导入批次或模板!');
- }
- };
- // 确认打印
- const printCard = async data => {
- if (data.length !== 0) {
- printVisible.value = false;
- globalLoading.value = true;
- printing.value = false;
- const formData = new FormData();
- formData.append('customerPrintTemplateId', templateId.value);
- formData.append('packageBatchNo', packageBatchNo.value);
- formData.append('packageName', packageName.value);
- let tempStr = JSON.stringify(templateData.value);
- const rows = JSON.parse(JSON.stringify(data));
- let amount = 0;
- for (let key in rows) {
- amount = amount + 1;
- let base64 = await getBase64(rows[key], tempStr, rows[key].assetNo);
- let file = base64toFile(base64, rows[key].id);
- formData.append('file', file);
- propText.value = `生成中,已生成${amount}张`;
- }
- multipleImageUpload(formData).then(
- successData => {
- if (successData.success === true) {
- message.success('资产生产图片成功');
- } else {
- message.error('资产生产图片失败');
- }
- globalLoading.value = false;
- printing.value = true;
- all.value = false;
- searchPrintInfo();
- clearSelect();
- },
- errorData => {
- Common.processException(errorData);
- globalLoading.value = false;
- printing.value = true;
- all.value = false;
- clearSelect();
- },
- );
- } else {
- all.value = false;
- printVisible.value = false;
- message.warning('请选择打印数据');
- }
- };
- // 全部生成图片
- const printAll = () => {
- all.value = true;
- pager.start = 0;
- pager.length = 10000;
- searchPrintInfo();
- showPrintInfo();
- };
- //下载全部图片(zip)
- const downloadImageZip = () => {
- if (queryParams.batchNo === '') {
- message.warning('请选择导入批次');
- } else {
- globalLoading.value = true;
- var xhr = new XMLHttpRequest();
- xhr.open('get', `api/LabelPrintResource/batchImageDownload?batchNo=${queryParams.batchNo}`, true);
- const token = localStorage.getItem('#token');
- xhr.setRequestHeader('token', token);
- xhr.setRequestHeader('Content-type', 'application/json');
- xhr.responseType = 'blob';
- xhr.onreadystatechange = function(){
- if(xhr.readyState === 4 && xhr.status === 200){
- let res = xhr.response;
- let blob = new Blob([res]);
- const blobUrl = URL.createObjectURL(blob);
- const link = document.createElement('a');
- link.download = '图片.zip';
- link.style.display = 'none';
- link.href = blobUrl;
- document.body.appendChild(link);
- link.click();
- URL.revokeObjectURL(blobUrl);
- document.body.removeChild(link);
- globalLoading.value = false;
- message.success('下载成功');
- }
- };
- xhr.send();
- }
- };
- // 打印后清除所有选择
- const clearSelect = () => {
- table.value.clear();
- };
- onMounted(() => {
- init();
- getBase64 = CreateJPEG(hua.value);
- clientId.value = JSON.parse(localStorage.getItem('#LoginInfo')).loginClientId;
- });
- // 封装通用sqlApi请求函数
- const commonSqlApi = (url, data) => {
- clientId.value = JSON.parse(localStorage.getItem('#LoginInfo')).loginClientId;
- let params = { clientId: clientId.value, batchNo: queryParams.batchNo };
- SqlApi.execute(url, params).then(
- successData => {
- if (successData.errorCode == 0) {
- if (successData.lines !== null) {
- data.value = successData.lines.map(item => {
- return (item = { label: item });
- });
- data.value.unshift({ label: '' });
- } else {
- data.value = [];
- }
- } else {
- Notify.error('查询信息异常', successData.errorMessage, true);
- }
- },
- errorData => {
- Common.processException(errorData);
- },
- );
- };
- // 初始化数据
- const init = () => {
- clientId.value = JSON.parse(localStorage.getItem('#LoginInfo')).loginClientId;
- let params = { clientId: clientId.value };
- getTemplate().then(res => {
- allTemplate.value = res.datas;
- });
- // 查询批次号
- SqlApi.execute('20230613_134214', params).then(
- successData => {
- if (successData.errorCode == 0) {
- if (successData.lines !== null) {
- let datas = successData.lines.map(item => {
- return (item = { label: item });
- });
- batchNos.value = datas.reverse();
- }
- } else {
- Notify.error('查询导入批次异常', successData.errorMessage, true);
- }
- },
- errorData => {
- Common.processException(errorData);
- },
- );
- // 查询模板
- SqlApi.execute('20230613_135541', params).then(
- successData => {
- if (successData.errorCode == 0) {
- if (successData.label !== null) {
- templateNames.value = successData.lines;
- }
- } else {
- Notify.error('查询模板信息异常', successData.errorMessage, true);
- }
- },
- errorData => {
- Common.processException(errorData);
- },
- );
- // 获取上一次的包装信息
- SqlApi.execute('20230613_194855', params).then(
- successData => {
- if (successData.errorCode == 0) {
- const { packageName, packageBatchNo } = successData.lines[0];
- lastPackageName.value = packageName;
- lastPackageBatchNo.value = packageBatchNo;
- } else {
- Notify.error('获取包装信息异常', successData.errorMessage, true);
- }
- },
- errorData => {
- Common.processException(errorData);
- },
- );
- };
- </script>
- <style scoped>
- .commonStyle {
- margin-right: 16px;
- width: 160px;
- }
- .search,
- .operationBtn {
- margin-top: 8px;
- }
- .operationBtn {
- display: flex;
- justify-content: space-between;
- }
- #displayName:disabled {
- background: white;
- color: black;
- }
- .full-modal .ant-modal {
- max-width: 100%;
- top: 0;
- padding-bottom: 0;
- margin: 0;
- }
- .full-modal .ant-modal-content {
- display: flex;
- flex-direction: column;
- height: calc(100vh);
- }
- .full-modal .ant-modal-body {
- flex: 1;
- }
- .ant-divider-horizontal{
- margin: 4px 0;
- }
- </style>
|