77 lines
3.2 KiB
Vue
77 lines
3.2 KiB
Vue
|
|
<script setup lang="ts">
|
|||
|
|
import { reactive, ref } from 'vue'
|
|||
|
|
import { saveAiAlarmSetting, saveLineAlarmSetting } from '../api/platform'
|
|||
|
|
import type { AiAlarmSettingItem, LineAlarmSettingPayload } from '../types/platform'
|
|||
|
|
import { ensureSaveAuthorized } from '../utils/saveGuard'
|
|||
|
|
|
|||
|
|
defineProps<{ store: any; actions: any }>()
|
|||
|
|
|
|||
|
|
const lineAlarm = reactive<LineAlarmSettingPayload>({
|
|||
|
|
line_no: 1,
|
|||
|
|
over_limit_alarm: [
|
|||
|
|
{ category: '电压', limit: 180, delay: 180, output_node: '开出1', enabled: true },
|
|||
|
|
{ category: '电流', limit: 180, delay: 180, output_node: '开出1', enabled: true },
|
|||
|
|
{ category: '差流', limit: 180, delay: 180, output_node: '开出1', enabled: false },
|
|||
|
|
{ category: '频率', limit: 180, delay: 180, output_node: '开出1', enabled: false },
|
|||
|
|
],
|
|||
|
|
fault_alarm: [{ category: 'PT断线', delay: 180, output_node: '开出1', enabled: true }],
|
|||
|
|
})
|
|||
|
|
|
|||
|
|
const aiAlarm = reactive<AiAlarmSettingItem[]>([
|
|||
|
|
{
|
|||
|
|
channel_no: 1,
|
|||
|
|
singal_type: '4-20mA',
|
|||
|
|
limit_low: 0,
|
|||
|
|
limit_high: 20,
|
|||
|
|
delay: 180,
|
|||
|
|
output_node: '开出1',
|
|||
|
|
enabled: true,
|
|||
|
|
},
|
|||
|
|
])
|
|||
|
|
|
|||
|
|
const result = ref('未保存')
|
|||
|
|
const saving = ref(false)
|
|||
|
|
|
|||
|
|
async function save() {
|
|||
|
|
saving.value = true
|
|||
|
|
try {
|
|||
|
|
const guard = await ensureSaveAuthorized()
|
|||
|
|
if (!guard.ok) {
|
|||
|
|
result.value = guard.message
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
const [lineResponse, aiResponse] = await Promise.all([saveLineAlarmSetting(lineAlarm), saveAiAlarmSetting(aiAlarm)])
|
|||
|
|
result.value = `${lineResponse.msg} / ${aiResponse.msg}`
|
|||
|
|
} catch (error) {
|
|||
|
|
result.value = error instanceof Error ? error.message : '保存报警设置失败'
|
|||
|
|
} finally {
|
|||
|
|
saving.value = false
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
</script>
|
|||
|
|
|
|||
|
|
<template>
|
|||
|
|
<section class="panel">
|
|||
|
|
<h2>报警设置</h2>
|
|||
|
|
<div class="form-grid">
|
|||
|
|
<label>线路号<input v-model.number="lineAlarm.line_no" type="number" min="1" max="4" /></label>
|
|||
|
|
<label>电压越限<input v-model.number="lineAlarm.over_limit_alarm[0].limit" type="number" /></label>
|
|||
|
|
<label>电流越限<input v-model.number="lineAlarm.over_limit_alarm[1].limit" type="number" /></label>
|
|||
|
|
<label>差流越限<input v-model.number="lineAlarm.over_limit_alarm[2].limit" type="number" /></label>
|
|||
|
|
<label>频率越限<input v-model.number="lineAlarm.over_limit_alarm[3].limit" type="number" /></label>
|
|||
|
|
<label>动作延时<input v-model.number="lineAlarm.over_limit_alarm[0].delay" type="number" /></label>
|
|||
|
|
<label>输出节点<select v-model="lineAlarm.over_limit_alarm[0].output_node"><option>开出1</option><option>开出2</option></select></label>
|
|||
|
|
<label>PT断线延时<input v-model.number="lineAlarm.fault_alarm[0].delay" type="number" /></label>
|
|||
|
|
<label>AI通道号<input v-model.number="aiAlarm[0].channel_no" type="number" min="1" max="12" /></label>
|
|||
|
|
<label>AI信号类型<input v-model="aiAlarm[0].singal_type" /></label>
|
|||
|
|
<label>AI下限<input v-model.number="aiAlarm[0].limit_low" type="number" /></label>
|
|||
|
|
<label>AI上限<input v-model.number="aiAlarm[0].limit_high" type="number" /></label>
|
|||
|
|
</div>
|
|||
|
|
<div class="actions">
|
|||
|
|
<button class="primary" :disabled="saving" @click="save">{{ saving ? '保存中...' : '保存报警设置' }}</button>
|
|||
|
|
</div>
|
|||
|
|
<p>保存结果:{{ result }}</p>
|
|||
|
|
</section>
|
|||
|
|
</template>
|