浏览代码

结构管理功能适配

zisokal 3 年之前
父节点
当前提交
c53737cdc0
共有 7 个文件被更改,包括 69 次插入40 次删除
  1. 15 0
      app/__init__.py
  2. 18 6
      app/models/Organization.py
  3. 1 0
      app/models/Resource.py
  4. 1 2
      app/models/User.py
  5. 2 2
      app/routes/index.py
  6. 30 22
      app/routes/organization.py
  7. 2 8
      app/routes/user.py

+ 15 - 0
app/__init__.py

@@ -5,6 +5,19 @@ from config import config
 from flask_login import LoginManager
 import flask_excel as excel
 
+
+from flask.json import JSONEncoder
+from datetime import datetime, date
+
+class CustomJSONEncoder(JSONEncoder):
+    def default(self, obj):
+        if isinstance(obj, datetime):
+            return obj.strftime('%Y-%m-%d %H:%M:%S')
+        elif isinstance(obj, date):
+            return obj.strftime('%Y-%m-%d')
+        else:
+            return JSONEncoder.default(self, obj)
+
 loginmanager = LoginManager()
 loginmanager.session_protection = 'strong'
 loginmanager.login_view = 'base.login'
@@ -15,6 +28,8 @@ db = SQLAlchemy()
 
 def create_app(config_name):
     app = Flask(__name__)
+    #  替换默认的json编码器
+    app.json_encoder = CustomJSONEncoder
     app.config.from_object(config[config_name])
     config[config_name].init_app(app)
 

+ 18 - 6
app/models/Organization.py

@@ -17,6 +17,9 @@ class Organization(db.Model, UserMixin):
     CODE = db.Column(db.String(200))
     ICONCLS = db.Column(db.String(100))
     SEQ = db.Column(db.Integer)
+    LEADER = db.Column(db.String(20))
+    PHONE = db.Column(db.String(11))
+    EMAIL = db.Column(db.String(50))
 
     resources = db.relationship('Resource',
                                 secondary=organization_resource_table,
@@ -26,17 +29,26 @@ class Organization(db.Model, UserMixin):
 
     parent = db.relationship('Organization', remote_side=[ID], backref='organization', uselist=False)
 
+    children = db.relationship('Organization')
+
     def to_json(self):
         return {
-            'id': self.ID,
-            'createdatetime': self.CREATEDATETIME,
-            'updatedatetime': self.UPDATEDATETIME,
-            'name': self.NAME,
+            'deptId': self.ID,
+            'createTime': self.CREATEDATETIME,
+            'updateTime': self.UPDATEDATETIME,
+            'deptName': self.NAME,
             'address': self.ADDRESS,
             'code': self.CODE,
             'iconCls': self.ICONCLS,
-            'seq': self.SEQ,
-            'pid': self.get_pid(),
+            'orderNum': self.SEQ,
+            'parentId': self.get_pid(),
+            'leader': self.LEADER,
+            'phone': self.PHONE,
+            'email': self.EMAIL,
+            'status': '0',
+            'children': [
+                org.to_json() for org in self.children
+            ]
         }
 
     def get_pid(self):

+ 1 - 0
app/models/Resource.py

@@ -69,6 +69,7 @@ class Resource(db.Model, UserMixin):
             del router['children']
             del router['redirect']
             del router['alwaysShow']
+        if not router['component']:
             router['component'] = 'Layout'
 
         return router

+ 1 - 2
app/models/User.py

@@ -33,8 +33,7 @@ class User(db.Model, UserMixin):
 
     roles = db.relationship('Role',
                             secondary=user_role_table,
-                            backref=db.backref('users', lazy='dynamic'),
-                            lazy="dynamic")
+                            backref=db.backref('users', lazy='dynamic'),)
 
     def get_id(self):
         return str(self.ID)

+ 2 - 2
app/routes/index.py

@@ -35,7 +35,7 @@ def icons():
 def getRouters():
     resources = Resource.query.join(ResourceType, Resource.type).filter(Resource.SYRESOURCETYPE_ID == 3).all()
     
