<template xlang="wxml" minapp="mpvue"> <view class="tki-barcode"> <!-- #ifndef MP-ALIPAY --> <canvas class="tki-barcode-canvas" :canvas-id="cid" :style="{width:canvasWidth+'px',height:canvasHeight+'px'}" /> <!-- #endif --> <!-- #ifdef MP-ALIPAY --> <canvas v-if="val === '' || defaultOpations.text === val" :id="cid" :width="canvasWidth" :height="canvasHeight" class="tki-barcode-canvas" /> <!-- #endif --> <image v-show="show" :src="result" :style="{width:canvasWidth+'px',height:canvasHeight+'px', maxWidth: '100%'}" /> </view> </template> <script> // const barcode = require('./barcode.js'); import barCode from "./barcode.js" const opations = { // format: "CODE128",//选择要使用的条形码类型 微信支持的条码类型有 code128\code39\ena13\ean8\upc\itf14\ width: 4,//设置条之间的宽度 height: 120,//高度 displayValue: true,//是否在条形码下方显示文字 // text: "1234567890",//覆盖显示的文本 textAlign: "center",//设置文本的水平对齐方式 textPosition: "bottom",//设置文本的垂直位置 textMargin: 0,//设置条形码和文本之间的间距 fontSize: 24,//设置文本的大小 fontColor: "#000000",//设置文本的颜色 lineColor: "#000000",//设置条形码的颜色 background: "#FFFFFF",//设置条形码的背景色 margin: 0,//设置条形码周围的空白边距 marginTop: undefined,//设置条形码周围的上边距 marginBottom: undefined,//设置条形码周围的下边距 marginLeft: undefined,//设置条形码周围的左边距 marginRight: undefined,//设置条形码周围的右边距 } export default { name: "tkiBarcode", props: { show: { type: Boolean, default: true }, cid: { type: String, default: 'tki-barcode-canvas' }, unit: { type: String, default: 'upx' }, val: { type: String, default: '' }, format: { type: String, default: 'CODE128' }, opations: { type: Object, default: function () { return {} } }, onval: { type: Boolean, default: false }, loadMake: { type: Boolean, default: true }, }, data() { return { result: '', canvasWidth: 0, canvasHeight: 0, defaultOpations: Object.assign({}, opations) } }, onUnload: function () { }, methods: { _makeCode() { let that = this // 合并参数 Object.assign(this.defaultOpations, this.opations) if (that.unit == "upx") { /* if (that.defaultOpations.width) { that.defaultOpations.width = uni.upx2px(that.defaultOpations.width) } */ if (that.defaultOpations.height) { that.defaultOpations.height = uni.upx2px(that.defaultOpations.height) } if (that.defaultOpations.fontSize) { that.defaultOpations.fontSize = uni.upx2px(that.defaultOpations.fontSize) } } if (that._empty(that.defaultOpations.text)) { that.defaultOpations.text = that.val } if (that._empty(that.defaultOpations.format)) { that.defaultOpations.format = that.format } // console.log(JSON.stringify(that.defaultOpations)) this.$nextTick(() => { setTimeout(() => { new barCode(that, that.cid, that.defaultOpations, function (res) { // 生成条形码款高回调 that.canvasWidth = res.width that.canvasHeight = res.height }, function (res) { // 生成条形码的回调 // 返回值 that._result(res) // 重置默认参数 that.defaultOpations = opations }, ); }, 100) }) }, _clearCode() { this._result('') }, _saveCode() { let that = this; if (this.result != "") { uni.saveImageToPhotosAlbum({ filePath: that.result, success: function () { uni.showToast({ title: '条形码保存成功', icon: 'success', duration: 2000 }); } }); } }, _result(res) { this.result = res; this.$emit('result', res) }, _empty(v) { let tp = typeof v, rt = false; if (tp == "number" && String(v) == "") { rt = true } else if (tp == "undefined") { rt = true } else if (tp == "object") { if (JSON.stringify(v) == "{}" || JSON.stringify(v) == "[]" || v == null) rt = true } else if (tp == "string") { if (v == "" || v == "undefined" || v == "null" || v == "{}" || v == "[]") rt = true } else if (tp == "function") { rt = false } return rt } }, watch: { val(n, o) { this.defaultOpations.text = n if (this.onval) { if (n != o && !this._empty(n)) { this._makeCode() } } }, opations: { handler(n,o){ if (this.onval) { if (!this._empty(n)) { this._makeCode() } } }, deep: true } }, mounted () { if (this.loadMake) { if (!this._empty(this.val)) { this._makeCode() } } }, } </script> <style> .tki-barcode { position: relative; } .tki-barcode-canvas { position: fixed!important; top: -99999upx; left: -99999upx; z-index: -99999; } </style>