179 lines
5.1 KiB
Vue
179 lines
5.1 KiB
Vue
<template>
|
|
<div class="editor-container">
|
|
<div class="left-editor">
|
|
<!-- 左侧编辑区域内容 -->
|
|
<!-- <canvas ref="canvas" width="700" height="165"></canvas> -->
|
|
<Line :options="chartsData" style="width: 700px; height: 165px" ref="lineRef" />
|
|
</div>
|
|
<div class="right-editor">
|
|
<!-- 右侧编辑区域内容 -->
|
|
<el-form :inline="true" label-width="auto" :model="form" class="form-two">
|
|
<el-form-item :label="`电压有效值(${valueCode == 'Absolute' ? 'V' : '%'})`">
|
|
<el-input type="number" v-model="form[0].famp" :disabled="!form[0].channelFlag" onkeypress="return (/[\d.]/.test(String.fromCharCode(event.keyCode)))" @input="validateInput(0, 'famp')"/>
|
|
</el-form-item>
|
|
<el-form-item label="电压相角(°)">
|
|
<el-input type="number" v-model="form[0].fphase" :disabled="!form[0].channelFlag" onkeypress="return (/[\d-]/.test(String.fromCharCode(event.keyCode)))" @input="validateInput(0, 'fphase')"/>
|
|
</el-form-item>
|
|
<el-form-item :label="`电流有效值(${valueCode == 'Absolute' ? 'A' : '%'})`">
|
|
<el-input type="number" v-model="form[1].famp" :disabled="!form[1].channelFlag" onkeypress="return (/[\d.]/.test(String.fromCharCode(event.keyCode)))" @input="validateInput(1, 'famp')"/>
|
|
</el-form-item>
|
|
|
|
<el-form-item label="电流相角(°)">
|
|
<el-input type="number" v-model="form[1].fphase" :disabled="!form[1].channelFlag" onkeypress="return (/[\d-]/.test(String.fromCharCode(event.keyCode)))" @input="validateInput(1, 'fphase')"/>
|
|
</el-form-item>
|
|
</el-form>
|
|
</div>
|
|
</div>
|
|
</template>
|
|
|
|
<script setup lang="ts">
|
|
import { onMounted, ref, watch } from 'vue'
|
|
import Line from '@/components/echarts/line/index.vue'
|
|
// const emit = defineEmits(['update'])
|
|
const props = defineProps({
|
|
childForm: {
|
|
type: Array,
|
|
required: true
|
|
},
|
|
valueCode: {
|
|
type: String,
|
|
required: true
|
|
}
|
|
})
|
|
|
|
const lineRef: any = ref()
|
|
const chartsData = ref({})
|
|
// 解构并创建响应式变量
|
|
const form: any = computed({
|
|
get() {
|
|
return props.childForm
|
|
},
|
|
set(value) {}
|
|
})
|
|
|
|
onMounted(() => {
|
|
drawSineWave()
|
|
})
|
|
|
|
function drawSineWave() {
|
|
chartsData.value = {
|
|
tooltip: {
|
|
show: false
|
|
},
|
|
legend: {
|
|
show: false
|
|
},
|
|
grid: {
|
|
left: 0,
|
|
right: 0,
|
|
top: '10px',
|
|
bottom: '10px'
|
|
},
|
|
xAxis: {
|
|
name: '',
|
|
|
|
boundaryGap: false,
|
|
splitLine: {
|
|
show: true,
|
|
lineStyle: {
|
|
type: 'dashed',
|
|
color: ['#cfcfcf']
|
|
}
|
|
},
|
|
axisLabel: {
|
|
show: false
|
|
}
|
|
},
|
|
yAxis: {
|
|
name: '',
|
|
splitLine: {
|
|
lineStyle: {
|
|
// 使用深浅的间隔色
|
|
color: ['#ccc'],
|
|
type: 'solid',
|
|
opacity: 1
|
|
}
|
|
}
|
|
},
|
|
options: {
|
|
dataZoom: null,
|
|
series: [
|
|
{
|
|
name: '',
|
|
type: 'line',
|
|
data: [10, -10, 10, -10, 10, -10, 10, -10, 10, -10, 10],
|
|
showSymbol: false,
|
|
smooth: true
|
|
}
|
|
]
|
|
}
|
|
}
|
|
}
|
|
|
|
const validateInput = (index: number, field: string) => {
|
|
const value = form.value[index][field];
|
|
if (index === 0) {
|
|
if (field === 'famp') {
|
|
if (value < 0) {
|
|
ElMessage.warning("电压不能低于0V")
|
|
form.value[index][field] = 0;
|
|
} else if (value > 380) {
|
|
ElMessage.warning("电压不能高于380V")
|
|
form.value[index][field] = 380;
|
|
}
|
|
}
|
|
}
|
|
if (index === 1) {
|
|
if (field === 'famp') {
|
|
if (value < 0) {
|
|
if(valueCode=== 'Absolute') {
|
|
ElMessage.warning("电流不能低于0A")
|
|
}else{
|
|
ElMessage.warning("电流不能低于0%")
|
|
}
|
|
form.value[index][field] = 0;
|
|
} else if (value > 20) {
|
|
if(valueCode=== 'Absolute') {
|
|
ElMessage.warning("电流不能高于20A")
|
|
form.value[index][field] = 20;
|
|
}else if(value > 200){
|
|
ElMessage.warning("电流不能高于200%")
|
|
form.value[index][field] = 200;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (field === 'fphase') {
|
|
if (value < -360) {
|
|
ElMessage.warning("相角不能低于-360°")
|
|
form.value[index][field] = -360;
|
|
} else if (value > 360) {
|
|
ElMessage.warning("相角不能高于360°")
|
|
form.value[index][field] = 360;
|
|
}
|
|
}
|
|
}
|
|
</script>
|
|
|
|
<style scoped>
|
|
canvas {
|
|
border: 1px solid #ccc;
|
|
}
|
|
|
|
.editor-container {
|
|
display: flex;
|
|
height: 100%;
|
|
}
|
|
|
|
.left-editor {
|
|
flex: 1;
|
|
margin-left: 20px;
|
|
}
|
|
|
|
.right-editor {
|
|
width: 600px;
|
|
display: flex;
|
|
align-items: center;
|
|
}
|
|
</style>
|