Resource.py 3.4 KB

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