create.vue 9.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253
  1. <template>
  2. <el-card class="system-dic-container" style="position: relative;">
  3. <el-tabs v-model="activeName" class="demo-tabs" @tab-click="handleClick">
  4. <el-tab-pane label="标准视图" name="first">
  5. <el-collapse v-model="activeViewName">
  6. <el-collapse-item title="基本信息" name="1">
  7. <div class="collapse-wrap">
  8. <el-form style="width: 600px;margin: 0 auto;" :model="form" label-width="68px">
  9. <el-form-item label="名称">
  10. <el-input v-model="form.name" />
  11. </el-form-item>
  12. <el-form-item label="类型">
  13. <el-select v-model="form.region" placeholder="请选择类型">
  14. <el-option label="Zone one" value="shanghai" />
  15. <el-option label="Zone two" value="beijing" />
  16. </el-select>
  17. </el-form-item>
  18. <el-form-item label="禁用">
  19. <el-switch style="--el-switch-on-color: #dc1414;" v-model="form.delivery" />
  20. </el-form-item>
  21. </el-form>
  22. </div>
  23. </el-collapse-item>
  24. <el-collapse-item title="串口参数" name="2">
  25. <div class="collapse-wrap">
  26. <el-form style="width: 600px;margin: 0 auto;" :model="form" label-width="68px">
  27. <el-form-item label="端口">
  28. <el-button></el-button>
  29. </el-form-item>
  30. <el-form-item label="波特率">
  31. <el-select v-model="form.region" placeholder="请选择波特率">
  32. <el-option label="Zone one" value="shanghai" />
  33. <el-option label="Zone two" value="beijing" />
  34. </el-select>
  35. </el-form-item>
  36. <el-form-item label="数据位">
  37. <el-select v-model="form.region" placeholder="请选择数据位">
  38. <el-option label="Zone one" value="shanghai" />
  39. <el-option label="Zone two" value="beijing" />
  40. </el-select>
  41. </el-form-item>
  42. <el-form-item label="停止位">
  43. <el-select v-model="form.region" placeholder="请选择停止位">
  44. <el-option label="Zone one" value="shanghai" />
  45. <el-option label="Zone two" value="beijing" />
  46. </el-select>
  47. </el-form-item>
  48. <el-form-item label="检验位">
  49. <el-select v-model="form.region" placeholder="请选择检验位">
  50. <el-option label="Zone one" value="shanghai" />
  51. <el-option label="Zone two" value="beijing" />
  52. </el-select>
  53. </el-form-item>
  54. </el-form>
  55. </div>
  56. </el-collapse-item>
  57. <el-collapse-item title="断线重连" name="3">
  58. <el-form style="width: 600px;margin: 0 auto;" :model="form" label-width="68px">
  59. <el-form-item label="启用">
  60. <el-switch v-model="form.delivery" />
  61. </el-form-item>
  62. <el-form-item label="间隔">
  63. <el-input-number v-model="num" :min="1" :max="10" @change="handleChange" />
  64. </el-form-item>
  65. <el-form-item label="最大次数">
  66. <el-input-number v-model="num" :min="1" :max="10" @change="handleChange" />
  67. </el-form-item>
  68. </el-form>
  69. </el-collapse-item>
  70. <el-collapse-item title="协议适配" name="4">
  71. <el-form style="width: 600px;margin: 0 auto;" :model="form" label-width="68px">
  72. <el-form-item label="协议">
  73. <el-select v-model="form.region" placeholder="请选择协议适配">
  74. <el-option label="Zone one" value="shanghai" />
  75. <el-option label="Zone two" value="beijing" />
  76. </el-select>
  77. </el-form-item>
  78. <el-form-item label="协议参数">
  79. <codeEditor class="params" ref="mirrorRef"
  80. :mode="resourceModalPro.mode"
  81. :content="resourceModalPro.content"
  82. >
  83. </codeEditor>
  84. </el-form-item>
  85. </el-form>
  86. </el-collapse-item>
  87. </el-collapse>
  88. </el-tab-pane>
  89. <!-- <el-tab-pane label="专家视图" name="second">
  90. <h1>专家视图</h1>
  91. </el-tab-pane> -->
  92. </el-tabs>
  93. <div style="position: absolute;right:20px;top: 20px;">
  94. <el-button size="medium">取消</el-button>
  95. <el-button size="medium" type="primary">提交</el-button>
  96. </div>
  97. <!-- <codeEditor ref="mirrorRef"
  98. :mode="resourceModalPro.mode"
  99. :content="resourceModalPro.content"
  100. >
  101. </codeEditor> -->
  102. </el-card>
  103. </template>
  104. <script lang="ts">
  105. import { toRefs, reactive, onMounted, ref, defineComponent } from 'vue';
  106. import { Delete, Edit, Search, Share, Upload } from '@element-plus/icons-vue';
  107. import { ElMessageBox, ElMessage, FormInstance } from 'element-plus';
  108. import type { TabsPaneContext } from 'element-plus'
  109. import codeEditor from '/@/components/codeEditor/index.vue'
  110. import serverDetail from './component/serverDetail.vue'
  111. import { useRoute } from 'vue-router';
  112. import api from '/@/api/network';
  113. interface TableDataState {
  114. // ids: number[];
  115. // id: string;
  116. activeViewName: string[];
  117. resourceModalPro: {
  118. mode: string,
  119. content: string,
  120. // content: object,
  121. },
  122. detail: object,
  123. form: object
  124. }
  125. export default defineComponent({
  126. name: 'tunnelCreate',
  127. components: { codeEditor, serverDetail },
  128. props: {
  129. type: {
  130. type: String,
  131. default: ''
  132. }
  133. },
  134. setup(props, context) {
  135. const route = useRoute();
  136. const state = reactive<TableDataState>({
  137. // id: "",
  138. resourceModalPro: {
  139. mode: '',
  140. content: ''
  141. },
  142. detail:{},
  143. activeViewName: ['1','2','3','4'],
  144. form:{
  145. name: '',
  146. region: '',
  147. date1: '',
  148. date2: '',
  149. delivery: false,
  150. type: [],
  151. resource: '',
  152. desc: '',
  153. }
  154. });
  155. const activeName = ref('first')
  156. // const activeViewName = ref('1')
  157. const getDetail = () => {
  158. const id = route.params && route.params.id;
  159. api.tunnel.getDetail({"id": id}).then((res: any) => {
  160. console.log(res)
  161. state.detail = res
  162. })
  163. };
  164. onMounted(() => {
  165. // return;
  166. let obj = {
  167. "id": 1,
  168. "name": "新建服务器",
  169. "type": "tcp",
  170. "addr": "10010",
  171. "register": {
  172. "regex": "^\\w+$"
  173. },
  174. "heartbeat": {
  175. "enable": false,
  176. "timeout": 30,
  177. "regex": "^\\w+$"
  178. },
  179. "protocol": {
  180. "name": "ModbusTCP",
  181. "options": {}
  182. },
  183. "devices": [
  184. {
  185. "station": 1,
  186. "product_id": ""
  187. }
  188. ],
  189. "disabled": false,
  190. "updated": "2022-08-26T15:10:07+08:00",
  191. "created": "2022-08-20T18:44:20+08:00",
  192. "running": true
  193. }
  194. var jsonData = JSON.stringify(obj);//data是请求的后台数据
  195. state.resourceModalPro.content = JSON.stringify(JSON.parse(jsonData),null,4);
  196. });
  197. const handleClick = (tab: TabsPaneContext, event: Event) => {
  198. console.log(tab, event)
  199. }
  200. return {
  201. Edit,
  202. activeName,
  203. getDetail,
  204. handleClick,
  205. // editDicRef,
  206. // editAttrRef,
  207. // editFunRef,
  208. // editEventRef,
  209. // editTabRef,
  210. ...toRefs(props),
  211. ...toRefs(state),
  212. };
  213. },
  214. });
  215. </script>
  216. <style>
  217. .CodeMirror {
  218. width: 100%;
  219. height: 600px;
  220. font-size: 16px;
  221. }
  222. </style>
  223. <style lang="scss" scoped>
  224. ::v-deep .el-collapse-item__header {
  225. position: relative;
  226. padding-left: 20px;
  227. .el-collapse-item__arrow {
  228. margin: 0!important;
  229. position: absolute;
  230. left: 0;
  231. right: 0;
  232. }
  233. }
  234. ::v-deep .el-input,
  235. ::v-deep .el-input-number {
  236. width: 500px;
  237. }
  238. ::v-deep .params {
  239. width: 600px;
  240. }
  241. </style>