diff --git a/src/assets/js/LodopFuncs.js b/src/assets/js/LodopFuncs.js index 98a8446..425a531 100644 --- a/src/assets/js/LodopFuncs.js +++ b/src/assets/js/LodopFuncs.js @@ -1,41 +1,41 @@ -//==本JS是加载Lodop插件及CLodop服务的综合示例,可直接使用,建议看懂后融进自己页面程序== +//==本JS是加载Lodop插件或Web打印服务CLodop/Lodop7的综合示例,可直接使用,建议理解后融入自己程序== -var CreatedOKLodopObject, CLodopIsLocal, CLodopJsState; +//用双端口加载主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)) - return true; - if (ua.match(/iPhone|iPod|iPad/i)) - return true; - if (ua.match(/Android/i)) - return true; - if (ua.match(/Edge\D?\d+/i)) + 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; + if ((!verTrident) && (!verIE) && (x64)) return true; else if (verFF) { verFF = verFF[0].match(/\d+/); - if ((verFF[0] >= 41) || (x64)) - return true; + if ((verFF[0] >= 41) || (x64)) return true; } else if (verOPR) { verOPR = verOPR[0].match(/\d+/); - if (verOPR[0] >= 32) - return true; + 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; + if (verChrome[0] >= 41) return true; } } return false; @@ -44,65 +44,113 @@ function needCLodop() { } } -//==加载引用CLodop的主JS,用双端口8000和18000(以防其中一个被占):== -function loadCLodop() { - if (CLodopJsState == "loading" || CLodopJsState == "complete") return; - CLodopJsState = "loading"; - var head = document.head || document.getElementsByTagName("head")[0] || document.documentElement; - var JS1 = document.createElement("script"); - var JS2 = document.createElement("script"); - JS1.src = "http://localhost:8000/CLodopfuncs.js?priority=1"; - JS2.src = "http://localhost:18000/CLodopfuncs.js"; - JS1.onload = JS2.onload = function() {CLodopJsState = "complete";} - JS1.onerror = JS2.onerror = function(evt) {CLodopJsState = "complete";} - head.insertBefore(JS1, head.firstChild); - head.insertBefore(JS2, head.firstChild); - CLodopIsLocal = !!((JS1.src + JS2.src).match(/\/\/localho|\/\/127.0.0./i)); +//==检查加载成功与否,如没成功则用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); } -if (needCLodop()){loadCLodop();}//加载 +//==加载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 strHtmInstall = "
打印控件未安装!点击这里执行安装,安装后请刷新页面或重新进入。"; - var strHtmUpdate = "
打印控件需要升级!点击这里执行升级,升级后请重新进入。"; - var strHtm64_Install = "
打印控件未安装!点击这里执行安装,安装后请刷新页面或重新进入。"; - var strHtm64_Update = "
打印控件需要升级!点击这里执行升级,升级后请重新进入。"; - var strHtmFireFox = "

(注意:如曾安装过Lodop旧版附件npActiveXPLugin,请在【工具】->【附加组件】->【扩展】中先卸它)"; - var strHtmChrome = "

