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> |
<template> |
||||||
<basic-container> |
<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-tabs v-model="activeName" @tab-click="handleClick"> |
||||||
<el-tab-pane label="检验报告" name="1"></el-tab-pane> |
<el-tab-pane label="检验报告" name="1"></el-tab-pane> |
||||||
<el-tab-pane label="曲线" name="2"></el-tab-pane> |
<el-tab-pane label="曲线" name="2"></el-tab-pane> |
||||||
</el-tabs> |
</el-tabs> |
||||||
<workTankLine v-if="activeName=='2'"></workTankLine> |
<workTankLine v-if="activeName=='2'"></workTankLine> |
||||||
<inspectionReport v-if="activeName=='1'"></inspectionReport> |
<inspectionReport v-if="activeName=='1'"></inspectionReport> |
||||||
|
<reportBasic v-if="showBasic" :show-basic="showBasic" @closeDialog="closeDialog" ></reportBasic> |
||||||
</basic-container> |
</basic-container> |
||||||
</template> |
</template> |
||||||
<script> |
<script> |
||||||
import workTankLine from './workTankLine.vue' |
import workTankLine from './workTankLine.vue' |
||||||
import inspectionReport from './inspectionReport.vue' |
import inspectionReport from './inspectionReport.vue' |
||||||
|
import reportBasic from './components/reportBasic.vue' |
||||||
export default { |
export default { |
||||||
components:{workTankLine,inspectionReport}, |
components:{workTankLine,inspectionReport,reportBasic}, |
||||||
data() { |
data() { |
||||||
return { |
return { |
||||||
activeName: '1' |
activeName: '1', |
||||||
|
showBasic:false, |
||||||
} |
} |
||||||
|
}, |
||||||
|
methods:{ |
||||||
|
addBasic(){ |
||||||
|
this.showBasic = true |
||||||
|
console.log('addBasic------------',this.showBasic) |
||||||
|
}, |
||||||
|
// 关闭弹窗 |
||||||
|
closeDialog(val) { |
||||||
|
this.showBasic = false |
||||||
|
}, |
||||||
} |
} |
||||||
} |
} |
||||||
</script> |
</script> |
||||||
|
|||||||
Loading…
Reference in new issue