heyujie
2021-07-01 5044b402981f42542eece201e1308b5c2816737a
轮询日志和朔黄按机车hao号搜索
1个文件已添加
6个文件已修改
942 ■■■■■ 已修改文件
src/api/log.ts 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/pages/cameraAccess/components/CameraInfo.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/pages/gb28181/index/App.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/pages/logCenter/views/operationLog.vue 275 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/pages/logCenter/views/pollingLog.vue 618 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/pages/shuohuangMonitorAnalyze/components/memberManage.vue 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/pages/shuohuangMonitorAnalyze/components/searchForVideoAnalyze.vue 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/log.ts
New file
@@ -0,0 +1,35 @@
import request from "@/scripts/httpRequest";
// /data/api-v//
export const queryOperationLog = (data: any) => {
    return request({
        url: "/data/api-v/log/queryOperationLog",
        method: "post",
        data
    })
}
export const getOperations = (query: any) => {
    return request({
        url: "/data/api-v/log/operations",
        method: "get",
    params: query
    })
}
export const getModules = (query: any) => {
    return request({
        url: "/data/api-v/log/modules",
        method: "get",
    params: query
    })
}
export const queryScheduleLog = (data: any) => {
    return request({
        url: "/data/api-v/log/queryScheduleLog",
        method: "post",
        data
    })
}
src/pages/cameraAccess/components/CameraInfo.vue
@@ -174,7 +174,6 @@
</template>
<script>
import {
  checkCameraConnet,
  createCamera,
  updateCameraInfo,
  getCameraInfo,
src/pages/gb28181/index/App.vue
@@ -190,7 +190,6 @@
  saveGB28181Config,
  getGb28181AreaList,
  newGb28181ID,
  getLocalCameraTree,
  getAllSubServer,
  saveGb28181CamTree
} from './api'
src/pages/logCenter/views/operationLog.vue
@@ -6,21 +6,25 @@
          <div class="title">周期:</div>
          <div class="opts">
            <div class="opt" tabindex="1">今日</div>
            <div class="opt" tabindex="2">近三天</div>
            <div class="opt" tabindex="3">近七天</div>
            <div class="opt" tabindex="4">近一个月</div>
            <div class="opt" tabindex="5">近六个月</div>
            <div
              :class="activeDateChoise == i ? 'opt-active' : ''"
              class="opt"
              v-for="(item, i) in dateArr"
              :key="i"
              @click="choseRange(item, i)"
            >
              {{ item }}
            </div>
          </div>
        </div>
        <div class="search">
          <el-input
            placeholder="搜索"
            v-model="input3"
            v-model="fuzzySearch"
            size="small"
            class="input-with-select"
          >
            <el-button slot="append" icon="el-icon-search"></el-button>
          <el-button slot="append" icon="el-icon-search" @click="getOperationLog"></el-button>
          </el-input>
        </div>
      </div>
@@ -28,42 +32,55 @@
        <div class="bar">
          <div class="name">操作模块:</div>
          <el-select v-model="value" placeholder="请选择"
          <el-select
            v-model="curModule"
            placeholder="请选择"
            size="small"
            @change="moduleChange"
          >
          <el-option
              label="全部"
              :value="''"
            >
            </el-option>
            <el-option
              v-for="item in options"
              :key="item.value"
              :label="item.label"
              :value="item.value"
              v-for="item in moduleOptions"
              :key="item.proc_name"
              :label="item.proc_name"
              :value="item.proc_name"
            >
            </el-option>
          </el-select>
        </div>
         <div class="bar">
          <div class="name">操作模块:</div>
          <el-select v-model="value" placeholder="请选择"
        <div class="bar">
          <div class="name">操作功能:</div>
          <el-select
            v-model="gongneng"
            placeholder="请选择"
            size="small"
            @change="getOperationLog"
          >
            <!-- :disabled="gongnengOptions.length==0" -->
            <el-option
              v-for="item in options"
              :key="item.value"
              :label="item.label"
              :value="item.value"
              v-for="item in gongnengOptions"
              :key="item.name"
              :label="item.name"
              :value="item.name"
            >
            </el-option>
          </el-select>
        </div>
         <div class="bar">
          <div class="name">操作模块:</div>
        <div class="bar">
          <div class="name">操作结果:</div>
          <el-select v-model="value" placeholder="请选择"
          <el-select
            v-model="result"
            placeholder="请选择"
            size="small"
            @change="getOperationLog"
          >
            <el-option
              v-for="item in options"
              v-for="item in resultOptions"
              :key="item.value"
              :label="item.label"
              :value="item.value"
