保存本地对routes.ts的修改

Change-Id: I4f4dbd8069893d7363e251130791dc0594be44e1
diff --git a/src/components/BugReportSection.tsx b/src/components/BugReportSection.tsx
new file mode 100644
index 0000000..a512fc6
--- /dev/null
+++ b/src/components/BugReportSection.tsx
@@ -0,0 +1,159 @@
+import React, { useState, useEffect } from 'react';
+import { List, Button, Form, Input, Select, message, Typography, Tag, Divider, Pagination } from 'antd';
+import { BugOutlined } from '@ant-design/icons';
+import WorkAPI from '../api/workApi';
+import type { BugReport } from '../api/otherType';
+
+const { Text } = Typography;
+const { Option } = Select;
+const { TextArea } = Input;
+
+interface BugReportForm {
+  title: string;
+  description: string;
+  severity: 'low' | 'medium' | 'high';
+}
+
+const BugReportSection: React.FC<{ workId: number }> = ({ workId }) => {
+  const [bugs, setBugs] = useState<BugReport[]>([]);
+  const [loading, setLoading] = useState(false);
+  const [form] = Form.useForm();
+  const [currentPage, setCurrentPage] = useState(1);
+  const [pageSize, setPageSize] = useState(5); // 每页显示5条
+
+  // 加载Bug反馈列表
+  useEffect(() => {
+    const loadBugs = async () => {
+      try {
+        setLoading(true);
+        const bugList = await WorkAPI.getBugReports(workId);
+        setBugs(bugList);
+      } catch (error) {
+        message.error('加载Bug反馈失败');
+      } finally {
+        setLoading(false);
+      }
+    };
+
+    loadBugs();
+  }, [workId]);
+
+  // 获取当前页的Bug数据
+  const getCurrentPageBugs = () => {
+    const startIndex = (currentPage - 1) * pageSize;
+    const endIndex = startIndex + pageSize;
+    return bugs.slice(startIndex, endIndex);
+  };
+
+  // 提交Bug反馈
+  const handleSubmit = async (values: BugReportForm) => {
+    try {
+      await WorkAPI.reportBug(workId, values);
+      message.success('Bug反馈提交成功');
+      form.resetFields();
+      // 重新加载Bug列表
+      const bugList = await WorkAPI.getBugReports(workId);
+      setBugs(bugList);
+      // 重置到第一页
+      setCurrentPage(1);
+    } catch (error) {
+      message.error('Bug反馈提交失败');
+    }
+  };
+
+  const getSeverityColor = (severity: string) => {
+    switch (severity) {
+      case 'high': return 'red';
+      case 'medium': return 'orange';
+      default: return 'green';
+    }
+  };
+
+  return (
+    <div className="bug-report-section">
+      <Divider orientation="left">
+        <BugOutlined /> Bug反馈
+      </Divider>
+
+      <Form form={form} onFinish={handleSubmit} layout="vertical">
+        <Form.Item
+          name="title"
+          label="Bug标题"
+          rules={[{ required: true, message: '请输入Bug标题' }]}
+        >
+          <Input placeholder="简要描述Bug" />
+        </Form.Item>
+
+        <Form.Item
+          name="severity"
+          label="严重程度"
+          initialValue="medium"
+          rules={[{ required: true }]}
+        >
+          <Select>
+            <Option value="low">低</Option>
+            <Option value="medium">中</Option>
+            <Option value="high">高</Option>
+          </Select>
+        </Form.Item>
+
+        <Form.Item
+          name="description"
+          label="详细描述"
+          rules={[{ required: true, message: '请详细描述Bug' }]}
+        >
+          <TextArea rows={4} placeholder="请详细描述Bug出现的步骤、现象和预期结果" />
+        </Form.Item>
+
+        <Form.Item>
+          <Button type="primary" htmlType="submit">
+            提交Bug
+          </Button>
+        </Form.Item>
+      </Form>
+
+      <Divider orientation="left">Bug列表</Divider>
+
+      <List
+        dataSource={getCurrentPageBugs()}
+        loading={loading}
+        renderItem={bug => (
+          <List.Item>
+            <div className="bug-item">
+              <div className="bug-header">
+                <Text strong>{bug.title}</Text>
+                <Tag color={getSeverityColor(bug.severity)}>
+                  {bug.severity === 'high' ? '严重' : bug.severity === 'medium' ? '中等' : '轻微'}
+                </Tag>
+              </div>
+              <Text type="secondary">报告人: {bug.reporter} | 时间: {new Date(bug.createTime).toLocaleString()}</Text>
+              <div className="bug-content">
+                <Text>{bug.description}</Text>
+              </div>
+              <Tag color={bug.status === 'open' ? 'red' : bug.status === 'resolved' ? 'green' : 'gray'}>
+                {bug.status === 'open' ? '未解决' : bug.status === 'resolved' ? '已解决' : '不予解决'}
+              </Tag>
+            </div>
+          </List.Item>
+        )}
+      />
+
+      <div style={{ textAlign: 'right', marginTop: 16 }}>
+        <Pagination
+          current={currentPage}
+          pageSize={pageSize}
+          total={bugs.length}
+          onChange={(page, size) => {
+            setCurrentPage(page);
+            setPageSize(size);
+          }}
+          showSizeChanger
+          showQuickJumper
+          showTotal={total => `共 ${total} 条`}
+        />
+      </div>
+    </div>
+  );
+};
+
+export default BugReportSection;
\ No newline at end of file