所有功能

master
fanluyan 2 years ago
parent d798f100ee
commit 467b6c887d

90
package-lock.json generated

@ -13844,6 +13844,49 @@
"webpack-merge": "^5.7.3",
"webpack-virtual-modules": "^0.4.2",
"whatwg-fetch": "^3.6.2"
},
"dependencies": {
"@vue/vue-loader-v15": {
"version": "npm:vue-loader@15.10.1",
"resolved": "https://registry.npmmirror.com/vue-loader/-/vue-loader-15.10.1.tgz",
"integrity": "sha512-SaPHK1A01VrNthlix6h1hq4uJu7S/z0kdLUb6klubo738NeQoLbS6V9/d8Pv19tU0XdQKju3D1HSKuI8wJ5wMA==",
"dev": true,
"requires": {
"@vue/component-compiler-utils": "^3.1.0",
"hash-sum": "^1.0.2",
"loader-utils": "^1.1.0",
"vue-hot-reload-api": "^2.3.0",
"vue-style-loader": "^4.1.0"
},
"dependencies": {
"hash-sum": {
"version": "1.0.2",
"resolved": "https://registry.npmmirror.com/hash-sum/-/hash-sum-1.0.2.tgz",
"integrity": "sha512-fUs4B4L+mlt8/XAtSOGMUO1TXmAelItBPtJG7CyHJfYTdDjwisntGO2JQz7oUsatOY9o68+57eziUVNw/mRHmA==",
"dev": true
}
}
},
"json5": {
"version": "1.0.2",
"resolved": "https://registry.npmmirror.com/json5/-/json5-1.0.2.tgz",
"integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==",
"dev": true,
"requires": {
"minimist": "^1.2.0"
}
},
"loader-utils": {
"version": "1.4.2",
"resolved": "https://registry.npmmirror.com/loader-utils/-/loader-utils-1.4.2.tgz",
"integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==",
"dev": true,
"requires": {
"big.js": "^5.2.2",
"emojis-list": "^3.0.0",
"json5": "^1.0.1"
}
}
}
},
"@vue/cli-shared-utils": {
@ -14008,47 +14051,6 @@
}
}
},
"@vue/vue-loader-v15": {
"version": "npm:vue-loader@15.10.1",
"resolved": "https://registry.npmmirror.com/vue-loader/-/vue-loader-15.10.1.tgz",
"integrity": "sha512-SaPHK1A01VrNthlix6h1hq4uJu7S/z0kdLUb6klubo738NeQoLbS6V9/d8Pv19tU0XdQKju3D1HSKuI8wJ5wMA==",
"dev": true,
"requires": {
"@vue/component-compiler-utils": "^3.1.0",
"hash-sum": "^1.0.2",
"loader-utils": "^1.1.0",
"vue-hot-reload-api": "^2.3.0",
"vue-style-loader": "^4.1.0"
},
"dependencies": {
"hash-sum": {
"version": "1.0.2",
"resolved": "https://registry.npmmirror.com/hash-sum/-/hash-sum-1.0.2.tgz",
"integrity": "sha512-fUs4B4L+mlt8/XAtSOGMUO1TXmAelItBPtJG7CyHJfYTdDjwisntGO2JQz7oUsatOY9o68+57eziUVNw/mRHmA==",
"dev": true
},
"json5": {
"version": "1.0.2",
"resolved": "https://registry.npmmirror.com/json5/-/json5-1.0.2.tgz",
"integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==",
"dev": true,
"requires": {
"minimist": "^1.2.0"
}
},
"loader-utils": {
"version": "1.4.2",
"resolved": "https://registry.npmmirror.com/loader-utils/-/loader-utils-1.4.2.tgz",
"integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==",
"dev": true,
"requires": {
"big.js": "^5.2.2",
"emojis-list": "^3.0.0",
"json5": "^1.0.1"
}
}
}
},
"@vue/web-component-wrapper": {
"version": "1.3.0",
"resolved": "https://registry.npmmirror.com/@vue/web-component-wrapper/-/web-component-wrapper-1.3.0.tgz",
@ -15567,7 +15569,7 @@
},
"dom7": {
"version": "2.1.5",
"resolved": "https://registry.npmmirror.com/dom7/-/dom7-2.1.5.tgz",
"resolved": "https://registry.npmjs.org/dom7/-/dom7-2.1.5.tgz",
"integrity": "sha512-xnhwVgyOh3eD++/XGtH+5qBwYTgCm0aW91GFgPJ3XG+jlsRLyJivnbP0QmUBFhI+Oaz9FV0s7cxgXHezwOEBYA==",
"dev": true,
"requires": {
@ -15576,7 +15578,7 @@
"dependencies": {
"ssr-window": {
"version": "2.0.0",
"resolved": "https://registry.npmmirror.com/ssr-window/-/ssr-window-2.0.0.tgz",
"resolved": "https://registry.npmjs.org/ssr-window/-/ssr-window-2.0.0.tgz",
"integrity": "sha512-NXzN+/HPObKAx191H3zKlYomE5WrVIkoCB5IaSdvKokxTpjBdWfr0RaP+1Z5KOfDT0ZVz+2tdtiBkhsEQ9p+0A==",
"dev": true
}
@ -19406,7 +19408,7 @@
},
"ssr-window": {
"version": "1.0.1",
"resolved": "https://registry.npmmirror.com/ssr-window/-/ssr-window-1.0.1.tgz",
"resolved": "https://registry.npmjs.org/ssr-window/-/ssr-window-1.0.1.tgz",
"integrity": "sha512-dgFqB+f00LJTEgb6UXhx0h+SrG50LJvti2yMKMqAgzfUmUXZrLSv2fjULF7AWGwK25EXu8+smLR3jYsJQChPsg==",
"dev": true
},

@ -1,5 +1,5 @@
<template>
<div id="app" class="orangeStyle">
<div id="app" class="blueStyle">
<router-view> </router-view>
</div>
</template>

@ -22,8 +22,8 @@
.el-menu-item:not(.is-disabled):focus,
.el-menu-item:not(.is-disabled):hover {
color: #20a0ff;
background-color: @color-white;
border-bottom: 2px solid @color-white;
background-color: #f2f2f2;
border-bottom: 2px solid #f2f2f2;
i {
color: #20a0ff !important;
@ -33,8 +33,8 @@
.el-submenu:focus .el-submenu__title,
.el-submenu:hover .el-submenu__title {
color: #20a0ff !important;
background-color: @color-white;
border-bottom: 2px solid @color-white;
background-color: #f2f2f2;
border-bottom: 2px solid #f2f2f2;
i {
color: #20a0ff !important;
@ -42,9 +42,9 @@
}
}
.el-menu--horizontal > .el-menu-item.is-active {
border-bottom: 2px solid #fff;
color: #20a0ff;
background-color: #fff;
border-bottom: 2px solid #fff !important;
color: #20a0ff !important;
background-color: #fff !important;
i {
color: #20a0ff !important;
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 122 KiB

After

Width:  |  Height:  |  Size: 4.0 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 122 KiB

@ -4,15 +4,6 @@
<v-sidebar></v-sidebar>
<div class="header-right">
<div class="header-user-con">
<el-select v-model="colorValue" @change="changeTheme">
<el-option
v-for="item in colorList"
:key="item.value"
:label="item.label"
:value="item.value"
></el-option>
</el-select>
<!-- 用户头像 -->
<div class="user-avator">
<img src="../../assets/img/user.jpeg" />
@ -38,7 +29,6 @@
</div>
</template>
<script>
// import bus from '../common/bus';
import { mapState } from "vuex";
import updateElementUiTheme from "update-element-ui-theme";
import vSidebar from "./Sidebar.vue";
@ -50,26 +40,6 @@ export default {
},
data() {
return {
colorList: [
{
value: "#20a0ff",
label: "蓝色",
},
// {
// value: "#EE320C",
// label: "",
// },
// {
// value: "#00a096",
// label: "绿",
// },
{
value: "#f08200",
label: "橙色",
},
],
colorValue: "",
fullscreen: false,
dialogFormPsd: false,
};
},
@ -81,40 +51,6 @@ export default {
},
},
methods: {
//
changeTheme(event) {
console.log(event);
let colorTheme = {};
colorTheme = this.colorList.find(function (item) {
return item.value === event;
}); //change
console.log(colorTheme);
const app = document.getElementById("app");
console.log(app);
if (colorTheme.label === "蓝色") {
colorTheme.value = "#20a0ff";
app.classList.add("blueStyle");
app.classList.remove("redStyle", "greenStyle", "orangeStyle");
} else if (colorTheme.label === "红色") {
colorTheme.value = "#EE320C";
app.classList.remove("blueStyle", "greenStyle", "orangeStyle");
app.classList.add("redStyle");
} else if (colorTheme.label === "绿色") {
colorTheme.value = "#00a096";
app.classList.remove("blueStyle", "redStyle", "orangeStyle");
app.classList.add("greenStyle");
} else if (colorTheme.label === "橙色") {
colorTheme.value = "#f08200";
app.classList.remove("blueStyle", "greenStyle", "redStyle");
app.classList.add("orangeStyle");
}
updateElementUiTheme({
theme: colorTheme.value,
themeName: "--my-theme-name",
});
},
//
handleCommand(command) {
switch (command) {
@ -141,10 +77,7 @@ export default {
this.dialogFormPsd = false;
},
},
created() {
this.colorValue = this.colorList[0].label;
this.changeTheme(this.colorList[0].value);
},
created() {},
mounted() {},
};
</script>

@ -1,16 +1,14 @@
<template>
<div class="wrapper">
<v-head></v-head>
<!-- <v-sidebar></v-sidebar> -->
<div class="content-box">
<!-- <v-tags></v-tags> -->
<div class="content">
<transition name="move" mode="out-in">
<keep-alive :include="tagsList">
<keep-alive>
<router-view></router-view>
</keep-alive>
</transition>
<el-backtop target=".content"></el-backtop>
</div>
</div>
</div>
@ -18,35 +16,15 @@
<script>
import vHead from "./Header.vue";
//import vSidebar from './Sidebar.vue';
// import vTags from './Tags.vue';
import bus from "./bus";
export default {
data() {
return {
tagsList: [],
collapse: false,
};
return {};
},
components: {
vHead,
//vSidebar,
// vTags
},
created() {
bus.$on("collapse-content", (msg) => {
this.collapse = msg;
});
// 使keep-alive
bus.$on("tags", (msg) => {
let arr = [];
for (let i = 0, len = msg.length; i < len; i++) {
msg[i].name && arr.push(msg[i].name);
}
this.tagsList = arr;
});
},
created() {},
};
</script>
<style lang="less">

@ -49,215 +49,84 @@
</template>
<script>
import bus from "../common/bus";
export default {
data() {
return {
//collapse: false,
activeIndex: "/realTimeMonitor",
items: [
// {
// icon: "el-icon-s-home",
// index: "stritl",
// title: "",
// },
{
icon: "el-icon-s-home",
index: "stritl",
title: "首页",
},
{
icon: "el-icon-camera",
index: "realTimeMonitor",
title: "实时监控",
},
{
icon: "el-icon-setting",
index: "devicePhotoSchedule",
title: "拍照时间表设置",
icon: "el-icon-film",
index: "pictureRotation",
title: "图片轮巡",
},
{
icon: "el-icon-coin",
index: "cameraChannel",
title: "通道管理",
icon: "el-icon-bell",
index: "photoAlarm",
title: "告警处理",
},
{
icon: "el-icon-picture-outline",
index: "imageSettings",
title: "图像采集参数设置",
icon: "el-icon-search",
index: "realTimeSearch",
title: "实时查询",
},
// {
// icon: "el-icon-film",
// index: "pictureRotation",
// title: "",
// },
// {
// icon: "el-icon-video-camera",
// index: "3",
// title: "",
// subs: [
// {
// index: "videoMonitor",
// title: "",
// },
// {
// index: "videoHistory",
// title: "",
// },
// ],
// },
// {
// icon: "el-icon-warning-outline",
// index: "dashboard",
// title: "",
// },
// {
// icon: "el-icon-bell",
// index: "photoAlarm",
// title: "",
// },
// {
// icon: 'el-icon-setting',
// index: '6',
// title: '',
// subs: [
// {
// index: '6-1',
// title: '',
// subs: [
// {
// index: 'form',
// title: ''
// },
// {
// index: 'form',
// title: ''
// },
// {
// index: 'form',
// title: ''
// }
// ]
// },
// {
// index: '6-2',
// title: '',
// subs: [
// {
// index: 'form',
// title: ''
// }
// ]
// },
// {
// index: '6-3',
// title: 'I1',
// subs: [
// {
// index: 'form',
// title: ''
// },
// {
// index: 'form',
// title: 'OSD'
// }
// ]
// }
// ]
// },
{
icon: "el-icon-files",
index: "7",
index: "property",
title: "资产管理",
subs: [
{
index: "7-1",
title: "用户设备",
subs: [
{
index: "lineInformation",
title: "线路信息管理",
},
// {
// index: "towerInformation",
// title: "",
// },
// {
// index: 'towerTeam',
// title: ''
// },
// {
// index: 'groupInformation',
// title: ''
// },
// {
// index: 'form',
// title: '线'
// },
// {
// index: 'form',
// title: ''
// },
// {
// index: 'form',
// title: ''
// }
],
index: "lineInformation",
title: "线路信息管理",
},
{
index: "towerInformation",
title: "杆塔信息管理",
},
{
index: "photographicDevice",
title: "拍照装置管理",
},
{
icon: "el-icon-coin",
index: "cameraChannel",
title: "通道管理",
},
{
icon: "el-icon-setting",
index: "devicePhotoSchedule",
title: "拍照时间表设置",
},
{
icon: "el-icon-picture-outline",
index: "imageSettings",
title: "图像采集参数设置",
},
],
},
{
icon: "el-icon-monitor",
index: "system",
title: "系统管理",
subs: [
{
index: "7-2",
title: "监测设备",
subs: [
// {
// index: 'SIMCard',
// title: 'SIM'
// },
{
index: "photographicDevice",
title: "拍照装置管理",
},
// {
// index: 'deviceVisualization',
// title: ''
// }
],
index: "userManagement",
title: "用户管理",
},
],
},
// {
// icon: 'el-icon-monitor',
// index: '8',
// title: '',
// subs: [
// {
// index: '8-1',
// title: '',
// subs: [
// {
// index: 'form',
// title: ''
// },
// {
// index: 'form',
// title: ''
// },
// {
// index: 'form',
// title: ''
// }
// ]
// },
// {
// index: '8-2',
// title: '',
// subs: [
// {
// index: 'form',
// title: ''
// },
// {
// index: 'form',
// title: ''
// }
// ]
// }
// ]
// }
],
};
},
@ -266,7 +135,7 @@ export default {
},
watch: {
activeIndex(newValue) {
if (newValue != this.$route.path) {
if (newValur != this.$route.path) {
this.activeIndex = this.$route.path;
}
},

@ -1,192 +0,0 @@
<template>
<div class="tags" v-if="showTags">
<ul>
<li class="tags-li" v-for="(item, index) in tagsList" :class="{ active: isActive(item.path) }" :key="index">
<router-link :to="item.path" class="tags-li-title"> <i :class="item.icon"></i>{{ item.title }} </router-link>
<span class="tags-li-icon" @click="closeTags(index)" v-if="item.path !== '/stritl'"><i class="el-icon-close"></i></span>
</li>
</ul>
<!-- <div class="tags-close-box">
<el-dropdown @command="handleTags">
<el-button size="mini" type="primary">
标签选项<i class="el-icon-arrow-down el-icon--right"></i>
</el-button>
<el-dropdown-menu size="small" slot="dropdown">
<el-dropdown-item command="other">关闭其他</el-dropdown-item>
<el-dropdown-item command="all">关闭所有</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
</div> -->
</div>
</template>
<script>
import bus from './bus';
export default {
data() {
return {
tagsList: []
};
},
methods: {
isActive(path) {
return path === this.$route.fullPath;
},
//
closeTags(index) {
const delItem = this.tagsList.splice(index, 1)[0];
const item = this.tagsList[index] ? this.tagsList[index] : this.tagsList[index - 1];
if (item) {
delItem.path === this.$route.fullPath && this.$router.push(item.path);
} else {
this.$router.push('/');
}
},
//
closeAll() {
this.tagsList = [];
this.$router.push('/');
},
//
closeOther() {
const curItem = this.tagsList.filter((item) => {
return item.path === this.$route.fullPath;
});
this.tagsList = curItem;
},
//
setTags(route) {
const isExist = this.tagsList.some((item) => {
return item.path === route.fullPath;
});
if (!isExist) {
if (this.tagsList.length >= 8) {
this.tagsList.shift();
}
this.tagsList.push({
title: route.meta.title,
path: route.fullPath,
icon: route.meta.icon
});
// console.log(route);
}
bus.$emit('tags', this.tagsList);
},
handleTags(command) {
command === 'other' ? this.closeOther() : this.closeAll();
}
},
computed: {
showTags() {
return this.tagsList.length > 0;
}
},
watch: {
$route(newValue, oldValue) {
this.setTags(newValue);
}
},
created() {
this.setTags(this.$route);
//
bus.$on('close_current_tags', () => {
for (let i = 0, len = this.tagsList.length; i < len; i++) {
const item = this.tagsList[i];
if (item.path === this.$route.fullPath) {
if (i < len - 1) {
this.$router.push(this.tagsList[i + 1].path);
} else if (i > 0) {
this.$router.push(this.tagsList[i - 1].path);
} else {
this.$router.push('/');
}
this.tagsList.splice(i, 1);
break;
}
}
});
}
};
</script>
<style lang="less">
.tags {
position: relative;
height: 48px;
overflow: hidden;
background: @color-white;
padding-right: 120px;
box-shadow: 0 5px 10px @border-color-light;
}
.tags ul {
box-sizing: border-box;
width: 100%;
height: 100%;
}
.tags-li {
float: left;
margin: 12px 8px 12px 8px;
border-radius: 3px;
font-size: 12px;
overflow: hidden;
cursor: pointer;
height: 24px;
line-height: 24px;
border: 1px solid @border-color-base;
background: @color-white;
padding: 0 5px 0 12px;
vertical-align: middle;
color: @color-text-regular;
-webkit-transition: all 0.3s ease-in;
-moz-transition: all 0.3s ease-in;
transition: all 0.3s ease-in;
}
.tags-li:not(.active):hover {
background: @border-color-extra-light;
}
.tags-li.active {
color: @color-white;
}
.tags-li.active {
border: 1px solid @color-primary;
background-color: @color-primary;
}
.tags-li-title {
float: left;
max-width: 80px;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
margin-right: 5px;
color: @color-text-regular;
i {
margin-right: 4px;
}
}
.tags-li.active .tags-li-title {
color: @color-white;
i {
color: @color-white;
}
}
.tags-close-box {
position: absolute;
right: 0;
top: 0;
box-sizing: border-box;
padding-top: 1px;
text-align: center;
width: 110px;
height: 30px;
background: @color-white;
box-shadow: @box-shadow-basic;
z-index: 10;
}
</style>

@ -25,6 +25,7 @@ const routes = [
icon: "el-icon-s-home",
},
},
{
path: "/realTimeMonitor",
component: () =>
@ -37,6 +38,7 @@ const routes = [
icon: "el-icon-camera",
},
},
{
path: "/pictureRotation",
component: () =>
@ -50,58 +52,21 @@ const routes = [
},
},
{
path: "/videoMonitor",
component: () =>
import(
/* webpackChunkName: "tabs" */ "../views/videoMonitor/index.vue"
),
meta: { title: "监控视频", icon: "el-icon-video-camera" },
},
{
path: "/videoHistory",
component: () =>
import(
/* webpackChunkName: "tabs" */ "../views/videoMonitor/videoHistory.vue"
),
meta: { title: "视频回放", icon: "el-icon-video-camera" },
},
{
path: "/devicePhotoSchedule",
component: () =>
import(
/* webpackChunkName: "tabs" */ "../views/devicePhotoSchedule/index.vue"
),
meta: { title: "拍照时间表设置", icon: "el-icon-setting" },
},
{
path: "/cameraChannel",
component: () =>
import(
/* webpackChunkName: "icon" */ "../views/cameraChannel/index.vue"
),
meta: {
title: "通道设置",
icon: "el-icon-coin",
},
},
{
path: "/imageSettings",
path: "/photoAlarm",
component: () =>
import(
/* webpackChunkName: "tabs" */ "../views/imageSettings/index.vue"
/* webpackChunkName: "tabs" */ "../views/alarmHandling/index.vue"
),
meta: { title: "图像采集装置设置", icon: "el-icon-picture-outline" },
meta: { title: "告警处理", icon: "el-icon-bell" },
},
{
path: "/photoAlarm",
path: "/realTimeSearch",
component: () =>
import(
/* webpackChunkName: "tabs" */ "../views/alarmHandling/index.vue"
/* webpackChunkName: "tabs" */ "../views/realTimeSearch/index.vue"
),
meta: { title: "告警处理", icon: "el-icon-bell" },
meta: { title: "实时查询", icon: "el-icon-search" },
},
{
path: "/lineInformation",
component: () =>
@ -111,76 +76,108 @@ const routes = [
meta: { title: "线路信息管理", icon: "" },
},
{
path: "/groupInformation",
path: "/towerInformation",
component: () =>
import(
/* webpackChunkName: "tabs" */ "../views/management/userEquipment/groupInformation/index.vue"
/* webpackChunkName: "tabs" */ "../views/management/userEquipment/towerInformation/index.vue"
),
meta: { title: "分组信息管理", icon: "" },
meta: { title: "杆塔信息管理", icon: "" },
},
{
path: "/towerInformation",
path: "/photographicDevice",
component: () =>
import(
/* webpackChunkName: "tabs" */ "../views/management/userEquipment/towerInformation/index.vue"
/* webpackChunkName: "tabs" */ "../views/management/monitoringEquipment/photographicDevice/index.vue"
),
meta: { title: "杆塔信息管理", icon: "" },
meta: { title: "拍照装置管理", icon: "" },
},
{
path: "/towerTeam",
path: "/cameraChannel",
component: () =>
import(
/* webpackChunkName: "tabs" */ "../views/management/userEquipment/towerTeam/index.vue"
/* webpackChunkName: "icon" */ "../views/cameraChannel/index.vue"
),
meta: { title: "杆塔班组用户", icon: "" },
},
meta: {
title: "通道设置",
icon: "el-icon-coin",
},
},
{
path: "/deviceVisualization",
path: "/devicePhotoSchedule",
component: () =>
import(
/* webpackChunkName: "tabs" */ "../views/management/monitoringEquipment/deviceVisualization/index.vue"
/* webpackChunkName: "tabs" */ "../views/devicePhotoSchedule/index.vue"
),
meta: { title: "装置分布可视化", icon: "" },
meta: { title: "拍照时间表设置", icon: "el-icon-setting" },
},
{
path: "/photographicDevice",
path: "/imageSettings",
component: () =>
import(
/* webpackChunkName: "tabs" */ "../views/management/monitoringEquipment/photographicDevice/index.vue"
/* webpackChunkName: "tabs" */ "../views/imageSettings/index.vue"
),
meta: { title: "拍照装置管理", icon: "" },
meta: { title: "图像采集装置设置", icon: "el-icon-picture-outline" },
},
{
path: "/SIMCard",
path: "/imageSettings",
component: () =>
import(
/* webpackChunkName: "tabs" */ "../views/management/monitoringEquipment/SIMCard/index.vue"
/* webpackChunkName: "tabs" */ "../views/imageSettings/index.vue"
),
meta: { title: "SIM卡管理", icon: "" },
meta: { title: "图像采集装置设置", icon: "el-icon-picture-outline" },
},
{
// 权限页面
path: "/permission",
path: "/userManagement",
component: () =>
import(
/* webpackChunkName: "permission" */ "../views/Permission.vue"
/* webpackChunkName: "tabs" */ "../views/system/userManagement.vue"
),
meta: { title: "权限测试", permission: true, icon: "el-icon-setting" },
meta: { title: "用户管理", icon: "el-icon-monitor" },
},
// {
// path: "/videoMonitor",
// component: () =>
// import(
// /* webpackChunkName: "tabs" */ "../views/videoMonitor/index.vue"
// ),
// meta: { title: "监控视频", icon: "el-icon-video-camera" },
// },
// {
// path: "/videoHistory",
// component: () =>
// import(
// /* webpackChunkName: "tabs" */ "../views/videoMonitor/videoHistory.vue"
// ),
// meta: { title: "视频回放", icon: "el-icon-video-camera" },
// },
// {
// path: "/groupInformation",
// component: () =>
// import(
// /* webpackChunkName: "tabs" */ "../views/management/userEquipment/groupInformation/index.vue"
// ),
// meta: { title: "分组信息管理", icon: "" },
// },
// {
// path: "/towerTeam",
// component: () =>
// import(
// /* webpackChunkName: "tabs" */ "../views/management/userEquipment/towerTeam/index.vue"
// ),
// meta: { title: "杆塔班组用户", icon: "" },
// },
{
path: "/404",
component: () =>
import(/* webpackChunkName: "404" */ "../views/404.vue"),
meta: { title: "404" },
},
{
path: "/403",
component: () =>
import(/* webpackChunkName: "403" */ "../views/403.vue"),
meta: { title: "403" },
},
],
},
{

@ -219,3 +219,29 @@ export function getImageResolutionListJoggle(data) {
//设置图像参数 setImageParams
//查询图像分辨率 getImageParams
// 获取GPS位置
export function getTermGPSJoggle(data) {
return request({
url: "/test/getTermGPS",
method: "post",
data,
});
}
//setTermGPS 开启关闭gps
export function setTermGPSJoggle(data) {
return request({
url: "/test/setTermGPS",
method: "post",
data,
});
}
//手动拍照
export function getLatestPhotoJoggle(data) {
return request({
url: "/test/getLatestPhoto",
method: "post",
data,
});
}

@ -1,56 +0,0 @@
<template>
<div class="error-page">
<div class="error-code">4<span>0</span>3</div>
<div class="error-desc">啊哦~ 你没有权限访问该页面哦</div>
<div class="error-handle">
<router-link to="/">
<el-button type="primary" size="large">返回首页</el-button>
</router-link>
<el-button class="error-btn" type="primary" size="large" @click="goBack"></el-button>
</div>
</div>
</template>
<script>
export default {
methods: {
goBack(){
this.$router.go(-1);
}
}
}
</script>
<style scoped>
.error-page{
display: flex;
justify-content: center;
align-items: center;
flex-direction: column;
width: 100%;
height: 100%;
background: #f3f3f3;
box-sizing: border-box;
}
.error-code{
line-height: 1;
font-size: 250px;
font-weight: bolder;
color: #f02d2d;
}
.error-code span{
color: #00a854;
}
.error-desc{
font-size: 30px;
color: #777;
}
.error-handle{
margin-top: 30px;
padding-bottom: 200px;
}
.error-btn{
margin-left: 100px;
}
</style>

@ -1,56 +1,55 @@
<template>
<div class="error-page">
<div class="error-code">4<span>0</span>4</div>
<div class="error-desc">啊哦~ 你所访问的页面不存在</div>
<div class="error-handle">
<div class="error-code">4<span>0</span>4</div>
<div class="error-desc">啊哦~ 你所访问的页面不存在</div>
<!-- <div class="error-handle">
<router-link to="/">
<el-button type="primary" size="large">返回首页</el-button>
</router-link>
<el-button class="error-btn" type="primary" size="large" @click="goBack"></el-button>
</div>
</div> -->
</div>
</template>
<script>
export default {
methods: {
goBack(){
this.$router.go(-1);
}
}
}
goBack() {
this.$router.go(-1);
},
},
};
</script>
<style scoped>
.error-page{
display: flex;
justify-content: center;
align-items: center;
flex-direction: column;
width: 100%;
height: 100%;
background: #f3f3f3;
box-sizing: border-box;
}
.error-code{
line-height: 1;
font-size: 250px;
font-weight: bolder;
color: #2d8cf0;
}
.error-code span{
color: #00a854;
}
.error-desc{
font-size: 30px;
color: #777;
}
.error-handle{
margin-top: 30px;
padding-bottom: 200px;
}
.error-btn{
margin-left: 100px;
}
.error-page {
display: flex;
justify-content: center;
align-items: center;
flex-direction: column;
width: 100%;
height: 100%;
background: #f3f3f3;
box-sizing: border-box;
}
.error-code {
line-height: 1;
font-size: 250px;
font-weight: bolder;
color: #2d8cf0;
}
.error-code span {
color: #00a854;
}
.error-desc {
font-size: 30px;
color: #777;
}
.error-handle {
margin-top: 30px;
padding-bottom: 200px;
}
.error-btn {
margin-left: 100px;
}
</style>

@ -1,202 +1,253 @@
<template>
<div class="alarmHandBox">
<div class="alarmTop">
<div class="alarmButtonGroup">
<el-button type="primary">查询</el-button>
<el-button type="primary">今日告警</el-button>
<el-button type="primary">最近三日告警</el-button>
<el-button type="primary">最近一周告警</el-button>
<el-button type="primary">批量处理</el-button>
<el-button type="primary">查看详情</el-button>
<el-button type="primary">导出</el-button>
<el-button type="primary">导出处理结果</el-button>
<el-button type="primary">导出图片</el-button>
<el-button type="primary">手动刷新</el-button>
</div>
<div class="alarmHandBox">
<div class="alarmTop">
<div class="alarmButtonGroup">
<el-button type="primary">查询</el-button>
<el-button type="primary">今日告警</el-button>
<el-button type="primary">最近三日告警</el-button>
<el-button type="primary">最近一周告警</el-button>
<el-button type="primary">批量处理</el-button>
<el-button type="primary">查看详情</el-button>
<el-button type="primary">导出</el-button>
<el-button type="primary">导出处理结果</el-button>
<el-button type="primary">导出图片</el-button>
<el-button type="primary">手动刷新</el-button>
</div>
</div>
<div class="alarmContain">
<div class="alarmTable">
<el-table
ref="multipleTable"
:data="tableData"
border
tooltip-effect="dark"
style="width: 100%"
@selection-change="handleSelectionChange"
height="calc(100% - 40px)"
@row-click="handleRowClick"
>
<el-table-column min-width="35">
<template slot-scope="scope">
<span>{{ (page - 1) * pageSize + scope.$index + 1 }}</span>
</template>
</el-table-column>
<el-table-column type="selection" min-width="25"> </el-table-column>
<el-table-column
prop="alarmTime"
label="告警时间"
min-width="135"
:show-overflow-tooltip="true"
:formatter="dateFormat"
>
</el-table-column>
<el-table-column prop="alarmLevel" label="告警级别" min-width="75">
</el-table-column>
<el-table-column
prop="lineName"
label="XL"
min-width="105"
:show-overflow-tooltip="true"
>
</el-table-column>
<el-table-column
prop="meid"
label="GT"
min-width="115"
:show-overflow-tooltip="true"
>
</el-table-column>
<el-table-column
prop="orientationName"
label="监拍朝向"
min-width="95"
:show-overflow-tooltip="true"
>
</el-table-column>
<el-table-column
prop="companyName"
label="单位"
min-width="75"
:show-overflow-tooltip="true"
>
</el-table-column>
<el-table-column
prop="alarmInfo"
label="告警原因"
min-width="155"
:show-overflow-tooltip="true"
>
</el-table-column>
<el-table-column
prop="source"
label="分析来源"
min-width="105"
:show-overflow-tooltip="true"
>
<template>后端分析</template></el-table-column
>
<el-table-column
prop="clearDistace"
label="净空距离"
min-width="105"
:show-overflow-tooltip="true"
><template>未分析</template>
</el-table-column>
<el-table-column
prop="distanceLevel"
label="距离分级"
min-width="85"
:show-overflow-tooltip="true"
>
</el-table-column>
<el-table-column
prop="isRead"
label="是否已读"
min-width="95"
fixed="right"
>
<template slot-scope="scope">
<span v-if="scope.row.isRead == 0"></span>
<span v-if="scope.row.isRead == 1"></span>
</template>
</el-table-column>
</el-table>
<div class="pageNation">
<el-pagination
@current-change="handleCurrentChange"
:current-page="page"
:page-size="pageSize"
layout=" prev, pager, next, jumper,total"
:total="total"
>
</el-pagination>
</div>
<div class="alarmContain">
<div class="alarmTable">
<el-table
ref="multipleTable"
:data="tableData"
border
tooltip-effect="dark"
style="width: 100%"
@selection-change="handleSelectionChange"
height="calc(100% - 40px)"
@row-click="handleRowClick"
>
<el-table-column min-width="35">
<template slot-scope="scope">
<span>{{ (page - 1) * pageSize + scope.$index + 1 }}</span>
</template>
</el-table-column>
<el-table-column type="selection" min-width="25"> </el-table-column>
<el-table-column
prop="alarmTime"
label="告警时间"
min-width="135"
:show-overflow-tooltip="true"
:formatter="dateFormat"
>
</el-table-column>
<el-table-column prop="alarmLevel" label="告警级别" min-width="75"> </el-table-column>
<el-table-column prop="lineName" label="XL" min-width="105" :show-overflow-tooltip="true"> </el-table-column>
<el-table-column prop="meid" label="GT" min-width="115" :show-overflow-tooltip="true"> </el-table-column>
<el-table-column prop="orientationName" label="监拍朝向" min-width="95" :show-overflow-tooltip="true">
</el-table-column>
<el-table-column prop="companyName" label="单位" min-width="75" :show-overflow-tooltip="true"> </el-table-column>
<el-table-column prop="alarmInfo" label="告警原因" min-width="155" :show-overflow-tooltip="true"> </el-table-column>
<el-table-column prop="source" label="分析来源" min-width="105" :show-overflow-tooltip="true">
<template>后端分析</template></el-table-column
>
<el-table-column prop="clearDistace" label="净空距离" min-width="105" :show-overflow-tooltip="true"
><template>未分析</template>
</el-table-column>
<el-table-column prop="distanceLevel" label="距离分级" min-width="85" :show-overflow-tooltip="true"> </el-table-column>
<el-table-column prop="isRead" label="是否已读" min-width="95" fixed="right">
<template slot-scope="scope">
<span v-if="scope.row.isRead == 0"></span>
<span v-if="scope.row.isRead == 1"></span>
</template>
</el-table-column>
</el-table>
<div class="pageNation">
<el-pagination
@current-change="handleCurrentChange"
:current-page="page"
:page-size="pageSize"
layout=" prev, pager, next, jumper,total"
:total="total"
>
</el-pagination>
</div>
</div>
<div class="alarmPic">
<div class="imgshow"><img :src="photoPic" /></div>
<div class="editorBtn">
<el-button type="primary">处理</el-button>
<el-button type="primary">查看操作详情</el-button>
<el-button type="primary">设置非警告区域</el-button>
<el-button type="primary">主动拍照</el-button>
<el-button type="primary">转向GT</el-button>
<el-button type="primary">复制</el-button>
<el-button type="primary">历史图</el-button>
</div>
</div>
</div>
<div class="alarmPic">
<div class="imgshow"><img :src="photoPic" /></div>
<div class="editorBtn">
<el-button type="primary">处理</el-button>
<el-button type="primary">查看操作详情</el-button>
<el-button type="primary">设置非警告区域</el-button>
<el-button type="primary">主动拍照</el-button>
<el-button type="primary">转向GT</el-button>
<el-button type="primary">复制</el-button>
<el-button type="primary">历史图</el-button>
</div>
</div>
</div>
</div>
</template>
<script>
import { list } from '@/utils/api/index';
import moment from 'moment';
//import { list } from '@/utils/api/index';
import moment from "moment";
export default {
data() {
return {
photoPic: '',
data() {
return {
photoPic: "",
tableData: [],
multipleSelection: [],
page: 1, //
pageSize: 20, //
total: 0 //
};
tableData: [],
multipleSelection: [],
page: 1, //
pageSize: 20, //
total: 0, //
};
},
methods: {
handleCurrentChange(val) {
console.log(`当前页: ${val}`);
this.page = val;
this.getTableList();
},
getTableList() {
list({
companyIdSelect: "",
timeStart: "2023-03-24 00:00:00",
timeEnd: "2023-03-24 23:59:59",
status: 0,
lineId: "",
voltageCode: "",
logicTowerId: "",
alarmInfo: "",
page: this.page,
rows: this.pageSize,
sort: "alarmTime",
order: "desc",
}).then((res) => {
console.log(res.data);
this.tableData = res.data.rows;
this.total = res.data.total;
this.photoPic =
"http://180.166.218.222:8104/media" + res.data.rows[0].photoPath;
});
},
methods: {
handleCurrentChange(val) {
console.log(`当前页: ${val}`);
this.page = val;
this.getTableList();
},
getTableList() {
list({
companyIdSelect: '',
timeStart: '2023-03-24 00:00:00',
timeEnd: '2023-03-24 23:59:59',
status: 0,
lineId: '',
voltageCode: '',
logicTowerId: '',
alarmInfo: '',
page: this.page,
rows: this.pageSize,
sort: 'alarmTime',
order: 'desc'
}).then((res) => {
console.log(res.data);
this.tableData = res.data.rows;
this.total = res.data.total;
this.photoPic = 'http://180.166.218.222:8104/media' + res.data.rows[0].photoPath;
});
},
handleSelectionChange(val) {
this.multipleSelection = val;
},
handleRowClick(row) {
//this.$refs.multipleTable.toggleRowSelection(row);
console.log(row);
this.photoPic = 'http://180.166.218.222:8104/media' + row.photoPath;
},
dateFormat(row, column) {
var date = row[column.property];
if (date == undefined) {
return '';
}
return moment(date).format('YYYY-MM-DD HH:mm:ss');
}
handleSelectionChange(val) {
this.multipleSelection = val;
},
created() {
this.getTableList();
}
handleRowClick(row) {
//this.$refs.multipleTable.toggleRowSelection(row);
console.log(row);
this.photoPic = "http://180.166.218.222:8104/media" + row.photoPath;
},
dateFormat(row, column) {
var date = row[column.property];
if (date == undefined) {
return "";
}
return moment(date).format("YYYY-MM-DD HH:mm:ss");
},
},
created() {
//this.getTableList();
},
};
</script>
<style lang="less">
.alarmHandBox {
width: 100%;
height: 100%;
background: @color-white;
.alarmTop {
padding: 16px 8px;
width: calc(100% - 32px);
height: calc(100% - 32px);
padding: 16px 16px;
background: #ffffff;
.alarmTop {
padding: 16px 8px;
}
.alarmContain {
display: flex;
height: calc(100% - 72px);
padding: 0px 8px;
.alarmTable {
width: 50%;
height: 100%;
}
.alarmContain {
display: flex;
height: calc(100% - 72px);
padding: 0px 8px;
.alarmTable {
width: 50%;
height: 100%;
}
.pageNation {
margin-top: 8px;
}
.alarmPic {
width: 50%;
height: 100%;
display: flex;
flex-direction: column;
justify-content: space-between;
.imgshow {
width: 100%;
height: 90%;
img {
width: 100%;
height: 100%;
}
}
.editorBtn {
margin-top: 8px;
border: 1px solid @border-color-base;
padding: 2%;
border-radius: 4px;
}
.editorBtn {
display: flex;
justify-content: flex-start;
}
.pageNation {
margin-top: 8px;
}
.alarmPic {
width: 50%;
height: 100%;
display: flex;
flex-direction: column;
justify-content: space-between;
.imgshow {
width: 100%;
height: 90%;
img {
width: 100%;
height: 100%;
}
}
.editorBtn {
margin-top: 8px;
border: 1px solid @border-color-base;
padding: 2%;
border-radius: 4px;
}
.editorBtn {
display: flex;
justify-content: flex-start;
}
}
}
}
</style>
</style>

@ -121,10 +121,9 @@ export default {
justify-content: center;
}
img {
width: auto;
height: auto;
max-width: 100%;
max-height: 100%;
width: 100%;
height: 100%;
object-fit: fill;
}
}
.swiper-button-prev.swiper-button-disabled,
@ -148,10 +147,8 @@ export default {
justify-content: center;
img {
width: auto;
height: auto;
max-width: 100%;
max-height: 100%;
width: 260px;
height: 160px;
}
}

@ -91,13 +91,16 @@
>
</el-table-column>
<el-table-column fixed="right" label="操作" width="160">
<el-table-column fixed="right" label="操作" width="260">
<template slot-scope="scope">
<el-button
@click.native.stop="handleRevisePhoto(scope.row)"
type="text"
>修改</el-button
>
<el-button type="text">装置复位</el-button>
<el-button type="text">远程升级</el-button>
<el-button
type="text"
class="deleteText"

@ -1,74 +1,76 @@
<template>
<div class="towerSide">
<el-tree
:data="data"
:expand-on-click-node="false"
:props="defaultProps"
@node-click="handleNodeClick"
default-expand-all
highlight-current
node-key="id"
:default-expanded-keys="expandDefault"
></el-tree>
</div>
<div class="towerSide">
<el-tree
:data="data"
:expand-on-click-node="false"
:props="defaultProps"
@node-click="handleNodeClick"
default-expand-all
highlight-current
node-key="id"
:default-expanded-keys="expandDefault"
></el-tree>
</div>
</template>
<script>
import bus from '../../../../../components/common/bus';
import { getListCompany } from '@/utils/api/index';
import bus from "../../../../../components/common/bus";
//import { getListCompany } from '@/utils/api/index';
export default {
data() {
return {
expandDefault: [], //
data: [],
defaultProps: {
children: 'children',
label: 'text'
}
};
},
//
watch: {
expandDefault(newVal, oldVal) {
if (newVal) {
this.$nextTick(() => {
document.querySelector('.el-tree-node__content').click();
});
}
}
data() {
return {
expandDefault: [], //
data: [],
defaultProps: {
children: "children",
label: "text",
},
};
},
//
watch: {
expandDefault(newVal, oldVal) {
if (newVal) {
this.$nextTick(() => {
document.querySelector(".el-tree-node__content").click();
});
}
},
},
created() {
getListCompany({
companyId: 'f7d966d1-f3d1-4802-946d-ad93e1ee1b9b',
lineName: ''
}).then((res) => {
//console.log(res.data);
this.expandDefault.push(res.data.$treeNodeId);
this.data = res.data;
});
created() {
// getListCompany({
// companyId: 'f7d966d1-f3d1-4802-946d-ad93e1ee1b9b',
// lineName: ''
// }).then((res) => {
// //console.log(res.data);
// this.expandDefault.push(res.data.$treeNodeId);
// this.data = res.data;
// });
},
methods: {
handleNodeClick(data) {
//console.log(data);
bus.$emit("nodeData", data);
},
methods: {
handleNodeClick(data) {
//console.log(data);
bus.$emit('nodeData', data);
}
}
},
};
</script>
<style lang="less">
.towerSide {
width: 234px;
height: 100%;
border-right: 1px solid @border-color-base;
//
.el-tree {
.el-tree-node__content {
height: 32px;
}
}
.el-tree--highlight-current .el-tree-node.is-current > .el-tree-node__content {
background-color: @color-primary;
color: @color-white;
width: 234px;
height: 100%;
border-right: 1px solid @border-color-base;
//
.el-tree {
.el-tree-node__content {
height: 32px;
}
}
.el-tree--highlight-current
.el-tree-node.is-current
> .el-tree-node__content {
background-color: @color-primary;
color: @color-white;
}
}
</style>
</style>

@ -1,58 +1,65 @@
<template>
<div class="towerTableMian">
<div class="towerBtnGroup">
<el-button type="primary">新增</el-button>
<el-button type="primary">批量添加</el-button>
<el-button type="primary">同T添加</el-button>
<el-button type="primary">修改</el-button>
<el-button type="primary">修改XL</el-button>
<el-button type="primary">批量修改属地化</el-button>
<div class="towerTableMian">
<div class="towerBtnGroup">
<el-button type="primary">新增</el-button>
<el-button type="primary">批量添加</el-button>
<el-button type="primary">同T添加</el-button>
<el-button type="primary">修改</el-button>
<el-button type="primary">修改XL</el-button>
<el-button type="primary">批量修改属地化</el-button>
<el-button type="primary">批量修改班组</el-button>
<el-button type="primary">删除</el-button>
<el-button type="primary">查询</el-button>
<el-button type="primary">导入</el-button>
<el-button type="primary">导入模板下载</el-button>
<el-button type="primary">导出</el-button>
<el-button type="primary">导入监拍点</el-button>
<el-button type="primary">监拍点导入模板</el-button>
<el-button type="primary">导出监拍点</el-button>
</div>
<div class="searchForm">
<el-form :inline="true" :model="formInline" class="demo-form-inline">
<el-form-item label="单位:">
<el-select v-model="formInline.region" placeholder="活动区域">
<el-option label="区域一" value="shanghai"></el-option>
<el-option label="区域二" value="beijing"></el-option>
</el-select>
</el-form-item>
<el-form-item label="DY等级:">
<el-select v-model="formInline.region" placeholder="活动区域">
<el-option label="区域一" value="shanghai"></el-option>
<el-option label="区域二" value="beijing"></el-option>
</el-select>
</el-form-item>
<el-form-item label="XL名称:">
<el-input v-model="formInline.user" placeholder="审批人"></el-input>
</el-form-item>
<el-form-item label="是否为采集">
<el-select v-model="formInline.region" placeholder="活动区域">
<el-option label="区域一" value="shanghai"></el-option>
<el-option label="区域二" value="beijing"></el-option>
</el-select>
</el-form-item>
<el-form-item label="PMS编号:">
<el-input v-model="formInline.user" placeholder="审批人"></el-input>
</el-form-item>
</el-form>
</div>
<el-table class="towerTable" :data="tableData" style="width: 100%" height="calc(100% - 154px)" v-loading="loading">
<el-table-column prop="company.organName" label="单位"> </el-table-column>
<el-table-column prop="line.lineName" label="XL名称"> </el-table-column>
<el-table-column prop="towerName" label="GT名称"> </el-table-column>
<el-table-column prop="date" label="排序"> </el-table-column>
<el-table-column prop="voltageLevelDict.name" label="DY等级"> </el-table-column>
<!-- <el-table-column prop="address" label="GT性质"> </el-table-column>
<el-button type="primary">批量修改班组</el-button>
<el-button type="primary">删除</el-button>
<el-button type="primary">查询</el-button>
<el-button type="primary">导入</el-button>
<el-button type="primary">导入模板下载</el-button>
<el-button type="primary">导出</el-button>
<el-button type="primary">导入监拍点</el-button>
<el-button type="primary">监拍点导入模板</el-button>
<el-button type="primary">导出监拍点</el-button>
</div>
<div class="searchForm">
<el-form :inline="true" :model="formInline" class="demo-form-inline">
<el-form-item label="单位:">
<el-select v-model="formInline.region" placeholder="活动区域">
<el-option label="区域一" value="shanghai"></el-option>
<el-option label="区域二" value="beijing"></el-option>
</el-select>
</el-form-item>
<el-form-item label="DY等级:">
<el-select v-model="formInline.region" placeholder="活动区域">
<el-option label="区域一" value="shanghai"></el-option>
<el-option label="区域二" value="beijing"></el-option>
</el-select>
</el-form-item>
<el-form-item label="XL名称:">
<el-input v-model="formInline.user" placeholder="审批人"></el-input>
</el-form-item>
<el-form-item label="是否为采集">
<el-select v-model="formInline.region" placeholder="活动区域">
<el-option label="区域一" value="shanghai"></el-option>
<el-option label="区域二" value="beijing"></el-option>
</el-select>
</el-form-item>
<el-form-item label="PMS编号:">
<el-input v-model="formInline.user" placeholder="审批人"></el-input>
</el-form-item>
</el-form>
</div>
<el-table
class="towerTable"
:data="tableData"
style="width: 100%"
height="calc(100% - 154px)"
v-loading="loading"
>
<el-table-column prop="company.organName" label="单位"> </el-table-column>
<el-table-column prop="line.lineName" label="XL名称"> </el-table-column>
<el-table-column prop="towerName" label="GT名称"> </el-table-column>
<el-table-column prop="date" label="排序"> </el-table-column>
<el-table-column prop="voltageLevelDict.name" label="DY等级">
</el-table-column>
<!-- <el-table-column prop="address" label="GT性质"> </el-table-column>
<el-table-column prop="date" label="GT状态"> </el-table-column>
<el-table-column prop="name" label="GT材质"> </el-table-column>
<el-table-column prop="address" label="位置描述"> </el-table-column>
@ -62,164 +69,164 @@
<el-table-column prop="date" label="属地单位"> </el-table-column>
<el-table-column prop="name" label="PMS逻辑GT编码"> </el-table-column>
<el-table-column prop="address" label="PMS物理GT编码"> </el-table-column> -->
<!-- <el-table-column label="操作">
<!-- <el-table-column label="操作">
<template slot-scope="scope">
<el-button @click="handleClick(scope.row)" type="text" size="small">查看</el-button>
<el-button type="text" size="small">编辑</el-button>
</template>
</el-table-column> -->
</el-table>
<div class="pageNation">
<el-pagination
@current-change="handleCurrentChange"
:current-page="page"
:page-size="pageSize"
layout=" prev, pager, next, jumper,total"
:total="total"
>
</el-pagination>
</div>
</el-table>
<div class="pageNation">
<el-pagination
@current-change="handleCurrentChange"
:current-page="page"
:page-size="pageSize"
layout=" prev, pager, next, jumper,total"
:total="total"
>
</el-pagination>
</div>
</template>
</div>
</template>
<script>
import bus from '../../../../../components/common/bus';
import { getTowerList } from '@/utils/api/index';
import bus from "../../../../../components/common/bus";
//import { getTowerList } from '@/utils/api/index';
export default {
data() {
return {
tableData: [],
formInline: {
user: '',
region: ''
},
loading: true,
companyId: '',
page: 1, //
pageSize: 20, //
total: 0 //
};
data() {
return {
tableData: [],
formInline: {
user: "",
region: "",
},
loading: true,
companyId: "",
page: 1, //
pageSize: 20, //
total: 0, //
};
},
created() {
// this.loading = true;
// getTowerList({
// organId: 'f7d966d1-f3d1-4802-946d-ad93e1ee1b9b',
// towerName: '',
// towerNature: '',
// towerTexture: '',
// status: '',
// cConfig: '',
// page: this.page,
// rows: this.pageSize
// }).then((res) => {
// console.log(res);
// this.tableData = res.data.rows;
// this.total = res.data.total;
// this.loading = false;
// });
},
mounted() {
bus.$on("nodeData", (data) => {
// console.log(data);
this.loading = true;
if (data.dataType == "company") {
this.getLevelOne(data);
} else if (data.dataType == "dict") {
this.getLevelTwo(data);
} else if (data.dataType == "line") {
this.getLevelThree(data);
}
//this.getTable(data);
});
},
methods: {
//
getLevelOne(data) {
getTowerList({
organId: data.id,
towerName: "",
towerNature: "",
towerTexture: "",
status: "",
cConfig: "",
page: this.page,
rows: this.pageSize,
}).then((res) => {
//console.log(res);
this.tableData = res.data.rows;
this.total = res.data.total;
this.loading = false;
});
},
created() {
// this.loading = true;
// getTowerList({
// organId: 'f7d966d1-f3d1-4802-946d-ad93e1ee1b9b',
// towerName: '',
// towerNature: '',
// towerTexture: '',
// status: '',
// cConfig: '',
// page: this.page,
// rows: this.pageSize
// }).then((res) => {
// console.log(res);
// this.tableData = res.data.rows;
// this.total = res.data.total;
// this.loading = false;
// });
//
getLevelTwo(data) {
getTowerList({
voltageLevel: data.id,
companyId: "f7d966d1-f3d1-4802-946d-ad93e1ee1b9b",
towerName: "",
towerNature: "",
towerTexture: "",
status: "",
cConfig: "",
page: this.page,
rows: this.pageSize,
}).then((res) => {
// console.log(res);
this.tableData = res.data.rows;
this.total = res.data.total;
this.loading = false;
});
},
mounted() {
bus.$on('nodeData', (data) => {
// console.log(data);
this.loading = true;
if (data.dataType == 'company') {
this.getLevelOne(data);
} else if (data.dataType == 'dict') {
this.getLevelTwo(data);
} else if (data.dataType == 'line') {
this.getLevelThree(data);
}
//this.getTable(data);
});
//
getLevelThree(data) {
getTowerList({
lineId: data.id,
towerName: "",
towerNature: "",
towerTexture: "",
status: "",
cConfig: "",
page: this.page,
rows: this.pageSize,
}).then((res) => {
//console.log(res);
this.tableData = res.data.rows;
this.total = res.data.total;
this.loading = false;
});
},
methods: {
//
getLevelOne(data) {
getTowerList({
organId: data.id,
towerName: '',
towerNature: '',
towerTexture: '',
status: '',
cConfig: '',
page: this.page,
rows: this.pageSize
}).then((res) => {
//console.log(res);
this.tableData = res.data.rows;
this.total = res.data.total;
this.loading = false;
});
},
//
getLevelTwo(data) {
getTowerList({
voltageLevel: data.id,
companyId: 'f7d966d1-f3d1-4802-946d-ad93e1ee1b9b',
towerName: '',
towerNature: '',
towerTexture: '',
status: '',
cConfig: '',
page: this.page,
rows: this.pageSize
}).then((res) => {
// console.log(res);
this.tableData = res.data.rows;
this.total = res.data.total;
this.loading = false;
});
},
//
getLevelThree(data) {
getTowerList({
lineId: data.id,
towerName: '',
towerNature: '',
towerTexture: '',
status: '',
cConfig: '',
page: this.page,
rows: this.pageSize
}).then((res) => {
//console.log(res);
this.tableData = res.data.rows;
this.total = res.data.total;
this.loading = false;
});
},
handleCurrentChange(val) {
console.log(`当前页: ${val}`);
this.page = val;
}
}
handleCurrentChange(val) {
console.log(`当前页: ${val}`);
this.page = val;
},
},
};
</script>
<style lang="less">
.towerTableMian {
flex: 1;
min-width: 0;
.towerBtnGroup {
padding: 16px 8px;
}
.searchForm {
padding: 0px 8px;
.el-form {
.el-form-item {
margin-bottom: 0px;
.el-select,
.el-input {
width: 100px;
}
}
flex: 1;
min-width: 0;
.towerBtnGroup {
padding: 16px 8px;
}
.searchForm {
padding: 0px 8px;
.el-form {
.el-form-item {
margin-bottom: 0px;
.el-select,
.el-input {
width: 100px;
}
}
}
.towerTable {
margin-top: 12px;
//padding: 16px 8px 0 8px;
}
.pageNation {
margin-top: 8px;
}
}
.towerTable {
margin-top: 12px;
//padding: 16px 8px 0 8px;
}
.pageNation {
margin-top: 8px;
}
}
</style>
</style>

@ -1,221 +1,368 @@
<template>
<div class="picRotation">
<div class="picHead">
<div class="pageNation">
<el-pagination
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page="page"
:page-size="pageSize"
layout=" prev, pager, next, jumper,total"
:total="total"
>
</el-pagination>
</div>
<div class="buttonGroup">
<el-button type="primary" @click="toggleCountdown">{{ isRuning ? '' : '' }}</el-button>
<el-button type="primary">全屏</el-button>
<el-button type="primary">设置</el-button>
<el-button type="primary">轮询条件</el-button>
<el-select v-model="value" placeholder="请选择">
<el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value"> </el-option>
</el-select>
<span class="info">
<b> {{ isRuning ? remainingTime : '已暂停' }} </b>
</span>
</div>
</div>
<div class="imageCenter">
<div class="imgList" v-for="(item, index) in picList" :key="index">
<img :src="basUrl + item.filePath" />
<p class="infoTop">{{ item.lineName }}-{{ item.towerName }}-{{ item.orientationName }}</p>
<p class="infoBottom">{{ item.captureTime }}</p>
</div>
</div>
<div class="picRotation">
<div class="picHead">
<div class="pageNation">
<el-pagination
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page="page"
:page-size="pageSize"
layout=" prev, pager, next, jumper,total"
:total="total"
>
</el-pagination>
</div>
<div class="buttonGroup">
<el-button type="primary" @click="toggleCountdown">{{
isRuning ? "暂停轮巡" : "开始轮巡"
}}</el-button>
<el-button type="primary">设置</el-button>
<el-button type="primary">轮询条件</el-button>
<el-select v-model="value" placeholder="请选择">
<el-option
v-for="item in options"
:key="item.value"
:label="item.label"
:value="item.value"
>
</el-option>
</el-select>
<span class="info">
<b> {{ isRuning ? remainingTime : "已暂停" }} </b>
</span>
</div>
</div>
<div class="imageCenter">
<div class="imgList" v-for="(item, index) in picList" :key="index">
<img :src="item.path" />
<p class="infoTop">
{{ item.channelId }}-{{ item.termId }}-{{ item.fileSize }}
</p>
<p class="infoBottom">{{ item.photoTime }}</p>
</div>
</div>
</div>
</template>
<script>
import { picLoop } from '@/utils/api/index';
import qs from 'qs';
//import { picLoop } from "@/utils/api/index";
import qs from "qs";
export default {
data() {
return {
options: [
{
value: '选项1',
label: '顺序'
},
{
value: '选项2',
label: '倒序'
}
],
value: '选项1',
page: 1, //
pageSize: 4, //
totalPage: 0, //
total: 0, //
picList: [], //
basUrl: '',
totalTime: 15, //
remainingTime: 15, //
isRuning: false,
timer: null
};
data() {
return {
options: [
{
value: "选项1",
label: "顺序",
},
{
value: "选项2",
label: "倒序",
},
],
value: "选项1",
page: 1, //
pageSize: 4, //
totalPage: 0, //
total: 0, //
picList: [], //
basUrl: "",
totalTime: 15, //
remainingTime: 15, //
isRuning: false,
timer: null,
};
},
methods: {
handleSizeChange(val) {
console.log(`每页 ${val}`);
},
methods: {
handleSizeChange(val) {
console.log(`每页 ${val}`);
handleCurrentChange(val) {
console.log(`当前页: ${val}`);
this.isRuning = false;
this.pauseCountdown();
this.page = val;
this.getPicData();
},
//
getPicData() {
this.picList = [
{
id: 15,
termId: 10010,
channelId: 1,
presetId: 255,
width: 0,
height: 0,
fileSize: 265357,
photoTime: "2023-05-05T17:21:04.000+00:00",
recvTime: null,
path: "http://47.96.238.157/photos/2023/05/06/64/XYIGQ10C221000064_1_FF_20230506012104.jpg",
manualRequest: 0,
},
handleCurrentChange(val) {
console.log(`当前页: ${val}`);
this.isRuning = false;
this.pauseCountdown();
this.page = val;
this.getPicData();
{
id: 16,
termId: 10010,
channelId: 1,
presetId: 255,
width: 0,
height: 0,
fileSize: 263597,
photoTime: "2023-05-05T17:21:49.000+00:00",
recvTime: null,
path: "http://47.96.238.157/photos/2023/05/06/64/XYIGQ10C221000064_1_FF_20230506012149.jpg",
manualRequest: 0,
},
//
getPicData() {
picLoop({ rows: this.pageSize, page: this.page }).then((res) => {
console.log(res.data);
this.total = res.data.total; //
this.totalPage = Math.ceil(this.total / this.pageSize); //
this.picList = res.data.rows; //
this.basUrl = res.data.photoserver; //
});
{
id: 17,
termId: 10010,
channelId: 1,
presetId: 255,
width: 0,
height: 0,
fileSize: 265471,
photoTime: "2023-05-05T17:25:13.000+00:00",
recvTime: null,
path: "http://47.96.238.157/photos/2023/05/06/64/XYIGQ10C221000064_1_FF_20230506012513.jpg",
manualRequest: 0,
},
//
startCountdown() {
this.timer = setInterval(() => {
if (this.remainingTime <= 0) {
//0
clearInterval(this.timer);
this.remainingTime = this.totalTime;
this.startCountdown();
this.page++;
this.getPicData();
console.log(this.page);
if (this.page > this.totalPage) {
clearInterval(this.timer);
alert('最后一页了');
this.page = 1;
this.startCountdown();
this.getPicData();
}
} else {
this.remainingTime--;
}
}, 1000);
{
id: 18,
termId: 10010,
channelId: 1,
presetId: 255,
width: 0,
height: 0,
fileSize: 263625,
photoTime: "2023-05-05T17:36:37.000+00:00",
recvTime: null,
path: "http://47.96.238.157/photos/2023/05/06/64/XYIGQ10C221000064_1_FF_20230506013617.jpg",
manualRequest: 0,
},
//
pauseCountdown() {
clearInterval(this.timer); //
{
id: 19,
termId: 10010,
channelId: 1,
presetId: 255,
width: 0,
height: 0,
fileSize: 261572,
photoTime: "2023-05-05T17:37:14.000+00:00",
recvTime: null,
path: "http://47.96.238.157/photos/2023/05/06/64/XYIGQ10C221000064_1_FF_20230506013654.jpg",
manualRequest: 0,
},
{
id: 22,
termId: 10010,
channelId: 1,
presetId: 255,
width: 0,
height: 0,
fileSize: 264348,
photoTime: "2023-05-05T17:40:06.000+00:00",
recvTime: null,
path: "http://47.96.238.157/photos/2023/05/06/64/XYIGQ10C221000064_1_FF_20230506013946.jpg",
manualRequest: 0,
},
{
id: 23,
termId: 10010,
channelId: 1,
presetId: 255,
width: 0,
height: 0,
fileSize: 262231,
photoTime: "2023-05-05T17:42:33.000+00:00",
recvTime: null,
path: "http://47.96.238.157/photos/2023/05/06/64/XYIGQ10C221000064_1_FF_20230506014213.jpg",
manualRequest: 0,
},
{
id: 24,
termId: 10010,
channelId: 1,
presetId: 255,
width: 0,
height: 0,
fileSize: 262564,
photoTime: "2023-05-05T17:43:11.000+00:00",
recvTime: null,
path: "http://47.96.238.157/photos/2023/05/06/64/XYIGQ10C221000064_1_FF_20230506014252.jpg",
manualRequest: 0,
},
//isRuning
toggleCountdown() {
if (this.isRuning) {
this.pauseCountdown();
} else {
this.startCountdown();
this.getPicData();
}
this.isRuning = !this.isRuning;
{
id: 26,
termId: 10010,
channelId: 2,
presetId: 255,
width: 0,
height: 0,
fileSize: 177557,
photoTime: "2023-05-05T17:46:23.000+00:00",
recvTime: null,
path: "http://47.96.238.157/photos/2023/05/06/64/XYIGQ10C221000064_2_FF_20230506014604.jpg",
manualRequest: 0,
},
{
id: 37,
termId: 10010,
channelId: 2,
presetId: 255,
width: 0,
height: 0,
fileSize: 219467,
photoTime: "2023-05-05T17:47:31.000+00:00",
recvTime: null,
path: "http://47.96.238.157/photos/2023/05/06/64/XYIGQ10C221000064_2_FF_20230506014711.jpg",
manualRequest: 0,
},
{
id: 89,
termId: 10010,
channelId: 2,
presetId: 255,
width: 0,
height: 0,
fileSize: 257854,
photoTime: "2023-05-06T00:54:07.000+00:00",
recvTime: null,
path: "http://47.96.238.157/photos/2023/05/06/64/XYIGQ10C221000064_2_FF_20230506085401.jpg",
manualRequest: 0,
},
];
},
//
startCountdown() {
this.timer = setInterval(() => {
if (this.remainingTime <= 0) {
//0
clearInterval(this.timer);
this.remainingTime = this.totalTime;
this.startCountdown();
this.page++;
this.getPicData();
console.log(this.page);
if (this.page > this.totalPage) {
clearInterval(this.timer);
//alert("");
this.page = 1;
this.startCountdown();
this.getPicData();
}
} else {
this.remainingTime--;
}
}, 1000);
},
//
pauseCountdown() {
clearInterval(this.timer); //
},
computed: {},
mounted() {
this.toggleCountdown();
//isRuning
toggleCountdown() {
if (this.isRuning) {
this.pauseCountdown();
} else {
this.startCountdown();
this.getPicData();
}
this.isRuning = !this.isRuning;
},
created() {},
},
computed: {},
mounted() {
//this.toggleCountdown();
},
created() {},
beforeDestroy() {
console.log('销毁定时器');
clearInterval(this.timer);
this.timer = null;
}
beforeDestroy() {
console.log("销毁定时器");
clearInterval(this.timer);
this.timer = null;
},
};
</script>
<style lang="less">
.picRotation {
height: calc(100% - 8px);
width: 100%;
background: @color-white;
//background: #fcc;
.picHead {
display: flex;
align-items: center;
justify-content: space-between;
padding: 8px 0px;
.buttonGroup {
display: flex;
.el-select {
margin-left: 10px;
width: 100px;
}
.info {
width: 80px;
text-align: center;
margin-left: 16px;
line-height: 32px;
b {
font-size: 24px;
font-weight: normal;
color: @color-success;
vertical-align: middle;
}
}
width: calc(100% - 32px);
height: calc(100% - 32px);
padding: 16px 16px;
background: #ffffff;
.picHead {
display: flex;
align-items: center;
justify-content: space-between;
padding: 0px 0px 8px 0px;
.buttonGroup {
display: flex;
.el-select {
margin-left: 10px;
width: 100px;
}
.info {
width: 80px;
text-align: center;
margin-left: 16px;
line-height: 32px;
b {
font-size: 24px;
font-weight: normal;
color: @color-success;
vertical-align: middle;
}
}
}
}
.imageCenter {
display: flex;
// justify-content: space-around;
flex-wrap: wrap;
height: calc(100% - 52px);
.imgList {
width: 49.4%;
position: relative;
display: inline-block;
margin-right: 0.25%;
margin-left: 0.25%;
position: relative;
-moz-border-radius: 3px;
-webkit-border-radius: 3px;
border-radius: 3px px;
height: 49%;
.imageCenter {
display: flex;
// justify-content: space-around;
flex-wrap: wrap;
height: calc(100% - 52px);
.imgList {
width: 49.4%;
position: relative;
display: inline-block;
margin-right: 0.25%;
margin-left: 0.25%;
margin-top: 0.3%;
position: relative;
-moz-border-radius: 3px;
-webkit-border-radius: 3px;
border-radius: 3px px;
height: 49%;
img {
width: 100%;
height: 100%;
}
.infoTop {
position: absolute;
bottom: 28px;
left: 0px;
font-size: 15px;
background-color: #3a87ad !important;
color: @color-white;
font-weight: normal;
margin-top: 2px;
padding-left: 5px;
padding-right: 5px;
}
.infoBottom {
position: absolute;
bottom: 4px;
color: @color-white;
left: 0px;
font-size: 15px;
background-color: #51b17c !important;
font-weight: normal;
margin-top: 2px;
padding-left: 5px;
padding-right: 5px;
}
}
img {
width: 100%;
height: 100%;
}
.infoTop {
position: absolute;
bottom: 28px;
left: 0px;
font-size: 15px;
background-color: #3a87ad !important;
color: @color-white;
font-weight: normal;
margin-top: 2px;
padding-left: 5px;
padding-right: 5px;
}
.infoBottom {
position: absolute;
bottom: 4px;
color: @color-white;
left: 0px;
font-size: 15px;
background-color: #51b17c !important;
font-weight: normal;
margin-top: 2px;
padding-left: 5px;
padding-right: 5px;
}
}
}
}
</style>
</style>

@ -55,6 +55,7 @@
v-model="channelValue"
placeholder="请选择"
@change="changeChannelId"
multiple
>
<el-option
v-for="item in channelOption"
@ -65,57 +66,57 @@
</el-option>
</el-select>
</div>
<!-- <div class="GPSItemBox">
<h3>当前GPS状态</h3>
<el-select
v-model="channelValue"
placeholder="请选择"
@change="changeChannelId"
>
<el-option
v-for="item in channelOption"
:key="item.value"
:label="item.label"
:value="item.value"
>
</el-option>
</el-select>
</div> -->
<div class="setTimebtn">
<h3>操作项</h3>
<div class="buttonGroup">
<el-button type="primary" @click.native.stop="handleSetSchedule()"
>时间表设置</el-button
>
<el-button type="primary" @click="handleShowErr"
<el-button type="primary" @click="handleShowPic"
>手动拍照</el-button
>
<el-button type="primary" @click="handleShowGPS"
>获取GPS位置</el-button
>
<el-button type="primary" @click="handleShowErr">
装置信息</el-button
>
<el-dropdown
class="dropgps"
trigger="click"
@command="handleCommand"
>
<el-button type="primary">
GPS开关<i class="el-icon-arrow-down el-icon--right"></i>
</el-button>
<el-dropdown-menu slot="dropdown">
<el-dropdown-item command="open">开启GPS</el-dropdown-item>
<el-dropdown-item command="close">关闭GPS</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
<el-button type="primary" @click="handleShowErr"
>声光报警</el-button
>
<el-button type="primary" @click="handleShowErr"
>装置复位</el-button
>历史图片</el-button
>
<!-- <el-button type="primary" @click="handlePanel"
>图片标记</el-button
> -->
<!-- <el-button type="primary" @click="handleShowErr"
>监拍点信息</el-button
> -->
<el-button type="primary" @click="handleShowErr">
装置信息</el-button
>
<!-- -->
<!--
<el-button type="primary" @click="handleUpGrade"
>远程升级</el-button
>
> -->
</div>
</div>
</div>
</div>
<setschedule ref="setschedule_ref"></setschedule>
<!-- 装置升级 -->
<deviceUpgrade ref="deviceupgrade_ref"></deviceUpgrade>
<!-- <deviceUpgrade ref="deviceupgrade_ref"></deviceUpgrade> -->
<!-- 绘制图片 -->
<pictureTags ref="pictureTags_ref"></pictureTags>
</div>
@ -127,13 +128,14 @@ import {
getdyTreeListJoggle,
getChannelByTermidJoggle,
getTerminalPhotoListJoggle,
getTermGPSJoggle,
setTermGPSJoggle,
getLatestPhotoJoggle,
} from "@/utils/api/index";
import carouselChart from "../components/carouselChart.vue";
import setschedule from "./components/setschedule.vue";
import deviceUpgrade from "./components/deviceUpgrade.vue";
import pictureTags from "./components/pictureTags.vue";
export default {
components: {
carouselChart,
@ -152,15 +154,27 @@ export default {
label: "name",
},
currentNodekey: "", //,
channelId: "", //id
cmdid: "", //id,
id: "", //id
channelList: "", //
channelOption: [], //
channelValue: "",
channelValue: [],
terminalPhoto: [], //
dateValue: "", //
nopicPath: require("@/assets/img/nopic.jpg"),
loadingBg: true,
loading: true,
GPSValue: "",
GpsOption: [
{
value: "1",
label: "开启",
},
{
value: "0",
label: "关闭",
},
],
};
},
watch: {},
@ -169,7 +183,6 @@ export default {
created() {
this.getLineTreeList();
this.getDateTime();
console.log(this.dateValue);
},
methods: {
//
@ -178,7 +191,6 @@ export default {
},
//
changedate() {
console.log(this.dateValue);
console.log(this.channelList);
this.getTerminalPhotoList(
this.channelList[0].channelid,
@ -197,12 +209,14 @@ export default {
if (this.lineTreeData[0].list[0].list.length > 0) {
this.currentNodekey = this.lineTreeData[0].list[0].list[0].id; //
console.log(this.currentNodekey);
this.cmdid = this.lineTreeData[0].list[0].list[0].cmdid;
console.log(this.cmdid);
this.$nextTick(() => {
this.$refs.tree.setCurrentKey(this.currentNodekey); //
console.log(this.currentNodekey);
this.channelId = this.currentNodekey;
console.log(this.channelId);
this.getChannelList(this.channelId); //id
this.id = this.currentNodekey;
console.log(this.id);
this.getChannelList(this.id); //id
});
}
this.loadingBg = false;
@ -228,11 +242,11 @@ export default {
console.log(res);
this.channelList = res.data.list;
console.log(this.channelList);
this.getTerminalPhotoList(
this.channelList[0].channelid,
this.dateValue,
this.channelList[0].termId
); // id termid
// this.getTerminalPhotoList(
// this.channelList[0].channelid,
// this.dateValue,
// this.channelList[0].termId
// ); // id termid
this.channelOption = [];
this.channelList.forEach((item) => {
this.channelOption.push({
@ -299,20 +313,78 @@ export default {
});
},
//
handleUpGrade() {
this.$refs.deviceupgrade_ref.display();
// handleUpGrade() {
// this.$refs.deviceupgrade_ref.display();
// },
//gps
changeGPS(val) {
console.log(val);
setTermGPSJoggle({ gpsstatus: val, termid: this.channelId })
.then((res) => {
console.log(res);
if (val == 0) {
this.$message("关闭GPS");
} else {
this.$message({
message: "成功开启GPS",
type: "success",
});
}
})
.catch((err) => {
console.log(err); //
});
},
handleCommand(command) {
switch (command) {
case "open": //
this.changeGPS(1);
break;
case "close": //
this.changeGPS(0);
break;
}
},
//GPS
handleShowGPS() {
this.$alert("这是一段内容", "标题名称", {
confirmButtonText: "确定",
callback: (action) => {
this.$message({
type: "info",
message: `action: ${action}`,
});
},
});
getTermGPSJoggle({ termId: this.channelId })
.then((res) => {
console.log(res);
this.$alert(
"<p><label>经度:</label><span>" +
`${res.data.longitude}` +
"</span></p><p><label>纬度:</label><span>" +
`${res.data.latitude}` +
"</span></p><p><label>半径:</label><span>" +
`${res.data.radius}` +
"</span></p>",
"GPS位置",
{
dangerouslyUseHTMLString: true,
customClass: "messageGps",
}
);
})
.catch((err) => {
console.log(err); //
});
},
//
handleShowPic() {
console.log(this.channelId);
console.log(this.cmdid);
getLatestPhotoJoggle({
captureType: 0,
channel: this.channelId,
cmdid: this.cmdid,
preset: 255,
})
.then((res) => {
console.log(res);
})
.catch((err) => {
console.log(err); //
});
},
//
handlePanel() {
@ -347,11 +419,6 @@ export default {
overflow: auto;
padding: 16px 0px;
.el-tree {
.custom-tree-node {
.iconfont {
// color: #666;
}
}
.el-tree-node__content {
height: 40px;
font-size: 12px;
@ -419,4 +486,18 @@ export default {
}
}
}
.messageGps {
.el-message-box__message {
p {
line-height: 32px;
font-size: 16px;
label {
margin-right: 4px;
}
span {
color: #333;
}
}
}
}
</style>

@ -0,0 +1,17 @@
<template>
<div class="realTimeSearch">查询展示图片</div>
</template>
<script>
export default {
data() {
return {};
},
methods: {},
created() {},
};
</script>
<style lang="less">
.realTimeSearch {
}
</style>

@ -0,0 +1,502 @@
<template>
<div class="stritlBox">
<div class="stritl_left">
<div class="strLeftTop">
<h3>{{ numberUnits.name }}</h3>
<bar
v-if="flag.baizhang"
:legendData="unitXData"
:seriesData="unitYData"
:boxStyle="numberUnits.boxStyle"
></bar>
</div>
<div class="strLeftMid">
<h3>{{ hazardClass.name }}</h3>
<pie
v-if="flag.baizhang"
:pieData="hazardPieData"
:boxStyle="hazardClass.boxStyle"
></pie>
</div>
<div class="strLeftBottom">
<h3>{{ monitLine.name }}</h3>
<bar
v-if="flag.baizhang"
:legendData="lineXData"
:seriesData="lineYData"
:boxStyle="monitLine.boxStyle"
></bar>
</div>
</div>
<div class="stritl_center">
<div class="strCenterTop">
<mapChart></mapChart>
</div>
<div class="strCenterbottom">
<div class="bottomL">
<h3>{{ hazardType.name }}</h3>
<horizontalBar
:legendData="hazardTypeXData"
:seriesData="hazardTypeYData"
:boxStyle="hazardType.boxStyle"
></horizontalBar>
</div>
<div class="bottomM">
<h3>{{ deviceInfo.name }}</h3>
<div class="infoBox">
<p>
<span>在运数</span>
<span>{{ infoData.deviceCount }}</span>
</p>
<p>
<span>在线数</span>
<span>{{ infoData.hasPhotoCount }}</span>
</p>
<p>
<span>杆塔覆盖率</span>
<span>{{ infoData.deviceCoverage }}%</span>
</p>
<p>
<span>在线率</span>
<span>{{ infoData.hasPhotoRate }}%</span>
</p>
</div>
</div>
<div class="bottomR">
<h3>{{ deviceOnline.name }}</h3>
<pie
:pieData="deviceOnline.onlineData"
:boxStyle="deviceOnline.boxStyle"
></pie>
</div>
</div>
</div>
<div class="stritl_right">
<div class="strRightTop">
<h3>线路分布(总计5)</h3>
<div class="tableBox">
<el-table :data="lineAllData" style="width: 100%">
<el-table-column
prop="voltageLevelStr"
label="电压等级"
align="center"
>
</el-table-column>
<el-table-column prop="lineCount" label="线路数" align="center">
</el-table-column>
<el-table-column prop="towerCount" label="安装数" align="center">
</el-table-column>
<el-table-column
prop="deviceCoverage"
label="安装覆盖率"
align="center"
>
</el-table-column>
</el-table>
</div>
</div>
<!-- <div class="strRightMid">5</div> -->
<div class="strRightBottom">
<h3>{{ patrolOpinions.name }}</h3>
<div class="suggest">
<p class="attention"><span>注意</span>{{ patrolOpinions.month }}</p>
<p class="info">
<span>{{ patrolOpinions.info1 }}</span>
<span>{{ patrolOpinions.info2 }}</span>
</p>
</div>
<h4>往年同期隐患比例分布图</h4>
<radar
:radarName="radarName"
:radarValue="radarValue"
:boxStyle="patrolOpinions.boxStyle"
:radarTitle="radarTitle"
></radar>
</div>
</div>
</div>
</template>
<script>
import bar from "./chartFiles/bar";
import horizontalBar from "./chartFiles/horizontalBar";
import pie from "./chartFiles/pie";
import radar from "./chartFiles/radar";
import mapChart from "./chartFiles/mapChart";
import {
getLineDataByVoltage,
getCapturePointDataByDanger,
getHostDeviceDataByVoltage,
getPhotoAlarmDataByAlarmType,
getCompanyDeviceInfo,
getByName,
getLastYearAlarmReasons,
} from "@/utils/api/index";
export default {
data() {
return {
name: localStorage.getItem("ms_username"),
flag: {
baizhang: false, //
},
//
unitAllData: [],
unitXData: [],
unitYData: [],
numberUnits: {
name: "装置数量统计",
boxStyle: {
width: "100%",
height: "200px",
},
},
//线
lineAllData: [],
lineXData: [],
lineYData: [],
monitLine: {
name: "监控路线统计",
boxStyle: {
width: "100%",
height: "200px",
},
},
//
hazardData: [],
hazardPieData: [],
hazardClass: {
name: "隐患分类统计",
boxStyle: {
width: "100%",
height: "200px",
},
},
//
hazardTypeData: [],
hazardTypeXData: [],
hazardTypeYData: [],
hazardType: {
name: "隐患类型统计",
boxStyle: {
width: "100%",
height: "160px",
},
},
//
infoData: [],
deviceInfo: {
name: "装置信息统计",
infoData: [
{ value: 24, name: "在运数" },
{ value: 10, name: "在线数" },
{ value: "92.31%", name: "杆塔覆盖率" },
{ value: "41.67%", name: "在线率" },
],
},
deviceOnline: {
name: "装置在线统计",
onlineData: [
{ value: 55, name: "离线" },
{ value: 45, name: "在线" },
],
boxStyle: {
width: "100%",
height: "160px",
},
},
//
patrolData: [],
radarName: [],
radarValue: [],
radarTitle: "隐患比例分布图",
patrolOpinions: {
name: "巡查意见",
month: "三月份",
info1: "1.鸟类活动开展频繁,需注意鸟类筑巢,大型鸟类驻留。",
info2:
"2.大风天气较多的季节,要注意对放风筝行为的监控,同时加强巡视对导线悬挂异物的观察。",
boxStyle: {
width: "100%",
height: "160px",
},
},
};
},
components: {
bar,
horizontalBar,
pie,
radar,
mapChart,
},
computed: {
role() {
return this.name === "admin" ? "超级管理员" : "普通用户";
},
},
methods: {},
created() {
//
getHostDeviceDataByVoltage({
companyId: "f7d966d1-f3d1-4802-946d-ad93e1ee1b9b",
}).then((res) => {
this.unitAllData = res.data.data;
for (var i = 0; i < this.unitAllData.length; i++) {
this.unitXData.push(this.unitAllData[i].name);
this.unitYData.push(this.unitAllData[i].value);
}
this.flag.baizhang = true;
});
//
getCompanyDeviceInfo({
companyId: "f7d966d1-f3d1-4802-946d-ad93e1ee1b9b",
}).then((res) => {
this.infoData = res.data;
});
//线
getLineDataByVoltage({
companyId: "f7d966d1-f3d1-4802-946d-ad93e1ee1b9b",
}).then((res) => {
this.lineAllData = res.data;
console.log(this.lineAllData);
for (var i = 0; i < this.lineAllData.length; i++) {
this.lineXData.push(this.lineAllData[i].voltageLevelStr);
this.lineYData.push(this.lineAllData[i].lineCount);
}
this.flag.baizhang = true;
});
//
getCapturePointDataByDanger({
companyId: "f7d966d1-f3d1-4802-946d-ad93e1ee1b9b",
}).then((res) => {
this.hazardData = res.data;
// let name1 = this.hazardData.nameList;
// let value1 = this.hazardData.valueList;
this.hazardPieData = res.data.list;
console.log(this.hazardPieData);
this.flag.baizhang = true;
});
//
getPhotoAlarmDataByAlarmType({
companyId: "f7d966d1-f3d1-4802-946d-ad93e1ee1b9b",
}).then((res) => {
this.hazardTypeData = res.data.dataList;
for (var i = 0; i < this.hazardTypeData.length; i++) {
this.hazardTypeXData.push(this.hazardTypeData[i].name);
this.hazardTypeYData.push(this.hazardTypeData[i].acount);
}
this.flag.baizhang = true;
});
//
getByName({
name: "三月",
}).then((res) => {
console.log(res);
});
//
getLastYearAlarmReasons({
companyId: "f7d966d1-f3d1-4802-946d-ad93e1ee1b9b",
month: "04",
}).then((res) => {
console.log(res);
this.patrolData = res.data;
console.log(this.patrolData);
let obj = {};
this.patrolData.forEach((item) => {
if (obj.hasOwnProperty(item.alarmInfo)) {
obj[item.alarmInfo] += item.num;
} else {
obj[item.alarmInfo] = item.num;
}
});
console.log(obj);
this.radarValue = Object.values(obj);
console.log(this.radarValue);
let max = Math.max(...this.radarValue);
//
console.log(max);
for (let i in obj) {
console.log(i);
this.radarName.push({
name: i,
max: max,
});
}
console.log(this.radarName);
});
},
};
</script>
<style lang="less">
.stritlBox {
width: 100%;
height: 100%;
display: flex;
.stritl_left,
.stritl_right {
width: 20%;
margin: 8px;
}
.stritl_left,
.stritl_right {
display: flex;
flex-direction: column;
justify-content: space-between;
.strLeftTop,
.strLeftMid,
.strLeftBottom {
height: 30%;
box-sizing: content-box;
box-shadow: @box-shadow-basic;
border: 1px solid @border-color-base;
background-color: @color-white;
border-radius: 4px;
padding: 8px;
h3 {
margin-bottom: 8px;
font-size: 15px;
}
}
.strRightTop,
.strRightBottom {
height: 46%;
box-sizing: content-box;
box-shadow: @box-shadow-basic;
border: 1px solid @border-color-base;
background-color: @color-white;
border-radius: 4px;
padding: 8px;
h3 {
margin-bottom: 8px;
font-size: 15px;
}
}
.strRightTop {
position: relative;
.tableBox {
position: absolute;
width: calc(100% - 16px);
.el-table .cell {
white-space: normal;
word-break: break-all;
}
.el-table th.el-table__cell > .cell {
min-width: 58px;
padding-left: 0px;
padding-right: 0px;
}
}
}
.strRightBottom {
h3 {
margin-bottom: 8px;
font-size: 15px;
}
.suggest {
.attention {
font-size: 14px;
margin-bottom: 8px;
span {
font-size: 14px;
color: @color-red;
}
}
.info {
display: flex;
flex-direction: column;
font-size: 14px;
line-height: 22px;
}
}
h4 {
margin-top: 8px;
margin-bottom: 8px;
}
}
}
.stritl_center {
flex: 1;
margin: 10px;
display: flex;
flex-direction: column;
.strCenterTop {
flex: 1;
box-sizing: content-box;
box-shadow: @box-shadow-basic;
border: 1px solid @border-color-base;
background-color: @color-white;
border-radius: 4px;
//padding: 8px;
}
.strCenterbottom {
margin-top: 24px;
height: 210px;
//border: 1px solid #000;
box-sizing: content-box;
display: flex;
justify-content: space-between;
.bottomL,
.bottomM,
.bottomR {
border: 1px solid #000;
box-sizing: content-box;
width: 30%;
box-shadow: @box-shadow-basic;
border: 1px solid @border-color-base;
background-color: @color-white;
border-radius: 4px;
padding: 8px;
h3 {
margin-bottom: 8px;
font-size: 15px;
}
}
.bottomM {
.infoBox {
display: flex;
flex-wrap: wrap;
justify-content: space-around;
p {
width: 40%;
height: 68px;
background: #fcc;
text-align: center;
margin: 6px;
display: flex;
flex-direction: column;
justify-content: space-around;
span {
color: #333;
font-size: 14px;
&:last-child {
font-size: 20px;
margin-top: 5px;
font-weight: bold;
}
}
&:first-child {
background: url("../../assets/img/border-blue.png");
}
&:nth-child(2) {
background: url("../../assets/img/border-green.png");
}
&:nth-child(3) {
background: url("../../assets/img/border-yellow.png");
}
&:nth-child(4) {
background: url("../../assets/img/border-gray.png");
}
}
}
}
}
}
}
</style>

@ -1,502 +1,13 @@
<template>
<div class="stritlBox">
<div class="stritl_left">
<div class="strLeftTop">
<h3>{{ numberUnits.name }}</h3>
<bar
v-if="flag.baizhang"
:legendData="unitXData"
:seriesData="unitYData"
:boxStyle="numberUnits.boxStyle"
></bar>
</div>
<div class="strLeftMid">
<h3>{{ hazardClass.name }}</h3>
<pie
v-if="flag.baizhang"
:pieData="hazardPieData"
:boxStyle="hazardClass.boxStyle"
></pie>
</div>
<div class="strLeftBottom">
<h3>{{ monitLine.name }}</h3>
<bar
v-if="flag.baizhang"
:legendData="lineXData"
:seriesData="lineYData"
:boxStyle="monitLine.boxStyle"
></bar>
</div>
</div>
<div class="stritl_center">
<div class="strCenterTop">
<mapChart></mapChart>
</div>
<div class="strCenterbottom">
<div class="bottomL">
<h3>{{ hazardType.name }}</h3>
<horizontalBar
:legendData="hazardTypeXData"
:seriesData="hazardTypeYData"
:boxStyle="hazardType.boxStyle"
></horizontalBar>
</div>
<div class="bottomM">
<h3>{{ deviceInfo.name }}</h3>
<div class="infoBox">
<p>
<span>在运数</span>
<span>{{ infoData.deviceCount }}</span>
</p>
<p>
<span>在线数</span>
<span>{{ infoData.hasPhotoCount }}</span>
</p>
<p>
<span>杆塔覆盖率</span>
<span>{{ infoData.deviceCoverage }}%</span>
</p>
<p>
<span>在线率</span>
<span>{{ infoData.hasPhotoRate }}%</span>
</p>
</div>
</div>
<div class="bottomR">
<h3>{{ deviceOnline.name }}</h3>
<pie
:pieData="deviceOnline.onlineData"
:boxStyle="deviceOnline.boxStyle"
></pie>
</div>
</div>
</div>
<div class="stritl_right">
<div class="strRightTop">
<h3>线路分布(总计5)</h3>
<div class="tableBox">
<el-table :data="lineAllData" style="width: 100%">
<el-table-column
prop="voltageLevelStr"
label="电压等级"
align="center"
>
</el-table-column>
<el-table-column prop="lineCount" label="线路数" align="center">
</el-table-column>
<el-table-column prop="towerCount" label="安装数" align="center">
</el-table-column>
<el-table-column
prop="deviceCoverage"
label="安装覆盖率"
align="center"
>
</el-table-column>
</el-table>
</div>
</div>
<!-- <div class="strRightMid">5</div> -->
<div class="strRightBottom">
<h3>{{ patrolOpinions.name }}</h3>
<div class="suggest">
<p class="attention"><span>注意</span>{{ patrolOpinions.month }}</p>
<p class="info">
<span>{{ patrolOpinions.info1 }}</span>
<span>{{ patrolOpinions.info2 }}</span>
</p>
</div>
<h4>往年同期隐患比例分布图</h4>
<radar
:radarName="radarName"
:radarValue="radarValue"
:boxStyle="patrolOpinions.boxStyle"
:radarTitle="radarTitle"
></radar>
</div>
</div>
</div>
<div class="stritlBox">首页</div>
</template>
<script>
import bar from "./chartFiles/bar";
import horizontalBar from "./chartFiles/horizontalBar";
import pie from "./chartFiles/pie";
import radar from "./chartFiles/radar";
import mapChart from "./chartFiles/mapChart";
import {
getLineDataByVoltage,
getCapturePointDataByDanger,
getHostDeviceDataByVoltage,
getPhotoAlarmDataByAlarmType,
getCompanyDeviceInfo,
getByName,
getLastYearAlarmReasons,
} from "@/utils/api/index";
export default {
data() {
return {
name: localStorage.getItem("ms_username"),
flag: {
baizhang: false, //
},
//
unitAllData: [],
unitXData: [],
unitYData: [],
numberUnits: {
name: "装置数量统计",
boxStyle: {
width: "100%",
height: "200px",
},
},
//线
lineAllData: [],
lineXData: [],
lineYData: [],
monitLine: {
name: "监控路线统计",
boxStyle: {
width: "100%",
height: "200px",
},
},
//
hazardData: [],
hazardPieData: [],
hazardClass: {
name: "隐患分类统计",
boxStyle: {
width: "100%",
height: "200px",
},
},
//
hazardTypeData: [],
hazardTypeXData: [],
hazardTypeYData: [],
hazardType: {
name: "隐患类型统计",
boxStyle: {
width: "100%",
height: "160px",
},
},
//
infoData: [],
deviceInfo: {
name: "装置信息统计",
infoData: [
{ value: 24, name: "在运数" },
{ value: 10, name: "在线数" },
{ value: "92.31%", name: "杆塔覆盖率" },
{ value: "41.67%", name: "在线率" },
],
},
deviceOnline: {
name: "装置在线统计",
onlineData: [
{ value: 55, name: "离线" },
{ value: 45, name: "在线" },
],
boxStyle: {
width: "100%",
height: "160px",
},
},
//
patrolData: [],
radarName: [],
radarValue: [],
radarTitle: "隐患比例分布图",
patrolOpinions: {
name: "巡查意见",
month: "三月份",
info1: "1.鸟类活动开展频繁,需注意鸟类筑巢,大型鸟类驻留。",
info2:
"2.大风天气较多的季节,要注意对放风筝行为的监控,同时加强巡视对导线悬挂异物的观察。",
boxStyle: {
width: "100%",
height: "160px",
},
},
};
},
components: {
bar,
horizontalBar,
pie,
radar,
mapChart,
},
computed: {
role() {
return this.name === "admin" ? "超级管理员" : "普通用户";
},
},
methods: {},
created() {
//
getHostDeviceDataByVoltage({
companyId: "f7d966d1-f3d1-4802-946d-ad93e1ee1b9b",
}).then((res) => {
this.unitAllData = res.data.data;
for (var i = 0; i < this.unitAllData.length; i++) {
this.unitXData.push(this.unitAllData[i].name);
this.unitYData.push(this.unitAllData[i].value);
}
this.flag.baizhang = true;
});
//
getCompanyDeviceInfo({
companyId: "f7d966d1-f3d1-4802-946d-ad93e1ee1b9b",
}).then((res) => {
this.infoData = res.data;
});
//线
getLineDataByVoltage({
companyId: "f7d966d1-f3d1-4802-946d-ad93e1ee1b9b",
}).then((res) => {
this.lineAllData = res.data;
console.log(this.lineAllData);
for (var i = 0; i < this.lineAllData.length; i++) {
this.lineXData.push(this.lineAllData[i].voltageLevelStr);
this.lineYData.push(this.lineAllData[i].lineCount);
}
this.flag.baizhang = true;
});
//
getCapturePointDataByDanger({
companyId: "f7d966d1-f3d1-4802-946d-ad93e1ee1b9b",
}).then((res) => {
this.hazardData = res.data;
// let name1 = this.hazardData.nameList;
// let value1 = this.hazardData.valueList;
this.hazardPieData = res.data.list;
console.log(this.hazardPieData);
this.flag.baizhang = true;
});
//
getPhotoAlarmDataByAlarmType({
companyId: "f7d966d1-f3d1-4802-946d-ad93e1ee1b9b",
}).then((res) => {
this.hazardTypeData = res.data.dataList;
for (var i = 0; i < this.hazardTypeData.length; i++) {
this.hazardTypeXData.push(this.hazardTypeData[i].name);
this.hazardTypeYData.push(this.hazardTypeData[i].acount);
}
this.flag.baizhang = true;
});
//
getByName({
name: "三月",
}).then((res) => {
console.log(res);
});
//
getLastYearAlarmReasons({
companyId: "f7d966d1-f3d1-4802-946d-ad93e1ee1b9b",
month: "04",
}).then((res) => {
console.log(res);
this.patrolData = res.data;
console.log(this.patrolData);
let obj = {};
this.patrolData.forEach((item) => {
if (obj.hasOwnProperty(item.alarmInfo)) {
obj[item.alarmInfo] += item.num;
} else {
obj[item.alarmInfo] = item.num;
}
});
console.log(obj);
this.radarValue = Object.values(obj);
console.log(this.radarValue);
let max = Math.max(...this.radarValue);
//
console.log(max);
for (let i in obj) {
console.log(i);
this.radarName.push({
name: i,
max: max,
});
}
console.log(this.radarName);
});
},
};
</script>
<script></script>
<style lang="less">
.stritlBox {
width: 100%;
height: 100%;
display: flex;
.stritl_left,
.stritl_right {
width: 20%;
margin: 8px;
}
.stritl_left,
.stritl_right {
display: flex;
flex-direction: column;
justify-content: space-between;
.strLeftTop,
.strLeftMid,
.strLeftBottom {
height: 30%;
box-sizing: content-box;
box-shadow: @box-shadow-basic;
border: 1px solid @border-color-base;
background-color: @color-white;
border-radius: 4px;
padding: 8px;
h3 {
margin-bottom: 8px;
font-size: 15px;
}
}
.strRightTop,
.strRightBottom {
height: 46%;
box-sizing: content-box;
box-shadow: @box-shadow-basic;
border: 1px solid @border-color-base;
background-color: @color-white;
border-radius: 4px;
padding: 8px;
h3 {
margin-bottom: 8px;
font-size: 15px;
}
}
.strRightTop {
position: relative;
.tableBox {
position: absolute;
width: calc(100% - 16px);
.el-table .cell {
white-space: normal;
word-break: break-all;
}
.el-table th.el-table__cell > .cell {
min-width: 58px;
padding-left: 0px;
padding-right: 0px;
}
}
}
.strRightBottom {
h3 {
margin-bottom: 8px;
font-size: 15px;
}
.suggest {
.attention {
font-size: 14px;
margin-bottom: 8px;
span {
font-size: 14px;
color: @color-red;
}
}
.info {
display: flex;
flex-direction: column;
font-size: 14px;
line-height: 22px;
}
}
h4 {
margin-top: 8px;
margin-bottom: 8px;
}
}
}
.stritl_center {
flex: 1;
margin: 10px;
display: flex;
flex-direction: column;
.strCenterTop {
flex: 1;
box-sizing: content-box;
box-shadow: @box-shadow-basic;
border: 1px solid @border-color-base;
background-color: @color-white;
border-radius: 4px;
//padding: 8px;
}
.strCenterbottom {
margin-top: 24px;
height: 210px;
//border: 1px solid #000;
box-sizing: content-box;
display: flex;
justify-content: space-between;
.bottomL,
.bottomM,
.bottomR {
border: 1px solid #000;
box-sizing: content-box;
width: 30%;
box-shadow: @box-shadow-basic;
border: 1px solid @border-color-base;
background-color: @color-white;
border-radius: 4px;
padding: 8px;
h3 {
margin-bottom: 8px;
font-size: 15px;
}
}
.bottomM {
.infoBox {
display: flex;
flex-wrap: wrap;
justify-content: space-around;
p {
width: 40%;
height: 68px;
background: #fcc;
text-align: center;
margin: 6px;
display: flex;
flex-direction: column;
justify-content: space-around;
span {
color: #333;
font-size: 14px;
&:last-child {
font-size: 20px;
margin-top: 5px;
font-weight: bold;
}
}
&:first-child {
background: url("../../assets/img/border-blue.png");
}
&:nth-child(2) {
background: url("../../assets/img/border-green.png");
}
&:nth-child(3) {
background: url("../../assets/img/border-yellow.png");
}
&:nth-child(4) {
background: url("../../assets/img/border-gray.png");
}
}
}
}
}
}
}
</style>

@ -0,0 +1,13 @@
<template>
<div class="userManagement">用户管理</div>
</template>
<script></script>
<style lang="less">
.userManagement {
width: 100%;
height: 100%;
display: flex;
}
</style>
Loading…
Cancel
Save