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