Add files via upload

This commit is contained in:
公明
2026-01-28 19:20:22 +08:00
committed by GitHub
parent 79fa951da8
commit 7c35c93f23
3 changed files with 74 additions and 39 deletions
+9 -10
View File
@@ -13,21 +13,21 @@ import (
// OpenAPIHandler OpenAPI处理器
type OpenAPIHandler struct {
db *database.DB
logger *zap.Logger
resultStorage storage.ResultStorage
db *database.DB
logger *zap.Logger
resultStorage storage.ResultStorage
conversationHdlr *ConversationHandler
agentHdlr *AgentHandler
agentHdlr *AgentHandler
}
// NewOpenAPIHandler 创建新的OpenAPI处理器
func NewOpenAPIHandler(db *database.DB, logger *zap.Logger, resultStorage storage.ResultStorage, conversationHdlr *ConversationHandler, agentHdlr *AgentHandler) *OpenAPIHandler {
return &OpenAPIHandler{
db: db,
logger: logger,
resultStorage: resultStorage,
db: db,
logger: logger,
resultStorage: resultStorage,
conversationHdlr: conversationHdlr,
agentHdlr: agentHdlr,
agentHdlr: agentHdlr,
}
}
@@ -487,7 +487,7 @@ func (h *OpenAPIHandler) GetOpenAPISpec(c *gin.Context) {
},
},
},
"/api/agent-loop": map[string]interface{}{
"/api/agent-loop/stream": map[string]interface{}{
"post": map[string]interface{}{
"tags": []string{"对话交互"},
"summary": "发送消息并获取AI回复(核心端点)",
@@ -572,7 +572,6 @@ func (h *OpenAPIHandler) GetOpenAPISpec(c *gin.Context) {
c.JSON(http.StatusOK, spec)
}
// GetConversationResults 获取对话结果(OpenAPI端点)
// 注意:创建对话和获取对话详情直接使用标准的 /api/conversations 端点
// 这个端点只是为了提供结果聚合功能
+33 -29
View File
@@ -224,7 +224,7 @@ function renderParameters(endpoint) {
if (params.length === 0) return '';
const rows = params.map(param => {
const required = param.required ? '<span class="api-param-required">必需</span>' : '<span style="color: var(--text-muted);">可选</span>';
const required = param.required ? '<span class="api-param-required">必需</span>' : '<span class="api-param-optional">可选</span>';
return `
<tr>
<td><span class="api-param-name">${param.name}</span></td>
@@ -238,19 +238,21 @@ function renderParameters(endpoint) {
return `
<div class="api-section">
<div class="api-section-title">参数</div>
<table class="api-params-table">
<thead>
<tr>
<th>参数名</th>
<th>类型</th>
<th>描述</th>
<th>必需</th>
</tr>
</thead>
<tbody>
${rows}
</tbody>
</table>
<div class="api-table-wrapper">
<table class="api-params-table">
<thead>
<tr>
<th>参数名</th>
<th>类型</th>
<th>描述</th>
<th>必需</th>
</tr>
</thead>
<tbody>
${rows}
</tbody>
</table>
</div>
</div>
`;
}
@@ -279,7 +281,7 @@ function renderRequestBody(endpoint) {
const prop = schema.properties[key];
const required = requiredFields.includes(key)
? '<span class="api-param-required">必需</span>'
: '<span style="color: var(--text-muted);">可选</span>';
: '<span class="api-param-optional">可选</span>';
// 处理嵌套类型
let typeDisplay = prop.type || 'object';
@@ -308,20 +310,22 @@ function renderRequestBody(endpoint) {
if (rows) {
paramsTable = `
<table class="api-params-table" style="margin-top: 12px;">
<thead>
<tr>
<th>参数名</th>
<th>类型</th>
<th>描述</th>
<th>必需</th>
<th>示例</th>
</tr>
</thead>
<tbody>
${rows}
</tbody>
</table>
<div class="api-table-wrapper" style="margin-top: 12px;">
<table class="api-params-table">
<thead>
<tr>
<th>参数名</th>
<th>类型</th>
<th>描述</th>
<th>必需</th>
<th>示例</th>
</tr>
</thead>
<tbody>
${rows}
</tbody>
</table>
</div>
`;
}
}
+32
View File
@@ -233,6 +233,12 @@
margin-bottom: 24px;
}
.api-table-wrapper {
overflow-x: auto;
width: 100%;
-webkit-overflow-scrolling: touch;
}
.api-section:last-child {
margin-bottom: 0;
}
@@ -257,6 +263,7 @@
width: 100%;
border-collapse: collapse;
font-size: 0.875rem;
table-layout: auto;
}
.api-params-table th,
@@ -266,6 +273,25 @@
border-bottom: 1px solid var(--border-color);
}
/* 参数名、类型、必需、示例列不换行 */
.api-params-table th:nth-child(1),
.api-params-table td:nth-child(1),
.api-params-table th:nth-child(2),
.api-params-table td:nth-child(2),
.api-params-table th:nth-child(4),
.api-params-table td:nth-child(4),
.api-params-table th:nth-child(5),
.api-params-table td:nth-child(5) {
white-space: nowrap;
}
/* 描述列允许换行 */
.api-params-table th:nth-child(3),
.api-params-table td:nth-child(3) {
white-space: normal;
word-break: break-word;
}
.api-params-table th {
background: var(--bg-secondary);
font-weight: 600;
@@ -293,6 +319,12 @@
font-weight: 600;
}
.api-param-optional {
color: var(--text-muted);
font-size: 0.75rem;
font-weight: 400;
}
.api-test-section {
margin-top: 24px;
padding-top: 24px;