From d3e251f3e4d980384a5872487eb26c345ad463d4 Mon Sep 17 00:00:00 2001 From: GaoF Date: Mon, 4 Nov 2024 13:58:02 +0800 Subject: [PATCH] =?UTF-8?q?=E7=89=88=E6=9C=AC=E6=9B=B4=E6=96=B0v0.01?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/base/store/sysStoreApi.js | 2 +- src/api/inventory/inventoryInboundApi.js | 8 +- src/api/inventory/inventoryInvoiceApi.js | 4 + .../produceTask/produceReportApi.js | 9 + .../Selector/clientSelectorPlus.vue | 175 +++++++++ .../basicData/supplier/detail/index.vue | 20 +- .../basicData/supplier/index.vue | 6 +- .../inventory/inbound/columns/tableColumn.js | 2 +- .../inventory/inbound/detail/detail.vue | 149 +++++++ .../inbound/formFields/detailFields.js | 69 ++++ .../inbound/formFields/searchFields.js | 13 +- .../inventory/inbound/index.vue | 36 +- .../inventory/invoice/detail/index.vue | 141 ++++--- .../invoice/formFields/detailFields.js | 6 +- .../template/detail/components/preview.vue | 72 ++++ .../template/detail/css/iconfont.css | 342 ++++++++++++++++ .../template/detail/css/iconfont.ttf | Bin 0 -> 20356 bytes .../template/detail/css/iconfont.woff | Bin 0 -> 12132 bytes .../template/detail/css/iconfont.woff2 | Bin 0 -> 10164 bytes .../template/detail/css/style.css | 174 +++++++++ .../template/detail/hooks/use-paper.js | 108 ++++++ .../template/detail/hooks/use-zoom.js | 49 +++ .../template/detail/js/printData.js | 53 +++ .../template/detail/js/provider1.js | 127 ++++++ .../template/detail/js/provider2.js | 90 +++++ .../template/detail/js/template.js | 365 ++++++++++++++++++ .../template/detail/utils/template-helper.js | 21 + .../report/columns/detailColumns.js | 4 +- .../productionCenter/report/detail/index.vue | 33 +- 29 files changed, 1938 insertions(+), 140 deletions(-) create mode 100644 src/components/Selector/clientSelectorPlus.vue create mode 100644 src/views/productionBusiness/inventory/inbound/detail/detail.vue create mode 100644 src/views/productionBusiness/inventory/inbound/formFields/detailFields.js create mode 100644 src/views/productionBusiness/labelPrinting/template/detail/components/preview.vue create mode 100644 src/views/productionBusiness/labelPrinting/template/detail/css/iconfont.css create mode 100644 src/views/productionBusiness/labelPrinting/template/detail/css/iconfont.ttf create mode 100644 src/views/productionBusiness/labelPrinting/template/detail/css/iconfont.woff create mode 100644 src/views/productionBusiness/labelPrinting/template/detail/css/iconfont.woff2 create mode 100644 src/views/productionBusiness/labelPrinting/template/detail/css/style.css create mode 100644 src/views/productionBusiness/labelPrinting/template/detail/hooks/use-paper.js create mode 100644 src/views/productionBusiness/labelPrinting/template/detail/hooks/use-zoom.js create mode 100644 src/views/productionBusiness/labelPrinting/template/detail/js/printData.js create mode 100644 src/views/productionBusiness/labelPrinting/template/detail/js/provider1.js create mode 100644 src/views/productionBusiness/labelPrinting/template/detail/js/provider2.js create mode 100644 src/views/productionBusiness/labelPrinting/template/detail/js/template.js create mode 100644 src/views/productionBusiness/labelPrinting/template/detail/utils/template-helper.js diff --git a/src/api/base/store/sysStoreApi.js b/src/api/base/store/sysStoreApi.js index cd38569..af2c6c4 100644 --- a/src/api/base/store/sysStoreApi.js +++ b/src/api/base/store/sysStoreApi.js @@ -28,5 +28,5 @@ export default { // 获取仓库树结构 sysStoreTree(data) { return request('tree', data, 'get') - }, + } } diff --git a/src/api/inventory/inventoryInboundApi.js b/src/api/inventory/inventoryInboundApi.js index b9b0a73..0a842f0 100644 --- a/src/api/inventory/inventoryInboundApi.js +++ b/src/api/inventory/inventoryInboundApi.js @@ -1,7 +1,7 @@ import { baseRequest } from '@/utils/request' const request = (url, ...arg) => baseRequest(`/inventory/inbound/` + url, ...arg) - +const produceRequest = (url, ...arg) => baseRequest(`/produce/inbound/` + url, ...arg) /** * 入库单Api接口管理器 * @@ -15,15 +15,15 @@ export default { }, // 获取入库单 明细列表 inventoryInboundDetailList(data) { - return request('/detail/list', data, 'get') + return request('detail/list', data, 'get') }, // 获取入库单 条码列表 inventoryInboundBarcodeTree(data) { - return request('/barcode/tree/list', data, 'get') + return produceRequest('barcode/tree/list', data, 'get') }, // 获取入库单 条码(子级)列表 inventoryInboundBarcodeTreeChildren(data) { - return request('/barcode/tree/childrenList', data, 'get') + return request('barcode/tree/childrenList', data, 'get') }, // 获取入库单详情 inventoryInboundDetail(data) { diff --git a/src/api/inventory/inventoryInvoiceApi.js b/src/api/inventory/inventoryInvoiceApi.js index 68c8dd3..19dc6a4 100644 --- a/src/api/inventory/inventoryInvoiceApi.js +++ b/src/api/inventory/inventoryInvoiceApi.js @@ -29,4 +29,8 @@ export default { inventoryInvoiceAuditPass(data, edit = false) { return request('audit/pass', data) }, + // 获取发货通知单明细列表 + inventoryInvoiceDetailList(data) { + return request('detail/list', data, 'get') + }, } diff --git a/src/api/production/produceTask/produceReportApi.js b/src/api/production/produceTask/produceReportApi.js index 66b8687..ff1b1ea 100644 --- a/src/api/production/produceTask/produceReportApi.js +++ b/src/api/production/produceTask/produceReportApi.js @@ -24,5 +24,14 @@ export default { // 获取生产汇报单详情 produceReportDetail(data) { return request('detail', data, 'get') + }, + // 产品包装条码 树 + produceReportTreeList(data) { + return request('barcode/tree/list', data, 'get') + }, + + // 产品包装条码 树 子级 + produceReportTreeChildrenList(data) { + return request('barcode/tree/childrenList', data, 'get') } } diff --git a/src/components/Selector/clientSelectorPlus.vue b/src/components/Selector/clientSelectorPlus.vue new file mode 100644 index 0000000..f916346 --- /dev/null +++ b/src/components/Selector/clientSelectorPlus.vue @@ -0,0 +1,175 @@ + + + + + diff --git a/src/views/productionBusiness/basicData/supplier/detail/index.vue b/src/views/productionBusiness/basicData/supplier/detail/index.vue index 0e55398..8df6880 100644 --- a/src/views/productionBusiness/basicData/supplier/detail/index.vue +++ b/src/views/productionBusiness/basicData/supplier/detail/index.vue @@ -59,9 +59,7 @@ ref="formRef2" /> - - - + @@ -108,13 +106,10 @@ const formRef1 = ref(null) const formRef2 = ref(null) - const { formData, formRefs, onSubmit, handleBack, fetchData } = useFormHandler( - [...formItems, ...baseFormItems], - { - submitForm: supplierApi.supplierSubmitForm, - getDetail: supplierApi.supplierDetail - } - ) + const { formData, formRefs, onSubmit, handleBack, fetchData } = useFormHandler([...formItems, ...baseFormItems], { + submitForm: supplierApi.supplierSubmitForm, + getDetail: supplierApi.supplierDetail + }) const onSubmitForm = () => { onSubmit({ @@ -145,7 +140,8 @@ }) // 供应商分类 - supplierCategoryApi.supplierCategoryTree({ + supplierCategoryApi + .supplierCategoryTree({ enabledState: 'ENABLE' }) .then((res) => { @@ -155,12 +151,10 @@ } }) }) - }) let activeKey = ref('1') - // 省、市、县 数据回显 const cityOptionsObj = cityOptions.reduce((acc, item) => ((acc[item.value] = item.children), acc), {}) const getCityOptions = () => { diff --git a/src/views/productionBusiness/basicData/supplier/index.vue b/src/views/productionBusiness/basicData/supplier/index.vue index 867390a..f99a490 100644 --- a/src/views/productionBusiness/basicData/supplier/index.vue +++ b/src/views/productionBusiness/basicData/supplier/index.vue @@ -22,7 +22,7 @@ @delTree="delTree" @treeRefresh="treeRefresh" :toolConfig="{ - plus: hasPerm('supplierCategoryAdd'), + plus: true, edit: hasPerm('supplierCategoryEdit'), delete: hasPerm('supplierCategoryDelete'), refresh: true @@ -52,13 +52,11 @@ type: 'ADD' }) " - v-if="hasPerm('supplierAdd')" > 新增 @@ -117,7 +115,7 @@ - + diff --git a/src/views/productionBusiness/inventory/inbound/columns/tableColumn.js b/src/views/productionBusiness/inventory/inbound/columns/tableColumn.js index ea874c3..17e91b5 100644 --- a/src/views/productionBusiness/inventory/inbound/columns/tableColumn.js +++ b/src/views/productionBusiness/inventory/inbound/columns/tableColumn.js @@ -65,7 +65,7 @@ export const tableColumns = [ width: 200, ellipsis: true }, - + { title: '创建人', dataIndex: 'createUserName', diff --git a/src/views/productionBusiness/inventory/inbound/detail/detail.vue b/src/views/productionBusiness/inventory/inbound/detail/detail.vue new file mode 100644 index 0000000..3554a50 --- /dev/null +++ b/src/views/productionBusiness/inventory/inbound/detail/detail.vue @@ -0,0 +1,149 @@ + + + diff --git a/src/views/productionBusiness/inventory/inbound/formFields/detailFields.js b/src/views/productionBusiness/inventory/inbound/formFields/detailFields.js new file mode 100644 index 0000000..7022ad2 --- /dev/null +++ b/src/views/productionBusiness/inventory/inbound/formFields/detailFields.js @@ -0,0 +1,69 @@ +import { required } from '@/utils/formRules' +import tool from '@/utils/tool' + +export const unitFormItems = reactive([ + { + label: '单号:', + name: 'billNumber', + type: 'a-input-number', + span: 6, + attrs: { + placeholder: '请输入编码', + allowClear: true + } + }, + { + label: '业务日期:', + name: 'businessDate', + type: 'a-date-picker', + span: 6, + attrs: { + placeholder: '请输入业务日期', + allowClear: true, + valueFormat: 'YYYY-MM-DD HH:mm:ss' + } + }, + { + label: '状态:', + name: 'state', + type: 'a-select', + span: 6, + attrs: { + placeholder: '请选择可用状态', + options: tool.dictList('PRODUCE_REPORT_STATE') + }, + defaultValue: '' + }, + { + label: '类型:', + name: 'produceType', + type: 'a-select', + span: 6, + attrs: { + options: tool.dictList('PRODUCE_TYPE') + } + }, + { + label: '生产线:', + name: 'productionLineName', + type: 'a-select', + span: 6, + attrs: { + placeholder: '请选择是否基本单位', + options: tool.dictList('YES_NO') + }, + defaultValue: 'NO' + }, + { + label: '备注:', + name: 'remarks', + type: 'a-textarea', + span: 24, + attrs: { + placeholder: '请输入备注', + allowClear: true + } + } +]) + +export const formRules = {} diff --git a/src/views/productionBusiness/inventory/inbound/formFields/searchFields.js b/src/views/productionBusiness/inventory/inbound/formFields/searchFields.js index 2d4ce9d..e72142b 100644 --- a/src/views/productionBusiness/inventory/inbound/formFields/searchFields.js +++ b/src/views/productionBusiness/inventory/inbound/formFields/searchFields.js @@ -1,12 +1,13 @@ import tool from '@/utils/tool' export const searchFields = [ + { name: 'billNumber', label: '单号', component: 'a-input', props: { placeholder: '请输入单号' } }, { name: 'billNumber', label: '单号', component: 'a-input', props: { placeholder: '请输入单号' } }, { label: '类型:', name: 'type', - type: 'a-select', - attrs: { + component: 'a-select', + props: { placeholder: '请选择类型', allowClear: true, options: tool.dictList('INBOUND_TYPE') @@ -15,9 +16,8 @@ export const searchFields = [ { label: '仓库:', name: 'storeId', - type: 'a-tree-select', - span: 6, - attrs: { + component: 'a-tree-select', + props: { placeholder: '请选择仓库', treeData: [], fieldNames: { @@ -25,8 +25,7 @@ export const searchFields = [ label: 'name', value: 'id' } - }, - defaultValue: '' + } }, { name: 'customerName', label: '供货单位名称', component: 'a-input', props: { placeholder: '请输入供货单位名称' } }, { name: 'customerNumber', label: '供货单位编码', component: 'a-input', props: { placeholder: '请输入供货单位编码' } } diff --git a/src/views/productionBusiness/inventory/inbound/index.vue b/src/views/productionBusiness/inventory/inbound/index.vue index 1ac45af..18fdf17 100644 --- a/src/views/productionBusiness/inventory/inbound/index.vue +++ b/src/views/productionBusiness/inventory/inbound/index.vue @@ -1,14 +1,13 @@ + + + diff --git a/src/views/productionBusiness/labelPrinting/template/detail/css/iconfont.css b/src/views/productionBusiness/labelPrinting/template/detail/css/iconfont.css new file mode 100644 index 0000000..430bba2 --- /dev/null +++ b/src/views/productionBusiness/labelPrinting/template/detail/css/iconfont.css @@ -0,0 +1,342 @@ +@font-face { + font-family: "iconfont"; /* Project id 3559670 */ + src: url("iconfont.woff2?t=1667531544868") format("woff2"), + url("iconfont.woff?t=1667531544868") format("woff"), + url("iconfont.ttf?t=1667531544868") format("truetype"); +} + +.iconfont { + font-family: "iconfont" !important; + font-size: 16px; + font-style: normal; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.sv-edit-data:before { + content: "\e655"; +} + +.sv-shimmer:before { + content: "\e6d6"; +} + +.sv-origin:before { + content: "\e6ac"; +} + +.sv-zIndex:before { + content: "\e603"; +} + +.sv-structure:before { + content: "\ec6f"; +} + +.sv-list:before { + content: "\e742"; +} + +.sv-grid:before { + content: "\e849"; +} + +.sv-flow:before { + content: "\e611"; +} + +.sv-switch:before { + content: "\e6f6"; +} + +.sv-theme:before { + content: "\e644"; +} + +.sv-element:before { + content: "\e615"; +} + +.sv-pdf:before { + content: "\e67a"; +} + +.sv-browser:before { + content: "\e726"; +} + +.sv-font-big:before { + content: "\eb04"; +} + +.sv-font-small:before { + content: "\eb05"; +} + +.sv-font-bold:before { + content: "\ec83"; +} + +.sv-font-tiny:before { + content: "\e6c1"; +} + +.sv-options:before { + content: "\e607"; +} + +.sv-close:before { + content: "\e646"; +} + +.sv-clone:before { + content: "\ec7a"; +} + +.sv-cut:before { + content: "\e643"; +} + +.sv-preview:before { + content: "\e61c"; +} + +.sv-zoom-in:before { + content: "\e60f"; +} + +.sv-zoom-out:before { + content: "\e610"; +} + +.sv-edit:before { + content: "\e6b9"; +} + +.sv-paste:before { + content: "\e6c0"; +} + +.sv-copy:before { + content: "\e6c2"; +} + +.sv-unlock:before { + content: "\e6e7"; +} + +.sv-lock:before { + content: "\e6e8"; +} + +.sv-zIndex-plus:before { + content: "\e715"; +} + +.sv-zIndex-minus:before { + content: "\e716"; +} + +.sv-zIndex-top:before { + content: "\e71f"; +} + +.sv-sigh:before { + content: "\e724"; +} + +.sv-ask:before { + content: "\e725"; +} + +.sv-dev-code:before { + content: "\e733"; +} + +.sv-bug:before { + content: "\e73f"; +} + +.sv-zIndex-bottom:before { + content: "\e71d"; +} + +.sv-new:before { + content: "\e64d"; +} + +.sv-clear:before { + content: "\e62d"; +} + +.sv-base:before { + content: "\e7d0"; +} + +.sv-export:before { + content: "\eabf"; +} + +.sv-import:before { + content: "\eac0"; +} + +.sv-add:before { + content: "\eaf3"; +} + +.sv-printer:before { + content: "\eabe"; +} + +.sv-save:before { + content: "\eabd"; +} + +.sv-more:before { + content: "\e625"; +} + +.sv-menu:before { + content: "\e628"; +} + +.sv-nav-right:before { + content: "\e629"; +} + +.sv-nav-up:before { + content: "\e62a"; +} + +.sv-nav-left:before { + content: "\e62b"; +} + +.sv-nav-down:before { + content: "\e62c"; +} + +.sv-setting:before { + content: "\e62e"; +} + +.sv-delete:before { + content: "\e630"; +} + +.sv-undo:before { + content: "\e631"; +} + +.sv-redo:before { + content: "\e632"; +} + +.sv-refresh:before { + content: "\e634"; +} + +.sv-history:before { + content: "\e635"; +} + +.sv-html:before { + content: "\e633"; +} + +.sv-longText:before { + content: "\e64c"; +} + +.sv-table:before { + content: "\ec15"; +} + +.sv-qrcode:before { + content: "\e642"; +} + +.sv-image:before { + content: "\e8ba"; +} + +.sv-barcode:before { + content: "\eb64"; +} + +.sv-text:before { + content: "\e60b"; +} + +.sv-vline:before { + content: "\e63a"; +} + +.sv-oval:before { + content: "\eb99"; +} + +.sv-rect:before { + content: "\e620"; +} + +.sv-hline:before { + content: "\e60a"; +} + +.sv-print-c:before { + content: "\e602"; +} + +.sv-print:before { + content: "\e601"; +} + +.sv-c:before { + content: "\e600"; +} + +.sv-vertical:before { + content: "\e706"; +} + +.sv-distributeHor:before { + content: "\e707"; +} + +.sv-right:before { + content: "\e708"; +} + +.sv-left:before { + content: "\e709"; +} + +.sv-distributeVer:before { + content: "\e70f"; +} + +.sv-bottom:before { + content: "\e710"; +} + +.sv-top:before { + content: "\e711"; +} + +.sv-horizontal:before { + content: "\e712"; +} + +.sv-rotate:before { + content: "\e66f"; +} + +.sv-butongbu:before { + content: "\e636"; +} + +.sv-synchronization:before { + content: "\e676"; +} diff --git a/src/views/productionBusiness/labelPrinting/template/detail/css/iconfont.ttf b/src/views/productionBusiness/labelPrinting/template/detail/css/iconfont.ttf new file mode 100644 index 0000000000000000000000000000000000000000..9638e3d8c9025cb32cb4684361521d5e79d443cd GIT binary patch literal 20356 zcmeHvd0<=BneRF0>fS3|?Yk^nn`KE}Wm~c&CvhCd2?=B;A%QGS;@D2?#9M49At?|; z(v|_Hl(vMfyp%2!=xaNj(n1+Zn$ByPzL_>tmbSnEZK=#ax=d-y3`95YckY!PC#3Cc z@2~ePopaCfo$oC7`@Zv??|d?$gb*{CA_8eyzF}i`^!CINLTEcmuUWgHIn&`?y8-z- zkl)!m+%x8nJ?AGxK)u|#XXx;5bYyWrX|y3gj1sr;+{} zgqnfj$?I1k0eoi>Rt=5z_B{F9AFm)pxgLd|AMUw+jE;~OP!~WxI?^-T@A!1bmkGJ* z93gDa*yzM$oY;B^S=EOzL(|OblIwFh;686a)bo= zAhbW;er}o$4esdye!V3{9j~P*p+qW|8VrPffQXpuU$DPN*`4~6zD_a}Eg2C7lwRg< z-R>*;$f+VZdrVsoBD_GR0Cw?eFy7(+5C1)DfThHH0@o1Is4uIqNndZa4yAnM8}S6i zpxnS}kl#kS(59*=6y>71=q!4RRmEsAQA`)}#regh#bw3S#f`<$;=$sP;ungK7Ec$S zExua(!?bDIHSL=YO-H7a)7j}o)7{f&UcKtoZ@hNuwKrZDU+;VUqi4NmN6#KPd+a=D zvq*qlDcWbT*A`oVy&Kq9U4;DuYS?Qo!u~k08!p9;S^VGmqgb6?`1Fy1 z+0P_sc#0gy=e-wwZX>smJMj4+`3U)#_PLkL{d|UehJ0?$hmhrD8My+a?;=a_4*Vnl zt}_!KSwhmJ89dxdG9*hbcAo)pM@(oW`)tI1-rka+P9-DCkt;+?J|>xl(#wE}$Z zB$Z&uDiR_lawWNntRO4NDzciaA!|vPL`Z@}NsLqzD~XdDaCj||AuF0d6?LSZG!PrH zlSQPPbbuy2!~tgIQsDpfKMP*~;nngotmpKs2fRa41XuBZw@HeS$UNY^k|MZ}2QJ)- zvL5iRNfF$~1Kv6*n)QJ9Pl|RufD%X%E6)RHf)pX^dEipI=+y)0gcPgv0E!{Ss2)H& zq?phHsE8D6^#FPz#X3EJvPiLB51=tpY|sO!jT9j@cmUmzB6dt3K!K#laUp;fNs+fl z09BGAZ;t@_Bt_mH0hCILygdSFmK1p#1W+$2@-_&dV^ZX85J1tS$l(w`+oag72T(aF z^7$Zu-bsVZqW;;0_LE2MZ(58xV7gjT@= z_=gm~pa(8Ji;wC7JVlD9^Z@Q6#c%0>@4v;| z=mDHbrX@XqN6ECT2XHHyHtGRCRP8sp#r{7t4^dH|=B zX{;9y;CV9b(*wAlOk*58Kn{>;o<|^2JZtm-*+8aw9Rj2TnZ`Qu0C_>C@jiKgvuBP{}SbMkdJ3kl7iZKTN$I8L>x_ZM1

}&e3rJleKwkGrg5N2wWevo-3e4P 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 N`gZl)lN=rb{tsYEQ#}9x literal 0 HcmV?d00001 diff --git a/src/views/productionBusiness/labelPrinting/template/detail/css/iconfont.woff2 b/src/views/productionBusiness/labelPrinting/template/detail/css/iconfont.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..53f7d774ae4face1d555ec7b57642d4af7ed6c97 GIT binary patch literal 10164 zcmV;lCrj9OPew8T0RR9104KBn3jhEB08fMf04HJq0RR9100000000000000000000 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 literal 0 HcmV?d00001 diff --git a/src/views/productionBusiness/labelPrinting/template/detail/css/style.css b/src/views/productionBusiness/labelPrinting/template/detail/css/style.css new file mode 100644 index 0000000..5829f91 --- /dev/null +++ b/src/views/productionBusiness/labelPrinting/template/detail/css/style.css @@ -0,0 +1,174 @@ +/* 字体样式 */ +/*@import "./iconfont.css";*/ + +/* 定义全局样式 */ +/* 在 main.js 入库文件引入 */ +body { + margin: 0; +} + +/* scrollbar */ +::-webkit-scrollbar { + height: 4px; + width: 4px; +} +::-webkit-scrollbar-corner { + height: 4px; + width: 4px; +} +::-webkit-scrollbar-thumb { + background: purple; + border-radius: 2px; + background-image: -webkit-linear-gradient( + 45deg, + rgba(255, 255, 255, 0.2) 25%, + transparent 25%, + transparent 50%, + rgba(255, 255, 255, 0.2) 50%, + rgba(255, 255, 255, 0.2) 75%, + transparent 75%, + transparent + ); +} +::-webkit-scrollbar-thumb:hover { + background: purple; +} + +/* flex */ +.flex-row { + display: flex; +} +.flex-col { + display: flex; + flex-direction: column; +} +.flex-wrap { + flex-wrap: wrap; +} +.align-center { + align-items: center; +} +.justify-center { + justify-content: center; +} + +.flex-1 { + flex: 1; +} +.flex-2 { + flex: 2; +} +.flex-3 { + flex: 3; +} +.flex-4 { + flex: 4; +} +.flex-5 { + flex: 5; +} + +.ml-10 { + margin-left: 10px; +} +.mr-10 { + margin-right: 10px; +} +.mt-10 { + margin-top: 10px; +} +.mb-10 { + margin-bottom: 10px; +} + +/* button 样式 为了好看点 */ +button { + padding: 10px; + min-width: 40px; + color: white; + opacity: 0.9; + cursor: pointer; + border-width: 0; + border: 1px solid #d9d9d9; +} +button:hover { + opacity: 1; +} +button i { + font-size: 16px !important; +} +.circle, +.circle-4 { + border-radius: 4px !important; +} +.circle-10 { + border-radius: 10px !important; +} +/* 按钮颜色 */ +.primary { + background: purple; +} +.info { + color: #000; + background: none; +} +.info:hover { + color: purple; + border-color: purple; +} +.secondary { + background: #1976d2; +} +.warning { + background: #d32f2f; +} + +/* modal */ +.modal { + padding: 0; + margin: 0; +} +.modal .mask { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1000; + height: 100%; + background-color: #00000073; +} +.modal .wrap { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1000; + overflow: auto; + background-color: #00000073; + outline: 0; +} +.modal .wrap .box { + position: relative; + margin: 10% auto; + width: 40%; + background: #fff; + border-radius: 4px; + z-index: 1001; + box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + transition: all 0.3s ease; +} +.modal-box__header { + padding: 10px 14px; + border-bottom: 1px solid #e9e9e9; +} +.modal-box__footer { + text-align: end; +} +.modal-box__footer button { + min-width: 100px; +} +.modal-box__footer button:not(:last-child) { + margin-right: 10px; +} diff --git a/src/views/productionBusiness/labelPrinting/template/detail/hooks/use-paper.js b/src/views/productionBusiness/labelPrinting/template/detail/hooks/use-paper.js new file mode 100644 index 0000000..b33b98e --- /dev/null +++ b/src/views/productionBusiness/labelPrinting/template/detail/hooks/use-paper.js @@ -0,0 +1,108 @@ +/* + * @Description: + * @Author: CcSimple + * @Github: https://github.com/CcSimple + * @Date: 2023-02-09 13:32:39 + * @LastEditors: CcSimple + * @LastEditTime: 2023-02-09 23:38:03 + */ +import { reactive, computed, toRefs } from "vue"; +import { getHiprintPrintTemplate } from "../utils/template-helper"; + +/** + * vue3 组合式函数 + * 把一些逻辑抽离出来,方便复用 + * 返回 使用方 可用的方法和数据 + */ +export function usePaper(key) { + // 数据 + const state = reactive({ + curPaper: { + type: "A4", + width: 210, + height: 296.6, + }, + paperTypes: { + A3: { + width: 420, + height: 296.6, + }, + A4: { + width: 210, + height: 296.6, + }, + A5: { + width: 210, + height: 147.6, + }, + B3: { + width: 500, + height: 352.6, + }, + B4: { + width: 250, + height: 352.6, + }, + B5: { + width: 250, + height: 175.6, + }, + }, + // 自定义纸张 + paperPopVisible: false, + paperWidth: "220", + paperHeight: "80", + }); + // 计算属性 + const curPaperType = computed(() => { + let type = "other"; + let types = state.paperTypes; + for (const key in types) { + let item = types[key]; + let { width, height } = state.curPaper; + if (item.width === width && item.height === height) { + type = key; + } + } + return type; + }); + const tp = () => { + return getHiprintPrintTemplate(key); + }; + // 方法 + const showPaperPop = () => { + state.paperPopVisible = true; + }; + const hidePaperPop = () => { + state.paperPopVisible = false; + }; + const setPaper = (type, value) => { + try { + if (Object.keys(state.paperTypes).includes(type)) { + state.curPaper = { type: type, width: value.width, height: value.height }; + tp().setPaper(value.width, value.height); + } else { + state.curPaper = { type: "other", width: value.width, height: value.height }; + tp().setPaper(value.width, value.height); + } + } catch (error) { + alert(`操作失败: ${error}`); + } + }; + const setPaperOther = () => { + let value = {}; + value.width = state.paperWidth; + value.height = state.paperHeight; + state.paperPopVisible = false; + setPaper("other", value); + }; + // 暴露给使用方 + return { + ...toRefs(state), + curPaperType, + showPaperPop, + hidePaperPop, + setPaper, + setPaperOther, + }; +} diff --git a/src/views/productionBusiness/labelPrinting/template/detail/hooks/use-zoom.js b/src/views/productionBusiness/labelPrinting/template/detail/hooks/use-zoom.js new file mode 100644 index 0000000..d17c545 --- /dev/null +++ b/src/views/productionBusiness/labelPrinting/template/detail/hooks/use-zoom.js @@ -0,0 +1,49 @@ +/* + * @Description: + * @Author: CcSimple + * @Github: https://github.com/CcSimple + * @Date: 2023-02-09 13:32:39 + * @LastEditors: CcSimple + * @LastEditTime: 2023-02-10 16:00:54 + */ +import { reactive, toRefs } from "vue"; +import { getHiprintPrintTemplate } from "../utils/template-helper"; + +/** + * vue3 组合式函数 + * 把一些逻辑抽离出来,方便复用 + * 返回 使用方 可用的方法和数据 + */ +export function useZoom(key) { + // 数据 + const state = reactive({ + scaleValue: 1, + scaleMax: 5, + scaleMin: 0.5, + }); + // 获取 template + const tp = () => { + return getHiprintPrintTemplate(key); + }; + // 方法 + const changeScale = (big) => { + let scaleValue = state.scaleValue; + if (big) { + scaleValue += 0.1; + if (scaleValue > state.scaleMax) scaleValue = 5; + } else { + scaleValue -= 0.1; + if (scaleValue < state.scaleMin) scaleValue = 0.5; + } + if (tp()) { + // scaleValue: 放大缩小值, false: 不保存(不传也一样), 如果传 true, 打印时也会放大 + tp().zoom(scaleValue); + state.scaleValue = scaleValue; + } + }; + // 暴露给使用方 + return { + ...toRefs(state), + changeScale, + }; +} \ No newline at end of file diff --git a/src/views/productionBusiness/labelPrinting/template/detail/js/printData.js b/src/views/productionBusiness/labelPrinting/template/detail/js/printData.js new file mode 100644 index 0000000..fa67008 --- /dev/null +++ b/src/views/productionBusiness/labelPrinting/template/detail/js/printData.js @@ -0,0 +1,53 @@ +export default { + name: "黄磊", + logoTest: "https://portrait.gitee.com/uploads/avatars/user/1800/5400665_CcSimple_1591166830.png!avatar60", + password: "12346", + qrCode: '12313', + longText: + "浙江在线3月29日讯最近,\n一篇小学五年级学生写的作文引起了钱报记者的关注这篇作文的题目叫做《脏话风波》,讲述的是小作者班级里发生的一种不文明现象——讲脏话的同学越来越多,有的人说话甚至句句“带把儿”。班主任为了遏制这种现象,煞费苦心想了很多办法,跟学生斗智斗勇……看到这篇作文,记者突然想到,自己读六年级的儿子有天突然冒出一句脏话。此前,他是从不说脏话的。问他怎么学会的,他也说不出个所以然来。于是,记者做了这个小学生脏话现象调查。经过了解才发现,小学生爱说脏话竟然较为普遍,一般三年级会冒出苗头。无论是学习成绩好的,还是平时不太起眼的,都会说脏话。而且,说脏话会“传染”,一旦冒头不制止,到了五六年级甚至可能在班里大爆发。以下为作文《脏话风波》浙江在线3月29日讯最近,一篇小学五年级学生写的作文引起了钱报记者的关注。这篇作文的题目叫做《脏话风波》,讲述的是小作者班级里发生的一种不文明现象——讲脏话的同学越来越多,有的人说话甚至句句“带把儿”。班主任为了遏制这种现象,煞费苦心想了很多办法,跟学生斗智斗勇……看到这篇作文,记者突然想到,自己读六年级的儿子有天突然冒出一句脏话。此前,他是从不说脏话的。问他怎么学会的,他也说不出个所以然来。于是,记者做了这个小学生脏话现象调查。经过了解才发现,小学生爱说脏话竟然较为普遍,一般三年级会冒出苗头。无论是学习成绩好的,还是平时不太起眼的,都会说脏话。而且,说脏话会“传染”,一旦冒头不制止,到了五六年级甚至可能在班里大爆发。以下为作文《脏话风波》浙江在线3月29日讯最近,一篇小学五年级学生写的作文引起了钱报记者的关注。这篇作文的题目叫做《脏话风波》,讲述的是小作者班级里发生的一种不文明现象——讲脏话的同学越来越多,有的人说话甚至句句“带把儿”。班主任为了遏制这种现象,煞费苦心想了很多办法,跟学生斗智斗勇……看到这篇作文,记者突然想到,自己读六年级的儿子有天突然冒出一句脏话。此前,他是从不说脏话的。问他怎么学会的,他也说不出个所以然来。于是,记者做了这个小学生脏话现象调查。经过了解才发现,小学生爱说脏话竟然较为普遍,一般三年级会冒出苗头。无论是学习成绩好的,还是平时不太起眼的,都会说脏话。而且,说脏话会“传染”,一旦冒头不制止,到了五六年级甚至可能在班里大爆发。以下为作文《脏话风波》浙江在线3月29日讯最近,一篇小学五年级学生写的作文引起了钱报记者的关注。这篇作文的题目叫做《脏话风波》,讲述的是小作者班级里发生的一种不文明现象——讲脏话的同学越来越多,有的人说话甚至句句“带把儿”。班主任为了遏制这种现象,煞费苦心想了很多办法,跟学生斗智斗勇……看到这篇作文,记者突然想到,自己读六年级的儿子有天突然冒出一句脏话。此前,他是从不说脏话的。问他怎么学会的,他也说不出个所以然来。于是,记者做了这个小学生脏话现象调查。经过了解才发现,小学生爱说脏话竟然较为普遍,一般三年级会冒出苗头。无论是学习成绩好的,还是平时不太起眼的,都会说脏话。而且,说脏话会“传染”,一旦冒头不制止,到了五六年级甚至可能在班里大爆发。以下为作文《脏话风波》浙江在线3月29日讯最近,一篇小学五年级学生写的作文引起了钱报记者的关注。这篇作文的题目叫做《脏话风波》,讲述的是小作者班级里发生的一种不文明现象——讲脏话的同学越来越多,有的人说话甚至句句“带把儿”。班主任为了遏制这种现象,煞费苦心想了很多办法,跟学生斗智斗勇……看到这篇作文,记者突然想到,自己读六年级的儿子有天突然冒出一句脏话。此前,他是从不说脏话的。问他怎么学会的,他也说不出个所以然来。于是,记者做了这个小学生脏话现象调查。经过了解才发现,小学生爱说脏话竟然较为普遍,一般三年级会冒出苗头。无论是学习成绩好的,还是平时不太起眼的,都会说脏话。而且,说脏话会“传染”,一旦冒头不制止,到了五六年级甚至可能在班里大爆发。以下为作文讲述的是小作者班级里发生的一种不文明现象——讲脏话的同学越来越多,有的人说话甚至句句“带把儿”。班主任为了遏制这种现象,煞费苦心想了很多办法,跟学生斗智斗勇……看到这篇作文,记者突然想到,自己读六年级的儿子有天突然冒出一句脏话。此前,他是从不说脏话的。问他怎么学会的,他也说不出个所以然来。于是,记者做了这个小学生脏话现象调查。经过了解才发现,小学生爱说脏话竟然较为普遍,一般三年级会冒出苗头。无论是学习成绩好的,还是平时不太起眼的,都会说脏话。而且,说脏话会“传染”,一旦冒头不制止,到了五六年级甚至可能在班里大爆发。以下为作文经过了解才发现,小学生爱说脏话竟然较为普遍,一般三年级会冒出苗头。无论是学习成绩好的,还是平时不太起眼的,都会说脏话。而且,说脏话会“传染”,一旦冒头不制止,到了五六年级甚至可能在班里大爆发。以下为作文讲述的是小作者班级里发生的一种不文明现象——讲脏话的同学越来越多,有的人说话甚至句句“带把儿”。班主任为了遏制这种现象,煞费苦心想了很多办法,跟学生斗智斗勇……看到这篇作文,记者突然想到,自己读六年级的儿子有天突然冒出一句脏话。此前,他是从不说脏话的。问他怎么学会的,他也说不出个所以然来。于是,记者做了这个小学生脏话现象调查。经过了解才发现,小学生爱说脏话竟然较为普遍,一般三年级会冒出苗头。无论是学习成绩好的,还是平时不太起眼的,都会说脏话。而且,说脏话会“传染”,一旦冒头不制止,到了五六年级甚至可能在班里大爆发。以下为作文", + table: [ + { id: "1", name: "王小可", gender: "男", count: "120", amount: "9089元" }, + { id: "2", name: "梦之遥", gender: "女", count: "20", amount: "89元" }, + { id: "3", name: "梦之遥", gender: "女", count: "720", amount: "29089元" }, + { id: "4", name: "黄小菊", gender: "女", count: "420", amount: "19089元" }, + { id: "5", name: "黄小菊", gender: "女", count: "420", amount: "19089元" }, + { id: "6", name: "黄小菊", gender: "女", count: "420", amount: "19089元" }, + { id: "7", name: "黄小菊", gender: "女", count: "420", amount: "19089元" }, + { id: "8", name: "黄小菊", gender: "女", count: "420", amount: "19089元" }, + { id: "9", name: "黄小菊", gender: "女", count: "420", amount: "19089元" }, + { id: "10", name: "黄小菊", gender: "女", count: "420", amount: "19089元" }, + { id: "11", name: "王小可", gender: "男", count: "120", amount: "9089元" }, + { id: "12", name: "梦之遥", gender: "女", count: "20", amount: "89元" }, + { id: "13", name: "梦之遥", gender: "女", count: "720", amount: "29089元" }, + { id: "14", name: "黄小菊", gender: "女", count: "420", amount: "19089元" }, + { id: "15", name: "黄小菊", gender: "女", count: "420", amount: "19089元" }, + { id: "16", name: "黄小菊", gender: "女", count: "420", amount: "19089元" }, + { id: "17", name: "黄小菊", gender: "女", count: "420", amount: "19089元" }, + { id: "18", name: "黄小菊", gender: "女", count: "420", amount: "19089元" }, + { id: "19", name: "黄小菊", gender: "女", count: "420", amount: "19089元" }, + { id: "20", name: "黄小菊", gender: "女", count: "420", amount: "19089元" }, + { id: "21", name: "王小可", gender: "男", count: "120", amount: "9089元" }, + { id: "22", name: "梦之遥", gender: "女", count: "20", amount: "89元" }, + { id: "23", name: "梦之遥", gender: "女", count: "720", amount: "29089元" }, + { id: "24", name: "黄小菊", gender: "女", count: "420", amount: "19089元" }, + { id: "25", name: "黄小菊", gender: "女", count: "420", amount: "19089元" }, + { id: "26", name: "黄小菊", gender: "女", count: "420", amount: "19089元" }, + { id: "27", name: "黄小菊", gender: "女", count: "420", amount: "19089元" }, + { id: "28", name: "黄小菊", gender: "女", count: "420", amount: "19089元" }, + { id: "29", name: "黄小菊", gender: "女", count: "420", amount: "19089元" }, + { id: "21", name: "王小可", gender: "男", count: "120", amount: "9089元" }, + { id: "22", name: "梦之遥", gender: "女", count: "20", amount: "89元" }, + { id: "23", name: "梦之遥", gender: "女", count: "720", amount: "29089元" }, + { id: "24", name: "黄小菊", gender: "女", count: "420", amount: "19089元" }, + { id: "25", name: "黄小菊", gender: "女", count: "420", amount: "19089元" }, + { id: "26", name: "黄小菊", gender: "女", count: "420", amount: "19089元" }, + { id: "27", name: "黄小菊", gender: "女", count: "420", amount: "19089元" }, + { id: "28", name: "黄小菊", gender: "女", count: "420", amount: "19089元" }, + { id: "29", name: "黄小菊", gender: "女", count: "420", amount: "19089元" }, + { id: "21", name: "王小可", gender: "男", count: "120", amount: "9089元" }, + { id: "22", name: "梦之遥", gender: "女", count: "20", amount: "89元" }, + { id: "23", name: "梦之遥", gender: "女", count: "720", amount: "29089元" }, + { id: "29", name: "黄小菊", gender: "女", count: "420", amount: "19089元" }, + { id: "30", name: "黄小菊", gender: "女", count: "420", amount: "19089元" }, + ], +}; diff --git a/src/views/productionBusiness/labelPrinting/template/detail/js/provider1.js b/src/views/productionBusiness/labelPrinting/template/detail/js/provider1.js new file mode 100644 index 0000000..a651145 --- /dev/null +++ b/src/views/productionBusiness/labelPrinting/template/detail/js/provider1.js @@ -0,0 +1,127 @@ +/* + * @Description: + * @Author: CcSimple + * @Github: https://github.com/CcSimple + * @Date: 2023-02-09 10:40:26 + * @LastEditors: CcSimple + * @LastEditTime: 2023-02-09 11:37:21 + */ +import { hiprint } from 'vue-plugin-hiprint' +export const provider1 = function (options) { + var addElementTypes = function (context) { + context.removePrintElementTypes('providerModule1') + context.addPrintElementTypes('providerModule1', [ + new hiprint.PrintElementTypeGroup('', [ + // options.config, + { + tid: 'providerModule1.text', + title: '文本', + data: '文本', + type: 'text', + options: { + testData: '文本', + height: 17, + fontSize: 16.5, + fontWeight: '700', + textAlign: 'center', + hideTitle: true + } + }, + { tid: 'providerModule1.image', title: '图片', data: '', type: 'image' }, + { + tid: 'providerModule1.barcode', + title: '条形码', + data: 'XS888888888', + type: 'text', + options: { + field: 'barcode', + testData: 'XS888888888', + height: 32, + fontSize: 12, + lineHeight: 18, + textAlign: 'left', + textType: 'barcode' + } + }, + { + tid: 'providerModule1.qrcode', + title: '二维码', + data: 'XS888888888', + type: 'text', + options: { + field: 'qrcode', + testData: 'XS888888888', + height: 32, + fontSize: 12, + lineHeight: 18, + textType: 'qrcode' + } + }, + // { + // tid: 'providerModule1.type', + // title: '单据类型', + // data: '单据类型', + // type: 'text', + // options: { + // testData: '单据类型', + // height: 16, + // fontSize: 15, + // fontWeight: '700', + // textAlign: 'center', + // hideTitle: true + // } + // }, + { + tid: 'providerModule1.date', + title: '日期', + data: '2020-01-01', + type: 'text', + options: { + field: 'date', + testData: '2020-01-01', + height: 16, + fontSize: 6.75, + fontWeight: '700', + textAlign: 'left', + textContentVerticalAlign: 'middle' + } + } + ]) + // new hiprint.PrintElementTypeGroup('客户', [ + // { + // tid: 'providerModule1.khname', + // title: '客户名称', + // data: '高级客户', + // type: 'text', + // options: { + // field: 'name', + // testData: '高级客户', + // height: 16, + // fontSize: 6.75, + // fontWeight: '700', + // textAlign: 'left', + // textContentVerticalAlign: 'middle' + // } + // }, + // { + // tid: 'providerModule1.tel', + // title: '客户电话', + // data: '18888888888', + // type: 'text', + // options: { + // field: 'tel', + // testData: '18888888888', + // height: 16, + // fontSize: 6.75, + // fontWeight: '700', + // textAlign: 'left', + // textContentVerticalAlign: 'middle' + // } + // } + // ]) + ]) + } + return { + addElementTypes: addElementTypes + } +} diff --git a/src/views/productionBusiness/labelPrinting/template/detail/js/provider2.js b/src/views/productionBusiness/labelPrinting/template/detail/js/provider2.js new file mode 100644 index 0000000..623d7f4 --- /dev/null +++ b/src/views/productionBusiness/labelPrinting/template/detail/js/provider2.js @@ -0,0 +1,90 @@ +/* + * @Description: + * @Author: CcSimple + * @Github: https://github.com/CcSimple + * @Date: 2023-02-09 10:40:26 + * @LastEditors: CcSimple + * @LastEditTime: 2023-02-09 10:50:02 + */ +import { hiprint } from 'vue-plugin-hiprint' +export const provider2 = function (options) { + console.log(options) + var addElementTypes = function (context) { + context.removePrintElementTypes('providerModule2') + context.addPrintElementTypes('providerModule2', [ + new hiprint.PrintElementTypeGroup('', [ + { + tid: 'providerModule2.table', + title: '表格', + type: 'table', + options: { + field: 'table', + fields: [ + { text: '名称', field: 'NAME' }, + { text: '数量', field: 'SL' }, + { text: '规格', field: 'GG' }, + { text: '条码', field: 'TM' }, + { text: '单价', field: 'DJ' }, + { text: '金额', field: 'JE' }, + { text: '备注', field: 'DETAIL' } + ] + }, + columns: [ + [ + { title: '名称', align: 'center', field: 'NAME', width: 100 }, + { title: '数量', align: 'center', field: 'SL', width: 100 }, + { title: '条码', align: 'center', field: 'TM', width: 100 }, + { title: '规格', align: 'center', field: 'GG', width: 100 }, + { title: '单价', align: 'center', field: 'DJ', width: 100 }, + { title: '金额', align: 'center', field: 'JE', width: 100 }, + { title: '备注', align: 'center', field: 'DETAIL', width: 100 } + ] + ], + footerFormatter: function (options, rows, data, currentPageGridRowsData) { + console.log(currentPageGridRowsData) + if (data && data['totalCap']) { + return `${'应收金额大写: ' + data['totalCap']}` + } + return '应收金额大写: ' + } + }, + { tid: 'providerModule2.customText', title: '文本', customText: '自定义文本', custom: true, type: 'text' }, + { + tid: 'providerModule2.longText', + title: '长文本', + type: 'longText', + options: { + field: 'test.longText', + width: 200, + testData: '长文本分页/不分页测试' + } + } + ]), + new hiprint.PrintElementTypeGroup('', [ + { + tid: 'providerModule2.hline', + title: '横线', + type: 'hline' + }, + { + tid: 'providerModule2.vline', + title: '竖线', + type: 'vline' + }, + { + tid: 'providerModule2.rect', + title: '矩形', + type: 'rect' + }, + { + tid: 'providerModule2.oval', + title: '椭圆', + type: 'oval' + } + ]) + ]) + } + return { + addElementTypes: addElementTypes + } +} diff --git a/src/views/productionBusiness/labelPrinting/template/detail/js/template.js b/src/views/productionBusiness/labelPrinting/template/detail/js/template.js new file mode 100644 index 0000000..d6ea178 --- /dev/null +++ b/src/views/productionBusiness/labelPrinting/template/detail/js/template.js @@ -0,0 +1,365 @@ +export default { + panels: [ + { + index: 0, + height: 297, + width: 210, + paperHeader: 49.5, + paperFooter: 780, + printElements: [ + { + options: { + left: 175.5, + top: 10.5, + height: 27, + width: 259, + title: 'HiPrint自定义模块打印插件', + fontSize: 19, + fontWeight: '600', + textAlign: 'center', + lineHeight: 26, + coordinateSync: true, + widthHeightSync: true, + draggable: false + }, + printElementType: { title: '自定义文本', type: 'text' } + }, + { + options: { left: 60, top: 27, height: 13, width: 52, title: '页眉线', textAlign: 'center' }, + printElementType: { title: '自定义文本', type: 'text' } + }, + { + options: { left: 25.5, top: 57, height: 705, width: 9, fixed: true, borderStyle: 'dotted' }, + printElementType: { type: 'vline' } + }, + { + options: { left: 60, top: 61.5, height: 48, width: 87, src: '', fit: 'contain' }, + printElementType: { title: '图片', type: 'image' } + }, + { + options: { + left: 153, + top: 64.5, + height: 39, + width: 276, + title: + '二维码以及条形码均采用svg格式打印。不同打印机打印不会造成失真。图片打印:不同DPI打印可能会导致失真,', + fontFamily: '微软雅黑', + textAlign: 'center', + lineHeight: 18 + }, + printElementType: { title: '自定义文本', type: 'text' } + }, + { + options: { + left: 457.5, + top: 79.5, + height: 13, + width: 120, + title: '姓名', + field: 'name', + testData: '古力娜扎', + color: '#f00808', + textDecoration: 'underline', + textAlign: 'center', + fields: [ + { text: 'id', field: 'id' }, + { text: '姓名', field: 'name' }, + { text: '性别', field: 'gender' }, + { text: '数量', field: 'count' } + ] + }, + printElementType: { title: '文本', type: 'text' } + }, + { + options: { + left: 483, + top: 124.5, + height: 43, + width: 51, + title: '123456789', + textType: 'qrcode' + }, + printElementType: { title: '自定义文本', type: 'text' } + }, + { + options: { + left: 285, + top: 130.5, + height: 34, + width: 175, + title: '123456789', + fontFamily: '微软雅黑', + textAlign: 'center', + textType: 'barcode' + }, + printElementType: { title: '自定义文本', type: 'text' } + }, + { + options: { + left: 60, + top: 132, + height: 19, + width: 213, + title: '所有打印元素都可已拖拽的方式来改变元素大小', + fontFamily: '微软雅黑', + textAlign: 'center', + lineHeight: 18 + }, + printElementType: { title: '自定义文本', type: 'text' } + }, + { + options: { + left: 153, + top: 189, + height: 13, + width: 238, + title: '单击元素,右侧可自定义元素属性', + textAlign: 'center', + fontFamily: '微软雅黑' + }, + printElementType: { title: '自定义文本', type: 'text' } + }, + { + options: { left: 60, top: 190.5, height: 13, width: 51, title: '横线', textAlign: 'center' }, + printElementType: { title: '自定义文本', type: 'text' } + }, + { + options: { + left: 415.5, + top: 190.5, + height: 13, + width: 164, + title: '可以配置各属性的默认值', + textAlign: 'center', + fontFamily: '微软雅黑' + }, + printElementType: { title: '自定义文本', type: 'text' } + }, + { + options: { left: 60, top: 214.5, height: 10, width: 475.5 }, + printElementType: { title: '横线', type: 'hline' } + }, + { + options: { + left: 235.5, + top: 220.5, + height: 32, + width: 342, + title: + '自定义表格:用户可左键选中表头,右键查看可操作项,操作类似Excel,双击表头单元格可进行编辑。内容:title#field', + fontFamily: '微软雅黑', + textAlign: 'center', + lineHeight: 15 + }, + printElementType: { title: '自定义文本', type: 'text' } + }, + { + options: { + left: 156, + top: 265.5, + height: 13, + width: 94, + title: '表头列大小可拖动', + fontFamily: '微软雅黑', + textAlign: 'center' + }, + printElementType: { title: '自定义文本', type: 'text' } + }, + { + options: { + left: 60, + top: 265.5, + height: 13, + width: 90, + title: '红色区域可拖动', + fontFamily: '微软雅黑', + textAlign: 'center' + }, + printElementType: { title: '自定义文本', type: 'text' } + }, + { + options: { + left: 60, + top: 285, + height: 56, + width: 511.5, + field: 'table', + tableFooterRepeat: '', + fields: [ + { text: 'id', field: 'id' }, + { text: '姓名', field: 'name' }, + { text: '性别', field: 'gender' }, + { text: '数量', field: 'count' } + ], + columns: [ + [ + { width: 85.25, colspan: 1, rowspan: 1, checked: true }, + { + title: '性别', + field: 'gender', + width: 85.25, + colspan: 1, + rowspan: 1, + checked: false + }, + { + title: '姓名', + field: 'name', + width: 85.25, + align: 'center', + colspan: 1, + rowspan: 1, + checked: true, + tableSummary: 'count' + }, + { + title: '数量', + field: 'count', + width: 85.25, + align: 'center', + colspan: 1, + rowspan: 1, + checked: true, + tableSummary: 'sum' + }, + { + width: 85.25, + colspan: 1, + rowspan: 1, + checked: true + }, + { width: 85.25, colspan: 1, rowspan: 1, checked: true } + ] + ] + }, + printElementType: { + title: '表格', + type: 'table' + } + }, + { + options: { + left: 21, + top: 346.5, + height: 61.5, + width: 15, + title: '装订线', + lineHeight: 18, + fixed: true, + contentPaddingTop: 3.75, + backgroundColor: '#ffffff' + }, + printElementType: { type: 'text' } + }, + { + options: { + left: 225, + top: 355, + height: 13, + width: 346.5, + title: '自定义模块:主要为开发人员设计,能够快速,简单,实现自己功能', + textAlign: 'center' + }, + printElementType: { title: '自定义文本', type: 'text' } + }, + { + options: { left: 60, top: 370.5, height: 18, width: 79, title: '配置项表格', textAlign: 'center' }, + printElementType: { title: '自定义文本', type: 'text' } + }, + { + options: { + left: 225, + top: 385.5, + height: 38, + width: 346.5, + title: '配置模块:主要为客户使用,开发人员可以配置属性,字段,标题等,客户直接使用,配置模块请参考实例2', + fontFamily: '微软雅黑', + lineHeight: 15, + textAlign: 'center', + color: '#d93838' + }, + printElementType: { title: '自定义文本', type: 'text' } + }, + { + options: { + left: 60, + top: 487.5, + height: 13, + width: 123, + title: '长文本会自动分页', + textAlign: 'center' + }, + printElementType: { title: '自定义文本', type: 'text' } + }, + { + options: { left: 60, top: 507, height: 40, width: 511.5, field: 'longText' }, + printElementType: { title: '长文', type: 'longText' } + }, + { + options: { left: 475.5, top: 565.5, height: 100, width: 100 }, + printElementType: { title: '矩形', type: 'rect' } + }, + { + options: { left: 174, top: 568.5, height: 13, width: 90, title: '竖线', textAlign: 'center' }, + printElementType: { title: '自定义文本', type: 'text' } + }, + { + options: { left: 60, top: 574.5, height: 100, width: 10 }, + printElementType: { title: '竖线', type: 'vline' } + }, + { + options: { left: 210, top: 604.5, height: 13, width: 120, title: '横线', textAlign: 'center' }, + printElementType: { title: '自定义文本', type: 'text' } + }, + { + options: { left: 130.5, top: 625.5, height: 10, width: 277 }, + printElementType: { title: '横线', type: 'hline' } + }, + { + options: { + left: 364.5, + top: 649.5, + height: 13, + width: 101, + title: '矩形', + textAlign: 'center' + }, + printElementType: { title: '自定义文本', type: 'text' } + }, + { + options: { left: 525, top: 784.5, height: 13, width: 63, title: '页尾线', textAlign: 'center' }, + printElementType: { title: '自定义文本', type: 'text' } + }, + { + options: { left: 12, top: 786, height: 49, width: 49 }, + printElementType: { title: 'html', type: 'html' } + }, + { + options: { + left: 75, + top: 790.5, + height: 13, + width: 137, + title: '红色原型是自动定义的Html', + textAlign: 'center' + }, + printElementType: { title: '自定义文本', type: 'text' } + }, + { + options: { + left: 334.5, + top: 810, + height: 13, + width: 205, + title: '页眉线已上。页尾下以下每页都会重复打印', + textAlign: 'center' + }, + printElementType: { title: '自定义文本', type: 'text' } + } + ], + paperNumberLeft: 565.5, + paperNumberTop: 819 + } + ] +} diff --git a/src/views/productionBusiness/labelPrinting/template/detail/utils/template-helper.js b/src/views/productionBusiness/labelPrinting/template/detail/utils/template-helper.js new file mode 100644 index 0000000..6a8291a --- /dev/null +++ b/src/views/productionBusiness/labelPrinting/template/detail/utils/template-helper.js @@ -0,0 +1,21 @@ +/* + * @Description: + * @Author: CcSimple + * @Github: https://github.com/CcSimple + * @Date: 2023-02-09 23:26:18 + * @LastEditors: CcSimple + * @LastEditTime: 2023-02-09 23:35:20 + */ +import { hiprint } from "vue-plugin-hiprint"; + +const templateMap = {}; + +export function newHiprintPrintTemplate(key, options) { + let template = new hiprint.PrintTemplate(options); + templateMap[key] = template; + return template; +} + +export function getHiprintPrintTemplate(key) { + return templateMap[key]; +} diff --git a/src/views/productionBusiness/productionCenter/report/columns/detailColumns.js b/src/views/productionBusiness/productionCenter/report/columns/detailColumns.js index 384c39d..c8754e5 100644 --- a/src/views/productionBusiness/productionCenter/report/columns/detailColumns.js +++ b/src/views/productionBusiness/productionCenter/report/columns/detailColumns.js @@ -226,14 +226,14 @@ export const modalColumns = [ align: 'center', ellipsis: true }, - { + /*{ title: '打码时间', dataIndex: 'subAmount', width: 200, resizable: true, align: 'center', ellipsis: true - }, + },*/ { title: '扫描时间', dataIndex: 'scanTime', diff --git a/src/views/productionBusiness/productionCenter/report/detail/index.vue b/src/views/productionBusiness/productionCenter/report/detail/index.vue index e2234bf..a15056e 100644 --- a/src/views/productionBusiness/productionCenter/report/detail/index.vue +++ b/src/views/productionBusiness/productionCenter/report/detail/index.vue @@ -41,12 +41,14 @@ @@ -110,35 +112,38 @@ // 查看条码 let visible = ref(false) let scanTableList = ref([]) + let recordTable = {} const handleOpenViewScan = (record) => { + recordTable = record visible.value = true - producePackageBarcodeApi - .producePackageBarcodeTreeList({ - reportDetailId: record.id, - reportId: record.reportId + produceReportApi + .produceReportTreeList({ + docsDetailId: record.id, + docsId: record.reportId }) .then((res) => { scanTableList.value = res scanTableList.value.forEach((item) => { - // if (item.subAmount > 0) item.children = [] - item.children = [] + if (item.subAmount && item.subAmount > 0) item.children = [] }) }) } const columnsExpand = (expanded, record) => { if (expanded) { - producePackageBarcodeApi - .producePackageBarcodeTreeChildrenList({ - reportDetailId: record.reportDetailId, - reportId: record.reportId, + produceReportApi + .produceReportTreeChildrenList({ + docsDetailId: recordTable.id, + docsId: record.docsId, parentBarcode: record.barcode }) .then((res) => { record.children = res - record.children.forEach((item) => { - item.children = [] - }) + record.children && + record.children.forEach((item) => { + if (item.subAmount && item.subAmount > 0) + item.children = [] + }) }) } }