deviceManage.vue 9.94 KB
<template>
  <el-tabs v-model="activeName" @tab-click="handleClick">
    <el-tab-pane label="设备" name="device">
      <!-- <Device ref="Device" /> -->
      <el-form
        :model="queryConfig"
        :rules="rules"
        ref="queryConfig"
        label-width="100px"
        class="demo-queryConfig"
      >
        <el-row :gutter="10">
          <el-col :span="4">
            <el-form-item label="设备编码:" prop="name">
              <el-input v-model="queryConfig.equipmentCode"></el-input>
            </el-form-item>
          </el-col>
          <el-col :span="4">
            <el-form-item label="设备名称:" prop="name">
              <el-input v-model="queryConfig.logType"></el-input>
            </el-form-item>
          </el-col>
          <el-col :span="4">
            <el-form-item label="设备类型:" prop="">
              <el-select
                v-model="queryConfig.bllResultCode"
                placeholder="请选择"
              >
                <el-option
                  v-for="item in optionsBllResult"
                  :key="item.value"
                  :label="item.label"
                  :value="item.value"
                />
              </el-select>
            </el-form-item>
          </el-col>
          <el-col :span="4">
            <el-form-item label="IP:" prop="name">
              <el-input v-model="queryConfig.equipmentCode"></el-input>
            </el-form-item>
          </el-col>
          <el-col :span="4">
            <el-form-item label="区域:" prop="name">
              <el-input v-model="queryConfig.equipmentCode"></el-input>
            </el-form-item>
          </el-col>
          <el-col :span="23" class="button-col">
            <el-form-item label="" prop="">
              <el-button
                icon="el-icon-search"
                class="T1"
                @click="btnAction()"
                type="primary"
                >查询</el-button
              >
              <el-button class="T1" @click="details()">查询情况</el-button>
              <el-button class="T1" @click="details()">新增设备</el-button>
              <el-button class="T1" @click="details()">编辑设备</el-button>
              <el-button class="T1" @click="details()" type="danger"
                >删除设备</el-button
              >
              <!-- <el-button class="T1" @click="goodsTypeModify()" disabled
              >导出</el-button
            > -->
            </el-form-item>
          </el-col>
        </el-row>
      </el-form>
      <div class="table">
        <el-table
          :data="tableData"
          style="width: 100%"
          height="700"
          @selection-change="handleSelectionChange"
          :header-cell-style="{ background: '#d9ebfe', color: '#000000' }"
        >
          <el-table-column
            type="selection"
            align="center"
            width="55"
          ></el-table-column>
          <el-table-column prop="id" label="id" width="180"> </el-table-column>
          <el-table-column prop="equipmentCode" label="设备编码" width="180">
          </el-table-column>
          <el-table-column prop="logType" label="设备名"> </el-table-column>
          <el-table-column prop="message" label="设备类型编码">
          </el-table-column>
          <el-table-column prop="bllResultCode" label="设备类型名">
          </el-table-column>
          <el-table-column prop="errorCode" label="IP"> </el-table-column>
          <el-table-column prop="created" label="连接名"> </el-table-column>
          <el-table-column prop="created" label="区域"> </el-table-column>
          <el-table-column prop="created" label="描述"> </el-table-column>
          <el-table-column prop="created" label="禁用"> </el-table-column>
          <el-table-column prop="created" label="创建时间"> </el-table-column>
          <el-table-column prop="created" label="创建人"> </el-table-column>
          <el-table-column prop="created" label="更新时间"> </el-table-column>
          <el-table-column prop="created" label="更新人"> </el-table-column>
        </el-table>
        <div class="pagination-container">
          <el-pagination
            background
            layout="prev, pager, next"
            :current-page="queryConfig.currentPage"
            :page-size="queryConfig.pageSize"
            :total="total"
            @current-change="handleCurrentChange"
          >
          </el-pagination>
        </div>
      </div>
      <el-dialog title="系统日志详情" :visible.sync="dialogFormVisible">
        <div
          class="container"
          v-for="(item, index) in detailsData"
          :key="index"
        >
          <div class="box">
            <div class="inner-left">内部id:</div>
            <div class="inner-right">{{ item.id }}</div>
          </div>
          <div class="box">
            <div class="inner-left">日志级别:</div>
            <div class="inner-right">{{ item.bllResultCode }}</div>
          </div>
          <div class="box">
            <div class="inner-left">设备编码:</div>
            <div class="inner-right">{{ item.equipmentCode }}</div>
          </div>
          <div class="box">
            <div class="inner-left">日志分类:</div>
            <div class="inner-right">{{ item.logType }}</div>
          </div>
          <div class="box">
            <div class="inner-left">开始时间:</div>
            <div class="inner-right">{{ item.created }}</div>
          </div>
          <div class="box">
            <div class="inner-left">结束时间:</div>
            <div class="inner-right">{{ item.update }}</div>
          </div>
          <div class="box">
            <div class="inner-left">报警代码:</div>
            <div class="inner-right">{{ item.errorCode }}</div>
          </div>
          <div class="box1">
            <div class="inner-left">消息:</div>
            <div class="inner-right">
              <el-input
                type="textarea"
                :autosize="{ minRows: 2, maxRows: 4 }"
                placeholder="请输入消息"
                v-model="item.message"
              />
            </div>
          </div>
        </div>
        <div slot="footer" class="dialog-footer">
          <el-button @click="dialogFormVisible = false">取 消</el-button>
        </div>
      </el-dialog>
    </el-tab-pane>
    <el-tab-pane label="设备属性" name="deviceAttributes">
      <!-- <DeviceAttributes ref="DeviceAttributes"/> -->
    </el-tab-pane>
  </el-tabs>
