ソースを参照

Merge branch 'dev' of http://192.168.136.99:3000/servers/ASJServer into dev

lang 4 年 前
コミット
c67d1da51d

+ 64 - 36
AdminController/MenuController.py

@@ -54,12 +54,14 @@ class MenuView(View):
                 return self.getList(userID, request_dict, response)
                 return self.getList(userID, request_dict, response)
             if operation == 'doEdit':
             if operation == 'doEdit':
                 return self.doEdit(userID, request_dict, response)
                 return self.doEdit(userID, request_dict, response)
+            if operation == 'doDelete':
+                return self.doDelete(userID, request_dict, response)
             else:
             else:
                 return response.json(404)
                 return response.json(404)
 
 
     def getList(self, userID, request_dict, response):
     def getList(self, userID, request_dict, response):
         role_qs = Role.objects.filter(device_user=userID)
         role_qs = Role.objects.filter(device_user=userID)
-        menu_qs = MenuModel.objects.filter(parentId=0, role__in=role_qs);
+        menu_qs = MenuModel.objects.filter(parentId=0)
         list = []
         list = []
         i = 0
         i = 0
         for menu in menu_qs:
         for menu in menu_qs:
@@ -70,6 +72,8 @@ class MenuView(View):
                     'path': menu.path,
                     'path': menu.path,
                     'name': menu.name,
                     'name': menu.name,
                     'component': menu.component,
                     'component': menu.component,
+                    'menutype': menu.menutype,
+                    'menu_code': menu.menu_code,
                     'meta': {
                     'meta': {
                         'hidden': menu.hidden,
                         'hidden': menu.hidden,
                         'levelHidden': menu.levelHidden,
                         'levelHidden': menu.levelHidden,
@@ -87,50 +91,74 @@ class MenuView(View):
                     }
                     }
                 }
                 }
             )
             )
-        menu_qs = MenuModel.objects.filter(role__in=role_qs)
-        menulist = self.menulist(menu_qs, list)
+        menu_qs = MenuModel.objects.filter()
+        menulist = []
+        for objlist in list:
+            menulist.append(self.menulist(menu_qs, objlist))
 
 
         return response.json(0, {'list': menulist})
         return response.json(0, {'list': menulist})
 
 
-    def menulist(self,menu_qs,list):
-        for menulist in list:
-            for menu in menu_qs:
-                if menulist['id'] == menu.parentId:
-                    if 'children' not in menulist:
-                        menulist['children'] = []
-                    menulist['children'].append(
-                        {
-                        'id': menu.id,
-                        'parentId': menu.parentId,
-                        'path': menu.path,
-                        'name': menu.name,
-                        'component': menu.component,
-                        'meta': {
-                                'hidden': menu.hidden,
-                                'levelHidden': menu.levelHidden,
-                                'title': menu.title,
-                                'icon': menu.icon,
-                                'isCustomSvg': menu.isCustomSvg,
-                                'noKeepAlive': menu.noKeepAlive,
-                                'noClosable': menu.noClosable,
-                                'badge': menu.badge,
-                                'tabHidden': menu.tabHidden,
-                                'activeMenu': menu.activeMenu,
-                                'dot': menu.dot,
-                                'dynamicNewTab': menu.dynamicNewTab,
-                                'sort': menu.sort
-                            }
-                        }
-                    )
-                    self.menulist(menu_qs,menulist['children'])
+    def menulist(self, menu_qs, objlist):
+        if objlist is None:
+            return
+        for menu in menu_qs:
+            if objlist['id'] == menu.parentId:
+                if 'children' not in objlist:
+                    objlist['children'] = []
+
+                obj = {
+                    'id': menu.id,
+                    'parentId': menu.parentId,
+                    'path': menu.path,
+                    'name': menu.name,
+                    'component': menu.component,
+                    'menutype': menu.menutype,
+                    'menu_code': menu.menu_code,
+                    'meta': {
+                        'hidden': menu.hidden,
+                        'levelHidden': menu.levelHidden,
+                        'title': menu.title,
+                        'icon': menu.icon,
+                        'isCustomSvg': menu.isCustomSvg,
+                        'noKeepAlive': menu.noKeepAlive,
+                        'noClosable': menu.noClosable,
+                        'badge': menu.badge,
+                        'tabHidden': menu.tabHidden,
+                        'activeMenu': menu.activeMenu,
+                        'dot': menu.dot,
+                        'dynamicNewTab': menu.dynamicNewTab,
+                        'sort': menu.sort
+                    }
+                }
+                objlist['children'].append(
+                    obj
+                )
+                self.menulist(menu_qs, obj)
 
 
-        return list
+        return objlist
 
 
     def doEdit(self, userID, request_dict, response):
     def doEdit(self, userID, request_dict, response):
         print('request_dict: ', request_dict)
         print('request_dict: ', request_dict)
         data_dict = CommonService.request_dict_to_dict(request_dict)
         data_dict = CommonService.request_dict_to_dict(request_dict)
