ソースを参照

模型服务商

zhaoen 5 ヶ月 前
コミット
32ce498cf9

+ 0 - 0
src/api/enterpriseModelConfig/type.ts


+ 201 - 0
src/api/modleServiceProvide/type.ts

@@ -0,0 +1,201 @@
+/**
+ * 模型供应商相关类型定义
+ */
+
+/**
+ * 模型供应商数据传输对象(DTO)
+ */
+export interface ModelVendorDto {
+    /**
+     * 供应商id
+     */
+    id?: string;
+    /**
+     * 供应商编码
+     */
+    vendorCode?: string;
+
+    /**
+     * 供应商名称
+     */
+    vendorName?: string;
+
+    /**
+     * 状态(1-启用,0-禁用)
+     */
+    status?: number;
+
+    /**
+     * 是否为官方供应商
+     */
+    isOfficial?: boolean;
+
+    /**
+     * 模型类型(枚举)
+     */
+    modelKind?: ModelKind;
+
+    /**
+     * 描述
+     */
+    description?: string;
+
+    /**
+     * 官网地址
+     */
+    website?: string;
+
+    /**
+     * 联系方式
+     */
+    contactInfo?: string;
+
+    /**
+     * Logo 地址
+     */
+    logoUrl?: string;
+
+    /**
+     * 默认调用地址
+     */
+    defaultUrl?: string;
+
+    /**
+     * 价格说明地址
+     */
+    pricingUrl?: string;
+
+    /**
+     * API 文档地址
+     */
+    apiDocUrl?: string;
+
+    /**
+     * 扩展配置(JSON 字符串)
+     */
+    extraConfig?: string;
+
+    /**
+     * 排序值
+     */
+    sortOrder?: number;
+
+    /**
+     * 其他扩展字段
+     */
+    [property: string]: any;
+}
+
+/**
+ * 模型供应商表单提交对象
+ */
+export interface ModelVendorForm {
+    /**
+     * 供应商编码(可选,新增时不传)
+     */
+    id?: string;
+
+    /**
+     * 供应商编码
+     */
+    vendorCode?: string;
+
+    /**
+     * 供应商名称(必填)
+     */
+    vendorName: string;
+
+    /**
+     * 状态(必填,1-启用,0-禁用)
+     */
+    status: number;
+
+    /**
+     * 是否为官方供应商(必填)
+     */
+    isOfficial: boolean;
+
+    /**
+     * 模型类型(必填)
+     */
+    modelKind: ModelKind;
+
+    /**
+     * 描述(可选)
+     */
+    description?: string;
+
+    /**
+     * 官网地址(可选)
+     */
+    website?: string;
+
+    /**
+     * 联系方式(可选)
+     */
+    contactInfo?: string;
+
+    /**
+     * Logo 地址(可选)
+     */
+    logoUrl?: string;
+
+    /**
+     * 默认调用地址(可选)
+     */
+    defaultUrl?: string;
+
+    /**
+     * 价格说明地址(可选)
+     */
+    pricingUrl?: string;
+
+    /**
+     * API 文档地址(可选)
+     */
+    apiDocUrl?: string;
+
+    /**
+     * 扩展配置(可选)
+     */
+    extraConfig?: string;
+
+    /**
+     * 排序值(必填)
+     */
+    sortOrder: number;
+}
+
+/**
+ * 模型供应商分页查询参数
+ */
+export interface ModelVendorQuery {
+
+    /**
+     * 当前页码
+     */
+    pageNum?: number;
+
+    /**
+     * 每页数量
+     */
+    pageSize?: number;
+}
+
+/**
+ * 模型类型枚举
+ */
+export enum ModelKind {
+    Llm = "LLM",
+    Multimodal = "MULTIMODAL",
+    Ocr = "OCR",
+    Other = "OTHER",
+    Rerank = "RERANK",
+    Speech = "SPEECH",
+    Vector = "VECTOR",
+    Vision = "VISION",
+}
+
+
+
+

+ 115 - 115
src/views/modleServiceProvide/components/AdditionInfo.vue

@@ -1,89 +1,89 @@
 <template>
-    <el-form
-            :model="form"
-            label-position="top"
-            label-width="120px"
-            :rules="rules"
-            ref="formRef"
-    >
+  <el-form
+      :model="form"
+      label-position="top"
+      label-width="120px"
+      :rules="rules"
+      ref="formRef"
+  >
 
-        <!-- 联系方式 -->
-        <el-row :gutter="20">
-            <el-col :span="24">
-                <el-form-item prop="contact" label="联系方式">
-                    <template #label>
-                        <span class="el-form-item__label">联系方式</span>
-                    </template>
-                    <el-input v-model="form.contact" placeholder="请输入联系方式,如邮箱或电话" />
-                </el-form-item>
-            </el-col>
-        </el-row>
+    <!-- 联系方式 -->
+    <el-row :gutter="20">
+      <el-col :span="24">
+        <el-form-item prop="contact" label="联系方式">
+          <template #label>
+            <span class="el-form-item__label">联系方式</span>
+          </template>
+          <el-input v-model="form.contact" placeholder="请输入联系方式,如邮箱或电话" />
+        </el-form-item>
+      </el-col>
+    </el-row>
 
-        <!-- 官网 -->
-        <el-row :gutter="20">
-            <el-col :span="24">
-                <el-form-item prop="website" label="官网">
-                    <template #label>
-                        <span class="el-form-item__label">官网</span>
-                    </template>
-                    <el-input v-model="form.website" placeholder="请输入官网地址,如:https://openai.com" />
-                </el-form-item>
-            </el-col>
-        </el-row>
+    <!-- 官网 -->
+    <el-row :gutter="20">
+      <el-col :span="24">
+        <el-form-item prop="website" label="官网">
+          <template #label>
+            <span class="el-form-item__label">官网</span>
+          </template>
+          <el-input v-model="form.website" placeholder="请输入官网地址,如:https://openai.com" />
+        </el-form-item>
+      </el-col>
+    </el-row>
 
