Merge pull request 'dev' (#364) from dev into master

Reviewed-on: http://git.feashow.cn/clay/tunnel-cloud-web/pulls/364
This commit is contained in:
2024-08-17 07:34:40 +00:00
9 changed files with 138 additions and 65 deletions

View File

@@ -3,4 +3,5 @@
VITE_BASE_URL='/api'
# VITE_BASE_URL='http://192.168.101.7:8000'
VITE_BASE_WSURL='ws://web-tunnel.feashow.com/api'
#VITE_BASE_WSURL='ws://web-tunnel.feashow.com/api'
VITE_BASE_WSURL='/websocket'

View File

@@ -4,4 +4,5 @@ VITE_TITLE='fateverse'
VITE_BASE_URL='/api'
VITE_BASE_WSURL='ws://web-tunnel.feashow.com/api'
#VITE_BASE_WSURL='ws://web-tunnel.feashow.com/api'
VITE_BASE_WSURL='/websocket'

View File

@@ -1,4 +1,4 @@
FROM nginx
FROM 10.7.127.190:38080/nginx:latest
RUN rm -rf /etc/nginx/conf.d/default.conf
RUN rm -rf /etc/nginx/nginx.conf

View File

@@ -74,8 +74,9 @@ const handleSend = () => {
dataList.value.push(data)
}
const initWebSocket = () => {
// let wsUrl = `ws://192.168.31.175:9000/websocket/debug/${token}/${serialNumber.value}`
let wsUrl = `ws://web-tunnel.feashow.com/api/wstunnel/websocket/debug/${token}/${serialNumber.value}`
// let wsUrl = `ws://192.168.31.176:9000/websocket/debug/${token}/${serialNumber.value}`
let wsUrl = import.meta.env.VITE_BASE_WSURL+`/${token}/${serialNumber.value}`;
// let wsUrl = `ws://web-tunnel.feashow.com/api/wstunnel/websocket/debug/${token}/${serialNumber.value}`
console.log(wsUrl)
socket = new WebSocket(wsUrl)
//连接发生错误的回调方法

View File

@@ -76,19 +76,19 @@
@change="changeFanData(scope.row)"></el-input>
</template>
</el-table-column>
<el-table-column prop="serialNumber" label="序列号" align="center" width="500">
<template #default="scope">
<el-select placeholder="请选择" v-model="scope.row.serialNumber" popper-class="serialNumber-select"
@change="changeFanData(scope.row)" class="serialNumber">
<el-option
v-for="item in serialNumberOptions"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</template>
</el-table-column>
<!-- <el-table-column prop="serialNumber" label="序列号" align="center" width="500">-->
<!-- <template #default="scope">-->
<!-- <el-select placeholder="请选择" v-model="scope.row.serialNumber" popper-class="serialNumber-select"-->
<!-- @change="changeFanData(scope.row)" class="serialNumber">-->
<!-- <el-option-->
<!-- v-for="item in serialNumberOptions"-->
<!-- :key="item.value"-->
<!-- :label="item.label"-->
<!-- :value="item.value"-->
<!-- />-->
<!-- </el-select>-->
<!-- </template>-->
<!-- </el-table-column>-->
<el-table-column prop="state" label="状态" align="center" min-width="86">
<template #default="scope">
<div class="switch">
@@ -160,19 +160,19 @@
@change="changeWindData(scope.row)"></el-input>
</template>
</el-table-column>
<el-table-column prop="serialNumber" label="序列号" align="center" width="500">
<template #default="scope">
<el-select placeholder="请选择" v-model="scope.row.serialNumber" popper-class="serialNumber-select"
@change="changeWindData(scope.row)" class="serialNumber">
<el-option
v-for="item in serialNumberOptions"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</template>
</el-table-column>
<!-- <el-table-column prop="serialNumber" label="序列号" align="center" width="500">-->
<!-- <template #default="scope">-->
<!-- <el-select placeholder="请选择" v-model="scope.row.serialNumber" popper-class="serialNumber-select"-->
<!-- @change="changeWindData(scope.row)" class="serialNumber">-->
<!-- <el-option-->
<!-- v-for="item in serialNumberOptions"-->
<!-- :key="item.value"-->
<!-- :label="item.label"-->
<!-- :value="item.value"-->
<!-- />-->
<!-- </el-select>-->
<!-- </template>-->
<!-- </el-table-column>-->
<el-table-column prop="state" label="状态" align="center">
<template #default="scope">
<div class="switch wind-switch">
@@ -244,19 +244,19 @@
@change="changeOtherData(scope.row)"></el-input>
</template>
</el-table-column>
<el-table-column prop="serialNumber" label="序列号" align="center" width="500">
<template #default="scope">
<el-select placeholder="请选择" v-model="scope.row.serialNumber" popper-class="serialNumber-select"
@change="changeOtherData(scope.row)" clearable class="serialNumber">
<el-option
v-for="item in serialNumberOptions"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</template>
</el-table-column>
<!-- <el-table-column prop="serialNumber" label="序列号" align="center" width="500">-->
<!-- <template #default="scope">-->
<!-- <el-select placeholder="请选择" v-model="scope.row.serialNumber" popper-class="serialNumber-select"-->
<!-- @change="changeOtherData(scope.row)" clearable class="serialNumber">-->
<!-- <el-option-->
<!-- v-for="item in serialNumberOptions"-->
<!-- :key="item.value"-->
<!-- :label="item.label"-->
<!-- :value="item.value"-->
<!-- />-->
<!-- </el-select>-->
<!-- </template>-->
<!-- </el-table-column>-->
<el-table-column prop="state" label="状态" align="center">
<template #default="scope">
<div class="switch wind-switch">
@@ -532,9 +532,28 @@ getList()
width: 450px!important;
}
}
.el-table__cell{
.el-select.serialNumber {
border-radius: 6px!important;
border: 1px solid #05FEFF!important;
background-color: transparent!important;
.el-select__wrapper{
height: 54px!important;
color: #FFFFFF!important;
font-size: 40px!important;
//height: auto!important;
line-height: normal!important;
border-radius: 6px!important;
border: 1px solid #05FEFF!important;
background-color: transparent!important;
}
.el-select__placeholder {
height: 54px;
line-height: 54px;
color: #FFFFFF;
}
}
.serialNumber-select.el-popper {
background: #064B66 !important;
border: 2px solid #05FEFF !important;
@@ -542,7 +561,9 @@ getList()
.el-select-dropdown {
min-width: 130px !important;
}
.el-select-dropdown__item.is-hovering{
background-color: #064B66 !important;
}
.el-select-dropdown__item {
color: #FFFFFF;
border-bottom: 1px solid #05FEFF;

View File

@@ -12,15 +12,21 @@
</div>
</div>
<div class="edit-box">
<el-form :model="form" :label-position="right" label-width="188px">
<el-form :model="form" :label-position="right" label-width="230px">
<el-form-item label="隧道名称">
<el-input v-model="form.tunnelName" placeholder="请输入隧道名称"/>
</el-form-item>
<el-form-item label="隧道简称">
<el-input v-model="form.tunnelAlias" placeholder="请输入隧道简称"/>
</el-form-item>
<el-form-item label="序列号">
<el-input v-model="form.serialNumber" placeholder="请输入序列号"/>
<el-form-item label="序列号前缀" prop="serialNumberPrefix">
<el-input v-model="form.serialNumberPrefix" placeholder="请输入序列号前缀"/>
</el-form-item>
<el-form-item label="序列号" prop="serialNumberOne">
<el-input v-model="form.serialNumberOne" placeholder="请输入序列号"/>
</el-form-item>
<el-form-item label="序列号1" prop="serialNumber">
<el-input v-model="form.serialNumber" placeholder="请输入序列号1"/>
</el-form-item>
<el-form-item label="隧道长度">
<el-input type="number" v-model="form.totalLength" placeholder="请输入隧道长度"/>
@@ -86,7 +92,9 @@ const type = reactive(router.currentRoute.value.params.type);
const modelEquipmentList = ref(null)
const form = ref({
tunnelName: "",
serialNumber: "",
serialNumberPrefix: '',
serialNumberOne: '',
serialNumber: '',
totalLength: "",
referenceFrequency: '',
upTime: '',

View File

@@ -90,16 +90,23 @@
<div class="siteId">
<span>{{ title }}</span>
</div>
<el-form :model="form" :label-position="right" label-width="188px" :rules="formRules" ref="formInstance">
<el-form :model="form" :label-position="right" label-width="230px" :rules="formRules" ref="formInstance">
<el-form-item label="隧道名称" prop="tunnelName">
<el-input v-model="form.tunnelName" placeholder="请输入隧道名称"/>
</el-form-item>
<el-form-item label="隧道简称" prop="tunnelAlias">
<el-input v-model="form.tunnelAlias" placeholder="请输入隧道简称"/>
</el-form-item>
<el-form-item label="序列号" prop="serialNumber">
<el-input v-model="form.serialNumber" placeholder="请输入序列号"/>
</el-form-item>
<!-- <el-form-item label="序列号前缀" prop="serialNumberPrefix">-->
<!-- <el-input v-model="form.serialNumberPrefix" placeholder="请输入序列号前缀"/>-->
<!-- </el-form-item>-->
<!-- <el-form-item label="序列号1" prop="serialNumber">-->
<!-- <el-input v-model="form.serialNumber" placeholder="请输入序列号1"/>-->
<!-- </el-form-item>-->
<!-- <el-form-item label="序列号2" prop="serialNumberOne">-->
<!-- <el-input v-model="form.serialNumberOne" placeholder="请输入序列号2"/>-->
<!-- </el-form-item>-->
<el-form-item label="隧道长度" prop="totalLength">
<el-input type="number" v-model="form.totalLength" placeholder="请输入隧道长度"/>
</el-form-item>
@@ -174,6 +181,12 @@ const validateNumber = (rule, value) => {
const reg = /^[A-Za-z0-9]+$/;
return reg.test(value);
}
const validateSerialNumberPrefix = (rule, value) => {
return value.length > 13 && value.slice(0,-2) == form.value.serialNumberPrefix;
}
const validateSerialNumberOnePrefix = (rule, value) => {
return value.length > 13 && value.slice(0,-2) == form.value.serialNumberPrefix;
}
const router = useRouter()
const siteImage = ref()
const showAddIcon = ref(true)
@@ -184,9 +197,22 @@ const type = reactive(params.type)
const formRules = ref({
tunnelName: [{required: true, message: '请输入隧道名称', trigger: ['blur', 'change']}],
tunnelAlias: [{required: true, message: '请输入隧道简称', trigger: ['blur', 'change']}],
serialNumberPrefix: [
{required: true, message: '请输入序列号前缀', trigger: ['blur', 'change']},
{validator: validateNumber, message: '请输入英文、数字、英文数字组合的序列号前缀', trigger: ['blur', 'change']},
{ min:14,max:14,message: '隧道序列号前缀长度为14位',trigger: ['blur', 'change'] },
],
serialNumber: [
{required: true, message: '请输入序列号', trigger: ['blur', 'change']},
{validator: validateNumber, message: '请输入英文、数字、英文数字组合的用户名', trigger: ['blur', 'change']}
{required: true, message: '请输入序列号1', trigger: ['blur', 'change']},
{validator: validateNumber, message: '请输入英文、数字、英文数字组合的序列号1', trigger: ['blur', 'change']},
{ min:16,max:16,message: '隧道序列号1长度为16位',trigger: ['blur', 'change']},
// {validator: validateSerialNumberPrefix, message: '同一隧道的序列号前缀需相同', trigger: ['blur', 'change']}
],
serialNumberOne: [
// {required: true, message: '请输入序列号2', trigger: ['blur', 'change']},
// {validator: validateNumber, message: '请输入英文、数字、英文数字组合的序列号2', trigger: ['blur', 'change']},
// { min:16,max:16,message: '隧道序列号2长度为16位',trigger: ['blur', 'change']},
// {validator: validateSerialNumberOnePrefix, message: '同一隧道的序列号前缀需相同', trigger: ['blur', 'change']}
],
totalLength: [{required: true, message: '请输入隧道长度', trigger: ['blur', 'change']}],
constructionLength: [{required: true, message: '请输入施工长度', trigger: ['blur', 'change']}],
@@ -272,6 +298,8 @@ const siteName = ref(localStorage.getItem('site'))
const form = ref({
tunnelName: '',
tunnelAlias: '',
serialNumberPrefix: '',
serialNumberOne: '',
serialNumber: '',
totalLength: '',
referenceFrequency: '',

View File

@@ -435,7 +435,8 @@ const getScreenInfo = (id) => {
initSceneData(id).then((res) => {
tunnelLength.value = res.data.tunnelLength
constructionLength.value = res.data.constructionLength
serialNumber.value = res.data.serialNumber
// serialNumber.value = res.data.serialNumber.slice(0, -2)
serialNumber.value = res.data.serialNumberPrefix
initWebSocket();
})
}
@@ -563,8 +564,10 @@ const nextBtn = () => {
};
const initWebSocket = () => {
// let wsUrl = `ws://192.168.31.175:9000/websocket/equipment/${token}/${serialNumber.value}`
let wsUrl = `ws://web-tunnel.feashow.com/api/wstunnel/websocket/equipment/${token}/${serialNumber.value}`;
// let wsUrl = `ws://192.168.31.176:9000/websocket/equipment/${token}/${serialNumber.value}`
// let wsUrl = `ws://web-tunnel.feashow.com/api/wstunnel/websocket/equipment/${token}/${serialNumber.value}`;
let wsUrl = import.meta.env.VITE_BASE_WSURL+`/${token}/${serialNumber.value}`;
// let wsUrl = `ws://clay.frp.feashow.cn/wstunnel/websocket/equipment/${token}/${serialNumber.value}`;
socket = new WebSocket(wsUrl);
//连接发生错误的回调方法
socket.onerror = function () {
@@ -576,7 +579,7 @@ const initWebSocket = () => {
};
//接收到消息的回调方法
socket.onmessage = function (event) {
// console.log("服务器返回的信息: ", JSON.parse(event.data));
console.log("服务器返回的信息: ", JSON.parse(event.data));
const type = JSON.parse(event.data).type;
const data = JSON.parse(event.data).data;
if (type === "equipment") {

View File

@@ -58,9 +58,12 @@ export default defineConfig({
strictPort: false,
open: true,
proxy: {
// '/api/tunnel': {
// // target: 'http://gateway.feashow.cn',
// target: 'http://192.168.31.175:8000',
// // '/api/tunnel': {
// '/tunnel': {
//
// // // target: 'http://gateway.feashow.cn',
// target: 'http://frp.feashow.cn:31800/',
// // target: 'http://clay.frp.feashow.cn',
// changeOrigin: true,
// rewrite: (path) => path.replace(/^\/api/, ''),
// },
@@ -72,13 +75,20 @@ export default defineConfig({
// },
'/api': {
target: 'http://web-tunnel.feashow.com/api',
// target: 'http://192.168.31.175:8000',
changeOrigin: true,
rewrite: (path) => path.replace(/^\/api/, ''),
},
'/socket': {
target: 'ws://web-tunnel.feashow.com/api/notice-ws/notice',
ws: true
},
'/websocket': {
target: 'ws://web-tunnel.feashow.com/api/wstunnel/websocket/equipment',
// target: 'ws://192.168.31.176:9000/websocket/debug',
changeOrigin: true,
ws: true,
rewrite: (path) => path.replace(/^\/websocket/, '')
}
}
}