Resource.py 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. from app import db
  2. from flask_login import UserMixin, AnonymousUserMixin
  3. from datetime import datetime
  4. from flask import jsonify
  5. class Resource(db.Model, UserMixin):
  6. __tablename__ = 'SYRESOURCE'
  7. __mapper_args__ = {
  8. #"order_by": 'SEQ'
  9. }
  10. ID = db.Column(db.String(36), primary_key=True)
  11. CREATEDATETIME = db.Column(db.DateTime, index=True, default=datetime.now)
  12. UPDATEDATETIME = db.Column(db.DateTime, index=True, default=datetime.now)
  13. NAME = db.Column(db.String(100))
  14. URL = db.Column(db.String(200))
  15. PATH = db.Column(db.String(200))
  16. PERMS = db.Column(db.String(150))
  17. DESCRIPTION = db.Column(db.String(200))
  18. ICONCLS = db.Column(db.String(100))
  19. SEQ = db.Column(db.Integer)
  20. TARGET = db.Column(db.String(100))
  21. SYRESOURCETYPE_ID = db.Column(db.String, db.ForeignKey('SYRESOURCETYPE.ID'))
  22. SYRESOURCE_ID = db.Column(db.String, db.ForeignKey('SYRESOURCE.ID'))
  23. parent = db.relationship('Resource', remote_side=[ID], backref='resource', uselist=False)
  24. children = db.relationship('Resource')
  25. STATUS = db.Column(db.String(10))
  26. HIDDEN = False
  27. def get_id(self):
  28. return str(self.ID)
  29. def to_json(self):
  30. return {
  31. 'menuId': self.ID,
  32. 'createTime': self.CREATEDATETIME,
  33. 'updateTime': self.UPDATEDATETIME,
  34. 'menuName': self.NAME,
  35. 'component': self.URL,
  36. 'description': self.DESCRIPTION,
  37. 'icon': self.ICONCLS,
  38. 'orderNum': self.SEQ,
  39. 'target': self.TARGET,
  40. 'parentId': self.get_pid(),
  41. 'syresourcetype': self.get_type_json(),
  42. 'status': self.STATUS,
  43. 'visible': '0',
  44. 'isFrame': '1',
  45. 'path': self.PATH,
  46. 'perms': self.PERMS,
  47. 'isCache': '1',
  48. # 类型(M目录 C菜单 F按钮)
  49. 'menuType': 'F' if self.SYRESOURCETYPE_ID == '1' else 'C' if self.SYRESOURCETYPE_ID == '0' else 'M'
  50. }
  51. def to_tree_select_json(self):
  52. return {
  53. 'id': self.ID,
  54. 'label': self.NAME,
  55. 'children': [res.to_tree_select_json() for res in self.children]
  56. }
  57. def to_router_json(self):
  58. router = {
  59. 'name': self.PATH.capitalize() if self.PATH else '',
  60. 'path': self.PATH,
  61. 'hidden': self.HIDDEN,
  62. 'redirect': 'noRedirect',
  63. 'component': self.URL,
  64. 'alwaysShow': True,
  65. 'meta': {
  66. 'title': self.NAME,
  67. 'icon': self.ICONCLS,
  68. 'noCache': False,
  69. 'link':''
  70. },
  71. 'children': [
  72. res.to_router_json() for res in self.children if res.type.ID == '3' or res.type.ID == '0'
  73. ]
  74. }
  75. if not router['children']:
  76. del router['children']
  77. del router['redirect']
  78. del router['alwaysShow']
  79. if not router['component']:
  80. router['component'] = 'Layout'
  81. return router
  82. def to_menu_json(self):
  83. return {
  84. 'id': self.ID,
  85. 'iconCls': self.ICONCLS,
  86. 'pid': self.get_pid(),
  87. 'state': 'open',
  88. 'checked': False,
  89. 'attributes': {
  90. 'target': self.TARGET,
  91. 'url': self.URL
  92. },
  93. 'text': self.NAME
  94. }
  95. def get_pid(self):
  96. if self.parent:
  97. return self.parent.ID
  98. return ''
  99. def get_type_json(self):
  100. if self.type:
  101. return self.type.to_json()
  102. return {}
  103. def __repr__(self):
  104. return '<Resource name:%r url:%r>\n' %(self.NAME, self.URL)