-        <!-- API文档地址 -->
-        <el-row :gutter="20">
-            <el-col :span="24">
-                <el-form-item prop="apiDocUrl" label="API文档地址">
-                    <template #label>
-                        <span class="el-form-item__label">API文档地址</span>
-                    </template>
-                    <el-input v-model="form.apiDocUrl" placeholder="请输入API文档地址" />
-                </el-form-item>
-            </el-col>
-        </el-row>
+    <!-- API文档地址 -->
+    <el-row :gutter="20">
+      <el-col :span="24">
+        <el-form-item prop="apiDocUrl" label="API文档地址">
+          <template #label>
+            <span class="el-form-item__label">API文档地址</span>
+          </template>
+          <el-input v-model="form.apiDocUrl" placeholder="请输入API文档地址" />
+        </el-form-item>
+      </el-col>
+    </el-row>
 
-        <!-- 定价页面地址 -->
-        <el-row :gutter="20">
-            <el-col :span="24">
-                <el-form-item prop="pricingUrl" label="定价页面地址">
-                    <template #label>
-                        <span class="el-form-item__label">定价页面地址</span>
-                    </template>
-                    <el-input v-model="form.pricingUrl" placeholder="请输入定价页面URL" />
-                </el-form-item>
-            </el-col>
-        </el-row>
+    <!-- 定价页面地址 -->
+    <el-row :gutter="20">
+      <el-col :span="24">
+        <el-form-item prop="pricingUrl" label="定价页面地址">
+          <template #label>
+            <span class="el-form-item__label">定价页面地址</span>
+          </template>
+          <el-input v-model="form.pricingUrl" placeholder="请输入定价页面URL" />
+        </el-form-item>
+      </el-col>
+    </el-row>
 
-        <!-- 描述 -->
-        <el-row :gutter="20">
-            <el-col :span="24">
-                <el-form-item prop="description" label="描述">
-                    <el-input
-                            v-model="form.description"
-                            type="textarea"
-                            :rows="4"
-                            placeholder="请输入服务商描述"
-                    />
-                </el-form-item>
-            </el-col>
-        </el-row>
+    <!-- 描述 -->
+    <el-row :gutter="20">
+      <el-col :span="24">
+        <el-form-item prop="description" label="描述">
+          <el-input
+              v-model="form.description"
+              type="textarea"
+              :rows="4"
+              placeholder="请输入服务商描述"
+          />
+        </el-form-item>
+      </el-col>
+    </el-row>
 
-        <!-- 备注 -->
-        <el-row :gutter="20">
-            <el-col :span="24">
-                <el-form-item label="备注" prop="remark">
-                    <el-input
-                            v-model="form.remark"
-                            type="textarea"
-                            :rows="4"
-                            placeholder="请输入备注信息"
-                    />
-                </el-form-item>
-            </el-col>
-        </el-row>
+    <!-- 备注 -->
+    <el-row :gutter="20">
+      <el-col :span="24">
+        <el-form-item label="备注" prop="remark">
+          <el-input
+              v-model="form.remark"
+              type="textarea"
+              :rows="4"
+              placeholder="请输入备注信息"
+          />
+        </el-form-item>
+      </el-col>
+    </el-row>
 
-    </el-form>
+  </el-form>
 </template>
 
 <script setup lang="ts">
@@ -92,41 +92,41 @@ import { ElMessage } from 'element-plus'
 
 // ================== 表单数据类型定义 ==================
 interface Form {
-    contact: string
-    website: string
-    apiDocUrl: string
-    pricingUrl: string
-    description: string
-    remark: string
+  contact: string
+  website: string
+  apiDocUrl: string
+  pricingUrl: string
+  description: string
+  remark: string
 }
 const dialogVisible = ref(true)
 // ================== 表单数据初始化 ==================
 const form = ref<Form>({
-    contact: '',
-    website: '',
-    apiDocUrl: '',
-    pricingUrl: '',
-    description: '',
-    remark: ''
+  contact: '',
+  website: '',
+  apiDocUrl: '',
+  pricingUrl: '',
+  description: '',
+  remark: ''
 })
 
 // ================== 表单验证规则 ==================
 const rules = {
-    contact: [
-        { required: true, message: '请输入联系方式,如邮箱或电话', trigger: 'blur' }
-    ],
-    website: [
-        { required: true, message: '请输入官网地址', trigger: 'blur' },
-        { type: 'url', message: '请输入合法的网址', trigger: 'blur' }
-    ],
-    apiDocUrl: [
-        { required: true, message: '请输入API文档地址', trigger: 'blur' },
-        { type: 'url', message: '请输入合法的网址', trigger: 'blur' }
-    ],
-    pricingUrl: [
-        { required: true, message: '请输入定价页面地址', trigger: 'blur' },
-        { type: 'url', message: '请输入合法的网址', trigger: 'blur' }
-    ]
+  contact: [
+    { required: true, message: '请输入联系方式,如邮箱或电话', trigger: 'blur' }
+  ],
+  website: [
+    { required: true, message: '请输入官网地址', trigger: 'blur' },
+    { type: 'url', message: '请输入合法的网址', trigger: 'blur' }
+  ],
+  apiDocUrl: [
+    { required: true, message: '请输入API文档地址', trigger: 'blur' },
+    { type: 'url', message: '请输入合法的网址', trigger: 'blur' }
+  ],
+  pricingUrl: [
+    { required: true, message: '请输入定价页面地址', trigger: 'blur' },
+    { type: 'url', message: '请输入合法的网址', trigger: 'blur' }
+  ]
 }
 
 // ================== 表单引用 ==================
