parent
5dba6c85d5
commit
dcaa6d4e77
13 changed files with 947 additions and 180 deletions
@ -0,0 +1,26 @@ |
||||
import request from '@/axios'; |
||||
|
||||
// 查询槽液信息列表接口
|
||||
export const getList = params =>{ |
||||
return request({ |
||||
url:'/api/blade-desk/QA/InspectionTemplate/list', |
||||
method:'get', |
||||
params |
||||
}) |
||||
} |
||||
|
||||
// 新增
|
||||
export const addTemplate = (data) =>{ |
||||
return request({ |
||||
url:'/api/blade-desk/QA/InspectionTemplate/save', |
||||
method:'post', |
||||
data |
||||
}) |
||||
} |
||||
|
||||
// 标准下拉
|
||||
export const getStandard = (params) =>{ |
||||
return request({ |
||||
|
||||
}) |
||||
} |
||||
@ -0,0 +1,37 @@ |
||||
import request from '@/axios'; |
||||
|
||||
// 列表接口
|
||||
export const getList = params =>{ |
||||
return request({ |
||||
url:'/api/blade-desk/QA/LiquidTankReportConfig/list', |
||||
method:'get', |
||||
params |
||||
}) |
||||
} |
||||
|
||||
// 新增
|
||||
export const addBasic = (data) =>{ |
||||
return request({ |
||||
url:"/api/blade-desk/QA/LiquidTankReportConfig/save", |
||||
method:'post', |
||||
data |
||||
}) |
||||
} |
||||
|
||||
// 修改
|
||||
export const editBasic = (data) =>{ |
||||
return request({ |
||||
url:'/api/blade-desk/QA/LiquidTankReportConfig/update', |
||||
method:"post", |
||||
data |
||||
}) |
||||
} |
||||
|
||||
// 删除
|
||||
export const deleteBasic = (params) =>{ |
||||
return request({ |
||||
url:'/api/blade-desk/QA/LiquidTankReportConfig/remove', |
||||
method:'post', |
||||
params |
||||
}) |
||||
} |
||||
@ -0,0 +1,54 @@ |
||||
import html2canvas from 'html2canvas'; |
||||
import jsPDF from 'jspdf'; |
||||
// 引入ECharts(关键:和组件中引入的方式保持一致)
|
||||
import * as echarts from 'echarts'; |
||||
|
||||
/** |
||||
* 导出ECharts图表为PDF |
||||
* @param {String} domId - 包含ECharts图表的容器DOM ID |
||||
* @param {String} pdfName - 导出的PDF文件名 |
||||
*/ |
||||
export function exportEchartsToPdf(domId, pdfName = 'echarts_chart.pdf') { |
||||
const container = document.getElementById(domId); |
||||
if (!container) { |
||||
console.error('未找到图表容器'); |
||||
return; |
||||
} |
||||
|
||||
// 先让ECharts图表重绘(避免canvas模糊)
|
||||
const charts = container.querySelectorAll('.echarts'); |
||||
charts.forEach(chartDom => { |
||||
// 关键修复:使用引入的echarts而非window.echarts
|
||||
const chartInstance = echarts.getInstanceByDom(chartDom); |
||||
if (chartInstance) { |
||||
chartInstance.resize(); // 重绘图表
|
||||
} |
||||
}); |
||||
|
||||
// 使用html2canvas将DOM转为canvas
|
||||
html2canvas(container, { |
||||
useCORS: true, // 解决跨域图片问题(若图表有图片)
|
||||
scale: 2, // 放大2倍,避免PDF模糊
|
||||
dpi: 300 // 提高清晰度
|
||||
}).then(canvas => { |
||||
// 获取canvas宽高
|
||||
const contentWidth = canvas.width; |
||||
const contentHeight = canvas.height; |
||||
|
||||
// PDF一页的尺寸(A4比例:595×842)
|
||||
const pageWidth = 595; |
||||
const pageHeight = (contentHeight * pageWidth) / contentWidth; // 按宽度等比缩放高度
|
||||
|
||||
// 将canvas转为图片数据
|
||||
const imgData = canvas.toDataURL('image/jpeg', 1.0); |
||||
|
||||
// 创建PDF实例
|
||||
const pdf = new jsPDF('portrait', 'pt', 'a4'); |
||||
// 添加图片到PDF
|
||||
pdf.addImage(imgData, 'JPEG', 0, 0, pageWidth, pageHeight); |
||||
// 保存PDF
|
||||
pdf.save(pdfName); |
||||
}).catch(err => { |
||||
console.error('导出PDF失败:', err); |
||||
}); |
||||
} |
||||
@ -0,0 +1,213 @@ |
||||
<template> |
||||
<el-dialog |
||||
title="信息维护" |
||||
append-to-body |
||||
:modelValue="showBasic" |
||||
width="100%" |
||||
fullscreen |
||||
@close="closeDialog" |
||||
> |
||||
<avue-crud |
||||
:option="option" |
||||
:table-loading="loading" |
||||
:data="data" |
||||
v-model:search="search" |
||||
v-model:page="page" |
||||
v-model="form" |
||||
ref="crud" |
||||
@row-update="rowUpdate" |
||||
@row-save="rowSave" |
||||
@row-del="rowDel" |
||||
@search-change="searchChange" |
||||
@search-reset="searchReset" |
||||
@selection-change="selectionChange" |
||||
@current-change="currentChange" |
||||
@size-change="sizeChange" |
||||
@refresh-change="refreshChange" |
||||
@on-load="onLoad" |
||||
></avue-crud> |
||||
</el-dialog> |
||||
</template> |
||||
|
||||
<script> |
||||
import {getList,addBasic,editBasic,deleteBasic} from '@/api/tankSolutionSystem/reportBasic' |
||||
export default { |
||||
props:{ |
||||
showBasic:{ |
||||
type:Boolean, |
||||
default:false |
||||
} |
||||
}, |
||||
data(){ |
||||
return { |
||||
loading:false, |
||||
data:[], |
||||
page:{ |
||||
pageSize: 10, |
||||
currentPage: 1, |
||||
total: 0, |
||||
}, |
||||
search:{}, |
||||
form:{}, |
||||
option:{ |
||||
tip: false, |
||||
height: 'auto', |
||||
calcHeight: 32, |
||||
columnSort: true, |
||||
searchShow: true, |
||||
searchMenuSpan: 18, |
||||
searchIcon: true, |
||||
searchIndex: 3, |
||||
tree: false, |
||||
border: true, |
||||
index: false, |
||||
selection: true, |
||||
viewBtn: true, |
||||
delBtn: true, |
||||
addBtn: true, |
||||
editBtn: true, |
||||
editBtnText: '修改', |
||||
viewBtnText: '详情', |
||||
addBtnIcon: ' ', |
||||
viewBtnIcon: ' ', |
||||
delBtnIcon: ' ', |
||||
editBtnIcon: ' ', |
||||
labelWidth: 120, |
||||
dialogWidth: 600, |
||||
dialogClickModal: false, |
||||
searchEnter: true, |
||||
filterBtn: true, |
||||
searchShowBtn: false, |
||||
excelBtn: true, |
||||
showOverflowTooltip: true, |
||||
align: 'center', |
||||
searchLabelPosition: 'left', |
||||
searchGutter: 24, |
||||
searchSpan: 6, |
||||
menuAlign: 'left', |
||||
gridBtn: false, |
||||
searchMenuPosition: 'right', |
||||
column: [ |
||||
{ |
||||
label: '作业中心', |
||||
prop: 'wcId', |
||||
type:'select', |
||||
sortable: true, |
||||
filter: true, |
||||
search: true, |
||||
dicUrl:'/blade-desk/BA/WorkCenter/listForSelect', |
||||
span: 24, |
||||
props: { |
||||
label: 'wcName', |
||||
value: 'id', |
||||
}, |
||||
}, |
||||
{ |
||||
label: '报告名称', |
||||
prop: 'namePrefix', |
||||
type: 'input', |
||||
search: false, |
||||
sortable: true, |
||||
filter: true, |
||||
span: 24, |
||||
}, |
||||
{ |
||||
label: '表号', |
||||
prop: 'reportCode', |
||||
type: 'input', |
||||
search: false, |
||||
sortable: true, |
||||
filter: true, |
||||
span: 24, |
||||
}, |
||||
{ |
||||
label: '规范', |
||||
prop: 'norm', |
||||
type: 'input', |
||||
search: false, |
||||
sortable: true, |
||||
filter: true, |
||||
span: 24, |
||||
}, |
||||
] |
||||
} |
||||
} |
||||
}, |
||||
mounted(){ |
||||
|
||||
}, |
||||
methods:{ |
||||
closeDialog(){ |
||||
this.$emit('closeDialog'); |
||||
}, |
||||
// 点击删除按钮 |
||||
rowDel(row) { |
||||
this.$confirm('确定删除此条数据?', { |
||||
confirmButtonText: '确定', |
||||
cancelButtonText: '取消', |
||||
type: 'warning', |
||||
}).then(() => { |
||||
deleteBasic({ids:row.id}).then(res =>{ |
||||
if(res.data.code == 200){ |
||||
this.$message.success('删除成功') |
||||
this.onLoad() |
||||
} |
||||
}) |
||||
}); |
||||
}, |
||||
rowSave(row, done, loading) { |
||||
addBasic(row).then(res =>{ |
||||
if(res.data.code == 200){ |
||||
this.$message.success('新增成功') |
||||
this.onLoad() |
||||
done() |
||||
} |
||||
}) |
||||
}, |
||||
rowUpdate(row, index, done, loading) { |
||||
editBasic(row).then(res =>{ |
||||
this.$message.success('修改成功') |
||||
this.onLoad() |
||||
done() |
||||
}) |
||||
|
||||
}, |
||||
searchReset() { |
||||
this.search = {}; |
||||
this.onLoad(); |
||||
}, |
||||
searchChange(params, done) { |
||||
this.search = params; |
||||
this.page.currentPage = 1; |
||||
this.onLoad(); |
||||
done(); |
||||
}, |
||||
currentChange(currentPage) { |
||||
this.page.currentPage = currentPage; |
||||
}, |
||||
sizeChange(pageSize) { |
||||
this.page.pageSize = pageSize; |
||||
}, |
||||
refreshChange() { |
||||
this.onLoad(); |
||||
}, |
||||
onLoad(){ |
||||
this.loading = true |
||||
getList({ |
||||
current:this.page.currentPage, |
||||
size:this.page.pageSize, |
||||
...this.search |
||||
}).then(res =>{ |
||||
this.data = res.data.data.records |
||||
this.page.total = res.data.data.total |
||||
this.loading = false |
||||
}) |
||||
}, |
||||
} |
||||
|
||||
} |
||||
</script> |
||||
|
||||
<style> |
||||
|
||||
</style> |
||||
@ -1,22 +1,36 @@ |
||||
<template> |
||||
<basic-container> |
||||
<el-button type="primary" style="float:right;margin-bottom:5px;" @click="addBasic">报告基本信息维护</el-button> |
||||
<el-tabs v-model="activeName" @tab-click="handleClick"> |
||||
<el-tab-pane label="检验报告" name="1"></el-tab-pane> |
||||
<el-tab-pane label="曲线" name="2"></el-tab-pane> |
||||
</el-tabs> |
||||
<workTankLine v-if="activeName=='2'"></workTankLine> |
||||
<inspectionReport v-if="activeName=='1'"></inspectionReport> |
||||
<reportBasic v-if="showBasic" :show-basic="showBasic" @closeDialog="closeDialog" ></reportBasic> |
||||
</basic-container> |
||||
</template> |
||||
<script> |
||||
import workTankLine from './workTankLine.vue' |
||||
import inspectionReport from './inspectionReport.vue' |
||||
import reportBasic from './components/reportBasic.vue' |
||||
export default { |
||||
components:{workTankLine,inspectionReport}, |
||||
components:{workTankLine,inspectionReport,reportBasic}, |
||||
data() { |
||||
return { |
||||
activeName: '1' |
||||
activeName: '1', |
||||
showBasic:false, |
||||
} |
||||
}, |
||||
methods:{ |
||||
addBasic(){ |
||||
this.showBasic = true |
||||
console.log('addBasic------------',this.showBasic) |
||||
}, |
||||
// 关闭弹窗 |
||||
closeDialog(val) { |
||||
this.showBasic = false |
||||
}, |
||||
} |
||||
} |
||||
</script> |
||||
|
||||
Loading…
Reference in new issue