比对检测计划
This commit is contained in:
@@ -12,13 +12,12 @@
|
||||
<el-input v-model='formContent.name' placeholder="请输入设备名称" :disabled="scene === '1' || formContent.importFlag == 1" maxlength="32" show-word-limit />
|
||||
</el-form-item>
|
||||
<el-form-item label='设备类型' prop='devType'>
|
||||
<el-select v-model="formContent.devType" filterable clearable placeholder="请选择设备类型" @change="handleDevTypeChange" :disabled="formContent.importFlag == 1">
|
||||
<el-select v-model="formContent.devType" filterable clearable placeholder="请选择设备类型" @change="handleDevTypeChange" :disabled="formContent.importFlag == 1">
|
||||
<el-option
|
||||
v-for="item in devTypeOptions"
|
||||
:key="item.id"
|
||||
:label="item.name"
|
||||
:value="item.id"
|
||||
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
@@ -39,7 +38,6 @@
|
||||
:key="item.id"
|
||||
:label="item.name"
|
||||
:value="item.id"
|
||||
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
@@ -51,12 +49,25 @@
|
||||
:disabled="formContent.importFlag == 1"
|
||||
/>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="固件版本" prop="hardwareVersion" v-if="scene === '0'">
|
||||
<el-input v-model="formContent.hardwareVersion" placeholder="请输入固件版本"/>
|
||||
<el-select v-model="formContent.hardwareVersion" clearable placeholder="请选择固件版本" filterable allow-create>
|
||||
<el-option
|
||||
v-for="item in selectOptions['hardwareVersion']"
|
||||
:key="item.value"
|
||||
:label="item.label"
|
||||
:value="item.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="软件版本" prop="softwareVersion" v-if="scene === '0'">
|
||||
<el-input v-model="formContent.softwareVersion" placeholder="请输入软件版本"/>
|
||||
<el-select v-model="formContent.softwareVersion" clearable placeholder="请选择软件版本" filterable allow-create>
|
||||
<el-option
|
||||
v-for="item in selectOptions['softwareVersion']"
|
||||
:key="item.value"
|
||||
:label="item.label"
|
||||
:value="item.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label='定检日期' prop='inspectDate' v-if="MonIsShow">
|
||||
<el-date-picker
|
||||
@@ -135,14 +146,35 @@
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label='所属地市' prop='cityName' clearable placeholder="请输入所属地市" v-if="MonIsShow">
|
||||
<el-input v-model='formContent.cityName' :disabled="formContent.importFlag == 1"/>
|
||||
<el-form-item label="所属地市" prop="cityName" v-if="MonIsShow">
|
||||
<el-select v-model="formContent.cityName" clearable placeholder="请选择所属地市" :disabled="formContent.importFlag == 1" filterable allow-create>
|
||||
<el-option
|
||||
v-for="item in selectOptions['cityName']"
|
||||
:key="item.value"
|
||||
:label="item.label"
|
||||
:value="item.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label='所属供电公司' prop='gdName' clearable placeholder="请输入所属供电公司" v-if="MonIsShow">
|
||||
<el-input v-model='formContent.gdName' :disabled="formContent.importFlag == 1"/>
|
||||
<el-form-item label="所属供电公司" prop="gdName" v-if="MonIsShow">
|
||||
<el-select v-model="formContent.gdName" clearable placeholder="请选择所属供电公司" :disabled="formContent.importFlag == 1" filterable allow-create>
|
||||
<el-option
|
||||
v-for="item in selectOptions['gdName']"
|
||||
:key="item.value"
|
||||
:label="item.label"
|
||||
:value="item.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label='所属电站' prop='subName' clearable placeholder="请输入所属电站" v-if="MonIsShow">
|
||||
<el-input v-model='formContent.subName' :disabled="formContent.importFlag == 1"/>
|
||||
<el-form-item label="所属电站" prop="subName" v-if="MonIsShow">
|
||||
<el-select v-model="formContent.subName" clearable placeholder="请选择所属电站" :disabled="formContent.importFlag == 1" filterable allow-create>
|
||||
<el-option
|
||||
v-for="item in selectOptions['subName']"
|
||||
:key="item.value"
|
||||
:label="item.label"
|
||||
:value="item.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item v-auth.device="'factorFlag'" label="是否支持系数校准" prop='factorFlag' v-if="scene === '1'">
|
||||
<el-radio-group v-model="formContent.factorFlag">
|
||||
@@ -155,7 +187,7 @@
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="监测点台账信息" v-if="MonIsShow">
|
||||
<!-- 监测点台账信息 tab pane -->
|
||||
<MonitorTable @getParameter="getParameter" :DevFormContent = "formContent" :tableHeight="monitorTableHeight"></MonitorTable>
|
||||
<MonitorTable @getParameter="getParameter" :DevFormContent = "formContent" :tableHeight="monitorTableHeight" :selectOptions = "selectOptions"></MonitorTable>
|
||||
</el-tab-pane>
|
||||
</el-tabs>
|
||||
<template #footer>
|
||||
@@ -171,7 +203,7 @@
|
||||
import {dialogBig} from '@/utils/elementBind'
|
||||
import {type Device} from '@/api/device/interface/device'
|
||||
import {ElMessage, type FormItemRule} from 'element-plus'
|
||||
import {addPqDev, updatePqDev} from '@/api/device/device'
|
||||
import {addPqDev, updatePqDev,getSelectOptions} from '@/api/device/device'
|
||||
import {computed, reactive, type Ref, ref, watchEffect, nextTick} from 'vue'
|
||||
import {useDictStore} from '@/stores/modules/dict'
|
||||
import {CirclePlus, Delete, EditPen} from '@element-plus/icons-vue'
|
||||
@@ -198,6 +230,11 @@ const dialogFormRef = ref()
|
||||
const createDateTitle = ref('')
|
||||
const activeTab = ref('0') // '0' 对应第一个 tab
|
||||
const monitorTableHeight = ref(375) // 默认高度
|
||||
|
||||
const selectOptions = ref<Record<string, Device.SelectOption[]>>({})
|
||||
|
||||
|
||||
|
||||
const pqChannelArray = ref([
|
||||
{
|
||||
value: '1',
|
||||
@@ -348,8 +385,8 @@ const rules = computed(() => {
|
||||
}
|
||||
if (scene.value !== '0') {
|
||||
dynamicRules.name = [{required: true, message: '设备名称必填!', trigger: 'blur'}];
|
||||
dynamicRules.hardwareVersion = [{required: true, message: '固件版本必填!', trigger: 'blur'}];
|
||||
dynamicRules.softwareVersion = [{required: true, message: '软件版本必填!', trigger: 'blur'}];
|
||||
dynamicRules.hardwareVersion = [{required: true, message: '固件版本必选!', trigger: 'change'}];
|
||||
dynamicRules.softwareVersion = [{required: true, message: '软件版本必选!', trigger: 'change'}];
|
||||
dynamicRules.manufacturer = [{required: true, message: '生产厂家必选!', trigger: 'change'}];
|
||||
|
||||
}
|
||||
@@ -361,9 +398,9 @@ const rules = computed(() => {
|
||||
|
||||
if(mode.value === '比对式'){
|
||||
dynamicRules.inspectDate = [{required: true, message: '定检日期必填!', trigger: 'blur'}];
|
||||
dynamicRules.cityName = [{required: true, message: '所属地市必填!', trigger: 'blur'}];
|
||||
dynamicRules.gdName = [{required: true, message: '所属供电公司必填!', trigger: 'blur'}];
|
||||
dynamicRules.subName = [{required: true, message: '所属电站必填!', trigger: 'blur'}];
|
||||
dynamicRules.cityName = [{required: true, message: '所属地市必选!', trigger: 'change'}];
|
||||
dynamicRules.gdName = [{required: true, message: '所属供电公司必选!', trigger: 'change'}];
|
||||
dynamicRules.subName = [{required: true, message: '所属电站必选!', trigger: 'change'}];
|
||||
}
|
||||
|
||||
|
||||
@@ -473,6 +510,21 @@ const open = async (sign: string, data: Device.ResPqDev, currentMode: string, cu
|
||||
activeTab.value = '0' // 强制回到第一个 tab
|
||||
|
||||
if (currentMode === '比对式') {
|
||||
const patternItem = dictStore.getDictData('Pattern').find(item => item.name === currentMode)
|
||||
if (patternItem) {
|
||||
const { data } = await getSelectOptions({ pattern: patternItem.id }) as { data: Record<string, any[]> }
|
||||
|
||||
// 遍历 data 的所有字段并映射为 { label, value }
|
||||
for (const key in data) {
|
||||
if (Array.isArray(data[key])) {
|
||||
selectOptions.value[key] = data[key].map((value: string) => ({
|
||||
label: value,
|
||||
value: value
|
||||
}))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
createDateTitle.value = '投运日期'
|
||||
DevIsShow.value = false
|
||||
MonIsShow.value = true
|
||||
@@ -555,9 +607,9 @@ const handleDevTypeChange = (value: string) => {
|
||||
|
||||
const handleInput = (value: string) => {
|
||||
// 在这里处理选中事件的逻辑
|
||||
if (scene.value === '1') {
|
||||
//if (scene.value === '1') {
|
||||
formContent.name = value
|
||||
}
|
||||
//}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -16,15 +16,36 @@
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="所属母线" prop="busbar" placeholder="请输入所属母线" >
|
||||
<el-input v-model="formContent.busbar" />
|
||||
</el-form-item>
|
||||
<el-form-item label="PT变比" prop="pt" placeholder="请输入PT变比" >
|
||||
<el-input v-model="formContent.pt" />
|
||||
</el-form-item>
|
||||
<el-form-item label="CT变比" prop="ct" placeholder="请输入CT变比" >
|
||||
<el-input v-model="formContent.ct" />
|
||||
</el-form-item>
|
||||
<el-form-item label="所属母线" prop="busbar">
|
||||
<el-select v-model="formContent.busbar" clearable placeholder="请选择所属母线" filterable allow-create>
|
||||
<el-option
|
||||
v-for="item in selectOptions['busbar']"
|
||||
:key="item.value"
|
||||
:label="item.label"
|
||||
:value="item.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="PT变比" prop="pt">
|
||||
<el-select v-model="formContent.pt" clearable placeholder="请选择PT变比" filterable allow-create>
|
||||
<el-option
|
||||
v-for="item in selectOptions['pt']"
|
||||
:key="item.value"
|
||||
:label="item.label"
|
||||
:value="item.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="CT变比" prop="ct">
|
||||
<el-select v-model="formContent.ct" clearable placeholder="请选择CT变比" filterable allow-create>
|
||||
<el-option
|
||||
v-for="item in selectOptions['ct']"
|
||||
:key="item.value"
|
||||
:label="item.label"
|
||||
:value="item.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label='接线方式' prop='connection' >
|
||||
<el-select v-model="formContent.connection" clearable placeholder="请选择接线方式">
|
||||
<el-option
|
||||
@@ -36,7 +57,7 @@
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label='统计间隔' prop='statInterval' >
|
||||
<el-select v-model="formContent.statInterval" clearable placeholder="请选择统计间隔">
|
||||
<el-select v-model="formContent.statInterval" clearable placeholder="请选择统计间隔" >
|
||||
<el-option
|
||||
v-for="item in dictStore.getDictData('Dev_Chns')"
|
||||
:key="item.id"
|
||||
@@ -76,6 +97,7 @@
|
||||
const lineNum = ref<{ id: number; name: string }[]>([])
|
||||
const originalNum = ref<number | null>(null) // 存储编辑前的 num 值
|
||||
const monitorTable = ref<any[]>()
|
||||
const selectOptions = ref<Record<string, Device.SelectOption[]>>({})
|
||||
// 定义弹出组件元信息
|
||||
const dialogFormRef = ref()
|
||||
function useMetaInfo() {
|
||||
@@ -131,15 +153,15 @@ const resetFormContent = () => {
|
||||
name : [{ required: true, message: '监测点名称必填!', trigger: 'blur' }],
|
||||
num:[ { required: true, message: '线路号必选', trigger: 'change' }],
|
||||
pt: [
|
||||
{ required: true, message: 'PT变比必填!', trigger: 'blur' },
|
||||
{ pattern: /^[1-9]\d*:[1-9]\d*$/, message: 'PT变比格式应为 n:n 形式,例如 1:1', trigger: 'blur' }
|
||||
{ required: true, message: 'PT变比必选!', trigger: 'blur' },
|
||||
{ pattern: /^[1-9]\d*:[1-9]\d*$/, message: 'PT变比格式应为 n:n 形式,例如 1:1', trigger: 'change' }
|
||||
],
|
||||
ct: [
|
||||
{ required: true, message: 'CT变比必填!', trigger: 'blur' },
|
||||
{ pattern: /^[1-9]\d*:[1-9]\d*$/, message: 'CT变比格式应为 n:n 形式,例如 1:1', trigger: 'blur' }
|
||||
{ required: true, message: 'CT变比必选!', trigger: 'blur' },
|
||||
{ pattern: /^[1-9]\d*:[1-9]\d*$/, message: 'CT变比格式应为 n:n 形式,例如 1:1', trigger: 'change' }
|
||||
],
|
||||
connection: [{ required: true, message: '接线方式必选!', trigger: 'change' }],
|
||||
busbar : [{ required: true, message: '所属母线必填!', trigger: 'blur' }],
|
||||
busbar : [{ required: true, message: '所属母线必选!', trigger: 'change' }],
|
||||
harmSysId : [{ required: true, message: '谐波系统检测点id必填!', trigger: 'blur' }],
|
||||
})
|
||||
|
||||
@@ -176,9 +198,10 @@ const resetFormContent = () => {
|
||||
|
||||
|
||||
// 打开弹窗,可能是新增,也可能是编辑
|
||||
const open = async (sign: string, data: Monitor.ResPqMon,device: Device.ResPqDev,table: any[]) => {
|
||||
const open = async (sign: string, data: Monitor.ResPqMon,device: Device.ResPqDev,table: any[],options: any) => {
|
||||
// 重置表单
|
||||
//dialogFormRef.value?.resetFields()
|
||||
selectOptions.value = options
|
||||
titleType.value = sign
|
||||
dialogVisible.value = true
|
||||
monitorTable.value = table|| []
|
||||
@@ -236,4 +259,8 @@ const resetFormContent = () => {
|
||||
// 对外映射
|
||||
defineExpose({ open })
|
||||
|
||||
</script>
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
|
||||
</style>
|
||||
|
||||
@@ -34,7 +34,6 @@
|
||||
import { ref, defineProps, reactive, watch } from 'vue';
|
||||
import ProTable from '@/components/ProTable/index.vue'; // 假设 ProTable 是自定义组件
|
||||
import { CirclePlus, Delete, EditPen, MessageBox } from '@element-plus/icons-vue';
|
||||
|
||||
import MonitorPopup from '@/views/machine/device/components/monitorPopup.vue'
|
||||
import { ProTableInstance, type ColumnProps } from '@/components/ProTable/interface'
|
||||
import { type Monitor } from '@/api/device/interface/monitor'
|
||||
@@ -46,7 +45,8 @@
|
||||
// 定义 props
|
||||
const props = defineProps<{
|
||||
DevFormContent:Device.ResPqDev,
|
||||
tableHeight?: number // 接收外部传入的高度
|
||||
tableHeight?: number, // 接收外部传入的高度
|
||||
selectOptions: Record<string, Device.SelectOption[]>,
|
||||
}>();
|
||||
|
||||
// ProTable 实例
|
||||
@@ -139,7 +139,7 @@ const getParameter = (data: Monitor.ResPqMon) => {
|
||||
return
|
||||
}
|
||||
title_Type.value = titleType
|
||||
monitorPopup.value?.open(titleType, row,props.DevFormContent,tableData.value)
|
||||
monitorPopup.value?.open(titleType, row,props.DevFormContent,tableData.value,props.selectOptions)
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -93,11 +93,7 @@ const columns = reactive<ColumnProps<Device.ResPqDev>[]>([
|
||||
prop: 'devType',
|
||||
label: '设备类型',
|
||||
minWidth: 200,
|
||||
render: (scope) => {
|
||||
// 查找设备类型名称
|
||||
const name = devTypeOptions.value.find(option => option.id === scope.row.devType)
|
||||
return <span>{name?.name}</span>
|
||||
},
|
||||
|
||||
},
|
||||
{
|
||||
prop: 'createDate',
|
||||
@@ -248,6 +244,7 @@ const importFile = async (pattern: string) => {
|
||||
title: '被检设备',
|
||||
showCover: false,
|
||||
patternId: dictStore.getDictData('Pattern').find(item => item.name === modeStore.currentMode)?.id,
|
||||
planId: null,
|
||||
tempApi: downloadTemplate,
|
||||
importApi: importPqDev,
|
||||
// importApi: modeStore.currentMode === "比对式"? importContrastPqDev: importCNDev,
|
||||
|
||||
@@ -32,16 +32,7 @@
|
||||
|
||||
<el-divider >参数信息</el-divider>
|
||||
|
||||
<el-form-item label='可检通道数' prop='inspectChannel' :label-width='100'>
|
||||
<el-select v-model="formContent.inspectChannel" multiple collapse-tags :max-collapse-tags="4" placeholder="请选择可检通道数" clearable>
|
||||
<el-option
|
||||
v-for="(option, index) in pqChannelArray"
|
||||
:key="index"
|
||||
:label="option.label"
|
||||
:value="option.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label='通讯协议' prop='protocol'>
|
||||
<el-select v-model="formContent.protocol" clearable placeholder="请选择通讯协议">
|
||||
<el-option
|
||||
@@ -59,6 +50,16 @@
|
||||
<el-form-item label="端口号" prop="port" placeholder="请输入端口号" >
|
||||
<el-input v-model="formContent.port" />
|
||||
</el-form-item>
|
||||
<el-form-item label='可检通道数' prop='inspectChannel' >
|
||||
<el-select v-model="formContent.inspectChannel" multiple collapse-tags :max-collapse-tags="4" placeholder="请选择可检通道数" clearable>
|
||||
<el-option
|
||||
v-for="(option, index) in pqChannelArray"
|
||||
:key="index"
|
||||
:label="option.label"
|
||||
:value="option.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label='是否加密' prop='encryptionFlag' >
|
||||
<el-select v-model="formContent.encryptionFlag" clearable placeholder="请选择是否加密">
|
||||
<el-option label="是" :value="1"></el-option>
|
||||
@@ -258,7 +259,7 @@ const open = async (sign: string, data: StandardDevice.ResPqStandardDevice,devTy
|
||||
if (typeof formContent.inspectChannel === 'string') {
|
||||
formContent.inspectChannel = formContent.inspectChannel.split(',').filter(Boolean)
|
||||
}
|
||||
handleDevTypeChange(data.devType)
|
||||
//handleDevTypeChange(data.devType)
|
||||
} else {
|
||||
resetFormContent()
|
||||
}
|
||||
@@ -279,6 +280,10 @@ const handleDevTypeChange = (value: string) => {
|
||||
label: String(i + 1),
|
||||
}))
|
||||
|
||||
//if(titleType.value == 'add') // 默认全选所有通道
|
||||
formContent.inspectChannel = pqChannelArray.value.map(channel => channel.value)
|
||||
|
||||
|
||||
// 过滤掉超出新通道数范围的选项
|
||||
if (Array.isArray(formContent.inspectChannel)) {
|
||||
formContent.inspectChannel = formContent.inspectChannel.filter(
|
||||
|
||||
@@ -206,7 +206,6 @@ const importFile = async () => {
|
||||
importApi: importPqStandardDev,
|
||||
getTableList: proTable.value?.getTableList,
|
||||
}
|
||||
console.log(params)
|
||||
deviceImportExcel.value?.acceptParams(params)
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user