10 Commits

Author SHA1 Message Date
sjl
e7c93d03aa Merge branch 'master' of http://192.168.1.22:3000/ClientApps/pqs-9100_client
# Conflicts:
#	frontend/src/views/machine/device/components/monitorTab.vue
2025-11-04 09:18:40 +08:00
sjl
a4b016ef0d 新增设备时监测点清空 2025-11-04 09:17:34 +08:00
caozehui
d329b68592 已检测过的监测点不可编辑、删除 2025-11-04 08:54:40 +08:00
贾同学
e12a1baf99 feat(device): 添加harmSysId字段支持 2025-10-30 11:12:59 +08:00
贾同学
8aae184a8b fix(device):添加谐波系统设备ID字段支持 2025-10-30 11:09:50 +08:00
贾同学
7f2275bad9 fix(home): 更新标签页切换事件处理函数 2025-10-30 11:08:37 +08:00
贾同学
aab884e524 feat(machine): 替换输入框为数字输入框 2025-10-30 10:01:02 +08:00
sjl
0215dbc875 下拉可选可输入框改成input 2025-10-30 09:47:26 +08:00
贾同学
b09a2bab10 feat(plan): 根据数据源动态显示设置项 2025-10-29 16:11:58 +08:00
贾同学
4dbcdd20df feat(plan): 闪变提示信息做大做显眼,居中显示; 2025-10-29 15:40:36 +08:00
8 changed files with 171 additions and 113 deletions

View File

@@ -89,8 +89,8 @@ export namespace Device {
boundPlanName?: string | null boundPlanName?: string | null
assign?: number ////是否分配给检测人员 0否 1是 assign?: number ////是否分配给检测人员 0否 1是
monitorList: Monitor.ResPqMon[] monitorList: Monitor.ResPqMon[]
checked: boolean // 是否已选择 checked?: boolean // 是否已选择
disabled: boolean // 是否禁用 disabled?: boolean // 是否禁用
} }
export interface SelectOption { export interface SelectOption {

View File

@@ -27,6 +27,7 @@ export namespace Monitor {
statInterval: number; //统计间隔 statInterval: number; //统计间隔
harmSysId: string; //默认与谐波系统监测点ID相同 harmSysId: string; //默认与谐波系统监测点ID相同
checkFlag: number;//是否参与检测0否1是 checkFlag: number;//是否参与检测0否1是
resultType:string|null; //检测结果类型
} }
/** /**

View File

@@ -8,7 +8,7 @@
:close-on-click-modal="false" :close-on-click-modal="false"
@close="handleClose" @close="handleClose"
> >
<el-tabs v-if="dialogVisible" v-model="activeName" @tab-click="handleTabClick"> <el-tabs v-if="dialogVisible" v-model="activeName" @tab-change="handleTabChange">
<el-tab-pane <el-tab-pane
v-for="(result, index) in resultData" v-for="(result, index) in resultData"
:key="result.monitorId" :key="result.monitorId"
@@ -233,8 +233,8 @@ const getResultData = async () => {
dialogVisible.value = true dialogVisible.value = true
} }
const handleTabClick = (tab: any) => { const handleTabChange = (name: any) => {
activeName.value = tab.name activeName.value = name
} }
const handleChooseClick = async () => { const handleChooseClick = async () => {
const currentResult = resultData.value[activeName.value] const currentResult = resultData.value[activeName.value]

View File

@@ -82,36 +82,10 @@
/> />
</el-form-item> </el-form-item>
<el-form-item label="固件版本" prop="hardwareVersion" v-if="scene === '0'"> <el-form-item label="固件版本" prop="hardwareVersion" v-if="scene === '0'">
<el-select <el-input v-model="formContent.hardwareVersion" clearable placeholder="请输入固件版本" />
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>
<el-form-item label="软件版本" prop="softwareVersion" v-if="scene === '0'"> <el-form-item label="软件版本" prop="softwareVersion" v-if="scene === '0'">
<el-select <el-input v-model="formContent.softwareVersion" clearable placeholder="请输入软件版本" />
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>
<el-form-item label="定检日期" prop="inspectDate" v-if="MonIsShow"> <el-form-item label="定检日期" prop="inspectDate" v-if="MonIsShow">
<el-date-picker <el-date-picker
@@ -218,55 +192,28 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="所属地市" prop="cityName" v-if="MonIsShow"> <el-form-item label="所属地市" prop="cityName" v-if="MonIsShow">
<el-select <el-input
v-model="formContent.cityName" v-model="formContent.cityName"
clearable clearable
placeholder="请选择所属地市" placeholder="请输入所属地市"
:disabled="formContent.importFlag == 1" :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>
<el-form-item label="所属供电公司" prop="gdName" v-if="MonIsShow"> <el-form-item label="所属供电公司" prop="gdName" v-if="MonIsShow">
<el-select <el-input
v-model="formContent.gdName" v-model="formContent.gdName"
clearable clearable
placeholder="请选择所属供电公司" placeholder="请输入所属供电公司"
:disabled="formContent.importFlag == 1" :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>
<el-form-item label="所属电站" prop="subName" v-if="MonIsShow"> <el-form-item label="所属电站" prop="subName" v-if="MonIsShow">
<el-select <el-input
v-model="formContent.subName" v-model="formContent.subName"
clearable clearable
placeholder="请选择所属电站" placeholder="请输入所属电站"
:disabled="formContent.importFlag == 1" :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>
<el-form-item <el-form-item
v-auth.device="'factorFlag'" v-auth.device="'factorFlag'"
@@ -279,6 +226,14 @@
<el-radio :value="0"></el-radio> <el-radio :value="0"></el-radio>
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
<el-form-item
v-if="scene === '1'"
label="谐波系统设备id"
prop="harmSysId"
placeholder="请输入谐波系统设备id"
>
<el-input v-model="formContent.harmSysId" :disabled="formContent.importFlag == 1" />
</el-form-item>
</el-form> </el-form>
</div> </div>
</el-tab-pane> </el-tab-pane>
@@ -312,7 +267,7 @@ import dayjs from 'dayjs'
import MonitorTable from '@/views/machine/device/components/monitorTab.vue' import MonitorTable from '@/views/machine/device/components/monitorTab.vue'
import { useAppSceneStore } from '@/stores/modules/mode' import { useAppSceneStore } from '@/stores/modules/mode'
import { generateUUID } from '@/utils' import { generateUUID } from '@/utils'
import { Monitor } from '@/api/device/interface/monitor' import { type Monitor } from '@/api/device/interface/monitor'
const AppSceneStore = useAppSceneStore() const AppSceneStore = useAppSceneStore()
const MonIsShow = ref(false) const MonIsShow = ref(false)
@@ -382,6 +337,7 @@ function useMetaInfo() {
gdName: '', gdName: '',
subName: '', subName: '',
importFlag: 0, importFlag: 0,
harmSysId: '',
inspectChannel: [], inspectChannel: [],
monitorList: [] monitorList: []
}) })
@@ -421,6 +377,7 @@ const resetFormContent = () => {
subName: '', subName: '',
importFlag: 0, importFlag: 0,
inspectChannel: [], inspectChannel: [],
harmSysId: '',
monitorList: [] monitorList: []
}) })
} }
@@ -486,8 +443,10 @@ const rules = computed(() => {
} }
if (scene.value !== '0') { if (scene.value !== '0') {
dynamicRules.name = [{ required: true, message: '设备名称必填!', trigger: 'blur' }] dynamicRules.name = [{ required: true, message: '设备名称必填!', trigger: 'blur' }]
dynamicRules.hardwareVersion = [{ required: true, message: '固件版本必选!', trigger: 'change' }] // dynamicRules.hardwareVersion = [{ required: true, message: '固件版本必选!', trigger: 'change' }]
dynamicRules.softwareVersion = [{ required: true, message: '软件版本必选!', trigger: 'change' }] // dynamicRules.softwareVersion = [{ required: true, message: '软件版本必选!', trigger: 'change' }]
dynamicRules.hardwareVersion = [{ required: true, message: '固件版本必填!', trigger: 'blur' }]
dynamicRules.softwareVersion = [{ required: true, message: '软件版本必填!', trigger: 'blur' }]
dynamicRules.manufacturer = [{ required: true, message: '生产厂家必选!', trigger: 'change' }] dynamicRules.manufacturer = [{ required: true, message: '生产厂家必选!', trigger: 'change' }]
} }
@@ -498,9 +457,12 @@ const rules = computed(() => {
if (mode.value === '比对式') { if (mode.value === '比对式') {
dynamicRules.inspectDate = [{ required: true, message: '定检日期必填!', trigger: 'blur' }] dynamicRules.inspectDate = [{ required: true, message: '定检日期必填!', trigger: 'blur' }]
dynamicRules.cityName = [{ required: true, message: '所属地市必选!', trigger: 'change' }] // dynamicRules.cityName = [{ required: true, message: '所属地市必选!', trigger: 'change' }]
dynamicRules.gdName = [{ required: true, message: '所属供电公司必选!', trigger: 'change' }] // dynamicRules.gdName = [{ required: true, message: '所属供电公司必选!', trigger: 'change' }]
dynamicRules.subName = [{ required: true, message: '所属电站必选!', trigger: 'change' }] // dynamicRules.subName = [{ required: true, message: '所属电站必选!', trigger: 'change' }]
dynamicRules.cityName = [{ required: true, message: '所属地市必填!', trigger: 'blur' }]
dynamicRules.gdName = [{ required: true, message: '所属供电公司必填!', trigger: 'blur' }]
dynamicRules.subName = [{ required: true, message: '所属电站必填!', trigger: 'blur' }]
} }
return dynamicRules return dynamicRules
@@ -517,7 +479,6 @@ const close = () => {
//子组件监测点变化通知父组件设备台账 //子组件监测点变化通知父组件设备台账
const getParameter = (data: Monitor.ResPqMon[]) => { const getParameter = (data: Monitor.ResPqMon[]) => {
console.log('子组件监测点变化通知父组件设备台账', data)
monitor.value = data monitor.value = data
//保存监测点信息自动更新设备台账的被检通道 //保存监测点信息自动更新设备台账的被检通道
formContent.inspectChannel = monitor.value formContent.inspectChannel = monitor.value
@@ -657,6 +618,7 @@ const open = async (
} }
monitor.value = data.monitorList monitor.value = data.monitorList
} else { } else {
monitor.value = []
resetFormContent() resetFormContent()
//只有比对式设备ID由前端传 //只有比对式设备ID由前端传
if (currentMode === '比对式') formContent.id = generateUUID().replaceAll('-', '') if (currentMode === '比对式') formContent.id = generateUUID().replaceAll('-', '')

View File

@@ -11,19 +11,17 @@
<div> <div>
<el-form :model="formContent" ref="dialogFormRef" :rules="rules" label-width="140" class="form-two"> <el-form :model="formContent" ref="dialogFormRef" :rules="rules" label-width="140" class="form-two">
<el-form-item label="名称" prop="name"> <el-form-item label="名称" prop="name">
<el-input v-model="formContent.name" placeholder="请输入监测点名称" /> <el-input clearable v-model="formContent.name" placeholder="请输入监测点名称" :disabled="props.DevFormContent.importFlag == 1 || formContent.resultType!=null"/>
</el-form-item> </el-form-item>
<el-form-item label="线路号" prop="num"> <el-form-item label="线路号" prop="num">
<el-select <el-select v-model="formContent.num" placeholder="请选择线路号" @change="handleMonNumChange" :disabled="props.DevFormContent.importFlag == 1 || formContent.resultType!=null">
v-model="formContent.num"
clearable
placeholder="请选择线路号"
@change="handleMonNumChange"
>
<el-option v-for="item in lineNum" :key="item.id" :label="item.name" :value="item.id" /> <el-option v-for="item in lineNum" :key="item.id" :label="item.name" :value="item.id" />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="所属母线" prop="busbar"> <el-form-item label="所属母线" prop="busbar">
<el-input v-model="formContent.busbar" clearable placeholder="请输入所属母线" :disabled="props.DevFormContent.importFlag == 1 || formContent.resultType!=null"/>
</el-form-item>
<!-- <el-form-item label="所属母线" prop="busbar">
<el-select <el-select
v-model="formContent.busbar" v-model="formContent.busbar"
clearable clearable
@@ -38,9 +36,9 @@
:value="item.value" :value="item.value"
/> />
</el-select> </el-select>
</el-form-item> </el-form-item> -->
<el-form-item label="接线方式" prop="connection"> <el-form-item label="接线方式" prop="connection">
<el-select v-model="formContent.connection" clearable placeholder="请选择接线方式"> <el-select v-model="formContent.connection" clearable placeholder="请选择接线方式" :disabled="props.DevFormContent.importFlag == 1 || formContent.resultType!=null">
<el-option <el-option
v-for="item in dictStore.getDictData('Dev_Connect')" v-for="item in dictStore.getDictData('Dev_Connect')"
:key="item.id" :key="item.id"
@@ -58,11 +56,11 @@
</template> </template>
<div class="ratio-input-group"> <div class="ratio-input-group">
<el-form-item prop="ptPrimary" class="ratio-form-item"> <el-form-item prop="ptPrimary" class="ratio-form-item">
<el-input v-model="ptPrimary" placeholder="一次侧" @input="handlePtInput" /> <el-input v-model="ptPrimary" placeholder="一次侧" @input="handlePtInput" :disabled="props.DevFormContent.importFlag == 1 || formContent.resultType!=null"/>
</el-form-item> </el-form-item>
<div class="colon">:</div> <div class="colon">:</div>
<el-form-item prop="ptSecondary" style="margin-left: 10px" class="ratio-form-item"> <el-form-item prop="ptSecondary" style="margin-left: 10px" class="ratio-form-item">
<el-input v-model="ptSecondary" placeholder="二次侧" @input="handlePtInput" /> <el-input v-model="ptSecondary" placeholder="二次侧" @input="handlePtInput" :disabled="props.DevFormContent.importFlag == 1 || formContent.resultType!=null"/>
</el-form-item> </el-form-item>
</div> </div>
</el-form-item> </el-form-item>
@@ -77,17 +75,17 @@
</template> </template>
<div class="ratio-input-group"> <div class="ratio-input-group">
<el-form-item prop="ctPrimary" class="ratio-form-item"> <el-form-item prop="ctPrimary" class="ratio-form-item">
<el-input v-model="ctPrimary" placeholder="一次侧" @input="handleCtInput" /> <el-input v-model="ctPrimary" placeholder="一次侧" @input="handleCtInput" :disabled="props.DevFormContent.importFlag == 1 || formContent.resultType!=null"/>
</el-form-item> </el-form-item>
<div class="colon">:</div> <div class="colon">:</div>
<el-form-item prop="ctSecondary" style="margin-left: 10px" class="ratio-form-item"> <el-form-item prop="ctSecondary" style="margin-left: 10px" class="ratio-form-item">
<el-input v-model="ctSecondary" placeholder="二次侧" @input="handleCtInput" /> <el-input v-model="ctSecondary" placeholder="二次侧" @input="handleCtInput" :disabled="props.DevFormContent.importFlag == 1 || formContent.resultType!=null"/>
</el-form-item> </el-form-item>
</div> </div>
</el-form-item> </el-form-item>
<el-form-item label="统计间隔" prop="statInterval"> <el-form-item label="统计间隔" prop="statInterval">
<el-select v-model="formContent.statInterval" clearable placeholder="请选择统计间隔"> <el-select v-model="formContent.statInterval" clearable placeholder="请选择统计间隔" :disabled="props.DevFormContent.importFlag == 1 || formContent.resultType!=null">
<el-option <el-option
v-for="item in dictStore.getDictData('Dev_Chns')" v-for="item in dictStore.getDictData('Dev_Chns')"
:key="item.id" :key="item.id"
@@ -97,10 +95,10 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="谐波系统检测点id" prop="harmSysId" placeholder="请输入谐波系统检测点id"> <el-form-item label="谐波系统检测点id" prop="harmSysId" placeholder="请输入谐波系统检测点id">
<el-input v-model="formContent.harmSysId" /> <el-input v-model="formContent.harmSysId" :disabled="props.DevFormContent.importFlag == 1 || formContent.resultType!=null"/>
</el-form-item> </el-form-item>
<el-form-item label="是否参与检测" prop="checkFlag" placeholder="请输入CT编号"> <el-form-item label="是否参与检测" prop="checkFlag" placeholder="请输入CT编号">
<el-select v-model="formContent.checkFlag" clearable placeholder="请选择是否加密"> <el-select v-model="formContent.checkFlag" :disabled="formContent.resultType!=null">
<el-option label="是" :value="1"></el-option> <el-option label="是" :value="1"></el-option>
<el-option label="否" :value="0"></el-option> <el-option label="否" :value="0"></el-option>
</el-select> </el-select>
@@ -142,6 +140,11 @@ const ptSecondary = ref<string>('')
const ctPrimary = ref<string>('') const ctPrimary = ref<string>('')
const ctSecondary = ref<string>('') const ctSecondary = ref<string>('')
// 定义 props
const props = defineProps<{
DevFormContent: Device.ResPqDev
}>()
// 定义弹出组件元信息 // 定义弹出组件元信息
const dialogFormRef = ref() const dialogFormRef = ref()
function useMetaInfo() { function useMetaInfo() {
@@ -179,7 +182,8 @@ const resetFormContent = () => {
connection: '', connection: '',
statInterval: 1, statInterval: 1,
harmSysId: '', harmSysId: '',
checkFlag: 1 checkFlag: 1,
resultType: null
} }
} }
@@ -197,7 +201,8 @@ const rules: Ref<Record<string, Array<FormItemRule>>> = ref({
name: [{ required: true, message: '监测点名称必填!', trigger: 'blur' }], name: [{ required: true, message: '监测点名称必填!', trigger: 'blur' }],
num: [{ required: true, message: '线路号必选', trigger: 'change' }], num: [{ required: true, message: '线路号必选', trigger: 'change' }],
connection: [{ required: true, message: '接线方式必选!', trigger: 'change' }], connection: [{ required: true, message: '接线方式必选!', trigger: 'change' }],
busbar: [{ required: true, message: '所属母线必选!', trigger: 'change' }], //busbar: [{ required: true, message: '所属母线必选!', trigger: 'change' }],
busbar: [{ required: true, message: '所属母线必填!', trigger: 'blur' }],
// harmSysId : [{ required: true, message: '谐波系统检测点id必填', trigger: 'blur' }], // harmSysId : [{ required: true, message: '谐波系统检测点id必填', trigger: 'blur' }],
checkFlag: [{ required: true, message: '是否参与检测必选!', trigger: 'change' }] checkFlag: [{ required: true, message: '是否参与检测必选!', trigger: 'change' }]
}) })

View File

@@ -15,7 +15,6 @@
type="primary" type="primary"
:icon="CirclePlus" :icon="CirclePlus"
@click="openDialog('add')" @click="openDialog('add')"
:disabled="props.DevFormContent.importFlag == 1"
> >
新增 新增
</el-button> </el-button>
@@ -38,7 +37,6 @@
link link
:icon="EditPen" :icon="EditPen"
:model-value="false" :model-value="false"
:disabled="props.DevFormContent.importFlag == 1"
@click="openDialog('edit', scope.row)" @click="openDialog('edit', scope.row)"
> >
编辑 编辑
@@ -49,13 +47,14 @@
link link
:icon="Delete" :icon="Delete"
@click="handleDelete(scope.row.id)" @click="handleDelete(scope.row.id)"
:disabled="scope.row.resultType!=null"
> >
删除 删除
</el-button> </el-button>
</template> </template>
</ProTable> </ProTable>
</div> </div>
<MonitorPopup @getParameter="getParameter" ref="monitorPopup" /> <MonitorPopup @getParameter="getParameter" ref="monitorPopup" :DevFormContent="props.DevFormContent"/>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">

View File

@@ -57,7 +57,8 @@
</el-select> </el-select>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-input <el-input-number
:controls="false"
v-model="row.startValue" v-model="row.startValue"
style="width: 60px" style="width: 60px"
:disabled="isStartValueDisabled[row.sort]" :disabled="isStartValueDisabled[row.sort]"
@@ -82,7 +83,8 @@
</el-select> </el-select>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-input <el-input-number
:controls="false"
v-model="row.endValue" v-model="row.endValue"
style="width: 60px" style="width: 60px"
:disabled="isEndValueDisabled[row.sort]" :disabled="isEndValueDisabled[row.sort]"
@@ -107,7 +109,7 @@
<el-table-column label="最大误差"> <el-table-column label="最大误差">
<el-table-column prop="maxErrorValue" label="最大误差值" width="100"> <el-table-column prop="maxErrorValue" label="最大误差值" width="100">
<template #default="{ row }"> <template #default="{ row }">
<el-input v-model="row.maxErrorValue" style="width: 70px" /> <el-input-number :controls="false" v-model="row.maxErrorValue" style="width: 70px" />
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="误差类型" width="170"> <el-table-column label="误差类型" width="170">

View File

@@ -293,7 +293,7 @@
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8" v-if="waveRecordSetting">
<el-form-item <el-form-item
:label-width="140" :label-width="140"
label="录波数据有效组数" label="录波数据有效组数"
@@ -311,7 +311,7 @@
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8" v-if="realTimeSetting">
<el-form-item <el-form-item
:label-width="140" :label-width="140"
label="实时数据有效组数" label="实时数据有效组数"
@@ -329,7 +329,7 @@
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8" v-if="statisticsSetting">
<el-form-item <el-form-item
:label-width="140" :label-width="140"
label="统计数据有效组数" label="统计数据有效组数"
@@ -347,7 +347,7 @@
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8" v-if="flickerSetting">
<el-form-item <el-form-item
:label-width="140" :label-width="140"
label="闪变数据有效组数" label="闪变数据有效组数"
@@ -378,6 +378,39 @@
</div> </div>
</template> </template>
<ImportExcel ref="deviceImportExcel" @result="importResult" /> <ImportExcel ref="deviceImportExcel" @result="importResult" />
<transition name="fade">
<div
v-if="shanBianDialogVisible"
style="
width: 100%;
height: 100%;
position: absolute;
z-index: 999999999;
top: 0;
left: 0;
display: flex;
align-items: center;
justify-content: center;
background-color: rgba(0, 0, 0, 0.5);
"
>
<div
style="
padding: 10px;
border: 1px solid var(--el-color-warning);
border-radius: 5px;
user-select: none;
background-color: var(--el-color-danger-light-9);
"
>
<el-text style="font-weight: bold" type="warning" size="large">
<el-icon><WarningFilled /></el-icon>
闪变耗时较长不推荐批量被检设备在检测过程中采集该指标
<el-icon @click="() => (shanBianDialogVisible = false)"><Close /></el-icon>
</el-text>
</div>
</div>
</transition>
</el-dialog> </el-dialog>
</template> </template>
@@ -414,6 +447,7 @@ import { downloadTemplate, importPqDev } from '@/api/device/device'
import { getTestConfig } from '@/api/system/base' import { getTestConfig } from '@/api/system/base'
import { getRegRes } from '@/api/system/versionRegister' import { getRegRes } from '@/api/system/versionRegister'
import DevSelect from '@/views/plan/planList/components/devSelect.vue' import DevSelect from '@/views/plan/planList/components/devSelect.vue'
import { WarningFilled } from '@element-plus/icons-vue'
const modeStore = useModeStore() const modeStore = useModeStore()
const AppSceneStore = useAppSceneStore() const AppSceneStore = useAppSceneStore()
@@ -444,8 +478,13 @@ const planType = ref<number>(0)
const subPlanBindStandardDev = ref<any>([]) //哪些标准设备已经被子计划绑定 const subPlanBindStandardDev = ref<any>([]) //哪些标准设备已经被子计划绑定
const activeNames = ref(['1']) const activeNames = ref(['1'])
const allDisabled = ref(false) const allDisabled = ref(false)
const shanBianDialogVisible = ref(false)
const leaderData = ref<any[]>([]) const leaderData = ref<any[]>([])
const memberData = ref<any[]>([]) const memberData = ref<any[]>([])
const waveRecordSetting = ref(false)
const realTimeSetting = ref(false)
const statisticsSetting = ref(false)
const flickerSetting = ref(false)
const generateData = () => { const generateData = () => {
const manufacturerDict = dictStore.getDictData('Dev_Manufacturers') const manufacturerDict = dictStore.getDictData('Dev_Manufacturers')
@@ -747,6 +786,10 @@ const open = async (sign: string, data: Plan.ReqPlan, currentMode: string, plan:
titleType.value = sign titleType.value = sign
isSelectDisabled.value = false isSelectDisabled.value = false
planType.value = plan planType.value = plan
waveRecordSetting.value = false
statisticsSetting.value = false
realTimeSetting.value = false
flickerSetting.value = false
if (sign == 'add') { if (sign == 'add') {
resetFormContent() resetFormContent()
allDisabled.value = false allDisabled.value = false
@@ -761,7 +804,7 @@ const open = async (sign: string, data: Plan.ReqPlan, currentMode: string, plan:
user_Result: any user_Result: any
if (mode.value === '比对式') { if (mode.value === '比对式') {
[ ;[
PqErrSys_Result, PqErrSys_Result,
pqDevList_Result, pqDevList_Result,
pqReportName_Result, pqReportName_Result,
@@ -805,9 +848,8 @@ const open = async (sign: string, data: Plan.ReqPlan, currentMode: string, plan:
const dataRuleDict = dictStore.getDictData('Data_Rule') const dataRuleDict = dictStore.getDictData('Data_Rule')
const rule = dataRuleDict.find(item => item.code === 'Cp95_Value') const rule = dataRuleDict.find(item => item.code === 'Cp95_Value')
formContent.dataRule = rule ? rule.id : '' formContent.dataRule = rule ? rule.id : ''
} else { } else {
[pqSource_Result, PqScript_Result, PqErrSys_Result, pqDevList_Result, pqReportName_Result] = ;[pqSource_Result, PqScript_Result, PqErrSys_Result, pqDevList_Result, pqReportName_Result] =
await Promise.all([ await Promise.all([
getTestSourceList(data), getTestSourceList(data),
getPqScriptList(data), getPqScriptList(data),
@@ -844,6 +886,8 @@ const open = async (sign: string, data: Plan.ReqPlan, currentMode: string, plan:
formContent.datasourceIds = datasourceDicts formContent.datasourceIds = datasourceDicts
.filter(item => ['real', 'wave_data'].includes(item.code)) .filter(item => ['real', 'wave_data'].includes(item.code))
.map(item => item.code) .map(item => item.code)
realTimeSetting.value = true
waveRecordSetting.value = true
} else { } else {
//编辑时先给表单赋值(这会没接收被检设备),需要手动再给被检设备复制后整体表单赋值 //编辑时先给表单赋值(这会没接收被检设备),需要手动再给被检设备复制后整体表单赋值
@@ -873,7 +917,7 @@ const open = async (sign: string, data: Plan.ReqPlan, currentMode: string, plan:
isSelectDisabled.value = true isSelectDisabled.value = true
formContent.memberIds = data.members formContent.memberIds = data.members
} }
[ ;[
PqErrSys_Result, PqErrSys_Result,
boundPqDevList_Result, boundPqDevList_Result,
unboundPqDevList_Result, unboundPqDevList_Result,
@@ -920,7 +964,7 @@ const open = async (sign: string, data: Plan.ReqPlan, currentMode: string, plan:
} }
} }
} else { } else {
[ ;[
pqSource_Result, pqSource_Result,
PqScript_Result, PqScript_Result,
PqErrSys_Result, PqErrSys_Result,
@@ -995,6 +1039,8 @@ const open = async (sign: string, data: Plan.ReqPlan, currentMode: string, plan:
} }
formContent.devIds = boundData.map((i: any) => i.id) // 已绑定设备id集合 formContent.devIds = boundData.map((i: any) => i.id) // 已绑定设备id集合
} }
handleDataSourceChange()
handleTestItemChange(false)
} }
pqToArray() //将对象转为数组 pqToArray() //将对象转为数组
@@ -1042,13 +1088,21 @@ const open = async (sign: string, data: Plan.ReqPlan, currentMode: string, plan:
} }
// 检测项选择变化时的处理函数 // 检测项选择变化时的处理函数
const handleTestItemChange = () => { const handleTestItemChange = (showTip: boolean = true) => {
if (formContent.testItems.length > 0) { if (formContent.testItems.length > 0) {
const hasShanBian = secondLevelOptions const hasShanBian = secondLevelOptions
.filter(option => formContent.testItems.includes(option.value)) .filter(option => formContent.testItems.includes(option.value))
.find(option => option.label === '闪变') .find(option => option.label === '闪变')
if (hasShanBian) { if (hasShanBian) {
ElMessage.warning('闪变耗时较长,不推荐批量被检设备在检测过程中采集该指标') flickerSetting.value = true
if (showTip) {
shanBianDialogVisible.value = true
setTimeout(() => {
shanBianDialogVisible.value = false
}, 5000)
}
} else {
flickerSetting.value = false
} }
} }
} }
@@ -1206,17 +1260,44 @@ const handleDataSourceChange = () => {
if (hasThreeSeconds && hasMinuteStats) { if (hasThreeSeconds && hasMinuteStats) {
ElMessage.warning('3s实时数据与分钟统计数据不能同时选择') ElMessage.warning('3s实时数据与分钟统计数据不能同时选择')
formContent.datasourceIds = [] formContent.datasourceIds = []
realTimeSetting.value = false
statisticsSetting.value = false
waveRecordSetting.value = false
return
} }
if(hasLuBo && hasMinuteStats){ if (hasLuBo && hasMinuteStats) {
ElMessage.warning('录波数据与分钟统计数据不能同时选择') ElMessage.warning('录波数据与分钟统计数据不能同时选择')
formContent.datasourceIds = [] formContent.datasourceIds = []
realTimeSetting.value = false
statisticsSetting.value = false
waveRecordSetting.value = false
return
} }
// 判断是否选择了多个“分钟统计数据”项 // 判断是否选择了多个“分钟统计数据”项
const minuteStatLabels = selectedLabels.filter(label => label.includes('分钟')) const minuteStatLabels = selectedLabels.filter(label => label.includes('分钟'))
if (minuteStatLabels.length > 1) { if (minuteStatLabels.length > 1) {
ElMessage.warning('分钟统计数据不能多选') ElMessage.warning('分钟统计数据不能多选')
formContent.datasourceIds = [] formContent.datasourceIds = []
realTimeSetting.value = false
statisticsSetting.value = false
waveRecordSetting.value = false
return
}
if (hasThreeSeconds) {
realTimeSetting.value = true
} else {
realTimeSetting.value = false
}
if (hasMinuteStats) {
statisticsSetting.value = true
} else {
statisticsSetting.value = false
}
if (hasLuBo) {
waveRecordSetting.value = true
} else {
waveRecordSetting.value = false
} }
} }
@@ -1272,4 +1353,12 @@ const props = defineProps<{
justify-content: center; justify-content: center;
align-items: center; align-items: center;
} }
.fade-enter-active,
.fade-leave-active {
transition: opacity 0.5s;
}
.fade-enter-from,
.fade-leave-to {
opacity: 0;
}
</style> </style>