forked from floraachy/xiuos_IoT
add plc monitor and data transfer page
This commit is contained in:
parent
8aa4919ea8
commit
5a2796d185
|
@ -0,0 +1,26 @@
|
|||
import request from '@/utils/request'
|
||||
|
||||
export function getList(data) {
|
||||
return request({
|
||||
url: '/alarmRule/selectAll',
|
||||
method: 'get',
|
||||
params: data || {}
|
||||
})
|
||||
}
|
||||
|
||||
export function executeSql(data) {
|
||||
return request({
|
||||
url: '/dataForward/executeSql',
|
||||
method: 'get',
|
||||
params: data || {}
|
||||
})
|
||||
}
|
||||
|
||||
export function addRecord(data) {
|
||||
return request({
|
||||
url: '/dataForward/addRecord',
|
||||
method: 'post',
|
||||
data
|
||||
})
|
||||
}
|
||||
|
Binary file not shown.
After Width: | Height: | Size: 130 KiB |
|
@ -48,7 +48,7 @@ export default {
|
|||
}
|
||||
},
|
||||
showBreadcrumb() {
|
||||
const whiteList = ['overview', 'terminal/add', 'terminal/plc', 'data/value', 'configuration/development', 'dashboard', 'log/accessLog']
|
||||
const whiteList = ['overview', 'terminal/add', 'terminal/plc', 'data/value', 'configuration/development', 'dashboard', 'log/accessLog', 'log/systemLog', 'rule/manage', 'rule/dataTransfer']
|
||||
return whiteList.every((item) => this.$route.path.indexOf(item) === -1)
|
||||
}
|
||||
},
|
||||
|
|
|
@ -116,22 +116,26 @@ export const constantRoutes = [
|
|||
meta: { title: '概览', icon: 'overview' }
|
||||
}]
|
||||
},
|
||||
{ path: '*', redirect: '/404', hidden: true }
|
||||
]
|
||||
|
||||
export const asyncRouter = [
|
||||
{
|
||||
path: '/dashboard',
|
||||
component: Layout,
|
||||
meta: {},
|
||||
meta: { permission: ['dashengda', 'hangxiao', 'qianjiangdianqi'] },
|
||||
children: [{
|
||||
path: '',
|
||||
name: 'Dashboard',
|
||||
component: () => import('@/views/dashboard/index'),
|
||||
meta: { title: '设备看板', icon: 'dashboard' }
|
||||
meta: { title: '设备看板', icon: 'dashboard', permission: ['dashengda', 'hangxiao', 'qianjiangdianqi'] }
|
||||
}]
|
||||
},
|
||||
{
|
||||
path: '/terminal',
|
||||
component: Layout,
|
||||
name: 'Terminal',
|
||||
meta: { title: '设备管理', icon: 'terminal' },
|
||||
meta: { title: '设备管理', icon: 'terminal', permission: ['dashengda', 'hangxiao', 'qianjiangdianqi', 'jiangxishida'] },
|
||||
children: [
|
||||
// {
|
||||
// path: 'product',
|
||||
|
@ -143,37 +147,43 @@ export const constantRoutes = [
|
|||
path: 'add',
|
||||
name: 'Add',
|
||||
component: () => import('@/views/terminal/add/index'),
|
||||
meta: { title: '设备新增' }
|
||||
meta: { title: '设备新增', permission: ['dashengda', 'hangxiao', 'qianjiangdianqi'] }
|
||||
},
|
||||
{
|
||||
path: 'center',
|
||||
name: 'Center',
|
||||
component: () => import('@/views/terminal/center/index'),
|
||||
meta: { title: '设备参数' }
|
||||
meta: { title: '设备参数', permission: ['dashengda', 'hangxiao', 'qianjiangdianqi'] }
|
||||
},
|
||||
{
|
||||
path: 'monitor',
|
||||
name: 'Monitor',
|
||||
component: () => import('@/views/terminal/monitor/index'),
|
||||
meta: { title: '设备监控' }
|
||||
meta: { title: '设备监控', permission: ['dashengda', 'hangxiao', 'qianjiangdianqi'] }
|
||||
},
|
||||
{
|
||||
path: 'alarm',
|
||||
name: 'Alarm',
|
||||
component: () => import('@/views/terminal/alarm/index'),
|
||||
meta: { title: '设备告警' }
|
||||
meta: { title: '设备告警', permission: ['dashengda', 'hangxiao', 'qianjiangdianqi'] }
|
||||
},
|
||||
{
|
||||
path: 'plc',
|
||||
name: 'PLC',
|
||||
component: () => import('@/views/terminal/PLC/index'),
|
||||
meta: { title: 'PLC管理' }
|
||||
meta: { title: 'PLC管理', permission: ['dashengda', 'hangxiao', 'qianjiangdianqi'] }
|
||||
},
|
||||
{
|
||||
path: 'plcMonitor',
|
||||
name: 'PLCMonitor',
|
||||
component: () => import('@/views/terminal/PLC/monitor'),
|
||||
meta: { title: 'PLC实时监控', permission: ['jiangxishida'] }
|
||||
},
|
||||
{
|
||||
path: 'ota',
|
||||
name: 'OTA',
|
||||
component: () => import('@/views/terminal/OTA/index'),
|
||||
meta: { title: 'OTA升级', disabled: true }
|
||||
meta: { title: 'OTA升级', disabled: true, permission: ['dashengda', 'hangxiao', 'qianjiangdianqi'] }
|
||||
}
|
||||
]
|
||||
},
|
||||
|
@ -181,7 +191,7 @@ export const constantRoutes = [
|
|||
path: '/rule',
|
||||
component: Layout,
|
||||
name: 'Rule',
|
||||
meta: { title: '规则引擎', icon: 'rule' },
|
||||
meta: { title: '规则引擎', icon: 'rule', permission: ['dashengda', 'hangxiao', 'qianjiangdianqi'] },
|
||||
children: [
|
||||
{
|
||||
path: 'manage',
|
||||
|
@ -190,10 +200,10 @@ export const constantRoutes = [
|
|||
meta: { title: '规则管理' }
|
||||
},
|
||||
{
|
||||
path: 'message',
|
||||
name: 'Message',
|
||||
// component: () => import('@/views/terminal/add/index'),
|
||||
meta: { title: '数据转发', disabled: true }
|
||||
path: 'dataTransfer',
|
||||
name: 'DataTransfer',
|
||||
component: () => import('@/views/rule/dataTransfer/index'),
|
||||
meta: { title: '数据转发' }
|
||||
}
|
||||
]
|
||||
},
|
||||
|
@ -233,13 +243,13 @@ export const constantRoutes = [
|
|||
path: '/configureApp',
|
||||
component: Layout,
|
||||
name: 'configureApp',
|
||||
meta: { title: '组态应用', icon: 'configuration', disabled: true }
|
||||
meta: { title: '组态应用', icon: 'configuration', disabled: true, permission: ['dashengda', 'hangxiao', 'qianjiangdianqi'] }
|
||||
},
|
||||
{
|
||||
path: '/log',
|
||||
component: Layout,
|
||||
name: 'Log',
|
||||
meta: { title: '日志管理', icon: 'log' },
|
||||
meta: { title: '日志管理', icon: 'log', permission: ['dashengda', 'hangxiao', 'qianjiangdianqi'] },
|
||||
children: [
|
||||
{
|
||||
path: 'accessLog',
|
||||
|
@ -255,35 +265,38 @@ export const constantRoutes = [
|
|||
}
|
||||
]
|
||||
},
|
||||
{ path: '*', redirect: '/404', hidden: true }
|
||||
]
|
||||
|
||||
export const asyncRouter = [{
|
||||
path: '/data',
|
||||
component: Layout,
|
||||
name: 'Data',
|
||||
meta: { title: '数据管理', icon: 'data', permission: ['dashengda'] },
|
||||
children: [
|
||||
{
|
||||
path: 'realTime',
|
||||
name: 'RealTime',
|
||||
component: () => import('@/views/data/realTime/index'),
|
||||
meta: { title: '实时数据', permission: ['dashengda'] }
|
||||
},
|
||||
{
|
||||
path: 'history',
|
||||
name: 'History',
|
||||
component: () => import('@/views/data/history/index'),
|
||||
meta: { title: '历史数据', permission: ['dashengda'] }
|
||||
},
|
||||
{
|
||||
path: 'value',
|
||||
name: 'Value',
|
||||
component: () => import('@/views/data/value/index'),
|
||||
meta: { title: '数据价值', permission: ['dashengda'] }
|
||||
}
|
||||
]
|
||||
}]
|
||||
{
|
||||
path: '/data',
|
||||
component: Layout,
|
||||
name: 'Data',
|
||||
meta: { title: '数据管理', icon: 'data', permission: ['dashengda', 'qianjiangdianqi'] },
|
||||
children: [
|
||||
{
|
||||
path: 'realTime',
|
||||
name: 'RealTime',
|
||||
component: () => import('@/views/data/realTime/index'),
|
||||
meta: { title: '实时数据', permission: ['dashengda'] }
|
||||
},
|
||||
{
|
||||
path: 'history',
|
||||
name: 'History',
|
||||
component: () => import('@/views/data/history/index'),
|
||||
meta: { title: '历史数据', permission: ['dashengda'] }
|
||||
},
|
||||
{
|
||||
path: 'qjdq/history',
|
||||
name: 'QJDQHistory',
|
||||
component: () => import('@/views/data/history/qianjiang'),
|
||||
meta: { title: '历史数据', permission: ['qianjiangdianqi'] }
|
||||
},
|
||||
{
|
||||
path: 'value',
|
||||
name: 'Value',
|
||||
component: () => import('@/views/data/value/index'),
|
||||
meta: { title: '数据价值', permission: ['dashengda'] }
|
||||
}
|
||||
]
|
||||
}]
|
||||
|
||||
const createRouter = () => new Router({
|
||||
mode: 'history', // require service support
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
* @Author: 龚祖望 573413756@qq.com
|
||||
* @Date: 2022-05-16 09:16:41
|
||||
* @LastEditors: 龚祖望 573413756@qq.com
|
||||
* @LastEditTime: 2022-09-01 20:13:59
|
||||
* @LastEditTime: 2022-11-10 15:09:14
|
||||
* @FilePath: \dashengda\src\utils\request.js
|
||||
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
|
||||
*/
|
||||
|
@ -16,7 +16,7 @@ import { method } from 'lodash'
|
|||
const service = axios.create({
|
||||
baseURL: process.env.VUE_APP_BASE_API, // url = base url + request url
|
||||
// withCredentials: true, // send cookies when cross-domain requests
|
||||
timeout: 5000, // request timeout,
|
||||
timeout: 10000, // request timeout,
|
||||
headers: {
|
||||
'Content-Type': 'application/json;charset=UTF-8'
|
||||
}
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -114,8 +114,8 @@ export default {
|
|||
}
|
||||
return {
|
||||
loginForm: {
|
||||
username: 'aiitxios',
|
||||
password: 'xiosaiit',
|
||||
username: 'jxsd',
|
||||
password: 'jxsd',
|
||||
verifycode: ''
|
||||
},
|
||||
loginRules: {
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
* @Author: 龚祖望 573413756@qq.com
|
||||
* @Date: 2022-05-16 09:16:41
|
||||
* @LastEditors: 龚祖望 573413756@qq.com
|
||||
* @LastEditTime: 2022-10-09 15:42:31
|
||||
* @LastEditTime: 2022-11-11 11:07:15
|
||||
* @FilePath: \dashengda\src\views\dashboard\index.vue
|
||||
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
|
||||
-->
|
||||
|
@ -56,6 +56,10 @@ export default {
|
|||
this.slide1 = require('@/assets/images/hangxiao-slide1.png')
|
||||
this.slide2 = require('@/assets/images/hangxiao-slide2.png')
|
||||
break
|
||||
case '江西师大':
|
||||
this.slide1 = require('@/assets/images/hangxiao-slide1.png')
|
||||
this.slide2 = require('@/assets/images/hangxiao-slide2.png')
|
||||
break
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
|
|
|
@ -0,0 +1,457 @@
|
|||
<template>
|
||||
<div class="app-container" style="min-height: calc(100vh - 50px)">
|
||||
<el-row
|
||||
type="flex"
|
||||
justify="space-between"
|
||||
style="align-items: baseline; margin-bottom: 30px"
|
||||
>
|
||||
<div class="header">
|
||||
<h1 class="title">数据转发</h1>
|
||||
<span class="date">{{ date }}</span>
|
||||
</div>
|
||||
<el-button
|
||||
type="primary"
|
||||
style="height: fit-content"
|
||||
@click="add"
|
||||
>新增数据转发</el-button>
|
||||
</el-row>
|
||||
<div v-for="(item, index) in list" :key="index" class="content-box">
|
||||
<div class="header">
|
||||
<span>
|
||||
<svg-icon icon-class="alarm" class="alarm_icon" />
|
||||
{{ '转发主题 xxxx' }}
|
||||
</span>
|
||||
<div class="line" />
|
||||
</div>
|
||||
<div class="body">
|
||||
<p class="body-content">
|
||||
<span
|
||||
class="content-item"
|
||||
><svg-icon icon-class="rule_name" class="content-icon" /><span
|
||||
class="font"
|
||||
>转发内容</span></span>
|
||||
<span class="content-item">xxxxx</span>
|
||||
</p>
|
||||
<p class="body-content">
|
||||
<span
|
||||
class="content-item"
|
||||
><svg-icon
|
||||
icon-class="rule_terminal_no"
|
||||
class="content-icon"
|
||||
/><span class="font">转发方式</span></span>
|
||||
<span class="content-item">邮件</span>
|
||||
</p>
|
||||
<p class="body-content">
|
||||
<span
|
||||
class="content-item"
|
||||
><svg-icon icon-class="rule_msg_type" class="content-icon" /><span
|
||||
class="font"
|
||||
>转发地址</span></span>
|
||||
<span class="content-item">xxxx</span>
|
||||
</p>
|
||||
<p class="body-content">
|
||||
<span
|
||||
class="content-item"
|
||||
><svg-icon icon-class="rule_status" class="content-icon" /><span
|
||||
class="font"
|
||||
>转发时间</span></span>
|
||||
<span class="content-item">xxxx</span>
|
||||
</p>
|
||||
</div>
|
||||
<div class="footer">
|
||||
<el-button class="footer_btn" @click="view(index)">详情查询</el-button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 详情弹窗 -->
|
||||
<div v-show="visible" class="dialog_wrapper">
|
||||
<div class="dialog-container">
|
||||
<div class="dialog_header">
|
||||
<p class="ip">{{ getTitle(type) }}</p>
|
||||
<div class="remove_icon" @click="close">X</div>
|
||||
</div>
|
||||
<div class="dialog_content">
|
||||
<el-form
|
||||
ref="form"
|
||||
class="form"
|
||||
label-position="right"
|
||||
label-width="150px"
|
||||
>
|
||||
<el-row>
|
||||
<el-col :span="10">
|
||||
<el-form-item label="转发主题:">
|
||||
<el-input v-if="type === 0" v-model="form.topic" />
|
||||
<span v-else>{{ form.topic }}</span>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="10" :offset="2">
|
||||
<el-form-item label="转发内容:">
|
||||
<el-input v-if="type === 0" v-model="form.content" />
|
||||
<span v-else>{{ form.content }}</span>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<div class="sql-container">
|
||||
<el-row>
|
||||
<el-col :span="20">
|
||||
<el-form-item label="SQL:">
|
||||
<el-input
|
||||
v-if="type === 0"
|
||||
v-model="form.sql"
|
||||
type="textarea"
|
||||
:rows="3"
|
||||
/>
|
||||
<span v-else>{{ form.sql }}</span>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="3" :offset="1">
|
||||
<el-button @click="runSql">在线运行</el-button>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-col :span="20">
|
||||
<el-form-item label="输出结果:">
|
||||
<!-- <el-input v-model="form.result" type="textarea" readonly :rows="6" /> -->
|
||||
<ul>
|
||||
<li v-for="(item, index) in form.datalist" :key="index">
|
||||
{{ item }}
|
||||
</li>
|
||||
</ul>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</div>
|
||||
<el-row style="margin-top: 20px">
|
||||
<el-col :span="10">
|
||||
<el-form-item label="消息推送地址:">
|
||||
<el-input v-if="type === 0" v-model="form.address">
|
||||
<template slot="prepend"> 邮件 </template>
|
||||
</el-input>
|
||||
<span v-else>{{ form.address }}</span>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-form>
|
||||
<div v-if="type === 0" class="footer">
|
||||
<el-button
|
||||
size="medium"
|
||||
class="cancel_btn"
|
||||
@click="close"
|
||||
>取消</el-button>
|
||||
<el-button
|
||||
size="medium"
|
||||
style="border-radius: 4px"
|
||||
type="primary"
|
||||
@click="transfer"
|
||||
>发送</el-button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { mapGetters } from 'vuex'
|
||||
import { getList, executeSql, addRecord } from '@/api/rule/dataTransfer'
|
||||
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
date: '',
|
||||
list: [{}],
|
||||
form: {
|
||||
topic: '',
|
||||
content: '',
|
||||
type: 'email',
|
||||
datalist: [],
|
||||
sql: '',
|
||||
result: ''
|
||||
},
|
||||
initform: {
|
||||
topic: '',
|
||||
content: '',
|
||||
type: 'email',
|
||||
datalist: [],
|
||||
sql: '',
|
||||
result: ''
|
||||
},
|
||||
visible: false,
|
||||
type: 0 // 0-新增,1-查看
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
...mapGetters(['org'])
|
||||
},
|
||||
mounted() {
|
||||
this.date = new Date().toLocaleDateString()
|
||||
},
|
||||
methods: {
|
||||
getList() {},
|
||||
getTitle(type) {
|
||||
switch (type) {
|
||||
case 0:
|
||||
return '数据转发新增'
|
||||
case 1:
|
||||
return '数据转发查看'
|
||||
}
|
||||
},
|
||||
runSql() {
|
||||
executeSql({ sql: this.form.sql })
|
||||
.then((res) => {
|
||||
console.log('res', res)
|
||||
if (res.data && res.data.length) {
|
||||
this.form.datalist = res.data
|
||||
}
|
||||
})
|
||||
.catch((err) => {})
|
||||
},
|
||||
add() {
|
||||
this.visible = true
|
||||
},
|
||||
view(index) {
|
||||
this.type = 1
|
||||
this.form = this.list[index]
|
||||
this.visible = true
|
||||
},
|
||||
close() {
|
||||
this.form = { ...this.initform }
|
||||
this.visible = false
|
||||
},
|
||||
transfer() {
|
||||
const data = { ...this.form, org: this.org }
|
||||
addRecord(data).then(res => {
|
||||
if (res.code === '200000') {
|
||||
this.$message.success('发送成功')
|
||||
this.getList()
|
||||
this.visible = false
|
||||
}
|
||||
}).catch(() => {})
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.header {
|
||||
font-family: Lato;
|
||||
.title {
|
||||
color: #174a84;
|
||||
}
|
||||
.date {
|
||||
color: #a5c9ff;
|
||||
}
|
||||
}
|
||||
.content-box {
|
||||
float: left;
|
||||
margin-right: 30px;
|
||||
margin-bottom: 40px;
|
||||
width: 380px;
|
||||
height: 350px;
|
||||
border: 3px solid #ffb300;
|
||||
color: #ffb300;
|
||||
background: #fbf9f7;
|
||||
box-shadow: 5px 12px 9px rgba(0, 0, 0, 0.16);
|
||||
font-family: Microsoft YaHei;
|
||||
padding: 10px 0;
|
||||
.header {
|
||||
text-align: center;
|
||||
span {
|
||||
.alarm_icon {
|
||||
width: 40px;
|
||||
height: 40px;
|
||||
vertical-align: middle;
|
||||
margin-right: 10px;
|
||||
}
|
||||
font-size: 24px;
|
||||
font-weight: bold;
|
||||
}
|
||||
.line {
|
||||
margin-top: 15px;
|
||||
margin-left: 5%;
|
||||
width: 90%;
|
||||
height: 2px;
|
||||
background-image: linear-gradient(
|
||||
to right,
|
||||
#ffb300 0%,
|
||||
#ffb300 50%,
|
||||
transparent 50%
|
||||
);
|
||||
background-size: 18px 100%;
|
||||
background-repeat: repeat-x;
|
||||
}
|
||||
}
|
||||
.body {
|
||||
.body-content {
|
||||
line-height: 2;
|
||||
.content-item {
|
||||
display: inline-block;
|
||||
width: 50%;
|
||||
text-align: center;
|
||||
}
|
||||
.font {
|
||||
font-size: 17px;
|
||||
color: #5f6874;
|
||||
}
|
||||
.content-icon {
|
||||
margin-right: 10px;
|
||||
}
|
||||
}
|
||||
}
|
||||
.footer {
|
||||
text-align: center;
|
||||
.footer_btn {
|
||||
width: 150px;
|
||||
height: 47px;
|
||||
border-radius: 16px;
|
||||
background: rgba(255, 179, 0, 0.8);
|
||||
color: #fff;
|
||||
font-size: 16px;
|
||||
font-weight: bold;
|
||||
text-shadow: 0px 3px 6px rgba(0, 0, 0, 0.16);
|
||||
}
|
||||
}
|
||||
}
|
||||
.dialog_wrapper {
|
||||
z-index: 2;
|
||||
position: fixed;
|
||||
left: 230px;
|
||||
right: 0;
|
||||
top: 0;
|
||||
bottom: 0;
|
||||
margin: 0;
|
||||
&::before {
|
||||
content: '';
|
||||
position: absolute;
|
||||
left: -230px;
|
||||
right: 0;
|
||||
top: 0;
|
||||
bottom: 0;
|
||||
background-color: rgba(0, 0, 0, 0.4);
|
||||
z-index: 2;
|
||||
}
|
||||
.dialog-container {
|
||||
z-index: 10;
|
||||
width: 1100px;
|
||||
transform: none;
|
||||
margin: 15vh auto;
|
||||
position: relative;
|
||||
border-radius: 8px;
|
||||
font-family: PingFangSC-Regular;
|
||||
box-shadow: 0px 3px 6px rgba(0, 0, 0, 0.16);
|
||||
.dialog_header {
|
||||
background-color: #ffb300;
|
||||
text-align: center;
|
||||
color: #fff;
|
||||
padding: 5px;
|
||||
position: relative;
|
||||
p {
|
||||
font-size: 24px;
|
||||
font-weight: bold;
|
||||
margin: 5px auto;
|
||||
}
|
||||
.remove_icon {
|
||||
position: absolute;
|
||||
font-size: 18px;
|
||||
right: 15px;
|
||||
top: 10px;
|
||||
cursor: pointer;
|
||||
}
|
||||
}
|
||||
.dialog_content {
|
||||
background-color: #fff;
|
||||
border-radius: 0 0 8px 8px;
|
||||
padding: 30px 50px;
|
||||
.sql-container {
|
||||
background-color: rgba(255, 179, 0, 0.06);
|
||||
border-radius: 5px;
|
||||
padding: 26px 0;
|
||||
}
|
||||
.rule {
|
||||
background-color: #f0ffee;
|
||||
border-radius: 5px;
|
||||
padding: 25px;
|
||||
.header {
|
||||
padding-bottom: 15px;
|
||||
border-bottom: 1px solid #20be0b;
|
||||
div {
|
||||
display: inline-block;
|
||||
}
|
||||
.title {
|
||||
font-size: 20px;
|
||||
margin-left: 5px;
|
||||
color: #20be0b;
|
||||
}
|
||||
.remove_icon {
|
||||
font-size: 20px;
|
||||
float: right;
|
||||
margin-right: 10px;
|
||||
cursor: pointer;
|
||||
}
|
||||
}
|
||||
.body {
|
||||
margin-top: 25px;
|
||||
}
|
||||
}
|
||||
.add {
|
||||
margin-top: 30px;
|
||||
text-align: center;
|
||||
width: 100%;
|
||||
height: 53px;
|
||||
line-height: 53px;
|
||||
background: url('~@/assets/images/bg_green.png') no-repeat;
|
||||
background-size: 100% 100%;
|
||||
color: #fff;
|
||||
font-size: 20px;
|
||||
font-family: Montserrat;
|
||||
font-weight: 600;
|
||||
cursor: pointer;
|
||||
img {
|
||||
margin-right: 5px;
|
||||
vertical-align: middle;
|
||||
}
|
||||
}
|
||||
.footer {
|
||||
text-align: center;
|
||||
.el-button {
|
||||
width: 80px;
|
||||
}
|
||||
.cancel_btn {
|
||||
color: #1890ff;
|
||||
border-color: #1890ff;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
::v-deep .el-form-item {
|
||||
margin-bottom: 20px;
|
||||
.el-select {
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
::v-deep .el-form-item__label {
|
||||
font-size: 16px;
|
||||
font-weight: normal;
|
||||
font-family: PingFangSC-Regular;
|
||||
color: rgba(0, 0, 0, 0.85);
|
||||
}
|
||||
::v-deep .el-button--primary {
|
||||
background-color: #789af3;
|
||||
border-color: #789af3;
|
||||
border-radius: 20px;
|
||||
}
|
||||
.el-form-item {
|
||||
span {
|
||||
font-size: 16px;
|
||||
}
|
||||
}
|
||||
ul {
|
||||
max-height: 250px;
|
||||
padding-left: 0;
|
||||
margin-top: 0;
|
||||
li {
|
||||
list-style: none;
|
||||
}
|
||||
}
|
||||
</style>
|
|
@ -650,6 +650,7 @@ export default {
|
|||
::v-deep .el-button--primary {
|
||||
background-color: #789AF3;
|
||||
border-color: #789AF3;
|
||||
border-radius: 20px;
|
||||
}
|
||||
.el-form-item{
|
||||
span{
|
||||
|
|
|
@ -0,0 +1,344 @@
|
|||
<template>
|
||||
<div class="app-container">
|
||||
<ul>
|
||||
<li>{{ '工业设备ID:'+data.deviceId }}</li>
|
||||
<li>{{ '工业设备名称:'+data.deviceName }}</li>
|
||||
<li>{{ 'plc IP:'+data.plcIp }}</li>
|
||||
<li>{{ 'plc端口:'+data.port }}</li>
|
||||
<li>{{ '扫描间隔:'+data.readPeriod }}</li>
|
||||
<li v-for="(item,index) in data.readItemList" :key="index">{{ item.valueName+':'+item.value }}</li>
|
||||
</ul>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
data: {
|
||||
'deviceId': 1500,
|
||||
'deviceName': '码垛车',
|
||||
'plcIp': '192.168.100.40',
|
||||
'port': '102',
|
||||
'readPeriod': 100,
|
||||
'readItemList': [
|
||||
{
|
||||
'valueName': '检测-左1松绳检测',
|
||||
'value': 1
|
||||
},
|
||||
{
|
||||
'valueName': '检测-左2松绳检测',
|
||||
'value': 1
|
||||
},
|
||||
{
|
||||
'valueName': '检测-右1松绳检测',
|
||||
'value': 1
|
||||
},
|
||||
{
|
||||
'valueName': '检测-右2松绳检测',
|
||||
'value': 1
|
||||
},
|
||||
{
|
||||
'valueName': '检测-提升上极限',
|
||||
'value': 1
|
||||
},
|
||||
{
|
||||
'valueName': '检测-1#防坠器正常',
|
||||
'value': 1
|
||||
},
|
||||
{
|
||||
'valueName': '检测-2#防坠器正常',
|
||||
'value': 1
|
||||
},
|
||||
{
|
||||
'valueName': '检测-车架子站油泵电机故障',
|
||||
'value': 0
|
||||
},
|
||||
{
|
||||
'valueName': '检测-车架子油泵电机运行',
|
||||
'value': 0
|
||||
},
|
||||
{
|
||||
'valueName': '检测-平台升降变频器就绪',
|
||||
'value': 1
|
||||
},
|
||||
{
|
||||
'valueName': '检测-车架走行变频器就绪',
|
||||
'value': 1
|
||||
},
|
||||
{
|
||||
'valueName': '检测-车架对位(常闭)',
|
||||
'value': 0
|
||||
},
|
||||
{
|
||||
'valueName': '检测-走行1#减速位',
|
||||
'value': 0
|
||||
},
|
||||
{
|
||||
'valueName': '检测-走行2#减速位',
|
||||
'value': 1
|
||||
},
|
||||
{
|
||||
'valueName': '检测-走行3#减速位',
|
||||
'value': 0
|
||||
},
|
||||
{
|
||||
'valueName': '检测-走行4#减速位',
|
||||
'value': 0
|
||||
},
|
||||
{
|
||||
'valueName': '检测-走行5#减速位',
|
||||
'value': 0
|
||||
},
|
||||
{
|
||||
'valueName': '检测-走行6#减速位',
|
||||
'value': 0
|
||||
},
|
||||
{
|
||||
'valueName': '检测-走行7#减速位',
|
||||
'value': 0
|
||||
},
|
||||
{
|
||||
'valueName': '检测-走行8#减速位',
|
||||
'value': 0
|
||||
},
|
||||
{
|
||||
'valueName': '检测-走行9#减速位',
|
||||
'value': 0
|
||||
},
|
||||
{
|
||||
'valueName': '检测-走行左锁紧位',
|
||||
'value': 1
|
||||
},
|
||||
{
|
||||
'valueName': '检测-走行左松开位',
|
||||
'value': 0
|
||||
},
|
||||
{
|
||||
'valueName': '检测-走行右锁紧位',
|
||||
'value': 1
|
||||
},
|
||||
{
|
||||
'valueName': '检测-走行右松开位',
|
||||
'value': 0
|
||||
},
|
||||
{
|
||||
'valueName': '检测-顶推变频器就绪',
|
||||
'value': 1
|
||||
},
|
||||
{
|
||||
'valueName': '检测-左窑抬门变频器就绪',
|
||||
'value': 1
|
||||
},
|
||||
{
|
||||
'valueName': '检测-右窑抬门变频器就绪',
|
||||
'value': 1
|
||||
},
|
||||
{
|
||||
'valueName': '检测-托架驱动变频器就绪',
|
||||
'value': 1
|
||||
},
|
||||
{
|
||||
'valueName': '检测-托架子站油泵电机故障',
|
||||
'value': 0
|
||||
},
|
||||
{
|
||||
'valueName': '检测-托架子站油泵电机运行',
|
||||
'value': 0
|
||||
},
|
||||
{
|
||||
'valueName': '检测-顶推旋起位',
|
||||
'value': 0
|
||||
},
|
||||
{
|
||||
'valueName': '检测-顶推旋下位',
|
||||
'value': 1
|
||||
},
|
||||
{
|
||||
'valueName': '检测-倾角传感器X轴',
|
||||
'value': 1
|
||||
},
|
||||
{
|
||||
'valueName': '检测-倾角传感器Y轴',
|
||||
'value': 1
|
||||
},
|
||||
{
|
||||
'valueName': '检测-左窑开门位',
|
||||
'value': 0
|
||||
},
|
||||
{
|
||||
'valueName': '检测-左窑关门位',
|
||||
'value': 1
|
||||
},
|
||||
{
|
||||
'valueName': '检测-左窑抬门1#卡爪伸出位',
|
||||
'value': 0
|
||||
},
|
||||
{
|
||||
'valueName': '检测-左窑抬门1#卡爪收回位',
|
||||
'value': 0
|
||||
},
|
||||
{
|
||||
'valueName': '检测-左窑抬门2#卡爪伸出位',
|
||||
'value': 0
|
||||
},
|
||||
{
|
||||
'valueName': '检测-左窑抬门2#卡爪收回位',
|
||||
'value': 0
|
||||
},
|
||||
{
|
||||
'valueName': '检测-左窑顶推停止位',
|
||||
'value': 0
|
||||
},
|
||||
{
|
||||
'valueName': '检测-左窑顶推减速位',
|
||||
'value': 0
|
||||
},
|
||||
{
|
||||
'valueName': '检测-左窑顶推零位',
|
||||
'value': 1
|
||||
},
|
||||
{
|
||||
'valueName': '检测-1#升降定位伸出',
|
||||
'value': 1
|
||||
},
|
||||
{
|
||||
'valueName': '检测-1#升降定位收回',
|
||||
'value': 0
|
||||
},
|
||||
{
|
||||
'valueName': '检测-模板左窑减速位',
|
||||
'value': 0
|
||||
},
|
||||
{
|
||||
'valueName': '检测-模板左窑顶推位',
|
||||
'value': 0
|
||||
},
|
||||
{
|
||||
'valueName': '检测-模板左窑停止位',
|
||||
'value': 0
|
||||
},
|
||||
{
|
||||
'valueName': '检测-中间顶推零位',
|
||||
'value': 1
|
||||
},
|
||||
{
|
||||
'valueName': '检测-左窑窑门检测',
|
||||
'value': 0
|
||||
},
|
||||
{
|
||||
'valueName': '检测-右窑开门位',
|
||||
'value': 0
|
||||
},
|
||||
{
|
||||
'valueName': '检测-右窑关门位',
|
||||
'value': 1
|
||||
},
|
||||
{
|
||||
'valueName': '检测-右窑抬门1#卡爪伸出位',
|
||||
'value': 0
|
||||
},
|
||||
{
|
||||
'valueName': '检测-右窑抬门1#卡爪收回位',
|
||||
'value': 0
|
||||
},
|
||||
{
|
||||
'valueName': '检测-右窑抬门2#卡爪伸出位',
|
||||
'value': 0
|
||||
},
|
||||
{
|
||||
'valueName': '检测-右窑抬门2#卡爪收回位',
|
||||
'value': 0
|
||||
},
|
||||
{
|
||||
'valueName': '检测-右窑顶推停止位',
|
||||
'value': 0
|
||||
},
|
||||
{
|
||||
'valueName': '检测-右窑顶推减速位',
|
||||
'value': 0
|
||||
},
|
||||
{
|
||||
'valueName': '检测-右窑顶推零位',
|
||||
'value': 1
|
||||
},
|
||||
{
|
||||
'valueName': '检测-2#升降定位伸出',
|
||||
'value': 1
|
||||
},
|
||||
{
|
||||
'valueName': '检测-2#升降定位收回',
|
||||
'value': 0
|
||||
},
|
||||
{
|
||||
'valueName': '检测-模板右窑减速位',
|
||||
'value': 0
|
||||
},
|
||||
{
|
||||
'valueName': '检测-模板右窑顶推位',
|
||||
'value': 0
|
||||
},
|
||||
{
|
||||
'valueName': '检测-模板右窑停止位',
|
||||
'value': 0
|
||||
},
|
||||
{
|
||||
'valueName': '检测-右窑窑门检测',
|
||||
'value': 0
|
||||
},
|
||||
{
|
||||
'valueName': 'DB_车架当前位置',
|
||||
'value': 6
|
||||
},
|
||||
{
|
||||
'valueName': 'MD_编码器实际值',
|
||||
'value': 5856
|
||||
},
|
||||
{
|
||||
'valueName': 'DB_平台当前位置_层号',
|
||||
'value': 1
|
||||
},
|
||||
{
|
||||
'valueName': 'DB_平台当前位置_位置号',
|
||||
'value': 0
|
||||
},
|
||||
{
|
||||
'valueName': 'DB_顶推当前位置',
|
||||
'value': 0
|
||||
},
|
||||
{
|
||||
'valueName': 'DB_模台当前位置',
|
||||
'value': -7
|
||||
}
|
||||
],
|
||||
'org': 'jxsd'
|
||||
}
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
this.openSocket()
|
||||
},
|
||||
methods: {
|
||||
openSocket() {
|
||||
const socketUrl = 'ws://192.168.23.100:8080/websocket/jxsd'
|
||||
const socket = new WebSocket(socketUrl)
|
||||
socket.onopen = () => {
|
||||
console.log('socket已打开')
|
||||
}
|
||||
socket.onmessage = msg => {
|
||||
console.log('msg', msg)
|
||||
if (msg.data) {
|
||||
this.data = JSON.parse(msg.data)
|
||||
console.log('data', this.data)
|
||||
}
|
||||
}
|
||||
socket.onclose = function() {
|
||||
console.log('websocket已关闭')
|
||||
}
|
||||
socket.onerror = function() {
|
||||
console.log('websocket发生了错误')
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
|
@ -139,118 +139,7 @@ import { getList } from '@/api/terminal/center'
|
|||
export default {
|
||||
data() {
|
||||
return {
|
||||
deviceList: [
|
||||
{
|
||||
productname: '彩印车间',
|
||||
status: 1,
|
||||
statusdesc: '运行',
|
||||
type: 'M-168-Lora-FM100',
|
||||
kernel: 'rt-thread kenel',
|
||||
webversion: '1.0',
|
||||
no: 'A000001',
|
||||
ipaddr: '192.168.131.29',
|
||||
netmask: '255.255.254.0',
|
||||
gateway: '192.168.130.1',
|
||||
dnsserver0: '10.0.110.21',
|
||||
dnsserver1: '10.0.110.20',
|
||||
topic: '/broadcast/hf6mzwdVnJg/989898',
|
||||
serveraddr: 'zwdVnJg.iot-as-mqtt.cn-shanghai.aliyuncs.com',
|
||||
serverport: '1883',
|
||||
username: 'test1&hf6mzwdVnJg',
|
||||
clientid: '123|securemode=3,signmethod=hmacsha1|',
|
||||
privateserveraddr: '192.168.131.30',
|
||||
privateserverport: '9898',
|
||||
privateserverusername: 'admin'
|
||||
},
|
||||
{
|
||||
productname: '生产车间',
|
||||
status: 0,
|
||||
statusdesc: '待机',
|
||||
type: 'M528-A800-5G-HM100',
|
||||
kernel: 'rt-thread kenel',
|
||||
webversion: '1.0',
|
||||
no: 'A000002',
|
||||
ipaddr: '192.168.131.29',
|
||||
netmask: '255.255.254.0',
|
||||
gateway: '192.168.130.1',
|
||||
dnsserver0: '10.0.110.21',
|
||||
dnsserver1: '10.0.110.20',
|
||||
topic: '/broadcast/hf6mzwdVnJg/989898',
|
||||
serveraddr: 'zwdVnJg.iot-as-mqtt.cn-shanghai.aliyuncs.com',
|
||||
serverport: '1883',
|
||||
username: 'test1&hf6mzwdVnJg',
|
||||
clientid: '123|securemode=3,signmethod=hmacsha1|',
|
||||
privateserveraddr: '192.168.131.30',
|
||||
privateserverport: '9898',
|
||||
privateserverusername: 'admin'
|
||||
},
|
||||
{
|
||||
productname: '成型车间',
|
||||
status: 1,
|
||||
statusdesc: '运行',
|
||||
type: 'RV400-NPU4T-5G-SR100',
|
||||
kernel: 'rt-thread kenel',
|
||||
webversion: '1.0',
|
||||
no: 'A000003',
|
||||
ipaddr: '192.168.131.29',
|
||||
netmask: '255.255.254.0',
|
||||
gateway: '192.168.130.1',
|
||||
dnsserver0: '10.0.110.21',
|
||||
dnsserver1: '10.0.110.20',
|
||||
topic: '/broadcast/hf6mzwdVnJg/989898',
|
||||
serveraddr: 'zwdVnJg.iot-as-mqtt.cn-shanghai.aliyuncs.com',
|
||||
serverport: '1883',
|
||||
username: 'test1&hf6mzwdVnJg',
|
||||
clientid: '123|securemode=3,signmethod=hmacsha1|',
|
||||
privateserveraddr: '192.168.131.30',
|
||||
privateserverport: '9898',
|
||||
privateserverusername: 'admin'
|
||||
},
|
||||
{
|
||||
productname: '打包车间',
|
||||
status: 2,
|
||||
statusdesc: '警告',
|
||||
type: 'RV400-NPU16T-5G-AR100',
|
||||
kernel: 'rt-thread kenel',
|
||||
webversion: '1.0',
|
||||
no: 'A000004',
|
||||
ipaddr: '192.168.131.29',
|
||||
netmask: '255.255.254.0',
|
||||
gateway: '192.168.130.1',
|
||||
dnsserver0: '10.0.110.21',
|
||||
dnsserver1: '10.0.110.20',
|
||||
topic: '/broadcast/hf6mzwdVnJg/989898',
|
||||
serveraddr: 'zwdVnJg.iot-as-mqtt.cn-shanghai.aliyuncs.com',
|
||||
serverport: '1883',
|
||||
username: 'test1&hf6mzwdVnJg',
|
||||
clientid: '123|securemode=3,signmethod=hmacsha1|',
|
||||
privateserveraddr: '192.168.131.30',
|
||||
privateserverport: '9898',
|
||||
privateserverusername: 'admin'
|
||||
},
|
||||
{
|
||||
productname: '打包车间',
|
||||
status: 1,
|
||||
statusdesc: '运行',
|
||||
type: 'RV400-NPU16T-5G-AR100',
|
||||
kernel: 'rt-thread kenel',
|
||||
webversion: '1.0',
|
||||
no: 'A000005',
|
||||
ipaddr: '192.168.131.29',
|
||||
netmask: '255.255.254.0',
|
||||
gateway: '192.168.130.1',
|
||||
dnsserver0: '10.0.110.21',
|
||||
dnsserver1: '10.0.110.20',
|
||||
topic: '/broadcast/hf6mzwdVnJg/989898',
|
||||
serveraddr: 'zwdVnJg.iot-as-mqtt.cn-shanghai.aliyuncs.com',
|
||||
serverport: '1883',
|
||||
username: 'test1&hf6mzwdVnJg',
|
||||
clientid: '123|securemode=3,signmethod=hmacsha1|',
|
||||
privateserveraddr: '192.168.131.30',
|
||||
privateserverport: '9898',
|
||||
privateserverusername: 'admin'
|
||||
}
|
||||
],
|
||||
deviceList: [],
|
||||
visible: false,
|
||||
current: {},
|
||||
protocol: 'TCP/IP'
|
||||
|
|
|
@ -44,6 +44,13 @@ module.exports = {
|
|||
pathRewrite: {
|
||||
'^/cgi-bin': '/cgi-bin'
|
||||
}
|
||||
},
|
||||
'/qianjiang': {
|
||||
target: 'http://115.238.53.61:33333/', // webnet
|
||||
changeOrigin: true,
|
||||
pathRewrite: {
|
||||
'^/qianjiang': ''
|
||||
}
|
||||
}
|
||||
},
|
||||
open: true,
|
||||
|
|
Loading…
Reference in New Issue