|
@@ -0,0 +1,698 @@
|
|
|
+<template>
|
|
|
+ <div class="alarm-center-1">
|
|
|
+ <div class="action-bar">
|
|
|
+ <div class="query mg-b-16">
|
|
|
+ <div class="query-items">
|
|
|
+ <div class="query-item">
|
|
|
+ <div class="lable">风场:</div>
|
|
|
+ <div class="search-input">
|
|
|
+ <el-select
|
|
|
+ v-model="wpvalue"
|
|
|
+ clearable
|
|
|
+ placeholder="请选择"
|
|
|
+ popper-class="select"
|
|
|
+ >
|
|
|
+ <el-option
|
|
|
+ v-for="item in wpoptions"
|
|
|
+ :key="item.id"
|
|
|
+ :label="item.name"
|
|
|
+ :value="item.id"
|
|
|
+ >
|
|
|
+ </el-option>
|
|
|
+ </el-select>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="query-item">
|
|
|
+ <div class="lable">开始日期:</div>
|
|
|
+ <div class="search-input">
|
|
|
+ <el-date-picker
|
|
|
+ v-model="startdate"
|
|
|
+ type="date"
|
|
|
+ placeholder="选择日期"
|
|
|
+ popper-class="date-select"
|
|
|
+ >
|
|
|
+ </el-date-picker>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="query-item">
|
|
|
+ <div class="lable">结束日期:</div>
|
|
|
+ <div class="search-input">
|
|
|
+ <el-date-picker
|
|
|
+ v-model="enddate"
|
|
|
+ type="date"
|
|
|
+ placeholder="选择日期"
|
|
|
+ popper-class="date-select"
|
|
|
+ >
|
|
|
+ </el-date-picker>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="query-item">
|
|
|
+ <div class="lable">规则:</div>
|
|
|
+ <el-cascader
|
|
|
+ style="width: 240px"
|
|
|
+ size="mini"
|
|
|
+ popper-class="search-select"
|
|
|
+ :options="cascaderOptions"
|
|
|
+ :props="cascaderProps"
|
|
|
+ v-model="cascaderSel"
|
|
|
+ collapse-tags
|
|
|
+ :clearable="true"
|
|
|
+ ></el-cascader>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="query-actions">
|
|
|
+ <button class="btn green" @click="searchData">搜索</button>
|
|
|
+ <button class="btn green" @click="searchTree">筛选</button>
|
|
|
+ <!-- <button class="btn green" @click="fx">分析</button> -->
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <panel-3 class="table-panel">
|
|
|
+ <table-3 :data="tableData" :height="'85vh'">
|
|
|
+ <template v-for="(item, i) in column" :key="i" #[item]="scope">
|
|
|
+ <div class="bar" @click="showChart(scope)">
|
|
|
+ <div
|
|
|
+ class="bar-percent"
|
|
|
+ :style="{ width: scope?.data?.countStyle }"
|
|
|
+ ></div>
|
|
|
+ <span class="value">{{ scope?.data?.count }} 次数</span>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <div class="bar" @click="showChart(scope)">
|
|
|
+ <div
|
|
|
+ class="bar-percent"
|
|
|
+ :style="{ width: scope?.data?.timeStyle }"
|
|
|
+ ></div>
|
|
|
+ <span class="value">{{ scope?.data?.time }} 分钟</span>
|
|
|
+ </div>
|
|
|
+ </template>
|
|
|
+ </table-3>
|
|
|
+ </panel-3>
|
|
|
+ <el-dialog
|
|
|
+ :title="dialogTitle"
|
|
|
+ v-model="dialogVisible"
|
|
|
+ width="70%"
|
|
|
+ top="10vh"
|
|
|
+ custom-class="modal"
|
|
|
+ :close-on-click-modal="false"
|
|
|
+ >
|
|
|
+ <div class="searchForm">
|
|
|
+ <div class="choose">
|
|
|
+ <button class="btn green">等间隔</button>
|
|
|
+ <!-- <button :class="chooseStatus?'btn green':'btn'" @click="switchChange(1,'original')">原始数据</button> -->
|
|
|
+ </div>
|
|
|
+ <el-select
|
|
|
+ v-if="!chooseStatus"
|
|
|
+ @change="switchChange(selectValue)"
|
|
|
+ class="inputs"
|
|
|
+ v-model="selectValue"
|
|
|
+ placeholder="请选择"
|
|
|
+ >
|
|
|
+ <el-option
|
|
|
+ v-for="item in timeoptions"
|
|
|
+ :key="item.value"
|
|
|
+ :label="item.label"
|
|
|
+ :value="item.value"
|
|
|
+ >
|
|
|
+ </el-option>
|
|
|
+ </el-select>
|
|
|
+ </div>
|
|
|
+ <multiple-y-line-chart-normal
|
|
|
+ height="500px"
|
|
|
+ :list="Analysis"
|
|
|
+ :yAxises="AnalysisYAxises"
|
|
|
+ :showLegend="true"
|
|
|
+ />
|
|
|
+ </el-dialog>
|
|
|
+ <el-dialog
|
|
|
+ :title="dialogTitleFX"
|
|
|
+ v-model="dialogVisibleFX"
|
|
|
+ width="70%"
|
|
|
+ top="10vh"
|
|
|
+ custom-class="modal"
|
|
|
+ :close-on-click-modal="false"
|
|
|
+ :destroy-on-close="true"
|
|
|
+ >
|
|
|
+ <FX :date="startdate" :wpid="wpvalue" />
|
|
|
+ </el-dialog>
|
|
|
+ </div>
|
|
|
+</template>
|
|
|
+
|
|
|
+<script>
|
|
|
+import Panel3 from "../../components/coms/panel/panel3.vue";
|
|
|
+import Table3 from "../../components/coms/table/table3.vue";
|
|
|
+import MultipleYLineChartNormal from "./multiple-y-line-chart-normal.vue";
|
|
|
+import FX from "./alarm-center-yjfx.vue";
|
|
|
+import BASE from "@tools/basicTool.js";
|
|
|
+export default {
|
|
|
+ components: {
|
|
|
+ Panel3,
|
|
|
+ Table3,
|
|
|
+ MultipleYLineChartNormal,
|
|
|
+ FX,
|
|
|
+ },
|
|
|
+ data() {
|
|
|
+ return {
|
|
|
+ dialogTitleFX: "",
|
|
|
+ dialogVisibleFX: false,
|
|
|
+ dialogTitle: "",
|
|
|
+ chooseStatus: false,
|
|
|
+ dialogVisible: false,
|
|
|
+ chooseTime: [],
|
|
|
+ wpvalue: "",
|
|
|
+ wpid: "",
|
|
|
+ wtId: "",
|
|
|
+ descName: "",
|
|
|
+ AnalysisName: "",
|
|
|
+ AnalysisUnit: "",
|
|
|
+ Analysis: [
|
|
|
+ {
|
|
|
+ title: "",
|
|
|
+ yAxisIndex: 0, // 使用单位
|
|
|
+ value: [],
|
|
|
+ },
|
|
|
+ ],
|
|
|
+ AnalysisYAxises: [
|
|
|
+ {
|
|
|
+ name: "",
|
|
|
+ min: "",
|
|
|
+ max: "",
|
|
|
+ unit: "",
|
|
|
+ position: "left",
|
|
|
+ },
|
|
|
+ {
|
|
|
+ name: "",
|
|
|
+ min: "",
|
|
|
+ max: "",
|
|
|
+ unit: "",
|
|
|
+ position: "right",
|
|
|
+ },
|
|
|
+ ],
|
|
|
+ selectValue: "60",
|
|
|
+ timeoptions: [
|
|
|
+ {
|
|
|
+ value: "60",
|
|
|
+ label: "一分钟",
|
|
|
+ },
|
|
|
+ {
|
|
|
+ value: "300",
|
|
|
+ label: "五分钟",
|
|
|
+ },
|
|
|
+ {
|
|
|
+ value: "600",
|
|
|
+ label: "十分钟",
|
|
|
+ },
|
|
|
+ {
|
|
|
+ value: "1800",
|
|
|
+ label: "三十分钟",
|
|
|
+ },
|
|
|
+ {
|
|
|
+ value: "3600",
|
|
|
+ label: "一小时",
|
|
|
+ },
|
|
|
+ {
|
|
|
+ value: "86400",
|
|
|
+ label: "一天",
|
|
|
+ },
|
|
|
+ ],
|
|
|
+ wpoptions: "",
|
|
|
+ options: [],
|
|
|
+ cascaderOptions: [],
|
|
|
+ cascaderSel: [],
|
|
|
+ cascaderProps: {
|
|
|
+ multiple: true,
|
|
|
+ },
|
|
|
+ column: [
|
|
|
+ "风机偏航过程震动",
|
|
|
+ "齿轮箱轴承温升超过40度",
|
|
|
+ "三相电流不平衡",
|
|
|
+ "断轴或联轴器打滑",
|
|
|
+ "风速突变",
|
|
|
+ ],
|
|
|
+ columnObj: [
|
|
|
+ {
|
|
|
+ name: "风机编号",
|
|
|
+ field: "name",
|
|
|
+ width: "100px",
|
|
|
+ minWidth: "100px",
|
|
|
+ },
|
|
|
+ {
|
|
|
+ name: "风机偏航过程震动",
|
|
|
+ field: "风机偏航过程震动",
|
|
|
+ align: "left",
|
|
|
+ slot: true,
|
|
|
+ sortable: true,
|
|
|
+ minWidth: "200px",
|
|
|
+ },
|
|
|
+ {
|
|
|
+ name: "齿轮箱轴承温升超过40度",
|
|
|
+ field: "齿轮箱轴承温升超过40度",
|
|
|
+ align: "left",
|
|
|
+ slot: true,
|
|
|
+ sortable: true,
|
|
|
+ minWidth: "200px",
|
|
|
+ },
|
|
|
+ {
|
|
|
+ name: "三相电流不平衡",
|
|
|
+ field: "三相电流不平衡",
|
|
|
+ align: "left",
|
|
|
+ slot: true,
|
|
|
+ sortable: true,
|
|
|
+ minWidth: "200px",
|
|
|
+ },
|
|
|
+ {
|
|
|
+ name: "断轴或联轴器打滑",
|
|
|
+ field: "断轴或联轴器打滑",
|
|
|
+ align: "left",
|
|
|
+ slot: true,
|
|
|
+ sortable: true,
|
|
|
+ minWidth: "200px",
|
|
|
+ },
|
|
|
+ {
|
|
|
+ name: "风速突变",
|
|
|
+ align: "left",
|
|
|
+ field: "风速突变",
|
|
|
+ slot: true,
|
|
|
+ sortable: true,
|
|
|
+ minWidth: "200px",
|
|
|
+ },
|
|
|
+ ],
|
|
|
+ startdate: new Date(
|
|
|
+ new Date(new Date().setDate(new Date().getDate() - 1))
|
|
|
+ ).formatDate("yyyy-MM-dd"),
|
|
|
+ enddate: new Date(new Date()).formatDate("yyyy-MM-dd"),
|
|
|
+ tableData: {
|
|
|
+ column: [
|
|
|
+ {
|
|
|
+ name: "风机编号",
|
|
|
+ field: "name",
|
|
|
+ },
|
|
|
+ {
|
|
|
+ name: "主轴温度温差大于8度",
|
|
|
+ field: "v1",
|
|
|
+ align: "left",
|
|
|
+ slot: true,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ name: "浆叶角过小",
|
|
|
+ field: "v2",
|
|
|
+ align: "left",
|
|
|
+ slot: true,
|
|
|
+ },
|
|
|
+ ],
|
|
|
+ data: [
|
|
|
+ {
|
|
|
+ name: "MG01_01",
|
|
|
+ v1: {
|
|
|
+ count: 12,
|
|
|
+ time: 0,
|
|
|
+ },
|
|
|
+ },
|
|
|
+ ],
|
|
|
+ },
|
|
|
+ };
|
|
|
+ },
|
|
|
+ created() {
|
|
|
+ this.$nextTick(() => {
|
|
|
+ this.search();
|
|
|
+ });
|
|
|
+ },
|
|
|
+ methods: {
|
|
|
+ //对比
|
|
|
+ showChart(column) {
|
|
|
+ let that = this;
|
|
|
+ that.dialogTitle = column.column.name + ` (${column.row.name})`;
|
|
|
+ that.wtId = column.row.name;
|
|
|
+ that.descName = column.column.name;
|
|
|
+
|
|
|
+ that.requestDetailData(
|
|
|
+ that.wpvalue,
|
|
|
+ that.startdate,
|
|
|
+ that.enddate,
|
|
|
+ 60,
|
|
|
+ column.row.name,
|
|
|
+ column.column.name
|
|
|
+ );
|
|
|
+ },
|
|
|
+ requestDetailData(station, startTs, endTs, interval, wtId, name) {
|
|
|
+ let that = this;
|
|
|
+ BASE.showLoading();
|
|
|
+ that.API.requestData({
|
|
|
+ method: "GET",
|
|
|
+ subUrl: "/analysis/detail",
|
|
|
+ data: {
|
|
|
+ // station: that.wpvalue,
|
|
|
+ // startTs: new Date(that.startdate).getTime(),
|
|
|
+ // endTs: new Date(that.enddate).getTime(),
|
|
|
+ // // interval: 360,
|
|
|
+ // interval:1,
|
|
|
+ // wtId: column.row.name,
|
|
|
+ // name: column.column.name,
|
|
|
+ station: station,
|
|
|
+ startTs: new Date(
|
|
|
+ new Date(startTs).formatDate("yyyy/MM/dd")
|
|
|
+ ).getTime(),
|
|
|
+ endTs: new Date(new Date(endTs).formatDate("yyyy/MM/dd")).getTime(),
|
|
|
+ interval: interval,
|
|
|
+ wtId: wtId,
|
|
|
+ name: name,
|
|
|
+ },
|
|
|
+ success(res) {
|
|
|
+ if (res.data.length == 1) {
|
|
|
+ that.dialogVisible = true;
|
|
|
+ BASE.closeLoading();
|
|
|
+ let yaxises = [
|
|
|
+ {
|
|
|
+ name: "",
|
|
|
+ min: 0,
|
|
|
+ max: null,
|
|
|
+ unit: "",
|
|
|
+ position: "left",
|
|
|
+ },
|
|
|
+ ];
|
|
|
+ // yaxises.name = res.data[0].name;
|
|
|
+ yaxises.unit = res.data[0].unit;
|
|
|
+ that.AnalysisYAxises = yaxises;
|
|
|
+ let aKey1 = ["doubleValue"];
|
|
|
+ let aList1 = [
|
|
|
+ {
|
|
|
+ title: "",
|
|
|
+ // yAxisIndex:"",
|
|
|
+ smooth: true,
|
|
|
+ value: [],
|
|
|
+ },
|
|
|
+ ];
|
|
|
+ aKey1.forEach((keyEle, keyIndex) => {
|
|
|
+ aList1[keyIndex].title = res.data[keyIndex].name;
|
|
|
+ aList1[keyIndex].yAxisIndex = keyIndex
|
|
|
+ res.data[keyIndex].data.forEach((rEle) => {
|
|
|
+ aList1[keyIndex].value.push({
|
|
|
+ text: new Date(rEle.ts).formatDate("hh:mm"),
|
|
|
+ value: rEle.doubleValue,
|
|
|
+ });
|
|
|
+ });
|
|
|
+ });
|
|
|
+ that.Analysis = aList1;
|
|
|
+ } else if (res.data.length == 2) {
|
|
|
+ that.dialogVisible = true;
|
|
|
+ BASE.closeLoading();
|
|
|
+ let aKey2 = ["doubleValue", "doubleValue"];
|
|
|
+ let aList2 = [
|
|
|
+ {
|
|
|
+ title: "",
|
|
|
+ yAxisIndex:0,
|
|
|
+ smooth: true,
|
|
|
+ value: [],
|
|
|
+ },
|
|
|
+ {
|
|
|
+ title: "",
|
|
|
+ yAxisIndex:1,
|
|
|
+ smooth: true,
|
|
|
+ value: [],
|
|
|
+ },
|
|
|
+ ];
|
|
|
+ let yaxises1 = [
|
|
|
+ {
|
|
|
+ name: "",
|
|
|
+ min: 0,
|
|
|
+ max: null,
|
|
|
+ unit: "",
|
|
|
+ position: "left",
|
|
|
+ },
|
|
|
+ {
|
|
|
+ name: "",
|
|
|
+ min: 0,
|
|
|
+ max: null,
|
|
|
+ unit: "",
|
|
|
+ position: "right",
|
|
|
+ },
|
|
|
+ ];
|
|
|
+ res.data.forEach((aEle, keyIndex) => {
|
|
|
+ // res.data.forEach((rEle) => {
|
|
|
+ // yaxises1[aIndex].name = aEle.name;
|
|
|
+ yaxises1[keyIndex].unit = aEle.unit;
|
|
|
+ // aEle.unit = rEle.unit;
|
|
|
+ // });
|
|
|
+ aList2[keyIndex].title = res.data[keyIndex].name;
|
|
|
+ aList2[keyIndex].yAxisIndex = keyIndex
|
|
|
+ res.data[keyIndex].data.forEach((rEle) => {
|
|
|
+ aList2[keyIndex].value.push({
|
|
|
+ text: new Date(rEle.ts).formatDate("hh:mm"),
|
|
|
+ value: rEle.doubleValue,
|
|
|
+ });
|
|
|
+ });
|
|
|
+ });
|
|
|
+ that.AnalysisYAxises = yaxises1;
|
|
|
+ that.Analysis = aList2;
|
|
|
+ } else if (res.data.length >=3) {
|
|
|
+ that.dialogVisible = true;
|
|
|
+ BASE.closeLoading();
|
|
|
+ let aList4 = []
|
|
|
+ let yaxises2 = []
|
|
|
+ res.data.forEach((aEle, keyIndex) => {
|
|
|
+ yaxises2.push( {
|
|
|
+ name: "",
|
|
|
+ min: 0,
|
|
|
+ max: null,
|
|
|
+ unit: aEle.unit,
|
|
|
+ position: keyIndex %2 === 0 ? 'left' : 'right'
|
|
|
+ })
|
|
|
+ aList4.push({
|
|
|
+ title: aEle.name,
|
|
|
+ yAxisIndex: keyIndex,
|
|
|
+ smooth: true,
|
|
|
+ value: aEle.data.map(o => {
|
|
|
+ return {
|
|
|
+ text: new Date(o.ts).formatDate("hh:mm"),
|
|
|
+ value: o.doubleValue,
|
|
|
+ }
|
|
|
+ }),
|
|
|
+ })
|
|
|
+ });
|
|
|
+ console.log(aList4)
|
|
|
+ that.AnalysisYAxises = yaxises2;
|
|
|
+ that.Analysis = aList4;
|
|
|
+ } else if (res.data.length == 0) {
|
|
|
+ that.dialogVisible = false;
|
|
|
+ BASE.closeLoading();
|
|
|
+ that.BASE.showMsg({
|
|
|
+ type: "warning",
|
|
|
+ msg: "暂无数据",
|
|
|
+ });
|
|
|
+ }
|
|
|
+ },
|
|
|
+ });
|
|
|
+ },
|
|
|
+ //切换数据类型
|
|
|
+ switchChange(interval, status) {
|
|
|
+ if (status === "interval") {
|
|
|
+ this.chooseStatus = false;
|
|
|
+ this.selectValue = "60";
|
|
|
+ } else if (status === "original") {
|
|
|
+ this.chooseStatus = true;
|
|
|
+ }
|
|
|
+ this.requestDetailData(
|
|
|
+ this.wpvalue,
|
|
|
+ this.startdate,
|
|
|
+ this.enddate,
|
|
|
+ interval,
|
|
|
+ this.wtId,
|
|
|
+ this.descName
|
|
|
+ );
|
|
|
+ },
|
|
|
+
|
|
|
+ async search() {
|
|
|
+ const { data } = await this.API.requestData({
|
|
|
+ subUrl: "powercompare/windfarmAjax",
|
|
|
+ });
|
|
|
+ this.wpoptions = data.data;
|
|
|
+ this.wpvalue = data.data[0].id;
|
|
|
+ this.searchData();
|
|
|
+ },
|
|
|
+
|
|
|
+ async searchTree() {
|
|
|
+ let arr = [];
|
|
|
+ let columnObj = [
|
|
|
+ {
|
|
|
+ name: "风机编号",
|
|
|
+ field: "name",
|
|
|
+ minWidth: "100px",
|
|
|
+ },
|
|
|
+ ];
|
|
|
+ this.cascaderSel.forEach((e) => {
|
|
|
+ let obj = {
|
|
|
+ name: e[1],
|
|
|
+ field: e[1],
|
|
|
+ align: "left",
|
|
|
+ slot: true,
|
|
|
+ sortable: true,
|
|
|
+ minWidth: "200px",
|
|
|
+ };
|
|
|
+ columnObj.push(obj);
|
|
|
+
|
|
|
+ arr.push(e[1]);
|
|
|
+ });
|
|
|
+ this.columnObj = columnObj;
|
|
|
+ this.column = arr;
|
|
|
+ this.searchData();
|
|
|
+ },
|
|
|
+
|
|
|
+ async searchData() {
|
|
|
+ let enddate = new Date(
|
|
|
+ Date.parse(new Date(this.enddate)) + 24 * 3600 * 1000
|
|
|
+ ).formatDate("yyyy-MM-dd");
|
|
|
+ const { data } = await this.API.requestData({
|
|
|
+ showLoading: true,
|
|
|
+ baseURL: "http://192.168.1.18:8075/",
|
|
|
+ subUrl: "alarm/count/query/new2",
|
|
|
+ data: {
|
|
|
+ stationid: this.wpvalue,
|
|
|
+ startdate: new Date(this.startdate).formatDate("yyyy-MM-dd"),
|
|
|
+ enddate: enddate,
|
|
|
+ },
|
|
|
+ });
|
|
|
+
|
|
|
+ ////////
|
|
|
+ this.tableData = [];
|
|
|
+ const resData = data.data;
|
|
|
+ // const resData =this.resdata;
|
|
|
+ const column = this.columnObj;
|
|
|
+ let dataAll = []; // 总数据集合
|
|
|
+ resData.forEach((e) => {
|
|
|
+ let obj = {
|
|
|
+ name: Object.keys(e)[0],
|
|
|
+ };
|
|
|
+ let wpid = Object.keys(e)[0];
|
|
|
+ this.wpid = wpid;
|
|
|
+
|
|
|
+ e[wpid].forEach((k) => {
|
|
|
+ column.forEach((c) => {
|
|
|
+ if (k.alertText == c.name) {
|
|
|
+ const countStyle = k.count / (k.count + k.time);
|
|
|
+ const timeStyle = k.time / (k.count + k.time);
|
|
|
+ let obj1 = {
|
|
|
+ count: k.count,
|
|
|
+ countStyle: countStyle ? countStyle * 100 + "px" : "0",
|
|
|
+ time: k.time,
|
|
|
+ timeStyle: timeStyle ? timeStyle * 100 + "px" : "0",
|
|
|
+ };
|
|
|
+ obj[k.alertText] = obj1;
|
|
|
+ }
|
|
|
+ });
|
|
|
+ });
|
|
|
+ dataAll.push(obj);
|
|
|
+ });
|
|
|
+
|
|
|
+ this.tableData.column = column;
|
|
|
+ this.tableData.data = dataAll;
|
|
|
+
|
|
|
+ ///////////////////// 获取规则list
|
|
|
+ const map = {};
|
|
|
+ var windNum = [];
|
|
|
+ for (let i in resData) {
|
|
|
+ for (let k in resData[i]) {
|
|
|
+ map[k] = resData[i][k];
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // nmap为新的map 整理数据结构
|
|
|
+ const nmap = {};
|
|
|
+ for (let kv in map) {
|
|
|
+ var nchildMap = {};
|
|
|
+ var childrenMap = map[kv];
|
|
|
+ for (var ckv in childrenMap) {
|
|
|
+ var cckey = childrenMap[ckv].alertText;
|
|
|
+ var ccvalue = childrenMap[ckv];
|
|
|
+ nchildMap[cckey] = ccvalue;
|
|
|
+ }
|
|
|
+ nmap[kv] = nchildMap;
|
|
|
+ }
|
|
|
+ windNum = Object.keys(nmap);
|
|
|
+ var cascaderOptions = [];
|
|
|
+ var root = {}; // 原始根节点
|
|
|
+ var clumnsOnes = nmap[windNum[0]];
|
|
|
+ for (let k in clumnsOnes) {
|
|
|
+ let f = clumnsOnes[k].relatePartsText
|
|
|
+ ? clumnsOnes[k].relatePartsText
|
|
|
+ : "其他";
|
|
|
+ let fvalue = clumnsOnes[k].relateParts ? clumnsOnes[k].relateParts : "";
|
|
|
+
|
|
|
+ if (root[f]) {
|
|
|
+ // 已经存在此子节点
|
|
|
+ if (!root[f].children[k]) {
|
|
|
+ // 不存在子节点
|
|
|
+ root[f].children[k] = {};
|
|
|
+ root[f].children[k].value = root[f].children[k].label = k;
|
|
|
+ root[f].fobj.children.push(root[f].children[k]);
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ // 不存在子节点
|
|
|
+ root[f] = {};
|
|
|
+ // root[f].value = fvalue;
|
|
|
+ // root[f].label = f;
|
|
|
+ root[f].children = {};
|
|
|
+ root[f].children[k] = {};
|
|
|
+ root[f].children[k].value = root[f].children[k].label = k;
|
|
|
+
|
|
|
+ // 将对象放入 cascaderOptions
|
|
|
+ let childrenArray = [];
|
|
|
+ childrenArray.push(root[f].children[k]);
|
|
|
+ let fobj = {};
|
|
|
+ fobj.value = fvalue;
|
|
|
+ fobj.label = f;
|
|
|
+ fobj.children = childrenArray;
|
|
|
+ cascaderOptions.push(fobj);
|
|
|
+ root[f].fobj = fobj;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ this.cascaderOptions = cascaderOptions;
|
|
|
+ },
|
|
|
+ fx() {
|
|
|
+ this.startdate = new Date(this.startdate).formatDate("yyyy-MM-dd");
|
|
|
+ this.dialogTitleFX = "预警分析";
|
|
|
+ this.dialogVisibleFX = true;
|
|
|
+ },
|
|
|
+ },
|
|
|
+};
|
|
|
+</script>
|
|
|
+
|
|
|
+<style lang="less">
|
|
|
+.alarm-center-1 {
|
|
|
+ .action-bar {
|
|
|
+ display: flex;
|
|
|
+
|
|
|
+ .query {
|
|
|
+ justify-content: flex-start;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ .table-panel {
|
|
|
+ width: 100%;
|
|
|
+ background: transparent;
|
|
|
+ padding: 0;
|
|
|
+
|
|
|
+ .bar {
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ height: 16px;
|
|
|
+ margin: 8px 0;
|
|
|
+
|
|
|
+ .bar-percent {
|
|
|
+ height: 100%;
|
|
|
+ background: @green;
|
|
|
+ margin-right: 8px;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ .searchForm {
|
|
|
+ display: flex;
|
|
|
+ margin-left: 36px;
|
|
|
+ flex-direction: row-reverse;
|
|
|
+
|
|
|
+ .inputs {
|
|
|
+ width: 15%;
|
|
|
+ margin-right: 18px;
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+</style>
|