@@ -73,51 +90,186 @@
        </div>
      </div>
    </div>
    <div class="table">faefws</div>
    <div class="table">
      <el-table
        class="tableBox"
        ref="multipleTable"
        highlight-current-row
        :data="tableData"
        style="width: 100%"
        :header-cell-style="{ background: '#f8f8f8', color: '#222222' }"
        @selection-change="handleSelectionChange"
      >
        <el-table-column :align="'center'" label="序号" type="index" width="50">
        </el-table-column>
        <el-table-column
          :align="'center'"
          sortable
          min-width="98px"
          prop="add_time"
          label="操作时间"
        ></el-table-column>
        <el-table-column
          sortable
          :align="'center'"
          prop="userName"
          label="用户名"
        ></el-table-column>
        <el-table-column
          :align="'center'"
          sortable
          prop="module"
          label="操作模块"
        ></el-table-column>
        <el-table-column
          :align="'center'"
          prop="procName"
          label="操作功能"
        ></el-table-column>
        <el-table-column
          :align="'center'"
          sortable
          prop="result"
          label="操作结果"
        ></el-table-column>
        <el-table-column
          :align="'center'"
          prop="msg"
          min-width="100px"
          label="详细信息"
        ></el-table-column>
        <el-table-column
          :align="'center'"
          sortable
          prop="ip"
          label="IP"
        ></el-table-column>
      </el-table>
    </div>
  </div>
</template>
<script>
import { deleteDate } from "@/api/system";
import { queryOperationLog, getOperations, getModules } from "@/api/log";
function pad0(i) {
  if (i >= 0 && i <= 9) {
    return "0" + i;
  } else {
    return i;
  }
}
export default {
  data() {
    return {
      loading: false,
      loadingText: "",
      input3: "",
      options: [
      tableData: [],
      dateArr: ["今日", "近三天", "近七天", "近一个月", "近六个月"],
      moduleOptions: [],
      gongnengOptions: [],
      resultOptions: [
        {
          value: "选项1",
          label: "黄金糕",
          value: "",
          label: "全部",
        },
        {
          value: "选项2",
          label: "双皮奶",
          value: "成功",
          label: "成功",
        },
        {
          value: "选项3",
          label: "蚵仔煎",
        },
        {
          value: "选项4",
          label: "龙须面",
        },
        {
          value: "选项5",
          label: "北京烤鸭",
          value: "失败",
          label: "失败",
        },
      ],
      value: "",
      page: 1,
      pageSize: 15,
      activeDateChoise: 0,
      gongneng: "",
      result: "",
      curModule: "",
      timeStart: "",
      timeEnd: "",
      fuzzySearch: "",
      total:0,
    };
  },
  mounted() {},
  mounted() {
    this.getTimeRange(24 * 60 * 60 * 1000);
    this.getOperationLog();
    this.getOptions();
  },
  methods: {
    format(array) {
      return [
        this.$moment(array[0]).format("YYYY-MM-DD"),
        this.$moment(array[1]).format("YYYY-MM-DD"),
      ];
    gongnengChange(val) {},
    moduleChange(val) {
      this.getOperationLog()
      this.gongneng=""
      getOperations({
        module: this.curModule,
      }).then((res) => {
        this.gongnengOptions = res.data;
      });
    },
    getOptions() {
      getModules().then((res) => {
        this.moduleOptions = res.data;
      });
    },
    choseRange(item, i) {
      switch (item) {
        case "今日":
          this.getTimeRange(24 * 60 * 60 * 1000);
          break;
        case "近三天":
          this.getTimeRange(24 * 60 * 60 * 1000 * 3);
          break;
        case "近七天":
          this.getTimeRange(24 * 60 * 60 * 1000 * 7);
          break;
        case "近一个月":
          this.getTimeRange(24 * 60 * 60 * 1000 * 30);
          break;
        case "近六个月":
          this.getTimeRange(24 * 60 * 60 * 1000 * 30 * 6);
          break;
        default:
          break;
      }
      this.getOperationLog();
      this.activeDateChoise = i;
    },
    getOperationLog(timeStart, timeEnd) {
      const data= {
        timeStart: this.timeStart,
        timeEnd: this.timeEnd,
        page: this.page,
        pageSize: this.pageSize,
        module: this.curModule,
        function: this.gongneng,
        result: this.result,
        fuzzySearch: this.fuzzySearch,
      }
      queryOperationLog(data).then((res) => {
        this.tableData = res.data.logs;
        this.total = res.data.total
      });
    },
    getTimeStr(date) {
      var month = pad0(date.getMonth() + 1); //月
      var day = pad0(date.getDate()); //日
      var hour = pad0(date.getHours()); //时
      var minute = pad0(date.getMinutes()); //分
      var second = pad0(date.getSeconds()); //秒
      return `${date.getFullYear()}-${month}-${day} ${hour}:${minute}:${second}`;
    },
    getTimeRange(gap) {
      var date = new Date(); //当前时间
      var preDay = new Date(new Date().getTime() - gap);
      this.timeStart = this.getTimeStr(preDay)
      this.timeEnd = this.getTimeStr(date)
    },
  },
};
@@ -166,7 +318,7 @@
            background-color: rgba(61, 104, 225, 1);
            color: #fff;
          }
          .opt:focus {
          .opt-active {
            color: #fff;
            background-color: rgba(61, 104, 225, 1);
          }
@@ -178,25 +330,36 @@
      }
    }
    .second {
          display: flex;
      display: flex;
      margin: 10px 0;
      .bar {
        display: flex;
        align-items: baseline;
        background: aliceblue;
        width: fit-content;
        padding-left: 20px;
        .name{
        .name {
          margin-right: 5px;
        }
      }
    }
  }
  .table {
    margin-top: 10px;
    background: #fff;
    height: 100%;
    margin-top: 16px;
    border-radius: 5px;
    padding: 12px;
    background-color: white;
    .tableBox {
      th {
        padding: 0 !important;
        height: 40px;
        line-height: 40px;
      }
      td {
        padding: 0 !important;
        height: 34px;
        line-height: 34px;
      }
    }
  }
}
</style>
src/pages/logCenter/views/pollingLog.vue
@@ -1,384 +1,332 @@
<template>
  <div class="restart">
    <div class="restart-set">
      <div class="t">重启设置</div>
  <div class="op-log" v-loading="loading" :element-loading-text="loadingText">
    <div class="top">
      <div class="first">
        <div class="time-option">
          <div class="title">摄像机:</div>
      <div class="bar">
        <div class="name">重启节点</div>
        <el-button
          class="reset-btn"
          type="primary"
          size="small"
          @click="restart"
          >重启</el-button
        >
      </div>
    </div>
    <div class="restart-set">
      <div class="t">定时重启</div>
      <div class="bar">
        <div class="name">重启周期</div>
        <el-select
          v-model="every"
          placeholder="关闭"
          size="small"
          @change="changeEvery"
        >
          <el-option
            v-for="item in options"
            :key="item.value"
            :label="item.label"
            :value="item.value"
          <div class="opts">
            <div
              class="opt opt-active"
              @click="openDialog"
            >
              选择摄像机
            </div>
          </div>
        </div>
        <div class="search">
          <el-input
            placeholder="搜索"
            v-model="procName"
            size="small"
            class="input-with-select"
          >
          </el-option>
        </el-select>
          <el-button slot="append" icon="el-icon-search" @click="getScheduleLog"></el-button>
          </el-input>
        </div>
      </div>
      <div class="bar" v-if="every == 'monthly'">
        <div class="name">重启日期</div>
        <el-select
          v-model="cronValueObj.day"
          placeholder="请选择"
          size="small"
          @change="updateExpression"
        >
          <el-option
            v-for="item in days"
            :key="item.value"
            :label="item.label"
            :value="item.value"
          ></el-option>
        </el-select>
      </div>
      <div class="bar" v-if="every == 'weekly'">
        <div class="name">重启日期</div>
        <el-select
          v-model="cronValueObj.week"
          placeholder="请选择"
          size="small"
          @change="updateExpression"
        >
          <el-option label="星期一" value="1"></el-option>
          <el-option label="星期二" value="2"></el-option>
          <el-option label="星期三" value="3"></el-option>
          <el-option label="星期四" value="4"></el-option>
          <el-option label="星期五" value="5"></el-option>
          <el-option label="星期六" value="6"></el-option>
          <el-option label="星期日" value="7"></el-option>
        </el-select>
      </div>
      <div class="bar" v-if="every != 'close'">
        <div class="name">重启时间</div>
        <el-time-picker
          v-model="time"
          :picker-options="{ selectableRange: '00:00:00 - 23:59:59' }"
          value-format="HH:mm"
          format="HH:mm"
          placeholder="任意时间点"
          size="small"
          @change="updateExpression"
        ></el-time-picker>
      <div class="second">
        <span>日期时间:</span>
        <el-date-picker
      v-model="dateRange" size="small"
      type="datetimerange"
      range-separator="到"
            value-format="yyyy-MM-dd HH:mm:ss"
      start-placeholder="开始日期"
      @change="dateChange"
      end-placeholder="结束日期">
    </el-date-picker>
      </div>
    </div>
    <div class="table">
      <el-table
        class="tableBox"
        ref="multipleTable"
        highlight-current-row
        :data="tableData"
        style="width: 100%"
        :header-cell-style="{ background: '#f8f8f8', color: '#222222' }"
        @selection-change="handleSelectionChange"
      >
        <el-table-column :align="'center'" label="序号" type="index" width="50">
        </el-table-column>
        <el-table-column
          :align="'center'"
          sortable
          min-width="100px"
          prop="add_time"
          label="轮询开始时间"
        ></el-table-column>
        <el-table-column
          :align="'center'"
          sortable
          min-width="100px"
          prop="add_time"
          label="轮询结束时间"
        ></el-table-column>
        <el-table-column
          :align="'center'"
          sortable
          prop="module"
          label="摄像机"
        ></el-table-column>
        <el-table-column
          :align="'center'"
          prop="procName"
          label="轮询时长(分)"
        ></el-table-column>
      </el-table>
    </div>
    <el-button class="save-btn" type="primary" @click="save">保存</el-button>
    <el-dialog
    title="选择摄像机"
     :visible.sync="dialogVisible"
  width="50%"
  :before-close="handleClose">
   <el-tree
            ref="cameraTree"
            :data="cameraTree"
            :props="props"
            node-key="id"
            show-checkbox
            check-on-click-node
            default-expand-all
          ></el-tree>
  <span slot="footer" class="dialog-footer">
    <el-button @click="dialogVisible = false">全部取消</el-button>
    <el-button @click="dialogVisible = false">全选</el-button>
    <el-button @click="dialogVisible = false">取 消</el-button>
    <el-button type="primary" @click="confirmCamera">确 定</el-button>
  </span>
