liujiejie 7 bulan lalu
induk
melakukan
6e032fe4ed

+ 12 - 0
src/styles/global.scss

@@ -31,6 +31,18 @@
   color: var(--primary-color) !important;
 }
 
+// 改变振动分析边框色
+.head{
+  border-top: 5px solid var(--primary-color) !important;
+  border-bottom: 5px solid var(--primary-color) !important;
+}
+
+::v-deep .current-row td {
+  background-color: rgba(160, 169, 171, 0.286) !important; /* 高亮的背景颜色 */
+  color: var(--primary-color) !important;
+  font-weight: 600;
+}
+
 .el-menu {
   // background-color: var(--background-color) !important;
   color: var(--text-color) !important;

+ 494 - 0
src/views/etl/compile.vue

@@ -0,0 +1,494 @@
+<template>
+  <div class="global-variable">
+    <div class="parcel">
+      <div class="controlling">
+        <div class="hade">
+          <p>
+            执行器组名称:<el-input v-model="zxqName" size="small"></el-input>
+          </p>
+          <el-button size="small" type="text" @click="addGroup"
+            >添加执行器</el-button
+          >
+        </div>
+
+        <div
+          class="group"
+          v-for="(group, groupIndex) in groups"
+          :key="groupIndex"
+          @click="changeCurrentGroup(groupIndex)"
+        >
+          <p class="SP1">
+            <span>
+              执行器{{ groupIndex + 1 }}
+              <el-input
+                style="margin: 0 10px"
+                size="small"
+                v-model="group.inputValue"
+              ></el-input>
+              <el-button size="small" type="text" @click="dialogVisible = true">
+                上传附件
+              </el-button>
+            </span>
+          </p>
+
+          <div
+            v-for="(table, tableIndex) in group.tables"
+            :key="tableIndex"
+            class="table-container"
+          >
+            <div>
+              <el-button
+                size="small"
+                type="text"
+                @click="ondel(groupIndex, tableIndex)"
+              >
+                删除
+              </el-button>
+            </div>
+            <el-table
+              :data="table.data"
+              border
+              style="width: 100%"
+              tooltip-effect="dark"
+              ref="multipleTable"
+              @selection-change="handleSelectionChange"
+            >
+              <el-table-column type="selection" width="55"> </el-table-column>
+              <el-table-column
+                v-for="(key, colIndex) in table.columnKeys"
+                :key="colIndex"
+                :label="'Item ' + (parseInt(key) + 1)"
+                :prop="key.toString()"
+              ></el-table-column>
+            </el-table>
+          </div>
+        </div>
+      </div>
+      <div class="database">
+        <el-tabs type="border-card">
+          <!-- 动态生成标签页 -->
+          <el-tab-pane
+            v-for="(group, groupIndex) in groups"
+            :key="groupIndex"
+            :label="'执行器组 ' + (groupIndex + 1)"
+          >
+            <div class="pair">
+              <p v-for="(item, index) in modelList" :key="index">
+                <span>{{ item.name }}</span>
+                <el-select
+                  size="small"
+                  v-model="item.val"
+                  multiple
+                  collapse-tags
+                  placeholder="请选择"
+                >
+                  <el-option
+                    v-for="item in selectoptions"
+                    :key="item"
+                    :label="item"
+                    :value="item"
+                  >
+                  </el-option>
+                </el-select>
+              </p>
+            </div>
+
+            <div class="combination">
+              <p>添加数据字段</p>
+              <div class="search">
+                <el-input size="small" v-model="field"></el-input>
+                <el-button size="small" type="text" @click="newVisible = true"
+                  >自定义</el-button
+                >
+              </div>
+              <el-checkbox-group v-model="checkList" @change="duoxuan">
+                <el-checkbox
+                  v-for="(item, index) in checkOptions"
+                  :key="index"
+                  :label="item"
+                >
+                  {{ item }}
+                </el-checkbox>
+              </el-checkbox-group>
+            </div>
+          </el-tab-pane>
+        </el-tabs>
+      </div>
+
+      <!-- 弹窗 -->
+      <el-dialog
+        title="上传"
+        :visible.sync="dialogVisible"
+        width="20%"
+        :before-close="handleClose"
+      >
+        <el-form ref="form" :model="form" label-width="100px">
+          <el-form-item label="上传附件:">
+            <el-upload
+              class="upload-demo"
+              action="https://jsonplaceholder.typicode.com/posts/"
+              :on-preview="handlePreview"
+              :on-remove="handleRemove"
+              :before-remove="beforeRemove"
+              multiple
+              :limit="3"
+              :on-exceed="handleExceed"
+              :file-list="fileList"
+            >
+              <el-button @click="onUpload" size="small">上传</el-button>
+            </el-upload>
+          </el-form-item>
+          <el-form-item label="是否有列名:">
+            <el-radio-group v-model="form.resource">
+              <el-radio label="是"></el-radio>
+              <el-radio label="否"></el-radio>
+            </el-radio-group>
+          </el-form-item>
+          <el-form-item label="列名所在行:">
+            <el-input v-model="form.name"></el-input>
+          </el-form-item>
+
+          <el-form-item label="范围最小值:">
+            <el-input v-model="form.name"></el-input>
+          </el-form-item>
+          <el-form-item label="范围最大值:">
+            <el-input v-model="form.name"></el-input>
+          </el-form-item>
+          <el-form-item>
+            <el-button type="primary" @click="onSubmit()">立即创建</el-button>
+          </el-form-item>
+        </el-form>
+      </el-dialog>
+
+      <el-dialog
+        title="新增"
+        :visible.sync="newVisible"
+        width="15%"
+        :before-close="handleClose"
+      >
+        <div>
+          <i class="el-icon-plus" @click="addInput"></i>
+          <i
+            class="el-icon-minus"
+            @click="removeInput(index)"
+            v-if="inputList.length > 1"
+          ></i>
+        </div>
+        <div
+          v-for="(item, index) in inputList"
+          :key="index"
+          class="input-group"
+        >
+          <el-input
+            size="small"
+            v-model="item.value"
+            placeholder="请输入"
+            style="margin-bottom: 10px"
+          ></el-input>
+
+          <!-- 加号按钮 -->
+        </div>
+        <div style="display: flex; justify-content: center">
+          <el-button size="small" type="primary" @click="confirm"
+            >确 定</el-button
+          >
+        </div>
+      </el-dialog>
+    </div>
+  </div>
+</template>
+
+<script>
+export default {
+  data() {
+    return {
+      dialogVisible: false,
+      newVisible: false,
+      zxqName: "",
+      tableData: [
+        { 0: "2023-12-01", 1: "2023-12-02", 2: "2023-12-03", 3: "2023-12-04" },
+        { 0: "2023-12-01", 1: "2023-12-02", 2: "2023-12-03", 3: "2023-12-04" },
+        { 0: "2023-12-01", 1: "2023-12-02", 2: "2023-12-03", 3: "2023-12-04" },
+      ],
+      columnKeys: [],
+      form: {},
+      fileList: [],
+      tables: [],
+      groups: [
+        {
+          inputValue: "", // 输入框默认值
+          tables: [
+            {
+              columnKeys: ["0", "1", "2", "3"], // 默认的列
+              data: [
+                {
+                  0: "2023-12-01",
+                  1: "2023-12-02",
+                  2: "2023-12-03",
+                  3: "2023-12-04",
+                },
+                {
+                  0: "2023-12-05",
+                  1: "2023-12-06",
+                  2: "2023-12-07",
+                  3: "2023-12-08",
+                },
+                {
+                  0: "2023-12-09",
+                  1: "2023-12-10",
+                  2: "2023-12-11",
+                  3: "2023-12-12",
+                },
+              ],
+            },
+          ],
+        },
+      ],
+      currentGroupIndex: 0, // 当前操作的执行器索引
+      selectoptions: [],
+      selectvalue: [],
+      field: "",
+      checkList: [],
+      multipleSelection: [],
+      checkOptions: [], // 循环的选项
+      modelList: [
+        { name: "模板1", val: [] },
+        { name: "模板2", val: [] },
+        { name: "模板2", val: [] },
+      ],
+      inputList: [
+        { value: "" }, // 默认有一个输入框
+      ],
+    };
+  },
+  watch: {
+    // 监听 checkList 数组的变化,并更新 selectOptions
+    // checkList(newValue) {
+    //   this.selectOptions = [...newValue]; // 将选中的复选框值复制到 selectOptions
+    // },
+  },
+  mounted() {
+    if (this.tableData.length > 0) {
+      this.columnKeys = Object.keys(this.tableData[0]); // 动态提取列名
+    }
+  },
+  methods: {
+    // 获取默认表格模板
+    getDefaultTable() {
+      return {
+        columnKeys: ["0", "1", "2", "3"],
+        data: [
+          {
+            0: "2023-12-01",
+            1: "2023-12-02",
+            2: "2023-12-03",
+            3: "2023-12-04",
+          },
+          {
+            0: "2023-12-05",
+            1: "2023-12-06",
+            2: "2023-12-07",
+            3: "2023-12-08",
+          },
+          {
+            0: "2023-12-09",
+            1: "2023-12-10",
+            2: "2023-12-11",
+            3: "2023-12-12",
+          },
+        ],
+      };
+    },
+
+    // 上传操作
+    onUpload() {
+      this.dialogVisible = true;
+    },
+
+    // 仅在当前 group 下新增表格
+    onSubmit() {
+      const newTable = {
+        columnKeys: ["0", "1", "2", "3"], // 默认列
+        data: [
+          {
+            0: "2023-12-01",
+            1: "2023-12-02",
+            2: "2023-12-03",
+            3: "2023-12-04",
+          },
+          {
+            0: "2023-12-01",
+            1: "2023-12-02",
+            2: "2023-12-03",
+            3: "2023-12-04",
+          },
+          {
+            0: "2023-12-01",
+            1: "2023-12-02",
+            2: "2023-12-03",
+            3: "2023-12-04",
+          },
+        ],
+      };
+
+      // 只在当前 group 的 tables 数组中新增表格
+      this.groups[this.currentGroupIndex].tables.push(newTable);
+
+      console.log("新增后的 groups 数据:", this.groups);
+      this.dialogVisible = false;
+    },
+
+    // 切换当前 group
+    changeCurrentGroup(groupIndex) {
+      this.currentGroupIndex = groupIndex;
+    },
+
+    // 删除表格
+    ondel(groupIndex, tableIndex) {
+      this.groups[groupIndex].tables.splice(tableIndex, 1);
+    },
+
+    // 新增执行器组
+    addGroup() {
+      this.groups.push({
+        inputValue: "",
+        tables: [this.getDefaultTable()],
+      });
+    },
+
+    handleSelectionChange(val) {
+      this.multipleSelection = val;
+      // 获取新选中的值
+      const newCheckOptions = this.multipleSelection.flatMap((item) =>
+        Object.values(item)
+   
+      );
+      console.log(  newCheckOptions);
+        
+      // 找到当前选中的与之前的选中值之间的差异
+      const added = newCheckOptions.filter(
+        (item) => !this.checkOptions.includes(item)
+      );
+
+      
+      const removed = this.checkOptions.filter(
+        (item) => !newCheckOptions.includes(item)
+      );
+
+      // 更新 checkOptions
+      if (added.length) {
+        this.checkOptions.push(...added); 
+ 
+        
+      }
+      if (removed.length) {
+        this.checkOptions = this.checkOptions.filter(
+          (item) => !removed.includes(item)
+          
+        ); 
+
+      }
+    },
+
+    duoxuan(val) {
+      console.log(val);
+
+      this.selectoptions = val;
+    },
+
+    addInput() {
+      this.$set(this.inputList, this.inputList.length, { value: "" });
+    },
+    // 删除指定的输入框
+    removeInput(index) {
+      if (this.inputList.length > 1) {
+        this.inputList.splice(index, 1); // 从 inputList 中删除指定的输入框
+      }
+    },
+    confirm() {
+      this.newVisible = false;
+      this.inputList.forEach((item) => {
+        if (item.value) {
+          // 如果有值才添加
+          this.checkOptions.push(item.value);
+        }
+      });
+      console.log(this.selectoptions);
+    },
+
+    handleClose(done) {
+      done();
+    },
+
+    handleRemove(file, fileList) {
+      console.log(file, fileList);
+    },
+
+    handlePreview(file) {
+      console.log(file);
+    },
+
+    handleExceed(files, fileList) {
+      this.$message.warning(
+        `当前限制选择 3 个文件,本次选择了 ${files.length} 个文件,共选择了 ${
+          files.length + fileList.length
+        } 个文件`
+      );
+    },
+
+    beforeRemove(file, fileList) {
+      return this.$confirm(`确定移除 ${file.name}?`);
+    },
+  },
+};
+</script>
+
+
+<style lang="scss" scoped>
+.parcel {
+  display: flex;
+  justify-content: space-between;
+  .controlling {
+    .hade {
+      display: flex;
+      justify-content: space-between;
+    }
+    .SP1 {
+      display: flex;
+      justify-content: space-between;
+      margin: 10px 0;
+    }
+    width: 75.5%;
+    border: 1px solid #aaaaaa;
+    padding: 10px;
+  }
+  .database {
+    width: 24%;
+    border: 1px solid #aaaaaa;
+  }
+}
+
+.el-input {
+  width: 200px;
+}
+
+.pair {
+  height: 400px;
+  p {
+    margin-bottom: 10px;
+    span {
+      display: inline-block;
+      width: 150px;
+    }
+    .el-select {
+      width: 180px;
+    }
+  }
+}
+.combination {
+}
+.el-checkbox {
+  margin-right: 10px;
+  margin-bottom: 5px;
+}
+</style>

+ 435 - 0
src/views/etl/index.vue

@@ -0,0 +1,435 @@
+<template>
+  <div class="global-variable">
+    <div class="button-container">
+      <el-button type="primary" plain size="small" @click="drawer = true"
+        >数据模板</el-button
+      >
+    </div>
+    <el-table :data="tableData" border style="width: 100%">
+      <el-table-column type="index" label="排序" width="60"> </el-table-column>
+      <el-table-column prop="name" label="流程名称" width="220" align="center">
+      </el-table-column>
+      <el-table-column prop="descr" label="备注" align="center">
+      </el-table-column>
+      <el-table-column prop="type" label="业务类型" width="180" align="center">
+      </el-table-column>
+      <el-table-column label="操作" width="180" align="center">
+        <template slot-scope="scope">
+          <el-button
+            size="small"
+            type="text"
+            @click="Newprocess(scope.$index, scope.row)"
+            >新增流程</el-button
+          >
+        </template>
+      </el-table-column>
+    </el-table>
+    <H2>流程统计</H2>
+    <div class="process">
+      <p>
+        流程名称:
+        <el-select v-model="valueLC" placeholder="请选择" size="small">
+          <el-option
+            v-for="item in optionsLC"
+            :key="item.value"
+            :label="item.label"
+            :value="item.value"
+          >
+          </el-option>
+        </el-select>
+      </p>
+      <p>执行器名称:<el-input v-model="valueZXC" size="small"></el-input></p>
+      <p>
+        业务类型:
+        <el-select v-model="valueYW" placeholder="请选择" size="small">
+          <el-option
+            v-for="item in optionsYW"
+            :key="item.value"
+            :label="item.label"
+            :value="item.value"
+          >
+          </el-option>
+        </el-select>
+      </p>
+      <p>
+        状态:
+        <el-select v-model="valueZT" placeholder="请选择" size="small">
+          <el-option
+            v-for="item in optionsZT"
+            :key="item.value"
+            :label="item.label"
+            :value="item.value"
+          >
+          </el-option>
+        </el-select>
+      </p>
+      <div>
+        <el-button size="small"> 查询</el-button>
+        <el-button size="small"> 重置</el-button>
+      </div>
+    </div>
+
+    <el-table :data="tableflow" border style="width: 100%">
+      <el-table-column type="index" label="排序" width="60"> </el-table-column>
+      <el-table-column prop="name" label="流程名称" align="center">
+      </el-table-column>
+      <el-table-column prop="name" label="模板名称" align="center">
+      </el-table-column>
+      <el-table-column prop="name" label="执行器名称" align="center">
+      </el-table-column>
+      <el-table-column prop="type" label="业务类型" align="center">
+      </el-table-column>
+
+      <el-table-column prop="name" label="进度" align="center">
+      </el-table-column>
+      <el-table-column prop="descr" label="状态" align="center">
+      </el-table-column>
+      <el-table-column prop="descr" label="开始时间" align="center">
+      </el-table-column>
+      <el-table-column prop="descr" label="结束时间" align="center">
+      </el-table-column>
+
+      <el-table-column label="操作" width="180" align="center">
+        <template slot-scope="scope">
+          <el-button
+            size="small"
+            type="text"
+            @click="handleEdit(scope.$index, scope.row)"
+            >设计流程</el-button
+          >
+          <el-button
+            size="small"
+            type="text"
+            @click="handleEdit(scope.$index, scope.row)"
+            >复制流程</el-button
+          >
+          <el-button
+            size="small"
+            type="text"
+            @click="handleEdit(scope.$index, scope.row)"
+            >删除</el-button
+          >
+        </template>
+      </el-table-column>
+    </el-table>
+    <el-pagination
+      class="fenye"
+      @size-change="handleSizeChange"
+      @current-change="handleCurrentChange"
+      :page-size="5"
+      layout="total, prev, pager, next"
+      :total="20"
+    >
+    </el-pagination>
+
+    <!-- 抽屉 -->
+    <el-drawer title="标准数据模板" :visible.sync="drawer">
+      <div class="titleText">
+        <el-input size="small"></el-input>
+        <el-button
+          style="margin-left: 10px"
+          size="small"
+          @click="newdrawer = true"
+          >新建</el-button
+        >
+      </div>
+      <el-table :data="templateData" border style="width: 100%">
+        <el-table-column prop="name" label="流程名称" align="center">
+        </el-table-column>
+
+        <el-table-column label="操作" width="120" align="center">
+          <template slot-scope="scope">
+            <el-button
+              size="small"
+              type="text"
+              @click="handleEdit(scope.$index, scope.row)"
+              >编辑</el-button
+            >
+            <el-button
+              size="small"
+              type="text"
+              @click="handleEdit(scope.$index, scope.row)"
+              >删除</el-button
+            >
+          </template>
+        </el-table-column>
+      </el-table>
+    </el-drawer>
+
+    <el-drawer :with-header="false" :visible.sync="newdrawer">
+      <div class="drawer-content">
+        <div class="tou">
+          <el-input
+            v-model="templateName"
+            placeholder="请输入模板名称"
+            size="small"
+          ></el-input>
+          <div>
+            <i class="el-icon-plus" @click="addCirculation"></i>
+            <i class="el-icon-minus" @click="removeCirculation"></i>
+          </div>
+        </div>
+
+        <div class="templatedata">
+          <div
+            class="circulation"
+            v-for="(item, index) in circulations"
+            :key="index"
+          >
+            <el-input
+              v-model="item.priceName"
+              placeholder="请输入字段名"
+              size="small"
+            ></el-input>
+            <el-checkbox v-model="item.checked1">索引</el-checkbox>
+            <el-checkbox v-model="item.checked2">切割</el-checkbox>
+          </div>
+        </div>
+        <el-button class="fixed-button" type="primary" @click="saveData"
+          >保存</el-button
+        >
+      </div>
+
+      <!-- Fixed button at the bottom of the drawer -->
+    </el-drawer>
+
+    <!-- 弹窗 -->
+    <el-dialog
+      title="新增"
+      :visible.sync="dialogVisible"
+      width="25%"
+      :before-close="handleClose"
+    >
+      选择:
+      <el-select v-model="value" size="small" placeholder="请选择">
+        <el-option
+          v-for="item in options"
+          :key="item.value"
+          :label="item.label"
+          :value="item.value"
+        >
+        </el-option>
+      </el-select>
+      <el-button
+        type="primary"
+        style="margin-left: 20px"
+        @click="skip"
+        size="small"
+        >确 定</el-button
+      >
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+export default {
+  data() {
+    return {
+      drawer: false,
+      newdrawer: false,
+      dialogVisible: false,
+      templateData: [{}],
+      tableflow: [{}, {}, {}, {}, {}],
+      tableData: [
+        {
+          name: "ETL横向清洗执行器",
+          descr: "",
+          type: "合并",
+        },
+        {
+          name: "ETL纵向清洗执行器",
+          descr: "",
+          type: "拼接",
+        },
+        {
+          name: "ETL清洗执行器",
+          descr: "",
+          type: "自定义",
+        },
+      ],
+      optionsLC: [
+        {
+          value: "1",
+          label: "ETL横向清洗执行器",
+        },
+        {
+          value: "2",
+          label: "ETL纵向清洗执行器",
+        },
+        {
+          value: "3",
+          label: "ETL清洗执行器",
+        },
+      ],
+      optionsYW: [
+        {
+          value: "1",
+          label: "合并",
+        },
+        {
+          value: "2",
+          label: "拼接",
+        },
+        {
+          value: "3",
+          label: "自定义",
+        },
+      ],
+      optionsZT: [
+        {
+          value: "1",
+          label: "已完成",
+        },
+        {
+          value: "2",
+          label: "进行中",
+        },
+        {
+          value: "3",
+          label: "失败",
+        },
+      ],
+      valueLC: "",
+      valueZXC: "",
+      valueYW: "",
+      valueZT: "",
+      templateName: "",
+      priceName: "",
+      checked1: false,
+      checked2: false,
+      circulations: [
+        {
+          priceName: "",
+          checked1: false,
+          checked2: false,
+        },
+      ],
+    };
+  },
+  methods: {
+    handleSizeChange(val) {
+      console.log(`每页 ${val} 条`);
+    },
+    handleCurrentChange(val) {
+      console.log(`当前页: ${val}`);
+    },
+    handleClose(done) {
+      done();
+    },
+    addCirculation() {
+      this.circulations.push({
+        priceName: "",
+        checked1: false,
+        checked2: false,
+      });
+    },
+    removeCirculation() {
+      if (this.circulations.length > 1) {
+        this.circulations.pop();
+      }
+    },
+    saveData() {
+      const params = {
+        templateName: this.templateName, // Access templateName correctly
+        circulations: this.circulations.map((item) => ({
+          priceName: item.priceName, // Ensure these values are populated
+          checked1: item.checked1,
+          checked2: item.checked2,
+        })),
+      };
+      this.newdrawer = false;
+      this.circulations = [
+        {
+          priceName: "",
+          checked1: false,
+          checked2: false,
+        },
+      ];
+      this.templateName = "";
+    },
+    Newprocess(row) {
+      this.dialogVisible = true;
+    },
+    skip() {
+      this.$router.push({ path: "/home/etl/compile" });
+    },
+  },
+};
+</script>
+
+<style lang="scss" scoped>
+.drawer-content {
+  display: flex;
+  flex-direction: column;
+  height: 100%;
+}
+
+.templatedata {
+  flex-grow: 1;
+  margin-top: 10px;
+  overflow-y: auto;
+  .circulation {
+    margin-bottom: 10px;
+  }
+}
+.fixed-button {
+  margin-top: 10px;
+  z-index: 99;
+  width: 100%;
+}
+
+.tou {
+  display: flex;
+  justify-content: space-between;
+
+  div {
+    margin-right: 40px;
+    i {
+      font-size: 26px;
+      line-height: 34px;
+    }
+  }
+}
+.titleText {
+  margin-bottom: 10px;
+}
+.button-container {
+  display: flex;
+  justify-content: flex-end;
+  margin: 5px 0; /* Optional, if you want a top margin */
+}
+.fenye {
+  display: flex;
+  justify-content: center;
+  margin-top: 20px;
+}
+.process {
+  display: flex;
+  margin-bottom: 10px;
+  p {
+    margin-right: 20px;
+  }
+}
+.el-select {
+  width: 200px;
+}
+.el-input {
+  width: 200px;
+}
+h2 {
+  font-size: 30px;
+  font-weight: 600;
+  margin: 10px 0;
+}
+
+::v-deep .el-drawer {
+  width: 22% !important;
+  padding: 5px;
+}
+.el-checkbox {
+  margin: 0 5px;
+}
+.el-checkbox__label {
+  padding-left: 5px;
+}
+</style>

+ 5 - 5
src/views/health/components/envelopecharts.vue

@@ -245,13 +245,13 @@ export default {
             symbol: "none", // 数据点的样式
             symbolSize: 8, // 数据点的大小
             lineStyle: {
-              color: "rgb(75, 192, 192)", // 折线颜色
-              width: 2, // 线条宽度
+              color: "#162961", 
+              width: 1, // 线条宽度
             },
             itemStyle: {
-              color: "rgb(75, 192, 192)", // 数据点颜色
+              color: "#162961", 
               borderColor: "#fff",
-              borderWidth: 2,
+              borderWidth: 1,
             },
           },
         ],
