fix : 修改信息收集模块

This commit is contained in:
zty 2024-07-08 12:53:18 +08:00
parent 8688239b7f
commit 6465758603
8 changed files with 284 additions and 17 deletions

View File

@ -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
})
}

View File

@ -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',

View File

@ -0,0 +1,187 @@
<template>
<div class="app-container">
<el-card class="elHeader">
<el-button type="primary" @click="handleImport">导入文件</el-button>
</el-card>
<el-card style="margin-top: 10px">
<el-table v-loading="listLoading"
:data="tableData.results"
border fit stripe
highlight-current-row>
<el-table-column type="index" width="50" />
<el-table-column label="文件名称" prop="file"></el-table-column>
<el-table-column label="部门" prop="dep"></el-table-column>
<el-table-column label="创建时间" prop="create_time"></el-table-column>
<el-table-column align="center" label="操作" width="120px" fixed="right">
<template slot-scope="scope">
<el-link type="primary" @click="handleDownload(scope)">下载</el-link>
</template>
</el-table-column>
</el-table>
<pagination v-show="tableData.count > 0" :total="tableData.count" :page.sync="listQuery.page"
:limit.sync="listQuery.page_size" @pagination="getTableList" />
</el-card>
<el-dialog
:visible.sync="impDialogVisible"
title="导入"
:close-on-click-modal="false"
>
<el-form
ref="Form"
label-width="200px"
label-position="right"
:model = "form"
>
<el-form-item label="实验室年度报告" prop="file">
<el-upload
ref="upload"
:action="upUrl"
:on-success="handleUpSuccess"
:on-remove="handleRemove"
:on-preview="handlePreview"
:headers="upHeaders"
:file-list="fileList"
:limit="1"
accept=".doc,.docx,.xls,.xlsx,.ppt,.pptx,.pdf,.zip.rar">
<el-button size="small" type="primary">上传文件</el-button>
</el-upload>
</el-form-item>
</el-form>
<div style="text-align: right">
<el-button type="danger" @click="close_dialog">取消</el-button>
<el-button type="primary" @click="submitUpload" :disabled="saveLoading">确认</el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import checkPermission from "@/utils/permission";
import Pagination from "@/components/Pagination"; // secondary package based on el-pagination
import Treeselect from "@riophae/vue-treeselect";
import "@riophae/vue-treeselect/dist/vue-treeselect.css";
import { createYr, yrAll, getyr } from "@/api/report";
import { upUrl, upHeaders } from "@/api/file";
export default {
components: { Pagination, Treeselect },
data(){
return {
form:{
file:''
},
isoading: false, //是否正在加载数据
upHeaders: upHeaders(),
upUrl: upUrl(),
fileList: [],
listLoading: false,
dialogVisible: false,
showExportDialog: false,
saveLoading:false,
impDialogVisible: false,
downloadUrl: process.env.VUE_APP_BASE_API,
excelUrl:'',
selectedYear:'',
tableData: {
count: 0
},
listQuery: {
page: 1,
page_size: 20,
},
};
},
mounted() {
let that = this;
let height1 = document.getElementsByClassName('app-main')[0].clientHeight;
let height2 = document.getElementsByClassName('elHeader')[0].clientHeight;
that.tableHeight = height1 - height2 - 70;
that.getList();
},
methods: {
handleImport(){
this.impDialogVisible = true;
let file_url = '';
file_url = "media/default/检验检测服务业统计数据上报任务.xlsx";
let base_url = this.downloadUrl.substr(0, this.downloadUrl.length - 3);
this.downloadUrl = base_url+file_url;
},
close_dialog(){
this.impDialogVisible = false;
},
getTableList(){
this.getList()
},
submitUpload() {
this.$refs.upload.submit();
this.impDialogVisible = false;
this.saveLoading = true;
createYr(this.form).then(res=>{
if(res.code>=200){
this.saveLoading = false;
this.fileList = [];
this.getList();
}else{
this.$message.error(res.message);
this.saveLoading = false;
this.fileList = [];
this.getList();
}
})
},
getList() {
this.listLoading = true;
this.tableData.results =[];
this.tableData.count =0;
yrAll(this.listQuery).then((response) => {
if (response.data) {
this.tableData = response.data;
}
this.listLoading = false;
}
);
},
handleDownload(scope) {
this.listLoading = true;
this.dialogTableVisible=true;
getyr(scope.row.id).then((response) => {
if (response.code>=200) {
this.downloadFile(response.data.parse_excel)
this.listLoading = false;
}else{
alert('服务器内部错误,请稍后再试')
this.dialogTableVisible=false;
this.listLoading = false;
return
}
});
},
downloadFile(url) {
const link = document.createElement('a');
link.href = url;
link.setAttribute('download', '检验检测服务业统计.xlsx'); // 设置下载文件名
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
},
handlePreview(file) {
if ("url" in file) {
window.open(file.url);
} else {
window.open(file.response.data.path);
}
},
handleUpSuccess(res, file, filelist) {
this.fileList = [file];
this.form.file = res.data.name;
},
handleRemove(file, filelist) {
this.Content.file = null;
this.fileList = [];
},
checkPermission,
}
};
</script>
<style></style>

View File

@ -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,
},
),
]

View File

@ -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)

View File

@ -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__'

View File

@ -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)),

View File

@ -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'}