|
@@ -7,76 +7,117 @@
|
|
<div class="collapse-wrap">
|
|
<div class="collapse-wrap">
|
|
<el-form style="width: 600px;margin: 0 auto;" :model="form" label-width="68px">
|
|
<el-form style="width: 600px;margin: 0 auto;" :model="form" label-width="68px">
|
|
<el-form-item label="名称">
|
|
<el-form-item label="名称">
|
|
- <el-input v-model="form.name" />
|
|
|
|
|
|
+ <el-input v-model="form.name" placeholder="请填写名称" />
|
|
</el-form-item>
|
|
</el-form-item>
|
|
<el-form-item label="类型">
|
|
<el-form-item label="类型">
|
|
- <el-select v-model="form.region" placeholder="请选择类型">
|
|
|
|
- <el-option label="Zone one" value="shanghai" />
|
|
|
|
- <el-option label="Zone two" value="beijing" />
|
|
|
|
- </el-select>
|
|
|
|
|
|
+ <el-select v-model="form.types" placeholder="请选择类型">
|
|
|
|
+ <el-option
|
|
|
|
+ v-for="dict in network_tunnel_type"
|
|
|
|
+ :key="dict.value"
|
|
|
|
+ :label="dict.label"
|
|
|
|
+ :value="dict.value">
|
|
|
|
+ </el-option>
|
|
|
|
+ </el-select>
|
|
|
|
+ </el-form-item>
|
|
|
|
+ <el-form-item v-show="form.types!='serial'" label="地址">
|
|
|
|
+ <el-input v-model="form.addr" placeholder="端口号,IP:端口" />
|
|
</el-form-item>
|
|
</el-form-item>
|
|
<el-form-item label="禁用">
|
|
<el-form-item label="禁用">
|
|
- <el-switch style="--el-switch-on-color: #dc1414;" v-model="form.delivery" />
|
|
|
|
|
|
+ <el-switch style="--el-switch-on-color: #dc1414;" v-model="form.status" />
|
|
</el-form-item>
|
|
</el-form-item>
|
|
</el-form>
|
|
</el-form>
|
|
</div>
|
|
</div>
|
|
</el-collapse-item>
|
|
</el-collapse-item>
|
|
- <el-collapse-item title="串口参数" name="2">
|
|
|
|
|
|
+ <el-collapse-item v-show="form.types=='serial'" title="串口参数" name="2">
|
|
<div class="collapse-wrap">
|
|
<div class="collapse-wrap">
|
|
<el-form style="width: 600px;margin: 0 auto;" :model="form" label-width="68px">
|
|
<el-form style="width: 600px;margin: 0 auto;" :model="form" label-width="68px">
|
|
<el-form-item label="端口">
|
|
<el-form-item label="端口">
|
|
- <el-button></el-button>
|
|
|
|
|
|
+ <el-button>/dev/ttyS0</el-button>
|
|
</el-form-item>
|
|
</el-form-item>
|
|
<el-form-item label="波特率">
|
|
<el-form-item label="波特率">
|
|
- <el-select v-model="form.region" placeholder="请选择波特率">
|
|
|
|
- <el-option label="Zone one" value="shanghai" />
|
|
|
|
- <el-option label="Zone two" value="beijing" />
|
|
|
|
|
|
+ <el-select v-model="form.serial.baud_rate" placeholder="请选择波特率">
|
|
|
|
+ <el-option label="150" :value="150" />
|
|
|
|
+ <el-option label="200" :value="200" />
|
|
|
|
+ <el-option label="300" :value="300" />
|
|
|
|
+ <el-option label="600" :value="600" />
|
|
|
|
+ <el-option label="1200" :value="1200" />
|
|
|
|
+ <el-option label="1800" :value="1800" />
|
|
|
|
+ <el-option label="2400" :value="2400" />
|
|
|
|
+ <el-option label="4800" :value="4800" />
|
|
|
|
+ <el-option label="7200" :value="7200" />
|
|
|
|
+ <el-option label="9600" :value="9600" />
|
|
|
|
+ <el-option label="14400" :value="14400" />
|
|
|
|
+ <el-option label="19200" :value="19200" />
|
|
|
|
+ <el-option label="28800" :value="28800" />
|
|
|
|
+ <el-option label="38400" :value="38400" />
|
|
|
|
+ <el-option label="57600" :value="57600" />
|
|
|
|
+ <el-option label="76800" :value="76800" />
|
|
|
|
+ <el-option label="115200" :value="115200" />
|
|
|
|
+ <el-option label="230400" :value="230400" />
|
|
</el-select>
|
|
</el-select>
|
|
</el-form-item>
|
|
</el-form-item>
|
|
<el-form-item label="数据位">
|
|
<el-form-item label="数据位">
|
|
- <el-select v-model="form.region" placeholder="请选择数据位">
|
|
|
|
- <el-option label="Zone one" value="shanghai" />
|
|
|
|
- <el-option label="Zone two" value="beijing" />
|
|
|
|
|
|
+ <el-select v-model="form.serial.data_bits" placeholder="请选择数据位">
|
|
|
|
+ <el-option label="5" :value="5" />
|
|
|
|
+ <el-option label="6" :value="6" />
|
|
|
|
+ <el-option label="7" :value="7" />
|
|
|
|
+ <el-option label="8" :value="8" />
|
|
</el-select>
|
|
</el-select>
|
|
</el-form-item>
|
|
</el-form-item>
|
|
<el-form-item label="停止位">
|
|
<el-form-item label="停止位">
|
|
- <el-select v-model="form.region" placeholder="请选择停止位">
|
|
|
|
- <el-option label="Zone one" value="shanghai" />
|
|
|
|
- <el-option label="Zone two" value="beijing" />
|
|
|
|
|
|
+ <el-select v-model="form.serial.stop_bits" placeholder="请选择停止位">
|
|
|
|
+ <el-option label="1" :value="1" />
|
|
|
|
+ <el-option label="2" :value="2" />
|
|
</el-select>
|
|
</el-select>
|
|
</el-form-item>
|
|
</el-form-item>
|
|
<el-form-item label="检验位">
|
|
<el-form-item label="检验位">
|
|
- <el-select v-model="form.region" placeholder="请选择检验位">
|
|
|
|
- <el-option label="Zone one" value="shanghai" />
|
|
|
|
- <el-option label="Zone two" value="beijing" />
|
|
|
|
|
|
+ <el-select v-model="form.serial.parity" placeholder="请选择检验位">
|
|
|
|
+ <el-option label="无" :value="0" />
|
|
|
|
+ <el-option label="偶" :value="1" />
|
|
|
|
+ <el-option label="奇" :value="2" />
|
|
</el-select>
|
|
</el-select>
|
|
</el-form-item>
|
|
</el-form-item>
|
|
</el-form>
|
|
</el-form>
|
|
</div>
|
|
</div>
|
|
</el-collapse-item>
|
|
</el-collapse-item>
|
|
- <el-collapse-item title="断线重连" name="3">
|
|
|
|
|
|
+ <el-collapse-item v-show="form.type!='serial'" title="心跳包" name="4">
|
|
<el-form style="width: 600px;margin: 0 auto;" :model="form" label-width="68px">
|
|
<el-form style="width: 600px;margin: 0 auto;" :model="form" label-width="68px">
|
|
<el-form-item label="启用">
|
|
<el-form-item label="启用">
|
|
- <el-switch v-model="form.delivery" />
|
|
|
|
|
|
+ <el-switch v-model="form.heartbeat.enable" />
|
|
|
|
+ </el-form-item>
|
|
|
|
+ </el-form>
|
|
|
|
+ </el-collapse-item>
|
|
|
|
+ <el-collapse-item v-if="form.types=='serial'||form.types=='tcp-client'||form.types=='udp-client'" title="断线重连" name="4">
|
|
|
|
+ <el-form style="width: 600px;margin: 0 auto;" :model="form" label-width="68px">
|
|
|
|
+ <el-form-item label="启用">
|
|
|
|
+ <el-switch v-model="form.retry.enable" />
|
|
</el-form-item>
|
|
</el-form-item>
|
|
<el-form-item label="间隔">
|
|
<el-form-item label="间隔">
|
|
- <el-input-number v-model="num" :min="1" :max="10" @change="handleChange" />
|
|
|
|
|
|
+ <el-input-number v-model="form.retry.timeout" :min="0" @change="handleChange" />
|
|
</el-form-item>
|
|
</el-form-item>
|
|
<el-form-item label="最大次数">
|
|
<el-form-item label="最大次数">
|
|
- <el-input-number v-model="num" :min="1" :max="10" @change="handleChange" />
|
|
|
|
|
|
+ <el-input-number v-model="form.retry.maximum" :min="0" @change="handleChange" />
|
|
</el-form-item>
|
|
</el-form-item>
|
|
</el-form>
|
|
</el-form>
|
|
</el-collapse-item>
|
|
</el-collapse-item>
|
|
- <el-collapse-item title="协议适配" name="4">
|
|
|
|
|
|
+ <el-collapse-item title="协议适配" name="5">
|
|
<el-form style="width: 600px;margin: 0 auto;" :model="form" label-width="68px">
|
|
<el-form style="width: 600px;margin: 0 auto;" :model="form" label-width="68px">
|
|
<el-form-item label="协议">
|
|
<el-form-item label="协议">
|
|
- <el-select v-model="form.region" placeholder="请选择协议适配">
|
|
|
|
- <el-option label="Zone one" value="shanghai" />
|
|
|
|
- <el-option label="Zone two" value="beijing" />
|
|
|
|
|
|
+ <el-select v-model="form.protocol.name" placeholder="请选择协议适配">
|
|
|
|
+ <el-option label="Modbus RTU" value="Modbus RTU" />
|
|
|
|
+ <el-option label="Modbus TCP" value="Modbus TCP" />
|
|
|
|
+ <el-option label="Omron Hostlink" value="Omron Hostlink" />
|
|
|
|
+ <el-option label="Omron FINS UDP" value="Omron FINS UDP" />
|
|
|
|
+ <el-option label="Omron FINS TCP" value="Omron FINS TCP" />
|
|
|
|
+ <el-option label="Simatic S7-200 Smart" value="Simatic S7-200 Smart" />
|
|
|
|
+ <el-option label="Simatic S7-200" value="Simatic S7-200" />
|
|
|
|
+ <el-option label="Simatic S7-300" value="Simatic S7-300" />
|
|
|
|
+ <el-option label="Simatic S7-400" value="Simatic S7-400" />
|
|
|
|
+ <el-option label="Simatic S7-1200" value="Simatic S7-1200" />
|
|
|
|
+ <el-option label="Simatic S7-1500" value="Simatic S7-1500" />
|
|
</el-select>
|
|
</el-select>
|
|
</el-form-item>
|
|
</el-form-item>
|
|
<el-form-item label="协议参数">
|
|
<el-form-item label="协议参数">
|
|
-
|
|
|
|
<codeEditor class="params" ref="mirrorRef"
|
|
<codeEditor class="params" ref="mirrorRef"
|
|
:mode="resourceModalPro.mode"
|
|
:mode="resourceModalPro.mode"
|
|
:content="resourceModalPro.content"
|
|
:content="resourceModalPro.content"
|
|
@@ -93,7 +134,7 @@
|
|
</el-tabs>
|
|
</el-tabs>
|
|
<div style="position: absolute;right:20px;top: 20px;">
|
|
<div style="position: absolute;right:20px;top: 20px;">
|
|
<el-button size="medium">取消</el-button>
|
|
<el-button size="medium">取消</el-button>
|
|
- <el-button size="medium" type="primary">提交</el-button>
|
|
|
|
|
|
+ <el-button @click="submit" size="medium" type="primary">提交</el-button>
|
|
</div>
|
|
</div>
|
|
|
|
|
|
<!-- <codeEditor ref="mirrorRef"
|
|
<!-- <codeEditor ref="mirrorRef"
|
|
@@ -104,7 +145,7 @@
|
|
</el-card>
|
|
</el-card>
|
|
</template>
|
|
</template>
|
|
<script lang="ts">
|
|
<script lang="ts">
|
|
-import { toRefs, reactive, onMounted, ref, defineComponent } from 'vue';
|
|
|
|
|
|
+import { toRefs, reactive, onMounted, ref, defineComponent, getCurrentInstance } from 'vue';
|
|
import { Delete, Edit, Search, Share, Upload } from '@element-plus/icons-vue';
|
|
import { Delete, Edit, Search, Share, Upload } from '@element-plus/icons-vue';
|
|
import { ElMessageBox, ElMessage, FormInstance } from 'element-plus';
|
|
import { ElMessageBox, ElMessage, FormInstance } from 'element-plus';
|
|
import type { TabsPaneContext } from 'element-plus'
|
|
import type { TabsPaneContext } from 'element-plus'
|
|
@@ -112,7 +153,7 @@ import codeEditor from '/@/components/codeEditor/index.vue'
|
|
|
|
|
|
import serverDetail from './component/serverDetail.vue'
|
|
import serverDetail from './component/serverDetail.vue'
|
|
|
|
|
|
-import { useRoute } from 'vue-router';
|
|
|
|
|
|
+import { useRoute, useRouter } from 'vue-router';
|
|
|
|
|
|
import api from '/@/api/network';
|
|
import api from '/@/api/network';
|
|
|
|
|
|
@@ -139,28 +180,57 @@ export default defineComponent({
|
|
},
|
|
},
|
|
|
|
|
|
setup(props, context) {
|
|
setup(props, context) {
|
|
|
|
+ const { proxy } = getCurrentInstance() as any;
|
|
const route = useRoute();
|
|
const route = useRoute();
|
|
- const state = reactive<TableDataState>({
|
|
|
|
|
|
+ const router = useRouter();
|
|
|
|
+ const { network_tunnel_type } = proxy.useDict('network_tunnel_type');
|
|
|
|
+
|
|
|
|
+ const state = reactive<TableDataState>({
|
|
// id: "",
|
|
// id: "",
|
|
resourceModalPro: {
|
|
resourceModalPro: {
|
|
mode: '',
|
|
mode: '',
|
|
content: ''
|
|
content: ''
|
|
},
|
|
},
|
|
detail:{},
|
|
detail:{},
|
|
- activeViewName: ['1','2','3','4'],
|
|
|
|
|
|
+ activeViewName: ['1','2','3','4','5'],
|
|
form:{
|
|
form:{
|
|
- name: '',
|
|
|
|
- region: '',
|
|
|
|
- date1: '',
|
|
|
|
- date2: '',
|
|
|
|
- delivery: false,
|
|
|
|
- type: [],
|
|
|
|
- resource: '',
|
|
|
|
- desc: '',
|
|
|
|
|
|
+ // 名称
|
|
|
|
+ name: '新建通道',
|
|
|
|
+ // 类型
|
|
|
|
+ types: 'serial',
|
|
|
|
+ // 禁用
|
|
|
|
+ status: false,
|
|
|
|
+ // 地址
|
|
|
|
+ addr: '',
|
|
|
|
+ // 串口参数
|
|
|
|
+ serial:{
|
|
|
|
+ baud_rate: 9600,
|
|
|
|
+ data_bits: 8,
|
|
|
|
+ stop_bits: 1,
|
|
|
|
+ parity: 0
|
|
|
|
+ },
|
|
|
|
+ // 断线重连
|
|
|
|
+ retry: {
|
|
|
|
+ enable: true,
|
|
|
|
+ timeout: 30,
|
|
|
|
+ maximum: 0,
|
|
|
|
+ },
|
|
|
|
+ // 协议适配
|
|
|
|
+ protocol: {
|
|
|
|
+ name: "Modbus RTU",
|
|
|
|
+ options: {}
|
|
|
|
+ },
|
|
|
|
+ // 心跳包
|
|
|
|
+ heartbeat: {
|
|
|
|
+ enable: false,
|
|
|
|
+ hex: "",
|
|
|
|
+ regex: "^\\w+$",
|
|
|
|
+ text: "",
|
|
|
|
+ timeout: 30
|
|
|
|
+ }
|
|
}
|
|
}
|
|
});
|
|
});
|
|
const activeName = ref('first')
|
|
const activeName = ref('first')
|
|
- // const activeViewName = ref('1')
|
|
|
|
const getDetail = () => {
|
|
const getDetail = () => {
|
|
const id = route.params && route.params.id;
|
|
const id = route.params && route.params.id;
|
|
api.tunnel.getDetail({"id": id}).then((res: any) => {
|
|
api.tunnel.getDetail({"id": id}).then((res: any) => {
|
|
@@ -168,37 +238,64 @@ export default defineComponent({
|
|
state.detail = res
|
|
state.detail = res
|
|
})
|
|
})
|
|
};
|
|
};
|
|
|
|
+ const submit = () => {
|
|
|
|
+ console.log(state.form)
|
|
|
|
+ // 串口参数-检验位-无
|
|
|
|
+ if(state.form.serial.parity == 0) {
|
|
|
|
+ state.form.serial.rs485 = false
|
|
|
|
+ delete state.form.serial.port
|
|
|
|
+ }
|
|
|
|
+ // 串口参数-检验位-偶/奇
|
|
|
|
+ if(state.form.serial.parity == 1 || state.form.serial.parity == 2) {
|
|
|
|
+ state.form.serial.port = null
|
|
|
|
+ delete state.form.serial.rs485
|
|
|
|
+ }
|
|
|
|
+ let params = {
|
|
|
|
+ ...state.form
|
|
|
|
+ }
|
|
|
|
+ console.log(params)
|
|
|
|
+ // return
|
|
|
|
+ api.tunnel.addItem({...state.form}).then((res: any) => {
|
|
|
|
+ console.log(res);
|
|
|
|
+ ElMessage.success('添加成功')
|
|
|
|
+ router.go(-1);
|
|
|
|
+ // const { list, total, page } = res
|
|
|
|
+ // state.data = list
|
|
|
|
+ // state.total = total
|
|
|
|
+ // state.param.page = page
|
|
|
|
+ });
|
|
|
|
+ };
|
|
onMounted(() => {
|
|
onMounted(() => {
|
|
- // return;
|
|
|
|
|
|
+
|
|
let obj = {
|
|
let obj = {
|
|
- "id": 1,
|
|
|
|
- "name": "新建服务器",
|
|
|
|
- "type": "tcp",
|
|
|
|
- "addr": "10010",
|
|
|
|
- "register": {
|
|
|
|
- "regex": "^\\w+$"
|
|
|
|
- },
|
|
|
|
- "heartbeat": {
|
|
|
|
- "enable": false,
|
|
|
|
- "timeout": 30,
|
|
|
|
- "regex": "^\\w+$"
|
|
|
|
- },
|
|
|
|
- "protocol": {
|
|
|
|
- "name": "ModbusTCP",
|
|
|
|
- "options": {}
|
|
|
|
- },
|
|
|
|
- "devices": [
|
|
|
|
- {
|
|
|
|
- "station": 1,
|
|
|
|
- "product_id": ""
|
|
|
|
- }
|
|
|
|
- ],
|
|
|
|
- "disabled": false,
|
|
|
|
- "updated": "2022-08-26T15:10:07+08:00",
|
|
|
|
- "created": "2022-08-20T18:44:20+08:00",
|
|
|
|
- "running": true
|
|
|
|
|
|
+ // "id": 1,
|
|
|
|
+ // "name": "新建服务器",
|
|
|
|
+ // "type": "tcp",
|
|
|
|
+ // "addr": "10010",
|
|
|
|
+ // "register": {
|
|
|
|
+ // "regex": "^\\w+$"
|
|
|
|
+ // },
|
|
|
|
+ // "heartbeat": {
|
|
|
|
+ // "enable": false,
|
|
|
|
+ // "timeout": 30,
|
|
|
|
+ // "regex": "^\\w+$"
|
|
|
|
+ // },
|
|
|
|
+ // "protocol": {
|
|
|
|
+ // "name": "ModbusTCP",
|
|
|
|
+ // "options": {}
|
|
|
|
+ // },
|
|
|
|
+ // "devices": [
|
|
|
|
+ // {
|
|
|
|
+ // "station": 1,
|
|
|
|
+ // "product_id": ""
|
|
|
|
+ // }
|
|
|
|
+ // ],
|
|
|
|
+ // "disabled": false,
|
|
|
|
+ // "updated": "2022-08-26T15:10:07+08:00",
|
|
|
|
+ // "created": "2022-08-20T18:44:20+08:00",
|
|
|
|
+ // "running": true
|
|
}
|
|
}
|
|
- var jsonData = JSON.stringify(obj);//data是请求的后台数据
|
|
|
|
|
|
+ var jsonData = JSON.stringify(obj);
|
|
state.resourceModalPro.content = JSON.stringify(JSON.parse(jsonData),null,4);
|
|
state.resourceModalPro.content = JSON.stringify(JSON.parse(jsonData),null,4);
|
|
});
|
|
});
|
|
const handleClick = (tab: TabsPaneContext, event: Event) => {
|
|
const handleClick = (tab: TabsPaneContext, event: Event) => {
|
|
@@ -210,11 +307,13 @@ export default defineComponent({
|
|
activeName,
|
|
activeName,
|
|
getDetail,
|
|
getDetail,
|
|
handleClick,
|
|
handleClick,
|
|
|
|
+ network_tunnel_type,
|
|
// editDicRef,
|
|
// editDicRef,
|
|
// editAttrRef,
|
|
// editAttrRef,
|
|
// editFunRef,
|
|
// editFunRef,
|
|
// editEventRef,
|
|
// editEventRef,
|
|
// editTabRef,
|
|
// editTabRef,
|
|
|
|
+ submit,
|
|
...toRefs(props),
|
|
...toRefs(props),
|
|
...toRefs(state),
|
|
...toRefs(state),
|
|
};
|
|
};
|