小票打印机

This commit is contained in:
jjLv 2025-09-11 14:48:13 +08:00
parent 854c120920
commit 36aef6744f
3 changed files with 1137 additions and 744 deletions

192
src/utils/printer/Common.js Normal file
View File

@ -0,0 +1,192 @@
var port = 18080;
var connectionMode = "ws:";
var wsPrint = null;
let wsGetPrinterList = null;
var CHUNK_SIZE = 1024 * 64;
const WebSocketPrint = function (serverURL, strPrinterName, request, callback) {
var _websocket;
var _callback = callback;
var _request = request;
var _connectedsocket = false;
var onMessage = function (msg) {
if (_websocket.readyState == 1) {
var res = JSON.parse(msg.data);
var ret = res.statusMessage;
var printerStatus;
if (res.printerStatus !== undefined) {
printerStatus = res.printerStatus.message;
ret += ":" + printerStatus;
}
_callback(res);
} else {
_callback(msg.data);
}
};
var onClose = function (msg) {
if (!_connectedsocket) {
_callback("Cannot connect to server");
}
_websocket.close();
_connectedsocket = false;
wsPrint = null;
};
var webSocketInit = function (uri) {
_websocket = new WebSocket(uri);
_websocket.binaryType = "arraybuffer";
_websocket.onopen = function (event) {
console.log("open : " + uri);
};
_websocket.onerror = function (event) {
wsPrint = null;
if (_websocket.readyState == 3) {
_callback("Cannot connect to server");
}
};
_websocket.onmessage = function (msg) {
onMessage(msg);
};
_websocket.onclose = function (msg) {
onClose(msg);
};
};
webSocketInit(serverURL + strPrinterName + _request);
this.send = function (data) {
const sendData = () => {
for (let i = 0; i < data.length; i += CHUNK_SIZE) {
const chunk = data.slice(i, i + CHUNK_SIZE);
_websocket.send(chunk);
}
};
if (_websocket.readyState === WebSocket.OPEN) {
sendData();
} else if (_websocket.readyState === WebSocket.CONNECTING) {
const originalOnOpen = _websocket.onopen;
_websocket.onopen = function(event) {
if (originalOnOpen) originalOnOpen(event);
sendData();
_connectedsocket = true;
};
}
};
this.disconnect = function () {
if (_websocket && _websocket.readyState === WebSocket.OPEN) {
console.log("Closing WebSocket connection...");
_websocket.close();
}
};
};
const WebSocketGetPrinterList = function (serverURL, callback) {
var _websocket;
var _callback = callback;
var _connectedsocket = false;
var onMessage = function (msg) {
if (_websocket.readyState == 1) {
var res = JSON.parse(msg.data);
_callback(res);
} else {
a;
_callback(msg.data);
}
};
var onClose = function (msg) {
if (!_connectedsocket) {
_callback("Cannot connect to server");
}
_websocket.close();
_connectedsocket = false;
wsGetPrinterList = null;
};
var webSocketInit = function (uri) {
_websocket = new WebSocket(uri);
_websocket.onopen = function (event) {
console.log("open : " + uri);
};
_websocket.onerror = function (event) {
wsGetPrinterList = null;
if (_websocket.readyState == 3) {
_callback("Cannot connect to server");
}
};
_websocket.onmessage = function (msg) {
onMessage(msg);
};
_websocket.onclose = function (msg) {
console.log("WebSocket connection closed");
onClose(msg);
};
};
webSocketInit(serverURL);
this.send = function (strSubmit) {
if (_websocket.readyState == 1) {
_websocket.send(strSubmit);
} else {
_websocket.onopen = function () {
if (_websocket.readyState == 1) {
_websocket.send(strSubmit);
_connectedsocket = true;
}
};
}
};
};
function setPort(serverPort) {
port = serverPort;
}
function getServerURL() {
var localAddress = `//127.0.0.1:${port}/WebSDK/`;
var serverURL = connectionMode + localAddress;
return {
url: serverURL,
};
}
function setConnectionMode(mode) {
connectionMode = mode;
}
function requestPrint(strPrinterName, strSubmit, _callback) {
_callback("");
var serverURL = getServerURL().url;
console.log(serverURL);
if (wsPrint == null)
wsPrint = new WebSocketPrint(serverURL, strPrinterName, "", _callback);
const encoder = new TextEncoder();
const bytesSubmit = encoder.encode(strSubmit);
wsPrint.send(bytesSubmit);
}
function getPrinterList(category, _callback) {
var serverURL = getServerURL().url + "getPrinterList";
if (wsGetPrinterList == null) {
wsGetPrinterList = new WebSocketGetPrinterList(serverURL, _callback);
}
wsGetPrinterList.send(JSON.stringify(category));
}
export {
setPort,
getServerURL,
setConnectionMode,
requestPrint,
getPrinterList,
wsPrint,
WebSocketPrint,
WebSocketGetPrinterList
}

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff