create.vue 9.5 KB

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