addModel.vue 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208
  1. <script setup lang="ts">
  2. import type { FormInstance, FormRules } from 'element-plus'
  3. import {addModel,editModel} from '@/api/modelConfig'
  4. import {modelConfigForm} from '@/api/modelConfig/types'
  5. import {onMounted} from 'vue';
  6. const props = defineProps<{
  7. modelValue: boolean,
  8. addOrEdit:string,
  9. model: modelConfigForm,
  10. }>()
  11. const emit = defineEmits<{ (e: 'update:dialogVisible', value: boolean): void }>()
  12. const { proxy } = getCurrentInstance() as ComponentInternalInstance;
  13. const baseInfoFormRef = ref<FormInstance>()
  14. const DEFAULT_FORM: modelConfigForm = {
  15. modelName: '',
  16. modelType: '',
  17. modelVersion: '',
  18. status: false,
  19. priority: null,
  20. description: '',
  21. apiKey: '',
  22. baseUrl: ''
  23. }
  24. const baseInfoForm = ref<modelConfigForm>({...DEFAULT_FORM})
  25. const rules = reactive<FormRules<modelConfigForm>>(
  26. {
  27. modelName:[
  28. { required:true,message:"请输入模型名称",trigger:"blur" }
  29. ],
  30. modelType: [
  31. {required:true,message:"请输入模型类型",trigger:"blur"}
  32. ],
  33. modelVersion: [
  34. {required:true,message:"请输入模型版本",trigger:"blur"}
  35. ]
  36. }
  37. )
  38. const modelTypeOption = ref(['大语言模型'])
  39. const activeName = ref("基本信息")
  40. onMounted(() => {
  41. if(props.model){
  42. baseInfoForm.value = {...props.model};
  43. }
  44. });
  45. const submit = () =>{
  46. baseInfoFormRef.value?.validate(async(valid:boolean)=>{
  47. if(valid){
  48. baseInfoForm.value.status = baseInfoForm.value.status? 1 : 0
  49. if (props.addOrEdit==="新增"){
  50. const res = await addModel(baseInfoForm.value)
  51. if(res.code===0){
  52. proxy?.$modal.msgSuccess('新增成功')
  53. emit("update:dialogVisible",false)
  54. }
  55. }else {
  56. const res = await editModel(baseInfoForm.value)
  57. if(res.code===0){
  58. proxy?.$modal.msgSuccess('新增成功')
  59. emit("update:dialogVisible",false)
  60. }
  61. }
  62. baseInfoForm.value = {...DEFAULT_FORM}
  63. baseInfoFormRef.value?.resetFields()
  64. }
  65. })
  66. }
  67. </script>
  68. <template>
  69. <el-tabs v-model="activeName">
  70. <el-tab-pane label="基本信息" name="基本信息">
  71. <el-form
  72. class="form-label"
  73. ref="baseInfoFormRef"
  74. :rules="rules"
  75. :model="baseInfoForm"
  76. >
  77. <el-form-item label="服务商">
  78. <el-select>
  79. <el-option/>
  80. </el-select>
  81. </el-form-item>
  82. <el-form-item label="模型名称" prop="modelName">
  83. <el-input placeholder="请输入模型名称,如:GPT-4" v-model="baseInfoForm.modelName">
  84. </el-input>
  85. </el-form-item>
  86. <el-form-item label="模型类型" prop="modelType">
  87. <el-select v-model="baseInfoForm.modelType">
  88. <el-option
  89. v-for="item in modelTypeOption"
  90. :key = "item"
  91. :value="item"
  92. :label="item"
  93. />
  94. </el-select>
  95. </el-form-item>
  96. <el-form-item label="模型版本" prop="modelVersion">
  97. <el-input placeholder="请输入模型版本,如:gpt-4-1106-preview" v-model="baseInfoForm.modelVersion">
  98. </el-input>
  99. <span>官方API调用时使用的模型标识符</span>
  100. </el-form-item>
  101. <el-form-item label="优先级" prop="priority">
  102. <el-input v-model="baseInfoForm.priority">
  103. </el-input>
  104. <span>数值越大优先级越高</span>
  105. </el-form-item>
  106. <el-form-item label="状态" prop="status">
  107. <el-switch active-text="启用" size="large" v-model="baseInfoForm.status" />
  108. </el-form-item>
  109. <el-form-item label="描述">
  110. <el-input type="textarea" placeholder="请输入描述状态" v-model="baseInfoForm.description"></el-input>
  111. </el-form-item>
  112. <div class="form-btn">
  113. <el-form-item>
  114. <el-button>取消</el-button>
  115. <el-button type="primary" @click.prevent="submit">确定</el-button>
  116. </el-form-item>
  117. </div>
  118. </el-form>
  119. </el-tab-pane>
  120. <el-tab-pane label="API配置" name="API配置">
  121. <el-form class="form-label">
  122. <el-form-item label="API基础地址">
  123. <el-input v-model="baseInfoForm.baseUrl" />
  124. <span>默认继承服务配置,可单独设置</span>
  125. </el-form-item>
  126. <el-form-item label="API密钥">
  127. <el-input type="password" show-password v-model="baseInfoForm.apiKey"/>
  128. <span>默认继承服务商配置,可单独设置</span>
  129. </el-form-item>
  130. <el-form-item label="请求超过时间(秒)">
  131. <el-input/>
  132. </el-form-item>
  133. <el-form-item label="重试次数">
  134. <el-input/>
  135. </el-form-item>
  136. <el-form-item label="请求方法">
  137. <el-select>
  138. <el-option/>
  139. </el-select>
  140. </el-form-item>
  141. <el-form-item label="请求头">
  142. <el-input type="textarea"/>
  143. <span>JSON格式,支持变量替换</span>
  144. </el-form-item>
  145. <div class="form-btn">
  146. <el-form-item>
  147. <el-button>取消</el-button>
  148. <el-button type="primary" @click.prevent="submit">确定</el-button>
  149. </el-form-item>
  150. </div>
  151. </el-form>
  152. </el-tab-pane>
  153. <el-tab-pane label="高级配置" name="高级配置">
  154. <el-form class="form-label">
  155. <el-form-item label="请求模板">
  156. <el-input type="textarea"/>
  157. <span>JSON格式,支持参数替换</span>
  158. </el-form-item>
  159. <el-form-item label="响应解析器">
  160. <el-select>
  161. <el-option/>
  162. </el-select>
  163. </el-form-item>
  164. <el-form-item label="自定义解析器代码">
  165. <el-input type="textarea"/>
  166. <span>选择自定义解析器时可编辑</span>
  167. </el-form-item>
  168. <el-form-item label="Token计算器">
  169. <el-select>
  170. <el-option/>
  171. </el-select>
  172. </el-form-item>
  173. <div class="form-btn">
  174. <el-form-item>
  175. <el-button>取消</el-button>
  176. <el-button type="primary" @click.prevent="submit">确定</el-button>
  177. </el-form-item>
  178. </div>
  179. </el-form>
  180. </el-tab-pane>
  181. </el-tabs>
  182. </template>
  183. <style scoped lang="scss">
  184. .form-label{
  185. :deep(.el-form-item){
  186. display: block;
  187. }
  188. // 注释
  189. span{
  190. color: #abadb4;
  191. font-size: 12px;
  192. }
  193. }
  194. .form-btn{
  195. display: flex;
  196. justify-content: flex-end;
  197. }
  198. </style>