<template>
|
<div class="content-main">
|
<div class="top-bar">
|
<el-form ref="form" :inline="true" :model="searchData" label-position="left" style="margin-top: 10px;">
|
<el-form-item label="样品编号:">
|
<el-input size="small" v-model="searchData.sample_code" class="input-form" placeholder="请输入样品编号"
|
@keyup.enter.native="getData" />
|
</el-form-item>
|
<el-form-item label="报告单号:">
|
<el-input size="small" v-model="searchData.reportCode" class="input-form" placeholder="请输入报告单号" />
|
</el-form-item>
|
<el-form-item label="申请单号:">
|
<el-input size="small" v-model="searchData.application_code" class="input-form" placeholder="请输入申请单号" />
|
</el-form-item>
|
<el-form-item>
|
<el-button size="small" type="primary" @click="getData()">查询</el-button>
|
<el-button size="small" type="primary" plain @click="resetData()">重置</el-button>
|
</el-form-item>
|
</el-form>
|
<el-form style="margin-top: 10px;">
|
<el-button size="small" @click="exportToPDF" class="rightBtn" type="primary" icon="el-icon-document">导出报告</el-button>
|
</el-form>
|
</div>
|
<div class="library-table">
|
<div class="table-header">
|
<div class="search-bar">
|
<el-radio-group v-model="checkStatus" @change="handleRadioChange">
|
<el-radio-button>全部</el-radio-button>
|
<el-radio-button label="0">待审核</el-radio-button>
|
<el-radio-button label="1">待签字</el-radio-button>
|
<el-radio-button label="2">已完成</el-radio-button>
|
</el-radio-group>
|
<el-checkbox v-model="checked" style="margin-left: 20px">仅看我的</el-checkbox>
|
</div>
|
</div>
|
<el-dialog top="10vh" title="报告预览" :visible.sync="dialogVisible" width="60%">
|
<span slot="footer" class="dialog-footer">
|
<el-button type="primary" @click="printFun()">打印</el-button>
|
</span>
|
<div class="printStyle" v-if="dialogVisible">
|
<Preview id="printRaw" :reportData="reportData" v-if="reportType===0"></Preview>
|
<TestReport ref="testreport" id="printFinished" :reportData="reportData" v-else></TestReport>
|
</div>
|
</el-dialog>
|
<div class="table-box">
|
<el-table ref="reportTable" :max-height="800" :cell-style="{ textAlign: 'left' }" :header-cell-style="{
|
border: '0px',
|
background: '#f5f7fa',
|
color: '#606266',
|
boxShadow: 'inset 0 1px 0 #ebeef5',
|
textAlign: 'left',
|
}" :data="reportTable" @selection-change="handleSelectionChange" style="width: 100%">
|
<el-table-column type="selection" min-width="5%" />
|
<el-table-column prop="type" label="报告类型" min-width="5%">
|
<template slot-scope="scope">
|
<el-tag>{{scope.row.type == 0?'原材料报告':scope.row.type==1?'成品报告':'委托报告'}}</el-tag>
|
</template></el-table-column>
|
<el-table-column prop="materialCode" label="样品编号" sortable min-width="10%">
|
<template slot-scope="scope">
|
<span style="color: #409eff;">
|
{{ scope.row.materialCode }}
|
</span>
|
</template></el-table-column>
|
<el-table-column prop="reportCode" label="报告单号" sortable min-width="10%">
|
<template slot-scope="scope">
|
<span style="color: #409eff;">
|
{{ scope.row.reportCode }}
|
</span>
|
</template></el-table-column>
|
<el-table-column prop="inspectionCode" label="申请单号" sortable min-width="10%">
|
<template slot-scope="scope">
|
<span style="color: #409eff;">
|
{{ scope.row.inspectionCode }}
|
</span>
|
</template></el-table-column>
|
<el-table-column prop="approver" label="审批人" min-width="8%">
|
<template slot-scope="scope">
|
<span>
|
<el-tag v-if="scope.row.approver!=null && scope.row.approver!=''" type="info" icon="el-icon-user">
|
<i class="el-icon-user">{{ scope.row.approver }}</i>
|
</el-tag>
|
</span>
|
</template>
|
</el-table-column>
|
<el-table-column prop="status" label="审批状态" min-width="8%">
|
<template slot-scope="scope">
|
<span>
|
<el-tag type="info">
|
{{
|
scope.row.status == 0
|
? "待审核"
|
: scope.row.status == 1
|
? "待签字" : "已完成"
|
}}
|
</el-tag>
|
</span>
|
</template></el-table-column>
|
<el-table-column prop="conclusion" label="检验结论" min-width="8%">
|
<template slot-scope="scope">
|
<span :style="`color: ${scope.row.conclusion=='合格'?'#67c23a':'#f56c6c'}`">{{scope.row.conclusion}}</span>
|
</template>
|
</el-table-column>
|
<el-table-column prop="name" label="编制人" min-width="8%">
|
<template slot-scope="scope">
|
<span>
|
<el-tag type="info" icon="el-icon-user">
|
<i class="el-icon-user">{{ scope.row.name }}</i>
|
</el-tag>
|
</span>
|
</template>
|
</el-table-column>
|
<el-table-column label="操作" min-width="8%">
|
<template slot-scope="scope">
|
<el-button type="text" size="small" @click="previewFun(scope.row)">查看报告</el-button>
|
</template>
|
</el-table-column>
|
</el-table>
|
<!-- 分页器 -->
|
<div>
|
<el-pagination :current-page="page" :page-sizes="[10, 20, 30, 40]" :page-size="pageSize"
|
layout="total, sizes, prev, pager, next, jumper" :total="total" @size-change="handleSizeChange"
|
@current-change="handleCurrentChange" />
|
</div>
|
</div>
|
</div>
|
<Preview ref="preview" id="printRaw" :reportData="reportData" v-show="false"></Preview>
|
<TestReport ref="testreport" id="printFinished" :reportData="reportData" v-show="false"></TestReport>
|
<el-dialog title="导出pdf" :visible.sync="dialogPdfVisible" width="30%">
|
<span>确定开始导出吗?</span>
|
<span slot="footer" class="dialog-footer">
|
<el-button @click="dialogPdfVisible = false">取 消</el-button>
|
<el-button type="primary" @click="confirmExport">确 定</el-button>
|
</span>
|
</el-dialog>
|
</div>
|
</template>
|
|
<script>
|
import {
|
selectAllReport,
|
getReportData
|
} from "@/api/experiment/checkTheReport";
|
import Preview from "@/components/experiment/checkTheReport/index.vue";
|
import TestReport from "@/components/experiment/template_testReport/index.vue"
|
import PrintJS from 'print-js'
|
import html2pdf from 'html2pdf.js'
|
|
export default {
|
data() {
|
return {
|
reportData: [],
|
reportType: 0,
|
searchData: {
|
sample_code: '',
|
reportCode: '',
|
application_code: ''
|
},
|
checkStatus: undefined,
|
reportTable: [],
|
page: 1,
|
total: 0,
|
pageSize: 10,
|
checked: true,
|
dialogVisible: false,
|
dialogPdfVisible: false,
|
selectedRows: []
|
};
|
},
|
created() {
|
this.getData();
|
},
|
mounted() {},
|
components: {
|
Preview,
|
TestReport
|
},
|
methods: {
|
async queryReportByRCode(code,name) {
|
const resp = await getReportData({
|
code: code
|
});
|
this.reportData = resp.data;
|
this.reportData.preparerName = name;
|
this.dialogVisible = true;
|
console.log(this.reportData);
|
},
|
//查看报告按钮
|
previewFun(row) {
|
this.reportType = row.type;
|
this.queryReportByRCode(row.reportCode,row.name);
|
|
},
|
handleSelectionChange(selection) {
|
this.selectedRows = selection;
|
},
|
// 批量导出报告
|
exportToPDF() {
|
this.dialogPdfVisible = true;
|
},
|
// 确认导出模态框
|
confirmExport() {
|
this.selectedRows.forEach(async row => {
|
const element = document.getElementById('printFinished');
|
console.log(element)
|
// 设置TestReport组件的reportData属性为当前行的报告数据
|
const resp = await getReportData({
|
code: row.reportCode
|
});
|
this.$nextTick(() => {
|
this.$refs.testreport.reportData = resp.data;
|
html2pdf().from(element).save(`exported_${row.reportCode}.pdf`);
|
});
|
});
|
this.dialogPdfVisible = false;
|
this.selectedRows = [];
|
},
|
//打印按钮
|
printFun() {
|
this.dialogVisible = false;
|
PrintJS({
|
printable: this.reportType === 0 ? "printRaw" : "printFinished",
|
type: "html",
|
// header: "原材料检测报告",
|
targetStyles: ["*"],
|
ignoreElements: ["no-ignore"],
|
});
|
},
|
// 状态按钮
|
handleRadioChange() {
|
this.getData();
|
},
|
// 每页条数改变时触发 选择一页显示多少行
|
handleSizeChange(val) {
|
this.pageSize = val;
|
this.getData();
|
},
|
// 当前页改变时触发 跳转其他页
|
handleCurrentChange(val) {
|
this.page = val;
|
this.getData();
|
},
|
// 重置按钮
|
resetData() {
|
this.searchData = {
|
sample_code: '',
|
reportCode: '',
|
application_code: ''
|
},
|
this.page = 1;
|
this.pageSize = 10;
|
this.checkStatus = undefined;
|
this.getData();
|
},
|
// 查询列表
|
async getData() {
|
const params = {
|
page: this.page,
|
pageSize: this.pageSize,
|
name: this.searchData.sample_code ? this.searchData.sample_code : undefined,
|
status: this.checkStatus ? this.checkStatus : undefined,
|
};
|
const {
|
data
|
} = await selectAllReport(params);
|
this.reportTable = data.row;
|
this.total = data.total;
|
},
|
},
|
};
|
</script>
|
|
<style lang="scss" scoped>
|
.top-bar {
|
margin: -25px -15px;
|
background: #fff;
|
display: flex;
|
justify-content: space-between;
|
padding: 5px 24px 0px 24px;
|
|
.input-form {
|
width: 250px;
|
margin-right: 30px;
|
}
|
|
.el-dropdown-link {
|
cursor: pointer;
|
color: #409eff;
|
}
|
|
.el-icon-arrow-down {
|
font-size: 12px;
|
}
|
}
|
|
.library-table {
|
height: 80vh;
|
overflow: scroll;
|
background-color: #fff;
|
flex: 1;
|
margin: 0px -15px;
|
margin-top: 40px;
|
display: flex;
|
flex-direction: column;
|
|
.table-header {
|
padding: 20px;
|
display: flex;
|
justify-content: space-between;
|
|
.el-form-item {
|
margin-bottom: 30px !important;
|
}
|
}
|
|
.table-box {
|
padding: 0px 20px;
|
margin-top: 0px;
|
flex: 1;
|
background: #fff;
|
display: flex;
|
flex-direction: column;
|
|
>div:nth-child(2) {
|
display: flex;
|
justify-content: end;
|
margin: 10px 0;
|
}
|
}
|
|
.printStyle {
|
overflow: scroll;
|
height: 600px;
|
|
.el-button {
|
position: absolute;
|
top: 10vh;
|
left: 90%;
|
}
|
}
|
}
|
</style>
|