|
@@ -1,6 +1,12 @@
|
|
<template>
|
|
<template>
|
|
<el-dialog v-model="isShow" width="1100px" :before-close="handleClose">
|
|
<el-dialog v-model="isShow" width="1100px" :before-close="handleClose">
|
|
- <el-form ref="ruleFormRef" :model="form" :rules="rules" label-position="top" label-width="200px">
|
|
|
|
|
|
+ <el-form
|
|
|
|
+ ref="ruleFormRef"
|
|
|
|
+ :model="form"
|
|
|
|
+ :rules="rules"
|
|
|
|
+ label-position="top"
|
|
|
|
+ label-width="200px"
|
|
|
|
+ >
|
|
<el-row type="flex" justify="space-between" align="middle" :gutter="10">
|
|
<el-row type="flex" justify="space-between" align="middle" :gutter="10">
|
|
<el-col :span="15">
|
|
<el-col :span="15">
|
|
<el-form-item prop="name">
|
|
<el-form-item prop="name">
|
|
@@ -8,89 +14,170 @@
|
|
<el-input v-model="form.name" />
|
|
<el-input v-model="form.name" />
|
|
</el-form-item>
|
|
</el-form-item>
|
|
</el-col>
|
|
</el-col>
|
|
- <el-col :span="9" style="
|
|
|
|
|
|
+ <el-col
|
|
|
|
+ :span="9"
|
|
|
|
+ style="
|
|
display: flex;
|
|
display: flex;
|
|
justify-content: space-between;
|
|
justify-content: space-between;
|
|
align-items: center;
|
|
align-items: center;
|
|
- ">
|
|
|
|
|
|
+ "
|
|
|
|
+ >
|
|
<el-form-item prop="category">
|
|
<el-form-item prop="category">
|
|
<el-tag>报警类别</el-tag>
|
|
<el-tag>报警类别</el-tag>
|
|
<el-select v-model="form.category" class="select-mini">
|
|
<el-select v-model="form.category" class="select-mini">
|
|
- <el-option key="1" label="风机" value="1" />
|
|
|
|
- <el-option key="2" label="电气" value="2" />
|
|
|
|
|
|
+ <el-option
|
|
|
|
+ key="windturbine"
|
|
|
|
+ label="风机"
|
|
|
|
+ value="windturbine"
|
|
|
|
+ ></el-option>
|
|
|
|
+ <el-option
|
|
|
|
+ key="inverter"
|
|
|
|
+ label="逆变器"
|
|
|
|
+ value="inverter"
|
|
|
|
+ ></el-option>
|
|
|
|
+ <el-option
|
|
|
|
+ key="booststation"
|
|
|
|
+ label="升压站"
|
|
|
|
+ value="booststation"
|
|
|
|
+ ></el-option>
|
|
</el-select>
|
|
</el-select>
|
|
</el-form-item>
|
|
</el-form-item>
|
|
<el-form-item prop="rank">
|
|
<el-form-item prop="rank">
|
|
<el-tag>报警级别</el-tag>
|
|
<el-tag>报警级别</el-tag>
|
|
<el-select v-model="form.rank" class="select-mini">
|
|
<el-select v-model="form.rank" class="select-mini">
|
|
- <el-option key="1" label="低" value="1" />
|
|
|
|
- <el-option key="2" label="中低" value="2" />
|
|
|
|
- <el-option key="3" label="中" value="3" />
|
|
|
|
- <el-option key="4" label="中高" value="4" />
|
|
|
|
- <el-option key="5" label="高" value="5" />
|
|
|
|
|
|
+ <el-option key="1" label="低级" value="1" />
|
|
|
|
+ <el-option key="2" label="低中级" value="2" />
|
|
|
|
+ <el-option key="3" label="中级" value="3" />
|
|
|
|
+ <el-option key="4" label="中高级" value="4" />
|
|
|
|
+ <el-option key="5" label="高级" value="5" />
|
|
</el-select>
|
|
</el-select>
|
|
</el-form-item>
|
|
</el-form-item>
|
|
<el-form-item prop="enabled">
|
|
<el-form-item prop="enabled">
|
|
<el-tag>是否启用</el-tag>
|
|
<el-tag>是否启用</el-tag>
|
|
- <el-switch v-model="form.enabled" :active-value="1" :inactive-value="0" active-color="#13ce66" />
|
|
|
|
|
|
+ <el-switch
|
|
|
|
+ v-model="form.enabled"
|
|
|
|
+ :active-value="true"
|
|
|
|
+ :inactive-value="false"
|
|
|
|
+ active-color="#13ce66"
|
|
|
|
+ />
|
|
</el-form-item>
|
|
</el-form-item>
|
|
</el-col>
|
|
</el-col>
|
|
</el-row>
|
|
</el-row>
|
|
<el-row :gutter="10">
|
|
<el-row :gutter="10">
|
|
<el-col :span="6">
|
|
<el-col :span="6">
|
|
- <el-form-item prop="station">
|
|
|
|
|
|
+ <el-form-item prop="stationId">
|
|
<el-tag>风场</el-tag>
|
|
<el-tag>风场</el-tag>
|
|
- <el-select v-model="form.station" style="width: 100%" @change="stationChange">
|
|
|
|
- <el-option v-for="item in stationList" :key="item.id" :value="item.id" :label="item.name" />
|
|
|
|
|
|
+ <el-select
|
|
|
|
+ v-model="form.stationId"
|
|
|
|
+ style="width: 100%"
|
|
|
|
+ @change="stationChange"
|
|
|
|
+ >
|
|
|
|
+ <el-option
|
|
|
|
+ v-for="item in stationList"
|
|
|
|
+ :key="item.id"
|
|
|
|
+ :value="item.id"
|
|
|
|
+ :label="item.name"
|
|
|
|
+ />
|
|
</el-select>
|
|
</el-select>
|
|
</el-form-item>
|
|
</el-form-item>
|
|
<el-form-item prop="modelId">
|
|
<el-form-item prop="modelId">
|
|
<el-tag>风机型号</el-tag>
|
|
<el-tag>风机型号</el-tag>
|
|
- <el-select v-model="form.modelId" style="width: 100%" @change="modelIdChange">
|
|
|
|
- <el-option v-for="item in state.modelList" :key="item" :value="item" :label="item" />
|
|
|
|
|
|
+ <el-select
|
|
|
|
+ v-model="form.modelId"
|
|
|
|
+ style="width: 100%"
|
|
|
|
+ @change="modelIdChange"
|
|
|
|
+ >
|
|
|
|
+ <el-option
|
|
|
|
+ v-for="item in state.modelList"
|
|
|
|
+ :key="item"
|
|
|
|
+ :value="item"
|
|
|
|
+ :label="item"
|
|
|
|
+ />
|
|
</el-select>
|
|
</el-select>
|
|
</el-form-item>
|
|
</el-form-item>
|
|
<el-form-item prop="relatedParts">
|
|
<el-form-item prop="relatedParts">
|
|
<el-tag>所属部件</el-tag>
|
|
<el-tag>所属部件</el-tag>
|
|
<el-select v-model="form.relatedParts" style="width: 100%">
|
|
<el-select v-model="form.relatedParts" style="width: 100%">
|
|
- <el-option v-for="i in state.relatePartList" :key="i.partCode" :value="i.partCode" :label="i.name" />
|
|
|
|
|
|
+ <el-option
|
|
|
|
+ v-for="i in state.relatePartList"
|
|
|
|
+ :key="i.partCode"
|
|
|
|
+ :value="i.partCode"
|
|
|
|
+ :label="i.name"
|
|
|
|
+ />
|
|
</el-select>
|
|
</el-select>
|
|
</el-form-item>
|
|
</el-form-item>
|
|
<el-form-item prop="fault">
|
|
<el-form-item prop="fault">
|
|
<el-tag>预警类型</el-tag>
|
|
<el-tag>预警类型</el-tag>
|
|
<el-select v-model="form.project" style="width: 100%">
|
|
<el-select v-model="form.project" style="width: 100%">
|
|
- <el-option v-for="i in faultList" :key="i.value" :value="i.value" :label="i.name" />
|
|
|
|
|
|
+ <el-option
|
|
|
|
+ v-for="i in faultList"
|
|
|
|
+ :key="i.value"
|
|
|
|
+ :value="i.value"
|
|
|
|
+ :label="i.name"
|
|
|
|
+ />
|
|
</el-select>
|
|
</el-select>
|
|
</el-form-item>
|
|
</el-form-item>
|
|
</el-col>
|
|
</el-col>
|
|
<el-col :span="9">
|
|
<el-col :span="9">
|
|
- <el-form-item prop="expressionShow">
|
|
|
|
|
|
+ <el-form-item prop="expression">
|
|
<el-tag>表达式</el-tag>
|
|
<el-tag>表达式</el-tag>
|
|
- <el-input type="textarea" rows="14" v-model="form.expressionShow" :value="form.expressionShow"
|
|
|
|
- id="expressionInput" />
|
|
|
|
|
|
+ <el-input
|
|
|
|
+ type="textarea"
|
|
|
|
+ rows="14"
|
|
|
|
+ v-model="form.expression"
|
|
|
|
+ :value="form.expression"
|
|
|
|
+ id="expressionInput"
|
|
|
|
+ />
|
|
</el-form-item>
|
|
</el-form-item>
|
|
</el-col>
|
|
</el-col>
|
|
<el-col :span="9">
|
|
<el-col :span="9">
|
|
<el-tabs type="border-card">
|
|
<el-tabs type="border-card">
|
|
<el-tab-pane label="AI测点">
|
|
<el-tab-pane label="AI测点">
|
|
<el-input v-model="state.AIPointSearch"> </el-input>
|
|
<el-input v-model="state.AIPointSearch"> </el-input>
|
|
- <el-table size="mini" fit :show-header="false" :highlight-current-row="true" :stripe="false"
|
|
|
|
- :border="false" height="240" :data="filterAIList" @row-dblclick="rowDbclick">
|
|
|
|
|
|
+ <el-table
|
|
|
|
+ size="mini"
|
|
|
|
+ fit
|
|
|
|
+ :show-header="false"
|
|
|
|
+ :highlight-current-row="true"
|
|
|
|
+ :stripe="false"
|
|
|
|
+ :border="false"
|
|
|
|
+ height="240"
|
|
|
|
+ :data="filterAIList"
|
|
|
|
+ @row-dblclick="rowDbclick"
|
|
|
|
+ >
|
|
<el-table-column prop="uniformCode" />
|
|
<el-table-column prop="uniformCode" />
|
|
<el-table-column prop="name" />
|
|
<el-table-column prop="name" />
|
|
</el-table>
|
|
</el-table>
|
|
</el-tab-pane>
|
|
</el-tab-pane>
|
|
<el-tab-pane label="DI测点">
|
|
<el-tab-pane label="DI测点">
|
|
<el-input v-model="state.DIPointSearch"> </el-input>
|
|
<el-input v-model="state.DIPointSearch"> </el-input>
|
|
- <el-table size="mini" fit :show-header="false" :highlight-current-row="true" :stripe="false"
|
|
|
|
- :border="false" height="240" :data="filterDIList" @row-dblclick="rowDbclick">
|
|
|
|
|
|
+ <el-table
|
|
|
|
+ size="mini"
|
|
|
|
+ fit
|
|
|
|
+ :show-header="false"
|
|
|
|
+ :highlight-current-row="true"
|
|
|
|
+ :stripe="false"
|
|
|
|
+ :border="false"
|
|
|
|
+ height="240"
|
|
|
|
+ :data="filterDIList"
|
|
|
|
+ @row-dblclick="rowDbclick"
|
|
|
|
+ >
|
|
<el-table-column prop="uniformCode" />
|
|
<el-table-column prop="uniformCode" />
|
|
<el-table-column prop="name" />
|
|
<el-table-column prop="name" />
|
|
</el-table>
|
|
</el-table>
|
|
</el-tab-pane>
|
|
</el-tab-pane>
|
|
<el-tab-pane label="函数">
|
|
<el-tab-pane label="函数">
|
|
- <el-table size="mini" fit :show-header="false" :highlight-current-row="true" :stripe="false"
|
|
|
|
- :border="false" :height="270" :data="func" @row-dblclick="tabFuncRowClickHandle">
|
|
|
|
|
|
+ <el-table
|
|
|
|
+ size="mini"
|
|
|
|
+ fit
|
|
|
|
+ :show-header="false"
|
|
|
|
+ :highlight-current-row="true"
|
|
|
|
+ :stripe="false"
|
|
|
|
+ :border="false"
|
|
|
|
+ :height="270"
|
|
|
|
+ :data="func"
|
|
|
|
+ @row-dblclick="tabFuncRowClickHandle"
|
|
|
|
+ >
|
|
<el-table-column min-width="60%">
|
|
<el-table-column min-width="60%">
|
|
<template #default="scope">
|
|
<template #default="scope">
|
|
<el-popover trigger="hover" placement="bottom">
|
|
<el-popover trigger="hover" placement="bottom">
|
|
@@ -98,7 +185,7 @@
|
|
<p>参数:{{ scope.row.param }}</p>
|
|
<p>参数:{{ scope.row.param }}</p>
|
|
<template #reference>
|
|
<template #reference>
|
|
<span size="medium" transition="fade-in-linear">{{
|
|
<span size="medium" transition="fade-in-linear">{{
|
|
- scope.row.lab
|
|
|
|
|
|
+ scope.row.lab
|
|
}}</span>
|
|
}}</span>
|
|
</template>
|
|
</template>
|
|
</el-popover>
|
|
</el-popover>
|
|
@@ -111,7 +198,7 @@
|
|
<p>参数:{{ scope.row.param }}</p>
|
|
<p>参数:{{ scope.row.param }}</p>
|
|
<template #reference>
|
|
<template #reference>
|
|
<span size="medium" transition="fade-in-linear">{{
|
|
<span size="medium" transition="fade-in-linear">{{
|
|
- scope.row.name
|
|
|
|
|
|
+ scope.row.name
|
|
}}</span>
|
|
}}</span>
|
|
</template>
|
|
</template>
|
|
</el-popover>
|
|
</el-popover>
|
|
@@ -121,8 +208,14 @@
|
|
</el-tab-pane>
|
|
</el-tab-pane>
|
|
<el-tab-pane label="运算符">
|
|
<el-tab-pane label="运算符">
|
|
<el-button-group>
|
|
<el-button-group>
|
|
- <el-button v-for="item in operator" :key="item" plain type="primary" @click="elInputSplit(item)"
|
|
|
|
- style="width: 60px; margin: 7px 12px; height: 40px">
|
|
|
|
|
|
+ <el-button
|
|
|
|
+ v-for="item in operator"
|
|
|
|
+ :key="item"
|
|
|
|
+ plain
|
|
|
|
+ type="primary"
|
|
|
|
+ @click="elInputSplit(item)"
|
|
|
|
+ style="width: 60px; margin: 7px 12px; height: 40px"
|
|
|
|
+ >
|
|
{{ item }}
|
|
{{ item }}
|
|
</el-button>
|
|
</el-button>
|
|
</el-button-group>
|
|
</el-button-group>
|
|
@@ -142,7 +235,9 @@
|
|
<template #footer>
|
|
<template #footer>
|
|
<span class="dialog-footer">
|
|
<span class="dialog-footer">
|
|
<el-button @click="closeDialog">取 消</el-button>
|
|
<el-button @click="closeDialog">取 消</el-button>
|
|
- <el-button type="primary" @click="submitForm(ruleFormRef)">确 定</el-button>
|
|
|
|
|
|
+ <el-button type="primary" @click="submitForm(ruleFormRef)"
|
|
|
|
+ >确 定</el-button
|
|
|
|
+ >
|
|
</span>
|
|
</span>
|
|
</template>
|
|
</template>
|
|
</el-dialog>
|
|
</el-dialog>
|
|
@@ -151,13 +246,14 @@
|
|
import { ref, onMounted, reactive, computed, watch, nextTick } from "vue";
|
|
import { ref, onMounted, reactive, computed, watch, nextTick } from "vue";
|
|
import { ElMessageBox, ElMessage } from "element-plus";
|
|
import { ElMessageBox, ElMessage } from "element-plus";
|
|
import {
|
|
import {
|
|
-// fetchAIPointList,
|
|
|
|
-// fetchDIPointList,
|
|
|
|
-// fetchRelatePart,
|
|
|
|
|
|
+ // fetchAIPointList,
|
|
|
|
+ // fetchDIPointList,
|
|
|
|
+ // fetchRelatePart,
|
|
custombj_postSave,
|
|
custombj_postSave,
|
|
fetch_electrical_point_ai,
|
|
fetch_electrical_point_ai,
|
|
fetch_electrical_point_di,
|
|
fetch_electrical_point_di,
|
|
- getStationinfo,
|
|
|
|
|
|
+ getWtModel,
|
|
|
|
+ fetchRelatePartAndAlarmType,
|
|
} from "/@/api/api.js";
|
|
} from "/@/api/api.js";
|
|
import { useStore } from "vuex";
|
|
import { useStore } from "vuex";
|
|
const store = useStore();
|
|
const store = useStore();
|
|
@@ -168,11 +264,11 @@ onMounted(() => {
|
|
watch(
|
|
watch(
|
|
() => props.isVisible,
|
|
() => props.isVisible,
|
|
(val, old) => {
|
|
(val, old) => {
|
|
- isShow.value = val
|
|
|
|
|
|
+ isShow.value = val;
|
|
},
|
|
},
|
|
{
|
|
{
|
|
deep: true,
|
|
deep: true,
|
|
- },
|
|
|
|
|
|
+ }
|
|
);
|
|
);
|
|
watch(
|
|
watch(
|
|
() => props.form?.id,
|
|
() => props.form?.id,
|
|
@@ -192,19 +288,19 @@ watch(
|
|
() => props.form,
|
|
() => props.form,
|
|
(val, old) => {
|
|
(val, old) => {
|
|
nextTick(() => {
|
|
nextTick(() => {
|
|
- form.value = val
|
|
|
|
|
|
+ form.value = val;
|
|
});
|
|
});
|
|
},
|
|
},
|
|
{
|
|
{
|
|
deep: true,
|
|
deep: true,
|
|
}
|
|
}
|
|
-)
|
|
|
|
-const isShow=ref(false);
|
|
|
|
|
|
+);
|
|
|
|
+const isShow = ref(false);
|
|
const form = ref({
|
|
const form = ref({
|
|
id: "",
|
|
id: "",
|
|
name: "",
|
|
name: "",
|
|
descriptionShow: "",
|
|
descriptionShow: "",
|
|
- expressionShow: "",
|
|
|
|
|
|
+ expression: "",
|
|
tag: "",
|
|
tag: "",
|
|
rank: "",
|
|
rank: "",
|
|
enabled: "1", // 1可用-0禁用
|
|
enabled: "1", // 1可用-0禁用
|
|
@@ -220,7 +316,7 @@ const form = ref({
|
|
taskstart: "",
|
|
taskstart: "",
|
|
relatedParts: "",
|
|
relatedParts: "",
|
|
userName: "",
|
|
userName: "",
|
|
-})
|
|
|
|
|
|
+});
|
|
const emits = defineEmits(["close"]);
|
|
const emits = defineEmits(["close"]);
|
|
const props = defineProps({
|
|
const props = defineProps({
|
|
isVisible: {
|
|
isVisible: {
|
|
@@ -480,8 +576,8 @@ const rules = reactive({
|
|
name: [{ required: true, message: "请输入规则名称", trigger: "blur" }],
|
|
name: [{ required: true, message: "请输入规则名称", trigger: "blur" }],
|
|
category: [{ required: true, message: "请选择报警类别", trigger: "change" }],
|
|
category: [{ required: true, message: "请选择报警类别", trigger: "change" }],
|
|
rank: [{ required: true, message: "请选择报警级别", trigger: "change" }],
|
|
rank: [{ required: true, message: "请选择报警级别", trigger: "change" }],
|
|
- station: [{ required: true, message: "请选择风场", trigger: "change" }],
|
|
|
|
- expressionShow: [
|
|
|
|
|
|
+ stationId: [{ required: true, message: "请选择风场", trigger: "change" }],
|
|
|
|
+ expression: [
|
|
{ required: true, message: "表达式不能为空", trigger: "change" },
|
|
{ required: true, message: "表达式不能为空", trigger: "change" },
|
|
],
|
|
],
|
|
});
|
|
});
|
|
@@ -498,20 +594,20 @@ const modelIdChange = async () => {
|
|
};
|
|
};
|
|
//机型
|
|
//机型
|
|
const getequipmentmodel_list = async () => {
|
|
const getequipmentmodel_list = async () => {
|
|
- const { data } = await getStationinfo(form.value.station);
|
|
|
|
- state.modelList = data[0].modelList;
|
|
|
|
|
|
+ const { data } = await getWtModel(form.value.stationId);
|
|
|
|
+ state.modelList = data;
|
|
};
|
|
};
|
|
//所属部件
|
|
//所属部件
|
|
const getfetchRelatePart = async () => {
|
|
const getfetchRelatePart = async () => {
|
|
- const res = await fetchRelatePart();
|
|
|
|
|
|
+ const res = await fetchRelatePartAndAlarmType();
|
|
state.relatePartList = res;
|
|
state.relatePartList = res;
|
|
};
|
|
};
|
|
// 查询风场AI、DI测点
|
|
// 查询风场AI、DI测点
|
|
const getfetchAIPointList = async () => {
|
|
const getfetchAIPointList = async () => {
|
|
-// const res = await fetchAIPointList(form.value.station, form.value.modelId);
|
|
|
|
-// state.AIPointList = res.sort(function (a, b) {
|
|
|
|
-// return a.uniformCode - b.uniformCode;
|
|
|
|
-// });
|
|
|
|
|
|
+ // const res = await fetchAIPointList(form.value.station, form.value.modelId);
|
|
|
|
+ // state.AIPointList = res.sort(function (a, b) {
|
|
|
|
+ // return a.uniformCode - b.uniformCode;
|
|
|
|
+ // });
|
|
};
|
|
};
|
|
const filterAIList = computed(() =>
|
|
const filterAIList = computed(() =>
|
|
state.AIPointList?.filter(
|
|
state.AIPointList?.filter(
|
|
@@ -568,7 +664,7 @@ const tabFuncRowClickHandle = (row) => {
|
|
elInput.selectionStart = startPos + func.length - 1;
|
|
elInput.selectionStart = startPos + func.length - 1;
|
|
elInput.selectionEnd = startPos + func.length - 1;
|
|
elInput.selectionEnd = startPos + func.length - 1;
|
|
}
|
|
}
|
|
- form.value.expressionShow = result; // 赋值给表单中的的字段
|
|
|
|
|
|
+ form.value.expression = result; // 赋值给表单中的的字段
|
|
};
|
|
};
|
|
//rowDbclick
|
|
//rowDbclick
|
|
const rowDbclick = (row) => {
|
|
const rowDbclick = (row) => {
|
|
@@ -593,14 +689,14 @@ const save = async () => {
|
|
const res = await custombj_postSave(form.value);
|
|
const res = await custombj_postSave(form.value);
|
|
console.warn(res);
|
|
console.warn(res);
|
|
ElMessage.success(`保存成功!`);
|
|
ElMessage.success(`保存成功!`);
|
|
- closeDialog()
|
|
|
|
|
|
+ closeDialog();
|
|
};
|
|
};
|
|
//提交
|
|
//提交
|
|
const submitForm = async (formEl) => {
|
|
const submitForm = async (formEl) => {
|
|
if (!formEl) return;
|
|
if (!formEl) return;
|
|
await formEl.validate((valid, fields) => {
|
|
await formEl.validate((valid, fields) => {
|
|
if (valid) {
|
|
if (valid) {
|
|
- save()
|
|
|
|
|
|
+ save();
|
|
} else {
|
|
} else {
|
|
console.log("error submit!", fields);
|
|
console.log("error submit!", fields);
|
|
}
|
|
}
|
|
@@ -623,8 +719,8 @@ const handleClose = () => {
|
|
//关闭触发事件
|
|
//关闭触发事件
|
|
const closeDialog = () => {
|
|
const closeDialog = () => {
|
|
resetForm(ruleFormRef.value);
|
|
resetForm(ruleFormRef.value);
|
|
- state.AIPointList = []
|
|
|
|
- state.DIPointList = []
|
|
|
|
|
|
+ state.AIPointList = [];
|
|
|
|
+ state.DIPointList = [];
|
|
toEmits();
|
|
toEmits();
|
|
};
|
|
};
|
|
</script>
|
|
</script>
|