-    #return jsonify({'msg': '操作成功', 'code': 200, "data": [res.to_router_json() for res in resources]})    
+    return jsonify({'msg': '操作成功', 'code': 200, "data": [res.to_router_json() for res in resources]})    
 
 
-    return jsonify({'msg': '操作成功', 'code': 200, "data":[{"name":"System","path":"/system","hidden":False,"redirect":"noRedirect","component":"Layout","alwaysShow":True,"meta":{"title":"系统管理","icon":"system","noCache":False,"link":''},"children":[{"name":"User","path":"user","hidden":False,"component":"system/user/index","meta":{"title":"用户管理","icon":"user","noCache":False,"link":''}},{"name":"Role","path":"role","hidden":False,"component":"system/role/index","meta":{"title":"角色管理","icon":"peoples","noCache":False,"link":''}},{"name":"Menu","path":"menu","hidden":False,"component":"system/menu/index","meta":{"title":"菜单管理","icon":"tree-table","noCache":False,"link":''}},{"name":"Dept","path":"dept","hidden":False,"component":"system/dept/index","meta":{"title":"部门管理","icon":"tree","noCache":False,"link":''}},{"name":"Log","path":"log","hidden":False,"redirect":"noRedirect","component":"ParentView","alwaysShow":True,"meta":{"title":"日志管理","icon":"log","noCache":False,"link":''},"children":[{"name":"Operlog","path":"operlog","hidden":False,"component":"monitor/operlog/index","meta":{"title":"操作日志","icon":"form","noCache":False,"link":''}},{"name":"Logininfor","path":"logininfor","hidden":False,"component":"monitor/logininfor/index","meta":{"title":"登录日志","icon":"logininfor","noCache":False,"link":''}}]}]}]})
+    # return jsonify({'msg': '操作成功', 'code': 200, "data":[{"name":"System","path":"/system","hidden":False,"redirect":"noRedirect","component":"Layout","alwaysShow":True,"meta":{"title":"系统管理","icon":"system","noCache":False,"link":''},"children":[{"name":"User","path":"user","hidden":False,"component":"system/user/index","meta":{"title":"用户管理","icon":"user","noCache":False,"link":''}},{"name":"Role","path":"role","hidden":False,"component":"system/role/index","meta":{"title":"角色管理","icon":"peoples","noCache":False,"link":''}},{"name":"Menu","path":"menu","hidden":False,"component":"system/menu/index","meta":{"title":"菜单管理","icon":"tree-table","noCache":False,"link":''}},{"name":"Dept","path":"dept","hidden":False,"component":"system/dept/index","meta":{"title":"部门管理","icon":"tree","noCache":False,"link":''}},{"name":"Log","path":"log","hidden":False,"redirect":"noRedirect","component":"ParentView","alwaysShow":True,"meta":{"title":"日志管理","icon":"log","noCache":False,"link":''},"children":[{"name":"Operlog","path":"operlog","hidden":False,"component":"monitor/operlog/index","meta":{"title":"操作日志","icon":"form","noCache":False,"link":''}},{"name":"Logininfor","path":"logininfor","hidden":False,"component":"monitor/logininfor/index","meta":{"title":"登录日志","icon":"logininfor","noCache":False,"link":''}}]}]}]})

+ 30 - 22
app/routes/organization.py

@@ -4,7 +4,7 @@ from ..models import Role
 from ..models import User
 from ..models import Organization
 from flask import g, jsonify, request
-from flask_login import current_user
+from flask_login import current_user, login_required
 import json
 from .. import db
 from flask import render_template
@@ -40,11 +40,19 @@ def grant_organization_resource():
 
     return jsonify({'success': True})    
 
-@base.route('/base/syorganization!treeGrid.action', methods=['POST'])
+@base.route('/system/dept/list', methods=['GET'])
+@login_required
 def syorganization_treeGrid():
     orgs = Organization.query.all()
 