@@ -134,16 +134,16 @@ const formRef = ref()
 
 // ================== 提交方法 ==================
 const submitForm = () => {
-    formRef.value.validate((valid: boolean) => {
-        if (valid) {
-            ElMessage.success('验证通过,准备提交')
-            console.log('提交数据:', form.value)
-            // 这里可以调用 API 提交数据
-        } else {
-            ElMessage.error('请检查表单输入')
-            return false
-        }
-    })
+  formRef.value.validate((valid: boolean) => {
+    if (valid) {
+      ElMessage.success('验证通过,准备提交')
+      console.log('提交数据:', form.value)
+      // 这里可以调用 API 提交数据
+    } else {
+      ElMessage.error('请检查表单输入')
+      return false
+    }
+  })
 }
 </script>
 

+ 159 - 159
src/views/modleServiceProvide/components/ApiInfo.vue

@@ -1,119 +1,119 @@
 <template>
-    <el-form
-            :model="form"
-            label-position="top"
-            label-width="120px"
-            :rules="rules"
-            ref="formRef"
-    >
-
-        <!-- 默认 API 地址 -->
-        <el-row :gutter="20">
-            <el-col :span="24">
-                <el-form-item prop="defaultApiUrl" label="默认API地址">
-                    <template #label>
-                        <span class="el-form-item__label">默认API地址</span>
-                    </template>
-                    <el-input
-                            v-model="form.defaultApiUrl"
-                            placeholder="请输入默认API地址,如:https://api.openai.com/v1"
-                    />
-                    <div class="input-tips">用于连接服务器的API基础地址</div>
-                </el-form-item>
-            </el-col>
-        </el-row>
-
-        <!-- 认证方式 -->
-        <el-row :gutter="20">
-            <el-col :span="24">
-                <el-form-item prop="authType" label="认证方式">
-                    <template #label>
-                        <span class="el-form-item__label">认证方式</span>
-                    </template>
-                    <el-select v-model="form.authType" placeholder="请选择认证方式" style="width: 100%">
-                        <el-option
-                                v-for="item in authTypeOption"
-                                :key="item.value"
-                                :label="item.label"
-                                :value="item.value"
-                        />
-                    </el-select>
-                </el-form-item>
-            </el-col>
-        </el-row>
-
-        <!-- 请求头Key -->
-        <el-row :gutter="20">
-            <el-col :span="24">
-                <el-form-item prop="requestHeaderKey" label="请求头Key">
-                    <template #label>
-                        <span class="el-form-item__label">请求头Key</span>
-                    </template>
-                    <el-input v-model="form.requestHeaderKey" placeholder="请输入请求头Key,如:Authorization,X-API" />
-                    <div class="input-tips">例如:Authorization, X-API 等</div>
-                </el-form-item>
-            </el-col>
-        </el-row>
-
-        <!-- 请求头Value前缀 -->
-        <el-row :gutter="20">
-            <el-col :span="24">
-                <el-form-item prop="requestHeaderValuePrefix" label="请求头Value前缀">
-                    <template #label>
-                        <span class="el-form-item__label">请求头Value前缀</span>
-                    </template>
-                    <el-input v-model="form.requestHeaderValuePrefix" placeholder="请输入请求头Value前缀,如:Bearer,basic" />
-                    <div class="input-tips">例如:Bearer, basic 等与API key拼接</div>
-                </el-form-item>
-            </el-col>
-        </el-row>
-
-        <!-- 请求超时时间 -->
-        <el-row :gutter="20">
-            <el-col :span="24">
-                <el-form-item label="请求超时时间(毫秒)" prop="requestTimeout">
-                    <el-input
-                            v-model.number="form.requestTimeout"
-                            placeholder="请输入请求超时时间(秒)"
-                            style="width: 100%"
-                    />
-                </el-form-item>
-            </el-col>
-        </el-row>
-
-        <!-- 重试次数 -->
-        <el-row :gutter="20">
-            <el-col :span="24">
-                <el-form-item label="重试次数" prop="retryCount">
-                    <template #label>
-                        <span class="el-form-item__label">重试次数</span>
-                    </template>
-                    <el-input
-                            v-model.number="form.retryCount"
-                            placeholder="请输入重试次数"
-                            style="width: 100%"
-                    />
-                </el-form-item>
-            </el-col>
-        </el-row>
-
-        <!-- 拓展配置 -->
-        <el-row :gutter="20">
-            <el-col :span="24">
-                <el-form-item label="拓展配置" prop="extraConfig">
-                    <el-input
-                            v-model="form.extraConfig"
-                            type="textarea"
-                            :rows="4"
-                            placeholder="请输入拓展配置,例如:{ timeout: 5000, proxy: 'xxx' }"
-                    />
-                </el-form-item>
-            </el-col>
-        </el-row>
-
-
-
-    </el-form>
+  <el-form
+      :model="form"
+      label-position="top"
+      label-width="120px"
+      :rules="rules"
+      ref="formRef"
+  >
+
+    <!-- 默认 API 地址 -->
+    <el-row :gutter="20">
+      <el-col :span="24">
+        <el-form-item prop="defaultUrl" label="默认API地址">
+          <template #label>
+            <span class="el-form-item__label">默认API地址</span>
+          </template>
+          <el-input
+              v-model="form.defaultUrl"
+              placeholder="请输入默认API地址,如:https://api.openai.com/v1"
+          />
+          <div class="input-tips">用于连接服务器的API基础地址</div>
+        </el-form-item>
+      </el-col>
+    </el-row>
+
+    <!--&lt;!&ndash; 认证方式 &ndash;&gt;-->
+    <!--<el-row :gutter="20">-->
+    <!--  <el-col :span="24">-->
+    <!--    <el-form-item prop="authType" label="认证方式">-->
+    <!--      <template #label>-->
+    <!--        <span class="el-form-item__label">认证方式</span>-->
+    <!--      </template>-->
+    <!--      <el-select v-model="form.authType" placeholder="请选择认证方式" style="width: 100%">-->
+    <!--        <el-option-->
+    <!--            v-for="item in authTypeOption"-->
+    <!--            :key="item.value"-->
+    <!--            :label="item.label"-->
+    <!--            :value="item.value"-->
+    <!--        />-->
+    <!--      </el-select>-->
+    <!--    </el-form-item>-->
+    <!--  </el-col>-->
+    <!--</el-row>-->
+
+    <!--&lt;!&ndash; 请求头Key &ndash;&gt;-->
+    <!--<el-row :gutter="20">-->
+    <!--  <el-col :span="24">-->
+    <!--    <el-form-item prop="requestHeaderKey" label="请求头Key">-->
+    <!--      <template #label>-->
+    <!--        <span class="el-form-item__label">请求头Key</span>-->
+    <!--      </template>-->
+    <!--      <el-input v-model="form.requestHeaderKey" placeholder="请输入请求头Key,如:Authorization,X-API" />-->
+    <!--      <div class="input-tips">例如:Authorization, X-API 等</div>-->
+    <!--    </el-form-item>-->
+    <!--  </el-col>-->
+    <!--</el-row>-->
+
+    <!--&lt;!&ndash; 请求头Value前缀 &ndash;&gt;-->
+    <!--<el-row :gutter="20">-->
+    <!--  <el-col :span="24">-->
+    <!--    <el-form-item prop="requestHeaderValuePrefix" label="请求头Value前缀">-->
+    <!--      <template #label>-->
+    <!--        <span class="el-form-item__label">请求头Value前缀</span>-->
+    <!--      </template>-->
+    <!--      <el-input v-model="form.requestHeaderValuePrefix" placeholder="请输入请求头Value前缀,如:Bearer,basic" />-->
+    <!--      <div class="input-tips">例如:Bearer, basic 等与API key拼接</div>-->
+    <!--    </el-form-item>-->
+    <!--  </el-col>-->
+    <!--</el-row>-->
+
+    <!--&lt;!&ndash; 请求超时时间 &ndash;&gt;-->
+    <!--<el-row :gutter="20">-->
+    <!--  <el-col :span="24">-->
+    <!--    <el-form-item label="请求超时时间(毫秒)" prop="requestTimeout">-->
+    <!--      <el-input-->
+    <!--          v-model.number="form.requestTimeout"-->
+    <!--          placeholder="请输入请求超时时间(秒)"-->
+    <!--          style="width: 100%"-->
+    <!--      />-->
+    <!--    </el-form-item>-->
+    <!--  </el-col>-->
+    <!--</el-row>-->
+
+    <!--&lt;!&ndash; 重试次数 &ndash;&gt;-->
+    <!--<el-row :gutter="20">-->
+    <!--  <el-col :span="24">-->
+    <!--    <el-form-item label="重试次数" prop="retryCount">-->
+    <!--      <template #label>-->
+    <!--        <span class="el-form-item__label">重试次数</span>-->
+    <!--      </template>-->
+    <!--      <el-input-->
+    <!--          v-model.number="form.retryCount"-->
+    <!--          placeholder="请输入重试次数"-->
+    <!--          style="width: 100%"-->
+    <!--      />-->
+    <!--    </el-form-item>-->
+    <!--  </el-col>-->
+    <!--</el-row>-->
+
+    <!-- 拓展配置 -->
+    <el-row :gutter="20">
+      <el-col :span="24">
+        <el-form-item label="拓展配置" prop="extraConfig">
+          <el-input
+              v-model="form.extraConfig"
+              type="textarea"
+              :rows="4"
+              placeholder="请输入拓展配置,例如:{ timeout: 5000, proxy: 'xxx' }"
+          />
+        </el-form-item>
+      </el-col>
+    </el-row>
+
+
+
+  </el-form>
 </template>
 
 <script setup lang="ts">