@@ -280,7 +280,7 @@ export default {
 <style lang="scss" scoped>
 .line-chart {
   width: 100%;
-  height: 300px;
+  height: 260px;
 }
 
 .eigenvalue {

+ 5 - 5
src/views/health/components/spectrogramcharts.vue

@@ -228,13 +228,13 @@ export default {
             symbol: "none", // No symbols at data points
             symbolSize: 8, // Set data point size
             lineStyle: {
-              color: "rgb(75, 192, 192)", // Line color
-              width: 2, // Line width
+              color: "#162961", 
+              width: 1, // Line width
             },
             itemStyle: {
-              color: "rgb(75, 192, 192)", // Data point color
+              color: "#162961", 
               borderColor: "#fff",
-              borderWidth: 2,
+              borderWidth: 1,
             },
           },
         ],
@@ -289,7 +289,7 @@ export default {
 <style lang="scss" scoped>
 .line-chart {
   width: 100%;
-  height: 300px;
+  height: 280px;
 }
 .FD {
   width: 100%;

+ 95 - 87
src/views/health/components/tendencycharts.vue

@@ -28,7 +28,6 @@ export default {
     };
   },
   watch: {
-    // Watch for changes in chartData and chartLabels to update the chart
     chartData(newData) {
       this.updateChart(newData, this.chartLabels);
     },
@@ -54,100 +53,109 @@ export default {
     },
     // Update the chart with new data
     updateChart() {
-  const fieldsToShow = [
-    "Ce",
-    "Cf",
-    "Cq",
-    "Cw",
-    "If",
-    "Max",
-    "Mean",
-    "Min",
-    "Sf",
-    "Xp",
-    "Xrms",
-    "fs",
-  ];
+      const fieldsToShow = [
+        "Ce",
+        "Cf",
+        "Cq",
+        "Cw",
+        "If",
+        "Max",
+        "Mean",
+        "Min",
+        "Sf",
+        "Xp",
+        "Xrms",
+        "fs",
+      ];
 
-  const fieldNameMap = {
-    Ce: "裕度指标",
-    Cf: "峰值指标",
-    Cq: "峭度指标",
-    Cw: "偏度指标",
-    If: "脉冲指标",
-    Max: "最大值",
-    Mean: "平均值",
-    Min: "最小值",
-    Sf: "波形指标",
-    Xp: "峰值",
-    Xrms: "有效值",
-    fs: "采样频率",
-  };
+      const fieldNameMap = {
+        Ce: "裕度指标",
+        Cf: "峰值指标",
+        Cq: "峭度指标",
+        Cw: "偏度指标",
+        If: "脉冲指标",
+        Max: "最大值",
+        Mean: "平均值",
+        Min: "最小值",
+        Sf: "波形指标",
+        Xp: "峰值",
+        Xrms: "有效值",
+        fs: "采样频率",
+      };
 
-  const colorPalette = [
-    "#5470C6", // 蓝色
-    "#91CC75", // 绿色
-    "#EE6666", // 红色
-    "#73C0DE", // 青色
-    "#FAC858", // 黄色
-    "#9A60B4", // 紫色
-    "#3BA272", // 深绿
-    "#FC8452", // 橙色
-    "#73B9BC", // 蓝绿
-    "#EA7CCC", // 粉色
-    "#FF9F7F", // 浅橙
-    "#FFD700", // 金黄色
-  ];
+      const colorPalette = [
+   
+        "#F96F4A",
+        // "#F78F4F",
+        "#FCB06C",
+        // "#FFC475",
+        "#FFE286",
+        // "#FDF1A9",
+        // "#FBFFBE",
+        "#EEF9A7",
+        // "#E4F39E",
+        "#CFEE9E",
+        "#A8DCA2",
+        "#85D0AE",
+        "#60C5A3",
+        "#52A3AE",
+        "#4FA4B5",
+        "#3586BF",
+        "#476CB9",
+      ];
 
-  const data = this.qsList?.data || [];
-  if (data.length === 0) {
-    console.warn("No data available to render the chart");
-    return;
-  }
-
-  const labels = data.map((item) => item.time_stamp || "N/A");
-
-  const option = {
-    color: colorPalette, // 设置颜色
-    toolbox: {
-      feature: {
-        dataZoom: { yAxisIndex: "none" },
-        restore: {},
-        saveAsImage: {},
-      },
-    },
-    xAxis: {
-      type: "category",
-      data: labels,
-      name: "时间戳",
-    },
-    yAxis: {
-      type: "value",
-      name: "数值",
-    },
-    tooltip: {
-      trigger: "axis",
-    },
-    legend: {
-      data: fieldsToShow.map((field) => fieldNameMap[field] || field),
-      bottom: 0,
-      orient: "horizontal",
-    },
-    series: fieldsToShow.map((field) => ({
-      name: fieldNameMap[field] || field,
-      type: "line",
+      const data = this.qsList?.data || [];
+      if (data.length === 0) {
+        console.warn("No data available to render the chart");
+        return;
+      }
 
-      symbol: "none", 
-      data: data.map((item) => item[field] || 0),
-    })),
-  };
+      const labels = data.map((item) => item.time_stamp || "N/A");
 
-  this.chartInstance.setOption(option);
-},
+      const option = {
+        color: colorPalette, // 设置颜色
+        toolbox: {
+          feature: {
+            dataZoom: { yAxisIndex: "none" },
+            restore: {},
+            saveAsImage: {},
+          },
+        },
+        xAxis: {
+          type: "category",
+          data: labels,
+          name: "时间戳",
+        },
+        yAxis: {
+          type: "value",
+          name: "数值",
+        },
+        tooltip: {
+          trigger: "axis",
+        },
+        legend: {
+          data: fieldsToShow.map((field) => fieldNameMap[field] || field),
+          bottom: 0,
+          orient: "horizontal",
+        },
+        series: fieldsToShow.map((field) => ({
+          name: fieldNameMap[field] || field,
+          type: "line",
 
+          symbol: "none",
+          data: data.map((item) => item[field] || 0),
 
+          // lineStyle: {
+          //         width: 1,
+          //       },
+          // itemStyle: {
 
-    // Resize chart to fit container when window size changes
+          //   borderWidth: 1,
+          // },
+        })),
+      };
+      this.chartInstance.setOption(option);
+    },
     handleResize() {
       if (this.chartInstance) {
         this.chartInstance.resize();

+ 31 - 32
src/views/health/components/timedomaincharts.vue

@@ -103,10 +103,8 @@ export default {
     initializeChart() {
       const chartDom = this.$refs.chart;
       if (chartDom && !this.chartInstance) {
-        this.chartInstance = echarts.init(chartDom); // Initialize chart only once
+        this.chartInstance = echarts.init(chartDom); 
       }
-
-      // Update the chart with the initial data if available
       if (this.timeList.y && this.timeList.x) {
         this.updateChart(this.timeList.y, this.timeList.x);
       }
@@ -154,83 +152,83 @@ export default {
           },
         },
         xAxis: {
-          type: "value", // Use numeric x-axis
-          name: this.timeList.xaxis, // Set X-axis title
-          nameLocation: "center", // Title position
+          type: "value", 
+          name: this.timeList.xaxis, 
+          nameLocation: "center", 
           nameTextStyle: {
             fontSize: 14,
-            color: "#333", // Title color
-            padding: [10, 0, 0, 0], // Padding for title
+            color: "#333",
+            padding: [10, 0, 0, 0],
           },
           axisLabel: {
             formatter: (value) => {
-              return value; // Show values without formatting
+              return value;
             },
           },
           axisTick: {
-            show: true, // Show tick marks
+            show: true, 
           },
           axisLine: {
-            show: true, // Show axis line
+            show: true, 
           },
-          data: ticks, // Set tick values
+          data: ticks,
         },
 
         yAxis: {
-          type: "value", // Y-axis type as numeric
-          name: this.timeList.yaxis, // Set Y-axis title
+          type: "value", 
+          name: this.timeList.yaxis,
           // nameLocation: "center",
           nameTextStyle: {
             fontSize: 14,
-            color: "#333", // Title color
-            padding: [10, 0, 0, 0], // Padding for title
+            color: "#333", 
+            padding: [10, 0, 0, 0], 
           },
           axisLabel: {
             formatter: (value) => {
-              return value; // Show values without formatting
+              return value; 
             },
           },
           axisTick: {
-            show: true, // Show tick marks
+            show: true, 
           },
           axisLine: {
-            show: true, // Show axis line
+            show: true, 
           },
         },
 
         tooltip: {
           trigger: "axis",
           formatter: (params) => {
-            const xValue = params[0].value[0]; // Get x value
-            const yValue = params[0].value[1]; // Get y value
+            const xValue = params[0].value[0]; 
+            const yValue = params[0].value[1]; 
             return `X: ${xValue}<br/>Y: ${yValue}`;
           },
           axisPointer: {
-            type: "line", // Crosshair line
+            type: "line", 
           },
         },
 
         series: [
           {
             name: "数据系列",
-            type: "line", // Line chart
-            data: labels.map((item, index) => [item, data[index]]), // Map x, y values
-            symbol: "none", // No symbols at data points
-            symbolSize: 8, // Set data point size
+            type: "line", 
+            data: labels.map((item, index) => [item, data[index]]), 
+            symbol: "none", 
+            symbolSize: 8, 
             lineStyle: {
-              color: "rgb(75, 192, 192)", // Line color
-              width: 2, // Line width
+              color: "#162961", 
+              width: 1, 
             },
             itemStyle: {
-              color: "rgb(75, 192, 192)", // Data point color
+              color: "#162961", 
               borderColor: "#fff",
-              borderWidth: 2,
+              borderWidth: 1,
             },
           },
         ],
       };
 
-      this.chartInstance.setOption(option); // Update the chart with the new option
+      this.chartInstance.setOption(option); 
     },
 
     getTime() {
@@ -271,7 +269,7 @@ export default {
 <style lang="scss" scoped>
 .line-chart {
   width: 100%;
-  height: 250px;
+  height: 280px;
 }
 .FD {
   width: 100%;
@@ -288,6 +286,7 @@ export default {
   border: 1px solid black;
   padding: 5px;
   background: #fff;
+
   z-index: 99;
   h5 {
     line-height: 16px;

+ 50 - 305
src/views/health/vibration.vue

@@ -20,8 +20,9 @@
         </div>
       </div>
       <div class="headright">
-        <img src="@/assets/analyse/05.png" alt="全部展开" @click="zhankai" />
         <img src="@/assets/analyse/07.png" alt="全部缩小" @click="suoxiao" />
+        <img src="@/assets/analyse/05.png" alt="全部展开" @click="zhankai" />
+
         <img src="@/assets/analyse/06.png" alt="全部关闭" @click="guanbi" />
       </div>
     </div>
@@ -92,7 +93,7 @@
       <el-button type="primary" size="small" @click="conditions"
         >查询</el-button
       >
-      <el-button size="small">导出</el-button>
+      <el-button size="small" @click="outputFile">导出</el-button>
     </div>
     <div class="main-body">
       <div class="data-map">
@@ -101,6 +102,7 @@
           v-for="(item, index) in fourList"
           :key="item.index"
           @mouseover="setCurrent(item.rowData)"
+          @mouseleave="setCurrent(oldCurrentRow)"
         >
           <div class="dialog-actions">
             <p>{{ item.name }}</p>
@@ -131,15 +133,13 @@
             v-loading="item.loading"
           >
             <!-- {{ item.rowData }} -->
-            <p>
+            <p v-if="item.name != '趋势图'">
               测点路径:{{
                 getDetectionPointCn(item?.rowData?.mesurePointName)
               }}-{{ item?.rowData?.windTurbineNumber }}
+              <span>采样时间: {{ item?.rowData?.timeStamp }} </span>
             </p>
-            <P>
-              <!-- <span>采样频率:</span> -->
-              <span>采样时间: {{ item?.rowData?.timeStamp }} </span></P
-            >
+
             <!-- {{ samplingTime }} -->
             <div v-if="item.name === '时域图'">
               <timedomaincharts
@@ -177,6 +177,7 @@
                 :tableDataList="tableDataList"
                 :activeIndex="index"
                 :currentRow="currentRow"
+                :ids="[currentRow.id]"
                 @update:currentIndex="handleCurrentIndexUpdate"
                 @update-previous-row="goToPreviousRow"
                 @update-next-row="goToNextRow"
@@ -202,6 +203,7 @@
           highlight-current-row
           style="width: 100%"
           :row-class-name="tableRowClassName"
+          id="Table1"
         >
           <el-table-column type="index" label="排序"> </el-table-column>
           <el-table-column prop="timeStamp" label="时间"> </el-table-column>
@@ -223,6 +225,8 @@
 </template>
 
 <script>
+import * as FileSaver from "file-saver";
+import * as XLSX from "xlsx";
 import {
   getSysOrganizationAuthTreeByRoleId,
   windEngineGrouPage,
@@ -272,248 +276,7 @@ export default {
       timevalue: [], // 绑定 el-date-picker 的值
       startTime: "", // 开始时间
       endTime: "", // 结束时间
-      tableDataList: [
-        {
-          id: 67803,
-          windTurbineNumber: "F004",
-          windTurbineName: "F004",
-          timeStamp: "2024-07-01 00:00:14",
-          rotationalSpeed: 971.038,
-          samplingFrequency: "Time_FFT_1000_Vel",
-          mesurePointName: "gearbox_input_end_radial_vibration",
-          mesureData: null,
-        },
-        {
-          id: 67804,
-          windTurbineNumber: "F004",
-          windTurbineName: "F004",
-          timeStamp: "2024-07-01 00:00:27",
-          rotationalSpeed: 983.67,
-          samplingFrequency: "Time_FFT_10",
-          mesurePointName: "gearbox_input_end_radial_vibration",
-          mesureData: null,
-        },
-        {
-          id: 67810,
-          windTurbineNumber: "F004",
-          windTurbineName: "F004",
-          timeStamp: "2024-07-01 02:00:12",
-          rotationalSpeed: 882.458,
-          samplingFrequency: "Time_FFT_1000_Vel",
-          mesurePointName: "gearbox_input_end_radial_vibration",
-          mesureData: null,
-        },
-        {
-          id: 67812,
-          windTurbineNumber: "F004",
-          windTurbineName: "F004",
-          timeStamp: "2024-07-01 02:00:24",
-          rotationalSpeed: 874.012,
-          samplingFrequency: "Time_FFT_10",
-          mesurePointName: "gearbox_input_end_radial_vibration",
-          mesureData: null,
-        },
-        {
-          id: 67822,
-          windTurbineNumber: "F004",
-          windTurbineName: "F004",
-          timeStamp: "2024-07-01 07:14:15",
-          rotationalSpeed: 857.37,
-          samplingFrequency: "Time_FFT_1000_Vel",
-          mesurePointName: "gearbox_input_end_radial_vibration",
-          mesureData: null,
-        },
-        {
-          id: 67823,
-          windTurbineNumber: "F004",
-          windTurbineName: "F004",
-          timeStamp: "2024-07-01 07:14:28",
-          rotationalSpeed: 854.68,
-          samplingFrequency: "Time_FFT_10",
-          mesurePointName: "gearbox_input_end_radial_vibration",
-          mesureData: null,
-        },
-        {
-          id: 67829,
-          windTurbineNumber: "F004",
-          windTurbineName: "F004",
-          timeStamp: "2024-07-01 08:01:29",
-          rotationalSpeed: 1391.36,
-          samplingFrequency: "Time_FFT_1000_Vel",
-          mesurePointName: "gearbox_input_end_radial_vibration",
-          mesureData: null,
-        },
-        {
-          id: 67831,
-          windTurbineNumber: "F004",
-          windTurbineName: "F004",
-          timeStamp: "2024-07-01 08:03:27",
-          rotationalSpeed: 1217.09,
-          samplingFrequency: "Time_FFT_10",
-          mesurePointName: "gearbox_input_end_radial_vibration",
-          mesureData: null,
-        },
-        {
-          id: 67833,
-          windTurbineNumber: "F004",
-          windTurbineName: "F004",
-          timeStamp: "2024-07-01 10:48:04",
-          rotationalSpeed: 805.184,
-          samplingFrequency: "Time_FFT_1000_Vel",
-          mesurePointName: "gearbox_input_end_radial_vibration",
-          mesureData: null,
-        },
-        {
-          id: 67836,
-          windTurbineNumber: "F004",
-          windTurbineName: "F004",
-          timeStamp: "2024-07-01 10:48:16",
-          rotationalSpeed: 813.937,
-          samplingFrequency: "Time_FFT_10",
-          mesurePointName: "gearbox_input_end_radial_vibration",
-          mesureData: null,
-        },
-        {
-          id: 67842,
-          windTurbineNumber: "F004",
-          windTurbineName: "F004",
-          timeStamp: "2024-07-01 12:00:24",
-          rotationalSpeed: 1338.95,
-          samplingFrequency: "Time_FFT_10",
-          mesurePointName: "gearbox_input_end_radial_vibration",
-          mesureData: null,
-        },
-        {
-          id: 67848,
-          windTurbineNumber: "F004",
-          windTurbineName: "F004",
-          timeStamp: "2024-07-01 12:01:40",
-          rotationalSpeed: 1357.89,
-          samplingFrequency: "Time_FFT_1000_Vel",
-          mesurePointName: "gearbox_input_end_radial_vibration",
-          mesureData: null,
-        },
-        {
-          id: 67852,
-          windTurbineNumber: "F004",
-          windTurbineName: "F004",
-          timeStamp: "2024-07-01 14:00:04",
-          rotationalSpeed: 1180.8,
-          samplingFrequency: "Time_FFT_10",
-          mesurePointName: "gearbox_input_end_radial_vibration",
-          mesureData: null,
-        },
-        {
-          id: 67857,
-          windTurbineNumber: "F004",
-          windTurbineName: "F004",
-          timeStamp: "2024-07-01 14:01:06",
-          rotationalSpeed: 1228.19,
-          samplingFrequency: "Time_FFT_1000_Vel",
-          mesurePointName: "gearbox_input_end_radial_vibration",
-          mesureData: null,
-        },
-        {
-          id: 67863,
-          windTurbineNumber: "F004",
-          windTurbineName: "F004",
-          timeStamp: "2024-07-01 14:59:38",
-          rotationalSpeed: 1630.68,
-          samplingFrequency: "Time_FFT_10",
-          mesurePointName: "gearbox_input_end_radial_vibration",
-          mesureData: null,
-        },
-        {
-          id: 67866,
-          windTurbineNumber: "F004",
-          windTurbineName: "F004",
-          timeStamp: "2024-07-01 15:31:49",
-          rotationalSpeed: 1633.31,
-          samplingFrequency: "Time_FFT_10",
-          mesurePointName: "gearbox_input_end_radial_vibration",
-          mesureData: null,
-        },
-        {
-          id: 67875,
-          windTurbineNumber: "F004",
-          windTurbineName: "F004",
-          timeStamp: "2024-07-01 16:02:33",
-          rotationalSpeed: 1055.18,
-          samplingFrequency: "Time_FFT_1000_Vel",
-          mesurePointName: "gearbox_input_end_radial_vibration",
-          mesureData: null,
-        },
-        {
-          id: 67876,
-          windTurbineNumber: "F004",
-          windTurbineName: "F004",
-          timeStamp: "2024-07-01 16:05:14",
-          rotationalSpeed: 1079.85,
-          samplingFrequency: "Time_FFT_10",
-          mesurePointName: "gearbox_input_end_radial_vibration",
-          mesureData: null,
-        },
-        {
-          id: 67882,
-          windTurbineNumber: "F004",
-          windTurbineName: "F004",
-          timeStamp: "2024-07-01 18:47:32",
-          rotationalSpeed: 914.042,
-          samplingFrequency: "Time_FFT_1000_Vel",
-          mesurePointName: "gearbox_input_end_radial_vibration",
-          mesureData: null,
-        },
-        {
-          id: 67883,
-          windTurbineNumber: "F004",
-          windTurbineName: "F004",
-          timeStamp: "2024-07-01 18:47:45",
-          rotationalSpeed: 910.829,
-          samplingFrequency: "Time_FFT_10",
-          mesurePointName: "gearbox_input_end_radial_vibration",
-          mesureData: null,
-        },
-        {
-          id: 67885,
-          windTurbineNumber: "F004",
-          windTurbineName: "F004",
-          timeStamp: "2024-07-01 20:00:10",
-          rotationalSpeed: 932.506,
-          samplingFrequency: "Time_FFT_10",
-          mesurePointName: "gearbox_input_end_radial_vibration",
-          mesureData: null,
-        },
-        {
-          id: 67891,
-          windTurbineNumber: "F004",
-          windTurbineName: "F004",
-          timeStamp: "2024-07-01 20:01:11",
-          rotationalSpeed: 819.334,
-          samplingFrequency: "Time_FFT_1000_Vel",
-          mesurePointName: "gearbox_input_end_radial_vibration",
-          mesureData: null,
-        },
-        {
-          id: 67895,
-          windTurbineNumber: "F004",
-          windTurbineName: "F004",
-          timeStamp: "2024-07-01 22:03:33",
-          rotationalSpeed: 829.548,
-          samplingFrequency: "Time_FFT_1000_Vel",
-          mesurePointName: "gearbox_input_end_radial_vibration",
-          mesureData: null,
-        },
-        {
-          id: 67901,
-          windTurbineNumber: "F004",
-          windTurbineName: "F004",
-          timeStamp: "2024-07-01 22:04:59",
-          rotationalSpeed: 831.95,
-          samplingFrequency: "Time_FFT_10",
-          mesurePointName: "gearbox_input_end_radial_vibration",
-          mesureData: null,
-        },
-      ],
+      tableDataList: [],
 
       samplingTime: "", // 采样时间
 
@@ -526,21 +289,24 @@ export default {
       shuju: {},
       spectrumListTwo: {},
       envelopeListTwo: {},
+      oldCurrentRow: {},
     };
   },
 
   created() {
     this.GETtree();
   },
-  // watch: {
-  //   // 监听 timeList 的变化
-  //   timeList(newTimeList) {
-  //     if (newTimeList && newTimeList.length > 0) {
-  //       // 当 timeList 不为空时,触发 ECharts 图表生成
-  //       this.generateChart(1); // 或者根据具体逻辑来生成对应的图表
-  //     }
-  //   },
-  // },
+  watch: {
+    // 监听 timeList 的变化
+    currentRow(newVal, oldVal) {
+      if (newVal) {
+        console.log(newVal, oldVal);
+        this.oldCurrentRow = oldVal;
+      } else {
+        console.error("currentRow is undefined or null");
+      }
+    },
+  },
 
   methods: {
     handleLoading(currentRow, loading, activeIndex, params) {
@@ -588,7 +354,6 @@ export default {
       windEngineGrouPage(paramsData).then((res) => {
         this.unitoptions = res.data.list;
         this.windCode = this.companyCode;
-        console.log(this.windCode, "   this.windCode");
       });
 
       if (data.codeType === "field") {
@@ -836,13 +601,11 @@ export default {
       if (!row) {
         return false;
       }
-      console.log(row);
+
       this.$refs.singleTable.setCurrentRow(row);
     },
     // 当前单选
     handleCurrentChange(val) {
-      console.log(val, "val=============");
-
       this.currentRow = val;
       const index = this.tableDataList.indexOf(val);
       this.currentIndex = index; // 更新当前索引
@@ -869,37 +632,6 @@ export default {
         };
         this.fourList.push(newItem);
       }
-
-      // API call for specific types
-      // if (type === "1") {
-      //   // Time Domain Chart
-      //   const params = {
-      //     ids: [this.currentRow.id],
-      //     windCode: "SKF001",
-      //     analysisType: "time",
-      //   };
-      //   axios
-      //     .post("/WJapi/analysis/time", params)
-      //     .then((res) => {
-      //       this.timeList = JSON.parse(res.data);
-      //       console.log("Time List Data:", this.timeList);
-      //     })
-      //     .catch((error) => {});
-      // } else if (type === "2") {
-      //   // Spectrogram Chart
-      //   const params = {
-      //     ids: [this.currentRow.id],
-      //     windCode: "SKF001",
-      //     analysisType: "frequency",
-      //   };
-      //   axios
-      //     .post("/WJapi/analysis/frequency", params)
-      //     .then((res) => {
-      //       this.spectrumList = JSON.parse(res.data);
-      //       console.log("Spectrum Data:", this.spectrumList);
-      //     })
-      //     .catch((error) => {});
-      // }
     },
 
     tendency() {
@@ -924,7 +656,6 @@ export default {
         .then((res) => {
           this.qsList = JSON.parse(res.data);
           this.fourList.push(newItem);
-          console.log(res, "-------------------");
         })
         .catch((error) => {});
     },
@@ -960,7 +691,6 @@ export default {
           .post("/WZLapi/waveData/getMesureData", params)
           .then((res) => {
             this.tableDataList = res.data.datas;
-            console.log(this.tableDataList, "-----------------");
           })
           .catch((error) => {
             console.error("Error:", error);
@@ -979,7 +709,6 @@ export default {
       if (!this.fourList[index].isMinimized) {
         this.fourList[index].isMinimized = true;
       }
-      console.log("1");
     },
     // 放大
     amplifier(index) {
@@ -987,12 +716,10 @@ export default {
       if (item.isMinimized) {
         item.isMinimized = false;
       }
-      console.log("2");
     },
     // 关闭
     close(index) {
       this.fourList.splice(index, 1);
-      console.log("3");
     },
     zhankai() {
       this.fourList.forEach((item) => {
@@ -1007,14 +734,31 @@ export default {
     guanbi() {
       this.fourList = [];
     },
+    outputFile() {
+      var ws1 = XLSX.utils.table_to_book(document.querySelector("#Table1")); //对应要导出的表格id
+      var wbOut = XLSX.write(ws1, {
+        bookType: "xlsx",
+        bookSST: true,
+        type: "array",
+      });
+      try {
+        FileSaver.saveAs(
+          new Blob([wbOut], { type: "application/octet-stream" }),
+          "demo.xlsx"
+        );
+      } catch (e) {
+        if (typeof console !== "undefined") console.log(e, wbOut);
+      }
+      return wbOut;
+    },
   },
 };
 </script>
 
 <style lang="scss" scoped>
 .head {
-  border-top: 5px solid #088080;
-  border-bottom: 5px solid #088080;
+  // border-top: 5px solid #088080;
+  // border-bottom: 5px solid #088080;
   padding: 5px 0;
   display: flex;
   justify-content: space-between;
@@ -1033,6 +777,7 @@ export default {
     }
   }
   .headright {
+    line-height: 38px;
     img {
       width: 20px;
       height: 20px;
@@ -1101,9 +846,9 @@ export default {
   height: 0px; /* Adjust height when minimized */
   overflow: hidden;
 }
-::v-deep .current-row td {
-  background-color: rgba(147, 226, 226, 0.2) !important; /* 高亮的背景颜色 */
-  color: #088080;
-  font-weight: 600;
-}
+// ::v-deep .current-row td {
+//   background-color: rgba(147, 226, 226, 0.2) !important; /* 高亮的背景颜色 */
+//   color: #088080;
+//   font-weight: 600;
+// }
 </style>

+ 24 - 2
src/views/home/components/mockData.js

@@ -219,11 +219,33 @@ export const orgList = [
         component: () =>
           import(/*webpackChunkName:'Ledger'*/ "@/views/health/vibration.vue"),
       },
-     
-   
     ],
   },
 
+  {
+    name: "ETL数据清洗",
+    iconName: "etl",
+    path: "etl",
+    meta: {
+      hidden: false,
+    },
+    id: "7",
+    component: () =>
+      import(/*webpackChunkName:'system'*/ "@/views/etl/index.vue"),
+    children: [
+      {
+        id: 71,
+        name: "ETL数据编辑",
+        path: "compile",
+        meta: {
+          hidden: false,
+        },
+        component: () =>
+          import(/*webpackChunkName:'Ledger'*/ "@/views/etl/compile.vue"),
+      },
+    ],
+
+  },
 
   {
     name: "权限管理",

+ 14 - 12
vue.config.js

@@ -75,23 +75,25 @@ module.exports = {
       },
       // 未知量  //振动、激光测距仪
       "/WZLapi": {
-        target: "http://192.168.50.241:9001", // WZLapi 目标地址
+        // target: "http://192.168.50.241:9001", // WZLapi 目标地址
+        target: "http://106.120.102.238:18080/WindTransDev", // WZLapi 外网目标地址
         changeOrigin: true,
         pathRewrite: {
           "^/WZLapi": "", // 去掉 /WZLapi 前缀
         },
       },
-      // 文佳
-      "/WJapi": {
-        // target: "http://192.168.50.235:8888", // WZLapi 内网 目标地址
-        target: "http://106.120.102.238:18888", // WZLapi 内网 目标地址
-        changeOrigin: true,
-        pathRewrite: {
-          "^/WJapi": "", // 去掉 /WZLapi 前缀
-        },
-        onProxyReq(proxyReq, req, res) {
-          console.log("Proxying /sAlgorithm request to:", proxyReq.path); // 打印代理请求路径
-        },
+         // 文佳
+         "/WJapi": {
+          // target: "http://192.168.50.235:8888", // WZLapi 内网 目标地址
+          target: "http://106.120.102.238:18888", // WZLapi 内网 目标地址
+          changeOrigin: true,
+          pathRewrite: {
+            "^/WJapi": "", // 去掉 /WZLapi 前缀
+          },
+          onProxyReq(proxyReq, req, res) {
+            console.log("Proxying /sAlgorithm request to:", proxyReq.path); // 打印代理请求路径
+          },
+        
       },
       // 数据转换亮亮
       "/transDataWeb": {