-    return jsonify([org.to_json() for org in orgs])
+    return jsonify({'msg': '操作成功', 'code': 200, "data": [org.to_json() for org in orgs]})
+
+@base.route('/system/dept/list/exclude/<id>', methods=['GET'])
+@login_required
+def syorganization_dept_list_exclude(id):
+    orgs = Organization.query.filter(Organization.ID != id)
+
+    return jsonify({'msg': '操作成功', 'code': 200, "data": [org.to_json() for org in orgs]})
 
 @base.route('/base/syorganization!doNotNeedSecurity_comboTree.action', methods=['POST'])
 def syorganization_comboTree():
@@ -63,41 +71,41 @@ def get_syorganization_by_userId():
     orgs = Organization.query.join(User, Organization.users).filter(User.ID == request.form.get('id')).all()
     return jsonify([org.to_json() for org in orgs])
 
-@base.route('/base/syorganization!getById.action', methods=['POST'])
-def syorganization_getById():
-    org = Organization.query.get(request.form.get('id'))
+@base.route('/system/dept/<string:id>', methods=['GET'])
+def syorganization_getById(id):
+    org = Organization.query.get(id)
 
     if org:
-        return jsonify(org.to_json())
+        return jsonify({'msg': '操作成功', 'code': 200, 'data': org.to_json()})
     else:
         return jsonify({'success': False, 'msg': 'error'})
 
-@base.route('/base/syorganization!update.action', methods=['POST'])
+@base.route('/system/dept', methods=['PUT'])
 def syorganization_update():
-    org = Organization.query.get(request.form.get('data.id'))
+    org = Organization.query.get(request.json['deptId'])
 
     org.UPDATEDATETIME = datetime.now()
-    org.NAME = request.form.get('data.name')
-    org.ADDRESS = request.form.get('data.address')
-    org.CODE = request.form.get('data.code')
-    org.ICONCLS = request.form.get('data.iconCls')
-    org.SEQ = request.form.get('data.seq')
-    org.parent = Organization.query.get(request.form.get('data.syorganization.id'))
+    org.NAME = request.json['deptName']
+    org.EMAIL = request.json['email']
+    org.LEADER = request.json['leader']
+    org.PHONE = request.json['phone']
+    org.SEQ = request.json['orderNum']
+    org.parent = Organization.query.get(request.json['parentId'])
 
     db.session.add(org)
 
     return jsonify({'success': True})
 
-@base.route('/base/syorganization!save.action', methods=['POST'])
+@base.route('/system/dept', methods=['POST'])
 def syorganization_save():
     org = Organization()
     org.ID = str(uuid.uuid4())
-    org.NAME = request.form.get('data.name')
-    org.ADDRESS = request.form.get('data.address')
-    org.CODE = request.form.get('data.code')
-    org.ICONCLS = request.form.get('data.iconCls')
-    org.SEQ = request.form.get('data.seq')
-    org.parent = Organization.query.get(request.form.get('data.syorganization.id'))
+    org.NAME = request.json['deptName']
+    org.EMAIL = request.json['email']
+    org.LEADER = request.json['leader']
+    org.PHONE = request.json['phone']
+    org.SEQ = request.json['orderNum']
+    org.parent = Organization.query.get(request.json['parentId'])
 
     # add organization to current user
     current_user.organizations.append(org)

+ 2 - 8
app/routes/user.py

@@ -217,17 +217,11 @@ def syuser_info():
             new_dict[obj.ID] = obj
 
     for resource in new_dict.values():
-        res = {}
-        if resource.parent:
-            res['pid'] = resource.parent.ID 
-        res['id'] = resource.ID
-        res['text'] = resource.NAME
-        res['iconCls'] = resource.ICONCLS
-        resourceTree.append(res)
+        resourceTree.append(resource.PERMS)
 
     return jsonify({'msg': '登录成功~', 'code': 200, \
         'user': {'userName': current_user.LOGINNAME, 'avatar': '', 'nickName': current_user.NAME, 'userId': current_user.ID}, \
-        'roles': [], 'permissions': resourceTree})
+        'roles': [role.NAME for role in current_user.roles], 'permissions': resourceTree})
 
 
 @base.route('/base/syuser!export.action', methods=['POST'])