Compare commits

...

13 Commits

Author SHA1 Message Date
333a7fd1f4 fix: 修复部分内存溢出问题,修改beta下的分析全部谱时的逻辑,修复切换谱后,即使已经分析过了,还是无法保存的问题 2024-04-12 17:00:00 +08:00
990ab9def5 fix: 优化 2024-04-11 16:00:04 +08:00
e9c693ee51 WIP: 性能优化 2024-04-11 09:58:36 +08:00
656a02c1ec 系统设置中,排班任务模块组件调整,导入结果弹窗中的表格样式修改 2024-04-01 11:35:36 +08:00
46c32d3627 日志模块页面改造,页面结构调整,接口参数调整,增加分页功能 2024-03-22 15:26:42 +08:00
e62d36e4cb feat: 表格增加鼠标按住移动选择功能 2024-03-20 17:55:57 +08:00
36258e74d2 处理 报警模块中 History 页面表格滚动的问题 2024-03-20 10:06:21 +08:00
878212006a 处理beta 重新分析失败,savedAnalysisResult 字段未更新的问题 2024-03-15 16:28:12 +08:00
70850880ef Merge branch 'master-dev' of http://git.hivekion.com:3000/xiaoguangbin/AnalysisSystemForRadionuclide_vue into master-dev 2024-03-15 14:28:35 +08:00
4842684b6e 分析成功和分析失败都增加提示
分析失败 将右下角Result display的数据清空
2024-03-15 14:28:13 +08:00
1e6320a616 fix: 修复核素分析一级下拉菜单在点击的时候遮住弹窗的问题 2024-03-15 10:52:12 +08:00
2301ce1409 fix: 修复删除核素后未刷新table的问题 2024-03-15 10:05:12 +08:00
63a271be2b fix: 修复一级菜单下的二级菜单被样式隐藏的问题 2024-03-15 09:49:19 +08:00
18 changed files with 463 additions and 148 deletions

View File

@ -30,9 +30,10 @@ export default {
this._chart.setOption(this.option, this.opts) this._chart.setOption(this.option, this.opts)
this.initEventListener() this.initEventListener()
}, },
destroyed() { beforeDestroy() {
if (this._chart) { if (this._chart) {
this._chart.dispose() this._chart.dispose()
this._chart = null
} }
}, },
methods: { methods: {

View File

@ -2,6 +2,7 @@
<a-table <a-table
ref="tableRef" ref="tableRef"
class="custom-table" class="custom-table"
:class="['custom-table', canSelect && multiple && mouseMoveSelect ? 'mouse-move-select' : '']"
v-bind="$attrs" v-bind="$attrs"
:data-source="list" :data-source="list"
:columns="columns" :columns="columns"
@ -9,7 +10,7 @@
:row-key="rowKey" :row-key="rowKey"
:loading="loading" :loading="loading"
:pagination="pagination" :pagination="pagination"
:customRow="customRow" :customRow="multiple && mouseMoveSelect ? customMouseMoveSelectRow : customRow"
:rowClassName="() => (canSelect ? 'custom-table-row' : '')" :rowClassName="() => (canSelect ? 'custom-table-row' : '')"
@change="handleTableChange" @change="handleTableChange"
> >
@ -58,10 +59,16 @@ export default {
type: Boolean, type: Boolean,
default: true, default: true,
}, },
//
multiple: { multiple: {
type: Boolean, type: Boolean,
default: false, default: false,
}, },
//
mouseMoveSelect: {
type: Boolean,
default: true,
},
}, },
data() { data() {
return { return {
@ -69,6 +76,14 @@ export default {
innerSelectedRows: [], innerSelectedRows: [],
} }
}, },
mounted() {
if (this.canSelect && this.multiple && this.mouseMoveSelect) {
const tbody = this.$el.querySelector('.ant-table-tbody')
tbody.addEventListener('mouseleave', () => {
this.mouseMoveStartIndex = undefined
})
}
},
methods: { methods: {
// / // /
customRow(record, index) { customRow(record, index) {
@ -105,6 +120,34 @@ export default {
}, },
} }
}, },
//
customMouseMoveSelectRow(record, index) {
const key = record[this.rowKey]
return {
class: this.innerSelectedRowKeys.includes(key) ? 'ant-table-row-selected' : '',
on: {
mousedown: () => {
this.innerSelectedRowKeys = []
this.mouseMoveStartIndex = index
},
mouseenter: () => {
if (this.mouseMoveStartIndex !== undefined) {
const indexes = [this.mouseMoveStartIndex, index].sort((a, b) => a - b)
this.innerSelectedRowKeys = this.list.slice(indexes[0], indexes[1] + 1).map((item) => item[this.rowKey])
}
},
mouseup: () => {
// click
if (this.mouseMoveStartIndex == index) {
this.innerSelectedRowKeys = [key]
}
this.mouseMoveStartIndex = undefined
},
},
}
},
handleTableChange(pagination, filters, sorter) { handleTableChange(pagination, filters, sorter) {
this.$emit('change', pagination, filters, sorter) this.$emit('change', pagination, filters, sorter)
}, },
@ -136,8 +179,20 @@ export default {
}, },
} }
</script> </script>
<style lang="less"> <style lang="less" scoped>
.custom-table-row { ::v-deep {
.custom-table-row {
cursor: pointer; cursor: pointer;
}
}
.mouse-move-select {
user-select: none;
::v-deep {
td {
transition: none !important;
}
}
} }
</style> </style>

View File

