feat: 重新对接了会话及相关的接口
This commit is contained in:
85
src/renderer/api/SessionsApi.ts
Normal file
85
src/renderer/api/SessionsApi.ts
Normal file
@@ -0,0 +1,85 @@
|
||||
import { getRequest, postRequest, ResponseModel } from '@utils/request'
|
||||
|
||||
// 创建会话 的请求参数和响应数据结构
|
||||
export interface CreateSessionRequest {
|
||||
title?: string
|
||||
tenant_id_query?: string
|
||||
}
|
||||
|
||||
export interface CreateSessionResponse {
|
||||
session_id: string
|
||||
user_id: string
|
||||
tenant_id: string
|
||||
title: string
|
||||
}
|
||||
|
||||
export const createSession = async (params: CreateSessionRequest) => {
|
||||
const res: ResponseModel = await postRequest('/nianxx/api/sessions', params)
|
||||
return res.data as CreateSessionResponse
|
||||
}
|
||||
|
||||
|
||||
// 获取会话列表 的请求参数和响应数据结构
|
||||
export interface SessionListRequest {
|
||||
tenant_id_query?: string
|
||||
limit?: number
|
||||
offset?: number
|
||||
}
|
||||
|
||||
export interface SessionListResponse {
|
||||
sessions: Array<SessionListRecords>
|
||||
total: number
|
||||
}
|
||||
|
||||
export interface SessionListRecords {
|
||||
session_id: string
|
||||
user_id: string
|
||||
tenant_id: string
|
||||
title: string
|
||||
status: string
|
||||
created_at: string
|
||||
updated_at: string
|
||||
}
|
||||
|
||||
export const getSessionList = async (params: SessionListRequest) => {
|
||||
const res: ResponseModel = await getRequest('/nianxx/api/sessions', params)
|
||||
return res.data as SessionListResponse
|
||||
}
|
||||
|
||||
|
||||
|
||||
/// 获取会话消息历史 的请求参数和响应数据结构
|
||||
export interface SessionMessagesRequest {
|
||||
user_id_query?: string
|
||||
tenant_id_query?: number
|
||||
limit?: number
|
||||
offset?: number
|
||||
session_id: string
|
||||
}
|
||||
|
||||
export interface SessionMessagesResponse {
|
||||
messages: Array<SessionMessageRecords>
|
||||
total: number
|
||||
}
|
||||
|
||||
export interface SessionMessageRecords {
|
||||
id: number
|
||||
session_id: string
|
||||
role: string
|
||||
content: string
|
||||
source: string
|
||||
message_id: string | null
|
||||
created_at: string
|
||||
timestamp?: number
|
||||
}
|
||||
|
||||
// 获取会话消息历史 的函数实现
|
||||
export const getSessionMessages = async (params: SessionMessagesRequest) => {
|
||||
const res: ResponseModel = await getRequest(`/nianxx/api/sessions/${params.session_id}/messages`, {
|
||||
limit: params.limit,
|
||||
offset: params.offset,
|
||||
user_id_query: params.user_id_query,
|
||||
tenant_id_query: params.tenant_id_query,
|
||||
})
|
||||
return res.data as SessionMessagesResponse
|
||||
}
|
||||
@@ -77,6 +77,7 @@ instance.interceptors.request.use(
|
||||
}
|
||||
}
|
||||
|
||||
console.log(`🚀 ~ request: \n url:${config.url} \n params:${JSON.stringify(config.data)} \n`)
|
||||
return config
|
||||
},
|
||||
(error) => {
|
||||
@@ -87,7 +88,7 @@ instance.interceptors.request.use(
|
||||
// 添加响应拦截器
|
||||
instance.interceptors.response.use(
|
||||
(res) => {
|
||||
console.log(`🚀 ~ response: \n url:${res.config.url} \n params:${JSON.stringify(res.config.params)} \n data:\n ${JSON.stringify(res.data)}`)
|
||||
console.log(`🚀 ~ response: \n url:${res.config.url} \n params:${JSON.stringify(res.config.data)} \n data:\n ${JSON.stringify(res.data)}`)
|
||||
// 未设置状态码则默认成功状态
|
||||
const code = res.data.code || 200
|
||||
// 获取错误信息
|
||||
@@ -143,7 +144,7 @@ instance.interceptors.response.use(
|
||||
export const postRequest = <ResponseModel>(url: string, data?: any, options?: any): Promise<ResponseModel> => {
|
||||
return instance.request({
|
||||
url,
|
||||
method: 'POST',
|
||||
method: 'post',
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
},
|
||||
@@ -156,7 +157,7 @@ export const postRequest = <ResponseModel>(url: string, data?: any, options?: an
|
||||
export const getRequest = <ResponseModel>(url: string, params?: any, options?: any): Promise<ResponseModel> => {
|
||||
return instance.request({
|
||||
url,
|
||||
method: 'GET',
|
||||
method: 'get',
|
||||
params,
|
||||
...(options || {}),
|
||||
}) as Promise<ResponseModel>
|
||||
|
||||
@@ -88,7 +88,7 @@ import { Session } from '../../utils/storage';
|
||||
|
||||
import userAvatar from '@assets/images/login/user_icon.png';
|
||||
import aiAvatar from '@assets/images/login/blue_logo.png';
|
||||
import { createConversation, conversationMessageList } from '../../api/ConversationApi';
|
||||
import { createSession, getSessionMessages } from '../../api/SessionsApi';
|
||||
import { ElMessage, ElLoading } from 'element-plus'
|
||||
|
||||
// 支持外部通过 prop 控制是否为引导页
|
||||
@@ -275,7 +275,7 @@ onMounted(() => {
|
||||
|
||||
// token存在,初始化数据
|
||||
const initHandler = async () => {
|
||||
console.log("initHandler");
|
||||
console.log("initHandler:检查 token 并初始化数据");
|
||||
const token = getAccessToken();
|
||||
if (!token) return;
|
||||
await createConversationRequest();
|
||||
@@ -296,11 +296,11 @@ const checkToken = async () => {
|
||||
|
||||
// 调用接口创建新会话
|
||||
const createConversationRequest = async (): Promise<string | null> => {
|
||||
const res = await createConversation();
|
||||
if (res && res.conversationId) {
|
||||
conversationId.value = res.conversationId;
|
||||
const res = await createSession({});
|
||||
if (res && res.session_id) {
|
||||
conversationId.value = res.session_id;
|
||||
console.log("创建新会话,ID:", conversationId.value);
|
||||
return res.conversationId;
|
||||
return res.session_id;
|
||||
} else {
|
||||
console.log("创建会话失败,接口返回异常");
|
||||
return null;
|
||||
@@ -310,13 +310,14 @@ const createConversationRequest = async (): Promise<string | null> => {
|
||||
// 加载历史会话消息
|
||||
const loadConversationMessages = async (convId: string) => {
|
||||
try {
|
||||
const res = await conversationMessageList({ conversationId: convId, pageSize: 50, pageNum: 1 });
|
||||
const res = await getSessionMessages({ session_id: convId, limit: 50, offset: 0 });
|
||||
// 将消息转换为 ChatMessage 格式
|
||||
chatMsgList.value = res.records.map((msg: any) => ({
|
||||
messageId: msg.messageId,
|
||||
messageRole: msg.messageSenderRole === 'user' ? MessageRole.ME : MessageRole.AI,
|
||||
messageContent: msg.messageContent,
|
||||
timestamp: msg.timestamp,
|
||||
chatMsgList.value = res.messages.map((msg: any) => ({
|
||||
messageId: msg.message_id,
|
||||
messageRole: msg.role === 'user' ? MessageRole.ME : MessageRole.AI,
|
||||
messageContent: msg.content,
|
||||
messageContentList: [msg.content],
|
||||
timestamp: msg.created_at_ts,
|
||||
finished: true, // 历史消息已完成
|
||||
}));
|
||||
console.log("加载历史消息:", chatMsgList.value);
|
||||
@@ -493,7 +494,7 @@ const handleWebSocketMessage = (data: any) => {
|
||||
chatMsgList.value[aiMsgIndex].messageContent = "";
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// 处理toolCall
|
||||
if (data.toolCall) {
|
||||
chatMsgList.value[aiMsgIndex].toolCall = data.toolCall;
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
]">
|
||||
<span class="w-2 h-2 rounded-full bg-[#BEDBFF] flex-none"></span>
|
||||
<div class="flex-1 min-w-0">
|
||||
<div class="truncate text-sm">{{ item.conversationId }}</div>
|
||||
<div class="truncate text-sm">{{ item.conversationTitle }}</div>
|
||||
</div>
|
||||
<button v-if="item.conversationId === selectedConversationId"
|
||||
class="bg-transparent border-0 text-gray-500 text-lg px-1 py-0">…</button>
|
||||
@@ -32,7 +32,7 @@
|
||||
<script setup lang="ts">
|
||||
import { ref, onMounted, defineEmits } from 'vue'
|
||||
import { RiAddLine, RiArrowRightSLine, RiArrowDownSLine } from '@remixicon/vue'
|
||||
import { getConversationList } from '../../api/ConversationApi';
|
||||
import { getSessionList } from '../../api/SessionsApi';
|
||||
|
||||
interface HistoryMessage {
|
||||
conversationId: string;
|
||||
@@ -72,11 +72,11 @@ onMounted(() => {
|
||||
|
||||
/// 获取历史会话列表
|
||||
const getHistoryConversationList = async () => {
|
||||
const list = await getConversationList({ pageSize: 20, pageNum: 1 })
|
||||
if (!list || !list.records) return;
|
||||
groups.value.push(...list.records.map((item: any) => ({
|
||||
conversationId: item.conversationId,
|
||||
conversationTitle: item.conversationTitle
|
||||
const list = await getSessionList({ limit: 50, offset: 0 })
|
||||
if (!list || !list.sessions) return;
|
||||
groups.value.push(...list.sessions.map((item: any) => ({
|
||||
conversationId: item.session_id,
|
||||
conversationTitle: item.title
|
||||
})))
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user