+
         if data_dict['isEdit']:
         if data_dict['isEdit']:
-            MenuModel.objects.filter(name=data_dict['name']).update(**data_dict)
+            # data_dict.index(76)
+            data_dict.pop('isEdit')
+            keys = ['parentId', 'name', 'path', 'component', 'hidden', 'alwaysShow', 'levelHidden', 'title', 'icon',
+                    'isCustomSvg', 'noKeepAlive', 'badge', 'tabHidden', 'activeMenu', 'dot', 'dynamicNewTab',
+                    'redirect', 'menu_code', 'menutype', 'sort']
+            data = {}
+            for key in keys:
+                if key in data_dict:
+                    data[key] = data_dict[key]
+
+            MenuModel.objects.filter(id=data_dict['id']).update(**data)
         else:
         else:
+            data_dict.pop('isEdit')
             MenuModel.objects.create(**data_dict)
             MenuModel.objects.create(**data_dict)
+        return response.json(0)
+
+    def doDelete(self, userID, request_dict, response):
+        id = request_dict.get('id', '')
+        MenuModel.objects.filter(id=id).delete()
         return response.json(0)
         return response.json(0)

+ 71 - 4
AdminController/RoleController.py

@@ -19,12 +19,12 @@ import logging
 from boto3.session import Session
 from boto3.session import Session
 from django.http import JsonResponse, HttpResponseRedirect, HttpResponse
 from django.http import JsonResponse, HttpResponseRedirect, HttpResponse
 from django.views.generic.base import View
 from django.views.generic.base import View
-from Model.models import Device_Info, Role
+from Model.models import Device_Info, Role, MenuModel
 from Object.ResponseObject import ResponseObject
 from Object.ResponseObject import ResponseObject
 from Object.TokenObject import TokenObject
 from Object.TokenObject import TokenObject
 from Object.UidTokenObject import UidTokenObject
 from Object.UidTokenObject import UidTokenObject
 from Service.CommonService import CommonService
 from Service.CommonService import CommonService
-from django.db.models import Q, F
+from django.db.models import Q, F, Max
 from time import strftime
 from time import strftime
 
 
 
 
@@ -52,9 +52,76 @@ class RoleView(View):
             userID = tko.userID
             userID = tko.userID
             if operation == 'getList':
             if operation == 'getList':
                 return self.getList(userID, request_dict, response)
                 return self.getList(userID, request_dict, response)
+            elif operation == 'doEdit':
+                return self.doEdit(userID, request_dict, response)
+            elif operation == 'doDelete':
+                return self.doDelete(userID, request_dict, response)
+            elif operation == 'getPerms':
+                return self.getPerms(userID, request_dict, response)
+            elif operation == 'setPerms':
+                return self.setPerms(userID, request_dict, response)
             else:
             else:
                 return response.json(404)
                 return response.json(404)
 
 
     def getList(self, userID, request_dict, response):
     def getList(self, userID, request_dict, response):
