-
-
@@ -154,11 +146,10 @@ export default {
props:['certapp'],
data() {
return {
- tableData: { count: 0 },
+ tableData: [],
listLoading: true,
listQuery: {
- page: 1,
- page_size: 20,
+ pageoff:true,
certappunit_certunit__certapp:this.certapp
},
formData: {
diff --git a/client/src/views/system/dict.vue b/client/src/views/system/dict.vue
index e001527..a1f0bc1 100644
--- a/client/src/views/system/dict.vue
+++ b/client/src/views/system/dict.vue
@@ -121,7 +121,7 @@
-
+
@@ -309,6 +309,9 @@ export default {
})
},
async confirm1(form) {
+ if(this.dicttype.parent==undefined){
+ this.dicttype.parent = null
+ }
this.$refs[form].validate(valid => {
if (valid) {
const isEdit = this.dgT1 === 'edit'
@@ -363,7 +366,7 @@ export default {
return false
}
})
- }
+ },
}
}
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/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 8343c90..eea3c6a 100644
--- a/server/apps/project/models.py
+++ b/server/apps/project/models.py
@@ -105,6 +105,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
@@ -205,6 +211,11 @@ class Certappunit(CommonBModel):
certunit = models.ForeignKey('crm.Certunit', verbose_name='单元', on_delete=models.CASCADE, related_name='certappunit_certunit')
certapp = models.ForeignKey(CertApp, verbose_name='所属业务', on_delete = models.CASCADE, related_name='certappunit_certapp')
testorg = models.ForeignKey('laboratory.TestOrg', verbose_name='检测机构', on_delete=models.SET_NULL, null=True, blank=True)
+
+ # 认证评定
+ decision = models.ForeignKey(Dict,verbose_name='认证决定', on_delete=models.CASCADE, related_name='unitaccess_decision', null=True, blank=True)
+
+
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 9118981..19a9975 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):
"""
受理信息
@@ -125,7 +145,19 @@ class EvaluationDetailViewset(CreateUpdateCustomMixin, PageOrNot,ModelViewSet):
ordering = ['-create_time']
+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'),