</template>
<script>
import {
  GetEquipmentTypes,
  GetEquipmentExecutedLog,
  GetEquipmentExecutedLogById,
} from "@/api/logManage/index";
import Device from "./deviceManage/device.vue";
import DeviceAttributes from "./deviceManage/device.vue";
export default {
  components: {
    Device,
    DeviceAttributes,
  },
  data() {
    return {
      activeName: "device",
      tableData: [],
      queryConfig: {
        currentPage: 1,
        pageSize: 20,
        equipmentCode: "",
        logType: "",
        message: "",
        bllResultCode: "",
      },
      total: 0,
      form: {
        startTime: this.$moment()
          .subtract(3, "days")
          .format("YYYY-MM-DD 00:00:00"),
        endTime: this.$moment().add(1, "days").format("YYYY-MM-DD 23:59:59"),
      },
      optionsBllResult: [
        {
          value: "",
          label: "全部",
        },
      ],
      dialogFormVisible: false,
      multipleSelection: [],
      detailsData: [],
    };
  },
  created() {
    this.getFlag("LogLevelFlag");
    this.getTableList();
  },
  methods: {
    btnAction() {
      this.getTableList();
    },
    getFlag(data) {
      let params = { Code: data };
      GetDictWithDetailsLangs(params).then((response) => {
        response.data.dictDetails.forEach((x) => {
          this.optionsBllResult.push({ value: x.code, label: x.name });
        });
      });
    },
    getTableList() {
      const params = {
        pageNumber: this.queryConfig.currentPage,
        perPageCount: this.queryConfig.pageSize,
        queryConfig: {
          equipmentCode: this.queryConfig.equipmentCode,
          logType: this.queryConfig.logType,
          message: this.queryConfig.message,
          bllResultCode: this.queryConfig.bllResultCode,
          begin: this.form.startTime,
          end: this.form.endTime,
        },
      };
      this.listLoading = true;
      GetEquipmentExecutedLog(params).then((response) => {
        this.total = response.data.totalCount;
        this.tableData = response.data.data;
        this.listLoading = false;
      });
    },
    //   详情
    details() {
      if (this.multipleSelection.length == 0) {
        this.$alert("请选择一条数据!", "标题名称", {
          confirmButtonText: "确定",
        });
      } else {
        this.detailsData = [];
        let params = {
          id: this.multipleSelection[0].id,
        };
        GetEquipmentExecutedLogById(params).then((response) => {
          this.detailsData.push(response.data);
        });
        this.dialogFormVisible = true;
      }
    },
    //获取表格行数据
    handleSelectionChange(val) {
      this.multipleSelection = val;
    },
    //分页
    handleCurrentChange(page) {
      this.queryConfig.currentPage = page;
      this.getTableList();
    },
    validateNumber() {
      const regex = /^[0-9]*$/;
      this.numberError = regex.test(this.number) ? "" : "只能输入数字";
    },
  },
};
</script>
<style>
/* 修改复选框大小 */
.el-table .el-checkbox {
  transform: scale(1.8) !important; /* 调整大小 */
  margin-top: 5px;
}
.el-row {
  margin-bottom: 5px;
}
.interfacel-content {
  display: flex;
  border-radius: 4px;
  min-height: 46px;
  margin-bottom: 10px;
  align-items: center;
}
.table {
  border: 1px solid #e5e9f2;
}
.T1 {
  border: 1px solid #b3d8ff;
}
.pagination-container {
  text-align: center; /* 使分页组件靠右 */
  margin-top: 20px; /* 添加顶部间距 */
}
.button-col {
  display: flex;
  justify-content: flex-end; /* 按钮靠右对齐 */
}
</style>