feat: 完成Statistics Paramer History中所有功能及交互,和AutomaticAnalysisLog弹窗
This commit is contained in:
parent
63ede005d2
commit
124b9ea0ac
|
@ -13,6 +13,10 @@ export default {
|
|||
type: Object,
|
||||
default: () => ({})
|
||||
},
|
||||
notMerge: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
},
|
||||
height: {
|
||||
type: Number,
|
||||
default: 0
|
||||
|
@ -59,7 +63,9 @@ export default {
|
|||
option: {
|
||||
handler() {
|
||||
if (this._chart) {
|
||||
this._chart.setOption(this.option)
|
||||
this._chart.setOption(this.option, {
|
||||
notMerge: this.notMerge
|
||||
})
|
||||
}
|
||||
},
|
||||
deep: true
|
||||
|
|
|
@ -24,11 +24,11 @@ export function getXAxisAndYAxisByPosition(chart, offsetX, offsetY, seriesIndex
|
|||
* @param {import("echarts").ECharts} chartInstance
|
||||
* @param {'png' | 'jpeg' | 'svg'} type
|
||||
*/
|
||||
export function exportEchartImg(chartInstance, type = 'png') {
|
||||
export function exportEchartImg(chartInstance, type = 'png', backgroundColor = '#022024') {
|
||||
const dataURL = chartInstance.getDataURL({
|
||||
type,
|
||||
pixelRatio: 2,
|
||||
backgroundColor: '#022024'
|
||||
backgroundColor
|
||||
});
|
||||
|
||||
const link = document.createElement('a')
|
||||
|
|
|
@ -9,7 +9,7 @@
|
|||
</pop-over-with-icon>
|
||||
<pop-over-with-icon placement="bottomLeft">
|
||||
QC Flags
|
||||
<beta-gamma-qc-flags slot="content" :data="qcFlags" />
|
||||
<beta-gamma-qc-flags slot="content" :data="qcFlags" @click="handleQcFlagClick" />
|
||||
</pop-over-with-icon>
|
||||
<pop-over-with-icon placement="bottomLeft" style="width: 159px" v-model="spectraVisible">
|
||||
Spectra
|
||||
|
@ -131,6 +131,8 @@
|
|||
</div>
|
||||
<!-- 主体部分结束 -->
|
||||
</a-spin>
|
||||
|
||||
<statistics-paramer-history-modal-for-qc-flags v-model="statisticModalVisible" :sampleId="sample.sampleId" :statisticsType="statisticsType" />
|
||||
</div>
|
||||
</template>
|
||||
|
||||
|
@ -138,6 +140,7 @@
|
|||
import { getAction } from '../../api/manage'
|
||||
import BetaGammaChartContainer from './components/BetaGammaChartContainer.vue'
|
||||
import BetaGammaSpectrumChart from './components/BetaGammaSpectrumChart.vue'
|
||||
import StatisticsParamerHistoryModalForQcFlags from './components/Modals/BetaGammaModals/StatisticsParamerHistoryModalForQCFlags.vue'
|
||||
import ComparisonModal from './components/Modals/ComparisonModal.vue'
|
||||
import ResultDisplay from './components/ResultDisplay.vue'
|
||||
import SpectrumLineChart from './components/SpectrumLineChart.vue'
|
||||
|
@ -146,6 +149,13 @@ import BetaGammaQcFlags from './components/SubOperators/BetaGammaQcFlags.vue'
|
|||
import PopOverWithIcon from './components/SubOperators/PopOverWithIcon.vue'
|
||||
import Spectra from './components/SubOperators/Spectra.vue'
|
||||
|
||||
const StatisticsType = {
|
||||
'Collection Time': 'Colloc_Time',
|
||||
'Acq Time': 'Acq_Time',
|
||||
'Xe Volume': 'Xe_volumn',
|
||||
'Air Volume': 'Sample_Volumn'
|
||||
}
|
||||
|
||||
export default {
|
||||
components: {
|
||||
BetaGammaChartContainer,
|
||||
|
@ -157,7 +167,8 @@ export default {
|
|||
PopOverWithIcon,
|
||||
Spectra,
|
||||
BetaGammaQcFlags,
|
||||
BetaGammaDetailedInfomation
|
||||
BetaGammaDetailedInfomation,
|
||||
StatisticsParamerHistoryModalForQcFlags
|
||||
},
|
||||
props: {
|
||||
sample: {
|
||||
|
@ -190,7 +201,10 @@ export default {
|
|||
gammaEnergyData: [],
|
||||
betaEnergyData: [],
|
||||
|
||||
comparisonModalVisible: false
|
||||
comparisonModalVisible: false,
|
||||
|
||||
statisticModalVisible: false, // Qc Flags 点击后的弹窗
|
||||
statisticsType: StatisticsType['Collection Time']
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
|
@ -312,6 +326,15 @@ export default {
|
|||
}
|
||||
|
||||
this.$refs.betaGammaChartRef.setRange(x1, x2, type)
|
||||
},
|
||||
|
||||
// QC Flags 除去GasBg 和 DetBg其他四个点击时
|
||||
handleQcFlagClick(item) {
|
||||
const statisticsType = StatisticsType[item]
|
||||
if (statisticsType) {
|
||||
this.statisticsType = statisticsType
|
||||
this.statisticModalVisible = true
|
||||
}
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
|
|
|
@ -448,7 +448,6 @@ export default {
|
|||
|
||||
// 通知上层范围改变
|
||||
emitRangeChange(range) {
|
||||
console.log('%c [ range ]-452', 'font-size:13px; background:pink; color:#bf2c9f;', range)
|
||||
this.$emit('rangeChange', range)
|
||||
},
|
||||
|
||||
|
|
|
@ -0,0 +1,20 @@
|
|||
<template>
|
||||
<custom-modal v-model="visible" :width="800" title="Auto Process Log Viewer" :okHandler="handleOk">
|
||||
<a-textarea :rows="18"></a-textarea>
|
||||
</custom-modal>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import ModalMixin from '@/mixins/ModalMixin'
|
||||
|
||||
export default {
|
||||
mixins: [ModalMixin],
|
||||
methods: {
|
||||
handleOk() {
|
||||
console.log('%c [ ]-15', 'font-size:13px; background:pink; color:#bf2c9f;')
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style></style>
|
|
@ -1,5 +1,5 @@
|
|||
<template>
|
||||
<custom-modal v-model="visible" title="Statistics Paramer History" :width="1480" :footer="null">
|
||||
<custom-modal v-model="visible" title="Statistics Paramer History" :width="1480" destroy-on-close :footer="null">
|
||||
<div class="statistics-paramer-history">
|
||||
<!-- 左侧配置 -->
|
||||
<title-over-border title="Query Infomation Settings" class="settings">
|
||||
|
@ -11,57 +11,62 @@
|
|||
>
|
||||
<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"><<</a-button>
|
||||
<a-input size="small" v-model="queryParams.stationName"></a-input>
|
||||
<a-button type="primary" size="small" @click="handleQueryDetector">Query Detector</a-button>
|
||||
<a-button type="primary" size="small" @click="handleReset"><<</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>
|
||||
<custom-select :options="detectorList" v-model="queryParams.detectorName" size="small"></custom-select>
|
||||
</a-form-model-item>
|
||||
</a-form-model>
|
||||
</title-over-border>
|
||||
<!-- Nuclide -->
|
||||
<title-over-border 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 v-model="queryParams.nuclidesList">
|
||||
<a-checkbox value="Xe131m">Xe131m</a-checkbox>
|
||||
<a-checkbox value="Xe133m">Xe133m</a-checkbox>
|
||||
<a-checkbox value="Xe133">Xe133</a-checkbox>
|
||||
<a-checkbox value="Xe135">Xe135</a-checkbox>
|
||||
</a-checkbox-group>
|
||||
</title-over-border>
|
||||
|
||||
<a-checkbox-group class="other-checkbox">
|
||||
<a-checkbox>MDC</a-checkbox>
|
||||
<a-checkbox>Activity Concentration</a-checkbox>
|
||||
</a-checkbox-group>
|
||||
<div class="other-checkbox">
|
||||
<a-checkbox v-model="queryParams.mdc">MDC</a-checkbox>
|
||||
<a-checkbox v-model="queryParams.activity">Activity Concentration</a-checkbox>
|
||||
</div>
|
||||
<a-divider></a-divider>
|
||||
<a-form-model class="time-setting">
|
||||
<a-form-model-item label="Start Time">
|
||||
<custom-date-picker></custom-date-picker>
|
||||
<custom-date-picker v-model="queryParams.startTime" valueFormat="YYYY-MM-DD"></custom-date-picker>
|
||||
</a-form-model-item>
|
||||
<a-form-model-item label="Stop Time">
|
||||
<custom-date-picker></custom-date-picker>
|
||||
<custom-date-picker v-model="queryParams.endTime" valueFormat="YYYY-MM-DD"></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 class="rn-setting" v-model="queryParams.dbName">
|
||||
<a-radio value="RNAUTO">RNAUTO</a-radio>
|
||||
<a-radio value="RNMAN">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>
|
||||
<a-button type="primary" @click="handleStatisticsQuery">Statistics Query & Plot</a-button>
|
||||
<a-button type="primary" @click="handleSnapshot($refs.chartRef)">Snapshot</a-button>
|
||||
</div>
|
||||
<!-- 左侧中间俩按钮结束 -->
|
||||
<a-divider></a-divider>
|
||||
<!-- Filter -->
|
||||
<title-over-border title="Filter">
|
||||
<title-over-border>
|
||||
<template slot="title">
|
||||
<a-checkbox v-model="queryParams.filterGrpbox">Filter</a-checkbox>
|
||||
</template>
|
||||
<a-checkbox>Xe Result Flag</a-checkbox>
|
||||
<!-- 配置详情 -->
|
||||
<div class="filter-options">
|
||||
<div class="filter-option">
|
||||
<div class="input">
|
||||
<a-input></a-input>
|
||||
<a-input v-model="queryParams.minCollectTimeLine" :disabled="filterDisabled"></a-input>
|
||||
</div>
|
||||
<div class="text">
|
||||
<span><</span>
|
||||
|
@ -69,12 +74,12 @@
|
|||
<span><</span>
|
||||
</div>
|
||||
<div class="input">
|
||||
<a-input></a-input>
|
||||
<a-input v-model="queryParams.maxCollectTimeLine" :disabled="filterDisabled"></a-input>
|
||||
</div>
|
||||
</div>
|
||||
<div class="filter-option">
|
||||
<div class="input">
|
||||
<a-input></a-input>
|
||||
<a-input v-model="queryParams.minAcqLiveLine" :disabled="filterDisabled"></a-input>
|
||||
</div>
|
||||
<div class="text">
|
||||
<span><</span>
|
||||
|
@ -82,7 +87,7 @@
|
|||
<span><</span>
|
||||
</div>
|
||||
<div class="input">
|
||||
<a-input></a-input>
|
||||
<a-input v-model="queryParams.maxAcqLiveLine" :disabled="filterDisabled"></a-input>
|
||||
</div>
|
||||
</div>
|
||||
<div class="filter-option">
|
||||
|
@ -92,7 +97,7 @@
|
|||
<span><</span>
|
||||
</div>
|
||||
<div class="input">
|
||||
<a-input></a-input>
|
||||
<a-input v-model="queryParams.quantityLine" :disabled="filterDisabled"></a-input>
|
||||
</div>
|
||||
</div>
|
||||
<div class="filter-option">
|
||||
|
@ -102,7 +107,7 @@
|
|||
<span><</span>
|
||||
</div>
|
||||
<div class="input">
|
||||
<a-input></a-input>
|
||||
<a-input v-model="queryParams.xeVolumeLine" :disabled="filterDisabled"></a-input>
|
||||
</div>
|
||||
</div>
|
||||
<div class="filter-option">
|
||||
|
@ -112,7 +117,7 @@
|
|||
<span><</span>
|
||||
</div>
|
||||
<div class="input">
|
||||
<a-input></a-input>
|
||||
<a-input v-model="queryParams.mdcLine" :disabled="filterDisabled"></a-input>
|
||||
</div>
|
||||
</div>
|
||||
<div class="filter-option">
|
||||
|
@ -122,7 +127,7 @@
|
|||
<span><</span>
|
||||
</div>
|
||||
<div class="input">
|
||||
<a-input></a-input>
|
||||
<a-input v-model="queryParams.concLine" :disabled="filterDisabled"></a-input>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -130,7 +135,7 @@
|
|||
</title-over-border>
|
||||
<!-- 右侧图表 -->
|
||||
<div class="statistics-paramer-history-chart">
|
||||
<custom-chart :option="option"></custom-chart>
|
||||
<custom-chart ref="chartRef" :option="option" :notMerge="true"></custom-chart>
|
||||
</div>
|
||||
</div>
|
||||
</custom-modal>
|
||||
|
@ -140,7 +145,12 @@
|
|||
import ModalMixin from '@/mixins/ModalMixin'
|
||||
import TitleOverBorder from '../../TitleOverBorder.vue'
|
||||
import CustomChart from '@/components/CustomChart/index.vue'
|
||||
import { getAction, postAction } from '@/api/manage'
|
||||
import moment from 'moment'
|
||||
import { exportEchartImg } from '@/utils/chartHelper'
|
||||
import { cloneDeep } from 'lodash'
|
||||
|
||||
// 右侧图表配置
|
||||
const initialOption = {
|
||||
grid: {
|
||||
right: 10,
|
||||
|
@ -148,10 +158,25 @@ const initialOption = {
|
|||
top: 20,
|
||||
bottom: 60
|
||||
},
|
||||
legend: {
|
||||
show: false,
|
||||
orient: 'vertical',
|
||||
top: 30,
|
||||
right: 20,
|
||||
z: 999,
|
||||
textStyle: {
|
||||
color: '#fff'
|
||||
},
|
||||
backgroundColor: '#022024',
|
||||
borderColor: '#0b8c82',
|
||||
borderWidth: 1,
|
||||
itemWidth: 50
|
||||
},
|
||||
tooltip: {
|
||||
trigger: 'axis'
|
||||
},
|
||||
xAxis: {
|
||||
type: 'category',
|
||||
axisLine: {
|
||||
lineStyle: {
|
||||
color: 'rgba(119, 181, 213, .3)'
|
||||
|
@ -161,7 +186,10 @@ const initialOption = {
|
|||
color: '#ade6ee',
|
||||
fontSize: 12,
|
||||
rotate: 45,
|
||||
margin: 10
|
||||
margin: 10,
|
||||
formatter: value => {
|
||||
return moment(value).format('YYYY/MM/DD')
|
||||
}
|
||||
},
|
||||
splitLine: {
|
||||
show: true,
|
||||
|
@ -172,7 +200,7 @@ const initialOption = {
|
|||
axisTick: {
|
||||
show: false
|
||||
},
|
||||
data: ['2023/07/09', '2023/07/09', '2023/07/09', '2023/07/09', '2023/07/10']
|
||||
data: []
|
||||
},
|
||||
yAxis: {
|
||||
axisLine: {
|
||||
|
@ -194,17 +222,165 @@ const initialOption = {
|
|||
show: false
|
||||
}
|
||||
},
|
||||
series: {
|
||||
type: 'line',
|
||||
data: [15, 16, 18, 20, 22]
|
||||
}
|
||||
series: []
|
||||
}
|
||||
|
||||
// 左侧配置
|
||||
const initialFilterOption = {
|
||||
dbName: 'RNAUTO',
|
||||
detectorName: '',
|
||||
stationId: '',
|
||||
statisticsType: 'Nuclides',
|
||||
mdc: false,
|
||||
activity: false,
|
||||
filterGrpbox: false,
|
||||
startTime: null,
|
||||
endTime: null,
|
||||
minCollectTimeLine: 10.8,
|
||||
maxCollectTimeLine: 13.2,
|
||||
minAcqLiveLine: 10.8,
|
||||
maxAcqLiveLine: 13.2,
|
||||
quantityLine: 10,
|
||||
xeVolumeLine: 0.87,
|
||||
mdcLine: 0,
|
||||
concLine: 0,
|
||||
nuclidesList: []
|
||||
}
|
||||
export default {
|
||||
components: { TitleOverBorder, CustomChart },
|
||||
mixins: [ModalMixin],
|
||||
props: {
|
||||
sampleId: {
|
||||
type: Number
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
option: initialOption
|
||||
option: cloneDeep(initialOption),
|
||||
initialMDC: {}, // 初始化的信息,用于重置
|
||||
|
||||
queryParams: {},
|
||||
detectorList: [] // 探测器列表
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
// 打开弹窗时初始化左上角Station和Detector信息
|
||||
async getMDCInitialInfo() {
|
||||
try {
|
||||
const { success, message, result } = await getAction('/spectrumAnalysis/viewMDC', {
|
||||
sampleId: this.sampleId
|
||||
})
|
||||
if (success) {
|
||||
this.setStationAndDetector(result)
|
||||
this.initialMDC = result
|
||||
} else {
|
||||
this.$message.error(message)
|
||||
}
|
||||
} catch (error) {
|
||||
console.error(error)
|
||||
}
|
||||
},
|
||||
|
||||
// 左上角查询探测器
|
||||
async handleQueryDetector() {
|
||||
const stationName = this.queryParams.stationName
|
||||
if (!stationName) {
|
||||
return
|
||||
}
|
||||
|
||||
try {
|
||||
const { success, result } = await getAction('/spectrumAnalysis/changeDetector', { stationName })
|
||||
if (success) {
|
||||
this.setStationAndDetector(result)
|
||||
} else {
|
||||
this.detectorList = []
|
||||
}
|
||||
} catch (error) {
|
||||
console.error(error)
|
||||
}
|
||||
},
|
||||
|
||||
// 设置左上角台站和探测器列表
|
||||
setStationAndDetector({ detectorList, stationName, stationId }) {
|
||||
this.queryParams.stationName = stationName
|
||||
this.detectorList = detectorList.map(item => ({
|
||||
label: item,
|
||||
value: item
|
||||
}))
|
||||
this.queryParams.detectorName = detectorList[0]
|
||||
this.queryParams.stationId = stationId
|
||||
},
|
||||
|
||||
// 重置左上角查询信息
|
||||
handleReset() {
|
||||
this.queryParams.stationName = this.initialMDC.stationName
|
||||
this.detectorList = this.initialMDC.detectorList.map(item => ({
|
||||
label: item,
|
||||
value: item
|
||||
}))
|
||||
},
|
||||
|
||||
// 查询右侧图表信息
|
||||
async handleStatisticsQuery() {
|
||||
const { nuclidesList, mdc, activity } = this.queryParams
|
||||
if (!(nuclidesList.length && (mdc || activity))) {
|
||||
return
|
||||
}
|
||||
|
||||
try {
|
||||
const { success, message, result } = await postAction('/spectrumAnalysis/statisticsQuery', this.queryParams)
|
||||
if (success) {
|
||||
if (result) {
|
||||
|
||||
this.option.xAxis.data = result[0].m_Keys
|
||||
this.option.legend.show = true
|
||||
|
||||
this.option.series = result.map(item => {
|
||||
return {
|
||||
type: 'line',
|
||||
name: item.m_strGraphName,
|
||||
data: item.m_Values,
|
||||
itemStyle: {
|
||||
color: item.m_GraphPen
|
||||
},
|
||||
lineStyle: {
|
||||
color: item.m_GraphPen
|
||||
},
|
||||
symbol: 'circle'
|
||||
}
|
||||
})
|
||||
} else {
|
||||
this.option.series = []
|
||||
this.option.legend.show = false
|
||||
}
|
||||
} else {
|
||||
this.$message.error(message)
|
||||
}
|
||||
} catch (error) {
|
||||
console.error(error)
|
||||
}
|
||||
},
|
||||
|
||||
// 对右侧图表下载
|
||||
handleSnapshot(chartRef) {
|
||||
exportEchartImg(chartRef.getChartInstance())
|
||||
},
|
||||
|
||||
beforeModalOpen() {
|
||||
this.getMDCInitialInfo()
|
||||
|
||||
this.queryParams = {
|
||||
...initialFilterOption,
|
||||
startTime: moment().format('YYYY-MM-DD'),
|
||||
endTime: moment().format('YYYY-MM-DD')
|
||||
}
|
||||
|
||||
this.option = cloneDeep(initialOption)
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
filterDisabled() {
|
||||
return !this.queryParams.filterGrpbox
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -230,7 +406,7 @@ export default {
|
|||
margin-left: 14px;
|
||||
|
||||
label:nth-child(2) {
|
||||
margin-left: 28px;
|
||||
margin-left: 26px;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,326 @@
|
|||
<template>
|
||||
<custom-modal
|
||||
v-model="visible"
|
||||
title="Statistics Paramer History"
|
||||
:width="1480"
|
||||
destroy-on-close
|
||||
:footer="null"
|
||||
wrapClassName="statistics-paramer-history-modal"
|
||||
>
|
||||
<div class="statistics-paramer-history">
|
||||
<!-- 左侧配置 -->
|
||||
<title-over-border title="Query Infomation Settings" class="settings">
|
||||
<!-- Station And Detector -->
|
||||
<title-over-border 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" v-model="queryParams.stationName"></a-input>
|
||||
<a-button type="primary" size="small" @click="handleQueryDetector">Query Detector</a-button>
|
||||
<a-button type="primary" size="small" @click="handleReset"><<</a-button>
|
||||
</a-space>
|
||||
</a-form-model-item>
|
||||
<a-form-model-item label="Detector">
|
||||
<custom-select
|
||||
:options="detectorList"
|
||||
v-model="queryParams.detectorName"
|
||||
size="small"
|
||||
dropdownClassName="statistics-paramer-history-select"
|
||||
></custom-select>
|
||||
</a-form-model-item>
|
||||
</a-form-model>
|
||||
</title-over-border>
|
||||
<a-form-model class="time-setting">
|
||||
<a-form-model-item label="Start Time">
|
||||
<custom-date-picker v-model="queryParams.startTime" valueFormat="YYYY-MM-DD"></custom-date-picker>
|
||||
</a-form-model-item>
|
||||
<a-form-model-item label="Stop Time">
|
||||
<custom-date-picker v-model="queryParams.endTime" valueFormat="YYYY-MM-DD"></custom-date-picker>
|
||||
</a-form-model-item>
|
||||
</a-form-model>
|
||||
<a-divider></a-divider>
|
||||
<!-- 左侧中间俩按钮 -->
|
||||
<div class="center-btns">
|
||||
<a-button type="primary" @click="handleStatisticsQuery">Statistics Query & Plot</a-button>
|
||||
<a-button type="primary" @click="handleSnapshot($refs.chartRef)">Snapshot</a-button>
|
||||
</div>
|
||||
<!-- 左侧中间俩按钮结束 -->
|
||||
<a-divider></a-divider>
|
||||
</title-over-border>
|
||||
<!-- 右侧图表 -->
|
||||
<div class="statistics-paramer-history-chart">
|
||||
<custom-chart ref="chartRef" :option="option" :notMerge="true"></custom-chart>
|
||||
</div>
|
||||
</div>
|
||||
</custom-modal>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import ModalMixin from '@/mixins/ModalMixin'
|
||||
import TitleOverBorder from '../../TitleOverBorder.vue'
|
||||
import CustomChart from '@/components/CustomChart/index.vue'
|
||||
import { getAction } from '@/api/manage'
|
||||
import moment from 'moment'
|
||||
import { exportEchartImg } from '@/utils/chartHelper'
|
||||
import { cloneDeep } from 'lodash'
|
||||
|
||||
// 右侧图表配置
|
||||
const initialOption = {
|
||||
grid: {
|
||||
right: 10,
|
||||
left: 40,
|
||||
top: 20,
|
||||
bottom: 60
|
||||
},
|
||||
tooltip: {
|
||||
trigger: 'axis'
|
||||
},
|
||||
xAxis: {
|
||||
type: 'category',
|
||||
axisLine: {
|
||||
lineStyle: {
|
||||
color: 'rgba(119, 181, 213, .3)'
|
||||
}
|
||||
},
|
||||
axisLabel: {
|
||||
color: '#ade6ee',
|
||||
fontSize: 12,
|
||||
rotate: 45,
|
||||
margin: 10,
|
||||
formatter: value => {
|
||||
return moment(value).format('YYYY/MM/DD')
|
||||
}
|
||||
},
|
||||
splitLine: {
|
||||
show: true,
|
||||
lineStyle: {
|
||||
color: 'rgba(119, 181, 213, .3)'
|
||||
}
|
||||
},
|
||||
axisTick: {
|
||||
show: false
|
||||
},
|
||||
data: []
|
||||
},
|
||||
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
|
||||
},
|
||||
min: 0,
|
||||
max: 0
|
||||
},
|
||||
series: []
|
||||
}
|
||||
|
||||
// 左侧配置
|
||||
const initialFilterOption = {
|
||||
detectorName: '',
|
||||
stationId: '',
|
||||
statisticsType: '',
|
||||
startTime: null,
|
||||
endTime: null
|
||||
}
|
||||
export default {
|
||||
components: { TitleOverBorder, CustomChart },
|
||||
mixins: [ModalMixin],
|
||||
props: {
|
||||
sampleId: {
|
||||
type: Number
|
||||
},
|
||||
statisticsType: {
|
||||
type: String
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
option: cloneDeep(initialOption),
|
||||
initialMDC: {}, // 初始化的信息,用于重置
|
||||
|
||||
queryParams: {},
|
||||
detectorList: [] // 探测器列表
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
// 打开弹窗时初始化左上角Station和Detector信息
|
||||
async getMDCInitialInfo() {
|
||||
try {
|
||||
const { success, message, result } = await getAction('/spectrumAnalysis/viewMDC', {
|
||||
sampleId: this.sampleId
|
||||
})
|
||||
if (success) {
|
||||
this.setStationAndDetector(result)
|
||||
this.initialMDC = result
|
||||
} else {
|
||||
this.$message.error(message)
|
||||
}
|
||||
} catch (error) {
|
||||
console.error(error)
|
||||
}
|
||||
},
|
||||
|
||||
// 左上角查询探测器
|
||||
async handleQueryDetector() {
|
||||
const stationName = this.queryParams.stationName
|
||||
if (!stationName) {
|
||||
return
|
||||
}
|
||||
|
||||
try {
|
||||
const { success, result } = await getAction('/spectrumAnalysis/changeDetector', { stationName })
|
||||
if (success) {
|
||||
this.setStationAndDetector(result)
|
||||
} else {
|
||||
this.detectorList = []
|
||||
}
|
||||
} catch (error) {
|
||||
console.error(error)
|
||||
}
|
||||
},
|
||||
|
||||
// 设置左上角台站和探测器列表
|
||||
setStationAndDetector({ detectorList, stationName, stationId }) {
|
||||
this.queryParams.stationName = stationName
|
||||
this.detectorList = detectorList.map(item => ({
|
||||
label: item,
|
||||
value: item
|
||||
}))
|
||||
this.queryParams.detectorName = detectorList[0]
|
||||
this.queryParams.stationId = stationId
|
||||
},
|
||||
|
||||
// 重置左上角查询信息
|
||||
handleReset() {
|
||||
this.queryParams.stationName = this.initialMDC.stationName
|
||||
this.detectorList = this.initialMDC.detectorList.map(item => ({
|
||||
label: item,
|
||||
value: item
|
||||
}))
|
||||
},
|
||||
|
||||
// 查询右侧图表信息
|
||||
async handleStatisticsQuery() {
|
||||
try {
|
||||
const { success, message, result } = await getAction('/spectrumAnalysis/statisticsQueryBtn', this.queryParams)
|
||||
if (success) {
|
||||
if (result) {
|
||||
const data = result.m_Values
|
||||
|
||||
this.option.xAxis.data = result.m_Keys
|
||||
|
||||
this.option.yAxis.max = (Math.max(...data) * 1.1).toFixed(2)
|
||||
this.option.yAxis.min = (Math.min(...data) / 1.1).toFixed(2)
|
||||
|
||||
this.option.series = {
|
||||
type: 'line',
|
||||
data,
|
||||
itemStyle: {
|
||||
color: result.m_GraphPen
|
||||
},
|
||||
lineStyle: {
|
||||
color: result.m_GraphPen
|
||||
},
|
||||
symbol: 'circle'
|
||||
}
|
||||
} else {
|
||||
this.option.series = []
|
||||
}
|
||||
} else {
|
||||
this.$message.error(message)
|
||||
}
|
||||
} catch (error) {
|
||||
console.error(error)
|
||||
}
|
||||
},
|
||||
|
||||
// 对右侧图表下载
|
||||
handleSnapshot(chartRef) {
|
||||
exportEchartImg(chartRef.getChartInstance())
|
||||
},
|
||||
|
||||
beforeModalOpen() {
|
||||
this.getMDCInitialInfo()
|
||||
|
||||
this.queryParams = {
|
||||
...initialFilterOption,
|
||||
statisticsType: this.statisticsType,
|
||||
startTime: moment().format('YYYY-MM-DD'),
|
||||
endTime: moment().format('YYYY-MM-DD')
|
||||
}
|
||||
|
||||
this.option = cloneDeep(initialOption)
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="less" scoped>
|
||||
.statistics-paramer-history {
|
||||
display: flex;
|
||||
|
||||
.settings {
|
||||
width: 405px;
|
||||
|
||||
.station {
|
||||
display: flex;
|
||||
}
|
||||
|
||||
.time-setting {
|
||||
padding-left: 40px;
|
||||
}
|
||||
|
||||
.center-btns {
|
||||
> button {
|
||||
display: block;
|
||||
width: 100%;
|
||||
|
||||
&:nth-child(2) {
|
||||
margin-top: 10px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&-chart {
|
||||
flex: 1;
|
||||
margin-left: 15px;
|
||||
height: 600px;
|
||||
}
|
||||
}
|
||||
|
||||
.ant-divider {
|
||||
margin: 15px 0;
|
||||
}
|
||||
|
||||
.ant-form-item {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
::v-deep .title-over-border-content {
|
||||
padding: 15px;
|
||||
}
|
||||
</style>
|
||||
<style lang="less">
|
||||
.statistics-paramer-history {
|
||||
&-modal,
|
||||
&-select {
|
||||
z-index: 1040;
|
||||
}
|
||||
}
|
||||
</style>
|
|
@ -1,6 +1,6 @@
|
|||
<template>
|
||||
<div class="qc-flags">
|
||||
<div class="qc-flags-item" v-for="conf in config" :key="conf.label">
|
||||
<div class="qc-flags-item" v-for="conf in config" :key="conf.label" @click="handleClick(conf)">
|
||||
<span :class="data[conf.name]"></span>
|
||||
{{ conf.label }}
|
||||
</div>
|
||||
|
@ -31,7 +31,7 @@ const config = [
|
|||
name: 'DetBgBtn'
|
||||
},
|
||||
{
|
||||
label: 'Sample Volume',
|
||||
label: 'Air Volume',
|
||||
name: 'SampleVolumeBtn'
|
||||
}
|
||||
]
|
||||
|
@ -45,6 +45,11 @@ export default {
|
|||
},
|
||||
created() {
|
||||
this.config = config
|
||||
},
|
||||
methods: {
|
||||
handleClick(conf) {
|
||||
this.$emit('click', conf.label)
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
@ -58,6 +63,7 @@ export default {
|
|||
align-items: center;
|
||||
width: 150px;
|
||||
height: 30px;
|
||||
cursor: default;
|
||||
|
||||
&:not(:last-child) {
|
||||
margin-right: 2px;
|
||||
|
|
|
@ -1,6 +1,10 @@
|
|||
<template>
|
||||
<div class="title-over-border">
|
||||
<div class="title-over-border-title">{{ title }}</div>
|
||||
<div class="title-over-border-title">
|
||||
<slot name="title">
|
||||
{{ title }}
|
||||
</slot>
|
||||
</div>
|
||||
<div class="title-over-border-content">
|
||||
<slot />
|
||||
</div>
|
||||
|
@ -9,11 +13,11 @@
|
|||
|
||||
<script>
|
||||
export default {
|
||||
props: {
|
||||
title: {
|
||||
type: String
|
||||
}
|
||||
props: {
|
||||
title: {
|
||||
type: String
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
|
|
|
@ -138,6 +138,8 @@
|
|||
<rlr-modal v-model="rlrModalVisible" />
|
||||
<!-- RLR 弹窗结束 -->
|
||||
|
||||
<automatic-analysis-log-modal v-model="autoAnalysisMogModalVisible" />
|
||||
|
||||
<!-- Beta-Gamma 的Comments 弹窗 -->
|
||||
<beta-gamma-comments-modal
|
||||
v-model="betaGammaCommentsModalVisible"
|
||||
|
@ -173,7 +175,10 @@
|
|||
<!-- Beta-Gamma 的 RLR 弹窗 结束 -->
|
||||
|
||||
<!-- Beta-Gamma 的 Statistics Paramer History 弹窗 -->
|
||||
<statistics-paramer-history-modal v-model="statisticsParamerHistoryModalVisible" />
|
||||
<statistics-paramer-history-modal
|
||||
v-model="statisticsParamerHistoryModalVisible"
|
||||
:sampleId="this.sampleData.sampleId"
|
||||
/>
|
||||
<!-- Beta-Gamma 的 Statistics Paramer History 弹窗 结束 -->
|
||||
</div>
|
||||
</template>
|
||||
|
@ -214,6 +219,7 @@ import StatisticsParamerHistoryModal from './components/Modals/BetaGammaModals/S
|
|||
import FtransltModal from './components/Modals/FtransltModal/index.vue'
|
||||
import BetaGammaEnergyCalibrationModal from './components/Modals/BetaGammaModals/BetaGammaEnergyCalibrationModal/index.vue'
|
||||
import StripModal from './components/Modals/StripModal.vue'
|
||||
import AutomaticAnalysisLogModal from './components/Modals/BetaGammaModals/AutomaticAnalysisLogModal.vue'
|
||||
|
||||
// 分析类型
|
||||
const ANALYZE_TYPE = {
|
||||
|
@ -257,7 +263,8 @@ export default {
|
|||
StatisticsParamerHistoryModal,
|
||||
FtransltModal,
|
||||
BetaGammaEnergyCalibrationModal,
|
||||
StripModal
|
||||
StripModal,
|
||||
AutomaticAnalysisLogModal
|
||||
},
|
||||
data() {
|
||||
this.ANALYZE_TYPE = ANALYZE_TYPE
|
||||
|
@ -305,6 +312,8 @@ export default {
|
|||
qcResultsModalVisible: false, // Reports -> Qc Results 弹窗
|
||||
rlrModalVisible: false, // Reports -> RLR 弹窗
|
||||
|
||||
autoAnalysisMogModalVisible: false, // Log -> Automatic Analysis Log 弹窗
|
||||
|
||||
/**
|
||||
* 以下是beta-gamma跟前面不同的弹窗
|
||||
**/
|
||||
|
@ -320,6 +329,13 @@ export default {
|
|||
statisticsParamerHistoryModalVisible: false // beta-gamma Statistics Paramer History 弹窗
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.loadSelectedSample({
|
||||
sampleId: 426120,
|
||||
dbName: 'auto',
|
||||
sampleType: 'B'
|
||||
})
|
||||
},
|
||||
methods: {
|
||||
/**
|
||||
* 从数据库加载-选择完成
|
||||
|
@ -403,11 +419,6 @@ export default {
|
|||
}
|
||||
},
|
||||
|
||||
// 查看自动处理日志
|
||||
handleAutoAnalysisLog() {
|
||||
console.log('%c [ handleAutoAnalysisLog ]-211', 'font-size:13px; background:pink; color:#bf2c9f;')
|
||||
},
|
||||
|
||||
// 查看软件操作帮助文档
|
||||
handleHelp() {
|
||||
console.log('%c [ handleHelp ]-221', 'font-size:13px; background:pink; color:#bf2c9f;')
|
||||
|
@ -807,11 +818,19 @@ export default {
|
|||
{
|
||||
type: 'a-menu-item',
|
||||
title: 'Automatic Analysis Log',
|
||||
handler: this.handleAutoAnalysisLog
|
||||
show: this.isBetaGamma,
|
||||
handler: () => (this.autoAnalysisMogModalVisible = true)
|
||||
},
|
||||
{
|
||||
type: 'a-menu-item',
|
||||
title: 'BG log viewer',
|
||||
show: this.isBetaGamma,
|
||||
handler: () => {}
|
||||
},
|
||||
{
|
||||
type: 'a-menu-item',
|
||||
title: 'GammaViewer Log',
|
||||
show: this.isGamma,
|
||||
handler: () => (this.dataProcessingLogModalVisible = true)
|
||||
}
|
||||
]
|
||||
|
|
Loading…
Reference in New Issue
Block a user