// 打印类属性、方法定义 // const Print = function (dom, options) { // if (!(this instanceof Print)) return new Print(dom, options) // this.options = this.extend({ // 'noPrint': '.no-print' // }, options) // if ((typeof dom) === 'string') { // this.dom = document.querySelector(dom) // } else { // this.dom = dom // } // this.init() // } // Print.prototype = { // init: function () { // var content = this.getStyle() + this.getHtml() // this.writeIframe(content) // }, // extend: function (obj, obj2) { // for (var k in obj2) { // obj[k] = obj2[k] // } // return obj // }, // getStyle: function () { // var str = '' // var styles = document.getElementById('print') // // for (var i = 0; i < styles.length; i++) { // str += styles.outerHTML // // } // str += '' // return str // }, // getHtml: function () { // var inputs = document.querySelectorAll('input') // var textareas = document.querySelectorAll('textarea') // var selects = document.querySelectorAll('select') // for (var k in inputs) { // if (inputs[k].type === 'checkbox' || inputs[k].type === 'radio') { // if (inputs[k].checked === true) { // inputs[k].setAttribute('checked', 'checked') // } else { // inputs[k].removeAttribute('checked') // } // } else if (inputs[k].type === 'text') { // inputs[k].setAttribute('value', inputs[k].value) // } // } // for (var k2 in textareas) { // if (textareas[k2].type === 'textarea') { // textareas[k2].innerHTML = textareas[k2].value // } // } // for (var k3 in selects) { // if (selects[k3].type === 'select-one') { // var child = selects[k3].children // for (var i in child) { // if (child[i].tagName === 'OPTION') { // if (child[i].selected === true) { // child[i].setAttribute('selected', 'selected') // } else { // child[i].removeAttribute('selected') // } // } // } // } // } // return this.dom.outerHTML // }, // writeIframe: function (content) { // // eslint-disable-next-line // var w, doc, iframe = document.createElement('iframe'), // f = document.body.appendChild(iframe) // iframe.id = 'myIframe' // iframe.style = 'position:absolute;width:0;height:0;top:-10px;left:-10px;' // w = f.contentWindow || f.contentDocument // doc = f.contentDocument || f.contentWindow.document // doc.open() // doc.write(content) // doc.close() // this.toPrint(w) // setTimeout(function () { // document.body.removeChild(iframe) // }, 100) // }, // toPrint: function (frameWindow) { // try { // setTimeout(function () { // frameWindow.focus() // try { // if (!frameWindow.document.execCommand('print', false, null)) { // frameWindow.print() // } // } catch (e) { // frameWindow.print() // } // frameWindow.close() // }, 10) // } catch (err) { // console.log('err', err) // } // } // } import store from '@/store' import moment from 'moment' /** * * * @param {*} order 订单门票打印 * @param {*} ticket 单张门票信息打印,通常用于测试打印,或者已经构造好数据的门票对象 */ const Print = function (order, ticket) { if (ticket) { // 必须是数组 store.commit('SET_PRINT_LIST', [ticket]) } else { let tickets = order.tickets || order.ticketList || [] tickets.forEach((item, index) => { item.teamId = order.teamId item.index = index item.remark = order.remark item.orderNo = order.orderNo item.is_otaorder = order.is_otaorder item.createTime = moment(order.createTime).format('YYYY-MM-DD HH:mm') item.hidePrice = order.hidePrice item.buyerName = order.buyerName item.groupIndividual = order.groupIndividual item.travelAgencyName = order.travelAgencyName item.manager_name = order.manager_name item.invoiceQrcode = order.invoiceQrcode || '' }) store.commit('SET_PRINT_LIST', tickets) } } const PrintSmallTicket = function (order) { store.commit('SET_PRINT_ORDER', order) } const PrintPlugin = {} PrintPlugin.install = function (Vue, options) { // 4. 添加实例方法 Vue.prototype.$print = Print Vue.prototype.$printSmallTicket = PrintSmallTicket } export default PrintPlugin