You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
600 lines
12 KiB
600 lines
12 KiB
import type { BasicColumn, FormSchema } from '@/components/Table'
|
|
import {getAlarmLevelList} from "@/api/alert/warn";
|
|
import {subSystemListApi} from "@/api/alert/model/select";
|
|
import {getInstantList,getInstantPoint} from "@/api/alert/run/instant";
|
|
import {ref} from "vue";
|
|
|
|
const alarmLevelList = await getAlarmLevelList();
|
|
|
|
|
|
export const columns: BasicColumn[] = [
|
|
{
|
|
title: '编号',
|
|
dataIndex: 'warnId',
|
|
width: 80,
|
|
fixed: 'left',
|
|
},
|
|
{
|
|
title: '名称',
|
|
dataIndex: 'gzpName',
|
|
width: 200,
|
|
fixed: 'left',
|
|
},
|
|
{
|
|
title: '点号',
|
|
dataIndex: 'pointId',
|
|
width: 200,
|
|
fixed: 'left',
|
|
},
|
|
{
|
|
title: '描述',
|
|
dataIndex: 'pointName',
|
|
width: 200,
|
|
},
|
|
{
|
|
title: '单位',
|
|
dataIndex: 'unit',
|
|
width: 80,
|
|
},
|
|
{
|
|
title: '上限',
|
|
dataIndex: 'uplimit',
|
|
width: 80,
|
|
},
|
|
{
|
|
title: '下限',
|
|
dataIndex: 'lowlimit',
|
|
width: 80,
|
|
},
|
|
{
|
|
title: '实例名称',
|
|
dataIndex: 'mpName',
|
|
width: 250,
|
|
},
|
|
{
|
|
title: '专业',
|
|
dataIndex: 'systemName',
|
|
width: 100,
|
|
|
|
},
|
|
{
|
|
title: '报警表达式',
|
|
dataIndex: 'equation',
|
|
width: 200,
|
|
|
|
},
|
|
{
|
|
title: '输出点号',
|
|
dataIndex: 'outputPoint',
|
|
width: 200,
|
|
|
|
},
|
|
{
|
|
title: '报警类型',
|
|
dataIndex: 'alarmModelRuleName',
|
|
width: 120,
|
|
|
|
},
|
|
{
|
|
title: '报警限制',
|
|
dataIndex: 'warnConstraintName',
|
|
width: 120,
|
|
|
|
},
|
|
{
|
|
title: '告警延时',
|
|
dataIndex: 'timeDurationThreshold',
|
|
width: 100,
|
|
slots: { customRender: 'timeDurationThreshold' },
|
|
},
|
|
{
|
|
title: '短信告警',
|
|
dataIndex: 'shortMessageOnOff',
|
|
width: 100,
|
|
slots: { customRender: 'shortMessageOnOff' },
|
|
|
|
},
|
|
{
|
|
title: '光字牌告警',
|
|
dataIndex: 'gzpOnOff',
|
|
width: 100,
|
|
slots: { customRender: 'gzpOnOff' },
|
|
|
|
},
|
|
{
|
|
title: '推送诊断',
|
|
dataIndex: 'copyToDiagOnOff',
|
|
width: 100,
|
|
slots: { customRender: 'copyToDiagOnOff' },
|
|
|
|
},
|
|
{
|
|
title: '已有实例数量',
|
|
dataIndex: 'number',
|
|
width: 100,
|
|
},
|
|
{
|
|
title: '参与报警',
|
|
dataIndex: 'warnStatus',
|
|
width: 100,
|
|
slots: { customRender: 'warnStatus' },
|
|
fixed: 'right',
|
|
},
|
|
// {
|
|
// title: '实时值',
|
|
// dataIndex: 'value',
|
|
// width: 90,
|
|
// className: 'value',
|
|
// slots: { customRender: 'value' },
|
|
|
|
// }
|
|
|
|
]
|
|
|
|
export const searchFormSchema: FormSchema[] = [
|
|
{
|
|
label: '模型实例id',
|
|
field: 'mpId',
|
|
component: 'Input',
|
|
defaultValue: '',
|
|
required: true,
|
|
show: false,
|
|
colProps: { span: 8 },
|
|
}
|
|
]
|
|
export const updateWarnForm: FormSchema[] = [
|
|
{
|
|
label: '编号',
|
|
field: 'warnId',
|
|
component: 'Input',
|
|
required: true,
|
|
show: false,
|
|
},
|
|
{
|
|
label: '残差上限',
|
|
field: 'uplimit',
|
|
component: 'Input',
|
|
required: true,
|
|
componentProps: {
|
|
placeholder: '请输入残差上限',
|
|
},
|
|
rules: [{ required: true, message: '请输入残差上限' }],
|
|
colProps: {
|
|
span: 12,
|
|
},
|
|
},
|
|
{
|
|
label: '残差下限',
|
|
field: 'lowlimit',
|
|
component: 'Input',
|
|
required: true,
|
|
componentProps: {
|
|
placeholder: '请输入残差下限',
|
|
},
|
|
rules: [{ required: true, message: '请输入残差下限' }],
|
|
colProps: {
|
|
span: 12,
|
|
},
|
|
},
|
|
{
|
|
label: '延时告警',
|
|
field: 'timeDurationThreshold',
|
|
component: 'Input',
|
|
required: true,
|
|
componentProps: {
|
|
placeholder: '请输入延时告警',
|
|
},
|
|
rules: [{ required: true, message: '请输入延时告警' }],
|
|
colProps: {
|
|
span: 12,
|
|
},
|
|
},
|
|
|
|
{
|
|
label: '告警等级',
|
|
field: 'alarmLevel',
|
|
component: 'Select',
|
|
componentProps: {
|
|
options: alarmLevelList,
|
|
fieldNames: {
|
|
label: 'alarmLevelName',
|
|
value: 'alarmLevel',
|
|
},
|
|
},
|
|
required: true,
|
|
colProps: {
|
|
span: 12,
|
|
},
|
|
},
|
|
{
|
|
label: '光字牌名称',
|
|
field: 'gzpName',
|
|
component: 'Input',
|
|
required: true,
|
|
colProps: {
|
|
span: 24,
|
|
},
|
|
},
|
|
{
|
|
label: '光字牌状态',
|
|
field: 'gzpOnOff',
|
|
component: 'RadioGroup',
|
|
componentProps: {
|
|
// 数据源1:固定数据
|
|
options: [
|
|
{ label: '是', value: 1 },
|
|
{ label: '否', value: 0 },
|
|
],
|
|
},
|
|
required: true,
|
|
colProps: {
|
|
span: 12,
|
|
},
|
|
},
|
|
|
|
{
|
|
label: '短信推送',
|
|
field: 'shortMessageOnOff',
|
|
component: 'RadioGroup',
|
|
componentProps: {
|
|
options: [{ label: '是', value: 1 }, { label: '否', value: 0 }],
|
|
},
|
|
required: true,
|
|
colProps: {
|
|
span: 12,
|
|
},
|
|
},
|
|
{
|
|
label: '推送诊断',
|
|
field: 'copyToDiagOnOff',
|
|
component: 'RadioGroup',
|
|
componentProps: {
|
|
options: [{ label: '是', value: 1 }, { label: '否', value: 0 }],
|
|
},
|
|
required: true,
|
|
colProps: {
|
|
span: 12,
|
|
},
|
|
},
|
|
{
|
|
label: '告警限制名称',
|
|
field: 'warnConstraintName',
|
|
component: 'Input',
|
|
|
|
required: true,
|
|
colProps: {
|
|
span: 12,
|
|
},
|
|
},
|
|
{
|
|
label: '告警限制条件',
|
|
field: 'warnConstraint',
|
|
component: 'Input',
|
|
required: true,
|
|
colProps: {
|
|
span: 24,
|
|
},
|
|
},
|
|
]
|
|
export const InstantBasicInfo: any[] = [
|
|
|
|
{
|
|
label: '实例名称',
|
|
field: 'mpName',
|
|
|
|
},
|
|
{
|
|
label: '创建人',
|
|
field: 'creator',
|
|
},
|
|
{
|
|
label: '创建时间',
|
|
field: 'createTime',
|
|
},
|
|
{
|
|
label: '最近修改人',
|
|
field: 'updater',
|
|
},
|
|
{
|
|
label: '最近修改时间',
|
|
field: 'updateTime',
|
|
},
|
|
{
|
|
label: '算法',
|
|
field: 'algorithm_shortname',
|
|
},
|
|
|
|
// modelInfo中的字段
|
|
{
|
|
label: '训练采样间隔',
|
|
field: 'sampling',
|
|
},
|
|
|
|
{
|
|
label: '参数个数',
|
|
field: 'pointInfo',
|
|
},
|
|
{
|
|
label: '最小主元贡献率',
|
|
field: 'rate',
|
|
},
|
|
{
|
|
label: '主元个数',
|
|
field: 'principal',
|
|
},
|
|
{
|
|
label: '模型精度',
|
|
field: 'rate',
|
|
},
|
|
]
|
|
|
|
export const detailColumns: BasicColumn[] = [
|
|
{
|
|
title: '编号',
|
|
dataIndex: 'id',
|
|
width: 80,
|
|
fixed: 'left',
|
|
},
|
|
{
|
|
title: '测点编码',
|
|
dataIndex: 'inputInfo',
|
|
width: 150,
|
|
fixed: 'left',
|
|
},
|
|
{
|
|
title: '测点名称',
|
|
dataIndex: 'inputName',
|
|
width: 200,
|
|
fixed: 'left',
|
|
},
|
|
{
|
|
title: '单位',
|
|
dataIndex: 'unit',
|
|
width: 50,
|
|
fixed: 'left',
|
|
},
|
|
{
|
|
title: '重构值测点',
|
|
dataIndex: 'outPointInfo',
|
|
width: 200,
|
|
|
|
},
|
|
{
|
|
title: '偏差值测点',
|
|
dataIndex: 'biasPointInfo',
|
|
width: 200,
|
|
},
|
|
{
|
|
title: '错误状态测点',
|
|
dataIndex: 'faultVariablePointInfo',
|
|
width: 200,
|
|
},
|
|
]
|
|
|
|
interface SelectItem {
|
|
unitId: number
|
|
unitName: string
|
|
systemTypeId: number
|
|
systemTypeName: string
|
|
systemId: number
|
|
systemName: string
|
|
mpId: number
|
|
mpName: string
|
|
}
|
|
|
|
const selectList: SelectItem[] = await getInstantList()
|
|
//机组下拉框去重
|
|
const unitList=ref([]);
|
|
unitList.value = Array.from(
|
|
new Map(
|
|
selectList.map(item => [
|
|
item.unitId,
|
|
{
|
|
...item,
|
|
},
|
|
]),
|
|
).values(),
|
|
)
|
|
const typeList=ref([]);
|
|
typeList.value = Array.from(
|
|
new Map(
|
|
selectList
|
|
.filter(item => item.unitId === unitList.value[0].unitId)
|
|
.map(item => [
|
|
item.systemTypeId,
|
|
{
|
|
...item
|
|
},
|
|
]),
|
|
).values(),
|
|
)
|
|
const systemList=ref([]);
|
|
systemList.value = Array.from(
|
|
new Map(
|
|
selectList
|
|
.filter(item => item.systemTypeId === unitList.value[0].systemTypeId && item.unitId === unitList.value[0].unitId)
|
|
.map(item => [
|
|
item.systemId,
|
|
{
|
|
...item
|
|
},
|
|
]),
|
|
).values(),
|
|
)
|
|
const mpList=ref([]);
|
|
mpList.value = Array.from(
|
|
new Map(
|
|
selectList
|
|
.filter(item => item.systemId === unitList.value[0].systemId)
|
|
.map(item => [
|
|
item.mpId,
|
|
{
|
|
...item
|
|
},
|
|
]),
|
|
).values(),
|
|
)
|
|
console.log(unitList.value)
|
|
|
|
const pointList=ref([]);
|
|
pointList.value = await getInstantPoint(mpList.value[0].mpId)
|
|
|
|
export const InstantForm: FormSchema[] = [
|
|
{
|
|
label: '机组',
|
|
field: 'unit',
|
|
component: 'Select',
|
|
defaultValue: unitList.value?.[0]?.unitId,
|
|
colProps: { span: 8},
|
|
componentProps: ({ formModel, formActionType }) => ({
|
|
placeholder: '机组',
|
|
allowClear: false,
|
|
options: unitList.value.map(unit => ({
|
|
value: unit.unitId,
|
|
label: unit.unitName,
|
|
})),
|
|
onChange: (unit: number) => {
|
|
// ⭐ 根据 unitId 从 selectList 计算系统下拉
|
|
typeList.value = Array.from(
|
|
new Map(
|
|
selectList
|
|
.filter(item => item.unitId === unit)
|
|
.map(item => [
|
|
item.systemTypeId,
|
|
{
|
|
...item
|
|
},
|
|
]),
|
|
).values(),
|
|
)
|
|
// ✅ 默认选中第一个系统
|
|
formModel.type = typeList.value[0].systemTypeId
|
|
formActionType.setFieldsValue({
|
|
type: typeList.value[0].systemTypeId,
|
|
})
|
|
|
|
},
|
|
}),
|
|
},
|
|
|
|
{
|
|
label: '系统',
|
|
field: 'type',
|
|
component: 'Select',
|
|
defaultValue: typeList.value?.[0]?.systemTypeId,
|
|
colProps: { span: 8},
|
|
componentProps: ({ formModel, formActionType }) => ({
|
|
placeholder: '系统',
|
|
allowClear: false,
|
|
options: typeList.value.map(type => ({
|
|
value: type.systemTypeId,
|
|
label: type.systemTypeName,
|
|
})),
|
|
onChange: (type: number) => {
|
|
alert("系统改变事件")
|
|
// ⭐ 根据 unitId 和 system_type_id 从 selectList 计算系统下拉
|
|
systemList.value = Array.from(
|
|
new Map(
|
|
selectList
|
|
.filter(item => item.systemTypeId === type && item.unitId === formModel.unit)
|
|
.map(item => [
|
|
item.systemId,
|
|
{
|
|
...item
|
|
},
|
|
]),
|
|
).values(),
|
|
)
|
|
// ✅ 默认选中第一个系统
|
|
formModel.system = systemList.value[0].systemId
|
|
formActionType.setFieldsValue({
|
|
system: systemList.value[0].systemId,
|
|
})
|
|
},
|
|
}),
|
|
},
|
|
|
|
{
|
|
label: '子系统',
|
|
field: 'system',
|
|
component: 'Select',
|
|
defaultValue: systemList.value?.[0]?.systemId,
|
|
colProps: { span: 8},
|
|
componentProps: ({ formModel, formActionType }) => ({
|
|
placeholder: '子系统',
|
|
allowClear: false,
|
|
options: systemList.value.map(sys => ({
|
|
value: sys.systemId,
|
|
label: sys.systemName,
|
|
})),
|
|
onChange: (system: number) => {
|
|
alert("子系统改变事件")
|
|
console.log(111,system)
|
|
console.log(selectList)
|
|
console.log(system)
|
|
|
|
// ⭐ 根据 unitId 从 selectList 计算系统下拉
|
|
mpList.value = Array.from(
|
|
new Map(
|
|
selectList
|
|
.filter(item => item.systemId === system)
|
|
.map(item => [
|
|
item.mpId,
|
|
{
|
|
...item
|
|
},
|
|
]),
|
|
).values(),
|
|
)
|
|
console.log(mpList.value)
|
|
// ✅ 默认选中第一个系统
|
|
formModel.mpId = mpList.value[0].mpId
|
|
formActionType.setFieldsValue({
|
|
mpId: mpList.value[0].mpId,
|
|
})
|
|
|
|
},
|
|
})
|
|
},
|
|
{
|
|
label: '模型实例',
|
|
field: 'mpId',
|
|
component: 'Select',
|
|
defaultValue: mpList.value?.[0]?.mpId,
|
|
colProps: { span:10},
|
|
componentProps: () => ({
|
|
placeholder: '模型实例',
|
|
allowClear: false,
|
|
options:mpList.value.map(instant => ({
|
|
value: instant.mpId,
|
|
label: instant.mpName,
|
|
})),
|
|
onChange: async (mpId: number) => {
|
|
// alert("模型实例改变事件")
|
|
const res = await getInstantPoint(mpId)
|
|
console.log(res)
|
|
pointList.value=res;
|
|
formModel.inputName = res.data?.[0]?.inputName
|
|
formActionType.setFieldsValue({
|
|
inputName: res.data?.[0]?.inputName,
|
|
})
|
|
}
|
|
})},
|
|
{
|
|
label: '预警点号',
|
|
field: 'inputName',
|
|
component: 'Select',
|
|
defaultValue: pointList.value?.[0]?.inputName,
|
|
colProps: { span:11},
|
|
componentProps: () => ({
|
|
placeholder: '预警点号',
|
|
allowClear: false,
|
|
options:pointList.value.map(point => ({
|
|
value: point.inputName,
|
|
label: point.inputName,
|
|
})),
|
|
onChange: async (inputName: string) => {
|
|
// alert("预警点号改变事件")
|
|
}
|
|
})}
|
|
]
|
|
|