-        role_qs =Role.objects.all().values('rid','roleName','Description');
-        return response.json(0, {'list': CommonService.qs_to_list(role_qs)})
+        isSelect = request_dict.get('isSelect', None)   # 获取全部数据作为角色选项
+        if isSelect:
+            role_qs = Role.objects.all().values('rid', 'roleName', 'Description')
+            return response.json(0, {'list': CommonService.qs_to_list(role_qs)})
+
+        roleName = request_dict.get('roleName', '').strip()  # 移除字符串头尾的空格
+        pageNo = request_dict.get('pageNo', None)
+        pageSize = request_dict.get('pageSize', None)
+        if not all([pageNo, pageSize]):
+            return response.json(444)
+
+        page = int(pageNo)
+        line = int(pageSize)
+        if roleName:
+            role_qs = Role.objects.filter(roleName=roleName).values('rid', 'roleName', 'Description')
+        else:
+            role_qs = Role.objects.all().values('rid', 'roleName', 'Description')
+
+        count = role_qs.count()
+        role_qs = role_qs.order_by('rid')[(page - 1) * line:page * line]
+
+
+        return response.json(0, {'list': CommonService.qs_to_list(role_qs), 'total': count})
+
+    def doEdit(self, userID, request_dict, response):
+
+        data_dict = request_dict.dict()
+        # data_dict = json.loads(data_str)
+        if 'rid' in data_dict:
+            Role.objects.filter(rid=data_dict['rid']).update(**data_dict)
+        else:
+            id = Role.objects.all().aggregate(Max('rid'))['rid__max'] + 1
+            data_dict['rid'] = id
+            Role.objects.create(**data_dict)
+        return response.json(0)
+
+    def doDelete(self, userID, request_dict, response):
+        rid = request_dict.get('rid', '')
+        if not all([rid]):
+            return response.json(444)
+        Role.objects.filter(rid=rid).delete()
+        return response.json(0)
+
+    def getPerms(self, userID, request_dict, response):
+        rid = request_dict.get('rid', '')
+
+        if rid:
+            role_qs = Role.objects.filter(rid=rid).values('menu__id')
+            return response.json(0, CommonService.qs_to_list(role_qs))
+
+        return response.json(0)
+
+    def setPerms(self, userID, request_dict, response):
+        rid = request_dict.get('rid', '')
+        permsIds = request_dict.get('permsIds', '')
+        if not all([rid]):
+            return response.json(444)
+        Role.objects.get(rid=rid).menu.clear()
+        menu_obj = MenuModel.objects.filter(id__in=permsIds.split(','))
+        Role.objects.filter(rid=rid)[0].menu.add(*menu_obj)
+        return response.json(0)

+ 159 - 4
AdminController/UserLoginController.py → AdminController/UserManageController.py

@@ -132,6 +132,8 @@ class LoginView(TemplateView):
             return response.json(tko.code)
             return response.json(tko.code)
 
 
 
 
+
+
 # 获取登录权限
 # 获取登录权限
 class GetPermissions(TemplateView):
 class GetPermissions(TemplateView):
     @method_decorator(csrf_exempt)  # @csrf_exempt
     @method_decorator(csrf_exempt)  # @csrf_exempt
@@ -168,6 +170,11 @@ class GetPermissions(TemplateView):
                 userIconPath = userIconPath.replace('static/', '').replace('\\', '/')
                 userIconPath = userIconPath.replace('static/', '').replace('\\', '/')
                 userIconUrl = SERVER_DOMAIN + 'account/getAvatar/' + userIconPath
                 userIconUrl = SERVER_DOMAIN + 'account/getAvatar/' + userIconPath
 
 
