Commit c739dee8 authored by wanli's avatar wanli

update

parent f778c0b8
...@@ -82,7 +82,7 @@ class LoginManager(object): ...@@ -82,7 +82,7 @@ class LoginManager(object):
update_login_information(real_ip, result.id) update_login_information(real_ip, result.id)
# 返回token # 返回token
token = Auth.encode_auth_token(result.id, result.username) # 生成 token token = Auth.encode_auth_token(result.id, result.username, str(result.uuid)) # 生成 token
# setattr(result, 'token', token) # setattr(result, 'token', token)
return { 'token': token, 'id': result.id, 'username': result.username }, ResponseCode.OK return { 'token': token, 'id': result.id, 'username': result.username }, ResponseCode.OK
......
...@@ -5,7 +5,6 @@ import logging ...@@ -5,7 +5,6 @@ import logging
import copy import copy
from datetime import datetime from datetime import datetime
from pony.orm import * from pony.orm import *
from flask import request
from model import fullStackDB from model import fullStackDB
from model.user import User from model.user import User
from utils import md5_salt from utils import md5_salt
...@@ -27,7 +26,7 @@ class UserManager(object): ...@@ -27,7 +26,7 @@ class UserManager(object):
return False return False
return True return True
def add(self, data): def add(self, uuid, data):
''' '''
添加用户 添加用户
''' '''
...@@ -37,7 +36,7 @@ class UserManager(object): ...@@ -37,7 +36,7 @@ class UserManager(object):
if isExists: if isExists:
return False, "user already exists" return False, "user already exists"
editor = User.get(id=request.current_user.get("id")) editor = User.get(uuid=uuid)
if not editor: if not editor:
return False, "current user is not exists" return False, "current user is not exists"
...@@ -62,7 +61,7 @@ class UserManager(object): ...@@ -62,7 +61,7 @@ class UserManager(object):
删除用户 删除用户
''' '''
with db_session: with db_session:
editor = User.get(id=request.current_user.get("id")) editor = User.get(uuid=uuid)
if not editor: if not editor:
return False, "current user is not exists" return False, "current user is not exists"
...@@ -84,7 +83,7 @@ class UserManager(object): ...@@ -84,7 +83,7 @@ class UserManager(object):
with db_session: with db_session:
# 查询请求者是否存在 # 查询请求者是否存在
editor = User.get(id=request.current_user.get("id")) editor = User.get(uuid=uuid)
if not editor: if not editor:
return False, "current user is not exists" return False, "current user is not exists"
...@@ -101,12 +100,12 @@ class UserManager(object): ...@@ -101,12 +100,12 @@ class UserManager(object):
else: else:
return None, "user does not exists" return None, "user does not exists"
def get(self): def get(self, user):
''' '''
查询单用户 查询单用户
''' '''
result = User.get(id=request.current_user.get("id"), is_delete=False) result = User.get(id=user, is_delete=False)
if result: if result:
temp = result.to_dict(with_collections=True, related_objects=True, only=["uuid", "username", "account", "role", "phone", "email", "gender", "create_at", "update_at"]) temp = result.to_dict(with_collections=True, related_objects=True, only=["uuid", "username", "account", "role", "phone", "email", "gender", "create_at", "update_at"])
temp.update({ temp.update({
......
...@@ -33,7 +33,7 @@ class Auth(object): ...@@ -33,7 +33,7 @@ class Auth(object):
return inner return inner
@staticmethod @staticmethod
def encode_auth_token(user_id, username): def encode_auth_token(user_id, username, uuid):
""" """
生成认证Token 生成认证Token
:param user_id: int :param user_id: int
...@@ -49,6 +49,7 @@ class Auth(object): ...@@ -49,6 +49,7 @@ class Auth(object):
'sub': user_id, # token所属者 'sub': user_id, # token所属者
'data': { # payload 'data': { # payload
'id': user_id, 'id': user_id,
'uuid': uuid,
'username': username 'username': username
} }
} }
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
import uuid import uuid
from datetime import datetime from datetime import datetime
from pony.orm import PrimaryKey, Required, Optional, Set, LongStr, Json from pony.orm import PrimaryKey, Required, Optional, LongStr
from app import config from app import config
from . import fullStackDB from . import fullStackDB
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
import uuid import uuid
from datetime import datetime from datetime import datetime
from pony.orm import PrimaryKey, Required, Optional, Set, Json from pony.orm import PrimaryKey, Required, Optional, Json
from app import config from app import config
from . import fullStackDB from . import fullStackDB
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
import uuid import uuid
from datetime import datetime from datetime import datetime
from pony.orm import PrimaryKey, Required, Optional, Set from pony.orm import PrimaryKey, Required, Optional
from app import config from app import config
from . import fullStackDB from . import fullStackDB
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
import uuid import uuid
from datetime import datetime from datetime import datetime
from pony.orm import PrimaryKey, Required, Optional, Set, LongStr, Json from pony.orm import PrimaryKey, Required, Optional, Set
from app import config from app import config
from . import fullStackDB from . import fullStackDB
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
import uuid import uuid
from datetime import datetime from datetime import datetime
from pony.orm import PrimaryKey, Required, Optional, Set, LongStr, Json from pony.orm import PrimaryKey, Required, Optional, Json
from app import config from app import config
from . import fullStackDB from . import fullStackDB
......
'''
Author: your name
Date: 2021-04-14 14:12:18
LastEditTime: 2021-07-01 18:24:18
LastEditors: Please set LastEditors
Description: In User Settings Edit
FilePath: \evm-store\backend\model\device.py
'''
#!/usr/bin/env python #!/usr/bin/env python
# -*- coding: utf_8 -*- # -*- coding: utf_8 -*-
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
import uuid import uuid
from datetime import datetime from datetime import datetime
from pony.orm import PrimaryKey, Required, Optional, Set from pony.orm import PrimaryKey, Required, Optional
from app import config from app import config
from . import fullStackDB from . import fullStackDB
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
import uuid import uuid
from datetime import datetime from datetime import datetime
from pony.orm import PrimaryKey, Required, Optional, Set from pony.orm import PrimaryKey, Required, Optional
from app import config from app import config
from . import fullStackDB from . import fullStackDB
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
import uuid import uuid
from datetime import datetime from datetime import datetime
from pony.orm import PrimaryKey, Required, Optional, Set, Json from pony.orm import PrimaryKey, Required, Optional
from app import config from app import config
from . import fullStackDB from . import fullStackDB
......
'''
Author: your name
Date: 2021-04-14 14:12:18
LastEditTime: 2021-07-01 18:26:25
LastEditors: Please set LastEditors
Description: In User Settings Edit
FilePath: \evm-store\backend\model\monitor.py
'''
#!/usr/bin/env python #!/usr/bin/env python
# -*- coding: utf_8 -*- # -*- coding: utf_8 -*-
...@@ -14,9 +6,9 @@ import uuid ...@@ -14,9 +6,9 @@ import uuid
from app.setting import config from app.setting import config
from datetime import datetime from datetime import datetime
from sqlalchemy import create_engine from sqlalchemy import create_engine
from sqlalchemy import func, Column, Integer, String, Float, DateTime, Numeric, Boolean from sqlalchemy import func, Column, Integer, String, DateTime, Boolean
from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker, class_mapper, object_mapper from sqlalchemy.orm import sessionmaker, class_mapper
engine = create_engine('sqlite:///{}?check_same_thread=False'.format(config.get("DATABASE")), echo=False) engine = create_engine('sqlite:///{}?check_same_thread=False'.format(config.get("DATABASE")), echo=False)
...@@ -137,6 +129,11 @@ class Image(Base): ...@@ -137,6 +129,11 @@ class Image(Base):
def to_dict(self): def to_dict(self):
return {c.name: getattr(self, c.name) for c in self.__table__.columns} return {c.name: getattr(self, c.name) for c in self.__table__.columns}
class User(Base):
__tablename__ = "{}".format(config['TABLE_PREFIX']) + "user"
id = Column(Integer, primary_key=True, autoincrement=True)
uuid = Column(String(64), default=uuid.uuid1, index=True)
class Device(Base): class Device(Base):
__tablename__ = "{}".format(config['TABLE_PREFIX']) + "device" __tablename__ = "{}".format(config['TABLE_PREFIX']) + "device"
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
import uuid import uuid
from datetime import datetime, date from datetime import datetime, date
from pony.orm import PrimaryKey, Required, Optional, Set, Json from pony.orm import PrimaryKey, Required, Optional, Set
from app import config from app import config
from . import fullStackDB from . import fullStackDB
......
''' '''
Author: your name Author: your name
Date: 2021-04-14 14:12:18 Date: 2021-04-14 14:12:18
LastEditTime: 2021-07-01 15:37:43 LastEditTime: 2021-07-03 17:26:02
LastEditors: Please set LastEditors LastEditors: Please set LastEditors
Description: In User Settings Edit Description: In User Settings Edit
FilePath: \evm-store\backend\start.py FilePath: \evm-store\backend\start.py
...@@ -12,12 +12,12 @@ import sys ...@@ -12,12 +12,12 @@ import sys
import os import os
import signal import signal
import json import json
from typing import ( Any,)
# import tornado.autoreload # import tornado.autoreload
from tornado.wsgi import WSGIContainer from tornado.wsgi import WSGIContainer
from tornado.web import Application, RequestHandler, FallbackHandler from tornado.web import Application, RequestHandler, FallbackHandler
from tornado.ioloop import IOLoop from tornado.ioloop import IOLoop
from tornado.autoreload import watch from tornado.autoreload import watch
from fullstack.log import logger
from view import app from view import app
from view.monitor import DeviceMessageHandler, NotifyHandler, WatchHandler from view.monitor import DeviceMessageHandler, NotifyHandler, WatchHandler
from app import config from app import config
......
''' '''
Author: your name Author: your name
Date: 2021-06-29 19:33:41 Date: 2021-06-29 19:33:41
LastEditTime: 2021-07-03 09:33:58 LastEditTime: 2021-07-05 09:26:59
LastEditors: Please set LastEditors LastEditors: Please set LastEditors
Description: In User Settings Edit Description: In User Settings Edit
FilePath: \evm-store\backend\view\monitor.py FilePath: \evm-store\backend\view\monitor.py
''' '''
import tornado.ioloop import tornado.ioloop
import tornado.web import tornado.web
from tornado import httputil
from tornado.web import RequestHandler, StaticFileHandler from tornado.web import RequestHandler, StaticFileHandler
from tornado.websocket import WebSocketHandler, WebSocketClosedError from tornado.websocket import WebSocketHandler, WebSocketClosedError
import json import json
...@@ -17,9 +18,11 @@ import logging ...@@ -17,9 +18,11 @@ import logging
import pprint import pprint
import traceback import traceback
import jwt import jwt
from typing import ( Any,)
from threading import Timer from threading import Timer
from datetime import datetime, timedelta from datetime import datetime, timedelta
from app import config, signalManager from app import config
from model.monitor import session, Device, User
from controller.monitor import insert_data, get_monitor_list, get_watch_list from controller.monitor import insert_data, get_monitor_list, get_watch_list
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
...@@ -78,11 +81,11 @@ def pushmessage(func): ...@@ -78,11 +81,11 @@ def pushmessage(func):
msg, binary = ret msg, binary = ret
try: try:
if isinstance(msg, WebsocketResponse) or isinstance(msg, dict): if isinstance(msg, WebsocketResponse) or isinstance(msg, dict):
self.write_message(json.dumps(msg), binary) self.write(json.dumps(msg), binary)
elif isinstance(msg, str) or isinstance(msg, str): elif isinstance(msg, str) or isinstance(msg, str):
self.write_message(msg, binary) self.write(msg, binary)
else: else:
self.write_message(repr(msg), binary) self.write(repr(msg), binary)
except WebSocketClosedError as e: except WebSocketClosedError as e:
logger.error(e) logger.error(e)
self.on_close() self.on_close()
...@@ -91,6 +94,7 @@ def pushmessage(func): ...@@ -91,6 +94,7 @@ def pushmessage(func):
class BaseWebsocket(WebSocketHandler): class BaseWebsocket(WebSocketHandler):
_clients = [] _clients = []
handlers = {} handlers = {}
def open(self): def open(self):
# 新加入一个连接后,设置一个接收消息时间戳 # 新加入一个连接后,设置一个接收消息时间戳
# 同时查询改用可以查看哪些设备 # 同时查询改用可以查看哪些设备
...@@ -115,6 +119,7 @@ class BaseWebsocket(WebSocketHandler): ...@@ -115,6 +119,7 @@ class BaseWebsocket(WebSocketHandler):
className = self.__class__.__name__ className = self.__class__.__name__
logger.warning("websocket of %s is closed" % className) logger.warning("websocket of %s is closed" % className)
if className in self.handlers: if className in self.handlers:
print("122 ======>", type(self.handlers), type(className), type(self.handlers[className]))
self.handlers[className].remove(self) self.handlers[className].remove(self)
def check_origin(self, origin): def check_origin(self, origin):
...@@ -123,66 +128,96 @@ class BaseWebsocket(WebSocketHandler): ...@@ -123,66 +128,96 @@ class BaseWebsocket(WebSocketHandler):
@classmethod @classmethod
def broadcastMessage(cls, message, binary=False): def broadcastMessage(cls, message, binary=False):
className = cls.__name__
pprint.pprint(cls.handlers) pprint.pprint(cls.handlers)
message = json.dumps(message) if not message.get("imei"):
return False
for item in cls._clients:
if message.get("imei") in item.get("devices", []):
item.get("context").send(json.dumps(message), binary)
# print(id(item.get("context")))
if className in cls.handlers: # className = cls.__name__
for handler in cls.handlers[className]: # message = json.dumps(message)
handler.send(message, binary) # if className in cls.handlers:
# for handler in cls.handlers[className]:
# # 判断用户能否查看该设备
# handler.send(message, binary)
class NotifyHandler(BaseWebsocket): class NotifyHandler(BaseWebsocket):
""" """
建立与web前端的通信连接,发送状态信息报文 建立与web前端的通信连接,发送状态信息报文
""" """
_timer = None _timer = None
def __init__(self, application: tornado.web.Application, request: httputil.HTTPServerRequest, **kwargs: Any) -> None:
super().__init__(application, request, **kwargs)
self.on_heartbeat()
def open(self): def open(self):
super(NotifyHandler, self).open() super(NotifyHandler, self).open()
def on_message(self, message): def on_message(self, message):
className = self.__class__.__name__ className = self.__class__.__name__
# 收到心跳包消息,更新接收数据时间 message = json.loads(message)
try: try:
# 判断消息类型
if message.get("type"): if message.get("type"):
if message.get("type") == "auth":
# 获取token值,检验正确与否,获取uuid # 获取token值,检验正确与否,获取uuid
payload = jwt.decode(message.get("token"), config['SECRET_KEY'], verify=True, algorithms=['HS256'], options={'require': ['exp', 'iss', 'sub', 'aud', 'iat', 'data']}, audience="bytecode") payload = jwt.decode(message.get("token"), config['SECRET_KEY'], verify=True, algorithms=['HS256'], options={'require': ['exp', 'iss', 'sub', 'aud', 'iat', 'data']}, audience="bytecode")
print(payload)
result = signalManager.actionCheckUser.emit(message.get("uuid"))
# 判断消息类型
# 认证包,认证不通过,则剔除该连接 # 认证包,认证不通过,则剔除该连接
if message.get("type") == "auth":
if not message.get("token"):
self.write(json.dumps({ "code": 400, "data": None, "msg": "token can not be null" }))
return
user = session.query(User).filter(User.id == payload.get("data").get("id")).all()
if not user:
self.write_message(json.dumps({ "code": 400, "data": None, "msg": "user not exists" }))
# self.close()
return
# 查询该用户可查看设备 # 查询该用户可查看设备
devices = session.query(Device).filter(Device.create_by==payload.get("data").get("id")).all()
if len(devices):
self._clients.append({ self._clients.append({
'uuid': '', 'uuid': payload.get("data").get("uuid"),
'context': self, 'context': self,
'devices': [], 'devices': lambda d:d.imei,
'ts': int(time.time()) 'ts': int(time.time())
}) })
self.write_message(json.dumps({ 'code': 200, 'data': None, 'msg': 'auth passed' }))
return result else: # 没有设备,是否断开连接
self.write_message(json.dumps({ 'code': 400, 'data': None, 'msg': 'no devices' }))
# self.close()
elif message.get("type") == "heartbeat": # 心跳包 elif message.get("type") == "heartbeat": # 心跳包
# 收到心跳包消息,更新接收数据时间
for c in self._clients: for c in self._clients:
if c.get("uuid") == message.get("uuid"): if c.get("uuid") == payload.get("data").get("uuid"):
c["ts"] = int(time.time()) c["ts"] = int(time.time())
self.write(json.dumps({ 'code': 200, 'data': None, 'msg': 'update session timestamp success' })) self.write_message(json.dumps({ 'code': 200, 'data': None, 'msg': 'update session timestamp success' }))
break break
else: else:
self.write(json.dumps({ 'code': 200, 'data': None, 'msg': 'unkonw message packet, disconnect by server' })) self.write_message(json.dumps({ 'code': 200, 'data': None, 'msg': 'unkonw message packet, disconnect by server' }))
self.handlers[className].remove(self) self.handlers[className].remove(self)
except Exception as e: except Exception as e:
self.handlers[className].remove(self) self.handlers[className].remove(self)
logger.error(e) logger.error(e)
print("hello,world", message)
logger.info(message) logger.info(message)
def on_heartbeat(self): def on_heartbeat(self):
className = self.__class__.__name__
# 心跳定时器,固定间隔扫描连接列表,当连接超时,主动剔除该连接 # 心跳定时器,固定间隔扫描连接列表,当连接超时,主动剔除该连接
for i in range(len(self._clients) - 1, -1, -1):
if int(time.time()) - self._clients[i].get("ts") > 5:
self._clients.remove(self._clients[i])
if self.handlers.get(className, None):
self.handlers[className].remove(self)
self._timer = Timer(5, self.on_heartbeat) self._timer = Timer(1, self.on_heartbeat)
self._timer.start() self._timer.start()
class MainHandler(BaseHandler): class MainHandler(BaseHandler):
...@@ -231,9 +266,7 @@ class WatchHandler(BaseHandler): ...@@ -231,9 +266,7 @@ class WatchHandler(BaseHandler):
def post(self): def post(self):
data = tornado.escape.json_decode(self.request.body) data = tornado.escape.json_decode(self.request.body)
print("=====>", data, type(data)) self.write(json.dumps({ 'code': 100, 'data': data, 'msg': 'success' }))
self.write(json.dumps({ 'code': 100, 'msg': 'success' }))
class DeviceMessageHandler(BaseHandler): class DeviceMessageHandler(BaseHandler):
def get(self): def get(self):
......
...@@ -21,7 +21,7 @@ def add(): ...@@ -21,7 +21,7 @@ def add():
新增用户 新增用户
''' '''
try: try:
isSuccess, message = signalManager.actionAddUser.emit(request.schema_data) isSuccess, message = signalManager.actionAddUser.emit(request.current_user.get("id"), request.schema_data)
if isSuccess: if isSuccess:
return response_result(ResponseCode.OK, msg=message) return response_result(ResponseCode.OK, msg=message)
else: else:
...@@ -58,7 +58,7 @@ def get(): ...@@ -58,7 +58,7 @@ def get():
查找单个用户 查找单个用户
''' '''
try: try:
result, message = signalManager.actionGetUser.emit() result, message = signalManager.actionGetUser.emit(request.current_user.get("id"))
if result: if result:
return response_result(ResponseCode.OK, data=result, msg=message) return response_result(ResponseCode.OK, data=result, msg=message)
else: else:
......
import router from "./router"; import router from "@/router";
import store from "@/store"; // get token from cookie import store from "@/store";
import NProgress from "nprogress"; // progress bar import NProgress from "nprogress";
import "nprogress/nprogress.css"; // progress bar style import "nprogress/nprogress.css";
import { getPageTitle } from "@/utils/index"; import { getPageTitle } from "@/utils/index";
const whiteList = ["/login", "/register"]; const whiteList = ["/login", "/register"];
......
/* /*
* @Author: your name * @Author: your name
* @Date: 2021-07-01 15:02:16 * @Date: 2021-07-01 15:02:16
* @LastEditTime: 2021-07-01 18:20:04 * @LastEditTime: 2021-07-03 19:50:11
* @LastEditors: Please set LastEditors * @LastEditors: Please set LastEditors
* @Description: In User Settings Edit * @Description: In User Settings Edit
* @FilePath: \evm-store\frontend\src\utils\eventBus.js * @FilePath: \evm-store\frontend\src\utils\eventBus.js
...@@ -15,6 +15,7 @@ ...@@ -15,6 +15,7 @@
* @FilePath: \evm-store\frontend\src\utils\wsNotify.js * @FilePath: \evm-store\frontend\src\utils\wsNotify.js
*/ */
import Vue from "vue"; import Vue from "vue";
import store from "@/store";
export const wsNotify = new WebSocket( export const wsNotify = new WebSocket(
`ws://${window.location.hostname}:3000/ws/v1/notify` `ws://${window.location.hostname}:3000/ws/v1/notify`
...@@ -24,9 +25,14 @@ window.wsNotify = wsNotify; ...@@ -24,9 +25,14 @@ window.wsNotify = wsNotify;
wsNotify.eventBus = new Vue(); wsNotify.eventBus = new Vue();
let timer = null;
wsNotify.onopen = function (event) { wsNotify.onopen = function (event) {
console.log("websocket is conneted!", event); console.log("websocket is conneted!", event);
wsNotify.eventBus.$emit("open", event); wsNotify.eventBus.$emit("open", event);
timer = setInterval(function() {
wsNotify.send(JSON.stringify({ type: 'heartbeat', ts: Date.now(), token: store.getters.token }))
}, 1000)
}; };
wsNotify.onmessage = function (event) { wsNotify.onmessage = function (event) {
...@@ -37,9 +43,11 @@ wsNotify.onmessage = function (event) { ...@@ -37,9 +43,11 @@ wsNotify.onmessage = function (event) {
wsNotify.onerror = function (error) { wsNotify.onerror = function (error) {
console.log(error); console.log(error);
wsNotify.eventBus.$emit("error", error); wsNotify.eventBus.$emit("error", error);
if (timer) clearInterval(timer);
}; };
wsNotify.onclose = function (event) { wsNotify.onclose = function (event) {
console.log("websocket is colosed!", event); console.log("websocket is colosed!", event);
wsNotify.eventBus.$emit("close", event); wsNotify.eventBus.$emit("close", event);
if (timer) clearInterval(timer);
}; };
...@@ -246,33 +246,8 @@ export default { ...@@ -246,33 +246,8 @@ export default {
}; };
}, },
methods: { methods: {
initWebSocket() {
if ("WebSocket" in window) {
this.socket = new WebSocket(
`ws://${window.location.hostname}:3000/ws/v1/notify`
);
this.socket.onopen = () => {
console.log("连接成功");
this.sendMsg();
};
this.socket.onmessage = (evt) => {
var message = evt.data;
message = JSON.parse(message);
console.log(message);
this.handleMessage(message);
};
this.socket.onclose = function (res) {
console.log("断开了连接", res);
};
this.socket.onerror = function (err) {
console.log(err);
};
} else {
console.log("浏览器不支持WebSocket");
}
},
sendMsg() { sendMsg() {
var message = "hello,world"; let message = JSON.stringify({ type: "auth", token: this.$store.getters.token });
this.socket.send(message); this.socket.send(message);
}, },
handleMessage(msg) { handleMessage(msg) {
...@@ -311,7 +286,7 @@ export default { ...@@ -311,7 +286,7 @@ export default {
this.image.forEach((img) => { this.image.forEach((img) => {
uris.push(img.uri) uris.push(img.uri)
}); });
msg.image.forEach((item) => { msg.image && msg.image.forEach((item) => {
if (!uris.includes(item.uri)) { if (!uris.includes(item.uri)) {
this.image.push(item) this.image.push(item)
} }
...@@ -344,7 +319,6 @@ export default { ...@@ -344,7 +319,6 @@ export default {
this.handleMessage(message); this.handleMessage(message);
}); });
}); });
// this.initWebSocket();
}, },
}; };
</script> </script>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment