New file |
| | |
| | | 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
|
| | | })
|
| | | }
|
| | |
| | | </template> |
| | | <script> |
| | | import { |
| | | checkCameraConnet, |
| | | createCamera, |
| | | updateCameraInfo, |
| | | getCameraInfo, |
| | |
| | | saveGB28181Config, |
| | | getGb28181AreaList, |
| | | newGb28181ID, |
| | | getLocalCameraTree, |
| | | getAllSubServer, |
| | | saveGb28181CamTree |
| | | } from './api' |
| | |
| | | <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>
|
| | |
| | | <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"
|
| | |
| | | </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)
|
| | | },
|
| | | },
|
| | | };
|
| | |
| | | background-color: rgba(61, 104, 225, 1);
|
| | | color: #fff;
|
| | | }
|
| | | .opt:focus {
|
| | | .opt-active {
|
| | | color: #fff;
|
| | | background-color: rgba(61, 104, 225, 1);
|
| | | }
|
| | |
| | | }
|
| | | }
|
| | | .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>
|
| | |
| | | <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>
|
| | |
| | | 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 => { |
| | |
| | | this.memberEditDialogVisible = false; |
| | | this.renderMemberTable(); |
| | | this.searchLeftTreeData(); |
| | | this.memberEditForm={} |
| | | } |
| | | }) |
| | | } else { |
| | |
| | | this.renderMemberTable(); |
| | | this.memberEditDialogVisible = false; |
| | | this.searchLeftTreeData(); |
| | | this.memberEditForm={} |
| | | } |
| | | }) |
| | | } |
| | |
| | | @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> |
| | |
| | | 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 = []; |
| | |
| | | } |
| | | }); |
| | | Object.assign(query, ...filterQuerys); |
| | | debugger; |
| | | |
| | | getlst(query).then((res) => { |
| | | if (_this.showType == "list") { |
| | |
| | | IsFollow: this.IsFollow, |
| | | IsOperate: this.IsOperate, |
| | | }; |
| | | debugger; |
| | | let filterQuerys = []; |
| | | this.checkedConfigs.forEach((config) => { |
| | | let checkedOpts = config.data.filter((option) => option.isChecked); |
| | |
| | | }, |
| | | toggleFollow(data) { |
| | | data.IsFollow == "0" ? (data.IsFollow = "1") : (data.IsFollow = "0"); |
| | | debugger |
| | | updateFollow({ |
| | | id: data.id, |
| | | IsFollow: data.IsFollow, |