+        role_qs = Role.objects.filter(device_user=userID)
+        menu_qs = MenuModel.objects.filter(role__in=role_qs,menutype=2);
+        perms = []
+        for menu in menu_qs:
+            perms.append(menu.menu_code)
         res={
         res={
           "code": 200,
           "code": 200,
           "msg": "success",
           "msg": "success",
@@ -175,7 +182,8 @@ class GetPermissions(TemplateView):
             "roles": ["admin"], # 一个用户可包含多个角色如["admin","editor","XXXX"],必须返回,如小项目用不到角色权限请返回 ["admin"]
             "roles": ["admin"], # 一个用户可包含多个角色如["admin","editor","XXXX"],必须返回,如小项目用不到角色权限请返回 ["admin"]
             "ability": ["READ", "WRITE", "DELETE"], # 如果用不到rabc精细化权限可以不返回,建议返回
             "ability": ["READ", "WRITE", "DELETE"], # 如果用不到rabc精细化权限可以不返回,建议返回
             "username": username, # 用户名,必须返回
             "username": username, # 用户名,必须返回
-            "avatar": userIconUrl# 头像,必须返回
+            "avatar": userIconUrl,# 头像,必须返回
+            "perms": perms
           }
           }
         }
         }
         return response.json(0, res)
         return response.json(0, res)
@@ -204,7 +212,7 @@ class GetList(TemplateView):
         userID = tko.userID
         userID = tko.userID
 
 
         role_qs =Role.objects.filter(device_user=userID)
         role_qs =Role.objects.filter(device_user=userID)
-        menu_qs = MenuModel.objects.filter(parentId=0,role__in=role_qs);
+        menu_qs = MenuModel.objects.filter(parentId=0,role__in=role_qs,menutype=1);
         list = []
         list = []
         i = 0
         i = 0
         for menu in menu_qs:
         for menu in menu_qs:
@@ -232,7 +240,7 @@ class GetList(TemplateView):
                     }
                     }
                 }
                 }
             )
             )
-        menu_qs = MenuModel.objects.filter(role__in=role_qs)
+        menu_qs = MenuModel.objects.filter(role__in=role_qs,menutype=1)
         menulist = self.menulist(menu_qs, list)
         menulist = self.menulist(menu_qs, list)
 
 
         return response.json(0, {'list':menulist})
         return response.json(0, {'list':menulist})
@@ -269,4 +277,151 @@ class GetList(TemplateView):
                     )
                     )
                     self.menulist(menu_qs,menulist['children'])
                     self.menulist(menu_qs,menulist['children'])
 
 
