diff --git a/model/task.go b/model/task.go index b37dd3e6a..82c2e978a 100644 --- a/model/task.go +++ b/model/task.go @@ -234,12 +234,6 @@ func TaskGetAllTasks(startIdx int, num int, queryParams SyncTaskQueryParams) []* return nil } - for _, task := range tasks { - if cache, err := GetUserCache(task.UserId); err == nil { - task.Username = cache.Username - } - } - return tasks } diff --git a/web/src/components/table/task-logs/TaskLogsColumnDefs.jsx b/web/src/components/table/task-logs/TaskLogsColumnDefs.jsx index 7fd930eb1..c78d5773e 100644 --- a/web/src/components/table/task-logs/TaskLogsColumnDefs.jsx +++ b/web/src/components/table/task-logs/TaskLogsColumnDefs.jsx @@ -18,7 +18,7 @@ For commercial licensing, please contact support@quantumnous.com */ import React from 'react'; -import { Progress, Tag, Typography } from '@douyinfe/semi-ui'; +import { Progress, Tag, Tooltip, Typography } from '@douyinfe/semi-ui'; import { Music, FileText, @@ -240,6 +240,7 @@ export const getTaskLogsColumns = ({ openContentModal, isAdminUser, openVideoModal, + showUserInfoFunc, }) => { return [ { @@ -293,31 +294,30 @@ export const getTaskLogsColumns = ({ { key: COLUMN_KEYS.USERNAME, title: t('用户'), - dataIndex: 'username', - render: (text, record, index) => { + dataIndex: 'user_id', + render: (userId, record, index) => { if (!isAdminUser) { return <>; } - const displayName = record.display_name; - const label = displayName || text || t('未知'); - const avatarText = - typeof displayName === 'string' && displayName.length > 0 - ? displayName[0] - : typeof text === 'string' && text.length > 0 - ? text[0] - : '?'; - + const displayText = String(record.username || userId || '?'); return ( - + showUserInfoFunc && showUserInfoFunc(userId)} + > + {displayText.slice(0, 1)} + + + showUserInfoFunc && showUserInfoFunc(userId)} > - {avatarText} - - - {label} + {userId} ); diff --git a/web/src/components/table/task-logs/TaskLogsTable.jsx b/web/src/components/table/task-logs/TaskLogsTable.jsx index c3b4d5145..b62e15bd2 100644 --- a/web/src/components/table/task-logs/TaskLogsTable.jsx +++ b/web/src/components/table/task-logs/TaskLogsTable.jsx @@ -40,6 +40,7 @@ const TaskLogsTable = (taskLogsData) => { copyText, openContentModal, openVideoModal, + showUserInfoFunc, isAdminUser, t, COLUMN_KEYS, @@ -53,9 +54,10 @@ const TaskLogsTable = (taskLogsData) => { copyText, openContentModal, openVideoModal, + showUserInfoFunc, isAdminUser, }); - }, [t, COLUMN_KEYS, copyText, openContentModal, openVideoModal, isAdminUser]); + }, [t, COLUMN_KEYS, copyText, openContentModal, openVideoModal, showUserInfoFunc, isAdminUser]); // Filter columns based on visibility settings const getVisibleColumns = () => { diff --git a/web/src/components/table/task-logs/index.jsx b/web/src/components/table/task-logs/index.jsx index bc5b91787..140725a89 100644 --- a/web/src/components/table/task-logs/index.jsx +++ b/web/src/components/table/task-logs/index.jsx @@ -25,6 +25,7 @@ import TaskLogsActions from './TaskLogsActions'; import TaskLogsFilters from './TaskLogsFilters'; import ColumnSelectorModal from './modals/ColumnSelectorModal'; import ContentModal from './modals/ContentModal'; +import UserInfoModal from '../usage-logs/modals/UserInfoModal'; import { useTaskLogsData } from '../../../hooks/task-logs/useTaskLogsData'; import { useIsMobile } from '../../../hooks/common/useIsMobile'; import { createCardProPagination } from '../../../helpers/utils'; @@ -45,6 +46,7 @@ const TaskLogsPage = () => { modalContent={taskLogsData.videoUrl} isVideo={true} /> + { const [isVideoModalOpen, setIsVideoModalOpen] = useState(false); const [videoUrl, setVideoUrl] = useState(''); + // User info modal state + const [showUserInfo, setShowUserInfoModal] = useState(false); + const [userInfoData, setUserInfoData] = useState(null); + // Form state const [formApi, setFormApi] = useState(null); let now = new Date(); @@ -273,6 +277,21 @@ export const useTaskLogsData = () => { setIsVideoModalOpen(true); }; + // User info function + const showUserInfoFunc = async (userId) => { + if (!isAdminUser) { + return; + } + const res = await API.get(`/api/user/${userId}`); + const { success, message, data } = res.data; + if (success) { + setUserInfoData(data); + setShowUserInfoModal(true); + } else { + showError(message); + } + }; + // Initialize data useEffect(() => { const localPageSize = @@ -319,6 +338,12 @@ export const useTaskLogsData = () => { compactMode, setCompactMode, + // User info modal + showUserInfo, + setShowUserInfoModal, + userInfoData, + showUserInfoFunc, + // Functions loadLogs, handlePageChange,