feat: 增加Interactive Tool弹窗中的部分二级弹窗,对接样本类型为beta-gamma的部分数据

This commit is contained in:
Xu Zhimeng 2023-07-11 19:35:18 +08:00
parent 09e77962d2
commit 8fb0089be1
15 changed files with 1463 additions and 4727 deletions

View File

@ -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 Spectrumbata-gammagamma channely
@ -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);

View File

@ -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
},

View File

@ -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">
&lt; 6 Peaks with Anthro.Nuclides &gt;
</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">&lt;</a-button>
<a-button type="primary">&gt;</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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -0,0 +1,360 @@
<template>
<custom-modal v-model="visible" :width="1200" title="Nuclide Review" :footer="null">
<div class="nuclide-review-search">
<span>&lt;</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>&gt;</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>

View File

@ -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">
&lt; 6 Peaks with Anthro.Nuclides &gt;
</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">&lt;</a-button>
<a-button type="primary">&gt;</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>

View File

@ -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)
},
//

View File

@ -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])
}
}
}
}

View File

@ -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>

View File

@ -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

View File

@ -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>

View File

@ -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 }) {
// Bbeta-gamma P Ggamma
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;
}
//
}