Commit ca07dd6a authored by wanli's avatar wanli

feat: 更新菜单模块

parent 1f538659
...@@ -7,7 +7,6 @@ from flask_jwt_extended import ( JWTManager ) ...@@ -7,7 +7,6 @@ from flask_jwt_extended import ( JWTManager )
from flask_sqlalchemy import SQLAlchemy from flask_sqlalchemy import SQLAlchemy
from flask_marshmallow import Marshmallow from flask_marshmallow import Marshmallow
from hashids import Hashids from hashids import Hashids
from webcreator.response import ResponseCode, response_result
from webcreator.log import logger from webcreator.log import logger
from .config import config from .config import config
...@@ -39,7 +38,8 @@ def expired_token_callback(jwt_header, jwt_payload): ...@@ -39,7 +38,8 @@ def expired_token_callback(jwt_header, jwt_payload):
# 无效令牌 # 无效令牌
@jwt.invalid_token_loader @jwt.invalid_token_loader
def invalid_token_callback(error): # we have to keep the argument here, since it's passed in by the caller internally def invalid_token_callback(error, **kwargs): # we have to keep the argument here, since it's passed in by the caller internally
print("///////////////////////////////////", kwargs)
return jsonify({ return jsonify({
'code': 401, 'code': 401,
'msg': 'invalid token', 'msg': 'invalid token',
......
...@@ -64,7 +64,7 @@ class MenuResource(object): ...@@ -64,7 +64,7 @@ class MenuResource(object):
return False, ResponseCode.HTTP_NOT_FOUND return False, ResponseCode.HTTP_NOT_FOUND
def create(self, params={}, jwt={}): def create(self, params={}, jwt={}):
user = db.session.query(UserModel).filter(UserModel.uuid==jwt.get("uuid")).one_or_none() user = db.session.query(UserModel, UserModel.id).filter(UserModel.uuid==jwt.get("uuid")).one_or_none()
if not user: if not user:
return False, ResponseCode.USER_NOT_EXISTS return False, ResponseCode.USER_NOT_EXISTS
# 接口字段可能和数据库字段不一致 # 接口字段可能和数据库字段不一致
...@@ -72,9 +72,9 @@ class MenuResource(object): ...@@ -72,9 +72,9 @@ class MenuResource(object):
data = dict(is_delete=False, sort=0, remarks="") data = dict(is_delete=False, sort=0, remarks="")
data.update({ data.update({
'create_by': user.id, 'create_by': user.id,
'create_at': datetime.niw(), 'create_at': datetime.now(),
'update_by': user.id, 'update_by': user.id,
'update_at': datetime.now() 'update_at': datetime.now(),
}) })
for k in params.keys(): for k in params.keys():
if k in extends: if k in extends:
...@@ -84,15 +84,16 @@ class MenuResource(object): ...@@ -84,15 +84,16 @@ class MenuResource(object):
data[k] = params[k] data[k] = params[k]
if data.get("sort") == 0: if data.get("sort") == 0:
data.sort = db.session.query(MenuModel).filter().count() + 1 data["sort"] = db.session.query(MenuModel).filter().count() + 1
# 默认设置sort等于表内记录个数 # 默认设置sort等于表内记录个数
logger.info(data.sort)
result = MenuModel(**data) result = MenuModel(**data)
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 treeList(self, params={}, jwt={}): def treeList(self, params={}, jwt={}):
self.print_tree("home")
filters = [MenuModel.is_delete==False] filters = [MenuModel.is_delete==False]
result = db.session.query(MenuModel).filter(*filters).order_by(MenuModel.sort).order_by(MenuModel.update_at.desc()).all() result = db.session.query(MenuModel).filter(*filters).order_by(MenuModel.sort).order_by(MenuModel.update_at.desc()).all()
data = [] data = []
......
...@@ -19,24 +19,29 @@ class MenuModel(PrimaryModel, BaseNestedSets): ...@@ -19,24 +19,29 @@ class MenuModel(PrimaryModel, BaseNestedSets):
__tablename__ = 'evm_menu' __tablename__ = 'evm_menu'
id = db.Column(db.Integer, primary_key=True) id = db.Column(db.Integer, primary_key=True)
visible = db.Column(db.Boolean) # disabled = db.Column(db.Boolean, default = False)
icon = db.Column(db.String(100), nullable = True, default = '')
name = db.Column(db.String(100), nullable = True) name = db.Column(db.String(100), nullable = True)
# tree_id = db.Column(db.Integer, default=0, nullable = True)
# parent_id = db.Column(db.Integer, db.ForeignKey("evm_menu.id"), default=0, nullable = True) # 这句话会由mptt自动插入进去 # parent_id = db.Column(db.Integer, db.ForeignKey("evm_menu.id"), default=0, nullable = True) # 这句话会由mptt自动插入进去
path = db.Column(db.String(100), nullable = True) path = db.Column(db.String(100), nullable = True)
disabled = db.Column(db.Boolean, nullable = True, default = False) # lft = db.Column(db.String(100), nullable = True)
fixed = db.Column(db.Boolean, nullable = False, default = False) # rgt = db.Column(db.String(100), nullable = True)
has_children = db.Column(db.Boolean, nullable = True, default = False) # visible = db.Column(db.Boolean, default = True)
icon = db.Column(db.String(100), nullable = True, default = '') # level = db.Column(db.Integer, primary_key=True)
# disabled = db.Column(db.Boolean, nullable = True, default = False)
# fixed = db.Column(db.Boolean, nullable = False, default = False)
# has_children = db.Column(db.Boolean, nullable = True, default = False)
# create_at = db.Column(db.DateTime, default=datetime.now) # 下面这些被注释的字段,都已经从PrimaryModel继承过来了,无需重写 # create_at = db.Column(db.DateTime, default=datetime.now) # 下面这些被注释的字段,都已经从PrimaryModel继承过来了,无需重写
# create_by = db.Column(db.String(64)) # 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)) # update_by = db.Column(db.String(64))
# remarks = db.Column(db.String(255), default="") # remarks = db.Column(db.String(255), default="")
# sort = db.Column(db.Integer, default=0) # sort = db.Column(db.Integer, default=0)
# is_delete = db.Column(db.BOOLEAN, default=0) # is_delete = db.Column(db.Boolean, default=0)
# parent = db.Column(db.Integer, db.ForeignKey('evm_menu.id'), index=True) # parent = db.Column(db.Integer, db.ForeignKey('evm_menu.id'), index=True)
# 这句话的含义请百度sqlalchemy表自关联,https://www.jianshu.com/p/fa611ab55dd2 # 这句话的含义请百度sqlalchemy表自关联,https://www.jianshu.com/p/fa611ab55dd2
parent = db.relationship("MenuModel", remote_side=[id], backref="ppp") parent = db.relationship("MenuModel", remote_side=[id], backref="children")
# sqlalchemy_mptt 调优 # sqlalchemy_mptt 调优
# sqlalchemy_mptt 在混入ORM对象时,只对rgt, lft, level 设置了索引,导致每次 CRUD操作都需要从头到尾查找。 # sqlalchemy_mptt 在混入ORM对象时,只对rgt, lft, level 设置了索引,导致每次 CRUD操作都需要从头到尾查找。
...@@ -50,7 +55,7 @@ class MenuModel(PrimaryModel, BaseNestedSets): ...@@ -50,7 +55,7 @@ class MenuModel(PrimaryModel, BaseNestedSets):
db.Index('parent_idx', 'parent_id'), db.Index('parent_idx', 'parent_id'),
) )
def __init__(self, name=None, parentId=None, path="", disabled=False, fixed=False, hasChildren=False, icon='', is_delete=False, sort=0, remarks=""): def __init__(self, name=None, parentId=None, path="", disabled=False, fixed=False, hasChildren=False, icon='', is_delete=False, sort=0, create_by=None, create_at=None, update_by=None, update_at=None, remarks=""):
self.name = name self.name = name
self.parent_id = parentId self.parent_id = parentId
self.path = path self.path = path
...@@ -60,6 +65,10 @@ class MenuModel(PrimaryModel, BaseNestedSets): ...@@ -60,6 +65,10 @@ class MenuModel(PrimaryModel, BaseNestedSets):
self.icon = icon self.icon = icon
self.is_delete = is_delete self.is_delete = is_delete
self.sort = sort self.sort = sort
self.create_by = create_by
self.create_at = create_at
self.update_by = update_by
self.update_at = update_at
self.remarks = remarks self.remarks = remarks
def __repr__(self): def __repr__(self):
......
...@@ -184,14 +184,25 @@ class MenuList(Resource): ...@@ -184,14 +184,25 @@ class MenuList(Resource):
] ]
} }
] ]
return response_result(ResponseCode.HTTP_SUCCESS, data=result)
signalManager.actionTreelist.emit()
return response_result(ResponseCode.HTTP_SUCCESS, data=result)
@jwt_required(locations=["headers"])
def post(self): def post(self):
self.parser.add_argument("icon", type=str, location="json", required=True)
self.parser.add_argument("path", type=str, location="json", required=True)
self.parser.add_argument("name", type=str, location="json", required=True)
args = self.parser.parse_args()
try: try:
json_payload = request.json json_payload = request.json
print("--------------------->>>>", args)
logger.warn(json_payload) logger.warn(json_payload)
return response_result(ResponseCode.HTTP_INVAILD_REQUEST) result = signalManager.actionMenuCreate.emit(json_payload, jwt=get_jwt_identity())
print("=====================>>>>", result)
return response_result(ResponseCode.HTTP_SUCCESS)
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)
......
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