(如果此前正常,仅因浏览器升级或重安装而出问题,需重新执行以上安装)"; - var strCLodopInstall_1 = "
Web打印服务CLodop未安装启动,点击这里下载执行安装"; - var strCLodopInstall_2 = "
(若此前已安装过,可点这里直接再次启动)"; - var strCLodopInstall_3 = ",成功后请刷新本页面。
"; - var strCLodopUpdate = "
Web打印服务CLodop需升级!点击这里执行升级,升级后请刷新页面。"; + 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 ua = navigator.userAgent; - var isIE = !!(ua.match(/MSIE/i)) || !!(ua.match(/Trident/i)); - if (needCLodop()) { + 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 = getCLodop(); + LODOP = window.getCLodop(); } catch (err) {} - if (!LODOP && CLodopJsState !== "complete") { - if (CLodopJsState == "loading") alert("网页还没下载完毕,请稍等一下再操作."); else alert("没有加载CLodop的主js,请先调用loadCLodop过程."); + if (!LODOP && LoadJsState !== "complete") { + if (!LoadJsState) + alert("未曾加载Lodop主JS文件,请先调用loadCLodop过程."); else + alert("网页还没下载完毕,请稍等一下再操作."); return; } + var strAlertMessage; if (!LODOP) { - document.body.innerHTML = strCLodopInstall_1 + (CLodopIsLocal ? strCLodopInstall_2 : "") + strCLodopInstall_3 + document.body.innerHTML; + 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 (CLODOP.CVERSION < "4.1.2.7") { - document.body.innerHTML = strCLodopUpdate + document.body.innerHTML; - } - if (oEMBED && oEMBED.parentNode) - oEMBED.parentNode.removeChild(oEMBED); //清理旧版无效元素 - if (oOBJECT && oOBJECT.parentNode) - oOBJECT.parentNode.removeChild(oOBJECT); + if (isLinuxX86 && LODOP.CVERSION < "7.1.0.5") + strAlertMessage = strLodop7Update_X86; + else if (isLinuxARM && LODOP.CVERSION < "7.1.0.5") + strAlertMessage = strLodop7Update_ARM; + else if (CLODOP.CVERSION < "6.6.2.8") + strAlertMessage = strCLodopUpdate; + + if (strAlertMessage) + document.body.innerHTML = strAlertMessage + strInstallOK + document.body.innerHTML; } } else { - var is64IE = isIE && !!(ua.match(/x64/i)); - //==如果页面有Lodop就直接使用,否则新建:== + //==如果页面有Lodop插件就直接使用,否则新建:== if (oOBJECT || oEMBED) { - if (isIE) + if (isWinIE) LODOP = oOBJECT; else LODOP = oEMBED; @@ -111,7 +159,7 @@ function getLodop(oOBJECT, oEMBED) { LODOP.setAttribute("width", 0); LODOP.setAttribute("height", 0); LODOP.setAttribute("style", "position:absolute;left:0px;top:-100px;width:0px;height:0px;"); - if (isIE) + if (isWinIE) LODOP.setAttribute("classid", "clsid:2105C259-1E0C-4534-8141-A753534CB4CA"); else LODOP.setAttribute("type", "application/x-print-lodop"); @@ -121,26 +169,20 @@ function getLodop(oOBJECT, oEMBED) { LODOP = CreatedOKLodopObject; //==Lodop插件未安装时提示下载地址:== if ((!LODOP) || (!LODOP.VERSION)) { - if (ua.indexOf('Chrome') >= 0) - document.body.innerHTML = strHtmChrome + document.body.innerHTML; - if (ua.indexOf('Firefox') >= 0) - document.body.innerHTML = strHtmFireFox + document.body.innerHTML; - document.body.innerHTML = (is64IE ? strHtm64_Install : strHtmInstall) + document.body.innerHTML; + 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; + } } - if (LODOP.VERSION < "6.2.2.6") { - if (!needCLodop()) - document.body.innerHTML = (is64IE ? strHtm64_Update : strHtmUpdate) + document.body.innerHTML; - } - //===如下空白位置适合调用统一功能(如注册语句、语言选择等):== + //===如下空白位置适合调用统一功能(如注册语句、语言选择等):======================= - //======================================================= + //=============================================================================== return LODOP; } catch (err) { alert("getLodop出错:" + err); } } -export default getLodop diff --git a/src/assets/js/LodopFuncs_old.js b/src/assets/js/LodopFuncs_old.js new file mode 100644 index 0000000..98a8446 --- /dev/null +++ b/src/assets/js/LodopFuncs_old.js @@ -0,0 +1,146 @@ +//==本JS是加载Lodop插件及CLodop服务的综合示例,可直接使用,建议看懂后融进自己页面程序== + +var CreatedOKLodopObject, CLodopIsLocal, CLodopJsState; + +//==判断是否需要CLodop(那些不支持插件的浏览器):== +function needCLodop() { + try { + var ua = navigator.userAgent; + if (ua.match(/Windows\sPhone/i)) + return true; + if (ua.match(/iPhone|iPod|iPad/i)) + return true; + if (ua.match(/Android/i)) + return true; + if (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; + } +} + +//==加载引用CLodop的主JS,用双端口8000和18000(以防其中一个被占):== +function loadCLodop() { + if (CLodopJsState == "loading" || CLodopJsState == "complete") return; + CLodopJsState = "loading"; + var head = document.head || document.getElementsByTagName("head")[0] || document.documentElement; + var JS1 = document.createElement("script"); + var JS2 = document.createElement("script"); + JS1.src = "http://localhost:8000/CLodopfuncs.js?priority=1"; + JS2.src = "http://localhost:18000/CLodopfuncs.js"; + JS1.onload = JS2.onload = function() {CLodopJsState = "complete";} + JS1.onerror = JS2.onerror = function(evt) {CLodopJsState = "complete";} + head.insertBefore(JS1, head.firstChild); + head.insertBefore(JS2, head.firstChild); + CLodopIsLocal = !!((JS1.src + JS2.src).match(/\/\/localho|\/\/127.0.0./i)); +} + +if (needCLodop()){loadCLodop();}//加载 + +//==获取LODOP对象主过程,判断是否安装、需否升级:== +function getLodop(oOBJECT, oEMBED) { + var strHtmInstall = "
打印控件未安装!点击这里执行安装,安装后请刷新页面或重新进入。"; + var strHtmUpdate = "
打印控件需要升级!点击这里执行升级,升级后请重新进入。"; + var strHtm64_Install = "
打印控件未安装!点击这里执行安装,安装后请刷新页面或重新进入。"; + var strHtm64_Update = "
打印控件需要升级!点击这里执行升级,升级后请重新进入。"; + var strHtmFireFox = "

