Files
2026-04-23 11:13:23 +08:00

114 lines
2.7 KiB
JavaScript

// pages/wiki/chat/history/index.js
import request from '../../../../utils/request';
Page({
data: {
list: [],
total: 0,
current: 1,
pageSize: 15,
loading: false,
hasMore: true,
showClearDialog: false,
},
onLoad() {
this.fetchHistory(true);
},
fetchHistory(reset = false) {
if (this.data.loading) return;
if (!reset && !this.data.hasMore) return;
const current = reset ? 1 : this.data.current;
this.setData({ loading: true });
request.get('/plant/chat/history', { current, pageSize: this.data.pageSize })
.then(res => {
const items = (res.list || []).map(item => ({
...item,
answerPreview: (item.answer || '').substring(0, 80) + ((item.answer || '').length > 80 ? '...' : ''),
}));
const total = res.total || 0;
if (reset) {
this.setData({
list: items,
total,
current: 2,
hasMore: items.length < total,
loading: false,
});
} else {
const old = this.data.list;
const update = {};
items.forEach((item, i) => {
update[`list[${old.length + i}]`] = item;
});
update.current = current + 1;
update.hasMore = (old.length + items.length) < total;
update.loading = false;
update.total = total;
this.setData(update);
}
})
.catch(() => {
this.setData({ loading: false });
});
},
loadMore() {
this.fetchHistory(false);
},
onTapItem(e) {
const item = e.currentTarget.dataset.item;
// Navigate to chat page with prefilled Q&A
wx.navigateTo({
url: '/pages/wiki/chat/index?fromHistory=1',
success(res) {
res.eventChannel.emit('historyData', {
question: item.question,
answer: item.answer,
});
},
});
},
onDeleteItem(e) {
const id = e.currentTarget.dataset.id;
wx.showModal({
title: '删除记录',
content: '确定删除这条问答记录吗?',
success: (res) => {
if (res.confirm) {
request.post('/plant/chat/history/delete', { id }).then(() => {
wx.showToast({ title: '已删除', icon: 'success' });
this.fetchHistory(true);
});
}
},
});
},
onClearAll() {
this.setData({ showClearDialog: true });
},
closeClearDialog() {
this.setData({ showClearDialog: false });
},
doClearAll() {
this.setData({ showClearDialog: false });
request.post('/plant/chat/history/clear').then(() => {
wx.showToast({ title: '已清空', icon: 'success' });
this.setData({ list: [], total: 0, hasMore: false });
});
},
goToChat() {
wx.navigateBack();
},
});