ApiInfo.vue 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197
  1. <template>
  2. <el-form
  3. :model="form"
  4. label-position="top"
  5. label-width="120px"
  6. :rules="rules"
  7. ref="formRef"
  8. >
  9. <!-- 默认 API 地址 -->
  10. <el-row :gutter="20">
  11. <el-col :span="24">
  12. <el-form-item prop="defaultApiUrl" label="默认API地址">
  13. <template #label>
  14. <span class="el-form-item__label">默认API地址</span>
  15. </template>
  16. <el-input
  17. v-model="form.defaultApiUrl"
  18. placeholder="请输入默认API地址,如:https://api.openai.com/v1"
  19. />
  20. <div class="input-tips">用于连接服务器的API基础地址</div>
  21. </el-form-item>
  22. </el-col>
  23. </el-row>
  24. <!-- 认证方式 -->
  25. <el-row :gutter="20">
  26. <el-col :span="24">
  27. <el-form-item prop="authType" label="认证方式">
  28. <template #label>
  29. <span class="el-form-item__label">认证方式</span>
  30. </template>
  31. <el-select v-model="form.authType" placeholder="请选择认证方式" style="width: 100%">
  32. <el-option
  33. v-for="item in authTypeOption"
  34. :key="item.value"
  35. :label="item.label"
  36. :value="item.value"
  37. />
  38. </el-select>
  39. </el-form-item>
  40. </el-col>
  41. </el-row>
  42. <!-- 请求头Key -->
  43. <el-row :gutter="20">
  44. <el-col :span="24">
  45. <el-form-item prop="requestHeaderKey" label="请求头Key">
  46. <template #label>
  47. <span class="el-form-item__label">请求头Key</span>
  48. </template>
  49. <el-input v-model="form.requestHeaderKey" placeholder="请输入请求头Key,如:Authorization,X-API" />
  50. <div class="input-tips">例如:Authorization, X-API 等</div>
  51. </el-form-item>
  52. </el-col>
  53. </el-row>
  54. <!-- 请求头Value前缀 -->
  55. <el-row :gutter="20">
  56. <el-col :span="24">
  57. <el-form-item prop="requestHeaderValuePrefix" label="请求头Value前缀">
  58. <template #label>
  59. <span class="el-form-item__label">请求头Value前缀</span>
  60. </template>
  61. <el-input v-model="form.requestHeaderValuePrefix" placeholder="请输入请求头Value前缀,如:Bearer,basic" />
  62. <div class="input-tips">例如:Bearer, basic 等与API key拼接</div>
  63. </el-form-item>
  64. </el-col>
  65. </el-row>
  66. <!-- 请求超时时间 -->
  67. <el-row :gutter="20">
  68. <el-col :span="24">
  69. <el-form-item label="请求超时时间(毫秒)" prop="requestTimeout">
  70. <el-input
  71. v-model.number="form.requestTimeout"
  72. placeholder="请输入请求超时时间(秒)"
  73. style="width: 100%"
  74. />
  75. </el-form-item>
  76. </el-col>
  77. </el-row>
  78. <!-- 重试次数 -->
  79. <el-row :gutter="20">
  80. <el-col :span="24">
  81. <el-form-item label="重试次数" prop="retryCount">
  82. <template #label>
  83. <span class="el-form-item__label">重试次数</span>
  84. </template>
  85. <el-input
  86. v-model.number="form.retryCount"
  87. placeholder="请输入重试次数"
  88. style="width: 100%"
  89. />
  90. </el-form-item>
  91. </el-col>
  92. </el-row>
  93. <!-- 拓展配置 -->
  94. <el-row :gutter="20">
  95. <el-col :span="24">
  96. <el-form-item label="拓展配置" prop="extraConfig">
  97. <el-input
  98. v-model="form.extraConfig"
  99. type="textarea"
  100. :rows="4"
  101. placeholder="请输入拓展配置,例如:{ timeout: 5000, proxy: 'xxx' }"
  102. />
  103. </el-form-item>
  104. </el-col>
  105. </el-row>
  106. </el-form>
  107. </template>
  108. <script setup lang="ts">
  109. import { ref } from 'vue'
  110. import { ElMessage } from 'element-plus'
  111. const dialogVisible = ref(true)
  112. // ================== 表单数据类型定义 ==================
  113. interface Form {
  114. defaultApiUrl: string
  115. authType: string
  116. requestHeaderKey: string
  117. requestHeaderValuePrefix: string
  118. requestTimeout: number | null
  119. retryCount: number | null
  120. extraConfig: string
  121. }
  122. // ================== 表单数据初始化 ==================
  123. const form = ref<Form>({
  124. defaultApiUrl: '',
  125. authType: 'API_KEY',
  126. requestHeaderKey: 'Authorization',
  127. requestHeaderValuePrefix: 'Bearer',
  128. requestTimeout: 6,
  129. retryCount: 3,
  130. extraConfig: ''
  131. })
  132. // ================== 认证方式选项 ==================
  133. const authTypeOption = [
  134. { label: 'API Key', value: 'API_KEY' },
  135. { label: 'OAuth2', value: 'OAUTH2' },
  136. { label: 'None', value: 'NONE' }
  137. ]
  138. // ================== 表单验证规则 ==================
  139. const rules = {
  140. defaultApiUrl: [
  141. { required: true, message: '请输入默认 API 地址', trigger: 'blur' },
  142. { type: 'url', message: '请输入合法的 URL 地址', trigger: 'blur' }
  143. ],
  144. authType: [
  145. { required: true, message: '请选择认证方式', trigger: 'change' }
  146. ],
  147. requestHeaderKey: [
  148. { required: true, message: '请输入请求头 Key', trigger: 'blur' }
  149. ],
  150. requestHeaderValuePrefix: [
  151. { required: true, message: '请输入请求头 Value 前缀', trigger: 'blur' }
  152. ],
  153. retryCount: [
  154. { required: true, message: '请输入重试次数', trigger: 'blur' },
  155. { type: 'number', min: 0, max: 10, message: '重试次数应在 0~10 之间', trigger: 'blur' }
  156. ]
  157. }
  158. // ================== 表单引用 ==================
  159. const formRef = ref()
  160. // ================== 提交方法 ==================
  161. const submitForm = () => {
  162. formRef.value.validate((valid: boolean) => {
  163. if (valid) {
  164. ElMessage.success('验证通过,准备提交')
  165. console.log('提交数据:', form.value)
  166. // 这里可以调用 API 提交数据
  167. } else {
  168. ElMessage.error('请检查表单输入')
  169. return false
  170. }
  171. })
  172. }
  173. </script>
  174. <style scoped lang="scss">
  175. .input-tips {
  176. font-size: 12px;
  177. color: #999;
  178. margin-top: 4px;
  179. }
  180. </style>