feat: 改进计算结果展示和雷电密度计算逻辑

优化雷电密度计算条件判断,移除冗余条件
改进前端结果展示格式,显示各导线跳闸率
移除雷暴日输入框的禁用状态
更新电压离散化份数的工具提示说明
This commit is contained in:
dmy
2026-03-03 14:54:49 +08:00
parent acf1fa1c60
commit 355fb2d689
3 changed files with 26 additions and 16 deletions

View File

@@ -105,7 +105,6 @@
v-model="params.parameter.td"
type="number"
label="雷暴日 (d)"
:disable="isTdDisabled"
>
<q-tooltip>一年中雷暴天数用于计算地闪密度</q-tooltip>
</q-input>
@@ -244,7 +243,7 @@
type="number"
label="计算时电压分成多少份"
>
<q-tooltip>将电压波形离散化的份数影响计算精度</q-tooltip>
<q-tooltip>将电压波形离散化的份数即将交流电压在一个周期内的不同值进行计算</q-tooltip>
</q-input>
</div>
<div class="col-12 col-md-6">
@@ -331,7 +330,16 @@
</div>
</q-card-section>
<q-card-section>
<pre class="text-caption bg-white q-pa-md rounded">{{ result }}</pre>
<div class="text-body1">
<div class="q-mb-sm"><strong>跳闸率</strong>{{ result.tripping_rate }}</div>
<div v-if="result.n_sf_phases && result.n_sf_phases.length > 0" class="q-mb-sm">
<strong>各导线跳闸率</strong>
<span v-for="(rate, index) in result.n_sf_phases" :key="index" class="q-mr-md">
导线{{ index + 1 }}: {{ rate.toFixed(4) }} /(100km·a)
</span>
</div>
<div class="text-green-800 q-mt-md">{{ result.message }}</div>
</div>
</q-card-section>
</q-card>
</div>
@@ -374,7 +382,7 @@ const defaultParams: AllParameters = {
const params = reactive<AllParameters>(JSON.parse(JSON.stringify(defaultParams)))
const calculating = ref(false)
const result = ref<string | null>(null)
const result = ref<{ tripping_rate: string; n_sf_phases: number[]; message: string } | null>(null)
const error = ref<string | null>(null)
const logRef = ref<InstanceType<typeof LogComponent> | null>(null)
const fileInput = ref<HTMLInputElement | null>(null)
@@ -486,14 +494,11 @@ const calculate = async () => {
logRef.value?.addLog('info', '开始 EGM 计算(开发模式)...')
logRef.value?.addLog('info', '参数: 额定电压=750kV, 雷暴日=20d, 海拔=1000m')
logRef.value?.addLog('info', '计算完成')
result.value = JSON.stringify({
success: true,
message: '计算完成(开发模式)',
data: {
tripping_rate: '0.0581 次/(100km·a)',
parameters: params
}
}, null, 2)
result.value = {
tripping_rate: '0.0581 次/(100km·a)',
n_sf_phases: [0.0421, 0.0581, 0.0392],
message: '计算完成'
}
calculating.value = false
}
} catch (e: any) {
@@ -724,8 +729,13 @@ onMounted(() => {
// 接收计算结果
window.receiveResult = (res: { success: boolean; message: string; data?: any; error?: string }) => {
calculating.value = false
if (res.success) {
result.value = JSON.stringify(res, null, 2)
if (res.success && res.data) {
result.value = {
tripping_rate: res.data.tripping_rate || '',
n_sf_phases: res.data.n_sf_phases || [],
message: res.message || '计算完成'
}
logRef.value?.addLog('info', '计算完成')
} else {
error.value = res.error || res.message
}