Merge branch 'feature-analysis-RLR-renpy' of http://git.hivekion.com:3000/xiaoguangbin/AnalysisSystemForRadionuclide_vue into master-dev

This commit is contained in:
xiaoguangbin 2023-10-30 20:48:50 +08:00
commit 98f17c8e31
11 changed files with 391 additions and 203 deletions

View File

@ -9,19 +9,26 @@ const sample = {
ADD_SAMPLE_DATA: (state, sampleData) => {
const find = state.sampleList.find(item => item.inputFileName == sampleData.inputFileName)
if(find) {
if (find) {
find.data = sampleData.data
} else {
state.sampleList.push(sampleData)
}
},
UPDATE_SAMPLE_DATA: (state, { inputFileName, key, data }) => {
const find = state.sampleList.find(item => item.inputFileName == inputFileName)
if (find) {
find.data[key] = data
}
},
REMOVE_SAMPLE_DATA: (state, inputFileName) => {
const findIndex = state.sampleList.findIndex(item => item.inputFileName == inputFileName)
state.sampleList.splice(findIndex, 1)
},
CLEAR_SAMPLE_DATA: () => {
CLEAR_SAMPLE_DATA: (state) => {
state.sampleList = []
}
},

20
src/utils/sampleHelper.js Normal file
View File

@ -0,0 +1,20 @@
/**
* 在返回的allData中查找指定的数据
* @param {Array} allData
* @param {*} name
* @param {*} group
*/
export const getLineData = (allData, name, group, isList = false) => {
const arrFunc = isList ? Array.prototype.filter : Array.prototype.find
return arrFunc.call(allData, item => item.name == name && item.group == group) || {}
}
/**
* 转换pointlist类型数据到series的data可用的数据
*/
export const transformPointListData = pointlist => {
if (!pointlist) {
return []
}
return pointlist.map(({ x, y }) => [x, y])
}

View File

@ -478,6 +478,12 @@ export default {
handler(newVal, oldVal) {
// this.currResultDisplay = newVal.XeData
this.resultDisplay = newVal.XeData || []
this.$store.commit('UPDATE_SAMPLE_DATA', {
inputFileName: this.sample.inputFileName,
key: 'XeData',
data: newVal.XeData
})
},
immediate: true,
deep: true,

View File

@ -36,6 +36,7 @@
<span @click="handleChangeMarkLine('next')">&gt;</span>
</p>
<custom-table
size="small"
:class="list.length ? 'has-data' : ''"
:list="list"
:columns="columns"
@ -215,6 +216,7 @@ import Response from './Response.json'
import { updateBaseLine } from '@/utils/WasmHelper'
import RectList from './components/RectList.vue'
import { isNullOrUndefined } from '@/utils/util'
import { getLineData, transformPointListData } from '@/utils/sampleHelper'
//
const initialOption = {
@ -223,7 +225,7 @@ const initialOption = {
left: 40,
right: 30,
bottom: 30,
containLabel: true
containLabel: true,
},
title: {
text: '',
@ -234,39 +236,39 @@ const initialOption = {
rich: {
a: {
padding: [0, 20, 0, 0],
fontSize: 16
}
}
}
fontSize: 16,
},
},
},
},
tooltip: {
trigger: 'axis',
axisPointer: {
lineStyle: {
color: '#3CAEBB',
width: 1
}
width: 1,
},
},
formatter: undefined,
className: 'figure-chart-option-tooltip'
className: 'figure-chart-option-tooltip',
},
xAxis: {
axisLine: {
lineStyle: {
color: '#ade6ee'
}
color: '#ade6ee',
},
},
splitLine: {
show: false
show: false,
},
axisLabel: {
textStyle: {
color: '#ade6ee'
}
color: '#ade6ee',
},
},
min: 1,
max: 'dataMax',
animation: false
animation: false,
},
yAxis: {
type: 'log',
@ -275,31 +277,31 @@ const initialOption = {
nameGap: 40,
nameTextStyle: {
color: '#8FD4F8',
fontSize: 16
fontSize: 16,
},
axisLine: {
show: true,
lineStyle: {
color: '#ade6ee'
}
color: '#ade6ee',
},
},
splitLine: {
show: true,
lineStyle: {
color: 'rgba(173, 230, 238, .2)'
}
color: 'rgba(173, 230, 238, .2)',
},
},
axisLabel: {
textStyle: {
color: '#ade6ee'
}
color: '#ade6ee',
},
},
min: 0.1,
max: 'dataMax',
animation: false
animation: false,
},
series: [],
brush: {}
brush: {},
}
const columns = [
@ -308,61 +310,62 @@ const columns = [
customRender: (_, __, index) => {
return index + 1
},
width: 60
width: 60,
},
{
title: 'Energy (keV)',
dataIndex: 'energy',
width: 120,
customRender: text => {
customRender: (text) => {
return text.toFixed(3)
}
},
},
{
title: 'Centroid (C)',
dataIndex: 'peakCentroid',
width: 120,
customRender: text => {
customRender: (text) => {
return text.toFixed(3)
}
},
},
{
title: 'FWHM (keV)',
dataIndex: 'fwhm',
width: 120,
customRender: text => {
customRender: (text) => {
return text.toFixed(3)
}
},
},
{
title: 'Area',
dataIndex: 'area',
width: 120,
customRender: text => {
customRender: (text) => {
return text.toFixed(3)
}
},
},
{
title: 'Detectability',
dataIndex: 'significance',
width: 120,
customRender: text => {
customRender: (text) => {
return text.toFixed(3)
}
},
},
{
title: '#Cmnt',
dataIndex: 'comments',
width: 120
width: 120,
},
{
title: 'Nuclides',
dataIndex: 'nuclides',
width: 120,
customRender: text => {
ellipsis: true,
customRender: (text) => {
return text && text.join(';')
}
}
},
},
]
//
@ -371,43 +374,43 @@ const thumbnailOption = {
top: 0,
left: 5,
right: 5,
bottom: 0
bottom: 0,
},
xAxis: {
type: 'category',
axisLine: {
show: false
show: false,
},
splitLine: {
show: false
show: false,
},
axisLabel: {
show: false
show: false,
},
min: 1,
max: 'dataMax'
max: 'dataMax',
},
yAxis: {
type: 'value',
axisLine: {
show: false
show: false,
},
splitLine: {
show: false
show: false,
},
axisLabel: {
show: false
show: false,
},
min: 0.1,
max: 'dataMax'
max: 'dataMax',
},
series: null
series: null,
}
const nuclideIdentifyModal = {
possibleNuclide: '',
tolerance: 0.5,
identifiedNuclide: ''
identifiedNuclide: '',
}
//
@ -415,7 +418,7 @@ const Operators = {
ADD: 1, //
REMOVE: 2, //
MODIFY: 3, //
SLOPE_CHANGE: 4 // slope
SLOPE_CHANGE: 4, // slope
}
export default {
@ -428,7 +431,7 @@ export default {
NuclideReviewModal,
GeneralCommentModal,
EditSlopeModal,
RectList
RectList,
},
data() {
this.columns = columns
@ -477,66 +480,47 @@ export default {
isReploting: false,
operationStack: [], //
replotNeeded: false
replotNeeded: false,
}
},
created() {
this.option.tooltip.formatter = params => {
this.option.tooltip.formatter = (params) => {
const channel = parseInt(params[0].value[0])
const energy = this.energy[channel - 1]
const energy = this.energy.pointlist ? this.energy.pointlist[channel - 1].x : 0
return `<div class="channel">Channel: ${channel}</div>
<div class="energy">${isNullOrUndefined(energy) ? '' : `Energy: ${energy.toFixed(2)}`}</div>`
}
},
methods: {
async getInfo() {
try {
this.isLoading = true
this.option.series = []
this.thumbnailOption.series = []
this.list = []
this.model = cloneDeep(nuclideIdentifyModal)
this.option.series = []
this.thumbnailOption.series = []
this.list = []
this.model = cloneDeep(nuclideIdentifyModal)
const { success, result, message } = await getAction('/gamma/InteractiveTool', {
sampleId: this.sampleId,
fileName: this.fileName
})
const { inputFileName } = this.sampleData
// const { success, result, message } = cloneDeep(Response)
const currSampleDetailInfo = await this.$store.dispatch('GET_SAMPLE_DATA', inputFileName)
const {
data: { allData, shadowChannelChart, shapeChannelData, peak },
} = currSampleDetailInfo
if (success) {
this.isLoading = false
const {
barChart,
channelBaseCPChart,
channelBaseLineChart,
channelCountChart,
channelPeakChart,
energy,
table,
BaseCtrls,
FitBaseLine
} = result
const channelBaseLine = getLineData(allData, 'BaseLine', 'channel')
const channelPeakGroup = getLineData(allData, 'Peak', 'channel', true)
console.log('%c [ ]-374', 'font-size:13px; background:pink; color:#bf2c9f;', result)
const allEnergy = getLineData(allData, 'Energy', 'energy')
this.channelBaseCPChart = channelBaseCPChart
this.channelBaseLineChart = channelBaseLineChart
this.channelCountChart = channelCountChart
this.channelPeakChart = channelPeakChart
this.energy = energy
this.BaseCtrls = BaseCtrls
this.FitBaseLine = FitBaseLine
this.barChart = barChart
this.channelBaseCPChart = shapeChannelData
this.channelBaseLineChart = channelBaseLine
this.channelCountChart = shadowChannelChart
this.channelPeakChart = channelPeakGroup
this.energy = allEnergy
// this.BaseCtrls = BaseCtrls
// this.FitBaseLine = FitBaseLine
this.barChart = shadowChannelChart
this.setChartOption(channelBaseLineChart, channelCountChart, channelPeakChart, channelBaseCPChart, barChart)
this.list = table
} else {
this.$message.error(message)
}
} catch (error) {
console.error(error)
}
this.setChartOption(channelBaseLine, shadowChannelChart, channelPeakGroup, shapeChannelData, shadowChannelChart)
this.list = peak
},
setChartOption(baseLine, count, peaks, baseCP, bar) {
@ -554,7 +538,7 @@ export default {
// 线
series.push(this.buildCtrlPoint(baseCP))
this.thumbnailOption.series = this.buildBarChart(bar)
// this.thumbnailOption.series = this.buildBarChart(bar)
this.option.series = series
},
@ -573,10 +557,6 @@ export default {
},
beforeModalOpen() {
const { sampleId, inputFileName } = this.sampleData
this.sampleId = sampleId
this.fileName = inputFileName
this.getInfo()
this.reset()
},
@ -640,7 +620,7 @@ export default {
left = channel
}
const peaksBetweenChannel = this.list.filter(peak => {
const peaksBetweenChannel = this.list.filter((peak) => {
const centroidId = peak.peakCentroid
return centroidId >= left && centroidId <= right
})
@ -672,7 +652,7 @@ export default {
const maxXAxises = this.getPeakMaxValues()
if (direction == 'next') {
// prevAxisxAxis
const find = maxXAxises.find(xAxis => xAxis > prevAxis)
const find = maxXAxises.find((xAxis) => xAxis > prevAxis)
if (find) {
markLineOption.xAxis = find
}
@ -680,7 +660,7 @@ export default {
// prevAxisxAxis
const find = cloneDeep(maxXAxises)
.reverse()
.find(xAxis => xAxis < prevAxis)
.find((xAxis) => xAxis < prevAxis)
if (find) {
markLineOption.xAxis = find
}
@ -688,11 +668,24 @@ export default {
const xAxis = markLineOption.xAxis
if (xAxis >= 0) {
const index = maxXAxises.findIndex(item => item == xAxis)
const index = maxXAxises.findIndex((item) => item == xAxis)
if (index !== -1) {
this.selectedKeys = [this.list[index].index]
}
}
const { xAxis: chartXAxisOption } = this.option
const { max, min } = chartXAxisOption
//
if (xAxis >= max || xAxis <= min) {
const halfDiff = (max - min) / 2
const lastChannel = this.channelCountChart.pointlist[this.channelCountChart.pointlist.length - 1].x
let nextMax = xAxis + halfDiff
let nextMin = xAxis - halfDiff
chartXAxisOption.max = nextMax > lastChannel ? lastChannel : nextMax
chartXAxisOption.min = nextMin < 1 ? 1 : nextMin
}
},
// possible nuclide identified nuclide
@ -703,10 +696,11 @@ export default {
if (!row._possible) {
this.$set(row, '_loading', true)
try {
const { sampleId, inputFileName: fileName } = this.sampleData
const { success, result, message } = await getAction('/gamma/getSelPosNuclide', {
sampleId: this.sampleId,
sampleId,
channel: parseInt(row.peakCentroid),
fileName: this.fileName
fileName,
})
if (success) {
const { possible } = result
@ -724,9 +718,9 @@ export default {
// Channel
getPeakMaxValues() {
const maxXAxises = this.channelPeakChart.map(item => {
const allY = item.pointlist.map(point => point.y)
const max = item.pointlist.find(point => point.y == Math.max(...allY))
const maxXAxises = this.channelPeakChart.map((item) => {
const allY = item.pointlist.map((point) => point.y)
const max = item.pointlist.find((point) => point.y == Math.max(...allY))
return max.x
})
return maxXAxises
@ -772,7 +766,7 @@ export default {
shadowEnergyChart,
shapeChannelData,
shapeEnergyData,
table
table,
} = result
this.$bus.$emit('gammaRefresh', {
@ -781,7 +775,7 @@ export default {
shadowChannelChart,
shadowEnergyChart,
shapeChannelData,
shapeEnergyData
shapeEnergyData,
})
this.channelPeakChart = channelPeakChart
@ -828,8 +822,8 @@ export default {
content: 'Are you sure to delete this peak?',
cancelButtonProps: {
props: {
type: 'warn'
}
type: 'warn',
},
},
onOk: async () => {
// this.list.splice(findIndex, 1)
@ -850,7 +844,7 @@ export default {
const { inputFileName: fileName } = this.sampleData
const { success, result, message } = await getAction('/gamma/deletePeak', {
fileName,
curRow: this.curRow
curRow: this.curRow,
})
if (success) {
const {
@ -860,7 +854,7 @@ export default {
shadowEnergyChart,
shapeChannelData,
shapeEnergyData,
table
table,
} = result
this.$bus.$emit('gammaRefresh', {
@ -869,7 +863,7 @@ export default {
shadowChannelChart,
shadowEnergyChart,
shapeChannelData,
shapeEnergyData
shapeEnergyData,
})
this.channelPeakChart = channelPeakChart
@ -896,7 +890,7 @@ export default {
} catch (error) {
console.error(error)
}
}
},
})
},
@ -928,6 +922,19 @@ export default {
this.option.series[0].markLine.data[0].xAxis = channel
const { xAxis: chartXAxisOption } = this.option
const { max, min } = chartXAxisOption
//
if (channel >= max || channel <= min) {
const halfDiff = (max - min) / 2
const lastChannel = this.channelCountChart.pointlist[this.channelCountChart.pointlist.length - 1].x
let nextMax = channel + halfDiff
let nextMin = channel - halfDiff
chartXAxisOption.max = nextMax > lastChannel ? lastChannel : nextMax
chartXAxisOption.min = nextMin < 1 ? 1 : nextMin
}
this.getSelPosNuclide(row)
this.selectedTableItem = row
@ -946,8 +953,8 @@ export default {
key: 'brush',
brushOption: {
// brush brushType false
brushType: 'rect'
}
brushType: 'rect',
},
})
},
@ -962,12 +969,12 @@ export default {
//
chart.dispatchAction({
type: 'brush',
areas: []
areas: [],
})
//
chart.dispatchAction({
type: 'takeGlobalCursor'
type: 'takeGlobalCursor',
})
},
@ -978,8 +985,8 @@ export default {
if (areas) {
const range = areas.range
const [[minX, maxX], [minY, maxY]] = range
const point1 = chart.convertFromPixel({ seriesIndex: 0 }, [minX, minY]).map(num => parseInt(num.toFixed()))
const point2 = chart.convertFromPixel({ seriesIndex: 0 }, [maxX, maxY]).map(num => parseInt(num.toFixed()))
const point1 = chart.convertFromPixel({ seriesIndex: 0 }, [minX, minY]).map((num) => parseInt(num.toFixed()))
const point2 = chart.convertFromPixel({ seriesIndex: 0 }, [maxX, maxY]).map((num) => parseInt(num.toFixed()))
const xAxisMax = chart.getModel().getComponent('xAxis').axis.scale._extent[1]
const yAxisMax = this.option.yAxis.max
let [x1, y2, x2, y1] = [...point1, ...point2] //
@ -1036,7 +1043,7 @@ export default {
this.baseCtrls_Copy.baseline.map((val, index) => [index + 1, val]),
this.FitBaseLine,
{
zlevel: 21
zlevel: 21,
}
)
this.option.series.push(baseLineEditSeries)
@ -1050,13 +1057,13 @@ export default {
this.btnGroupType = 1
this.opts.notMerge = true
const baseLineEditSeries = findSeriesByName(this.option.series, 'BaseLine_Edit')
const index = this.option.series.findIndex(item => item == baseLineEditSeries)
const index = this.option.series.findIndex((item) => item == baseLineEditSeries)
this.option.series.splice(index, 1)
this.clearRect()
const baseLineSeries = findSeriesByName(this.option.series, 'BaseLine')
baseLineSeries.data = this.channelBaseLineChart.pointlist.map(({ x, y }) => [x, y]) // 线
baseLineSeries.data = transformPointListData(this.channelBaseLineChart.pointlist) // 线
const baseLineCP = findSeriesByName(this.option.series, 'BaseLine_Ctrl_Point')
baseLineCP.data = this.buildCPPointData(this.channelBaseCPChart)
@ -1096,7 +1103,7 @@ export default {
this.isModifying = false
this.pushOperationStack(Operators.MODIFY, {
index,
prevYAxis
prevYAxis,
})
},
@ -1120,7 +1127,7 @@ export default {
// Peaks
redrawPeaks(peakList) {
this.option.series = this.option.series.filter(item => {
this.option.series = this.option.series.filter((item) => {
return !item.name.includes('Peak_')
})
this.option.series.push(...this.buildPeaks(peakList))
@ -1196,7 +1203,7 @@ export default {
index: i,
removeXAxis,
removeYAxis,
removeYSlope
removeYSlope,
})
},
@ -1232,7 +1239,7 @@ export default {
this.$refs.editSlopeModal.open({
index: i,
value: yslope[i],
allowNaN: !(i == 0 || i == n - 1)
allowNaN: !(i == 0 || i == n - 1),
})
},
@ -1246,7 +1253,7 @@ export default {
yslope[index] = slope
this.pushOperationStack(Operators.SLOPE_CHANGE, {
index,
slope: prevSlope
slope: prevSlope,
})
this.redrawBaseLine()
this.buildRect()
@ -1269,7 +1276,7 @@ export default {
const { success, result, message } = await postAction('/gamma/replotBaseLine', {
...this.baseCtrls_Copy,
fileName,
replotNeeded: this.replotNeeded
replotNeeded: this.replotNeeded,
})
if (success) {
const { chartData, peakSet, shapeData } = result
@ -1288,8 +1295,8 @@ export default {
color,
point: {
x: xAxis,
y: yctrl[index]
}
y: yctrl[index],
},
}
})
baseLineCP.data = this.buildCPPointData(baseCPPoints)
@ -1323,8 +1330,8 @@ export default {
itemStyle: {
color: 'transparent',
borderColor: color,
borderWidth: size / 2
}
borderWidth: size / 2,
},
}
})
},
@ -1358,7 +1365,7 @@ export default {
this.isAccepting = true
const { success, result, message } = await postAction('/gamma/acceptBaseLine', {
...this.baseCtrls_Copy,
fileName
fileName,
})
if (success) {
this.BaseCtrls = cloneDeep(this.baseCtrls_Copy)
@ -1372,7 +1379,7 @@ export default {
shadowEnergyChart,
shapeChannelData,
shapeData,
shapeEnergyData
shapeEnergyData,
} = result
this.channelBaseLineChart = channelBaseLineChart
@ -1416,7 +1423,7 @@ export default {
curRow: this.curRow,
nuclideName: possibleNuclide,
fileName,
list_identify: nuclides
list_identify: nuclides,
})
if (success) {
nuclides.push(possibleNuclide)
@ -1439,7 +1446,7 @@ export default {
if (this.selectedTableItem._deleting) {
return
}
const findIndex = nuclides.findIndex(nuclide => nuclide == this.model.identifiedNuclide)
const findIndex = nuclides.findIndex((nuclide) => nuclide == this.model.identifiedNuclide)
if (-1 !== findIndex) {
try {
this.$set(this.selectedTableItem, '_deleting', true)
@ -1448,7 +1455,7 @@ export default {
curRow: this.curRow,
nuclideName: this.model.identifiedNuclide,
fileName,
list_identify: nuclides
list_identify: nuclides,
})
if (success) {
nuclides.splice(findIndex, 1)
@ -1467,43 +1474,35 @@ export default {
buildBaseLine(channelBaseLineChart) {
return buildLineSeries(
'BaseLine',
channelBaseLineChart.pointlist.map(({ x, y }) => [x, y]),
transformPointListData(channelBaseLineChart.pointlist),
channelBaseLineChart.color,
{
markLine: {
silent: true,
symbol: 'none',
label: {
show: false
show: false,
},
lineStyle: {
color: 'red',
width: 1
width: 1,
},
data: [{ xAxis: -1 }]
data: [{ xAxis: -1 }],
},
zlevel: 10
zlevel: 10,
}
)
},
// count
buildCountLine(channelCountChart) {
return buildLineSeries(
'CountChart',
channelCountChart.pointlist.map(({ x, y }) => [x, y]),
channelCountChart.color
)
return buildLineSeries('CountChart', transformPointListData(channelCountChart.pointlist), channelCountChart.color)
},
// Peaks
buildPeaks(channelPeakChart) {
return channelPeakChart.map((item, index) => {
return buildLineSeries(
'Peak_' + (index + 1),
item.pointlist.map(({ x, y }) => [x, y]),
item.color
)
return buildLineSeries('Peak_' + (index + 1), transformPointListData(item.pointlist), item.color)
})
},
@ -1515,7 +1514,7 @@ export default {
data: this.buildCPPointData(channelBaseCPChart),
silent: true,
animation: false,
zlevel: 20
zlevel: 20,
}
},
@ -1526,7 +1525,7 @@ export default {
barChart.map(({ x, y }) => [x, y]),
'#fff',
{
silent: true
silent: true,
}
)
},
@ -1539,7 +1538,7 @@ export default {
pushOperationStack(operator, operand) {
this.operationStack.push({
operator,
operand
operand,
})
},
@ -1584,19 +1583,19 @@ export default {
*/
clearOperationStack() {
this.operationStack = []
}
},
},
computed: {
curRow() {
const [selectedKey] = this.selectedKeys
const findIndex = this.list.findIndex(item => item.index == selectedKey)
const findIndex = this.list.findIndex((item) => item.index == selectedKey)
return findIndex
},
isOperationStackEmpty() {
return this.operationStack.length == 0
}
}
},
},
}
</script>

View File

@ -0,0 +1,67 @@
<template>
<custom-modal v-model="visible" title="BetaGamma Analyser Log" :width="800">
<a-spin :spinning="isLoading">
<a-textarea class="bg-log-viewer" v-model="content"></a-textarea>
</a-spin>
<div slot="custom-footer">
<a-button type="primary" @click="handleClick">Save As</a-button>
</div>
</custom-modal>
</template>
<script>
import ModalMixin from '@/mixins/ModalMixin'
import { getAction } from '@/api/manage'
import SampleDataMixin from '@/views/spectrumAnalysis/SampleDataMixin'
import { showSaveFileModal } from '@/utils/file'
export default {
mixins: [ModalMixin, SampleDataMixin],
data() {
return {
content: '',
}
},
methods: {
async getDetail() {
try {
this.isLoading = true
const { dbName, sampleId, sampleFileName, gasFileName, detFileName, qcFileName } = this.newSampleData
const { success, result, message } = await getAction('/spectrumAnalysis/viewBGLogViewer', {
dbName,
sampleId,
sampleFileName,
gasFileName,
detFileName,
qcFileName,
})
if (success) {
console.log('%c [ ]-21', 'font-size:13px; background:pink; color:#bf2c9f;', result)
this.content = 'test'
} else {
this.$message.error(message)
}
} catch (error) {
console.error(error)
} finally {
this.isLoading = false
}
},
beforeModalOpen() {
this.getDetail()
},
handleClick() {
const blob = new Blob([this.content], { type: 'text/plain' })
showSaveFileModal(blob, 'txt')
},
},
}
</script>
<style lang="less" scoped>
.bg-log-viewer {
height: 400px;
overflow: auto;
}
</style>

View File

@ -52,6 +52,12 @@ import TitleOverBorder from '@/views/spectrumAnalysis/components/TitleOverBorder
export default {
components: { BetaDetectorCalibration, GammaDetectorCalibration, TitleOverBorder },
mixins: [ModalMixin, SampleDataMixin],
props: {
sampleList: {
type: Array,
required: true,
},
},
data() {
return {
currTab: 'gamma',
@ -85,6 +91,28 @@ export default {
this.gammaEnergyValid = val
},
handleReAnalyse() {
const regExp = /^([A-Z]{1,}\d{1,})_/
const regMatched = this.newSampleData.inputFileName.match(regExp)
const currStationName = regMatched[1]
const dbNames = [],
sampleIds = [],
sampleFileNames = [],
gasFileNames = [],
detFileNames = [],
qcFileNames = []
const matchedSampleList = this.sampleList.filter((item) => item.inputFileName.includes(currStationName))
matchedSampleList.forEach(
({ dbName, sampleId, sampleFileName, gasFileName, detFileName, qcFileName, qcFileStatus }) => {
dbNames.push(dbName || '')
sampleIds.push(sampleId || '')
sampleFileNames.push(sampleFileName)
gasFileNames.push(gasFileName)
detFileNames.push(detFileName)
qcFileNames.push(qcFileStatus ? qcFileName : '')
}
)
let params = {
applyType: this.newCalibrationIsAppliedTo,
sampleData: this.recalculateROICountsFor.includes('sample') ? true : false,
@ -93,13 +121,14 @@ export default {
qcData: this.recalculateROICountsFor.includes('qc') ? true : false,
betaEnergyValid: this.betaEnergyValid,
gammaEnergyValid: this.gammaEnergyValid,
dbNames: [this.newSampleData.dbName],
sampleIds: [this.newSampleData.sampleId ? this.newSampleData.sampleId : ''],
sampleFileNames: [this.newSampleData.inputFileName],
gasFileNames: [this.newSampleData.gasFileName],
detFileNames: [this.newSampleData.detFileName],
qcFileNames: [this.newSampleData.qcFileName],
dbNames,
sampleIds,
sampleFileNames,
gasFileNames,
detFileNames,
qcFileNames,
currentFileName: this.newSampleData.inputFileName,
currentQCFileName: this.newSampleData.qcFileName,
}
postAction('/spectrumAnalysis/ReAnalyse', params).then((res) => {
if (res.success) {

View File

@ -116,11 +116,6 @@ export default {
AdditionalInfo,
Notes,
},
props: {
sampleData: {
type: Object,
},
},
data() {
this.tabs = tabs
return {

View File

@ -39,7 +39,7 @@ export default {
},
handleOk() {
this.$emit('save', this.saveFormat)
this.$emit('save', this.saveFormat, this.saveAll)
},
},
computed: {

View File

@ -6,7 +6,7 @@
<div v-if="item.children" :key="index">
<a-menu class="multi-level-menu-sub-menu">
<template v-for="child in item.children">
<a-menu-item v-if="child.show !== false" :key="child.key" @click="handleSubMenuClick(item, child)">
<a-menu-item v-if="child.show !== false" :key="child.key" @click="handleSubMenuClick(item, child)">
{{ child.title }}
</a-menu-item>
</template>
@ -22,23 +22,23 @@ export default {
props: {
children: {
type: Array,
default: () => []
default: () => [],
},
width: {
type: String,
default: 'auto'
}
default: 'auto',
},
},
methods: {
handleMenuClick(item) {
if (!item.children) {
this.$emit('menuClick', item)
}
// if (!item.children) {
this.$emit('menuClick', item)
// }
},
handleSubMenuClick(item, child) {
this.$emit('submenuClick', { item, child })
}
}
},
},
}
</script>

View File

@ -413,7 +413,6 @@ export default {
},
initWebSocket: function () {
console.log('qweqwerq')
// WebSocketwshttpwsshttps
var userId = store.getters.userInfo.id
var url =

View File

@ -10,7 +10,10 @@
:overlay-style="operation.style"
:key="operation.title"
>
<a-button type="primary">{{ operation.title }}</a-button>
<a-button type="primary">
<a-icon type="loading" v-if="operation.loading"></a-icon>
{{ operation.title }}
</a-button>
<div slot="overlay">
<template v-for="(child, index) in operation.children">
<component v-if="child.show !== false" :is="child.type" :key="index" v-bind="child.attrs" v-on="child.on">
@ -165,6 +168,7 @@
<!-- Beta-Gamma 的Energy Calibration开始 -->
<beta-gamma-energy-calibration-modal
v-model="betaGammaEnergyCalibrationModalVisible"
:sampleList="sampleList"
@sendInfo="getCheckFlag"
@sendXeData="getXeData"
/>
@ -190,12 +194,13 @@
<!-- Beta-Gamma QC Result 弹窗 结束 -->
<!-- Beta-Gamma RLR 弹窗 -->
<beta-gamma-rlr-modal v-model="betaGammaRlrModalVisible" :sampleData="sampleData" />
<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 弹窗 结束 -->
<bg-log-viewer v-model="bgLogViewerVisible" />
</div>
</template>
<script>
@ -239,6 +244,7 @@ import BetaGammaExtrapolationModal from './components/Modals/BetaGammaModals/Bet
import { getAction } from '@/api/manage'
import { clearSampleCache } from './clearSampleCache'
import { fetchAndDownload } from '@/utils/file'
import BGLogViewer from './components/Modals/BetaGammaModals/BGLogViewer.vue'
//
const ANALYZE_TYPE = {
@ -283,6 +289,7 @@ export default {
BetaGammaEnergyCalibrationModal,
AutomaticAnalysisLogModal,
BetaGammaExtrapolationModal,
BgLogViewer: BGLogViewer,
},
provide() {
@ -360,6 +367,7 @@ export default {
betaGammaQCResultsModalVisible: false, // beta-gamma QC Result
betaGammaRlrModalVisible: false, // beta-gamma RLR
statisticsParamerHistoryModalVisible: false, // beta-gamma Statistics Paramer History
bgLogViewerVisible: false, // beta-gamma Log BG log viewer
analyseCurrentSpectrumData: {},
resultDisplayFlag: [],
params_toDB: {
@ -387,6 +395,8 @@ export default {
updateFlag: '2',
isReAnalyed_gamma: false,
isReAnalyed_beta: false,
isSaving: false,
}
},
created() {
@ -409,7 +419,6 @@ export default {
this.isReAnalyed_gamma = val
},
getUpdateFlag(val) {
console.log('qerq', val)
this.updateFlag = val
},
getcommentsInfo(val) {
@ -492,13 +501,39 @@ export default {
},
//
async handleSaveResultsToFile(saveFormat) {
async handleSaveResultsToFile(saveFormat, isSaveAll = false) {
this.isSaving = true
if (this.isGamma) {
const url = saveFormat == 'xls' ? '/gamma/saveToExcel' : saveFormat == 'txt' ? '/gamma/saveToTxt' : ''
let params = {
fileName: this.newSampleData.inputFileName,
if (!isSaveAll) {
const url = saveFormat == 'xls' ? '/gamma/saveToExcel' : saveFormat == 'txt' ? '/gamma/saveToTxt' : ''
let params = {
fileName: this.newSampleData.inputFileName,
}
try {
await fetchAndDownload(url, params, 'get')
} catch (error) {
console.error(error)
} finally {
this.isSaving = false
}
} else {
let list = this.sampleList.filter((item) => item.sampleType !== 'B')
if (list.length > 0) {
list.forEach(async (item) => {
const url = saveFormat == 'xls' ? '/gamma/saveToExcel' : saveFormat == 'txt' ? '/gamma/saveToTxt' : ''
let params = {
fileName: item.inputFileName,
}
try {
await fetchAndDownload(url, params, 'get')
} catch (error) {
console.error(error)
} finally {
this.isSaving = false
}
})
}
}
fetchAndDownload(url, params, 'get')
}
if (this.isBetaGamma) {
const url =
@ -523,8 +558,13 @@ export default {
this.params_toDB.detFileName = this.newSampleData.detFileName
this.params_toDB.qcFileName = this.newSampleData.qcFileName
this.params_toDB.dbName = this.newSampleData.dbName
fetchAndDownload(url, this.params_toDB)
try {
await fetchAndDownload(url, this.params_toDB)
} catch (error) {
console.error(error)
} finally {
this.isSaving = false
}
}
},
@ -615,7 +655,7 @@ export default {
})
// reprocessing
if(inputFileName && sampleType !== 'B') {
if (inputFileName && sampleType !== 'B') {
this.$refs.gammaAnalysisRef.reProcessing(false)
}
},
@ -700,7 +740,6 @@ export default {
}
postAction('/spectrumAnalysis/analyseAllSpectrum', params).then((res) => {
if (res.success) {
console.log(res)
this.analyseCurrentSpectrumData = res.result
this.resultDisplayFlag = res.result.XeData
this.resultDisplayFlag.forEach((item) => {
@ -802,6 +841,7 @@ export default {
},
{
title: 'SAVE',
loading: this.isSaving,
children: [
{
type: 'MultiLevelMenu',
@ -810,6 +850,23 @@ export default {
children: [
{
title: 'Save Results to File',
children: [
{
title: 'Save Txt',
key: 'saveTxt',
show: this.isBetaGamma,
},
{
title: 'Save Excel',
key: 'saveExcel',
show: this.isBetaGamma,
},
{
title: 'Save Html',
key: 'saveHtml',
show: this.isBetaGamma,
},
],
},
{
title: 'Save Results to DB',
@ -821,6 +878,7 @@ export default {
{
title: 'Save All',
key: 'all',
show: this.isGamma,
},
],
key: 'resultsToDB',
@ -845,14 +903,21 @@ export default {
},
on: {
menuClick: () => {
console.log(this.isBetaGamma, this.isGamma)
this.saveSettingModalVisible = true
if (this.isGamma) {
this.saveSettingModalVisible = true
}
},
submenuClick: ({ item, child }) => {
if (item.key == 'resultsToDB') {
this.handleSaveResultsToDB(child.key)
} else if (item.key == 'phdToFile') {
this.handleSavePHDToFile(child.key)
} else if (child.key == 'saveTxt') {
this.handleSaveResultsToFile('txt')
} else if (child.key == 'saveExcel') {
this.handleSaveResultsToFile('xls')
} else if (child.key == 'saveHtml') {
this.handleSaveResultsToFile('html')
}
},
},
@ -1048,7 +1113,6 @@ export default {
type: 'a-menu-item',
title: 'ARR',
handler: () => {
console.log(this.newSampleData)
if (this.newSampleData.sampleId) {
this.arrOrRRRModalVisible = true
this.arrOrRRRModalExtraData = {}
@ -1196,7 +1260,9 @@ export default {
type: 'a-menu-item',
title: 'BG log viewer',
show: this.isBetaGamma,
handler: () => {},
handler: () => {
this.bgLogViewerVisible = true
},
},
{
type: 'a-menu-item',