@@ -122,52 +122,52 @@ import { ElMessage } from 'element-plus'
 const dialogVisible = ref(true)
 // ================== 表单数据类型定义 ==================
 interface Form {
-    defaultApiUrl: string
-    authType: string
-    requestHeaderKey: string
-    requestHeaderValuePrefix: string
-    requestTimeout: number | null
-    retryCount: number | null
-    extraConfig: string
+  defaultUrl: string
+  authType: string
+  requestHeaderKey: string
+  requestHeaderValuePrefix: string
+  requestTimeout: number | null
+  retryCount: number | null
+  extraConfig: string
 }
 
 // ================== 表单数据初始化 ==================
 const form = ref<Form>({
-    defaultApiUrl: '',
-    authType: 'API_KEY',
-    requestHeaderKey: 'Authorization',
-    requestHeaderValuePrefix: 'Bearer',
-    requestTimeout: 6,
-    retryCount: 3,
-    extraConfig: ''
+  defaultUrl: '',
+  authType: 'API_KEY',
+  requestHeaderKey: 'Authorization',
+  requestHeaderValuePrefix: 'Bearer',
+  requestTimeout: 6,
+  retryCount: 3,
+  extraConfig: ''
 })
 
 // ================== 认证方式选项 ==================
 const authTypeOption = [
-    { label: 'API Key', value: 'API_KEY' },
-    { label: 'OAuth2', value: 'OAUTH2' },
-    { label: 'None', value: 'NONE' }
+  { label: 'API Key', value: 'API_KEY' },
+  { label: 'OAuth2', value: 'OAUTH2' },
+  { label: 'None', value: 'NONE' }
 ]
 
 // ================== 表单验证规则 ==================
 const rules = {
-    defaultApiUrl: [
-        { required: true, message: '请输入默认 API 地址', trigger: 'blur' },
-        { type: 'url', message: '请输入合法的 URL 地址', trigger: 'blur' }
-    ],
-    authType: [
-        { required: true, message: '请选择认证方式', trigger: 'change' }
-    ],
-    requestHeaderKey: [
-        { required: true, message: '请输入请求头 Key', trigger: 'blur' }
-    ],
-    requestHeaderValuePrefix: [
-        { required: true, message: '请输入请求头 Value 前缀', trigger: 'blur' }
-    ],
-    retryCount: [
-        { required: true, message: '请输入重试次数', trigger: 'blur' },
-        { type: 'number', min: 0, max: 10, message: '重试次数应在 0~10 之间', trigger: 'blur' }
-    ]
+  defaultUrl: [
+    { required: true, message: '请输入默认 API 地址', trigger: 'blur' },
+    { type: 'url', message: '请输入合法的 URL 地址', trigger: 'blur' }
+  ],
+  authType: [
+    { required: true, message: '请选择认证方式', trigger: 'change' }
+  ],
+  requestHeaderKey: [
+    { required: true, message: '请输入请求头 Key', trigger: 'blur' }
+  ],
+  requestHeaderValuePrefix: [
+    { required: true, message: '请输入请求头 Value 前缀', trigger: 'blur' }
+  ],
+  retryCount: [
+    { required: true, message: '请输入重试次数', trigger: 'blur' },
+    { type: 'number', min: 0, max: 10, message: '重试次数应在 0~10 之间', trigger: 'blur' }
+  ]
 }
 
 // ================== 表单引用 ==================
