Commit b1d21bb3 authored by dupengyu's avatar dupengyu

补充缺失页面 补充devserver及

parent 3e2f1a6d
......@@ -3,7 +3,7 @@ import request from '@/utils/request'
// 查询分页
export function selectPage(params) {
return request({
url: '/backuprestore/selectPage',
url: '/api/backuprestore/selectPage',
method: 'post',
params
})
......@@ -12,7 +12,7 @@ export function selectPage(params) {
// 数据备份
export function doBackup(data) {
return request({
url: '/backuprestore/doBackup',
url: '/api/backuprestore/doBackup',
method: 'post',
data
})
......@@ -21,7 +21,7 @@ export function doBackup(data) {
// 数据恢复
export function restore(params) {
return request({
url: '/backuprestore/restore',
url: '/api/backuprestore/restore',
method: 'post',
params
})
......
import request from '@/utils/request'
const path = {
deptList: '/dict/selectDeptItem',
fsuList: '/dict/selectFsuItem',
OperateEnum: '/dict/selectOperationItem',
LeakyCablelEnum: '/dict/selectLeakyCablelItem',
MonitorEnum: '/dict/selectMonitorItem',
selectDictType: '/dict/selectDictType',
getTree: '/home/getTree',
deptList: '/api/dict/selectDeptItem',
fsuList: '/api/dict/selectFsuItem',
OperateEnum: '/api/dict/selectOperationItem',
LeakyCablelEnum: '/api/dict/selectLeakyCablelItem',
MonitorEnum: '/api/dict/selectMonitorItem',
selectDictType: '/api/dict/selectDictType',
getTree: '/api/home/getTree',
}
export function deptList() {
......
......@@ -2,29 +2,29 @@ import request from '@/utils/request'
const path = {
// 告警管理
exportLeakyCable: 'sysMonitorAlarm/export',
exportConnet: 'sysConnectAlarm/export',
exportLeakyCable: 'api/sysMonitorAlarm/export',
exportConnet: 'api/sysConnectAlarm/export',
// 配置管理
exportRailWay: "railWay/export",
exportSite: "site/export",
exportFsu: "fsu/export",
exportMonitorEquip: "monitorEquip/export",
exportLeaky: "leakyCable/export",
exportFeeder: "antennaFeeder/export",
exportRailWay: "api/railWay/export",
exportSite: "api/site/export",
exportFsu: "api/fsu/export",
exportMonitorEquip: "api/monitorEquip/export",
exportLeaky: "api/leakyCable/export",
exportFeeder: "api/antennaFeeder/export",
// 实时状态
exportLeakyCableTime: 'sysLeakyCableStatus/export',
exportConnetTime: 'sysDeviceStatus/export',
exportLeakyCableTime: 'api/sysLeakyCableStatus/export',
exportConnetTime: 'api/sysDeviceStatus/export',
// 历史数据
exportLeakyStatusHistory: 'sysHistoryMonitorStatus/export',
exportLeakyMaintainHistory: 'sysHistoryMonitorMaintain/export',
exportConnectStatusHistory: 'sysHistoryConnectStatus/export',
exportConnectMaintainHistory: 'sysHistoryConnectMaintain/export',
exportLeakyStatusHistory: 'api/sysHistoryMonitorStatus/export',
exportLeakyMaintainHistory: 'api/sysHistoryMonitorMaintain/export',
exportConnectStatusHistory: 'api/sysHistoryConnectStatus/export',
exportConnectMaintainHistory: 'api/sysHistoryConnectMaintain/export',
// 用户管理
exportLog: 'sysLog/exportLog',
exportLog: 'api/sysLog/exportLog',
}
const blobConf = { responseType: 'blob' }
......
import request from '@/utils/request'
// 运行报表
export function chartInfo(params) {
return request({
url: '/xxl-job-admin/chartInfo',
method: 'post',
params
})
}
// 任务管理
export function jobinfoList(data) {
return request({
url: '/xxl-job-admin/jobinfo/pageList',
method: 'post',
data
})
}
// 调度日志
export function joblogList(data) {
return request({
url: '/xxl-job-admin/joblog/pageList',
method: 'post',
data
})
}
// 执行器管理
export function jobgroupList(data) {
return request({
url: '/xxl-job-admin/jobgroup/pageList',
method: 'post',
data
})
}
import request from '@/utils/request'
export function selectFeederPage(params) {
return request({
url: '/device/sync/selectFeederPage',
method: 'post',
params
})
}
......@@ -2,7 +2,7 @@ import request from '@/utils/request'
export function getList(params) {
return request({
url: '/vue-admin-template/table/list',
url: '/api/vue-admin-template/table/list',
method: 'get',
params
})
......
import request from '@/utils/request'
export function timeSync(params) {
return request({
url: '/device/udp/timeSync',
method: 'post',
params
})
}
......@@ -2,19 +2,19 @@ import request from '@/utils/request'
export function login(data) {
return request({
url: '/user/login',
url: '/api/user/login',
method: 'post',
data
})
}
export function getInfo() {
return request.post('/user/getUser', ...arguments)
return request.post('/api/user/getUser', ...arguments)
}
export function logout() {
return request({
url: '/user/logout',
url: '/api/user/logout',
method: 'post'
})
}
export const alarmLeval = {
1: '紧急',
2: '重要',
3: '一般'
0: '一般',
1: '重要',
2: '紧急'
}
export const alarmType = {
0: '漏缆',
1: '天馈线',
}
export const confirmStatus = {
0: '未确认',
1: '已确认',
2: '已消除'
}
export const ConnectStatusEnum = {
0: '连接正常',
1: '连接异常'
......
......@@ -158,6 +158,39 @@ export const constantRoutes = [
// }
// ]
// },
{
path: '/jobgroup',
component: Layout,
redirect: '/jobgroup',
name: 'Jobgroup',
meta: { title: '轮询管理', icon: 'history' },
children: [
{
path: 'screen',
name: 'screen',
component: () => import('@/views/jobgroup/screen/index.vue'),
meta: { title: '运行报表' }
},
{
path: 'jobinfo',
name: 'jobinfo',
component: () => import('@/views/jobgroup/jobinfo/index.vue'),
meta: { title: '任务管理' }
},
{
path: 'joblog',
name: 'joblog',
component: () => import('@/views/jobgroup/joblog/index.vue'),
meta: { title: '调度日志' }
},
{
path: 'jobmanage',
name: 'jobmanage',
component: () => import('@/views/jobgroup/jobmanage/index.vue'),
meta: { title: '执行器管理' }
},
]
},
{
path: '/history',
component: Layout,
......
......@@ -7,7 +7,7 @@ import EventBus from '@/utils/bus'
// create an axios instance
const service = axios.create({
baseURL: '/api/', // url = base url + request url
baseURL: '/', // url = base url + request url
// withCredentials: true, // send cookies when cross-domain requests
timeout: 5000 // request timeout
})
......@@ -33,6 +33,7 @@ function endLoading(el) {
// request interceptor
service.interceptors.request.use(
config => {
console.log(config)
// do something before request is sent
startLoading(config.el)
// config.data = json.dumps(config.data)
......
import request from '@/utils/request';
const path = {
cableTimeList: 'sysMonitorAlarm/selectPage',
cableConfirm: 'sysMonitorAlarm/confirm',
cableCancel: 'sysMonitorAlarm/cancel',
deviceList: 'sysConnectAlarm/selectPage',
deviceConfirm: 'sysConnectAlarm/confirm',
deviceCancel: 'sysConnectAlarm/cancel'
cableTimeList: 'api/sysMonitorAlarm/selectPage',
cableConfirm: 'api/sysMonitorAlarm/confirm',
cableCancel: 'api/sysMonitorAlarm/cancel',
eliminate: 'api/sysMonitorAlarm/eliminate',
deviceList: 'api/sysConnectAlarm/selectPage',
deviceConfirm: 'api/sysConnectAlarm/confirm',
deviceCancel: 'api/sysConnectAlarm/cancel',
alarmConfirmStatusStatistics: 'api/sysMonitorAlarmStatistics/alarmConfirmStatusStatistics',
alarmLevelStatistics: '/api/sysMonitorAlarmStatistics/alarmLevelStatistics',
alarmLevelCountStatistics: '/api/sysMonitorAlarmStatistics/alarmLevelCountStatistics'
}
export function cableTimeList() {
......@@ -19,7 +23,9 @@ export function cableCancel() {
export function cableConfirm() {
return request.post(path.cableConfirm, ...arguments);
}
export function eliminate() {
return request.post(path.eliminate, ...arguments);
}
export function deviceList() {
return request.post(path.deviceList, ...arguments);
}
......@@ -29,3 +35,14 @@ export function deviceConfirm() {
export function deviceCancel() {
return request.post(path.deviceCancel, ...arguments);
}
export function alarmConfirmStatusStatistics() {
return request.post(path.alarmConfirmStatusStatistics, ...arguments);
}
export function alarmLevelStatistics() {
return request.post(path.alarmLevelStatistics, ...arguments);
}
export function alarmLevelCountStatistics() {
return request.post(path.alarmLevelCountStatistics, ...arguments);
}
......@@ -51,7 +51,7 @@
v-for="(val, key) in alarmType"
:key="key"
:label="val"
:value="val"
:value="key"
>
</el-option>
</el-select>
......@@ -77,7 +77,7 @@
<script>
import { commonQuery } from "@/views/history/api";
import { alarmLeval,alarmType } from "@/const";
import { alarmLeval, alarmType } from "@/const";
export default {
name: "search",
......@@ -87,7 +87,7 @@ export default {
form: formInit(),
alarmLeval,
alarmType,
dateRange:[]
dateRange: [],
};
},
mounted() {
......@@ -95,10 +95,13 @@ export default {
},
methods: {
toSearch() {
this.form.startUploadTime = this.dateRange[0];
this.form.endUploadTime = this.dateRange[1];
this.$emit("search", this.form);
},
reset() {
this.form = formInit();
this.dateRange = []
this.$emit("search");
},
getInit() {
......
......@@ -125,7 +125,7 @@
<el-button
v-if="scope.row.confirmStatus == 1"
type="text"
@click="confirmAlarm(scope.row)"
@click="eliminate(scope.row)"
>已消除</el-button
>
</template>
......@@ -201,7 +201,7 @@
</template>
<script>
import { cableTimeList, cableConfirm, cableCancel } from "../api";
import { cableTimeList, cableConfirm, cableCancel, eliminate } from "../api";
import { exportLeakyCable } from "@/api/export";
import search from "./components/search.vue";
import download from "@/utils/download";
......@@ -247,6 +247,26 @@ export default {
this.searchOption = this.$route.query;
},
methods: {
eliminate(row) {
this.$confirm("是否将该项警告消除?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning",
})
.then(() => {
this.handleEliminate(row.id);
})
.catch(() => {
warningAlert("取消");
});
},
async handleEliminate(id) {
let res = await eliminate({id:id});
if (res.code === 200) {
successAlert("取消告警成功");
this.getTableData();
}
},
// 表格背景图颜色
cellClassFn({ row, column, rowIndex, columnIndex }) {
if (
......
......@@ -15,7 +15,7 @@
placeholder="请输入网元设备"
></el-input>
</el-form-item>
<el-form-item label="监测设备厂家" label-width="120px">
<!-- <el-form-item label="监测设备厂家" label-width="120px">
<el-select v-model="value" placeholder="请选择">
<el-option
v-for="item in options"
......@@ -25,7 +25,7 @@
>
</el-option>
</el-select>
</el-form-item>
</el-form-item> -->
<el-form-item label="上传时间">
<el-date-picker
v-model="dateRange"
......
......@@ -25,7 +25,7 @@
class="ml10"
type="primary"
icon="el-icon-refresh-right"
@click="getInit"
@click="handlePrint"
>打印</el-button
>
</div>
......@@ -39,31 +39,55 @@
>
<el-form-item label="告警对象">
<el-input
v-model="form.pointDeviceName"
v-model="form.alarmTarget"
clearable
placeholder="请输入告警对象"
></el-input>
</el-form-item>
<el-form-item label="告警类型">
<el-input
v-model="form.pointDeviceName"
<el-select
v-model="form.alarmType"
placeholder="请选择告警类型"
clearable
placeholder="请输入告警类型"
></el-input>
>
<el-option
v-for="(val, key) in alarmType"
:key="key"
:label="val"
:value="key"
>
</el-option>
</el-select>
</el-form-item>
<el-form-item label="告警级别">
<el-input
v-model="form.pointDeviceName"
<el-select
v-model="form.alarmLevel"
placeholder="请选择告警级别"
clearable
placeholder="请输入告警级别"
></el-input>
>
<el-option
v-for="(val, key) in alarmLeval"
:key="key"
:label="val"
:value="key"
>
</el-option>
</el-select>
</el-form-item>
<el-form-item label="告警状态">
<el-input
v-model="form.pointDeviceName"
<el-select
v-model="form.confirmStatus"
placeholder="请选择告警类型"
clearable
placeholder="请输入告警状态"
></el-input>
>
<el-option
v-for="(val, key) in confirmStatus"
:key="key"
:label="val"
:value="key"
>
</el-option>
</el-select>
</el-form-item>
<el-form-item label="告警产生时间">
<el-date-picker
......@@ -81,98 +105,336 @@
<el-button type="primary" @click="reset">重置</el-button>
</el-form-item>
</el-form>
<div class="both">
<div class="card">
<div class="nav-title">告警类型分布统计</div>
<div id="print">
<div class="both">
<div class="card">
<div class="nav-title">告警状态分布统计</div>
<div>
<div id="chart1" style="width: 600px; height: 300px"></div>
</div>
</div>
<div class="card">
<div class="nav-title">告警级别分布</div>
<div>
<div id="chart2" style="width: 600px; height: 300px"></div>
</div>
</div>
</div>
<div class="card">
<div class="nav-title">告警级别分布</div>
<div class="nav-title">告警数量统计</div>
<div>
<div id="chart3" style="width: 100%; height: 300px"></div>
</div>
</div>
</div>
<div class="card">
<div class="nav-title">告警数量统计</div>
</div>
<div>
<!-- :cell-class-name="cellClassFn" -->
<el-table
:data="tableData"
style="width: 100%"
:header-cell-style="{ background: '#EAF1FE', color: '#666666' }"
>
<el-table-column type="index" label="序号" width="100" align="center" />
<el-table-column
prop="siteName"
label="告警对象编号"
width="180"
align="center"
/>
<el-table-column
prop="alarmTarget"
label="告警对象名称"
width="180"
align="center"
/>
<el-table-column
prop="siteName"
label="告警类型"
width="150"
align="center"
/>
<el-table-column
prop="siteName"
label="告警级别"
width="150"
align="center"
/>
<el-table-column prop="alarmInfo" label="告警状态" align="center">
<template slot-scope="scope">
<div
v-for="(item, index) in scope.row.alarmInfo"
:key="index"
:class="levelStyle[item.level]"
>
<span>距离:{{ item.distance }}</span
>&nbsp;&nbsp;
<span>驻波比:{{ item.value }}</span>
</div>
<div>漏缆百米损耗: {{ scope.row.lossValue }}</div>
</template>
</el-table-column>
<div>
<!-- :cell-class-name="cellClassFn" -->
<el-table
:data="tableData"
style="width: 100%"
:header-cell-style="{ background: '#EAF1FE', color: '#666666' }"
>
<el-table-column
type="index"
label="序号"
width="100"
align="center"
/>
<el-table-column
prop="siteName"
label="告警对象编号"
width="180"
align="center"
/>
<el-table-column
prop="alarmTarget"
label="告警对象名称"
width="180"
align="center"
/>
<el-table-column
prop="siteName"
label="告警类型"
width="150"
align="center"
/>
<el-table-column
prop="siteName"
label="告警级别"
width="150"
align="center"
/>
<el-table-column prop="alarmInfo" label="告警状态" align="center">
<template slot-scope="scope">
<div
v-for="(item, index) in scope.row.alarmInfo"
:key="index"
:class="levelStyle[item.level]"
>
<span>距离:{{ item.distance }}</span
>&nbsp;&nbsp;
<span>驻波比:{{ item.value }}</span>
</div>
<div>漏缆百米损耗: {{ scope.row.lossValue }}</div>
</template>
</el-table-column>
<el-table-column
prop="confirmTime"
label="告警产生时间"
width="180"
align="center"
/>
<el-table-column label="操作" align="center" width="100">
<template slot-scope="scope">
<el-button type="text" @click="confirmAlarm(scope.row)"
>详情</el-button
>
</template>
</el-table-column>
</el-table>
<el-table-column
prop="confirmTime"
label="告警产生时间"
width="180"
align="center"
/>
<el-table-column label="操作" align="center" width="100">
<template slot-scope="scope">
<el-button type="text" @click="confirmAlarm(scope.row)"
>详情</el-button
>
</template>
</el-table-column>
</el-table>
</div>
</div>
</div>
</template>
<script>
import * as echarts from "echarts";
import printToPdf from "./printToPdf.js";
import { alarmLeval, alarmType, confirmStatus } from "@/const";
import {
alarmConfirmStatusStatistics,
alarmLevelStatistics,
alarmLevelCountStatistics,
} from "../api";
export default {
data() {
return {
form: {},
dateRange: [],
value: "",
alarmLeval,
alarmType,
confirmStatus,
options: [],
myChart: {
chart1: null,
chart2: null,
chart3: null,
},
tableData: [],
isQuery: false,
};
},
mounted() {
this.handlealArmConfirmStatusStatistics();
this.handlealArmLevelStatistics();
this.handleAlarmLevelCountStatistics();
},
methods: {
async handlealArmConfirmStatusStatistics() {
let res = await alarmConfirmStatusStatistics(this.form);
if (this.myChart.chart1 != null) {
this.myChart.chart1.dispose();
}
let chartDom = document.getElementById("chart1");
this.myChart.chart1 = echarts.init(chartDom);
let option;
option = {
tooltip: {
trigger: "item",
},
legend: {
left: "right",
},
series: [
{
name: "Access From",
type: "pie",
radius: "50%",
data: [
{ value: 1048, name: "Search Engine" },
{ value: 735, name: "Direct" },
{ value: 580, name: "Email" },
{ value: 484, name: "Union Ads" },
{ value: 300, name: "Video Ads" },
],
emphasis: {
itemStyle: {
shadowBlur: 10,
shadowOffsetX: 0,
shadowColor: "rgba(0, 0, 0, 0.5)",
},
},
},
],
};
option && this.myChart.chart1.setOption(option);
},
async handlealArmLevelStatistics() {
let res = await alarmLevelStatistics(this.form);
if (this.myChart.chart2 != null) {
this.myChart.chart2.dispose();
}
let chartDom = document.getElementById("chart2");
this.myChart.chart2 = echarts.init(chartDom);
let option;
option = {
tooltip: {
trigger: "item",
},
legend: {
top: "5%",
left: "center",
},
series: [
{
name: "Access From",
type: "pie",
radius: ["40%", "70%"],
avoidLabelOverlap: false,
label: {
show: false,
position: "center",
},
emphasis: {
label: {
show: true,
fontSize: 40,
fontWeight: "bold",
},
},
labelLine: {
show: false,
},
data: [
{ value: 1048, name: "Search Engine" },
{ value: 735, name: "Direct" },
{ value: 580, name: "Email" },
{ value: 484, name: "Union Ads" },
{ value: 300, name: "Video Ads" },
],
},
],
};
option && this.myChart.chart2.setOption(option);
},
async handleAlarmLevelCountStatistics() {
let res = await alarmLevelCountStatistics(this.form);
if (this.myChart.chart3 != null) {
this.myChart.chart3.dispose();
}
let chartDom = document.getElementById("chart3");
this.myChart.chart3 = echarts.init(chartDom);
let option;
option = {
tooltip: {
trigger: "axis",
axisPointer: {
type: "cross",
crossStyle: {
color: "#999",
},
},
},
toolbox: {
feature: {
dataView: { show: true, readOnly: false },
magicType: { show: true, type: ["line", "bar"] },
restore: { show: true },
saveAsImage: { show: true },
},
},
legend: {
data: ["Evaporation", "Precipitation", "Temperature"],
},
xAxis: [
{
type: "category",
data: ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"],
axisPointer: {
type: "shadow",
},
},
],
yAxis: [
{
type: "value",
name: "Precipitation",
min: 0,
max: 250,
interval: 50,
axisLabel: {
formatter: "{value} ml",
},
},
{
type: "value",
name: "Temperature",
min: 0,
max: 25,
interval: 5,
axisLabel: {
formatter: "{value} °C",
},
},
],
series: [
{
name: "Evaporation",
type: "bar",
tooltip: {
valueFormatter: function (value) {
return value + " ml";
},
},
data: [
2.0, 4.9, 7.0, 23.2, 25.6, 76.7, 135.6, 162.2, 32.6, 20.0, 6.4,
3.3,
],
},
{
name: "Precipitation",
type: "bar",
tooltip: {
valueFormatter: function (value) {
return value + " ml";
},
},
data: [
2.6, 5.9, 9.0, 26.4, 28.7, 70.7, 175.6, 182.2, 48.7, 18.8, 6.0,
2.3,
],
},
{
name: "Temperature",
type: "line",
yAxisIndex: 1,
tooltip: {
valueFormatter: function (value) {
return value + " °C";
},
},
data: [
2.0, 2.2, 3.3, 4.5, 6.3, 10.2, 20.3, 23.4, 23.0, 16.5, 12.0, 6.2,
],
},
],
};
option && this.myChart.chart3.setOption(option);
},
getInit() {},
reset() {},
toSearch() {},
reset() {
this.dateRange = [];
this.form = {};
},
toSearch() {
this.form.startUploadTime = this.dateRange[0];
this.form.endUploadTime = this.dateRange[1];
// this.$emit("search", this.form);
},
handlePrint() {
printToPdf("print");
},
},
};
</script>
......@@ -212,19 +474,22 @@ export default {
margin-bottom: 0;
}
}
.both {
display: flex;
justify-content: space-between;
gap: 16px;
.card {
flex: 1;
}
}
}
#print {
width: 100%;
}
.both {
display: flex;
justify-content: space-between;
gap: 16px;
.card {
margin-bottom: 16px;
padding: 16px;
border-radius: 8px;
border: 1px solid #d7d7d7;
flex: 1;
}
}
.card {
margin-bottom: 16px;
padding: 16px;
border-radius: 8px;
border: 1px solid #d7d7d7;
}
</style>
\ No newline at end of file
function printToPdf(targetId) {
// 确保DOM已完全加载
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', function () {
performPrint(targetId);
});
} else {
performPrint(targetId);
}
}
function performPrint(targetId) {
const targetElement = document.getElementById(targetId);
if (!targetElement) {
console.error('Element with ID'+ targetId +'not found.');
return;
}
// 克隆目标元素及其子元素
const clonedElement = targetElement.cloneNode(true);
clonedElement.style.width = '320mm'
// 在打印之前隐藏所有元素
function hideAllElements() {
document.getElementById('app').style.display = 'none'
// 将克隆的元素添加到body中
document.body.appendChild(clonedElement);
}
// 在打印结束后恢复所有元素
function showAllElements() {
document.body.removeChild(clonedElement);
document.getElementById('app').style.display = ''
}
// 添加事件监听器以在打印之前和之后执行操作
window.addEventListener('beforeprint', hideAllElements);
window.addEventListener('afterprint', showAllElements);
// 触发打印
window.print();
// 打印完成后移除事件监听器
window.removeEventListener('beforeprint', hideAllElements);
window.removeEventListener('afterprint', showAllElements);
}
// 调用函数
export default printToPdf
\ No newline at end of file
import request from '@/utils/request'
const path = {
treeBaseInfo: '/home/treeBaseInfo',
railWayOpen: '/railWay/updateRailWay',
siteOpen: '/site/updateSite',
fsuOpen: '/fsu/updateFsu',
monitorEquipOpen: '/monitorEquip/updateMonitorEquip',
leakyCableOpen: '/leakyCable/updateLeakyCable',
updateFeeder: '/antennaFeeder/updateFeeder',
treeBaseInfo: '/api/home/treeBaseInfo',
railWayOpen: '/api/railWay/updateRailWay',
siteOpen: '/api/site/updateSite',
fsuOpen: '/api/fsu/updateFsu',
monitorEquipOpen: '/api/monitorEquip/updateMonitorEquip',
leakyCableOpen: '/api/leakyCable/updateLeakyCable',
updateFeeder: '/api/antennaFeeder/updateFeeder',
getYear: '/sysStandingWaveRatio/getYear',
getMonth: '/sysStandingWaveRatio/getMonth',
getYear: '/api/sysStandingWaveRatio/getYear',
getMonth: '/api/sysStandingWaveRatio/getMonth',
}
export function treeBaseInfo() {
......
import request from '@/utils/request'
const path = {
MonitorStatusList: 'sysHistoryMonitorStatus/selectPage',
MonitorStatusDelete: 'sysHistoryMonitorStatus/batchDeleteHistoryMonitorStatus',
pictorialStatement: 'sysHistoryMonitorStatus/pictorialStatement',
MonitorStatusList: 'api/sysHistoryMonitorStatus/selectPage',
MonitorStatusDelete: 'api/sysHistoryMonitorStatus/batchDeleteHistoryMonitorStatus',
pictorialStatement: 'api/sysHistoryMonitorStatus/pictorialStatement',
MonitorMaintainList: 'sysHistoryMonitorMaintain/selectPage',
MonitorMaintainDelete: 'sysHistoryMonitorMaintain/batchDeleteHistoryMonitorMaintain',
MonitorMaintainList: 'api/sysHistoryMonitorMaintain/selectPage',
MonitorMaintainDelete: 'api/sysHistoryMonitorMaintain/batchDeleteHistoryMonitorMaintain',
ConnectStatusList: 'sysHistoryConnectStatus/selectPage',
ConnectStatusDelete: 'sysHistoryConnectStatus/batchDeleteHistoryConnectStatus',
ConnectStatusDeleteAll: 'sysHistoryConnectStatus/deleteAll',
ConnectStatusList: 'api/sysHistoryConnectStatus/selectPage',
ConnectStatusDelete: 'api/sysHistoryConnectStatus/batchDeleteHistoryConnectStatus',
ConnectStatusDeleteAll: 'api/sysHistoryConnectStatus/deleteAll',
ConnectMaintainList: 'sysHistoryConnectMaintain/selectPage',
ConnectMaintainDelete: 'sysHistoryConnectMaintain/batchDeleteHistoryConnectMaintain',
ConnectMaintainDeleteAll: 'sysHistoryConnectMaintain/deleteAll',
ConnectMaintainList: 'api/sysHistoryConnectMaintain/selectPage',
ConnectMaintainDelete: 'api/sysHistoryConnectMaintain/batchDeleteHistoryConnectMaintain',
ConnectMaintainDeleteAll: 'api/sysHistoryConnectMaintain/deleteAll',
commonQuery: 'sysHistoryCommon/getSiteAndAlarmAll',
commonQuery: 'api/sysHistoryCommon/getSiteAndAlarmAll',
}
export function MonitorStatusList() {
......
<template>
<div class="">
<div class="card">
<div class="card-body">
<div class="icon"></div>
<div>
<div class="title"></div>
<div class="num"></div>
</div>
</div>
</div>
</div>
</template>
<script>
import { chartInfo } from "@/api/job.js";
export default {
data() {
return {
topList: [
{
title: "设备总数",
icon: "el-icon-s-home",
num: 3,
color: "#00C0EF",
msg: "调度中心运行的任务数量",
},
{
title: "调度次数",
icon: "el-icon-s-home",
num: 0,
color: "#F39C12",
msg: "调度中心触发的调度次数",
},
{
title: "执行器数量",
icon: "el-icon-s-home",
num: 0,
color: "#00A65A",
msg: "调度中心在线的执行器机器数量",
},
],
};
},
mounted() {
this.handleChartInfo();
},
methods: {
async handleChartInfo(){
console.log('---');
let res = await chartInfo({});
// console.log(res);
}
},
};
</script>
<style lang="scss" scoped>
</style>
\ No newline at end of file
import request from '@/utils/request';
const path = {
cableTypeEnum: 'equipParam/selectItem',
saveParam: 'equipParam/saveParam',
selectEquipByType: 'equipParam/selectEquipByType',
cableTypeEnum: 'api/equipParam/selectItem',
saveParam: 'api/equipParam/saveParam',
selectEquipByType: 'api/equipParam/selectEquipByType',
}
export function cableTypeEnum() {
......
import request from '@/utils/request'
const path = {
CableStatusList: 'sysLeakyCableStatus/selectPage',
CableStatusList: 'api/sysLeakyCableStatus/selectPage',
DeviceStatusList: 'sysDeviceStatus/selectPage',
DeviceStatusList: 'api/sysDeviceStatus/selectPage',
}
export function CableStatusList() {
......
<template>
<div>
<el-table
ref="multipleTable"
class="statistics-table"
:data="tableData"
tooltip-effect="dark"
style="width: 100%; height: auto"
:row-class-name="tableRowClassName"
:row-style="{ height: '50px' }"
:header-cell-style="{
background: '#eaf1fe',
color: '#000',
fontWeight: 700,
height: '50px',
}"
>
<el-table-column type="index" label="序号" width="55" align="center" />
<el-table-column prop="equipCode" label="设备编号" align="center" />
<el-table-column
prop="equipName"
label="设备名称"
show-overflow-tooltip
align="center"
/>
<el-table-column prop="ip" label="设备IP" align="center" />
<el-table-column prop="railWayName" label="设备型号" align="center" />
<el-table-column prop="siteName" label="设备位置" align="center" />
<el-table-column
prop="action"
label="操作"
show-overflow-tooltip
align="center"
>
<template slot-scope="{ row }">
<el-link type="primary" :underline="false" @click="handleView(row)"
>添加</el-link
>
</template>
</el-table-column>
</el-table>
</div>
</template>
<script>
export default {
data() {
return {
tableData: [
{
equipCode: "123456",
equipName: "123456",
ip: "123456",
railWayName: "123456",
siteName: "123456",
},
{
equipCode: "123456",
equipName: "123456",
ip: "123456",
railWayName: "123456",
},
],
};
},
methods: {
tableRowClassName({ row, rowIndex }) {
return rowIndex % 2 === 0 ? "" : "single-row";
},
},
};
</script>
<style lang="scss" scoped>
.statistics-table {
.single-row {
background: #f1f6ff;
}
td {
padding: 5px !important;
}
}
</style>
\ No newline at end of file
import request from '@/utils/request';
const path = {
railWaylist: 'railWay/selectPage',
railWaydetail: 'railWay/detail',
railWaysave: 'railWay/save',
railWaybatchDelete: 'railWay/batchDelete',
railWayselectList: 'railWay/selectList',
updateRailWay: 'railWay/updateRailWay',
railWaylist: 'api/railWay/selectPage',
railWaydetail: 'api/railWay/detail',
railWaysave: 'api/railWay/save',
railWaybatchDelete: 'api/railWay/batchDelete',
railWayselectList: 'api/railWay/selectList',
updateRailWay: 'api/railWay/updateRailWay',
sitelist: 'site/selectPage',
sitedetail: 'site/detail',
sitesave: 'site/save',
sitebatchDelete: 'site/batchDelete',
siteselectList: 'site/selectList',
selectForSite:'site/selectForSite',//铁路查站点
updateSiteConf:'site/updateSiteConf',
sitelist: 'api/site/selectPage',
sitedetail: 'api/site/detail',
sitesave: 'api/site/save',
sitebatchDelete: 'api/site/batchDelete',
siteselectList: 'api/site/selectList',
selectForSite:'api/site/selectForSite',//铁路查站点
updateSiteConf:'api/site/updateSiteConf',
fsuList: 'fsu/selectPage',
fsudetail: 'fsu/detail',
fsusave: 'fsu/save',
fsubatchDelete: 'fsu/batchDeleteFsu',
fsuselectList: 'fsu/selectList',
selectForFsu: 'fsu/selectForFsu',
updateFsuConf: 'fsu/updateFsuConf',
fsuList: 'api/fsu/selectPage',
fsudetail: 'api/fsu/detail',
fsusave: 'api/fsu/save',
fsubatchDelete: 'api/fsu/batchDeleteFsu',
fsuselectList: 'api/fsu/selectList',
selectForFsu: 'api/fsu/selectForFsu',
updateFsuConf: 'api/fsu/updateFsuConf',
selectFsuItem:'dict/selectFsuItem',//fsu数据字典
selectFsuItem:'api/dict/selectFsuItem',//fsu数据字典
monitorEquipList: 'monitorEquip/selectPage',
monitorEquipdetail: 'monitorEquip/detail',
monitorEquipsave: 'monitorEquip/save',
monitorEquipbatchDelete: 'monitorEquip/batchDeleteEquip',
monitorEquipselectList: 'monitorEquip/selectList',
selectForEquip: 'monitorEquip/selectForEquip',
selectMonitorItem:'dict/selectMonitorItem',//监测设备字典
updateMonitorEquipConf:'monitorEquip/updateMonitorEquipConf',
monitorEquipList: 'api/monitorEquip/selectPage',
monitorEquipdetail: 'api/monitorEquip/detail',
monitorEquipsave: 'api/monitorEquip/save',
monitorEquipbatchDelete: 'api/monitorEquip/batchDeleteEquip',
monitorEquipselectList: 'api/monitorEquip/selectList',
selectForEquip: 'api/monitorEquip/selectForEquip',
selectMonitorItem:'api/dict/selectMonitorItem',//监测设备字典
updateMonitorEquipConf:'api/monitorEquip/updateMonitorEquipConf',
leakyCableList: 'leakyCable/selectPage',
leakyCabledetail: 'leakyCable/detail',
leakyCablesave: 'leakyCable/save',
leakyCablebatchDelete: 'leakyCable/batchDeleteEquip',
leakyCableselectList: 'leakyCable/selectList',
selectForCable: 'leakyCable/selectForCable',
updateLeakyCableConf: 'leakyCable/updateLeakyCableConf',
leakyCableList: 'api/leakyCable/selectPage',
leakyCabledetail: 'api/leakyCable/detail',
leakyCablesave: 'api/leakyCable/save',
leakyCablebatchDelete: 'api/leakyCable/batchDeleteEquip',
leakyCableselectList: 'api/leakyCable/selectList',
selectForCable: 'api/leakyCable/selectForCable',
updateLeakyCableConf: 'api/leakyCable/updateLeakyCableConf',
antennaFeederSave: 'antennaFeeder/save',
antennaFeederDelete: 'antennaFeeder/batchDeleteEquip',
antennaFeederDetail: 'antennaFeeder/detail',
antennaFeederList: 'antennaFeeder/selectFeederPage',
updateFeederConf: 'antennaFeeder/updateFeederConf',
antennaFeederSave: 'api/antennaFeeder/save',
antennaFeederDelete: 'api/antennaFeeder/batchDeleteEquip',
antennaFeederDetail: 'api/antennaFeeder/detail',
antennaFeederList: 'api/antennaFeeder/selectFeederPage',
updateFeederConf: 'api/antennaFeeder/updateFeederConf',
}
// 铁路线
export function railWaylist() {
......
......@@ -85,6 +85,20 @@
></el-option>
</el-select>
</el-form-item>
<el-form-item label="监测设备厂家:">
<el-select
placeholder="请选择监测设备厂家"
v-model="monitorForm.fsuId"
clearable
>
<el-option
v-for="item in fsuSelect2"
:key="item.id"
:label="item.equipName"
:value="item.id"
></el-option>
</el-select>
</el-form-item>
<el-form-item>
<el-button type="success" @click="searchQuery()">查询</el-button>
<el-button type="primary" @click="reset">重置</el-button>
......@@ -159,11 +173,21 @@
width="40%"
:close-on-click-modal="false"
>
<autoAdd />
</el-dialog>
<el-dialog
title="监测设备参数设置"
:visible.sync="openSetting"
width="40%"
:close-on-click-modal="false"
>
<autoAdd />
</el-dialog>
</div>
</template>
<script>
import monitor from "../../add/comp/monitorEquip.vue";
import autoAdd from "../../add/comp/autoAdd.vue";
import {
monitorEquiplist,
monitorEquipbatchDelete,
......@@ -175,7 +199,7 @@ import { successAlert, warningAlert } from "@/utils/alert";
import download from "@/utils/download";
import { exportMonitorEquip } from "@/api/export";
export default {
components: { monitor },
components: { monitor, autoAdd },
data() {
return {
railWaySelect: [],
......@@ -196,6 +220,7 @@ export default {
visible: false,
curInfo: {},
open: false,
openSetting: false,
};
},
created() {
......@@ -212,6 +237,9 @@ export default {
this.getAllWay();
},
methods: {
handleSetting() {
this.openSetting = true;
},
handleAutomatic() {
this.open = true;
},
......
......@@ -4,7 +4,7 @@
<el-tab-pane label="同步设备">
<div class="top-box">
<div class="nav-title">同步设备</div>
<el-button type="primary" @click="handleClick">开始同步</el-button>
<el-button type="primary" @click="handleTimeSync">开始同步</el-button>
</div>
<div class="table">
<el-table
......@@ -14,51 +14,28 @@
:header-cell-style="{ background: '#f5f7fa', color: '#909399' }"
>
<el-table-column
prop="name"
label="设备IP"
prop="ip"
label="设备ip"
width=""
></el-table-column>
<el-table-column
prop="name"
prop="equipmentCode"
label="设备编号"
width=""
></el-table-column>
<el-table-column
prop="name"
label="站点名称"
width=""
></el-table-column>
</el-table>
</div>
</el-tab-pane>
<el-tab-pane label="同步记录">
<div class="top-box">
<div class="nav-title">时间同步记录</div>
<!-- <el-button type="primary" @click="handleClick">开始同步</el-button> -->
</div>
<div class="table">
<el-table
:data="tableData"
style="width: 100%"
border
:header-cell-style="{ background: '#f5f7fa', color: '#909399' }"
>
<el-table-column
prop="name"
label="同步设备"
width=""
></el-table-column>
<el-table-column
prop="name"
label="状态"
width=""
></el-table-column>
<el-table-column
prop="name"
prop="lastModifiedTime"
label="同步时间"
width=""
></el-table-column>
</el-table>
<Pagination
:limit="params.size"
:page="params.current"
:total="total"
class="pagination"
@pagination="handlePageChange"
/>
</div>
</el-tab-pane>
</el-tabs>
......@@ -66,15 +43,39 @@
</template>
<script>
import { selectFeederPage } from "@/api/sync";
import { timeSync } from "@/api/udp";
export default {
data() {
return {
tableData: [],
params: {
current: 1,
size: 10,
},
total: 0,
};
},
mounted() {
this.handleSelectFeederPage();
},
methods: {
handleClick() {
handlePageChange(pageData) {
this.params.size = pageData.size;
this.params.current = pageData.page;
this.handleSelectFeederPage();
},
async handleTimeSync() {
let res = await timeSync({});
console.log(res);
this.$message.success("开始备份");
this.handleSelectFeederPage();
},
async handleSelectFeederPage() {
let res = await selectFeederPage({});
this.tableData = res.records;
this.total = res.total;
},
},
};
......
import request from '@/utils/request'
const path = {
list: 'user/selectUserPage',
create: 'user/saveUser',
updatePwd: 'user/updatePwd',
updateInfo: 'user/updateUserBaseInfo',
list: 'api/user/selectUserPage',
create: 'api/user/saveUser',
updatePwd: 'api/user/updatePwd',
updateInfo: 'api/user/updateUserBaseInfo',
logList: 'sysLog/selectLogPage',
logList: 'api/sysLog/selectLogPage',
}
export function list() {
......
......@@ -12,7 +12,27 @@ const port = process.env.port || process.env.npm_config_port || 8886 // dev port
const rewriteDefaultConfig = {
changeOrigin: true,
target: 'http://101.126.159.207:8886',
// target: 'http://192.168.0.127:8886',
// ws: true,
headers: {
referer: 'laddercloud.cn'
},
}
const rewriteDeviceConfig = {
changeOrigin: true,
target: 'http://101.126.159.207:8087',
// target: 'http://192.168.0.127:8886',
// ws: true,
headers: {
referer: 'laddercloud.cn'
},
}
const rewriteAdminConfig = {
changeOrigin: true,
target: 'http://101.126.159.207:8887',
// target: 'http://192.168.0.127:8886',
// ws: true,
headers: {
......@@ -35,7 +55,9 @@ module.exports = {
errors: true
},
proxy: {
'/api': rewriteDefaultConfig
'/api': rewriteDefaultConfig,
'/device': rewriteDeviceConfig,
'/xxl-job-admin': rewriteAdminConfig
},
},
configureWebpack: {
......@@ -87,7 +109,7 @@ module.exports = {
.plugin('ScriptExtHtmlWebpackPlugin')
.after('html')
.use('script-ext-html-webpack-plugin', [{
// `runtime` must same as runtimeChunk name. default is `runtime`
// `runtime` must same as runtimeChunk name. default is `runtime`
inline: /runtime\..*\.js$/
}])
.end()
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment