@@ -158,12 +158,12 @@ const defaultDictType = {
id: '',
name: '',
code: '',
- pid: null
+ parent: null
}
const defaultDict = {
id: '',
name: '',
- desc: '',
+ description: '',
sort: 1,
type: null
}
diff --git a/client/src/views/system/organization.vue b/client/src/views/system/organization.vue
index ccbb524..846f780 100644
--- a/client/src/views/system/organization.vue
+++ b/client/src/views/system/organization.vue
@@ -59,8 +59,8 @@
-
-
+
+
@@ -81,7 +81,7 @@ import '@riophae/vue-treeselect/dist/vue-treeselect.css'
const defaultOrg = {
id: null,
name: '',
- pid: null
+ parent: null
}
export default {
components: { Treeselect },
@@ -90,7 +90,7 @@ export default {
org: {
id: '',
name: '',
- pid: ''
+ parent: ''
},
search: '',
tableData: [],
@@ -100,7 +100,7 @@ export default {
dialogType: 'new',
rule1: {
name: [{ required: true, message: '请输入名称', trigger: 'blur' }],
- pid: [{ required: true, message: '请选择上级', trigger: 'change' }]
+ parent: [{ required: true, message: '请选择上级', trigger: 'change' }]
}
}
},
diff --git a/client/src/views/system/perm.vue b/client/src/views/system/perm.vue
index ce17537..75c0170 100644
--- a/client/src/views/system/perm.vue
+++ b/client/src/views/system/perm.vue
@@ -69,8 +69,8 @@
-
-
+
+
@@ -97,7 +97,7 @@ const defaultPerm = {
type: '目录',
method: '',
sort:1,
- pid: null
+ parent: null
}
export default {
components: { Treeselect },
diff --git a/client/src/views/system/role.vue b/client/src/views/system/role.vue
index 016bf24..31e1710 100644
--- a/client/src/views/system/role.vue
+++ b/client/src/views/system/role.vue
@@ -26,7 +26,7 @@
{{ scope.row.name }}
- {{ scope.row.desc }}
+ {{ scope.row.description }}
@@ -43,7 +43,7 @@
角色名: ${name}
- 角色描述: ${desc}
+ 角色描述: ${description}
`,
type: 'success'
})
diff --git a/server/apps/system/migrations/0011_auto_20200609_1549.py b/server/apps/system/migrations/0011_auto_20200609_1549.py
new file mode 100644
index 0000000..e790137
--- /dev/null
+++ b/server/apps/system/migrations/0011_auto_20200609_1549.py
@@ -0,0 +1,72 @@
+# Generated by Django 3.0.7 on 2020-06-09 07:49
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('system', '0010_file_path'),
+ ]
+
+ operations = [
+ migrations.AlterModelOptions(
+ name='file',
+ options={'verbose_name': '文件库', 'verbose_name_plural': '文件库'},
+ ),
+ migrations.RenameField(
+ model_name='dict',
+ old_name='desc',
+ new_name='description',
+ ),
+ migrations.RenameField(
+ model_name='dict',
+ old_name='pid',
+ new_name='parent',
+ ),
+ migrations.RenameField(
+ model_name='dicttype',
+ old_name='pid',
+ new_name='parent',
+ ),
+ migrations.RenameField(
+ model_name='historicaldict',
+ old_name='desc',
+ new_name='description',
+ ),
+ migrations.RenameField(
+ model_name='historicaldict',
+ old_name='pid',
+ new_name='parent',
+ ),
+ migrations.RenameField(
+ model_name='organization',
+ old_name='pid',
+ new_name='parent',
+ ),
+ migrations.RenameField(
+ model_name='permission',
+ old_name='pid',
+ new_name='parent',
+ ),
+ migrations.RenameField(
+ model_name='position',
+ old_name='desc',
+ new_name='description',
+ ),
+ migrations.RenameField(
+ model_name='role',
+ old_name='desc',
+ new_name='description',
+ ),
+ migrations.AlterField(
+ model_name='dict',
+ name='code',
+ field=models.CharField(blank=True, max_length=30, null=True, verbose_name='编号'),
+ ),
+ migrations.AlterField(
+ model_name='historicaldict',
+ name='code',
+ field=models.CharField(blank=True, max_length=30, null=True, verbose_name='编号'),
+ ),
+ ]
diff --git a/server/apps/system/mixins.py b/server/apps/system/mixins.py
index 4770c75..0ecbac7 100644
--- a/server/apps/system/mixins.py
+++ b/server/apps/system/mixins.py
@@ -21,7 +21,7 @@ class CreateModelBMixin:
业务用基本表B用
"""
def perform_create(self, serializer):
- serializer.save(create_by = self.request.user, belong_to=self.request.user.dept)
+ serializer.save(create_by = self.request.user, belong_dept=self.request.user.dept)
class UpdateModelBMixin:
"""
diff --git a/server/apps/system/models.py b/server/apps/system/models.py
index bc223c2..94ad81f 100644
--- a/server/apps/system/models.py
+++ b/server/apps/system/models.py
@@ -14,7 +14,7 @@ class Position(BaseModel):
职位/岗位
"""
name = models.CharField('名称', max_length=32, unique=True)
- desc = models.CharField('描述', max_length=50, blank=True, null=True)
+ description = models.CharField('描述', max_length=50, blank=True, null=True)
class Meta:
verbose_name = '职位/岗位'
@@ -38,7 +38,7 @@ class Permission(SoftModel):
choices=menu_type_choices, default='接口')
is_frame = models.BooleanField('外部链接', default=False)
sort = models.IntegerField('排序标记', default=1)
- pid = models.ForeignKey('self', null=True, blank=True,
+ parent = models.ForeignKey('self', null=True, blank=True,
on_delete=models.SET_NULL, verbose_name='父')
method = models.CharField('方法/代号', max_length=50,
unique=True, null=True, blank=True)
@@ -63,7 +63,7 @@ class Organization(SoftModel):
name = models.CharField('名称', max_length=60)
type = models.CharField('类型', max_length=20,
choices=organization_type_choices, default='部门')
- pid = models.ForeignKey('self', null=True, blank=True,
+ parent = models.ForeignKey('self', null=True, blank=True,
on_delete=models.SET_NULL, verbose_name='父')
class Meta:
@@ -92,7 +92,7 @@ class Role(SoftModel):
choices=data_type_choices, default='本级及以下')
depts = models.ManyToManyField(
Organization, blank=True, verbose_name='权限范围')
- desc = models.CharField('描述', max_length=50, blank=True, null=True)
+ description = models.CharField('描述', max_length=50, blank=True, null=True)
class Meta:
verbose_name = '角色'
@@ -132,7 +132,7 @@ class DictType(SoftModel):
"""
name = models.CharField('名称', max_length=30)
code = models.CharField('代号', unique=True, max_length=30)
- pid = models.ForeignKey('self', null=True, blank=True,
+ parent = models.ForeignKey('self', null=True, blank=True,
on_delete=models.SET_NULL, verbose_name='父')
class Meta:
@@ -148,13 +148,13 @@ class Dict(SoftModel):
数据字典
"""
name = models.CharField('名称', max_length=30, unique=True)
- code = models.CharField('代码', max_length=30, null=True, blank=True)
- desc = models.TextField('描述', blank=True, null=True)
+ code = models.CharField('编号', max_length=30, null=True, blank=True)
+ description = models.TextField('描述', blank=True, null=True)
enabled = models.BooleanField('是否有效', default=True)
type = models.ForeignKey(
DictType, on_delete=models.CASCADE, verbose_name='类型')
sort = models.IntegerField('排序', default=1)
- pid = models.ForeignKey('self', null=True, blank=True,
+ parent = models.ForeignKey('self', null=True, blank=True,
on_delete=models.SET_NULL, verbose_name='父')
history = HistoricalRecords()
@@ -180,14 +180,14 @@ class CommonAModel(SoftModel):
class CommonBModel(SoftModel):
"""
- 业务用基本表B,包含create_by, update_by, belong_to字段
+ 业务用基本表B,包含create_by, update_by, belong_dept字段
"""
create_by = models.ForeignKey(
User, null=True, blank=True, on_delete=models.SET_NULL, verbose_name='创建人', related_name='create_by')
update_by = models.ForeignKey(
User, null=True, blank=True, on_delete=models.SET_NULL, verbose_name='最后编辑人', related_name='update_by')
- belong_to = models.ForeignKey(
- Organization, null=True, blank=True, on_delete=models.SET_NULL, verbose_name='所属部门', related_name='belong_to')
+ belong_dept = models.ForeignKey(
+ Organization, null=True, blank=True, on_delete=models.SET_NULL, verbose_name='所属部门', related_name='belong_dept')
class Meta:
abstract = True
diff --git a/server/apps/system/permission.py b/server/apps/system/permission.py
index 7375a07..49c0822 100644
--- a/server/apps/system/permission.py
+++ b/server/apps/system/permission.py
@@ -66,7 +66,7 @@ def has_obj_perm(user, obj):
"""
数据权限控权
返回对象的是否可以操作
- 需要控数据权限的表需有belong_to, create_by, update_by字段(部门, 创建人, 编辑人)
+ 需要控数据权限的表需有belong_dept, create_by, update_by字段(部门, 创建人, 编辑人)
传入user, obj实例
"""
roles = user.roles
@@ -75,18 +75,18 @@ def has_obj_perm(user, obj):
return True
elif '自定义' in data_range:
if roles.depts.exists():
- if obj.belong_to not in roles.depts:
+ if obj.belong_dept not in roles.depts:
return False
elif '同级及以下' in data_range:
- if user.dept.pid:
- belong_tos = get_child_queryset2(user.dept.pid)
- if obj.belong_to not in belong_tos:
+ if user.dept.parent:
+ belong_depts = get_child_queryset2(user.dept.parent)
+ if obj.belong_dept not in belong_depts:
return False
elif '本级及以下' in data_range:
- belong_tos = get_child_queryset2(user.dept)
- if obj.belong_to not in belong_tos:
+ belong_depts = get_child_queryset2(user.dept)
+ if obj.belong_dept not in belong_depts:
return False
elif '本级' in data_range:
- if obj.belong_to is not user.dept:
+ if obj.belong_dept is not user.dept:
return False
return True
\ No newline at end of file
diff --git a/server/apps/system/permission_data.py b/server/apps/system/permission_data.py
index 7d61db1..f5f8d5e 100644
--- a/server/apps/system/permission_data.py
+++ b/server/apps/system/permission_data.py
@@ -9,7 +9,7 @@ class RbacFilterSet(GenericAPIView):
"""
数据权限控权返回的queryset
在必须的View下继承
- 需要控数据权限的表需有belong_to, create_by, update_by字段(部门, 创建人, 编辑人)
+ 需要控数据权限的表需有belong_dept, create_by, update_by字段(部门, 创建人, 编辑人)
"""
def get_queryset(self):
assert self.queryset is not None, (
@@ -22,7 +22,7 @@ class RbacFilterSet(GenericAPIView):
if isinstance(queryset, QuerySet):
# Ensure queryset is re-evaluated on each request.
queryset = queryset.all()
- if hasattr(queryset.model, 'belong_to'):
+ if hasattr(queryset.model, 'belong_dept'):
user = self.request.user
roles = user.roles
data_range = roles.values_list('datas', flat=True)
@@ -30,19 +30,19 @@ class RbacFilterSet(GenericAPIView):
return queryset
elif '自定义' in data_range:
if roles.depts.exists():
- queryset = queryset.filter(belong_to__in = roles.depts)
+ queryset = queryset.filter(belong_dept__in = roles.depts)
return queryset
elif '同级及以下' in data_range:
- if user.dept.pid:
- belong_tos = get_child_queryset2(user.dept.pid)
- queryset = queryset.filter(belong_to__in = belong_tos)
+ if user.dept.parent:
+ belong_depts = get_child_queryset2(user.dept.parent)
+ queryset = queryset.filter(belong_dept__in = belong_depts)
return queryset
elif '本级及以下' in data_range:
- belong_tos = get_child_queryset2(user.dept)
- queryset = queryset.filter(belong_to__in = belong_tos)
+ belong_depts = get_child_queryset2(user.dept)
+ queryset = queryset.filter(belong_dept__in = belong_depts)
return queryset
elif '本级' in data_range:
- queryset = queryset.filter(belong_to = user.dept)
+ queryset = queryset.filter(belong_dept = user.dept)
return queryset
elif '仅本人' in data_range:
queryset = queryset.filter(Q(create_by=user)|Q(update_by=user))
@@ -54,29 +54,29 @@ class RbacFilterSet(GenericAPIView):
def rbac_filter_queryset(user, queryset):
"""
数据权限控权返回的queryset方法
- 需要控数据权限的表需有belong_to, create_by, update_by字段(部门, 创建人, 编辑人)
+ 需要控数据权限的表需有belong_dept, create_by, update_by字段(部门, 创建人, 编辑人)
传入user实例,queryset
"""
roles = user.roles
data_range = roles.values_list('datas', flat=True)
- if hasattr(queryset.model, 'belong_to'):
+ if hasattr(queryset.model, 'belong_dept'):
if '全部' in data_range:
return queryset
elif '自定义' in data_range:
if roles.depts.exists():
- queryset = queryset.filter(belong_to__in = roles.depts)
+ queryset = queryset.filter(belong_dept__in = roles.depts)
return queryset
elif '同级及以下' in data_range:
- if user.dept.pid:
- belong_tos = get_child_queryset2(user.dept.pid)
- queryset = queryset.filter(belong_to__in = belong_tos)
+ if user.dept.parent:
+ belong_depts = get_child_queryset2(user.dept.parent)
+ queryset = queryset.filter(belong_dept__in = belong_depts)
return queryset
elif '本级及以下' in data_range:
- belong_tos = get_child_queryset2(user.dept)
- queryset = queryset.filter(belong_to__in = belong_tos)
+ belong_depts = get_child_queryset2(user.dept)
+ queryset = queryset.filter(belong_dept__in = belong_depts)
return queryset
elif '本级' in data_range:
- queryset = queryset.filter(belong_to = user.dept)
+ queryset = queryset.filter(belong_dept = user.dept)
return queryset
elif '仅本人' in data_range:
queryset = queryset.filter(Q(create_by=user)|Q(update_by=user))
diff --git a/server/apps/system/views.py b/server/apps/system/views.py
index 7033ae0..bdcdabb 100644
--- a/server/apps/system/views.py
+++ b/server/apps/system/views.py
@@ -76,7 +76,7 @@ class DictViewSet(ModelViewSet):
'put': 'dict_update', 'delete': 'dict_delete'}
queryset = Dict.objects.all()
serializer_class = DictSerializer
- search_fields = ['^name']
+ search_fields = ['name']
ordering_fields = ['id']
ordering = 'id'
@@ -90,7 +90,7 @@ class PositionViewSet(ModelViewSet):
queryset = Position.objects.all()
serializer_class = PositionSerializer
pagination_class = None
- search_fields = ['name','desc']
+ search_fields = ['name','description']
ordering_fields = ['id']
ordering = 'id'
@@ -124,7 +124,7 @@ class OrganizationViewSet(ModelViewSet):
queryset = Organization.objects.all()
serializer_class = OrganizationSerializer
pagination_class = None
- search_fields = ['^name', '^method']
+ search_fields = ['name', 'method']
ordering_fields = ['id']
ordering = 'id'
diff --git a/server/requirements.txt b/server/requirements.txt
index 5e1431f..0c5b930 100644
Binary files a/server/requirements.txt and b/server/requirements.txt differ
diff --git a/server/utils/pagination.py b/server/utils/pagination.py
new file mode 100644
index 0000000..119e06e
--- /dev/null
+++ b/server/utils/pagination.py
@@ -0,0 +1,6 @@
+from rest_framework.pagination import PageNumberPagination
+
+
+class MyPagination(PageNumberPagination):
+ page_size = 10
+ page_size_query_param = 'limit'
\ No newline at end of file
diff --git a/server/utils/queryset.py b/server/utils/queryset.py
index 81a38c7..102b10a 100644
--- a/server/utils/queryset.py
+++ b/server/utils/queryset.py
@@ -14,10 +14,10 @@ def get_child_queryset_u(checkQueryset, obj, hasParent=True):
fatherQueryset = cls.objects.filter(pk=obj.id)
if hasParent:
queryset = queryset | fatherQueryset
- child_queryset = checkQueryset.filter(pid=obj)
+ child_queryset = checkQueryset.filter(parent=obj)
while child_queryset:
queryset = queryset | child_queryset
- child_queryset = checkQueryset.filter(pid__in=child_queryset)
+ child_queryset = checkQueryset.filter(parent__in=child_queryset)
return queryset
@@ -35,10 +35,10 @@ def get_child_queryset(name, pk, hasParent=True):
if fatherQueryset.exists():
if hasParent:
queryset = queryset | fatherQueryset
- child_queryset = cls.objects.filter(pid=fatherQueryset.first())
+ child_queryset = cls.objects.filter(parent=fatherQueryset.first())
while child_queryset:
queryset = queryset | child_queryset
- child_queryset = cls.objects.filter(pid__in=child_queryset)
+ child_queryset = cls.objects.filter(parent__in=child_queryset)
return queryset
def get_child_queryset2(obj, hasParent=True):
@@ -53,8 +53,8 @@ def get_child_queryset2(obj, hasParent=True):
fatherQueryset = cls.objects.filter(pk=obj.id)
if hasParent:
queryset = queryset | fatherQueryset
- child_queryset = cls.objects.filter(pid=obj)
+ child_queryset = cls.objects.filter(parent=obj)
while child_queryset:
queryset = queryset | child_queryset
- child_queryset = cls.objects.filter(pid__in=child_queryset)
+ child_queryset = cls.objects.filter(parent__in=child_queryset)
return queryset
\ No newline at end of file
diff --git a/server/utils/serializer.py b/server/utils/serializer.py
index 8551856..743bbfc 100644
--- a/server/utils/serializer.py
+++ b/server/utils/serializer.py
@@ -3,37 +3,37 @@ from rest_framework import serializers
-class TreeSerializer(serializers.Serializer):
- id = serializers.IntegerField()
- label = serializers.CharField(max_length=20, source='name')
- pid = serializers.PrimaryKeyRelatedField(read_only=True)
+# class TreeSerializer(serializers.Serializer):
+# id = serializers.IntegerField()
+# label = serializers.CharField(max_length=20, source='name')
+# pid = serializers.PrimaryKeyRelatedField(read_only=True)
-class TreeAPIView(ListAPIView):
- """
- 自定义树结构View
- """
- serializer_class = TreeSerializer
+# class TreeAPIView(ListAPIView):
+# """
+# 自定义树结构View
+# """
+# serializer_class = TreeSerializer
- def list(self, request, *args, **kwargs):
- queryset = self.filter_queryset(self.get_queryset())
- page = self.paginate_queryset(queryset)
- serializer = self.get_serializer(queryset, many=True)
- tree_dict = {}
- tree_data = []
- try:
- for item in serializer.data:
- tree_dict[item['id']] = item
- for i in tree_dict:
- if tree_dict[i]['pid']:
- pid = tree_dict[i]['pid']
- parent = tree_dict[pid]
- parent.setdefault('children', []).append(tree_dict[i])
- else:
- tree_data.append(tree_dict[i])
- results = tree_data
- except KeyError:
- results = serializer.data
- if page is not None:
- return self.get_paginated_response(results)
- return Response(results)
+# def list(self, request, *args, **kwargs):
+# queryset = self.filter_queryset(self.get_queryset())
+# page = self.paginate_queryset(queryset)
+# serializer = self.get_serializer(queryset, many=True)
+# tree_dict = {}
+# tree_data = []
+# try:
+# for item in serializer.data:
+# tree_dict[item['id']] = item
+# for i in tree_dict:
+# if tree_dict[i]['pid']:
+# pid = tree_dict[i]['pid']
+# parent = tree_dict[pid]
+# parent.setdefault('children', []).append(tree_dict[i])
+# else:
+# tree_data.append(tree_dict[i])
+# results = tree_data
+# except KeyError:
+# results = serializer.data
+# if page is not None:
+# return self.get_paginated_response(results)
+# return Response(results)