2024-12-30 14:43:13 +08:00
|
|
|
<template>
|
|
|
|
|
<div class="tabs-container">
|
2025-02-13 16:15:26 +08:00
|
|
|
<el-tabs type="border-card" class="right-tabs" style="height: 100%">
|
|
|
|
|
<el-tab-pane label="电压通道">
|
2025-02-27 08:41:33 +08:00
|
|
|
<el-form :inline="true" :model="formInline" :disabled="!props.childForm[0].harmFlag">
|
|
|
|
|
<el-form-item label="次数">
|
|
|
|
|
<el-select
|
|
|
|
|
v-model="formInline.harm"
|
|
|
|
|
multiple
|
|
|
|
|
collapse-tags
|
|
|
|
|
collapse-tags-tooltip
|
|
|
|
|
style="width: 160px"
|
|
|
|
|
filterable
|
|
|
|
|
clearable
|
|
|
|
|
>
|
|
|
|
|
<el-option label="全部" value="0" />
|
|
|
|
|
<el-option v-for="item in 49" :key="item" :label="item + 1" :value="item + 1" />
|
|
|
|
|
</el-select>
|
|
|
|
|
</el-form-item>
|
|
|
|
|
<el-form-item label="含有率">
|
|
|
|
|
<el-input
|
|
|
|
|
v-model="formInline.famp"
|
|
|
|
|
type="number"
|
|
|
|
|
placeholder="含有率"
|
|
|
|
|
style="width: 80px"
|
|
|
|
|
clearable
|
|
|
|
|
/>
|
|
|
|
|
</el-form-item>
|
|
|
|
|
<el-form-item label="相角">
|
|
|
|
|
<el-input
|
|
|
|
|
v-model="formInline.fphase"
|
|
|
|
|
type="number"
|
|
|
|
|
placeholder="相角"
|
|
|
|
|
style="width: 80px"
|
|
|
|
|
clearable
|
|
|
|
|
/>
|
|
|
|
|
</el-form-item>
|
|
|
|
|
<el-form-item>
|
2025-02-27 15:09:09 +08:00
|
|
|
<el-button type="primary" :icon="Check" @click="onSubmit" size="small">确定</el-button>
|
|
|
|
|
<el-button type="primary" :icon="Delete" @click="empty(0)" size="small">清空表格</el-button>
|
2025-02-27 08:41:33 +08:00
|
|
|
</el-form-item>
|
|
|
|
|
</el-form>
|
2025-02-13 16:15:26 +08:00
|
|
|
<!-- 电压通道内容 -->
|
|
|
|
|
<div class="table-container">
|
2025-02-27 08:41:33 +08:00
|
|
|
<el-table :data="form[0].harmList" border stripe size="small">
|
|
|
|
|
<el-table-column prop="harm" align="center" label="次数" width="60" />
|
|
|
|
|
<el-table-column prop="famp" align="center" label="谐波含有率">
|
|
|
|
|
<template #default="{ row }">
|
2025-02-27 15:09:09 +08:00
|
|
|
<el-input type="number" v-if="row.show" v-model="row.famp" />
|
2025-02-27 08:41:33 +08:00
|
|
|
<span v-else>{{ row.famp }}%</span>
|
2025-02-13 16:15:26 +08:00
|
|
|
</template>
|
|
|
|
|
</el-table-column>
|
2025-02-27 08:41:33 +08:00
|
|
|
<el-table-column prop="fphase" label="谐波相角" align="center">
|
|
|
|
|
<template #default="{ row }">
|
2025-02-27 15:09:09 +08:00
|
|
|
<el-input type="number" v-if="row.show" v-model="row.fphase" />
|
2025-02-27 08:41:33 +08:00
|
|
|
<span v-else>{{ row.fphase }}°</span>
|
|
|
|
|
</template>
|
|
|
|
|
</el-table-column>
|
|
|
|
|
<el-table-column label="操作" align="center">
|
2025-02-18 16:36:54 +08:00
|
|
|
<template #default="{ row, $index }">
|
2025-02-27 08:41:33 +08:00
|
|
|
<el-button
|
|
|
|
|
type="primary"
|
|
|
|
|
link
|
|
|
|
|
:icon="EditPen"
|
|
|
|
|
v-if="!row.show"
|
|
|
|
|
@click="row.show = true"
|
|
|
|
|
>
|
|
|
|
|
编辑
|
|
|
|
|
</el-button>
|
|
|
|
|
<el-button type="primary" link :icon="Check" v-else @click="row.show = false">
|
|
|
|
|
保存
|
|
|
|
|
</el-button>
|
|
|
|
|
<el-button type="primary" link :icon="Delete" @click="HarmFlagDelete(0, $index)">
|
|
|
|
|
删除
|
|
|
|
|
</el-button>
|
2025-02-13 16:15:26 +08:00
|
|
|
</template>
|
|
|
|
|
</el-table-column>
|
|
|
|
|
</el-table>
|
2025-01-06 09:21:24 +08:00
|
|
|
</div>
|
2025-02-13 16:15:26 +08:00
|
|
|
</el-tab-pane>
|
|
|
|
|
</el-tabs>
|
|
|
|
|
<el-tabs type="border-card" style="height: 100%">
|
|
|
|
|
<el-tab-pane label="电流通道">
|
2025-02-27 08:41:33 +08:00
|
|
|
<el-form :inline="true" :model="formInline1" :disabled="!props.childForm[1].harmFlag">
|
|
|
|
|
<el-form-item label="次数">
|
|
|
|
|
<el-select
|
|
|
|
|
v-model="formInline1.harm"
|
|
|
|
|
multiple
|
|
|
|
|
collapse-tags
|
|
|
|
|
collapse-tags-tooltip
|
|
|
|
|
style="width: 160px"
|
|
|
|
|
filterable
|
|
|
|
|
clearable
|
|
|
|
|
>
|
|
|
|
|
<el-option label="全部" value="0" />
|
|
|
|
|
<el-option v-for="item in 49" :key="item" :label="item + 1" :value="item + 1" />
|
|
|
|
|
</el-select>
|
|
|
|
|
</el-form-item>
|
|
|
|
|
<el-form-item label="含有率">
|
|
|
|
|
<el-input
|
|
|
|
|
v-model="formInline1.famp"
|
|
|
|
|
type="number"
|
|
|
|
|
placeholder="含有率"
|
|
|
|
|
style="width: 80px"
|
|
|
|
|
clearable
|
|
|
|
|
/>
|
|
|
|
|
</el-form-item>
|
|
|
|
|
<el-form-item label="相角">
|
|
|
|
|
<el-input
|
|
|
|
|
v-model="formInline1.fphase"
|
|
|
|
|
type="number"
|
|
|
|
|
placeholder="相角"
|
|
|
|
|
style="width: 80px"
|
|
|
|
|
clearable
|
|
|
|
|
/>
|
|
|
|
|
</el-form-item>
|
|
|
|
|
<el-form-item>
|
2025-02-28 13:58:15 +08:00
|
|
|
<el-button type="primary" :icon="Check" @click="onSubmit1" size="small">确定</el-button>
|
|
|
|
|
<el-button type="primary" :icon="Delete" @click="empty(1)" size="small">清空表格</el-button>
|
2025-02-27 08:41:33 +08:00
|
|
|
</el-form-item>
|
|
|
|
|
</el-form>
|
2025-02-13 16:15:26 +08:00
|
|
|
<!-- 电流通道内容 -->
|
|
|
|
|
<div class="table-container">
|
2025-02-27 08:41:33 +08:00
|
|
|
<el-table :data="form[1].harmList" border stripe size="small">
|
|
|
|
|
<el-table-column prop="harm" align="center" label="次数" width="60" />
|
|
|
|
|
<el-table-column prop="famp" align="center" label="谐波含有率">
|
|
|
|
|
<template #default="{ row }">
|
2025-02-27 15:09:09 +08:00
|
|
|
<el-input type="number" v-if="row.show" v-model="row.famp" />
|
2025-02-27 08:41:33 +08:00
|
|
|
<span v-else>{{ row.famp }}%</span>
|
2025-02-13 16:15:26 +08:00
|
|
|
</template>
|
|
|
|
|
</el-table-column>
|
2025-02-27 08:41:33 +08:00
|
|
|
<el-table-column prop="fphase" label="谐波相角" align="center">
|
|
|
|
|
<template #default="{ row }">
|
2025-02-27 15:09:09 +08:00
|
|
|
<el-input type="number" v-if="row.show" v-model="row.fphase" />
|
2025-02-27 08:41:33 +08:00
|
|
|
<span v-else>{{ row.fphase }}°</span>
|
2025-02-13 16:15:26 +08:00
|
|
|
</template>
|
|
|
|
|
</el-table-column>
|
2025-02-27 08:41:33 +08:00
|
|
|
<el-table-column label="操作" align="center">
|
2025-02-18 16:36:54 +08:00
|
|
|
<template #default="{ row, $index }">
|
2025-02-27 08:41:33 +08:00
|
|
|
<el-button
|
|
|
|
|
type="primary"
|
|
|
|
|
link
|
|
|
|
|
:icon="EditPen"
|
|
|
|
|
v-if="!row.show"
|
|
|
|
|
@click="row.show = true"
|
|
|
|
|
>
|
|
|
|
|
编辑
|
|
|
|
|
</el-button>
|
|
|
|
|
<el-button type="primary" link :icon="Check" v-else @click="row.show = false">
|
|
|
|
|
保存
|
|
|
|
|
</el-button>
|
|
|
|
|
<el-button type="primary" link :icon="Delete" @click="HarmFlagDelete(1, $index)">
|
|
|
|
|
删除
|
|
|
|
|
</el-button>
|
2025-02-13 16:15:26 +08:00
|
|
|
</template>
|
|
|
|
|
</el-table-column>
|
|
|
|
|
</el-table>
|
2025-01-06 09:21:24 +08:00
|
|
|
</div>
|
2025-02-13 16:15:26 +08:00
|
|
|
</el-tab-pane>
|
|
|
|
|
</el-tabs>
|
2024-12-30 14:43:13 +08:00
|
|
|
</div>
|
2025-02-13 16:15:26 +08:00
|
|
|
</template>
|
2024-12-30 14:43:13 +08:00
|
|
|
|
|
|
|
|
<script setup lang="ts">
|
2025-02-27 08:41:33 +08:00
|
|
|
import { Check, Delete, EditPen, CopyDocument } from '@element-plus/icons-vue'
|
2025-02-13 16:15:26 +08:00
|
|
|
import { ref } from 'vue'
|
2025-02-18 16:36:54 +08:00
|
|
|
const props = defineProps({
|
|
|
|
|
childForm: {
|
2025-02-27 08:41:33 +08:00
|
|
|
type: Array as any,
|
2025-02-18 16:36:54 +08:00
|
|
|
required: true
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
|
2025-02-20 16:39:15 +08:00
|
|
|
const form: any = computed({
|
2025-02-18 16:36:54 +08:00
|
|
|
get() {
|
|
|
|
|
return props.childForm
|
|
|
|
|
},
|
|
|
|
|
set(value) {}
|
|
|
|
|
})
|
2025-02-27 08:41:33 +08:00
|
|
|
const formInline = ref({
|
|
|
|
|
harm: [],
|
|
|
|
|
famp: '',
|
|
|
|
|
fphase: ''
|
|
|
|
|
})
|
|
|
|
|
const formInline1 = ref({
|
|
|
|
|
harm: [],
|
|
|
|
|
famp: '',
|
|
|
|
|
fphase: ''
|
|
|
|
|
})
|
2024-12-30 14:43:13 +08:00
|
|
|
// 定义表格数据项的类型
|
|
|
|
|
interface TableItem {
|
2025-02-13 16:15:26 +08:00
|
|
|
date: string
|
|
|
|
|
harmonicRate?: string
|
|
|
|
|
harmonicPhase?: string
|
|
|
|
|
name?: string
|
2024-12-30 14:43:13 +08:00
|
|
|
}
|
2025-02-27 08:41:33 +08:00
|
|
|
const empty = (index: number) => {
|
|
|
|
|
props.childForm[index].harmList = []
|
|
|
|
|
}
|
|
|
|
|
const onSubmit = () => {
|
|
|
|
|
console.log('🚀 ~ onSubmit ~ props.childForm[0]:', props.childForm[0].harmList)
|
|
|
|
|
if (formInline.value.harm.length == 0 || formInline.value.famp == '' || formInline.value.fphase == '') {
|
|
|
|
|
ElMessage.warning('请填写值!')
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
if (formInline.value.harm.includes('0')) {
|
|
|
|
|
props.childForm[0].harmList = []
|
|
|
|
|
for (let i = 2; i < 51; i++) {
|
|
|
|
|
props.childForm[0].harmList.push({
|
|
|
|
|
harm: i, //间谐波次数
|
|
|
|
|
famp: formInline.value.famp, //间谐波含有率
|
|
|
|
|
fphase: formInline.value.fphase // 间谐波相角
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
formInline.value.harm.forEach((item: any) => {
|
|
|
|
|
props.childForm[0].harmList.push({
|
|
|
|
|
harm: item, //间谐波次数
|
|
|
|
|
famp: formInline.value.famp, //间谐波含有率
|
|
|
|
|
fphase: formInline.value.fphase // 间谐波相角
|
|
|
|
|
})
|
|
|
|
|
})
|
|
|
|
|
const seen = new Set()
|
|
|
|
|
const uniqueData = []
|
|
|
|
|
|
|
|
|
|
// 反向遍历数组
|
|
|
|
|
for (let i = props.childForm[0].harmList.length - 1; i >= 0; i--) {
|
|
|
|
|
const item = props.childForm[0].harmList[i]
|
|
|
|
|
// 如果 harm 还未出现过,则添加到结果数组
|
|
|
|
|
if (!seen.has(item.harm)) {
|
|
|
|
|
seen.add(item.harm)
|
|
|
|
|
uniqueData.unshift(item) // 添加到结果数组的开头
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
props.childForm[0].harmList = uniqueData.sort((a, b) => a.harm - b.harm)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
const onSubmit1 = () => {
|
|
|
|
|
if (formInline1.value.harm.length == 0 || formInline1.value.famp == '' || formInline1.value.fphase == '') {
|
|
|
|
|
ElMessage.warning('请填写值!')
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
if (formInline1.value.harm.includes('0')) {
|
|
|
|
|
props.childForm[1].harmList = []
|
|
|
|
|
for (let i = 2; i < 51; i++) {
|
|
|
|
|
props.childForm[1].harmList.push({
|
|
|
|
|
harm: i, //间谐波次数
|
|
|
|
|
famp: formInline1.value.famp, //间谐波含有率
|
|
|
|
|
fphase: formInline1.value.fphase // 间谐波相角
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
formInline1.value.harm.forEach((item: any) => {
|
|
|
|
|
props.childForm[1].harmList.push({
|
|
|
|
|
harm: item, //间谐波次数
|
|
|
|
|
famp: formInline1.value.famp, //间谐波含有率
|
|
|
|
|
fphase: formInline1.value.fphase // 间谐波相角
|
|
|
|
|
})
|
|
|
|
|
})
|
|
|
|
|
const seen = new Set()
|
|
|
|
|
const uniqueData = []
|
|
|
|
|
|
|
|
|
|
// 反向遍历数组
|
|
|
|
|
for (let i = props.childForm[1].harmList.length - 1; i >= 0; i--) {
|
|
|
|
|
const item = props.childForm[1].harmList[i]
|
|
|
|
|
// 如果 harm 还未出现过,则添加到结果数组
|
|
|
|
|
if (!seen.has(item.harm)) {
|
|
|
|
|
seen.add(item.harm)
|
|
|
|
|
uniqueData.unshift(item) // 添加到结果数组的开头
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
props.childForm[1].harmList = uniqueData.sort((a, b) => a.harm - b.harm)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
// 删除
|
|
|
|
|
const HarmFlagDelete = (index: number, number: number) => {
|
|
|
|
|
props.childForm[index].harmList.splice(number, 1)
|
|
|
|
|
}
|
2024-12-30 14:43:13 +08:00
|
|
|
</script>
|
|
|
|
|
|
2025-02-20 16:39:15 +08:00
|
|
|
<style lang="scss" scoped>
|
2024-12-30 14:43:13 +08:00
|
|
|
.tabs-container {
|
2025-02-13 16:15:26 +08:00
|
|
|
display: flex;
|
|
|
|
|
justify-content: space-between; /* 使两个 el-tabs 之间有间距 */
|
|
|
|
|
height: 100%;
|
2024-12-30 14:43:13 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.right-tabs {
|
2025-02-13 16:15:26 +08:00
|
|
|
flex: 1; /* 使两个 el-tabs 占据相同的空间 */
|
|
|
|
|
margin-right: 10px; /* 可选:添加右侧间距 */
|
2024-12-30 14:43:13 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.el-tabs {
|
2025-02-13 16:15:26 +08:00
|
|
|
flex: 1; /* 使两个 el-tabs 占据相同的空间 */
|
2024-12-30 14:43:13 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.table-container {
|
2025-02-13 16:15:26 +08:00
|
|
|
display: flex;
|
|
|
|
|
justify-content: space-between; /* 使两个表格之间有间距 */
|
|
|
|
|
width: 100%;
|
2024-12-30 14:43:13 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.half-width-table {
|
2025-02-13 16:15:26 +08:00
|
|
|
flex: 1; /* 使两个表格占据相同的空间 */
|
|
|
|
|
margin-right: 10px; /* 可选:添加表格之间的间距 */
|
2024-12-30 14:43:13 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.half-width-table:last-child {
|
2025-02-13 16:15:26 +08:00
|
|
|
margin-right: 0; /* 最后一个表格不需要右侧间距 */
|
2024-12-30 14:43:13 +08:00
|
|
|
}
|
|
|
|
|
|
2025-01-06 09:21:24 +08:00
|
|
|
.input-label-container {
|
2025-02-13 16:15:26 +08:00
|
|
|
display: flex;
|
|
|
|
|
align-items: center; /* 垂直居中对齐 */
|
2025-01-06 09:21:24 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.input-label-container label {
|
2025-02-13 16:15:26 +08:00
|
|
|
margin-left: 5px; /* 添加标签与输入框之间的间距 */
|
2025-01-06 09:21:24 +08:00
|
|
|
}
|
2025-02-20 16:39:15 +08:00
|
|
|
// 全局css 加上以下代码,可以隐藏上下箭头
|
|
|
|
|
|
|
|
|
|
// 取消input的上下箭头
|
2025-02-13 16:15:26 +08:00
|
|
|
</style>
|