feat: 增加Interactive Tool弹窗中的部分二级弹窗,对接样本类型为beta-gamma的部分数据
This commit is contained in:
parent
09e77962d2
commit
8fb0089be1
|
@ -1,80 +1,120 @@
|
|||
<template>
|
||||
<div class="beta-gamma-analysis">
|
||||
<div class="beta-gamma-spectrum-sample">
|
||||
<beta-gamma-chart-container>
|
||||
<template slot="title">
|
||||
Beta-Gamma Spectrum: Sample
|
||||
</template>
|
||||
<beta-gamma-spectrum-chart
|
||||
ref="betaGammaChartRef"
|
||||
:data="twoDData"
|
||||
@positionChange="handlePositionChange"
|
||||
@rangeChange="handleRangeChange"
|
||||
/>
|
||||
</beta-gamma-chart-container>
|
||||
<!-- 二级交互栏 -->
|
||||
<div class="spectrum-analysis-sub-operators">
|
||||
<pop-over-with-icon placement="bottomLeft">
|
||||
Detailed-Information
|
||||
<detailed-infomation slot="content" />
|
||||
</pop-over-with-icon>
|
||||
<pop-over-with-icon placement="bottomLeft">
|
||||
QC Flags
|
||||
<qc-flags slot="content" :data="{ collectionTime: '123' }" />
|
||||
</pop-over-with-icon>
|
||||
<pop-over-with-icon placement="bottomLeft" style="width: 159px" v-model="spectraVisible">
|
||||
Spectra
|
||||
<spectra slot="content" v-model="spectraType" @input="spectraVisible = false" />
|
||||
</pop-over-with-icon>
|
||||
</div>
|
||||
<div class="beta-and-gamma-spectrum">
|
||||
<div class="spectrum-charts">
|
||||
<div class="gamma-spectrum">
|
||||
<div class="gamma-spectrum-item">
|
||||
<beta-gamma-chart-container>
|
||||
<template slot="title">
|
||||
Gamma Spectrum: Original
|
||||
</template>
|
||||
<spectrum-line-chart ref="lineChart1Ref" @rangeChange="handleLineChartRangeChange($event, 'y')" />
|
||||
</beta-gamma-chart-container>
|
||||
</div>
|
||||
<div class="gamma-spectrum-item">
|
||||
<beta-gamma-chart-container>
|
||||
<template slot="title">
|
||||
Gamma Spectrum: Projected
|
||||
</template>
|
||||
<spectrum-line-chart ref="lineChart2Ref" @rangeChange="handleLineChartRangeChange($event, 'y')" />
|
||||
</beta-gamma-chart-container>
|
||||
</div>
|
||||
</div>
|
||||
<div class="gamma-spectrum">
|
||||
<div class="gamma-spectrum-item">
|
||||
<beta-gamma-chart-container>
|
||||
<template slot="title">
|
||||
Beta Spectrum: Original
|
||||
</template>
|
||||
<spectrum-line-chart
|
||||
ref="lineChart3Ref"
|
||||
title="Beta"
|
||||
color="#00ff1e"
|
||||
@rangeChange="handleLineChartRangeChange($event, 'x')"
|
||||
/>
|
||||
</beta-gamma-chart-container>
|
||||
</div>
|
||||
<div class="gamma-spectrum-item">
|
||||
<beta-gamma-chart-container>
|
||||
<template slot="title">
|
||||
Beta Spectrum: Projected
|
||||
</template>
|
||||
<spectrum-line-chart
|
||||
ref="lineChart4Ref"
|
||||
title="Beta"
|
||||
color="#00ff1e"
|
||||
@rangeChange="handleLineChartRangeChange($event, 'x')"
|
||||
/>
|
||||
</beta-gamma-chart-container>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="result-display">
|
||||
<!-- 二级交互栏结束 -->
|
||||
<!-- 主体部分 -->
|
||||
<div class="beta-gamma-analysis-main">
|
||||
<!-- 左侧图表 -->
|
||||
<div class="beta-gamma-spectrum-sample">
|
||||
<beta-gamma-chart-container>
|
||||
<template slot="title">
|
||||
Result display
|
||||
Beta-Gamma Spectrum: Sample
|
||||
</template>
|
||||
<result-display :data="resultDisplay"></result-display>
|
||||
<beta-gamma-spectrum-chart
|
||||
ref="betaGammaChartRef"
|
||||
:data="histogramDataList"
|
||||
@positionChange="handlePositionChange"
|
||||
@rangeChange="handleRangeChange"
|
||||
/>
|
||||
</beta-gamma-chart-container>
|
||||
</div>
|
||||
</div>
|
||||
<!-- 左侧图表结束 -->
|
||||
|
||||
<!-- Comparison Modal 开始 -->
|
||||
<comparison-modal v-model="comparisonModalVisible" />
|
||||
<!-- Comparison Modal 结束 -->
|
||||
<!-- 右侧 -->
|
||||
<div class="beta-and-gamma-spectrum">
|
||||
<!-- 四个图表开始 -->
|
||||
<div class="spectrum-charts">
|
||||
<div class="gamma-spectrum">
|
||||
<div class="gamma-spectrum-item">
|
||||
<beta-gamma-chart-container>
|
||||
<template slot="title">
|
||||
Gamma Spectrum: Original
|
||||
</template>
|
||||
<spectrum-line-chart
|
||||
ref="lineChart1Ref"
|
||||
:data="gammaOriginalData"
|
||||
@rangeChange="handleLineChartRangeChange($event, 'y')"
|
||||
/>
|
||||
</beta-gamma-chart-container>
|
||||
</div>
|
||||
<div class="gamma-spectrum-item">
|
||||
<beta-gamma-chart-container>
|
||||
<template slot="title">
|
||||
Gamma Spectrum: Projected
|
||||
</template>
|
||||
<spectrum-line-chart
|
||||
ref="lineChart2Ref"
|
||||
:data="betaProjectedData"
|
||||
@rangeChange="handleLineChartRangeChange($event, 'y')"
|
||||
/>
|
||||
</beta-gamma-chart-container>
|
||||
</div>
|
||||
</div>
|
||||
<div class="gamma-spectrum">
|
||||
<div class="gamma-spectrum-item">
|
||||
<beta-gamma-chart-container>
|
||||
<template slot="title">
|
||||
Beta Spectrum: Original
|
||||
</template>
|
||||
<spectrum-line-chart
|
||||
ref="lineChart3Ref"
|
||||
:data="betaOriginalData"
|
||||
title="Beta"
|
||||
color="#00ff1e"
|
||||
@rangeChange="handleLineChartRangeChange($event, 'x')"
|
||||
/>
|
||||
</beta-gamma-chart-container>
|
||||
</div>
|
||||
<div class="gamma-spectrum-item">
|
||||
<beta-gamma-chart-container>
|
||||
<template slot="title">
|
||||
Beta Spectrum: Projected
|
||||
</template>
|
||||
<spectrum-line-chart
|
||||
ref="lineChart4Ref"
|
||||
:data="gammaProjectedData"
|
||||
title="Beta"
|
||||
color="#00ff1e"
|
||||
@rangeChange="handleLineChartRangeChange($event, 'x')"
|
||||
/>
|
||||
</beta-gamma-chart-container>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- 四个图表结束 -->
|
||||
|
||||
<!-- 结果显示开始 -->
|
||||
<div class="result-display">
|
||||
<beta-gamma-chart-container>
|
||||
<template slot="title">
|
||||
Result display
|
||||
</template>
|
||||
<result-display :data="resultDisplay"></result-display>
|
||||
</beta-gamma-chart-container>
|
||||
</div>
|
||||
<!-- 结果显示结束 -->
|
||||
</div>
|
||||
<!-- 右侧结束 -->
|
||||
|
||||
<!-- Comparison Modal 开始 -->
|
||||
<comparison-modal v-model="comparisonModalVisible" />
|
||||
<!-- Comparison Modal 结束 -->
|
||||
</div>
|
||||
<!-- 主体部分结束 -->
|
||||
</div>
|
||||
</template>
|
||||
|
||||
|
@ -84,8 +124,10 @@ import BetaGammaSpectrumChart from './components/BetaGammaSpectrumChart.vue'
|
|||
import ComparisonModal from './components/Modals/ComparisonModal.vue'
|
||||
import ResultDisplay from './components/ResultDisplay.vue'
|
||||
import SpectrumLineChart from './components/SpectrumLineChart.vue'
|
||||
|
||||
import twoDData from './data.json'
|
||||
import DetailedInfomation from './components/SubOperators/DetailedInfomation.vue'
|
||||
import PopOverWithIcon from './components/SubOperators/PopOverWithIcon.vue'
|
||||
import QcFlags from './components/SubOperators/QcFlags.vue'
|
||||
import Spectra from './components/SubOperators/Spectra.vue'
|
||||
|
||||
export default {
|
||||
components: {
|
||||
|
@ -93,10 +135,23 @@ export default {
|
|||
SpectrumLineChart,
|
||||
ResultDisplay,
|
||||
BetaGammaSpectrumChart,
|
||||
ComparisonModal
|
||||
ComparisonModal,
|
||||
DetailedInfomation,
|
||||
|
||||
PopOverWithIcon,
|
||||
QcFlags,
|
||||
Spectra
|
||||
},
|
||||
props: {
|
||||
data: {
|
||||
type: Object
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
spectraVisible: false,
|
||||
spectraType: 'Sample Data',
|
||||
|
||||
resultDisplay: [
|
||||
{
|
||||
id: 1,
|
||||
|
@ -127,13 +182,16 @@ export default {
|
|||
mdc: '0.03464'
|
||||
}
|
||||
],
|
||||
twoDData: {},
|
||||
histogramDataList: [],
|
||||
|
||||
gammaOriginalData: [],
|
||||
betaOriginalData: [],
|
||||
betaProjectedData: [],
|
||||
gammaProjectedData: [],
|
||||
|
||||
comparisonModalVisible: false
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.getData()
|
||||
},
|
||||
methods: {
|
||||
resize() {
|
||||
this.$refs.betaGammaChartRef && this.$refs.betaGammaChartRef.resize()
|
||||
|
@ -143,11 +201,6 @@ export default {
|
|||
this.$refs.lineChart4Ref && this.$refs.lineChart4Ref.resize()
|
||||
},
|
||||
|
||||
async getData() {
|
||||
await 0
|
||||
this.twoDData = twoDData
|
||||
},
|
||||
|
||||
// 鼠标在左侧2d图表上移动时
|
||||
handlePositionChange([xAxis, yAxis]) {
|
||||
// Gamma Spectrum,根据bata-gamma的gamma channel的值(y轴)进行定位
|
||||
|
@ -186,6 +239,32 @@ export default {
|
|||
|
||||
this.$refs.betaGammaChartRef.setRange(x1, x2, type)
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
data: {
|
||||
handler(newVal) {
|
||||
const {
|
||||
betaOriginalData,
|
||||
betaProjectedData,
|
||||
gammaOriginalData,
|
||||
gammaProjectedData,
|
||||
histogramDataList, // 左侧 Beta-Gamma Spectrum: Sample 图表
|
||||
spectrumData
|
||||
} = newVal
|
||||
|
||||
|
||||
console.log('%c [ spectrumData ]-246', 'font-size:13px; background:pink; color:#bf2c9f;', spectrumData)
|
||||
|
||||
this.histogramDataList = histogramDataList
|
||||
|
||||
this.gammaOriginalData = gammaOriginalData
|
||||
this.betaOriginalData = betaOriginalData
|
||||
|
||||
this.betaProjectedData = betaProjectedData
|
||||
this.gammaProjectedData = gammaProjectedData
|
||||
},
|
||||
immediate: true
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
@ -193,8 +272,12 @@ export default {
|
|||
<style lang="less" scoped>
|
||||
.beta-gamma-analysis {
|
||||
height: 100%;
|
||||
display: flex;
|
||||
overflow: auto hidden;
|
||||
|
||||
&-main {
|
||||
height: calc(100% - 51px);
|
||||
display: flex;
|
||||
overflow: auto hidden;
|
||||
}
|
||||
|
||||
.beta-gamma-spectrum-sample {
|
||||
width: calc(100% - 1078px);
|
||||
|
|
|
@ -141,7 +141,7 @@ const threeDSurfaceOption = {
|
|||
show: false,
|
||||
dimension: 2,
|
||||
min: 0,
|
||||
max: 5,
|
||||
max: 0,
|
||||
inRange: ['#47C134', '#f00']
|
||||
},
|
||||
grid3D: {
|
||||
|
@ -188,21 +188,11 @@ const threeDSurfaceOption = {
|
|||
color: '#C4E5A6',
|
||||
fontSize: 14
|
||||
},
|
||||
max: 5
|
||||
max: 0
|
||||
},
|
||||
series: {
|
||||
type: 'surface',
|
||||
data: [
|
||||
[64, 64, 0],
|
||||
[66, 66, 0],
|
||||
[66, 66, 0],
|
||||
[65, 65, 4],
|
||||
|
||||
[128, 128, 0],
|
||||
[130, 130, 0],
|
||||
[130, 130, 0],
|
||||
[129, 129, 4]
|
||||
]
|
||||
data: []
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -269,8 +259,8 @@ const threeDScatterOption = {
|
|||
export default {
|
||||
props: {
|
||||
data: {
|
||||
type: Object,
|
||||
default: () => ({})
|
||||
type: Array,
|
||||
default: () => []
|
||||
}
|
||||
},
|
||||
components: {
|
||||
|
@ -420,15 +410,11 @@ export default {
|
|||
watch: {
|
||||
data: {
|
||||
handler(newVal) {
|
||||
const data = []
|
||||
Object.entries(newVal).forEach(([_, v]) => {
|
||||
v.forEach(({ b, g, c }) => {
|
||||
data.push({
|
||||
value: [b, g, c]
|
||||
})
|
||||
})
|
||||
})
|
||||
this.twoDOption.series.data = data
|
||||
this.twoDOption.series.data = newVal.filter(item => item.c).map(item => [item.b, item.g, item.c]) // 设置2D Scatter数据
|
||||
|
||||
const treeDSurfaceZMax = Math.max(...newVal.map(item => item.c))
|
||||
this.threeDSurfaceOption.zAxis3D.max = Math.ceil(treeDSurfaceZMax * 1.2)
|
||||
this.threeDSurfaceOption.series.data = newVal.map(item => [item.b, item.g, item.c]) // 设置3D surface数据
|
||||
},
|
||||
immediate: true
|
||||
},
|
||||
|
|
|
@ -1,273 +0,0 @@
|
|||
<template>
|
||||
<custom-modal v-model="visible" :width="1200" title="Interactive Analyse Tools" :okHanlder="handleOk">
|
||||
<div class="interactive-analysis-tools">
|
||||
<div class="interactive-analysis-tools-left">
|
||||
<div class="chart">
|
||||
<custom-chart :option="option" />
|
||||
</div>
|
||||
<div class="table">
|
||||
<p class="title">
|
||||
< 6 Peaks with Anthro.Nuclides >
|
||||
</p>
|
||||
<custom-table :list="list" :columns="columns"> </custom-table>
|
||||
<div class="operators">
|
||||
<a-button type="primary">Nuclide Review Window</a-button>
|
||||
<a-button type="primary">Add Peak Comment</a-button>
|
||||
<a-button type="primary">Add General Comment</a-button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="interactive-analysis-tools-right">
|
||||
<title-over-boarder title="Peak">
|
||||
<div class="peak-box">
|
||||
<div class="peak-box-item">
|
||||
<a-button type="primary">Insert</a-button>
|
||||
</div>
|
||||
<div class="peak-box-item">
|
||||
<a-button type="primary">Delete</a-button>
|
||||
</div>
|
||||
<div class="peak-box-item">
|
||||
<a-button type="primary">Fit</a-button>
|
||||
</div>
|
||||
|
||||
<div class="peak-box-item symbol">
|
||||
<a-button type="primary"><</a-button>
|
||||
<a-button type="primary">></a-button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="base-line">
|
||||
<a-button type="primary">BaseLine</a-button>
|
||||
</div>
|
||||
</title-over-boarder>
|
||||
<div class="reset-btn-box">
|
||||
<a-button type="primary">Reset Chart</a-button>
|
||||
</div>
|
||||
<div class="identify-box">
|
||||
<title-over-boarder title="Nuclide Identify">
|
||||
<a-form-model class="tolerance">
|
||||
<a-form-model-item label="Tolerance">
|
||||
<a-input-number></a-input-number>
|
||||
</a-form-model-item>
|
||||
</a-form-model>
|
||||
<div class="identify-item">
|
||||
<div class="title">
|
||||
Possible Nuclide
|
||||
</div>
|
||||
<div class="content"></div>
|
||||
</div>
|
||||
<div class="identify-item">
|
||||
<div class="title">
|
||||
Nuclide Identified
|
||||
</div>
|
||||
<div class="content"></div>
|
||||
</div>
|
||||
<div class="identify-operators">
|
||||
<a-space>
|
||||
<a-input></a-input>
|
||||
<a-button type="primary">Add</a-button>
|
||||
<a-button type="primary">Del</a-button>
|
||||
</a-space>
|
||||
</div>
|
||||
</title-over-boarder>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</custom-modal>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import CustomChart from '@/components/CustomChart/index.vue'
|
||||
import TitleOverBoarder from '../TitleOverBoarder.vue'
|
||||
|
||||
const initialOption = {
|
||||
xAxis: {
|
||||
min: 1,
|
||||
max: 8192
|
||||
},
|
||||
yAxis: {
|
||||
min: 1,
|
||||
max: 994914
|
||||
}
|
||||
}
|
||||
|
||||
const columns = [
|
||||
{
|
||||
title: 'ID'
|
||||
},
|
||||
{
|
||||
title: 'Energy (keV)'
|
||||
},
|
||||
{
|
||||
title: 'Centroid (C)'
|
||||
},
|
||||
{
|
||||
title: 'FWHM (keV)'
|
||||
},
|
||||
{
|
||||
title: 'Area'
|
||||
},
|
||||
{
|
||||
title: 'Detectability'
|
||||
},
|
||||
{
|
||||
title: 'Cmnt'
|
||||
},
|
||||
{
|
||||
title: 'Nuclides'
|
||||
}
|
||||
]
|
||||
|
||||
export default {
|
||||
props: {
|
||||
value: {
|
||||
type: Boolean
|
||||
}
|
||||
},
|
||||
components: {
|
||||
CustomChart,
|
||||
TitleOverBoarder
|
||||
},
|
||||
data() {
|
||||
this.columns = columns
|
||||
return {
|
||||
option: initialOption,
|
||||
list: []
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
handleOk() {}
|
||||
},
|
||||
computed: {
|
||||
visible: {
|
||||
get() {
|
||||
return this.value
|
||||
},
|
||||
set(val) {
|
||||
this.$emit('input', val)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="less" scoped>
|
||||
.interactive-analysis-tools {
|
||||
display: flex;
|
||||
|
||||
&-left {
|
||||
flex: 1;
|
||||
margin-right: 20px;
|
||||
|
||||
.chart {
|
||||
height: 275px;
|
||||
}
|
||||
|
||||
.table {
|
||||
.title {
|
||||
color: #0cebc9;
|
||||
font-size: 20px;
|
||||
text-align: center;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.custom-table {
|
||||
height: 421px;
|
||||
}
|
||||
|
||||
.operators {
|
||||
display: flex;
|
||||
margin-top: 10px;
|
||||
gap: 10px;
|
||||
|
||||
.ant-btn {
|
||||
flex: 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&-right {
|
||||
width: 25%;
|
||||
|
||||
.peak-box {
|
||||
&-item {
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.symbol {
|
||||
display: flex;
|
||||
|
||||
.ant-btn {
|
||||
flex: 1;
|
||||
|
||||
&:first-child {
|
||||
margin-right: 10px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.base-line {
|
||||
margin-top: 80px;
|
||||
}
|
||||
|
||||
.reset-btn-box {
|
||||
margin-top: 20px;
|
||||
margin-bottom: 30px;
|
||||
}
|
||||
|
||||
.identify-box {
|
||||
.tolerance {
|
||||
::v-deep {
|
||||
.ant-form-item {
|
||||
margin-bottom: 10px;
|
||||
|
||||
&-control-wrapper {
|
||||
flex: 1;
|
||||
}
|
||||
|
||||
&-control {
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.ant-input-number {
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
.identify-item {
|
||||
.title {
|
||||
background-color: #497e9d;
|
||||
height: 30px;
|
||||
line-height: 30px;
|
||||
text-align: center;
|
||||
font-size: 16px;
|
||||
}
|
||||
|
||||
.content {
|
||||
height: 80px;
|
||||
background-color: #275466;
|
||||
margin: 10px 0;
|
||||
}
|
||||
}
|
||||
|
||||
.identify-operators {
|
||||
display: flex;
|
||||
|
||||
.ant-btn {
|
||||
width: 50px;
|
||||
padding-left: 5px;
|
||||
padding-right: 5px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.ant-btn {
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
</style>
|
|
@ -0,0 +1,48 @@
|
|||
<template>
|
||||
<custom-modal v-model="visible" :title="type + ' Comment'" :okHandler="handleOk">
|
||||
<a-textarea :rows="10" v-model="content"></a-textarea>
|
||||
</custom-modal>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
props: {
|
||||
value: {
|
||||
type: Boolean
|
||||
},
|
||||
type: {
|
||||
type: String
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
content: ''
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
async handleOk() {
|
||||
if (!this.content) {
|
||||
this.$message.warn('Please Input Comment')
|
||||
throw new Error('Content Is Empty')
|
||||
}
|
||||
|
||||
console.log('%c [ ]-29', 'font-size:13px; background:pink; color:#bf2c9f;', this.type, this.content)
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
visible: {
|
||||
get() {
|
||||
if (this.value) {
|
||||
this.content = ''
|
||||
}
|
||||
return this.value
|
||||
},
|
||||
set(val) {
|
||||
this.$emit('input', val)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style></style>
|
|
@ -0,0 +1,162 @@
|
|||
<template>
|
||||
<custom-modal centered v-model="visible" :width="1200" title="Fit Peaks and Baseline">
|
||||
<custom-table :columns="columns" :list="list">
|
||||
<template v-for="(slot, index) in slots" :slot="slot.slotName" slot-scope="{ record }">
|
||||
<a-checkbox v-if="slot.isCheckbox" :key="index" v-model="record[slot.dataIndex]">
|
||||
Fixed
|
||||
</a-checkbox>
|
||||
<a-input v-else :key="index" v-model="record[slot.dataIndex]"></a-input>
|
||||
</template>
|
||||
</custom-table>
|
||||
<div slot="custom-footer">
|
||||
<a-space>
|
||||
<a-button type="primary" @click="handlePeaks">Peaks</a-button>
|
||||
<a-button>Cancel</a-button>
|
||||
</a-space>
|
||||
</div>
|
||||
</custom-modal>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
const columns = [
|
||||
{
|
||||
title: 'Peak',
|
||||
dataIndex: 'peak',
|
||||
width: 100,
|
||||
scopedSlots: {
|
||||
customRender: 'Peak'
|
||||
}
|
||||
},
|
||||
{
|
||||
title: 'Nuclide',
|
||||
dataIndex: 'nuclide',
|
||||
width: 100,
|
||||
scopedSlots: {
|
||||
customRender: 'Nuclide'
|
||||
}
|
||||
},
|
||||
{
|
||||
title: 'Energy',
|
||||
dataIndex: 'energy',
|
||||
width: 100,
|
||||
scopedSlots: {
|
||||
customRender: 'Energy'
|
||||
}
|
||||
},
|
||||
{
|
||||
title: 'NetArea',
|
||||
dataIndex: 'netAreaInput',
|
||||
width: 100,
|
||||
scopedSlots: {
|
||||
customRender: 'NetAreaInput'
|
||||
}
|
||||
},
|
||||
{
|
||||
title: 'FWHM',
|
||||
dataIndex: 'fwhmInput',
|
||||
width: 100,
|
||||
scopedSlots: {
|
||||
customRender: 'FWHMInput'
|
||||
}
|
||||
},
|
||||
{
|
||||
title: 'Step',
|
||||
dataIndex: 'Step',
|
||||
width: 100,
|
||||
scopedSlots: {
|
||||
customRender: 'Step'
|
||||
}
|
||||
},
|
||||
{
|
||||
title: 'BWGamma',
|
||||
dataIndex: 'bwGamma',
|
||||
width: 100,
|
||||
scopedSlots: {
|
||||
customRender: 'BWGamma'
|
||||
}
|
||||
},
|
||||
{
|
||||
title: 'NetArea',
|
||||
dataIndex: 'netAreaCheckbox',
|
||||
width: 100,
|
||||
scopedSlots: {
|
||||
customRender: 'NetAreaCheckbox'
|
||||
},
|
||||
isCheckbox: true
|
||||
},
|
||||
{
|
||||
title: 'Centroid',
|
||||
dataIndex: 'centroid',
|
||||
width: 100,
|
||||
scopedSlots: {
|
||||
customRender: 'Centroid'
|
||||
},
|
||||
isCheckbox: true
|
||||
},
|
||||
{
|
||||
title: 'FWHM',
|
||||
dataIndex: 'fwhmCheckbox',
|
||||
width: 100,
|
||||
scopedSlots: {
|
||||
customRender: 'FWHMCheckbox'
|
||||
},
|
||||
isCheckbox: true
|
||||
}
|
||||
]
|
||||
export default {
|
||||
props: {
|
||||
value: {
|
||||
type: Boolean
|
||||
}
|
||||
},
|
||||
data() {
|
||||
this.columns = columns
|
||||
return {
|
||||
list: [
|
||||
{
|
||||
peak: 'peak',
|
||||
nuclide: 'nuclide',
|
||||
energy: 'energy',
|
||||
netAreaInput: 'netAreaInput',
|
||||
fwhmInput: 'fwhmInput',
|
||||
Step: 'Step',
|
||||
bwGamma: 'bwGamma',
|
||||
netAreaCheckbox: false,
|
||||
centroid: false,
|
||||
fwhmCheckbox: false
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
handlePeaks() {
|
||||
console.log('%c [ ]-134', 'font-size:13px; background:pink; color:#bf2c9f;', this.list)
|
||||
this.visible = false
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
visible: {
|
||||
get() {
|
||||
if (this.value) {
|
||||
this.content = ''
|
||||
}
|
||||
return this.value
|
||||
},
|
||||
set(val) {
|
||||
this.$emit('input', val)
|
||||
}
|
||||
},
|
||||
slots() {
|
||||
return columns.map(column => {
|
||||
return {
|
||||
isCheckbox: column.isCheckbox,
|
||||
dataIndex: column.dataIndex,
|
||||
slotName: column.scopedSlots.customRender
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style></style>
|
|
@ -0,0 +1,43 @@
|
|||
<template>
|
||||
<custom-chart :option="option" />
|
||||
</template>
|
||||
<script>
|
||||
const initialOption = {
|
||||
xAxis: {
|
||||
axisLabel: {
|
||||
color: '#fff'
|
||||
}
|
||||
},
|
||||
yAxis: {
|
||||
min: 2030.0,
|
||||
max: 2427.6,
|
||||
splitNumber: 1,
|
||||
axisLabel: {
|
||||
color: '#fff'
|
||||
}
|
||||
},
|
||||
series: [
|
||||
{
|
||||
type: 'line',
|
||||
data: [],
|
||||
itemStyle: {
|
||||
color: '#8BB93C'
|
||||
}
|
||||
},
|
||||
{
|
||||
type: 'line',
|
||||
data: [],
|
||||
itemStyle: {
|
||||
color: '#03DBE6'
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
option: initialOption
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
|
@ -0,0 +1,360 @@
|
|||
<template>
|
||||
<custom-modal v-model="visible" :width="1200" title="Nuclide Review" :footer="null">
|
||||
<div class="nuclide-review-search">
|
||||
<span><</span>
|
||||
<a-form-model layout="inline">
|
||||
<a-form-model-item label="Energy">
|
||||
<a-input-number></a-input-number>
|
||||
</a-form-model-item>
|
||||
<a-form-model-item label="Tolerance">
|
||||
<a-input-number></a-input-number>
|
||||
</a-form-model-item>
|
||||
<a-button type="primary">Search</a-button>
|
||||
</a-form-model>
|
||||
<span>></span>
|
||||
</div>
|
||||
|
||||
<!-- 以下是表格部分 -->
|
||||
<div class="nuclide-review-table">
|
||||
<div class="nuclide-review-table-nuclide">
|
||||
<div class="nuclide-review-table-nuclide-header">Nuclide</div>
|
||||
<div class="nuclide-review-table-nuclide-content">
|
||||
<div
|
||||
class="nuclide-review-table-nuclide-item"
|
||||
:class="currNuclide == item ? 'active' : ''"
|
||||
v-for="item in nuclideList"
|
||||
:key="item.id"
|
||||
@click="handleNuclideClick(item)"
|
||||
>
|
||||
{{ item.title }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="nuclide-review-table-table">
|
||||
<div class="title">
|
||||
<a-form-model>
|
||||
<a-row>
|
||||
<a-col :span="6">
|
||||
<a-form-model-item label="Name">
|
||||
1
|
||||
</a-form-model-item>
|
||||
</a-col>
|
||||
<a-col :span="6">
|
||||
<a-form-model-item label="Half Life">
|
||||
2
|
||||
</a-form-model-item>
|
||||
</a-col>
|
||||
<a-col :span="6">
|
||||
<a-form-model-item label="Half Life Err">
|
||||
3
|
||||
</a-form-model-item>
|
||||
</a-col>
|
||||
<a-col :span="6">
|
||||
<a-form-model-item label="Lines">
|
||||
4
|
||||
</a-form-model-item>
|
||||
</a-col>
|
||||
</a-row>
|
||||
</a-form-model>
|
||||
</div>
|
||||
<a-table
|
||||
:class="list.length ? 'has-data' : ''"
|
||||
:columns="columns"
|
||||
:dataSource="list"
|
||||
:scroll="{ y: 180 }"
|
||||
:customRow="customRow"
|
||||
:pagination="false"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
<!-- 表格部分结束 -->
|
||||
|
||||
<!-- 以下是图表部分 -->
|
||||
<div class="nuclide-review-chart">
|
||||
<a-row>
|
||||
<a-col :span="8"></a-col>
|
||||
<a-col :span="8"></a-col>
|
||||
<a-col :span="8"></a-col>
|
||||
</a-row>
|
||||
|
||||
<div class="nuclide-review-chart-prev"></div>
|
||||
<div class="nuclide-review-chart-next"></div>
|
||||
</div>
|
||||
<!-- 图表部分结束 -->
|
||||
</custom-modal>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
const columns = [
|
||||
{
|
||||
title: 'Id',
|
||||
dataIndex: 'id',
|
||||
width: '5%'
|
||||
},
|
||||
{
|
||||
title: 'Full Name',
|
||||
dataIndex: 'fullName',
|
||||
width: '15%'
|
||||
},
|
||||
{
|
||||
title: 'Energy',
|
||||
dataIndex: 'energy',
|
||||
width: '15%'
|
||||
},
|
||||
{
|
||||
title: 'Energy Err',
|
||||
dataIndex: 'energyErr',
|
||||
width: '15%'
|
||||
},
|
||||
{
|
||||
title: 'Abundance(%)',
|
||||
dataIndex: 'abundance',
|
||||
width: '15%'
|
||||
},
|
||||
{
|
||||
title: 'AbundanceErr(%)',
|
||||
dataIndex: 'abundanceErr',
|
||||
width: '15%'
|
||||
},
|
||||
{
|
||||
title: 'KeyLine',
|
||||
dataIndex: 'keyLine',
|
||||
width: '15%'
|
||||
}
|
||||
]
|
||||
export default {
|
||||
props: {
|
||||
value: {
|
||||
type: Boolean
|
||||
}
|
||||
},
|
||||
data() {
|
||||
this.columns = columns
|
||||
return {
|
||||
nuclideList: [
|
||||
{
|
||||
id: 1,
|
||||
title: 'Ag111'
|
||||
},
|
||||
{
|
||||
id: 2,
|
||||
title: 'Eu157'
|
||||
},
|
||||
{
|
||||
id: 3,
|
||||
title: 'Mo99'
|
||||
},
|
||||
{
|
||||
id: 4,
|
||||
title: 'Pb204M'
|
||||
},
|
||||
{
|
||||
id: 5,
|
||||
title: 'Pb204M'
|
||||
},
|
||||
{
|
||||
id: 6,
|
||||
title: 'Pb204M'
|
||||
},
|
||||
{
|
||||
id: 7,
|
||||
title: 'Pb204M'
|
||||
},
|
||||
{
|
||||
id: 8,
|
||||
title: 'Pb204M'
|
||||
},
|
||||
{
|
||||
id: 9,
|
||||
title: 'Pb204M'
|
||||
}
|
||||
],
|
||||
list: [
|
||||
{
|
||||
id: '1',
|
||||
fullName: 'fullName',
|
||||
energy: 'energy',
|
||||
energyErr: 'energyErr',
|
||||
abundance: 'abundance',
|
||||
abundanceErr: 'abundanceErr',
|
||||
keyLine: 'keyLine'
|
||||
},
|
||||
{
|
||||
id: '2',
|
||||
fullName: 'fullName',
|
||||
energy: 'energy',
|
||||
energyErr: 'energyErr',
|
||||
abundance: 'abundance',
|
||||
abundanceErr: 'abundanceErr',
|
||||
keyLine: 'keyLine'
|
||||
},
|
||||
{
|
||||
id: '3',
|
||||
fullName: 'fullName',
|
||||
energy: 'energy',
|
||||
energyErr: 'energyErr',
|
||||
abundance: 'abundance',
|
||||
abundanceErr: 'abundanceErr',
|
||||
keyLine: 'keyLine'
|
||||
}
|
||||
],
|
||||
currNuclide: {},
|
||||
|
||||
currTableItem: {} // 选中的表格中的行
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
handleNuclideClick(item) {
|
||||
this.currNuclide = item
|
||||
},
|
||||
|
||||
// 实现单击选中/反选功能
|
||||
customRow(record) {
|
||||
return {
|
||||
class: 'custom-table-row' + (this.currTableItem == record ? ' ant-table-row-selected' : ''),
|
||||
on: {
|
||||
click: () => {
|
||||
this.currTableItem = record
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
visible: {
|
||||
get() {
|
||||
if (this.value) {
|
||||
this.content = ''
|
||||
}
|
||||
return this.value
|
||||
},
|
||||
set(val) {
|
||||
this.$emit('input', val)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="less" scoped>
|
||||
.nuclide-review {
|
||||
&-search {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
border-top: 1px solid rgba(12, 235, 201, 0.3);
|
||||
border-bottom: 1px solid rgba(12, 235, 201, 0.3);
|
||||
background-color: rgba(12, 235, 201, 0.05);
|
||||
|
||||
> span {
|
||||
color: @primary-color;
|
||||
width: 30px;
|
||||
height: 30px;
|
||||
border: 1px solid @primary-color;
|
||||
border-radius: 50%;
|
||||
margin: 0 10px;
|
||||
text-align: center;
|
||||
font-size: 20px;
|
||||
cursor: pointer;
|
||||
user-select: none;
|
||||
}
|
||||
|
||||
.ant-form {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
}
|
||||
|
||||
&-table {
|
||||
display: flex;
|
||||
height: 250px;
|
||||
margin-top: 10px;
|
||||
|
||||
&-nuclide {
|
||||
width: 150px;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
|
||||
&-header {
|
||||
height: 32px;
|
||||
line-height: 32px;
|
||||
text-align: center;
|
||||
background-color: #126b82;
|
||||
}
|
||||
|
||||
&-content {
|
||||
background-color: #275466;
|
||||
flex: 1;
|
||||
padding: 5px;
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
&-item {
|
||||
padding: 0 5px;
|
||||
height: 30px;
|
||||
line-height: 30px;
|
||||
cursor: pointer;
|
||||
|
||||
&.active {
|
||||
background-color: #296d81;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&-table {
|
||||
margin-left: 20px;
|
||||
flex: 1;
|
||||
overflow: hidden;
|
||||
|
||||
.title {
|
||||
::v-deep {
|
||||
.ant-form {
|
||||
&-item {
|
||||
margin-bottom: 0;
|
||||
|
||||
&-label,
|
||||
&-control {
|
||||
line-height: 32px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.ant-table-wrapper {
|
||||
&.has-data {
|
||||
::v-deep {
|
||||
.ant-table-body {
|
||||
height: 180px;
|
||||
background-color: #06282a;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
::v-deep {
|
||||
.ant-table-placeholder {
|
||||
height: 181px;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&-chart {
|
||||
margin-top: 20px;
|
||||
height: 300px;
|
||||
background-color: #05354c;
|
||||
|
||||
&-item {
|
||||
width: 33%;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.custom-table-row {
|
||||
cursor: pointer;
|
||||
}
|
||||
</style>
|
|
@ -0,0 +1,459 @@
|
|||
<template>
|
||||
<custom-modal v-model="visible" :width="1280" title="Interactive Analyse Tools" :footer="null">
|
||||
<div class="interactive-analysis-tools">
|
||||
<div class="interactive-analysis-tools-left">
|
||||
<div class="chart">
|
||||
<custom-chart :option="option" />
|
||||
</div>
|
||||
<div class="thumbnail"></div>
|
||||
<div class="table">
|
||||
<p class="title">
|
||||
< 6 Peaks with Anthro.Nuclides >
|
||||
</p>
|
||||
<custom-table
|
||||
:class="list.length ? 'has-data' : ''"
|
||||
:list="list"
|
||||
:columns="columns"
|
||||
:scroll="{ y: 288 }"
|
||||
:selectedRowKeys.sync="selectedKeys"
|
||||
>
|
||||
</custom-table>
|
||||
<div class="operators">
|
||||
<a-button type="primary">Nuclide Review Window</a-button>
|
||||
<a-button type="primary" @click="handleAddComment('Peak')">Add Peak Comment</a-button>
|
||||
<a-button type="primary" @click="handleAddComment('General')">Add General Comment</a-button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="interactive-analysis-tools-right">
|
||||
<title-over-boarder title="Peak">
|
||||
<div class="peak-box">
|
||||
<!-- 按钮组1 -->
|
||||
<template v-if="btnGroupType == 1">
|
||||
<div class="peak-box-item">
|
||||
<a-button type="primary">Insert</a-button>
|
||||
</div>
|
||||
<div class="peak-box-item">
|
||||
<a-button type="primary">Delete</a-button>
|
||||
</div>
|
||||
<div class="peak-box-item">
|
||||
<a-button type="primary">Fit</a-button>
|
||||
</div>
|
||||
|
||||
<div class="peak-box-item symbol" :key="4">
|
||||
<a-button type="primary"><</a-button>
|
||||
<a-button type="primary">></a-button>
|
||||
</div>
|
||||
|
||||
<div class="peak-box-item base-line">
|
||||
<a-button type="primary" @click="btnGroupType = 2">BaseLine</a-button>
|
||||
</div>
|
||||
</template>
|
||||
<!-- 按钮组2 -->
|
||||
<template v-if="btnGroupType == 2">
|
||||
<div class="peak-box-item">
|
||||
<a-button type="primary">(A)dd CP</a-button>
|
||||
</div>
|
||||
<div class="peak-box-item">
|
||||
<a-button type="primary">(R)emove CP</a-button>
|
||||
</div>
|
||||
<div class="peak-box-item">
|
||||
<a-button type="primary">(M)odify CP</a-button>
|
||||
</div>
|
||||
<div class="peak-box-item">
|
||||
<a-button type="primary">Edit (S)lope</a-button>
|
||||
</div>
|
||||
<div class="peak-box-item">
|
||||
<a-button type="primary">Undo</a-button>
|
||||
</div>
|
||||
<div class="peak-box-item">
|
||||
<a-button type="primary">Replot</a-button>
|
||||
</div>
|
||||
<div class="peak-box-item">
|
||||
<a-button type="primary" @click="btnGroupType = 1">Accept</a-button>
|
||||
</div>
|
||||
<div class="peak-box-item">
|
||||
<a-button type="primary" @click="btnGroupType = 1">Cancel</a-button>
|
||||
</div>
|
||||
</template>
|
||||
</div>
|
||||
</title-over-boarder>
|
||||
<div class="reset-btn-box">
|
||||
<a-button type="primary">Reset Chart</a-button>
|
||||
</div>
|
||||
<div class="identify-box">
|
||||
<title-over-boarder title="Nuclide Identify">
|
||||
<a-form-model class="tolerance">
|
||||
<a-form-model-item label="Tolerance">
|
||||
<a-input-number></a-input-number>
|
||||
</a-form-model-item>
|
||||
</a-form-model>
|
||||
<div class="identify-item">
|
||||
<div class="title">
|
||||
Possible Nuclide
|
||||
</div>
|
||||
<div class="content"></div>
|
||||
</div>
|
||||
<div class="identify-item">
|
||||
<div class="title">
|
||||
Nuclide Identified
|
||||
</div>
|
||||
<div class="content"></div>
|
||||
</div>
|
||||
<div class="identify-operators">
|
||||
<a-space>
|
||||
<a-input></a-input>
|
||||
<a-button type="primary">Add</a-button>
|
||||
<a-button type="primary" @click="handleDel">Del</a-button>
|
||||
</a-space>
|
||||
</div>
|
||||
</title-over-boarder>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Comment弹窗 开始 -->
|
||||
<comment-modal v-model="commentModalVisible" :type="commentType" />
|
||||
<!-- Comment弹窗 结束 -->
|
||||
<!-- Fit Peaks and Baseline弹窗 开始 -->
|
||||
<fit-peaks-and-base-line-modal v-model="fitPeaksAndBaselineModalVisible" />
|
||||
<!-- Fit Peaks and Baseline弹窗 结束 -->
|
||||
<!-- Nuclide Review 弹窗开始 -->
|
||||
<nuclide-review-modal v-model="nuclideReviewModalVisible" />
|
||||
<!-- Nuclide Review 弹窗结束 -->
|
||||
</custom-modal>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import CustomChart from '@/components/CustomChart/index.vue'
|
||||
import TitleOverBoarder from '../../TitleOverBoarder.vue'
|
||||
import CommentModal from './components/CommentModal.vue'
|
||||
import FitPeaksAndBaseLineModal from './components/FitPeaksAndBaselineModal.vue'
|
||||
import NuclideReviewModal from './components/NuclideReviewModal.vue'
|
||||
|
||||
const initialOption = {
|
||||
grid: {
|
||||
top: 20,
|
||||
bottom: 20,
|
||||
left: 100,
|
||||
right: 20
|
||||
},
|
||||
xAxis: {
|
||||
min: 1,
|
||||
max: 8192,
|
||||
interval: 1143,
|
||||
axisLabel: {
|
||||
color: '#fff'
|
||||
},
|
||||
splitLine: {
|
||||
show: false
|
||||
},
|
||||
axisTick: {
|
||||
show: false
|
||||
}
|
||||
},
|
||||
yAxis: {
|
||||
min: 1,
|
||||
max: 994914,
|
||||
axisLabel: {
|
||||
color: '#fff'
|
||||
},
|
||||
name: 'Counts',
|
||||
nameLocation: 'center',
|
||||
nameGap: 60,
|
||||
nameTextStyle: {
|
||||
fontSize: 16,
|
||||
color: '#5b9cba'
|
||||
},
|
||||
splitLine: {
|
||||
show: false
|
||||
},
|
||||
axisTick: {
|
||||
show: false
|
||||
}
|
||||
},
|
||||
series: [
|
||||
{
|
||||
type: 'line',
|
||||
data: [],
|
||||
itemStyle: {
|
||||
color: '#FCFE02'
|
||||
}
|
||||
},
|
||||
{
|
||||
type: 'line',
|
||||
data: [],
|
||||
itemStyle: {
|
||||
color: '#F87E28'
|
||||
}
|
||||
},
|
||||
{
|
||||
type: 'line',
|
||||
data: [],
|
||||
itemStyle: {
|
||||
color: '#01F6FE'
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
const columns = [
|
||||
{
|
||||
title: 'ID',
|
||||
dataIndex: 'id',
|
||||
width: 60
|
||||
},
|
||||
{
|
||||
title: 'Energy (keV)',
|
||||
dataIndex: 'energy',
|
||||
width: 120
|
||||
},
|
||||
{
|
||||
title: 'Centroid (C)',
|
||||
dataIndex: 'centroid',
|
||||
width: 120
|
||||
},
|
||||
{
|
||||
title: 'FWHM (keV)',
|
||||
dataIndex: 'fwhm',
|
||||
width: 120
|
||||
},
|
||||
{
|
||||
title: 'Area',
|
||||
dataIndex: 'area',
|
||||
width: 120
|
||||
},
|
||||
{
|
||||
title: 'Detectability',
|
||||
dataIndex: 'detectability',
|
||||
width: 120
|
||||
},
|
||||
{
|
||||
title: 'Cmnt',
|
||||
dataIndex: 'cmnt',
|
||||
width: 120
|
||||
},
|
||||
{
|
||||
title: 'Nuclides',
|
||||
dataIndex: 'nuclides',
|
||||
width: 120
|
||||
}
|
||||
]
|
||||
|
||||
export default {
|
||||
props: {
|
||||
value: {
|
||||
type: Boolean
|
||||
}
|
||||
},
|
||||
components: {
|
||||
CustomChart,
|
||||
TitleOverBoarder,
|
||||
CommentModal,
|
||||
FitPeaksAndBaseLineModal,
|
||||
NuclideReviewModal
|
||||
},
|
||||
data() {
|
||||
this.columns = columns
|
||||
return {
|
||||
option: initialOption,
|
||||
list: new Array(500).fill(0).map((_, index) => ({
|
||||
id: index.toString(),
|
||||
energy: 'energy',
|
||||
centroid: 'centroid',
|
||||
fwhm: 'fwhm',
|
||||
area: 'area',
|
||||
detectability: 'detectability',
|
||||
cmnt: 'cmnt',
|
||||
nuclides: 'nuclides'
|
||||
})),
|
||||
commentModalVisible: false, // Comment 弹窗是否显示
|
||||
commentType: 'Peak',
|
||||
|
||||
btnGroupType: 1, // 右侧 Peak 中的按钮组切换
|
||||
|
||||
selectedKeys: [], // 选中的列表
|
||||
|
||||
fitPeaksAndBaselineModalVisible: false, // Fit Peaks And Base Line 弹窗
|
||||
nuclideReviewModalVisible: true // Nuclide Review 弹窗
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
// 显示comment弹窗
|
||||
handleAddComment(type) {
|
||||
this.commentType = type
|
||||
this.commentModalVisible = true
|
||||
},
|
||||
|
||||
// 删除
|
||||
handleDel() {
|
||||
if (!this.selectedKeys.length) {
|
||||
this.$message.warn('Please Select At Least 1 Peak To Delete')
|
||||
return
|
||||
}
|
||||
|
||||
this.$warning({
|
||||
title: 'Warning',
|
||||
content: 'Are you sure to delete this peak?',
|
||||
onOk: () => {
|
||||
console.log('%c [ ]-294', 'font-size:13px; background:pink; color:#bf2c9f;', this.selectedKeys)
|
||||
}
|
||||
})
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
visible: {
|
||||
get() {
|
||||
return this.value
|
||||
},
|
||||
set(val) {
|
||||
this.$emit('input', val)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="less" scoped>
|
||||
.interactive-analysis-tools {
|
||||
display: flex;
|
||||
|
||||
&-left {
|
||||
width: 75%;
|
||||
margin-right: 20px;
|
||||
|
||||
.chart {
|
||||
height: 331px;
|
||||
}
|
||||
|
||||
.thumbnail {
|
||||
height: 50px;
|
||||
margin-top: 10px;
|
||||
margin-bottom: 35px;
|
||||
background-color: #255369;
|
||||
}
|
||||
|
||||
.table {
|
||||
.title {
|
||||
color: #0cebc9;
|
||||
font-size: 20px;
|
||||
text-align: center;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.custom-table {
|
||||
&.has-data {
|
||||
::v-deep {
|
||||
.ant-table-body {
|
||||
height: 288px;
|
||||
background-color: #06282a;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
::v-deep {
|
||||
.ant-table-placeholder {
|
||||
height: 289px;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.operators {
|
||||
display: flex;
|
||||
margin-top: 10px;
|
||||
gap: 10px;
|
||||
|
||||
.ant-btn {
|
||||
flex: 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&-right {
|
||||
.peak-box {
|
||||
height: 326px;
|
||||
|
||||
&-item:not(:last-child) {
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.symbol {
|
||||
display: flex;
|
||||
|
||||
.ant-btn {
|
||||
flex: 1;
|
||||
|
||||
&:first-child {
|
||||
margin-right: 10px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.base-line {
|
||||
margin-top: 136px;
|
||||
}
|
||||
|
||||
.reset-btn-box {
|
||||
margin-top: 20px;
|
||||
margin-bottom: 30px;
|
||||
}
|
||||
|
||||
.identify-box {
|
||||
.tolerance {
|
||||
::v-deep {
|
||||
.ant-form-item {
|
||||
margin-bottom: 10px;
|
||||
|
||||
&-control-wrapper {
|
||||
flex: 1;
|
||||
}
|
||||
|
||||
&-control {
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.ant-input-number {
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
.identify-item {
|
||||
.title {
|
||||
background-color: #497e9d;
|
||||
height: 30px;
|
||||
line-height: 30px;
|
||||
text-align: center;
|
||||
font-size: 16px;
|
||||
}
|
||||
|
||||
.content {
|
||||
height: 80px;
|
||||
background-color: #275466;
|
||||
margin: 10px 0;
|
||||
}
|
||||
}
|
||||
|
||||
.identify-operators {
|
||||
display: flex;
|
||||
|
||||
.ant-btn {
|
||||
width: 50px;
|
||||
padding-left: 5px;
|
||||
padding-right: 5px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.ant-btn {
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
</style>
|
|
@ -26,7 +26,7 @@
|
|||
<a-radio value="auto">From Auto DB</a-radio>
|
||||
<a-radio value="man">From Interactive DB</a-radio>
|
||||
</a-radio-group>
|
||||
<a-button type="primary" :loading="isLoadingSample" @click="handleLoad">Load</a-button>
|
||||
<a-button type="primary" @click="handleLoad">Load</a-button>
|
||||
</a-space>
|
||||
</template>
|
||||
</custom-modal>
|
||||
|
@ -107,7 +107,7 @@ export default {
|
|||
this.disableMixinCreated = true
|
||||
return {
|
||||
queryParam: {
|
||||
menuTypes: [],
|
||||
menuTypes: undefined,
|
||||
startDate: moment()
|
||||
.add(-7, 'd')
|
||||
.format('YYYY-MM-DD'),
|
||||
|
@ -121,8 +121,7 @@ export default {
|
|||
detectorList: [],
|
||||
url: {
|
||||
list: '/spectrumAnalysis/getDBSpectrumList'
|
||||
},
|
||||
isLoadingSample: false // 正在加载样例
|
||||
}
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
|
@ -185,14 +184,9 @@ export default {
|
|||
this.$message.warn('Please Select Databases To Load')
|
||||
return
|
||||
}
|
||||
|
||||
console.log('%c [ ]-190', 'font-size:13px; background:pink; color:#bf2c9f;', this.selectionRows)
|
||||
this.isLoadingSample = true
|
||||
const res = await ''
|
||||
console.log('%c [ res ]-156', 'font-size:13px; background:pink; color:#bf2c9f;', res)
|
||||
this.selectedRowKeys = []
|
||||
this.isLoadingSample = false
|
||||
this.visible = false
|
||||
this.$emit('loadSample', this.selectionRows)
|
||||
},
|
||||
|
||||
// 获取台站和探测器列表
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
<template>
|
||||
<a-menu class="spectra-list-in-menu">
|
||||
<a-menu-item v-for="item in list" :key="item.id" @click="handleClick(item)">
|
||||
<a-menu-item v-for="item in list" :key="item.sampleId" @click="handleClick(item)">
|
||||
<span class="checkbox">
|
||||
<a-icon v-if="item.checked" type="check" style="color: #0de30d" />
|
||||
</span>
|
||||
<span class="name">{{ item.name }}</span>
|
||||
<span class="name">{{ getFileName(item.inputFileName) }}</span>
|
||||
<a-icon type="delete" @click.stop="handleRemove(item)" />
|
||||
</a-menu-item>
|
||||
</a-menu>
|
||||
|
@ -40,6 +40,24 @@ export default {
|
|||
}
|
||||
}
|
||||
this.$forceUpdate()
|
||||
},
|
||||
|
||||
/**
|
||||
* 获取文件名
|
||||
* @param {String} inputFileName
|
||||
*/
|
||||
getFileName(inputFileName) {
|
||||
if (inputFileName) {
|
||||
const arr = inputFileName.split('/')
|
||||
return arr[arr.length - 1]
|
||||
}
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
list(newVal) {
|
||||
if (newVal.length) {
|
||||
this.handleClick(newVal[0])
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -66,8 +66,8 @@ const initialOption = {
|
|||
},
|
||||
yAxis: {
|
||||
min: 0,
|
||||
max: 21099,
|
||||
interval: 21000 / 4,
|
||||
max: 0,
|
||||
interval: 0,
|
||||
axisLine: {
|
||||
show: true,
|
||||
lineStyle: {
|
||||
|
@ -92,12 +92,7 @@ const initialOption = {
|
|||
color: ''
|
||||
},
|
||||
symbol: 'none',
|
||||
data: new Array(256)
|
||||
.fill(0)
|
||||
.map((_, index) => [
|
||||
index,
|
||||
Math.random() < 0.05 ? parseInt(Math.random() * 19644) : parseInt(Math.random() * 800)
|
||||
]),
|
||||
data: [],
|
||||
markLine: {
|
||||
symbol: 'none',
|
||||
animation: false,
|
||||
|
@ -127,6 +122,10 @@ export default {
|
|||
title: {
|
||||
type: String,
|
||||
default: 'Gamma'
|
||||
},
|
||||
data: {
|
||||
type: Array,
|
||||
default: () => []
|
||||
}
|
||||
},
|
||||
data() {
|
||||
|
@ -157,7 +156,10 @@ export default {
|
|||
if (xAxis) {
|
||||
this.option.series.markLine.data = [{ xAxis }]
|
||||
this.summary.channel = xAxis
|
||||
this.summary.count = this.option.series.data[xAxis][1]
|
||||
const find = this.data.find(item => item.x == xAxis)
|
||||
if (find) {
|
||||
this.summary.count = find.y
|
||||
}
|
||||
} else {
|
||||
this.option.series.markLine.data = []
|
||||
this.summary.channel = 0
|
||||
|
@ -244,6 +246,18 @@ export default {
|
|||
emitRangeChange(range) {
|
||||
this.$emit('rangeChange', range)
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
data: {
|
||||
handler(newVal) {
|
||||
this.option.series.data = newVal.map(({ x, y }) => [x, y])
|
||||
|
||||
const max = Math.max(...newVal.map(item => item.y))
|
||||
this.option.yAxis.interval = Math.ceil(max / 4)
|
||||
this.option.yAxis.max = this.option.yAxis.interval * 4
|
||||
},
|
||||
immediate: true
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
|
|
@ -1,10 +1,14 @@
|
|||
<template>
|
||||
<div class="btn-with-switch-icon">
|
||||
<img src="@/assets/images/spectrum/left-arrow.png" @click="handleClick('left')" />
|
||||
<i @click="handleClick('left')">
|
||||
<img src="@/assets/images/spectrum/left-arrow.png" />
|
||||
</i>
|
||||
<span>
|
||||
<slot></slot>
|
||||
</span>
|
||||
<img src="@/assets/images/spectrum/right-arrow.png" @click="handleClick('right')" />
|
||||
<i @click="handleClick('right')">
|
||||
<img src="@/assets/images/spectrum/right-arrow.png" />
|
||||
</i>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
|
@ -24,20 +28,21 @@ export default {
|
|||
justify-content: space-between;
|
||||
align-items: center;
|
||||
border: 1px solid #0a544e;
|
||||
padding: 0 12px;
|
||||
padding: 0 4px;
|
||||
height: 100%;
|
||||
letter-spacing: 1px;
|
||||
color: #ade6ee;
|
||||
|
||||
i {
|
||||
cursor: pointer;
|
||||
width: 16px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
span {
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
margin: 0 5px;
|
||||
}
|
||||
|
||||
img {
|
||||
cursor: pointer;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -1,16 +1,51 @@
|
|||
<template>
|
||||
<div class="gamma-analysis">
|
||||
<div class="gamma-analysis-chart">
|
||||
<custom-chart ref="chartRef" :option="option" style="height: 100%" />
|
||||
<!-- 二级交互栏 -->
|
||||
<div class="spectrum-analysis-sub-operators">
|
||||
<pop-over-with-icon placement="bottomLeft">
|
||||
Detailed-Information
|
||||
<detailed-infomation slot="content" />
|
||||
</pop-over-with-icon>
|
||||
<pop-over-with-icon placement="bottomLeft">
|
||||
QC Flags
|
||||
<qc-flags slot="content" :data="{ collectionTime: '123' }" />
|
||||
</pop-over-with-icon>
|
||||
<pop-over-with-icon>
|
||||
Graph Assistance
|
||||
<graph-assistance slot="content" />
|
||||
</pop-over-with-icon>
|
||||
<pop-over-with-icon>
|
||||
Nuclide Library
|
||||
<nuclear-library slot="content" />
|
||||
</pop-over-with-icon>
|
||||
<div class="peak-info">
|
||||
<button-with-switch-icon @change="handlePeakInfoChange">
|
||||
Peak Information
|
||||
</button-with-switch-icon>
|
||||
</div>
|
||||
</div>
|
||||
<div class="gamma-analysis-thumbnail">
|
||||
<custom-chart :option="thumbnailOption" style="height: 100%" />
|
||||
<!-- 二级交互栏结束 -->
|
||||
<!-- 主体部分 -->
|
||||
<div class="gamma-analysis-main">
|
||||
<div class="gamma-analysis-chart">
|
||||
<custom-chart ref="chartRef" :option="option" style="height: 100%" />
|
||||
</div>
|
||||
<div class="gamma-analysis-thumbnail">
|
||||
<custom-chart :option="thumbnailOption" style="height: 100%" />
|
||||
</div>
|
||||
</div>
|
||||
<!-- 主体部分结束 -->
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import CustomChart from '@/components/CustomChart/index.vue'
|
||||
import PopOverWithIcon from './components/SubOperators/PopOverWithIcon.vue'
|
||||
import DetailedInfomation from './components/SubOperators/DetailedInfomation.vue'
|
||||
import QcFlags from './components/SubOperators/QcFlags.vue'
|
||||
import GraphAssistance from './components/SubOperators/GraphAssistance.vue'
|
||||
import NuclearLibrary from './components/SubOperators/NuclearLibrary.vue'
|
||||
import ButtonWithSwitchIcon from './components/SubOperators/ButtonWithSwitchIcon.vue'
|
||||
|
||||
// 初始配置
|
||||
const initialOption = {
|
||||
|
@ -105,12 +140,14 @@ const initialOption = {
|
|||
lineStyle: {
|
||||
type: 'solid'
|
||||
},
|
||||
data: [{
|
||||
xAxis: 100,
|
||||
lineStyle: {
|
||||
color: 'red'
|
||||
data: [
|
||||
{
|
||||
xAxis: 100,
|
||||
lineStyle: {
|
||||
color: 'red'
|
||||
}
|
||||
}
|
||||
}]
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
|
@ -208,7 +245,13 @@ export default {
|
|||
}
|
||||
},
|
||||
components: {
|
||||
CustomChart
|
||||
CustomChart,
|
||||
PopOverWithIcon,
|
||||
DetailedInfomation,
|
||||
QcFlags,
|
||||
GraphAssistance,
|
||||
NuclearLibrary,
|
||||
ButtonWithSwitchIcon
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
|
@ -226,19 +269,23 @@ export default {
|
|||
this.$refs.chartRef.resize()
|
||||
},
|
||||
|
||||
// peak info 点击左右方向
|
||||
handlePeakInfoChange(direction) {
|
||||
this.moveMarkLine(direction)
|
||||
},
|
||||
|
||||
/**
|
||||
* 向某一个方向移动标记线
|
||||
* @param { 'left'| 'right' } direction
|
||||
*/
|
||||
moveMarkLine(direction) {
|
||||
if(direction == 'left') {
|
||||
if (direction == 'left') {
|
||||
this.option.series[0].markLine.data[0].xAxis = this.option.series[0].markLine.data[0].xAxis - 10
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
this.option.series[0].markLine.data[0].xAxis = this.option.series[0].markLine.data[0].xAxis + 10
|
||||
}
|
||||
|
||||
this.$emit('markLineChange', { })
|
||||
this.$emit('markLineChange', {})
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
|
@ -253,9 +300,16 @@ export default {
|
|||
<style lang="less" scoped>
|
||||
.gamma-analysis {
|
||||
height: 100%;
|
||||
position: relative;
|
||||
|
||||
&-main {
|
||||
height: calc(100% - 51px);
|
||||
display: flex;
|
||||
overflow: auto hidden;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
&-chart {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
|
@ -265,7 +319,7 @@ export default {
|
|||
right: 10px;
|
||||
width: 500px;
|
||||
height: 150px;
|
||||
background-color: #153E44;
|
||||
background-color: #153e44;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
|
|
@ -23,56 +23,20 @@
|
|||
</div>
|
||||
<!-- 顶部操作栏结束 -->
|
||||
|
||||
<!-- 二级交互栏 -->
|
||||
<div class="spectrum-analysis-SubOperators">
|
||||
<pop-over-with-icon placement="bottomLeft">
|
||||
Detailed-Information
|
||||
<detailed-infomation slot="content" />
|
||||
</pop-over-with-icon>
|
||||
<pop-over-with-icon placement="bottomLeft">
|
||||
QC Flags
|
||||
<qc-flags slot="content" :data="{ collectionTime: '123' }" />
|
||||
</pop-over-with-icon>
|
||||
|
||||
<!-- gamma 独有的二级交互栏 -->
|
||||
<template v-if="analysisType == ANALYZE_TYPE.GAMMA">
|
||||
<pop-over-with-icon>
|
||||
Graph Assistance
|
||||
<graph-assistance slot="content" />
|
||||
</pop-over-with-icon>
|
||||
<pop-over-with-icon>
|
||||
Nuclide Library
|
||||
<nuclear-library slot="content" />
|
||||
</pop-over-with-icon>
|
||||
<div class="peak-info">
|
||||
<button-with-switch-icon @change="handlePeakInfoChange">
|
||||
Peak Information
|
||||
</button-with-switch-icon>
|
||||
</div>
|
||||
</template>
|
||||
<!-- gamma 独有的二级交互栏结束 -->
|
||||
|
||||
<!-- beta-gamma 独有的二级交互栏 -->
|
||||
<template v-if="analysisType == ANALYZE_TYPE.BETA_GAMMA">
|
||||
<pop-over-with-icon placement="bottomLeft" style="width: 159px" v-model="spectraVisible">
|
||||
Spectra
|
||||
<spectra slot="content" v-model="spectraType" @input="spectraVisible = false" />
|
||||
</pop-over-with-icon>
|
||||
</template>
|
||||
<!-- beta-gamma 独有的二级交互栏结束 -->
|
||||
</div>
|
||||
<!-- 二级交互栏结束 -->
|
||||
|
||||
<!-- 频谱分析部分 -->
|
||||
<div class="spectrum-analysis-main">
|
||||
<gamma-analysis v-if="analysisType == ANALYZE_TYPE.GAMMA" ref="gammaAnalysisRef" />
|
||||
<beta-gamma-analysis v-if="analysisType == ANALYZE_TYPE.BETA_GAMMA" ref="betaGammaAnalysisRef" />
|
||||
<beta-gamma-analysis
|
||||
v-if="analysisType == ANALYZE_TYPE.BETA_GAMMA"
|
||||
ref="betaGammaAnalysisRef"
|
||||
:data="analysisData"
|
||||
/>
|
||||
<resize-observer @notify="handleResize" />
|
||||
</div>
|
||||
<!-- 频谱分析部分结束 -->
|
||||
|
||||
<!-- 从数据库加载开始 -->
|
||||
<load-from-db-modal v-model="loadFromDbModalVisible" />
|
||||
<load-from-db-modal v-model="loadFromDbModalVisible" @loadSample="handleLoadSampleFromDB" />
|
||||
<!-- 从数据库加载结束 -->
|
||||
|
||||
<!-- 从文件加载开始 -->
|
||||
|
@ -101,15 +65,8 @@
|
|||
</div>
|
||||
</template>
|
||||
<script>
|
||||
import ButtonWithSwitchIcon from './components/SubOperators/ButtonWithSwitchIcon.vue'
|
||||
import DetailedInfomation from './components/SubOperators/DetailedInfomation.vue'
|
||||
import GraphAssistance from './components/SubOperators/GraphAssistance.vue'
|
||||
import NuclearLibrary from './components/SubOperators/NuclearLibrary.vue'
|
||||
import PopOverWithIcon from './components/SubOperators/PopOverWithIcon.vue'
|
||||
import QcFlags from './components/SubOperators/QcFlags.vue'
|
||||
import GammaAnalysis from './gamma-analysis.vue'
|
||||
import BetaGammaAnalysis from './beta-gamma-analysis.vue'
|
||||
import Spectra from './components/SubOperators/Spectra.vue'
|
||||
import SpectraListInMenu from './components/SpectraListInMenu.vue'
|
||||
import LoadFromDbModal from './components/Modals/LoadFromDBModal.vue'
|
||||
import LoadFromFileModal from './components/Modals/LoadFromFileModal.vue'
|
||||
|
@ -118,7 +75,8 @@ import NuclideActivityAndMdcModal from './components/Modals/NuclideActivityAndMD
|
|||
import MultiLevelMenu from './components/MultiLevelMenu.vue'
|
||||
import SaveSettingModal from './components/Modals/SaveSettingModal.vue'
|
||||
import AnalyzeSettingModal from './components/Modals/AnalyzeSettingModal.vue'
|
||||
import AnalyzeInteractiveToolModal from './components/Modals/AnalyzeInteractiveToolModal.vue'
|
||||
import AnalyzeInteractiveToolModal from './components/Modals/AnalyzeInteractiveToolModal/index.vue'
|
||||
import { getAction } from '../../api/manage'
|
||||
|
||||
// 分析类型
|
||||
const ANALYZE_TYPE = {
|
||||
|
@ -127,15 +85,8 @@ const ANALYZE_TYPE = {
|
|||
}
|
||||
export default {
|
||||
components: {
|
||||
PopOverWithIcon,
|
||||
ButtonWithSwitchIcon,
|
||||
BetaGammaAnalysis,
|
||||
GammaAnalysis,
|
||||
QcFlags,
|
||||
GraphAssistance,
|
||||
DetailedInfomation,
|
||||
NuclearLibrary,
|
||||
Spectra,
|
||||
SpectraListInMenu,
|
||||
LoadFromDbModal,
|
||||
LoadFromFileModal,
|
||||
|
@ -150,18 +101,15 @@ export default {
|
|||
this.ANALYZE_TYPE = ANALYZE_TYPE
|
||||
|
||||
return {
|
||||
analysisType: ANALYZE_TYPE.BETA_GAMMA, // 分析类型
|
||||
spectraType: 'Sample Data',
|
||||
spectraVisible: false,
|
||||
analysisType: null, // 分析类型
|
||||
|
||||
spectraList: [
|
||||
{ id: 1, name: 'AUX01 003-20151223 1855 S FULL 40183.7.PHD' },
|
||||
{ id: 2, name: 'AUX02 003-20151223 1855 S FULL 40183.7.PHD' }
|
||||
],
|
||||
sampleList: [],
|
||||
|
||||
loadFromDbModalVisible: false, // 从数据库加载弹窗
|
||||
loadFromFileModalVisible: false, // 从文件加载弹窗
|
||||
|
||||
analysisData: {}, // 要分析的谱数据
|
||||
|
||||
peakInfomationModalVisible: false,
|
||||
|
||||
nuclideActivityAndMDCModalVisible: false,
|
||||
|
@ -170,15 +118,47 @@ export default {
|
|||
|
||||
analyzeConfigureModalVisible: false, // 分析设置弹窗
|
||||
|
||||
analyzeInteractiveToolModalVisible: true // 分析工具弹窗
|
||||
analyzeInteractiveToolModalVisible: false // 分析工具弹窗
|
||||
}
|
||||
},
|
||||
created() {
|
||||
// 测试
|
||||
this.loadSelectedSample({
|
||||
dbName: 'auto',
|
||||
sampleType: 'B',
|
||||
sampleId: '1523651'
|
||||
})
|
||||
},
|
||||
methods: {
|
||||
// 从数据库加载
|
||||
handleLoadFromDb() {
|
||||
this.loadFromDbModalVisible = true
|
||||
},
|
||||
|
||||
// 从数据库加载-选择完成
|
||||
handleLoadSampleFromDB(sampleList) {
|
||||
this.sampleList = sampleList
|
||||
},
|
||||
|
||||
// 加载选中的样本
|
||||
async loadSelectedSample({ dbName, sampleType, sampleId }) {
|
||||
// B是beta-gamma P G是gamma
|
||||
if (sampleType == 'B') {
|
||||
const { success, result, message } = await getAction('/spectrumAnalysis/getDBSpectrumChart', {
|
||||
dbName,
|
||||
sampleId: sampleId
|
||||
})
|
||||
if (success) {
|
||||
this.analysisData = result.sample
|
||||
this.analysisType = ANALYZE_TYPE.BETA_GAMMA
|
||||
} else {
|
||||
this.$message.error(message)
|
||||
}
|
||||
} else {
|
||||
// gamma
|
||||
}
|
||||
},
|
||||
|
||||
// 从文件加载
|
||||
handleLoadFromFile() {
|
||||
this.loadFromFileModalVisible = true
|
||||
|
@ -186,7 +166,7 @@ export default {
|
|||
|
||||
// 清理全部
|
||||
handleCleanAll() {
|
||||
this.spectraList = []
|
||||
this.sampleList = []
|
||||
},
|
||||
|
||||
// 保存结果到文件, 服务端生成文件,前端下载
|
||||
|
@ -298,11 +278,6 @@ export default {
|
|||
console.log('%c [ handleLineColorConfig ]-225', 'font-size:13px; background:pink; color:#bf2c9f;')
|
||||
},
|
||||
|
||||
// peak info 点击左右方向
|
||||
handlePeakInfoChange(direction) {
|
||||
this.$refs.gammaAnalysisRef.moveMarkLine(direction)
|
||||
},
|
||||
|
||||
handleResize() {
|
||||
this.$refs.gammaAnalysisRef && this.$refs.gammaAnalysisRef.resize()
|
||||
this.$refs.betaGammaAnalysisRef && this.$refs.betaGammaAnalysisRef.resize()
|
||||
|
@ -340,19 +315,20 @@ export default {
|
|||
style: {
|
||||
marginTop: '5px',
|
||||
marginBottom: '5px',
|
||||
display: this.spectraList.length ? '' : 'none'
|
||||
display: this.sampleList.length ? '' : 'none'
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
type: 'SpectraListInMenu',
|
||||
attrs: {
|
||||
list: this.spectraList
|
||||
list: this.sampleList
|
||||
},
|
||||
on: {
|
||||
change: event => {
|
||||
console.log('%c [ event ]-187', 'font-size:13px; background:pink; color:#bf2c9f;', event)
|
||||
console.log('%c [ ]-188', 'font-size:13px; background:pink; color:#bf2c9f;', this)
|
||||
change: spectra => {
|
||||
if (spectra) {
|
||||
this.loadSelectedSample(spectra)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -631,48 +607,50 @@ export default {
|
|||
}
|
||||
// 顶部操作栏结束
|
||||
|
||||
// 二级操作栏开始
|
||||
&-SubOperators {
|
||||
flex-shrink: 0;
|
||||
margin-top: 15px;
|
||||
display: flex;
|
||||
flex-wrap: nowrap;
|
||||
overflow: auto;
|
||||
::v-deep {
|
||||
// 二级操作栏开始
|
||||
.spectrum-analysis-sub-operators {
|
||||
flex-shrink: 0;
|
||||
margin-bottom: 19px;
|
||||
display: flex;
|
||||
flex-wrap: nowrap;
|
||||
overflow: auto;
|
||||
|
||||
.pop-over-with-icon {
|
||||
height: 32px;
|
||||
.pop-over-with-icon {
|
||||
height: 32px;
|
||||
|
||||
&:not(:last-child) {
|
||||
margin-right: 11px;
|
||||
&:not(:last-child) {
|
||||
margin-right: 11px;
|
||||
}
|
||||
|
||||
&:nth-child(1) {
|
||||
width: 256px;
|
||||
}
|
||||
&:nth-child(2) {
|
||||
width: 186px;
|
||||
}
|
||||
&:nth-child(3) {
|
||||
width: 246px;
|
||||
}
|
||||
&:nth-child(4) {
|
||||
width: 246px;
|
||||
}
|
||||
}
|
||||
|
||||
&:nth-child(1) {
|
||||
width: 256px;
|
||||
}
|
||||
&:nth-child(2) {
|
||||
width: 186px;
|
||||
}
|
||||
&:nth-child(3) {
|
||||
width: 246px;
|
||||
}
|
||||
&:nth-child(4) {
|
||||
width: 246px;
|
||||
.peak-info {
|
||||
width: 306px;
|
||||
height: 32px;
|
||||
display: inline-block;
|
||||
}
|
||||
}
|
||||
|
||||
.peak-info {
|
||||
width: 306px;
|
||||
height: 32px;
|
||||
display: inline-block;
|
||||
}
|
||||
// 二级操作栏结束
|
||||
}
|
||||
// 二级操作栏结束
|
||||
|
||||
// 主体部分开始
|
||||
&-main {
|
||||
flex: 1;
|
||||
margin-top: 19px;
|
||||
height: calc(100% - 100px);
|
||||
margin-top: 15px;
|
||||
height: calc(100% - 45px);
|
||||
overflow: hidden;
|
||||
}
|
||||
// 主体部分结束
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user