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

This commit is contained in:
任珮宇 2023-11-02 09:29:26 +08:00
commit ffb78dc975
4 changed files with 293 additions and 179 deletions

View File

@ -1,5 +1,6 @@
<template> <template>
<a-table <a-table
ref="tableRef"
class="custom-table" class="custom-table"
v-bind="$attrs" v-bind="$attrs"
:data-source="list" :data-source="list"
@ -9,7 +10,7 @@
:loading="loading" :loading="loading"
:pagination="pagination" :pagination="pagination"
:customRow="customRow" :customRow="customRow"
:rowClassName="() => canSelect? 'custom-table-row': ''" :rowClassName="() => (canSelect ? 'custom-table-row' : '')"
@change="handleTableChange" @change="handleTableChange"
> >
<!-- 处理 scopedSlots --> <!-- 处理 scopedSlots -->
@ -23,49 +24,49 @@ export default {
props: { props: {
list: { list: {
type: Array, type: Array,
default: () => [] default: () => [],
}, },
columns: { columns: {
type: Array, type: Array,
default: () => [] default: () => [],
}, },
size: { size: {
type: String, type: String,
default: 'middle' default: 'middle',
}, },
rowKey: { rowKey: {
type: String, type: String,
default: 'id' default: 'id',
}, },
loading: { loading: {
type: Boolean type: Boolean,
}, },
pagination: { pagination: {
type: [Object, Boolean] type: [Object, Boolean],
}, },
selectedRowKeys: { selectedRowKeys: {
type: Array type: Array,
}, },
selectionRows: { selectionRows: {
type: Array type: Array,
}, },
canSelect: { canSelect: {
type: Boolean, type: Boolean,
default: true default: true,
}, },
canDeselect: { canDeselect: {
type: Boolean, type: Boolean,
default: true default: true,
}, },
multiple: { multiple: {
type: Boolean, type: Boolean,
default: false default: false,
} },
}, },
data() { data() {
return { return {
innerSelectedRowKeys: [], innerSelectedRowKeys: [],
innerSelectedRows: [] innerSelectedRows: [],
} }
}, },
methods: { methods: {
@ -76,22 +77,21 @@ export default {
class: this.innerSelectedRowKeys.includes(key) ? 'ant-table-row-selected' : '', class: this.innerSelectedRowKeys.includes(key) ? 'ant-table-row-selected' : '',
on: { on: {
click: () => { click: () => {
if(!this.canSelect) { if (!this.canSelect) {
return return
} }
// //
if (this.innerSelectedRowKeys.includes(key)) { if (this.innerSelectedRowKeys.includes(key)) {
if(this.multiple || this.canDeselect) { if (this.multiple || this.canDeselect) {
const findIndex = this.innerSelectedRowKeys.findIndex(k => k == key) const findIndex = this.innerSelectedRowKeys.findIndex((k) => k == key)
this.innerSelectedRowKeys.splice(findIndex, 1) this.innerSelectedRowKeys.splice(findIndex, 1)
} }
} }
// //
else { else {
if(this.multiple) { if (this.multiple) {
this.innerSelectedRowKeys.push(key) this.innerSelectedRowKeys.push(key)
} } else {
else {
this.innerSelectedRowKeys = [key] this.innerSelectedRowKeys = [key]
} }
} }
@ -100,31 +100,39 @@ export default {
}, },
dblclick: () => { dblclick: () => {
this.$emit('rowDblClick', record, index) this.$emit('rowDblClick', record, index)
} },
} },
} }
}, },
handleTableChange(pagination, filters, sorter) { handleTableChange(pagination, filters, sorter) {
this.$emit('change', pagination, filters, sorter) this.$emit('change', pagination, filters, sorter)
} },
// index
scrollIntoView(index) {
const tableEle = this.$refs.tableRef.$el
const tableBodyEle = tableEle.querySelector('.ant-table-body')
const prevEle = tableBodyEle.querySelector(`.ant-table-row:nth-child(${index + 1})`)
tableBodyEle.scrollTop = prevEle.offsetTop
},
}, },
watch: { watch: {
selectedRowKeys (val) { selectedRowKeys(val) {
this.innerSelectedRowKeys = val this.innerSelectedRowKeys = val
}, },
innerSelectedRowKeys () { innerSelectedRowKeys() {
this.$emit('update:selectedRowKeys', this.innerSelectedRowKeys) this.$emit('update:selectedRowKeys', this.innerSelectedRowKeys)
this.innerSelectedRows = this.innerSelectedRowKeys.map((key) => { this.innerSelectedRows = this.innerSelectedRowKeys.map((key) => {
return this.list.find(item => item[this.rowKey] === key) return this.list.find((item) => item[this.rowKey] === key)
}) })
this.$emit('update:selectionRows', this.innerSelectedRows) this.$emit('update:selectionRows', this.innerSelectedRows)
} },
}, },
computed: { computed: {
scopedSlotsKeys() { scopedSlotsKeys() {
return Object.keys(this.$scopedSlots) return Object.keys(this.$scopedSlots)
} },
} },
} }
</script> </script>
<style lang="less"> <style lang="less">

