Commit a09e6ebb authored by wanli's avatar wanli

feat(): 更新后端自动生成代码逻辑工具

parent e71d89cf
......@@ -60,7 +60,14 @@ def _custom_abort(http_status_code, **kwargs):
自定义abort 400响应数据格式
"""
if http_status_code == 400:
return abort(jsonify(response_result(ResponseCode.HTTP_INVAILD_REQUEST, data=kwargs)))
message = kwargs.get('msg')
if isinstance(message, dict):
param, info = list(message.items())[0]
data = '{}:{}!'.format(param, info)
return abort(jsonify(response_result(ResponseCode.HTTP_INVAILD_REQUEST, data=data)))
else:
return abort(jsonify(response_result(ResponseCode.HTTP_INVAILD_REQUEST, data=message)))
# return { 'code': http_status_code, 'msg': kwargs.get('message') }
return abort(http_status_code)
def _access_control(response):
......
'''
Author: your name
Date: 2021-06-30 17:43:46
LastEditTime: 2021-07-22 10:17:02
LastEditTime: 2021-07-14 18:40:19
LastEditors: Please set LastEditors
Description: In User Settings Edit
FilePath: \evm-store\tools\build_out\application\config.py
......@@ -41,14 +41,14 @@ class ProductionConfig(object):
MYSQL_USER = 'debian-sys-maint'
MYSQL_PWD = 'XMigC2B2uugnv18y'
SQLALCHEMY_BINDS = {
'app-store': 'sqlite:///../evue-store.db'
'app-store': 'sqlite:///../test.db'
}
SQLALCHEMY_DATABASE_URI = 'sqlite:///../evue-store.db'
SQLALCHEMY_DATABASE_URI = 'sqlite:///../test.db'
def __init__(self):
super().__init__()
self.SQLALCHEMY_DATABASE_URI = 'sqlite:///../evue-store.db'
self.SQLALCHEMY_DATABASE_URI = 'sqlite:///../test.db'
class DevelopConfig(object):
......@@ -80,16 +80,16 @@ class DevelopConfig(object):
MYSQL_USER = 'debian-sys-maint'
MYSQL_PWD = 'XMigC2B2uugnv18y'
SQLALCHEMY_BINDS = {
'app-store': 'sqlite:///../evue-store.db'
'app-store': 'sqlite:///../test.db'
}
SQLALCHEMY_DATABASE_URI = 'sqlite:///../evue-store.db'
SQLALCHEMY_DATABASE_URI = 'sqlite:///../test.db'
SQLALCHEMY_TRACK_MODIFICATIONS = True
SQLALCHEMY_ECHO = False
def __init__(self):
super().__init__()
self.SQLALCHEMY_DATABASE_URI = 'sqlite:///../evue-store.db'
self.SQLALCHEMY_DATABASE_URI = 'sqlite:///../test.db'
if MODE == 'production':
config = ProductionConfig()
......
'''
Author: your name
Date: 2021-06-30 18:03:41
LastEditTime: 2021-07-23 00:26:38
Date: 2021-07-15 09:33:39
LastEditTime: 2021-07-27 20:11:47
LastEditors: Please set LastEditors
Description: In User Settings Edit
FilePath: \evm-store\tools\build_out\application\signal_manager.py
......@@ -14,42 +14,45 @@ from webcreator.event import PySignal
class SignalManager(object):
actionPostArea = PySignal()
actionDeleteArea = PySignal()
actionGetListArea = PySignal()
actionGetlistArea = PySignal()
actionGetArea = PySignal()
actionPutArea = PySignal()
actionPostApp = PySignal()
actionDeleteApp = PySignal()
actionGetListApp = PySignal()
actionGetlistApp = PySignal()
actionGetApp = PySignal()
actionPutApp = PySignal()
actionGetListPackage = PySignal()
actionGetlistPackage = PySignal()
actionGetPackage = PySignal()
actionPostUser = PySignal()
actionDeleteUser = PySignal()
actionGetListUser = PySignal()
actionGetlistUser = PySignal()
actionGetUser = PySignal()
actionPutUser = PySignal()
actionPostLogin = PySignal()
actionGetListLogin = PySignal()
actionGetlistLogin = PySignal()
actionGetLogin = PySignal()
actionPostDevice = PySignal()
actionDeleteDevice = PySignal()
actionGetListDevice = PySignal()
actionGetlistDevice = PySignal()
actionGetDevice = PySignal()
actionPutDevice = PySignal()
actionDeleteAnnex = PySignal()
actionGetListAnnex = PySignal()
actionGetlistAnnex = PySignal()
actionGetAnnex = PySignal()
actionGetListMonitorWatch = PySignal()
actionGetMonitorWatch = PySignal()
actionGetListMonitorSystem = PySignal()
actionGetMonitorSystem = PySignal()
actionGetListMonitorLvgl = PySignal()
actionGetMonitorLvgl = PySignal()
actionGetListMonitorImage = PySignal()
actionGetMonitorImage = PySignal()
actionGetListMonitorEvm = PySignal()
actionGetMonitorEvm = PySignal()
actionGetlistMonitorwatch = PySignal()
actionGetMonitorwatch = PySignal()
actionGetlistMonitorsystem = PySignal()
actionGetMonitorsystem = PySignal()
actionGetlistMonitorlvgl = PySignal()
actionGetMonitorlvgl = PySignal()
actionGetlistMonitorimage = PySignal()
actionGetMonitorimage = PySignal()
actionGetlistMonitorevm = PySignal()
actionGetMonitorevm = PySignal()
actionTreelist = PySignal()
actionTreenodes = PySignal()
actionUpdatebyid = PySignal()
# file manager api
actionGetFileInit = PySignal()
actionGetFileContent = PySignal()
......
'''
Author: your name
Date: 2021-06-30 17:43:46
LastEditTime: 2021-07-23 00:27:31
LastEditors: Please set LastEditors
Description: In User Settings Edit
FilePath: \evm-store\tools\build_out\controllers\__init__.py
'''
#!/usr/bin/env python
# -*- coding: utf_8 -*-
from signal import SIGABRT
from application.signal_manager import signalManager
from .area import areaManager
from .api import appReview, buildAppResource
from .app import appManager
from .package import packageManager
from .user import userManager
......@@ -24,48 +14,53 @@ from .monitorSystem import monitorSystemManager
from .monitorLvgl import monitorLvglManager
from .monitorImage import monitorImageManager
from .monitorEvm import monitorEvmManager
from .menu import menuManager
from .api import appReview, buildAppResource
from .file import fileManager
from .workbench import workbenchResource
def initConnect():
signalManager.actionPostArea.connect(areaManager.post)
signalManager.actionDeleteArea.connect(areaManager.delete)
signalManager.actionGetListArea.connect(areaManager.getList)
signalManager.actionGetlistArea.connect(areaManager.getList)
signalManager.actionGetArea.connect(areaManager.get)
signalManager.actionPutArea.connect(areaManager.put)
signalManager.actionPostApp.connect(appManager.post)
signalManager.actionDeleteApp.connect(appManager.delete)
signalManager.actionGetListApp.connect(appManager.getList)
signalManager.actionGetlistApp.connect(appManager.getList)
signalManager.actionGetApp.connect(appManager.get)
signalManager.actionPutApp.connect(appManager.put)
signalManager.actionGetListPackage.connect(packageManager.getList)
signalManager.actionGetlistPackage.connect(packageManager.getList)
signalManager.actionGetPackage.connect(packageManager.get)
signalManager.actionPostUser.connect(userManager.post)
signalManager.actionDeleteUser.connect(userManager.delete)
signalManager.actionGetListUser.connect(userManager.getList)
signalManager.actionGetlistUser.connect(userManager.getList)
signalManager.actionGetUser.connect(userManager.get)
signalManager.actionPutUser.connect(userManager.put)
signalManager.actionPostLogin.connect(loginManager.post)
signalManager.actionGetListLogin.connect(loginManager.getList)
signalManager.actionGetlistLogin.connect(loginManager.getList)
signalManager.actionGetLogin.connect(loginManager.get)
signalManager.actionPostDevice.connect(deviceManager.post)
signalManager.actionDeleteDevice.connect(deviceManager.delete)
signalManager.actionGetListDevice.connect(deviceManager.getList)
signalManager.actionGetlistDevice.connect(deviceManager.getList)
signalManager.actionGetDevice.connect(deviceManager.get)
signalManager.actionPutDevice.connect(deviceManager.put)
signalManager.actionDeleteAnnex.connect(annexManager.delete)
signalManager.actionGetListAnnex.connect(annexManager.getList)
signalManager.actionGetlistAnnex.connect(annexManager.getList)
signalManager.actionGetAnnex.connect(annexManager.get)
signalManager.actionGetListMonitorWatch.connect(monitorWatchManager.getList)
signalManager.actionGetMonitorWatch.connect(monitorWatchManager.get)
signalManager.actionGetListMonitorSystem.connect(monitorSystemManager.getList)
signalManager.actionGetMonitorSystem.connect(monitorSystemManager.get)
signalManager.actionGetListMonitorLvgl.connect(monitorLvglManager.getList)
signalManager.actionGetMonitorLvgl.connect(monitorLvglManager.get)
signalManager.actionGetListMonitorImage.connect(monitorImageManager.getList)
signalManager.actionGetMonitorImage.connect(monitorImageManager.get)
signalManager.actionGetListMonitorEvm.connect(monitorEvmManager.getList)
signalManager.actionGetMonitorEvm.connect(monitorEvmManager.get)
signalManager.actionGetlistMonitorwatch.connect(monitorWatchManager.getList)
signalManager.actionGetMonitorwatch.connect(monitorWatchManager.get)
signalManager.actionGetlistMonitorsystem.connect(monitorSystemManager.getList)
signalManager.actionGetMonitorsystem.connect(monitorSystemManager.get)
signalManager.actionGetlistMonitorlvgl.connect(monitorLvglManager.getList)
signalManager.actionGetMonitorlvgl.connect(monitorLvglManager.get)
signalManager.actionGetlistMonitorimage.connect(monitorImageManager.getList)
signalManager.actionGetMonitorimage.connect(monitorImageManager.get)
signalManager.actionGetlistMonitorevm.connect(monitorEvmManager.getList)
signalManager.actionGetMonitorevm.connect(monitorEvmManager.get)
signalManager.actionTreelist.connect(menuManager.Treelist)
signalManager.actionTreenodes.connect(menuManager.Treenodes)
signalManager.actionUpdatebyid.connect(menuManager.Updatebyid)
# file manager api
signalManager.actionGetFileContent.connect(fileManager.content)
signalManager.actionGetFileDisk.connect(fileManager.disk)
......
......@@ -11,6 +11,7 @@ class AnnexResource(object):
def __init__(self):
super().__init__()
def get(self, uuid, params):
# handle business
filters = [AnnexModel.is_delete==False, AnnexModel.uuid==uuid]
......@@ -75,4 +76,5 @@ class AnnexResource(object):
db.session.commit()
return True, ResponseCode.HTTP_SUCCESS
annexManager = AnnexResource()
\ No newline at end of file
......@@ -11,6 +11,7 @@ class AreaResource(object):
def __init__(self):
super().__init__()
def get(self, uuid, params):
# handle business
filters = [AreaModel.is_delete==False, AreaModel.uuid==uuid]
......@@ -75,4 +76,5 @@ class AreaResource(object):
db.session.commit()
return True, ResponseCode.HTTP_SUCCESS
areaManager = AreaResource()
\ No newline at end of file
#!/usr/bin/env python
# -*- coding: utf_8 -*-
from datetime import datetime
from application.app import db
from models.menu import MenuModel
from webcreator.log import logger
from webcreator.response import ResponseCode
class MenuResource(object):
def __init__(self):
super().__init__()
def Treelist(self, params={}, jwt={}):
filters = [MenuModel.is_delete==False]
result = MenuModel.query.filter(*filters).first()
if result:
return result, ResponseCode.HTTP_SUCCESS
return None, ResponseCode.HTTP_NOT_FOUND
def Treenodes(self, params={}, jwt={}):
filters = [MenuModel.is_delete==False]
result = MenuModel.query.filter(*filters).first()
if result:
return result, ResponseCode.HTTP_SUCCESS
return None, ResponseCode.HTTP_NOT_FOUND
def Updatebyid(self, params={}, jwt={}):
filters = [MenuModel.is_delete==False]
result = MenuModel.query.filter(*filters).first()
if result:
return result, ResponseCode.HTTP_SUCCESS
return None, ResponseCode.HTTP_NOT_FOUND
menuManager = MenuResource()
\ No newline at end of file
'''
Author: your name
Date: 2021-06-15 17:40:09
LastEditTime: 2021-07-22 12:56: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 -*-
import signal
from tornado.wsgi import WSGIContainer
from tornado.web import Application, FallbackHandler
from tornado.httpserver import HTTPServer
from tornado.ioloop import IOLoop
from flask_script import Manager
from flask_migrate import Migrate
from application.app import create_app, db
from application.config import config
from views.monitor import DeviceMessageHandler, NotifyHandler, WatchHandler
# 根据配置初始化app
app = create_app(config)
migrate = Migrate(app, db)
manager = Manager(app)
class GracefulExit(SystemExit):
code = 1
def raise_graceful_exit(*args):
IOLoop.current().stop()
print("Gracefully shutdown", args)
raise GracefulExit()
@manager.command
def run():
"""
......@@ -41,7 +29,7 @@ def run():
# app.logger.setLevel(app.config.get('LOG_LEVEL', logging.INFO))
http_server = HTTPServer(WSGIContainer(app))
http_server.listen(3000, address='127.0.0.1')
http_server.listen(3000, address='127.0.0.1', xheaders=True)
IOLoop.instance().start()
@manager.command
......@@ -51,21 +39,7 @@ def debug():
To use: python3 manager.py debug
"""
# app.logger.setLevel(logging.DEBUG)
# app.run(debug=True, port=3000, host='127.0.0.1')
wsgi_app = WSGIContainer(app)
application = Application([
(r"/api/v1/evm_store/monitor", DeviceMessageHandler),
(r"/api/v1/evm_store/watch", WatchHandler),
(r"/ws/v1/notify", NotifyHandler),
(r'.*', FallbackHandler, dict(fallback=wsgi_app))
], **{ 'debug': True, })
application.listen(3001, address='127.0.0.1', xheaders=True)
# 主进程退出信号
signal.signal(signal.SIGINT, raise_graceful_exit)
signal.signal(signal.SIGTERM, raise_graceful_exit)
IOLoop.instance().start()
app.run(debug=True, port=3000, host='127.0.0.1')
if __name__ == '__main__':
manager.run()
'''
Author: your name
Date: 2021-04-22 18:04:10
LastEditTime: 2021-07-22 03:15:23
LastEditTime: 2021-07-27 20:04:43
LastEditors: Please set LastEditors
Description: In User Settings Edit
FilePath: \evm-store\tools\resources\models\__init__.py
......
'''
Author: your name
Date: 2021-07-15 09:33:39
LastEditTime: 2021-07-15 17:10:06
LastEditors: Please set LastEditors
Description: In User Settings Edit
FilePath: \evm-store\tools\build_out\models\annex.20210715101849.py
'''
#!/usr/bin/env python
# -*- coding: utf_8 -*-
......@@ -19,21 +11,17 @@ class AnnexModel(PrimaryModel):
app = db.Column(db.Integer, nullable = False)
title = db.Column(db.String(100), index = True, nullable = False, default = '')
path = db.Column(db.String(256), index = True, nullable = False, default = '')
size = db.Column(db.Integer, nullable = True)
size = db.Column(db.Integer, nullable = True, default = 0)
# __table_args__ = (
# db.Index('idx_xxx', 'xxx', mysql_using='btree'),
# )
def __init__(self, app, title, path, size, create_by=None, create_at=None, update_by=None, update_at=None):
def __init__(self, app, title='', path='', size=0):
self.app = app
self.title = title
self.path = path
self.size = size
self.create_by = create_by
self.create_at = create_at
self.update_by = update_by
self.update_at = update_at
def __repr__(self):
return '<AnnexModel %r>' % (self.app)
......@@ -46,7 +34,6 @@ class AnnexModel(PrimaryModel):
'size': self.size,
}
class DeleteAnnexSchema(ma.SQLAlchemySchema):
class Meta:
# unknown = INCLUDE # 未知字段默认包含
......@@ -56,7 +43,7 @@ class DeleteAnnexSchema(ma.SQLAlchemySchema):
deleteAnnexSchema = DeleteAnnexSchema()
class GetListAnnexSchema(ma.SQLAlchemySchema):
class GetlistAnnexSchema(ma.SQLAlchemySchema):
class Meta:
# unknown = INCLUDE # 未知字段默认包含
unknown = EXCLUDE # 未知字段默认排除
......@@ -67,8 +54,8 @@ class GetListAnnexSchema(ma.SQLAlchemySchema):
title = ma.auto_field()
app = ma.auto_field()
getListAnnexSchema = GetListAnnexSchema()
getListAnnexsSchema = GetListAnnexSchema(many=True)
getListAnnexSchema = GetlistAnnexSchema()
getListAnnexsSchema = GetlistAnnexSchema(many=True)
class GetAnnexSchema(ma.SQLAlchemySchema):
class Meta:
......
......@@ -43,7 +43,6 @@ class AreaModel(PrimaryModel):
'hasChildren': self.hasChildren,
}
class PostAreaSchema(ma.SQLAlchemySchema):
class Meta:
# unknown = INCLUDE # 未知字段默认包含
......@@ -69,7 +68,7 @@ class DeleteAreaSchema(ma.SQLAlchemySchema):
deleteAreaSchema = DeleteAreaSchema()
class GetListAreaSchema(ma.SQLAlchemySchema):
class GetlistAreaSchema(ma.SQLAlchemySchema):
class Meta:
# unknown = INCLUDE # 未知字段默认包含
unknown = EXCLUDE # 未知字段默认排除
......@@ -83,8 +82,8 @@ class GetListAreaSchema(ma.SQLAlchemySchema):
hasChildren = ma.auto_field()
field = fields.String(required=False, length=None)
getListAreaSchema = GetListAreaSchema()
getListAreasSchema = GetListAreaSchema(many=True)
getListAreaSchema = GetlistAreaSchema()
getListAreasSchema = GetlistAreaSchema(many=True)
class GetAreaSchema(ma.SQLAlchemySchema):
class Meta:
......
'''
Author: your name
Date: 2021-07-15 09:33:39
LastEditTime: 2021-07-16 11:48:39
LastEditors: Please set LastEditors
Description: In User Settings Edit
FilePath: \evm-store\tools\build_out\models\base.py
'''
#!/usr/bin/env python
# -*- coding: utf_8 -*-
# Documention: https://docs.sqlalchemy.org/en/14/orm/declarative_mixins.html
import uuid
from datetime import datetime
from application.app import db
from sqlalchemy import ForeignKey
from sqlalchemy.orm import relationship
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.ext.declarative import declared_attr
def generate_uuid():
return uuid.uuid1().hex
......@@ -27,21 +13,11 @@ class BaseModel(db.Model):
# 方法就是把__abstract__这个属性设置为True,这个类为基类,不会被创建为表!
__abstract__ = True
create_at = db.Column(db.DateTime, default=datetime.now)
create_by = db.Column(db.String(64))
update_at = db.Column(db.DateTime, default=datetime.now)
update_by = db.Column(db.String(64))
remarks = db.Column(db.String(255), default="")
is_delete = db.Column(db.Boolean, default=0)
@declared_attr
def create_by(cls):
return db.Column(db.Integer, ForeignKey("evm_user.id"))
@declared_attr
def update_by(cls):
return db.Column(db.Integer, ForeignKey("evm_user.id"))
# __table_args__ = (UniqueConstraint('machine_id', ts, value),
# Index('system_machine_id_index', 'machine_id'),
# Index('system_ts_index', ts))
is_delete = db.Column(db.BOOLEAN, default=0)
class PrimaryModel(BaseModel):
__abstract__ = True
......
#!/usr/bin/env python
# -*- coding: utf_8 -*-
from application.app import db, ma
from .base import PrimaryModel
from marshmallow import Schema, fields, INCLUDE, EXCLUDE
class MenuModel(PrimaryModel):
__tablename__ = 'evm_menu'
name = db.Column(db.String(100), nullable = True)
parentId = db.Column(db.String(100), nullable = True)
path = db.Column(db.String(100), nullable = True)
disabled = db.Column(db.Boolean, nullable = True, default = False)
fixed = db.Column(db.Boolean, nullable = False, default = False)
hasChildren = db.Column(db.Boolean, nullable = True, default = False)
icon = db.Column(db.String(100), nullable = True, default = '')
# __table_args__ = (
# db.Index('idx_xxx', 'xxx', mysql_using='btree'),
# )
def __init__(self, name, parentId, path, disabled=False, fixed=False, hasChildren=False, icon=''):
self.name = name
self.parentId = parentId
self.path = path
self.disabled = disabled
self.fixed = fixed
self.hasChildren = hasChildren
self.icon = icon
def __repr__(self):
return '<MenuModel %r>' % (self.name)
def to_dict(self):
return {
'name': self.name,
'parentId': self.parentId,
'path': self.path,
'disabled': self.disabled,
'fixed': self.fixed,
'hasChildren': self.hasChildren,
'icon': self.icon,
}
'''
Author: your name
Date: 2021-07-15 03:22:19
LastEditTime: 2021-07-23 00:32:33
LastEditors: Please set LastEditors
Description: In User Settings Edit
FilePath: \evm-store\tools\build_out\views\__init__.py
'''
#!/usr/bin/env python
# -*- coding: utf_8 -*-
# -*- coding: utf-8 -*-
from flask import Blueprint
from flask_restful import Api
from . import area
from . import openapi
from . import app
from . import package
from . import user
from . import login
from . import device
from . import annex
from . import file
from . import menu
from . import monitorWatch
from . import monitorSystem
from . import monitorLvgl
from . import monitorImage
from . import monitorEvm
from . import menu
from . import file
from . import openapi
api_v1 = Blueprint('api_v1', __name__)
api = Api(api_v1)
api.add_resource(area.AreaResource, '/area/<string:uuid>')
api.add_resource(area.AreaResourceList, '/area')
api.add_resource(app.AppResource, '/app/<string:uuid>')
api.add_resource(app.AppResourceList, '/app')
api.add_resource(openapi.AppReviewResource, '/api/app-review')
api.add_resource(openapi.CStringToolResource, '/api/convert-to-c-string')
api.add_resource(openapi.BuildAppResource, '/evm_store/application/build')
api.add_resource(openapi.Workbench, '/api/workbench')
api.add_resource(openapi.App, '/api/app')
api.add_resource(openapi.AppInfo, '/api/app-info')
api.add_resource(openapi.LauncherResource, '/api/app-launcher')
api.add_resource(openapi.AppListResource, '/api/app-list')
api.add_resource(openapi.DownloadEpk, '/api/download-epk')
api.add_resource(package.PackageResource, '/package/<string:uuid>')
api.add_resource(package.PackageResourceList, '/package')
......@@ -57,28 +36,12 @@ api.add_resource(user.UserResourceList, '/user')
api.add_resource(login.LoginResource, '/login/<string:uuid>')
api.add_resource(login.LoginResourceList, '/login')
api.add_resource(menu.MenuResource, '/menu/<string:uuid>')
api.add_resource(menu.MenuResourceList, '/menu')
api.add_resource(device.DeviceResource, '/device/<string:uuid>')
api.add_resource(device.DeviceResourceList, '/device')
api.add_resource(annex.AnnexResource, '/annex/<string:uuid>')
api.add_resource(annex.AnnexResourceList, '/annex')
api.add_resource(file.FileInit, "/file-manager/initialize")
api.add_resource(file.FileContent, "/file-manager/content")
api.add_resource(file.FileDisk, "/file-manager/select-disk")
api.add_resource(file.FileTree, "/file-manager/tree")
api.add_resource(file.FileUpdate, "/file-manager/update-file")
api.add_resource(file.FileUpload, "/file-manager/upload")
api.add_resource(file.FileDownload, "/file-manager/download")
api.add_resource(file.FilePrview, "/file-manager/preview")
api.add_resource(file.FileCreateDir, "/file-manager/create-directory")
api.add_resource(file.FileCreate, "/file-manager/create-file")
api.add_resource(file.FilePaste, "/file-manager/paste")
api.add_resource(file.FileDelete, "/file-manager/delete")
api.add_resource(monitorWatch.MonitorWatchResource, '/monitorWatch/<string:uuid>')
api.add_resource(monitorWatch.MonitorWatchResourceList, '/monitorWatch')
......@@ -93,3 +56,30 @@ api.add_resource(monitorImage.MonitorImageResourceList, '/monitorImage')
api.add_resource(monitorEvm.MonitorEvmResource, '/monitorEvm/<string:uuid>')
api.add_resource(monitorEvm.MonitorEvmResourceList, '/monitorEvm')
api.add_resource(menu.Treelist, '/api/system/menu/treeList')
api.add_resource(menu.Treenodes, '/api/system/menu/treeNodes')
api.add_resource(menu.Updatebyid, '/api/system/menu/updateById')
api.add_resource(openapi.AppReviewResource, '/api/app-review')
api.add_resource(openapi.CStringToolResource, '/api/convert-to-c-string')
api.add_resource(openapi.BuildAppResource, '/evm_store/application/build')
api.add_resource(openapi.Workbench, '/api/workbench')
api.add_resource(openapi.App, '/api/app')
api.add_resource(openapi.AppInfo, '/api/app-info')
api.add_resource(openapi.LauncherResource, '/api/app-launcher')
api.add_resource(openapi.AppListResource, '/api/app-list')
api.add_resource(openapi.DownloadEpk, '/api/download-epk')
api.add_resource(file.FileInit, "/file-manager/initialize")
api.add_resource(file.FileContent, "/file-manager/content")
api.add_resource(file.FileDisk, "/file-manager/select-disk")
api.add_resource(file.FileTree, "/file-manager/tree")
api.add_resource(file.FileUpdate, "/file-manager/update-file")
api.add_resource(file.FileUpload, "/file-manager/upload")
api.add_resource(file.FileDownload, "/file-manager/download")
api.add_resource(file.FilePrview, "/file-manager/preview")
api.add_resource(file.FileCreateDir, "/file-manager/create-directory")
api.add_resource(file.FileCreate, "/file-manager/create-file")
api.add_resource(file.FilePaste, "/file-manager/paste")
api.add_resource(file.FileDelete, "/file-manager/delete")
......@@ -10,6 +10,7 @@ from models.annex import deleteAnnexSchema, getListAnnexSchema, getListAnnexsSc
from webcreator.log import logger
from webcreator.response import ResponseCode, response_result
class AnnexResourceList(Resource):
def __init__(self):
pass
......
......@@ -10,6 +10,7 @@ from models.area import postAreaSchema, deleteAreaSchema, getListAreaSchema, ge
from webcreator.log import logger
from webcreator.response import ResponseCode, response_result
class AreaResourceList(Resource):
def __init__(self):
pass
......
This diff is collapsed.
'''
Author: your name
Date: 2021-06-29 19:33:41
LastEditTime: 2021-07-24 01:15:03
LastEditTime: 2021-07-26 18:43:32
LastEditors: Please set LastEditors
Description: In User Settings Edit
FilePath: \evm-store\backend\view\monitor.py
......
'''
Author: your name
Date: 2021-07-15 09:33:39
LastEditTime: 2021-07-17 13:29:31
LastEditTime: 2021-07-27 16:41:32
LastEditors: Please set LastEditors
Description: In User Settings Edit
FilePath: \evm-store\tools\build_out\views\package.py
......
'''
Author: your name
Date: 2021-07-15 09:33:39
LastEditTime: 2021-07-19 17:40:36
LastEditors: Please set LastEditors
Description: In User Settings Edit
FilePath: \evm-store\tools\build_out\webcreator\response.py
'''
# -*- coding: utf_8 -*-
'''
......@@ -87,22 +79,6 @@ class ResponseCode(object):
USER_EXISTS = (1010002, 'user already exists')
USER_PASSWORD_ERROR = (1010003, 'password error')
# 应用模块
APPLICATION_NOT_EXISTS = (3010001, 'application not exists')
APPLICATION_EXISTS = (3010002, 'application already exists')
# 文件管理模块
FILE_NOT_EXISTS = (3010001, 'file not exists')
FILE_EXISTS = (3010002, 'file already exists')
DIRECTORY_NOT_EXISTS = (3010003, 'directory not exists')
DIRECTORY_EXISTS = (3010004, 'directory already exists')
# 设备管理模块
DEVICE_NOT_EXISTS = (3010001, 'device not exists')
DEVICE_EXISTS = (3010002, 'device already exists')
IMEI_NOT_EXISTS = (3010001, 'device imei not exists')
IMEI_EXISTS = (3010002, 'device imei already exists')
def response_result(response, msg=None, data=None, **kwargs):
c, m = response
......
......@@ -558,7 +558,7 @@
},
{
"name": "package",
"enable": true,
"enable": false,
"controller": {
"className": "Resource"
},
......@@ -1834,6 +1834,164 @@
]
}
}
},
{
"name": "menu",
"enable": true,
"controller": {
"className": "Resource"
},
"model": {
"className": "Model",
"foreignKey": false,
"tableName": null,
"fields": [
{
"name": "name",
"dataType": "String",
"default": null,
"length": "100",
"required": false,
"toJson": true
},
{
"name": "parentId",
"dataType": "String",
"default": null,
"length": "100",
"required": false,
"toJson": true
},
{
"name": "path",
"dataType": "String",
"default": null,
"length": "100",
"required": false,
"toJson": true
},
{
"name": "disabled",
"dataType": "Boolean",
"default": false,
"required": false,
"toJson": true
},
{
"name": "fixed",
"dataType": "Boolean",
"default": false,
"required": true,
"toJson": true
},
{
"name": "hasChildren",
"dataType": "Boolean",
"default": false,
"toJson": true
},
{
"name": "icon",
"dataType": "String",
"default": "''",
"length": "100",
"required": false,
"toJson": true
}
]
},
"view": {
"restful": false,
"routes": [
{
"name": "treeList",
"auth": true,
"path": "/api/system/menu/treeList",
"method": "post",
"params": [
{
"name": "page",
"dataType": "Integer",
"location": "args",
"default": 1,
"required": false
},
{
"name": "pageSize",
"dataType": "Integer",
"location": "args",
"default": 10,
"required": false
}
]
},
{
"name": "treeNodes",
"auth": true,
"path": "/api/system/menu/treeNodes",
"method": "get",
"params": [
{
"name": "page",
"dataType": "Integer",
"location": "args",
"default": 1,
"required": false
},
{
"name": "pageSize",
"dataType": "Integer",
"location": "args",
"default": 10,
"required": false
}
]
},
{
"name": "UpdateById",
"auth": true,
"path": "/api/system/menu/updateById",
"method": "post",
"params": [
{
"name": "icon",
"dataType": "String",
"location": "json",
"default": null,
"required": false
},
{
"name": "name",
"dataType": "String",
"location": "json",
"default": null,
"required": false
},
{
"name": "parentId",
"dataType": "Integer",
"location": "json",
"default": null,
"required": false
},
{
"name": "path",
"dataType": "String",
"location": "json",
"default": null,
"required": false
},
{
"name": "remark",
"dataType": "String",
"location": "json",
"default": null,
"required": false
}
]
}
]
}
}
]
}
\ No newline at end of file
......@@ -67,6 +67,146 @@ serve -s dist 运行打包后的生产文件 dist 打包后的文件夹
npm run lint
```
#### 按需引入
1. 安装element-ui
```
npm i element-ui -S
```
2. 安装按需引入必要插件
```
npm install babel-plugin-component -D
```
3. 修改.babelrc 如果是vueCli3 则修改babel.config.js
```
module.exports = {
presets: ["@vue/app"],
plugins: [
// element官方教程
[
"component",
{
libraryName: "element-ui",
styleLibraryName: "theme-chalk"
}
]
]
};
```
4. 在src目录下新建一个文件夹element,在该目录下新建Index.js,填写如下内容:
```
import {
Select,
Option,
OptionGroup,
Input,
InputNumber,
Radio,
Tree,
Dialog,
Row,
Col,
Checkbox,
CheckboxButton,
CheckboxGroup,
Cascader,
Switch,
Slider,
TimeSelect,
TimePicker,
DatePicker,
Upload,
Rate,
ColorPicker,
Transfer,
Form,
FormItem,
Table,
TableColumn,
Tag,
Button,
Progress,
Pagination,
Badge,
Avatar,
Alert,
Loading,
Message,
MessageBox,
Notification,
Menu,
MenuItemGroup,
MenuItem,
Submenu,
RadioGroup,
RadioButton
} from 'element-ui'
const element = {
install: function(Vue) {
Vue.use(Select)
Vue.use(Option)
Vue.use(OptionGroup)
Vue.use(Input)
Vue.use(InputNumber)
Vue.use(Radio)
Vue.use(Tree)
Vue.use(Dialog)
Vue.use(Row)
Vue.use(Col)
Vue.use(Checkbox)
Vue.use(CheckboxButton)
Vue.use(CheckboxGroup)
Vue.use(Cascader)
Vue.use(Switch)
Vue.use(Slider)
Vue.use(TimePicker)
Vue.use(TimeSelect)
Vue.use(DatePicker)
Vue.use(Upload)
Vue.use(Rate)
Vue.use(ColorPicker)
Vue.use(Transfer)
Vue.use(Form)
Vue.use(FormItem)
Vue.use(Table)
Vue.use(TableColumn)
Vue.use(Tag)
Vue.use(Button)
Vue.use(Progress)
Vue.use(Pagination)
Vue.use(Badge)
Vue.use(Avatar)
Vue.use(Alert)
Vue.use(Loading)
Vue.use(Menu)
Vue.use(MenuItem)
Vue.use(MenuItemGroup)
Vue.use(Submenu)
Vue.use(RadioGroup)
Vue.use(RadioButton)
Vue.prototype.$message = Message;
Vue.prototype.$confirm = MessageBox.confirm;
Vue.prototype.$alert = MessageBox.alert;
Vue.prototype.$notify = Notification;
}
}
export default element
```
5. 在main.js中写入
```
import 'element-ui/lib/theme-chalk/index.css'
import element from './element/index'
Vue.use(element)
```
#### 使用说明
1. 运行文件配置 [vue.config.js](https://github.com/ruyangit/seed-workbench-ui/blob/dev/vue.config.js)
......
......@@ -9,6 +9,7 @@
},
"dependencies": {
"@antv/g2": "^3.2.7",
"@riophae/vue-treeselect": "^0.4.0",
"ant-design-vue": "^1.7.5",
"axios": "^0.18.0",
"bootstrap": "4.6.0",
......
import request from '../../utils/request'
// 查询
export function fetchList (data) {
return request.post('/system/dataPermission/page', data, {
trim: true
})
}
// 查询数据权限模块
export function fetchModules () {
return request.cache('DATA_PERMISSION_MODULES').get('/system/dataPermission/modules')
}
// 查询数据权限类型
export function fetchTypes () {
return request.cache('DATA_PERMISSION_TYPES').get('/system/dataPermission/types')
}
// 创建
export function create (data) {
return request.post('/system/dataPermission/create', data)
}
// 修改
export function updateById (data) {
return request.post('/system/dataPermission/updateById', data)
}
// 修改状态
export function updateStatus (data) {
return request.post('/system/dataPermission/updateStatus', data)
}
// 删除
export function deleteById (id) {
return request.get(`/system/dataPermission/delete/${id}`)
}
// 批量删除
export function deleteByIdInBatch (ids) {
return request.get('/system/dataPermission/delete/batch', {
params: {
ids
}
})
}
import request from '@/utils/request'
// 查询
export function fetchTree () {
return request.post('/system/department/tree')
}
// 查询部门用户
export function fetchUserList (data) {
return request.post('/system/department/users', data)
}
// 新建
export function create (data) {
return request.post('/system/department/create', data)
}
// 修改
export function updateById (data) {
return request.post('/system/department/updateById', data)
}
// 删除
export function deleteById (id) {
return request.get(`/system/department/delete/${id}`)
}
// 批量删除
export function deleteByIdInBatch (ids) {
return request.get('/system/department/delete/batch', {
params: {
ids
}
})
}
import request from '../../utils/request'
// 查询
export function fetchList (data) {
return request.post('/system/location/page', data, {
trim: true
})
}
// 根据父节点查询
export function fetchByParentId (parentId) {
return request.cache(`location_${parentId}_children`).get(`/system/location/children/${parentId}`)
}
// 创建
export function create (data) {
return request.post('/system/location/create', data)
}
// 修改
export function updateById (data) {
return request.post('/system/location/updateById', data)
}
// 修改状态
export function updateStatus (data) {
return request.post('/system/location/updateStatus', data)
}
import request from '@/utils/request'
// 查询
export function fetchList (data) {
return request.post('/system/permission/page', data)
}
// 查询所有
export function fetchAll () {
return request.get('/system/permission/all')
}
// 新建
export function create (data) {
return request.post('/system/permission/create', data, {
trim: true
})
}
// 修改
export function updateById (data) {
return request.post('/system/permission/updateById', data, {
trim: true
})
}
// 删除
export function deleteById (id) {
return request.get(`/system/permission/delete/${id}`)
}
// 批量删除
export function deleteByIdInBatch (ids) {
return request.get('/system/permission/delete/batch', {
params: {
ids
}
})
}
import request from '@/utils/request'
// 查询列表树
export function fetchTree (data) {
return request.post('/system/position/tree', data)
}
// 查询列表
export function fetchList (data) {
return request.post('/system/position/list', data)
}
// 新建
export function create (data) {
return request.post('/system/position/create', data)
}
// 修改
export function updateById (data) {
return request.post('/system/position/updateById', data)
}
// 删除
export function deleteById (id) {
return request.get(`/system/position/delete/${id}`)
}
// 批量删除
export function deleteByIdInBatch (ids) {
return request.get('/system/position/delete/batch', {
params: {
ids
}
})
}
import request from '@/utils/request'
// 查询
export function fetchList (data) {
return request.post('/system/role/page', data)
}
// 查询所有
export function fetchAll () {
return request.get('/system/role/all')
}
// 新建
export function create (data) {
return request.post('/system/role/create', data, {
trim: true
})
}
// 修改
export function updateById (data) {
return request.post('/system/role/updateById', data, {
trim: true
})
}
// 删除
export function deleteById (id) {
return request.get(`/system/role/delete/${id}`)
}
// 批量删除
export function deleteByIdInBatch (ids) {
return request.get('/system/role/delete/batch', {
params: {
ids
}
})
}
// 配置权限
export function createRolePermission (data) {
return request.post('/system/role/createRolePermission', data)
}
// 配置菜单
export function createRoleMenu (data) {
return request.post('/system/role/createRoleMenu', data)
}
import request from '@/utils/request'
// 查询
export function fetchList (data) {
return request.post('/system/user/page', data)
}
// 新建
export function create (data) {
return request.post('/system/user/create', data, {
trim: true
})
}
// 修改
export function updateById (data) {
return request.post('/system/user/updateById', data, {
trim: true
})
}
// 删除
export function deleteById (id) {
return request.get(`/system/user/delete/${id}`)
}
// 批量删除
export function deleteByIdInBatch (ids) {
return request.get('/system/user/delete/batch', {
params: {
ids
}
})
}
// 配置用户角色
export function createUserRole (data) {
return request.post('/system/user/createUserRole', data)
}
// 重置密码
export function resetPwd (data) {
return request.post('/system/user/resetPwd', data)
}
......@@ -42,6 +42,8 @@ export default {
'menu.system.index': '系统管理',
'menu.system.setting': '系统设置',
'menu.system.setting.menu': '菜单管理',
'menu.system.setting.permission': '权限管理',
'menu.system.setting.role': '角色管理',
'menu.system.setting.module': '模块管理',
'menu.system.setting.config': '配置管理',
'menu.system.setting.dict': '字典管理',
......
......@@ -43,6 +43,8 @@ export default {
'menu.system.index': '系统管理',
'menu.system.setting': '系统设置',
'menu.system.setting.menu': '菜单管理',
'menu.system.setting.permission': '权限管理',
'menu.system.setting.role': '角色管理',
'menu.system.setting.module': '模块管理',
'menu.system.setting.config': '配置管理',
'menu.system.setting.dict': '字典管理',
......
......@@ -131,15 +131,20 @@ const router = new Router({
component: () => import("@/views/System/menu"),
},
{
path: "/system/setting/perssion",
name: "module",
component: () => import("@/views/System/perssion"),
path: "/system/setting/permission",
name: "permission",
component: () => import("@/views/System/permission"),
},
{
path: "/system/setting/data-permission",
name: "config",
path: "/system/setting/role",
name: "role",
component: () => import("@/views/System/role"),
},
{
path: "/system/setting/data-permission",
name: "data-permission",
component: () => import("@/views/System/dataPermission"),
},
{
path: "/system/setting/dict",
name: "dict",
......
......@@ -51,6 +51,22 @@ const mock = [
leaf: true,
children: [],
},
{
id: "1044886630026190841",
parentId: "1044886629921333248",
name: "permission",
path: "/system/setting/permission",
leaf: true,
children: [],
},
{
id: "1044886630026190842",
parentId: "1044886629921333248",
name: "role",
path: "/system/setting/role",
leaf: true,
children: [],
},
{
id: "1044886630122659840",
parentId: "1044886629921333248",
......@@ -159,6 +175,7 @@ const state = {
const actions = {
["getMenuNav"]({ commit, state }, config) {
state.loading = true;
console.log(config)
return new Promise((resolve, reject) => {
menuNav()
.then((response) => {
......
// 验证手机号码
export function checkMobile (rule, value, callback) {
if (value == null || value.trim() === '') {
callback()
return
}
if (!/^1\d{10}$/.test(value)) {
callback(new Error('手机号码格式不正确'))
return
}
callback()
}
// 验证邮箱
export function checkEmail (rule, value, callback) {
if (value == null || value.trim() === '') {
callback()
return
}
if (!/^\S+@\S+\.\S+$/.test(value)) {
callback(new Error('邮箱格式不正确'))
return
}
callback()
}
export default [
// 自定义图标
'eva-icon-role',
'eva-icon-permission',
'eva-icon-department',
'eva-icon-position',
'eva-icon-dictionary',
'eva-icon-listener',
'eva-icon-log',
'eva-icon-log-opera',
'eva-icon-log-login',
// element-ui图标
'el-icon-platform-eleme',
'el-icon-eleme',
'el-icon-delete-solid',
'el-icon-delete',
'el-icon-s-tools',
'el-icon-setting',
'el-icon-user-solid',
'el-icon-user',
'el-icon-phone',
'el-icon-phone-outline',
'el-icon-more',
'el-icon-more-outline',
'el-icon-star-on',
'el-icon-star-off',
'el-icon-s-goods',
'el-icon-goods',
'el-icon-warning',
'el-icon-warning-outline',
'el-icon-question',
'el-icon-info',
'el-icon-remove',
'el-icon-circle-plus',
'el-icon-success',
'el-icon-error',
'el-icon-zoom-in',
'el-icon-zoom-out',
'el-icon-remove-outline',
'el-icon-circle-plus-outline',
'el-icon-circle-check',
'el-icon-circle-close',
'el-icon-s-help',
'el-icon-help',
'el-icon-minus',
'el-icon-plus',
'el-icon-check',
'el-icon-close',
'el-icon-picture',
'el-icon-picture-outline',
'el-icon-picture-outline-round',
'el-icon-upload',
'el-icon-upload2',
'el-icon-download',
'el-icon-camera-solid',
'el-icon-camera',
'el-icon-video-camera-solid',
'el-icon-video-camera',
'el-icon-message-solid',
'el-icon-bell',
'el-icon-s-cooperation',
'el-icon-s-order',
'el-icon-s-platform',
'el-icon-s-fold',
'el-icon-s-unfold',
'el-icon-s-operation',
'el-icon-s-promotion',
'el-icon-s-home',
'el-icon-s-release',
'el-icon-s-ticket',
'el-icon-s-management',
'el-icon-s-open',
'el-icon-s-shop',
'el-icon-s-marketing',
'el-icon-s-flag',
'el-icon-s-comment',
'el-icon-s-finance',
'el-icon-s-claim',
'el-icon-s-custom',
'el-icon-s-opportunity',
'el-icon-s-data',
'el-icon-s-check',
'el-icon-s-grid',
'el-icon-menu',
'el-icon-share',
'el-icon-d-caret',
'el-icon-caret-left',
'el-icon-caret-right',
'el-icon-caret-bottom',
'el-icon-caret-top',
'el-icon-bottom-left',
'el-icon-bottom-right',
'el-icon-back',
'el-icon-right',
'el-icon-bottom',
'el-icon-top',
'el-icon-top-left',
'el-icon-top-right',
'el-icon-arrow-left',
'el-icon-arrow-right',
'el-icon-arrow-down',
'el-icon-arrow-up',
'el-icon-d-arrow-left',
'el-icon-d-arrow-right',
'el-icon-video-pause',
'el-icon-video-play',
'el-icon-refresh',
'el-icon-refresh-right',
'el-icon-refresh-left',
'el-icon-finished',
'el-icon-sort',
'el-icon-sort-up',
'el-icon-sort-down',
'el-icon-rank',
'el-icon-loading',
'el-icon-view',
'el-icon-c-scale-to-original',
'el-icon-date',
'el-icon-edit',
'el-icon-edit-outline',
'el-icon-folder',
'el-icon-folder-opened',
'el-icon-folder-add',
'el-icon-folder-remove',
'el-icon-folder-delete',
'el-icon-folder-checked',
'el-icon-tickets',
'el-icon-document-remove',
'el-icon-document-delete',
'el-icon-document-copy',
'el-icon-document-checked',
'el-icon-document',
'el-icon-document-add',
'el-icon-printer',
'el-icon-paperclip',
'el-icon-takeaway-box',
'el-icon-search',
'el-icon-monitor',
'el-icon-attract',
'el-icon-mobile',
'el-icon-scissors',
'el-icon-umbrella',
'el-icon-headset',
'el-icon-brush',
'el-icon-mouse',
'el-icon-coordinate',
'el-icon-magic-stick',
'el-icon-reading',
'el-icon-data-line',
'el-icon-data-board',
'el-icon-pie-chart',
'el-icon-data-analysis',
'el-icon-collection-tag',
'el-icon-film',
'el-icon-suitcase',
'el-icon-suitcase-1',
'el-icon-receiving',
'el-icon-collection',
'el-icon-files',
'el-icon-notebook-1',
'el-icon-notebook-2',
'el-icon-toilet-paper',
'el-icon-office-building',
'el-icon-school',
'el-icon-table-lamp',
'el-icon-house',
'el-icon-no-smoking',
'el-icon-smoking',
'el-icon-shopping-cart-full',
'el-icon-shopping-cart-1',
'el-icon-shopping-cart-2',
'el-icon-shopping-bag-1',
'el-icon-shopping-bag-2',
'el-icon-sold-out',
'el-icon-sell',
'el-icon-present',
'el-icon-box',
'el-icon-bank-card',
'el-icon-money',
'el-icon-coin',
'el-icon-wallet',
'el-icon-discount',
'el-icon-price-tag',
'el-icon-news',
'el-icon-guide',
'el-icon-male',
'el-icon-female',
'el-icon-thumb',
'el-icon-cpu',
'el-icon-link',
'el-icon-connection',
'el-icon-open',
'el-icon-turn-off',
'el-icon-set-up',
'el-icon-chat-round',
'el-icon-chat-line-round',
'el-icon-chat-square',
'el-icon-chat-dot-round',
'el-icon-chat-dot-square',
'el-icon-chat-line-square',
'el-icon-message',
'el-icon-postcard',
'el-icon-position',
'el-icon-turn-off-microphone',
'el-icon-microphone',
'el-icon-close-notification',
'el-icon-bangzhu',
'el-icon-time',
'el-icon-odometer',
'el-icon-crop',
'el-icon-aim',
'el-icon-switch-button',
'el-icon-full-screen',
'el-icon-copy-document',
'el-icon-mic',
'el-icon-stopwatch',
'el-icon-medal-1',
'el-icon-medal',
'el-icon-trophy',
'el-icon-trophy-1',
'el-icon-first-aid-kit',
'el-icon-discover',
'el-icon-place',
'el-icon-location',
'el-icon-location-outline',
'el-icon-location-information',
'el-icon-add-location',
'el-icon-delete-location',
'el-icon-map-location',
'el-icon-alarm-clock',
'el-icon-timer',
'el-icon-watch-1',
'el-icon-watch',
'el-icon-lock',
'el-icon-unlock',
'el-icon-key',
'el-icon-service',
'el-icon-mobile-phone',
'el-icon-bicycle',
'el-icon-truck',
'el-icon-ship',
'el-icon-basketball',
'el-icon-football',
'el-icon-soccer',
'el-icon-baseball',
'el-icon-wind-power',
'el-icon-light-rain',
'el-icon-lightning',
'el-icon-heavy-rain',
'el-icon-sunrise',
'el-icon-sunrise-1',
'el-icon-sunset',
'el-icon-sunny',
'el-icon-cloudy',
'el-icon-partly-cloudy',
'el-icon-cloudy-and-sunny',
'el-icon-moon',
'el-icon-moon-night',
'el-icon-dish',
'el-icon-dish-1',
'el-icon-food',
'el-icon-chicken',
'el-icon-fork-spoon',
'el-icon-knife-fork',
'el-icon-burger',
'el-icon-tableware',
'el-icon-sugar',
'el-icon-dessert',
'el-icon-ice-cream',
'el-icon-hot-water',
'el-icon-water-cup',
'el-icon-coffee-cup',
'el-icon-cold-drink',
'el-icon-goblet',
'el-icon-goblet-full',
'el-icon-goblet-square',
'el-icon-goblet-square-full',
'el-icon-refrigerator',
'el-icon-grape',
'el-icon-watermelon',
'el-icon-cherry',
'el-icon-apple',
'el-icon-pear',
'el-icon-orange',
'el-icon-coffee',
'el-icon-ice-tea',
'el-icon-ice-drink',
'el-icon-milk-tea',
'el-icon-potato-strips',
'el-icon-lollipop',
'el-icon-ice-cream-square',
'el-icon-ice-cream-round'
]
// 去空
export function trim (data) {
if (data == null) {
return null
}
if (typeof data === 'string') {
return data.trim()
}
if (data instanceof Array) {
for (const item of data) {
trim(item)
}
}
if (typeof data === 'object') {
for (const key in data) {
data[key] = trim(data[key])
}
}
return data
}
......@@ -64,9 +64,9 @@
import { Table, TableColumn, Button } from "element-ui"
import 'element-ui/lib/theme-chalk/index.css'
import TableLayout from './components/TableLayout'
import BaseTable from './components/base/BaseTable'
import OperaMenuWindow from './components/system/menu/OperaMenuWindow'
import TableLayout from '@/views/System/components/TableLayout'
import BaseTable from '@/views/System/components/base/BaseTable'
import OperaMenuWindow from '@/views/System/components/system/menu/OperaMenuWindow'
import { fetchTree, updateStatus, sort } from '@/api/system/menu'
export default {
name: 'SystemMenu',
......
......@@ -69,12 +69,12 @@
</template>
<script>
import Pagination from '@/components/common/Pagination'
import TableLayout from '@/layouts/TableLayout'
import BaseTable from '@/components/base/BaseTable'
import OperaRoleWindow from '@/components/system/role/OperaRoleWindow'
import PermissionConfigWindow from '@/components/system/role/PermissionConfigWindow'
import MenuConfigWindow from '@/components/system/role/MenuConfigWindow'
import Pagination from '@/views/System/components/common/Pagination'
import TableLayout from '@/views/System/components/TableLayout'
import BaseTable from '@/views/System/components/base/BaseTable'
import OperaRoleWindow from '@/views/System/components/system/role/OperaRoleWindow'
import PermissionConfigWindow from '@/views/System/components/system/role/PermissionConfigWindow'
import MenuConfigWindow from '@/views/System/components/system/role/MenuConfigWindow'
export default {
name: 'SystemRole',
extends: BaseTable,
......
......@@ -61,7 +61,7 @@ export default {
</script>
<style lang="scss">
@import "@/assets/style/variables.scss";
@import "@/styles/variables.scss";
.table-layout {
height: 100%;
display: flex;
......
......@@ -70,6 +70,7 @@ export default {
try {
content = JSON.stringify(JSON.parse(this.content), null, 2)
} catch (e) {
console.error(e)
}
}
return content
......
......@@ -154,7 +154,7 @@ export default {
</script>
<style scoped lang="scss">
@import "@/assets/style/variables.scss";
@import "@/styles/variables.scss";
.header {
overflow: hidden;
padding: 0 25px;
......
......@@ -86,7 +86,7 @@ export default {
</script>
<style lang="scss" scoped>
@import "@/assets/style/variables.scss";
@import "@/styles/variables.scss";
.menu {
height: 100%;
display: flex;
......@@ -125,7 +125,7 @@ export default {
}
</style>
<style lang="scss">
@import "@/assets/style/variables.scss";
@import "@/styles/variables.scss";
// 菜单样式
.el-menu {
border-right: 0 !important;
......
......@@ -2,7 +2,7 @@
<div class="not-allow">
<slot>
<div class="content">
<img src="../../assets/images/not-allow.png">
<img src="@/assets/not-allow.png">
<h2>无权访问</h2>
<p>如您需要访问该页面,请联系系统管理员</p>
</div>
......
......@@ -27,11 +27,11 @@ export default {
component () {
// 部门选择器
if (this.businessCode === 'DEPARTMENT') {
return () => import('@/components/common/DepartmentSelect')
return () => import('@/views/System/components/common/DepartmentSelect')
}
// 岗位选择器
if (this.businessCode === 'POSITION') {
return () => import('@/components/common/PositionSelect')
return () => import('@/views/System/components/common/PositionSelect')
}
return null
}
......
......@@ -26,9 +26,9 @@
</template>
<script>
import BaseOpera from '@/components/base/BaseOpera'
import GlobalWindow from '@/components/common/GlobalWindow'
import RoleSelect from '@/components/system/role/RoleSelect'
import BaseOpera from '@/views/System/components/base/BaseOpera'
import GlobalWindow from '@/views/System/components/common/GlobalWindow'
import RoleSelect from '@/views/System/components/system/role/RoleSelect'
import DataPermModuleSelect from './DataPermModuleSelect'
import DataPermTypeSelect from './DataPermTypeSelect'
import CustomSelect from './CustomSelect'
......
......@@ -79,10 +79,10 @@
</template>
<script>
import TableLayout from '@/layouts/TableLayout'
import BaseTable from '@/components/base/BaseTable'
import GlobalWindow from '@/components/common/GlobalWindow'
import Pagination from '@/components/common/Pagination'
import TableLayout from '@/views/System/components/TableLayout'
import BaseTable from '@/views/System/components/base/BaseTable'
import GlobalWindow from '@/views/System/components/common/GlobalWindow'
import Pagination from '@/views/System/components/common/Pagination'
import { fetchUserList } from '@/api/system/department'
export default {
name: 'DepartmentUserWindow',
......
......@@ -26,9 +26,9 @@
</template>
<script>
import BaseOpera from '@/components/base/BaseOpera'
import GlobalWindow from '@/components/common/GlobalWindow'
import DepartmentSelect from '@/components/common/DepartmentSelect'
import BaseOpera from '@/views/System/components/base/BaseOpera'
import GlobalWindow from '@/views/System/components/common/GlobalWindow'
import DepartmentSelect from '@/views/System/components/common/DepartmentSelect'
import { checkMobile, checkEmail } from '@/utils/form'
export default {
name: 'OperaDepartmentWindow',
......
......@@ -56,10 +56,10 @@
</template>
<script>
import BaseTable from '@/components/base/BaseTable'
import Pagination from '@/components/common/Pagination'
import GlobalWindow from '@/components/common/GlobalWindow'
import TableLayout from '@/layouts/TableLayout'
import BaseTable from '@/views/System/components/base/BaseTable'
import Pagination from '@/views/System/components/common/Pagination'
import GlobalWindow from '@/views/System/components/common/GlobalWindow'
import TableLayout from '@/views/System/components/TableLayout'
import OperaDictDataWindow from './OperaDictDataWindow'
export default {
name: 'DictDataManagerWindow',
......
......@@ -21,8 +21,8 @@
</template>
<script>
import BaseOpera from '@/components/base/BaseOpera'
import GlobalWindow from '@/components/common/GlobalWindow'
import BaseOpera from '@/views/System/components/base/BaseOpera'
import GlobalWindow from '@/views/System/components/common/GlobalWindow'
export default {
name: 'OperaDictDataWindow',
extends: BaseOpera,
......
......@@ -20,8 +20,8 @@
</template>
<script>
import BaseOpera from '@/components/base/BaseOpera'
import GlobalWindow from '@/components/common/GlobalWindow'
import BaseOpera from '@/views/System/components/base/BaseOpera'
import GlobalWindow from '@/views/System/components/common/GlobalWindow'
export default {
name: 'OperaDictWindow',
extends: BaseOpera,
......
......@@ -38,8 +38,8 @@
</template>
<script>
import BaseOpera from '@/components/base/BaseOpera'
import GlobalWindow from '@/components/common/GlobalWindow'
import BaseOpera from '@/views/System/components/base/BaseOpera'
import GlobalWindow from '@/views/System/components/common/GlobalWindow'
export default {
name: 'OperaLocationWindow',
extends: BaseOpera,
......
......@@ -35,9 +35,9 @@
import { Form, FormItem, Radio, RadioGroup, Input } from "element-ui"
import 'element-ui/lib/theme-chalk/index.css'
import BaseOpera from '@/src/views/System/components/base/BaseOpera'
import GlobalWindow from '@/src/views/System/components/common/GlobalWindow'
import MenuSelect from '@/src/views/System/components/common/MenuSelect'
import BaseOpera from '@/views/System/components/base/BaseOpera'
import GlobalWindow from '@/views/System/components/common/GlobalWindow'
import MenuSelect from '@/views/System/components/common/MenuSelect'
import icons from '@/utils/icons'
export default {
name: 'OperaMenuWindow',
......
......@@ -20,8 +20,8 @@
</template>
<script>
import BaseOpera from '@/components/base/BaseOpera'
import GlobalWindow from '@/components/common/GlobalWindow'
import BaseOpera from '@/views/System/components/base/BaseOpera'
import GlobalWindow from '@/views/System/components/common/GlobalWindow'
export default {
name: 'OperaPermissionWindow',
extends: BaseOpera,
......
......@@ -20,9 +20,9 @@
</template>
<script>
import BaseOpera from '@/components/base/BaseOpera'
import GlobalWindow from '@/components/common/GlobalWindow'
import PositionSelect from '@/components/common/PositionSelect'
import BaseOpera from '@/views/System/components/base/BaseOpera'
import GlobalWindow from '@/views/System/components/common/GlobalWindow'
import PositionSelect from '@/views/System/components/common/PositionSelect'
export default {
name: 'OperaPositionWindow',
extends: BaseOpera,
......
......@@ -76,10 +76,10 @@
</template>
<script>
import TableLayout from '@/layouts/TableLayout'
import BaseTable from '@/components/base/BaseTable'
import GlobalWindow from '@/components/common/GlobalWindow'
import Pagination from '@/components/common/Pagination'
import TableLayout from '@/views/System/components/TableLayout'
import BaseTable from '@/views/System/components/base/BaseTable'
import GlobalWindow from '@/views/System/components/common/GlobalWindow'
import Pagination from '@/views/System/components/common/Pagination'
export default {
name: 'PositionUserWindow',
extends: BaseTable,
......
......@@ -23,7 +23,7 @@
</template>
<script>
import GlobalWindow from '@/components/common/GlobalWindow'
import GlobalWindow from '@/views/System/components/common/GlobalWindow'
import { createRoleMenu } from '@/api/system/role'
import { fetchTree as fetchMenuList } from '@/api/system/menu'
export default {
......@@ -100,7 +100,7 @@ export default {
</script>
<style scoped lang="scss">
@import "@/assets/style/variables.scss";
@import "@/styles/variables.scss";
.global-window {
.tip {
margin-bottom: 12px;
......
......@@ -20,8 +20,8 @@
</template>
<script>
import BaseOpera from '@/components/base/BaseOpera'
import GlobalWindow from '@/components/common/GlobalWindow'
import BaseOpera from '@/views/System/components/base/BaseOpera'
import GlobalWindow from '@/views/System/components/common/GlobalWindow'
export default {
name: 'OperaRoleWindow',
extends: BaseOpera,
......
......@@ -24,7 +24,7 @@
</template>
<script>
import GlobalWindow from '@/components/common/GlobalWindow'
import GlobalWindow from '@/views/System/components/common/GlobalWindow'
import { createRolePermission } from '@/api/system/role'
import { fetchAll } from '@/api/system/permission'
export default {
......@@ -99,7 +99,7 @@ export default {
</script>
<style scoped lang="scss">
@import "@/assets/style/variables.scss";
@import "@/styles/variables.scss";
.global-window {
.tip {
em {
......
......@@ -51,10 +51,10 @@
</template>
<script>
import BaseOpera from '@/components/base/BaseOpera'
import GlobalWindow from '@/components/common/GlobalWindow'
import DepartmentSelect from '@/components/common/DepartmentSelect'
import PositionSelect from '@/components/common/PositionSelect'
import BaseOpera from '@/views/System/components/base/BaseOpera'
import GlobalWindow from '@/views/System/components/common/GlobalWindow'
import DepartmentSelect from '@/views/System/components/common/DepartmentSelect'
import PositionSelect from '@/views/System/components/common/PositionSelect'
import { checkMobile, checkEmail } from '@/utils/form'
export default {
......
......@@ -16,7 +16,7 @@
</template>
<script>
import GlobalWindow from '@/components/common/GlobalWindow'
import GlobalWindow from '@/views/System/components/common/GlobalWindow'
import { resetPwd } from '@/api/system/user'
export default {
name: 'ResetPwdWindow',
......@@ -76,7 +76,7 @@ export default {
</script>
<style scoped lang="scss">
@import "@/assets/style/variables.scss";
@import "@/styles/variables.scss";
// 角色配置
.global-window {
.tip {
......
......@@ -21,8 +21,8 @@
</template>
<script>
import BasePage from '@/components/base/BasePage'
import GlobalWindow from '@/components/common/GlobalWindow'
import BasePage from '@/views/System/components/base/BasePage'
import GlobalWindow from '@/views/System/components/common/GlobalWindow'
import { createUserRole } from '@/api/system/user'
import { fetchAll as fetchAllRoles } from '@/api/system/role'
export default {
......@@ -101,7 +101,7 @@ export default {
</script>
<style scoped lang="scss">
@import "@/assets/style/variables.scss";
@import "@/styles/variables.scss";
// 角色配置
.global-window {
.tip {
......
......@@ -78,12 +78,12 @@
import { Table, TableColumn, Button } from "element-ui"
import 'element-ui/lib/theme-chalk/index.css'
import BaseTable from './base/BaseTable'
import TableLayout from './TableLayout'
import Pagination from './common/Pagination'
import OperaDataPermissionWindow from './system/datapermission/OperaDataPermissionWindow'
import DataPermModuleSelect from './system/datapermission/DataPermModuleSelect'
import RoleSelect from './system/role/RoleSelect'
import BaseTable from '@/views/System/components/base/BaseTable'
import TableLayout from '@/views/System/components/TableLayout'
import Pagination from '@/views/System/components/common/Pagination'
import OperaDataPermissionWindow from '@/views/System/components/system/datapermission/OperaDataPermissionWindow'
import DataPermModuleSelect from '@/views/System/components/system/datapermission/DataPermModuleSelect'
import RoleSelect from '@/views/System/components/system/role/RoleSelect'
// 获取模块名称
const __getModuleName = function (businessCode, modules) {
......
......@@ -52,9 +52,9 @@
</template>
<script>
import TableLayout from '@/layouts/TableLayout'
import TableLayout from '@/views/System/components/TableLayout'
import { fetchTree } from '@/api/system/department'
import BaseTable from '@/components/base/BaseTable'
import BaseTable from '@/views/System/components/base/BaseTable'
import OperaDepartmentWindow from '@/components/system/department/OperaDepartmentWindow'
import DepartmentUserWindow from '@/components/system/department/DepartmentUserWindow'
export default {
......
......@@ -66,11 +66,11 @@
</template>
<script>
import Pagination from '@/components/common/Pagination'
import TableLayout from '@/layouts/TableLayout'
import BaseTable from '@/components/base/BaseTable'
import OperaDictWindow from '@/components/system/dict/OperaDictWindow'
import DictDataManagerWindow from '@/components/system/dict/DictDataManagerWindow'
import Pagination from '@/views/System/components/common/Pagination'
import TableLayout from '@/views/System/components/TableLayout'
import BaseTable from '@/views/System/components/base/BaseTable'
import OperaDictWindow from '@/views/System/components/system/dict/OperaDictWindow'
import DictDataManagerWindow from '@/views/System/components/system/dict/DictDataManagerWindow'
export default {
name: 'SystemDict',
extends: BaseTable,
......
......@@ -81,11 +81,11 @@
</template>
<script>
import BaseTable from '@/components/base/BaseTable'
import TableLayout from '@/layouts/TableLayout'
import Pagination from '@/components/common/Pagination'
import OperaLocationWindow from '@/components/system/location/OperaLocationWindow'
import LocationSelect from '@/components/common/LocationSelect'
import BaseTable from '@/views/System/components/base/BaseTable'
import TableLayout from '@/views/System/components/TableLayout'
import Pagination from '@/views/System/components/common/Pagination'
import OperaLocationWindow from '@/views/System/components/system/location/OperaLocationWindow'
import LocationSelect from '@/views/System/components/common/LocationSelect'
import { updateStatus } from '@/api/system/location'
export default {
......
......@@ -69,9 +69,9 @@
</template>
<script>
import BaseTable from '@/components/base/BaseTable'
import TableLayout from '@/layouts/TableLayout'
import Pagination from '@/components/common/Pagination'
import BaseTable from '@/views/System/components/base/BaseTable'
import TableLayout from '@/views/System/components/TableLayout'
import Pagination from '@/views/System/components/common/Pagination'
export default {
name: 'SystemLoginLog',
......
......@@ -230,7 +230,7 @@ export default {
</script>
<style scoped lang="scss">
@import "@/assets/style/variables.scss";
@import "@/styles/variables.scss";
.monitor {
padding: 20px 20px;
}
......
......@@ -63,10 +63,10 @@
</template>
<script>
import Pagination from '@/components/common/Pagination'
import TableLayout from '@/layouts/TableLayout'
import BaseTable from '@/components/base/BaseTable'
import OperaPermissionWindow from '@/components/system/permission/OperaPermissionWindow'
import Pagination from '@/views/System/components/common/Pagination'
import TableLayout from '@/views/System/components/TableLayout'
import BaseTable from '@/views/System/components/base/BaseTable'
import OperaPermissionWindow from '@/views/System/components/system/permission/OperaPermissionWindow'
export default {
name: 'SystemPermission',
extends: BaseTable,
......
......@@ -50,8 +50,8 @@
</template>
<script>
import TableLayout from '@/layouts/TableLayout'
import BaseTable from '@/components/base/BaseTable'
import TableLayout from '@/views/System/components/TableLayout'
import BaseTable from '@/views/System/components/base/BaseTable'
import OperaPositionWindow from '@/components/system/position/OperaPositionWindow'
import PositionUserWindow from '@/components/system/position/PositionUserWindow'
import { fetchTree } from '@/api/system/position'
......
......@@ -106,10 +106,10 @@
</template>
<script>
import Pagination from '@/components/common/Pagination'
import TableLayout from '@/layouts/TableLayout'
import BaseTable from '@/components/base/BaseTable'
import ColumnDetail from '../../components/common/ColumnDetail'
import Pagination from '@/views/System/components/common/Pagination'
import TableLayout from '@/views/System/components/TableLayout'
import BaseTable from '@/views/System/components/base/BaseTable'
import ColumnDetail from '@/views/System/components/common/ColumnDetail'
export default {
name: 'SystemTraceLog',
......
......@@ -108,14 +108,14 @@
</template>
<script>
import Pagination from '@/components/common/Pagination'
import TableLayout from '@/layouts/TableLayout'
import BaseTable from '@/components/base/BaseTable'
import OperaUserWindow from '@/components/system/user/OperaUserWindow'
import RoleConfigWindow from '@/components/system/user/RoleConfigWindow'
import ResetPwdWindow from '@/components/system/user/ResetPwdWindow'
import DepartmentSelect from '@/components/common/DepartmentSelect'
import PositionSelect from '@/components/common/PositionSelect'
import Pagination from '@/views/System/components/common/Pagination'
import TableLayout from '@/views/System/components/TableLayout'
import BaseTable from '@/views/System/components/base/BaseTable'
import OperaUserWindow from '@/views/System/components/system/user/OperaUserWindow'
import RoleConfigWindow from '@/views/System/components/system/user/RoleConfigWindow'
import ResetPwdWindow from '@/views/System/components/system/user/ResetPwdWindow'
import DepartmentSelect from '@/views/System/components/common/DepartmentSelect'
import PositionSelect from '@/views/System/components/common/PositionSelect'
export default {
name: 'SystemUser',
......
......@@ -787,6 +787,13 @@
dependencies:
regenerator-runtime "^0.13.4"
"@babel/runtime@^7.3.1":
version "7.14.8"
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.14.8.tgz#7119a56f421018852694290b9f9148097391b446"
integrity sha512-twj3L8Og5SaCRCErB4x4ajbvBIVV77CGeFglHpeg5WC5FF8TZzBWXtTJ4MqaD9QszLYTtr+IsaAL2rEUevb+eg==
dependencies:
regenerator-runtime "^0.13.4"
"@babel/template@^7.14.5":
version "7.14.5"
resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.14.5.tgz#a9bc9d8b33354ff6e55a9c60d1109200a68974f4"
......@@ -1101,6 +1108,20 @@
node-gyp "^7.1.0"
read-package-json-fast "^2.0.1"
"@riophae/vue-treeselect@^0.4.0":
version "0.4.0"
resolved "https://registry.yarnpkg.com/@riophae/vue-treeselect/-/vue-treeselect-0.4.0.tgz#0baed5a794cffc580b63591f35c125e51c0df241"
integrity sha512-J4atYmBqXQmiPFK/0B5sXKjtnGc21mBJEiyKIDZwk0Q9XuynVFX6IJ4EpaLmUgL5Tve7HAS7wkiGGSti6Uaxcg==
dependencies:
"@babel/runtime" "^7.3.1"
babel-helper-vue-jsx-merge-props "^2.0.3"
easings-css "^1.0.0"
fuzzysearch "^1.0.3"
is-promise "^2.1.0"
lodash "^4.0.0"
material-colors "^1.2.6"
watch-size "^2.0.0"
"@simonwep/pickr@~1.7.0":
version "1.7.4"
resolved "https://registry.yarnpkg.com/@simonwep/pickr/-/pickr-1.7.4.tgz#b14fcd945890388b870cd6db4d6c78d531f25141"
......@@ -4188,6 +4209,11 @@ duplexify@^3.4.2, duplexify@^3.6.0:
readable-stream "^2.0.0"
stream-shift "^1.0.0"
easings-css@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/easings-css/-/easings-css-1.0.0.tgz#dde569003bb7a4a0c0b77878f5db3e0be5679c81"
integrity sha512-7Uq7NdazNfVtr0RNmPAys8it0zKCuaqxJStYKEl72D3j4gbvXhhaM7iWNbqhA4C94ygCye6VuyhzBRQC4szeBg==
easy-stack@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/easy-stack/-/easy-stack-1.0.1.tgz#8afe4264626988cabb11f3c704ccd0c835411066"
......@@ -5276,6 +5302,11 @@ functional-red-black-tree@^1.0.1:
resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327"
integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=
fuzzysearch@^1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/fuzzysearch/-/fuzzysearch-1.0.3.tgz#dffc80f6d6b04223f2226aa79dd194231096d008"
integrity sha1-3/yA9tawQiPyImqnndGUIxCW0Ag=
gauge@~2.7.3:
version "2.7.4"
resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7"
......@@ -6477,6 +6508,11 @@ is-plain-object@^2.0.3, is-plain-object@^2.0.4:
dependencies:
isobject "^3.0.1"
is-promise@^2.1.0:
version "2.2.2"
resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.2.2.tgz#39ab959ccbf9a774cf079f7b40c7a26f763135f1"
integrity sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==
is-redirect@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/is-redirect/-/is-redirect-1.0.0.tgz#1d03dded53bd8db0f30c26e4f95d36fc7c87dc24"
......@@ -7217,6 +7253,11 @@ map-visit@^1.0.0:
dependencies:
object-visit "^1.0.0"
material-colors@^1.2.6:
version "1.2.6"
resolved "https://registry.yarnpkg.com/material-colors/-/material-colors-1.2.6.tgz#6d1958871126992ceecc72f4bcc4d8f010865f46"
integrity sha512-6qE4B9deFBIa9YSpOc9O0Sgc43zTeVYbgDT5veRKSlB2+ZuHNoVVxA1L/ckMUayV9Ay9y7Z/SZCLcGteW9i7bg==
md5.js@^1.3.4:
version "1.3.5"
resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f"
......@@ -11708,6 +11749,11 @@ warning@^4.0.0:
dependencies:
loose-envify "^1.0.0"
watch-size@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/watch-size/-/watch-size-2.0.0.tgz#096ee28d0365bd7ea03d9c8bf1f2f50a73be1474"
integrity sha512-M92R89dNoTPWyCD+HuUEDdhaDnh9jxPGOwlDc0u51jAgmjUvzqaEMynXSr3BaWs+QdHYk4KzibPy1TFtjLmOZQ==
watchpack-chokidar2@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz#38500072ee6ece66f3769936950ea1771be1c957"
......
......@@ -9,7 +9,7 @@ import hashlib
import time
import shutil
from jinja2 import Environment, FileSystemLoader
from resources.webcreator import log
from resources.webcreator.log import logger
'''
流程:
......@@ -65,9 +65,25 @@ def convertFirstLetterUpper(text_str):
# print("////////////////////>>>>", text_str)
return re.sub("([a-zA-Z])", lambda x: x.groups()[0].upper(), text_str, 1)
def convertDataType(t):
if t == "Integer":
return "int"
elif t == "Float":
return "float"
elif t == "String":
return "str"
elif t == "Boolean":
return "bool"
def getVariableString(var):
return repr(var)
# ROOT = os.path.abspath(os.getcwd())
jinja_env = Environment(loader=FileSystemLoader(os.path.join(os.getcwd(), 'templates')))
jinja_env.filters['letterUpper'] = convertFirstLetterUpper
jinja_env.filters['getDataType'] = convertDataType
jinja_env.filters['getVariableString'] = getVariableString
input_dir = None
output_dir = None
......@@ -75,7 +91,7 @@ events = []
def copyFiles(src_dir, dst_dir):
if not os.path.exists(src_dir):
log.logger.error("%s 目录不存在" % src_dir)
logger.error("%s 目录不存在" % src_dir)
return None
# 复制文件之前需要判断文件是否存在
......@@ -86,26 +102,45 @@ def copyFiles(src_dir, dst_dir):
# dirs 是一个 list,内容是该文件夹中所有的目录的名字(不包括子目录)
# files 同样是 list, 内容是该文件夹中所有的文件(不包括子目录)
for root, dirs, files in os.walk(src_dir):
save_path = dst_dir
save_path = Path(dst_dir)
if os.path.basename(root) == "__pycache__":
continue
for file in files:
if file == '__init__.py':
name, suffix = os.path.splitext(file)
# 判断目标文件夹是否存在同名文件
# 如果是python文件,文件重命名
# 其他文件,直接删除
relative_path = Path(root).joinpath(file).resolve().relative_to(Path(src_dir))
target_file = Path(dst_dir).joinpath(relative_path).resolve()
if cmp_file(Path(root).joinpath(file).resolve().as_posix(), target_file.resolve().as_posix()):
continue
if target_file.exists() and target_file.suffix in [".py"]:
new_file = "{}.{}{}".format(name, time.strftime("%Y%m%d%H%M%S", time.localtime()), suffix)
tmp_file = target_file.parent.joinpath(new_file)
if tmp_file.exists():
tmp_file.unlink()
target_file.rename(tmp_file)
# os.rename(os.sep.join([root, file]), os.sep.join([root, new_file]))
else:
logger.info("delete file")
logger.info(target_file)
# os.unlink(os.sep.join([root, file]))
src_file = os.path.join(root, file)
relative_path = os.path.relpath(src_file, src_dir)
if relative_path != file:
save_path = os.path.normpath(os.sep.join([dst_dir, relative_path]))
src_file = Path(root).joinpath(file)
relative_path = src_file.resolve().relative_to(Path(src_dir))
save_path = Path(dst_dir).joinpath(relative_path)
if save_path.is_file() and not save_path.parent.exists():
save_path.parent.mkdir()
if not os.path.exists(save_path):
os.makedirs(save_path)
# if not os.path.exists(save_path):
# os.makedirs(save_path)
# 目标文件是否存在?
shutil.copy2(src_file, save_path)
shutil.copyfile(src_file, save_path)
log.logger.info('copy files finished!')
logger.info('copy files finished!')
def handleModuleConfig(config):
# 处理每一项配置文件
......@@ -130,7 +165,7 @@ def handleModules(config):
if Path(d).exists():
shutil.copyfile(d, os.sep.join([output_dir, "controllers", Path(d).name]))
else:
log.logger.error("文件:%s 不存在")
logger.error("文件:%s 不存在")
def handleResources(config):
# 处理路由页面
......
This diff is collapsed.
'''
Author: your name
Date: 2021-04-22 18:04:10
LastEditTime: 2021-06-30 17:22:15
LastEditTime: 2021-07-27 20:04:43
LastEditors: Please set LastEditors
Description: In User Settings Edit
FilePath: \evm-store\tools\resources\models\__init__.py
......@@ -11,6 +11,7 @@ from sqlalchemy import create_engine
from sqlalchemy import Column, Integer, String
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declared_attr, declarative_base
from application.app import config
class BaseModelMixin(object):
@declared_attr
......@@ -33,34 +34,41 @@ class MyMixin(object):
id = Column(Integer, primary_key=True)
# example:
class MyModel(MyMixin, BaseModel):
__tablename__ = 'mymodel'
name = Column(String(20))
fullname = Column(String(32))
password = Column(String(32))
__tablename__ = 'evm_store_app_logs'
app_name = Column(String(20))
app_path = Column(String(32))
app_version = Column(String(32))
app_info = Column(String(32))
create_at = Column(String(32))
create_by = Column(Integer())
class MyModel2(MyMixin, BaseModel):
__tablename__ = 'monitor_request'
host = Column(String(32))
path = Column(String(32))
protocol = Column(String(32))
create_at = Column(String(32))
# if __name__ == "__main__":
engine = create_engine('sqlite:///test.db')
engine = create_engine(config.SQLALCHEMY_DATABASE_URI)
BaseModel.metadata.create_all(engine, checkfirst=True)
Session = sessionmaker(bind=engine)
session = Session()
ed_user = MyModel(name='ed', fullname='Ed Jones', password='edspassword')
session.add(ed_user)
session.add_all(
[
MyModel(name='wendy', fullname='Wendy Williams', password='foobar'),
MyModel(name='mary', fullname='Mary Contrary', password='xxg527'),
MyModel(name='fred', fullname='Fred Flinstone', password='blah')
]
)
session.commit()
# ed_user = MyModel(name='ed', fullname='Ed Jones', password='edspassword')
# session.add(ed_user)
# session.add_all(
# [
# MyModel(name='wendy', fullname='Wendy Williams', password='foobar'),
# MyModel(name='mary', fullname='Mary Contrary', password='xxg527'),
# MyModel(name='fred', fullname='Fred Flinstone', password='blah')
# ]
# )
# session.commit()
# our_user = session.query(MyModel).filter_by(name='ed').first()
# print(our_user)
# -*- coding: utf-8 -*-
'''
Author: your name
Date: 2021-07-27 20:02:44
LastEditTime: 2021-07-27 20:05:01
LastEditors: your name
Description: In User Settings Edit
FilePath: \evm-store\tools\resources\models\base.py
'''
#!/usr/bin/env python
# -*- coding: utf_8 -*-
import uuid
from datetime import datetime
from application.app import db
def generate_uuid():
return uuid.uuid1().hex
class BaseModel(db.Model):
# Flask-SQLAlchemy创建table时,如何声明基类(这个类不会创建表,可以被继承)
# 方法就是把__abstract__这个属性设置为True,这个类为基类,不会被创建为表!
......@@ -18,7 +30,7 @@ class BaseModel(db.Model):
class PrimaryModel(BaseModel):
__abstract__ = True
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
uuid = db.Column(db.String(64), primary_key=True, default=uuid.uuid1)
uuid = db.Column(db.String(64), primary_key=False, default=generate_uuid)
class AutoBaseModel(BaseModel):
__abstract__ = True
......@@ -27,7 +39,7 @@ class AutoBaseModel(BaseModel):
class UuidBaseModel(BaseModel):
__abstract__ = True
id = db.Column(db.String(64), primary_key=True, default=uuid.uuid1)
id = db.Column(db.String(64), primary_key=True, default=generate_uuid)
sort = db.Column(db.Integer, default=0)
class SortBaseModel(BaseModel):
......
/*
* @Author: your name
* @Date: 2021-07-21 13:02:17
* @LastEditTime: 2021-07-21 13:09:34
* @LastEditors: Please set LastEditors
* @Description: In User Settings Edit
* @FilePath: \evm-store\tools\database_migration.go
*/
package main
import (
"database/sql"
"fmt"
_ "github.com/mattn/go-sqlite3"
)
func main() {
fmt.Println("打开数据")
db, err := sql.Open("sqlite3", "./evue_store.db")
checkErr(err)
fmt.Println("生成数据表")
sql_table := `
CREATE TABLE IF NOT EXISTS "userinfo" (
"uid" INTEGER PRIMARY KEY AUTOINCREMENT,
"username" VARCHAR(64) NULL,
"departname" VARCHAR(64) NULL,
"created" TIMESTAMP default (datetime('now', 'localtime'))
);
CREATE TABLE IF NOT EXISTS "userdeatail" (
"uid" INT(10) NULL,
"intro" TEXT NULL,
"profile" TEXT NULL,
PRIMARY KEY (uid)
);
`
db.Exec(sql_table)
//插入数据
fmt.Print("插入数据, ID=")
stmt, err := db.Prepare("INSERT INTO userinfo(username, departname) values(?, ?)")
checkErr(err)
res, err := stmt.Exec("astaxie", "研发部门")
checkErr(err)
id, err := res.LastInsertId()
checkErr(err)
fmt.Println(id)
//更新数据
fmt.Print("更新数据 ")
stmt, err = db.Prepare("update userinfo set username=? where uid=?")
checkErr(err)
res, err = stmt.Exec("astaxieupdate", id)
checkErr(err)
affect, err := res.RowsAffected()
checkErr(err)
fmt.Println(affect)
//查询数据
fmt.Println("查询数据")
rows, err := db.Query("SELECT * FROM userinfo")
checkErr(err)
for rows.Next() {
var uid int
var username string
var department string
var created string
err = rows.Scan(&uid, &username, &department, &created)
checkErr(err)
fmt.Println(uid, username, department, created)
}
/*
//删除数据
fmt.Println("删除数据")
stmt, err = db.Prepare("delete from userinfo where uid=?")
checkErr(err)
res, err = stmt.Exec(id)
checkErr(err)
affect, err = res.RowsAffected()
checkErr(err)
fmt.Println(affect)
*/
db.Close()
}
func checkErr(err error) {
if err != nil {
panic(err)
}
}
# -*- coding: utf-8 -*-
'''
Author: your name
Date: 2021-07-20 19:04:27
LastEditTime: 2021-07-21 20:01:56
LastEditors: Please set LastEditors
Description: In User Settings Edit
FilePath: \evm-store\tools\database_migration.py
'''
import os
import sqlite3
import uuid
from datetime import datetime
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
print("####>>>", BASE_DIR)
start = datetime.now()
print("start at:", start.strftime("%Y-%m-%d %H:%M:%S"))
source_conn = sqlite3.connect(os.path.join(BASE_DIR, "app-store.db"))
source_cur = source_conn.cursor()
target_db = os.path.join(BASE_DIR, "evue-store.db")
target_conn = sqlite3.connect(target_db)
target_cur = source_conn.cursor()
with open("database_migration.sql", "w+") as fd:
# 更新user表
opts = [
[2, 39],
[3, 40],
[4, 41]
]
sqls = [
"update evm_store_apps set create_by = {a} where create_by = {b};",
"update evm_store_apps set update_by = {a} where update_by = {b};",
"update evm_store_annex set create_by = {a} where create_by = {b};",
"update evm_store_annex set update_by = {a} where update_by = {b};",
"update evm_store_app_logs set create_by = {a} where create_by = {b};",
"update evm_store_build_logs set create_by = {a} where create_by = {b};",
"update evm_store_build_logs set update_by = {a} where update_by = {b};",
"update evm_store_device set create_by = {a} where create_by = {b};",
"update evm_store_device set update_by = {a} where update_by = {b};",
"update evm_store_login_logs set create_by = {a} where create_by = {b};",
]
for s in sqls:
for o in opts:
sql_str = s.format(a=o[0], b=o[1])
source_cur.execute(sql_str)
source_conn.commit()
# 更新app logs 表
sql_str = "select create_at from evm_store_app_logs"
source_cur.execute(sql_str)
res = source_cur.fetchall()
for line in res:
sql_str = "select id from evm_store_apps where strftime('%s', evm_store_apps.create_at) - strftime('%s', '{b}') < 2".format(b=line[0])
source_cur.execute(sql_str)
tmp = source_cur.fetchone()
if tmp:
sql_str = "UPDATE evm_store_app_logs SET remarks = {a};".format(a=tmp[0])
source_cur.execute(sql_str)
source_conn.commit()
# 先插入user表
source_cur.execute('SELECT account, username, password, email, phone, create_at, create_by, update_at, update_by FROM evm_store_user')
sql = "insert into evm_user (id, uuid, account, username, password, email, phone, create_at, create_by, update_at, update_by, is_delete, role) values ({a}, '{b}', '{c}', '{d}', '{e}', '{f}', '{g}', '{h}', {i}, '{j}', {k}, 0, 0);"
res = source_cur.fetchall()
i = 0
for line in res:
i += 1
sql_str = sql.format(a=i, b=uuid.uuid1().hex, c=line[0], d=line[1], e=line[2], f=line[3], g=line[4], h=line[5], i=line[6], j=line[7], k=line[8])
print("sql:", sql_str)
# target_cur.execute(sql_str)
fd.write(sql_str + "\n")
target_conn.commit()
# login logs
source_cur.execute('SELECT id, username, ip, address, create_at, create_by, remarks FROM evm_store_login_logs')
res = source_cur.fetchall()
sql = "insert into evm_login (uuid, user, login_at, user_agent, ip, geo_location, operator, create_at, create_by, update_at, update_by, is_delete) values ('{b}', {c}, '{d}', '{e}', '{f}', '{g}', '{h}', '{i}', {j}, '{k}', {l}, 0);"
for line in res:
sql_str = sql.format(b=uuid.uuid1().hex, c=line[5], d=line[6], e="", f=line[2], g=line[3], h="", i=line[4], j=line[5], k=line[4], l=line[5])
# target_cur.execute(sql_str)
fd.write(sql_str + "\n")
target_conn.commit()
# 更新app_url字段
sql = "select app, app_path from evm_store_build_logs"
source_cur.execute(sql)
res = source_cur.fetchall()
for line in res:
sql_str = string = "update evm_store_apps set app_url = '{u}' where id = {a}".format(u=line[1], a=line[0])
source_cur.execute(sql_str)
# fd.write(sql_str + "\n")
target_conn.commit()
# annex
source_cur.execute('SELECT id, uuid, app, title, path, size, create_at, create_by, update_at, update_by, is_delete FROM evm_store_annex')
res = source_cur.fetchall()
sql = "insert into evm_annex (id, uuid, app, title, path, size, create_at, create_by, update_at, update_by, is_delete) values ({a}, '{b}', {c}, '{d}', '{e}', {f}, '{g}', {h}, '{i}', {j}, 0);"
for line in res:
if not line[2]:
continue
sql_str = sql.format(a=line[0], b=uuid.uuid1().hex, c=line[2], d=line[3], e=line[4] or "", f=line[5], g=line[6], h=line[7], i=line[8], j=line[9])
# target_cur.execute(sql_str)
fd.write(sql_str + "\n")
target_conn.commit()
# app
source_cur.execute('SELECT id, app_name, app_icon, app_version, category, app_url, app_desc, create_at, create_by ,update_at, update_by, is_delete FROM evm_store_apps')
res = source_cur.fetchall()
sql = "insert into evm_app (id, uuid, app_name, app_icon, app_version, category, download_url, app_screen_size, app_arch, app_review, meta_data, remarks, create_at, create_by, update_at, update_by, is_delete, launcher, developer, app_file_size) values ({a}, '{b}', '{c}', '{d}', '{e}', '{f}', '{g}', '{h}', '{i}', '{j}', '{k}', '{l}', '{m}', {n}, '{o}', {p}, 0, `""`, `""`, 0);"
for line in res:
sql_str = sql.format(a=line[0], b=uuid.uuid1().hex, c=line[1], d=line[2], e=line[3], f=line[4], g=line[5], h="240 * 240", i="ASR3601", j=0, k='{}', l=line[6], m=line[7], n=line[8], o=line[9], p=line[10])
# target_cur.execute(sql_str)
fd.write(sql_str + "\n")
target_conn.commit()
# device
source_cur.execute('SELECT id, name, imei, desc, type, create_at, create_by, update_at, update_by, is_delete FROM evm_store_device')
res = source_cur.fetchall()
sql = "insert into evm_device (id, uuid, name, imei, desc, type, create_at, create_by, update_at, update_by, is_delete) values ({a}, '{b}', '{c}', '{d}', '{e}', '{f}', '{g}', {h}, '{i}', {j}, {k});"
for line in res:
sql_str = sql.format(a=line[0], b=uuid.uuid1().hex, c=line[1], d=line[2], e=line[3], f=line[4], g=line[5], h=line[6], i=line[7], j=line[8], k=line[9])
# target_cur.execute(sql_str)
fd.write(sql_str + "\n")
target_conn.commit()
# app log & build log
# 先插入app log
source_cur.execute('SELECT id, uuid, app_name, app_path, app_version, app_info, create_at, create_by, remarks FROM evm_store_app_logs')
res = source_cur.fetchall()
sql = "insert into evm_package (id, uuid, app, app_path, app_version, app_info, create_at, create_by, update_at, update_by, is_delete, source) values ({a}, '{b}', '{c}', '{d}', '{e}', `'{f}'`, '{g}', {h}, '{i}', {j}, {k}, {l});"
for line in res:
# 根据时间查找app
print(">>>>>>>>>>>>", line[6], line[8])
if not line[8] or (isinstance(line[8], str) and len(line[8]) == 0):
print("remarks is none")
continue
sql_str = "select id from evm_store_apps where id = {a}".format(a=int(line[8]))
source_cur.execute(sql_str)
tmp = source_cur.fetchone()
if not tmp:
print("app not found")
continue
s = 1 if line[5] and isinstance(line[5], str) and line[5].find("evueapps") > -1 else 0
sql_str = sql.format(a=line[0], b=uuid.uuid1().hex, c=tmp[0], d=line[3], e=line[4], f=line[5], g=line[6], h=line[7], i=line[6], j=line[7], k=0, l=s)
# target_cur.execute(sql_str)
fd.write(sql_str + "\n")
target_conn.commit()
# 然后查询出所有build log记录,遍历这些记录
# 在循环里,查询这一条记录是否已经存在(根据app_path),不存在则插入
source_cur.execute('SELECT id, uuid, app, app_path, app_info, source, create_at, create_by, update_at, update_by, is_delete FROM evm_store_build_logs')
res = source_cur.fetchall()
sql = "insert into evm_package (id, uuid, app_name, app_path, app_version, app_info, source, create_at, create_by, update_at, update_by, is_delete) values ({a}, '{b}', '{c}', '{d}', '{e}', '{f}', {g}, '{h}', {i}, '{j}', {k}, {l});"
for line in res:
sql_str = "select id, uuid, app_path from evm_store_app_logs where app_path = '{}'".format(line[3])
source_cur.execute(sql_str)
tmp = source_cur.fetchone()
print("=======>", line[0])
if tmp:
print("app_path not equal")
continue
print("===========>", line)
sql_str = "select app_name, app_version from evm_store_apps where id == {id}".format(id=line[2])
source_cur.execute(sql_str)
app = source_cur.fetchone()
print("app:", app)
if app:
s = 1 if line[5] and isinstance(line[5], str) and line[5].find("evueapps") > -1 else 0
sql_str = sql.format(a=line[0], b=uuid.uuid1().hex, c=app[0], d=line[3], e=app[1], f=line[4], g=s, h=line[6], i=line[7], j=line[8], k=line[9], l=line[10])
# target_cur.execute(sql_str)
fd.write(sql_str + "\n")
target_conn.commit()
print("next >>>>>>>>>>>")
print("finished!!!")
target_conn.commit()
target_conn.close()
source_conn.commit()
source_conn.close()
print("spend time:", datetime.now() - start)
\ No newline at end of file
module tool
go 1.16
require github.com/mattn/go-sqlite3 v1.14.8
github.com/mattn/go-sqlite3 v1.14.8 h1:gDp86IdQsN/xWjIEmr9MF6o9mpksUgh0fu+9ByFxzIU=
github.com/mattn/go-sqlite3 v1.14.8/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU=
......@@ -3,18 +3,28 @@
from datetime import datetime
from application.app import db
from models.{{ config['name'] }} import {{ config['name'] | letterUpper }}Model
from models.{{ config['name'] }} import {{ config['name'] | capitalize }}Model
from webcreator.log import logger
from webcreator.response import ResponseCode
class {{ config['name'] | letterUpper }}Resource(object):
class {{ config['name'] | capitalize }}Resource(object):
def __init__(self):
super().__init__()
{% if "restful" in config.get("view") and config.get("view").get("restful") == False %}
{%- for item in config.get("view").get("routes", []) %}
def {{ item.get("name") | title }}(self, params={}, jwt={}):
filters = [{{ config['name'] | capitalize }}Model.is_delete==False]
result = {{ config['name'] | capitalize }}Model.query.filter(*filters).first()
if result:
return result, ResponseCode.HTTP_SUCCESS
return None, ResponseCode.HTTP_NOT_FOUND
{% endfor %}
{%- else %}
def get(self, uuid, params):
# handle business
filters = [{{ config['name'] | letterUpper }}Model.is_delete==False, {{ config['name'] | letterUpper }}Model.uuid==uuid]
result = {{ config['name'] | letterUpper }}Model.query.filter(*filters).first()
filters = [{{ config['name'] | capitalize }}Model.is_delete==False, {{ config['name'] | capitalize }}Model.uuid==uuid]
result = {{ config['name'] | capitalize }}Model.query.filter(*filters).first()
if result:
return result, ResponseCode.HTTP_SUCCESS
return None, ResponseCode.HTTP_NOT_FOUND
......@@ -22,8 +32,8 @@ class {{ config['name'] | letterUpper }}Resource(object):
def getList(self, params):
# handle business
logger.warn(params)
filters = [{{ config['name'] | letterUpper }}Model.is_delete==False]
result = {{ config['name'] | letterUpper }}Model.query.filter(*filters).order_by({{ config['name'] | letterUpper }}Model.create_at).paginate(params.get('page', 1), params.get('pageSize', 10), error_out=False)
filters = [{{ config['name'] | capitalize }}Model.is_delete==False]
result = {{ config['name'] | capitalize }}Model.query.filter(*filters).order_by({{ config['name'] | capitalize }}Model.create_at).paginate(params.get('page', 1), params.get('pageSize', 10), error_out=False)
if result:
return result, ResponseCode.HTTP_SUCCESS
......@@ -31,7 +41,7 @@ class {{ config['name'] | letterUpper }}Resource(object):
def post(self, params, jwt={}):
# handle business
result = {{ config['name'] | letterUpper }}Model.query.filter({{ config['name'] | letterUpper }}Model.{{ config["model"]["fields"][0]["name"] }} == params.get('{{ config["model"]["fields"][0]["name"] }}')).first()
result = {{ config['name'] | capitalize }}Model.query.filter({{ config['name'] | capitalize }}Model.{{ config["model"]["fields"][0]["name"] }} == params.get('{{ config["model"]["fields"][0]["name"] }}')).first()
if result and result.is_delete:
result.is_delete = False
result.update_by = jwt.get("id", "")
......@@ -41,14 +51,14 @@ class {{ config['name'] | letterUpper }}Resource(object):
elif result and result.is_delete == False:
return False, ResponseCode.HTTP_INVAILD_REQUEST
result = {{ config['name'] | letterUpper }}Model(**params)
result = {{ config['name'] | capitalize }}Model(**params)
db.session.add(result)
db.session.commit()
return True, ResponseCode.HTTP_SUCCESS
def put(self, uuid, params, jwt={}):
# handle business
result = {{ config['name'] | letterUpper }}Model.query.filter({{ config['name'] | letterUpper }}Model.uuid==uuid).first()
result = {{ config['name'] | capitalize }}Model.query.filter({{ config['name'] | capitalize }}Model.uuid==uuid).first()
if not result:
return None, ResponseCode.HTTP_NOT_FOUND
......@@ -64,7 +74,7 @@ class {{ config['name'] | letterUpper }}Resource(object):
def delete(self, uuid, jwt={}):
# handle business
result = {{ config['name'] | letterUpper }}Model.query.filter({{ config['name'] | letterUpper }}Model.uuid==uuid).first()
result = {{ config['name'] | capitalize }}Model.query.filter({{ config['name'] | capitalize }}Model.uuid==uuid).first()
if not result:
return False, ResponseCode.HTTP_NOT_FOUND
......@@ -74,5 +84,6 @@ class {{ config['name'] | letterUpper }}Resource(object):
db.session.delete(result)
db.session.commit()
return True, ResponseCode.HTTP_SUCCESS
{% endif %}
{{ config["name"] }}Manager = {{ config['name'] | letterUpper }}Resource()
{{ config["name"] }}Manager = {{ config['name'] | capitalize }}Resource()
......@@ -7,7 +7,7 @@ from .base import PrimaryModel
from marshmallow import Schema, fields, INCLUDE, EXCLUDE
{%- endif %}
class {{ config['name'] | letterUpper }}Model(PrimaryModel):
class {{ config['name'] | capitalize }}Model(PrimaryModel):
__tablename__ = {% if config.get("model").get("tableName", None) != None %}'{{ config.get("model").get("tableName") }}'{% else %}'{{ application["tablePrefix"] }}{{ config['name'] }}'{% endif %}
{% for value in config['model']['fields'] %}
{%- if value.get('primaryKey', None) %}
......@@ -29,7 +29,7 @@ class {{ config['name'] | letterUpper }}Model(PrimaryModel):
{%- endfor %}
def __repr__(self):
return '<{{ config['name'] | letterUpper }}Model %r>' % (self.{{ config['model']['fields'][0]["name"] }})
return '<{{ config['name'] | capitalize }}Model %r>' % (self.{{ config['model']['fields'][0]["name"] }})
def to_dict(self):
return {
......@@ -40,12 +40,15 @@ class {{ config['name'] | letterUpper }}Model(PrimaryModel):
{%- endfor %}
}
{%- if "restful" in config.get("view") and config.get("view").get("restful") == False %}
{# do nothing #}
{%- else %}
{% for key, value in config["view"].items() %}
class {{ key | letterUpper }}{{ config['name'] | letterUpper }}Schema(ma.SQLAlchemySchema):
class {{ key | capitalize }}{{ config['name'] | capitalize }}Schema(ma.SQLAlchemySchema):
class Meta:
# unknown = INCLUDE # 未知字段默认包含
unknown = EXCLUDE # 未知字段默认排除
model = {{ config['name'] | letterUpper }}Model
model = {{ config['name'] | capitalize }}Model
{%- if config['model']['foreignKey'] %}
include_fk = {{ config['model']['foreignKey'] }}
{% endif %}
......@@ -79,8 +82,9 @@ class {{ key | letterUpper }}{{ config['name'] | letterUpper }}Schema(ma.SQLAlch
{%- endif %}
{%- endfor %}
{{ key }}{{ config['name'] | letterUpper }}Schema = {{ key | letterUpper }}{{ config['name'] | letterUpper }}Schema()
{{ key }}{{ config['name'] | capitalize }}Schema = {{ key | capitalize }}{{ config['name'] | capitalize }}Schema()
{%- if key == "getList" %}
{{ key }}{{ config['name'] | letterUpper }}sSchema = {{ key | letterUpper }}{{ config['name'] | letterUpper }}Schema(many=True)
{{ key }}{{ config['name'] | capitalize }}sSchema = {{ key | capitalize }}{{ config['name'] | capitalize }}Schema(many=True)
{%- endif %}
{% endfor %}
{%- endif %}
\ No newline at end of file
......@@ -10,7 +10,13 @@ api_v1 = Blueprint('api_v1', __name__)
api = Api(api_v1)
{% for item in config %}
{%- for item in config %}
{%- if "restful" in item.get("view") and item.get("view").get("restful") == False %}
{%- for r in item.get("view").get("routes", []) %}
api.add_resource({{ item['name'] }}.{{ r.get('name') | capitalize }}, '{{ r.get("path") }}')
{%- endfor %}
{%- else %}
api.add_resource({{ item['name'] }}.{{ item['name'] | letterUpper }}Resource, '/{{ item['name'] }}{{ item['view']['get']['path'] }}'{% if item['view']['get']['endpoint'] %}, endpoint={{ item['view']['get']['endpoint'] }}{% endif %})
api.add_resource({{ item['name'] }}.{{ item['name'] | letterUpper }}ResourceList, '/{{ item['name'] }}{{ item['view']['getList']['path'] }}'{% if item['view']['getList']['endpoint'] %}, endpoint='{{ item['view']['getList']['endpoint'] }}'{% endif %})
{%- endif %}
{% endfor %}
\ No newline at end of file
......@@ -5,9 +5,15 @@ from webcreator.event import PySignal
class SignalManager(object):
{%- for item in config %}
{%- if "restful" in item.get("view") and item.get("view").get("restful") == False %}
{%- for r in item.get("view").get("routes", []) %}
action{{ r.get("name") | capitalize }} = PySignal()
{%- endfor %}
{%- else %}
{%- for key, value in item['view'].items() %}
action{{ key | letterUpper }}{{ item.get("name") | letterUpper }} = PySignal()
action{{ key | capitalize }}{{ item.get("name") | capitalize }} = PySignal()
{%- endfor %}
{%- endif %}
{%- endfor %}
def __init__(self):
......
......@@ -8,7 +8,13 @@ from .{{ api['name'] }} import {{ api["name"] }}Manager
def initConnect():
{%- for api in config %}
{%- if "restful" in api.get("view") and api.get("view").get("restful") == False %}
{%- for r in api.get("view").get("routes", []) %}
signalManager.action{{ r.get("name") | capitalize }}.connect({{ api.get("name") }}Manager.{{ r.get("name") | capitalize }})
{%- endfor %}
{%- else %}
{%- for key, value in api.get("view").items() %}
signalManager.action{{ key | letterUpper }}{{ api.get("name") | letterUpper }}.connect({{ api.get("name") }}Manager.{{ key }})
signalManager.action{{ key | capitalize }}{{ api.get("name") | capitalize }}.connect({{ api.get("name") }}Manager.{{ key }})
{%- endfor %}
{%- endif %}
{%- endfor %}
......@@ -7,13 +7,18 @@ from flask_restful.reqparse import RequestParser
from flask_jwt_extended import ( jwt_required, get_jwt_identity )
from application.signal_manager import signalManager
{%- set pipe = joiner(",") %}
{%- if "restful" not in config.get("view") or config.get("view").get("restful", None) %}
from models.{{ config['name'] }} import {% for k, v in config["view"].items() -%}
{{ pipe() }} {{ k }}{{ config['name'] | letterUpper }}Schema{% if k == "getList" %}{{ pipe() }} {{ k }}{{ config['name'] | letterUpper }}sSchema{% endif %}
{{ pipe() }} {{ k }}{{ config['name'] | capitalize }}Schema{% if k == "getList" %}{{ pipe() }} {{ k }}{{ config['name'] | capitalize }}sSchema{% endif %}
{%- endif %}
{%- endfor %}
from webcreator.log import logger
from webcreator.response import ResponseCode, response_result
class {{ config['name'] | letterUpper }}ResourceList(Resource):
{#
判断是否是标准的RESTful请求方式,默认为RESTful请求方式
#}
{% if config["view"].get("restful", None) == None %}
class {{ config['name'] | capitalize }}ResourceList(Resource):
def __init__(self):
pass
# 特殊参数,即不是从json获取参数的接口,可以将这个注释打开
......@@ -32,11 +37,11 @@ class {{ config['name'] | letterUpper }}ResourceList(Resource):
try:
json_payload = request.json
logger.warn(json_payload)
data = getList{{ config['name'] | letterUpper }}Schema.load(json_payload)
result, message = signalManager.actionGetList{{ config["name"] | letterUpper }}.emit(data)
json_dumps = getList{{ config['name'] | letterUpper }}Schema.dump(result)
data = getList{{ config['name'] | capitalize }}Schema.load(json_payload)
result, message = signalManager.actionGetList{{ config["name"] | capitalize }}.emit(data)
json_dumps = getList{{ config['name'] | capitalize }}Schema.dump(result)
if result:
json_dumps = getList{{ config['name'] | letterUpper }}sSchema.dump(result.items)
json_dumps = getList{{ config['name'] | capitalize }}sSchema.dump(result.items)
logger.warn(json_dumps)
return response_result(message, data=json_dumps, count=result.total)
return response_result(message)
......@@ -52,8 +57,8 @@ class {{ config['name'] | letterUpper }}ResourceList(Resource):
def post(self):
try:
json_payload = request.json
data = post{{ config['name'] | letterUpper }}Schema.load(json_payload)
result, message = signalManager.actionPost{{ config["name"] | letterUpper }}.emit(data)
data = post{{ config['name'] | capitalize }}Schema.load(json_payload)
result, message = signalManager.actionPost{{ config["name"] | capitalize }}.emit(data)
logger.info(result)
logger.warn(message)
return response_result(message)
......@@ -62,7 +67,7 @@ class {{ config['name'] | letterUpper }}ResourceList(Resource):
return response_result(ResponseCode.HTTP_SERVER_ERROR)
{% endif %}
class {{ config['name'] | letterUpper }}Resource(Resource):
class {{ config['name'] | capitalize }}Resource(Resource):
def __init__(self):
pass
# 特殊参数,即不是从json获取参数的接口,可以将这个注释打开
......@@ -81,10 +86,10 @@ class {{ config['name'] | letterUpper }}Resource(Resource):
try:
json_payload = request.json
print("========>", uuid, json_payload)
data = get{{ config['name'] | letterUpper }}Schema.load(json_payload)
result, message = signalManager.actionGet{{ config["name"] | letterUpper }}.emit(uuid, data)
data = get{{ config['name'] | capitalize }}Schema.load(json_payload)
result, message = signalManager.actionGet{{ config["name"] | capitalize }}.emit(uuid, data)
if result:
json_dumps = get{{ config['name'] | letterUpper }}Schema.dump(result)
json_dumps = get{{ config['name'] | capitalize }}Schema.dump(result)
return response_result(message, data=json_dumps)
return response_result(message)
except Exception as e:
......@@ -100,8 +105,8 @@ class {{ config['name'] | letterUpper }}Resource(Resource):
try:
json_payload = request.json
print("========>", uuid, json_payload)
data = put{{ config['name'] | letterUpper }}Schema.load(json_payload)
result, message = signalManager.actionPut{{ config["name"] | letterUpper }}.emit(uuid, data)
data = put{{ config['name'] | capitalize }}Schema.load(json_payload)
result, message = signalManager.actionPut{{ config["name"] | capitalize }}.emit(uuid, data)
logger.info(result)
logger.info(message)
return response_result(message, data=result)
......@@ -118,10 +123,31 @@ class {{ config['name'] | letterUpper }}Resource(Resource):
try:
json_payload = request.json
print("========>", uuid, json_payload)
# data = delete{{ config['name'] | letterUpper }}Schema.load(json_payload)
result, message = signalManager.actionDelete{{ config["name"] | letterUpper }}.emit(uuid)
# data = delete{{ config['name'] | capitalize }}Schema.load(json_payload)
result, message = signalManager.actionDelete{{ config["name"] | capitalize }}.emit(uuid)
return response_result(message, data=result)
except Exception as e:
current_app.logger.error(e)
return response_result(ResponseCode.HTTP_SERVER_ERROR)
{% endif %}
{%- elif "restful" in config.get("view") and config.get("view").get("restful") == False %}
{%- for route in config.get("view").get("routes", []) %}
class {{ route.get("name") | capitalize }}(Resource):
def __init__(self):
self.parser = RequestParser()
def {{ route.get("method") }}(self):
{%- for r in route.get("params", []) %}
self.parser.add_argument("{{ r.get("name") }}", type={{ r.get("dataType") | getDataType }}, location="{{ r.get('location') }}", {% if "default" in r %}default={{ r.get("default") | getVariableString }}{% endif %}, required={% if r.get("required") %}True{% else %}False{% endif %})
{%- endfor %}
args = self.parser.parse_args()
try:
print("========>", args)
result, message = signalManager.action{{ route.get("name") | capitalize }}.emit(args)
return response_result(message, data=result)
except Exception as e:
current_app.logger.error(e)
return response_result(ResponseCode.HTTP_SERVER_ERROR)
{% endfor %}
{% endif %}
\ No newline at end of file
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