| | |
| | | <template> |
| | | <div>检测报告</div> |
| | | <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> |
| | | export default { |
| | | 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; |
| | | |
| | | </style> |
| | | .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> |