Resource.py 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  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. def get_id(self):
  26. return str(self.ID)
  27. def to_json(self):
  28. return {
  29. 'menuId': self.ID,
  30. 'createTime': self.CREATEDATETIME,
  31. 'updateTime': self.UPDATEDATETIME,
  32. 'menuName': self.NAME,
  33. 'component': self.URL,
  34. 'description': self.DESCRIPTION,
  35. 'icon': self.ICONCLS,
  36. 'orderNum': self.SEQ,
  37. 'target': self.TARGET,
  38. 'parentId': self.get_pid(),
  39. 'syresourcetype': self.get_type_json(),
  40. 'status': '0',
  41. 'visible': '0',
  42. 'isFrame': '1',
  43. 'path': self.PATH,
  44. 'perms': self.PERMS,
  45. 'isCache': '1',
  46. # 类型(M目录 C菜单 F按钮)
  47. 'menuType': 'F' if self.SYRESOURCETYPE_ID == '1' else 'C' if self.SYRESOURCETYPE_ID == '0' else 'M'
  48. }
  49. def to_router_json(self):
  50. router = {
  51. 'name': self.PATH.capitalize(),
  52. 'path': self.PATH,
  53. 'hidden': False,
  54. 'redirect': 'noRedirect',
  55. 'component': self.URL,
  56. 'alwaysShow': True,
  57. 'meta': {
  58. 'title': self.NAME,
  59. 'icon': self.ICONCLS,
  60. 'noCache': False,
  61. 'link':''
  62. },
  63. 'children': [
  64. res.to_router_json() for res in self.children if res.type.ID == '3' or res.type.ID == '0'
  65. ]
  66. }
  67. if not router['children']:
  68. del router['children']
  69. del router['redirect']
  70. del router['alwaysShow']
  71. if not router['component']:
  72. router['component'] = 'Layout'
  73. return router
  74. def to_menu_json(self):
  75. return {
  76. 'id': self.ID,
  77. 'iconCls': self.ICONCLS,
  78. 'pid': self.get_pid(),
  79. 'state': 'open',
  80. 'checked': False,
  81. 'attributes': {
  82. 'target': self.TARGET,
  83. 'url': self.URL
  84. },
  85. 'text': self.NAME
  86. }
  87. def get_pid(self):
  88. if self.parent:
  89. return self.parent.ID
  90. return ''
  91. def get_type_json(self):
  92. if self.type:
  93. return self.type.to_json()
  94. return {}
  95. def __repr__(self):
  96. return '<Resource name:%r url:%r>\n' %(self.NAME, self.URL)