SDKModal.vue 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. <template>
  2. <el-dialog title="1" v-model="dialogVisible" width="50%">
  3. <el-form ref="formRef" :model="formData" :rules="rules" label-position="top" class="instance-form">
  4. <el-row :gutter="24">
  5. <!-- 第1行 -->
  6. <el-col :span="12">
  7. <el-form-item label="实例唯一标识" prop="instanceId">
  8. <el-input v-model="formData.instanceId" disabled placeholder="自动生成" />
  9. </el-form-item>
  10. </el-col>
  11. <el-col :span="12">
  12. <el-form-item label="所属用户" prop="userId">
  13. <el-select v-model="formData.userId" placeholder="请选择所属用户" style="width: 100%">
  14. <el-option label="用户A" value="1" />
  15. <el-option label="用户B" value="2" />
  16. </el-select>
  17. </el-form-item>
  18. </el-col>
  19. <!-- 第2行 -->
  20. <el-col :span="12">
  21. <el-form-item label="所属订单" prop="orderId">
  22. <el-select v-model="formData.orderId" placeholder="请选择所属订单" style="width: 100%">
  23. <el-option label="订单A" value="1" />
  24. <el-option label="订单B" value="2" />
  25. </el-select>
  26. </el-form-item>
  27. </el-col>
  28. <el-col :span="12">
  29. <el-form-item label="实例名称" prop="instanceName">
  30. <el-input v-model="formData.instanceName" placeholder="请输入实例名称" />
  31. </el-form-item>
  32. </el-col>
  33. <!-- 第3行 -->
  34. <el-col :span="12">
  35. <el-form-item label="实例类型" prop="instanceType">
  36. <el-input v-model="formData.instanceType" placeholder="请输入实例类型" />
  37. </el-form-item>
  38. </el-col>
  39. <el-col :span="12">
  40. <el-form-item label="无数据超时时间" prop="noDataTimeout">
  41. <el-input v-model="formData.noDataTimeout" placeholder="请输入" />
  42. </el-form-item>
  43. </el-col>
  44. <!-- 第4行:状态与开关组 -->
  45. <el-col :span="12">
  46. <el-form-item label="实例状态" prop="status">
  47. <el-radio-group v-model="formData.status">
  48. <el-radio :label="1">正常</el-radio>
  49. <el-radio :label="0">禁用</el-radio>
  50. </el-radio-group>
  51. </el-form-item>
  52. </el-col>
  53. <el-col :span="12">
  54. <!-- 这里使用 flex 布局让三个开关并排 -->
  55. <div class="switch-group">
  56. <el-form-item label="无心跳通讯" prop="noHeartbeat">
  57. <el-switch v-model="formData.noHeartbeat" />
  58. </el-form-item>
  59. <el-form-item label="是否启用LTS" prop="enableLts">
  60. <el-switch v-model="formData.enableLts" />
  61. </el-form-item>
  62. <el-form-item label="断线自动重连" prop="autoReconnect">
  63. <el-switch v-model="formData.autoReconnect" />
  64. </el-form-item>
  65. </div>
  66. </el-col>
  67. <!-- 第5行 -->
  68. <el-col :span="12">
  69. <el-form-item label="限制单连接流量每秒NKBps" prop="flowLimit">
  70. <el-input v-model="formData.flowLimit" placeholder="请输入" />
  71. </el-form-item>
  72. </el-col>
  73. <el-col :span="12">
  74. <el-form-item label="限制单连接每秒发送包数" prop="packetLimit">
  75. <el-input v-model="formData.packetLimit" placeholder="请输入" />
  76. </el-form-item>
  77. </el-col>
  78. <!-- 第6行 -->
  79. <el-col :span="12">
  80. <el-form-item label="客户端最大并发数" prop="maxConcurrency">
  81. <el-input v-model="formData.maxConcurrency" placeholder="请输入" />
  82. </el-form-item>
  83. </el-col>
  84. <el-col :span="12">
  85. <el-form-item label="备注" prop="remark">
  86. <el-input v-model="formData.remark" placeholder="请输入备注" />
  87. </el-form-item>
  88. </el-col>
  89. </el-row>
  90. </el-form>
  91. <!-- 弹窗底部操作按钮 -->
  92. <template #footer>
  93. <span class="dialog-footer">
  94. <el-button type="primary" class="is-gradient" @click="handleSubmit">确定</el-button>
  95. <el-button @click="dialogVisible = false">取消</el-button>
  96. </span>
  97. </template>
  98. </el-dialog>
  99. </template>
  100. <script setup lang="ts">
  101. import type { FormInstance, FormRules } from 'element-plus'
  102. const dialogVisible = defineModel<boolean>('visible', {
  103. default: false
  104. })
  105. const formRef = ref<FormInstance>()
  106. const emit = defineEmits(['update:visible'])
  107. const formData = reactive({
  108. instanceId: '',
  109. userId: '',
  110. orderId: '',
  111. instanceName: '',
  112. instanceType: '',
  113. noDataTimeout: '',
  114. status: 1, // 1:正常 0:禁用
  115. noHeartbeat: true,
  116. enableLts: false,
  117. autoReconnect: true,
  118. flowLimit: '',
  119. packetLimit: '',
  120. maxConcurrency: '',
  121. remark: ''
  122. })
  123. const rules = reactive<FormRules>({
  124. userId: [{ required: true, message: '请选择所属用户', trigger: 'change' }],
  125. orderId: [{ required: true, message: '请选择所属订单', trigger: 'change' }],
  126. instanceName: [{ required: true, message: '请输入实例名称', trigger: 'blur' }]
  127. })
  128. const close = () => {
  129. emit('update:visible', false)
  130. }
  131. const confirm = () => {
  132. emit('update:visible', false)
  133. }
  134. const handleSubmit = async () => {
  135. if (!formRef.value) return
  136. await formRef.value.validate((valid, fields) => {
  137. if (valid) {
  138. console.log('提交的数据:', formData)
  139. dialogVisible.value = false
  140. } else {
  141. console.log('校验失败:', fields)
  142. }
  143. })
  144. }
  145. </script>
  146. <style lang="scss" scoped>
  147. .switch-group {
  148. display: flex;
  149. justify-content: space-between;
  150. gap: 16px;
  151. /* 让组内的 form-item 占满剩余空间 */
  152. :deep(.el-form-item) {
  153. flex: 1;
  154. margin-bottom: 0; // 消除多余的底部边距
  155. }
  156. }
  157. </style>