2023-07-12 19:56:41 +08:00
|
|
|
<template>
|
|
|
|
<custom-modal v-model="visible" title="Korsum" :width="1120" :footer="null">
|
2023-08-15 18:23:22 +08:00
|
|
|
<a-spin :spinning="isLoading">
|
|
|
|
<div class="korsum">
|
|
|
|
<!-- 输入开始 -->
|
|
|
|
<title-over-border title="Input">
|
|
|
|
<div class="korsum-input">
|
|
|
|
<!-- 公式部分 -->
|
|
|
|
<a-form-model
|
|
|
|
class="korsum-input-formula"
|
|
|
|
:labelCol="{
|
|
|
|
style: {
|
|
|
|
width: '110px'
|
|
|
|
}
|
|
|
|
}"
|
|
|
|
>
|
|
|
|
<a-form-model-item label="Total Effi = exp(">
|
|
|
|
<!-- 第一行 -->
|
|
|
|
<div>
|
|
|
|
<a-input-number v-model="totalEffi.totalEf1"></a-input-number>
|
|
|
|
<span class="operator">* Er + </span>
|
|
|
|
<a-input-number v-model="totalEffi.totalEf2"></a-input-number>
|
|
|
|
<span class="operator">+ </span>
|
|
|
|
</div>
|
|
|
|
<!-- 第二行 -->
|
|
|
|
<div>
|
|
|
|
<a-input-number v-model="totalEffi.totalEf3"></a-input-number>
|
|
|
|
<span class="operator">/ Er + </span>
|
|
|
|
<a-input-number v-model="totalEffi.totalEf4"></a-input-number>
|
|
|
|
<span class="operator">/ Er <sup>2</sup> + </span>
|
|
|
|
</div>
|
|
|
|
<!-- 第三行 -->
|
|
|
|
<div>
|
|
|
|
<a-input-number v-model="totalEffi.totalEf5"></a-input-number>
|
|
|
|
<span class="operator"> / Er <sup>3</sup> + </span>
|
|
|
|
<a-input-number v-model="totalEffi.totalEf6"></a-input-number>
|
|
|
|
<span class="operator">/ Er <sup>4</sup> ) </span>
|
|
|
|
</div>
|
|
|
|
</a-form-model-item>
|
|
|
|
<a-form-model-item label="Efficiency = exp(">
|
|
|
|
<!-- 第一行 -->
|
|
|
|
<div>
|
|
|
|
<a-input-number v-model="efficiency.effciency1"></a-input-number>
|
|
|
|
<span class="operator">* Er + </span>
|
|
|
|
<a-input-number v-model="efficiency.effciency2"></a-input-number>
|
|
|
|
<span class="operator">+ </span>
|
|
|
|
</div>
|
|
|
|
<!-- 第二行 -->
|
|
|
|
<div>
|
|
|
|
<a-input-number v-model="efficiency.effciency3"></a-input-number>
|
|
|
|
<span class="operator">/ Er + </span>
|
|
|
|
<a-input-number v-model="efficiency.effciency4"></a-input-number>
|
|
|
|
<span class="operator">/ Er <sup>2</sup> + </span>
|
|
|
|
</div>
|
|
|
|
<!-- 第三行 -->
|
|
|
|
<div>
|
|
|
|
<a-input-number v-model="efficiency.effciency5"></a-input-number>
|
|
|
|
<span class="operator"> / Er <sup>3</sup> + </span>
|
|
|
|
<a-input-number v-model="efficiency.effciency6"></a-input-number>
|
|
|
|
<span class="operator">/ Er <sup>4</sup> ) </span>
|
|
|
|
</div>
|
|
|
|
</a-form-model-item>
|
|
|
|
</a-form-model>
|
|
|
|
<!-- 公式结束 -->
|
|
|
|
|
|
|
|
<!-- 标题 -->
|
|
|
|
<a-button type="primary" class="korsum-input-title" @click="handleInput">
|
|
|
|
Input
|
|
|
|
</a-button>
|
|
|
|
<!-- 标题结束 -->
|
|
|
|
|
|
|
|
<!-- 表格开始 -->
|
2023-07-12 19:56:41 +08:00
|
|
|
<a-table
|
2023-08-15 18:23:22 +08:00
|
|
|
class="korsum-input-table"
|
|
|
|
:class="list.length ? 'has-data' : ''"
|
|
|
|
:columns="columns"
|
|
|
|
:dataSource="list"
|
|
|
|
:scroll="{ y: 288 }"
|
2023-07-12 19:56:41 +08:00
|
|
|
:pagination="false"
|
2023-08-15 18:23:22 +08:00
|
|
|
>
|
|
|
|
<template slot="energy" slot-scope="text, record">
|
|
|
|
<a-input-number v-model="record.energy"></a-input-number>
|
|
|
|
</template>
|
|
|
|
<template slot="totalEffi" slot-scope="text, record">
|
|
|
|
<a-input-number v-model="record.totalEffi"></a-input-number>
|
|
|
|
</template>
|
|
|
|
<template slot="peakEffi" slot-scope="text, record">
|
|
|
|
<a-input-number v-model="record.peakEffi"></a-input-number>
|
|
|
|
</template>
|
|
|
|
<template slot="uncertain" slot-scope="text, record">
|
|
|
|
<a-input-number v-model="record.uncertain"></a-input-number>
|
|
|
|
</template>
|
|
|
|
</a-table>
|
|
|
|
<!-- 表格结束 -->
|
|
|
|
|
|
|
|
<!-- 按钮开始 -->
|
|
|
|
<div class="korsum-input-buttons">
|
|
|
|
<a-button type="primary" @click="handleAnalyze">Analyse</a-button>
|
|
|
|
<a-button type="primary" @click="handleExit">Exit</a-button>
|
|
|
|
</div>
|
|
|
|
<!-- 按钮结束 -->
|
2023-07-12 19:56:41 +08:00
|
|
|
</div>
|
2023-08-15 18:23:22 +08:00
|
|
|
</title-over-border>
|
|
|
|
<!-- 输入结束 -->
|
2023-07-12 19:56:41 +08:00
|
|
|
|
2023-08-15 18:23:22 +08:00
|
|
|
<!-- 输出开始 -->
|
|
|
|
<title-over-border title="Output">
|
|
|
|
<div class="korsum-output">
|
|
|
|
<div class="korsum-output-main">
|
|
|
|
<div class="korsum-output-list">
|
|
|
|
<div
|
|
|
|
class="korsum-output-list-item"
|
|
|
|
:class="selectedItem == item ? 'active' : ''"
|
|
|
|
v-for="(item, index) in outputList"
|
|
|
|
:key="index"
|
|
|
|
@click="handleOutputItemClick(item)"
|
|
|
|
>
|
|
|
|
{{ item }}
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<a-table
|
|
|
|
class="korsum-output-table"
|
|
|
|
:columns="outputColumns"
|
|
|
|
:dataSource="outputTableList"
|
|
|
|
:class="outputTableList.length ? 'has-data' : ''"
|
|
|
|
:scroll="{ y: 584 }"
|
|
|
|
:pagination="false"
|
|
|
|
></a-table>
|
2023-07-12 19:56:41 +08:00
|
|
|
</div>
|
2023-08-15 18:23:22 +08:00
|
|
|
|
|
|
|
<div class="korsum-output-operation">
|
|
|
|
<div class="left">
|
|
|
|
<a-input v-model="filterWord"></a-input>
|
|
|
|
</div>
|
|
|
|
<div class="right">
|
|
|
|
<a-button type="primary" @click="handleExport">Export to Excel</a-button>
|
|
|
|
</div>
|
2023-07-12 19:56:41 +08:00
|
|
|
</div>
|
|
|
|
</div>
|
2023-08-15 18:23:22 +08:00
|
|
|
</title-over-border>
|
|
|
|
<!-- 输出结束 -->
|
|
|
|
</div>
|
|
|
|
</a-spin>
|
2023-07-12 19:56:41 +08:00
|
|
|
</custom-modal>
|
|
|
|
</template>
|
|
|
|
|
|
|
|
<script>
|
2023-08-15 18:23:22 +08:00
|
|
|
import ModalMixin from '@/mixins/ModalMixin'
|
2023-07-24 19:26:46 +08:00
|
|
|
import TitleOverBorder from '../TitleOverBorder.vue'
|
2023-08-15 18:23:22 +08:00
|
|
|
import { getAction, postAction } from '@/api/manage'
|
2023-07-12 19:56:41 +08:00
|
|
|
|
|
|
|
const columns = [
|
|
|
|
{
|
|
|
|
title: 'Energy',
|
|
|
|
dataIndex: 'energy',
|
|
|
|
scopedSlots: {
|
|
|
|
customRender: 'energy'
|
|
|
|
}
|
|
|
|
},
|
|
|
|
{
|
|
|
|
title: 'Total Efficiency',
|
2023-08-15 18:23:22 +08:00
|
|
|
dataIndex: 'totalEffi',
|
2023-07-12 19:56:41 +08:00
|
|
|
scopedSlots: {
|
2023-08-15 18:23:22 +08:00
|
|
|
customRender: 'totalEffi'
|
2023-07-12 19:56:41 +08:00
|
|
|
}
|
|
|
|
},
|
|
|
|
{
|
|
|
|
title: 'Peak Efficiency',
|
2023-08-15 18:23:22 +08:00
|
|
|
dataIndex: 'peakEffi',
|
2023-07-12 19:56:41 +08:00
|
|
|
scopedSlots: {
|
2023-08-15 18:23:22 +08:00
|
|
|
customRender: 'peakEffi'
|
2023-07-12 19:56:41 +08:00
|
|
|
}
|
|
|
|
},
|
|
|
|
{
|
|
|
|
title: 'Uncertainty(%)',
|
2023-08-15 18:23:22 +08:00
|
|
|
dataIndex: 'uncertain',
|
2023-07-12 19:56:41 +08:00
|
|
|
scopedSlots: {
|
2023-08-15 18:23:22 +08:00
|
|
|
customRender: 'uncertain'
|
2023-07-12 19:56:41 +08:00
|
|
|
}
|
|
|
|
}
|
|
|
|
]
|
|
|
|
|
|
|
|
const outputColumns = [
|
|
|
|
{
|
|
|
|
title: 'Energy',
|
|
|
|
dataIndex: 'energy'
|
|
|
|
},
|
|
|
|
{
|
|
|
|
title: 'Correct Factor',
|
|
|
|
dataIndex: 'correctFactor'
|
|
|
|
},
|
|
|
|
{
|
|
|
|
title: 'Uncertainty(%)',
|
|
|
|
dataIndex: 'uncertainty'
|
|
|
|
}
|
|
|
|
]
|
|
|
|
export default {
|
2023-07-24 19:26:46 +08:00
|
|
|
components: { TitleOverBorder },
|
2023-08-15 18:23:22 +08:00
|
|
|
mixins: [ModalMixin],
|
2023-07-12 19:56:41 +08:00
|
|
|
data() {
|
|
|
|
this.columns = columns
|
|
|
|
this.outputColumns = outputColumns
|
|
|
|
return {
|
2023-08-15 18:23:22 +08:00
|
|
|
isLoading: false,
|
|
|
|
totalEffi: {},
|
|
|
|
efficiency: {},
|
|
|
|
list: [],
|
|
|
|
|
|
|
|
nuclideList: [],
|
2023-07-12 19:56:41 +08:00
|
|
|
selectedItem: {}, // output中左侧选中的项
|
|
|
|
outputTableList: [], // output中表格列表数据
|
|
|
|
|
|
|
|
filterWord: '' // 筛选
|
|
|
|
}
|
|
|
|
},
|
|
|
|
methods: {
|
2023-08-15 18:23:22 +08:00
|
|
|
async getInfo() {
|
|
|
|
try {
|
|
|
|
this.isLoading = true
|
|
|
|
const { success, result, message } = await getAction('/gamma/Korsum')
|
|
|
|
this.isLoading = false
|
|
|
|
if (success) {
|
|
|
|
const { Energy, Nuclide } = result
|
|
|
|
this.list = Energy
|
|
|
|
this.nuclideList = Nuclide
|
|
|
|
} else {
|
|
|
|
this.$message.error(message)
|
|
|
|
}
|
|
|
|
} catch (error) {
|
|
|
|
console.error(error)
|
|
|
|
}
|
|
|
|
},
|
|
|
|
|
|
|
|
beforeModalOpen() {
|
|
|
|
this.totalEffi = {
|
|
|
|
totalEf1: -0.024326,
|
|
|
|
totalEf2: -1.857587,
|
|
|
|
totalEf3: 0.111096,
|
|
|
|
totalEf4: -0.003896,
|
|
|
|
totalEf5: -0.000345,
|
|
|
|
totalEf6: 0.000017
|
|
|
|
}
|
|
|
|
|
|
|
|
this.efficiency = {
|
|
|
|
effciency1: -0.329812,
|
|
|
|
effciency2: -3.493192,
|
|
|
|
effciency3: 0.583265,
|
|
|
|
effciency4: -0.065884,
|
|
|
|
effciency5: 0.003255,
|
|
|
|
effciency6: -0.000059
|
|
|
|
}
|
|
|
|
|
|
|
|
this.getInfo()
|
|
|
|
},
|
|
|
|
|
|
|
|
async handleInput() {
|
|
|
|
if (Object.entries(this.totalEffi).some(([_, v]) => !v) || Object.entries(this.efficiency).some(([_, v]) => !v)) {
|
|
|
|
this.$message.warn('Please input valid digits in all 12 edit boxes')
|
|
|
|
return
|
|
|
|
}
|
|
|
|
try {
|
|
|
|
const { success, result, message } = await postAction('/gamma/KorSumInput', {
|
|
|
|
...this.totalEffi,
|
|
|
|
...this.efficiency,
|
|
|
|
energys: this.list.map(item => item.energy)
|
|
|
|
})
|
|
|
|
if (success) {
|
|
|
|
this.list = result
|
|
|
|
} else {
|
|
|
|
this.$message.error(message)
|
|
|
|
}
|
|
|
|
} catch (error) {
|
|
|
|
console.error(error)
|
|
|
|
}
|
|
|
|
},
|
|
|
|
|
2023-07-12 19:56:41 +08:00
|
|
|
// 分析
|
|
|
|
handleAnalyze() {
|
|
|
|
console.log('%c [ 分析 ]-178', 'font-size:13px; background:pink; color:#bf2c9f;')
|
|
|
|
},
|
|
|
|
|
|
|
|
// 退出
|
|
|
|
handleExit() {
|
|
|
|
this.visible = false
|
|
|
|
},
|
|
|
|
|
|
|
|
// output栏点击左侧列表
|
|
|
|
handleOutputItemClick(item) {
|
|
|
|
this.selectedItem = item
|
|
|
|
},
|
|
|
|
|
|
|
|
// 导出到excel
|
|
|
|
handleExport() {
|
|
|
|
console.log('%c [ 导出到excel ]-246', 'font-size:13px; background:pink; color:#bf2c9f;')
|
|
|
|
}
|
|
|
|
},
|
|
|
|
computed: {
|
|
|
|
outputList() {
|
2023-08-15 18:23:22 +08:00
|
|
|
return this.nuclideList.filter(item => item.toLowerCase().includes(this.filterWord.toLowerCase()))
|
2023-07-12 19:56:41 +08:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
</script>
|
|
|
|
|
|
|
|
<style lang="less" scoped>
|
|
|
|
::v-deep {
|
|
|
|
.title-over-border-content {
|
|
|
|
height: 711px;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
.korsum {
|
|
|
|
display: flex;
|
|
|
|
gap: 20px;
|
|
|
|
|
|
|
|
.title-over-border {
|
|
|
|
flex: 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
&-input {
|
|
|
|
&-formula {
|
|
|
|
::v-deep {
|
|
|
|
.ant-form-item {
|
|
|
|
margin-bottom: 10px;
|
|
|
|
|
|
|
|
&-label {
|
|
|
|
::after {
|
|
|
|
content: ' ';
|
|
|
|
margin: 0 2px;
|
|
|
|
}
|
|
|
|
> label {
|
|
|
|
color: #fff;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
.ant-input-number {
|
|
|
|
width: 120px;
|
|
|
|
}
|
|
|
|
|
|
|
|
.operator {
|
|
|
|
display: inline-block;
|
|
|
|
width: 46px;
|
|
|
|
margin: 0 5px;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
&-title {
|
2023-08-15 18:23:22 +08:00
|
|
|
width: 100%;
|
|
|
|
margin-bottom: 10px;
|
2023-07-12 19:56:41 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
&-table {
|
|
|
|
&.has-data {
|
|
|
|
::v-deep {
|
|
|
|
.ant-table-body {
|
|
|
|
height: 288px;
|
|
|
|
background-color: #06282a;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
::v-deep {
|
|
|
|
.ant-table {
|
|
|
|
font-size: 14px;
|
|
|
|
}
|
|
|
|
|
|
|
|
.ant-table-placeholder {
|
|
|
|
height: 289px;
|
|
|
|
display: flex;
|
|
|
|
justify-content: center;
|
|
|
|
align-items: center;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
.ant-input-number {
|
|
|
|
height: 26px;
|
|
|
|
|
|
|
|
::v-deep {
|
|
|
|
.ant-input-number-input {
|
|
|
|
height: 26px;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
&-buttons {
|
|
|
|
margin-top: 10px;
|
|
|
|
display: flex;
|
|
|
|
gap: 20px;
|
|
|
|
|
|
|
|
.ant-btn {
|
|
|
|
flex: 1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
&-output {
|
|
|
|
height: 100%;
|
|
|
|
display: flex;
|
|
|
|
flex-direction: column;
|
|
|
|
|
|
|
|
&-main {
|
|
|
|
display: flex;
|
|
|
|
gap: 20px;
|
|
|
|
flex: 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
&-list {
|
|
|
|
width: 120px;
|
|
|
|
height: 619px;
|
|
|
|
background: #275466;
|
|
|
|
padding: 5px;
|
|
|
|
overflow: auto;
|
|
|
|
|
|
|
|
&-item {
|
|
|
|
height: 32px;
|
|
|
|
line-height: 32px;
|
|
|
|
padding: 0 4px;
|
|
|
|
cursor: pointer;
|
|
|
|
|
|
|
|
&.active {
|
|
|
|
background-color: @primary-color;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
&-table {
|
|
|
|
flex: 1;
|
|
|
|
&.has-data {
|
|
|
|
::v-deep {
|
|
|
|
.ant-table-body {
|
|
|
|
height: 584px;
|
|
|
|
background-color: #06282a;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
::v-deep {
|
|
|
|
.ant-table {
|
|
|
|
font-size: 14px;
|
|
|
|
}
|
|
|
|
|
|
|
|
.ant-table-placeholder {
|
|
|
|
height: 585px;
|
|
|
|
display: flex;
|
|
|
|
justify-content: center;
|
|
|
|
align-items: center;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
&-operation {
|
|
|
|
margin-top: 20px;
|
|
|
|
display: flex;
|
|
|
|
gap: 20px;
|
|
|
|
|
|
|
|
.left {
|
|
|
|
width: 120px;
|
|
|
|
}
|
|
|
|
|
|
|
|
.right {
|
|
|
|
flex: 1;
|
|
|
|
|
|
|
|
.ant-btn {
|
|
|
|
width: 100%;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
</style>
|