This commit is contained in:
shilixia 2021-03-15 09:09:37 +08:00
commit d8488bc925
7 changed files with 49 additions and 35 deletions

View File

@ -1,9 +1,10 @@
<template> <template>
<div class="app-container"> <div class="app-container">
<div style="margin-top: 10px"> <div style="margin-top: 10px">
<el-button type="primary" icon="el-icon-plus" @click="handleAddContent" <el-button type="primary" icon="el-icon-plus" @click="handleCreate"
>新增</el-button >创建报送任务</el-button>
> <el-button type="primary" icon="el-icon-plus" @click="handleCreate2"
>创建主动报送任务</el-button>
</div> </div>
<el-card <el-card
style="margin-top: 10px" style="margin-top: 10px"
@ -197,7 +198,7 @@ export default {
this.listQuery.page = 1; this.listQuery.page = 1;
this.getList(); this.getList();
}, },
handleAddContent() { handleCreate() {
this.Content = Object.assign({}, defaultContent); this.Content = Object.assign({}, defaultContent);
this.dialogType = "new"; this.dialogType = "new";
this.dialogVisible = true; this.dialogVisible = true;

View File

@ -1,10 +1,18 @@
from django.urls import path, include from django.urls import path, include
from rest_framework import routers from rest_framework import routers
<<<<<<< HEAD
from .views import ContentViewSet,RecordViewSet from .views import ContentViewSet,RecordViewSet
router = routers.DefaultRouter() router = routers.DefaultRouter()
router.register('content', ContentViewSet, basename="content") router.register('content', ContentViewSet, basename="content")
router.register('record', RecordViewSet, basename="record") router.register('record', RecordViewSet, basename="record")
=======
from .views import ContentViewSet, TaskViewSet
router = routers.DefaultRouter()
router.register('content', ContentViewSet, basename="content")
router.register('task', TaskViewSet, basename="task")
>>>>>>> a408760d711fd524ef58b7b4df59544a48c079fe
urlpatterns = [ urlpatterns = [
path('', include(router.urls)) path('', include(router.urls))
] ]

View File

@ -8,7 +8,6 @@ from django.conf import settings
from rest_framework import status from rest_framework import status
from rest_framework.response import Response from rest_framework.response import Response
from apps.system.models import Organization from apps.system.models import Organization
from openpyxl import Workbook, load_workbook
from django.db.models import Count from django.db.models import Count
from utils.pagination import PageOrNot from utils.pagination import PageOrNot
from apps.system.mixins import CreateUpdateCustomMixin from apps.system.mixins import CreateUpdateCustomMixin
@ -38,10 +37,19 @@ class TaskViewSet(CreateUpdateCustomMixin, ModelViewSet):
if self.action in ['create', 'update']: if self.action in ['create', 'update']:
return TaskCreateUpdateSerializer return TaskCreateUpdateSerializer
return TaskListSerializer return TaskListSerializer
@action(methods=['post'], detail=False, perms_map = {'post':'task_createself'})
def createself(self, request):
"""
主动报送
"""
serializer = self.get_serializer(data=request.data)
serializer.is_valid(raise_exception=True)
serializer.save(is_self=True, create_by=request.user, belong_dept=request.user.dept)
return Response(serializer.data, status=status.HTTP_201_CREATED)
class RecordViewSet(CreateUpdateCustomMixin,ModelViewSet): class RecordViewSet(CreateUpdateCustomMixin,ModelViewSet):
perms_map = {'get': '*', 'post': 'record_create', perms_map = {'get': '*', 'post': 'record_create',
'put': 'record_update', 'delete': 'record_delete'} 'put': 'record_update', 'delete': 'record_delete'}
queryset = Record.objects.all() queryset = Record.objects.all()
serializer_class = RecordSerializer serializer_class = RecordSerializer
search_fields = ['name'] search_fields = ['name']
ordering = ['-create_time'] ordering = ['-create_time']

View File

@ -1,7 +1,4 @@
from rest_framework import status from django.db.models.query import QuerySet
from rest_framework.response import Response
from rest_framework.settings import api_settings
class CreateUpdateModelAMixin: class CreateUpdateModelAMixin:
""" """
业务用基本表A用 业务用基本表A用

View File

@ -180,14 +180,14 @@ class CommonAModel(SoftModel):
class CommonBModel(SoftModel): class CommonBModel(SoftModel):
""" """
业务用基本表B,包含create_by, update_by, belong_to字段 业务用基本表B,包含create_by, update_by, belong_dept字段
""" """
create_by = models.ForeignKey( create_by = models.ForeignKey(
User, null=True, blank=True, on_delete=models.SET_NULL, verbose_name='创建人', related_name='%(class)s_create_by') User, null=True, blank=True, on_delete=models.SET_NULL, verbose_name='创建人', related_name='%(class)s_create_by')
update_by = models.ForeignKey( update_by = models.ForeignKey(
User, null=True, blank=True, on_delete=models.SET_NULL, verbose_name='最后编辑人', related_name='%(class)s_update_by') User, null=True, blank=True, on_delete=models.SET_NULL, verbose_name='最后编辑人', related_name='%(class)s_update_by')
belong_to = models.ForeignKey( belong_dept = models.ForeignKey(
Organization, null=True, blank=True, on_delete=models.SET_NULL, verbose_name='所属部门', related_name='%(class)s_belong_to') Organization, null=True, blank=True, on_delete=models.SET_NULL, verbose_name='所属部门', related_name='%(class)s_belong_dept')
class Meta: class Meta:
abstract = True abstract = True

View File

@ -66,7 +66,7 @@ def has_obj_perm(user, obj):
""" """
数据权限控权 数据权限控权
返回对象的是否可以操作 返回对象的是否可以操作
需要控数据权限的表需有belong_to, create_by, update_by字段(部门, 创建人, 编辑人) 需要控数据权限的表需有belong_dept, create_by, update_by字段(部门, 创建人, 编辑人)
传入user, obj实例 传入user, obj实例
""" """
roles = user.roles roles = user.roles
@ -75,18 +75,18 @@ def has_obj_perm(user, obj):
return True return True
elif '自定义' in data_range: elif '自定义' in data_range:
if roles.depts.exists(): if roles.depts.exists():
if obj.belong_to not in roles.depts: if obj.belong_dept not in roles.depts:
return False return False
elif '同级及以下' in data_range: elif '同级及以下' in data_range:
if user.dept.pid: if user.dept.pid:
belong_tos = get_child_queryset2(user.dept.pid) belong_depts = get_child_queryset2(user.dept.pid)
if obj.belong_to not in belong_tos: if obj.belong_dept not in belong_depts:
return False return False
elif '本级及以下' in data_range: elif '本级及以下' in data_range:
belong_tos = get_child_queryset2(user.dept) belong_depts = get_child_queryset2(user.dept)
if obj.belong_to not in belong_tos: if obj.belong_dept not in belong_depts:
return False return False
elif '本级' in data_range: elif '本级' in data_range:
if obj.belong_to is not user.dept: if obj.belong_dept is not user.dept:
return False return False
return True return True

View File

@ -9,7 +9,7 @@ class RbacFilterSet(GenericAPIView):
""" """
数据权限控权返回的queryset 数据权限控权返回的queryset
在必须的View下继承 在必须的View下继承
需要控数据权限的表需有belong_to, create_by, update_by字段(部门, 创建人, 编辑人) 需要控数据权限的表需有belong_dept, create_by, update_by字段(部门, 创建人, 编辑人)
""" """
def get_queryset(self): def get_queryset(self):
assert self.queryset is not None, ( assert self.queryset is not None, (
@ -22,7 +22,7 @@ class RbacFilterSet(GenericAPIView):
if isinstance(queryset, QuerySet): if isinstance(queryset, QuerySet):
# Ensure queryset is re-evaluated on each request. # Ensure queryset is re-evaluated on each request.
queryset = queryset.all() queryset = queryset.all()
if hasattr(queryset.model, 'belong_to'): if hasattr(queryset.model, 'belong_dept'):
user = self.request.user user = self.request.user
roles = user.roles roles = user.roles
data_range = roles.values_list('datas', flat=True) data_range = roles.values_list('datas', flat=True)
@ -30,19 +30,19 @@ class RbacFilterSet(GenericAPIView):
return queryset return queryset
elif '自定义' in data_range: elif '自定义' in data_range:
if roles.depts.exists(): if roles.depts.exists():
queryset = queryset.filter(belong_to__in = roles.depts) queryset = queryset.filter(belong_dept__in = roles.depts)
return queryset return queryset
elif '同级及以下' in data_range: elif '同级及以下' in data_range:
if user.dept.pid: if user.dept.pid:
belong_tos = get_child_queryset2(user.dept.pid) belong_depts = get_child_queryset2(user.dept.pid)
queryset = queryset.filter(belong_to__in = belong_tos) queryset = queryset.filter(belong_dept__in = belong_depts)
return queryset return queryset
elif '本级及以下' in data_range: elif '本级及以下' in data_range:
belong_tos = get_child_queryset2(user.dept) belong_depts = get_child_queryset2(user.dept)
queryset = queryset.filter(belong_to__in = belong_tos) queryset = queryset.filter(belong_dept__in = belong_depts)
return queryset return queryset
elif '本级' in data_range: elif '本级' in data_range:
queryset = queryset.filter(belong_to = user.dept) queryset = queryset.filter(belong_dept = user.dept)
return queryset return queryset
elif '仅本人' in data_range: elif '仅本人' in data_range:
queryset = queryset.filter(Q(create_by=user)|Q(update_by=user)) queryset = queryset.filter(Q(create_by=user)|Q(update_by=user))
@ -54,7 +54,7 @@ class RbacFilterSet(GenericAPIView):
def rbac_filter_queryset(user, queryset): def rbac_filter_queryset(user, queryset):
""" """
数据权限控权返回的queryset方法 数据权限控权返回的queryset方法
需要控数据权限的表需有belong_to, create_by, update_by字段(部门, 创建人, 编辑人) 需要控数据权限的表需有belong_dept, create_by, update_by字段(部门, 创建人, 编辑人)
传入user实例,queryset 传入user实例,queryset
""" """
roles = user.roles roles = user.roles
@ -63,19 +63,19 @@ def rbac_filter_queryset(user, queryset):
return queryset return queryset
elif '自定义' in data_range: elif '自定义' in data_range:
if roles.depts.exists(): if roles.depts.exists():
queryset = queryset.filter(belong_to__in = roles.depts) queryset = queryset.filter(belong_dept__in = roles.depts)
return queryset return queryset
elif '同级及以下' in data_range: elif '同级及以下' in data_range:
if user.dept.pid: if user.dept.pid:
belong_tos = get_child_queryset2(user.dept.pid) belong_depts = get_child_queryset2(user.dept.pid)
queryset = queryset.filter(belong_to__in = belong_tos) queryset = queryset.filter(belong_dept__in = belong_depts)
return queryset return queryset
elif '本级及以下' in data_range: elif '本级及以下' in data_range:
belong_tos = get_child_queryset2(user.dept) belong_depts = get_child_queryset2(user.dept)
queryset = queryset.filter(belong_to__in = belong_tos) queryset = queryset.filter(belong_dept__in = belong_depts)
return queryset return queryset
elif '本级' in data_range: elif '本级' in data_range:
queryset = queryset.filter(belong_to = user.dept) queryset = queryset.filter(belong_dept = user.dept)
return queryset return queryset
elif '仅本人' in data_range: elif '仅本人' in data_range:
queryset = queryset.filter(Q(create_by=user)|Q(update_by=user)) queryset = queryset.filter(Q(create_by=user)|Q(update_by=user))