!75 !74 fix: 任务侧边栏点击详情后"任务不存在"问题

Merge pull request !75 from 何朝晖/develop
This commit is contained in:
2026-05-25 12:30:29 +00:00
committed by Gitee
4 changed files with 23 additions and 7 deletions
+1 -1
View File
@@ -198,7 +198,7 @@ func (s *ProjectService) GetTasks(ctx context.Context, userID uint, projectID ui
response := make([]model.TaskResponse, len(tasks)) response := make([]model.TaskResponse, len(tasks))
for i, t := range tasks { for i, t := range tasks {
response[i] = model.TaskResponse{ response[i] = model.TaskResponse{
ID: fmt.Sprintf("%d", t.ID), ID: t.ExternalID,
ProjectID: fmt.Sprintf("%d", t.ProjectID), ProjectID: fmt.Sprintf("%d", t.ProjectID),
Prompt: t.Prompt, Prompt: t.Prompt,
AssetType: t.AssetType, AssetType: t.AssetType,
+8 -4
View File
@@ -1,5 +1,5 @@
import { useEffect, useState, useCallback } from 'react' import { useEffect, useState, useCallback } from 'react'
import { useParams } from 'react-router-dom' import { Link, useParams } from 'react-router-dom'
import { getTasks } from '../api/project' import { getTasks } from '../api/project'
import type { Task } from '../api/types' import type { Task } from '../api/types'
import StatusBadge from './StatusBadge' import StatusBadge from './StatusBadge'
@@ -67,9 +67,9 @@ export default function TaskListPanel() {
</p> </p>
) : ( ) : (
tasks.map(task => ( tasks.map(task => (
<a <Link
key={task.id} key={task.id}
href={task.status === 'completed' ? `/projects/${projectId}/tasks/${task.id}` : undefined} to={task.status === 'completed' ? `/projects/${projectId}/tasks/${task.id}` : '#'}
style={{ style={{
display: 'block', display: 'block',
padding: '12px 16px', padding: '12px 16px',
@@ -77,8 +77,12 @@ export default function TaskListPanel() {
textDecoration: 'none', textDecoration: 'none',
color: 'inherit', color: 'inherit',
cursor: task.status === 'completed' ? 'pointer' : 'default', cursor: task.status === 'completed' ? 'pointer' : 'default',
pointerEvents: task.status === 'completed' ? 'auto' : 'none',
transition: 'background 0.15s', transition: 'background 0.15s',
}} }}
onClick={e => {
if (task.status !== 'completed') e.preventDefault()
}}
onMouseEnter={e => { onMouseEnter={e => {
if (task.status === 'completed') if (task.status === 'completed')
(e.currentTarget as HTMLElement).style.background = 'var(--accent-dim)' (e.currentTarget as HTMLElement).style.background = 'var(--accent-dim)'
@@ -115,7 +119,7 @@ export default function TaskListPanel() {
)} )}
</div> </div>
<PipelineStages currentStage={task.stage ?? null} status={task.status} /> <PipelineStages currentStage={task.stage ?? null} status={task.status} />
</a> </Link>
)) ))
)} )}
</div> </div>
+1 -1
View File
@@ -22,7 +22,7 @@ interface AuthState {
export const useAuthStore = create<AuthState>((set) => ({ export const useAuthStore = create<AuthState>((set) => ({
user: null, user: null,
isAuthenticated: false, isAuthenticated: getToken() !== null,
loading: false, loading: false,
error: null, error: null,
+13 -1
View File
@@ -28,6 +28,13 @@ interface TaskState {
reset: () => void reset: () => void
} }
const DEFAULT_FORMAT: Record<AssetType, 'spritesheet' | 'individual'> = {
sprite: 'spritesheet',
background: 'individual',
ui: 'individual',
animation: 'spritesheet',
}
const DEFAULT_PARAMS: TaskParams = { const DEFAULT_PARAMS: TaskParams = {
resolution: 1024, resolution: 1024,
format: 'spritesheet', format: 'spritesheet',
@@ -44,7 +51,12 @@ export const useTaskStore = create<TaskState>((set, get) => ({
setPrompt: (text) => set({ prompt: text, optimizedPrompt: null }), setPrompt: (text) => set({ prompt: text, optimizedPrompt: null }),
setAssetType: (type) => set({ assetType: type, optimizedPrompt: null }), setAssetType: (type) =>
set({
assetType: type,
params: { ...get().params, format: DEFAULT_FORMAT[type] },
optimizedPrompt: null,
}),
toggleTaskStyle: (key, value) => toggleTaskStyle: (key, value) =>
set(state => { set(state => {