import { a6 as ElTabPane, h as ElButton, aj as refresh_default, ak as plus_default, aa as delete_default, al as ElTable, am as ElTableColumn, q as ElTag, an as edit_default, ao as vLoading, ap as ElPagination, a5 as ElTabs, w as ElForm, x as ElFormItem, y as ElInput, aq as ElSelect, ar as ElOption, M as ElSwitch, v as ElDialog, P as ElRadioGroup, Q as ElRadio, E as ElMessage, D as ElMessageBox } from "./element-plus.CkEW9frc.js"; import { A as AIProviderAPI, E as EmbeddingConfigAPI } from "./ai_config.BnEV7HHL.js"; import { J as defineComponent, t as onMounted, S as openBlock, _ as createElementBlock, $ as createVNode, a0 as withCtx, a1 as createBaseVNode, o as unref, a9 as createTextVNode, a6 as withDirectives, T as createBlock, aa as toDisplayString, H as Fragment, a8 as createCommentVNode, r as ref, ak as reactive } from "./.pnpm.BW3P1y8f.js"; import { _ as _export_sfc } from "./_plugin-vue_export-helper.1tPrXgE0.js"; import "./index.CMd5bD1r.js"; import "./codemirror.CvJAcn2d.js"; const _hoisted_1 = { class: "app-container" }; const _hoisted_2 = { class: "tab-content" }; const _hoisted_3 = { class: "table-toolbar" }; const _hoisted_4 = { class: "tab-content" }; const _hoisted_5 = { class: "table-toolbar" }; const _sfc_main = /* @__PURE__ */ defineComponent({ ...{ name: "AIConfig", inheritAttrs: false }, __name: "index", setup(__props) { const activeTab = ref("provider"); const providerLoading = ref(false); const providerList = ref([]); const providerTotal = ref(0); const providerSelection = ref([]); const providerQuery = reactive({ page_no: 1, page_size: 10, name: void 0, provider_type: void 0 }); const providerDialogVisible = ref(false); const providerDialogTitle = ref("新增供应商"); const providerFormRef = ref(); const providerForm = reactive({ id: void 0, name: void 0, provider_type: void 0, base_url: void 0, api_key: void 0, is_default: 0, description: void 0 }); const providerRules = { name: [{ required: true, message: "请输入供应商名称", trigger: "blur" }], provider_type: [{ required: true, message: "请选择供应商类型", trigger: "change" }], base_url: [{ required: true, message: "请输入接口地址", trigger: "blur" }], api_key: [{ required: true, message: "请输入API Key", trigger: "blur" }] }; async function loadProviderList() { providerLoading.value = true; try { const res = await AIProviderAPI.list(providerQuery); providerList.value = res.data.data.items; providerTotal.value = res.data.data.total; } finally { providerLoading.value = false; } } function handleProviderSelectionChange(selection) { providerSelection.value = selection; } function handleProviderAdd() { providerDialogTitle.value = "新增供应商"; Object.assign(providerForm, { id: void 0, name: void 0, provider_type: void 0, base_url: void 0, api_key: void 0, is_default: 0, description: void 0 }); providerDialogVisible.value = true; } function handleProviderEdit(row) { providerDialogTitle.value = "编辑供应商"; Object.assign(providerForm, row); providerDialogVisible.value = true; } async function handleProviderSubmit() { var _a; await ((_a = providerFormRef.value) == null ? void 0 : _a.validate()); if (providerForm.id) { await AIProviderAPI.update(providerForm.id, providerForm); ElMessage.success("更新成功"); } else { await AIProviderAPI.create(providerForm); ElMessage.success("创建成功"); } providerDialogVisible.value = false; loadProviderList(); } async function handleProviderDelete(row) { await ElMessageBox.confirm("确定删除该供应商吗?", "提示", { type: "warning" }); await AIProviderAPI.delete([row.id]); ElMessage.success("删除成功"); loadProviderList(); } async function handleProviderBatchDelete() { await ElMessageBox.confirm(`确定删除选中的${providerSelection.value.length}条记录吗?`, "提示", { type: "warning" }); const ids = providerSelection.value.map((item) => item.id); await AIProviderAPI.delete(ids); ElMessage.success("删除成功"); loadProviderList(); } const embeddingLoading = ref(false); const embeddingList = ref([]); const embeddingTotal = ref(0); const embeddingSelection = ref([]); const embeddingQuery = reactive({ page_no: 1, page_size: 10, name: void 0, embedding_type: void 0 }); const embeddingDialogVisible = ref(false); const embeddingDialogTitle = ref("新增向量化配置"); const embeddingFormRef = ref(); const embeddingForm = reactive({ id: void 0, name: void 0, embedding_type: 0, model_name: void 0, base_url: void 0, api_key: void 0, is_default: 0, description: void 0 }); const embeddingRules = { name: [{ required: true, message: "请输入配置名称", trigger: "blur" }], embedding_type: [{ required: true, message: "请选择向量化类型", trigger: "change" }], model_name: [{ required: true, message: "请输入模型名称", trigger: "blur" }] }; async function loadEmbeddingList() { embeddingLoading.value = true; try { const res = await EmbeddingConfigAPI.list(embeddingQuery); embeddingList.value = res.data.data.items; embeddingTotal.value = res.data.data.total; } finally { embeddingLoading.value = false; } } function handleEmbeddingSelectionChange(selection) { embeddingSelection.value = selection; } function handleEmbeddingAdd() { embeddingDialogTitle.value = "新增向量化配置"; Object.assign(embeddingForm, { id: void 0, name: void 0, embedding_type: 0, model_name: void 0, base_url: void 0, api_key: void 0, is_default: 0, description: void 0 }); embeddingDialogVisible.value = true; } function handleEmbeddingEdit(row) { embeddingDialogTitle.value = "编辑向量化配置"; Object.assign(embeddingForm, row); embeddingDialogVisible.value = true; } async function handleEmbeddingSubmit() { var _a; await ((_a = embeddingFormRef.value) == null ? void 0 : _a.validate()); if (embeddingForm.id) { await EmbeddingConfigAPI.update(embeddingForm.id, embeddingForm); ElMessage.success("更新成功"); } else { await EmbeddingConfigAPI.create(embeddingForm); ElMessage.success("创建成功"); } embeddingDialogVisible.value = false; loadEmbeddingList(); } async function handleEmbeddingDelete(row) { await ElMessageBox.confirm("确定删除该配置吗?", "提示", { type: "warning" }); await EmbeddingConfigAPI.delete([row.id]); ElMessage.success("删除成功"); loadEmbeddingList(); } async function handleEmbeddingBatchDelete() { await ElMessageBox.confirm(`确定删除选中的${embeddingSelection.value.length}条记录吗?`, "提示", { type: "warning" }); const ids = embeddingSelection.value.map((item) => item.id); await EmbeddingConfigAPI.delete(ids); ElMessage.success("删除成功"); loadEmbeddingList(); } function maskApiKey(key) { if (!key || key.length <= 8) return "****"; return key.substring(0, 4) + "****" + key.substring(key.length - 4); } onMounted(() => { loadProviderList(); loadEmbeddingList(); }); return (_ctx, _cache) => { const _component_el_button = ElButton; const _component_el_table_column = ElTableColumn; const _component_el_tag = ElTag; const _component_el_table = ElTable; const _component_el_pagination = ElPagination; const _component_el_tab_pane = ElTabPane; const _component_el_tabs = ElTabs; const _component_el_input = ElInput; const _component_el_form_item = ElFormItem; const _component_el_option = ElOption; const _component_el_select = ElSelect; const _component_el_switch = ElSwitch; const _component_el_form = ElForm; const _component_el_dialog = ElDialog; const _component_el_radio = ElRadio; const _component_el_radio_group = ElRadioGroup; const _directive_loading = vLoading; return openBlock(), createElementBlock("div", _hoisted_1, [ createVNode(_component_el_tabs, { modelValue: activeTab.value, "onUpdate:modelValue": _cache[4] || (_cache[4] = ($event) => activeTab.value = $event), type: "border-card" }, { default: withCtx(() => [ createVNode(_component_el_tab_pane, { label: "AI供应商", name: "provider" }, { default: withCtx(() => [ createBaseVNode("div", _hoisted_2, [ createBaseVNode("div", _hoisted_3, [ createVNode(_component_el_button, { icon: unref(refresh_default), onClick: loadProviderList }, { default: withCtx(() => [..._cache[22] || (_cache[22] = [ createTextVNode("刷新", -1) ])]), _: 1 }, 8, ["icon"]), createVNode(_component_el_button, { type: "primary", icon: unref(plus_default), onClick: handleProviderAdd }, { default: withCtx(() => [..._cache[23] || (_cache[23] = [ createTextVNode("新增", -1) ])]), _: 1 }, 8, ["icon"]), createVNode(_component_el_button, { type: "danger", icon: unref(delete_default), disabled: providerSelection.value.length === 0, onClick: handleProviderBatchDelete }, { default: withCtx(() => [..._cache[24] || (_cache[24] = [ createTextVNode("批量删除", -1) ])]), _: 1 }, 8, ["icon", "disabled"]) ]), withDirectives((openBlock(), createBlock(_component_el_table, { data: providerList.value, onSelectionChange: handleProviderSelectionChange }, { default: withCtx(() => [ createVNode(_component_el_table_column, { type: "selection", width: "50" }), createVNode(_component_el_table_column, { prop: "name", label: "供应商名称", "min-width": "120" }), createVNode(_component_el_table_column, { prop: "provider_type", label: "类型", width: "100" }, { default: withCtx(({ row }) => [ createVNode(_component_el_tag, null, { default: withCtx(() => [ createTextVNode(toDisplayString(row.provider_type), 1) ]), _: 2 }, 1024) ]), _: 1 }), createVNode(_component_el_table_column, { prop: "base_url", label: "接口地址", "min-width": "200", "show-overflow-tooltip": "" }), createVNode(_component_el_table_column, { prop: "api_key", label: "API Key", "min-width": "150" }, { default: withCtx(({ row }) => [ createBaseVNode("span", null, toDisplayString(maskApiKey(row.api_key)), 1) ]), _: 1 }), createVNode(_component_el_table_column, { prop: "is_default", label: "默认", width: "80", align: "center" }, { default: withCtx(({ row }) => [ createVNode(_component_el_tag, { type: row.is_default === 1 ? "success" : "info" }, { default: withCtx(() => [ createTextVNode(toDisplayString(row.is_default === 1 ? "是" : "否"), 1) ]), _: 2 }, 1032, ["type"]) ]), _: 1 }), createVNode(_component_el_table_column, { prop: "description", label: "备注", "min-width": "150", "show-overflow-tooltip": "" }), createVNode(_component_el_table_column, { label: "操作", width: "150", fixed: "right" }, { default: withCtx(({ row }) => [ createVNode(_component_el_button, { type: "primary", link: "", icon: unref(edit_default), onClick: ($event) => handleProviderEdit(row) }, { default: withCtx(() => [..._cache[25] || (_cache[25] = [ createTextVNode("编辑", -1) ])]), _: 1 }, 8, ["icon", "onClick"]), createVNode(_component_el_button, { type: "danger", link: "", icon: unref(delete_default), onClick: ($event) => handleProviderDelete(row) }, { default: withCtx(() => [..._cache[26] || (_cache[26] = [ createTextVNode("删除", -1) ])]), _: 1 }, 8, ["icon", "onClick"]) ]), _: 1 }) ]), _: 1 }, 8, ["data"])), [ [_directive_loading, providerLoading.value] ]), createVNode(_component_el_pagination, { "current-page": providerQuery.page_no, "onUpdate:currentPage": _cache[0] || (_cache[0] = ($event) => providerQuery.page_no = $event), "page-size": providerQuery.page_size, "onUpdate:pageSize": _cache[1] || (_cache[1] = ($event) => providerQuery.page_size = $event), total: providerTotal.value, "page-sizes": [10, 20, 50, 100], layout: "total, sizes, prev, pager, next, jumper", onSizeChange: loadProviderList, onCurrentChange: loadProviderList }, null, 8, ["current-page", "page-size", "total"]) ]) ]), _: 1 }), createVNode(_component_el_tab_pane, { label: "向量化配置", name: "embedding" }, { default: withCtx(() => [ createBaseVNode("div", _hoisted_4, [ createBaseVNode("div", _hoisted_5, [ createVNode(_component_el_button, { icon: unref(refresh_default), onClick: loadEmbeddingList }, { default: withCtx(() => [..._cache[27] || (_cache[27] = [ createTextVNode("刷新", -1) ])]), _: 1 }, 8, ["icon"]), createVNode(_component_el_button, { type: "primary", icon: unref(plus_default), onClick: handleEmbeddingAdd }, { default: withCtx(() => [..._cache[28] || (_cache[28] = [ createTextVNode("新增", -1) ])]), _: 1 }, 8, ["icon"]), createVNode(_component_el_button, { type: "danger", icon: unref(delete_default), disabled: embeddingSelection.value.length === 0, onClick: handleEmbeddingBatchDelete }, { default: withCtx(() => [..._cache[29] || (_cache[29] = [ createTextVNode("批量删除", -1) ])]), _: 1 }, 8, ["icon", "disabled"]) ]), withDirectives((openBlock(), createBlock(_component_el_table, { data: embeddingList.value, onSelectionChange: handleEmbeddingSelectionChange }, { default: withCtx(() => [ createVNode(_component_el_table_column, { type: "selection", width: "50" }), createVNode(_component_el_table_column, { prop: "name", label: "配置名称", "min-width": "120" }), createVNode(_component_el_table_column, { prop: "embedding_type", label: "类型", width: "100" }, { default: withCtx(({ row }) => [ createVNode(_component_el_tag, { type: row.embedding_type === 0 ? "primary" : "success" }, { default: withCtx(() => [ createTextVNode(toDisplayString(row.embedding_type === 0 ? "本地" : "远程"), 1) ]), _: 2 }, 1032, ["type"]) ]), _: 1 }), createVNode(_component_el_table_column, { prop: "model_name", label: "模型名称", "min-width": "150" }), createVNode(_component_el_table_column, { prop: "base_url", label: "接口地址", "min-width": "200", "show-overflow-tooltip": "" }, { default: withCtx(({ row }) => [ createTextVNode(toDisplayString(row.base_url || "-"), 1) ]), _: 1 }), createVNode(_component_el_table_column, { prop: "is_default", label: "默认", width: "80", align: "center" }, { default: withCtx(({ row }) => [ createVNode(_component_el_tag, { type: row.is_default === 1 ? "success" : "info" }, { default: withCtx(() => [ createTextVNode(toDisplayString(row.is_default === 1 ? "是" : "否"), 1) ]), _: 2 }, 1032, ["type"]) ]), _: 1 }), createVNode(_component_el_table_column, { prop: "description", label: "备注", "min-width": "150", "show-overflow-tooltip": "" }), createVNode(_component_el_table_column, { label: "操作", width: "150", fixed: "right" }, { default: withCtx(({ row }) => [ createVNode(_component_el_button, { type: "primary", link: "", icon: unref(edit_default), onClick: ($event) => handleEmbeddingEdit(row) }, { default: withCtx(() => [..._cache[30] || (_cache[30] = [ createTextVNode("编辑", -1) ])]), _: 1 }, 8, ["icon", "onClick"]), createVNode(_component_el_button, { type: "danger", link: "", icon: unref(delete_default), onClick: ($event) => handleEmbeddingDelete(row) }, { default: withCtx(() => [..._cache[31] || (_cache[31] = [ createTextVNode("删除", -1) ])]), _: 1 }, 8, ["icon", "onClick"]) ]), _: 1 }) ]), _: 1 }, 8, ["data"])), [ [_directive_loading, embeddingLoading.value] ]), createVNode(_component_el_pagination, { "current-page": embeddingQuery.page_no, "onUpdate:currentPage": _cache[2] || (_cache[2] = ($event) => embeddingQuery.page_no = $event), "page-size": embeddingQuery.page_size, "onUpdate:pageSize": _cache[3] || (_cache[3] = ($event) => embeddingQuery.page_size = $event), total: embeddingTotal.value, "page-sizes": [10, 20, 50, 100], layout: "total, sizes, prev, pager, next, jumper", onSizeChange: loadEmbeddingList, onCurrentChange: loadEmbeddingList }, null, 8, ["current-page", "page-size", "total"]) ]) ]), _: 1 }) ]), _: 1 }, 8, ["modelValue"]), createVNode(_component_el_dialog, { modelValue: providerDialogVisible.value, "onUpdate:modelValue": _cache[12] || (_cache[12] = ($event) => providerDialogVisible.value = $event), title: providerDialogTitle.value, width: "600px", "destroy-on-close": "" }, { footer: withCtx(() => [ createVNode(_component_el_button, { onClick: _cache[11] || (_cache[11] = ($event) => providerDialogVisible.value = false) }, { default: withCtx(() => [..._cache[32] || (_cache[32] = [ createTextVNode("取消", -1) ])]), _: 1 }), createVNode(_component_el_button, { type: "primary", onClick: handleProviderSubmit }, { default: withCtx(() => [..._cache[33] || (_cache[33] = [ createTextVNode("确定", -1) ])]), _: 1 }) ]), default: withCtx(() => [ createVNode(_component_el_form, { ref_key: "providerFormRef", ref: providerFormRef, model: providerForm, rules: providerRules, "label-width": "100px" }, { default: withCtx(() => [ createVNode(_component_el_form_item, { label: "供应商名称", prop: "name" }, { default: withCtx(() => [ createVNode(_component_el_input, { modelValue: providerForm.name, "onUpdate:modelValue": _cache[5] || (_cache[5] = ($event) => providerForm.name = $event), placeholder: "请输入供应商名称" }, null, 8, ["modelValue"]) ]), _: 1 }), createVNode(_component_el_form_item, { label: "供应商类型", prop: "provider_type" }, { default: withCtx(() => [ createVNode(_component_el_select, { modelValue: providerForm.provider_type, "onUpdate:modelValue": _cache[6] || (_cache[6] = ($event) => providerForm.provider_type = $event), placeholder: "请选择供应商类型", style: { "width": "100%" } }, { default: withCtx(() => [ createVNode(_component_el_option, { label: "OpenAI", value: "openai" }), createVNode(_component_el_option, { label: "DeepSeek", value: "deepseek" }), createVNode(_component_el_option, { label: "Anthropic", value: "anthropic" }), createVNode(_component_el_option, { label: "Gemini", value: "gemini" }), createVNode(_component_el_option, { label: "Qwen", value: "qwen" }), createVNode(_component_el_option, { label: "其他", value: "other" }) ]), _: 1 }, 8, ["modelValue"]) ]), _: 1 }), createVNode(_component_el_form_item, { label: "接口地址", prop: "base_url" }, { default: withCtx(() => [ createVNode(_component_el_input, { modelValue: providerForm.base_url, "onUpdate:modelValue": _cache[7] || (_cache[7] = ($event) => providerForm.base_url = $event), placeholder: "请输入接口地址(BaseURL)" }, null, 8, ["modelValue"]) ]), _: 1 }), createVNode(_component_el_form_item, { label: "API Key", prop: "api_key" }, { default: withCtx(() => [ createVNode(_component_el_input, { modelValue: providerForm.api_key, "onUpdate:modelValue": _cache[8] || (_cache[8] = ($event) => providerForm.api_key = $event), placeholder: "请输入API Key", type: "password", "show-password": "" }, null, 8, ["modelValue"]) ]), _: 1 }), createVNode(_component_el_form_item, { label: "设为默认", prop: "is_default" }, { default: withCtx(() => [ createVNode(_component_el_switch, { modelValue: providerForm.is_default, "onUpdate:modelValue": _cache[9] || (_cache[9] = ($event) => providerForm.is_default = $event), "active-value": 1, "inactive-value": 0 }, null, 8, ["modelValue"]) ]), _: 1 }), createVNode(_component_el_form_item, { label: "备注", prop: "description" }, { default: withCtx(() => [ createVNode(_component_el_input, { modelValue: providerForm.description, "onUpdate:modelValue": _cache[10] || (_cache[10] = ($event) => providerForm.description = $event), type: "textarea", rows: 3, placeholder: "请输入备注" }, null, 8, ["modelValue"]) ]), _: 1 }) ]), _: 1 }, 8, ["model"]) ]), _: 1 }, 8, ["modelValue", "title"]), createVNode(_component_el_dialog, { modelValue: embeddingDialogVisible.value, "onUpdate:modelValue": _cache[21] || (_cache[21] = ($event) => embeddingDialogVisible.value = $event), title: embeddingDialogTitle.value, width: "600px", "destroy-on-close": "" }, { footer: withCtx(() => [ createVNode(_component_el_button, { onClick: _cache[20] || (_cache[20] = ($event) => embeddingDialogVisible.value = false) }, { default: withCtx(() => [..._cache[36] || (_cache[36] = [ createTextVNode("取消", -1) ])]), _: 1 }), createVNode(_component_el_button, { type: "primary", onClick: handleEmbeddingSubmit }, { default: withCtx(() => [..._cache[37] || (_cache[37] = [ createTextVNode("确定", -1) ])]), _: 1 }) ]), default: withCtx(() => [ createVNode(_component_el_form, { ref_key: "embeddingFormRef", ref: embeddingFormRef, model: embeddingForm, rules: embeddingRules, "label-width": "100px" }, { default: withCtx(() => [ createVNode(_component_el_form_item, { label: "配置名称", prop: "name" }, { default: withCtx(() => [ createVNode(_component_el_input, { modelValue: embeddingForm.name, "onUpdate:modelValue": _cache[13] || (_cache[13] = ($event) => embeddingForm.name = $event), placeholder: "请输入配置名称" }, null, 8, ["modelValue"]) ]), _: 1 }), createVNode(_component_el_form_item, { label: "向量化类型", prop: "embedding_type" }, { default: withCtx(() => [ createVNode(_component_el_radio_group, { modelValue: embeddingForm.embedding_type, "onUpdate:modelValue": _cache[14] || (_cache[14] = ($event) => embeddingForm.embedding_type = $event) }, { default: withCtx(() => [ createVNode(_component_el_radio, { value: 0 }, { default: withCtx(() => [..._cache[34] || (_cache[34] = [ createTextVNode("本地", -1) ])]), _: 1 }), createVNode(_component_el_radio, { value: 1 }, { default: withCtx(() => [..._cache[35] || (_cache[35] = [ createTextVNode("远程", -1) ])]), _: 1 }) ]), _: 1 }, 8, ["modelValue"]) ]), _: 1 }), createVNode(_component_el_form_item, { label: "模型名称", prop: "model_name" }, { default: withCtx(() => [ createVNode(_component_el_input, { modelValue: embeddingForm.model_name, "onUpdate:modelValue": _cache[15] || (_cache[15] = ($event) => embeddingForm.model_name = $event), placeholder: "请输入Embedding模型名称" }, null, 8, ["modelValue"]) ]), _: 1 }), embeddingForm.embedding_type === 1 ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [ createVNode(_component_el_form_item, { label: "接口地址", prop: "base_url" }, { default: withCtx(() => [ createVNode(_component_el_input, { modelValue: embeddingForm.base_url, "onUpdate:modelValue": _cache[16] || (_cache[16] = ($event) => embeddingForm.base_url = $event), placeholder: "请输入远程接口地址" }, null, 8, ["modelValue"]) ]), _: 1 }), createVNode(_component_el_form_item, { label: "API Key", prop: "api_key" }, { default: withCtx(() => [ createVNode(_component_el_input, { modelValue: embeddingForm.api_key, "onUpdate:modelValue": _cache[17] || (_cache[17] = ($event) => embeddingForm.api_key = $event), placeholder: "请输入API Key", type: "password", "show-password": "" }, null, 8, ["modelValue"]) ]), _: 1 }) ], 64)) : createCommentVNode("", true), createVNode(_component_el_form_item, { label: "设为默认", prop: "is_default" }, { default: withCtx(() => [ createVNode(_component_el_switch, { modelValue: embeddingForm.is_default, "onUpdate:modelValue": _cache[18] || (_cache[18] = ($event) => embeddingForm.is_default = $event), "active-value": 1, "inactive-value": 0 }, null, 8, ["modelValue"]) ]), _: 1 }), createVNode(_component_el_form_item, { label: "备注", prop: "description" }, { default: withCtx(() => [ createVNode(_component_el_input, { modelValue: embeddingForm.description, "onUpdate:modelValue": _cache[19] || (_cache[19] = ($event) => embeddingForm.description = $event), type: "textarea", rows: 3, placeholder: "请输入备注" }, null, 8, ["modelValue"]) ]), _: 1 }) ]), _: 1 }, 8, ["model"]) ]), _: 1 }, 8, ["modelValue", "title"]) ]); }; } }); const index = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-8e6fe729"]]); export { index as default };