Commit b4570cc6 authored by wanli's avatar wanli

update

parent 4ff82ce3
<!--
* @Author: your name
* @Date: 2021-04-14 14:12:18
* @LastEditTime: 2021-07-03 11:33:36
* @LastEditors: Please set LastEditors
* @Description: In User Settings Edit
* @FilePath: \evm-store\README.md
-->
# evm-store # evm-store
EVM应用商店 EVM应用商店
...@@ -25,3 +33,9 @@ pip3 install -r requirements.txt ...@@ -25,3 +33,9 @@ pip3 install -r requirements.txt
``` ```
pip freeze > requirements.txt pip freeze > requirements.txt
``` ```
# 应用商店
# 运营平台用户前端
> https://appstore.huawei.com/
{
"appList": [
{
"uuid": "001",
"img": "alipay.png",
"title": "支付宝",
"arrow": "setup.png",
"download": 120,
"like": 76,
"category": "1016",
"details": {
"version": "1.0.1",
"update": "2021-04-01",
"size": 20,
"log": "优化性能,提高稳定性和安全性",
"desc": "生活好,支付宝"
}
},
{
"uuid": "123",
"img": "qq.png",
"title": "腾讯QQ",
"arrow": "setup.png",
"download": 111,
"like": 70,
"category": "1016",
"details": {
"version": "0.0.2",
"update": "2021-04-02",
"size": 22,
"log": "修复若干已知问题",
"desc": "QQ,乐在沟通"
}
},
{
"uuid": "456",
"img": "qq_music.png",
"title": "QQ音乐",
"arrow": "setup.png",
"download": 100,
"like": 71,
"category": "1012",
"details": {
"version": "0.0.3",
"update": "2021-04-03",
"size": 32,
"log": "优化性能,提高稳定性和安全性",
"desc": "十五年的陪伴,国民音乐平台"
}
},
{
"uuid": "789",
"img": "360kids.png",
"title": "360儿童卫士",
"arrow": "setup.png",
"download": 100,
"like": 56,
"category": "1016",
"details": {
"version": "0.0.5",
"update": "2021-04-05",
"size": 36,
"log": "优化性能,提高稳定性和安全性",
"desc": "千万家长信任的育学助手"
}
},
{
"uuid": "1011",
"img": "baidutieba.png",
"title": "百度贴吧",
"arrow": "setup.png",
"download": 100,
"like": 78,
"category": "1016",
"details": {
"version": "0.0.4",
"update": "2021-04-04",
"size": 25,
"log": "优化性能,提高稳定性和安全性",
"desc": "聊兴趣,上贴吧"
}
},
{
"uuid": "1012",
"img": "aiqiyi.png",
"title": "爱奇艺",
"arrow": "setup.png",
"download": 79,
"like": 76,
"category": "1013",
"details": {
"version": "0.0.3",
"update": "2021-04-03",
"size": 41,
"log": "优化性能,提高稳定性和安全性",
"desc": "欧洲杯免费直播"
}
},
{
"uuid": "1013",
"img": "yy.png",
"title": "YY语音",
"arrow": "setup.png",
"download": 120,
"like": 45,
"category": "1015",
"details": {
"version": "0.0.3",
"update": "2021-04-03",
"size": 32,
"log": "优化性能,提高稳定性和安全性",
"desc": "和附近的聊天看直播"
}
},
{
"uuid": "1014",
"img": "didi.png",
"title": "滴滴打车",
"arrow": "setup.png",
"download": 34,
"like": 55,
"category": "1016",
"details": {
"version": "0.0.3",
"update": "2021-04-03",
"size": 32,
"log": "优化性能,提高稳定性和安全性",
"desc": "滴滴一下,美好出行"
}
},
{
"uuid": "1015",
"img": "gaode.png",
"title": "高德地图",
"arrow": "setup.png",
"download": 29,
"like": 59,
"category": "1016",
"details": {
"version": "0.0.3",
"update": "2021-04-03",
"size": 32,
"log": "优化性能,提高稳定性和安全性",
"desc": "专享88元打车礼包"
}
}
],
"categoryList": [
{
"uuid": "1012",
"img": "music.png",
"title": "音乐"
},
{
"uuid": "1013",
"img": "movie.png",
"title": "视频"
},
{
"uuid": "1014",
"img": "camera.png",
"title": "相机"
},
{
"uuid": "1015",
"img": "voice.png",
"title": "语音"
},
{
"uuid": "1016",
"img": "tool.png",
"title": "工具"
}
],
"downloadList": [
{
"icon": "360kids.png",
"time": 1625648308210,
"iconUrl": "http://store.evmiot.com/application/360kids.png",
"apkId": "789",
"version": "v1.0",
"homePage": "evue_album",
"apkDownloadUrl": "evue_album",
"fileList": "360kids"
},
{
"icon": "qq_music.png",
"time": 1625648308210,
"iconUrl": "http://store.evmiot.com/application/qq_music.png",
"apkId": "456",
"version": "v1.0",
"homePage": "evue_music",
"apkDownloadUrl": "evue_music",
"fileList": "qq_music"
},
{
"icon": "gaode.png",
"time": 1625648308210,
"iconUrl": "http://store.evmiot.com/application/gaode.png",
"apkId": "1015",
"version": "v1.0",
"homePage": "evue_dial",
"apkDownloadUrl": "evue_dial",
"fileList": "gaode"
},
{
"icon": "didi.png",
"time": 1625648308210,
"iconUrl": "http://store.evmiot.com/application/didi.png",
"apkId": "1014",
"version": "v1.0",
"homePage": "evue_setting",
"apkDownloadUrl": "evue_setting",
"fileList": "didi"
},
{
"icon": "alipay.png",
"time": 1625648308210,
"iconUrl": "http://store.evmiot.com/application/zhifubao.png",
"apkId": "001",
"version": "v1.0",
"homePage": "evue_calculator",
"apkDownloadUrl": "evue_calculator",
"fileList": "alipay"
}
]
}
\ No newline at end of file
''' '''
Author: your name Author: your name
Date: 2021-04-14 14:12:18 Date: 2021-04-14 14:12:18
LastEditTime: 2021-06-22 12:40:53 LastEditTime: 2021-07-03 11:53:43
LastEditors: Please set LastEditors LastEditors: Please set LastEditors
Description: In User Settings Edit Description: In User Settings Edit
FilePath: \evm-store\backend\app\signal_manager.py FilePath: \evm-store\backend\app\signal_manager.py
...@@ -39,19 +39,13 @@ class SignalManager(object): ...@@ -39,19 +39,13 @@ class SignalManager(object):
actionDeleteBuildLog = PySignal() actionDeleteBuildLog = PySignal()
# 用户模块 # 用户模块
actionCheckUser = PySignal()
actionAddUser = PySignal() actionAddUser = PySignal()
actionDeleteUser = PySignal() actionDeleteUser = PySignal()
actionGetUser = PySignal() actionGetUser = PySignal()
actionGetUserList = PySignal() actionGetUserList = PySignal()
actionUpdateUser = PySignal() actionUpdateUser = PySignal()
# 文件附件模块
actionAddAnnex = PySignal()
actionDeleteAnnex = PySignal()
actionGetAnnex = PySignal()
actionGetAnnexList = PySignal()
actionUpdateAnnex = PySignal()
# 系统框架模块 # 系统框架模块
actionAddDevice = PySignal() actionAddDevice = PySignal()
actionDeleteDevice = PySignal() actionDeleteDevice = PySignal()
...@@ -80,13 +74,6 @@ class SignalManager(object): ...@@ -80,13 +74,6 @@ class SignalManager(object):
actionGetLoginLogsList = PySignal() actionGetLoginLogsList = PySignal()
actionUpdateLoginLogs = PySignal() actionUpdateLoginLogs = PySignal()
# 系统菜单
actionAddMenu = PySignal()
actionDeleteMenu = PySignal()
actionGetMenu = PySignal()
actionGetMenuList = PySignal()
actionUpdateMenu = PySignal()
def __init__(self): def __init__(self):
super(SignalManager, self).__init__() super(SignalManager, self).__init__()
......
{"lastModifyDateTime": 1624973031} {"lastModifyDateTime": 1625808079}
\ No newline at end of file \ No newline at end of file
''' '''
Author: your name Author: your name
Date: 2021-04-14 14:12:18 Date: 2021-04-14 14:12:18
LastEditTime: 2021-06-29 19:55:00 LastEditTime: 2021-07-03 11:53:04
LastEditors: Please set LastEditors LastEditors: Please set LastEditors
Description: In User Settings Edit Description: In User Settings Edit
FilePath: \evm-store\backend\controller\__init__.py FilePath: \evm-store\backend\controller\__init__.py
...@@ -14,7 +14,6 @@ from app import signalManager ...@@ -14,7 +14,6 @@ from app import signalManager
from .api_manager import apiManager from .api_manager import apiManager
from .user_manager import userManager from .user_manager import userManager
from .login_manager import loginManager from .login_manager import loginManager
from .annex_manager import annexManager
from .apps_manager import appsManager from .apps_manager import appsManager
from .device_manager import deviceManager from .device_manager import deviceManager
from .download_manager import downloadManager from .download_manager import downloadManager
...@@ -65,19 +64,13 @@ def initConnect(): ...@@ -65,19 +64,13 @@ def initConnect():
signalManager.actionUpdateLoginLogs.connect(loginLogsManager.update) signalManager.actionUpdateLoginLogs.connect(loginLogsManager.update)
# 用户模块 # 用户模块
signalManager.actionCheckUser.connect(userManager.check)
signalManager.actionAddUser.connect(userManager.add) signalManager.actionAddUser.connect(userManager.add)
signalManager.actionDeleteUser.connect(userManager.delete) signalManager.actionDeleteUser.connect(userManager.delete)
signalManager.actionGetUser.connect(userManager.get) signalManager.actionGetUser.connect(userManager.get)
signalManager.actionGetUserList.connect(userManager.getList) signalManager.actionGetUserList.connect(userManager.getList)
signalManager.actionUpdateUser.connect(userManager.update) signalManager.actionUpdateUser.connect(userManager.update)
# 文件附件模块
signalManager.actionAddAnnex.connect(annexManager.add)
signalManager.actionDeleteAnnex.connect(annexManager.delete)
signalManager.actionGetAnnex.connect(annexManager.get)
signalManager.actionGetAnnexList.connect(annexManager.getList)
signalManager.actionUpdateAnnex.connect(annexManager.update)
# 应用下载统计模块 # 应用下载统计模块
signalManager.actionAddDownload.connect(downloadManager.add) signalManager.actionAddDownload.connect(downloadManager.add)
signalManager.actionDeleteDownload.connect(downloadManager.delete) signalManager.actionDeleteDownload.connect(downloadManager.delete)
......
#!/usr/bin/env python
# -*- coding: utf_8 -*-
import copy
import time
import types
import json
import logging
import traceback
from datetime import datetime
from pony.orm import *
from flask import request
from model import fullStackDB
from model.annex import Annex
from model.user import User
from utils import sql_filter
logger = logging.getLogger("AnnexManager")
class AnnexManager(object):
def __init__(self):
super(AnnexManager, self).__init__()
def add(self, data):
editor = User.get(id=request.current_user.get("id"))
if not editor:
return False, "current user is not exists"
if data.get("flow"):
flow = Flow.get(uuid=data.get("flow"))
if not flow:
return False, "flow does not exists."
data.update({ "flow": flow })
elif data.get("project"):
project = Project.get(uuid=data.get("project"))
if not project:
return False, "project does not exists."
data.update({ "project": project })
data.update({
'title': data.get("title"),
'path': data.get("path"),
'size': data.get("size"),
'create_by': editor,
'create_at': datetime.now(),
'update_by': editor,
'update_at': datetime.now(),
})
result = fullStackDB.add(Annex, **data)
return result, "add annex {}.".format("success" if result else "fail")
def delete(self, uuid):
result = False
with db_session:
editor = User.get(id=request.current_user.get("id"))
if not editor:
return False, "current user is not exists"
result = Annex.get(uuid=uuid)
if result:
if result.project:
count = Annex.select(project=result.project, remarks=result.remarks, is_delete=False).count()
if count == 1:
project = Project.get(id=result.project.id)
if project:
condition = dict()
if result.remarks == "bidding": # 中标通知书
condition.update({ "is_bidding": False })
elif result.remarks == "acceptance": # 验收表
condition.update({ "is_acceptance": False })
elif result.remarks == "evaluation": # 评价表
condition.update({ "is_evaluation": False })
elif result.remarks == "contract": # 合同
condition.update({ "is_contract": False })
project.extend1.get("uploads").update({ result.remarks: False })
project.set(extend1=project.extend1, **condition)
result.set(is_delete=True, delete_at=datetime.now(), delete_by=editor)
commit()
result = True
return result, "delete annex {}.".format("success" if result else "fail")
def get(self, data):
result = Annex.get(**data)
if result:
result = result.to_dict(with_collections=True, related_objects=True, only=["uuid", "title", "create_at", "update_at", "delete_at"])
return result, "get annex {}.".format("success" if result else "fail")
def getList(self, data):
if not data or len(data) <= 0:
return False, 0, "parameters can not be null."
result = Annex.select().where(is_delete=False, **data)
if len(result):
temp = []
for item in result:
# t = item.to_dict(with_collections=True, only=["uuid", "title", "project", "path", "remarks"])
# temp.append(t)
temp.append({
"uuid": item.uuid,
"name": item.title,
"project": item.project.id,
"url": item.path,
"type": item.remarks
})
result = temp
return result, len(result), "get annex {}.".format("success" if result else "no data")
def update(self, uuid, data):
# 当参数为空时,直接返回错误
if len(data) <= 0 or (len(data.keys()) == 1 and "id" in data):
return False, "parameters can not be null."
# 查询请求者是否存在
editor = User.get(id=request.current_user.get("id"))
if not editor:
return False, "current user is not exists"
result = fullStackDB.update(Annex, { 'uuid': uuid }, update_at=datetime.now(), update_by=editor, **data)
return result, "update annex {}.".format("success" if result else "fail")
annexManager = AnnexManager()
''' '''
Author: your name Author: your name
Date: 2021-04-14 14:12:18 Date: 2021-04-14 14:12:18
LastEditTime: 2021-06-29 20:21:46 LastEditTime: 2021-07-01 11:39:27
LastEditors: Please set LastEditors LastEditors: Please set LastEditors
Description: In User Settings Edit Description: In User Settings Edit
FilePath: \evm-store\backend\controller\api_manager.py FilePath: \evm-store\backend\controller\api_manager.py
...@@ -17,6 +17,7 @@ from pony.orm import * ...@@ -17,6 +17,7 @@ from pony.orm import *
from app.setting import config from app.setting import config
from model.user import User from model.user import User
from utils import md5_salt from utils import md5_salt
from utils.ccode import convert_string
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
...@@ -51,27 +52,27 @@ class ApiManager(object): ...@@ -51,27 +52,27 @@ class ApiManager(object):
return True, "success" return True, "success"
def get_escape_text(self, data): def get_escape_text(self, data):
fname = "./a.c" # fname = "./a.c"
target = os.sep.join(["out", fname]) # target = os.sep.join(["out", fname])
if os.path.exists(fname): # if os.path.exists(fname):
os.remove(fname) # os.remove(fname)
if os.path.exists(target): # if os.path.exists(target):
os.remove(target) # os.remove(target)
with open(fname, "w+") as f: # with open(fname, "w+") as f:
f.write(data['string']) # f.write(data['string'])
result = os.system("./opqcp {i} ./out".format(i=fname)) # result = os.system("./opqcp {i} ./out".format(i=fname))
print(result) # print(result)
with open(target) as f: # with open(target) as f:
result = f.read() # result = f.read()
return result # return result
# return convert_string(data['string']) return convert_string(data['string'])
def opqcp(self, params): def opqcp(self, params):
target_file = os.path.normpath(os.sep.join([config.get("UPLOAD_PATH"), params.get("filename")])) target_file = os.path.normpath(os.sep.join([config.get("UPLOAD_PATH"), params.get("filename")]))
......
...@@ -2,19 +2,14 @@ ...@@ -2,19 +2,14 @@
# -*- coding: utf_8 -*- # -*- coding: utf_8 -*-
import copy import copy
import time
import types
import json
import logging import logging
import traceback
from datetime import datetime from datetime import datetime
from pony.orm import * from pony.orm import *
from model import fullStackDB from model import fullStackDB
from model.app_logs import AppLogs from model.app_logs import AppLogs
from model.user import User from model.user import User
from utils import sql_filter
logger = logging.getLogger("AppLogsManager") logger = logging.getLogger(__name__)
class AppLogsManager(object): class AppLogsManager(object):
def __init__(self): def __init__(self):
......
...@@ -17,10 +17,10 @@ from model.apps import Apps ...@@ -17,10 +17,10 @@ from model.apps import Apps
from model.user import User from model.user import User
from model.app_logs import AppLogs from model.app_logs import AppLogs
from model.build_logs import BuildLogs from model.build_logs import BuildLogs
from utils import sql_filter, ThreadMaker from utils import ThreadMaker
from utils.epk import EpkApp from utils.epk import EpkApp
logger = logging.getLogger("AppsManager") logger = logging.getLogger(__name__)
@ThreadMaker @ThreadMaker
def build_application(user, uuid): def build_application(user, uuid):
......
...@@ -4,13 +4,8 @@ ...@@ -4,13 +4,8 @@
import os import os
import re import re
import copy import copy
import time
import types
import json
import shutil import shutil
import logging import logging
import traceback
from urllib.parse import urlparse, urljoin
from datetime import datetime from datetime import datetime
from pony.orm import * from pony.orm import *
from app.setting import config from app.setting import config
...@@ -20,10 +15,9 @@ from model.annex import Annex ...@@ -20,10 +15,9 @@ from model.annex import Annex
from model.app_logs import AppLogs from model.app_logs import AppLogs
from model.build_logs import BuildLogs from model.build_logs import BuildLogs
from model.user import User from model.user import User
from utils import sql_filter
from utils.epk import EpkApp from utils.epk import EpkApp
logger = logging.getLogger("BuildLogsManager") logger = logging.getLogger(__name__)
class BuildLogsManager(object): class BuildLogsManager(object):
def __init__(self): def __init__(self):
......
...@@ -2,19 +2,14 @@ ...@@ -2,19 +2,14 @@
# -*- coding: utf_8 -*- # -*- coding: utf_8 -*-
import copy import copy
import time
import types
import json
import logging import logging
import traceback
from datetime import datetime from datetime import datetime
from pony.orm import * from pony.orm import *
from model import fullStackDB from model import fullStackDB
from model.device import Device from model.device import Device
from model.user import User from model.user import User
from utils import sql_filter
logger = logging.getLogger("DeviceManager") logger = logging.getLogger(__name__)
class DeviceManager(object): class DeviceManager(object):
def __init__(self): def __init__(self):
......
...@@ -2,20 +2,15 @@ ...@@ -2,20 +2,15 @@
# -*- coding: utf_8 -*- # -*- coding: utf_8 -*-
import copy import copy
import time
import types
import json
import logging import logging
import traceback
from datetime import datetime from datetime import datetime
from pony.orm import select, desc from pony.orm import select, desc
from flask import request from flask import request
from model import fullStackDB from model import fullStackDB
from model.dictionary import Dict from model.dictionary import Dict
from model.user import User from model.user import User
from utils import sql_filter
logger = logging.getLogger("DictManager") logger = logging.getLogger(__name__)
class DictManager(object): class DictManager(object):
def __init__(self): def __init__(self):
......
...@@ -2,30 +2,23 @@ ...@@ -2,30 +2,23 @@
# -*- coding: utf_8 -*- # -*- coding: utf_8 -*-
import os import os
import re
import copy import copy
import time
import types
import json import json
import logging import logging
import traceback
import shutil
from collections import OrderedDict
import urllib import urllib
from pathlib import Path
from urllib import parse, request from urllib import parse, request
from urllib.parse import urlparse, urljoin, urlencode from urllib.parse import urlparse
from datetime import datetime from datetime import datetime
from pony.orm import * from pony.orm import *
from flask import request as flask_request from app.setting import config
from app.setting import config, conf
from model import fullStackDB
from model.download import AppDownload from model.download import AppDownload
from model.device import Device from model.device import Device
from model.apps import Apps from model.apps import Apps
from model.user import User from model.user import User
from utils import sql_filter, ThreadMaker from utils import ThreadMaker
logger = logging.getLogger("DownloadManager") logger = logging.getLogger(__name__)
@ThreadMaker @ThreadMaker
def update_download_information(ip, id): def update_download_information(ip, id):
...@@ -141,15 +134,15 @@ class DownloadManager(object): ...@@ -141,15 +134,15 @@ class DownloadManager(object):
app = app[:] app = app[:]
epk_path = "" epk_path = ""
if app[0].app_build_log: if app[0].app_build_log:
epk_path = os.sep.join([os.getcwd(), app[0].app_build_log.app_path]) epk_path = os.path.normpath(os.sep.join([config.get("UPLOAD_PATH"), app[0].app_build_log.app_path]))
if not os.path.exists(epk_path): epk_path = Path(epk_path)
if not epk_path.exists():
return False, "epk file not found" return False, "epk file not found"
down = AppDownload(app=app[0], imei=data.get("imei")) down = AppDownload(app=app[0], imei=data.get("imei"))
commit() commit()
if down: if down:
real_ip = flask_request.headers['X-Forwarded-For'] update_download_information(data.get('real_ip', '127.0.0.1'), down.id)
update_download_information(real_ip, down.id)
return epk_path, "get dictionary {}.".format("success" if epk_path else "no data") return epk_path, "get dictionary {}.".format("success" if epk_path else "no data")
......
...@@ -2,19 +2,14 @@ ...@@ -2,19 +2,14 @@
# -*- coding: utf_8 -*- # -*- coding: utf_8 -*-
import copy import copy
import time
import types
import json
import logging import logging
import traceback
from datetime import datetime from datetime import datetime
from pony.orm import * from pony.orm import *
from model import fullStackDB from model import fullStackDB
from model.login_logs import LoginLogs from model.login_logs import LoginLogs
from model.user import User from model.user import User
from utils import sql_filter
logger = logging.getLogger("LoginLogsManager") logger = logging.getLogger(__name__)
class LoginLogsManager(object): class LoginLogsManager(object):
def __init__(self): def __init__(self):
......
#!/usr/bin/env python #!/usr/bin/env python
# -*- coding: utf_8 -*- # -*- coding: utf_8 -*-
import copy
import time
import types
import json import json
import logging import logging
import traceback
import urllib import urllib
from urllib import parse, request from urllib import parse, request
from urllib.parse import urlparse, urljoin, urlencode
from datetime import datetime from datetime import datetime
from threading import Thread from threading import Thread
from werkzeug.security import check_password_hash from werkzeug.security import check_password_hash
from flask import request as flask_request from flask import request as flask_request
from pony.orm import * from pony.orm import *
from model import fullStackDB
from model.user import User from model.user import User
from model.login_logs import LoginLogs from model.login_logs import LoginLogs
from fullstack.login import Auth from fullstack.login import Auth
from fullstack.response import ResponseCode from fullstack.response import ResponseCode
from utils import md5_salt, ThreadMaker from utils import md5_salt, ThreadMaker
logger = logging.getLogger("LoginManager") logger = logging.getLogger(__name__)
@ThreadMaker @ThreadMaker
def update_login_information(ip, user_id): def update_login_information(ip, user_id):
...@@ -88,7 +82,7 @@ class LoginManager(object): ...@@ -88,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
......
''' '''
Author: your name Author: your name
Date: 2021-06-29 19:24:32 Date: 2021-06-29 19:24:32
LastEditTime: 2021-07-01 10:01:48 LastEditTime: 2021-07-14 21:25:39
LastEditors: Please set LastEditors LastEditors: Please set LastEditors
Description: In User Settings Edit Description: In User Settings Edit
FilePath: \evm-store\backend\controller\monitor.py FilePath: \evm-store\backend\controller\monitor.py
''' '''
from model.monitor import session, System, Lvgl, Evm, Image, Watch, Request from model.monitor import session, System, Lvgl, Evm, Image, Device, Request, User
class SystemResource(object): class SystemResource(object):
def get(self): def get(self):
...@@ -93,16 +93,17 @@ def insert_data(msg): ...@@ -93,16 +93,17 @@ def insert_data(msg):
# 先判断手表imei是否存在,不存在则先注册手表IMEI # 先判断手表imei是否存在,不存在则先注册手表IMEI
watch_id = -1 watch_id = -1
if msg.get("imei"): if msg.get("imei"):
result = session.query(Watch).filter_by(imei=msg.get("imei")).first() result = session.query(Device).filter_by(imei=msg.get("imei")).first()
if result: if result:
watch_id = result.id watch_id = result.id
else: else:
result = Watch(imei=msg.get("imei")) user = session.query(User).filter(User.account=="evm").first()
result = Device(imei=msg.get("imei"), name="watch_{}".format(msg.get("imei")), type="watch", create_by=user.id, update_by=user.id)
session.add(result) session.add(result)
session.flush() session.flush()
session.commit() session.commit()
result = session.query(Watch).filter_by(imei=msg.get("imei")).first() result = session.query(Device).filter_by(imei=msg.get("imei")).first()
if result: if result:
watch_id = result.id watch_id = result.id
...@@ -129,7 +130,7 @@ def insert_data(msg): ...@@ -129,7 +130,7 @@ def insert_data(msg):
imageResource.post_array(msg.get("image"), watch_id) imageResource.post_array(msg.get("image"), watch_id)
def get_watch_list(): def get_watch_list():
result = session.query(Watch).all() result = session.query(Device).all()
tmp = [] tmp = []
for item in result: for item in result:
tmp.append({ tmp.append({
...@@ -188,7 +189,7 @@ def image_data(watch, start, end): ...@@ -188,7 +189,7 @@ def image_data(watch, start, end):
def get_monitor_list(watch, category, start, end): def get_monitor_list(watch, category, start, end):
# 判断watch是否存在 # 判断watch是否存在
w = session.query(Watch).filter(Watch.id==watch).first() w = session.query(Device).filter(Device.id==watch).first()
if not w: if not w:
return [] return []
......
#!/usr/bin/env python
# -*- coding: utf_8 -*-
import os
import copy
import time
import types
import json
import logging
import traceback
from datetime import datetime
from pony.orm import *
from flask import request
from model import fullStackDB
from model.netdisc import Netdisc
from model.user import User
from app.setting import config
logger = logging.getLogger("NetDiscManager")
class NetDiscManager(object):
def __init__(self):
super(NetDiscManager, self).__init__()
def add(self, data):
editor = User.get(id=request.current_user.get("id"))
if not editor:
return False, "current user is not exists"
data.update({
'create_by': editor,
'create_at': datetime.now(),
'update_by': editor,
'update_at': datetime.now(),
})
result = fullStackDB.add(Netdisc, **data)
return result, "add netdisc {}.".format("success" if result else "fail")
def delete(self, data):
# 通过uuid查询出所有的文件列表,然后全部删除
editor = User.get(id=request.current_user.get("id"))
if not editor:
return False, "current user is not exists"
count = 0
result = []
with db_session:
for uuid in data.get("uuids"):
nd = Netdisc.get(uuid=uuid)
if nd:
# nd.is_delete = True
# nd.delete_at = datetime.now()
# nd.delete_by = editor
nd.set(is_delete = True, delete_at = datetime.now(), delete_by = editor)
count = count + 1
result.append([nd.is_dir, nd.real_path])
commit()
return result, "delete {} netdisc {}.".format(count, "success" if result else "fail")
def get(self, data):
result = Netdisc.get(**data)
if result:
result = result.to_dict(only=["uuid", "name", "real_path"])
return result, "get netdisc {}.".format("success" if result else "no data")
def getList(self, data):
data.update({ "is_delete": False })
count = 0
result = []
with db_session:
editor = User.get(id=request.current_user.get("id"))
if not editor:
return False, "current user is not exists"
if editor.role.name != "超级管理员":
data.update({ "create_by": editor })
result = Netdisc.select().where(**data).order_by(Netdisc.name)
count = len(result)
files = []
folders = []
for item in result:
t = item.to_dict(with_collections=True, related_objects=True, only=["uuid", "name", "size", "is_dir", "parent_dir", "file_type", "create_at", "update_at"])
if item.is_dir:
t.update({
"is_dir": 1 if item.is_dir else 0,
"real_path": os.path.relpath(item.real_path, config.get("UPLOAD_PATH")).replace('\\', '/'),
"create_by": item.create_by.to_dict(only=["uuid", "username"]),
"update_by": item.update_by.to_dict(only=["uuid", "username"]),
"create_at": item.create_at.strftime("%Y-%m-%d %H:%M:%S"),
"update_at": item.update_at.strftime("%Y-%m-%d %H:%M:%S")
})
folders.append(t)
else:
t.update({
"is_dir": 1 if item.is_dir else 0,
"real_path": os.path.relpath(item.real_path, config.get("UPLOAD_PATH")).replace('\\', '/'),
"create_by": item.create_by.to_dict(only=["uuid", "username"]),
"update_by": item.update_by.to_dict(only=["uuid", "username"]),
"create_at": item.create_at.strftime("%Y-%m-%d %H:%M:%S"),
"update_at": item.update_at.strftime("%Y-%m-%d %H:%M:%S")
})
files.append(t)
result = folders + files
return result, count, "get netdisc {}.".format("success" if result else "no data")
def update(self, uuid, data):
# 当参数为空时,直接返回错误
if len(data) <= 0 or (len(data.keys()) == 1 and "id" in data):
return False, "parameters can not be null."
result = None
with db_session:
# 查询请求者是否存在
editor = User.get(id=request.current_user.get("id"))
if not editor:
return False, "current user is not exists"
result = Netdisc.get(uuid=uuid)
if result:
_real = result.real_path
result.set(update_at=datetime.now(), update_by=editor, **data)
commit()
_ext = os.path.splitext(result.real_path)[-1]
_dir = os.path.dirname(result.real_path)
filename = data.get("name") + _ext
data.update({ "real_path": os.path.normpath(os.sep.join([_dir, filename])) })
result = { "src": _real, "dst": data.get("real_path") }
return result, "update netdisc {}.".format("success" if result else "fail")
netDiscManager = NetDiscManager()
#!/usr/bin/env python
# -*- coding: utf_8 -*-
import copy
import time
import types
import json
import logging
import traceback
from datetime import datetime
from pony.orm import *
from flask import request
from model import fullStackDB
from model.depot import Depot
from model.role import Role
from model.user import User
from utils import sql_filter
logger = logging.getLogger("RoleManager")
class RoleManager(object):
def __init__(self):
super(RoleManager, self).__init__()
def add(self, data):
# 判断角色名是否存在
result = Role.get(name=data.get("name"))
if result:
return False, "role name has been exists."
editor = User.get(id=request.current_user.get("id"))
if not editor:
return False, "current user is not exists"
data.update({
'create_by': editor,
'create_at': datetime.now(),
'update_by': editor,
'update_at': datetime.now(),
})
result = fullStackDB.add(Role, **data)
return result, "add role {}.".format("success" if result else "fail")
def delete(self, uuid):
editor = User.get(id=request.current_user.get("id"))
if not editor:
return False, "current user is not exists"
result = fullStackDB.update(Role, { 'uuid': uuid }, is_delete=True, delete_at=datetime.now(), delete_by=editor)
return result, "delete role {}.".format("success" if result else "fail")
def get(self, data):
result = Role.get(**data)
if result:
result = result.to_dict(with_collections=True, related_objects=True, only=["uuid", "name", "create_at", "update_at", "delete_at"])
return result, "get role {}.".format("success" if result else "fail")
def getList(self, data):
if not data or len(data) <= 0:
return False, 0, "parameters can not be null."
temp = copy.deepcopy(data)
if 'pagenum' in temp:
temp.pop('pagenum')
if 'pagesize' in temp:
temp.pop('pagesize')
if 'scope_type' in temp:
temp.pop('scope_type')
temp.setdefault("is_delete", False)
if "scope_type" in data and data.get("scope_type") == "list":
result = Role.select().where(**temp).order_by(desc(Role.create_at))
temp = []
for item in result:
temp.append(item.to_dict(only=["uuid", "name"]))
return temp, len(temp), "get select {}.".format("success" if temp else "no data")
result = fullStackDB.pagination(Role, Role.create_at, pagenum=data.get("pagenum", 1), pagesize=data.get("pagesize", 10), **temp)
count = fullStackDB.count(Role, **temp)
if result and len(result):
temp = []
for item in result:
t = item.to_dict(with_collections=True, related_objects=True, only=["uuid", "name", "permission", "is_system", "create_by", "update_by"])
t.update({ "create_at": item.create_at.strftime("%Y-%m-%d %H:%M:%S") })
t.update({ "update_at": item.update_at.strftime("%Y-%m-%d %H:%M:%S") })
t.update({ "create_by": item.create_by.to_dict(only=["uuid", "username"]) })
t.update({ "update_by": item.update_by.to_dict(only=["uuid", "username"]) })
temp.append(t)
result = temp
return result, count, "get role {}.".format("success" if result else "no data")
def update(self, uuid, data):
# 当参数为空时,直接返回错误
if len(data) <= 0 or (len(data.keys()) == 1 and "id" in data):
return False, "parameters can not be null."
# 查询请求者是否存在
editor = User.get(id=request.current_user.get("id"))
if not editor:
return False, "current user is not exists"
result = None
with db_session:
result = Role.get(uuid=uuid)
if result:
result.set(update_at=datetime.now(), update_by=editor, **data)
commit()
# result = fullStackDB.update(Role, { 'uuid': uuid }, update_at=datetime.now(), update_by=editor, **data)
return result, "update role {}.".format("success" if result else "fail")
roleManager = RoleManager()
...@@ -2,27 +2,15 @@ ...@@ -2,27 +2,15 @@
# -*- coding: utf_8 -*- # -*- coding: utf_8 -*-
import os import os
import sys
import copy
import time
import types
import json import json
import logging import logging
import traceback import traceback
import re
import tempfile import tempfile
import shutil
import base64 import base64
import uuid
from hashlib import md5 as fmd5 from hashlib import md5 as fmd5
from urllib import parse
from datetime import datetime
from threading import Thread
from werkzeug.security import check_password_hash from werkzeug.security import check_password_hash
from app.setting import config
from utils import md5_salt, random_string
logger = logging.getLogger("UploadManager") logger = logging.getLogger(__name__)
FileStoragePath = os.getcwd() FileStoragePath = os.getcwd()
......
#!/usr/bin/env python #!/usr/bin/env python
# -*- coding: utf_8 -*- # -*- coding: utf_8 -*-
import time
import json
import logging import logging
import traceback
import copy import copy
import uuid
from datetime import datetime from datetime import datetime
from pony.orm import * from pony.orm import *
from flask import request
from app.setting import config
from model import fullStackDB from model import fullStackDB
from model.user import User from model.user import User
from utils import md5_salt, filter_dict, sql_filter from utils import md5_salt
logger = logging.getLogger("UserManager") logger = logging.getLogger(__name__)
class UserManager(object): class UserManager(object):
''' '''
...@@ -25,7 +19,14 @@ class UserManager(object): ...@@ -25,7 +19,14 @@ class UserManager(object):
def __init__(self): def __init__(self):
super(UserManager, self).__init__() super(UserManager, self).__init__()
def add(self, data): def check(self, data):
with db_session:
user = User.get(uuid=data.get("uuid"))
if not user:
return False
return True
def add(self, uuid, data):
''' '''
添加用户 添加用户
''' '''
...@@ -35,7 +36,7 @@ class UserManager(object): ...@@ -35,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(id=uuid)
if not editor: if not editor:
return False, "current user is not exists" return False, "current user is not exists"
...@@ -60,7 +61,7 @@ class UserManager(object): ...@@ -60,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"
...@@ -82,7 +83,7 @@ class UserManager(object): ...@@ -82,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"
...@@ -99,12 +100,12 @@ class UserManager(object): ...@@ -99,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({
......
'''
Author: your name
Date: 2021-04-14 14:12:18
LastEditTime: 2021-07-01 14:46:22
LastEditors: your name
Description: In User Settings Edit
FilePath: \evm-store\backend\deploy.py
'''
import os import os
import sys
import json import json
import getopt
import shutil import shutil
import configparser import configparser
from datetime import datetime from datetime import datetime
......
#!/usr/bin/env python #!/usr/bin/env python
# -*- coding: utf_8 -*- # -*- coding: utf_8 -*-
import sys
import re
import logging import logging
import traceback import traceback
import time from datetime import datetime, timedelta
from datetime import datetime, timedelta, timezone
from functools import wraps from functools import wraps
import jwt import jwt
from flask import jsonify, current_app, request from flask import current_app, request
logger = logging.getLogger("auth") logger = logging.getLogger(__name__)
class Auth(object): class Auth(object):
...@@ -36,7 +33,7 @@ class Auth(object): ...@@ -36,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
...@@ -52,6 +49,7 @@ class Auth(object): ...@@ -52,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
......
...@@ -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 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-06-30 23:52:39
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 -*-
import json import json
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 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)
...@@ -24,6 +17,9 @@ Base = declarative_base() ...@@ -24,6 +17,9 @@ Base = declarative_base()
def get_current_datetime(): def get_current_datetime():
return datetime.now() return datetime.now()
def gen_id():
return uuid.uuid4().hex
def object_to_dict(obj): def object_to_dict(obj):
columns = [column.key for column in class_mapper(obj.__class__).columns] columns = [column.key for column in class_mapper(obj.__class__).columns]
get_key_value = lambda c: (c, getattr(obj, c).isoformat()) if isinstance(getattr(obj, c), datetime) else (c, getattr(obj, c)) get_key_value = lambda c: (c, getattr(obj, c).isoformat()) if isinstance(getattr(obj, c), datetime) else (c, getattr(obj, c))
...@@ -136,6 +132,34 @@ class Image(Base): ...@@ -136,6 +132,34 @@ 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=gen_id, index=True)
account = Column(String(256))
class Device(Base):
__tablename__ = "{}".format(config['TABLE_PREFIX']) + "device"
id = Column(Integer, primary_key=True, autoincrement=True)
uuid = Column(String(64), default=gen_id, index=True)
name = Column(String, default="")
imei = Column(String)
desc = Column(String, default="")
type = Column(String, default="watch")
create_at = Column(DateTime(timezone=True), default=get_current_datetime, onupdate=func.now())
create_by = Column(Integer, default=None, nullable=True)
update_at = Column(DateTime(timezone=True), default=get_current_datetime, onupdate=func.now())
update_by = Column(Integer, default=None)
delete_at = Column(DateTime(timezone=True), default=get_current_datetime, onupdate=func.now())
delete_by = Column(Integer, default=None)
is_delete = Column(Boolean, default=False)
sort = Column(Integer, default=1)
remarks = Column(String, default="")
def to_dict(self):
return {c.name: getattr(self, c.name) for c in self.__table__.columns}
Base.metadata.create_all(engine, checkfirst=True) Base.metadata.create_all(engine, checkfirst=True)
# engine是2.2中创建的连接 # engine是2.2中创建的连接
......
#!/usr/bin/env python
# -*- coding: utf_8 -*-
import uuid
from datetime import datetime
from pony.orm import PrimaryKey, Required, Optional, Set, LongStr, Json
from app import config
from . import fullStackDB
db = fullStackDB.db
class Netdisc(db.Entity):
_table_ = "{}".format(config['TABLE_PREFIX']) + "netdisc"
id = PrimaryKey(int, auto=True)
uuid = Required(uuid.UUID, unique=True, default=uuid.uuid1, index=True)
name = Required(str, max_len=200) # 文件名
size = Required(int, default=0) # 文件大小
file_type = Required(str) # 文件类型
is_dir = Required(bool, default=False) # 是否是目录
parent_dir = Required(str, default='/') # 上级目录
real_path = Required(str) # 真实路径
create_at = Required(datetime, default=datetime.now)
create_by = Required("User", reverse='netdisc_creator') # NetDisc与User一对一关系
update_at = Required(datetime, default=datetime.now)
update_by = Required("User", reverse='netdisc_updater') # NetDisc与User一对一关系
delete_at = Optional(datetime)
delete_by = Optional("User", reverse='netdisc_deleter') # NetDisc与User一对一关系
is_delete = Required(bool, default=False)
sort = Optional(int, size=32, default=0)
remarks = Optional(str, max_len=255, default="", nullable=True)
\ No newline at end of file
...@@ -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
......
This diff is collapsed.
''' '''
Author: your name Author: your name
Date: 2021-04-14 14:12:18 Date: 2021-04-14 14:12:18
LastEditTime: 2021-07-01 00:06:01 LastEditTime: 2021-07-14 21:37:53
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
...@@ -16,7 +16,6 @@ from tornado.wsgi import WSGIContainer ...@@ -16,7 +16,6 @@ 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
...@@ -26,9 +25,7 @@ class GracefulExit(SystemExit): ...@@ -26,9 +25,7 @@ class GracefulExit(SystemExit):
class VueHandler(RequestHandler): class VueHandler(RequestHandler):
def get(self): def get(self):
remote_ip = self.request.remote_ip self.write(json.dumps({ 'code': 200, 'msg': 'success', 'data': self.request.remote_ip }))
logger.info("remote_ip %s" % remote_ip)
self.render("index.html")
def raise_graceful_exit(*args): def raise_graceful_exit(*args):
IOLoop.current().stop() IOLoop.current().stop()
...@@ -38,15 +35,14 @@ def raise_graceful_exit(*args): ...@@ -38,15 +35,14 @@ def raise_graceful_exit(*args):
def start(): def start():
settings = { settings = {
'debug': config['DEBUG'], 'debug': config['DEBUG'],
'template_path': config['TEMPLATE_PATH'], # 'template_path': config['TEMPLATE_PATH'],
'static_path': config['STATIC_PATH'], # 'static_path': config['STATIC_PATH'],
'static_url_path': '', 'static_url_path': '',
} }
watch(os.sep.join([os.getcwd(), "restart.json"])) watch(os.sep.join([os.getcwd(), "restart.json"]))
wsgi_app = WSGIContainer(app) wsgi_app = WSGIContainer(app)
application = Application([ application = Application([
(r'/', VueHandler), (r'/', VueHandler),
(r'/index', VueHandler),
(r"/api/v1/evm_store/monitor", DeviceMessageHandler), (r"/api/v1/evm_store/monitor", DeviceMessageHandler),
(r"/api/v1/evm_store/watch", WatchHandler), (r"/api/v1/evm_store/watch", WatchHandler),
(r"/ws/v1/notify", NotifyHandler), (r"/ws/v1/notify", NotifyHandler),
......
...@@ -13,7 +13,6 @@ import string ...@@ -13,7 +13,6 @@ import string
import datetime import datetime
import threading import threading
import decimal import decimal
import uuid
class DecimalEncoder(json.JSONEncoder): class DecimalEncoder(json.JSONEncoder):
def default(self, o): def default(self, o):
......
''' '''
Author: your name Author: your name
Date: 2021-04-29 12:12:01 Date: 2021-04-29 12:12:01
LastEditTime: 2021-07-12 00:56:10 LastEditTime: 2021-07-14 21:26:39
LastEditors: your name LastEditors: your name
Description: In User Settings Edit Description: In User Settings Edit
FilePath: \evm-store\backend\utils\ccode.py FilePath: \evm-store\backend\utils\ccode.py
''' '''
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
import sys import sys
......
''' '''
Author: your name Author: your name
Date: 2021-04-14 14:12:18 Date: 2021-04-14 14:12:18
LastEditTime: 2021-06-29 19:37:32 LastEditTime: 2021-07-03 11:43:10
LastEditors: Please set LastEditors LastEditors: Please set LastEditors
Description: In User Settings Edit Description: In User Settings Edit
FilePath: \evm-store\backend\view\__init__.py FilePath: \evm-store\backend\view\__init__.py
...@@ -18,7 +18,6 @@ from .api import api ...@@ -18,7 +18,6 @@ from .api import api
from .files import file_api from .files import file_api
from .login import login_api from .login import login_api
from .user import user_api from .user import user_api
from .annex import annex_api
from .apps import apps_api from .apps import apps_api
from .device import device_api from .device import device_api
from .download import download_api from .download import download_api
...@@ -48,7 +47,6 @@ def create_app(): ...@@ -48,7 +47,6 @@ def create_app():
app.register_blueprint(login_api) app.register_blueprint(login_api)
app.register_blueprint(file_api) app.register_blueprint(file_api)
app.register_blueprint(user_api) app.register_blueprint(user_api)
app.register_blueprint(annex_api)
app.register_blueprint(apps_api) app.register_blueprint(apps_api)
app.register_blueprint(download_api) app.register_blueprint(download_api)
app.register_blueprint(device_api) app.register_blueprint(device_api)
......
#!/usr/bin/env python
# -*- coding: utf_8 -*-
import os
import json
import datetime
import logging
import traceback
from flask import Blueprint, request
from app import config, signalManager
from fullstack.login import Auth
from fullstack.validation import validate_schema
from fullstack.response import ResponseCode, response_result
from schema.annex import AddSchema, DeleteSchema, QuerySchema, UpdateSchema, ResponseSchema
logger = logging.getLogger(__name__)
annex_api = Blueprint("annex_api", __name__, url_prefix="/api/v1/%s/annex" % config['NAME'])
@annex_api.route("/add", methods=['POST'])
@validate_schema(AddSchema)
@Auth.auth_required
def add():
try:
isSuccess, message = signalManager.actionAddAnnex.emit(request.schema_data)
if isSuccess:
return response_result(ResponseCode.OK, msg=message)
else:
return response_result(ResponseCode.REQUEST_ERROR, msg=message)
except Exception as e:
traceback.print_exc()
logger.error(str(e))
return response_result(ResponseCode.SERVER_ERROR, msg=str(e))
@annex_api.route("/delete/<uuid:id>", methods=['POST'])
@validate_schema(DeleteSchema)
@Auth.auth_required
def delete(id):
try:
isSuccess, message = signalManager.actionDeleteAnnex.emit(id)
if isSuccess:
return response_result(ResponseCode.OK, msg=message)
else:
return response_result(ResponseCode.REQUEST_ERROR, msg=message)
except Exception as e:
traceback.print_exc()
logger.error(str(e))
return response_result(ResponseCode.SERVER_ERROR)
@annex_api.route("/get", methods=["POST"])
@validate_schema(QuerySchema)
@Auth.auth_required
def get():
try:
result, message = signalManager.actionGetAnnex.emit(request.schema_data)
if result:
return response_result(ResponseCode.OK, data=result, msg=message)
else:
return response_result(ResponseCode.REQUEST_ERROR, msg=message)
except Exception as e:
traceback.print_exc()
logger.error(str(e))
return response_result(ResponseCode.SERVER_ERROR, msg=str(e))
@annex_api.route("/list", methods=['POST'])
@validate_schema(QuerySchema)
@Auth.auth_required
def get_list():
try:
result, count, message = signalManager.actionGetAnnexList.emit(request.schema_data)
if result:
return response_result(ResponseCode.OK, data=result, msg=message, count=count)
else:
return response_result(ResponseCode.REQUEST_ERROR, msg=message)
except Exception as e:
traceback.print_exc()
logger.error(str(e))
return response_result(ResponseCode.SERVER_ERROR)
@annex_api.route("/update/<uuid:id>", methods=['POST'])
@validate_schema(UpdateSchema)
@Auth.auth_required
def update(id):
try:
isSuccess, message = signalManager.actionUpdateAnnex.emit(id, request.schema_data)
if isSuccess:
return response_result(ResponseCode.OK, msg=message)
else:
return response_result(ResponseCode.REQUEST_ERROR, msg=message)
except Exception as e:
traceback.print_exc()
logger.error(str(e))
return response_result(ResponseCode.SERVER_ERROR)
...@@ -5,6 +5,7 @@ import json ...@@ -5,6 +5,7 @@ import json
import logging import logging
import traceback import traceback
import uuid import uuid
import time
import sqlite3 import sqlite3
from datetime import datetime from datetime import datetime
...@@ -55,6 +56,77 @@ def hello_evm(): ...@@ -55,6 +56,77 @@ def hello_evm():
return json.dumps(result) return json.dumps(result)
@api.route("/store", methods=['GET', 'POST'])
def get_store():
result = {}
with open("./apiData.json", "r", encoding="utf-8") as f:
result = json.loads(f.read())
logger.info(request.args)
# logger.info(request.query_string)
if request.args and request.args.get("category"):
res = []
for item in result.get("appList", []):
if item.get("category") == request.args.get("category"):
res.append(item)
result["appList"] = res
result = {
'appList': result["appList"],
'categoryList': result["categoryList"]
}
return response_result(ResponseCode.OK, data=result)
@api.route("/store/app/<uuid>", methods=['GET', 'POST'])
def get_store_app(uuid):
logger.info(uuid)
result = {}
with open("./apiData.json", "r", encoding="utf-8") as f:
result = json.loads(f.read())
res = {}
for item in result.get("appList", []):
if item.get("uuid") == uuid:
res = item
break
return response_result(ResponseCode.OK, data=res)
@api.route("/store/appInfo/<uuid>", methods=['GET', 'POST'])
def get_app_info(uuid):
result = {}
with open("./apiData.json", "r", encoding="utf-8") as f:
result = json.loads(f.read())
res = None
for item in result.get("downloadList", []):
if item.get("apkId") == uuid:
res = item
break
print(res)
return response_result(ResponseCode.OK, data=res)
@api.route("/store/downloadEpk/<uuid>", methods=['GET', 'POST'])
def download_epk(uuid):
# 这里要做一些业务处理,根据应用ID和版本号,判断是否有新的应用更新
result = {}
with open("./apiData.json", "r", encoding="utf-8") as f:
result = json.loads(f.read())
res = {}
for item in result.get("downloadList", []):
if item.get("apkId") == uuid:
res.update(item)
break
res.update({
'status': 0,
'time': int(time.time())
})
print(res)
return response_result(ResponseCode.OK, data=res)
@api.route("/opqcp", methods=['POST']) @api.route("/opqcp", methods=['POST'])
def action_opqcp(): def action_opqcp():
params = request.json params = request.json
......
'''
Author: your name
Date: 2021-04-14 14:12:18
LastEditTime: 2021-07-01 14:45:00
LastEditors: your name
Description: In User Settings Edit
FilePath: \evm-store\backend\view\app_logs.py
'''
#!/usr/bin/env python #!/usr/bin/env python
# -*- coding: utf_8 -*- # -*- coding: utf_8 -*-
import os
import json
import datetime
import logging import logging
import traceback import traceback
from flask import Blueprint, request from flask import Blueprint, request
...@@ -10,7 +15,7 @@ from app import config, signalManager ...@@ -10,7 +15,7 @@ from app import config, signalManager
from fullstack.login import Auth from fullstack.login import Auth
from fullstack.validation import validate_schema from fullstack.validation import validate_schema
from fullstack.response import ResponseCode, response_result from fullstack.response import ResponseCode, response_result
from schema.app_logs import AddSchema, DeleteSchema, QuerySchema, UpdateSchema, ResponseSchema from schema.app_logs import AddSchema, DeleteSchema, QuerySchema, UpdateSchema
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
......
#!/usr/bin/env python #!/usr/bin/env python
# -*- coding: utf_8 -*- # -*- coding: utf_8 -*-
import os import os
import json
import logging import logging
import traceback import traceback
from datetime import datetime from datetime import datetime
...@@ -13,7 +12,7 @@ from app import config, signalManager ...@@ -13,7 +12,7 @@ from app import config, signalManager
from fullstack.login import Auth from fullstack.login import Auth
from fullstack.validation import validate_schema from fullstack.validation import validate_schema
from fullstack.response import ResponseCode, response_result from fullstack.response import ResponseCode, response_result
from schema.apps import AddSchema, DeleteSchema, QuerySchema, UpdateSchema from schema.apps import AddSchema, QuerySchema, UpdateSchema
from schema.build_logs import AddSchema as LogAddScheme, QuerySchema as LogQuerySchema from schema.build_logs import AddSchema as LogAddScheme, QuerySchema as LogQuerySchema
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
......
'''
Author: your name
Date: 2021-04-14 14:12:18
LastEditTime: 2021-07-01 14:44:36
LastEditors: your name
Description: In User Settings Edit
FilePath: \evm-store\backend\view\device.py
'''
#!/usr/bin/env python #!/usr/bin/env python
# -*- coding: utf_8 -*- # -*- coding: utf_8 -*-
import os
import json
import datetime
import logging import logging
import traceback import traceback
from flask import Blueprint, request from flask import Blueprint, request
...@@ -10,7 +15,7 @@ from app import config, signalManager ...@@ -10,7 +15,7 @@ from app import config, signalManager
from fullstack.login import Auth from fullstack.login import Auth
from fullstack.validation import validate_schema from fullstack.validation import validate_schema
from fullstack.response import ResponseCode, response_result from fullstack.response import ResponseCode, response_result
from schema.device import AddSchema, DeleteSchema, QuerySchema, UpdateSchema from schema.device import AddSchema, QuerySchema, UpdateSchema
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
......
#!/usr/bin/env python #!/usr/bin/env python
# -*- coding: utf_8 -*- # -*- coding: utf_8 -*-
import os
import json
import datetime
import logging import logging
import traceback import traceback
from flask import Blueprint, request from flask import Blueprint, request
...@@ -54,15 +51,18 @@ def delete(id): ...@@ -54,15 +51,18 @@ def delete(id):
@validate_schema(DownloadSchema) @validate_schema(DownloadSchema)
def get(): def get():
try: try:
result, message = signalManager.actionGetDownload.emit(request.schema_data) data = request.schema_data
print(message) data.update({ 'real_ip': request.headers.get('X-Forwarded-For', '127.0.0.1') })
result, message = signalManager.actionGetDownload.emit(data)
# 读取epk文件,按照格式返回相应结构体数据 # 读取epk文件,按照格式返回相应结构体数据
ret = "" logger.info(data)
if isinstance(result, str) and os.path.exists(result): if result:
with open(result, "rb") as f: ret = result.read_bytes()
ret = f.read() # with open(result.as_posix(), "rb") as f:
# ret = f.read()
# logger.info(type(ret))
return ret return ret
return response_result(ResponseCode.SERVER_ERROR, msg="file not found") return response_result(ResponseCode.SERVER_ERROR, msg=message)
except Exception as e: except Exception as e:
traceback.print_exc() traceback.print_exc()
logger.error(str(e)) logger.error(str(e))
......
...@@ -2,15 +2,12 @@ ...@@ -2,15 +2,12 @@
# -*- coding: utf_8 -*- # -*- coding: utf_8 -*-
import os import os
import re
import sys
import traceback import traceback
import tempfile import tempfile
import shutil
import base64 import base64
import logging import logging
from hashlib import md5 as fmd5 from hashlib import md5 as fmd5
from flask import Blueprint, request, redirect, url_for, json from flask import Blueprint, request, json
from app.setting import config from app.setting import config
from pony.orm import * from pony.orm import *
......
'''
Author: your name
Date: 2021-04-14 14:12:18
LastEditTime: 2021-07-01 14:45:53
LastEditors: your name
Description: In User Settings Edit
FilePath: \evm-store\backend\view\login.py
'''
#!/usr/bin/env python #!/usr/bin/env python
# -*- coding: utf_8 -*- # -*- coding: utf_8 -*-
import logging import logging
import traceback import traceback
from flask import Blueprint, request, redirect, url_for, json, Response from flask import Blueprint, request, redirect, url_for
from app import config, signalManager from app import config, signalManager
from fullstack.login import Auth from fullstack.login import Auth
from fullstack.validation import validate_schema from fullstack.validation import validate_schema
......
This diff is collapsed.
#!/usr/bin/env python
# -*- coding: utf_8 -*-
import os
import json
import datetime
import logging
import traceback
from flask import Blueprint, request
from app import config, signalManager
from fullstack.login import Auth
from fullstack.validation import validate_schema
from fullstack.response import ResponseCode, response_result
from schema.netdisc import AddSchema, DeleteSchema, QuerySchema, UpdateSchema
from utils import random_string
logger = logging.getLogger(__name__)
netdisc_api = Blueprint("netdisc_api", __name__, url_prefix="/api/v1/%s/netdisc" % config['NAME'])
FileStoragePath = os.path.normpath(os.path.join(config.get("UPLOAD_PATH"), config.get("NETDISC")))
if not os.path.exists(FileStoragePath):
os.mkdir(FileStoragePath)
@netdisc_api.route("/add", methods=['POST'])
@validate_schema(AddSchema)
@Auth.auth_required
def add():
try:
binfile = request.files.get("binfile")
information = {
"name": "",
"size": 0,
"is_dir": False,
"file_type": request.schema_data.get("file_type"),
"parent_dir": request.schema_data.get("parent_dir"),
"real_path": "",
}
if not binfile and not request.schema_data.get("file_type") and not request.schema_data.get("parent_dir") and not request.schema_data.get("name"):
return response_result(ResponseCode.NO_DATA, msg="file can not be null")
if os.path.normpath(information['parent_dir']).replace('\\', '/') == "/":
result = { "real_path": FileStoragePath }
else:
t = os.path.normpath(information['parent_dir']).replace('\\', '/')
b = os.path.basename(t)
d = os.path.dirname(t)
result, message = signalManager.actionGetNetDisc.emit({ "name": b, "parent_dir": d })
if not result:
return response_result(ResponseCode.NO_DATA_FOUND, msg="parent directory does not exists.")
if not binfile:
information['is_dir'] = True
information['file_type'] = 'dir'
information['name'] = request.schema_data.get("name")
information['real_path'] = os.path.normpath(os.sep.join([result.get("real_path"), information['name']]))
information['parent_dir'] = os.path.normpath(information['parent_dir']).replace('\\', '/')
# os.path.relpath()
if os.path.exists(information['real_path']):
return response_result(ResponseCode.EXISTS_ERROR, msg="File [%s] is existed! Please remove firstly" % information['real_path'])
print(result.get("real_path"), information['name'])
os.chdir(result.get("real_path")) # 切换目录
os.mkdir(information['name']) # 创建目录
else:
information['name'] = binfile.filename
saveFile = os.path.normpath(os.sep.join([result.get("real_path"), information['name']]))
if os.path.exists(saveFile):
return response_result(ResponseCode.EXISTS_ERROR, msg="File [%s] is existed! Please remove firstly" % saveFile)
with open(saveFile, 'wb') as f:
f.write(binfile.stream.read())
information['size'] = os.path.getsize(saveFile)
if not information['file_type']:
information['file_type'] = os.path.splitext(information['name'])[-1]
information['real_path'] = saveFile
information['parent_dir'] = os.path.normpath(information['parent_dir']).replace('\\', '/')
isSuccess, message = signalManager.actionAddNetDisc.emit(information)
if isSuccess:
return response_result(ResponseCode.OK, msg=message)
else:
return response_result(ResponseCode.REQUEST_ERROR, msg=message)
except Exception as e:
traceback.print_exc()
logger.error(str(e))
return response_result(ResponseCode.SERVER_ERROR, msg=str(e))
@netdisc_api.route("/delete", methods=['POST'])
@validate_schema(DeleteSchema)
@Auth.auth_required
def delete():
try:
result, message = signalManager.actionDeleteNetDisc.emit(request.schema_data)
if result:
for f in result:
if f[0]: os.rmdir(f[1])
else: os.remove(f[1])
return response_result(ResponseCode.OK, msg=message)
else:
return response_result(ResponseCode.REQUEST_ERROR, msg=message)
except Exception as e:
traceback.print_exc()
logger.error(str(e))
return response_result(ResponseCode.SERVER_ERROR)
@netdisc_api.route("/get", methods=["POST"])
@validate_schema(QuerySchema)
@Auth.auth_required
def get():
try:
result, message = signalManager.actionGetNetDisc.emit(request.schema_data)
if result:
return response_result(ResponseCode.OK, data=result, msg=message)
else:
return response_result(ResponseCode.REQUEST_ERROR, msg=message)
except Exception as e:
traceback.print_exc()
logger.error(str(e))
return response_result(ResponseCode.SERVER_ERROR, msg=str(e))
@netdisc_api.route("/list", methods=['POST'])
@validate_schema(QuerySchema)
@Auth.auth_required
def get_list():
try:
result, count, message = signalManager.actionGetNetDiscList.emit(request.schema_data)
if result:
return response_result(ResponseCode.OK, data=result, msg=message, count=count)
else:
return response_result(ResponseCode.REQUEST_ERROR, msg=message)
except Exception as e:
traceback.print_exc()
logger.error(str(e))
return response_result(ResponseCode.SERVER_ERROR)
@netdisc_api.route("/update/<uuid:id>", methods=['POST'])
@validate_schema(UpdateSchema)
@Auth.auth_required
def update(id):
try:
result, message = signalManager.actionUpdateNetDisc.emit(id, request.schema_data)
if result:
print(result)
os.rename(result.get("src"), result.get("dst"))
return response_result(ResponseCode.OK, msg=message)
else:
return response_result(ResponseCode.REQUEST_ERROR, msg=message)
except Exception as e:
traceback.print_exc()
logger.error(str(e))
return response_result(ResponseCode.SERVER_ERROR)
...@@ -2,13 +2,12 @@ ...@@ -2,13 +2,12 @@
# -*- coding: utf_8 -*- # -*- coding: utf_8 -*-
import logging import logging
import traceback import traceback
from flask import Blueprint, request, redirect, url_for, json, Response from flask import Blueprint, request
from app import config, signalManager from app import config, signalManager
from utils import filter_dict
from fullstack.login import Auth from fullstack.login import Auth
from fullstack.validation import validate_schema from fullstack.validation import validate_schema
from fullstack.response import ResponseCode, response_result from fullstack.response import ResponseCode, response_result
from schema.user import AddSchema, DeleteSchema, UpdateSchema, QuerySchema, ResponseSchema from schema.user import AddSchema, DeleteSchema, UpdateSchema, QuerySchema
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
...@@ -22,14 +21,13 @@ def add(): ...@@ -22,14 +21,13 @@ 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:
return response_result(ResponseCode.REQUEST_ERROR, msg=message) return response_result(ResponseCode.REQUEST_ERROR, msg=message)
except Exception as e: except Exception as e:
traceback.print_exc() traceback.print_exc()
logger.error(str(e))
return response_result(ResponseCode.SERVER_ERROR, msg=str(e)) return response_result(ResponseCode.SERVER_ERROR, msg=str(e))
...@@ -59,7 +57,7 @@ def get(): ...@@ -59,7 +57,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:
......
''' '''
Author: your name Author: your name
Date: 2021-04-14 14:12:18 Date: 2021-04-14 14:12:18
LastEditTime: 2021-06-29 19:39:04 LastEditTime: 2021-07-03 11:57:41
LastEditors: your name LastEditors: Please set LastEditors
Description: In User Settings Edit Description: In User Settings Edit
FilePath: \evm-store\backend\view\ws.py FilePath: \evm-store\backend\view\ws.py
''' '''
...@@ -36,7 +36,7 @@ def pushmessage(func): ...@@ -36,7 +36,7 @@ def pushmessage(func):
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_message(json.dumps(msg), binary)
elif isinstance(msg, str) or isinstance(msg, unicode): elif isinstance(msg, str) or isinstance(msg, str):
self.write_message(msg, binary) self.write_message(msg, binary)
else: else:
self.write_message(repr(msg), binary) self.write_message(repr(msg), binary)
......
...@@ -15,7 +15,6 @@ ...@@ -15,7 +15,6 @@
<strong>We're sorry but <%= htmlWebpackPlugin.options.title %> doesn't work properly without JavaScript enabled. Please enable it to continue.</strong> <strong>We're sorry but <%= htmlWebpackPlugin.options.title %> doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>
</noscript> </noscript>
<div id="app"></div> <div id="app"></div>
<script src="https://cdn.jsdelivr.net/npm/gsap@3.1.1/dist/gsap.min.js"></script>
</body> </body>
</html> </html>
\ No newline at end of file
...@@ -323,37 +323,6 @@ export function getPaybackList(params) { ...@@ -323,37 +323,6 @@ export function getPaybackList(params) {
}); });
} }
export function addAnnex(params) {
return request({
url: "/api/v1/evm_store/annex/add",
method: "post",
data: params,
});
}
export function deleteAnnex(id) {
return request({
url: `/api/v1/evm_store/annex/delete/${id}`,
method: "post",
});
}
export function getAnnexList(params) {
return request({
url: "/api/v1/evm_store/annex/list",
method: "post",
data: params,
});
}
export function updateAnnex(id, params) {
return request({
url: `/api/v1/evm_store/annex/update/${id}`,
method: "post",
data: params,
});
}
export function deleteProjectUser(params) { export function deleteProjectUser(params) {
return request({ return request({
url: "/api/v1/evm_store/system/deleteProjectUser", url: "/api/v1/evm_store/system/deleteProjectUser",
......
...@@ -433,7 +433,7 @@ ...@@ -433,7 +433,7 @@
<div class="dropdown" v-show="userShow" style="right: 20px;"> <div class="dropdown" v-show="userShow" style="right: 20px;">
<ul> <ul>
<li @click="redirectTo('/profile')"> <li @click="redirectTo('/profile/index')">
<i aria-label="图标: user" class="webicon"> <i aria-label="图标: user" class="webicon">
<svg viewBox="64 64 896 896" data-icon="user" width="1em" height="1em" fill="currentColor" aria-hidden="true" focusable="false"><path d="M858.5 763.6a374 374 0 0 0-80.6-119.5 375.63 375.63 0 0 0-119.5-80.6c-.4-.2-.8-.3-1.2-.5C719.5 518 760 444.7 760 362c0-137-111-248-248-248S264 225 264 362c0 82.7 40.5 156 102.8 201.1-.4.2-.8.3-1.2.5-44.8 18.9-85 46-119.5 80.6a375.63 375.63 0 0 0-80.6 119.5A371.7 371.7 0 0 0 136 901.8a8 8 0 0 0 8 8.2h60c4.4 0 7.9-3.5 8-7.8 2-77.2 33-149.5 87.8-204.3 56.7-56.7 132-87.9 212.2-87.9s155.5 31.2 212.2 87.9C779 752.7 810 825 812 902.2c.1 4.4 3.6 7.8 8 7.8h60a8 8 0 0 0 8-8.2c-1-47.8-10.9-94.3-29.5-138.2zM512 534c-45.9 0-89.1-17.9-121.6-50.4S340 407.9 340 362c0-45.9 17.9-89.1 50.4-121.6S466.1 190 512 190s89.1 17.9 121.6 50.4S684 316.1 684 362c0 45.9-17.9 89.1-50.4 121.6S557.9 534 512 534z"></path></svg> <svg viewBox="64 64 896 896" data-icon="user" width="1em" height="1em" fill="currentColor" aria-hidden="true" focusable="false"><path d="M858.5 763.6a374 374 0 0 0-80.6-119.5 375.63 375.63 0 0 0-119.5-80.6c-.4-.2-.8-.3-1.2-.5C719.5 518 760 444.7 760 362c0-137-111-248-248-248S264 225 264 362c0 82.7 40.5 156 102.8 201.1-.4.2-.8.3-1.2.5-44.8 18.9-85 46-119.5 80.6a375.63 375.63 0 0 0-80.6 119.5A371.7 371.7 0 0 0 136 901.8a8 8 0 0 0 8 8.2h60c4.4 0 7.9-3.5 8-7.8 2-77.2 33-149.5 87.8-204.3 56.7-56.7 132-87.9 212.2-87.9s155.5 31.2 212.2 87.9C779 752.7 810 825 812 902.2c.1 4.4 3.6 7.8 8 7.8h60a8 8 0 0 0 8-8.2c-1-47.8-10.9-94.3-29.5-138.2zM512 534c-45.9 0-89.1-17.9-121.6-50.4S340 407.9 340 362c0-45.9 17.9-89.1 50.4-121.6S466.1 190 512 190s89.1 17.9 121.6 50.4S684 316.1 684 362c0 45.9-17.9 89.1-50.4 121.6S557.9 534 512 534z"></path></svg>
</i>个人中心 </i>个人中心
...@@ -507,6 +507,8 @@ export default { ...@@ -507,6 +507,8 @@ export default {
if (path == "/login") { if (path == "/login") {
this.$store.dispatch("user/removeRole") this.$store.dispatch("user/removeRole")
this.$store.dispatch("user/removeToken") this.$store.dispatch("user/removeToken")
} else if (path == "/profile/index" && this.$route.path == "/profile/index") {
return false;
} }
this.$router.push(path) this.$router.push(path)
}, },
......
/* /*
* @Author: your name * @Author: your name
* @Date: 2021-04-14 14:12:19 * @Date: 2021-04-14 14:12:19
* @LastEditTime: 2021-07-01 00:41:19 * @LastEditTime: 2021-07-14 21:29:01
* @LastEditors: Please set LastEditors * @LastEditors: Please set LastEditors
* @Description: In User Settings Edit * @Description: In User Settings Edit
* @FilePath: \evm-store\frontend\src\main.js * @FilePath: \evm-store\frontend\src\main.js
*/ */
import Vue from "vue"; import Vue from "vue";
import "normalize.css/normalize.css"; // A modern alternative to CSS resets import "normalize.css/normalize.css";
import ElementUI from "element-ui"; import ElementUI from "element-ui";
import "element-ui/lib/theme-chalk/index.css"; import "element-ui/lib/theme-chalk/index.css";
......
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"];
......
...@@ -238,7 +238,7 @@ export const constantRoutes = [ ...@@ -238,7 +238,7 @@ export const constantRoutes = [
path: 'index', path: 'index',
name: 'Monitor', name: 'Monitor',
component: () => import('@/views/system/monitor'), component: () => import('@/views/system/monitor'),
meta: { title: 'monitor', icon: 'home' } meta: { title: '资源监视', icon: 'home' }
}] }]
}, },
{ {
......
/* /*
* @Author: your name * @Author: your name
* @Date: 2021-04-14 14:12:19 * @Date: 2021-04-14 14:12:19
* @LastEditTime: 2021-07-01 11:26:51 * @LastEditTime: 2021-07-14 21:28:48
* @LastEditors: Please set LastEditors * @LastEditors: Please set LastEditors
* @Description: In User Settings Edit * @Description: In User Settings Edit
* @FilePath: \evm-store\frontend\src\settings.js * @FilePath: \evm-store\frontend\src\settings.js
...@@ -71,6 +71,20 @@ export default { ...@@ -71,6 +71,20 @@ export default {
icon: "gongzuotai", icon: "gongzuotai",
path: "monitor/index", path: "monitor/index",
}, },
// {
// vue: "system/chart.vue",
// title: "实时曲线",
// name: "AppChart",
// icon: "gongzuotai",
// path: "chart/index",
// },
// {
// vue: "system/history.vue",
// title: "历史曲线",
// name: "AppHistoryChart",
// icon: "gongzuotai",
// path: "history/index",
// },
{ {
vue: "system/chart.vue", vue: "system/chart.vue",
title: "实时曲线", title: "实时曲线",
......
/* /*
* @Author: your name * @Author: your name
* @Date: 2021-04-14 14:12:19 * @Date: 2021-04-14 14:12:19
* @LastEditTime: 2021-07-01 01:11:46 * @LastEditTime: 2021-07-14 21:27:18
* @LastEditors: Please set LastEditors * @LastEditors: Please set LastEditors
* @Description: In User Settings Edit * @Description: In User Settings Edit
* @FilePath: \evm-store\frontend\src\utils\wsNotify.js * @FilePath: \evm-store\frontend\src\utils\wsNotify.js
......
This diff is collapsed.
...@@ -31,15 +31,14 @@ module.exports = { ...@@ -31,15 +31,14 @@ module.exports = {
// change xxx-api/login => mock/login // change xxx-api/login => mock/login
// detail: https://cli.vuejs.org/config/#devserver-proxy // detail: https://cli.vuejs.org/config/#devserver-proxy
"/api/v1": { "/api/v1": {
target: "http://127.0.0.1:5001/", target: "http://127.0.0.1:3000/",
changeOrigin: true, changeOrigin: true,
pathRewrite: {}, pathRewrite: {},
}, },
"/api/v1/kxpms": { "/api/v1/evm_store": {
target: "http://192.168.1.106:5000/", target: "http://store.evmiot.com/",
changeOrigin: true, changeOrigin: true,
pathRewrite: { pathRewrite: {
"^/online": "/",
// 这里理解成用/api代替target里面的地址,后面组件中我们调用接口时直接用api代替 // 这里理解成用/api代替target里面的地址,后面组件中我们调用接口时直接用api代替
// 比如我要调用'http://40.00.100.100:3002/user/add',直接写'/api/user/add'即可 // 比如我要调用'http://40.00.100.100:3002/user/add',直接写'/api/user/add'即可
}, },
......
''' '''
Author: your name Author: your name
Date: 2021-06-30 17:43:46 Date: 2021-06-30 17:43:46
<<<<<<< HEAD
LastEditTime: 2021-07-09 13:10:51 LastEditTime: 2021-07-09 13:10:51
=======
LastEditTime: 2021-07-14 19:05:56
>>>>>>> eddff974ce207e3e9de5b4a25fc8c30e1d2283ae
LastEditors: Please set LastEditors LastEditors: Please set LastEditors
Description: In User Settings Edit Description: In User Settings Edit
FilePath: \evm-store\tools\build_out\controllers\__init__.py FilePath: \evm-store\tools\build_out\controllers\__init__.py
......
<<<<<<< HEAD
=======
'''
Author: your name
Date: 2021-06-30 18:03:41
LastEditTime: 2021-07-14 19:06:40
LastEditors: Please set LastEditors
Description: In User Settings Edit
FilePath: \evm-store\tools\build_out\controllers\area.py
'''
>>>>>>> eddff974ce207e3e9de5b4a25fc8c30e1d2283ae
from datetime import datetime from datetime import datetime
from application.app import db from application.app import db
from models.area import AreaModel from models.area import AreaModel
......
<<<<<<< HEAD
=======
'''
Author: your name
Date: 2021-06-30 18:03:41
LastEditTime: 2021-07-14 19:08:22
LastEditors: Please set LastEditors
Description: In User Settings Edit
FilePath: \evm-store\tools\build_out\controllers\package.py
'''
#!/usr/bin/env python
# -*- coding: utf_8 -*-
import os
import re
import shutil
>>>>>>> eddff974ce207e3e9de5b4a25fc8c30e1d2283ae
from datetime import datetime from datetime import datetime
from application.app import db from application.app import db
from models.package import PackageModel from models.package import PackageModel
......
<<<<<<< HEAD
=======
'''
Author: your name
Date: 2021-06-30 18:03:41
LastEditTime: 2021-07-14 19:08:34
LastEditors: your name
Description: In User Settings Edit
FilePath: \evm-store\tools\build_out\controllers\user.py
'''
#!/usr/bin/env python
# -*- coding: utf_8 -*-
>>>>>>> eddff974ce207e3e9de5b4a25fc8c30e1d2283ae
from datetime import datetime from datetime import datetime
from application.app import db from application.app import db
from models.user import UserModel from models.user import UserModel
......
This diff is collapsed.
<<<<<<< HEAD
=======
'''
Author: your name
Date: 2021-06-30 18:03:41
LastEditTime: 2021-07-14 19:10:44
LastEditors: your name
Description: In User Settings Edit
FilePath: \evm-store\tools\build_out\views\login.py
'''
#!/usr/bin/env python
# -*- coding: utf_8 -*-
>>>>>>> eddff974ce207e3e9de5b4a25fc8c30e1d2283ae
from flask import current_app, jsonify, request from flask import current_app, jsonify, request
from flask_restful import Resource from flask_restful import Resource
from flask_restful.reqparse import RequestParser from flask_restful.reqparse import RequestParser
......
<<<<<<< HEAD
=======
'''
Author: your name
Date: 2021-06-30 18:03:41
LastEditTime: 2021-07-14 19:11:10
LastEditors: your name
Description: In User Settings Edit
FilePath: \evm-store\tools\build_out\views\package.py
'''
#!/usr/bin/env python
# -*- coding: utf_8 -*-
>>>>>>> eddff974ce207e3e9de5b4a25fc8c30e1d2283ae
from flask import current_app, jsonify, request from flask import current_app, jsonify, request
from flask_restful import Resource from flask_restful import Resource
from flask_restful.reqparse import RequestParser from flask_restful.reqparse import RequestParser
......
...@@ -103,7 +103,6 @@ import PageHeaderWrapper from "@/components/PageHeaderWrapper"; ...@@ -103,7 +103,6 @@ import PageHeaderWrapper from "@/components/PageHeaderWrapper";
import DescriptionItem from "@/components/DescriptionItem"; import DescriptionItem from "@/components/DescriptionItem";
export default { export default {
name: 'BasicForm', name: 'BasicForm',
i18n: require('./i18n'),
data () { data () {
return { return {
value: 1 value: 1
......
...@@ -131,6 +131,31 @@ def handleModules(config): ...@@ -131,6 +131,31 @@ def handleModules(config):
else: else:
log.logger.error("文件:%s 不存在") log.logger.error("文件:%s 不存在")
def handleModuleConfig(config):
# 处理每一项配置文件
# 入口文件名
# 实例对象,根据这个实例连接对应请求
# 实例方法,需要根据实例方法生成事件函数
'''
'''
pass
def handleModules(config):
global output_dir
# 遍历modules结构,判断文件是否存在,并且enable已经打开
# 如果文件不存在,则直接报错
# 本质上这是一个文件拷贝的操作
for mod in config:
p = Path(mod.get("config"))
if not p.exists() or not mod.get("enable"):
continue
shutil.copyfile(mod.get("config"), os.sep.join([output_dir, "controllers", p.name]))
for d in mod.get("dependencies"):
if Path(d).exists():
shutil.copyfile(d, os.sep.join([output_dir, "controllers", Path(d).name]))
else:
log.logger.error("文件:%s 不存在")
def handleResources(config): def handleResources(config):
# 处理路由页面 # 处理路由页面
# 遍历config文件,收集所有的action和name,action和name的首字母必须大写 # 遍历config文件,收集所有的action和name,action和name的首字母必须大写
......
...@@ -2,8 +2,14 @@ import pprint ...@@ -2,8 +2,14 @@ import pprint
import base64 import base64
from pathlib import Path from pathlib import Path
import json import json
import mimetypes
from webcreator.log import logger
from application.config import config
from webcreator.response import ResponseCode
disk_root = "D:\\projects\\scriptiot\\evm_app_store_files" disk_root = config.UPLOAD_ROOT_DIR
logger.info(disk_root)
class FileManager(object): class FileManager(object):
def __init__(self) -> None: def __init__(self) -> None:
...@@ -42,7 +48,7 @@ class FileManager(object): ...@@ -42,7 +48,7 @@ class FileManager(object):
child.name: { "driver": "local" } child.name: { "driver": "local" }
}) })
return result return result, ResponseCode.HTTP_SUCCESS
''' '''
@description: 获取当前类别的目录信息 @description: 获取当前类别的目录信息
...@@ -89,7 +95,7 @@ class FileManager(object): ...@@ -89,7 +95,7 @@ class FileManager(object):
disk_path = Path(disk_root).joinpath(disk) disk_path = Path(disk_root).joinpath(disk)
if not disk_path.exists(): if not disk_path.exists():
return result return result
target_path = disk_path.joinpath(target_path) target_path = disk_path.joinpath(target_path)
if not target_path.exists(): if not target_path.exists():
return result return result
...@@ -122,7 +128,7 @@ class FileManager(object): ...@@ -122,7 +128,7 @@ class FileManager(object):
f.write(json.dumps(result, ensure_ascii=True)) f.write(json.dumps(result, ensure_ascii=True))
pprint.pprint(result) pprint.pprint(result)
return result return result, ResponseCode.HTTP_SUCCESS
''' '''
@description: 获取目录结构树 @description: 获取目录结构树
...@@ -167,29 +173,86 @@ class FileManager(object): ...@@ -167,29 +173,86 @@ class FileManager(object):
"timestamp": int(child.stat().st_mtime), "timestamp": int(child.stat().st_mtime),
"type": "dir" "type": "dir"
}) })
# print("//////////", child.is_dir(), child.resolve(), child.name, child.parent, child.root, child.relative_to(rp))
pprint.pprint(result) pprint.pprint(result)
return result return result, ResponseCode.HTTP_SUCCESS
def disk(self, disk): def disk(self, disk):
# select-disks
print(disk)
return True, ResponseCode.HTTP_SUCCESS
def upload(self, disk):
# select-disks
print(disk)
return True, ResponseCode.HTTP_SUCCESS
def create_dir(self, disk, target_file):
# create directory
print(disk, target_file)
return True, ResponseCode.HTTP_SUCCESS
def create_file(self, disk, target_file, content):
# create file
print(disk, target_file, content)
return True, ResponseCode.HTTP_SUCCESS
def delete(self, disk):
# delete file
print(disk) print(disk)
return True return True, ResponseCode.HTTP_SUCCESS
def download(self, disk): def copy(self, disk):
# copy file
print(disk) print(disk)
return True return True, ResponseCode.HTTP_SUCCESS
def cut(self, disk):
# cut file
print(disk)
return True, ResponseCode.HTTP_SUCCESS
def paste(self, disk):
# paste file
print(disk)
return True, ResponseCode.HTTP_SUCCESS
def download(self, disk, target_file):
# 获取文件内容
if not target_file:
target_file = Path('result.json')
else:
target_file = Path(disk_root).joinpath(disk).joinpath(target_file)
if not target_file.exists():
return False, ResponseCode.HTTP_NOT_FOUND
# with open(target_file.resolve().as_posix(), "r", encoding="utf-8") as f:
# data = f.read()
# logger.info(data)
mime = mimetypes.guess_type(target_file.resolve().as_posix())[0]
content = target_file.read_text(encoding="utf-8")
return (content, mime), ResponseCode.HTTP_SUCCESS
def preview(self, disk, target_file): def preview(self, disk, target_file):
# 预览图片 # 预览图片
img_stream = None
if not target_file: if not target_file:
target_file = './evue_photo.png' target_file = Path('evue_photo.png')
with open(target_file, 'rb') as img_f: else:
img_stream = img_f.read() target_file = Path(disk_root).joinpath(disk).joinpath(target_file)
img_stream = base64.b64encode(img_stream).decode()
print(disk, target_file) if not target_file.exists():
return img_stream return False, ResponseCode.HTTP_NOT_FOUND
mime = mimetypes.guess_type(target_file.resolve().as_posix())[0]
# mime = MimeTypes.guess_type(target_file.resolve().as_posix())
img_stream = target_file.read_bytes()
# with open(target_file, 'rb') as img_f:
# img_stream = img_f.read()
# img_stream = base64.b64encode(img_stream).decode()
return (img_stream, mime), ResponseCode.HTTP_SUCCESS
fileManager = FileManager() fileManager = FileManager()
...@@ -204,7 +267,7 @@ if __name__ == "__main__": ...@@ -204,7 +267,7 @@ if __name__ == "__main__":
result = fileManager.initialize() result = fileManager.initialize()
print("----->", result) print("----->", result)
result = fileManager.content("uploads", "evueapps/evm") result = fileManager.content("uploads", "evueapps/evm")
print(">>>>>>", result) print(">>>>>>", result)
...@@ -212,4 +275,4 @@ if __name__ == "__main__": ...@@ -212,4 +275,4 @@ if __name__ == "__main__":
print("=====>", result) print("=====>", result)
result = fileManager.preview("uploads", "evueapps/evm") result = fileManager.preview("uploads", "evueapps/evm")
print("$$$$$>", result) print("$$$$$>", result)
\ No newline at end of file
'''
Author: your name
Date: 2021-06-15 17:40:06
LastEditTime: 2021-06-30 18:17:48
LastEditors: your name
Description: In User Settings Edit
FilePath: \evm-store\tools\resources\application\__init__.py
'''
#!/usr/bin/env python #!/usr/bin/env python
# -*- coding: utf_8 -*- # -*- coding: utf_8 -*-
......
'''
Author: your name
Date: 2021-06-15 17:40:09
LastEditTime: 2021-06-30 18:09:51
LastEditors: Please set LastEditors
Description: In User Settings Edit
FilePath: \evm-store\tools\resources\manager.py
'''
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from tornado.wsgi import WSGIContainer from tornado.wsgi import WSGIContainer
from tornado.httpserver import HTTPServer from tornado.httpserver import HTTPServer
......
'''
Author: your name
Date: 2021-04-22 18:04:10
LastEditTime: 2021-06-30 17:22:15
LastEditors: Please set LastEditors
Description: In User Settings Edit
FilePath: \evm-store\tools\resources\models\__init__.py
'''
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from sqlalchemy import create_engine from sqlalchemy import create_engine
from sqlalchemy import Column, Integer, String from sqlalchemy import Column, Integer, String
......
'''
Author: your name
Date: 2021-06-15 17:40:14
LastEditTime: 2021-06-30 17:22:44
LastEditors: Please set LastEditors
Description: In User Settings Edit
FilePath: \evm-store\tools\resources\webcreator\event.py
'''
# -*- coding: utf_8 -*- # -*- coding: utf_8 -*-
<<<<<<< HEAD
############################
# 信号槽
############################
=======
>>>>>>> 68ec88f3f356b5c61817a0f9df8d40a3e46b4fd0
class PySignal(object): class PySignal(object):
""" """
Simple event class used to provide hooks for different types of events in Locust. Simple event class used to provide hooks for different types of events in Locust.
......
'''
Author: your name
Date: 2021-04-22 18:04:15
LastEditTime: 2021-07-09 00:52:08
LastEditors: your name
Description: In User Settings Edit
FilePath: \evm-store\tools\resources\webcreator\log.py
'''
# -*- coding: utf_8 -*- # -*- coding: utf_8 -*-
import os import os
......
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