resource_model.py 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. from datetime import datetime
  2. from sqlalchemy import Column, Integer, String, DateTime, Table, ForeignKey
  3. from sqlalchemy.orm import relationship, backref
  4. from app.models.base_model import Base
  5. class ResourceModel(Base):
  6. __tablename__ = 'resource'
  7. id = Column(String(36), primary_key=True, index=True)
  8. created_at = Column(DateTime, default=datetime.now())
  9. updated_at = Column(DateTime, default=datetime.now(), onupdate=datetime.now())
  10. name = Column(String(128))
  11. url = Column(String(200))
  12. path = Column(String(200))
  13. perms = Column(String(150))
  14. description = Column(String(200))
  15. icon = Column(String(100))
  16. seq = Column(Integer)
  17. target = Column(String(100))
  18. canbdeeleted = Column(Integer)
  19. resource_type_id = Column(String(36), ForeignKey('resource_type.id'))
  20. resource_id = Column(String(36), ForeignKey('resource.id'))
  21. parent = relationship('ResourceModel', remote_side=[id], backref='resources', uselist=False)
  22. children = relationship('ResourceModel')
  23. status = Column(String(10))
  24. hidden = Column(Integer, default=0)
  25. def get_id(self):
  26. return str(self.ID)
  27. def to_json(self):
  28. return {
  29. 'menuId': self.id,
  30. 'createTime': self.created_at,
  31. 'updateTime': self.updated_at,
  32. 'menuName': self.name,
  33. 'component': self.url,
  34. 'description': self.description,
  35. 'icon': self.icon,
  36. 'orderNum': self.seq,
  37. 'target': self.target,
  38. 'parentId': self.get_pid(),
  39. 'parentName': self.get_pName(),
  40. 'syresourcetype': self.get_type_json(),
  41. 'status': self.status,
  42. 'path': self.path,
  43. 'perms': self.perms,
  44. # 类型(0目录 1菜单 2按钮)
  45. 'menuType': self.resource_type_id,
  46. }
  47. def to_tree_select_json(self):
  48. return {
  49. 'menuId': self.id,
  50. 'menuName': self.name,
  51. 'menuType': self.resource_type_id,
  52. 'children': [res.to_tree_select_json() for res in self.children]
  53. }
  54. def to_router_json(self):
  55. router = {
  56. 'name': self.path.capitalize() if self.path else '',
  57. 'path': self.path,
  58. 'hidden': bool(self.hidden),
  59. 'redirect': 'noRedirect',
  60. 'component': self.url,
  61. 'alwaysShow': True,
  62. 'meta': {
  63. 'title': self.name,
  64. 'icon': self.icon,
  65. 'noCache': False,
  66. 'link': ''
  67. },
  68. 'children': [
  69. res.to_router_json() for res in self.children if res.type.id == '3' or res.type.id == '0'
  70. ]
  71. }
  72. if not router['children']:
  73. del router['children']
  74. del router['redirect']
  75. del router['alwaysShow']
  76. if not router['component']:
  77. router['component'] = 'Layout'
  78. return router
  79. def to_menu_json(self):
  80. return {
  81. 'id': self.id,
  82. 'iconCls': self.icon,
  83. 'pid': self.get_pid(),
  84. 'state': 'open',
  85. 'checked': False,
  86. 'attributes': {
  87. 'target': self.target,
  88. 'url': self.url
  89. },
  90. 'text': self.name
  91. }
  92. def get_pid(self):
  93. if self.parent:
  94. return self.parent.id
  95. return ''
  96. def get_pName(self):
  97. if self.parent:
  98. return self.parent.name
  99. return ''
  100. def get_type_json(self):
  101. if self.type:
  102. return self.type.to_json()
  103. return {}
  104. def __repr__(self):
  105. return '<ResourceModel name:%r url:%r>\n' % (self.NAME, self.URL)
  106. class ResourceTypeModel(Base):
  107. __tablename__ = 'resource_type'
  108. id = Column(String(36), primary_key=True)
  109. created_at = Column(DateTime, default=datetime.now())
  110. updated_at = Column(DateTime, default=datetime.now(), onupdate=datetime.now())
  111. name = Column(String(128))
  112. description = Column(String(255))
  113. resources = relationship('ResourceModel', backref='type', lazy='dynamic')
  114. def to_json(self):
  115. return {
  116. 'id': self.id,
  117. 'createdatetime': self.created_at,
  118. 'updatedatetime': self.updated_at,
  119. 'name': self.name,
  120. 'description': self.description
  121. }
  122. def __repr__(self):
  123. return '<ResourceTypeModel %r>\n' %(self.name)