@@ -175,16 +175,16 @@ const formRef = ref()
 
 // ================== 提交方法 ==================
 const submitForm = () => {
-    formRef.value.validate((valid: boolean) => {
-        if (valid) {
-            ElMessage.success('验证通过,准备提交')
-            console.log('提交数据:', form.value)
-            // 这里可以调用 API 提交数据
-        } else {
-            ElMessage.error('请检查表单输入')
-            return false
-        }
-    })
+  formRef.value.validate((valid: boolean) => {
+    if (valid) {
+      ElMessage.success('验证通过,准备提交')
+      console.log('提交数据:', form.value)
+      // 这里可以调用 API 提交数据
+    } else {
+      ElMessage.error('请检查表单输入')
+      return false
+    }
+  })
 }
 </script>
 

+ 37 - 37
src/views/modleServiceProvide/components/BasicInfo.vue

@@ -5,40 +5,40 @@ import { ElMessage } from 'element-plus'
 
 // ================== 表单数据类型定义 ==================
 interface Form {
-    providerCode: string
-    providerName: string
-    modelType: string[]
-    officialCertified: boolean
-    status: boolean
-    sort: number | null
+  vendorCode: string
+  vendorName: string
+  modelKind: string[]
+  isofficial: boolean
+  status: boolean
+  sortOrder: number | null
 }
 
 // ================== 表单数据初始化 ==================
 const form = ref<Form>({
-    providerCode: '',
-    providerName: '',
-    modelType: [],
-    officialCertified: false,
-    status: true,
-    sort: null
+  vendorCode: '',
+  vendorName: '',
+  modelKind: [],
+  isofficial: false,
+  status: true,
+  sortOrder: null
 })
 
 // ================== 模型种类选项 ==================
