Commit b1d21bb3 authored by dupengyu's avatar dupengyu

补充缺失页面 补充devserver及

parent 3e2f1a6d
...@@ -3,7 +3,7 @@ import request from '@/utils/request' ...@@ -3,7 +3,7 @@ import request from '@/utils/request'
// 查询分页 // 查询分页
export function selectPage(params) { export function selectPage(params) {
return request({ return request({
url: '/backuprestore/selectPage', url: '/api/backuprestore/selectPage',
method: 'post', method: 'post',
params params
}) })
...@@ -12,7 +12,7 @@ export function selectPage(params) { ...@@ -12,7 +12,7 @@ export function selectPage(params) {
// 数据备份 // 数据备份
export function doBackup(data) { export function doBackup(data) {
return request({ return request({
url: '/backuprestore/doBackup', url: '/api/backuprestore/doBackup',
method: 'post', method: 'post',
data data
}) })
...@@ -21,7 +21,7 @@ export function doBackup(data) { ...@@ -21,7 +21,7 @@ export function doBackup(data) {
// 数据恢复 // 数据恢复
export function restore(params) { export function restore(params) {
return request({ return request({
url: '/backuprestore/restore', url: '/api/backuprestore/restore',
method: 'post', method: 'post',
params params
}) })
......
import request from '@/utils/request' import request from '@/utils/request'
const path = { const path = {
deptList: '/dict/selectDeptItem', deptList: '/api/dict/selectDeptItem',
fsuList: '/dict/selectFsuItem', fsuList: '/api/dict/selectFsuItem',
OperateEnum: '/dict/selectOperationItem', OperateEnum: '/api/dict/selectOperationItem',
LeakyCablelEnum: '/dict/selectLeakyCablelItem', LeakyCablelEnum: '/api/dict/selectLeakyCablelItem',
MonitorEnum: '/dict/selectMonitorItem', MonitorEnum: '/api/dict/selectMonitorItem',
selectDictType: '/dict/selectDictType', selectDictType: '/api/dict/selectDictType',
getTree: '/home/getTree', getTree: '/api/home/getTree',
} }
export function deptList() { export function deptList() {
......
...@@ -2,29 +2,29 @@ import request from '@/utils/request' ...@@ -2,29 +2,29 @@ import request from '@/utils/request'
const path = { const path = {
// 告警管理 // 告警管理
exportLeakyCable: 'sysMonitorAlarm/export', exportLeakyCable: 'api/sysMonitorAlarm/export',
exportConnet: 'sysConnectAlarm/export', exportConnet: 'api/sysConnectAlarm/export',
// 配置管理 // 配置管理
exportRailWay: "railWay/export", exportRailWay: "api/railWay/export",
exportSite: "site/export", exportSite: "api/site/export",
exportFsu: "fsu/export", exportFsu: "api/fsu/export",
exportMonitorEquip: "monitorEquip/export", exportMonitorEquip: "api/monitorEquip/export",
exportLeaky: "leakyCable/export", exportLeaky: "api/leakyCable/export",
exportFeeder: "antennaFeeder/export", exportFeeder: "api/antennaFeeder/export",
// 实时状态 // 实时状态
exportLeakyCableTime: 'sysLeakyCableStatus/export', exportLeakyCableTime: 'api/sysLeakyCableStatus/export',
exportConnetTime: 'sysDeviceStatus/export', exportConnetTime: 'api/sysDeviceStatus/export',
// 历史数据 // 历史数据
exportLeakyStatusHistory: 'sysHistoryMonitorStatus/export', exportLeakyStatusHistory: 'api/sysHistoryMonitorStatus/export',
exportLeakyMaintainHistory: 'sysHistoryMonitorMaintain/export', exportLeakyMaintainHistory: 'api/sysHistoryMonitorMaintain/export',
exportConnectStatusHistory: 'sysHistoryConnectStatus/export', exportConnectStatusHistory: 'api/sysHistoryConnectStatus/export',
exportConnectMaintainHistory: 'sysHistoryConnectMaintain/export', exportConnectMaintainHistory: 'api/sysHistoryConnectMaintain/export',
// 用户管理 // 用户管理
exportLog: 'sysLog/exportLog', exportLog: 'api/sysLog/exportLog',
} }
const blobConf = { responseType: 'blob' } 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' ...@@ -2,7 +2,7 @@ import request from '@/utils/request'
export function getList(params) { export function getList(params) {
return request({ return request({
url: '/vue-admin-template/table/list', url: '/api/vue-admin-template/table/list',
method: 'get', method: 'get',
params 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' ...@@ -2,19 +2,19 @@ import request from '@/utils/request'
export function login(data) { export function login(data) {
return request({ return request({
url: '/user/login', url: '/api/user/login',
method: 'post', method: 'post',
data data
}) })
} }
export function getInfo() { export function getInfo() {
return request.post('/user/getUser', ...arguments) return request.post('/api/user/getUser', ...arguments)
} }
export function logout() { export function logout() {
return request({ return request({
url: '/user/logout', url: '/api/user/logout',
method: 'post' method: 'post'
}) })
} }
export const alarmLeval = { export const alarmLeval = {
1: '紧急', 0: '一般',
2: '重要', 1: '重要',
3: '一般' 2: '紧急'
} }
export const alarmType = { export const alarmType = {
0: '漏缆', 0: '漏缆',
1: '天馈线', 1: '天馈线',
} }
export const confirmStatus = {
0: '未确认',
1: '已确认',
2: '已消除'
}
export const ConnectStatusEnum = { export const ConnectStatusEnum = {
0: '连接正常', 0: '连接正常',
1: '连接异常' 1: '连接异常'
......
...@@ -158,6 +158,39 @@ export const constantRoutes = [ ...@@ -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', path: '/history',
component: Layout, component: Layout,
......
...@@ -7,7 +7,7 @@ import EventBus from '@/utils/bus' ...@@ -7,7 +7,7 @@ import EventBus from '@/utils/bus'
// create an axios instance // create an axios instance
const service = axios.create({ 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 // withCredentials: true, // send cookies when cross-domain requests
timeout: 5000 // request timeout timeout: 5000 // request timeout
}) })
...@@ -33,6 +33,7 @@ function endLoading(el) { ...@@ -33,6 +33,7 @@ function endLoading(el) {
// request interceptor // request interceptor
service.interceptors.request.use( service.interceptors.request.use(
config => { config => {
console.log(config)
// do something before request is sent // do something before request is sent
startLoading(config.el) startLoading(config.el)
// config.data = json.dumps(config.data) // config.data = json.dumps(config.data)
......
import request from '@/utils/request'; import request from '@/utils/request';
const path = { const path = {
cableTimeList: 'sysMonitorAlarm/selectPage', cableTimeList: 'api/sysMonitorAlarm/selectPage',
cableConfirm: 'sysMonitorAlarm/confirm', cableConfirm: 'api/sysMonitorAlarm/confirm',
cableCancel: 'sysMonitorAlarm/cancel', cableCancel: 'api/sysMonitorAlarm/cancel',
eliminate: 'api/sysMonitorAlarm/eliminate',
deviceList: 'sysConnectAlarm/selectPage', deviceList: 'api/sysConnectAlarm/selectPage',
deviceConfirm: 'sysConnectAlarm/confirm', deviceConfirm: 'api/sysConnectAlarm/confirm',
deviceCancel: 'sysConnectAlarm/cancel' deviceCancel: 'api/sysConnectAlarm/cancel',
alarmConfirmStatusStatistics: 'api/sysMonitorAlarmStatistics/alarmConfirmStatusStatistics',
alarmLevelStatistics: '/api/sysMonitorAlarmStatistics/alarmLevelStatistics',
alarmLevelCountStatistics: '/api/sysMonitorAlarmStatistics/alarmLevelCountStatistics'
} }
export function cableTimeList() { export function cableTimeList() {
...@@ -19,7 +23,9 @@ export function cableCancel() { ...@@ -19,7 +23,9 @@ export function cableCancel() {
export function cableConfirm() { export function cableConfirm() {
return request.post(path.cableConfirm, ...arguments); return request.post(path.cableConfirm, ...arguments);
} }
export function eliminate() {
return request.post(path.eliminate, ...arguments);
}
export function deviceList() { export function deviceList() {
return request.post(path.deviceList, ...arguments); return request.post(path.deviceList, ...arguments);
} }
...@@ -29,3 +35,14 @@ export function deviceConfirm() { ...@@ -29,3 +35,14 @@ export function deviceConfirm() {
export function deviceCancel() { export function deviceCancel() {
return request.post(path.deviceCancel, ...arguments); 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 @@ ...@@ -51,7 +51,7 @@
v-for="(val, key) in alarmType" v-for="(val, key) in alarmType"
:key="key" :key="key"
:label="val" :label="val"
:value="val" :value="key"
> >
</el-option> </el-option>
</el-select> </el-select>
...@@ -77,7 +77,7 @@ ...@@ -77,7 +77,7 @@
<script> <script>
import { commonQuery } from "@/views/history/api"; import { commonQuery } from "@/views/history/api";
import { alarmLeval,alarmType } from "@/const"; import { alarmLeval, alarmType } from "@/const";
export default { export default {
name: "search", name: "search",
...@@ -87,7 +87,7 @@ export default { ...@@ -87,7 +87,7 @@ export default {
form: formInit(), form: formInit(),
alarmLeval, alarmLeval,
alarmType, alarmType,
dateRange:[] dateRange: [],
}; };
}, },
mounted() { mounted() {
...@@ -95,10 +95,13 @@ export default { ...@@ -95,10 +95,13 @@ export default {
}, },
methods: { methods: {
toSearch() { toSearch() {
this.form.startUploadTime = this.dateRange[0];
this.form.endUploadTime = this.dateRange[1];
this.$emit("search", this.form); this.$emit("search", this.form);
}, },
reset() { reset() {
this.form = formInit(); this.form = formInit();
this.dateRange = []
this.$emit("search"); this.$emit("search");
}, },
getInit() { getInit() {
......
...@@ -125,7 +125,7 @@ ...@@ -125,7 +125,7 @@
<el-button <el-button
v-if="scope.row.confirmStatus == 1" v-if="scope.row.confirmStatus == 1"
type="text" type="text"
@click="confirmAlarm(scope.row)" @click="eliminate(scope.row)"
>已消除</el-button >已消除</el-button
> >
</template> </template>
...@@ -201,7 +201,7 @@ ...@@ -201,7 +201,7 @@
</template> </template>
<script> <script>
import { cableTimeList, cableConfirm, cableCancel } from "../api"; import { cableTimeList, cableConfirm, cableCancel, eliminate } from "../api";
import { exportLeakyCable } from "@/api/export"; import { exportLeakyCable } from "@/api/export";
import search from "./components/search.vue"; import search from "./components/search.vue";
import download from "@/utils/download"; import download from "@/utils/download";
...@@ -247,6 +247,26 @@ export default { ...@@ -247,6 +247,26 @@ export default {
this.searchOption = this.$route.query; this.searchOption = this.$route.query;
}, },
methods: { 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 }) { cellClassFn({ row, column, rowIndex, columnIndex }) {
if ( if (
......
...@@ -15,7 +15,7 @@ ...@@ -15,7 +15,7 @@
placeholder="请输入网元设备" placeholder="请输入网元设备"
></el-input> ></el-input>
</el-form-item> </el-form-item>
<el-form-item label="监测设备厂家" label-width="120px"> <!-- <el-form-item label="监测设备厂家" label-width="120px">
<el-select v-model="value" placeholder="请选择"> <el-select v-model="value" placeholder="请选择">
<el-option <el-option
v-for="item in options" v-for="item in options"
...@@ -25,7 +25,7 @@ ...@@ -25,7 +25,7 @@
> >
</el-option> </el-option>
</el-select> </el-select>
</el-form-item> </el-form-item> -->
<el-form-item label="上传时间"> <el-form-item label="上传时间">
<el-date-picker <el-date-picker
v-model="dateRange" v-model="dateRange"
......
...@@ -25,7 +25,7 @@ ...@@ -25,7 +25,7 @@
class="ml10" class="ml10"
type="primary" type="primary"
icon="el-icon-refresh-right" icon="el-icon-refresh-right"
@click="getInit" @click="handlePrint"
>打印</el-button >打印</el-button
> >
</div> </div>
...@@ -39,31 +39,55 @@ ...@@ -39,31 +39,55 @@
> >
<el-form-item label="告警对象"> <el-form-item label="告警对象">
<el-input <el-input
v-model="form.pointDeviceName" v-model="form.alarmTarget"
clearable clearable
placeholder="请输入告警对象" placeholder="请输入告警对象"
></el-input> ></el-input>
</el-form-item> </el-form-item>
<el-form-item label="告警类型"> <el-form-item label="告警类型">
<el-input <el-select
v-model="form.pointDeviceName" v-model="form.alarmType"
placeholder="请选择告警类型"
clearable 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>
<el-form-item label="告警级别"> <el-form-item label="告警级别">
<el-input <el-select
v-model="form.pointDeviceName" v-model="form.alarmLevel"
placeholder="请选择告警级别"
clearable 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>
<el-form-item label="告警状态"> <el-form-item label="告警状态">
<el-input <el-select
v-model="form.pointDeviceName" v-model="form.confirmStatus"
placeholder="请选择告警类型"
clearable 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>
<el-form-item label="告警产生时间"> <el-form-item label="告警产生时间">
<el-date-picker <el-date-picker
...@@ -81,98 +105,336 @@ ...@@ -81,98 +105,336 @@
<el-button type="primary" @click="reset">重置</el-button> <el-button type="primary" @click="reset">重置</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
<div class="both"> <div id="print">
<div class="card"> <div class="both">
<div class="nav-title">告警类型分布统计</div> <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>
<div class="card"> <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> <div>
<div class="card"> <!-- :cell-class-name="cellClassFn" -->
<div class="nav-title">告警数量统计</div> <el-table
</div> :data="tableData"
<div> style="width: 100%"
<!-- :cell-class-name="cellClassFn" --> :header-cell-style="{ background: '#EAF1FE', color: '#666666' }"
<el-table >
:data="tableData" <el-table-column
style="width: 100%" type="index"
:header-cell-style="{ background: '#EAF1FE', color: '#666666' }" label="序号"
> width="100"
<el-table-column type="index" label="序号" width="100" align="center" /> align="center"
<el-table-column />
prop="siteName" <el-table-column
label="告警对象编号" prop="siteName"
width="180" label="告警对象编号"
align="center" width="180"
/> align="center"
<el-table-column />
prop="alarmTarget" <el-table-column
label="告警对象名称" prop="alarmTarget"
width="180" label="告警对象名称"
align="center" width="180"
/> align="center"
<el-table-column />
prop="siteName" <el-table-column
label="告警类型" prop="siteName"
width="150" label="告警类型"
align="center" width="150"
/> align="center"
<el-table-column />
prop="siteName" <el-table-column
label="告警级别" prop="siteName"
width="150" label="告警级别"
align="center" width="150"
/> align="center"
<el-table-column prop="alarmInfo" label="告警状态" align="center"> />
<template slot-scope="scope"> <el-table-column prop="alarmInfo" label="告警状态" align="center">
<div <template slot-scope="scope">
v-for="(item, index) in scope.row.alarmInfo" <div
:key="index" v-for="(item, index) in scope.row.alarmInfo"
:class="levelStyle[item.level]" :key="index"
> :class="levelStyle[item.level]"
<span>距离:{{ item.distance }}</span >
>&nbsp;&nbsp; <span>距离:{{ item.distance }}</span
<span>驻波比:{{ item.value }}</span> >&nbsp;&nbsp;
</div> <span>驻波比:{{ item.value }}</span>
<div>漏缆百米损耗: {{ scope.row.lossValue }}</div> </div>
</template> <div>漏缆百米损耗: {{ scope.row.lossValue }}</div>
</el-table-column> </template>
</el-table-column>
<el-table-column <el-table-column
prop="confirmTime" prop="confirmTime"
label="告警产生时间" label="告警产生时间"
width="180" width="180"
align="center" align="center"
/> />
<el-table-column label="操作" align="center" width="100"> <el-table-column label="操作" align="center" width="100">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button type="text" @click="confirmAlarm(scope.row)" <el-button type="text" @click="confirmAlarm(scope.row)"
>详情</el-button >详情</el-button
> >
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
</div>
</div> </div>
</div> </div>
</template> </template>
<script> <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 { export default {
data() { data() {
return { return {
form: {}, form: {},
dateRange: [], dateRange: [],
value: "", value: "",
alarmLeval,
alarmType,
confirmStatus,
options: [], options: [],
myChart: {
chart1: null,
chart2: null,
chart3: null,
},
tableData: [], tableData: [],
isQuery: false, isQuery: false,
}; };
}, },
mounted() {
this.handlealArmConfirmStatusStatistics();
this.handlealArmLevelStatistics();
this.handleAlarmLevelCountStatistics();
},
methods: { 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() {}, getInit() {},
reset() {}, reset() {
toSearch() {}, 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> </script>
...@@ -212,19 +474,22 @@ export default { ...@@ -212,19 +474,22 @@ export default {
margin-bottom: 0; margin-bottom: 0;
} }
} }
.both { }
display: flex; #print {
justify-content: space-between; width: 100%;
gap: 16px; }
.card { .both {
flex: 1; display: flex;
} justify-content: space-between;
} gap: 16px;
.card { .card {
margin-bottom: 16px; flex: 1;
padding: 16px;
border-radius: 8px;
border: 1px solid #d7d7d7;
} }
} }
.card {
margin-bottom: 16px;
padding: 16px;
border-radius: 8px;
border: 1px solid #d7d7d7;
}
</style> </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' import request from '@/utils/request'
const path = { const path = {
treeBaseInfo: '/home/treeBaseInfo', treeBaseInfo: '/api/home/treeBaseInfo',
railWayOpen: '/railWay/updateRailWay', railWayOpen: '/api/railWay/updateRailWay',
siteOpen: '/site/updateSite', siteOpen: '/api/site/updateSite',
fsuOpen: '/fsu/updateFsu', fsuOpen: '/api/fsu/updateFsu',
monitorEquipOpen: '/monitorEquip/updateMonitorEquip', monitorEquipOpen: '/api/monitorEquip/updateMonitorEquip',
leakyCableOpen: '/leakyCable/updateLeakyCable', leakyCableOpen: '/api/leakyCable/updateLeakyCable',
updateFeeder: '/antennaFeeder/updateFeeder', updateFeeder: '/api/antennaFeeder/updateFeeder',
getYear: '/sysStandingWaveRatio/getYear', getYear: '/api/sysStandingWaveRatio/getYear',
getMonth: '/sysStandingWaveRatio/getMonth', getMonth: '/api/sysStandingWaveRatio/getMonth',
} }
export function treeBaseInfo() { export function treeBaseInfo() {
......
import request from '@/utils/request' import request from '@/utils/request'
const path = { const path = {
MonitorStatusList: 'sysHistoryMonitorStatus/selectPage', MonitorStatusList: 'api/sysHistoryMonitorStatus/selectPage',
MonitorStatusDelete: 'sysHistoryMonitorStatus/batchDeleteHistoryMonitorStatus', MonitorStatusDelete: 'api/sysHistoryMonitorStatus/batchDeleteHistoryMonitorStatus',
pictorialStatement: 'sysHistoryMonitorStatus/pictorialStatement', pictorialStatement: 'api/sysHistoryMonitorStatus/pictorialStatement',
MonitorMaintainList: 'sysHistoryMonitorMaintain/selectPage', MonitorMaintainList: 'api/sysHistoryMonitorMaintain/selectPage',
MonitorMaintainDelete: 'sysHistoryMonitorMaintain/batchDeleteHistoryMonitorMaintain', MonitorMaintainDelete: 'api/sysHistoryMonitorMaintain/batchDeleteHistoryMonitorMaintain',
ConnectStatusList: 'sysHistoryConnectStatus/selectPage', ConnectStatusList: 'api/sysHistoryConnectStatus/selectPage',
ConnectStatusDelete: 'sysHistoryConnectStatus/batchDeleteHistoryConnectStatus', ConnectStatusDelete: 'api/sysHistoryConnectStatus/batchDeleteHistoryConnectStatus',
ConnectStatusDeleteAll: 'sysHistoryConnectStatus/deleteAll', ConnectStatusDeleteAll: 'api/sysHistoryConnectStatus/deleteAll',
ConnectMaintainList: 'sysHistoryConnectMaintain/selectPage', ConnectMaintainList: 'api/sysHistoryConnectMaintain/selectPage',
ConnectMaintainDelete: 'sysHistoryConnectMaintain/batchDeleteHistoryConnectMaintain', ConnectMaintainDelete: 'api/sysHistoryConnectMaintain/batchDeleteHistoryConnectMaintain',
ConnectMaintainDeleteAll: 'sysHistoryConnectMaintain/deleteAll', ConnectMaintainDeleteAll: 'api/sysHistoryConnectMaintain/deleteAll',
commonQuery: 'sysHistoryCommon/getSiteAndAlarmAll', commonQuery: 'api/sysHistoryCommon/getSiteAndAlarmAll',
} }
export function MonitorStatusList() { 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'; import request from '@/utils/request';
const path = { const path = {
cableTypeEnum: 'equipParam/selectItem', cableTypeEnum: 'api/equipParam/selectItem',
saveParam: 'equipParam/saveParam', saveParam: 'api/equipParam/saveParam',
selectEquipByType: 'equipParam/selectEquipByType', selectEquipByType: 'api/equipParam/selectEquipByType',
} }
export function cableTypeEnum() { export function cableTypeEnum() {
......
import request from '@/utils/request' import request from '@/utils/request'
const path = { const path = {
CableStatusList: 'sysLeakyCableStatus/selectPage', CableStatusList: 'api/sysLeakyCableStatus/selectPage',
DeviceStatusList: 'sysDeviceStatus/selectPage', DeviceStatusList: 'api/sysDeviceStatus/selectPage',
} }
export function CableStatusList() { 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'; import request from '@/utils/request';
const path = { const path = {
railWaylist: 'railWay/selectPage', railWaylist: 'api/railWay/selectPage',
railWaydetail: 'railWay/detail', railWaydetail: 'api/railWay/detail',
railWaysave: 'railWay/save', railWaysave: 'api/railWay/save',
railWaybatchDelete: 'railWay/batchDelete', railWaybatchDelete: 'api/railWay/batchDelete',
railWayselectList: 'railWay/selectList', railWayselectList: 'api/railWay/selectList',
updateRailWay: 'railWay/updateRailWay', updateRailWay: 'api/railWay/updateRailWay',
sitelist: 'site/selectPage', sitelist: 'api/site/selectPage',
sitedetail: 'site/detail', sitedetail: 'api/site/detail',
sitesave: 'site/save', sitesave: 'api/site/save',
sitebatchDelete: 'site/batchDelete', sitebatchDelete: 'api/site/batchDelete',
siteselectList: 'site/selectList', siteselectList: 'api/site/selectList',
selectForSite:'site/selectForSite',//铁路查站点 selectForSite:'api/site/selectForSite',//铁路查站点
updateSiteConf:'site/updateSiteConf', updateSiteConf:'api/site/updateSiteConf',
fsuList: 'fsu/selectPage', fsuList: 'api/fsu/selectPage',
fsudetail: 'fsu/detail', fsudetail: 'api/fsu/detail',
fsusave: 'fsu/save', fsusave: 'api/fsu/save',
fsubatchDelete: 'fsu/batchDeleteFsu', fsubatchDelete: 'api/fsu/batchDeleteFsu',
fsuselectList: 'fsu/selectList', fsuselectList: 'api/fsu/selectList',
selectForFsu: 'fsu/selectForFsu', selectForFsu: 'api/fsu/selectForFsu',
updateFsuConf: 'fsu/updateFsuConf', updateFsuConf: 'api/fsu/updateFsuConf',
selectFsuItem:'dict/selectFsuItem',//fsu数据字典 selectFsuItem:'api/dict/selectFsuItem',//fsu数据字典
monitorEquipList: 'monitorEquip/selectPage', monitorEquipList: 'api/monitorEquip/selectPage',
monitorEquipdetail: 'monitorEquip/detail', monitorEquipdetail: 'api/monitorEquip/detail',
monitorEquipsave: 'monitorEquip/save', monitorEquipsave: 'api/monitorEquip/save',
monitorEquipbatchDelete: 'monitorEquip/batchDeleteEquip', monitorEquipbatchDelete: 'api/monitorEquip/batchDeleteEquip',
monitorEquipselectList: 'monitorEquip/selectList', monitorEquipselectList: 'api/monitorEquip/selectList',
selectForEquip: 'monitorEquip/selectForEquip', selectForEquip: 'api/monitorEquip/selectForEquip',
selectMonitorItem:'dict/selectMonitorItem',//监测设备字典 selectMonitorItem:'api/dict/selectMonitorItem',//监测设备字典
updateMonitorEquipConf:'monitorEquip/updateMonitorEquipConf', updateMonitorEquipConf:'api/monitorEquip/updateMonitorEquipConf',
leakyCableList: 'leakyCable/selectPage', leakyCableList: 'api/leakyCable/selectPage',
leakyCabledetail: 'leakyCable/detail', leakyCabledetail: 'api/leakyCable/detail',
leakyCablesave: 'leakyCable/save', leakyCablesave: 'api/leakyCable/save',
leakyCablebatchDelete: 'leakyCable/batchDeleteEquip', leakyCablebatchDelete: 'api/leakyCable/batchDeleteEquip',
leakyCableselectList: 'leakyCable/selectList', leakyCableselectList: 'api/leakyCable/selectList',
selectForCable: 'leakyCable/selectForCable', selectForCable: 'api/leakyCable/selectForCable',
updateLeakyCableConf: 'leakyCable/updateLeakyCableConf', updateLeakyCableConf: 'api/leakyCable/updateLeakyCableConf',
antennaFeederSave: 'antennaFeeder/save', antennaFeederSave: 'api/antennaFeeder/save',
antennaFeederDelete: 'antennaFeeder/batchDeleteEquip', antennaFeederDelete: 'api/antennaFeeder/batchDeleteEquip',
antennaFeederDetail: 'antennaFeeder/detail', antennaFeederDetail: 'api/antennaFeeder/detail',
antennaFeederList: 'antennaFeeder/selectFeederPage', antennaFeederList: 'api/antennaFeeder/selectFeederPage',
updateFeederConf: 'antennaFeeder/updateFeederConf', updateFeederConf: 'api/antennaFeeder/updateFeederConf',
} }
// 铁路线 // 铁路线
export function railWaylist() { export function railWaylist() {
......
...@@ -85,6 +85,20 @@ ...@@ -85,6 +85,20 @@
></el-option> ></el-option>
</el-select> </el-select>
</el-form-item> </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-form-item>
<el-button type="success" @click="searchQuery()">查询</el-button> <el-button type="success" @click="searchQuery()">查询</el-button>
<el-button type="primary" @click="reset">重置</el-button> <el-button type="primary" @click="reset">重置</el-button>
...@@ -159,11 +173,21 @@ ...@@ -159,11 +173,21 @@
width="40%" width="40%"
:close-on-click-modal="false" :close-on-click-modal="false"
> >
<autoAdd />
</el-dialog>
<el-dialog
title="监测设备参数设置"
:visible.sync="openSetting"
width="40%"
:close-on-click-modal="false"
>
<autoAdd />
</el-dialog> </el-dialog>
</div> </div>
</template> </template>
<script> <script>
import monitor from "../../add/comp/monitorEquip.vue"; import monitor from "../../add/comp/monitorEquip.vue";
import autoAdd from "../../add/comp/autoAdd.vue";
import { import {
monitorEquiplist, monitorEquiplist,
monitorEquipbatchDelete, monitorEquipbatchDelete,
...@@ -175,7 +199,7 @@ import { successAlert, warningAlert } from "@/utils/alert"; ...@@ -175,7 +199,7 @@ import { successAlert, warningAlert } from "@/utils/alert";
import download from "@/utils/download"; import download from "@/utils/download";
import { exportMonitorEquip } from "@/api/export"; import { exportMonitorEquip } from "@/api/export";
export default { export default {
components: { monitor }, components: { monitor, autoAdd },
data() { data() {
return { return {
railWaySelect: [], railWaySelect: [],
...@@ -196,6 +220,7 @@ export default { ...@@ -196,6 +220,7 @@ export default {
visible: false, visible: false,
curInfo: {}, curInfo: {},
open: false, open: false,
openSetting: false,
}; };
}, },
created() { created() {
...@@ -212,6 +237,9 @@ export default { ...@@ -212,6 +237,9 @@ export default {
this.getAllWay(); this.getAllWay();
}, },
methods: { methods: {
handleSetting() {
this.openSetting = true;
},
handleAutomatic() { handleAutomatic() {
this.open = true; this.open = true;
}, },
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
<el-tab-pane label="同步设备"> <el-tab-pane label="同步设备">
<div class="top-box"> <div class="top-box">
<div class="nav-title">同步设备</div> <div class="nav-title">同步设备</div>
<el-button type="primary" @click="handleClick">开始同步</el-button> <el-button type="primary" @click="handleTimeSync">开始同步</el-button>
</div> </div>
<div class="table"> <div class="table">
<el-table <el-table
...@@ -14,51 +14,28 @@ ...@@ -14,51 +14,28 @@
:header-cell-style="{ background: '#f5f7fa', color: '#909399' }" :header-cell-style="{ background: '#f5f7fa', color: '#909399' }"
> >
<el-table-column <el-table-column
prop="name" prop="ip"
label="设备IP" label="设备ip"
width="" width=""
></el-table-column> ></el-table-column>
<el-table-column <el-table-column
prop="name" prop="equipmentCode"
label="设备编号" label="设备编号"
width="" width=""
></el-table-column> ></el-table-column>
<el-table-column <el-table-column
prop="name" prop="lastModifiedTime"
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"
label="同步时间" label="同步时间"
width="" width=""
></el-table-column> ></el-table-column>
</el-table> </el-table>
<Pagination
:limit="params.size"
:page="params.current"
:total="total"
class="pagination"
@pagination="handlePageChange"
/>
</div> </div>
</el-tab-pane> </el-tab-pane>
</el-tabs> </el-tabs>
...@@ -66,15 +43,39 @@ ...@@ -66,15 +43,39 @@
</template> </template>
<script> <script>
import { selectFeederPage } from "@/api/sync";
import { timeSync } from "@/api/udp";
export default { export default {
data() { data() {
return { return {
tableData: [], tableData: [],
params: {
current: 1,
size: 10,
},
total: 0,
}; };
}, },
mounted() {
this.handleSelectFeederPage();
},
methods: { 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.$message.success("开始备份");
this.handleSelectFeederPage();
},
async handleSelectFeederPage() {
let res = await selectFeederPage({});
this.tableData = res.records;
this.total = res.total;
}, },
}, },
}; };
......
import request from '@/utils/request' import request from '@/utils/request'
const path = { const path = {
list: 'user/selectUserPage', list: 'api/user/selectUserPage',
create: 'user/saveUser', create: 'api/user/saveUser',
updatePwd: 'user/updatePwd', updatePwd: 'api/user/updatePwd',
updateInfo: 'user/updateUserBaseInfo', updateInfo: 'api/user/updateUserBaseInfo',
logList: 'sysLog/selectLogPage', logList: 'api/sysLog/selectLogPage',
} }
export function list() { export function list() {
......
...@@ -12,7 +12,27 @@ const port = process.env.port || process.env.npm_config_port || 8886 // dev port ...@@ -12,7 +12,27 @@ const port = process.env.port || process.env.npm_config_port || 8886 // dev port
const rewriteDefaultConfig = { const rewriteDefaultConfig = {
changeOrigin: true, changeOrigin: true,
target: 'http://101.126.159.207:8886', 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', // target: 'http://192.168.0.127:8886',
// ws: true, // ws: true,
headers: { headers: {
...@@ -35,7 +55,9 @@ module.exports = { ...@@ -35,7 +55,9 @@ module.exports = {
errors: true errors: true
}, },
proxy: { proxy: {
'/api': rewriteDefaultConfig '/api': rewriteDefaultConfig,
'/device': rewriteDeviceConfig,
'/xxl-job-admin': rewriteAdminConfig
}, },
}, },
configureWebpack: { configureWebpack: {
...@@ -87,7 +109,7 @@ module.exports = { ...@@ -87,7 +109,7 @@ module.exports = {
.plugin('ScriptExtHtmlWebpackPlugin') .plugin('ScriptExtHtmlWebpackPlugin')
.after('html') .after('html')
.use('script-ext-html-webpack-plugin', [{ .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$/ inline: /runtime\..*\.js$/
}]) }])
.end() .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