fix: 前端构建修复+后端静态托管+Docker部署

This commit is contained in:
2026-08-12 17:05:29 +08:00
parent f52aee0e1c
commit 2716e2c691
+6 -42
View File
@@ -10,7 +10,6 @@ import {
Input,
Select,
DatePicker,
InputNumber,
Typography,
Segmented,
Table,
@@ -30,7 +29,6 @@ import {
import { taskApi, projectApi, workerApi } from '@/api';
import type { Task, TaskCreate, TaskStatus, Project, Worker } from '@/types';
import { TaskStatusTag, PriorityTag, taskStatusConfig, taskStatusList } from '@/components/constants';
import TaskDetailModal from '@/pages/TaskDetail';
import dayjs from 'dayjs';
const { Title, Text } = Typography;
@@ -49,14 +47,13 @@ export default function Tasks() {
const [workers, setWorkers] = useState<Worker[]>([]);
const [loading, setLoading] = useState(false);
const [viewMode, setViewMode] = useState<string>('kanban');
const [filterProject, setFilterProject] = useState<string | undefined>();
const [filterProject, setFilterProject] = useState<number | undefined>();
const [filterStatus, setFilterStatus] = useState<TaskStatus | undefined>();
const [modalOpen, setModalOpen] = useState(false);
const [editing, setEditing] = useState<Task | null>(null);
const [form] = Form.useForm();
const [saving, setSaving] = useState(false);
const [detailTask, setDetailTask] = useState<Task | null>(null);
const loadData = useCallback(() => {
setLoading(true);
@@ -81,7 +78,7 @@ export default function Tasks() {
const openCreate = () => {
setEditing(null);
form.resetFields();
form.setFieldsValue({ priority: 'medium', max_retries: 3 });
form.setFieldsValue({ priority: 'medium' });
setModalOpen(true);
};
@@ -91,7 +88,6 @@ export default function Tasks() {
title: task.title,
description: task.description,
priority: task.priority,
max_retries: task.max_retries,
});
setModalOpen(true);
};
@@ -105,7 +101,6 @@ export default function Tasks() {
title: values.title,
description: values.description,
priority: values.priority,
max_retries: values.max_retries,
};
if (values.due_date) {
@@ -114,7 +109,8 @@ export default function Tasks() {
if (values.input_data) {
try {
payload.input_data = JSON.parse(values.input_data);
JSON.parse(values.input_data); // validate JSON format
payload.input_data = values.input_data;
} catch {
message.error('输入数据 JSON 格式错误');
setSaving(false);
@@ -144,7 +140,7 @@ export default function Tasks() {
}
};
const handleDelete = async (id: string) => {
const handleDelete = async (id: number) => {
try {
await taskApi.delete(id);
message.success('删除成功');
@@ -206,7 +202,6 @@ export default function Tasks() {
key={task.id}
size="small"
className="kanban-card"
onClick={() => setDetailTask(task)}
style={{ marginBottom: 8 }}
>
<div style={{ fontWeight: 600, marginBottom: 4 }}>
@@ -214,9 +209,6 @@ export default function Tasks() {
</div>
<Space size={4}>
<PriorityTag priority={task.priority} />
{task.cost > 0 && (
<Tag color="orange">¥{task.cost.toFixed(2)}</Tag>
)}
</Space>
{task.description && (
<div
@@ -249,9 +241,7 @@ export default function Tasks() {
title: '任务名称',
dataIndex: 'title',
key: 'title',
render: (text: string, record: Task) => (
<a onClick={() => setDetailTask(record)}>{text}</a>
),
render: (text: string) => text,
},
{
title: '状态',
@@ -265,12 +255,6 @@ export default function Tasks() {
key: 'priority',
render: (p: Task['priority']) => <PriorityTag priority={p} />,
},
{
title: '花费',
dataIndex: 'cost',
key: 'cost',
render: (v: number) => (v > 0 ? `¥${v.toFixed(2)}` : '-'),
},
{
title: '创建时间',
dataIndex: 'created_at',
@@ -283,13 +267,6 @@ export default function Tasks() {
width: 280,
render: (_: unknown, record: Task) => (
<Space>
<Button
type="link"
size="small"
onClick={() => setDetailTask(record)}
>
</Button>
<Button
type="link"
size="small"
@@ -434,9 +411,6 @@ export default function Tasks() {
<Form.Item name="priority" label="优先级">
<Select options={priorities} />
</Form.Item>
<Form.Item name="max_retries" label="最大重试次数">
<InputNumber min={0} max={10} style={{ width: '100%' }} />
</Form.Item>
<Form.Item name="due_date" label="截止时间">
<DatePicker style={{ width: '100%' }} />
</Form.Item>
@@ -449,16 +423,6 @@ export default function Tasks() {
</Form.Item>
</Form>
</Modal>
{/* Detail Modal */}
<TaskDetailModal
task={detailTask}
workers={workers}
onClose={() => setDetailTask(null)}
onUpdated={() => {
loadData();
}}
/>
</div>
);
}