(注意:如曾安装过Lodop旧版附件npActiveXPLugin,请在【工具】->【附加组件】->【扩展】中先卸它)"; + var strHtmChrome = "

(如果此前正常,仅因浏览器升级或重安装而出问题,需重新执行以上安装)"; + var strCLodopInstall_1 = "
Web打印服务CLodop未安装启动,点击这里下载执行安装"; + var strCLodopInstall_2 = "
(若此前已安装过,可点这里直接再次启动)"; + var strCLodopInstall_3 = ",成功后请刷新本页面。
"; + var strCLodopUpdate = "
Web打印服务CLodop需升级!点击这里执行升级,升级后请刷新页面。"; + var LODOP; + try { + var ua = navigator.userAgent; + var isIE = !!(ua.match(/MSIE/i)) || !!(ua.match(/Trident/i)); + if (needCLodop()) { + try { + LODOP = getCLodop(); + } catch (err) {} + if (!LODOP && CLodopJsState !== "complete") { + if (CLodopJsState == "loading") alert("网页还没下载完毕,请稍等一下再操作."); else alert("没有加载CLodop的主js,请先调用loadCLodop过程."); + return; + } + if (!LODOP) { + document.body.innerHTML = strCLodopInstall_1 + (CLodopIsLocal ? strCLodopInstall_2 : "") + strCLodopInstall_3 + document.body.innerHTML; + return; + } else { + if (CLODOP.CVERSION < "4.1.2.7") { + document.body.innerHTML = strCLodopUpdate + document.body.innerHTML; + } + if (oEMBED && oEMBED.parentNode) + oEMBED.parentNode.removeChild(oEMBED); //清理旧版无效元素 + if (oOBJECT && oOBJECT.parentNode) + oOBJECT.parentNode.removeChild(oOBJECT); + } + } else { + var is64IE = isIE && !!(ua.match(/x64/i)); + //==如果页面有Lodop就直接使用,否则新建:== + if (oOBJECT || oEMBED) { + if (isIE) + 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 (isIE) + 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)) { + if (ua.indexOf('Chrome') >= 0) + document.body.innerHTML = strHtmChrome + document.body.innerHTML; + if (ua.indexOf('Firefox') >= 0) + document.body.innerHTML = strHtmFireFox + document.body.innerHTML; + document.body.innerHTML = (is64IE ? strHtm64_Install : strHtmInstall) + document.body.innerHTML; + return LODOP; + } + } + if (LODOP.VERSION < "6.2.2.6") { + if (!needCLodop()) + document.body.innerHTML = (is64IE ? strHtm64_Update : strHtmUpdate) + document.body.innerHTML; + } + //===如下空白位置适合调用统一功能(如注册语句、语言选择等):== + + + //======================================================= + return LODOP; + } catch (err) { + alert("getLodop出错:" + err); + } +} + +export default getLodop diff --git a/src/utils/LodopFuncs.js b/src/utils/LodopFuncs.js index beac13c..5e8cac6 100644 --- a/src/utils/LodopFuncs.js +++ b/src/utils/LodopFuncs.js @@ -1,84 +1,248 @@ -import { MessageBox } from 'element-ui' -import {getPrinterUrl} from '../api/label/printer' - -// ====页面动态加载C-Lodop云打印必须的文件CLodopfuncs.js==== - -var head = document.head || document.getElementsByTagName('head')[0] || document.documentElement - -var oscript = document.createElement('script') - -// 让本机的浏览器打印(更优先一点): - -oscript = document.createElement('script') - -oscript.src = 'http://localhost:8000/CLodopfuncs.js?priority=2' - -head.insertBefore(oscript, head.firstChild) - -// 加载双端口(8000和18000)避免其中某个端口被占用: - -oscript = document.createElement('script') - -oscript.src = 'http://localhost:18000/CLodopfuncs.js?priority=1' - -head.insertBefore(oscript, head.firstChild) - -// 下载loadLodop - -function loadLodop() { - - window.open( window.SITE_CONFIG['baseUrl']+'/printer/download') - +//==本JS是加载Lodop插件或Web打印服务CLodop/Lodop7的综合示例== +import { MessageBox } from 'element-ui' + +//用双端口加载主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; + } } -// ====获取LODOP对象的主过程:==== - -function getLodop() { - - var LODOP - - try { - - LODOP = getCLodop() - - if (!LODOP && document.readyState !== 'complete') { - - MessageBox.alert('C-Lodop print control is not ready, please try again later!') - - return - +//==检查加载成功与否,如没成功则用http(s)再试== +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); +} - return LODOP - - } catch (err) { - - MessageBox({ - - title: 'Information', - - type: 'warning', - - confirmButtonText: 'Confirm', - cancelButtonText: 'Cancel', - zIndex: 3000, - - message: 'You haven’t install the printing component, you can follow the steps in Manual to complete the installation, then close and reopen the window again, it should be fixed', - - callback: res => { - - if (res === 'confirm') { - - loadLodop() - +//==加载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(); + } +})(); - } - - }) +// 下载CLodop安装程序 +function loadLodop() { + window.open(window.SITE_CONFIG['baseUrl'] + '/printer/download') +} - } +//==获取LODOP对象主过程== +function getLodop(oOBJECT, oEMBED) { + 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) { + debugger; + logger.info("LodopFuncs.js getLodop no CLodop"); + MessageBox({ + title: 'Information', + type: 'warning', + showCancelButton: true, + confirmButtonText: 'Download', + cancelButtonText: 'Cancel', + zIndex: 3000, + message: "You haven't installed the printing component Or the version you installed is not the latest version, please download and install or upgrade, also please check the related service is started, finally please close and reopen the browser.", + callback: res => { + if (res === 'confirm') { + loadLodop(); + } + } + }); + return + } + + + // 检查版本是否需要升级 + var needUpgrade = false; + if (isLinuxX86 && LODOP.CVERSION < "7.1.0.5") needUpgrade = true; + else if (isLinuxARM && LODOP.CVERSION < "7.1.0.5") needUpgrade = true; + else if (typeof CLODOP !== 'undefined' && CLODOP.CVERSION < "6.6.2.8") needUpgrade = true; + + if (needUpgrade) { + MessageBox({ + title: 'Information', + type: 'warning', + showCancelButton: true, + confirmButtonText: 'Download', + cancelButtonText: 'Cancel', + zIndex: 3000, + message: "You haven't installed the printing component Or the version you installed is not the latest version, please download and install or upgrade, also please check the related service is started, finally please close and reopen the browser.", + callback: res => { + if (res === 'confirm') { + loadLodop(); + } + } + }); + } + + if (LoadJsState !== "complete") { + if (!LoadJsState) { + MessageBox.alert('Lodop main JS file is not loaded, please call loadCLodop first.', 'Information', { type: 'warning' }); + } + return; + } + + } 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)) { + MessageBox({ + title: 'Information', + type: 'warning', + showCancelButton: true, + confirmButtonText: 'Download', + cancelButtonText: 'Cancel', + zIndex: 3000, + message: "You haven't installed the printing component Or the version you installed is not the latest version, please download and install or upgrade, also please check the related service is started, finally please close and reopen the browser.", + callback: res => { + if (res === 'confirm') { + loadLodop(); + } + } + }); + return LODOP; + } + + if (LODOP.VERSION < "6.2.2.6") { + MessageBox({ + title: 'Information', + type: 'warning', + showCancelButton: true, + confirmButtonText: 'Download', + cancelButtonText: 'Cancel', + zIndex: 3000, + message: "You haven't installed the printing component Or the version you installed is not the latest version, please download and install or upgrade, also please check the related service is started, finally please close and reopen the browser.", + callback: res => { + if (res === 'confirm') { + loadLodop(); + } + } + }); + } + } + //===如下空白位置适合调用统一功能(如注册语句、语言选择等):======================= + + //=============================================================================== + return LODOP; + } catch (err) { + MessageBox({ + title: 'Information', + type: 'warning', + showCancelButton: true, + confirmButtonText: 'Download', + cancelButtonText: 'Cancel', + zIndex: 3000, + message: "You haven't installed the printing component Or the version you installed is not the latest version, please download and install or upgrade, also please check the related service is started, finally please close and reopen the browser.", + callback: res => { + if (res === 'confirm') { + loadLodop(); + } + } + }); + } } export default getLodop diff --git a/src/utils/LodopFuncs_old.js b/src/utils/LodopFuncs_old.js new file mode 100644 index 0000000..beac13c --- /dev/null +++ b/src/utils/LodopFuncs_old.js @@ -0,0 +1,84 @@ +import { MessageBox } from 'element-ui' +import {getPrinterUrl} from '../api/label/printer' + +// ====页面动态加载C-Lodop云打印必须的文件CLodopfuncs.js==== + +var head = document.head || document.getElementsByTagName('head')[0] || document.documentElement + +var oscript = document.createElement('script') + +// 让本机的浏览器打印(更优先一点): + +oscript = document.createElement('script') + +oscript.src = 'http://localhost:8000/CLodopfuncs.js?priority=2' + +head.insertBefore(oscript, head.firstChild) + +// 加载双端口(8000和18000)避免其中某个端口被占用: + +oscript = document.createElement('script') + +oscript.src = 'http://localhost:18000/CLodopfuncs.js?priority=1' + +head.insertBefore(oscript, head.firstChild) + +// 下载loadLodop + +function loadLodop() { + + window.open( window.SITE_CONFIG['baseUrl']+'/printer/download') + +} + +// ====获取LODOP对象的主过程:==== + +function getLodop() { + + var LODOP + + try { + + LODOP = getCLodop() + + if (!LODOP && document.readyState !== 'complete') { + + MessageBox.alert('C-Lodop print control is not ready, please try again later!') + + return + + } + + return LODOP + + } catch (err) { + + MessageBox({ + + title: 'Information', + + type: 'warning', + + confirmButtonText: 'Confirm', + cancelButtonText: 'Cancel', + zIndex: 3000, + + message: 'You haven’t install the printing component, you can follow the steps in Manual to complete the installation, then close and reopen the window again, it should be fixed', + + callback: res => { + + if (res === 'confirm') { + + loadLodop() + + } + + } + + }) + + } + +} + +export default getLodop