From 846bb33d3243871c3dc4226e3c054bedc8a71660 Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期五, 26 九月 2025 14:01:17 +0800
Subject: [PATCH] 生产订单页面开发联调
---
src/plugins/socketclient.ts | 147 +++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 147 insertions(+), 0 deletions(-)
diff --git a/src/plugins/socketclient.ts b/src/plugins/socketclient.ts
new file mode 100644
index 0000000..820040e
--- /dev/null
+++ b/src/plugins/socketclient.ts
@@ -0,0 +1,147 @@
+import { getToken } from '@/utils/auth'
+import { generateUUID } from '@/utils/geek';
+let _client: UniApp.SocketTask;
+let _callback: { [key: string]: (data: any) => void } = {}
+const enableJSON = true // 寮�鍚疛SON瑙f瀽娑堟伅锛岄渶瑕佸紑鍚疛SON瑙f瀽娑堟伅鎵嶈兘寮�鍚痷uid鍜宔vent
+const enableJSONEncoding = true // 寮�鍚疛SON娑堟伅缂栫爜
+const enableUUID = true // 闇�瑕佹帴鏀朵俊鎭腑鍖呭惈uuid瀛楁锛寀uid浼樺厛绾ч珮浜巈vent
+const enableEvent = true // 闇�瑕佹帴鏀朵俊鎭腑鍖呭惈event瀛楁
+
+
+export interface SocketConnectConfig extends UniApp.ConnectSocketOption {
+ headers: {
+ isToken: boolean
+ }
+}
+
+export default {
+ /**
+ * 杩炴帴websocket
+ * 鏈�绠�鍗曠殑鐢ㄦ硶灏辨槸浼犲叆{url:"ws://demo"}
+ * 褰撹繛鎺ユ垚鍔熷悗瑙﹀彂鍥炶皟鍑芥暟
+ */
+ connect(config: SocketConnectConfig) {
+ return new Promise((resolve, reject) => {
+ const isToken = (config.headers || {}).isToken === false
+ config.header = config.header || { 'content-type': 'application/json' }
+ if (getToken() && !isToken) {
+ config.header['Authorization'] = 'Bearer ' + getToken()
+ }
+ if(_client !== undefined){
+ _client.close({})
+ }
+ _client = uni.connectSocket({
+ url: config.url,
+ header: config.header,
+ method: config.method || 'GET',
+ fail: reject
+ });
+ _client.onError(reject)
+ _client.onOpen(resolve)
+ _client.onMessage(res => {
+ if(enableJSON){
+ let data = JSON.parse((res || {}).data)
+ if (enableUUID && (data || {}).uuid !== undefined) {
+ _callback[data.uuid](data)
+ } else if (enableEvent && (data || {}).event !== undefined) {
+ _callback[data.event](data)
+ }
+ }
+ })
+ })
+ },
+ /**
+ * 鍙戦�佷俊鎭�
+ * @param msg 娑堟伅锛屼細琚鐞嗘垚json瀛楃涓�
+ * @param uuid 鍞竴鏍囪瘑,鍙互浼犲叆uuid锛屼篃鍙互浼犲叆true鑷姩鐢熸垚uuid锛宖lase琛ㄧず璇ユ秷鎭笉闇�瑕佸崟鐙鐞�
+ * @returns
+ */
+ send(msg: any, uuid: string | boolean = false) {
+ return new Promise((resolve, reject) => {
+ if(enableJSONEncoding){
+ msg = JSON.stringify(msg)
+ }
+ if (enableUUID && uuid != undefined && uuid != "" && uuid != false) {
+ if (uuid === true) {
+ msg.uuid = generateUUID()
+ _callback[msg.uuid] = resolve
+ } else {
+ _callback[uuid] = resolve
+ }
+ }
+ _client.send({
+ data: JSON.stringify(msg),
+ fail: reject
+ })
+ })
+ },
+ /**
+ * 鍏抽棴杩炴帴
+ * @returns 鍏抽棴杩炴帴鐨凱romise锛屽洖璋冨嚱鏁板彧浼氳繍琛屼竴娆�
+ */
+ close() {
+ return new Promise((resolve, reject) => {
+ let onclose = _client.onClose
+ _client.onClose(res => {
+ resolve(res)
+ _client.onClose = onclose
+ })
+ _client.close({
+ fail: reject
+ })
+
+ })
+ },
+ /**
+ * 鐩戝惉浜嬩欢
+ * @param event 瑕佺洃鍚殑浜嬩欢
+ * @returns 鍦ㄥ洖璋冨嚱鏁颁腑澶勭悊浜嬩欢
+ */
+ subscribe(event: string) {
+ return new Promise((resolve) => {
+ _callback[event] = resolve
+ })
+ },
+ /**
+ * 鍙栨秷鐩戝惉浜嬩欢
+ * @param event 瑕佸彇娑堢洃鍚殑浜嬩欢
+ */
+ unsubscribe(event: string) {
+ delete _callback[event]
+ },
+ /**
+ * 瀹氫箟榛樿鐩戝惉浜嬩欢
+ * @param callback 榛樿鐩戝惉浜嬩欢鐨勫鐞嗗嚱鏁�
+ */
+ onMessage(callback: (data: any) => void) {
+ _client.onMessage(res => {
+ if(enableJSON){
+ let data = JSON.parse((res || {}).data)
+ if (enableUUID && (data || {}).uuid !== undefined) {
+ _callback[data.uuid](res)
+ delete _callback[data.uuid]
+ } else if (enableEvent && (data || {}).event !== undefined) {
+ _callback[data.event](res)
+ } else {
+ callback(data)
+ }
+ }else{
+ callback(res.data)
+ }
+ })
+ },
+ /**
+ * 瀹氫箟寮傚父浜嬩欢
+ * @param callback 榛樿寮傚父浜嬩欢鐨勫鐞嗗嚱鏁�
+ */
+ onError(callback: (data: any) => void) {
+ _client.onError(callback)
+ },
+ /**
+ * 瀹氫箟鍏抽棴浜嬩欢
+ * @param callback 榛樿鍏抽棴浜嬩欢鐨勫鐞嗗嚱鏁�
+ */
+ onClose(callback: () => void) {
+ _client.onError(callback)
+ }
+};
\ No newline at end of file
--
Gitblit v1.9.3