feat: Beta Gamma的各弹窗,对接部分接口

This commit is contained in:
Xu Zhimeng 2023-07-20 14:11:37 +08:00
parent 38b23f5e0d
commit 728e557006
25 changed files with 1785 additions and 146 deletions

13
jsconfig.json Normal file
View File

@ -0,0 +1,13 @@
{
"compilerOptions": {
"baseUrl": ".",
"paths": {
"@/*": ["src/*"]
},
"target": "ES6",
"module": "CommonJS",
"allowSyntheticDefaultImports": true
},
"include": ["src/**/*"],
"exclude": ["node_modules"]
}

View File

@ -24,6 +24,12 @@
@text-color: #fff;
@component-background: @modalBg;
@heading-color: #fff;
@input-bg: @formInputBgColor;
@input-border-color: @formInputBorderColor;
.ant-btn:hover,
.ant-btn:active,
.ant-btn:focus {
@ -69,6 +75,8 @@ body {
@table-padding-vertical-sm: 2px;
@table-padding-vertical: 6px;
@table-padding-horizontal: 8px;
@table-row-hover-bg: #0e505f;
.ant-table {
color: #ade6ee;
font-size: 16px;
@ -89,15 +97,12 @@ body {
&:nth-child(2n) {
background-color: #08373a;
}
td {
padding: 10px 8px !important;
border-bottom: none;
}
&:hover {
td {
background-color: #0e505f !important;
}
}
&.ant-table-row-selected {
td {
background-color: #0d4e5c !important;
@ -337,9 +342,11 @@ body {
@time-picker-selected-bg: @primary-color;
@item-hover-bg: @primary-color;
.ant-time-picker {
width: 100%;
&-input {
background: @modalBg;
border-radius: 0;
&::placeholder {
color: #fff;
}
@ -347,7 +354,6 @@ body {
&-clear,
&-clock-icon {
background-color: @modalBg !important;
color: #01b6e3 !important;
}
@ -370,8 +376,6 @@ body {
// 输入框样式
.ant-input {
background-color: @formInputBgColor !important;
border-color: @formInputBorderColor !important;
border-radius: 0;
color: #fff;
&::placeholder {

View File

@ -12,7 +12,7 @@
<span @click="handleUnzoom">Unzoom</span>
</div>
<div class="beta-gamma-spectrum-chart-main">
<!-- 2D 图表 -->
<!-- 2D 图表为了相应Unzoom采用的v-show -->
<div class="_2d-chart" v-show="active == 0">
<custom-chart
ref="chartRef"
@ -46,9 +46,44 @@ import CustomChart from '@/components/CustomChart/index.vue'
import Custom3DChart from '@/components/Custom3DChart/index.vue'
import ColorPalette from './ColorPalette.vue'
import { getXAxisAndYAxisByPosition } from '@/utils/chartHelper.js'
import * as echarts from 'echarts'
const buttons = ['2D', '3D Surface', '3D Scatter']
function renderItem(params, api) {
console.log('%c [ params, api ]-54', 'font-size:13px; background:pink; color:#bf2c9f;', params, api)
const categoryIndex = api.value(0)
console.log('%c [ categoryIndex ]-56', 'font-size:13px; background:pink; color:#bf2c9f;', categoryIndex)
const start = api.coord([api.value(1), categoryIndex])
console.log('%c [ start ]-58', 'font-size:13px; background:pink; color:#bf2c9f;', start)
const end = api.coord([api.value(2), categoryIndex])
console.log('%c [ end ]-60', 'font-size:13px; background:pink; color:#bf2c9f;', end)
const height = api.size([0, 1])[1] * 0.6
console.log('%c [ height ]-62', 'font-size:13px; background:pink; color:#bf2c9f;', height)
const rectShape = echarts.graphic.clipRectByRect(
{
x: start[0],
y: start[1] - height / 2,
width: end[0] - start[0],
height: height
},
{
x: params.coordSys.x,
y: params.coordSys.y,
width: params.coordSys.width,
height: params.coordSys.height
}
)
return (
rectShape && {
type: 'rect',
transition: ['shape'],
shape: rectShape,
style: api.style()
}
)
}
// 2D
const twoDOption = {
grid: {
@ -79,6 +114,11 @@ const twoDOption = {
},
nameLocation: 'center',
nameGap: 30,
axisLine: {
lineStyle: {
color: 'rgba(119, 181, 213, .3)'
}
},
axisLabel: {
color: '#ade6ee',
fontSize: 12
@ -104,6 +144,11 @@ const twoDOption = {
},
nameLocation: 'center',
nameGap: 35,
axisLine: {
lineStyle: {
color: 'rgba(119, 181, 213, .3)'
}
},
axisLabel: {
color: '#ade6ee',
fontSize: 12
@ -121,16 +166,28 @@ const twoDOption = {
max: 256,
interval: 64
},
series: {
xAxisIndex: 0,
yAxisIndex: 0,
type: 'scatter',
symbolSize: 5,
data: [],
itemStyle: {
color: '#fff'
series: [
{
type: 'scatter',
symbolSize: 5,
data: [],
itemStyle: {
color: '#fff'
}
},
{
type: 'custom',
renderItem: renderItem,
itemStyle: {
opacity: 0.8
},
encode: {
x: [1, 2],
y: 0
},
data: [[]]
}
},
],
brush: {}
}
@ -154,26 +211,26 @@ const threeDSurfaceOption = {
},
grid3D: {
axisLabel: {
color: '#C4E5A6'
color: '#ade6ee'
},
axisPointer: {
show: false
},
axisLine: {
lineStyle: {
color: '#fff'
color: 'rgba(119, 181, 213, .3)'
}
},
splitLine: {
lineStyle: {
color: '#fff'
color: 'rgba(119, 181, 213, .3)'
}
}
},
xAxis3D: {
name: 'Beta Channel',
nameTextStyle: {
color: '#C4E5A6',
color: '#5b9cba',
fontSize: 14
},
min: 0,
@ -183,7 +240,7 @@ const threeDSurfaceOption = {
yAxis3D: {
name: 'Gamma Channel',
nameTextStyle: {
color: '#C4E5A6',
color: '#5b9cba',
fontSize: 14
},
min: 0,
@ -193,7 +250,7 @@ const threeDSurfaceOption = {
zAxis3D: {
name: 'Count',
nameTextStyle: {
color: '#C4E5A6',
color: '#5b9cba',
fontSize: 14
},
max: 0
@ -223,26 +280,26 @@ const threeDScatterOption = {
},
grid3D: {
axisLabel: {
color: '#C4E5A6'
color: '#ade6ee'
},
axisPointer: {
show: false
},
axisLine: {
lineStyle: {
color: '#fff'
color: 'rgba(119, 181, 213, .3)'
}
},
splitLine: {
lineStyle: {
color: '#fff'
color: 'rgba(119, 181, 213, .3)'
}
}
},
xAxis3D: {
name: 'Beta Channel',
nameTextStyle: {
color: '#C4E5A6',
color: '#5b9cba',
fontSize: 14
},
min: 0,
@ -252,7 +309,7 @@ const threeDScatterOption = {
yAxis3D: {
name: 'Gamma Channel',
nameTextStyle: {
color: '#C4E5A6',
color: '#5b9cba',
fontSize: 14
},
min: 0,
@ -262,7 +319,7 @@ const threeDScatterOption = {
zAxis3D: {
name: 'Count',
nameTextStyle: {
color: '#C4E5A6',
color: '#5b9cba',
fontSize: 14
},
max: 0
@ -288,6 +345,10 @@ export default {
histogramDataDList: {
type: Array,
default: () => []
},
boundary: {
type: Array,
default: () => []
}
},
components: {
@ -317,6 +378,13 @@ export default {
// Beta-Gamma Spectrum: Sample
handleChange(index) {
this.active = index
// v-showresize0, resize
if (this.active == 0) {
this.$nextTick(() => {
this.resize()
})
}
},
// unzoom
@ -359,19 +427,23 @@ export default {
handleMouseUp() {
setTimeout(() => {
const chart = this.$refs.chartRef.getChartInstance()
//
chart.dispatchAction({
type: 'brush',
areas: []
})
//
chart.dispatchAction({
type: 'takeGlobalCursor'
})
this.clearBrush(chart)
}, 0)
},
clearBrush(chart) {
//
chart.dispatchAction({
type: 'brush',
areas: []
})
//
chart.dispatchAction({
type: 'takeGlobalCursor'
})
},
//
handleBrushEnd(param) {
const chart = this.$refs.chartRef.getChartInstance()
@ -393,16 +465,7 @@ export default {
this.emitRangeChange([x1, x2, y1, y2])
}
//
chart.dispatchAction({
type: 'brush',
areas: []
})
//
chart.dispatchAction({
type: 'takeGlobalCursor'
})
this.clearBrush(chart)
},
//
@ -435,14 +498,16 @@ export default {
}
},
watch: {
// 2D
histogramDataList: {
handler(newVal) {
this.active = 0
this.twoDOption.series.data = newVal.filter(item => item.c).map(item => [item.b, item.g, item.c]) // 2D Scatter
this.twoDOption.series[0].data = newVal.filter(item => item.c).map(item => [item.b, item.g, item.c]) // 2D Scatter
},
immediate: true
},
// 3D
histogramDataDList: {
handler(newVal) {
const maxCount = Math.max(...newVal.map(item => item.c))
@ -457,6 +522,15 @@ export default {
immediate: true
},
// 2D
boundary: {
handler(newVal) {
console.log('%c [ ]-462', 'font-size:13px; background:pink; color:#bf2c9f;', newVal)
this.twoDOption.series[1].data = newVal.map(({ minX, minY, maxX, maxY }) => [minX, minY, maxX, maxY])
},
immediate: true
},
currCount: {
handler(val) {
if (val <= this.maxCount) {
@ -466,9 +540,9 @@ export default {
val / this.maxCount
)
this.twoDOption.series.itemStyle.color = `rgb(${r}, ${g}, ${b})`
this.twoDOption.series[0].itemStyle.color = `rgb(${r}, ${g}, ${b})`
} else {
this.twoDOption.series.itemStyle.color = '#fff'
this.twoDOption.series[0].itemStyle.color = '#fff'
}
},
immediate: true

View File

@ -4,7 +4,7 @@
:width="900"
title="Analysis Settings"
class="analysis-settings"
:okHanlder="handleOk"
:okHandler="handleOk"
>
<!-- 第一行 -->
<div class="analysis-settings-item">

View File

@ -1,9 +1,8 @@
<template>
<custom-modal v-model="visible" :width="1000" :title="type == 1 ? 'ARR' : 'RRR'">
<pre>
{{ content }}
</pre
>
<custom-modal v-model="visible" :width="1000" :title="type == 1 || type == 3 ? 'ARR' : 'RRR'">
<a-spin :spinning="isLoading">
<pre>{{ content }}</pre>
</a-spin>
<div slot="custom-footer" style="text-align: center;">
<a-space :size="20">
<a-button type="primary">Export</a-button>
@ -20,45 +19,41 @@ export default {
mixins: [ModalMixin],
props: {
type: {
type: Number,
default: 1
type: Number
},
sampleId: {
type: String
}
},
data() {
return {
content: `-------------------------- SampleAnalyse Beginning at 2023-07-10 11:44:56 --------------------------
-------------------------- SampleAnalyse Beginning at 2023-07-10 11:44:56 --------------------------
-------------------------- SampleAnalyse Beginning at 2023-07-10 11:44:56 --------------------------
-------------------------- SampleAnalyse Beginning at 2023-07-10 11:44:56 --------------------------
-------------------------- SampleAnalyse Beginning at 2023-07-10 11:44:56 --------------------------
-------------------------- SampleAnalyse Beginning at 2023-07-10 11:44:56 --------------------------
-------------------------- SampleAnalyse Beginning at 2023-07-10 11:44:56 --------------------------
-------------------------- SampleAnalyse Beginning at 2023-07-10 11:44:56 --------------------------
-------------------------- SampleAnalyse Beginning at 2023-07-10 11:44:56 --------------------------
-------------------------- SampleAnalyse Beginning at 2023-07-10 11:44:56 --------------------------
-------------------------- SampleAnalyse Beginning at 2023-07-10 11:44:56 --------------------------
-------------------------- SampleAnalyse Beginning at 2023-07-10 11:44:56 --------------------------
-------------------------- SampleAnalyse Beginning at 2023-07-10 11:44:56 --------------------------
-------------------------- SampleAnalyse Beginning at 2023-07-10 11:44:56 --------------------------
-------------------------- SampleAnalyse Beginning at 2023-07-10 11:44:56 --------------------------
-------------------------- SampleAnalyse Beginning at 2023-07-10 11:44:56 --------------------------
-------------------------- SampleAnalyse Beginning at 2023-07-10 11:44:56 --------------------------
-------------------------- SampleAnalyse Beginning at 2023-07-10 11:44:56 --------------------------
-------------------------- SampleAnalyse Beginning at 2023-07-10 11:44:56 --------------------------
-------------------------- SampleAnalyse Beginning at 2023-07-10 11:44:56 --------------------------
-------------------------- SampleAnalyse Beginning at 2023-07-10 11:44:56 --------------------------
-------------------------- SampleAnalyse Beginning at 2023-07-10 11:44:56 --------------------------
-------------------------- SampleAnalyse Beginning at 2023-07-10 11:44:56 --------------------------
`,
content: '',
isLoading: true
}
},
methods: {
async getContent() {
let url = ''
switch (this.type) {
case 3:
url = '/spectrumAnalysis/viewARR'
break
}
try {
const res = getAction('/')
this.content = ''
this.isLoading = true
const res = await getAction(url, { sampleId: this.sampleId })
this.content = res
} catch (error) {
console.error(error)
} finally {
this.isLoading = false
}
},
beforeModalOpen() {
if (this.sampleId) {
this.getContent()
}
}
}
@ -67,7 +62,7 @@ export default {
<style lang="less" scoped>
pre {
max-height: 450px;
height: 450px;
padding: 5px;
overflow: auto;
background-color: #285367;

View File

@ -0,0 +1,84 @@
<template>
<custom-modal v-model="visible" :width="800" title="Comments">
<a-spin :spinning="isLoading">
<title-over-boarder title="Spectrum Comment">
<a-textarea v-model="comments.spectrumCommentInfo" :rows="8" :disabled="true"></a-textarea>
</title-over-boarder>
<title-over-boarder title="Other Analyser's Comment">
<a-textarea v-model="comments.spectrumOtherCommentInfo" :rows="8" :disabled="true"></a-textarea>
</title-over-boarder>
<title-over-boarder title="Spectrum Analysis Comment">
<a-textarea v-model="comments.spectrumAnalysisCommentInfo" :rows="8" :disabled="!isAdd"></a-textarea>
</title-over-boarder>
</a-spin>
<a-space slot="custom-footer" :size="20">
<a-button v-if="isAdd" type="primary" @click="handleOk">Commit Comment Indormations</a-button>
<a-button type="primary" @click="visible = false">Cancel</a-button>
</a-space>
</custom-modal>
</template>
<script>
import ModalMixin from '@/mixins/ModalMixin'
import TitleOverBoarder from '../../TitleOverBoarder.vue'
import { getAction } from '../../../../../api/manage'
export default {
components: { TitleOverBoarder },
mixins: [ModalMixin],
props: {
isAdd: {
type: Boolean,
default: true
},
sampleId: {
type: String
}
},
data() {
return {
comments: {
spectrumAnalysisCommentInfo: '',
spectrumCommentInfo: '',
spectrumOtherCommentInfo: ''
},
isLoading: false
}
},
methods: {
async getCommets() {
try {
this.isLoading = true
const res = await getAction('/spectrumAnalysis/viewComment', {
sampleId: this.sampleId
})
console.log('%c [ res ]-44', 'font-size:13px; background:pink; color:#bf2c9f;', res)
if (res.success) {
this.comments = res.result
} else {
this.$message.error(res.message)
}
} catch (error) {
console.error(error)
} finally {
this.isLoading = false
}
},
beforeModalOpen() {
this.comments = ''
this.getCommets()
},
handleOk() {
console.log('%c [ ]-26', 'font-size:13px; background:pink; color:#bf2c9f;', this.comments)
}
}
}
</script>
<style lang="less" scoped>
.title-over-border {
&:not(:first-child) {
margin-top: 10px;
}
}
</style>

View File

@ -0,0 +1,75 @@
<template>
<custom-modal v-model="visible" :width="750" title="QC Result">
<a-table :columns="columns" :dataSource="list" :pagination="false">
<template slot="status" slot-scope="text">
{{ text == 0 ? 'PASS' : 'ERROR' }}
</template>
</a-table>
<a-space slot="custom-footer" :size="20">
<a-button type="primary">Save Text</a-button>
<a-button type="primary">Save Excel</a-button>
<a-button type="primary" @click="visible = false">Cancel</a-button>
</a-space>
</custom-modal>
</template>
<script>
import ModalMixin from '@/mixins/ModalMixin'
const columns = [
{
title: 'QC Flags',
dataIndex: 'qcFlags',
align: 'center'
},
{
title: 'Evaluation Metrics',
dataIndex: 'evaluationMetrics',
align: 'center'
},
{
title: 'Value',
dataIndex: 'value',
align: 'center'
},
{
title: 'Status',
dataIndex: 'status',
align: 'center',
scopedSlots: {
customRender: 'status'
},
customCell: record => {
console.log('%c [ ]-36', 'font-size:13px; background:pink; color:#bf2c9f;', record)
return {
style: {
backgroundColor: record.status == 0 ? '#008000 !important' : '#f00 !important'
}
}
}
}
]
export default {
mixins: [ModalMixin],
data() {
this.columns = columns
return {
list: [
{
qcFlags: 'qcFlags',
evaluationMetrics: 'evaluationMetrics',
value: 'value',
status: 0
},
{
qcFlags: 'qcFlags',
evaluationMetrics: 'evaluationMetrics',
value: 'value',
status: 1
}
]
}
}
}
</script>
<style lang="less" scoped></style>

View File

@ -0,0 +1,57 @@
<template>
<div class="additional-info">
<a-form-model :labelCol="{ span: 10 }" :wrapperCol="{ span: 14 }">
<a-form-model-item
label="(rel.) Xe transfer efficiency (Xe Volume in the measurement cell/Xe colume in the archive bottle) a description, how this is calculated shall be provided in the Comment section"
>
<a-textarea :rows="4"></a-textarea>
</a-form-model-item>
<a-form-model-item label="uncertainty of the Xe transfer efficiency [%]">
<a-input></a-input>
</a-form-model-item>
<a-form-model-item label="Comments">
<a-textarea :rows="4"></a-textarea>
</a-form-model-item>
<a-form-model-item label="Detailed description of the measurement system">
<a-textarea :rows="4"></a-textarea>
</a-form-model-item>
<a-form-model-item label="Detailed description of the sample analysis process">
<a-textarea :rows="4"></a-textarea>
</a-form-model-item>
<a-form-model-item label="Uncertainty budget">
<a-textarea :rows="4"></a-textarea>
</a-form-model-item>
<a-form-model-item
label="Information on any changes to the system and/or the process (including recalibrations] since the time of the previous exercise "
>
<a-textarea :rows="4"></a-textarea>
</a-form-model-item>
<a-form-model-item label="ysical Constants used (branching ratios, half lifes,..)">
<a-textarea :rows="4"></a-textarea>
</a-form-model-item>
</a-form-model>
</div>
</template>
<script>
export default {}
</script>
<style lang="less" scoped>
.additional-info {
::v-deep {
.ant-form-item {
margin-bottom: 5px;
&-label {
white-space: pre-wrap;
padding-right: 15px;
line-height: 20px;
display: flex;
align-items: center;
justify-content: flex-end;
}
}
}
}
</style>

View File

@ -0,0 +1,143 @@
<template>
<div class="analysis-result">
<div class="form">
<a-row v-for="(column, index) in columns" :key="index">
<a-col class="label" :span="12"> {{ column.label }} </a-col>
<a-col :span="12">
<component :is="column.type" v-bind="column.attrs" v-model="model[column.dataIndex]" />
</a-col>
</a-row>
</div>
</div>
</template>
<script>
const columns = [
{
label: 'Pressure in the archive bottle [Pa] at STP corrected',
type: 'a-input',
dataIndex: 'pressureInTheArchiveBottle'
},
{
label: 'Volume of Archive bottle [m3]',
type: 'a-input',
dataIndex: 'volumeOfArchiveBottle'
},
{
label: 'Gas composition [%]',
type: 'a-input',
dataIndex: 'gasComposition'
},
{
label: 'Stable Xe meas. start date [YYYY/MM/DD]',
type: 'a-date-picker',
dataIndex: 'stableXeMeasStartDate',
attrs: {
format: 'YYYY/MM/DD'
}
},
{
label: 'Stable Xe meas. start time [HH:MM:SS.S]',
type: 'a-time-picker',
dataIndex: 'stableXeMeasStartTime',
attrs: {
format: 'HH:mm:ss',
valueFormat: 'HH:mm:ss'
}
},
{
label: 'Stable Xenon volume in the archive bottle [cm3] STP corrected',
type: 'a-input',
dataIndex: 'stableXenonVolumeInTheArchiveBottle'
},
{
label: 'Uncertainty of stable Xenon volume (%)',
type: 'a-input',
dataIndex: 'uncertaintyOfStableXenonVolume'
},
{
label: 'Stable Xenon volume in the measurement cell [cm3] STP corrected',
type: 'a-input',
dataIndex: 'stableXenonVolumeInTheMeasurementCell'
},
{
label: 'Uncertainty of stable Xenon volume [%]',
type: 'a-input',
dataIndex: 'uncertaintyOfStableXenonVolume2'
},
{
label: 'Radioactive Xe meas. start date [YYYY/MM/DD]',
type: 'a-input',
dataIndex: 'radioactiveXeMeasStartDate'
},
{
label: 'Radioactive Xe meas. start time [HH:MM:SS.S]',
type: 'a-input',
dataIndex: 'radioactiveXeMeasStartTime'
},
{
label: 'Acquisition live time [s]',
type: 'a-input',
dataIndex: 'acquisitionLiveTime'
}
]
export default {
data() {
this.columns = columns
return {
model: {
pressureInTheArchiveBottle: '',
volumeOfArchiveBottle: '',
gasComposition: '',
stableXeMeasStartDate: '2023/07/18',
stableXeMeasStartTime: '17:36:21',
stableXenonVolumeInTheArchiveBottle: '',
uncertaintyOfStableXenonVolume: '',
stableXenonVolumeInTheMeasurementCell: '',
uncertaintyOfStableXenonVolume2: '',
radioactiveXeMeasStartDate: '',
radioactiveXeMeasStartTime: '',
acquisitionLiveTime: ''
}
}
}
}
</script>
<style lang="less" scoped>
.form {
border: 1px solid #0b8c82;
.ant-row {
&:not(:last-child) {
border-bottom: 1px solid #0b8c82;
}
.ant-col {
&:first-child {
padding: 0 4px;
height: 32px;
line-height: 32px;
border-right: 1px solid #0b8c82;
}
}
.label {
color: @primary-color;
}
.ant-input {
border: none;
}
}
::v-deep {
.ant-time-picker-input,
.ant-calendar-picker-input {
border: none;
}
}
}
</style>

View File

@ -0,0 +1,151 @@
<template>
<div class="general-infomation">
<div class="text">
<pre>{{ text }}</pre>
</div>
<div class="form">
<a-row v-for="(column, index) in columns" :key="index">
<a-col class="label" :span="10"> {{ column.label }} </a-col>
<a-col :span="14">
<component :is="column.type" v-bind="column.attrs" v-model="model[column.dataIndex]" />
</a-col>
</a-row>
</div>
</div>
</template>
<script>
const columns = [
{
label: 'Laboratory (CTBTO code)',
type: 'a-input',
dataIndex: 'laboratory'
},
{
label: 'Sample ID (SRID or other)',
type: 'a-input',
dataIndex: 'sampleId'
},
{
label: 'Collection start date or reference date [YYYY/MM/DD]',
type: 'a-input',
dataIndex: 'collectionStartDate'
},
{
label: 'Collection start time or reference time [HH:mm:ss.S]',
type: 'a-input',
dataIndex: 'collectionStartTime'
},
{
label: 'Collection stop date [YYYY/MM/DD]',
type: 'a-input',
dataIndex: 'collectionStopDate'
},
{
label: 'Collection stop time [HH:mm:ss.S]',
type: 'a-input',
dataIndex: 'collectionStopTime'
},
{
label: 'Receipt date [YYYY/MM/DD]',
type: 'a-date-picker',
dataIndex: 'receiptDate',
attrs: {
format: 'YYYY/MM/DD'
}
},
{
label: 'Receipt time [HH:mm:ss.S]',
type: 'a-time-picker',
dataIndex: 'receiptTime',
attrs: {
format: 'HH:mm:ss',
valueFormat: 'HH:mm:ss'
}
},
{
label: 'Report transmission date [YYYY/MM/DD]',
type: 'a-date-picker',
dataIndex: 'reportTransmissionDate',
attrs: {
format: 'YYYY/MM/DD'
}
},
{
label: 'Report transmission time [HH:mm:ss.S]',
type: 'a-time-picker',
dataIndex: 'reportTransmissionTime',
attrs: {
format: 'HH:mm:ss',
valueFormat: 'HH:mm:ss'
}
}
]
export default {
data() {
this.columns = columns
return {
text: ` - All dates
- If`,
model: {
laboratory: 'CNL06',
sampleId: '2311G',
collectionStartDate: '2015/12/23',
collectionStartTime: '23:55:43.0',
collectionStopDate: '2015/10/24',
collectionStopTime: '11:55:44:7',
receiptDate: '2023/7/10',
receiptTime: '00:45:33',
reportTransmissionDate: '2023/7/10',
reportTransmissionTime: '13:45:33'
}
}
}
}
</script>
<style lang="less" scoped>
.general-infomation {
.text {
height: 300px;
overflow: auto;
border: 1px solid #0b8c82;
}
.form {
margin-top: 10px;
border: 1px solid #0b8c82;
.ant-row {
&:not(:last-child) {
border-bottom: 1px solid #0b8c82;
}
.ant-col {
&:first-child {
padding: 0 4px;
height: 32px;
line-height: 32px;
border-right: 1px solid #0b8c82;
}
}
.label {
color: @primary-color;
}
.ant-input {
border: none;
}
}
::v-deep {
.ant-time-picker-input,
.ant-calendar-picker-input {
border: none;
}
}
}
}
</style>

View File

@ -0,0 +1,27 @@
<template>
<div class="methods">
<a-form-model layout="vertical">
<a-form-model-item label="Sampling handling">
<a-input></a-input>
</a-form-model-item>
<a-form-model-item label="Equipment used">
<a-input></a-input>
</a-form-model-item>
<a-form-model-item label="Software used">
<a-input></a-input>
</a-form-model-item>
</a-form-model>
</div>
</template>
<script>
export default {}
</script>
<style lang="less" scoped>
.methods {
.ant-form-item {
margin-bottom: 0;
}
}
</style>

View File

@ -0,0 +1,53 @@
<template>
<div class="notes">
<pre>
{{ content }}
</pre>
</div>
</template>
<script>
export default {
data() {
return {
content: `-------------------------- SampleAnalyse Beginning at 2023-07-10 11:44:56 --------------------------
-------------------------- SampleAnalyse Beginning at 2023-07-10 11:44:56 --------------------------
-------------------------- SampleAnalyse Beginning at 2023-07-10 11:44:56 --------------------------
-------------------------- SampleAnalyse Beginning at 2023-07-10 11:44:56 --------------------------
-------------------------- SampleAnalyse Beginning at 2023-07-10 11:44:56 --------------------------
-------------------------- SampleAnalyse Beginning at 2023-07-10 11:44:56 --------------------------
-------------------------- SampleAnalyse Beginning at 2023-07-10 11:44:56 --------------------------
-------------------------- SampleAnalyse Beginning at 2023-07-10 11:44:56 --------------------------
-------------------------- SampleAnalyse Beginning at 2023-07-10 11:44:56 --------------------------
-------------------------- SampleAnalyse Beginning at 2023-07-10 11:44:56 --------------------------
-------------------------- SampleAnalyse Beginning at 2023-07-10 11:44:56 --------------------------
-------------------------- SampleAnalyse Beginning at 2023-07-10 11:44:56 --------------------------
-------------------------- SampleAnalyse Beginning at 2023-07-10 11:44:56 --------------------------
-------------------------- SampleAnalyse Beginning at 2023-07-10 11:44:56 --------------------------
-------------------------- SampleAnalyse Beginning at 2023-07-10 11:44:56 --------------------------
-------------------------- SampleAnalyse Beginning at 2023-07-10 11:44:56 --------------------------
-------------------------- SampleAnalyse Beginning at 2023-07-10 11:44:56 --------------------------
-------------------------- SampleAnalyse Beginning at 2023-07-10 11:44:56 --------------------------
-------------------------- SampleAnalyse Beginning at 2023-07-10 11:44:56 --------------------------
-------------------------- SampleAnalyse Beginning at 2023-07-10 11:44:56 --------------------------
-------------------------- SampleAnalyse Beginning at 2023-07-10 11:44:56 --------------------------
-------------------------- SampleAnalyse Beginning at 2023-07-10 11:44:56 --------------------------
-------------------------- SampleAnalyse Beginning at 2023-07-10 11:44:56 --------------------------
`,
isLoading: true
}
}
}
</script>
<style lang="less" scoped>
.notes {
height: 100%;
pre {
height: 100%;
padding: 5px;
overflow: auto;
background-color: #285367;
}
}
</style>

View File

@ -0,0 +1,121 @@
<template>
<div>
<a-table :columns="columns" :dataSource="list" :pagination="false" :scroll="{ x: true }">
<template v-for="slotName in slots" :slot="slotName" slot-scope="text, record">
<a-input v-model="record[slotName]" :key="slotName"></a-input>
</template>
</a-table>
</div>
</template>
<script>
const columns = [
{
title: '',
dataIndex: 'name',
align: 'center',
width: 100,
fixed: 'left'
},
{
title: 'Activity [Bq]',
dataIndex: 'activity',
align: 'center',
width: 100,
scopedSlots: {
customRender: 'activity'
}
},
{
title: 'Uncert.Activity [%]',
dataIndex: 'uncertActivity',
align: 'center',
width: 150,
scopedSlots: {
customRender: 'uncertActivity'
}
},
{
title: 'MDA [Bq]',
dataIndex: 'mda',
align: 'center',
width: 100,
scopedSlots: {
customRender: 'mda'
}
},
{
title: 'Concentration [Bq/m3]',
dataIndex: 'concentration',
align: 'center',
width: 180,
scopedSlots: {
customRender: 'concentration'
}
},
{
title: 'Uncert.concentration [%]',
dataIndex: 'uncertConcentration',
align: 'center',
width: 200,
scopedSlots: {
customRender: 'uncertConcentration'
}
},
{
title: 'MDC [Bq/m3]',
dataIndex: 'mdc',
align: 'center',
width: 120,
scopedSlots: {
customRender: 'mdc'
}
},
{
title: 'Lc [Bq/m3]',
dataIndex: 'lc',
align: 'center',
width: 100,
scopedSlots: {
customRender: 'lc'
}
}
]
export default {
data() {
this.columns = columns
return {
list: [
{
name: 'Xe-131m',
activity: 'activity',
uncertActivity: 'uncertActivity',
mda: 'mda',
concentration: 'concentration',
uncertConcentration: 'uncertConcentration',
mdc: 'mdc',
lc: 'lc'
},
{
name: 'Xe-132m',
activity: 'activity2',
uncertActivity: 'uncertActivity2',
mda: 'mda2',
concentration: 'concentration2',
uncertConcentration: 'uncertConcentration2',
mdc: 'mdc2',
lc: 'lc2'
}
]
}
},
computed: {
slots() {
return columns.filter(item => item.scopedSlots).map(item => item.scopedSlots.customRender)
}
}
}
</script>
<style lang="less" scoped></style>

View File

@ -0,0 +1,88 @@
<template>
<div>
<a-table :columns="columns" :dataSource="list" :pagination="false">
<template v-for="slotName in slots" :slot="slotName" slot-scope="text, record">
<a-input v-model="record[slotName]" :key="slotName"></a-input>
</template>
</a-table>
</div>
</template>
<script>
const columns = [
{
title: '',
dataIndex: 'name',
align: 'center',
width: 100,
customRender: (_, __, index) => {
return index + 1
}
},
{
title: 'Nuclide1',
dataIndex: 'nuclide1',
align: 'center',
width: 100,
scopedSlots: {
customRender: 'nuclide1'
}
},
{
title: 'Nuclide2',
dataIndex: 'nuclide2',
align: 'center',
width: 150,
scopedSlots: {
customRender: 'nuclide2'
}
},
{
title: 'Isotope ratio',
dataIndex: 'isotopeRatio',
align: 'center',
width: 100,
scopedSlots: {
customRender: 'isotopeRatio'
}
},
{
title: 'Uncert.Ratio [%]',
dataIndex: 'uncertRatio',
align: 'center',
width: 200,
scopedSlots: {
customRender: 'uncertRatio'
}
}
]
export default {
data() {
this.columns = columns
return {
list: [
{
nuclide1: 'nuclide1',
nuclide2: 'nuclide2',
isotopeRatio: 'isotopeRatio',
uncertRatio: 'uncertRatio'
},
{
nuclide1: 'nuclide1',
nuclide2: 'nuclide2',
isotopeRatio: 'isotopeRatio',
uncertRatio: 'uncertRatio'
}
]
}
},
computed: {
slots() {
return columns.filter(item => item.scopedSlots).map(item => item.scopedSlots.customRender)
}
}
}
</script>
<style lang="less" scoped></style>

View File

@ -0,0 +1,25 @@
<template>
<div class="transport-infomation">
<a-form-model layout="vertical">
<a-form-model-item label="Comments on transport">
<a-textarea :rows="12"></a-textarea>
</a-form-model-item>
<a-form-model-item label="Other comments, e.g. on sample container conditions">
<a-textarea :rows="12"></a-textarea>
</a-form-model-item>
</a-form-model>
</div>
</template>
<script>
export default {
}
</script>
<style lang="less" scoped>
.transport-infomation {
.ant-form-item {
margin-bottom: 0;
}
}
</style>

View File

@ -0,0 +1,139 @@
<template>
<custom-modal v-model="visible" :width="1280" title="NG Lab Report" :destroyOnClose="true" :okHandler="handleOk">
<div class="rlr">
<div class="rlr-tabs">
<div
class="rlr-tabs-item"
:class="activeKey == index ? 'active' : ''"
v-for="(tab, index) in tabs"
:key="index"
@click="activeKey = index"
>
{{ tab }}
</div>
</div>
<div class="rlr-content">
<h4>{{ tabs[activeKey] }}</h4>
<div class="rlr-content-detail">
<template v-if="activeKey == 0">
<general-infomation />
</template>
<template v-if="activeKey == 1">
<transport-infomation />
</template>
<template v-if="activeKey == 2">
<analysis-results />
</template>
<template v-if="activeKey == 3">
<nuclides />
</template>
<template v-if="activeKey == 4">
<ratios />
</template>
<template v-if="activeKey == 5">
<methods />
</template>
<template v-if="activeKey == 6">
<additional-info />
</template>
<template v-if="activeKey == 7">
<notes />
</template>
</div>
</div>
</div>
</custom-modal>
</template>
<script>
import ModalMixin from '@/mixins/ModalMixin'
import GeneralInfomation from './components/GeneralInfomation.vue'
import TransportInfomation from './components/TransportInfomation.vue'
import AnalysisResults from './components/AnalysisResults.vue'
import Nuclides from './components/Nuclides.vue'
import Ratios from './components/Ratios.vue'
import Methods from './components/Methods.vue'
import AdditionalInfo from './components/AdditionalInfo.vue'
import Notes from './components/Notes.vue'
const tabs = [
'General Infomation',
'Transport Infomation',
'Analysis Results',
'Nuclides',
'Ratios',
'Methods',
'Additional Info',
'Notes'
]
export default {
mixins: [ModalMixin],
components: {
GeneralInfomation,
TransportInfomation,
AnalysisResults,
Nuclides,
Ratios,
Methods,
AdditionalInfo,
Notes
},
data() {
this.tabs = tabs
return {
activeKey: 0
}
},
methods: {
beforeModalOpen() {
this.activeKey = 7
},
handleOk() {
console.log('%c [ ]-62', 'font-size:13px; background:pink; color:#bf2c9f;')
}
}
}
</script>
<style lang="less" scoped>
.rlr {
display: flex;
&-tabs {
width: 170px;
background-color: #275466;
padding: 3px 0;
&-item {
cursor: pointer;
user-select: none;
padding: 0 5px;
height: 32px;
line-height: 32px;
&.active {
background-color: #296d81;
}
}
}
&-content {
margin-left: 20px;
flex: 1;
overflow: hidden;
h4 {
color: #fff;
}
&-detail {
height: 700px;
padding: 20px;
overflow: auto;
background-color: #082f3e;
}
}
}
</style>

View File

@ -0,0 +1,70 @@
<template>
<custom-modal v-model="visible" :width="1000" title="View Sample Infomation">
<a-spin :spinning="isLoading">
<pre>{{ content }}</pre>
</a-spin>
<div slot="custom-footer">
<a-space :size="20">
<a-button type="primary">Save Text</a-button>
<a-button type="primary">Save Excel</a-button>
<a-button @click="visible = false">Cancel</a-button>
</a-space>
</div>
</custom-modal>
</template>
<script>
import { getAction } from '@/api/manage'
import ModalMixin from '@/mixins/ModalMixin'
export default {
mixins: [ModalMixin],
props: {
sampleId: {
type: String
}
},
data() {
return {
content: '',
isLoading: true
}
},
methods: {
async getContent() {
try {
this.content = ''
this.isLoading = true
const res = await getAction('/spectrumAnalysis/viewSampleInformation', {
sampleId: this.sampleId
})
if(res.success) {
this.content = res.result
}
else {
this.$message.error(res.message)
}
} catch (error) {
console.error(error)
} finally {
this.isLoading = false
}
},
beforeModalOpen() {
if (this.sampleId) {
this.getContent()
}
}
}
}
</script>
<style lang="less" scoped>
pre {
height: 450px;
padding: 5px;
overflow: auto;
background-color: #285367;
}
</style>

View File

@ -0,0 +1,78 @@
<template>
<custom-modal v-model="visible" :width="1000" title="View Spectrum" :footer="null" destroyOnClose>
<a-spin :spinning="isLoading">
<a-tabs :animated="false">
<a-tab-pane tab="Sample Spectrum" :key="1">
<pre>{{ content.sample.join('\n') }}</pre>
</a-tab-pane>
<a-tab-pane tab="GasBg Spectrum" :key="2">
<pre>{{ content.gasBg.join('\n') }}</pre>
</a-tab-pane>
<a-tab-pane tab="DetBg Spectrum" :key="3">
<pre>{{ content.detBg.join('\n') }}</pre>
</a-tab-pane>
<a-tab-pane tab="QC Spectrum" :key="4">
<pre>{{ content.qc.join('\n') }}</pre>
</a-tab-pane>
</a-tabs>
</a-spin>
</custom-modal>
</template>
<script>
import ModalMixin from '@/mixins/ModalMixin'
import { getAction } from '../../../../../api/manage'
export default {
mixins: [ModalMixin],
props: {
sampleId: {
type: String
}
},
data() {
return {
content: {
detBg: [],
gasBg: [],
qc: [],
sample: []
},
isLoading: true
}
},
methods: {
async getContent() {
try {
this.isLoading = true
const res = await getAction('/spectrumAnalysis/viewSpectrum', {
sampleId: this.sampleId
})
if (res.success) {
this.content = res.result
} else {
this.$message.error(res.message)
}
} catch (error) {
console.error(error)
} finally {
this.isLoading = false
}
},
beforeModalOpen() {
if (this.sampleId) {
this.getContent()
}
}
}
}
</script>
<style lang="less" scoped>
pre {
height: 450px;
padding: 5px;
overflow: auto;
background-color: #285367;
}
</style>

View File

@ -0,0 +1,303 @@
<template>
<custom-modal v-model="visible" title="Statistics Paramer History" :width="1480" :footer="null">
<div class="statistics-paramer-history">
<!-- 左侧配置 -->
<title-over-boarder title="Query Infomation Settings" class="settings">
<!-- Station And Detector -->
<title-over-boarder title="Station And Detector">
<a-form-model
:labelCol="{ style: { width: '70px', textAlign: 'left', flexShrink: 0 } }"
:wrapperCol="{ flex: 1 }"
>
<a-form-model-item label="Station">
<a-space :size="10" class="station">
<a-input size="small"></a-input>
<a-button type="primary" size="small">Query Detector</a-button>
<a-button type="primary" size="small">&lt;&lt;</a-button>
</a-space>
</a-form-model-item>
<a-form-model-item label="Detector">
<custom-select :options="[{ label: 'test', value: 1 }]" size="small"></custom-select>
</a-form-model-item>
</a-form-model>
</title-over-boarder>
<!-- Nuclide -->
<title-over-boarder title="Nuclide" class="nuclide">
<a-checkbox-group>
<a-checkbox>Xe131m</a-checkbox>
<a-checkbox>Xe133m</a-checkbox>
<a-checkbox>Xe133</a-checkbox>
<a-checkbox>Xe135</a-checkbox>
</a-checkbox-group>
</title-over-boarder>
<a-checkbox-group class="other-checkbox">
<a-checkbox>MDC</a-checkbox>
<a-checkbox>Activity Concentration</a-checkbox>
</a-checkbox-group>
<a-divider></a-divider>
<a-form-model class="time-setting">
<a-form-model-item label="Start Time">
<custom-date-picker></custom-date-picker>
</a-form-model-item>
<a-form-model-item label="Stop Time">
<custom-date-picker></custom-date-picker>
</a-form-model-item>
</a-form-model>
<a-radio-group class="rn-setting">
<a-radio>RNAUTO</a-radio>
<a-radio>RNMAN</a-radio>
</a-radio-group>
<a-divider></a-divider>
<div class="center-btns">
<a-button type="primary">Statistics Query & Plot</a-button>
<a-button type="primary">Snapshot</a-button>
</div>
<a-divider></a-divider>
<!-- Filter -->
<title-over-boarder title="Filter">
<a-checkbox>Xe Result Flag</a-checkbox>
<!-- 配置详情 -->
<div class="filter-options">
<div class="filter-option">
<div class="input">
<a-input></a-input>
</div>
<div class="text">
<span>&lt;</span>
<span>Collection Time</span>
<span>&lt;</span>
</div>
<div class="input">
<a-input></a-input>
</div>
</div>
<div class="filter-option">
<div class="input">
<a-input></a-input>
</div>
<div class="text">
<span>&lt;</span>
<span>Acq live sec</span>
<span>&lt;</span>
</div>
<div class="input">
<a-input></a-input>
</div>
</div>
<div class="filter-option">
<div class="input"></div>
<div class="text right">
<span>Quantity</span>
<span>&lt;</span>
</div>
<div class="input">
<a-input></a-input>
</div>
</div>
<div class="filter-option">
<div class="input"></div>
<div class="text right">
<span>Xe volume</span>
<span>&lt;</span>
</div>
<div class="input">
<a-input></a-input>
</div>
</div>
<div class="filter-option">
<div class="input"></div>
<div class="text right">
<span>MDC</span>
<span>&lt;</span>
</div>
<div class="input">
<a-input></a-input>
</div>
</div>
<div class="filter-option">
<div class="input"></div>
<div class="text right">
<span>Conc</span>
<span>&lt;</span>
</div>
<div class="input">
<a-input></a-input>
</div>
</div>
</div>
</title-over-boarder>
</title-over-boarder>
<!-- 右侧图表 -->
<div class="statistics-paramer-history-chart">
<custom-chart :option="option"></custom-chart>
</div>
</div>
</custom-modal>
</template>
<script>
import ModalMixin from '@/mixins/ModalMixin'
import TitleOverBoarder from '../../TitleOverBoarder.vue'
import CustomChart from '@/components/CustomChart/index.vue'
const initialOption = {
grid: {
right: 10,
left: 40,
top: 20,
bottom: 60
},
tooltip: {
trigger: 'axis'
},
xAxis: {
axisLine: {
lineStyle: {
color: 'rgba(119, 181, 213, .3)'
}
},
axisLabel: {
color: '#ade6ee',
fontSize: 12,
rotate: 45,
margin: 10
},
splitLine: {
show: true,
lineStyle: {
color: 'rgba(119, 181, 213, .3)'
}
},
axisTick: {
show: false
},
data: ['2023/07/09', '2023/07/09', '2023/07/09', '2023/07/09', '2023/07/10']
},
yAxis: {
axisLine: {
lineStyle: {
color: 'rgba(119, 181, 213, .3)'
}
},
axisLabel: {
color: '#ade6ee',
fontSize: 12
},
splitLine: {
show: true,
lineStyle: {
color: 'rgba(119, 181, 213, .3)'
}
},
axisTick: {
show: false
}
},
series: {
type: 'line',
data: [15, 16, 18, 20, 22]
}
}
export default {
components: { TitleOverBoarder, CustomChart },
mixins: [ModalMixin],
data() {
return {
option: initialOption
}
}
}
</script>
<style lang="less" scoped>
.statistics-paramer-history {
display: flex;
.settings {
width: 405px;
.station {
display: flex;
}
.nuclide {
margin-top: 10px;
}
.other-checkbox {
margin-top: 10px;
margin-left: 14px;
label:nth-child(2) {
margin-left: 28px;
}
}
.time-setting {
padding-left: 40px;
}
.rn-setting {
margin-top: 10px;
margin-left: 50px;
label:nth-child(2) {
margin-left: 80px;
}
}
.center-btns {
> button {
display: block;
width: 100%;
&:nth-child(2) {
margin-top: 10px;
}
}
}
.filter-options {
.filter-option {
display: flex;
justify-content: space-between;
align-items: center;
margin-top: 15px;
.input {
width: 100px;
}
.text {
flex: 1;
display: flex;
justify-content: space-between;
margin: 0 10px;
&.right {
justify-content: flex-end;
gap: 5px;
}
}
}
}
}
&-chart {
flex: 1;
margin-left: 15px;
}
}
.ant-divider {
margin: 15px 0;
}
.ant-form-item {
margin-bottom: 0;
}
::v-deep .title-over-border-content {
padding: 15px;
}
</style>

View File

@ -1,5 +1,5 @@
<template>
<custom-modal v-model="visible" :width="750" title="Qc Results">
<custom-modal v-model="visible" :width="750" title="QC Results">
<a-table :columns="columns" :dataSource="list" :pagination="false" />
<a-button slot="custom-footer" type="primary">Export to Excel</a-button>
</custom-modal>

View File

@ -4,12 +4,6 @@
{{ content }}
</pre
>
<div slot="custom-footer" style="text-align: center;">
<a-space :size="20">
<a-button type="primary">Export</a-button>
<a-button @click="visible = false">Cancel</a-button>
</a-space>
</div>
</custom-modal>
</template>

View File

@ -101,7 +101,7 @@ export default {
props: {
data: {
type: Array,
default: []
default: () => []
}
},
data() {

View File

@ -19,11 +19,11 @@ const list = [
},
{
title: 'GasBg Data',
value: 'gasbg'
value: 'gasBg'
},
{
title: 'DetBg Data',
value: 'detbg'
value: 'detBg'
},
{
title: 'QC Data',

View File

@ -2,35 +2,35 @@
<div class="spectrum-analysis">
<!-- 顶部操作栏 -->
<div class="spectrum-analysis-operators">
<a-dropdown
class="spectrum-analysis-operators-item"
overlayClassName="spectrum-analysis-operators-dropdown-overlay"
:overlay-style="operation.style"
v-for="operation in operations"
:key="operation.title"
>
<a-button type="primary">{{ operation.title }}</a-button>
<div slot="overlay">
<template v-for="(child, index) in operation.children">
<component :is="child.type" :key="index" v-bind="child.attrs" v-on="child.on">
<component :is="item.type" v-for="item in child.children" :key="item.title" @click="item.handler">
{{ item.title }}
<template v-for="operation in operations">
<a-dropdown
v-if="operation.show !== false"
class="spectrum-analysis-operators-item"
overlayClassName="spectrum-analysis-operators-dropdown-overlay"
:overlay-style="operation.style"
:key="operation.title"
>
<a-button type="primary">{{ operation.title }}</a-button>
<div slot="overlay">
<template v-for="(child, index) in operation.children">
<component :is="child.type" :key="index" v-bind="child.attrs" v-on="child.on">
<template v-for="item in child.children">
<component v-if="item.show !== false" :is="item.type" :key="item.title" @click="item.handler">
{{ item.title }}
</component>
</template>
</component>
</component>
</template>
</div>
</a-dropdown>
</template>
</div>
</a-dropdown>
</template>
</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"
:sample="sampleData"
/>
<gamma-analysis v-if="isGamma" ref="gammaAnalysisRef" />
<beta-gamma-analysis v-if="isBetaGamma" ref="betaGammaAnalysisRef" :sample="sampleData" />
<resize-observer @notify="handleResize" />
</div>
<!-- 频谱分析部分结束 -->
@ -88,7 +88,7 @@
<!-- Resolution Calibration 弹窗结束 -->
<!-- SpectrumComments 弹窗开始 -->
<spectrum-comments-modal v-model="spectrumCommentsModalVisible" :isAdd="isSpectrumCommentsAdd" />
<spectrum-comments-modal v-model="gammaCommentsModalVisible" :isAdd="isGammaCommentsAdd" />
<!-- SpectrumComments 弹窗结束 -->
<!-- Color Config 弹窗开始 -->
@ -108,11 +108,11 @@
<!-- Config User Library 弹窗结束 -->
<!-- Arr 弹窗开始 -->
<arr-rrr-modal v-model="arrOrRRRModalVisible" :type="arrOrRRRModalType"/>
<arr-rrr-modal v-model="arrOrRRRModalVisible" :type="arrOrRRRModalType" :sampleId="this.sampleData.sampleId" />
<!-- Arr 弹窗结束 -->
<!-- Spectrum 弹窗开始 -->
<spectrum-modal v-model="spectrumModalVisible" :type="arrOrRRRModalType"/>
<spectrum-modal v-model="spectrumModalVisible" :type="arrOrRRRModalType" :sampleId="this.sampleData.sampleId" />
<!-- Spectrum 弹窗结束 -->
<!-- SampleInfo 弹窗开始 -->
@ -126,6 +126,30 @@
<!-- RLR 弹窗开始 -->
<rlr-modal v-model="rlrModalVisible" />
<!-- RLR 弹窗结束 -->
<!-- Beta-Gamma 的Comments 弹窗 -->
<beta-gamma-comments-modal v-model="betaGammaCommentsModalVisible" :isAdd="isBetaGammaCommentsAdd" :sampleId="this.sampleData.sampleId"/>
<!-- Beta-Gamma 的Comments 结束 -->
<!-- Beta-Gamma Spectrum 弹窗 -->
<beta-gamma-spectrum-modal v-model="betaGammaSpectrumModalVisible" :sampleId="this.sampleData.sampleId" />
<!-- Beta-Gamma Spectrum 弹窗 结束 -->
<!-- Beta-Gamma Sample Infomation 弹窗 -->
<beta-gamma-sample-infomation-modal v-model="betaGammaSampleInfomationModalVisible" :sampleId="this.sampleData.sampleId" />
<!-- Beta-Gamma Sample Infomation 弹窗 结束 -->
<!-- Beta-Gamma QC Result 弹窗 -->
<beta-gamma-qc-results-modal v-model="betaGammaQCResultsModalVisible" />
<!-- Beta-Gamma QC Result 弹窗 结束 -->
<!-- Beta-Gamma RLR 弹窗 -->
<beta-gamma-rlr-modal v-model="betaGammaRlrModalVisible" />
<!-- Beta-Gamma RLR 弹窗 结束 -->
<!-- Beta-Gamma Statistics Paramer History 弹窗 -->
<statistics-paramer-history-modal v-model="statisticsParamerHistoryModalVisible" />
<!-- Beta-Gamma Statistics Paramer History 弹窗 结束 -->
</div>
</template>
<script>
@ -156,6 +180,12 @@ import SpectrumModal from './components/Modals/SpectrumModal.vue'
import SampleInfomationModal from './components/Modals/SampleInfomationModal.vue'
import QcResultsModal from './components/Modals/QcResultsModal.vue'
import RlrModal from './components/Modals/RLRModal/index.vue'
import BetaGammaCommentsModal from './components/Modals/BetaGammaModals/BetaGammaCommentsModal.vue'
import BetaGammaSpectrumModal from './components/Modals/BetaGammaModals/BetaGammaSpectrumModal.vue'
import BetaGammaSampleInfomationModal from './components/Modals/BetaGammaModals/BetaGammaSampleInfomationModal.vue'
import BetaGammaQcResultsModal from './components/Modals/BetaGammaModals/BetaGammaQCResultsModal.vue'
import BetaGammaRlrModal from './components/Modals/BetaGammaModals/BetaGammaRLRModal/index.vue'
import StatisticsParamerHistoryModal from './components/Modals/BetaGammaModals/StatisticsParamerHistoryModal.vue'
//
const ANALYZE_TYPE = {
@ -190,7 +220,13 @@ export default {
SpectrumModal,
SampleInfomationModal,
QcResultsModal,
RlrModal
RlrModal,
BetaGammaCommentsModal,
BetaGammaSpectrumModal,
BetaGammaSampleInfomationModal,
BetaGammaQcResultsModal,
BetaGammaRlrModal,
StatisticsParamerHistoryModal
},
data() {
this.ANALYZE_TYPE = ANALYZE_TYPE
@ -217,8 +253,8 @@ export default {
energyCalibrationModalShow: false, // Calibration -> Energy
resolutionCalibrationModalShow: false, // Calibration -> Resolution
spectrumCommentsModalVisible: false, // Comments -> Spectrum Comments
isSpectrumCommentsAdd: true, // Spectrum Comments
gammaCommentsModalVisible: false, // Comments -> Spectrum Comments
isGammaCommentsAdd: true, // Spectrum Comments
colorConfigModalVisible: false, // Help -> Color Config
@ -230,11 +266,23 @@ export default {
peakInfomationModalVisible: false, // Reports -> PeakInfo
arrOrRRRModalVisible: false, // Reports -> ARR RRR
arrOrRRRModalType: 1, // Reports -> ARR RRR
nuclideActivityAndMDCModalVisible: false, // Reports -> Radionuclide Activity
nuclideActivityAndMDCModalVisible: false, // Reports -> Radionuclide Activity
spectrumModalVisible: false, // Reports -> Spectrum
sampleInfomationModalVisible: false, // Reports -> Sample Infomation
qcResultsModalVisible: false, // Reports -> Qc Results
rlrModalVisible: false, // Reports -> RLR
/**
* 以下是beta-gamma跟前面不同的弹窗
**/
betaGammaCommentsModalVisible: false, // beta-gamma Comments
isBetaGammaCommentsAdd: false, // beta-gamma comments
betaGammaSpectrumModalVisible: false, // beta-gamma spectrum
betaGammaSampleInfomationModalVisible: false, // beta-gamma sample infomation
betaGammaQCResultsModalVisible: false, // beta-gamma QC Result
betaGammaRlrModalVisible: false, // beta-gamma RLR
statisticsParamerHistoryModalVisible: false // beta-gamma Statistics Paramer History
}
},
created() {
@ -242,7 +290,7 @@ export default {
this.loadSelectedSample({
dbName: 'auto',
sampleType: 'B',
sampleId: '1523651'
sampleId: '423228'
})
},
methods: {
@ -254,12 +302,12 @@ export default {
//
async loadSelectedSample(sample) {
// Bbeta-gamma P Ggamma
this.sampleData = sample
if (sample.sampleType == 'B') {
this.analysisType = ANALYZE_TYPE.BETA_GAMMA
} else {
// gamma
this.analysisType = ANALYZE_TYPE.GAMMA
}
this.sampleData = sample
},
//
@ -293,16 +341,32 @@ export default {
console.log('%c [ handleReprocessAll ]-216', 'font-size:13px; background:pink; color:#bf2c9f;')
},
//
// Comments
handleViewComments() {
this.spectrumCommentsModalVisible = true
this.isSpectrumCommentsAdd = false
// gamma
if (this.isGamma) {
this.gammaCommentsModalVisible = true
this.isGammaCommentsAdd = false
}
// beta-gamma
else {
this.betaGammaCommentsModalVisible = true
this.isBetaGammaCommentsAdd = false
}
},
//
// Comments
handleAddComments() {
this.spectrumCommentsModalVisible = true
this.isSpectrumCommentsAdd = true
// gamma
if (this.isGamma) {
this.gammaCommentsModalVisible = true
this.isGammaCommentsAdd = true
}
// beta-gamma
else {
this.betaGammaCommentsModalVisible = true
this.isBetaGammaCommentsAdd = true
}
},
//
@ -492,6 +556,7 @@ export default {
},
{
title: 'NUCLIDELIBRARY',
show: !this.isBetaGamma,
children: [
{
type: 'a-menu',
@ -510,6 +575,22 @@ export default {
}
]
},
{
title: 'STATISTIC',
show: this.isBetaGamma,
children: [
{
type: 'a-menu',
children: [
{
type: 'a-menu-item',
title: 'MDC & Activity Concentration',
handler: () => (this.statisticsParamerHistoryModalVisible = true)
}
]
}
]
},
{
title: 'COMMENTS',
children: [
@ -539,7 +620,8 @@ export default {
{
type: 'a-menu-item',
title: 'Peak Infomation',
handler: () => this.peakInfomationModalVisible = true
handler: () => (this.peakInfomationModalVisible = true),
show: this.isGamma
},
{
type: 'a-menu-item',
@ -547,7 +629,8 @@ export default {
handler: () => {
this.arrOrRRRModalVisible = true
this.arrOrRRRModalType = 1
}
},
show: this.isGamma
},
{
type: 'a-menu-item',
@ -555,32 +638,84 @@ export default {
handler: () => {
this.arrOrRRRModalVisible = true
this.arrOrRRRModalType = 2
}
},
show: this.isGamma
},
{
type: 'a-menu-item',
title: 'Radionuclide Activity',
handler: () => this.nuclideActivityAndMDCModalVisible = true
handler: () => (this.nuclideActivityAndMDCModalVisible = true),
show: this.isGamma
},
{
type: 'a-menu-item',
title: 'Spectrum',
handler: () => this.spectrumModalVisible = true
handler: () => (this.spectrumModalVisible = true),
show: this.isGamma
},
{
type: 'a-menu-item',
title: 'Sample Infomation',
handler: () => this.sampleInfomationModalVisible = true
handler: () => (this.sampleInfomationModalVisible = true),
show: this.isGamma
},
{
type: 'a-menu-item',
title: 'QC Results',
handler: () => (this.qcResultsModalVisible = true),
show: this.isGamma
},
{
type: 'a-menu-item',
title: 'RLR',
handler: () => (this.rlrModalVisible = true),
show: this.isGamma
},
// beta-gamma
{
type: 'a-menu-item',
title: 'View ARR',
handler: () => {
this.arrOrRRRModalVisible = true
this.arrOrRRRModalType = 3
},
show: this.isBetaGamma
},
{
type: 'a-menu-item',
title: 'Qc Results',
handler: () => this.qcResultsModalVisible = true
title: 'View RRR',
handler: () => {
this.arrOrRRRModalVisible = true
this.arrOrRRRModalType = 4
},
show: this.isBetaGamma
},
{
type: 'a-menu-item',
title: 'View spectrum',
handler: () => (this.betaGammaSpectrumModalVisible = true),
show: this.isBetaGamma
},
{
type: 'a-menu-item',
title: 'View Sample Infomation',
handler: () => (this.betaGammaSampleInfomationModalVisible = true),
show: this.isBetaGamma
},
{
type: 'a-menu-item',
title: 'QC results',
handler: () => (this.betaGammaQCResultsModalVisible = true),
show: this.isBetaGamma
},
{
type: 'a-menu-item',
title: 'RLR',
handler: () => this.rlrModalVisible = true
handler: () => (this.betaGammaRlrModalVisible = true),
show: this.isBetaGamma
}
]
}
@ -627,6 +762,16 @@ export default {
]
}
]
},
// Gamma
isGamma() {
return this.analysisType == ANALYZE_TYPE.GAMMA
},
// Beta-Gamma
isBetaGamma() {
return this.analysisType == ANALYZE_TYPE.BETA_GAMMA
}
}
}