Resource.py 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  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_tree_select_json(self):
  50. return {
  51. 'id': self.ID,
  52. 'label': self.NAME,
  53. 'children': [res.to_tree_select_json() for res in self.children]
  54. }
  55. def to_router_json(self):
  56. router = {
  57. 'name': self.PATH.capitalize(),
  58. 'path': self.PATH,
  59. 'hidden': False,
  60. 'redirect': 'noRedirect',
  61. 'component': self.URL,
  62. 'alwaysShow': True,
  63. 'meta': {
  64. 'title': self.NAME,
  65. 'icon': self.ICONCLS,
  66. 'noCache': False,
  67. 'link':''
  68. },
  69. 'children': [
  70. res.to_router_json() for res in self.children if res.type.ID == '3' or res.type.ID == '0'
  71. ]
  72. }
  73. if not router['children']:
  74. del router['children']
  75. del router['redirect']
  76. del router['alwaysShow']
  77. if not router['component']:
  78. router['component'] = 'Layout'
  79. return router
  80. def to_menu_json(self):
  81. return {
  82. 'id': self.ID,
  83. 'iconCls': self.ICONCLS,
  84. 'pid': self.get_pid(),
  85. 'state': 'open',
  86. 'checked': False,
  87. 'attributes': {
  88. 'target': self.TARGET,
  89. 'url': self.URL
  90. },
  91. 'text': self.NAME
  92. }
  93. def get_pid(self):
  94. if self.parent:
  95. return self.parent.ID
  96. return ''
  97. def get_type_json(self):
  98. if self.type:
  99. return self.type.to_json()
  100. return {}
  101. def __repr__(self):
  102. return '<Resource name:%r url:%r>\n' %(self.NAME, self.URL)