From a025a6bdd80fba64fc4826d7e38b92e24e354cae Mon Sep 17 00:00:00 2001 From: nanhaoluo <3075912108@qq.com> Date: Mon, 26 Jan 2026 11:44:52 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=AE=8C=E5=96=84=E5=A4=9A=20API=20?= =?UTF-8?q?=E7=AE=A1=E7=90=86=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 为每个 API 配置添加刷新模型列表按钮 - 支持从 API 端点动态获取可用模型列表 - 添加模型选择界面,支持单选和快速应用 - 优化配置获取函数的错误处理和向后兼容性 - 修复空配置导致的 Fatal Error 问题 - 每个提供商可独立配置多个 API(不同密钥、端点、模型) - 支持负载均衡、备用切换等使用场景 --- settings.php | 102 ++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 101 insertions(+), 1 deletion(-) diff --git a/settings.php b/settings.php index 2a31c28..4aa1b39 100644 --- a/settings.php +++ b/settings.php @@ -2133,8 +2133,14 @@ function themeoptions_page(){

+

@@ -2339,6 +2345,100 @@ function themeoptions_page(){ $('.argon-api-form[data-provider="' + provider + '"]').slideUp(); }); + // 刷新模型列表 + $('.argon-refresh-models').on('click', function() { + var btn = $(this); + var provider = btn.data('provider'); + var form = $('.argon-api-form[data-provider="' + provider + '"]'); + var modelsList = form.find('.argon-models-list'); + var apiKey = form.find('.argon-api-form-key').val().trim(); + var apiEndpoint = form.find('.argon-api-form-endpoint').val().trim(); + + if (!apiKey) { + alert(''); + return; + } + + // 显示加载状态 + btn.prop('disabled', true); + btn.find('.dashicons').addClass('spin'); + modelsList.html('

').slideDown(); + + // 发送 AJAX 请求 + $.post(ajaxurl, { + action: 'argon_get_ai_models', + nonce: '', + provider: provider, + api_key: apiKey, + api_endpoint: apiEndpoint + }, function(response) { + btn.prop('disabled', false); + btn.find('.dashicons').removeClass('spin'); + + if (response.success && response.data.models) { + var models = response.data.models; + var html = '

'; + html += '
'; + + models.forEach(function(model) { + var modelId = model.id || model; + var modelName = model.name || model.id || model; + html += ''; + }); + + html += '
'; + html += '

'; + + modelsList.html(html); + + // 高亮当前模型 + var currentModel = form.find('.argon-api-form-model').val(); + if (currentModel) { + modelsList.find('input[value="' + currentModel + '"]').prop('checked', true).closest('.model-option').css('background', '#e8f4f8'); + } + + // 鼠标悬停效果 + modelsList.find('.model-option').hover( + function() { $(this).css('background', '#f0f0f0'); }, + function() { + if (!$(this).find('input').is(':checked')) { + $(this).css('background', ''); + } + } + ); + + // 选中模型时高亮 + modelsList.find('input[type="radio"]').on('change', function() { + modelsList.find('.model-option').css('background', ''); + $(this).closest('.model-option').css('background', '#e8f4f8'); + }); + } else { + modelsList.html('

: ' + (response.data || '') + '

'); + } + }).fail(function() { + btn.prop('disabled', false); + btn.find('.dashicons').removeClass('spin'); + modelsList.html('

'); + }); + }); + + // 使用选中的模型 + $(document).on('click', '.argon-use-selected-model', function() { + var provider = $(this).data('provider'); + var form = $('.argon-api-form[data-provider="' + provider + '"]'); + var selectedModel = form.find('input[name="model_select_' + provider + '"]:checked').val(); + + if (selectedModel) { + form.find('.argon-api-form-model').val(selectedModel); + form.find('.argon-models-list').slideUp(); + } else { + alert(''); + } + }); + // 渲染 API 列表 function renderApiList(provider, apisData) { var apiList = $('.argon-api-list[data-provider="' + provider + '"]');