</el-dialog>
  </div>
</template>
<script>
import {
  rebootServer,
  getDevInfo,
  getRebootTask,
  setRebootTask,
  fileUpload,
  doUpgrade,
  deleteDate,
} from "@/api/system";
import { deleteDate } from "@/api/system";
import { getLocalCameraTree } from "@/api/area";
import { queryOperationLog, getOperations, getModules,queryScheduleLog } from "@/api/log";
function pad0(i) {
  if (i >= 0 && i <= 9) {
    return "0" + i;
  } else {
    return i;
  }
}
export default {
  data() {
    return {
      time: "",
      saveBtn: false,
      timer: null,
      probeSum: 0,
      cronText: "",
      cronValueObj: {
        min: "*",
        hour: "*",
        day: "*",
        month: "*",
        week: "*",
      },
      options: [
      loading: false,
      loadingText: "",
      input3: "",
      tableData: [],
      moduleOptions: [],
      gongnengOptions: [],
      dateRange: [],
      cameraTree:[],
      resultOptions: [
        {
          value: "close",
          label: "关闭",
          value: "",
          label: "全部",
        },
        {
          value: "daily",
          label: "每日",
          value: "成功",
          label: "成功",
        },
        {
          value: "weekly",
          label: "每周",
        },
        {
          value: "monthly",
          label: "每月",
          value: "失败",
          label: "失败",
        },
      ],
      every: "close",
      rebootCron: "",
      props: {
        label: 'name'
      },
      value: "",
      page: 1,
      pageSize: 15,
      activeDateChoise: 0,
      gongneng: "",
      result: "",
      curModule: "",
      timeStart: "",
      timeEnd: "",
      fuzzySearch: "",
      total:0,dialogVisible: false,
       procID: "",
       procName: "",
    };
  },
  computed: {
    days: () => {
      let arr = [];
      for (let i = 1; i < 32; i++) {
        arr.push({
          label: i + "日",
          value: i + "",
        });
      }
      return arr;
    },
  },
  components: {},
  mounted() {
    this.getRebootCron();
    this.getTimeRange(24 * 60 * 60 * 1000);
    this.getScheduleLog();
    this.getOptions();
  },
  beforeDestroy() {},
  methods: {
    resolveExp() {
      // "准备反解析", this.expression;
      if (this.rebootCron.length) {
        let arr = this.rebootCron.split(" ");
        if (arr.length >= 5) {
          //6 位以上是合法表达式
          this.cronValueObj.min = arr[0];
          this.cronValueObj.hour = arr[1];
          this.cronValueObj.day = arr[2];
          this.cronValueObj.month = "*";
          this.cronValueObj.week = arr[4];
        }
        if (this.cronValueObj.week != "*") {
          this.every = "weekly";
        } else if (this.cronValueObj.day != "*") {
          this.every = "monthly";
        } else {
          this.every = "daily";
        }
        this.time = this.cronValueObj.hour + ":" + this.cronValueObj.min;
      } else {
        //没有传入的表达式 则还原
        this.clearCron();
      }
    confirmCamera(){
     const selectedIDs= this.$refs.cameraTree.getCheckedKeys()
      this.procID= selectedIDs.join(",")
    this.getScheduleLog()
      this.dialogVisible=false
    },
    clearCron() {
      this.cronValueObj.min = "*";
      this.cronValueObj.hour = "*";
      this.cronValueObj.day = "*";
      this.cronValueObj.month = "*";
      this.cronValueObj.week = "*";
    openDialog(){
      this.dialogVisible= true
      getLocalCameraTree({
        cameraName:"",
        searchType:0
      }).then((res) => {
        this.cameraTree =res.data
      })
    },
    getRebootCron() {
      getRebootTask().then((rsp) => {
        this.rebootCron = rsp.data;
    gongnengChange(val) {},
    moduleChange(val) {
      this.getScheduleLog()
      this.gongneng=""
      getOperations({
        module: this.curModule,
      }).then((res) => {
        this.gongnengOptions = res.data;
      });
    },
    reLogin() {
      this.$router.push("/");
    },
    restart() {
      this.$confirm("确定要重启该节点吗?", {
        center: true,
        cancelButtonClass: "comfirm-class-cancle",
        confirmButtonClass: "comfirm-class-sure",
      }).then(() => {
        // this.loading = true;
        // this.loadingText = "智能计算节点正在重启,请耐心等待..."
        rebootServer()
          .then((rsp) => {
            this.probeServer(this.reLogin);
          })
          .catch((err) => {
            if (err.status == 400) {
              // this.loading = false;
              this.$notify({
                type: "error",
                message: "重启计算节点失败",
              });
            } else {
              this.probeServer(this.reLogin);
            }
          });
    getOptions() {
      getModules().then((res) => {
        this.moduleOptions = res.data;
      });
    },
    probeServer(cb) {
      this.probeSum++;
      let _this = this;
      if (this.probeSum > 60) {
        this.$confirm("连接服务器失败, 请刷新页面或联系管理员", "失败", {
          type: "error",
          cancelButtonClass: "comfirm-class-cancle",
          confirmButtonClass: "comfirm-class-sure",
        }).then(() => {
          cb();
        });
        return;
      }
      this.timer = setTimeout(() => {
        getDevInfo()
          .then(() => {
            cb();
          })
          .catch((err) => {
            _this.probeServer(cb);
          });
      }, 10000);
    choseRange() {
      this.getScheduleLog();
      this.activeDateChoise = i;
    },
    save() {
      this.rebootCron = this.cronText;
      setRebootTask({ task: this.cronText })
        .then((rsp) => {
          if (rsp && rsp.success) {
            this.$notify({
              type: "success",
              message: "配置成功",
            });
          }
        })
        .catch((err) => {
          this.$notify({
            type: "error",
            message: "配置失败",
          });
        });
    getScheduleLog() {
      const data= {
        timeStart: this.timeStart,
        timeEnd: this.timeEnd,
        page: this.page,
        pageSize: this.pageSize,
        procID: this.procID,
        procName: this.procName,
      }
      queryScheduleLog(data).then((res) => {
        this.tableData = res.data.logs;
        this.total = res.data.total
      });
    },
    changeEvery() {
      this.saveBtn = true;
      if (this.every === "close") {
        this.cronText = "";
        return;
      }
      if (this.every === "monthly") {
        this.cronValueObj.week = "*";
        this.cronValueObj.day = "1";
        if (!this.time.length) {
          this.time = "00:00";
        }
      }
      if (this.every === "weekly") {
        this.cronValueObj.day = "*";
        this.cronValueObj.week = "1";
        if (!this.time.length) {
          this.time = "00:00";
        }
      }
      if (this.every === "daily") {
        this.cronValueObj.day = "*";
        this.cronValueObj.week = "*";
      }
      this.updateExpression();
    dateChange(val){
      [this.timeStart,this.timeEnd]= val;
      this.getScheduleLog()
    },
    updateExpression() {
      this.saveBtn = true;
      if (this.time.length) {
        let arr = this.time.split(":");
        this.cronValueObj.hour = arr[0];
        this.cronValueObj.min = arr[1];
      }
      this.crontabValueString();
    getTimeStr(date) {
      var month = pad0(date.getMonth() + 1); //月
      var day = pad0(date.getDate()); //日
      var hour = pad0(date.getHours()); //时
      var minute = pad0(date.getMinutes()); //分
      var second = pad0(date.getSeconds()); //秒
      return `${date.getFullYear()}-${month}-${day} ${hour}:${minute}:${second}`;
    },
    crontabValueString() {
      let obj = this.cronValueObj;
      this.cronText =
        obj.min +
        " " +
        obj.hour +
        " " +
        obj.day +
        " " +
        obj.month +
        " " +
        obj.week;
    },
  },
  watch: {
    rebootCron() {
      this.resolveExp();
    getTimeRange(gap) {
      var date = new Date(); //当前时间
      var preDay = new Date(new Date().getTime() - gap);
      this.timeStart = this.getTimeStr(preDay)
      this.timeEnd = this.getTimeStr(date)
      this.dateRange=[this.timeStart,this.timeEnd]
    },
  },
};
</script>
<style lang="scss">
.all {
  width: 100%;
}
.restart {
.op-log {
  margin: 0 auto;
  padding: 20px;
  .t {
    box-sizing: border-box;
    text-align: left;
    width: 70%;
    margin: 0 auto;
    padding: 10px;
    font-size: 16px;
  }
  .bar {
    height: 50px;
  padding: 10px 8px 10px 5px;
    width: 70%;
    background: rgba(248, 248, 248, 1);
    margin: 0 auto;
    min-width: 300px;
    display: flex;
    justify-content: space-between;
    box-sizing: border-box;
    padding: 0 20px;
    align-items: center;
    border-radius: 10px;
    margin-bottom: 10px;
    .reset-btn {
      width: 70px;
      height: 32px;
      border-radius: 5px;
  background-color: rgba(248, 248, 248, 1);
  width: 100%;
  display: flex;
  flex-direction: column;
  .top {
    height: 100px;
    background: #fff;
    border-radius: 5px;
    .first {
      display: flex;
      justify-content: space-between;
      height: 45px;
      padding: 0 20px;
      .time-option {
        display: flex;
        justify-content: space-between;
        align-items: center;
        // padding-left: 20px;
        .title {
          margin-right: 20px;
        }
        .opts {
          display: flex;
          justify-content: space-between;
          .opt {
            width: fit-content;
            height: 32px;
            padding: 0 15px;
            // background: aquamarine;
            border-radius: 4px;
            cursor: pointer;
            margin-right: 20px;
            line-height: 32px;
            font-size: 14px;
          }
          .opt:hover {
            background-color: rgba(61, 104, 225, 1);
            color: #fff;
          }
          .opt-active {
            color: #fff;
            background-color: rgba(61, 104, 225, 1);
          }
        }
      }
      .search {
        display: flex;
        align-items: center;
      }
    }
    .el-select {
      width: 100%;
    }
    .name {
      min-width: 150px;
      text-align: left;
      font-size: 14px;
    }
    .el-input__inner::placeholder {
      color: rgba(107, 107, 107, 1);
    }
    .el-input--small .el-input__inner {
      height: 32px;
      line-height: 32px;
      border: none;
      background: rgba(240, 240, 240, 1);
    }
    .el-select .el-input .el-select__caret {
      color: rgba(138, 138, 138, 1);
      font-size: 15px;
    }
    .el-date-editor.el-input,
    .el-date-editor.el-input__inner {
      width: 100%;
    .second {
      display: flex;
      margin: 10px 0;    padding: 0 20px;
align-items: center;
    font-size: 14px;
      .bar {
        display: flex;
        align-items: baseline;
        width: fit-content;
        padding-left: 20px;
        .name {
          margin-right: 5px;
        }
      }
    }
  }
  .save-btn {
    width: 260px;
    margin-top: 50px;
  .table {
    margin-top: 16px;
    border-radius: 5px;
    padding: 12px;
    background-color: white;
    .tableBox {
      th {
        padding: 0 !important;
        height: 40px;
        line-height: 40px;
      }
      td {
        padding: 0 !important;
        height: 34px;
        line-height: 34px;
      }
    }
  }
}
</style>
src/pages/shuohuangMonitorAnalyze/components/memberManage.vue
@@ -347,6 +347,7 @@
    memberSave() {
      this.$refs['memberForm'].validate((valid) => {
        if (valid) {
          debugger;
          let params = Object.assign({ DeptID: this.curLeftTreeNode.id }, this.memberEditForm);
          if (this.memberEditForm.ID) {
            updateMemberInfo(params).then(res => {
@@ -358,6 +359,7 @@
                this.memberEditDialogVisible = false;
                this.renderMemberTable();
                this.searchLeftTreeData();
                this.memberEditForm={}
              }
            })
          } else {
@@ -370,6 +372,7 @@
                this.renderMemberTable();
                this.memberEditDialogVisible = false;
                this.searchLeftTreeData();
                this.memberEditForm={}
              }
            })
          }
src/pages/shuohuangMonitorAnalyze/components/searchForVideoAnalyze.vue
@@ -167,8 +167,8 @@
              @change="filterSearchData"
            >
              <el-option value label="全部"></el-option>
              <el-option :value="false" label="未关注"></el-option>
              <el-option :value="true" label="已关注"></el-option>
              <el-option :value="'1'" label="未关注"></el-option>
              <el-option :value="'0'" label="已关注"></el-option>
            </el-select>
          </div>
          <div>
@@ -560,7 +560,7 @@
        PageSize:
          this.showType == "list" ? this.tablePageSize : this.tabPageSize,
        IsDetail: this.showType == "list",
        IsFollow: this.IsFollow ? "0" : "1",
        IsFollow: this.IsFollow ,
        IsOperate: this.IsOperate,
      };
      let filterQuerys = [];
@@ -575,6 +575,7 @@
        }
      });
      Object.assign(query, ...filterQuerys);
      debugger;
      getlst(query).then((res) => {
        if (_this.showType == "list") {
@@ -615,6 +616,7 @@
        IsFollow: this.IsFollow,
        IsOperate: this.IsOperate,
      };
      debugger;
      let filterQuerys = [];
      this.checkedConfigs.forEach((config) => {
        let checkedOpts = config.data.filter((option) => option.isChecked);
@@ -697,6 +699,7 @@
    },
    toggleFollow(data) {
      data.IsFollow == "0" ? (data.IsFollow = "1") : (data.IsFollow = "0");
      debugger
      updateFollow({
        id: data.id,
        IsFollow: data.IsFollow,