添加打印机
This commit is contained in:
@@ -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);
|
||||
}
|
||||
207
common/js/LodopFuncs.js
Normal file
207
common/js/LodopFuncs.js
Normal file
@@ -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 = "<br><font color='#FF00FF'>打印控件";
|
||||
var strLodopInstall = strFontTag + "未安装!点击这里<a href='install_lodop32.exe' target='_self'>执行安装</a>";
|
||||
var strLodopUpdate = strFontTag + "需要升级!点击这里<a href='install_lodop32.exe' target='_self'>执行升级</a>";
|
||||
var strLodop64Install = strFontTag + "未安装!点击这里<a href='install_lodop64.exe' target='_self'>执行安装</a>";
|
||||
var strLodop64Update = strFontTag + "需要升级!点击这里<a href='install_lodop64.exe' target='_self'>执行升级</a>";
|
||||
var strCLodopInstallA =
|
||||
"<br><font color='#FF00FF'>Web打印服务CLodop未安装启动,点击这里<a href='CLodop_Setup_for_Win32NT.exe' target='_self'>下载执行安装</a>";
|
||||
var strCLodopInstallB = "<br>(若此前已安装过,可<a href='CLodop.protocol:setup' target='_self'>点这里直接再次启动</a>)";
|
||||
var strCLodopUpdate =
|
||||
"<br><font color='#FF00FF'>Web打印服务CLodop需升级!点击这里<a href='CLodop_Setup_for_Win32NT.exe' target='_self'>执行升级</a>";
|
||||
var strLodop7FontTag = "<br><font color='#FF00FF'>Web打印服务Lodop7";
|
||||
var strLodop7HrefX86 = "点击这里<a href='Lodop7_Linux_X86_64.tar.gz' target='_self'>下载安装</a>(下载后解压,点击lodop文件开始执行)";
|
||||
var strLodop7HrefARM = "点击这里<a href='Lodop7_Linux_ARM64.tar.gz' target='_self'>下载安装</a>(下载后解压,点击lodop文件开始执行)";
|
||||
var strLodop7Install_X86 = strLodop7FontTag + "未安装启动," + strLodop7HrefX86;
|
||||
var strLodop7Install_ARM = strLodop7FontTag + "未安装启动," + strLodop7HrefARM;
|
||||
var strLodop7Update_X86 = strLodop7FontTag + "需升级," + strLodop7HrefX86;
|
||||
var strLodop7Update_ARM = strLodop7FontTag + "需升级," + strLodop7HrefARM;
|
||||
var strInstallOK = ",成功后请刷新本页面或重启浏览器。</font>";
|
||||
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
|
||||
@@ -1,24 +1,29 @@
|
||||
<template>
|
||||
<view class="Box flex-between">
|
||||
<view class="content flex-colum" @click="indexInvoicing" v-if="improveinformation">
|
||||
<image src="@/static/item3.png" mode="aspectFill"></image>
|
||||
<text>极速开票</text>
|
||||
<view class="content">
|
||||
<view class="Box flex-between">
|
||||
<view class="content flex-colum" @click="indexInvoicing" v-if="improveinformation">
|
||||
<image src="@/static/item3.png" mode="aspectFill"></image>
|
||||
<text>极速开票</text>
|
||||
</view>
|
||||
<view class="content flex-colum" @click="webview" v-if="improveinformation">
|
||||
<image src="@/static/item2.png" mode="aspectFill"></image>
|
||||
<text>后台管理</text>
|
||||
</view>
|
||||
<view class="content flex-colum" @click="indexorder" v-if="improveinformation">
|
||||
<image src="@/static/item1.png" mode="aspectFill"></image>
|
||||
<text>开票记录</text>
|
||||
</view>
|
||||
<view class="content flex-colum" @click="notification" v-if="improveinformation">
|
||||
<image src="@/static/item6.png" mode="aspectFill"></image>
|
||||
<text>绑定通知</text>
|
||||
</view>
|
||||
<view class="content flex-colum" @click="drawer" v-if="improveinformation">
|
||||
<image src="@/static/item5.png" mode="aspectFill"></image>
|
||||
<text>新增开票员</text>
|
||||
</view>
|
||||
</view>
|
||||
<view class="content flex-colum" @click="webview" v-if="improveinformation">
|
||||
<image src="@/static/item2.png" mode="aspectFill"></image>
|
||||
<text>后台管理</text>
|
||||
</view>
|
||||
<view class="content flex-colum" @click="indexorder" v-if="improveinformation">
|
||||
<image src="@/static/item1.png" mode="aspectFill"></image>
|
||||
<text>开票记录</text>
|
||||
</view>
|
||||
<view class="content flex-colum" @click="notification" v-if="improveinformation">
|
||||
<image src="@/static/item6.png" mode="aspectFill"></image>
|
||||
<text>绑定通知</text>
|
||||
</view>
|
||||
<view class="content flex-colum" @click="drawer" v-if="improveinformation">
|
||||
<image src="@/static/item5.png" mode="aspectFill"></image>
|
||||
<text>新增开票员</text>
|
||||
<view class="setClipboardDataclass" @click="setClipboardData" v-if="infos.deviceType != 'pc'">
|
||||
网页版地址:https://h5-invoice.sxczgkj.cn
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
@@ -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 {
|
||||
|
||||
.content {
|
||||
margin-top: 32rpx;
|
||||
width: 218rpx;
|
||||
height: 218rpx;
|
||||
background: #FFFFFF;
|
||||
padding: 0rpx 28rpx;
|
||||
|
||||
image {
|
||||
width: 60rpx;
|
||||
height: 60rpx;
|
||||
.content {
|
||||
margin-top: 32rpx;
|
||||
width: 30%;
|
||||
height: 218rpx;
|
||||
background: #FFFFFF;
|
||||
|
||||
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;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@@ -12,7 +12,27 @@
|
||||
</view>
|
||||
<view class="content_boxt_towrelative" style="242px;height: 242px;">
|
||||
<canvas id="qrcode" style="242px;height: 242px;" ref="qrcode" canvas-id="qrcode"></canvas>
|
||||
<image class="content_boxt_towabsolute" src="@/static/icons.png" mode=""></image>
|
||||
<!-- <image class="content_boxt_towabsolute" src="@/static/icons.png" mode=""></image> -->
|
||||
</view>
|
||||
<view class="" id="viewtext" ref="viewtext">
|
||||
<div style="width: 100%;font-size: 12px; ">
|
||||
销售方名称:任公司任公司任公司任公司任公司任公司任公司任公司任公司
|
||||
</div>
|
||||
<!-- <div style="width: 100%;font-size: 12px; margin-top: 10rpx;">
|
||||
企业联系电话:18092145635
|
||||
</div> -->
|
||||
<div style="width: 100%;font-size: 12px; margin-top: 10rpx;">
|
||||
开票金额:1135.42
|
||||
</div>
|
||||
<!-- <div style="width: 100%;font-size: 12px;margin-top: 10rpx;">
|
||||
订单号:1775391602999693313
|
||||
</div> -->
|
||||
<div style="width: 100%;font-size: 12px;margin-top: 10rpx;">
|
||||
生成时间:2024-04-03 13:15:17
|
||||
</div>
|
||||
<div style="width: 100%;font-size: 12px;margin-top: 10rpx;">
|
||||
二维码有效期:30天
|
||||
</div>
|
||||
</view>
|
||||
<button @click="print">打印</button>
|
||||
</view>
|
||||
@@ -20,6 +40,7 @@
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import getLodop from '@/common/js/LodopFuncs.js'
|
||||
import uQRCode from '@/uni_modules/Sansnn-uQRCode/js_sdk/uqrcode/uqrcode.js'; // npm install uqrcodejs
|
||||
export default {
|
||||
data() {
|
||||
@@ -43,21 +64,33 @@
|
||||
},
|
||||
methods: {
|
||||
print() {
|
||||
// const receipt = document.getElementById('receipt');
|
||||
// const printWindow = window.open('', '_blank');
|
||||
// printWindow.document.write(receipt.innerHTML);
|
||||
// printWindow.document.close();
|
||||
// printWindow.focus();
|
||||
// printWindow.print();
|
||||
// printWindow.close();
|
||||
let LODOP = getLodop();
|
||||
console.log(LODOP)
|
||||
if (LODOP == null) {
|
||||
alert('请先安装打印控件')
|
||||
return;
|
||||
}
|
||||
LODOP.PRINT_INIT('')
|
||||
// 设置打印纸大小
|
||||
LODOP.SET_PRINT_PAGESIZE(1, 800, '50px', "");
|
||||
// LODOP.SET_PRINT_PAGESIZE(1, 800, '300px', "");
|
||||
|
||||
// // 二维码控制大小
|
||||
// LODOP.ADD_PRINT_BARCODE('', '30px', '150px', '150px', "QRCode", 'https://www.baidu.com'); //打印产品代码条码
|
||||
// LODOP.SET_PRINT_MODE("PRINT_PAGE_PERCENT", "Full-Width "); //设置打印风格,这里是等宽打印
|
||||
// LODOP.SET_PRINTER_INDEX("GP-58MB Series"); //设置默认打印机(这里用的是打印机名称)
|
||||
|
||||
// // 文字内容
|
||||
// var strHTML = document.getElementById('viewtext')
|
||||
// console.log(strHTML.innerHTML)
|
||||
// LODOP.ADD_PRINT_HTM('150px', '5px', "100%", "100%",
|
||||
// `<div style="width: 100%;font-size: 12px; ">销售方名称:${this.ID}</div><div style="width: 100%;font-size: 12px; margin-top:6px;">开票金额:${this.ID}</div><div style="width: 100%;font-size: 12px; margin-top:6px;">生成时间:${this.ID}</div><div style="width: 100%;font-size: 12px; margin-top:6px;">生成时间:${this.ID}</div><div style="width: 100%;font-size: 12px; margin-top:6px;">二维码有效期:30天</div><div style="width: 100%;font-size: 14px; margin-top: 15px;">您可以使用微信,扫码开票</div>`
|
||||
// );
|
||||
LODOP.SET_LICENSES("","DCFF409304DFCEB3E2C644BF96CD0720","","");
|
||||
// LODOP.PREVIEW(); //带预览的打印
|
||||
LODOP.PRINT()
|
||||
|
||||
|
||||
window.print({
|
||||
mediaType: 'print',
|
||||
orientation: 'portrait',
|
||||
pageSize: '50mm',
|
||||
printBackground: true,
|
||||
scale: 0.5
|
||||
});
|
||||
},
|
||||
storeinvoicelist() {
|
||||
uni.request({
|
||||
@@ -69,7 +102,6 @@
|
||||
method: 'POST', //请求方式,必须为大写
|
||||
success: res => {
|
||||
this.datalsit = res.data.data.qrcode;
|
||||
console.log(this.datalsit)
|
||||
// 获取uQRCode实例
|
||||
var qr = new uQRCode();
|
||||
// 设置二维码内容
|
||||
|
||||
@@ -50,6 +50,7 @@
|
||||
import html2canvas from 'html2canvas';
|
||||
// #endif
|
||||
import uQRCode from '@/uni_modules/Sansnn-uQRCode/js_sdk/uqrcode/uqrcode.js'; // npm install uqrcodejs
|
||||
import getLodop from '@/common/js/LodopFuncs.js'
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
@@ -77,6 +78,55 @@
|
||||
},
|
||||
computed: {},
|
||||
methods: {
|
||||
print() {
|
||||
var date = new Date();
|
||||
var year = date.getFullYear(); //月份从0~11,所以加一
|
||||
let month = date.getMonth();
|
||||
var dateArr = [
|
||||
date.getMonth() + 1,
|
||||
date.getDate(),
|
||||
date.getHours(),
|
||||
date.getMinutes(),
|
||||
date.getSeconds(),
|
||||
];
|
||||
//如果格式是MM则需要此步骤,如果是M格式则此循环注释掉
|
||||
for (var i = 0; i < dateArr.length; i++) {
|
||||
if (dateArr[i] >= 1 && dateArr[i] <= 9) {
|
||||
dateArr[i] = "0" + dateArr[i];
|
||||
}
|
||||
}
|
||||
var strDate =
|
||||
year +
|
||||
"-" +
|
||||
dateArr[0] +
|
||||
"-" +
|
||||
dateArr[1] +
|
||||
" " +
|
||||
dateArr[2] +
|
||||
":" +
|
||||
dateArr[3] +
|
||||
":" +
|
||||
dateArr[4];
|
||||
let LODOP = getLodop();
|
||||
if (LODOP == null) {
|
||||
alert('请先安装打印控件')
|
||||
return;
|
||||
}
|
||||
LODOP.PRINT_INIT('')
|
||||
// 设置打印纸大小
|
||||
LODOP.SET_PRINT_PAGESIZE(1, 800, '300px', "");
|
||||
// 二维码控制大小
|
||||
LODOP.ADD_PRINT_BARCODE('', '30px', '150px', '150px', "QRCode", this.datares.url); //打印产品代码条码
|
||||
LODOP.SET_PRINT_MODE("PRINT_PAGE_PERCENT", "Full-Width "); //设置打印风格,这里是等宽打印
|
||||
LODOP.SET_PRINTER_INDEX("GP-58MB Series"); //设置默认打印机(这里用的是打印机名称)
|
||||
// 文字内容
|
||||
LODOP.ADD_PRINT_HTM('150px', '5px', "100%", "100%",
|
||||
`<div style="width: 100%;font-size: 12px; ">销售方名称:${this.datares.title}</div><div style="width: 100%;font-size: 12px; margin-top:6px;">开票金额:${this.datares.price}</div><div style="width: 100%;font-size: 12px; margin-top:6px;">生成时间:${strDate}</div><div style="width: 100%;font-size: 12px; margin-top:6px;">${this.datares.string1}</div><div style="width: 100%;font-size: 14px; margin-top: 15px;">您可以使用微信,扫码开票</div>`
|
||||
);
|
||||
LODOP.SET_LICENSES("", "DCFF409304DFCEB3E2C644BF96CD0720", "", "");
|
||||
// LODOP.PREVIEW(); //带预览的打印
|
||||
LODOP.PRINT()
|
||||
},
|
||||
box_class() {
|
||||
uni.navigateBack();
|
||||
},
|
||||
@@ -148,7 +198,6 @@
|
||||
// 获取uQRCode实例
|
||||
var qr = new uQRCode();
|
||||
// 设置二维码内容
|
||||
console.log(lane)
|
||||
qr.data = this.datares.url;
|
||||
// 设置二维码大小,必须与canvas设置的宽高一致
|
||||
qr.size = this.size;
|
||||
@@ -160,6 +209,12 @@
|
||||
qr.canvasContext = canvasContext;
|
||||
// 调用绘制方法将二维码图案绘制到canvas上
|
||||
qr.drawCanvas();
|
||||
setTimeout(() => {
|
||||
let info = uni.getSystemInfoSync();
|
||||
if (info.deviceType == 'pc') {
|
||||
this.print()
|
||||
}
|
||||
}, 1000)
|
||||
},
|
||||
requestlang() {
|
||||
uni.request({
|
||||
|
||||
2
unpackage/dist/build/web/index.html
vendored
2
unpackage/dist/build/web/index.html
vendored
@@ -1,2 +1,2 @@
|
||||
<!DOCTYPE html><html lang=zh-CN><head><meta charset=utf-8><meta http-equiv=X-UA-Compatible content="IE=edge"><title>发票</title><script>var coverSupport = 'CSS' in window && typeof CSS.supports === 'function' && (CSS.supports('top: env(a)') || CSS.supports('top: constant(a)'))
|
||||
document.write('<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0' + (coverSupport ? ', viewport-fit=cover' : '') + '" />')</script><link rel=stylesheet href=/h5/static/index.2da1efab.css></head><body><noscript><strong>Please enable JavaScript to continue.</strong></noscript><div id=app></div><script src=/h5/static/js/chunk-vendors.ddf13236.js></script><script src=/h5/static/js/index.b3cb82d5.js></script></body></html>
|
||||
document.write('<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0' + (coverSupport ? ', viewport-fit=cover' : '') + '" />')</script><link rel=stylesheet href=/h5/static/index.2da1efab.css></head><body><noscript><strong>Please enable JavaScript to continue.</strong></noscript><div id=app></div><script src=/h5/static/js/chunk-vendors.ddf13236.js></script><script src=/h5/static/js/index.b56741c5.js></script></body></html>
|
||||
Reference in New Issue
Block a user