diff --git a/src/components/CustomChart/index.vue b/src/components/CustomChart/index.vue index 44a3a22..99cd6fc 100644 --- a/src/components/CustomChart/index.vue +++ b/src/components/CustomChart/index.vue @@ -30,9 +30,10 @@ export default { this._chart.setOption(this.option, this.opts) this.initEventListener() }, - destroyed() { + beforeDestroy() { if (this._chart) { this._chart.dispose() + this._chart = null } }, methods: { diff --git a/src/views/spectrumAnalysis/beta-gamma-analysis.vue b/src/views/spectrumAnalysis/beta-gamma-analysis.vue index be1d339..95dab69 100644 --- a/src/views/spectrumAnalysis/beta-gamma-analysis.vue +++ b/src/views/spectrumAnalysis/beta-gamma-analysis.vue @@ -190,6 +190,10 @@ export default { analyseCurrentSpectrum: { type: Object, }, + sampleList: { + type: Array, + required: true, + }, }, data() { this.SampleType = SampleType @@ -238,7 +242,7 @@ export default { this.qcFlagsVisible = true }, 100) }, - destroyed() { + beforeDestroy() { this.cancelLastRequest() this.$bus.$off('ReAnalyses', this.handleReAnalyse) @@ -559,6 +563,16 @@ export default { }) this.$emit('reAnalyCurr', res.result.savedAnalysisResult, res.result.XeData) this.handleReAnalyse(res.result) + updateSampleData({ + inputFileName: this.sample.inputFileName, + key: 'XeData', + data: res.result.XeData, + }) + updateSampleData({ + inputFileName: this.sample.inputFileName, + key: 'savedAnalysisResult', + data: res.result.savedAnalysisResult, + }) if (res.result.bProcessed) { this.$message.success(res.result.message) } else { @@ -571,47 +585,77 @@ export default { }) }, // 分析全部 - getAnalyzeAllSpectrum() { - let params = { - dbNames: [this.sample.dbName], - sampleIds: [this.sample.sampleId ? this.sample.sampleId : ''], - sampleFileNames: [this.sample.inputFileName], - gasFileNames: [this.sample.gasFileName], - detFileNames: [this.sample.detFileName], - qcFileNames: [this.sample.qcFileName], + async getAnalyzeAllSpectrum() { + const regExp = /^([A-Z]{1,}\d{1,})_/ + const regMatched = this.sample.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, inputFileName, sampleFileName, gasFileName, detFileName, qcFileName, qcFileStatus }) => { + dbNames.push(dbName || '') + sampleIds.push(sampleId || '') + sampleFileNames.push(sampleFileName || inputFileName || '') + gasFileNames.push(gasFileName || '') + detFileNames.push(detFileName || '') + qcFileNames.push(qcFileStatus ? qcFileName : '') + } + ) + + const params = { + dbNames, + sampleIds, + sampleFileNames, + gasFileNames, + detFileNames, + qcFileNames, currentFileName: this.sample.inputFileName, } - postAction('/spectrumAnalysis/analyseAllSpectrum', params).then((res) => { - if (res.success) { - // this.analyseCurrentSpectrum = res.result - this.$emit('sendXeData', res.result.XeData) - res.result.XeData.forEach((item) => { + const { success, result, message } = await postAction('/spectrumAnalysis/analyseAllSpectrum', params) + if (success) { + // 对所有已加载的谱中和本谱相似的谱(指台站和探测器相同) + Object.entries(result).forEach(([inputFileName, sampleInfo]) => { + const { XeData, savedAnalysisResult, bProcessed, message } = sampleInfo + XeData.forEach((item) => { item.conc = parseFloat(item.conc.toPrecision(6)) item.concErr = parseFloat(item.concErr.toPrecision(6)) item.lc = parseFloat(item.lc.toPrecision(6)) item.mdc = parseFloat(item.mdc.toPrecision(6)) }) - this.$emit('reAnalyAll', res.result.savedAnalysisResult, res.result.XeData) - // 因为重新分析后的数据保存在服务端,故清理需要重新加载的本地缓存 - this.removeOtherBetaSamples() - } else { - this.$message.warning(res.message) - } - }) - }, + if (inputFileName == this.sample.inputFileName) { + this.$emit('sendXeData', XeData) + this.$emit('reAnalyAll', savedAnalysisResult, XeData) + this.handleReAnalyse(sampleInfo) - // 移除其他的beta缓存 - removeOtherBetaSamples() { - const regExp = /([A-Z]+\d+_\d+)(-[\w\s_\.]+)/ - const stationAndDetectorName = this.sample.inputFileName.replace(regExp, '$1') - // 清理掉不是自己,且台站号+探测器号跟自己一样的谱,让它重新加载 - const filterList = sampleList.filter((item) => { - const inputFileName = item.inputFileName - return inputFileName == this.sample.inputFileName || !inputFileName.startsWith(stationAndDetectorName) - }) + if (bProcessed) { + this.$message.success(message) + } else { + this.$message.warning(message) + } + } - setSampleList(filterList) + updateSampleData({ + inputFileName, + key: 'XeData', + data: XeData, + }) + + updateSampleData({ + inputFileName, + key: 'savedAnalysisResult', + data: savedAnalysisResult, + }) + }) + } else { + this.$message.warning(message) + } }, // 右下角放大镜 @@ -703,11 +747,6 @@ export default { // this.currResultDisplay = newVal.XeData this.resultDisplay = cloneDeep(newVal.XeData) || [] this.sortResultDisplay() - updateSampleData({ - inputFileName: this.sample.inputFileName, - key: 'XeData', - data: newVal.XeData, - }) }, // immediate: true, deep: true, diff --git a/src/views/spectrumAnalysis/components/Modals/BetaGammaModals/BetaGammaEnergyCalibrationModal/components/BetaDetectorCalibration.vue b/src/views/spectrumAnalysis/components/Modals/BetaGammaModals/BetaGammaEnergyCalibrationModal/components/BetaDetectorCalibration.vue index d547111..73283c2 100644 --- a/src/views/spectrumAnalysis/components/Modals/BetaGammaModals/BetaGammaEnergyCalibrationModal/components/BetaDetectorCalibration.vue +++ b/src/views/spectrumAnalysis/components/Modals/BetaGammaModals/BetaGammaEnergyCalibrationModal/components/BetaDetectorCalibration.vue @@ -629,7 +629,7 @@ export default { this.$bus.$on('betaRefresh', this.getData) this.getData() }, - destroyed() { + beforeDestroy() { this.$bus.$off('betaRefresh', this.handleReset) this.$bus.$off('betaRefresh', this.getData) }, diff --git a/src/views/spectrumAnalysis/gamma-analysis.vue b/src/views/spectrumAnalysis/gamma-analysis.vue index 5207dd9..c32cde4 100644 --- a/src/views/spectrumAnalysis/gamma-analysis.vue +++ b/src/views/spectrumAnalysis/gamma-analysis.vue @@ -191,8 +191,8 @@ export default { stripSumOrCutLine: null, stripReferenceLine: null, } - ;(this.peakList = []), // Peak 列表(非点位) - (this.baseCtrls = {}) // BaseCtrls + this.peakList = [] // Peak 列表(非点位) + this.baseCtrls = {} // BaseCtrls return { abc: false, @@ -254,7 +254,7 @@ export default { window.addEventListener('keydown', this.handleKeyboardEvent) window.addEventListener('click', this.closePeakInfomationTooltip) }, - destroyed() { + beforeDestroy() { this.cancelLastRequest() this.$bus.$off('gammaRefresh', this.handleRefresh) @@ -264,8 +264,16 @@ export default { window.removeEventListener('click', this.closePeakInfomationTooltip) if (this.qcFlagsTimer) { - clearTimeout(this.qcFlagsTimer) + window.clearTimeout(this.qcFlagsTimer) } + + this.closeWebSocket() + + if (this.websocketTimer) { + window.clearTimeout(this.websocketTimer) + } + + this.websock = null }, deactivated() { // Object.keys(this.subOperatorsState).forEach(k => { @@ -465,10 +473,10 @@ export default { let token = Vue.ls.get(ACCESS_TOKEN) this.websock = new WebSocket(url, [token]) //update-end-author:taoyan date:2022-4-22 for: v2.4.6 的 websocket 服务端,存在性能和安全问题。 #3278 - this.websock.onopen = this.websocketOnopen - this.websock.onerror = this.websocketOnerror - this.websock.onmessage = this.websocketOnmessage - this.websock.onclose = this.websocketOnclose + this.websock.addEventListener('open', this.websocketOnopen) + this.websock.addEventListener('error', this.websocketOnerror) + this.websock.addEventListener('message', this.websocketOnmessage) + this.websock.addEventListener('close', this.websocketOnclose) }, websocketOnopen: function () { // console.log('WebSocket连接成功1231') @@ -494,12 +502,25 @@ export default { if (that.lockReconnect) return that.lockReconnect = true //没连接上会一直重连,设置延迟避免请求过多 - setTimeout(function () { + this.websocketTimer = setTimeout(function () { console.info('尝试重连...') that.initWebSocket() that.lockReconnect = false }, 20000) }, + + // 关闭websocket + closeWebSocket() { + if (this.websock) { + this.websock.removeEventListener('open', this.websocketOnopen) + this.websock.removeEventListener('error', this.websocketOnerror) + this.websock.removeEventListener('message', this.websocketOnmessage) + this.websock.removeEventListener('close', this.websocketOnclose) + this.websock.close() + this.websock = null + } + }, + // 获取样品详情 async getSampleDetail() { const { dbName, sampleId, analyst } = this.sample diff --git a/src/views/spectrumAnalysis/index.vue b/src/views/spectrumAnalysis/index.vue index 41e2c4b..1fe5be1 100644 --- a/src/views/spectrumAnalysis/index.vue +++ b/src/views/spectrumAnalysis/index.vue @@ -63,6 +63,7 @@ :sampleInfo="sampleInfo" :sample="sampleData" :analyseCurrentSpectrum="analyseCurrentSpectrumData" + :sampleList="sampleList" />