@ -6,7 +6,6 @@ import user from './modules/user'
import permission from './modules/permission' import permission from './modules/permission'
import enhance from './modules/enhance' import enhance from './modules/enhance'
import online from './modules/online' import online from './modules/online'
import sample from './modules/sample'
import getters from './getters' import getters from './getters'
Vue.use(Vuex) Vue.use(Vuex)
@ -18,7 +17,6 @@ export default new Vuex.Store({
permission, permission,
enhance, enhance,
online, online,
sample
}, },
state: { state: {

View File

@ -1,52 +0,0 @@
const sample = {
state: Object.freeze({
sampleList: [] // [{ inputFileName: String; data: Object; }]
}),
mutations: {
SET_SAMPLE_LIST: (state, sampleList) => {
state.sampleList = sampleList
},
ADD_SAMPLE_DATA: (state, sampleData) => {
const find = state.sampleList.find(item => item.inputFileName == sampleData.inputFileName)
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
}
},
UPDATE_SAMPLE_DATA_ANALY: (state, { inputFileName, data }) => {
const find = state.sampleList.find(item => item.inputFileName == inputFileName)
if (find) {
data.DetailedInformation = find.data.DetailedInformation
find.data = data
}
},
REMOVE_SAMPLE_DATA: (state, inputFileName) => {
const findIndex = state.sampleList.findIndex(item => item.inputFileName == inputFileName)
if(-1 !== findIndex) {
state.sampleList.splice(findIndex, 1)
}
},
CLEAR_SAMPLE_DATA: (state) => {
state.sampleList = []
}
},
actions: {
GET_SAMPLE_DATA: ({ state }, inputFileName) => {
const find = state.sampleList.find(item => item.inputFileName == inputFileName)
return find ? find : null
}
}
}
export default sample

84
src/utils/SampleStore.js Normal file
View File

@ -0,0 +1,84 @@
// 所有缓存的谱
let sampleList = []
/**
* 重新设置缓存的谱
* @param {Array} list
*/
const setSampleList = list => {
sampleList = list
}
/**
* 缓存一条谱数据
* @param {*} sampleData
*/
const addSampleData = sampleData => {
const find = sampleList.find(item => item.inputFileName == sampleData.inputFileName)
if (find) {
find.data = sampleData.data
} else {
sampleList.push(sampleData)
}
}
/**
* 更新谱数据
* @param {{ inputFileName: string; key: string; data: any; }} param0
*/
const updateSampleData = ({ inputFileName, key, data }) => {
const find = sampleList.find(item => item.inputFileName == inputFileName)
if (find) {
find.data[key] = data
}
}
/**
* 移除谱数据
* @param {string} inputFileName
*/
const removeSampleData = inputFileName => {
const findIndex = sampleList.findIndex(item => item.inputFileName == inputFileName)
if (-1 !== findIndex) {
sampleList.splice(findIndex, 1)
}
}
/**
* 更新分析数据
* @param {{ inputFileName: string; data: any; }} param0
*/
const updateSampleDataAnaly = ({ inputFileName, data }) => {
const find = sampleList.find(item => item.inputFileName == inputFileName)
if (find) {
data.DetailedInformation = find.data.DetailedInformation
find.data = data
}
}
/**
* 清理缓存列表
*/
const clearSampleData = () => {
sampleList = []
}
/**
* 根据文件名获取谱
* @param {string} inputFileName
*/
const getSampleData = inputFileName => {
const find = sampleList.find(item => item.inputFileName == inputFileName)
return find ? find : null
}
export {
sampleList,
setSampleList,
addSampleData,
updateSampleData,
removeSampleData,
updateSampleDataAnaly,
clearSampleData,
getSampleData
}

View File

@ -13,6 +13,7 @@
:list="dataSource" :list="dataSource"
:loading="loading" :loading="loading"
:canSelect="false" :canSelect="false"
:scroll="{ y: 390 }"
> >
<template slot="info" slot-scope="{ record }"> <template slot="info" slot-scope="{ record }">
<a-popover> <a-popover>

View File

@ -10,6 +10,7 @@
:list="dataSource" :list="dataSource"
:loading="loading" :loading="loading"
:pagination="false" :pagination="false"
:scroll="{ y: 655 }"
@rowDbclick="rowClick" @rowDbclick="rowClick"
> >
<!-- <template slot="stationList" slot-scope="{ text }"> <!-- <template slot="stationList" slot-scope="{ text }">

View File

@ -53,6 +53,7 @@
:loading="loading" :loading="loading"
:pagination="false" :pagination="false"
:canSelect="false" :canSelect="false"
:scroll="{ y: 655 }"
> >
</TableList> </TableList>
<a-pagination <a-pagination

View File

@ -30,6 +30,21 @@
</a-card> </a-card>
<!-- 日志列表 --> <!-- 日志列表 -->
<div class="log-list"> <div class="log-list">
<div class="search-bar">
<a-row type="flex">
<a-col flex="290px">
<a-form-model-item label="Name">
<a-input v-model="nameStr" placeholder="Please Input..." />
</a-form-model-item>
</a-col>
<a-col flex="108px">
<a-button class="search-btn" type="primary" @click="onSearch">
<img src="@/assets/images/global/search.png" alt="" />
Search
</a-button>
</a-col>
</a-row>
</div>
<custom-table <custom-table
size="middle" size="middle"
rowKey="id" rowKey="id"
@ -39,7 +54,7 @@
:loading="isGettingTreeData || loading" :loading="isGettingTreeData || loading"
:can-select="false" :can-select="false"
@change="handleTableChange" @change="handleTableChange"
:scroll="{ y: 'calc(100vh - 175px)' }" :scroll="{ y: 'calc(100vh - 275px)' }"
> >
<template slot="operate" slot-scope="{ record }"> <template slot="operate" slot-scope="{ record }">
<a-space :size="20"> <a-space :size="20">
@ -53,6 +68,22 @@
</a-space> </a-space>
</template> </template>
</custom-table> </custom-table>
<a-pagination
size="small"
v-model="ipagination.current"
:pageSize="ipagination.pageSize"
:page-size-options="ipagination.pageSizeOptions"
show-size-changer
show-quick-jumper
:total="ipagination.total"
:show-total="
(total, range) =>
`Total ${total} items Page ${ipagination.current} / ${Math.ceil(total / ipagination.pageSize)}`
"
show-less-items
@change="handlePageChange"
@showSizeChange="handleSizeChange"
/>
</div> </div>
<!-- 日志列表结束 --> <!-- 日志列表结束 -->
<custom-modal title="Log" :width="950" v-model="visible" :footer="null"> <custom-modal title="Log" :width="950" v-model="visible" :footer="null">
@ -108,6 +139,7 @@ export default {
data() { data() {
this.columns = columns this.columns = columns
return { return {
nameStr: '',
disableMixinCreated: true, disableMixinCreated: true,
url: { url: {
list: '/logManage/findFiles', list: '/logManage/findFiles',
@ -121,12 +153,37 @@ export default {
visible: false, visible: false,
isGettingDetail: false, isGettingDetail: false,
logInfo: [], logInfo: [],
ipagination: {
current: 1,
pageSize: 10,
pageSizeOptions: ['10', '20', '30'],
showTotal: (total, range) => {
const { current, pageSize } = this.ipagination
return `Total ${total} items Page ${current} / ${Math.ceil(total / pageSize)}`
},
showQuickJumper: true,
showSizeChanger: true,
total: 0,
},
} }
}, },
created() { created() {
this.getTreeData() this.getTreeData()
}, },
methods: { methods: {
onSearch() {
this.loadData()
},
handlePageChange(page, pageSize) {
this.ipagination.current = page
this.ipagination.pageSize = pageSize
this.loadData()
},
handleSizeChange(current, size) {
this.ipagination.current = current
this.ipagination.pageSize = size
this.loadData()
},
async getTreeData() { async getTreeData() {
try { try {
this.isGettingTreeData = true this.isGettingTreeData = true
@ -164,6 +221,8 @@ export default {
}, },
onSelect() { onSelect() {
this.queryParam.path = this.selectedKeys[0] this.queryParam.path = this.selectedKeys[0]
this.ipagination.current = 1
this.ipagination.pageSize = 10
this.loadData() this.loadData()
}, },
@ -179,10 +238,14 @@ export default {
this.onClearSelected() this.onClearSelected()
var params = this.getQueryParams() // var params = this.getQueryParams() //
params.name = this.nameStr
params.pageNo = this.ipagination.current
params.pageSize = this.ipagination.pageSize
this.loading = true this.loading = true
getAction(this.url.list, params) getAction(this.url.list, params)
.then((res) => { .then(({ result: { records, total } }) => {
this.dataSource = res this.dataSource = records
this.ipagination.total = total
}) })
.finally(() => { .finally(() => {
this.loading = false this.loading = false
@ -302,6 +365,10 @@ export default {
} }
} }
} }
&-list {
position: relative;
overflow: hidden;
}
} }
.log-detail { .log-detail {
@ -314,4 +381,59 @@ export default {
} }
} }
} }
.search-bar {
height: 50px;
border-top: 1px solid rgba(13, 235, 201, 0.3);
border-bottom: 1px solid rgba(13, 235, 201, 0.3);
margin-bottom: 15px;
padding: 8px 10px;
background: rgba(12, 235, 201, 0.05);
}
.ant-input {
width: 266px;
}
::v-deep {
.ant-form-item {
display: flex;
margin-bottom: 0;
.ant-form-item-label,
.ant-form-item-control {
line-height: 32px;
height: 32px;
}
.ant-form-item-label {
flex-shrink: 0;
margin-right: 10px;
label {
font-size: 16px;
font-family: ArialMT;
color: #ade6ee;
&::after {
display: none;
}
}
}
.ant-calendar-range-picker-separator {
color: white;
}
.ant-form-item-control-wrapper {
width: 100%;
// overflow: hidden;
}
}
}
.search-btn {
margin-bottom: 10px;
img {
width: 16px;
height: 17px;
margin-right: 9px;
}
}
.ant-pagination {
position: absolute;
left: 50%;
bottom: 0;
transform: translateX(-50%);
}
</style> </style>

View File

@ -121,6 +121,7 @@
</template> </template>
<script> <script>
import { addSampleData, getSampleData, sampleList, setSampleList, updateSampleData } from '@/utils/SampleStore'
import { getAction, postAction } from '../../api/manage' import { getAction, postAction } from '../../api/manage'
import BetaGammaChartContainer from './components/BetaGammaChartContainer.vue' import BetaGammaChartContainer from './components/BetaGammaChartContainer.vue'
import BetaGammaSpectrumChart from './components/BetaGammaSpectrumChart.vue' import BetaGammaSpectrumChart from './components/BetaGammaSpectrumChart.vue'
@ -189,6 +190,10 @@ export default {
analyseCurrentSpectrum: { analyseCurrentSpectrum: {
type: Object, type: Object,
}, },
sampleList: {
type: Array,
required: true,
},
}, },
data() { data() {
this.SampleType = SampleType this.SampleType = SampleType
@ -237,7 +242,7 @@ export default {
this.qcFlagsVisible = true this.qcFlagsVisible = true
}, 100) }, 100)
}, },
destroyed() { beforeDestroy() {
this.cancelLastRequest() this.cancelLastRequest()
this.$bus.$off('ReAnalyses', this.handleReAnalyse) this.$bus.$off('ReAnalyses', this.handleReAnalyse)
@ -289,7 +294,7 @@ export default {
} }
} }
this.changeChartByType(this.spectraType) this.changeChartByType(this.spectraType, result.XeData)
}, },
handleGetFlag(val, obj) { handleGetFlag(val, obj) {
@ -323,7 +328,7 @@ export default {
this.changeChartByType('sample') this.changeChartByType('sample')
this.emitGetFiles(result) this.emitGetFiles(result)
this.$store.commit('ADD_SAMPLE_DATA', { addSampleData({
inputFileName, inputFileName,
data: result, data: result,
from: 'db', from: 'db',
@ -369,11 +374,12 @@ export default {
this.sampleDetail = result this.sampleDetail = result
this.changeChartByType('sample') this.changeChartByType('sample')
this.$store.commit('ADD_SAMPLE_DATA', { addSampleData({
inputFileName: this.sample.sampleFileName, inputFileName: this.sample.sampleFileName,
data: result, data: result,
from: 'file', from: 'file',
}) })
this.isLoading = false this.isLoading = false
} else { } else {
this.$message.error(message) this.$message.error(message)
@ -401,7 +407,7 @@ export default {
return cancelToken return cancelToken
}, },
changeChartByType(val) { changeChartByType(val, data) {
if (val === 'qc' && !this.sampleDetail.qc) { if (val === 'qc' && !this.sampleDetail.qc) {
this.$message.warning('No qc spectrum file!') this.$message.warning('No qc spectrum file!')
} else { } else {
@ -452,7 +458,7 @@ export default {
console.log('this.resultDisplaythis.resultDisplay', this.resultDisplay) console.log('this.resultDisplaythis.resultDisplay', this.resultDisplay)
this.resultDisplay = XeData this.resultDisplay = data ? data : XeData
this.sortResultDisplay() this.sortResultDisplay()
this.$emit('sendInfo', this.resultDisplay, this.spectrumData.stationCode, savedAnalysisResult) this.$emit('sendInfo', this.resultDisplay, this.spectrumData.stationCode, savedAnalysisResult)
@ -548,46 +554,108 @@ export default {
// this.isReAnalyed_beta = true // this.isReAnalyed_beta = true
// this.analyseCurrentSpectrum = res.result // this.analyseCurrentSpectrum = res.result
this.$emit('sendXeData', res.result.XeData) this.$emit('sendXeData', res.result.XeData)
if (res.result.XeData && res.result.XeData.length > 0) { // if (res.result.XeData && res.result.XeData.length > 0) {
res.result.XeData.forEach((item) => { res.result.XeData.forEach((item) => {
item.conc = parseFloat(item.conc.toPrecision(6)) item.conc = parseFloat(item.conc.toPrecision(6))
item.concErr = parseFloat(item.concErr.toPrecision(6)) item.concErr = parseFloat(item.concErr.toPrecision(6))
item.lc = parseFloat(item.lc.toPrecision(6)) item.lc = parseFloat(item.lc.toPrecision(6))
item.mdc = parseFloat(item.mdc.toPrecision(6)) item.mdc = parseFloat(item.mdc.toPrecision(6))
}) })
this.$emit('reAnalyCurr', true, res.result.XeData) this.$emit('reAnalyCurr', res.result.savedAnalysisResult, res.result.XeData)
this.handleReAnalyse(res.result) 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 {
this.$message.warning(res.result.message)
} }
// }
} else { } else {
this.$message.warning(res.message) this.$message.warning(res.message)
} }
}) })
}, },
getAnalyzeAllSpectrum() { //
let params = { async getAnalyzeAllSpectrum() {
dbNames: [this.sample.dbName], const regExp = /^([A-Z]{1,}\d{1,})_/
sampleIds: [this.sample.sampleId ? this.sample.sampleId : ''], const regMatched = this.sample.inputFileName.match(regExp)
sampleFileNames: [this.sample.inputFileName], const currStationName = regMatched[1]
gasFileNames: [this.sample.gasFileName], const dbNames = [],
detFileNames: [this.sample.detFileName], sampleIds = [],
qcFileNames: [this.sample.qcFileName], 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, currentFileName: this.sample.inputFileName,
} }
postAction('/spectrumAnalysis/analyseAllSpectrum', params).then((res) => { const { success, result, message } = await postAction('/spectrumAnalysis/analyseAllSpectrum', params)
if (res.success) { if (success) {
// this.analyseCurrentSpectrum = res.result //
this.$emit('sendXeData', res.result.XeData) Object.entries(result).forEach(([inputFileName, sampleInfo]) => {
res.result.XeData.forEach((item) => { const { XeData, savedAnalysisResult, bProcessed, message } = sampleInfo
XeData.forEach((item) => {
item.conc = parseFloat(item.conc.toPrecision(6)) item.conc = parseFloat(item.conc.toPrecision(6))
item.concErr = parseFloat(item.concErr.toPrecision(6)) item.concErr = parseFloat(item.concErr.toPrecision(6))
item.lc = parseFloat(item.lc.toPrecision(6)) item.lc = parseFloat(item.lc.toPrecision(6))
item.mdc = parseFloat(item.mdc.toPrecision(6)) item.mdc = parseFloat(item.mdc.toPrecision(6))
}) })
this.$emit('reAnalyAll', true, res.result.XeData)
if (inputFileName == this.sample.inputFileName) {
this.$emit('sendXeData', XeData)
this.$emit('reAnalyAll', savedAnalysisResult, XeData)
this.handleReAnalyse(sampleInfo)
if (bProcessed) {
this.$message.success(message)
} else { } else {
this.$message.warning(res.message) this.$message.warning(message)
} }
}
updateSampleData({
inputFileName,
key: 'XeData',
data: XeData,
}) })
updateSampleData({
inputFileName,
key: 'savedAnalysisResult',
data: savedAnalysisResult,
})
})
} else {
this.$message.warning(message)
}
}, },
// //
@ -650,7 +718,7 @@ export default {
sample: { sample: {
async handler(newVal, oldVal) { async handler(newVal, oldVal) {
this.resultDisplay = [] this.resultDisplay = []
const sampleData = await this.$store.dispatch('GET_SAMPLE_DATA', newVal.inputFileName) const sampleData = getSampleData(newVal.inputFileName)
if (sampleData) { if (sampleData) {
this.cancelLastRequest() this.cancelLastRequest()
this.isLoading = false this.isLoading = false
@ -668,6 +736,7 @@ export default {
this.getSampleDetail_file() this.getSampleDetail_file()
} }
} }
await this.$nextTick()
this.$refs.betaGammaChartRef.handleUnzoom() this.$refs.betaGammaChartRef.handleUnzoom()
}, },
immediate: true, immediate: true,
@ -678,11 +747,6 @@ export default {
// this.currResultDisplay = newVal.XeData // this.currResultDisplay = newVal.XeData
this.resultDisplay = cloneDeep(newVal.XeData) || [] this.resultDisplay = cloneDeep(newVal.XeData) || []
this.sortResultDisplay() this.sortResultDisplay()
this.$store.commit('UPDATE_SAMPLE_DATA', {
inputFileName: this.sample.inputFileName,
key: 'XeData',
data: newVal.XeData,
})
}, },
// immediate: true, // immediate: true,
deep: true, deep: true,

View File

@ -1,5 +1,5 @@
import { deleteAction } from '@/api/manage' import { deleteAction } from '@/api/manage'
import store from '@/store' import { removeSampleData } from '@/utils/SampleStore'
import Vue from 'vue' import Vue from 'vue'
/** /**
@ -16,7 +16,7 @@ export const clearSampleCache = sampleList => {
params = { sampleFileName: fileName } params = { sampleFileName: fileName }
} }
deleteAction(url, params) deleteAction(url, params)
store.commit('REMOVE_SAMPLE_DATA', fileName) removeSampleData(fileName)
Vue.ls.remove(`CALIBRATION_GAMMA_${fileName}`) Vue.ls.remove(`CALIBRATION_GAMMA_${fileName}`)
Vue.ls.remove(`CALIBRATION_BETA_${fileName}`) Vue.ls.remove(`CALIBRATION_BETA_${fileName}`)
}) })

View File

@ -327,7 +327,6 @@ export default {
}, },
} }
}, },
mounted() { mounted() {
this.opts.notMerge = true this.opts.notMerge = true
this.$nextTick(() => { this.$nextTick(() => {
@ -565,13 +564,20 @@ export default {
// 3D // 3D
histogramDataDList: { histogramDataDList: {
handler(newVal) { handler(newVal) {
const maxCount = Math.max(...newVal.map((item) => item.c)) let maxCount = 0
const data = []
for (const item of newVal) {
const { b, g, c } = item //
if (c > maxCount) maxCount = c
data.push([b, g, c])
}
this.threeDSurfaceOption.zAxis3D.max = Math.ceil(maxCount * 1.2) this.threeDSurfaceOption.zAxis3D.max = Math.ceil(maxCount * 1.2)
this.threeDSurfaceOption.series.data = newVal.map((item) => [item.b, item.g, item.c]) // 3D surface this.threeDSurfaceOption.series.data = data // 设置3D surface数据 // 第一次设置耗时较多
this.threeDSurfaceOption.visualMap.max = maxCount this.threeDSurfaceOption.visualMap.max = maxCount
this.threeDScatterOption.zAxis3D.max = Math.ceil(maxCount * 1.2) this.threeDScatterOption.zAxis3D.max = Math.ceil(maxCount * 1.2)
this.threeDScatterOption.series.data = newVal.map((item) => [item.b, item.g, item.c]) // 3D scatter this.threeDScatterOption.series.data = data // 3D scatter
this.threeDScatterOption.visualMap.max = maxCount this.threeDScatterOption.visualMap.max = maxCount
}, },
immediate: true, immediate: true,

View File

@ -228,6 +228,7 @@ import { updateBaseLine } from '@/utils/WasmHelper'
import RectList from './components/RectList.vue' import RectList from './components/RectList.vue'
import { isNullOrUndefined } from '@/utils/util' import { isNullOrUndefined } from '@/utils/util'
import { findNearPeak, getLineData, transformPointListData } from '@/utils/sampleHelper' import { findNearPeak, getLineData, transformPointListData } from '@/utils/sampleHelper'
import { getSampleData } from '@/utils/SampleStore'
// //
const initialOption = { const initialOption = {
@ -514,7 +515,7 @@ export default {
} }
}, },
methods: { methods: {
async getInfo() { getInfo() {
this.option.series = [] this.option.series = []
this.thumbnailOption.series = [] this.thumbnailOption.series = []
this.list = [] this.list = []
@ -522,7 +523,7 @@ export default {
const { inputFileName } = this.sampleData const { inputFileName } = this.sampleData
const currSampleDetailInfo = await this.$store.dispatch('GET_SAMPLE_DATA', inputFileName) const currSampleDetailInfo = getSampleData(inputFileName)
const { const {
data: { allData, shadowChannelChart, shapeChannelData, peak, BaseCtrls, barChart }, data: { allData, shadowChannelChart, shapeChannelData, peak, BaseCtrls, barChart },
} = currSampleDetailInfo } = currSampleDetailInfo
@ -583,8 +584,8 @@ export default {
this.handleResetChart() this.handleResetChart()
}, },
async beforeModalOpen() { beforeModalOpen() {
await this.getInfo() this.getInfo()
this.reset() this.reset()
}, },
@ -1562,14 +1563,16 @@ export default {
try { try {
this.$set(this.selectedTableItem, '_deleting', true) this.$set(this.selectedTableItem, '_deleting', true)
const { inputFileName: fileName } = this.sampleData const { inputFileName: fileName } = this.sampleData
const { success, message } = await postAction('/gamma/deleteNuclide', { const { success, result, message } = await postAction('/gamma/deleteNuclide', {
curRow: this.curRow, curRow: this.curRow,
nuclideName: this.model.identifiedNuclide, nuclideName: this.model.identifiedNuclide,
fileName, fileName,
list_identify: nuclides, list_identify: nuclides,
}) })
if (success) { if (success) {
nuclides.splice(findIndex, 1) const { identify, table } = result
this.selectedTableItem.nuclides = identify
this.list = table
} else { } else {
this.$message.error(message) this.$message.error(message)
} }

View File

@ -629,7 +629,7 @@ export default {
this.$bus.$on('betaRefresh', this.getData) this.$bus.$on('betaRefresh', this.getData)
this.getData() this.getData()
}, },
destroyed() { beforeDestroy() {
this.$bus.$off('betaRefresh', this.handleReset) this.$bus.$off('betaRefresh', this.handleReset)
this.$bus.$off('betaRefresh', this.getData) this.$bus.$off('betaRefresh', this.getData)
}, },

View File

@ -50,6 +50,7 @@ import { postAction } from '@/api/manage'
import BetaDetectorCalibration from './components/BetaDetectorCalibration.vue' import BetaDetectorCalibration from './components/BetaDetectorCalibration.vue'
import GammaDetectorCalibration from './components/GammaDetectorCalibration.vue' import GammaDetectorCalibration from './components/GammaDetectorCalibration.vue'
import TitleOverBorder from '@/views/spectrumAnalysis/components/TitleOverBorder.vue' import TitleOverBorder from '@/views/spectrumAnalysis/components/TitleOverBorder.vue'
import { removeSampleData } from '@/utils/SampleStore'
export default { export default {
components: { BetaDetectorCalibration, GammaDetectorCalibration, TitleOverBorder }, components: { BetaDetectorCalibration, GammaDetectorCalibration, TitleOverBorder },
mixins: [ModalMixin, SampleDataMixin], mixins: [ModalMixin, SampleDataMixin],
@ -153,11 +154,15 @@ export default {
item.mdc = parseFloat(item.mdc.toPrecision(6)) item.mdc = parseFloat(item.mdc.toPrecision(6))
}) })
this.$emit('sendXeData', res.result.XeData) this.$emit('sendXeData', res.result.XeData)
this.$emit('reAnalyCurr', true, res.result.XeData) this.$emit('reAnalyCurr', res.result.savedAnalysisResult, res.result.XeData)
this.$message.success('Analyse Success!')
this.isReanlyze = true this.isReanlyze = true
this.handleExit() this.handleExit()
this.$bus.$emit('ReAnalyses', res.result) this.$bus.$emit('ReAnalyses', res.result)
if (res.result.bProcessed) {
this.$message.success(res.result.message)
} else {
this.$message.warning(res.result.message)
}
if (this.newCalibrationIsAppliedTo == 'AllSpectrum') { if (this.newCalibrationIsAppliedTo == 'AllSpectrum') {
let sameStation = matchedSampleList.filter( let sameStation = matchedSampleList.filter(
@ -175,8 +180,7 @@ export default {
// //
clearSameStationCache(sampleList) { clearSameStationCache(sampleList) {
sampleList.forEach(({ inputFileName }) => { sampleList.forEach(({ inputFileName }) => {
console.log('inputFileName>>' + inputFileName) removeSampleData(inputFileName)
this.$store.commit('REMOVE_SAMPLE_DATA', inputFileName)
}) })
}, },
// Calibration 20231115xiao // Calibration 20231115xiao

View File

@ -136,6 +136,7 @@ import { readFile, zipFile } from '@/utils/file'
import { findNearPeak } from '@/utils/sampleHelper' import { findNearPeak } from '@/utils/sampleHelper'
import { add, subtract } from 'xe-utils/methods' import { add, subtract } from 'xe-utils/methods'
import { PHDParser, isSample, getSampleTypeIdentify } from '@/utils/phdHelper' import { PHDParser, isSample, getSampleTypeIdentify } from '@/utils/phdHelper'
import { addSampleData, getSampleData } from '@/utils/SampleStore'
export default { export default {
props: { props: {
@ -190,8 +191,8 @@ export default {
stripSumOrCutLine: null, stripSumOrCutLine: null,
stripReferenceLine: null, stripReferenceLine: null,
} }
;(this.peakList = []), // Peak this.peakList = [] // Peak
(this.baseCtrls = {}) // BaseCtrls this.baseCtrls = {} // BaseCtrls
return { return {
abc: false, abc: false,
@ -253,7 +254,7 @@ export default {
window.addEventListener('keydown', this.handleKeyboardEvent) window.addEventListener('keydown', this.handleKeyboardEvent)
window.addEventListener('click', this.closePeakInfomationTooltip) window.addEventListener('click', this.closePeakInfomationTooltip)
}, },
destroyed() { beforeDestroy() {
this.cancelLastRequest() this.cancelLastRequest()
this.$bus.$off('gammaRefresh', this.handleRefresh) this.$bus.$off('gammaRefresh', this.handleRefresh)
@ -263,8 +264,16 @@ export default {
window.removeEventListener('click', this.closePeakInfomationTooltip) window.removeEventListener('click', this.closePeakInfomationTooltip)
if (this.qcFlagsTimer) { if (this.qcFlagsTimer) {
clearTimeout(this.qcFlagsTimer) window.clearTimeout(this.qcFlagsTimer)
} }
this.closeWebSocket()
if (this.websocketTimer) {
window.clearTimeout(this.websocketTimer)
}
this.websock = null
}, },
deactivated() { deactivated() {
// Object.keys(this.subOperatorsState).forEach(k => { // Object.keys(this.subOperatorsState).forEach(k => {
@ -464,10 +473,10 @@ export default {
let token = Vue.ls.get(ACCESS_TOKEN) let token = Vue.ls.get(ACCESS_TOKEN)
this.websock = new WebSocket(url, [token]) this.websock = new WebSocket(url, [token])
//update-end-author:taoyan date:2022-4-22 for: v2.4.6 websocket #3278 //update-end-author:taoyan date:2022-4-22 for: v2.4.6 websocket #3278
this.websock.onopen = this.websocketOnopen this.websock.addEventListener('open', this.websocketOnopen)
this.websock.onerror = this.websocketOnerror this.websock.addEventListener('error', this.websocketOnerror)
this.websock.onmessage = this.websocketOnmessage this.websock.addEventListener('message', this.websocketOnmessage)
this.websock.onclose = this.websocketOnclose this.websock.addEventListener('close', this.websocketOnclose)
}, },
websocketOnopen: function () { websocketOnopen: function () {
// console.log('WebSocket1231') // console.log('WebSocket1231')
@ -493,12 +502,25 @@ export default {
if (that.lockReconnect) return if (that.lockReconnect) return
that.lockReconnect = true that.lockReconnect = true
// //
setTimeout(function () { this.websocketTimer = setTimeout(function () {
console.info('尝试重连...') console.info('尝试重连...')
that.initWebSocket() that.initWebSocket()
that.lockReconnect = false that.lockReconnect = false
}, 20000) }, 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() { async getSampleDetail() {
const { dbName, sampleId, analyst } = this.sample const { dbName, sampleId, analyst } = this.sample
@ -579,7 +601,7 @@ export default {
dataProcess(result, flag) { dataProcess(result, flag) {
const { inputFileName } = this.sample const { inputFileName } = this.sample
this.$store.commit('ADD_SAMPLE_DATA', { addSampleData({
inputFileName, inputFileName,
data: result, data: result,
from: flag, from: flag,
@ -2057,11 +2079,11 @@ export default {
immediate: true, immediate: true,
}, },
sample: { sample: {
async handler(newVal, oldVal) { handler(newVal, oldVal) {
console.log('newValnewVal', newVal) console.log('newValnewVal', newVal)
this.graphAssistance.axisType = 'Channel' this.graphAssistance.axisType = 'Channel'
this.handleResetState() this.handleResetState()
const sampleData = await this.$store.dispatch('GET_SAMPLE_DATA', newVal.inputFileName) const sampleData = getSampleData(newVal.inputFileName)
if (sampleData) { if (sampleData) {
this.cancelLastRequest() this.cancelLastRequest()
this.isLoading = false this.isLoading = false

View File

@ -63,6 +63,7 @@
:sampleInfo="sampleInfo" :sampleInfo="sampleInfo"
:sample="sampleData" :sample="sampleData"
:analyseCurrentSpectrum="analyseCurrentSpectrumData" :analyseCurrentSpectrum="analyseCurrentSpectrumData"
:sampleList="sampleList"
/> />
<!-- Beta-Gamma 分析 --> <!-- Beta-Gamma 分析 -->
<div v-else class="empty">Please Select a Sample</div> <div v-else class="empty">Please Select a Sample</div>
@ -281,6 +282,7 @@ import BGLogViewer from './components/Modals/BetaGammaModals/BGLogViewer.vue'
import { saveAs } from 'file-saver' import { saveAs } from 'file-saver'
import CompareFromDbModal from './components/Modals/CompareFromDBModal.vue' import CompareFromDbModal from './components/Modals/CompareFromDBModal.vue'
import { clearSampleData, getSampleData, updateSampleDataAnaly } from '@/utils/SampleStore'
// //
const ANALYZE_TYPE = { const ANALYZE_TYPE = {
@ -465,9 +467,9 @@ export default {
window.addEventListener('beforeunload', this.handleCleanAll) window.addEventListener('beforeunload', this.handleCleanAll)
}, },
destroyed() { beforeDestroy() {
this.$bus.$off('reanalyse', this.handleReanalyse) this.$bus.$off('reanalyse', this.handleReanalyse)
this.$store.commit('CLEAR_SAMPLE_DATA') clearSampleData()
this.handleCleanAll() this.handleCleanAll()
window.removeEventListener('beforeunload', this.handleCleanAll) window.removeEventListener('beforeunload', this.handleCleanAll)
}, },
@ -475,11 +477,13 @@ export default {
methods: { methods: {
getReAnalyCurr(flag, val) { getReAnalyCurr(flag, val) {
this.isReAnalyed_beta = flag this.isReAnalyed_beta = flag
this.params_toDB.savedAnalysisResult = true this.params_toDB.savedAnalysisResult = flag
this.resultDisplayFlag = val this.resultDisplayFlag = val
}, },
getReAnalyAll(val) { getReAnalyAll(flag, val) {
this.isReAnalyed_beta = flag
this.resultDisplayFlag = val this.resultDisplayFlag = val
this.params_toDB.savedAnalysisResult = flag
}, },
handleReAnalyed(val) { handleReAnalyed(val) {
this.isReAnalyed_gamma = val this.isReAnalyed_gamma = val
@ -501,6 +505,7 @@ export default {
} }
this.resultDisplayFlag = arg this.resultDisplayFlag = arg
this.params_toDB.stationName = val this.params_toDB.stationName = val
this.params_toDB.savedAnalysisResult = flag
this.isReAnalyed_beta = this.isReAnalyed_beta ? this.isReAnalyed_beta : flag this.isReAnalyed_beta = this.isReAnalyed_beta ? this.isReAnalyed_beta : flag
}, },
getCheckFlag(val) { getCheckFlag(val) {
@ -509,10 +514,10 @@ export default {
this.params_toDB.checkDet = val.checkDet this.params_toDB.checkDet = val.checkDet
}, },
getXeData(val) { getXeData(val) {
if (val && val.length) { // if (val && val.length) {
this.$set(this.analyseCurrentSpectrumData, 'XeData', val) this.$set(this.analyseCurrentSpectrumData, 'XeData', val)
this.resultDisplayFlag = val this.resultDisplayFlag = val
} // }
}, },
// formDB sampleData // formDB sampleData
getFiles(val) { getFiles(val) {
@ -605,12 +610,13 @@ export default {
// Bbeta-gamma P Ggamma // Bbeta-gamma P Ggamma
if (sample.sampleType == 'B') { if (sample.sampleType == 'B') {
this.analysisType = ANALYZE_TYPE.BETA_GAMMA this.analysisType = ANALYZE_TYPE.BETA_GAMMA
const sampleData = getSampleData(sample.inputFileName)
this.params_toDB.savedAnalysisResult = sampleData ? sampleData.data.savedAnalysisResult : false
} else { } else {
this.analysisType = ANALYZE_TYPE.GAMMA this.analysisType = ANALYZE_TYPE.GAMMA
} }
this.sampleData = this.newSampleData = sample this.sampleData = this.newSampleData = sample
this.currSampleDet = this.allSampleDet[sample.inputFileName] this.currSampleDet = this.allSampleDet[sample.inputFileName]
this.params_toDB.savedAnalysisResult = sample.sampleId ? true : false
this.params_toDB.comment = '' this.params_toDB.comment = ''
}, },
@ -841,7 +847,6 @@ export default {
* @param { 'all' | 'current' } type * @param { 'all' | 'current' } type
*/ */
handleSavePHDToFile(type) { handleSavePHDToFile(type) {
console.log('%c [ savePHDToFile ]-162', 'font-size:13px; background:pink; color:#bf2c9f;', type)
if (this.isGamma) { if (this.isGamma) {
if (type == 'current') { if (type == 'current') {
let params = { let params = {
@ -901,7 +906,7 @@ export default {
try { try {
const { success, result, message } = await postAction(`/gamma/Reprocessing?fileName=${fileNames[0]}`) const { success, result, message } = await postAction(`/gamma/Reprocessing?fileName=${fileNames[0]}`)
if (success) { if (success) {
this.$store.commit('UPDATE_SAMPLE_DATA_ANALY', { updateSampleDataAnaly({
inputFileName: fileNames[0], inputFileName: fileNames[0],
data: result, data: result,
}) })
@ -1759,13 +1764,13 @@ export default {
<style lang="less"> <style lang="less">
.spectrum-analysis-operators-dropdown-overlay { .spectrum-analysis-operators-dropdown-overlay {
background-color: #03353f; background-color: #03353f;
z-index: 999;
.ant-menu { .ant-menu {
background: transparent; background: transparent;
padding: 0; padding: 0;
position: relative; position: relative;
border-right: 0; border-right: 0;
max-height: calc(100vh - 506px);
overflow: hidden auto;
&-submenu { &-submenu {
&-active { &-active {

View File

@ -196,11 +196,11 @@
</custom-modal> </custom-modal>
<!-- 增加/编辑排班弹窗结束 --> <!-- 增加/编辑排班弹窗结束 -->
<custom-modal title="Failure record" v-model="visibleRes" :footer="null"> <custom-modal title="Failure record" v-model="visibleRes" :footer="null">
<custom-table size="middle" :columns="columns" :list="dataSource"> <a-table size="middle" :columns="columns" :dataSource="dataSource" :pagination="false" :scroll="{ y: 600 }">
<template slot="index" slot-scope="{ index }"> <template slot="index" slot-scope="{ index }">
{{ index + 1 }} {{ index + 1 }}
</template> </template>
</custom-table> </a-table>
</custom-modal> </custom-modal>
</div> </div>
</template> </template>