diff --git a/client/src/api/certapp.js b/client/src/api/certapp.js index e942f60..06bca08 100644 --- a/client/src/api/certapp.js +++ b/client/src/api/certapp.js @@ -54,3 +54,11 @@ export function getCertapp(id) { method: 'get', }) } + +export function accessCertapp(id, data) { + return request({ + url: `/project/certapp/${id}/access/`, + method: 'put', + data + }) +} \ No newline at end of file diff --git a/client/src/api/certappunit.js b/client/src/api/certappunit.js new file mode 100644 index 0000000..27d943d --- /dev/null +++ b/client/src/api/certappunit.js @@ -0,0 +1,32 @@ +import request from '@/utils/request' + +export function getCertappunitList(query) { + return request({ + url: '/project/certappunit/', + method: 'get', + params: query + }) +} + +// export function createAccess(data) { +// return request({ +// url: '/accessment/certass/', +// method: 'post', +// data +// }) +// } + +// export function updateAccess(id, data) { +// return request({ +// url: `/accessment/certass/${id}/`, +// method: 'put', +// data +// }) +// } + +// export function deleteAccess(id) { +// return request({ +// url: `/accessment/certass/${id}/`, +// method: 'delete' +// }) +// } \ No newline at end of file diff --git a/client/src/api/laboratory.js b/client/src/api/laboratory.js index 0f95aed..30efd6a 100644 --- a/client/src/api/laboratory.js +++ b/client/src/api/laboratory.js @@ -73,38 +73,4 @@ export function deleteTestOrgNotice(id) { } -export function getDetectionTaskList(query) { - return request({ - url: '/laboratory/detectiontask/', - method: 'get', - params: query - }) -} -export function getDetectionTask(id) { - return request({ - url: `/laboratory/detectiontask/${id}/`, - method: 'get' - }) -} -export function createDetectionTask(data) { - return request({ - url: '/laboratory/detectiontask/', - method: 'post', - data - }) -} -export function updateDetectionTask(id, data) { - return request({ - url: `/laboratory/detectiontask/${id}/`, - method: 'put', - data - }) -} - -export function deleteDetectionTask(id) { - return request({ - url: `/laboratory/detectiontask/${id}/`, - method: 'delete' - }) -} diff --git a/client/src/styles/index.scss b/client/src/styles/index.scss index 797311f..b47aaea 100644 --- a/client/src/styles/index.scss +++ b/client/src/styles/index.scss @@ -98,6 +98,6 @@ div:focus { .el-button+.el-button { margin-left: 1px; } -.el-button { - border-radius: 0px; -} \ No newline at end of file +// .el-button { +// border-radius: 0px; +// } \ No newline at end of file diff --git a/client/src/views/accessment/access.vue b/client/src/views/accessment/access.vue index 65a662c..e243248 100644 --- a/client/src/views/accessment/access.vue +++ b/client/src/views/accessment/access.vue @@ -4,63 +4,196 @@
评定结论
- - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + +
+ 保存 +
+
+ + +
+ 业务涉及的认证单元 +
+ + + + + + + + + + + + + + +
\ No newline at end of file diff --git a/client/src/views/accessment/index.vue b/client/src/views/accessment/index.vue index c220e67..3798699 100644 --- a/client/src/views/accessment/index.vue +++ b/client/src/views/accessment/index.vue @@ -1,6 +1,7 @@ diff --git a/server/apps/accessment/migrations/0003_auto_20200929_1544.py b/server/apps/accessment/migrations/0003_auto_20200929_1544.py new file mode 100644 index 0000000..fe7f4f5 --- /dev/null +++ b/server/apps/accessment/migrations/0003_auto_20200929_1544.py @@ -0,0 +1,44 @@ +# Generated by Django 3.0.7 on 2020-09-29 07:44 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('system', '0031_delete_bscodeset'), + ('project', '0038_certappunit_testorg'), + ('accessment', '0002_auto_20200921_1444'), + ] + + operations = [ + migrations.RemoveField( + model_name='unitaccess', + name='certaccess', + ), + migrations.RemoveField( + model_name='unitaccess', + name='certificate', + ), + migrations.RemoveField( + model_name='unitaccess', + name='certunit', + ), + migrations.AddField( + model_name='unitaccess', + name='certappunit', + field=models.OneToOneField(default=1, on_delete=django.db.models.deletion.CASCADE, related_name='unitaccess_certappunit', to='project.Certappunit'), + preserve_default=False, + ), + migrations.AlterField( + model_name='certaccess', + name='certapp', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='certaccess_certapp', to='project.CertApp'), + ), + migrations.AlterField( + model_name='unitaccess', + name='decision', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='unitaccess_decision', to='system.Dict', verbose_name='认证决定'), + ), + ] diff --git a/server/apps/accessment/migrations/0004_auto_20200929_1605.py b/server/apps/accessment/migrations/0004_auto_20200929_1605.py new file mode 100644 index 0000000..ad0df4b --- /dev/null +++ b/server/apps/accessment/migrations/0004_auto_20200929_1605.py @@ -0,0 +1,35 @@ +# Generated by Django 3.0.7 on 2020-09-29 08:05 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('accessment', '0003_auto_20200929_1544'), + ] + + operations = [ + migrations.RemoveField( + model_name='unitaccess', + name='certappunit', + ), + migrations.RemoveField( + model_name='unitaccess', + name='create_by', + ), + migrations.RemoveField( + model_name='unitaccess', + name='decision', + ), + migrations.RemoveField( + model_name='unitaccess', + name='update_by', + ), + migrations.DeleteModel( + name='Certaccess', + ), + migrations.DeleteModel( + name='Unitaccess', + ), + ] diff --git a/server/apps/accessment/models.py b/server/apps/accessment/models.py index 30b8c1b..fe9963f 100644 --- a/server/apps/accessment/models.py +++ b/server/apps/accessment/models.py @@ -5,38 +5,36 @@ from rest_framework.exceptions import ParseError from simple_history.models import HistoricalRecords from apps.certset.models import ImplementRule, UnitType, EvaluationItem, Standard -from apps.crm.models import Enterprise -from apps.project.models import CertApp -from apps.system.models import CommonAModel, CommonBModel, Dict, User +# from apps.crm.models import Enterprise +# from apps.project.models import CertApp +# from apps.system.models import CommonAModel, CommonBModel, Dict, User -class Certaccess(CommonAModel): - """ - 业务评定 - """ - certapp = models.ForeignKey('project.certapp', on_delete=models.CASCADE, related_name='unitaccess_certapp') - conclusion = models.ForeignKey(Dict, verbose_name='工厂检查结论', on_delete=models.CASCADE, related_name='certaccess_conclusion') - nonitems = models.ManyToManyField(Dict, verbose_name='不符合项目', related_name='certaccess_nonitems') - score = models.IntegerField('审核质量评分', default=0) +# class Certaccess(CommonAModel): +# """ +# 业务评定 +# """ +# certapp = models.ForeignKey('project.certapp', on_delete=models.CASCADE, related_name='certaccess_certapp') +# conclusion = models.ForeignKey(Dict, verbose_name='工厂检查结论', on_delete=models.CASCADE, related_name='certaccess_conclusion') +# nonitems = models.ManyToManyField(Dict, verbose_name='不符合项目', related_name='certaccess_nonitems') +# score = models.IntegerField('审核质量评分', default=0) - class Meta: - verbose_name = '业务评定' - verbose_name_plural = verbose_name +# class Meta: +# verbose_name = '业务评定' +# verbose_name_plural = verbose_name - def __str__(self): - return self.certapp.number +# def __str__(self): +# return self.certapp.number -class Unitaccess(CommonAModel): - """ - 单元评定 - """ - certunit = models.ForeignKey('crm.Certunit', on_delete=models.CASCADE, related_name='unitaccess_certunit') - certificate = models.ForeignKey('certificate.Certificate', on_delete=models.CASCADE, null=True, blank=True, related_name='unitaccess_certificate') - decision = models.ForeignKey(Dict,verbose_name='认证决定', on_delete=models.CASCADE) - certaccess = models.ForeignKey('accessment.Certaccess', on_delete=models.CASCADE, related_name='unitaccess_certaccess') +# class Unitaccess(CommonAModel): +# """ +# 单元评定 +# """ +# certappunit = models.OneToOneField('project.Certappunit', on_delete=models.CASCADE, related_name='unitaccess_certappunit') +# decision = models.ForeignKey(Dict,verbose_name='认证决定', on_delete=models.CASCADE, related_name='unitaccess_decision') - class Meta: - verbose_name = '认证单元评定' - verbose_name_plural = verbose_name +# class Meta: +# verbose_name = '认证单元评定' +# verbose_name_plural = verbose_name - def __str__(self): - return self.decision \ No newline at end of file +# def __str__(self): +# return self.decision \ No newline at end of file diff --git a/server/apps/accessment/serializers.py b/server/apps/accessment/serializers.py index bf299e6..d26d7f6 100644 --- a/server/apps/accessment/serializers.py +++ b/server/apps/accessment/serializers.py @@ -1,26 +1,26 @@ -from apps.system.models import Dict -from rest_framework import serializers +# from apps.system.models import Dict +# from rest_framework import serializers -from .models import Certaccess, Unitaccess +# from .models import Certaccess, Unitaccess -from apps.system.serializers import DictSerializer +# from apps.system.serializers import DictSerializer -class CertaccessSerializer(serializers.ModelSerializer): - conclusion_ = DictSerializer(source='conclusion', read_only=True) - nonitems = DictSerializer(source='nonitems', read_only=True) +# class CertaccessSerializer(serializers.ModelSerializer): +# conclusion_ = DictSerializer(source='conclusion', read_only=True) +# nonitems_ = DictSerializer(source='nonitems', read_only=True, many=True) - class Meta: - model = Certaccess - fields = '__all__' +# class Meta: +# model = Certaccess +# fields = '__all__' - @staticmethod - def setup_eager_loading(queryset): - """ Perform necessary eager loading of data. """ - queryset = queryset.select_related('conclusion',) - queryset = queryset.prefetch_related('nonitems',) - return queryset +# @staticmethod +# def setup_eager_loading(queryset): +# """ Perform necessary eager loading of data. """ +# queryset = queryset.select_related('conclusion',) +# queryset = queryset.prefetch_related('nonitems',) +# return queryset -class UnitaccessSerializer(serializers.ModelSerializer): - class Meta: - model = Unitaccess - fields = '__all__' \ No newline at end of file +# class UnitaccessSerializer(serializers.ModelSerializer): +# class Meta: +# model = Unitaccess +# fields = '__all__' \ No newline at end of file diff --git a/server/apps/accessment/urls.py b/server/apps/accessment/urls.py index 8042ce8..58dbe7f 100644 --- a/server/apps/accessment/urls.py +++ b/server/apps/accessment/urls.py @@ -1,10 +1,10 @@ -from django.urls import path, include -from .views import CertaccessViewSet -from rest_framework import routers +# from django.urls import path, include +# from .views import CertaccessViewSet +# from rest_framework import routers -router = routers.DefaultRouter() -router.register('certaccess', CertaccessViewSet, basename="certaccess") +# router = routers.DefaultRouter() +# router.register('certaccess', CertaccessViewSet, basename="certaccess") -urlpatterns = [ - path('', include(router.urls)) -] \ No newline at end of file +# urlpatterns = [ +# path('', include(router.urls)) +# ] \ No newline at end of file diff --git a/server/apps/accessment/views.py b/server/apps/accessment/views.py index 31c43f3..4f8b27b 100644 --- a/server/apps/accessment/views.py +++ b/server/apps/accessment/views.py @@ -1,29 +1,30 @@ -import random +# import random -from django.shortcuts import render -from django.utils import timezone -from rest_framework import status -from rest_framework.decorators import action -from rest_framework.exceptions import NotAuthenticated, ParseError -from rest_framework.response import Response -from rest_framework.serializers import ModelSerializer -from rest_framework.views import APIView -from rest_framework.viewsets import GenericViewSet, ModelViewSet +# from django.shortcuts import render +# from django.utils import timezone +# from rest_framework import status +# from rest_framework.decorators import action +# from rest_framework.exceptions import NotAuthenticated, ParseError +# from rest_framework.response import Response +# from rest_framework.serializers import ModelSerializer +# from rest_framework.views import APIView +# from rest_framework.viewsets import GenericViewSet, ModelViewSet -from apps.system.mixins import CreateUpdateCustomMixin, OptimizationMixin -from apps.system.models import Dict -from apps.system.permission_data import RbacFilterSet -from utils.pagination import PageOrNot +# from apps.system.mixins import CreateUpdateCustomMixin, OptimizationMixin +# from apps.system.models import Dict +# from apps.system.permission_data import RbacFilterSet +# from utils.pagination import PageOrNot -from .models import * -from .serializers import * +# from .models import * +# from .serializers import * -# Create your views here. -class CertaccessViewSet(CreateUpdateCustomMixin, ModelViewSet): - """ - 业务评定 - """ - perms_map = {'get': 'certapp_view', 'post':'certaccess_create', 'put':'certaccess_update','delete': 'certaccess_delete'} - queryset = Certaccess.objects.all() - serializer_class = CertaccessSerializer - ordering = ['-create_time'] \ No newline at end of file +# # Create your views here. +# class CertaccessViewSet(PageOrNot, CreateUpdateCustomMixin, ModelViewSet): +# """ +# 业务评定 +# """ +# perms_map = {'get': 'certapp_view', 'post':'certaccess_create', 'put':'certaccess_update','delete': 'certaccess_delete'} +# queryset = Certaccess.objects.all() +# serializer_class = CertaccessSerializer +# filterset_fields = ['certapp'] +# ordering = ['-create_time'] \ No newline at end of file diff --git a/server/apps/laboratory/models.py b/server/apps/laboratory/models.py index 5958c61..a9b16bd 100644 --- a/server/apps/laboratory/models.py +++ b/server/apps/laboratory/models.py @@ -42,26 +42,4 @@ class TestOrgNotice(CommonBModel): def __str__(self): return self.name -class DetectionTask(CommonBModel): - """ - 检测任务 - """ - item_choices = ( - ('规则规定的项目', '规则规定的项目'), - ('特定的项目见备注', '特定的项目见备注'), - ) - - - - charge_choices = ( - ('CTC代收', 'CTC代收'), - ('自收', '自收'), - - ) - testorg = models.ForeignKey(TestOrg,verbose_name='检测机构', related_name='detectionTask_testorg', on_delete=models.DO_NOTHING) - certappunit = models.ForeignKey(Certappunit,verbose_name='认证单元', related_name='detectionTask_certappunit', on_delete=models.DO_NOTHING) - remark = models.TextField('备注', null=True, blank=True) - detnumber = models.CharField('检测任务号', max_length = 100, null=True, blank=True) - testitem = models.CharField('检测项目', choices=item_choices, default='规则规定的项目', max_length=50) - charge = models.CharField('收费方式', choices=charge_choices, default='CTC代收', max_length=50) - + diff --git a/server/apps/laboratory/serializers.py b/server/apps/laboratory/serializers.py index fbd922f..2719ad1 100644 --- a/server/apps/laboratory/serializers.py +++ b/server/apps/laboratory/serializers.py @@ -1,6 +1,6 @@ from rest_framework import serializers -from .models import TestOrg,TestOrgNotice,DetectionTask +from .models import TestOrg,TestOrgNotice from apps.system.serializers import DictSerializer @@ -17,7 +17,4 @@ class TestOrgNoticListSerializer(serializers.ModelSerializer): class Meta: model = TestOrgNotice fields = ['id','name','publishdate','ismportant','note','dettonotice','path'] -class DetectionTaskSerializer(serializers.ModelSerializer): - class Meta: - model = DetectionTask - fields = '__all__' + diff --git a/server/apps/laboratory/urls.py b/server/apps/laboratory/urls.py index 9480d1c..350fa7c 100644 --- a/server/apps/laboratory/urls.py +++ b/server/apps/laboratory/urls.py @@ -1,11 +1,10 @@ from django.urls import path, include -from .views import TestOrgViewSet,TestOrgNoticeViewSet,DetectionTaskViewSet +from .views import TestOrgViewSet,TestOrgNoticeViewSet from rest_framework import routers router = routers.DefaultRouter() router.register('testorg', TestOrgViewSet, basename="TestOrg") router.register('testnotice', TestOrgNoticeViewSet, basename="TestOrgnotice") -router.register('detectiontask', DetectionTaskViewSet, basename="DetectionTask") urlpatterns = [ path('', include(router.urls)) ] \ No newline at end of file diff --git a/server/apps/laboratory/views.py b/server/apps/laboratory/views.py index abaca0d..81c169c 100644 --- a/server/apps/laboratory/views.py +++ b/server/apps/laboratory/views.py @@ -1,9 +1,9 @@ from django.shortcuts import render from rest_framework.viewsets import ModelViewSet -from .models import TestOrg,TestOrgNotice,DetectionTask +from .models import TestOrg,TestOrgNotice from utils.queryset import get_child_queryset2 -from .serializers import TestOrgSerializer,TestOrgNoticeSerializer,TestOrgNoticListSerializer,DetectionTaskSerializer +from .serializers import TestOrgSerializer,TestOrgNoticeSerializer,TestOrgNoticListSerializer from apps.system.permission_data import RbacFilterSet from apps.system.mixins import CreateUpdateCustomMixin, OptimizationMixin # Create your views here. @@ -27,10 +27,5 @@ class TestOrgNoticeViewSet(CreateUpdateCustomMixin, OptimizationMixin, ModelView if self.action == 'list': return TestOrgNoticListSerializer return TestOrgNoticeSerializer -class DetectionTaskViewSet(CreateUpdateCustomMixin, OptimizationMixin, ModelViewSet): - perms_map = {'get': '*', 'post': 'DetectionTask_create', - 'put': 'DetectionTask_update', 'delete': 'DetectionTask_delete'} - queryset = DetectionTask.objects - serializer_class = DetectionTaskSerializer - ordering = ['-create_time'] + diff --git a/server/apps/project/migrations/0039_auto_20200929_1605.py b/server/apps/project/migrations/0039_auto_20200929_1605.py new file mode 100644 index 0000000..eb83050 --- /dev/null +++ b/server/apps/project/migrations/0039_auto_20200929_1605.py @@ -0,0 +1,35 @@ +# Generated by Django 3.0.7 on 2020-09-29 08:05 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('system', '0031_delete_bscodeset'), + ('project', '0038_certappunit_testorg'), + ] + + operations = [ + migrations.AddField( + model_name='certapp', + name='conclusion', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='certaccess_conclusion', to='system.Dict', verbose_name='工厂检查结论'), + ), + migrations.AddField( + model_name='certapp', + name='nonitems', + field=models.ManyToManyField(related_name='certaccess_nonitems', to='system.Dict', verbose_name='不符合项目'), + ), + migrations.AddField( + model_name='certapp', + name='score', + field=models.IntegerField(default=0, verbose_name='审核质量评分'), + ), + migrations.AddField( + model_name='certappunit', + name='decision', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='unitaccess_decision', to='system.Dict', verbose_name='认证决定'), + ), + ] diff --git a/server/apps/project/models.py b/server/apps/project/models.py index ac13efb..0e4c80a 100644 --- a/server/apps/project/models.py +++ b/server/apps/project/models.py @@ -104,6 +104,12 @@ class CertApp(CommonBModel): review_amount = models.FloatField('复评金额',null=True, blank=True, default=0) system_standard = models.ForeignKey(Dict, verbose_name='依据的体系标准',null=True, blank=True, related_name='certapp_system_standard', on_delete=models.DO_NOTHING) risk = models.CharField('风险系数', choices=risk_choices, max_length=50, null=True, blank=True) + + # 认证评定字段 + conclusion = models.ForeignKey(Dict, verbose_name='工厂检查结论', on_delete=models.CASCADE, related_name='certaccess_conclusion', null=True, blank=True) + nonitems = models.ManyToManyField(Dict, verbose_name='不符合项目', related_name='certaccess_nonitems') + score = models.IntegerField('审核质量评分', default=0) + class Meta: verbose_name = '认证受理' verbose_name_plural = verbose_name diff --git a/server/apps/project/serializers.py b/server/apps/project/serializers.py index 5822e6b..cb19adf 100644 --- a/server/apps/project/serializers.py +++ b/server/apps/project/serializers.py @@ -3,7 +3,7 @@ from rest_framework import serializers from .models import * -from apps.system.serializers import DictSerializer, UserListSerializer +from apps.system.serializers import DictSerializer, UserSimpleSerializer from apps.certset.serializers import StandardSerializer from apps.plan.serializers import PlanSerializer @@ -42,11 +42,23 @@ class CertappSerializer(serializers.ModelSerializer): cert_field_ = DictSerializer(source='cert_field', read_only=True) cccpv_class_ = DictSerializer(source='cccpv_class' , read_only=True) cnas_scopes_ = DictSerializer(source='cnas_scopes', many=True , read_only=True) - create_by_ = UserListSerializer(source='create_by', read_only=True) - accept_by_ = UserListSerializer(source='accept_by', read_only=True) + create_by_ = UserSimpleSerializer(source='create_by', read_only=True) + accept_by_ = UserSimpleSerializer(source='accept_by', read_only=True) class Meta: model = CertApp fields = '__all__' + + @staticmethod + def setup_eager_loading(queryset): + """ Perform necessary eager loading of data. """ + queryset = queryset.select_related('cert_field','cccpv_class', 'create_by', 'accept_by') + queryset = queryset.prefetch_related('cnas_scopes',) + return queryset + +class CertappunitSerializer(serializers.ModelSerializer): + class Meta: + model = Certappunit + fields = '__all__' class EvaluationDetailSerializer(serializers.ModelSerializer): class Meta: @@ -65,8 +77,8 @@ class EvaluationDetailSerializer(serializers.ModelSerializer): class ProjectSerializer(serializers.ModelSerializer): - create_by_ = UserListSerializer(source='create_by', read_only=True) - assign_by_ = UserListSerializer(source='assign_by', read_only=True) + create_by_ = UserSimpleSerializer(source='create_by', read_only=True) + assign_by_ = UserSimpleSerializer(source='assign_by', read_only=True) certapps = serializers.SerializerMethodField() plan_ = PlanSerializer(source='plan', read_only=True) diff --git a/server/apps/project/urls.py b/server/apps/project/urls.py index 225e7ea..60d8ce5 100644 --- a/server/apps/project/urls.py +++ b/server/apps/project/urls.py @@ -6,6 +6,7 @@ router = routers.DefaultRouter() router.register('application', ApplicationViewSet, basename="application") router.register('subapplication', SubApplicationViewSet, basename="subapplication") router.register('certapp', CertappViewset, basename="certapp") +router.register('certappunit', CertappunitViewset, basename="certappunit") router.register('evaluationdetail', EvaluationDetailViewset, basename="evaluationdetail") router.register('project', ProjectViewSet, basename="project") urlpatterns = [ diff --git a/server/apps/project/views.py b/server/apps/project/views.py index e2afdd3..f527a4d 100644 --- a/server/apps/project/views.py +++ b/server/apps/project/views.py @@ -1,3 +1,5 @@ +import re +from django.http import request from rest_framework.views import APIView from apps import project from django.shortcuts import render @@ -16,6 +18,7 @@ from .filters import * from utils.pagination import PageOrNot from rest_framework.exceptions import ParseError, NotAuthenticated from django.utils import timezone + # Create your views here. class ApplicationViewSet(RbacFilterSet, ModelViewSet): """ @@ -89,7 +92,7 @@ class CertappViewset(PageOrNot, RbacFilterSet, ModelViewSet): headers = self.get_success_headers(serializer.data) return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers) - @action(methods=['put'], detail=True, perms_map={'put':'complete_certapp'}, + @action(methods=['put'], detail=True, perms_map={'put':'certapp_complete'}, url_name='complete_certapp') def complete(self, request, pk=None): """ @@ -100,7 +103,7 @@ class CertappViewset(PageOrNot, RbacFilterSet, ModelViewSet): obj.save() return Response(status=status.HTTP_200_OK) - @action(methods=['put'], detail=False, perms_map={'put':'review_certapp'}, + @action(methods=['put'], detail=False, perms_map={'put':'certapp_review'}, url_name='review_certapp') def review(self, request, pk=None): """ @@ -113,6 +116,23 @@ class CertappViewset(PageOrNot, RbacFilterSet, ModelViewSet): instance.cert_app.add(*certapps) return Response(status=status.HTTP_200_OK) + @action(methods=['put'], detail=True, perms_map={'put':'certapp_access'}, url_name='certapp_access') + def access(self, request, pk=None): + """ + 认证评定 + """ + # instance, ok = Certaccess.objects.get_or_create(certapp=self.get_object(), defaults={'certapp':self.get_object() + # , 'conclusion':Dict.objects.get(pk=request.data['conclusion']), 'score':request.data['score']}) + # if not ok: + instance = self.get_object() + instance.conclusion = Dict.objects.get(pk=request.data['conclusion']) + instance.score = request.data['score'] + instance.save() + instance.nonitems.clear() + instance.nonitems.add(*request.data['nonitems']) + return Response(status=status.HTTP_200_OK) + + class EvaluationDetailViewset(CreateUpdateCustomMixin, PageOrNot,ModelViewSet): """ 受理信息 @@ -135,7 +155,22 @@ class EvaluationDetailViewset(CreateUpdateCustomMixin, PageOrNot,ModelViewSet): return Response(status=status.HTTP_200_OK) +from rest_framework.mixins import ListModelMixin +class CertappunitViewset(PageOrNot, ListModelMixin, GenericViewSet): + perms_map={'*':'certapp_view'} + queryset = Certappunit.objects.all() + serializer_class = CertappunitSerializer + ordering= ['-id'] + @action(methods=['put'], detail=True, perms_map={'put':'certapp_access'}, url_name='certappunit_access') + def access(self, request, pk=None): + """ + 单元评定 + """ + obj = self.get_object() + obj.decision = Dict.objects.get(pk=request.data['decision']) + obj.save() + return Response(status=status.HTTP_200_OK) class ProjectViewSet(RbacFilterSet, ModelViewSet): perms_map = {'get': 'project_view', 'post':'project_create', 'put':'project_update','delete': 'project_delete'} diff --git a/server/apps/system/serializers.py b/server/apps/system/serializers.py index 4628289..6e3c37a 100644 --- a/server/apps/system/serializers.py +++ b/server/apps/system/serializers.py @@ -78,6 +78,10 @@ class OrganizationSerializer(serializers.ModelSerializer): fields = '__all__' +class UserSimpleSerializer(serializers.ModelSerializer): + class Meta: + model = User + fields = ['id', 'name', 'username'] class UserListSerializer(serializers.ModelSerializer): """ 用户列表序列化 diff --git a/server/server/urls.py b/server/server/urls.py index f2f69e6..ea43c9f 100644 --- a/server/server/urls.py +++ b/server/server/urls.py @@ -40,7 +40,7 @@ urlpatterns = [ path('plan/', include('apps.plan.urls')), path('audit/', include('apps.audit.urls')), path('laboratory/', include('apps.laboratory.urls')), - path('accessment/', include('apps.accessment.urls')), + # path('accessment/', include('apps.accessment.urls')), path('docs/', include_docs_urls(title="接口文档", authentication_classes=[], permission_classes=[])), path('signature/', GenSignature.as_view(), name='gen_signature'),