|  | @@ -0,0 +1,254 @@
 | 
	
		
			
				|  |  | +<template>
 | 
	
		
			
				|  |  | +	<el-card class="system-dic-container" style="position: relative;">
 | 
	
		
			
				|  |  | +		<el-tabs v-model="activeName" class="demo-tabs" @tab-click="handleClick">
 | 
	
		
			
				|  |  | +			<el-tab-pane label="标准视图" name="first">
 | 
	
		
			
				|  |  | +				<el-collapse v-model="activeViewName">
 | 
	
		
			
				|  |  | +                    <el-collapse-item title="基本信息" name="1">
 | 
	
		
			
				|  |  | +                        <div class="collapse-wrap">
 | 
	
		
			
				|  |  | +                            <el-form style="width: 600px;margin: 0 auto;" :model="form" label-width="68px">
 | 
	
		
			
				|  |  | +                                <el-form-item label="名称">
 | 
	
		
			
				|  |  | +                                <el-input v-model="form.name" />
 | 
	
		
			
				|  |  | +                                </el-form-item>
 | 
	
		
			
				|  |  | +                                <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-form-item>
 | 
	
		
			
				|  |  | +                                <el-form-item label="禁用">
 | 
	
		
			
				|  |  | +                                    <el-switch style="--el-switch-on-color: #dc1414;" v-model="form.delivery" />
 | 
	
		
			
				|  |  | +                                </el-form-item>
 | 
	
		
			
				|  |  | +                            </el-form>
 | 
	
		
			
				|  |  | +                        </div>
 | 
	
		
			
				|  |  | +                    </el-collapse-item>
 | 
	
		
			
				|  |  | +                    <el-collapse-item title="串口参数" name="2">
 | 
	
		
			
				|  |  | +                        <div class="collapse-wrap">
 | 
	
		
			
				|  |  | +                            <el-form style="width: 600px;margin: 0 auto;" :model="form" label-width="68px">
 | 
	
		
			
				|  |  | +                                <el-form-item label="端口">
 | 
	
		
			
				|  |  | +                                    <el-button></el-button>
 | 
	
		
			
				|  |  | +                                </el-form-item>
 | 
	
		
			
				|  |  | +                                <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-form-item>
 | 
	
		
			
				|  |  | +                                <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-form-item>
 | 
	
		
			
				|  |  | +                                <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-form-item>
 | 
	
		
			
				|  |  | +                                <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-form-item>
 | 
	
		
			
				|  |  | +                            </el-form>
 | 
	
		
			
				|  |  | +                        </div>
 | 
	
		
			
				|  |  | +                    </el-collapse-item>
 | 
	
		
			
				|  |  | +                    <el-collapse-item title="断线重连" name="3">
 | 
	
		
			
				|  |  | +                        <el-form style="width: 600px;margin: 0 auto;" :model="form" label-width="68px">
 | 
	
		
			
				|  |  | +                            <el-form-item label="启用">
 | 
	
		
			
				|  |  | +                                <el-switch v-model="form.delivery" />
 | 
	
		
			
				|  |  | +                            </el-form-item>
 | 
	
		
			
				|  |  | +                            <el-form-item label="间隔">
 | 
	
		
			
				|  |  | +                                <el-input-number v-model="num" :min="1" :max="10" @change="handleChange" />
 | 
	
		
			
				|  |  | +                            </el-form-item>
 | 
	
		
			
				|  |  | +                            <el-form-item label="最大次数">
 | 
	
		
			
				|  |  | +                                <el-input-number v-model="num" :min="1" :max="10" @change="handleChange" />
 | 
	
		
			
				|  |  | +                            </el-form-item>
 | 
	
		
			
				|  |  | +                        </el-form>
 | 
	
		
			
				|  |  | +                    </el-collapse-item>
 | 
	
		
			
				|  |  | +                    <el-collapse-item title="协议适配" name="4">
 | 
	
		
			
				|  |  | +                        <el-form style="width: 600px;margin: 0 auto;" :model="form" label-width="68px">
 | 
	
		
			
				|  |  | +                            <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-form-item>
 | 
	
		
			
				|  |  | +                            <el-form-item label="协议参数">
 | 
	
		
			
				|  |  | +                                
 | 
	
		
			
				|  |  | +                                <codeEditor class="params" ref="mirrorRef"
 | 
	
		
			
				|  |  | +                                :mode="resourceModalPro.mode"
 | 
	
		
			
				|  |  | +                                :content="resourceModalPro.content"
 | 
	
		
			
				|  |  | +                                >
 | 
	
		
			
				|  |  | +                                </codeEditor>
 | 
	
		
			
				|  |  | +                            </el-form-item>
 | 
	
		
			
				|  |  | +                        </el-form>
 | 
	
		
			
				|  |  | +                    </el-collapse-item>
 | 
	
		
			
				|  |  | +                </el-collapse>
 | 
	
		
			
				|  |  | +			</el-tab-pane>
 | 
	
		
			
				|  |  | +			<el-tab-pane label="专家视图" name="second">
 | 
	
		
			
				|  |  | +                <h1>专家视图</h1>
 | 
	
		
			
				|  |  | +            </el-tab-pane>
 | 
	
		
			
				|  |  | +		</el-tabs>
 | 
	
		
			
				|  |  | +		<div style="position: absolute;right:20px;top: 34px;">
 | 
	
		
			
				|  |  | +			<el-icon style="font-size: 16px;"><ele-RefreshRight /></el-icon>
 | 
	
		
			
				|  |  | +			<el-icon style="font-size: 16px;margin: 0 6px;"><ele-Operation /></el-icon>
 | 
	
		
			
				|  |  | +			<el-icon style="font-size: 16px;"><ele-Edit /></el-icon>
 | 
	
		
			
				|  |  | +		</div>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	  	 <!-- <codeEditor ref="mirrorRef"
 | 
	
		
			
				|  |  | +	  :mode="resourceModalPro.mode"
 | 
	
		
			
				|  |  | +	  :content="resourceModalPro.content"
 | 
	
		
			
				|  |  | +	  >
 | 
	
		
			
				|  |  | +	  </codeEditor> -->
 | 
	
		
			
				|  |  | +	</el-card>
 | 
	
		
			
				|  |  | +</template>
 | 
	
		
			
				|  |  | +<script lang="ts">
 | 
	
		
			
				|  |  | +import { toRefs, reactive, onMounted, ref, defineComponent } from 'vue';
 | 
	
		
			
				|  |  | +import { Delete, Edit, Search, Share, Upload } from '@element-plus/icons-vue';
 | 
	
		
			
				|  |  | +import { ElMessageBox, ElMessage, FormInstance } from 'element-plus';
 | 
	
		
			
				|  |  | +import type { TabsPaneContext } from 'element-plus'
 | 
	
		
			
				|  |  | +import codeEditor from '/@/components/codeEditor/index.vue'
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +import serverDetail from './component/serverDetail.vue'
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +import { useRoute } from 'vue-router';
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +import api from '/@/api/network';
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +interface TableDataState {
 | 
	
		
			
				|  |  | +	// ids: number[];
 | 
	
		
			
				|  |  | +	// id: string;
 | 
	
		
			
				|  |  | +    activeViewName: string[];
 | 
	
		
			
				|  |  | +	resourceModalPro: {
 | 
	
		
			
				|  |  | +		mode: string,
 | 
	
		
			
				|  |  | +		content: string,
 | 
	
		
			
				|  |  | +		// content: object,
 | 
	
		
			
				|  |  | +	},
 | 
	
		
			
				|  |  | +	detail: object,
 | 
	
		
			
				|  |  | +    form: object
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +export default defineComponent({
 | 
	
		
			
				|  |  | +	name: 'tunnelCreate',
 | 
	
		
			
				|  |  | +	components: { codeEditor, serverDetail },
 | 
	
		
			
				|  |  | +	props: {
 | 
	
		
			
				|  |  | +		type: {
 | 
	
		
			
				|  |  | +			type: String,
 | 
	
		
			
				|  |  | +			default: ''
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +	},
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	setup(props, context) {
 | 
	
		
			
				|  |  | +		const route = useRoute();
 | 
	
		
			
				|  |  | +		const state = reactive<TableDataState>({
 | 
	
		
			
				|  |  | +            // id: "",
 | 
	
		
			
				|  |  | +			resourceModalPro: {
 | 
	
		
			
				|  |  | +				mode: '',
 | 
	
		
			
				|  |  | +				content: ''
 | 
	
		
			
				|  |  | +			},
 | 
	
		
			
				|  |  | +			detail:{},
 | 
	
		
			
				|  |  | +            activeViewName: ['1','2','3','4'],
 | 
	
		
			
				|  |  | +            form:{
 | 
	
		
			
				|  |  | +                name: '',
 | 
	
		
			
				|  |  | +                region: '',
 | 
	
		
			
				|  |  | +                date1: '',
 | 
	
		
			
				|  |  | +                date2: '',
 | 
	
		
			
				|  |  | +                delivery: false,
 | 
	
		
			
				|  |  | +                type: [],
 | 
	
		
			
				|  |  | +                resource: '',
 | 
	
		
			
				|  |  | +                desc: '',
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +		});
 | 
	
		
			
				|  |  | +		const activeName = ref('first')
 | 
	
		
			
				|  |  | +        // const activeViewName = ref('1')
 | 
	
		
			
				|  |  | +		const getDetail = () => {
 | 
	
		
			
				|  |  | +			const id = route.params && route.params.id;
 | 
	
		
			
				|  |  | +			api.getDetail({"id": id}).then((res: any) => {
 | 
	
		
			
				|  |  | +				console.log(res)
 | 
	
		
			
				|  |  | +				state.detail = res
 | 
	
		
			
				|  |  | +			})
 | 
	
		
			
				|  |  | +		};
 | 
	
		
			
				|  |  | +		onMounted(() => {
 | 
	
		
			
				|  |  | +			// return;
 | 
	
		
			
				|  |  | +			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
 | 
	
		
			
				|  |  | +					}
 | 
	
		
			
				|  |  | +					var jsonData = JSON.stringify(obj);//data是请求的后台数据
 | 
	
		
			
				|  |  | +					state.resourceModalPro.content = JSON.stringify(JSON.parse(jsonData),null,4);
 | 
	
		
			
				|  |  | +		});
 | 
	
		
			
				|  |  | +		const handleClick = (tab: TabsPaneContext, event: Event) => {
 | 
	
		
			
				|  |  | +			console.log(tab, event)
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		return {
 | 
	
		
			
				|  |  | +			Edit,
 | 
	
		
			
				|  |  | +			activeName,
 | 
	
		
			
				|  |  | +			getDetail,
 | 
	
		
			
				|  |  | +			handleClick,
 | 
	
		
			
				|  |  | +			// editDicRef,
 | 
	
		
			
				|  |  | +			// editAttrRef,
 | 
	
		
			
				|  |  | +			// editFunRef,
 | 
	
		
			
				|  |  | +			// editEventRef,
 | 
	
		
			
				|  |  | +			// editTabRef,
 | 
	
		
			
				|  |  | +			...toRefs(props),
 | 
	
		
			
				|  |  | +			...toRefs(state),
 | 
	
		
			
				|  |  | +		};
 | 
	
		
			
				|  |  | +	},
 | 
	
		
			
				|  |  | +});
 | 
	
		
			
				|  |  | +</script>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +<style>
 | 
	
		
			
				|  |  | +.CodeMirror {
 | 
	
		
			
				|  |  | +  width: 100%;
 | 
	
		
			
				|  |  | +  height: 600px;
 | 
	
		
			
				|  |  | +  font-size: 16px;
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +</style>
 | 
	
		
			
				|  |  | +<style lang="scss" scoped>
 | 
	
		
			
				|  |  | +::v-deep .el-collapse-item__header {
 | 
	
		
			
				|  |  | +    position: relative;
 | 
	
		
			
				|  |  | +    padding-left: 20px;
 | 
	
		
			
				|  |  | +    .el-collapse-item__arrow {
 | 
	
		
			
				|  |  | +        margin: 0!important;
 | 
	
		
			
				|  |  | +        position: absolute;
 | 
	
		
			
				|  |  | +        left: 0;
 | 
	
		
			
				|  |  | +        right: 0;
 | 
	
		
			
				|  |  | +        
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +::v-deep .el-input,
 | 
	
		
			
				|  |  | +::v-deep .el-input-number {
 | 
	
		
			
				|  |  | +    width: 500px;
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +::v-deep .params {
 | 
	
		
			
				|  |  | +    width: 600px;
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +</style>
 | 
	
		
			
				|  |  | +
 |