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

View File

@ -1,10 +1,18 @@
from django.urls import path, include
from rest_framework import routers
<<<<<<< HEAD
from .views import ContentViewSet,RecordViewSet
router = routers.DefaultRouter()
router.register('content', ContentViewSet, basename="content")
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 = [
path('', include(router.urls))
]

View File

@ -8,7 +8,6 @@ from django.conf import settings
from rest_framework import status
from rest_framework.response import Response
from apps.system.models import Organization
from openpyxl import Workbook, load_workbook
from django.db.models import Count
from utils.pagination import PageOrNot
from apps.system.mixins import CreateUpdateCustomMixin
@ -38,10 +37,19 @@ class TaskViewSet(CreateUpdateCustomMixin, ModelViewSet):
if self.action in ['create', 'update']:
return TaskCreateUpdateSerializer
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):
perms_map = {'get': '*', 'post': 'record_create',
'put': 'record_update', 'delete': 'record_delete'}
queryset = Record.objects.all()
serializer_class = RecordSerializer
search_fields = ['name']
ordering = ['-create_time']
ordering = ['-create_time']

View File

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

View File

@ -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='%(class)s_create_by')
update_by = models.ForeignKey(
User, null=True, blank=True, on_delete=models.SET_NULL, verbose_name='最后编辑人', related_name='%(class)s_update_by')
belong_to = models.ForeignKey(
Organization, null=True, blank=True, on_delete=models.SET_NULL, verbose_name='所属部门', related_name='%(class)s_belong_to')
belong_dept = models.ForeignKey(
Organization, null=True, blank=True, on_delete=models.SET_NULL, verbose_name='所属部门', related_name='%(class)s_belong_dept')
class Meta:
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实例
"""
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:
belong_depts = get_child_queryset2(user.dept.pid)
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

View File

@ -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)
belong_depts = get_child_queryset2(user.dept.pid)
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,7 +54,7 @@ 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
@ -63,19 +63,19 @@ def rbac_filter_queryset(user, queryset):
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)
belong_depts = get_child_queryset2(user.dept.pid)
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))