From 86ece01bbd37e315deb695cd04415a3af53ceda9 Mon Sep 17 00:00:00 2001 From: zty Date: Fri, 22 Mar 2024 09:32:43 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E8=83=BD=E5=8A=9B=E9=AA=8C?= =?UTF-8?q?=E8=AF=81=E5=92=8C=E7=9B=91=E7=9D=A3=E6=A3=80=E6=9F=A5=E9=87=8D?= =?UTF-8?q?=E5=A4=8D=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- client/.env.development | 4 +- client/package.json | 3 +- client/src/views/supervisionNew/mytask.vue | 4 +- server/apps/information/serializers.py | 28 ++++++++++ server/apps/information/url.py | 19 +++++++ server/apps/information/views.py | 59 +++++++++++++++++++++- server/apps/supervision/views.py | 33 ++++++++++-- server/server/settings.py | 11 ++-- server/server/settings_dev.py | 17 +++++-- 9 files changed, 159 insertions(+), 19 deletions(-) diff --git a/client/.env.development b/client/.env.development index e00224e..f6c64bf 100644 --- a/client/.env.development +++ b/client/.env.development @@ -3,8 +3,8 @@ ENV = 'development' # base api #VUE_APP_BASE_API = 'http://10.0.11.127:8000/api' -# VUE_APP_BASE_API = 'http://127.0.0.1:2222/api' -VUE_APP_BASE_API = 'https://testsearch.ctc.ac.cn/api' +VUE_APP_BASE_API = 'http://127.0.0.1:2222/api' +# VUE_APP_BASE_API = 'https://testsearch.ctc.ac.cn/api' #VUE_APP_BASE_API = 'http://47.95.0.242:9101/api' diff --git a/client/package.json b/client/package.json index 09754e1..37ee37a 100644 --- a/client/package.json +++ b/client/package.json @@ -26,7 +26,8 @@ "normalize.css": "7.0.0", "nprogress": "0.2.0", "path-to-regexp": "2.4.0", - "vod-js-sdk-v6": "^1.4.12", + "pdfobject": "^2.3.0", + "vod-js-sdk-v6": "^1.4.12", "vue": "2.6.10", "vue-pdf": "^4.2.0", "vue-router": "3.0.6", diff --git a/client/src/views/supervisionNew/mytask.vue b/client/src/views/supervisionNew/mytask.vue index cf9b91e..60956b3 100644 --- a/client/src/views/supervisionNew/mytask.vue +++ b/client/src/views/supervisionNew/mytask.vue @@ -1036,7 +1036,7 @@ }, getPtList(){ let that = this; - getPtList({task2do:that.task2do,page:0}).then((res) => { + getPtList({task2do__task2__year:that.task2Item.task2_.year,page:0}).then((res) => { if (res.code >= 200) { that.ptList=res.data; } @@ -1060,7 +1060,7 @@ }, getOinspectList(){ let that = this; - getOinspectList({task2do:that.task2do,page:0}).then((res) => { + getOinspectList({task2do__task2__year:that.task2Item.task2_.year,page:0}).then((res) => { if (res.code >= 200) { that.oinspectList=res.data; } diff --git a/server/apps/information/serializers.py b/server/apps/information/serializers.py index e69de29..44bec81 100644 --- a/server/apps/information/serializers.py +++ b/server/apps/information/serializers.py @@ -0,0 +1,28 @@ +from rest_framework import serializers +from apps.information.models import AbilityReview, QualityCommendation, QualityActivities, Contact, ExternalAuditors + +class AbilityReviewSerializer(serializers.ModelSerializer): + model = AbilityReview + fields = '__all__' + + +class QualityCommendationSerializer(serializers.ModelSerializer): + model = QualityCommendation + fields = '__all__' + + +class QualityActivitiesSerializer(serializers.ModelSerializer): + model = QualityActivities + fields = '__all __' + + +class ContactSerializer(serializers.ModelSerializer): + model = Contact + fields = '__all__' + + +class ExternalAuditorsSerializer(serializers.ModelSerializer): + model = ExternalAuditors + fields = '__all__' + + diff --git a/server/apps/information/url.py b/server/apps/information/url.py index e69de29..a6f5a1a 100644 --- a/server/apps/information/url.py +++ b/server/apps/information/url.py @@ -0,0 +1,19 @@ +from django.urls import path, include +from rest_framework.routers import DefaultRouter +from .views import AbilityReviewViewSet, \ + QualityCommendationBViewSet, \ + QualityActivitiesViewSet,\ + ContactViewSet, \ + ExternalAuditorsViewSet + +API_BASE_URL = 'api/information/' + +router = DefaultRouter() +router.register(r'abilityreviews', AbilityReviewViewSet, basename='评审情况') +router.register(r'qualitycommendation', QualityCommendationBViewSet, basename='质量表彰') +router.register(r'qualityactivities', QualityActivitiesViewSet, basename='质量活动') +router.register(r'contact', ContactViewSet, basename='实验室联系方式') +router.register(r'externalauditors', ExternalAuditorsViewSet, basename='外审员情况') + + +urlpatterns = [path(API_BASE_URL, include(router.urls)),] \ No newline at end of file diff --git a/server/apps/information/views.py b/server/apps/information/views.py index 91ea44a..be88fe2 100644 --- a/server/apps/information/views.py +++ b/server/apps/information/views.py @@ -1,3 +1,58 @@ -from django.shortcuts import render +from rest_framework import viewsets, mixins +from .models import AbilityReview, QualityCommendation, QualityActivities, Contact, ExternalAuditors +from .serializers import AbilityReviewSerializer, \ + QualityCommendationSerializer, \ + QualityActivitiesSerializer,\ + ContactSerializer, \ + ExternalAuditorsSerializer + + +class AbilityReviewViewSet( mixins.CreateModelMixin, + mixins.ListModelMixin, + mixins.DestroyModelMixin, + mixins.UpdateModelMixin, + viewsets.GenericViewSet): + queryset = AbilityReview.objects.all() + serializer_class = AbilityReviewSerializer + + #自定义查询 + def get_queryset(self): + pass + + +class QualityCommendationBViewSet(mixins.CreateModelMixin, + mixins.ListModelMixin, + mixins.DestroyModelMixin, + mixins.UpdateModelMixin, + viewsets.GenericViewSet): + queryset = QualityCommendation.objects.all() + serializer_class = QualityCommendationSerializer + + +class QualityActivitiesViewSet(mixins.CreateModelMixin, + mixins.ListModelMixin, + mixins.DestroyModelMixin, + mixins.UpdateModelMixin, + viewsets.GenericViewSet): + queryset = QualityActivities.objects.all() + serializer_class = QualityActivitiesSerializer + + +class ContactViewSet(mixins.CreateModelMixin, + mixins.ListModelMixin, + mixins.DestroyModelMixin, + mixins.UpdateModelMixin, + viewsets.GenericViewSet): + queryset = Contact.objects.all() + serializer_class = ContactSerializer + + +class ExternalAuditorsViewSet(mixins.CreateModelMixin, + mixins.ListModelMixin, + mixins.DestroyModelMixin, + mixins.UpdateModelMixin, + viewsets.GenericViewSet): + queryset = ExternalAuditors.objects.all() + serializer_class = ExternalAuditorsSerializer + -# Create your views here. diff --git a/server/apps/supervision/views.py b/server/apps/supervision/views.py index 0f69e87..4203e99 100644 --- a/server/apps/supervision/views.py +++ b/server/apps/supervision/views.py @@ -583,6 +583,11 @@ class Domixin: instance = serializer.save() self.countup_task2do(instance.task2do) + @transaction.atomic + def perform_update(self, serializer): + instance = serializer.save() + self.countup_task2do(instance.task2do) + @transaction.atomic def perform_destroy(self, instance): task2do = instance.task2do @@ -603,6 +608,13 @@ class PgoalDeptViewSet(Domixin, CreateUpdateCustomMixin, ModelViewSet): self.countup_task2do(instance.task2do) class ImpMixin: + def get_queryset(self): + mydept = self.request.user.dept + qs = super().get_queryset() + if has_permission('task2', self.request.user): + return qs + return qs.filter(belong_dept=mydept) + def format_date(self, ind, val): new_val = val if isinstance(val, datetime.datetime): @@ -626,10 +638,10 @@ class ImpMixin: return i[0] raise ParseError('第{}: 请选择固定选项值'.format(ind)) - def make_data(self, data, sheet, i, etype): + def F(self, data, sheet, i, etype): raise NotImplementedError() - def gen_imp_view(self, request, start: int, mySerializer, etype=0): + def gen_imp_view(self, request, start: int, mySerializer, etype=0, mymodel=None, repalce=None, types=None): sr = ImpSerializer(data=request.data) sr.is_valid(raise_exception=True) vdata = sr.validated_data @@ -646,6 +658,18 @@ class ImpMixin: data = {} data['task2do'] = task2do.id data = self.make_data(data, sheet, i, etype) + # 对于能力验证和监督检查进行有则跳过无则更新操作。 + if repalce: + if types.lower()== 'pt': + model_info = mymodel.objects.filter(name=data.get('name'), number=data.get('number')) + if model_info: + i = i + 1 + continue + elif types.lower() == 'oinspect': + model_info = mymodel.objects.filter(checker=data.get('checker'), date_inspect=data.get('date_inspect')) + if model_info: + i = i + 1 + continue datalist.append(data) i = i + 1 sr = mySerializer(data=datalist, many=True, context={'request': request}) @@ -744,6 +768,7 @@ class PtViewSet(ImpMixin, Domixin, CreateUpdateCustomMixin, ModelViewSet): } filterset_fields = ['task2do', 'task2do__belong_dept', 'task2do__task2__year', 'task2do__task2'] + def make_data(self, data, sheet, i, etype): data['name'] = sheet['b'+str(i)].value data['number'] = sheet['c'+str(i)].value @@ -760,7 +785,7 @@ class PtViewSet(ImpMixin, Domixin, CreateUpdateCustomMixin, ModelViewSet): 导入表格 """ - return self.gen_imp_view(request, 5, PtSerializer) + return self.gen_imp_view(request, 5, PtSerializer, 0, Pt, repalce=True, types='pt') class RiskViewSet(ImpMixin, Domixin, CreateUpdateCustomMixin, ModelViewSet): @@ -810,4 +835,4 @@ class OinspectViewSet(ImpMixin, Domixin, CreateUpdateCustomMixin, ModelViewSet): 导入表格 """ - return self.gen_imp_view(request, 5, OinspectSerializer) \ No newline at end of file + return self.gen_imp_view(request, 5, OinspectSerializer, 0, Oinspect, repalce=True, types="oinspect") \ No newline at end of file diff --git a/server/server/settings.py b/server/server/settings.py index aa87013..75a22ea 100644 --- a/server/server/settings.py +++ b/server/server/settings.py @@ -11,11 +11,13 @@ https://docs.djangoproject.com/en/3.0/ref/settings/ """ from datetime import datetime, timedelta -import os +import os, sys + + # Build paths inside the project like this: os.path.join(BASE_DIR, ...) BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) - +sys.path.insert(0, os.path.join(BASE_DIR, 'apps')) # Quick-start development settings - unsuitable for production # See https://docs.djangoproject.com/en/3.0/howto/deployment/checklist/ @@ -23,6 +25,7 @@ BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) # SECURITY WARNING: keep the secret key used in production secret! SECRET_KEY = 'ez9z3a4m*$%srn9ve_t71yd!v+&xn9@0k(e(+l6#g1h=e5i4da' + # SECURITY WARNING: don't run with debug turned on in production! @@ -51,8 +54,8 @@ INSTALLED_APPS = [ 'apps.consulting', 'apps.exam', 'apps.ops', - 'apps.edu' - + 'apps.edu', + 'apps.information' ] MIDDLEWARE = [ diff --git a/server/server/settings_dev.py b/server/server/settings_dev.py index 28f1715..2de3278 100644 --- a/server/server/settings_dev.py +++ b/server/server/settings_dev.py @@ -9,12 +9,21 @@ DATABASES = { # 'HOST': '47.95.0.242', # 'PORT': '5432', # }, - 'default': { +# 'default': { +# 'ENGINE': 'django.db.backends.postgresql', +# 'NAME': 'cma', +# 'USER': 'cma', +# 'PASSWORD': 'cma123', +# 'HOST': '172.16.80.102', +# # 'HOST': '1.203.161.102', +# 'PORT': '5432', +# } + 'default': { 'ENGINE': 'django.db.backends.postgresql', 'NAME': 'cma', - 'USER': 'cma', - 'PASSWORD': 'cma123', - 'HOST': '172.16.80.102', + 'USER': 'postgres', + 'PASSWORD': 'zcDsj2021', + 'HOST': '49.232.14.174', # 'HOST': '1.203.161.102', 'PORT': '5432', }