feat: 优化计算结果展示并添加交直流标识

在参数表单中重新排列计算结果和日志组件的位置,将跳闸率显示格式化为4位小数并添加单位。同时在后端日志中添加交直流标识输出,并自动根据电压等级更新ac_or_dc字段。
This commit is contained in:
dmy
2026-03-03 15:07:50 +08:00
parent 355fb2d689
commit b34da837e2
2 changed files with 24 additions and 9 deletions

View File

@@ -152,6 +152,7 @@ def run_egm(para: Parameter) -> dict:
logger.info(f"挂点处保护角{shield_angle_at_avg_height:.3f}°") logger.info(f"挂点处保护角{shield_angle_at_avg_height:.3f}°")
logger.debug(f"最低相防护标识{rg_type}g表示地面c表示下导线") logger.debug(f"最低相防护标识{rg_type}g表示地面c表示下导线")
rated_voltage = para.rated_voltage rated_voltage = para.rated_voltage
logger.info(f"交、直流标识{para.ac_or_dc}")
for u_bar in range(voltage_n): # 计算不同工作电压下的跳闸率 for u_bar in range(voltage_n): # 计算不同工作电压下的跳闸率
if para.ac_or_dc=="AC": if para.ac_or_dc=="AC":
# TODO 需要区分交、直流 # TODO 需要区分交、直流

View File

@@ -318,10 +318,7 @@
</q-card-section> </q-card-section>
</q-card> </q-card>
<!-- 运行日志 --> <!-- 计算结果 -->
<LogComponent ref="logRef" />
<!-- 计算结果 -->
<q-card v-if="result" class="q-mt-md shadow-2 bg-green-50"> <q-card v-if="result" class="q-mt-md shadow-2 bg-green-50">
<q-card-section class="bg-green-100"> <q-card-section class="bg-green-100">
<div class="text-h6 text-green-900 flex items-center gap-2"> <div class="text-h6 text-green-900 flex items-center gap-2">
@@ -330,8 +327,8 @@
</div> </div>
</q-card-section> </q-card-section>
<q-card-section> <q-card-section>
<div class="text-body1"> <div class="text-body1 result-text">
<div class="q-mb-sm"><strong>跳闸率</strong>{{ result.tripping_rate }}</div> <div class="q-mb-sm"><strong>跳闸率</strong>{{ result.tripping_rate.toFixed(4) }} /(100km·a)</div>
<div v-if="result.n_sf_phases && result.n_sf_phases.length > 0" class="q-mb-sm"> <div v-if="result.n_sf_phases && result.n_sf_phases.length > 0" class="q-mb-sm">
<strong>各导线跳闸率</strong> <strong>各导线跳闸率</strong>
<span v-for="(rate, index) in result.n_sf_phases" :key="index" class="q-mr-md"> <span v-for="(rate, index) in result.n_sf_phases" :key="index" class="q-mr-md">
@@ -342,6 +339,10 @@
</div> </div>
</q-card-section> </q-card-section>
</q-card> </q-card>
<!-- 运行日志 -->
<LogComponent ref="logRef" />
</div> </div>
</q-page> </q-page>
</q-page-container> </q-page-container>
@@ -382,7 +383,7 @@ const defaultParams: AllParameters = {
const params = reactive<AllParameters>(JSON.parse(JSON.stringify(defaultParams))) const params = reactive<AllParameters>(JSON.parse(JSON.stringify(defaultParams)))
const calculating = ref(false) const calculating = ref(false)
const result = ref<{ tripping_rate: string; n_sf_phases: number[]; message: string } | null>(null) const result = ref<{ tripping_rate: number; n_sf_phases: number[]; message: string } | null>(null)
const error = ref<string | null>(null) const error = ref<string | null>(null)
const logRef = ref<InstanceType<typeof LogComponent> | null>(null) const logRef = ref<InstanceType<typeof LogComponent> | null>(null)
const fileInput = ref<HTMLInputElement | null>(null) const fileInput = ref<HTMLInputElement | null>(null)
@@ -397,6 +398,15 @@ const currentType = computed(() => {
return params.parameter.rated_voltage.includes('±') ? 'DC' : 'AC' return params.parameter.rated_voltage.includes('±') ? 'DC' : 'AC'
}) })
// 监听电压等级变化,同步更新 ac_or_dc 字段
watch(
() => params.parameter.rated_voltage,
(newVoltage) => {
params.parameter.ac_or_dc = newVoltage.includes('±') ? 'DC' : 'AC'
},
{ immediate: true }
)
// 雷暴日与地闪密度相互转换公式ng = 0.023 * td^3 // 雷暴日与地闪密度相互转换公式ng = 0.023 * td^3
// 标志位避免循环更新 // 标志位避免循环更新
let isUpdatingFromWatch = false let isUpdatingFromWatch = false
@@ -495,7 +505,7 @@ const calculate = async () => {
logRef.value?.addLog('info', '参数: 额定电压=750kV, 雷暴日=20d, 海拔=1000m') logRef.value?.addLog('info', '参数: 额定电压=750kV, 雷暴日=20d, 海拔=1000m')
logRef.value?.addLog('info', '计算完成') logRef.value?.addLog('info', '计算完成')
result.value = { result.value = {
tripping_rate: '0.0581 次/(100km·a)', tripping_rate: 0.0581,
n_sf_phases: [0.0421, 0.0581, 0.0392], n_sf_phases: [0.0421, 0.0581, 0.0392],
message: '计算完成' message: '计算完成'
} }
@@ -731,7 +741,7 @@ onMounted(() => {
calculating.value = false calculating.value = false
if (res.success && res.data) { if (res.success && res.data) {
result.value = { result.value = {
tripping_rate: res.data.tripping_rate || '', tripping_rate: res.data.avr_n_sf || 0,
n_sf_phases: res.data.n_sf_phases || [], n_sf_phases: res.data.n_sf_phases || [],
message: res.message || '计算完成' message: res.message || '计算完成'
} }
@@ -749,4 +759,8 @@ onUnmounted(() => {
</script> </script>
<style scoped> <style scoped>
.result-text {
user-select: text;
cursor: text;
}
</style> </style>