-        return list
+        return list
+
+
+
+class UserManagement(View):
+    def get(self, request, *args, **kwargs):
+        request.encoding = 'utf-8'
+        operation = kwargs.get('operation')
+        return self.validation(request.GET, request, operation)
+
+    def post(self, request, *args, **kwargs):
+        request.encoding = 'utf-8'
+        operation = kwargs.get('operation')
+        return self.validation(request.POST, request, operation)
+
+    def validation(self, request_dict, request, operation):
+        language = request_dict.get('language', 'en')
+        response = ResponseObject(language, 'pc')
+        if operation == '??':
+            return 0
+        else:
+            tko = TokenObject(request.META.get('HTTP_AUTHORIZATION'), returntpye='pc')
+            if tko.code != 0:
+                return response.json(tko.code)
+            response.lang = tko.lang
+            userID = tko.userID
+            if operation == 'getUserInfo':
+                return self.getUserInfo(userID, request_dict, response)
+            elif operation == 'AddOrEditAccount':
+                return self.AddOrEditAccount(userID, request_dict, response)
+            elif operation == 'doDelete':
+                return self.doDelete(userID, request_dict, response)
+            else:
+                return response.json(404)
+
+    def getUserInfo(self, userID, request_dict, response):
+        print('request_dict: ', request_dict)
+        username = request_dict.get('username', '').strip()   # 移除字符串头尾的空格
+        pageNo = request_dict.get('pageNo', None)
+        pageSize = request_dict.get('pageSize', None)
+
+        if not all([pageNo, pageSize]):
+            return response.json(444)
+
+        page = int(pageNo)
+        line = int(pageSize)
+        try:
+            if username:    # 查询
+                # 校验查询输入数据是否匹配用户名,手机或邮箱正则
+                dataValid = DataValid()
+                if not (dataValid.name_validate(username) or dataValid.mobile_validate(username) \
+                        or dataValid.email_validate(username)):
+                    return response.json(444)
+                device_user_qs = Device_User.objects.filter(username=username)
+                if not device_user_qs.exists():
+                    device_user_qs = Device_User.objects.filter(phone=username)
+                    if not device_user_qs.exists():
+                        device_user_qs = Device_User.objects.filter(userEmail=username)
+                        if not device_user_qs.exists():
+                            return response.json(104)
+
+            else:
+                device_user_qs = Device_User.objects.filter().all()  # 查询全部
+            count = device_user_qs.count()
+            device_users = device_user_qs[(page - 1) * line:page * line]
+            user_list = []
+            for device_user in device_users:
+                role = device_user.role.first()
+                rid = role.rid if role else 1   # 不存在角色默认分配为'Users'
+                user_list.append({
+                    'userID': device_user.userID,
+                    'username': device_user.username,
+                    'NickName': device_user.NickName,
+                    'role': Role.objects.get(rid=rid).roleName,
+                    'phone': device_user.phone,
+                    'userEmail': device_user.userEmail,
+                    'data_joined': device_user.data_joined.strftime("%Y-%m-%d %H:%M:%S"),
+                    'last_login': device_user.last_login.strftime("%Y-%m-%d %H:%M:%S"),
+                    'online': device_user.online,
+                })
+            print('user_list: ', user_list)
+            return response.json(0, {'list': user_list, 'total': count})
+        except Exception as e:
+            print(e)
+            return response.json(500, repr(e))
+
+    def AddOrEditAccount(self, userID, request_dict, response):
+        # 添加/编辑用户
+        print('request_dict: ', request_dict)
+        username = request_dict.get('username', '').strip()   # 移除字符串头尾的空格
+        userEmail = request_dict.get('userEmail', '').strip()
+        roleName = request_dict.get('role', None)
+        password = request_dict.get('password', None)
+        isEdit = request_dict.get('isEdit', None)
+
+        if not all([username, userEmail, roleName, password]):
+            return response.json(444)
+
+        # 校验用户名,邮箱,密码是否符合规则
+        dataValid = DataValid()
+        if not dataValid.name_validate(username) or not dataValid.email_validate(userEmail) \
+                or not dataValid.password_validate(password):
+            return response.json(444)
+
+        try:
+            if isEdit:  # 编辑用户信息
+                userID = request_dict.get('userID')
+                user_data = {
+                    "username": username,
+                    "NickName": username,
+                    "userEmail": userEmail,
+                    "password": make_password(password),
+                }
+                device_user_qs = Device_User.objects.filter(userID=userID)
+                device_user_qs.update(**user_data)
+
+                # 如果角色改变,修改用户角色
+                device_user_role = device_user_qs[0].role
+                user_role = device_user_role.first()
+                if not user_role or roleName != user_role.roleName:
+                    device_user_role.clear()
+                    role_qs = Role.objects.filter(roleName=roleName)  # 账号角色
+                    device_user_qs[0].role.set(role_qs)
+            else:   # 添加用户
+                # 查询邮箱是否已注册
+                if Device_User.objects.filter(userEmail=userEmail).exists():
+                    return response.json(103)
+                role_qs = Role.objects.filter(roleName=roleName)    # 账号角色
+                # 创建用户
+                user_data = {
+                    "username": username,
+                    "NickName": username,
+                    "userEmail": userEmail,
+                    "password": make_password(password),
+                    "userID": CommonService.getUserID(μs=False, setOTAID=True),
+                    "is_active": True,
+                    "user_isValid": True,
+                }
+                Device_User.objects.create(**user_data).role.set(role_qs)
+            return response.json(0)
+        except Exception as e:
+            print(e)
+            return response.json(500, repr(e))
+
+    def doDelete(self, userID, request_dict, response):
+        userID = request_dict.get('userID', '')
+        Device_User.objects.filter(userID=userID).delete()
+        return response.json(0)

