AnalysisSystemForRadionucli.../src/views/statistics/detail.vue
2023-07-05 15:14:23 +08:00

591 lines
18 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<a-card :bordered="false" style="margin-left: 20px;height: 100%;">
<div class="detail-top">
<div class="top-back" @click="handleback">
<img class="icon-back" src="../../assets/images/web-statistics/return.png" alt="">
<span style="margin-left: 10px;">return</span>
</div>
<div class="top-actions">
<div class="right-btn">
<img class="icon-download" src="../../assets/images/web-statistics/download.png" alt=""><span style="margin-left: 10px;">ZIP</span>
</div>
<div class="right-btn">
<img class="icon-download" src="../../assets/images/web-statistics/download.png" alt=""><span style="margin-left: 10px;">TXT</span>
</div>
<div class="right-btn">
<img class="icon-view" src="../../assets/images/web-statistics/view.png" alt=""><span style="margin-left: 10px;">View Report</span>
</div>
</div>
</div>
<a-tabs default-active-key="info" @change="handleTabChange">
<a-tab-pane key="info" tab="INFO" v-if="allData.headerBlock===null?false:true">
<template>
<div class="pane-title">GENERAL INFORMATION</div>
<a-row>
<a-col :span="12" class="info-key">Site Code:</a-col>
<a-col :span="12" class="info-val">{{ allData.headerBlock.siteCode }}</a-col>
</a-row>
<a-row>
<a-col :span="12" class="info-key">Detector Code:</a-col>
<a-col :span="12" class="info-val">{{ allData.headerBlock.detectorCode }}</a-col>
</a-row>
<a-row>
<a-col :span="12" class="info-key">System Type:</a-col>
<a-col :span="12" class="info-val">{{ allData.headerBlock.systemType }}</a-col>
</a-row>
<a-row>
<a-col :span="12" class="info-key">Sample Geometry:</a-col>
<a-col :span="12" class="info-val">{{ allData.headerBlock.sampleGeometry }}</a-col>
</a-row>
<a-row>
<a-col :span="12" class="info-key">Spectrum Qualifier:</a-col>
<a-col :span="12" class="info-val">{{ allData.headerBlock.spectrumQualifier }}P</a-col>
</a-row>
<a-row>
<a-col :span="12" class="info-key">Sample Reference Identification:</a-col>
<a-col :span="12" class="info-val">{{ allData.headerBlock.sampleReferenceIdentification }}</a-col>
</a-row>
<a-row>
<a-col :span="12" class="info-key">Measurement Identification:</a-col>
<a-col :span="12" class="info-val">{{ allData.headerBlock.measurementIdentification }}</a-col>
</a-row>
<a-row>
<a-col :span="12" class="info-key">Detector Background Measurement Identification:</a-col>
<a-col :span="12" class="info-val">{{ allData.headerBlock.detectorBackgroundMeasurementId }}</a-col>
</a-row>
<a-row>
<a-col :span="12" class="info-key">Gas Background Measurement Identification:</a-col>
<a-col :span="12" class="info-val">{{ allData.headerBlock.gasBackgroundMeasurementId }}</a-col>
</a-row>
<a-row>
<a-col :span="12" class="info-key">Transmit Time:</a-col>
<a-col :span="12" class="info-val">{{ allData.headerBlock.transmitDate }}</a-col>
</a-row>
</template>
<template v-if="allData.commentBlock && allData.commentBlock.text">
<div class="pane-title">COMMENT</div>
<a-row style="height: auto;">
<a-col class="comment-block" :span="24" v-html="commentText"></a-col>
</a-row>
</template>
<template v-if="allData.acquisitionBlock">
<div class="pane-title">ACQUISITION</div>
<a-row>
<a-col :span="12" class="info-key">Acquisition Time:</a-col>
<a-col :span="12" class="info-val">{{ allData.acquisitionBlock.acquisitionStartDate }}</a-col>
</a-row>
<a-row>
<a-col :span="12" class="info-key">Acquisition Real Time:</a-col>
<a-col :span="12" class="info-val">{{ allData.acquisitionBlock.acquisitionRealTime }}</a-col>
</a-row>
<a-row>
<a-col :span="12" class="info-key">Acquisition Live Time:</a-col>
<a-col :span="12" class="info-val">{{ allData.acquisitionBlock.acquisitionLiveTime }}</a-col>
</a-row>
</template>
<template v-if="allData.calibrationBlock">
<div class="pane-title">CALIBRATION</div>
<a-row>
<a-col :span="12" class="info-key">Date of Last Calibration</a-col>
<a-col :span="12" class="info-val">{{ allData.calibrationBlock.dateOfLastCalibration }}</a-col>
</a-row>
</template>
</a-tab-pane>
<a-tab-pane key="energy" tab="ENERGY" v-if="allData.gEnergyBlock===null?false:true">
<div class="pane-title" style="margin-bottom: 15px;">G ENERGY</div>
<custom-table
size="middle"
rowKey="sampleId"
:columns="columnsEnergy"
:list="dataSourceEnergy"
:pagination="false"
>
</custom-table>
</a-tab-pane>
<a-tab-pane key="resulution" tab="RESOLUTION" v-if="allData.gResolutionBlock===null?false:true">
<div class="pane-title" style="margin-bottom: 15px;">G RESOLUTION</div>
<custom-table
size="middle"
rowKey="sampleId"
:columns="columnsResulution"
:list="dataSourceResulution"
:pagination="false"
>
</custom-table>
</a-tab-pane>
<a-tab-pane key="efficiency" tab="EFFICIENCY" v-if="allData.gEfficiencyBlock===null?false:true">
<div class="pane-title" style="margin-bottom: 15px;">GAMMA EFFICIENCY</div>
<custom-table
size="middle"
rowKey="sampleId"
:columns="columnsEfficiency"
:list="dataSourceEfficiency"
:pagination="false"
>
</custom-table>
</a-tab-pane>
<a-tab-pane key="gamma-spectrum" tab="GAMMA SPECTRUM" v-if="allData.gspectrumBlock===null?false:true">
<div class="pane-title" style="margin-bottom: 15px;">GAMMA SPECTRUM</div>
<div class="gamma-spectrum-row">
<div>
<span class="span-key">Number of Channels</span><span class="row-val">{{ allData.gspectrumBlock.numberGChannels }}</span>
<span class="span-key" style="margin-left: 35px;">Energy Span</span><span class="row-val">{{ allData.gspectrumBlock.energySpan }}</span>
</div>
<div>
<a-checkbox style="margin-right: 15px;" @change="yLogChange">Y log scale</a-checkbox>
<a-button class="row-btn" @click="resetZoom">Reset Zoom</a-button>
</div>
</div>
<div class="gamma-spectrum-chart" id="spectrumChartRef"></div>
</a-tab-pane>
<a-tab-pane key="certificate" tab="CERTIFICATE" v-if="allData.certificateBlock===null?false:true">
<div class="pane-title" style="margin-bottom: 15px;">CERTIFICATE</div>
<div class="certificate-row">
<span class="span-key">Total Source Activity [ Bq ]</span><span class="row-val">{{ allData.certificateBlock.totalSourceActivity }}</span>
<span class="span-key" style="margin-left: 35px;">Assay Date</span><span class="row-val">{{ allData.certificateBlock.assayDate }}</span>
<span class="span-key" style="margin-left: 35px;">Units of Activity</span><span class="row-val">{{ allData.certificateBlock.unitsOfActivity }}</span>
</div>
<custom-table
size="middle"
rowKey="sampleId"
:columns="columnsCertificate"
:list="dataSourceCertificate"
:pagination="false"
>
</custom-table>
</a-tab-pane>
</a-tabs>
</a-card>
</template>
<script>
import * as echarts from 'echarts'
// import allData from "./data.json"
export default {
props: {
allData: {
type: Object,
default: ()=>{}
},
},
watch: {
allData: {
handler(val) {
console.log(val);
},
deep: true,
immediate:true
}
},
data() {
return {
spectrumChart:null,
yAxisType:"value",
loading:true,
myChart:null,
commentText: "",
columnsEnergy: [
{
title: 'G-Energy [keV]',
align: 'left',
dataIndex: 'energy'
},
{
title: 'Centroid channel',
align: 'left',
dataIndex: 'centroid'
},
{
title: 'Uncertainty (channels)',
align: 'left',
dataIndex: 'uncertainty'
},
],
dataSourceEnergy:[],
columnsResulution: [
{
title: 'G-Energy [keV]',
align: 'left',
dataIndex: 'energy'
},
{
title: 'FWHM [keV]',
align: 'left',
dataIndex: 'fwhm'
},
{
title: 'Uncertainty [keV]',
align: 'left',
dataIndex: 'uncertainty'
},
],
dataSourceResulution:[],
columnsEfficiency: [
{
title: 'Energy',
align: 'left',
dataIndex: 'energy'
},
{
title: 'Efficiency',
align: 'left',
dataIndex: 'efficiency'
},
{
title: 'Uncertainty',
align: 'left',
dataIndex: 'uncertainty'
},
],
dataSourceEfficiency: [],
columnsCertificate: [
{
title: 'Nuclide name',
align: 'left',
dataIndex: 'nuclideName'
},
{
title: 'Half-life',
align: 'left',
dataIndex: 'halfLife'
},
{
title: 'Activity',
align: 'left',
dataIndex: 'nuclideActivity'
},
{
title: 'Uncertainty',
align: 'left',
dataIndex: 'uncertainty'
},
{
title: 'Energy',
align: 'left',
dataIndex: 'Genergy'
},
{
title: 'Intensity',
align: 'left',
dataIndex: 'intensity'
},
{
title: 'Electron decay',
align: 'left',
dataIndex: 'electronDecayModeDescriptor'
},
{
title: 'Maximum',
align: 'left',
dataIndex: 'maxBParticleEnergy'
},
{
title: 'Particle B intensity',
align: 'left',
dataIndex: 'particleBIntensity'
}
],
dataSourceCertificate: [],
dataSourceSpectrumY: [],
dataSourceSpectrumX: []
}
},
mounted () {
this.commentText = this.allData.commentBlock && this.allData.commentBlock.text?this.allData.commentBlock.text.replace(/\n/g, "<br />"):""
this.dataSourceEnergy=this.allData.genergyBlock
this.dataSourceResulution=this.allData.gresolutionBlock
this.dataSourceEfficiency = this.allData.gefficiencyBlock
this.dataSourceSpectrum = this.allData.gspectrumBlock.gspectrumSubBlock
this.dataSourceSpectrumX = this.allData.gspectrumBlock.gspectrumSubBlock.map((item, index) => {
return index
})
this.dataSourceCertificate = this.allData.certificateBlock?this.allData.certificateBlock.certificateSubBlock:[]
},
methods: {
yLogChange(e) {
this.yAxisType = e.target.checked?"log":"value"
this.spectrumChart.setOption({
yAxis: {
type: this.yAxisType,
splitLine: {
show: true,
lineStyle: {
color: "rgbA(64, 105, 121, 0.2)"
}
}
},
});
},
resetZoom() {
this.spectrumChart.setOption({
dataZoom: [
{
start: 0,
end: 100
}
],
});
},
handleback() {
this.$emit("back",false)
},
handleTabChange(key) {
if (key === "gamma-spectrum") {
this.$nextTick(() => {
this.drawSpectrumChart()
})
}
},
drawSpectrumChart() {
this.spectrumChart = echarts.init(document.getElementById("spectrumChartRef"))
this.spectrumChart.setOption({
tooltip: {
trigger: 'axis',
formatter: '{a} <br/>{b} : {c}'
},
xAxis: {
// type: 'time',
splitLine: {
show: true,
lineStyle: {
color: "rgbA(64, 105, 121, 0.2)"
},
},
axisTick: {
show: false,
alignWithLabel: true,
interval: 5
},
boundaryGap: false,
data: this.dataSourceSpectrumX
},
grid: {
left: '3%',
right: '4%',
bottom: '10%',
containLabel: true
},
yAxis: {
type: this.yAxisType,
// type: 'log',
splitLine: {
show: true,
lineStyle: {
color: "rgbA(64, 105, 121, 0.2)"
}
}
},
dataZoom: [
{
start: 0,
end: 20
}
],
series: [
{
name: 'Log2',
type: 'line',
itemStyle: { normal: { color: '#0656ff' } },
data: this.dataSourceSpectrum
}
]
})
window.addEventListener("resize", function () {
myChart.resize();
});
}
},
}
</script>
<style lang="less" scoped>
.detail-top{
width: 100%;
height: 50px;
padding: 0 10px;
background-color: rgba(12, 235, 201, 0.05);
border-top: 1px solid rgba(12, 235, 201, 0.3);
border-bottom: 1px solid rgba(12, 235, 201, 0.3);
display: flex;
align-items: center;
justify-content: space-between;
margin-bottom: 16px;
.top-back{
font-family: MicrosoftYaHei;
font-size: 16px;
font-weight: normal;
font-stretch: normal;
letter-spacing: 0px;
color: #69a19f;
cursor: pointer;
.icon-back{
width: 28px;
height: 24px;
}
}
.top-actions{
.right-btn{
display: inline-block;
height: 32px;
line-height: 32px;
padding: 0 12px;
margin-left: 20px;
background-color: #1397a3;
.icon-download{
width: 16px;
height: 19px;
}
.icon-view{
width: 15px;
height: 16px;
}
}
}
}
::v-deep {
.ant-tabs{
height: calc(100% - 66px);
.ant-tabs-top-content{
height: calc(100% - 56px);
.ant-tabs-tabpane{
height: 100%;
overflow: auto;
background-color: #02282b;
}
}
}
.ant-tabs-bar{
width: 100%;
height: 40px;
padding: 0 10px;
background-color: rgba(12, 235, 201, 0.05);
border-top: 1px solid rgba(12, 235, 201, 0.3);
border-bottom: 1px solid rgba(12, 235, 201, 0.3);
}
.ant-tabs-nav .ant-tabs-tab{
height: 30px;
line-height: 30px;
background-color: rgba(58, 236, 240, 0.22);
font-family: BookmanOldStyle;
font-size: 16px;
font-weight: bold;
font-stretch: normal;
letter-spacing: 2px;
color: #c9f6f6;
margin: 0 0 0 10px;
padding: 0 23px;
position: relative;
&::before{
content: "";
position: absolute;
top: 0;
left: 0;
width: 7px;
height: 29px;
color: rgba(58, 236, 240, 0.22);
border: 1px solid #569e9e;
border-right: none;
border-radius: 0;
}
&::after{
content: "";
position: absolute;
top: 0;
right: 0;
width: 7px;
height: 29px;
color: rgba(58, 236, 240, 0.22);
border: 1px solid #569e9e;
border-left: none;
}
&-active{
&::before,
&::after {
border-color: #0cecca !important;
}
}
}
.ant-tabs-ink-bar{
display: none !important
}
.ant-tabs-nav .ant-tabs-tab-active{
color: #2affdf;
}
.ant-tabs-tabpane{
width: 100%;
height: calc(100% - 122px);
border: solid 1px #416f7f;
padding: 15px 20px;
}
.ant-tabs .ant-tabs-top-content > .ant-tabs-tabpane-inactive{
padding: 15px 20px !important
}
.ant-row{
height: 36px;
line-height: 36px;
}
}
.pane-title{
height: 40px;
background-color: rgba(12, 235, 201, 0.05);
line-height: 40px;
font-family: ArialMT;
font-size: 18px;
font-weight: bold;
font-stretch: normal;
letter-spacing: 1px;
color: #0cebc9;
padding: 0 0 0 18px;
}
.info-key{
font-family: ArialMT;
font-size: 16px;
font-weight: bold;
color: #ffffff;
}
.info-val{
font-family: ArialMT;
font-size: 16px;
color: #ade6ee;
}
.span-key{
font-family: MicrosoftYaHei;
font-size: 16px;
color: #ffffff;
}
.comment-block{
background-color: #0d6d76;
margin: 10px 0;
padding: 20px;
line-height: 24px;
border-radius: 4px;
}
.gamma-spectrum-row{
display: flex;
align-items: center;
justify-content: space-between;
.row-val{
font-family: MicrosoftYaHei;
font-size: 16px;
color: #ade6ee;
}
.row-btn{
height: 26px;
background-color: #406979;
line-height: 26px;
border: none;
}
}
.gamma-spectrum-chart{
width: 100%;
height: calc(100% - 81px);
}
.certificate-row{
height: 30px;
display: flex;
align-items: center;
font-family: MicrosoftYaHei;
color: #ade6ee;
margin-bottom: 10px;
}
</style>