import {
|
AnswerState,
|
AnswerType,
|
ChatContent,
|
RoleEnum,
|
roleImageMap
|
} from "@/model/chat/types";
|
import {
|
CHAT_GROUP_DATA,
|
TEST_DATA
|
} from "./testData";
|
import {
|
TAB_BAR_HEIGHT
|
} from "@/custom-tab-bar/constants";
|
import {
|
checkAuth
|
} from "@/utils/http";
|
import { GetHistoryAnswer, QueryHistoryDetail } from "@/api/chat";
|
|
import {ErrorCode} from "@/utils/http";
|
// pages/question/question.js
|
const getAnswerById = async (historyId: string) => {
|
return await GetHistoryAnswer({
|
history_id: historyId,
|
});
|
};
|
|
|
const parseContent = (res) => {
|
if (!res) return null;
|
let content: ChatContent = {
|
type: AnswerType.Text,
|
values: '解析失败!',
|
};
|
|
switch (res.answer_type) {
|
case AnswerType.RecordSet:
|
content = {
|
type: AnswerType.RecordSet,
|
values: res.values,
|
};
|
break;
|
case AnswerType.Text:
|
content = {
|
type: AnswerType.Text,
|
values: res.values ?? res.answer,
|
};
|
break;
|
|
case AnswerType.Knowledge:
|
content = {
|
type: AnswerType.Knowledge,
|
values: res.knowledge,
|
};
|
|
break;
|
case AnswerType.Summary:
|
content = {
|
type: AnswerType.Summary,
|
values: res.summary,
|
};
|
|
break;
|
case AnswerType.Url:
|
content = {
|
type: AnswerType.Url,
|
values: res.url,
|
};
|
break;
|
case AnswerType.Map:
|
content = {
|
type: AnswerType.Map,
|
values: res.values,
|
};
|
break;
|
default:
|
content = {
|
type: AnswerType.Text,
|
values: '解析失败!',
|
};
|
break;
|
}
|
content.askMoreList = wx.$_.orderBy(res.context_history, [(item) => Number(item.radio)], ['desc']);
|
content.errCode = res?.err_code;
|
content.errMsg = res?.json_msg;
|
content.origin = res;
|
return content;
|
};
|
Component({
|
|
// 页面的初始数据
|
data: {
|
AnswerType,
|
sendText: '',
|
chatHistory: [],
|
roleImageMap,
|
RoleEnum,
|
drawerIsShow: false,
|
displayChatRoom: CHAT_GROUP_DATA,
|
TAB_BAR_HEIGHT: TAB_BAR_HEIGHT,
|
ErrorCode,
|
activeChatRoom: {
|
"group_id": "a8197e731f704943974946e0d260bd5c",
|
"group_title": "查询控江路压流一体设备的昨日瞬时流量",
|
"chat_count": "8",
|
"create_time": "2024-07-19 20:56:24"
|
},
|
},
|
methods: {
|
onSendTextChange: function (e) {
|
// this.setData({
|
// sendText:e.detail.value
|
// })
|
},
|
chatRoomClick(e) {
|
const item = e.currentTarget.dataset.item;
|
this.setData({
|
activeChatRoom: item,
|
})
|
},
|
delChatRoomClick(e) {
|
const id = e.currentTarget.dataset.id;
|
wx.modal({
|
content: '确定删除当前聊天室吗?'
|
}).then(val => {
|
if (!val) return;
|
})
|
},
|
|
// 聊天室图标点击
|
chatRoomListClick() {
|
this.setData({
|
drawerIsShow: true,
|
})
|
},
|
drawerCloseClick() {
|
this.setData({
|
drawerIsShow: false,
|
})
|
}
|
},
|
|
lifetimes: {
|
async attached() {
|
const isPassed = checkAuth();
|
if (!isPassed) return;
|
const res = await QueryHistoryDetail({
|
history_group_id: this.data.activeChatRoom.group_id,
|
});
|
this.setData({
|
chatHistory: (res.details ?? []).map((item) => {
|
return {
|
historyId: item.history_id,
|
role: RoleEnum.user,
|
content: {
|
type: AnswerType.Text,
|
values: item.question,
|
},
|
}
|
})
|
})
|
|
// currentSectionId = res?.details?.[0]?.section_a_id;
|
// currentSampleId = res?.details?.[0]?.sample_id;
|
const resList: any[] = await Promise.all((res.details ?? []).map((item) => getAnswerById(item.history_id)));
|
let i = 0;
|
|
resList.map((item, index) => {
|
const insertIndex = index + 1 + i;
|
this.data.chatHistory.splice(
|
insertIndex,
|
0,
|
item.answer === null ?
|
null :
|
{
|
historyId: item.answer?.history_id,
|
role: RoleEnum.assistant,
|
content: parseContent(item.answer),
|
state: item.answer_state,
|
}
|
);
|
i++;
|
});
|
|
this.setData({
|
chatHistory: this.data.chatHistory
|
})
|
|
// if (messageList.value.length === 0) {
|
// messageContent.value = {
|
// type: AnswerType.Text,
|
// values: activeChatRoom.value.title,
|
// };
|
|
// sendChatMessage();
|
// }
|
}
|
},
|
|
pageLifetimes: {
|
show() {
|
if (typeof this.getTabBar === 'function' &&
|
this.getTabBar()) {
|
this.getTabBar().setData({
|
selected: 0
|
})
|
}
|
}
|
}
|
|
|
|
})
|