main
mula.liu 2025-11-21 15:47:08 +08:00
parent 52e5ea553a
commit 4df2f40e9c
6 changed files with 40 additions and 11 deletions

BIN
.DS_Store vendored

Binary file not shown.

BIN
dist.zip

Binary file not shown.

View File

@ -12,6 +12,7 @@ services:
volumes:
# 挂载日志目录到宿主机
- ./logs:/app/logs
- /etc/localtime:/etc/localtime:ro
restart: unless-stopped
container_name: imeeting-frontend
extra_hosts:

View File

@ -63,6 +63,12 @@ const Dashboard = ({ user, onLogout }) => {
};
console.log('💡 Cache debug commands available: window.meetingCache.stats(), window.meetingCache.clear(), window.meetingCache.info()');
}
// :
return () => {
console.log('Dashboard unmounting, clearing meeting cache');
meetingCacheService.clearAll();
};
}, [user.user_id]);
//
@ -97,8 +103,8 @@ const Dashboard = ({ user, onLogout }) => {
const fetchMeetings = async (page = 1, isLoadMore = false) => {
try {
//
const filterKey = meetingCacheService.generateFilterKey(filterType, searchQuery, selectedTags);
// (user_id)
const filterKey = meetingCacheService.generateFilterKey(user.user_id, filterType, searchQuery, selectedTags);
// ,
if (!isLoadMore) {

View File

@ -404,17 +404,18 @@ const MeetingDetails = ({ user }) => {
},
});
//
await fetchMeetingDetails();
//
setAudioFile(null);
setShowUploadConfirm(false);
setShowAudioDropdown(false);
showToast('音频上传成功,正在进行智能转录...', 'success');
// Reset file input
const fileInput = document.getElementById('audio-file-upload');
if (fileInput) fileInput.value = '';
// Refresh meeting details to get new audio and transcription status
await fetchMeetingDetails();
showToast('音频上传成功,正在进行智能转录...', 'success');
} catch (err) {
console.error('Upload error:', err);
@ -440,16 +441,36 @@ const MeetingDetails = ({ user }) => {
// API
const response = await apiClient.post(buildApiUrl(`/api/meetings/${meeting_id}/transcription/start`));
if (response.data.task_id) {
// response {code, message, data}task_id data
if (response.data && response.data.task_id) {
// pending
const newStatus = {
task_id: response.data.task_id,
status: 'pending',
progress: 0,
meeting_id: parseInt(meeting_id)
};
setTranscriptionStatus(newStatus);
setTranscriptionProgress(0);
//
setTranscript([]);
setSpeakerList([]);
setMeeting(prevMeeting => ({
...prevMeeting,
summary: null
}));
showToast('智能转录已启动', 'success');
setShowAudioDropdown(false);
//
startStatusPolling(response.data.task_id);
} else {
showToast('启动转录成功但未获取到任务ID', 'warning');
}
} catch (err) {
console.error('Start transcription error:', err);
showToast(err.response?.data?.message || '启动转录失败,请重试', 'error');
showToast(err.response?.data?.message || err.message || '启动转录失败,请重试', 'error');
}
};

View File

@ -13,14 +13,15 @@ class MeetingCacheService {
/**
* 生成过滤器键(不包含页码)
* @param {number} userId - 用户ID
* @param {string} filterType - 过滤类型: 'all', 'created', 'attended'
* @param {string} searchQuery - 搜索关键词
* @param {Array<string>} selectedTags - 选中的标签列表
* @returns {string} 过滤器键
*/
generateFilterKey(filterType, searchQuery = '', selectedTags = []) {
generateFilterKey(userId, filterType, searchQuery = '', selectedTags = []) {
const tagsStr = selectedTags.length > 0 ? selectedTags.sort().join(',') : '';
return `${filterType}|${searchQuery}|${tagsStr}`;
return `${userId}|${filterType}|${searchQuery}|${tagsStr}`;
}
/**