+ 5 - 4
Ansjer/urls.py

@@ -19,7 +19,7 @@ from Controller import FeedBack, EquipmentOTA, EquipmentInfo, AdminManage, AppIn
     OrderTaskController, HistoryUIDController, UIDManageUserController, SerialNumberController, CompanyController, \
     OrderTaskController, HistoryUIDController, UIDManageUserController, SerialNumberController, CompanyController, \
     RegionController, VPGController, LanguageController, TestController, DeviceConfirmRegion, S3GetStsController, \
     RegionController, VPGController, LanguageController, TestController, DeviceConfirmRegion, S3GetStsController, \
     DetectControllerV2, ShadowController, TestDetectController, PcInfo, PctestController, DeviceDebug
     DetectControllerV2, ShadowController, TestDetectController, PcInfo, PctestController, DeviceDebug
-from AdminController import UserLoginController, RoleController, MenuController
+from AdminController import UserManageController, RoleController, MenuController
 
 
 urlpatterns = [
 urlpatterns = [
     url(r'^testApi/(?P<operation>.*)$', TestApi.testView.as_view()),
     url(r'^testApi/(?P<operation>.*)$', TestApi.testView.as_view()),
@@ -336,9 +336,10 @@ urlpatterns = [
 
 
     #后台界面接口 -----------------------------------------------------
     #后台界面接口 -----------------------------------------------------
     #用户登录信息等
     #用户登录信息等
-    url(r'^login$', UserLoginController.LoginView.as_view()),
-    url(r'^userInfo$', UserLoginController.GetPermissions.as_view()),
-    url(r'^router/getList$', UserLoginController.GetList.as_view()),
+    url(r'^login$', UserManageController.LoginView.as_view()),
+    url(r'^userInfo$', UserManageController.GetPermissions.as_view()),
+    url(r'^router/getList$', UserManageController.GetList.as_view()),
+    re_path('userManagement/(?P<operation>.*)', UserManageController.UserManagement.as_view()),
 
 
     #角色管理
     #角色管理
     re_path('roleManagement/(?P<operation>.*)', RoleController.RoleView.as_view()),
     re_path('roleManagement/(?P<operation>.*)', RoleController.RoleView.as_view()),

+ 5 - 5
Controller/VPGController.py

@@ -182,7 +182,7 @@ class VPGView(View):
 
 
         start = (page - 1) * line
         start = (page - 1) * line
         end = start + line
         end = start + line
-        uid_qs = UIDModel.objects.filter(vpg_id=vpg_id).values('uid', 'platform', 'init_string', 'init_string_app')
+        uid_qs = UIDModel.objects.filter(vpg_id=vpg_id).values('uid', 'p2p_type', 'platform', 'init_string', 'init_string_app')
 
 
         count = VPGModel.objects.get(id=vpg_id).uid_count   # 从vpg表获取uid总数
         count = VPGModel.objects.get(id=vpg_id).uid_count   # 从vpg表获取uid总数
         uid_qs = uid_qs[start:end]  # 显示条数
         uid_qs = uid_qs[start:end]  # 显示条数
@@ -210,11 +210,11 @@ def do_upload_uid(request):
         return response.json(444)
         return response.json(444)
     file = request.FILES.get('file', None)
     file = request.FILES.get('file', None)
     vpg_id = request_dict.get('vpg_id', None)
     vpg_id = request_dict.get('vpg_id', None)
-    platform = request_dict.get('platform', None)
-    init_string = request_dict.get('init_string', None)
-    init_string_app = request_dict.get('init_string_app', None)
+    platform = request_dict.get('platform', '')
+    init_string = request_dict.get('init_string', '')
+    init_string_app = request_dict.get('init_string_app', '')
 
 
-    if not all([vpg_id, platform, init_string, init_string_app]):
+    if not vpg_id:
         return response.json(444)
         return response.json(444)
 
 
     bulk = []
     bulk = []

+ 5 - 3
Model/models.py

@@ -81,9 +81,9 @@ class Permissions(models.Model):
 class MenuModel(models.Model):
 class MenuModel(models.Model):
     id = models.AutoField(primary_key=True, verbose_name=u'自增标记ID')
     id = models.AutoField(primary_key=True, verbose_name=u'自增标记ID')
     parentId = models.IntegerField(default=0, verbose_name='父节点ID')
     parentId = models.IntegerField(default=0, verbose_name='父节点ID')
-    name = models.CharField(max_length=50, unique=True, default='', verbose_name='名称')   #首字母大写,一定要与vue文件的name对应起来,用于noKeepAlive缓存控制(该项特别重要)
-    path = models.CharField(max_length=100, default='',verbose_name='路径')
-    component = models.CharField(max_length=100, default='', verbose_name='vue文件路径') #所谓的vue 组件
+    name = models.CharField(max_length=50,  null=True, default='', verbose_name='名称')   #首字母大写,一定要与vue文件的name对应起来,用于noKeepAlive缓存控制(该项特别重要)
+    path = models.CharField(max_length=100, null=True, default='',verbose_name='路径')
+    component = models.CharField(max_length=100, null=True, default='', verbose_name='vue文件路径') #所谓的vue 组件
     hidden = models.BooleanField(blank=True, default=False, verbose_name=u'是否隐藏')
     hidden = models.BooleanField(blank=True, default=False, verbose_name=u'是否隐藏')
     alwaysShow = models.BooleanField(blank=True, default=False, verbose_name=u'始终显示当前节点')
     alwaysShow = models.BooleanField(blank=True, default=False, verbose_name=u'始终显示当前节点')
     levelHidden = models.BooleanField(blank=True, default=False, verbose_name=u'是否隐藏一级路由')
     levelHidden = models.BooleanField(blank=True, default=False, verbose_name=u'是否隐藏一级路由')
@@ -98,6 +98,8 @@ class MenuModel(models.Model):
     dot = models.BooleanField(blank=True, default=False, verbose_name=u'小圆点')
     dot = models.BooleanField(blank=True, default=False, verbose_name=u'小圆点')
     dynamicNewTab = models.BooleanField(blank=True, default=False, verbose_name=u'动态传参路由是否新开标签页')
     dynamicNewTab = models.BooleanField(blank=True, default=False, verbose_name=u'动态传参路由是否新开标签页')
     redirect = models.CharField(max_length=50, default='', verbose_name='重定向')
     redirect = models.CharField(max_length=50, default='', verbose_name='重定向')
+    menu_code = models.CharField(max_length=100, default='', verbose_name='菜单编码')
+    menutype  = models.SmallIntegerField(default=1, verbose_name=u'类型') #类型: 1-菜单 2-按钮
     sort = models.IntegerField(default=0, verbose_name='排序')
     sort = models.IntegerField(default=0, verbose_name='排序')
 
 
     class Meta:
     class Meta:

+ 1 - 0
Service/CommonService.py

@@ -39,6 +39,7 @@ class CommonService:
     # 格式化query_set转dict
     # 格式化query_set转dict
     @staticmethod
     @staticmethod
     def request_dict_to_dict(request_dict):
     def request_dict_to_dict(request_dict):
+        # 传参格式转换,键包含meta获取meta[]中的值,值'true'/'false'转为True,False
         key_list = []
         key_list = []
         value_list = []
         value_list = []
         for k, v in request_dict.items():
         for k, v in request_dict.items():