-const modelTypeOption = ['大语言模型', '多模态', 'OCR', '视觉', '向量化', '重排序', '语音']
+const modelKindOption = ['大语言模型', '多模态', 'OCR', '视觉', '向量化', '重排序', '语音']
 
 // ================== 表单验证规则 ==================
 const rules = {
-  providerCode: [
+  vendorCode: [
     { required: true, message: '请输入服务商编码', trigger: 'blur' },
     { pattern: /^[a-z0-9\-_]+$/, message: '只能使用小写字母、数字、下划线或横线', trigger: 'blur' }
   ],
-  providerName: [
+  vendorName: [
     { required: true, message: '请输入服务商名称', trigger: 'blur' }
   ],
-  modelType: [
+  modelKind: [
     { required: true, message: '请选择至少一个模型种类', trigger: 'change' }
   ],
-  sort: [
+  sortOrder: [
     { required: true, message: '请输入排序值', trigger: 'blur' },
     { type: 'number', message: '必须为数字', trigger: 'blur' }
   ]
@@ -49,16 +49,16 @@ const formRef = ref()
 
 // ================== 提交方法 ==================
 const submitForm = () => {
-    formRef.value.validate((valid: boolean) => {
-        if (valid) {
-            ElMessage.success('验证通过,准备提交')
-            console.log('提交数据:', form.value)
-            // 这里可以调用 API 提交数据
-        } else {
-            ElMessage.error('请检查表单输入')
-            return false
-        }
-    })
+  formRef.value.validate((valid: boolean) => {
+    if (valid) {
+      ElMessage.success('验证通过,准备提交')
+      console.log('提交数据:', form.value)
+      // 这里可以调用 API 提交数据
+    } else {
+      ElMessage.error('请检查表单输入')
+      return false
+    }
+  })
 }
 
 // ================== 控制对话框显示 ==================
@@ -75,11 +75,11 @@ interface ProviderModel {
     <!-- 服务商编码 -->
     <el-row>
       <el-col :span="24">
-        <el-form-item prop="providerCode" label="服务商编码">
+        <el-form-item prop="vendorCode" label="服务商编码">
           <template #label>
             <span class="el-form-item__label">服务商编码</span>
           </template>
-          <el-input v-model="form.providerCode" placeholder="输入服务商编码,如:openai" />
+          <el-input v-model="form.vendorCode" placeholder="输入服务商编码,如:openai" />
           <div class="input-tips">英文小写,不含特殊字符,作为系统标识</div>
         </el-form-item>
       </el-col>
@@ -88,11 +88,11 @@ interface ProviderModel {
     <!-- 服务商名称 -->
     <el-row :gutter="20">
       <el-col :span="24">
-        <el-form-item prop="providerName" label="服务商名称">
+        <el-form-item prop="vendorName" label="服务商名称">
           <template #label>
             <span class="el-form-item__label">服务商名称</span>
           </template>
-          <el-input v-model="form.providerName" placeholder="输入服务商名称,如:OpenAi" />
+          <el-input v-model="form.vendorName" placeholder="输入服务商名称,如:OpenAi" />
         </el-form-item>
       </el-col>
     </el-row>
@@ -100,13 +100,13 @@ interface ProviderModel {
     <!-- 模型种类 -->
     <el-row :gutter="20">
       <el-col :span="24">
-        <el-form-item prop="modelType" label="模型种类">
+        <el-form-item prop="modelKind" label="模型种类">
           <template #label>
             <span class="el-form-item__label">模型种类</span>
           </template>
-          <el-checkbox-group v-model="form.modelType" style="width: 100%">
+          <el-checkbox-group v-model="form.modelKind" style="width: 100%">
             <el-checkbox
-                v-for="option in modelTypeOption"
+                v-for="option in modelKindOption"
                 :key="option"
                 :label="option"
                 :value="option"
@@ -140,8 +140,8 @@ interface ProviderModel {
     <el-row :gutter="20">
       <el-col :span="24">
         <el-form-item label="官方认证">
-          <el-switch v-model="form.officialCertified" />
-          <span class="switch-label">{{ form.officialCertified ? '是' : '否' }}</span>
+          <el-switch v-model="form.isofficial" />
+          <span class="switch-label">{{ form.isofficial ? '是' : '否' }}</span>
         </el-form-item>
       </el-col>
     </el-row>
@@ -160,7 +160,7 @@ interface ProviderModel {
     <el-row :gutter="20">
       <el-col :span="12">
         <el-form-item label="排序值" >
-          <el-input v-model.number="form.sort" placeholder="0" />
+          <el-input v-model.number="form.sortOrder" placeholder="0" />
           <div class="input-tips">数值越小越靠前</div>
         </el-form-item>
       </el-col>

+ 159 - 156
src/views/modleServiceProvide/index.vue

@@ -6,23 +6,23 @@
     <el-row :gutter="20">
       <el-col :span="4" style="margin-left: 20px">
         <el-form-item label="服务商名称">
-            <el-input v-model="input" style="width: 240px" placeholder="请输入服务商名称" />
+          <el-input v-model="input" style="width: 240px" placeholder="请输入服务商名称" />
         </el-form-item>
 
       </el-col>
       <el-col :span="5">
         <el-form-item label="服务商编码">
-            <el-input v-model="input" style="width: 240px" placeholder="请输入服务商编码" />
+          <el-input v-model="input" style="width: 240px" placeholder="请输入服务商编码" />
         </el-form-item>
       </el-col>
       <el-col :span="4">
         <el-form-item label="服务商种类">
-          <el-select v-model="modelType" placeholder="全部">
+          <el-select v-model="modelKind" placeholder="全部">
             <el-option
-              v-for="item in modelTypeOption"
-              :value="item"
-              :label="item"
-              :key="item"
+                v-for="item in modelKindOption"
+                :value="item"
+                :label="item"
+                :key="item"
             />
           </el-select>
         </el-form-item>
@@ -31,10 +31,10 @@
         <el-form-item label="状态">
           <el-select v-model="modelState" placeholder="全部">
             <el-option
-              v-for="item in modelStateOption"
-              :label="item"
-              :value="item"
-              :key="item"
+                v-for="item in modelStateOption"
+                :label="item"
+                :value="item"
+                :key="item"
             />
           </el-select>
         </el-form-item>
@@ -51,33 +51,33 @@
         <el-button type="primary" @click="dialogVisible = true">+新增服务商</el-button>
         <el-dialog v-model="dialogVisible" title="新增服务商" width="40%">
 
-            <el-form>
-                <!-- Tab 栏 -->
-                <el-tabs  tab-position="top" v-model="activeTab" type="card">
-                    <el-tab-pane label="基本信息" name="info1">
-                        <BasicInfo v-model="formData.info1" />
-                    </el-tab-pane>
-                    <el-tab-pane label="API配置" name="info2">
-                        <ApiInfo v-model="formData.info2" />
-                    </el-tab-pane>
-                    <el-tab-pane label="附加信息" name="info3">
-                        <AdditionInfo v-model="formData.info3" />
-                    </el-tab-pane>
-                </el-tabs>
-                <!-- 提交按钮 -->
-                <div style="display: flex; justify-content: flex-end;">
-                    <el-form-item>
-                        <el-button @click="dialogVisible = false">取消</el-button>
-                        <el-button type="primary" @click="submitForm">提交</el-button>
-                    </el-form-item>
-                </div>
-            </el-form>
+          <el-form>
+            <!-- Tab 栏 -->
+            <el-tabs  tab-position="top" v-model="activeTab" type="card">
+              <el-tab-pane label="基本信息" name="info1">
+                <BasicInfo v-model="formData.info1" />
+              </el-tab-pane>
+              <el-tab-pane label="API配置" name="info2">
+                <ApiInfo v-model="formData.info2" />
+              </el-tab-pane>
+              <el-tab-pane label="附加信息" name="info3">
+                <AdditionInfo v-model="formData.info3" />
+              </el-tab-pane>
+            </el-tabs>
+            <!-- 提交按钮 -->
+            <div style="display: flex; justify-content: flex-end;">
+              <el-form-item>
+                <el-button @click="dialogVisible = false">取消</el-button>
+                <el-button type="primary" @click="submitForm">提交</el-button>
+              </el-form-item>
+            </div>
+          </el-form>
 
         </el-dialog>
       </el-col>
-        <el-col :span="1.5">
-            <el-button><el-icon><Upload /></el-icon>批量导入</el-button>
-        </el-col>
+      <el-col :span="1.5">
+        <el-button><el-icon><Upload /></el-icon>批量导入</el-button>
+      </el-col>
       <el-col :span="1">
         <el-button><el-icon><Download /></el-icon>导出</el-button>
       </el-col>
@@ -88,80 +88,80 @@
     <!--</div>-->
     <div class="table">
 
-        <el-table :data="models" @selection-change="handleSelectionChange">
-            <el-table-column type="selection" />
-            <el-table-column label="Logo">
-                <template #default="slot">
-                    <el-avatar :src="slot.row.logo" size="small" v-if="slot.row.logo" />
-                    <span v-else>无</span>
-                </template>
-            </el-table-column>
-            <el-table-column label="服务商编码" prop="providerCode" width="120" />
-            <el-table-column label="服务商名称" prop="providerName" width="120" />
-            <el-table-column label="模型种类" prop="modelType" width="420" />
-            <el-table-column label="官方认证" width="120">
-                <template #default="slot">
-                    <el-icon size="15" color="#45D1A6" name="success" v-if="slot.row.officialCertified">
-                        <component is="Check" />
-                    </el-icon>
-                    <el-icon size="15" color="#FF4C4E" name="danger" v-else>
-                        <component is="Close" />
-                    </el-icon>
-                </template>
-            </el-table-column>
-            <el-table-column label="API接入" width="120">
-                <template #default="slot">
-                    <el-icon size="15" color="#45D1A6" v-if="slot.row.apiAccess">
-                        <component is="Check" />
-                    </el-icon>
-                    <el-icon size="15" color="#FF4C4E" name="danger" v-else>
-                        <component is="Close" />
-                    </el-icon>
-                </template>
-            </el-table-column>
-            <el-table-column label="状态" width="120">
-                <template #default="slot">
-                    <el-tag
-                            :type="
+      <el-table :data="models" @selection-change="handleSelectionChange">
+        <el-table-column type="selection" />
+        <el-table-column label="logoUrl">
+          <template #default="slot">
+            <el-avatar :src="slot.row.logoUrl" size="small" v-if="slot.row.logoUrl" />
+            <span v-else>无</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="服务商编码" prop="vendorCode" width="120" />
+        <el-table-column label="服务商名称" prop="vendorName" width="120" />
+        <el-table-column label="模型种类" prop="modelKind" width="420" />
+        <el-table-column label="官方认证" width="120">
+          <template #default="slot">
+            <el-icon size="15" color="#45D1A6" name="success" v-if="slot.row.isofficial">
+              <component is="Check" />
+            </el-icon>
+            <el-icon size="15" color="#FF4C4E" name="danger" v-else>
+              <component is="Close" />
+            </el-icon>
+          </template>
+        </el-table-column>
+        <!--<el-table-column label="API接入" width="120">-->
+        <!--  <template #default="slot">-->
+        <!--    <el-icon size="15" color="#45D1A6" v-if="slot.row.apiAccess">-->
+        <!--      <component is="Check" />-->
+        <!--    </el-icon>-->
+        <!--    <el-icon size="15" color="#FF4C4E" name="danger" v-else>-->
+        <!--      <component is="Close" />-->
+        <!--    </el-icon>-->
+        <!--  </template>-->
+        <!--</el-table-column>-->
+        <el-table-column label="状态" width="120">
+          <template #default="slot">
+            <el-tag
+                :type="
               slot.row.status === 'active'
                 ? 'success'
                 : slot.row.status === 'configuring'
                 ? 'primary'
                 : 'warning'
             "
-                    >
-                        {{
-                        slot.row.status === 'active'
-                          ? '启用'
-                          : slot.row.status === 'configuring'
-                            ? '配置中'
-                            : '待配置'
-                        }}
-                    </el-tag>
-                </template>
-            </el-table-column>
-            <el-table-column label="创建时间" prop="createTime" width="240" />
-            <el-table-column label="操作" width="240">
-              <template #default="slot">
-                <!-- 查看 -->
-                <el-icon size="15" color="#15A9FF" style="margin-right: 10px;"><View /></el-icon>
-
-                <!-- 编辑 -->
-                <el-icon size="15" color="#15A9FF" style="margin-right: 10px;"><Edit /></el-icon>
-
-                <!-- 启用/禁用图标 -->
-                <el-icon size="15" style="margin-right: 10px;" :color="slot.row.status === 'active' ? '#13ce66' : '#ff4949'">
-                  <SwitchButton />
-                </el-icon>
-
-                <!-- 列表 -->
-                <el-icon size="15" color="#15A9FF" style="margin-right: 10px;"><More /></el-icon>
-
-
-              </template>
-            </el-table-column>
-
-        </el-table>
+            >
+              {{
+                slot.row.status === 'active'
+                    ? '启用'
+                    : slot.row.status === 'configuring'
+                        ? '配置中'
+                        : '待配置'
+              }}
+            </el-tag>
+          </template>
+        </el-table-column>
+        <el-table-column label="创建时间" prop="createTime" width="240" />
+        <el-table-column label="操作" width="240">
+          <template #default="slot">
+            <!-- 查看 -->
+            <el-icon size="15" color="#15A9FF" style="margin-right: 10px;"><View /></el-icon>
+
+            <!-- 编辑 -->
+            <el-icon size="15" color="#15A9FF" style="margin-right: 10px;"><Edit /></el-icon>
+
+            <!-- 启用/禁用图标 -->
+            <el-icon size="15" style="margin-right: 10px;" :color="slot.row.status === 'active' ? '#13ce66' : '#ff4949'">
+              <SwitchButton />
+            </el-icon>
+
+            <!-- 列表 -->
+            <el-icon size="15" color="#15A9FF" style="margin-right: 10px;"><More /></el-icon>
+
+
+          </template>
+        </el-table-column>
+
+      </el-table>
       <div class="batch-actions">
         <span>已选择 {{ selectedIds.length }} 项</span>
         <el-button type="primary" size="small" :disabled="selected.length === 0" @click="batchEnable">批量启用</el-button>
@@ -194,11 +194,13 @@ import BasicInfo from "@/views/modleServiceProvide/components/BasicInfo.vue";
 import ApiInfo from "@/views/modleServiceProvide/components/ApiInfo.vue";
 import AdditionInfo from "@/views/modleServiceProvide/components/AdditionInfo.vue";
 import components from "../../../vite/plugins/components";
+import listModelVendor from "@/api/modleServiceProvide/index"
+import type { ModelVendorQuery, ModelVendorDto } from '../../api/modleServiceProvide/type' // 根据实际类型调整
 
 
 const serviceOption = ref(["OpenAI"])
 const modelNameOption = ref(["服务商1","服务商2"])
-const modelTypeOption = ref(["大语言模型","多模态","OCR","视觉","向量化","重排序","语音"])
+const modelKindOption = ref(["大语言模型","多模态","OCR","视觉","向量化","重排序","语音"])
 const modelStateOption = ref(["全部","开启","关闭"])
 // const models = ref([])
 const total = ref(50) // 总条目数
@@ -206,18 +208,18 @@ const currentPage = ref(1) // 当前页码
 const pageSize = ref(10) // 每页显示条目个数
 const selected = ref<number[]>([]) // 存储选中的行ID
 const modelName = ref(null)
-const modelType = ref(null)
+const modelKind = ref(null)
 const activeTab = 'info1'
 const service = ref(null)
 const modelState = ref(null)
 // 定义表格数据的类型
 interface ProviderModel {
   id: number
-  logo?: string
-  providerCode: string
-  providerName: string
-  modelType: string
-  officialCertified: boolean
+  logoUrl?: string
+  vendorCode: string
+  vendorName: string
+  modelKind: string
+  isofficial: boolean
   apiAccess: boolean
   status: 'active' | 'configuring' | 'pending' // 状态枚举
   createTime: string
@@ -227,33 +229,33 @@ interface ProviderModel {
 const models = ref<ProviderModel[]>([
   {
     id: 1,
-    logo: 'https://via.placeholder.com/40',
-    providerCode: 'PROV001',
-    providerName: '阿里云',
-    modelType: '大语言模型',
-    officialCertified: true,
+    logoUrl: 'https://via.placeholder.com/40',
+    vendorCode: 'PROV001',
+    vendorName: '阿里云',
+    modelKind: '大语言模型',
+    isofficial: true,
     apiAccess: true,
     status: 'active',
     createTime: '2025-01-01 10:30',
   },
   {
     id: 2,
-    logo: 'https://via.placeholder.com/40',
-    providerCode: 'PROV002',
-    providerName: '腾讯云',
-    modelType: '图像识别',
-    officialCertified: false,
+    logoUrl: 'https://via.placeholder.com/40',
+    vendorCode: 'PROV002',
+    vendorName: '腾讯云',
+    modelKind: '图像识别',
+    isofficial: false,
     apiAccess: true,
     status: 'configuring',
     createTime: '2025-02-15 10:30',
   },
   {
     id: 3,
-    logo: 'https://via.placeholder.com/40',
-    providerCode: 'PROV003',
-    providerName: '百度云',
-    modelType: '语音识别',
-    officialCertified: false,
+    logoUrl: 'https://via.placeholder.com/40',
+    vendorCode: 'PROV003',
+    vendorName: '百度云',
+    modelKind: '语音识别',
+    isofficial: false,
     apiAccess: false,
     status: 'pending',
     createTime: '2025-03-10 10:30',
@@ -290,61 +292,62 @@ const dialogVisible = ref(false)
 const formRef = ref<FormInstance>()
 
 interface Info1 {
-    name: string
-    desc: string
+  name: string
+  desc: string
 }
 
 interface Info2 {
-    phone: string
-    email: string
+  phone: string
+  email: string
 }
 const formData = ref({
-    info1: { name: '', desc: '' },
-    info2: { phone: '', email: '' },
-    info3: { address: '', remark: '' }
+  info1: { name: '', desc: '' },
+  info2: { phone: '', email: '' },
+  info3: { address: '', remark: '' }
 })
 interface Info3 {
-    address: string
-    remark: string
+  address: string
+  remark: string
 }
 
 interface formData {
-    info1: Info1
-    info2: Info2
-    info3: Info3
+  info1: Info1
+  info2: Info2
+  info3: Info3
 }
 
 const form = ref({
-  providerName: '',
-  providerCode: '',
-  modelType: '',
-  logo: '',
-  officialCertified: false,
+  vendorName: '',
+  vendorCode: '',
+  modelKind: '',
+  logoUrl: '',
+  isofficial: false,
   apiAccess: false,
   status: 'active'
 })
 
+//表单规则
 const rules = {
-  providerName: [
+  vendorName: [
     { required: true, message: '服务商名称不能为空', trigger: 'blur' }
   ],
-  providerCode: [
+  vendorCode: [
     { required: true, message: '服务商编码不能为空', trigger: 'blur' }
   ],
-  modelType: [
+  modelKind: [
     { required: true, message: '请选择模型种类', trigger: 'change' }
   ]
 }
 
-// const modelTypeOption = ref(['大语言模型', '图像识别', '语音识别'])
+// const modelKindOption = ref(['大语言模型', '图像识别', '语音识别'])
 
-// Logo 上传成功回调
-const handleLogoSuccess = (response, file) => {
-  form.value.logo = URL.createObjectURL(file.raw)
+// logoUrl 上传成功回调
+const handlelogoUrlSuccess = (response, file) => {
+  form.value.logoUrl = URL.createObjectURL(file.raw)
 }
 
-// Logo 上传前校验
-const beforeLogoUpload = (file) => {
+// logoUrl 上传前校验
+const beforelogoUrlUpload = (file) => {
   const isValid = ['image/jpeg', 'image/png'].includes(file.type)
   if (!isValid) {
     alert('只能上传 JPG/PNG 文件')
@@ -369,11 +372,11 @@ const submitForm = () => {
       // 关闭弹窗并重置表单
       dialogVisible.value = false
       form.value = {
-        providerName: '',
-        providerCode: '',
-        modelType: '',
-        logo: '',
-        officialCertified: false,
+        vendorName: '',
+        vendorCode: '',
+        modelKind: '',
+        logoUrl: '',
+        isofficial: false,
         apiAccess: false,
         status: 'active'
       }