字段更新,权限设置

This commit is contained in:
caoqianming 2021-03-30 22:03:59 +08:00
parent 0351b6a7a4
commit 60b84ab310
8 changed files with 26 additions and 18 deletions

View File

@ -33,7 +33,7 @@
</el-input> </el-input>
</div> </div>
<div class="ma"> <div class="ma">
<span class="term">执行部门</span> <span class="term">执行组织</span>
<span class="desc">{{ record.belong_dept_.name }}</span> <span class="desc">{{ record.belong_dept_.name }}</span>
</div> </div>
<div class="ma" v-if="record.up_user_"> <div class="ma" v-if="record.up_user_">
@ -60,7 +60,7 @@
<div class="ma"> <div class="ma">
<span class="term">已上传文件</span> <span class="term">已上传文件</span>
</div> </div>
<div v-for="(item, index) in fileList" v-bind:key="item.id"> <div v-for="(item, index) in fileList" v-bind:key="item.id" style="margin-top:2px">
<i class="el-icon-delete" @click="deleteFile(index)" style="color:red" v-if="data.action=='up'"></i> <i class="el-icon-delete" @click="deleteFile(index)" style="color:red" v-if="data.action=='up'"></i>
<el-link :href="item.path" target="_blank" type="primary">{{ item.name }}</el-link> <el-link :href="item.path" target="_blank" type="primary">{{ item.name }}</el-link>
</div> </div>
@ -184,7 +184,7 @@ export default {
}, },
deleteFile(index){ deleteFile(index){
this.$confirm('确定删除该文件, 是否继续?', {type:'error'}).then(() => { this.$confirm('确定删除该文件, 是否继续?', {type:'error'}).then(() => {
this.fileList.splice(index) this.fileList.splice(index, 1)
}).catch(e=>{}) }).catch(e=>{})
}, },
confirm() { confirm() {

View File

@ -88,7 +88,7 @@
<el-card style="margin-top: 2px"> <el-card style="margin-top: 2px">
<div slot="header" class="clearfix"> <div slot="header" class="clearfix">
<span>执行部门</span> <span>执行组织</span>
</div> </div>
<el-table <el-table
v-loading="listLoading" v-loading="listLoading"
@ -212,7 +212,6 @@
> >
<el-link <el-link
v-if=" v-if="
scope.row.state == '已上报' &&
checkPermission(['record_confirm']) checkPermission(['record_confirm'])
" "
type="success" type="success"

View File

@ -105,11 +105,7 @@
<el-checkbox v-model="org.can_supervision">可监督</el-checkbox> <el-checkbox v-model="org.can_supervision">可监督</el-checkbox>
</el-form-item> </el-form-item>
<el-form-item label="排序" prop="sort"> <el-form-item label="排序" prop="sort">
<el-input-number <el-input v-model="org.sort" placeholder="排序编号" />
v-model="org.sort"
:min="1"
:max="10"
></el-input-number>
</el-form-item> </el-form-item>
</el-form> </el-form>
<div style="text-align: right"> <div style="text-align: right">

View File

@ -73,6 +73,7 @@ class Record(CommonBModel):
state = models.CharField('记录状态', max_length=50, choices=state_choices, default='待上报') state = models.CharField('记录状态', max_length=50, choices=state_choices, default='待上报')
is_yes = models.BooleanField('是否适用', default=True) is_yes = models.BooleanField('是否适用', default=True)
note = models.TextField('上报要求', null=True, blank=True) note = models.TextField('上报要求', null=True, blank=True)
opinion = models.TextField('修改意见', null=True, blank=True)
noteb = models.TextField('上报说明', null=True, blank=True) noteb = models.TextField('上报说明', null=True, blank=True)
files = models.ManyToManyField(File, verbose_name="关联文件") files = models.ManyToManyField(File, verbose_name="关联文件")
class Meta: class Meta:

View File

@ -0,0 +1,10 @@
from apps.system.permission import RbacPermission, has_permission
class RecordPermission(RbacPermission):
def has_object_permission(self, request, view, obj):
if has_permission('record_confirm', request.user):
return True
if request.user.dept == obj.belong_dept:
return False
return True

View File

@ -5,7 +5,7 @@ from django.db.models.query import QuerySet
from django.shortcuts import render from django.shortcuts import render
from django.utils import timezone from django.utils import timezone
from rest_framework import status from rest_framework import status
from rest_framework.decorators import action from rest_framework.decorators import action, permission_classes
from rest_framework.mixins import ListModelMixin from rest_framework.mixins import ListModelMixin
from rest_framework.response import Response from rest_framework.response import Response
from rest_framework.viewsets import GenericViewSet, ModelViewSet from rest_framework.viewsets import GenericViewSet, ModelViewSet
@ -33,7 +33,7 @@ class ContentViewSet(CreateUpdateCustomMixin, ModelViewSet):
pagination_class = None pagination_class = None
search_fields = ['name', 'desc'] search_fields = ['name', 'desc']
filterset_fields = ['type','can_doself'] filterset_fields = ['type','can_doself']
ordering = ['type__sort', 'create_time'] ordering = ['sortnum', 'type__sort', 'create_time']
class TaskViewSet(CreateUpdateCustomMixin, ModelViewSet): class TaskViewSet(CreateUpdateCustomMixin, ModelViewSet):
perms_map = {'get': '*', 'post': 'task_create', perms_map = {'get': '*', 'post': 'task_create',
@ -165,6 +165,7 @@ def cal_task_rate(task, dept):
instance.save() instance.save()
from utils.queryset import get_child_queryset2 from utils.queryset import get_child_queryset2
from .permission import RecordPermission
class RecordViewSet(RbacFilterSet, PageOrNot, CreateUpdateCustomMixin, ModelViewSet): class RecordViewSet(RbacFilterSet, PageOrNot, CreateUpdateCustomMixin, ModelViewSet):
perms_map = {'get': '*', 'post': 'record_create', perms_map = {'get': '*', 'post': 'record_create',
@ -260,22 +261,22 @@ class RecordViewSet(RbacFilterSet, PageOrNot, CreateUpdateCustomMixin, ModelView
return Response(status=status.HTTP_200_OK) return Response(status=status.HTTP_200_OK)
return Response('记录状态错误', status=status.HTTP_400_BAD_REQUEST) return Response('记录状态错误', status=status.HTTP_400_BAD_REQUEST)
@action(methods=['put'], detail=True, perms_map = {'put':'record_reject'}) @action(methods=['put'], detail=True, perms_map = {'put':'record_reject'}, permission_classes=[RecordPermission])
def reject(self, request, *args, **kwargs): def reject(self, request, *args, **kwargs):
""" """
驳回 驳回
""" """
obj = self.get_object() obj = self.get_object()
if obj.state == '已上报': if obj.state == '已上报':
if request.data.get('note', None): if request.data.get('opinion', None):
obj.note = request.data['note'] obj.opinion = request.data['opinion']
obj.state = '待整改' obj.state = '待整改'
obj.save() obj.save()
if obj.task: if obj.task:
cal_task_rate(obj.task, obj.belong_dept) cal_task_rate(obj.task, obj.belong_dept)
return Response(status=status.HTTP_200_OK) return Response(status=status.HTTP_200_OK)
else: else:
return Response('请填写备注', status=status.HTTP_400_BAD_REQUEST) return Response('请填写修改意见', status=status.HTTP_400_BAD_REQUEST)
return Response('记录状态错误', status=status.HTTP_400_BAD_REQUEST) return Response('记录状态错误', status=status.HTTP_400_BAD_REQUEST)
@action(methods=['put'], detail=True, perms_map = {'put':'record_confirm'}) @action(methods=['put'], detail=True, perms_map = {'put':'record_confirm'})
@ -284,7 +285,7 @@ class RecordViewSet(RbacFilterSet, PageOrNot, CreateUpdateCustomMixin, ModelView
确认 确认
""" """
obj = self.get_object() obj = self.get_object()
if obj.state == '已上报': if obj.state in ['已上报', '待上报']:
obj.state = '已确认' obj.state = '已确认'
obj.save() obj.save()
if obj.task: if obj.task:

View File

@ -64,7 +64,7 @@ class Organization(SoftModel):
choices=organization_type_choices, default='部门') choices=organization_type_choices, default='部门')
pid = models.ForeignKey('self', null=True, blank=True, pid = models.ForeignKey('self', null=True, blank=True,
on_delete=models.SET_NULL, verbose_name='') on_delete=models.SET_NULL, verbose_name='')
sort = models.IntegerField('排序', default=1) sort = models.CharField('排序', default="", max_length=100)
can_supervision = models.BooleanField('是否可监督', default=False) can_supervision = models.BooleanField('是否可监督', default=False)
class Meta: class Meta:
verbose_name = '组织架构' verbose_name = '组织架构'

View File

@ -291,6 +291,7 @@ class UserViewSet(ModelViewSet):
'id': user.id, 'id': user.id,
'username': user.username, 'username': user.username,
'name': user.name, 'name': user.name,
'dept': user.dept,
'roles': user.roles.all().values_list('name', flat=True), 'roles': user.roles.all().values_list('name', flat=True),
# 'avatar': request._request._current_scheme_host + '/media/' + str(user.image), # 'avatar': request._request._current_scheme_host + '/media/' + str(user.image),
'avatar': user.avatar, 'avatar': user.avatar,