View File

@ -36,6 +36,7 @@
<span @click="handleChangeMarkLine('next')">&gt;</span> <span @click="handleChangeMarkLine('next')">&gt;</span>
</p> </p>
<custom-table <custom-table
ref="tableRef"
size="small" size="small"
:class="list.length ? 'has-data' : ''" :class="list.length ? 'has-data' : ''"
:list="list" :list="list"
@ -222,10 +223,9 @@ import { findNearPeak, getLineData, transformPointListData } from '@/utils/sampl
const initialOption = { const initialOption = {
grid: { grid: {
top: 40, top: 40,
left: 40, left: 80,
right: 30, right: 30,
bottom: 30, bottom: 30,
containLabel: true,
}, },
title: { title: {
text: '', text: '',
@ -372,14 +372,16 @@ const columns = [
const thumbnailOption = { const thumbnailOption = {
grid: { grid: {
top: 0, top: 0,
left: 5, left: 0,
right: 5, right: 0,
bottom: 0, bottom: 0,
}, },
xAxis: { xAxis: {
type: 'category', type: 'category',
axisLine: { axisLine: {
show: false, lineStyle: {
color: '#fff',
}
}, },
splitLine: { splitLine: {
show: false, show: false,
@ -387,6 +389,9 @@ const thumbnailOption = {
axisLabel: { axisLabel: {
show: false, show: false,
}, },
axisTick: {
show: false,
},
min: 1, min: 1,
max: 'dataMax', max: 'dataMax',
}, },
@ -401,8 +406,12 @@ const thumbnailOption = {
axisLabel: { axisLabel: {
show: false, show: false,
}, },
min: 0.1, max: (value) => {
max: 'dataMax', return (Math.abs(value.min) < value.max ? value.max : -value.min).toFixed(2)
},
min: (value) => {
return (Math.abs(value.min) < value.max ? -value.max : value.min).toFixed(2)
},
}, },
series: null, series: null,
} }
@ -507,7 +516,7 @@ export default {
const currSampleDetailInfo = await this.$store.dispatch('GET_SAMPLE_DATA', inputFileName) const currSampleDetailInfo = await this.$store.dispatch('GET_SAMPLE_DATA', inputFileName)
const { const {
data: { allData, shadowChannelChart, shapeChannelData, peak, BaseCtrls }, data: { allData, shadowChannelChart, shapeChannelData, peak, BaseCtrls, barChart },
} = currSampleDetailInfo } = currSampleDetailInfo
const channelBaseLine = getLineData(allData, 'BaseLine', 'channel') const channelBaseLine = getLineData(allData, 'BaseLine', 'channel')
@ -521,9 +530,9 @@ export default {
this.channelPeakChart = channelPeakGroup this.channelPeakChart = channelPeakGroup
this.energy = allEnergy this.energy = allEnergy
this.BaseCtrls = BaseCtrls this.BaseCtrls = BaseCtrls
this.barChart = shadowChannelChart this.barChart = barChart
this.setChartOption(channelBaseLine, shadowChannelChart, channelPeakGroup, shapeChannelData, shadowChannelChart) this.setChartOption(channelBaseLine, shadowChannelChart, channelPeakGroup, shapeChannelData, barChart)
this.list = peak this.list = peak
}, },
@ -542,7 +551,7 @@ export default {
// 线 // 线
series.push(this.buildCtrlPoint(baseCP)) series.push(this.buildCtrlPoint(baseCP))
// this.thumbnailOption.series = this.buildBarChart(bar) this.thumbnailOption.series = this.buildBarChart(bar)
this.option.series = series this.option.series = series
}, },
@ -578,7 +587,7 @@ export default {
if (this.list.length) { if (this.list.length) {
const selectedRow = this.list[index] const selectedRow = this.list[index]
this.selectTableRow(selectedRow.index) this.selectTableRow(selectedRow.index, index)
this.getSelPosNuclide(selectedRow) this.getSelPosNuclide(selectedRow)
this.selectedTableItem = selectedRow this.selectedTableItem = selectedRow
} }
@ -638,27 +647,53 @@ export default {
this.setMarkLineXAxis(centroid) this.setMarkLineXAxis(centroid)
const selectedRow = this.list[i] const selectedRow = this.list[i]
this.selectedTableItem = selectedRow this.selectedTableItem = selectedRow
this.selectTableRow(selectedRow.index) this.selectTableRow(selectedRow.index, i)
this.getSelPosNuclide(selectedRow) this.getSelPosNuclide(selectedRow)
this.adjustArea(i)
return return
} }
} }
} else if (direction == 'prev') { } else if (direction == 'prev') {
for (i = size - 1; i >= 0; i--) { for (i = size - 1; i >= 0; i--) {
if (Math.round(this.list[i].peakCentroid) < prevAxis) { const centroid = Math.round(this.list[i].peakCentroid)
this.setMarkLineXAxis(Math.round(this.list[i].peakCentroid)) if (centroid < prevAxis) {
this.setMarkLineXAxis(centroid)
const selectedRow = this.list[i] const selectedRow = this.list[i]
this.selectedTableItem = selectedRow this.selectedTableItem = selectedRow
this.selectTableRow(selectedRow.index) this.selectTableRow(selectedRow.index, i)
this.getSelPosNuclide(selectedRow) this.getSelPosNuclide(selectedRow)
this.adjustArea(i)
return return
} }
} }
} }
}, },
selectTableRow(key) { /**
* 根据当前Peak调整缩放范围
*/
adjustArea(index) {
const peak = this.channelPeakChart[index]
if (peak) {
const peakCountMax = Math.max(...peak.pointlist.map(({ y }) => y))
const peakCountMin = Math.min(...peak.pointlist.map(({ y }) => y))
const {
yAxis: { max, min },
} = this.option
if (max !== 'dataMax' && peakCountMin >= max) {
this.option.yAxis.max = 'dataMax'
}
if (peakCountMax <= min) {
this.option.yAxis.min = 0.1
}
}
},
selectTableRow(key, index) {
this.selectedKeys = [key] this.selectedKeys = [key]
this.$refs.tableRef.scrollIntoView(index)
}, },
// 线 // 线
@ -713,16 +748,6 @@ 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))
return max.x
})
return maxXAxises
},
// peak comment // peak comment
handleAddPeakComment() { handleAddPeakComment() {
if (!this.selectedKeys.length) { if (!this.selectedKeys.length) {
@ -914,7 +939,7 @@ export default {
}, },
// //
handleTableRowClick(row) { handleTableRowClick(row, index) {
if (this.selectedTableItem == row) { if (this.selectedTableItem == row) {
return return
} }
@ -940,6 +965,8 @@ export default {
this.getSelPosNuclide(row) this.getSelPosNuclide(row)
this.selectedTableItem = row this.selectedTableItem = row
this.adjustArea(index)
}, },
// //
@ -1005,8 +1032,6 @@ export default {
this.thumbnailOption.xAxis.min = x1 this.thumbnailOption.xAxis.min = x1
this.thumbnailOption.xAxis.max = x2 this.thumbnailOption.xAxis.max = x2
this.thumbnailOption.yAxis.min = y1
this.thumbnailOption.yAxis.max = y2
if (this.btnGroupType == 2) { if (this.btnGroupType == 2) {
this.buildRect() this.buildRect()
@ -1023,8 +1048,6 @@ export default {
this.thumbnailOption.xAxis.min = 1 this.thumbnailOption.xAxis.min = 1
this.thumbnailOption.xAxis.max = 'dataMax' this.thumbnailOption.xAxis.max = 'dataMax'
this.thumbnailOption.yAxis.min = 0.1
this.thumbnailOption.yAxis.max = 'dataMax'
if (this.btnGroupType == 2) { if (this.btnGroupType == 2) {
this.buildRect() this.buildRect()
@ -1522,14 +1545,24 @@ export default {
// //
buildBarChart(barChart) { buildBarChart(barChart) {
return buildLineSeries( return {
'BarChart', name: 'BarChart',
barChart.map(({ x, y }) => [x, y]), type: 'bar',
'#fff', data: barChart.map(({ x, y }) => [x, y]),
{ itemStyle: {
color: '#fff',
},
lineStyle: {
width: 1,
},
symbol: 'none',
symbolSize: 1,
emphasis: {
disabled: true,
},
animation: false,
silent: true, silent: true,
} }
)
}, },
/** /**
@ -1617,7 +1650,7 @@ export default {
.thumbnail { .thumbnail {
height: 50px; height: 50px;
margin: 10px 10px 35px 40px; margin: 10px 30px 35px 80px;
background-color: #255369; background-color: #255369;
} }

View File

@ -141,7 +141,7 @@ import StripModal from './components/Modals/StripModal.vue'
import { FilePicker } from '@/utils/FilePicker' import { FilePicker } from '@/utils/FilePicker'
import { zipFile } from '@/utils/file' import { zipFile } from '@/utils/file'
import { findNearPeak } from '@/utils/sampleHelper' import { findNearPeak } from '@/utils/sampleHelper'
import baseCtrlJson from './baseCtrlJson.json' import { add, subtract } from 'xe-utils/methods'
export default { export default {
props: { props: {
@ -303,8 +303,8 @@ export default {
case '=': // x case '=': // x
nextMinX = currMinX - xStep nextMinX = currMinX - xStep
nextMaxX = currMaxX + xStep nextMaxX = currMaxX + xStep
if (nextMinX < 1) { if (nextMinX < this.xAxisMin) {
nextMinX = 1 nextMinX = this.xAxisMin
} }
if (nextMaxX > maxX) { if (nextMaxX > maxX) {
nextMaxX = maxX nextMaxX = maxX
@ -351,30 +351,45 @@ export default {
if (markLineXAxis == maxX) { if (markLineXAxis == maxX) {
return return
} }
const nextAxis = markLineXAxis == -1 ? 1 : markLineXAxis + 1 let rightAxis = -1
markLineData.xAxis = nextAxis if (markLineXAxis == -1) {
rightAxis = this.xAxisMin
} else {
if (this.isEnergy) {
const channel = this.getChannelByEnergy(markLineXAxis)
rightAxis = this.getEnergyByChannel(channel + 1)
} else {
rightAxis = markLineXAxis + 1
}
}
markLineData.xAxis = rightAxis
const { const {
channel: nextChannel, channel: rightChannel,
energy: nextEnergy, energy: rightEnergy,
counts: nextCounts, counts: rightCounts,
} = this.getEnergyAndCountsByXAxis(nextAxis) } = this.getEnergyAndCountsByXAxis(rightAxis)
this.setChartBottomTitle(nextChannel, nextEnergy, nextCounts) this.setChartBottomTitle(rightChannel, rightEnergy, rightCounts)
this.getSelPosNuclide(rightChannel)
this.getSelPosNuclide(nextChannel)
break break
case 'ArrowLeft': case 'ArrowLeft':
if (markLineXAxis <= 1) { if (markLineXAxis <= this.xAxisMin) {
return return
} }
markLineData.xAxis = markLineXAxis - 1 let leftAxis = 0
if (this.isEnergy) {
const channel = this.getChannelByEnergy(markLineXAxis)
leftAxis = this.getEnergyByChannel(channel - 1)
} else {
leftAxis = markLineXAxis - 1
}
markLineData.xAxis = leftAxis
const { const {
channel: prevChannel, channel: leftChannel,
energy: prevEnergy, energy: leftEnergy,
counts: prevCounts, counts: leftCounts,
} = this.getEnergyAndCountsByXAxis(markLineXAxis - 1) } = this.getEnergyAndCountsByXAxis(leftAxis)
this.setChartBottomTitle(prevChannel, prevEnergy, prevCounts) this.setChartBottomTitle(leftChannel, leftEnergy, leftCounts)
this.getSelPosNuclide(leftChannel)
this.getSelPosNuclide(prevChannel)
break break
} }
}, },
@ -394,13 +409,7 @@ export default {
this.option.xAxis.max = maxX this.option.xAxis.max = maxX
this.option.yAxis.min = minY this.option.yAxis.min = minY
this.option.yAxis.max = maxY this.option.yAxis.max = maxY
if (this.isEnergy()) {
const channel1 = this.getChannelByEnergy(minX)
const channel2 = this.getChannelByEnergy(maxX)
this.setThumbnailChartRect(channel1, maxY, channel2, minY)
} else {
this.setThumbnailChartRect(minX, maxY, maxX, minY) this.setThumbnailChartRect(minX, maxY, maxX, minY)
}
const thumbnailChart = this.getThumbnailChart() const thumbnailChart = this.getThumbnailChart()
const [, maxYPixel] = thumbnailChart.convertToPixel({ seriesIndex: 0 }, [0, minY]) // yAxispix const [, maxYPixel] = thumbnailChart.convertToPixel({ seriesIndex: 0 }, [0, minY]) // yAxispix
@ -664,14 +673,13 @@ export default {
let energy = 0 let energy = 0
const value = params[0].value[0] const value = params[0].value[0]
if (this.isEnergy()) { if (this.isEnergy) {
energy = value.toFixed(2) energy = value.toFixed(2)
channel = this.getChannelByEnergy(energy) channel = this.getChannelByEnergy(value)
} else { } else {
const allPointList = this.energyData.all.pointlist
channel = parseInt(value.toFixed()) channel = parseInt(value.toFixed())
energy = allPointList && allPointList[channel - 1] energy = this.getEnergyByChannel(channel)
energy = energy ? energy.x.toFixed(2) : undefined energy = energy ? energy.toFixed(2) : undefined
} }
return `<div class="channel">Channel: ${channel}</div> return `<div class="channel">Channel: ${channel}</div>
@ -729,8 +737,18 @@ export default {
} }
this.option.xAxis.name = value this.option.xAxis.name = value
if (this.isEnergy) {
this.option.xAxis.axisLabel.formatter = (value) => {
return value.toFixed(2)
}
} else {
this.option.xAxis.axisLabel.formatter = (value) => {
return value
}
}
this.handleResetChart() this.handleResetChart()
this.thumbnailOption.xAxis.min = this.xAxisMin
this.redrawLineBySeriesName( this.redrawLineBySeriesName(
'BaseLine', 'BaseLine',
@ -812,7 +830,7 @@ export default {
// seriesName线 // seriesName线
redrawLineBySeriesName(seriesName, energyData, channelData, isShow = true, color) { redrawLineBySeriesName(seriesName, energyData, channelData, isShow = true, color) {
if (isShow) { if (isShow) {
const data = this.isEnergy() ? energyData : channelData const data = this.isEnergy ? energyData : channelData
this.setSeriesData(this.option.series, seriesName, this.transformPointListData(data.pointlist), color) this.setSeriesData(this.option.series, seriesName, this.transformPointListData(data.pointlist), color)
} else { } else {
this.setSeriesData(this.option.series, seriesName, []) this.setSeriesData(this.option.series, seriesName, [])
@ -822,7 +840,7 @@ export default {
// //
redrawCtrlPointBySeriesName() { redrawCtrlPointBySeriesName() {
const series = findSeriesByName(this.option.series, 'BaseLine_Ctrl_Point') const series = findSeriesByName(this.option.series, 'BaseLine_Ctrl_Point')
const data = this.isEnergy() ? this.energyData.baseLineCP : this.channelData.baseLineCP const data = this.isEnergy ? this.energyData.baseLineCP : this.channelData.baseLineCP
series.data = data.map(({ size, color, point: { x, y } }) => { series.data = data.map(({ size, color, point: { x, y } }) => {
return { return {
value: [x, y], value: [x, y],
@ -847,7 +865,7 @@ export default {
redrawPeakLine() { redrawPeakLine() {
this.clearPeakLine() this.clearPeakLine()
const data = this.isEnergy() ? this.energyData.peakGroup : this.channelData.peakGroup const data = this.isEnergy ? this.energyData.peakGroup : this.channelData.peakGroup
const peakLines = [] const peakLines = []
data.forEach((item, index) => { data.forEach((item, index) => {
peakLines.push( peakLines.push(
@ -863,7 +881,7 @@ export default {
// //
redrawThumbnailChart() { redrawThumbnailChart() {
const series = findSeriesByName(this.thumbnailOption.series, 'Spectrum') const series = findSeriesByName(this.thumbnailOption.series, 'Spectrum')
const data = this.isEnergy() ? this.energyData.spectrumLine : this.channelData.spectrumLine const data = this.isEnergy ? this.energyData.spectrumLine : this.channelData.spectrumLine
series.data = this.transformPointListData(data.pointlist) series.data = this.transformPointListData(data.pointlist)
}, },
@ -875,7 +893,7 @@ export default {
if (point) { if (point) {
const xAxis = point[0] const xAxis = point[0]
const spectrumLineSeries = findSeriesByName(this.option.series, 'Spectrum') const spectrumLineSeries = findSeriesByName(this.option.series, 'Spectrum')
spectrumLineSeries.markLine.data[0].xAxis = parseInt(xAxis.toFixed()) spectrumLineSeries.markLine.data[0].xAxis = xAxis
const { channel, energy, counts } = this.getEnergyAndCountsByXAxis(xAxis) const { channel, energy, counts } = this.getEnergyAndCountsByXAxis(xAxis)
this.setChartBottomTitle(channel, energy, counts) this.setChartBottomTitle(channel, energy, counts)
@ -888,7 +906,7 @@ export default {
setChartBottomTitle(channel, energy, counts) { setChartBottomTitle(channel, energy, counts) {
const { index, find } = findNearPeak(channel, this.peakList) const { index, find } = findNearPeak(channel, this.peakList)
this.option.title.text = `{a|Channel:${channel}} {a|Energy:${energy || '0.00'}} {a|Counts:${ this.option.title.text = `{a|Channel:${channel}} {a|Energy:${energy.toFixed(2) || '0.00'}} {a|Counts:${
counts || '0.0' counts || '0.0'
}} {a|Significance:${find ? this.peakList[index].significance.toFixed(2) : '0.00'}}` }} {a|Significance:${find ? this.peakList[index].significance.toFixed(2) : '0.00'}}`
}, },
@ -896,19 +914,19 @@ export default {
// xAixschannelenergycounts // xAixschannelenergycounts
getEnergyAndCountsByXAxis(xAxis) { getEnergyAndCountsByXAxis(xAxis) {
let channel, energy, counts let channel, energy, counts
if (this.isEnergy()) { if (this.isEnergy) {
channel = this.getChannelByEnergy(xAxis) channel = this.getChannelByEnergy(xAxis)
energy = xAxis.toFixed(2) energy = xAxis
counts = this.energyData.all.pointlist[channel - 1] counts = this.energyData.all.pointlist[channel - 1].y
} else { } else {
channel = parseInt(xAxis.toFixed()) channel = Math.round(xAxis)
energy = this.energyData.all.pointlist && this.energyData.all.pointlist[channel - 1].x.toFixed(2) energy = this.getEnergyByChannel(channel)
counts = this.channelData.all.pointlist[channel - 1] counts = this.channelData.all.pointlist[channel - 1].y
} }
return { return {
channel, channel,
energy, energy,
counts: counts.y, counts,
} }
}, },
@ -961,7 +979,7 @@ export default {
handleTogglePeak() { handleTogglePeak() {
const spectrumLineSeries = findSeriesByName(this.option.series, 'Spectrum') const spectrumLineSeries = findSeriesByName(this.option.series, 'Spectrum')
const xAxis = spectrumLineSeries.markLine.data[0].xAxis const xAxis = spectrumLineSeries.markLine.data[0].xAxis
const channel = this.isEnergy() ? this.getChannelByEnergy(xAxis) : parseInt(xAxis.toFixed()) const channel = this.isEnergy ? this.getChannelByEnergy(xAxis) : parseInt(xAxis.toFixed())
const index = this.channelData.peakGroup.findIndex((peakItem) => { const index = this.channelData.peakGroup.findIndex((peakItem) => {
const allX = peakItem.pointlist.map((item) => item.x) const allX = peakItem.pointlist.map((item) => item.x)
const max = Math.max(...allX) const max = Math.max(...allX)
@ -1016,32 +1034,83 @@ export default {
const spectrumLineSeries = findSeriesByName(this.option.series, 'Spectrum') const spectrumLineSeries = findSeriesByName(this.option.series, 'Spectrum')
const prevAxis = spectrumLineSeries.markLine.data[0].xAxis const prevAxis = spectrumLineSeries.markLine.data[0].xAxis
// Channel const { channel: prevChannel } = this.getEnergyAndCountsByXAxis(prevAxis)
const maxXAxises = this.channelData.peakGroup.map((item) => {
const allY = item.pointlist.map((item) => item.y) let i,
const max = item.pointlist.find((point) => point.y == Math.max(...allY)) size = this.peakList.length
return max.x
})
let find = null
if (direction == 'right') { if (direction == 'right') {
// prevAxisxAxis for (i = 0; i < size; i++) {
find = maxXAxises.find((xAxis) => xAxis > prevAxis) const centroid = Math.round(this.peakList[i].peakCentroid)
if (find) { if (centroid > prevChannel) {
spectrumLineSeries.markLine.data[0].xAxis = find const energy = this.getEnergyByChannel(centroid)
this.setMarkLineXAxis(this.isEnergy ? energy : centroid, i)
this.getSelPosNuclide(centroid)
const { counts } = this.getEnergyAndCountsByXAxis(this.isEnergy ? energy : centroid)
this.setChartBottomTitle(centroid, energy, counts)
return
}
} }
} else if (direction == 'left') { } else if (direction == 'left') {
// prevAxisxAxis for (i = size - 1; i >= 0; i--) {
find = maxXAxises.reverse().find((xAxis) => xAxis < prevAxis) const centroid = Math.round(this.peakList[i].peakCentroid)
if (find) { if (Math.round(centroid) < prevChannel) {
spectrumLineSeries.markLine.data[0].xAxis = find const energy = this.getEnergyByChannel(centroid)
this.setMarkLineXAxis(this.isEnergy ? energy : centroid, i)
this.getSelPosNuclide(centroid)
const { counts } = this.getEnergyAndCountsByXAxis(this.isEnergy ? energy : centroid)
this.setChartBottomTitle(centroid, energy, counts)
return
} }
} }
}
},
// 线
setMarkLineXAxis(xAxis, index) {
const spectrumLineSeries = findSeriesByName(this.option.series, 'Spectrum')
const markLineOption = spectrumLineSeries.markLine.data[0]
markLineOption.xAxis = xAxis
const {
xAxis: { max: xAxisMax, min: xAxisMin },
yAxis: { max: yAxisMax, min: yAxisMin },
} = this.option
//
if (xAxis >= xAxisMax || xAxis <= xAxisMin) {
let nextMaxX = xAxisMax,
nextMinX = xAxisMin,
nextMaxY = yAxisMax,
nextMinY = yAxisMin
const halfDiff = (xAxisMax - xAxisMin) / 2
const dataSource = this.isEnergy ? this.energyData : this.channelData
const lastChannel = dataSource.spectrumLine.pointlist[dataSource.spectrumLine.pointlist.length - 1].x
const tmpNextMaxX = xAxis + halfDiff
const tmpNextMinX = xAxis - halfDiff
nextMaxX = tmpNextMaxX > lastChannel ? lastChannel : tmpNextMaxX
nextMinX = tmpNextMinX < this.xAxisMin ? this.xAxisMin : tmpNextMinX
const peak = this.channelData.peakGroup[index]
const peakCountMax = Math.max(...peak.pointlist.map(({ y }) => y))
const peakCountMin = Math.min(...peak.pointlist.map(({ y }) => y))
const chart = this.$refs.thumbnailChartRef.getChartInstance()
const yDataMax = getAxisMax(chart, 'yAxis')
if (yAxisMax !== 'dataMax' && peakCountMin >= yAxisMax) {
nextMaxY = yDataMax
}
if (find) { if (peakCountMax <= yAxisMin) {
this.getSelPosNuclide(find) nextMinY = 1
const { channel, energy, counts } = this.getEnergyAndCountsByXAxis(find) }
this.setChartBottomTitle(channel, energy, counts)
this.setRectRange(nextMinX, nextMaxX, nextMinY, nextMaxY)
} }
}, },
@ -1118,13 +1187,7 @@ export default {
this.option.yAxis.min = y1 this.option.yAxis.min = y1
this.option.yAxis.max = y2 this.option.yAxis.max = y2
if (this.isEnergy()) {
const channel1 = this.getChannelByEnergy(x1)
const channel2 = this.getChannelByEnergy(x2)
this.setThumbnailChartRect(channel1, y2, channel2, y1)
} else {
this.setThumbnailChartRect(x1, y2, x2, y1) this.setThumbnailChartRect(x1, y2, x2, y1)
}
const thumbnailChart = this.getThumbnailChart() const thumbnailChart = this.getThumbnailChart()
const [, maxYPixel] = thumbnailChart.convertToPixel({ seriesIndex: 0 }, [0, y1]) // yAxispix const [, maxYPixel] = thumbnailChart.convertToPixel({ seriesIndex: 0 }, [0, y1]) // yAxispix
@ -1251,31 +1314,29 @@ export default {
const xAxisMax = getAxisMax(thumbnailChart, 'xAxis') const xAxisMax = getAxisMax(thumbnailChart, 'xAxis')
const xAxisLimit = rangeNumber(1 + halfWidth, xAxisMax - halfWidth) const xAxisLimit = rangeNumber(add(this.xAxisMin, halfWidth), subtract(xAxisMax, halfWidth))
const halfHeightPixel = this.halfHeightPixel const halfHeightPixel = this.halfHeightPixel
const yAxisLimit = rangeNumber(maxYAxisPixel + halfHeightPixel, minYAxisPixel - halfHeightPixel) const yAxisLimit = rangeNumber(add(maxYAxisPixel, halfHeightPixel), subtract(minYAxisPixel, halfHeightPixel))
xAxis = xAxisLimit(xAxis) xAxis = xAxisLimit(xAxis)
let { pixY: yAxisPixel } = this.convertToPixel(thumbnailChart, 0, yAxis) let { pixY: yAxisPixel } = this.convertToPixel(thumbnailChart, 0, yAxis)
yAxisPixel = yAxisLimit(yAxisPixel) yAxisPixel = yAxisLimit(yAxisPixel)
const minYAxis = thumbnailChart.convertFromPixel({ seriesIndex: 0 }, [0, yAxisPixel + halfHeightPixel])[1] // ypixyAxis const minYAxis = thumbnailChart.convertFromPixel({ seriesIndex: 0 }, [0, add(yAxisPixel, halfHeightPixel)])[1] // ypixyAxis
const maxYAxis = thumbnailChart.convertFromPixel({ seriesIndex: 0 }, [0, yAxisPixel - halfHeightPixel])[1] const maxYAxis = thumbnailChart.convertFromPixel({ seriesIndex: 0 }, [
0,
subtract(yAxisPixel, halfHeightPixel),
])[1]
this.setThumbnailChartRect(xAxis - halfWidth, maxYAxis, xAxis + halfWidth, minYAxis) const nextXAxisMin = subtract(xAxis, halfWidth)
const nextXAxisMax = add(xAxis, halfWidth)
if (this.isEnergy()) { this.setThumbnailChartRect(nextXAxisMin, maxYAxis, nextXAxisMax, minYAxis)
const x1 = parseInt(this.energyData.spectrumLine.pointlist[xAxis - halfWidth].x)
const x2 = parseInt(this.energyData.spectrumLine.pointlist[xAxis + halfWidth].x)
this.option.xAxis.min = x1 this.option.xAxis.min = nextXAxisMin
this.option.xAxis.max = x2 this.option.xAxis.max = nextXAxisMax
} else {
this.option.xAxis.min = xAxis - halfWidth
this.option.xAxis.max = xAxis + halfWidth
}
this.option.yAxis.min = minYAxis this.option.yAxis.min = minYAxis
this.option.yAxis.max = maxYAxis this.option.yAxis.max = maxYAxis
@ -1290,7 +1351,7 @@ export default {
* 重置图表 * 重置图表
*/ */
handleResetChart() { handleResetChart() {
this.option.xAxis.min = 1 this.option.xAxis.min = this.xAxisMin
this.option.xAxis.max = 'dataMax' this.option.xAxis.max = 'dataMax'
this.option.yAxis.min = 1 this.option.yAxis.min = 1
this.option.yAxis.max = 'dataMax' this.option.yAxis.max = 'dataMax'
@ -1524,6 +1585,15 @@ export default {
return channel return channel
}, },
/**
* 根据channel获取energy
* @param {number} channel
*/
getEnergyByChannel(channel) {
const energyItem = this.energyData.all.pointlist ? this.energyData.all.pointlist[channel - 1] : {}
return energyItem ? energyItem.x : 0
},
/** /**
* 重置页面信息 * 重置页面信息
*/ */
@ -1614,10 +1684,6 @@ export default {
}) })
}, },
isEnergy() {
return this.graphAssistance.axisType == 'Energy'
},
isScatter() { isScatter() {
return this.graphAssistance.spectrumType == 'Scatter' return this.graphAssistance.spectrumType == 'Scatter'
}, },
@ -1697,6 +1763,17 @@ export default {
immediate: true, immediate: true,
}, },
}, },
computed: {
// Energy
isEnergy() {
return this.graphAssistance.axisType == 'Energy'
},
// x
xAxisMin() {
return this.isEnergy ? 0.01 : 1
},
},
} }
</script> </script>

View File

@ -63,16 +63,14 @@ export const GammaOptions = {
axisLabel: { axisLabel: {
textStyle: { textStyle: {
color: '#ade6ee' color: '#ade6ee'
},
formatter: value => {
return parseInt(value)
} }
}, },
min: 1, min: 1,
max: 'dataMax', max: 'dataMax',
animation: false, animation: false
axisLabel: {
formatter: value => {
return parseInt(value)
}
}
}, },
yAxis: { yAxis: {
name: 'Counts', name: 'Counts',
@ -96,16 +94,14 @@ export const GammaOptions = {
axisLabel: { axisLabel: {
textStyle: { textStyle: {
color: '#ade6ee' color: '#ade6ee'
},
formatter: value => {
return value.toFixed(1)
} }
}, },
min: 1, min: 1,
max: 'dataMax', max: 'dataMax',
animation: false, animation: false
axisLabel: {
formatter: value => {
return value.toFixed(1)
}
}
}, },
series: [spectrumSeries, baseLineSeries, lcLineSeries, scacLineSeries, baseLineCtrlPoint, compareLineSeries], series: [spectrumSeries, baseLineSeries, lcLineSeries, scacLineSeries, baseLineCtrlPoint, compareLineSeries],
brush: {} brush: {}