Browse Source

解决历史记录卡顿问题。

dev
宋杰 11 hours ago
parent
commit
8507b1b358
  1. 98
      src/views/components/HistoryRecord.vue

98
src/views/components/HistoryRecord.vue

@ -458,10 +458,22 @@ const historyRecords = ref([]);
const categoryHistory = ref([]); const categoryHistory = ref([]);
let chatFirstFlag = true; let chatFirstFlag = true;
let emotionTirstFlag = true; let emotionTirstFlag = true;
//
let cachedCategoryHistory = null;
let lastDataHash = null;
const getHistoryList = async (params) => { const getHistoryList = async (params) => {
try { try {
const result = await getHistoryListAPI(params); const result = await getHistoryListAPI(params);
historyRecords.value = result.data; historyRecords.value = result.data;
// 使
const currentDataHash = JSON.stringify(result.data.map(r => ({ id: r.id, isTop: r.isTop, createdTime: r.createdTime })));
if (cachedCategoryHistory && lastDataHash === currentDataHash) {
// 使
categoryHistory.value = cachedCategoryHistory;
return;
}
let remainingRecords = result.data; // let remainingRecords = result.data; //
// console.log( // console.log(
// "params", // "params",
@ -505,60 +517,37 @@ const getHistoryList = async (params) => {
} }
// //
// 1.
let topList = remainingRecords.filter((record) => record.isTop === 1);
remainingRecords = remainingRecords.filter((record) => record.isTop !== 1);
// 2.
let todayList = remainingRecords.filter((record) => {
//
const today = moment().format("YYYY-MM-DD"); const today = moment().format("YYYY-MM-DD");
const recordDate = moment(record.createdTime).format("YYYY-MM-DD");
return recordDate === today;
});
remainingRecords = remainingRecords.filter((record) => {
const today = moment().format("YYYY-MM-DD");
const recordDate = moment(record.createdTime).format("YYYY-MM-DD");
return recordDate !== today;
});
// 3. 3
let recent3DaysList = remainingRecords.filter((record) => {
const threeDaysAgo = moment().subtract(3, "days").startOf("day"); const threeDaysAgo = moment().subtract(3, "days").startOf("day");
const yesterday = moment().subtract(1, "days").endOf("day"); const yesterday = moment().subtract(1, "days").endOf("day");
const recordDate = moment(record.createdTime);
return recordDate.isAfter(threeDaysAgo) && recordDate.isBefore(yesterday);
});
remainingRecords = remainingRecords.filter((record) => {
const threeDaysAgo = moment().subtract(3, "days").startOf("day");
const yesterday = moment().subtract(1, "days").endOf("day");
const recordDate = moment(record.createdTime);
return !(
recordDate.isAfter(threeDaysAgo) && recordDate.isBefore(yesterday)
);
});
// 4. 73
let recent7DaysList = remainingRecords.filter((record) => {
const sevenDaysAgo = moment().subtract(7, "days").startOf("day");
const recordDate = moment(record.createdTime);
return recordDate.isAfter(sevenDaysAgo);
});
remainingRecords = remainingRecords.filter((record) => {
const sevenDaysAgo = moment().subtract(7, "days").startOf("day"); const sevenDaysAgo = moment().subtract(7, "days").startOf("day");
const recordDate = moment(record.createdTime);
return !recordDate.isAfter(sevenDaysAgo);
});
// 5. 30
let recent30DaysList = remainingRecords.filter((record) => {
const thirtyDaysAgo = moment().subtract(30, "days").startOf("day");
const recordDate = moment(record.createdTime);
return recordDate.isAfter(thirtyDaysAgo);
});
remainingRecords = remainingRecords.filter((record) => {
const thirtyDaysAgo = moment().subtract(30, "days").startOf("day"); const thirtyDaysAgo = moment().subtract(30, "days").startOf("day");
const topList = [];
const todayList = [];
const recent3DaysList = [];
const recent7DaysList = [];
const recent30DaysList = [];
remainingRecords.forEach((record) => {
if (record.isTop === 1) {
topList.push(record);
return;
}
const recordDate = moment(record.createdTime); const recordDate = moment(record.createdTime);
return !recordDate.isAfter(thirtyDaysAgo);
const recordDateStr = recordDate.format("YYYY-MM-DD");
if (recordDateStr === today) {
todayList.push(record);
} else if (recordDate.isAfter(threeDaysAgo) && recordDate.isBefore(yesterday)) {
recent3DaysList.push(record);
} else if (recordDate.isAfter(sevenDaysAgo)) {
recent7DaysList.push(record);
} else if (recordDate.isAfter(thirtyDaysAgo)) {
recent30DaysList.push(record);
}
}); });
historyRecords.value = result.data; historyRecords.value = result.data;
@ -585,6 +574,11 @@ const getHistoryList = async (params) => {
list: recent30DaysList, list: recent30DaysList,
}, },
]; ];
//
cachedCategoryHistory = categoryHistory.value;
lastDataHash = currentDataHash;
// console.log("historyRecords", historyRecords.value); // console.log("historyRecords", historyRecords.value);
// console.log("categoryHistory", categoryHistory.value); // console.log("categoryHistory", categoryHistory.value);
} catch (e) { } catch (e) {
@ -807,7 +801,7 @@ onMounted(() => {
border-right: 1px solid rgba(255, 255, 255, 0.1); border-right: 1px solid rgba(255, 255, 255, 0.1);
backdrop-filter: blur(10px); backdrop-filter: blur(10px);
z-index: 1000; z-index: 1000;
transition: width 0.3s ease;
transition: width 0.2s ease-out;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
align-items: center; align-items: center;
@ -824,7 +818,7 @@ onMounted(() => {
border-right: 1px solid rgba(255, 255, 255, 0.1); border-right: 1px solid rgba(255, 255, 255, 0.1);
backdrop-filter: blur(10px); backdrop-filter: blur(10px);
z-index: 1000; z-index: 1000;
transition: width 0.3s ease;
transition: width 0.2s ease-out;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
align-items: center; align-items: center;
@ -849,7 +843,7 @@ onMounted(() => {
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
transition: all 0.3s ease;
transition: background-color 0.2s ease-out, border-color 0.2s ease-out;
z-index: 10; z-index: 10;
} }
@ -862,7 +856,7 @@ onMounted(() => {
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
transition: all 0.3s ease;
transition: background-color 0.2s ease-out, border-color 0.2s ease-out;
z-index: 10; z-index: 10;
} }

Loading…
Cancel
Save