Commit a09e6ebb authored by wanli's avatar wanli

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

parent e71d89cf
...@@ -60,7 +60,14 @@ def _custom_abort(http_status_code, **kwargs): ...@@ -60,7 +60,14 @@ def _custom_abort(http_status_code, **kwargs):
自定义abort 400响应数据格式 自定义abort 400响应数据格式
""" """
if http_status_code == 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) return abort(http_status_code)
def _access_control(response): def _access_control(response):
......
''' '''
Author: your name Author: your name
Date: 2021-06-30 17:43:46 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 LastEditors: Please set LastEditors
Description: In User Settings Edit Description: In User Settings Edit
FilePath: \evm-store\tools\build_out\application\config.py FilePath: \evm-store\tools\build_out\application\config.py
...@@ -41,14 +41,14 @@ class ProductionConfig(object): ...@@ -41,14 +41,14 @@ class ProductionConfig(object):
MYSQL_USER = 'debian-sys-maint' MYSQL_USER = 'debian-sys-maint'
MYSQL_PWD = 'XMigC2B2uugnv18y' MYSQL_PWD = 'XMigC2B2uugnv18y'
SQLALCHEMY_BINDS = { 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): def __init__(self):
super().__init__() super().__init__()
self.SQLALCHEMY_DATABASE_URI = 'sqlite:///../evue-store.db' self.SQLALCHEMY_DATABASE_URI = 'sqlite:///../test.db'
class DevelopConfig(object): class DevelopConfig(object):
...@@ -80,16 +80,16 @@ class DevelopConfig(object): ...@@ -80,16 +80,16 @@ class DevelopConfig(object):
MYSQL_USER = 'debian-sys-maint' MYSQL_USER = 'debian-sys-maint'
MYSQL_PWD = 'XMigC2B2uugnv18y' MYSQL_PWD = 'XMigC2B2uugnv18y'
SQLALCHEMY_BINDS = { 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_TRACK_MODIFICATIONS = True
SQLALCHEMY_ECHO = False SQLALCHEMY_ECHO = False
def __init__(self): def __init__(self):
super().__init__() super().__init__()
self.SQLALCHEMY_DATABASE_URI = 'sqlite:///../evue-store.db' self.SQLALCHEMY_DATABASE_URI = 'sqlite:///../test.db'
if MODE == 'production': if MODE == 'production':
config = ProductionConfig() config = ProductionConfig()
......
''' '''
Author: your name Author: your name
Date: 2021-06-30 18:03:41 Date: 2021-07-15 09:33:39
LastEditTime: 2021-07-23 00:26:38 LastEditTime: 2021-07-27 20:11:47
LastEditors: Please set LastEditors LastEditors: Please set LastEditors
Description: In User Settings Edit Description: In User Settings Edit
FilePath: \evm-store\tools\build_out\application\signal_manager.py FilePath: \evm-store\tools\build_out\application\signal_manager.py
...@@ -14,42 +14,45 @@ from webcreator.event import PySignal ...@@ -14,42 +14,45 @@ from webcreator.event import PySignal
class SignalManager(object): class SignalManager(object):
actionPostArea = PySignal() actionPostArea = PySignal()
actionDeleteArea = PySignal() actionDeleteArea = PySignal()
actionGetListArea = PySignal() actionGetlistArea = PySignal()
actionGetArea = PySignal() actionGetArea = PySignal()
actionPutArea = PySignal() actionPutArea = PySignal()
actionPostApp = PySignal() actionPostApp = PySignal()
actionDeleteApp = PySignal() actionDeleteApp = PySignal()
actionGetListApp = PySignal() actionGetlistApp = PySignal()
actionGetApp = PySignal() actionGetApp = PySignal()
actionPutApp = PySignal() actionPutApp = PySignal()
actionGetListPackage = PySignal() actionGetlistPackage = PySignal()
actionGetPackage = PySignal() actionGetPackage = PySignal()
actionPostUser = PySignal() actionPostUser = PySignal()
actionDeleteUser = PySignal() actionDeleteUser = PySignal()
actionGetListUser = PySignal() actionGetlistUser = PySignal()
actionGetUser = PySignal() actionGetUser = PySignal()
actionPutUser = PySignal() actionPutUser = PySignal()
actionPostLogin = PySignal() actionPostLogin = PySignal()
actionGetListLogin = PySignal() actionGetlistLogin = PySignal()
actionGetLogin = PySignal() actionGetLogin = PySignal()
actionPostDevice = PySignal() actionPostDevice = PySignal()
actionDeleteDevice = PySignal() actionDeleteDevice = PySignal()
actionGetListDevice = PySignal() actionGetlistDevice = PySignal()
actionGetDevice = PySignal() actionGetDevice = PySignal()
actionPutDevice = PySignal() actionPutDevice = PySignal()
actionDeleteAnnex = PySignal() actionDeleteAnnex = PySignal()
actionGetListAnnex = PySignal() actionGetlistAnnex = PySignal()
actionGetAnnex = PySignal() actionGetAnnex = PySignal()
actionGetListMonitorWatch = PySignal() actionGetlistMonitorwatch = PySignal()
actionGetMonitorWatch = PySignal() actionGetMonitorwatch = PySignal()
actionGetListMonitorSystem = PySignal() actionGetlistMonitorsystem = PySignal()
actionGetMonitorSystem = PySignal() actionGetMonitorsystem = PySignal()
actionGetListMonitorLvgl = PySignal() actionGetlistMonitorlvgl = PySignal()
actionGetMonitorLvgl = PySignal() actionGetMonitorlvgl = PySignal()
actionGetListMonitorImage = PySignal() actionGetlistMonitorimage = PySignal()
actionGetMonitorImage = PySignal() actionGetMonitorimage = PySignal()
actionGetListMonitorEvm = PySignal() actionGetlistMonitorevm = PySignal()
actionGetMonitorEvm = PySignal() actionGetMonitorevm = PySignal()
actionTreelist = PySignal()
actionTreenodes = PySignal()
actionUpdatebyid = PySignal()
# file manager api # file manager api
actionGetFileInit = PySignal() actionGetFileInit = PySignal()
actionGetFileContent = 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 #!/usr/bin/env python
# -*- coding: utf_8 -*- # -*- coding: utf_8 -*-
from signal import SIGABRT
from application.signal_manager import signalManager from application.signal_manager import signalManager
from .area import areaManager from .area import areaManager
from .api import appReview, buildAppResource
from .app import appManager from .app import appManager
from .package import packageManager from .package import packageManager
from .user import userManager from .user import userManager
...@@ -24,48 +14,53 @@ from .monitorSystem import monitorSystemManager ...@@ -24,48 +14,53 @@ from .monitorSystem import monitorSystemManager
from .monitorLvgl import monitorLvglManager from .monitorLvgl import monitorLvglManager
from .monitorImage import monitorImageManager from .monitorImage import monitorImageManager
from .monitorEvm import monitorEvmManager from .monitorEvm import monitorEvmManager
from .menu import menuManager
from .api import appReview, buildAppResource
from .file import fileManager from .file import fileManager
from .workbench import workbenchResource from .workbench import workbenchResource
def initConnect(): def initConnect():
signalManager.actionPostArea.connect(areaManager.post) signalManager.actionPostArea.connect(areaManager.post)
signalManager.actionDeleteArea.connect(areaManager.delete) signalManager.actionDeleteArea.connect(areaManager.delete)
signalManager.actionGetListArea.connect(areaManager.getList) signalManager.actionGetlistArea.connect(areaManager.getList)
signalManager.actionGetArea.connect(areaManager.get) signalManager.actionGetArea.connect(areaManager.get)
signalManager.actionPutArea.connect(areaManager.put) signalManager.actionPutArea.connect(areaManager.put)
signalManager.actionPostApp.connect(appManager.post) signalManager.actionPostApp.connect(appManager.post)
signalManager.actionDeleteApp.connect(appManager.delete) signalManager.actionDeleteApp.connect(appManager.delete)
signalManager.actionGetListApp.connect(appManager.getList) signalManager.actionGetlistApp.connect(appManager.getList)
signalManager.actionGetApp.connect(appManager.get) signalManager.actionGetApp.connect(appManager.get)
signalManager.actionPutApp.connect(appManager.put) signalManager.actionPutApp.connect(appManager.put)
signalManager.actionGetListPackage.connect(packageManager.getList) signalManager.actionGetlistPackage.connect(packageManager.getList)
signalManager.actionGetPackage.connect(packageManager.get) signalManager.actionGetPackage.connect(packageManager.get)
signalManager.actionPostUser.connect(userManager.post) signalManager.actionPostUser.connect(userManager.post)
signalManager.actionDeleteUser.connect(userManager.delete) signalManager.actionDeleteUser.connect(userManager.delete)
signalManager.actionGetListUser.connect(userManager.getList) signalManager.actionGetlistUser.connect(userManager.getList)
signalManager.actionGetUser.connect(userManager.get) signalManager.actionGetUser.connect(userManager.get)
signalManager.actionPutUser.connect(userManager.put) signalManager.actionPutUser.connect(userManager.put)
signalManager.actionPostLogin.connect(loginManager.post) signalManager.actionPostLogin.connect(loginManager.post)
signalManager.actionGetListLogin.connect(loginManager.getList) signalManager.actionGetlistLogin.connect(loginManager.getList)
signalManager.actionGetLogin.connect(loginManager.get) signalManager.actionGetLogin.connect(loginManager.get)
signalManager.actionPostDevice.connect(deviceManager.post) signalManager.actionPostDevice.connect(deviceManager.post)
signalManager.actionDeleteDevice.connect(deviceManager.delete) signalManager.actionDeleteDevice.connect(deviceManager.delete)
signalManager.actionGetListDevice.connect(deviceManager.getList) signalManager.actionGetlistDevice.connect(deviceManager.getList)
signalManager.actionGetDevice.connect(deviceManager.get) signalManager.actionGetDevice.connect(deviceManager.get)
signalManager.actionPutDevice.connect(deviceManager.put) signalManager.actionPutDevice.connect(deviceManager.put)
signalManager.actionDeleteAnnex.connect(annexManager.delete) signalManager.actionDeleteAnnex.connect(annexManager.delete)
signalManager.actionGetListAnnex.connect(annexManager.getList) signalManager.actionGetlistAnnex.connect(annexManager.getList)
signalManager.actionGetAnnex.connect(annexManager.get) signalManager.actionGetAnnex.connect(annexManager.get)
signalManager.actionGetListMonitorWatch.connect(monitorWatchManager.getList) signalManager.actionGetlistMonitorwatch.connect(monitorWatchManager.getList)
signalManager.actionGetMonitorWatch.connect(monitorWatchManager.get) signalManager.actionGetMonitorwatch.connect(monitorWatchManager.get)
signalManager.actionGetListMonitorSystem.connect(monitorSystemManager.getList) signalManager.actionGetlistMonitorsystem.connect(monitorSystemManager.getList)
signalManager.actionGetMonitorSystem.connect(monitorSystemManager.get) signalManager.actionGetMonitorsystem.connect(monitorSystemManager.get)
signalManager.actionGetListMonitorLvgl.connect(monitorLvglManager.getList) signalManager.actionGetlistMonitorlvgl.connect(monitorLvglManager.getList)
signalManager.actionGetMonitorLvgl.connect(monitorLvglManager.get) signalManager.actionGetMonitorlvgl.connect(monitorLvglManager.get)
signalManager.actionGetListMonitorImage.connect(monitorImageManager.getList) signalManager.actionGetlistMonitorimage.connect(monitorImageManager.getList)
signalManager.actionGetMonitorImage.connect(monitorImageManager.get) signalManager.actionGetMonitorimage.connect(monitorImageManager.get)
signalManager.actionGetListMonitorEvm.connect(monitorEvmManager.getList) signalManager.actionGetlistMonitorevm.connect(monitorEvmManager.getList)
signalManager.actionGetMonitorEvm.connect(monitorEvmManager.get) signalManager.actionGetMonitorevm.connect(monitorEvmManager.get)
signalManager.actionTreelist.connect(menuManager.Treelist)
signalManager.actionTreenodes.connect(menuManager.Treenodes)
signalManager.actionUpdatebyid.connect(menuManager.Updatebyid)
# file manager api # file manager api
signalManager.actionGetFileContent.connect(fileManager.content) signalManager.actionGetFileContent.connect(fileManager.content)
signalManager.actionGetFileDisk.connect(fileManager.disk) signalManager.actionGetFileDisk.connect(fileManager.disk)
......
...@@ -11,6 +11,7 @@ class AnnexResource(object): ...@@ -11,6 +11,7 @@ class AnnexResource(object):
def __init__(self): def __init__(self):
super().__init__() super().__init__()
def get(self, uuid, params): def get(self, uuid, params):
# handle business # handle business
filters = [AnnexModel.is_delete==False, AnnexModel.uuid==uuid] filters = [AnnexModel.is_delete==False, AnnexModel.uuid==uuid]
...@@ -75,4 +76,5 @@ class AnnexResource(object): ...@@ -75,4 +76,5 @@ class AnnexResource(object):
db.session.commit() db.session.commit()
return True, ResponseCode.HTTP_SUCCESS return True, ResponseCode.HTTP_SUCCESS
annexManager = AnnexResource() annexManager = AnnexResource()
\ No newline at end of file
...@@ -11,6 +11,7 @@ class AreaResource(object): ...@@ -11,6 +11,7 @@ class AreaResource(object):
def __init__(self): def __init__(self):
super().__init__() super().__init__()
def get(self, uuid, params): def get(self, uuid, params):
# handle business # handle business
filters = [AreaModel.is_delete==False, AreaModel.uuid==uuid] filters = [AreaModel.is_delete==False, AreaModel.uuid==uuid]
...@@ -75,4 +76,5 @@ class AreaResource(object): ...@@ -75,4 +76,5 @@ class AreaResource(object):
db.session.commit() db.session.commit()
return True, ResponseCode.HTTP_SUCCESS return True, ResponseCode.HTTP_SUCCESS
areaManager = AreaResource() 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 Author: your name
Date: 2021-06-15 17:40:09 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 LastEditors: Please set LastEditors
Description: In User Settings Edit Description: In User Settings Edit
FilePath: \evm-store\tools\resources\manager.py FilePath: \evm-store\tools\resources\manager.py
''' '''
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
import signal
from tornado.wsgi import WSGIContainer from tornado.wsgi import WSGIContainer
from tornado.web import Application, FallbackHandler
from tornado.httpserver import HTTPServer from tornado.httpserver import HTTPServer
from tornado.ioloop import IOLoop from tornado.ioloop import IOLoop
from flask_script import Manager from flask_script import Manager
from flask_migrate import Migrate from flask_migrate import Migrate
from application.app import create_app, db from application.app import create_app, db
from application.config import config from application.config import config
from views.monitor import DeviceMessageHandler, NotifyHandler, WatchHandler
# 根据配置初始化app # 根据配置初始化app
app = create_app(config) app = create_app(config)
migrate = Migrate(app, db) migrate = Migrate(app, db)
manager = Manager(app) manager = Manager(app)
class GracefulExit(SystemExit):
code = 1
def raise_graceful_exit(*args):
IOLoop.current().stop()
print("Gracefully shutdown", args)
raise GracefulExit()
@manager.command @manager.command
def run(): def run():
""" """
...@@ -41,7 +29,7 @@ def run(): ...@@ -41,7 +29,7 @@ def run():
# app.logger.setLevel(app.config.get('LOG_LEVEL', logging.INFO)) # app.logger.setLevel(app.config.get('LOG_LEVEL', logging.INFO))
http_server = HTTPServer(WSGIContainer(app)) 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() IOLoop.instance().start()
@manager.command @manager.command
...@@ -51,21 +39,7 @@ def debug(): ...@@ -51,21 +39,7 @@ def debug():
To use: python3 manager.py debug To use: python3 manager.py debug
""" """
# app.logger.setLevel(logging.DEBUG) # app.logger.setLevel(logging.DEBUG)
# app.run(debug=True, port=3000, host='127.0.0.1') 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()
if __name__ == '__main__': if __name__ == '__main__':
manager.run() manager.run()
''' '''
Author: your name Author: your name
Date: 2021-04-22 18:04:10 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 LastEditors: Please set LastEditors
Description: In User Settings Edit Description: In User Settings Edit
FilePath: \evm-store\tools\resources\models\__init__.py 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 #!/usr/bin/env python
# -*- coding: utf_8 -*- # -*- coding: utf_8 -*-
...@@ -19,21 +11,17 @@ class AnnexModel(PrimaryModel): ...@@ -19,21 +11,17 @@ class AnnexModel(PrimaryModel):
app = db.Column(db.Integer, nullable = False) app = db.Column(db.Integer, nullable = False)
title = db.Column(db.String(100), index = True, nullable = False, default = '') title = db.Column(db.String(100), index = True, nullable = False, default = '')
path = db.Column(db.String(256), 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__ = ( # __table_args__ = (
# db.Index('idx_xxx', 'xxx', mysql_using='btree'), # 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.app = app
self.title = title self.title = title
self.path = path self.path = path
self.size = size 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): def __repr__(self):
return '<AnnexModel %r>' % (self.app) return '<AnnexModel %r>' % (self.app)
...@@ -46,7 +34,6 @@ class AnnexModel(PrimaryModel): ...@@ -46,7 +34,6 @@ class AnnexModel(PrimaryModel):
'size': self.size, 'size': self.size,
} }
class DeleteAnnexSchema(ma.SQLAlchemySchema): class DeleteAnnexSchema(ma.SQLAlchemySchema):
class Meta: class Meta:
# unknown = INCLUDE # 未知字段默认包含 # unknown = INCLUDE # 未知字段默认包含
...@@ -56,7 +43,7 @@ class DeleteAnnexSchema(ma.SQLAlchemySchema): ...@@ -56,7 +43,7 @@ class DeleteAnnexSchema(ma.SQLAlchemySchema):
deleteAnnexSchema = DeleteAnnexSchema() deleteAnnexSchema = DeleteAnnexSchema()
class GetListAnnexSchema(ma.SQLAlchemySchema): class GetlistAnnexSchema(ma.SQLAlchemySchema):
class Meta: class Meta:
# unknown = INCLUDE # 未知字段默认包含 # unknown = INCLUDE # 未知字段默认包含
unknown = EXCLUDE # 未知字段默认排除 unknown = EXCLUDE # 未知字段默认排除
...@@ -67,8 +54,8 @@ class GetListAnnexSchema(ma.SQLAlchemySchema): ...@@ -67,8 +54,8 @@ class GetListAnnexSchema(ma.SQLAlchemySchema):
title = ma.auto_field() title = ma.auto_field()
app = ma.auto_field() app = ma.auto_field()
getListAnnexSchema = GetListAnnexSchema() getListAnnexSchema = GetlistAnnexSchema()
getListAnnexsSchema = GetListAnnexSchema(many=True) getListAnnexsSchema = GetlistAnnexSchema(many=True)
class GetAnnexSchema(ma.SQLAlchemySchema): class GetAnnexSchema(ma.SQLAlchemySchema):
class Meta: class Meta:
......
...@@ -43,7 +43,6 @@ class AreaModel(PrimaryModel): ...@@ -43,7 +43,6 @@ class AreaModel(PrimaryModel):
'hasChildren': self.hasChildren, 'hasChildren': self.hasChildren,
} }
class PostAreaSchema(ma.SQLAlchemySchema): class PostAreaSchema(ma.SQLAlchemySchema):
class Meta: class Meta:
# unknown = INCLUDE # 未知字段默认包含 # unknown = INCLUDE # 未知字段默认包含
...@@ -69,7 +68,7 @@ class DeleteAreaSchema(ma.SQLAlchemySchema): ...@@ -69,7 +68,7 @@ class DeleteAreaSchema(ma.SQLAlchemySchema):
deleteAreaSchema = DeleteAreaSchema() deleteAreaSchema = DeleteAreaSchema()
class GetListAreaSchema(ma.SQLAlchemySchema): class GetlistAreaSchema(ma.SQLAlchemySchema):
class Meta: class Meta:
# unknown = INCLUDE # 未知字段默认包含 # unknown = INCLUDE # 未知字段默认包含
unknown = EXCLUDE # 未知字段默认排除 unknown = EXCLUDE # 未知字段默认排除
...@@ -83,8 +82,8 @@ class GetListAreaSchema(ma.SQLAlchemySchema): ...@@ -83,8 +82,8 @@ class GetListAreaSchema(ma.SQLAlchemySchema):
hasChildren = ma.auto_field() hasChildren = ma.auto_field()
field = fields.String(required=False, length=None) field = fields.String(required=False, length=None)
getListAreaSchema = GetListAreaSchema() getListAreaSchema = GetlistAreaSchema()
getListAreasSchema = GetListAreaSchema(many=True) getListAreasSchema = GetlistAreaSchema(many=True)
class GetAreaSchema(ma.SQLAlchemySchema): class GetAreaSchema(ma.SQLAlchemySchema):
class Meta: 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 #!/usr/bin/env python
# -*- coding: utf_8 -*- # -*- coding: utf_8 -*-
# Documention: https://docs.sqlalchemy.org/en/14/orm/declarative_mixins.html
import uuid import uuid
from datetime import datetime from datetime import datetime
from application.app import db 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(): def generate_uuid():
return uuid.uuid1().hex return uuid.uuid1().hex
...@@ -27,21 +13,11 @@ class BaseModel(db.Model): ...@@ -27,21 +13,11 @@ class BaseModel(db.Model):
# 方法就是把__abstract__这个属性设置为True,这个类为基类,不会被创建为表! # 方法就是把__abstract__这个属性设置为True,这个类为基类,不会被创建为表!
__abstract__ = True __abstract__ = True
create_at = db.Column(db.DateTime, default=datetime.now) 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_at = db.Column(db.DateTime, default=datetime.now)
update_by = db.Column(db.String(64))
remarks = db.Column(db.String(255), default="") remarks = db.Column(db.String(255), default="")
is_delete = db.Column(db.Boolean, default=0) 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))
class PrimaryModel(BaseModel): class PrimaryModel(BaseModel):
__abstract__ = True __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,
}
''' # -*- coding: utf-8 -*-
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 -*-
from flask import Blueprint from flask import Blueprint
from flask_restful import Api from flask_restful import Api
from . import area from . import area
from . import openapi
from . import app from . import app
from . import package from . import package
from . import user from . import user
from . import login from . import login
from . import device from . import device
from . import annex from . import annex
from . import file
from . import menu
from . import monitorWatch from . import monitorWatch
from . import monitorSystem from . import monitorSystem
from . import monitorLvgl from . import monitorLvgl
from . import monitorImage from . import monitorImage
from . import monitorEvm from . import monitorEvm
from . import menu
from . import file
from . import openapi
api_v1 = Blueprint('api_v1', __name__) api_v1 = Blueprint('api_v1', __name__)
api = Api(api_v1) api = Api(api_v1)
api.add_resource(area.AreaResource, '/area/<string:uuid>') api.add_resource(area.AreaResource, '/area/<string:uuid>')
api.add_resource(area.AreaResourceList, '/area') api.add_resource(area.AreaResourceList, '/area')
api.add_resource(app.AppResource, '/app/<string:uuid>') api.add_resource(app.AppResource, '/app/<string:uuid>')
api.add_resource(app.AppResourceList, '/app') 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.PackageResource, '/package/<string:uuid>')
api.add_resource(package.PackageResourceList, '/package') api.add_resource(package.PackageResourceList, '/package')
...@@ -57,28 +36,12 @@ api.add_resource(user.UserResourceList, '/user') ...@@ -57,28 +36,12 @@ api.add_resource(user.UserResourceList, '/user')
api.add_resource(login.LoginResource, '/login/<string:uuid>') api.add_resource(login.LoginResource, '/login/<string:uuid>')
api.add_resource(login.LoginResourceList, '/login') 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.DeviceResource, '/device/<string:uuid>')
api.add_resource(device.DeviceResourceList, '/device') api.add_resource(device.DeviceResourceList, '/device')
api.add_resource(annex.AnnexResource, '/annex/<string:uuid>') api.add_resource(annex.AnnexResource, '/annex/<string:uuid>')
api.add_resource(annex.AnnexResourceList, '/annex') 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.MonitorWatchResource, '/monitorWatch/<string:uuid>')
api.add_resource(monitorWatch.MonitorWatchResourceList, '/monitorWatch') api.add_resource(monitorWatch.MonitorWatchResourceList, '/monitorWatch')
...@@ -93,3 +56,30 @@ api.add_resource(monitorImage.MonitorImageResourceList, '/monitorImage') ...@@ -93,3 +56,30 @@ api.add_resource(monitorImage.MonitorImageResourceList, '/monitorImage')
api.add_resource(monitorEvm.MonitorEvmResource, '/monitorEvm/<string:uuid>') api.add_resource(monitorEvm.MonitorEvmResource, '/monitorEvm/<string:uuid>')
api.add_resource(monitorEvm.MonitorEvmResourceList, '/monitorEvm') 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 ...@@ -10,6 +10,7 @@ from models.annex import deleteAnnexSchema, getListAnnexSchema, getListAnnexsSc
from webcreator.log import logger from webcreator.log import logger
from webcreator.response import ResponseCode, response_result from webcreator.response import ResponseCode, response_result
class AnnexResourceList(Resource): class AnnexResourceList(Resource):
def __init__(self): def __init__(self):
pass pass
......
...@@ -10,6 +10,7 @@ from models.area import postAreaSchema, deleteAreaSchema, getListAreaSchema, ge ...@@ -10,6 +10,7 @@ from models.area import postAreaSchema, deleteAreaSchema, getListAreaSchema, ge
from webcreator.log import logger from webcreator.log import logger
from webcreator.response import ResponseCode, response_result from webcreator.response import ResponseCode, response_result
class AreaResourceList(Resource): class AreaResourceList(Resource):
def __init__(self): def __init__(self):
pass pass
......
This diff is collapsed.
''' '''
Author: your name Author: your name
Date: 2021-06-29 19:33:41 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 LastEditors: Please set LastEditors
Description: In User Settings Edit Description: In User Settings Edit
FilePath: \evm-store\backend\view\monitor.py FilePath: \evm-store\backend\view\monitor.py
......
''' '''
Author: your name Author: your name
Date: 2021-07-15 09:33:39 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 LastEditors: Please set LastEditors
Description: In User Settings Edit Description: In User Settings Edit
FilePath: \evm-store\tools\build_out\views\package.py 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 -*- # -*- coding: utf_8 -*-
''' '''
...@@ -87,22 +79,6 @@ class ResponseCode(object): ...@@ -87,22 +79,6 @@ class ResponseCode(object):
USER_EXISTS = (1010002, 'user already exists') USER_EXISTS = (1010002, 'user already exists')
USER_PASSWORD_ERROR = (1010003, 'password error') 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): def response_result(response, msg=None, data=None, **kwargs):
c, m = response c, m = response
......
...@@ -558,7 +558,7 @@ ...@@ -558,7 +558,7 @@
}, },
{ {
"name": "package", "name": "package",
"enable": true, "enable": false,
"controller": { "controller": {
"className": "Resource" "className": "Resource"
}, },
...@@ -1834,6 +1834,164 @@ ...@@ -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 打包后的文件夹 ...@@ -67,6 +67,146 @@ serve -s dist 运行打包后的生产文件 dist 打包后的文件夹
npm run lint 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) 1. 运行文件配置 [vue.config.js](https://github.com/ruyangit/seed-workbench-ui/blob/dev/vue.config.js)
......
...@@ -9,6 +9,7 @@ ...@@ -9,6 +9,7 @@
}, },
"dependencies": { "dependencies": {
"@antv/g2": "^3.2.7", "@antv/g2": "^3.2.7",
"@riophae/vue-treeselect": "^0.4.0",
"ant-design-vue": "^1.7.5", "ant-design-vue": "^1.7.5",
"axios": "^0.18.0", "axios": "^0.18.0",
"bootstrap": "4.6.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 { ...@@ -42,6 +42,8 @@ export default {
'menu.system.index': '系统管理', 'menu.system.index': '系统管理',
'menu.system.setting': '系统设置', 'menu.system.setting': '系统设置',
'menu.system.setting.menu': '菜单管理', 'menu.system.setting.menu': '菜单管理',
'menu.system.setting.permission': '权限管理',
'menu.system.setting.role': '角色管理',
'menu.system.setting.module': '模块管理', 'menu.system.setting.module': '模块管理',
'menu.system.setting.config': '配置管理', 'menu.system.setting.config': '配置管理',
'menu.system.setting.dict': '字典管理', 'menu.system.setting.dict': '字典管理',
......
...@@ -43,6 +43,8 @@ export default { ...@@ -43,6 +43,8 @@ export default {
'menu.system.index': '系统管理', 'menu.system.index': '系统管理',
'menu.system.setting': '系统设置', 'menu.system.setting': '系统设置',
'menu.system.setting.menu': '菜单管理', 'menu.system.setting.menu': '菜单管理',
'menu.system.setting.permission': '权限管理',
'menu.system.setting.role': '角色管理',
'menu.system.setting.module': '模块管理', 'menu.system.setting.module': '模块管理',
'menu.system.setting.config': '配置管理', 'menu.system.setting.config': '配置管理',
'menu.system.setting.dict': '字典管理', 'menu.system.setting.dict': '字典管理',
......
...@@ -131,15 +131,20 @@ const router = new Router({ ...@@ -131,15 +131,20 @@ const router = new Router({
component: () => import("@/views/System/menu"), component: () => import("@/views/System/menu"),
}, },
{ {
path: "/system/setting/perssion", path: "/system/setting/permission",
name: "module", name: "permission",
component: () => import("@/views/System/perssion"), component: () => import("@/views/System/permission"),
}, },
{ {
path: "/system/setting/data-permission", path: "/system/setting/role",
name: "config", name: "role",
component: () => import("@/views/System/role"), component: () => import("@/views/System/role"),
}, },
{
path: "/system/setting/data-permission",
name: "data-permission",
component: () => import("@/views/System/dataPermission"),
},
{ {
path: "/system/setting/dict", path: "/system/setting/dict",
name: "dict", name: "dict",
......
...@@ -51,6 +51,22 @@ const mock = [ ...@@ -51,6 +51,22 @@ const mock = [
leaf: true, leaf: true,
children: [], 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", id: "1044886630122659840",
parentId: "1044886629921333248", parentId: "1044886629921333248",
...@@ -159,6 +175,7 @@ const state = { ...@@ -159,6 +175,7 @@ const state = {
const actions = { const actions = {
["getMenuNav"]({ commit, state }, config) { ["getMenuNav"]({ commit, state }, config) {
state.loading = true; state.loading = true;
console.log(config)
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
menuNav() menuNav()
.then((response) => { .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 @@ ...@@ -64,9 +64,9 @@
import { Table, TableColumn, Button } from "element-ui" import { Table, TableColumn, Button } from "element-ui"
import 'element-ui/lib/theme-chalk/index.css' import 'element-ui/lib/theme-chalk/index.css'
import TableLayout from './components/TableLayout' import TableLayout from '@/views/System/components/TableLayout'
import BaseTable from './components/base/BaseTable' import BaseTable from '@/views/System/components/base/BaseTable'
import OperaMenuWindow from './components/system/menu/OperaMenuWindow' import OperaMenuWindow from '@/views/System/components/system/menu/OperaMenuWindow'
import { fetchTree, updateStatus, sort } from '@/api/system/menu' import { fetchTree, updateStatus, sort } from '@/api/system/menu'
export default { export default {
name: 'SystemMenu', name: 'SystemMenu',
......
...@@ -69,12 +69,12 @@ ...@@ -69,12 +69,12 @@
</template> </template>
<script> <script>
import Pagination from '@/components/common/Pagination' import Pagination from '@/views/System/components/common/Pagination'
import TableLayout from '@/layouts/TableLayout' import TableLayout from '@/views/System/components/TableLayout'
import BaseTable from '@/components/base/BaseTable' import BaseTable from '@/views/System/components/base/BaseTable'
import OperaRoleWindow from '@/components/system/role/OperaRoleWindow' import OperaRoleWindow from '@/views/System/components/system/role/OperaRoleWindow'
import PermissionConfigWindow from '@/components/system/role/PermissionConfigWindow' import PermissionConfigWindow from '@/views/System/components/system/role/PermissionConfigWindow'
import MenuConfigWindow from '@/components/system/role/MenuConfigWindow' import MenuConfigWindow from '@/views/System/components/system/role/MenuConfigWindow'
export default { export default {
name: 'SystemRole', name: 'SystemRole',
extends: BaseTable, extends: BaseTable,
......
...@@ -61,7 +61,7 @@ export default { ...@@ -61,7 +61,7 @@ export default {
</script> </script>
<style lang="scss"> <style lang="scss">
@import "@/assets/style/variables.scss"; @import "@/styles/variables.scss";
.table-layout { .table-layout {
height: 100%; height: 100%;
display: flex; display: flex;
......
...@@ -70,6 +70,7 @@ export default { ...@@ -70,6 +70,7 @@ export default {
try { try {
content = JSON.stringify(JSON.parse(this.content), null, 2) content = JSON.stringify(JSON.parse(this.content), null, 2)
} catch (e) { } catch (e) {
console.error(e)
} }
} }
return content return content
......
...@@ -154,7 +154,7 @@ export default { ...@@ -154,7 +154,7 @@ export default {
</script> </script>
<style scoped lang="scss"> <style scoped lang="scss">
@import "@/assets/style/variables.scss"; @import "@/styles/variables.scss";
.header { .header {
overflow: hidden; overflow: hidden;
padding: 0 25px; padding: 0 25px;
......
...@@ -86,7 +86,7 @@ export default { ...@@ -86,7 +86,7 @@ export default {
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
@import "@/assets/style/variables.scss"; @import "@/styles/variables.scss";
.menu { .menu {
height: 100%; height: 100%;
display: flex; display: flex;
...@@ -125,7 +125,7 @@ export default { ...@@ -125,7 +125,7 @@ export default {
} }
</style> </style>
<style lang="scss"> <style lang="scss">
@import "@/assets/style/variables.scss"; @import "@/styles/variables.scss";
// 菜单样式 // 菜单样式
.el-menu { .el-menu {
border-right: 0 !important; border-right: 0 !important;
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
<div class="not-allow"> <div class="not-allow">
<slot> <slot>
<div class="content"> <div class="content">
<img src="../../assets/images/not-allow.png"> <img src="@/assets/not-allow.png">
<h2>无权访问</h2> <h2>无权访问</h2>
<p>如您需要访问该页面,请联系系统管理员</p> <p>如您需要访问该页面,请联系系统管理员</p>
</div> </div>
......
...@@ -27,11 +27,11 @@ export default { ...@@ -27,11 +27,11 @@ export default {
component () { component () {
// 部门选择器 // 部门选择器
if (this.businessCode === 'DEPARTMENT') { if (this.businessCode === 'DEPARTMENT') {
return () => import('@/components/common/DepartmentSelect') return () => import('@/views/System/components/common/DepartmentSelect')
} }
// 岗位选择器 // 岗位选择器
if (this.businessCode === 'POSITION') { if (this.businessCode === 'POSITION') {
return () => import('@/components/common/PositionSelect') return () => import('@/views/System/components/common/PositionSelect')
} }
return null return null
} }
......
...@@ -26,9 +26,9 @@ ...@@ -26,9 +26,9 @@
</template> </template>
<script> <script>
import BaseOpera from '@/components/base/BaseOpera' import BaseOpera from '@/views/System/components/base/BaseOpera'
import GlobalWindow from '@/components/common/GlobalWindow' import GlobalWindow from '@/views/System/components/common/GlobalWindow'
import RoleSelect from '@/components/system/role/RoleSelect' import RoleSelect from '@/views/System/components/system/role/RoleSelect'
import DataPermModuleSelect from './DataPermModuleSelect' import DataPermModuleSelect from './DataPermModuleSelect'
import DataPermTypeSelect from './DataPermTypeSelect' import DataPermTypeSelect from './DataPermTypeSelect'
import CustomSelect from './CustomSelect' import CustomSelect from './CustomSelect'
......
...@@ -79,10 +79,10 @@ ...@@ -79,10 +79,10 @@
</template> </template>
<script> <script>
import TableLayout from '@/layouts/TableLayout' import TableLayout from '@/views/System/components/TableLayout'
import BaseTable from '@/components/base/BaseTable' import BaseTable from '@/views/System/components/base/BaseTable'
import GlobalWindow from '@/components/common/GlobalWindow' import GlobalWindow from '@/views/System/components/common/GlobalWindow'
import Pagination from '@/components/common/Pagination' import Pagination from '@/views/System/components/common/Pagination'
import { fetchUserList } from '@/api/system/department' import { fetchUserList } from '@/api/system/department'
export default { export default {
name: 'DepartmentUserWindow', name: 'DepartmentUserWindow',
......
...@@ -26,9 +26,9 @@ ...@@ -26,9 +26,9 @@
</template> </template>
<script> <script>
import BaseOpera from '@/components/base/BaseOpera' import BaseOpera from '@/views/System/components/base/BaseOpera'
import GlobalWindow from '@/components/common/GlobalWindow' import GlobalWindow from '@/views/System/components/common/GlobalWindow'
import DepartmentSelect from '@/components/common/DepartmentSelect' import DepartmentSelect from '@/views/System/components/common/DepartmentSelect'
import { checkMobile, checkEmail } from '@/utils/form' import { checkMobile, checkEmail } from '@/utils/form'
export default { export default {
name: 'OperaDepartmentWindow', name: 'OperaDepartmentWindow',
......
...@@ -56,10 +56,10 @@ ...@@ -56,10 +56,10 @@
</template> </template>
<script> <script>
import BaseTable from '@/components/base/BaseTable' import BaseTable from '@/views/System/components/base/BaseTable'
import Pagination from '@/components/common/Pagination' import Pagination from '@/views/System/components/common/Pagination'
import GlobalWindow from '@/components/common/GlobalWindow' import GlobalWindow from '@/views/System/components/common/GlobalWindow'
import TableLayout from '@/layouts/TableLayout' import TableLayout from '@/views/System/components/TableLayout'
import OperaDictDataWindow from './OperaDictDataWindow' import OperaDictDataWindow from './OperaDictDataWindow'
export default { export default {
name: 'DictDataManagerWindow', name: 'DictDataManagerWindow',
......
...@@ -21,8 +21,8 @@ ...@@ -21,8 +21,8 @@
</template> </template>
<script> <script>
import BaseOpera from '@/components/base/BaseOpera' import BaseOpera from '@/views/System/components/base/BaseOpera'
import GlobalWindow from '@/components/common/GlobalWindow' import GlobalWindow from '@/views/System/components/common/GlobalWindow'
export default { export default {
name: 'OperaDictDataWindow', name: 'OperaDictDataWindow',
extends: BaseOpera, extends: BaseOpera,
......
...@@ -20,8 +20,8 @@ ...@@ -20,8 +20,8 @@
</template> </template>
<script> <script>
import BaseOpera from '@/components/base/BaseOpera' import BaseOpera from '@/views/System/components/base/BaseOpera'
import GlobalWindow from '@/components/common/GlobalWindow' import GlobalWindow from '@/views/System/components/common/GlobalWindow'
export default { export default {
name: 'OperaDictWindow', name: 'OperaDictWindow',
extends: BaseOpera, extends: BaseOpera,
......
...@@ -38,8 +38,8 @@ ...@@ -38,8 +38,8 @@
</template> </template>
<script> <script>
import BaseOpera from '@/components/base/BaseOpera' import BaseOpera from '@/views/System/components/base/BaseOpera'
import GlobalWindow from '@/components/common/GlobalWindow' import GlobalWindow from '@/views/System/components/common/GlobalWindow'
export default { export default {
name: 'OperaLocationWindow', name: 'OperaLocationWindow',
extends: BaseOpera, extends: BaseOpera,
......
...@@ -35,9 +35,9 @@ ...@@ -35,9 +35,9 @@
import { Form, FormItem, Radio, RadioGroup, Input } from "element-ui" import { Form, FormItem, Radio, RadioGroup, Input } from "element-ui"
import 'element-ui/lib/theme-chalk/index.css' import 'element-ui/lib/theme-chalk/index.css'
import BaseOpera from '@/src/views/System/components/base/BaseOpera' import BaseOpera from '@/views/System/components/base/BaseOpera'
import GlobalWindow from '@/src/views/System/components/common/GlobalWindow' import GlobalWindow from '@/views/System/components/common/GlobalWindow'
import MenuSelect from '@/src/views/System/components/common/MenuSelect' import MenuSelect from '@/views/System/components/common/MenuSelect'
import icons from '@/utils/icons' import icons from '@/utils/icons'
export default { export default {
name: 'OperaMenuWindow', name: 'OperaMenuWindow',
......
...@@ -20,8 +20,8 @@ ...@@ -20,8 +20,8 @@
</template> </template>
<script> <script>
import BaseOpera from '@/components/base/BaseOpera' import BaseOpera from '@/views/System/components/base/BaseOpera'
import GlobalWindow from '@/components/common/GlobalWindow' import GlobalWindow from '@/views/System/components/common/GlobalWindow'
export default { export default {
name: 'OperaPermissionWindow', name: 'OperaPermissionWindow',
extends: BaseOpera, extends: BaseOpera,
......
...@@ -20,9 +20,9 @@ ...@@ -20,9 +20,9 @@
</template> </template>
<script> <script>
import BaseOpera from '@/components/base/BaseOpera' import BaseOpera from '@/views/System/components/base/BaseOpera'
import GlobalWindow from '@/components/common/GlobalWindow' import GlobalWindow from '@/views/System/components/common/GlobalWindow'
import PositionSelect from '@/components/common/PositionSelect' import PositionSelect from '@/views/System/components/common/PositionSelect'
export default { export default {
name: 'OperaPositionWindow', name: 'OperaPositionWindow',
extends: BaseOpera, extends: BaseOpera,
......
...@@ -76,10 +76,10 @@ ...@@ -76,10 +76,10 @@
</template> </template>
<script> <script>
import TableLayout from '@/layouts/TableLayout' import TableLayout from '@/views/System/components/TableLayout'
import BaseTable from '@/components/base/BaseTable' import BaseTable from '@/views/System/components/base/BaseTable'
import GlobalWindow from '@/components/common/GlobalWindow' import GlobalWindow from '@/views/System/components/common/GlobalWindow'
import Pagination from '@/components/common/Pagination' import Pagination from '@/views/System/components/common/Pagination'
export default { export default {
name: 'PositionUserWindow', name: 'PositionUserWindow',
extends: BaseTable, extends: BaseTable,
......
...@@ -23,7 +23,7 @@ ...@@ -23,7 +23,7 @@
</template> </template>
<script> <script>
import GlobalWindow from '@/components/common/GlobalWindow' import GlobalWindow from '@/views/System/components/common/GlobalWindow'
import { createRoleMenu } from '@/api/system/role' import { createRoleMenu } from '@/api/system/role'
import { fetchTree as fetchMenuList } from '@/api/system/menu' import { fetchTree as fetchMenuList } from '@/api/system/menu'
export default { export default {
...@@ -100,7 +100,7 @@ export default { ...@@ -100,7 +100,7 @@ export default {
</script> </script>
<style scoped lang="scss"> <style scoped lang="scss">
@import "@/assets/style/variables.scss"; @import "@/styles/variables.scss";
.global-window { .global-window {
.tip { .tip {
margin-bottom: 12px; margin-bottom: 12px;
......
...@@ -20,8 +20,8 @@ ...@@ -20,8 +20,8 @@
</template> </template>
<script> <script>
import BaseOpera from '@/components/base/BaseOpera' import BaseOpera from '@/views/System/components/base/BaseOpera'
import GlobalWindow from '@/components/common/GlobalWindow' import GlobalWindow from '@/views/System/components/common/GlobalWindow'
export default { export default {
name: 'OperaRoleWindow', name: 'OperaRoleWindow',
extends: BaseOpera, extends: BaseOpera,
......
...@@ -24,7 +24,7 @@ ...@@ -24,7 +24,7 @@
</template> </template>
<script> <script>
import GlobalWindow from '@/components/common/GlobalWindow' import GlobalWindow from '@/views/System/components/common/GlobalWindow'
import { createRolePermission } from '@/api/system/role' import { createRolePermission } from '@/api/system/role'
import { fetchAll } from '@/api/system/permission' import { fetchAll } from '@/api/system/permission'
export default { export default {
...@@ -99,7 +99,7 @@ export default { ...@@ -99,7 +99,7 @@ export default {
</script> </script>
<style scoped lang="scss"> <style scoped lang="scss">
@import "@/assets/style/variables.scss"; @import "@/styles/variables.scss";
.global-window { .global-window {
.tip { .tip {
em { em {
......
...@@ -51,10 +51,10 @@ ...@@ -51,10 +51,10 @@
</template> </template>
<script> <script>
import BaseOpera from '@/components/base/BaseOpera' import BaseOpera from '@/views/System/components/base/BaseOpera'
import GlobalWindow from '@/components/common/GlobalWindow' import GlobalWindow from '@/views/System/components/common/GlobalWindow'
import DepartmentSelect from '@/components/common/DepartmentSelect' import DepartmentSelect from '@/views/System/components/common/DepartmentSelect'
import PositionSelect from '@/components/common/PositionSelect' import PositionSelect from '@/views/System/components/common/PositionSelect'
import { checkMobile, checkEmail } from '@/utils/form' import { checkMobile, checkEmail } from '@/utils/form'
export default { export default {
......
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
</template> </template>
<script> <script>
import GlobalWindow from '@/components/common/GlobalWindow' import GlobalWindow from '@/views/System/components/common/GlobalWindow'
import { resetPwd } from '@/api/system/user' import { resetPwd } from '@/api/system/user'
export default { export default {
name: 'ResetPwdWindow', name: 'ResetPwdWindow',
...@@ -76,7 +76,7 @@ export default { ...@@ -76,7 +76,7 @@ export default {
</script> </script>
<style scoped lang="scss"> <style scoped lang="scss">
@import "@/assets/style/variables.scss"; @import "@/styles/variables.scss";
// 角色配置 // 角色配置
.global-window { .global-window {
.tip { .tip {
......
...@@ -21,8 +21,8 @@ ...@@ -21,8 +21,8 @@
</template> </template>
<script> <script>
import BasePage from '@/components/base/BasePage' import BasePage from '@/views/System/components/base/BasePage'
import GlobalWindow from '@/components/common/GlobalWindow' import GlobalWindow from '@/views/System/components/common/GlobalWindow'
import { createUserRole } from '@/api/system/user' import { createUserRole } from '@/api/system/user'
import { fetchAll as fetchAllRoles } from '@/api/system/role' import { fetchAll as fetchAllRoles } from '@/api/system/role'
export default { export default {
...@@ -101,7 +101,7 @@ export default { ...@@ -101,7 +101,7 @@ export default {
</script> </script>
<style scoped lang="scss"> <style scoped lang="scss">
@import "@/assets/style/variables.scss"; @import "@/styles/variables.scss";
// 角色配置 // 角色配置
.global-window { .global-window {
.tip { .tip {
......
...@@ -78,12 +78,12 @@ ...@@ -78,12 +78,12 @@
import { Table, TableColumn, Button } from "element-ui" import { Table, TableColumn, Button } from "element-ui"
import 'element-ui/lib/theme-chalk/index.css' import 'element-ui/lib/theme-chalk/index.css'
import BaseTable from './base/BaseTable' import BaseTable from '@/views/System/components/base/BaseTable'
import TableLayout from './TableLayout' import TableLayout from '@/views/System/components/TableLayout'
import Pagination from './common/Pagination' import Pagination from '@/views/System/components/common/Pagination'
import OperaDataPermissionWindow from './system/datapermission/OperaDataPermissionWindow' import OperaDataPermissionWindow from '@/views/System/components/system/datapermission/OperaDataPermissionWindow'
import DataPermModuleSelect from './system/datapermission/DataPermModuleSelect' import DataPermModuleSelect from '@/views/System/components/system/datapermission/DataPermModuleSelect'
import RoleSelect from './system/role/RoleSelect' import RoleSelect from '@/views/System/components/system/role/RoleSelect'
// 获取模块名称 // 获取模块名称
const __getModuleName = function (businessCode, modules) { const __getModuleName = function (businessCode, modules) {
......
...@@ -52,9 +52,9 @@ ...@@ -52,9 +52,9 @@
</template> </template>
<script> <script>
import TableLayout from '@/layouts/TableLayout' import TableLayout from '@/views/System/components/TableLayout'
import { fetchTree } from '@/api/system/department' 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 OperaDepartmentWindow from '@/components/system/department/OperaDepartmentWindow'
import DepartmentUserWindow from '@/components/system/department/DepartmentUserWindow' import DepartmentUserWindow from '@/components/system/department/DepartmentUserWindow'
export default { export default {
......
...@@ -66,11 +66,11 @@ ...@@ -66,11 +66,11 @@
</template> </template>
<script> <script>
import Pagination from '@/components/common/Pagination' import Pagination from '@/views/System/components/common/Pagination'
import TableLayout from '@/layouts/TableLayout' import TableLayout from '@/views/System/components/TableLayout'
import BaseTable from '@/components/base/BaseTable' import BaseTable from '@/views/System/components/base/BaseTable'
import OperaDictWindow from '@/components/system/dict/OperaDictWindow' import OperaDictWindow from '@/views/System/components/system/dict/OperaDictWindow'
import DictDataManagerWindow from '@/components/system/dict/DictDataManagerWindow' import DictDataManagerWindow from '@/views/System/components/system/dict/DictDataManagerWindow'
export default { export default {
name: 'SystemDict', name: 'SystemDict',
extends: BaseTable, extends: BaseTable,
......
...@@ -81,11 +81,11 @@ ...@@ -81,11 +81,11 @@
</template> </template>
<script> <script>
import BaseTable from '@/components/base/BaseTable' import BaseTable from '@/views/System/components/base/BaseTable'
import TableLayout from '@/layouts/TableLayout' import TableLayout from '@/views/System/components/TableLayout'
import Pagination from '@/components/common/Pagination' import Pagination from '@/views/System/components/common/Pagination'
import OperaLocationWindow from '@/components/system/location/OperaLocationWindow' import OperaLocationWindow from '@/views/System/components/system/location/OperaLocationWindow'
import LocationSelect from '@/components/common/LocationSelect' import LocationSelect from '@/views/System/components/common/LocationSelect'
import { updateStatus } from '@/api/system/location' import { updateStatus } from '@/api/system/location'
export default { export default {
......
...@@ -69,9 +69,9 @@ ...@@ -69,9 +69,9 @@
</template> </template>
<script> <script>
import BaseTable from '@/components/base/BaseTable' import BaseTable from '@/views/System/components/base/BaseTable'
import TableLayout from '@/layouts/TableLayout' import TableLayout from '@/views/System/components/TableLayout'
import Pagination from '@/components/common/Pagination' import Pagination from '@/views/System/components/common/Pagination'
export default { export default {
name: 'SystemLoginLog', name: 'SystemLoginLog',
......
...@@ -230,7 +230,7 @@ export default { ...@@ -230,7 +230,7 @@ export default {
</script> </script>
<style scoped lang="scss"> <style scoped lang="scss">
@import "@/assets/style/variables.scss"; @import "@/styles/variables.scss";
.monitor { .monitor {
padding: 20px 20px; padding: 20px 20px;
} }
......
...@@ -63,10 +63,10 @@ ...@@ -63,10 +63,10 @@
</template> </template>
<script> <script>
import Pagination from '@/components/common/Pagination' import Pagination from '@/views/System/components/common/Pagination'
import TableLayout from '@/layouts/TableLayout' import TableLayout from '@/views/System/components/TableLayout'
import BaseTable from '@/components/base/BaseTable' import BaseTable from '@/views/System/components/base/BaseTable'
import OperaPermissionWindow from '@/components/system/permission/OperaPermissionWindow' import OperaPermissionWindow from '@/views/System/components/system/permission/OperaPermissionWindow'
export default { export default {
name: 'SystemPermission', name: 'SystemPermission',
extends: BaseTable, extends: BaseTable,
......
...@@ -50,8 +50,8 @@ ...@@ -50,8 +50,8 @@
</template> </template>
<script> <script>
import TableLayout from '@/layouts/TableLayout' import TableLayout from '@/views/System/components/TableLayout'
import BaseTable from '@/components/base/BaseTable' import BaseTable from '@/views/System/components/base/BaseTable'
import OperaPositionWindow from '@/components/system/position/OperaPositionWindow' import OperaPositionWindow from '@/components/system/position/OperaPositionWindow'
import PositionUserWindow from '@/components/system/position/PositionUserWindow' import PositionUserWindow from '@/components/system/position/PositionUserWindow'
import { fetchTree } from '@/api/system/position' import { fetchTree } from '@/api/system/position'
......
...@@ -106,10 +106,10 @@ ...@@ -106,10 +106,10 @@
</template> </template>
<script> <script>
import Pagination from '@/components/common/Pagination' import Pagination from '@/views/System/components/common/Pagination'
import TableLayout from '@/layouts/TableLayout' import TableLayout from '@/views/System/components/TableLayout'
import BaseTable from '@/components/base/BaseTable' import BaseTable from '@/views/System/components/base/BaseTable'
import ColumnDetail from '../../components/common/ColumnDetail' import ColumnDetail from '@/views/System/components/common/ColumnDetail'
export default { export default {
name: 'SystemTraceLog', name: 'SystemTraceLog',
......
...@@ -108,14 +108,14 @@ ...@@ -108,14 +108,14 @@
</template> </template>
<script> <script>
import Pagination from '@/components/common/Pagination' import Pagination from '@/views/System/components/common/Pagination'
import TableLayout from '@/layouts/TableLayout' import TableLayout from '@/views/System/components/TableLayout'
import BaseTable from '@/components/base/BaseTable' import BaseTable from '@/views/System/components/base/BaseTable'
import OperaUserWindow from '@/components/system/user/OperaUserWindow' import OperaUserWindow from '@/views/System/components/system/user/OperaUserWindow'
import RoleConfigWindow from '@/components/system/user/RoleConfigWindow' import RoleConfigWindow from '@/views/System/components/system/user/RoleConfigWindow'
import ResetPwdWindow from '@/components/system/user/ResetPwdWindow' import ResetPwdWindow from '@/views/System/components/system/user/ResetPwdWindow'
import DepartmentSelect from '@/components/common/DepartmentSelect' import DepartmentSelect from '@/views/System/components/common/DepartmentSelect'
import PositionSelect from '@/components/common/PositionSelect' import PositionSelect from '@/views/System/components/common/PositionSelect'
export default { export default {
name: 'SystemUser', name: 'SystemUser',
......
...@@ -787,6 +787,13 @@ ...@@ -787,6 +787,13 @@
dependencies: dependencies:
regenerator-runtime "^0.13.4" 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": "@babel/template@^7.14.5":
version "7.14.5" version "7.14.5"
resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.14.5.tgz#a9bc9d8b33354ff6e55a9c60d1109200a68974f4" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.14.5.tgz#a9bc9d8b33354ff6e55a9c60d1109200a68974f4"
...@@ -1101,6 +1108,20 @@ ...@@ -1101,6 +1108,20 @@
node-gyp "^7.1.0" node-gyp "^7.1.0"
read-package-json-fast "^2.0.1" 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": "@simonwep/pickr@~1.7.0":
version "1.7.4" version "1.7.4"
resolved "https://registry.yarnpkg.com/@simonwep/pickr/-/pickr-1.7.4.tgz#b14fcd945890388b870cd6db4d6c78d531f25141" 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: ...@@ -4188,6 +4209,11 @@ duplexify@^3.4.2, duplexify@^3.6.0:
readable-stream "^2.0.0" readable-stream "^2.0.0"
stream-shift "^1.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: easy-stack@^1.0.1:
version "1.0.1" version "1.0.1"
resolved "https://registry.yarnpkg.com/easy-stack/-/easy-stack-1.0.1.tgz#8afe4264626988cabb11f3c704ccd0c835411066" 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: ...@@ -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" resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327"
integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= 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: gauge@~2.7.3:
version "2.7.4" version "2.7.4"
resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" 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: ...@@ -6477,6 +6508,11 @@ is-plain-object@^2.0.3, is-plain-object@^2.0.4:
dependencies: dependencies:
isobject "^3.0.1" 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: is-redirect@^1.0.0:
version "1.0.0" version "1.0.0"
resolved "https://registry.yarnpkg.com/is-redirect/-/is-redirect-1.0.0.tgz#1d03dded53bd8db0f30c26e4f95d36fc7c87dc24" resolved "https://registry.yarnpkg.com/is-redirect/-/is-redirect-1.0.0.tgz#1d03dded53bd8db0f30c26e4f95d36fc7c87dc24"
...@@ -7217,6 +7253,11 @@ map-visit@^1.0.0: ...@@ -7217,6 +7253,11 @@ map-visit@^1.0.0:
dependencies: dependencies:
object-visit "^1.0.0" 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: md5.js@^1.3.4:
version "1.3.5" version "1.3.5"
resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f"
...@@ -11708,6 +11749,11 @@ warning@^4.0.0: ...@@ -11708,6 +11749,11 @@ warning@^4.0.0:
dependencies: dependencies:
loose-envify "^1.0.0" 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: watchpack-chokidar2@^2.0.1:
version "2.0.1" version "2.0.1"
resolved "https://registry.yarnpkg.com/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz#38500072ee6ece66f3769936950ea1771be1c957" resolved "https://registry.yarnpkg.com/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz#38500072ee6ece66f3769936950ea1771be1c957"
......
...@@ -9,7 +9,7 @@ import hashlib ...@@ -9,7 +9,7 @@ import hashlib
import time import time
import shutil import shutil
from jinja2 import Environment, FileSystemLoader from jinja2 import Environment, FileSystemLoader
from resources.webcreator import log from resources.webcreator.log import logger
''' '''
流程: 流程:
...@@ -65,9 +65,25 @@ def convertFirstLetterUpper(text_str): ...@@ -65,9 +65,25 @@ def convertFirstLetterUpper(text_str):
# print("////////////////////>>>>", text_str) # print("////////////////////>>>>", text_str)
return re.sub("([a-zA-Z])", lambda x: x.groups()[0].upper(), text_str, 1) 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()) # ROOT = os.path.abspath(os.getcwd())
jinja_env = Environment(loader=FileSystemLoader(os.path.join(os.getcwd(), 'templates'))) jinja_env = Environment(loader=FileSystemLoader(os.path.join(os.getcwd(), 'templates')))
jinja_env.filters['letterUpper'] = convertFirstLetterUpper jinja_env.filters['letterUpper'] = convertFirstLetterUpper
jinja_env.filters['getDataType'] = convertDataType
jinja_env.filters['getVariableString'] = getVariableString
input_dir = None input_dir = None
output_dir = None output_dir = None
...@@ -75,7 +91,7 @@ events = [] ...@@ -75,7 +91,7 @@ events = []
def copyFiles(src_dir, dst_dir): def copyFiles(src_dir, dst_dir):
if not os.path.exists(src_dir): if not os.path.exists(src_dir):
log.logger.error("%s 目录不存在" % src_dir) logger.error("%s 目录不存在" % src_dir)
return None return None
# 复制文件之前需要判断文件是否存在 # 复制文件之前需要判断文件是否存在
...@@ -86,26 +102,45 @@ def copyFiles(src_dir, dst_dir): ...@@ -86,26 +102,45 @@ def copyFiles(src_dir, dst_dir):
# dirs 是一个 list,内容是该文件夹中所有的目录的名字(不包括子目录) # dirs 是一个 list,内容是该文件夹中所有的目录的名字(不包括子目录)
# files 同样是 list, 内容是该文件夹中所有的文件(不包括子目录) # files 同样是 list, 内容是该文件夹中所有的文件(不包括子目录)
for root, dirs, files in os.walk(src_dir): for root, dirs, files in os.walk(src_dir):
save_path = dst_dir save_path = Path(dst_dir)
if os.path.basename(root) == "__pycache__": if os.path.basename(root) == "__pycache__":
continue continue
for file in files: 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 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) src_file = Path(root).joinpath(file)
relative_path = os.path.relpath(src_file, src_dir) relative_path = src_file.resolve().relative_to(Path(src_dir))
if relative_path != file: save_path = Path(dst_dir).joinpath(relative_path)
save_path = os.path.normpath(os.sep.join([dst_dir, relative_path])) if save_path.is_file() and not save_path.parent.exists():
save_path.parent.mkdir()
if not os.path.exists(save_path): # if not os.path.exists(save_path):
os.makedirs(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): def handleModuleConfig(config):
# 处理每一项配置文件 # 处理每一项配置文件
...@@ -130,7 +165,7 @@ def handleModules(config): ...@@ -130,7 +165,7 @@ def handleModules(config):
if Path(d).exists(): if Path(d).exists():
shutil.copyfile(d, os.sep.join([output_dir, "controllers", Path(d).name])) shutil.copyfile(d, os.sep.join([output_dir, "controllers", Path(d).name]))
else: else:
log.logger.error("文件:%s 不存在") logger.error("文件:%s 不存在")
def handleResources(config): def handleResources(config):
# 处理路由页面 # 处理路由页面
......
This diff is collapsed.
''' '''
Author: your name Author: your name
Date: 2021-04-22 18:04:10 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 LastEditors: Please set LastEditors
Description: In User Settings Edit Description: In User Settings Edit
FilePath: \evm-store\tools\resources\models\__init__.py FilePath: \evm-store\tools\resources\models\__init__.py
...@@ -11,6 +11,7 @@ from sqlalchemy import create_engine ...@@ -11,6 +11,7 @@ from sqlalchemy import create_engine
from sqlalchemy import Column, Integer, String from sqlalchemy import Column, Integer, String
from sqlalchemy.orm import sessionmaker from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declared_attr, declarative_base from sqlalchemy.ext.declarative import declared_attr, declarative_base
from application.app import config
class BaseModelMixin(object): class BaseModelMixin(object):
@declared_attr @declared_attr
...@@ -33,34 +34,41 @@ class MyMixin(object): ...@@ -33,34 +34,41 @@ class MyMixin(object):
id = Column(Integer, primary_key=True) id = Column(Integer, primary_key=True)
# example:
class MyModel(MyMixin, BaseModel): class MyModel(MyMixin, BaseModel):
__tablename__ = 'mymodel' __tablename__ = 'evm_store_app_logs'
name = Column(String(20)) app_name = Column(String(20))
fullname = Column(String(32)) app_path = Column(String(32))
password = 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__": # if __name__ == "__main__":
engine = create_engine('sqlite:///test.db') engine = create_engine(config.SQLALCHEMY_DATABASE_URI)
BaseModel.metadata.create_all(engine, checkfirst=True) BaseModel.metadata.create_all(engine, checkfirst=True)
Session = sessionmaker(bind=engine) Session = sessionmaker(bind=engine)
session = Session() session = Session()
ed_user = MyModel(name='ed', fullname='Ed Jones', password='edspassword') # ed_user = MyModel(name='ed', fullname='Ed Jones', password='edspassword')
session.add(ed_user) # session.add(ed_user)
# session.add_all(
session.add_all( # [
[ # MyModel(name='wendy', fullname='Wendy Williams', password='foobar'),
MyModel(name='wendy', fullname='Wendy Williams', password='foobar'), # MyModel(name='mary', fullname='Mary Contrary', password='xxg527'),
MyModel(name='mary', fullname='Mary Contrary', password='xxg527'), # MyModel(name='fred', fullname='Fred Flinstone', password='blah')
MyModel(name='fred', fullname='Fred Flinstone', password='blah') # ]
] # )
) # session.commit()
session.commit()
# our_user = session.query(MyModel).filter_by(name='ed').first() # our_user = session.query(MyModel).filter_by(name='ed').first()
# print(our_user) # 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 import uuid
from datetime import datetime from datetime import datetime
from application.app import db from application.app import db
def generate_uuid():
return uuid.uuid1().hex
class BaseModel(db.Model): class BaseModel(db.Model):
# Flask-SQLAlchemy创建table时,如何声明基类(这个类不会创建表,可以被继承) # Flask-SQLAlchemy创建table时,如何声明基类(这个类不会创建表,可以被继承)
# 方法就是把__abstract__这个属性设置为True,这个类为基类,不会被创建为表! # 方法就是把__abstract__这个属性设置为True,这个类为基类,不会被创建为表!
...@@ -18,7 +30,7 @@ class BaseModel(db.Model): ...@@ -18,7 +30,7 @@ class BaseModel(db.Model):
class PrimaryModel(BaseModel): class PrimaryModel(BaseModel):
__abstract__ = True __abstract__ = True
id = db.Column(db.Integer, primary_key=True, autoincrement=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): class AutoBaseModel(BaseModel):
__abstract__ = True __abstract__ = True
...@@ -27,7 +39,7 @@ class AutoBaseModel(BaseModel): ...@@ -27,7 +39,7 @@ class AutoBaseModel(BaseModel):
class UuidBaseModel(BaseModel): class UuidBaseModel(BaseModel):
__abstract__ = True __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) sort = db.Column(db.Integer, default=0)
class SortBaseModel(BaseModel): 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 @@ ...@@ -3,18 +3,28 @@
from datetime import datetime from datetime import datetime
from application.app import db 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.log import logger
from webcreator.response import ResponseCode from webcreator.response import ResponseCode
class {{ config['name'] | letterUpper }}Resource(object): class {{ config['name'] | capitalize }}Resource(object):
def __init__(self): def __init__(self):
super().__init__() 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): def get(self, uuid, params):
# handle business # handle business
filters = [{{ config['name'] | letterUpper }}Model.is_delete==False, {{ config['name'] | letterUpper }}Model.uuid==uuid] filters = [{{ config['name'] | capitalize }}Model.is_delete==False, {{ config['name'] | capitalize }}Model.uuid==uuid]
result = {{ config['name'] | letterUpper }}Model.query.filter(*filters).first() result = {{ config['name'] | capitalize }}Model.query.filter(*filters).first()
if result: if result:
return result, ResponseCode.HTTP_SUCCESS return result, ResponseCode.HTTP_SUCCESS
return None, ResponseCode.HTTP_NOT_FOUND return None, ResponseCode.HTTP_NOT_FOUND
...@@ -22,8 +32,8 @@ class {{ config['name'] | letterUpper }}Resource(object): ...@@ -22,8 +32,8 @@ class {{ config['name'] | letterUpper }}Resource(object):
def getList(self, params): def getList(self, params):
# handle business # handle business
logger.warn(params) logger.warn(params)
filters = [{{ config['name'] | letterUpper }}Model.is_delete==False] filters = [{{ config['name'] | capitalize }}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) 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: if result:
return result, ResponseCode.HTTP_SUCCESS return result, ResponseCode.HTTP_SUCCESS
...@@ -31,7 +41,7 @@ class {{ config['name'] | letterUpper }}Resource(object): ...@@ -31,7 +41,7 @@ class {{ config['name'] | letterUpper }}Resource(object):
def post(self, params, jwt={}): def post(self, params, jwt={}):
# handle business # 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: if result and result.is_delete:
result.is_delete = False result.is_delete = False
result.update_by = jwt.get("id", "") result.update_by = jwt.get("id", "")
...@@ -41,14 +51,14 @@ class {{ config['name'] | letterUpper }}Resource(object): ...@@ -41,14 +51,14 @@ class {{ config['name'] | letterUpper }}Resource(object):
elif result and result.is_delete == False: elif result and result.is_delete == False:
return False, ResponseCode.HTTP_INVAILD_REQUEST return False, ResponseCode.HTTP_INVAILD_REQUEST
result = {{ config['name'] | letterUpper }}Model(**params) result = {{ config['name'] | capitalize }}Model(**params)
db.session.add(result) db.session.add(result)
db.session.commit() db.session.commit()
return True, ResponseCode.HTTP_SUCCESS return True, ResponseCode.HTTP_SUCCESS
def put(self, uuid, params, jwt={}): def put(self, uuid, params, jwt={}):
# handle business # 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: if not result:
return None, ResponseCode.HTTP_NOT_FOUND return None, ResponseCode.HTTP_NOT_FOUND
...@@ -64,7 +74,7 @@ class {{ config['name'] | letterUpper }}Resource(object): ...@@ -64,7 +74,7 @@ class {{ config['name'] | letterUpper }}Resource(object):
def delete(self, uuid, jwt={}): def delete(self, uuid, jwt={}):
# handle business # 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: if not result:
return False, ResponseCode.HTTP_NOT_FOUND return False, ResponseCode.HTTP_NOT_FOUND
...@@ -74,5 +84,6 @@ class {{ config['name'] | letterUpper }}Resource(object): ...@@ -74,5 +84,6 @@ class {{ config['name'] | letterUpper }}Resource(object):
db.session.delete(result) db.session.delete(result)
db.session.commit() db.session.commit()
return True, ResponseCode.HTTP_SUCCESS 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 ...@@ -7,7 +7,7 @@ from .base import PrimaryModel
from marshmallow import Schema, fields, INCLUDE, EXCLUDE from marshmallow import Schema, fields, INCLUDE, EXCLUDE
{%- endif %} {%- 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 %} __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'] %} {% for value in config['model']['fields'] %}
{%- if value.get('primaryKey', None) %} {%- if value.get('primaryKey', None) %}
...@@ -29,7 +29,7 @@ class {{ config['name'] | letterUpper }}Model(PrimaryModel): ...@@ -29,7 +29,7 @@ class {{ config['name'] | letterUpper }}Model(PrimaryModel):
{%- endfor %} {%- endfor %}
def __repr__(self): 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): def to_dict(self):
return { return {
...@@ -40,12 +40,15 @@ class {{ config['name'] | letterUpper }}Model(PrimaryModel): ...@@ -40,12 +40,15 @@ class {{ config['name'] | letterUpper }}Model(PrimaryModel):
{%- endfor %} {%- endfor %}
} }
{%- if "restful" in config.get("view") and config.get("view").get("restful") == False %}
{# do nothing #}
{%- else %}
{% for key, value in config["view"].items() %} {% 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: class Meta:
# unknown = INCLUDE # 未知字段默认包含 # unknown = INCLUDE # 未知字段默认包含
unknown = EXCLUDE # 未知字段默认排除 unknown = EXCLUDE # 未知字段默认排除
model = {{ config['name'] | letterUpper }}Model model = {{ config['name'] | capitalize }}Model
{%- if config['model']['foreignKey'] %} {%- if config['model']['foreignKey'] %}
include_fk = {{ config['model']['foreignKey'] }} include_fk = {{ config['model']['foreignKey'] }}
{% endif %} {% endif %}
...@@ -79,8 +82,9 @@ class {{ key | letterUpper }}{{ config['name'] | letterUpper }}Schema(ma.SQLAlch ...@@ -79,8 +82,9 @@ class {{ key | letterUpper }}{{ config['name'] | letterUpper }}Schema(ma.SQLAlch
{%- endif %} {%- endif %}
{%- endfor %} {%- 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" %} {%- 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 %} {%- endif %}
{% endfor %} {% endfor %}
{%- endif %}
\ No newline at end of file
...@@ -10,7 +10,13 @@ api_v1 = Blueprint('api_v1', __name__) ...@@ -10,7 +10,13 @@ api_v1 = Blueprint('api_v1', __name__)
api = Api(api_v1) 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 }}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 %}) 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 %} {% endfor %}
\ No newline at end of file
...@@ -5,9 +5,15 @@ from webcreator.event import PySignal ...@@ -5,9 +5,15 @@ from webcreator.event import PySignal
class SignalManager(object): class SignalManager(object):
{%- 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", []) %}
action{{ r.get("name") | capitalize }} = PySignal()
{%- endfor %}
{%- else %}
{%- for key, value in item['view'].items() %} {%- for key, value in item['view'].items() %}
action{{ key | letterUpper }}{{ item.get("name") | letterUpper }} = PySignal() action{{ key | capitalize }}{{ item.get("name") | capitalize }} = PySignal()
{%- endfor %} {%- endfor %}
{%- endif %}
{%- endfor %} {%- endfor %}
def __init__(self): def __init__(self):
......
...@@ -8,7 +8,13 @@ from .{{ api['name'] }} import {{ api["name"] }}Manager ...@@ -8,7 +8,13 @@ from .{{ api['name'] }} import {{ api["name"] }}Manager
def initConnect(): def initConnect():
{%- for api in config %} {%- 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() %} {%- 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 %} {%- endfor %}
{%- endif %}
{%- endfor %} {%- endfor %}
...@@ -7,13 +7,18 @@ from flask_restful.reqparse import RequestParser ...@@ -7,13 +7,18 @@ from flask_restful.reqparse import RequestParser
from flask_jwt_extended import ( jwt_required, get_jwt_identity ) from flask_jwt_extended import ( jwt_required, get_jwt_identity )
from application.signal_manager import signalManager from application.signal_manager import signalManager
{%- set pipe = joiner(",") %} {%- 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() -%} 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 %} {%- endfor %}
from webcreator.log import logger from webcreator.log import logger
from webcreator.response import ResponseCode, response_result 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): def __init__(self):
pass pass
# 特殊参数,即不是从json获取参数的接口,可以将这个注释打开 # 特殊参数,即不是从json获取参数的接口,可以将这个注释打开
...@@ -32,11 +37,11 @@ class {{ config['name'] | letterUpper }}ResourceList(Resource): ...@@ -32,11 +37,11 @@ class {{ config['name'] | letterUpper }}ResourceList(Resource):
try: try:
json_payload = request.json json_payload = request.json
logger.warn(json_payload) logger.warn(json_payload)
data = getList{{ config['name'] | letterUpper }}Schema.load(json_payload) data = getList{{ config['name'] | capitalize }}Schema.load(json_payload)
result, message = signalManager.actionGetList{{ config["name"] | letterUpper }}.emit(data) result, message = signalManager.actionGetList{{ config["name"] | capitalize }}.emit(data)
json_dumps = getList{{ config['name'] | letterUpper }}Schema.dump(result) json_dumps = getList{{ config['name'] | capitalize }}Schema.dump(result)
if 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) logger.warn(json_dumps)
return response_result(message, data=json_dumps, count=result.total) return response_result(message, data=json_dumps, count=result.total)
return response_result(message) return response_result(message)
...@@ -52,8 +57,8 @@ class {{ config['name'] | letterUpper }}ResourceList(Resource): ...@@ -52,8 +57,8 @@ class {{ config['name'] | letterUpper }}ResourceList(Resource):
def post(self): def post(self):
try: try:
json_payload = request.json json_payload = request.json
data = post{{ config['name'] | letterUpper }}Schema.load(json_payload) data = post{{ config['name'] | capitalize }}Schema.load(json_payload)
result, message = signalManager.actionPost{{ config["name"] | letterUpper }}.emit(data) result, message = signalManager.actionPost{{ config["name"] | capitalize }}.emit(data)
logger.info(result) logger.info(result)
logger.warn(message) logger.warn(message)
return response_result(message) return response_result(message)
...@@ -62,7 +67,7 @@ class {{ config['name'] | letterUpper }}ResourceList(Resource): ...@@ -62,7 +67,7 @@ class {{ config['name'] | letterUpper }}ResourceList(Resource):
return response_result(ResponseCode.HTTP_SERVER_ERROR) return response_result(ResponseCode.HTTP_SERVER_ERROR)
{% endif %} {% endif %}
class {{ config['name'] | letterUpper }}Resource(Resource): class {{ config['name'] | capitalize }}Resource(Resource):
def __init__(self): def __init__(self):
pass pass
# 特殊参数,即不是从json获取参数的接口,可以将这个注释打开 # 特殊参数,即不是从json获取参数的接口,可以将这个注释打开
...@@ -81,10 +86,10 @@ class {{ config['name'] | letterUpper }}Resource(Resource): ...@@ -81,10 +86,10 @@ class {{ config['name'] | letterUpper }}Resource(Resource):
try: try:
json_payload = request.json json_payload = request.json
print("========>", uuid, json_payload) print("========>", uuid, json_payload)
data = get{{ config['name'] | letterUpper }}Schema.load(json_payload) data = get{{ config['name'] | capitalize }}Schema.load(json_payload)
result, message = signalManager.actionGet{{ config["name"] | letterUpper }}.emit(uuid, data) result, message = signalManager.actionGet{{ config["name"] | capitalize }}.emit(uuid, data)
if result: 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, data=json_dumps)
return response_result(message) return response_result(message)
except Exception as e: except Exception as e:
...@@ -100,8 +105,8 @@ class {{ config['name'] | letterUpper }}Resource(Resource): ...@@ -100,8 +105,8 @@ class {{ config['name'] | letterUpper }}Resource(Resource):
try: try:
json_payload = request.json json_payload = request.json
print("========>", uuid, json_payload) print("========>", uuid, json_payload)
data = put{{ config['name'] | letterUpper }}Schema.load(json_payload) data = put{{ config['name'] | capitalize }}Schema.load(json_payload)
result, message = signalManager.actionPut{{ config["name"] | letterUpper }}.emit(uuid, data) result, message = signalManager.actionPut{{ config["name"] | capitalize }}.emit(uuid, data)
logger.info(result) logger.info(result)
logger.info(message) logger.info(message)
return response_result(message, data=result) return response_result(message, data=result)
...@@ -118,10 +123,31 @@ class {{ config['name'] | letterUpper }}Resource(Resource): ...@@ -118,10 +123,31 @@ class {{ config['name'] | letterUpper }}Resource(Resource):
try: try:
json_payload = request.json json_payload = request.json
print("========>", uuid, json_payload) print("========>", uuid, json_payload)
# data = delete{{ config['name'] | letterUpper }}Schema.load(json_payload) # data = delete{{ config['name'] | capitalize }}Schema.load(json_payload)
result, message = signalManager.actionDelete{{ config["name"] | letterUpper }}.emit(uuid) 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) return response_result(message, data=result)
except Exception as e: except Exception as e:
current_app.logger.error(e) current_app.logger.error(e)
return response_result(ResponseCode.HTTP_SERVER_ERROR) return response_result(ResponseCode.HTTP_SERVER_ERROR)
{% endfor %}
{% endif %} {% 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