diff --git a/client/src/api/report.js b/client/src/api/report.js index 8b64127..cee1ce8 100644 --- a/client/src/api/report.js +++ b/client/src/api/report.js @@ -8,17 +8,33 @@ export function parsePDF(data) { }) } - export function pdfAll(query) { - return request({ - url: '/info/pdf/', - method: 'get', - params: query - }) - } export function getpdf(id) { return request({ url: `/info/pdf/${id}/`, method: 'get' }) +} + +export function getyr(id) { + return request({ + url: `/info/yr/${id}/`, + method: 'get' + }) +} + +export function yrAll(query) { + return request({ + url: '/info/yr/', + method: 'get', + params: query + }) +} + +export function createYr(data) { + return request({ + url: '/info/yr/', + method: 'post', + data + }) } \ No newline at end of file diff --git a/client/src/router/index.js b/client/src/router/index.js index 39efd54..709a8de 100644 --- a/client/src/router/index.js +++ b/client/src/router/index.js @@ -462,11 +462,17 @@ export const asyncRoutes = [ component: () => import('@/views/informatiomCollect/externalAuditor.vue'), meta: { title: '外审员情况', perms: ['infoCollect_EA'] } }, + { + path: 'yearReportupLoad', + name: 'yearReportupLoad', + component: () => import('@/views/informatiomCollect/yearReportUpload.vue'), + meta: { title: '实验室年度报告', perms: ['infoCollect_report'] } + }, { path: 'yearReport', name: 'yearReport', component: () => import('@/views/informatiomCollect/yearReport.vue'), - meta: { title: '实验室年度报告', perms: ['infoCollect_report'] } + meta: { title: '年度统计调查数据', perms: ['infoCollect_report'] } }, { path: 'smsMessage', diff --git a/client/src/views/informatiomCollect/yearReportUpload.vue b/client/src/views/informatiomCollect/yearReportUpload.vue new file mode 100644 index 0000000..4c864ae --- /dev/null +++ b/client/src/views/informatiomCollect/yearReportUpload.vue @@ -0,0 +1,187 @@ + + + diff --git a/server/apps/information/migrations/0058_auto_20240708_1230.py b/server/apps/information/migrations/0058_auto_20240708_1230.py new file mode 100644 index 0000000..11fffb1 --- /dev/null +++ b/server/apps/information/migrations/0058_auto_20240708_1230.py @@ -0,0 +1,41 @@ +# Generated by Django 3.2.12 on 2024-07-08 04:30 + +import datetime +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion +from django.utils.timezone import utc +import django.utils.timezone + + +class Migration(migrations.Migration): + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('system', '0023_alter_user_first_name'), + ('information', '0057_auto_20240628_1422'), + ] + + operations = [ + migrations.AlterField( + model_name='qualification', + name='change_date', + field=models.DateField(blank=True, default=datetime.datetime(2024, 7, 8, 4, 29, 59, 126903, tzinfo=utc), null=True, verbose_name='变更日期'), + ), + migrations.CreateModel( + name='YearReport', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('create_time', models.DateTimeField(default=django.utils.timezone.now, help_text='创建时间', verbose_name='创建时间')), + ('update_time', models.DateTimeField(auto_now=True, help_text='修改时间', verbose_name='修改时间')), + ('is_deleted', models.BooleanField(default=False, help_text='删除标记', verbose_name='删除标记')), + ('file', models.CharField(blank=True, max_length=100, null=True, verbose_name='文件路径')), + ('belong_dept', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='yearreport_belong_dept', to='system.organization', verbose_name='所属部门')), + ('create_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='yearreport_create_by', to=settings.AUTH_USER_MODEL, verbose_name='创建人')), + ('update_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='yearreport_update_by', to=settings.AUTH_USER_MODEL, verbose_name='最后编辑人')), + ], + options={ + 'abstract': False, + }, + ), + ] diff --git a/server/apps/information/models.py b/server/apps/information/models.py index 70de678..53065b6 100644 --- a/server/apps/information/models.py +++ b/server/apps/information/models.py @@ -140,3 +140,7 @@ class Parsepdf(CommonBDModel): class Meta: verbose_name = '解析pdf' db_table = 'parsepdf' + + +class YearReport(CommonBDModel): + file = models.CharField(max_length=100, verbose_name='文件路径', null=True, blank=True) \ No newline at end of file diff --git a/server/apps/information/serializers.py b/server/apps/information/serializers.py index 59158ce..cf07c2f 100644 --- a/server/apps/information/serializers.py +++ b/server/apps/information/serializers.py @@ -1,7 +1,7 @@ from rest_framework import serializers from apps.system.serializers import OrganizationSimpleSerializer from apps.system.models import Organization -from .models import AbilityReview, QualityCommendation, QualityActivities, Contact, ExternalAuditors, AuditLog, Qualification, Parsepdf +from .models import AbilityReview, QualityCommendation, QualityActivities, Contact, ExternalAuditors, AuditLog, Qualification, Parsepdf, YearReport from django.utils import timezone class BaseMeta: @@ -71,3 +71,9 @@ class ParsepdfSerializer(serializers.ModelSerializer): class Meta(BaseMeta): model = Parsepdf fields = '__all__' + +class YearReportSerializer(serializers.ModelSerializer): + dep = serializers.CharField(source='belong_dept.name', read_only=True) + class Meta(BaseMeta): + model = YearReport + fields = '__all__' diff --git a/server/apps/information/urls.py b/server/apps/information/urls.py index f415ee4..5d694be 100644 --- a/server/apps/information/urls.py +++ b/server/apps/information/urls.py @@ -1,6 +1,6 @@ from django.urls import path, include from rest_framework import routers -from .views import AbilityReviewViewSet,sendMsgInfo, AuditLogViewSet, QualityCommendationViewSet, QualityActivitiesViewSet, ParsePdfViewSet, QualiChangeViewSet, ContactViewSet, ExternalAuditorsViewSet, QualificationViewSet +from .views import AbilityReviewViewSet,sendMsgInfo, AuditLogViewSet, QualityCommendationViewSet,yearReportViewset, QualityActivitiesViewSet, ParsePdfViewSet, QualiChangeViewSet, ContactViewSet, ExternalAuditorsViewSet, QualificationViewSet router = routers.DefaultRouter() router.register('ar', AbilityReviewViewSet, basename='abilityreviews') @@ -12,6 +12,7 @@ router.register('faq', QualificationViewSet, basename='faq') router.register('faqch', QualiChangeViewSet, basename='faqch') router.register('ad', AuditLogViewSet, basename='ad') router.register('pdf', ParsePdfViewSet, basename='pdf') +router.register('yr', yearReportViewset, basename='yr') urlpatterns = [ path('', include(router.urls)), diff --git a/server/apps/information/views.py b/server/apps/information/views.py index 72f3fc0..f85abfb 100644 --- a/server/apps/information/views.py +++ b/server/apps/information/views.py @@ -317,14 +317,14 @@ class ContactViewSet(ImpMixin, CreateUpdateCustomMixin, ModelViewSet): def get_queryset(self): qs = super().get_queryset() - if self.request.method == 'GET': - return qs - else: - return qs.filter(belong_dept__in=get_child_queryset2(self.request.user.dept)) + # if self.request.method == 'GET': + # return qs + # else: + # return qs.filter(belong_dept__in=get_child_queryset2(self.request.user.dept)) - # if has_permission('ability_review_jygl', self.request.user): - # return qs - # return qs.filter(belong_dept__in=get_child_queryset2(self.request.user.dept)) + if has_permission('ability_review_jygl', self.request.user): + return qs + return qs.filter(belong_dept__in=get_child_queryset2(self.request.user.dept)) def build_data(self, sheet, start): data_list = [] @@ -531,3 +531,9 @@ class sendMsgInfo(APIView): for user in reci_users: sendmessage(subject,message, user) return Response({"message":"发送成功"}, status = status.HTTP_200_OK) + + +class yearReportViewset(RbacFilterSet, CreateUpdateCustomMixin, ModelViewSet): + queryset = YearReport.objects.all() + serializer_class = YearReportSerializer + perms_map = {'get': '*', 'post': 'yr_create'} \ No newline at end of file