add plc monitor and data transfer page

This commit is contained in:
龚祖望 2022-11-11 14:09:52 +08:00
parent 8aa4919ea8
commit 5a2796d185
13 changed files with 2102 additions and 163 deletions

View File

@ -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

View File

@ -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)
}
},

View File

@ -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

View File

@ -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

View File

@ -114,8 +114,8 @@ export default {
}
return {
loginForm: {
username: 'aiitxios',
password: 'xiosaiit',
username: 'jxsd',
password: 'jxsd',
verifycode: ''
},
loginRules: {

View File

@ -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() {

View File

@ -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>

View File

@ -650,6 +650,7 @@ export default {
::v-deep .el-button--primary {
background-color: #789AF3;
border-color: #789AF3;
border-radius: 20px;
}
.el-form-item{
span{

View File

@ -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>

View File

@ -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'

View File

@ -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,