diff --git a/common/js/EscPosUtil.js b/common/js/EscPosUtil.js deleted file mode 100644 index e967c4a..0000000 --- a/common/js/EscPosUtil.js +++ /dev/null @@ -1,262 +0,0 @@ -// 打印机纸宽58mm,页的宽度384,字符宽度为1,每行最多盛放32个字符 -// 打印机纸宽80mm,页的宽度576,字符宽度为1,每行最多盛放48个字符 -const PAGE_WIDTH = 576; -const MAX_CHAR_COUNT_EACH_LINE = 48; - -//字符串转字节序列 -function stringToByte(str) { - var bytes = new Array(); - var len, c; - len = str.length; - for (var i = 0; i < len; i++) { - c = str.charCodeAt(i); - if (c >= 0x010000 && c <= 0x10FFFF) { - bytes.push(((c >> 18) & 0x07) | 0xF0); - bytes.push(((c >> 12) & 0x3F) | 0x80); - bytes.push(((c >> 6) & 0x3F) | 0x80); - bytes.push((c & 0x3F) | 0x80); - } else if (c >= 0x000800 && c <= 0x00FFFF) { - bytes.push(((c >> 12) & 0x0F) | 0xE0); - bytes.push(((c >> 6) & 0x3F) | 0x80); - bytes.push((c & 0x3F) | 0x80); - } else if (c >= 0x000080 && c <= 0x0007FF) { - bytes.push(((c >> 6) & 0x1F) | 0xC0); - bytes.push((c & 0x3F) | 0x80); - } else { - bytes.push(c & 0xFF); - } - } - return bytes; -} - -//字节序列转ASCII码 -//[0x24, 0x26, 0x28, 0x2A] ==> "$&C*" -function byteToString(arr) { - if (typeof arr === 'string') { - return arr; - } - var str = '', - _arr = arr; - for (var i = 0; i < _arr.length; i++) { - var one = _arr[i].toString(2), - v = one.match(/^1+?(?=0)/); - if (v && one.length == 8) { - var bytesLength = v[0].length; - var store = _arr[i].toString(2).slice(7 - bytesLength); - for (var st = 1; st < bytesLength; st++) { - store += _arr[st + i].toString(2).slice(2); - } - str += String.fromCharCode(parseInt(store, 2)); - i += bytesLength - 1; - } else { - str += String.fromCharCode(_arr[i]); - } - } - return str; -} -//居中 -function Center() { - var Center = []; - Center.push(27); - Center.push(97); - Center.push(1); - var strCenter = byteToString(Center); - return strCenter; -} - -//居左 -function Left() { - var Left = []; - Left.push(27); - Left.push(97); - Left.push(0); - var strLeft = byteToString(Left); - return strLeft; -} -//居右 -function Right() { - var right = []; - Left.push(27); - Left.push(97); - Left.push(2); - var strRight = byteToString(right); - return strRight; -} -//标准字体 -function Size1() { - var Size1 = []; - Size1.push(29); - Size1.push(33); - Size1.push(0); - var strSize1 = byteToString(Size1); - return strSize1; -} -//大号字体 -/* 放大1倍 n = 0 - * 长宽各放大2倍 n = 17 */ -function Size2(n) { - var Size2 = []; - Size2.push(29); - Size2.push(33); - Size2.push(n); - var strSize2 = byteToString(Size2); - return strSize2; -} - -// 字体加粗 -function boldFontOn() { - var arr = [] - arr.push(27) - arr.push(69) - arr.push(1) - var cmd = byteToString(arr); - return cmd -} -// 取消字体加粗 -function boldFontOff() { - var arr = [] - arr.push(27) - arr.push(69) - arr.push(0) - var cmd = byteToString(arr); - return cmd -} -// 打印并走纸n行 -function feedLines(n = 1) { - var feeds = [] - feeds.push(27) - feeds.push(100) - feeds.push(n) - var printFeedsLines = byteToString(feeds); - return printFeedsLines -} -// 切纸 -function cutPaper() { - var cut = [] - cut.push(29) - cut.push(86) - cut.push(49) - var cutType = byteToString(cut); - return cutType -} - -// 开钱箱 -function open_money_box() { - var open = [] - open.push(27) - open.push(112) - open.push(0) - open.push(60) - open.push(255) - var openType = byteToString(open) - return openType -} - -// 初始化打印机 -function init() { - var arr = [] - arr.push(27) - arr.push(68) - arr.push(0) - var str = byteToString(arr) - return str -} -/* - 设置左边距 - len: - */ - -function setLeftMargin(len = 1) { - var arr = [] - arr.push(29) - arr.push(76) - arr.push(len) - var str = byteToString(arr) - return str -} - -// 设置打印区域宽度 -function setPrintAreaWidth(width) { - var arr = [] - arr.push(29) - arr.push(87) - arr.push(width) - var str = byteToString(arr) - return str -} - -/** - * @param str - * @returns {boolean} str是否全是中文 - */ -function isChinese(str) { - return /^[\u4e00-\u9fa5]$/.test(str); -} - -// str是否全含中文或者中文标点 -function isHaveChina(str) { - if (escape(str).indexOf("%u") < 0) { - return 0 - } else { - return 1 - } -} -/** - * 返回字符串宽度(1个中文=2个英文字符) - * @param str - * @returns {number} - */ -function getStringWidth(str) { - let width = 0; - for (let i = 0, len = str.length; i < len; i++) { - width += isHaveChina(str.charAt(i)) ? 2 : 1; - } - return width; -} - -/** - * 同一行输出str1, str2,str1居左, str2居右 - * @param {string} str1 内容1 - * @param {string} str2 内容2 - * @param {string} fillWith str1 str2之间的填充字符 - * @param {number} fontWidth 字符宽度 1/2 - * - */ -function inline(str1, str2, fillWith = ' ', fontWidth = 1) { - const lineWidth = MAX_CHAR_COUNT_EACH_LINE / fontWidth; - // 需要填充的字符数量 - let fillCount = lineWidth - (getStringWidth(str1) + getStringWidth(str2)) % lineWidth; - let fillStr = new Array(fillCount).fill(fillWith.charAt(0)).join(''); - return str1 + fillStr + str2; -} -/** - * 用字符填充一整行 - * @param {string} fillWith 填充字符 - * @param {number} fontWidth 字符宽度 1/2 - */ -function fillLine(fillWith = '-', fontWidth = 1) { - const lineWidth = MAX_CHAR_COUNT_EACH_LINE / fontWidth; - return new Array(lineWidth).fill(fillWith.charAt(0)).join(''); -} - -/** - * 文字内容居中,左右用字符填充 - * @param {string} str 文字内容 - * @param {number} fontWidth 字符宽度 1/2 - * @param {string} fillWith str1 str2之间的填充字符 - */ -function fillAround(str, fillWith = '-', fontWidth = 1) { - const lineWidth = MAX_CHAR_COUNT_EACH_LINE / fontWidth; - let strWidth = getStringWidth(str); - // 内容已经超过一行了,没必要填充 - if (strWidth >= lineWidth) { - return str; - } - // 需要填充的字符数量 - let fillCount = lineWidth - strWidth; - // 左侧填充的字符数量 - let leftCount = Math.round(fillCount / 2); - // 两侧的填充字符,需要考虑左边需要填充,右边不需要填充的情况 - let fillStr = new Array(leftCount).fill(fillWith.charAt(0)).join(''); - return fillStr + str + fillStr.substr(0, fillCount - leftCount); -} \ No newline at end of file diff --git a/common/js/LodopFuncs.js b/common/js/LodopFuncs.js new file mode 100644 index 0000000..65c31d4 --- /dev/null +++ b/common/js/LodopFuncs.js @@ -0,0 +1,207 @@ +//==本JS是加载Lodop插件或Web打印服务CLodop/Lodop7的综合示例,可直接使用,建议理解后融入自己程序== + +//用双端口加载主JS文件Lodop.js(或CLodopfuncs.js兼容老版本)以防其中某端口被占: +var MainJS = "CLodopfuncs.js", + URL_WS1 = "ws://localhost:8000/" + MainJS, //ws用8000/18000 + URL_WS2 = "ws://localhost:18000/" + MainJS, + URL_HTTP1 = "http://localhost:8000/" + MainJS, //http用8000/18000 + URL_HTTP2 = "http://localhost:18000/" + MainJS, + URL_HTTP3 = "https://localhost.lodop.net:8443/" + MainJS; //https用8000/8443 + +var CreatedOKLodopObject, CLodopIsLocal, LoadJsState; + +//==判断是否需要CLodop(那些不支持插件的浏览器):== +function needCLodop() { + try { + var ua = navigator.userAgent; + if (ua.match(/Windows\sPhone/i) || + ua.match(/iPhone|iPod|iPad/i) || + ua.match(/Android/i) || + ua.match(/Edge\D?\d+/i)) + return true; + var verTrident = ua.match(/Trident\D?\d+/i); + var verIE = ua.match(/MSIE\D?\d+/i); + var verOPR = ua.match(/OPR\D?\d+/i); + var verFF = ua.match(/Firefox\D?\d+/i); + var x64 = ua.match(/x64/i); + if ((!verTrident) && (!verIE) && (x64)) return true; + else if (verFF) { + verFF = verFF[0].match(/\d+/); + if ((verFF[0] >= 41) || (x64)) return true; + } else if (verOPR) { + verOPR = verOPR[0].match(/\d+/); + if (verOPR[0] >= 32) return true; + } else if ((!verTrident) && (!verIE)) { + var verChrome = ua.match(/Chrome\D?\d+/i); + if (verChrome) { + verChrome = verChrome[0].match(/\d+/); + if (verChrome[0] >= 41) return true; + } + } + return false; + } catch (err) { + return true; + } +} + +//==检查加载成功与否,如没成功则用http(s)再试== +//==低版本CLODOP6.561/Lodop7.043及前)用本方法== +function checkOrTryHttp() { + if (window.getCLodop) { + LoadJsState = "complete"; + return true; + } + if (LoadJsState == "loadingB" || LoadJsState == "complete") return; + LoadJsState = "loadingB"; + var head = document.head || document.getElementsByTagName("head")[0] || document.documentElement; + var JS1 = document.createElement("script"), + JS2 = document.createElement("script"), + JS3 = document.createElement("script"); + JS1.src = URL_HTTP1; + JS2.src = URL_HTTP2; + JS3.src = URL_HTTP3; + JS1.onload = JS2.onload = JS3.onload = JS2.onerror = JS3.onerror = function() { + LoadJsState = "complete"; + } + JS1.onerror = function(e) { + if (window.location.protocol !== 'https:') + head.insertBefore(JS2, head.firstChild); + else + head.insertBefore(JS3, head.firstChild); + } + head.insertBefore(JS1, head.firstChild); +} + +//==加载Lodop对象的主过程:== +(function loadCLodop() { + if (!needCLodop()) return; + CLodopIsLocal = !!((URL_WS1 + URL_WS2).match(/\/\/localho|\/\/127.0.0./i)); + LoadJsState = "loadingA"; + if (!window.WebSocket && window.MozWebSocket) window.WebSocket = window.MozWebSocket; + //ws方式速度快(小于200ms)且可避免CORS错误,但要求Lodop版本足够新: + try { + var WSK1 = new WebSocket(URL_WS1); + WSK1.onopen = function(e) { + setTimeout("checkOrTryHttp()", 200); + } + WSK1.onmessage = function(e) { + if (!window.getCLodop) eval(e.data); + } + WSK1.onerror = function(e) { + var WSK2 = new WebSocket(URL_WS2); + WSK2.onopen = function(e) { + setTimeout("checkOrTryHttp()", 200); + } + WSK2.onmessage = function(e) { + if (!window.getCLodop) eval(e.data); + } + WSK2.onerror = function(e) { + checkOrTryHttp(); + } + } + } catch (e) { + checkOrTryHttp(); + } +})(); + +//==获取LODOP对象主过程,判断是否安装、需否升级:== +function getLodop(oOBJECT, oEMBED) { + var strFontTag = "
打印控件"; + var strLodopInstall = strFontTag + "未安装!点击这里执行安装"; + var strLodopUpdate = strFontTag + "需要升级!点击这里执行升级"; + var strLodop64Install = strFontTag + "未安装!点击这里执行安装"; + var strLodop64Update = strFontTag + "需要升级!点击这里执行升级"; + var strCLodopInstallA = + "
Web打印服务CLodop未安装启动,点击这里下载执行安装"; + var strCLodopInstallB = "
(若此前已安装过,可点这里直接再次启动)"; + var strCLodopUpdate = + "
Web打印服务CLodop需升级!点击这里执行升级"; + var strLodop7FontTag = "
Web打印服务Lodop7"; + var strLodop7HrefX86 = "点击这里下载安装(下载后解压,点击lodop文件开始执行)"; + var strLodop7HrefARM = "点击这里下载安装(下载后解压,点击lodop文件开始执行)"; + var strLodop7Install_X86 = strLodop7FontTag + "未安装启动," + strLodop7HrefX86; + var strLodop7Install_ARM = strLodop7FontTag + "未安装启动," + strLodop7HrefARM; + var strLodop7Update_X86 = strLodop7FontTag + "需升级," + strLodop7HrefX86; + var strLodop7Update_ARM = strLodop7FontTag + "需升级," + strLodop7HrefARM; + var strInstallOK = ",成功后请刷新本页面或重启浏览器。"; + var LODOP; + try { + var isWinIE = (/MSIE/i.test(navigator.userAgent)) || (/Trident/i.test(navigator.userAgent)); + var isWinIE64 = isWinIE && (/x64/i.test(navigator.userAgent)); + var isLinuxX86 = (/Linux/i.test(navigator.platform)) && (/x86/i.test(navigator.platform)); + var isLinuxARM = (/Linux/i.test(navigator.platform)) && (/aarch/i.test(navigator.platform)); + + if (needCLodop() || isLinuxX86 || isLinuxARM) { + try { + LODOP = window.getCLodop(); + } catch (err) {} + if (!LODOP && LoadJsState !== "complete") { + if (!LoadJsState) + alert("未曾加载Lodop主JS文件,请先调用loadCLodop过程."); + else + alert("网页还没下载完毕,请稍等一下再操作."); + return; + } + var strAlertMessage; + if (!LODOP) { + if (isLinuxX86) + strAlertMessage = strLodop7Install_X86; + else if (isLinuxARM) + strAlertMessage = strLodop7Install_ARM; + else + strAlertMessage = strCLodopInstallA + (CLodopIsLocal ? strCLodopInstallB : ""); + document.body.innerHTML = strAlertMessage + strInstallOK + document.body.innerHTML; + return; + } else { + if (isLinuxX86 && LODOP.CVERSION < "7.0.7.5") + strAlertMessage = strLodop7Update_X86; + else if (isLinuxARM && LODOP.CVERSION < "7.0.7.5") + strAlertMessage = strLodop7Update_ARM; + else if (CLODOP.CVERSION < "6.5.9.4") + strAlertMessage = strCLodopUpdate; + + if (strAlertMessage) + document.body.innerHTML = strAlertMessage + strInstallOK + document.body.innerHTML; + } + } else { + //==如果页面有Lodop插件就直接使用,否则新建:== + if (oOBJECT || oEMBED) { + if (isWinIE) + LODOP = oOBJECT; + else + LODOP = oEMBED; + } else if (!CreatedOKLodopObject) { + LODOP = document.createElement("object"); + LODOP.setAttribute("width", 0); + LODOP.setAttribute("height", 0); + LODOP.setAttribute("style", "position:absolute;left:0px;top:-100px;width:0px;height:0px;"); + if (isWinIE) + LODOP.setAttribute("classid", "clsid:2105C259-1E0C-4534-8141-A753534CB4CA"); + else + LODOP.setAttribute("type", "application/x-print-lodop"); + document.documentElement.appendChild(LODOP); + CreatedOKLodopObject = LODOP; + } else + LODOP = CreatedOKLodopObject; + //==Lodop插件未安装时提示下载地址:== + if ((!LODOP) || (!LODOP.VERSION)) { + document.body.innerHTML = (isWinIE64 ? strLodop64Install : strLodopInstall) + strInstallOK + document + .body.innerHTML; + return LODOP; + } + if (LODOP.VERSION < "6.2.2.6") { + document.body.innerHTML = (isWinIE64 ? strLodop64Update : strLodopUpdate) + strInstallOK + document.body + .innerHTML; + } + } + //===如下空白位置适合调用统一功能(如注册语句、语言选择等):======================= + // LODOP.SET_LICENSES("超掌柜独有!","DCFF409304DFCEB3E2C644BF96CD0720","",""); + //=============================================================================== + return LODOP; + } catch (err) { + alert("getLodop出错:" + err); + } +} + + +export default getLodop \ No newline at end of file diff --git a/pages/index/index.vue b/pages/index/index.vue index ec18032..b62b33a 100644 --- a/pages/index/index.vue +++ b/pages/index/index.vue @@ -1,24 +1,29 @@ @@ -30,7 +35,8 @@ improveinformation: false, improveinformationlist: {}, onLoaduserId: '', - onLoadtype: '' + onLoadtype: '', + infos:uni.getSystemInfoSync() }; }, async onLoad(e) { @@ -42,7 +48,7 @@ let res = await this.api.storestorestatus({ store_id: uni.cache.get('userId') }) - if(res.code == 1){ + if (res.code == 1) { this.improveinformationform = res.data.store uni.cache.set('form', this.improveinformationform); // uni.cache.set('userId', this.improveinformationform.id); @@ -79,7 +85,13 @@ }, onShow() {}, methods: { - drawer(){ + setClipboardData() { + uni.setClipboardData({ + data: 'https://h5-invoice.sxczgkj.cn/?userId=' + uni.cache.get('userId'), + success: function() {} + }); + }, + drawer() { uni.pro.navigateTo('index/drawer'); }, merchant() { @@ -133,34 +145,45 @@ background: #F9F9F9; } - .Box { - padding: 0rpx 28rpx; + .content { + .setClipboardDataclass{ + width: 100%; + text-align: center; + margin-top: 90rpx; + color: #2f87fd; + font-weight: bold; + font-size: 28rpx; + } + .Box { + + padding: 0rpx 28rpx; - .content { - margin-top: 32rpx; - width: 218rpx; - height: 218rpx; - background: #FFFFFF; + .content { + margin-top: 32rpx; + width: 30%; + height: 218rpx; + background: #FFFFFF; - image { - width: 60rpx; - height: 60rpx; + image { + width: 60rpx; + height: 60rpx; + } + + text { + margin-top: 16rpx; + font-family: Source Han Sans CN, Source Han Sans CN; + font-weight: 400; + font-size: 28rpx; + color: #333333; + } } - text { - margin-top: 16rpx; - font-family: Source Han Sans CN, Source Han Sans CN; - font-weight: 400; - font-size: 28rpx; - color: #333333; - } } - } - - .Box::after { - content: ''; - width: 218rpx; - display: inline-block; + .Box::after { + content: ''; + width: 30%; + display: inline-block; + } } \ No newline at end of file diff --git a/pages/index/notificationdd.vue b/pages/index/notificationdd.vue index e571f7e..a630d1c 100644 --- a/pages/index/notificationdd.vue +++ b/pages/index/notificationdd.vue @@ -12,7 +12,27 @@ - + + + +
+ 销售方名称:任公司任公司任公司任公司任公司任公司任公司任公司任公司 +
+ +
+ 开票金额:1135.42 +
+ +
+ 生成时间:2024-04-03 13:15:17 +
+
+ 二维码有效期:30天 +
@@ -20,6 +40,7 @@
\ No newline at end of file + document.write('')
\ No newline at end of file