+
diff --git a/src/pages/repair/EditRepairModal.tsx b/src/pages/repair/EditRepairModal.tsx
new file mode 100644
index 0000000..1657233
--- /dev/null
+++ b/src/pages/repair/EditRepairModal.tsx
@@ -0,0 +1,131 @@
+import { useState, useEffect } from "react"
+import { Modal, ModalContent, ModalHeader, ModalBody, ModalFooter, Button, Input, Textarea } from "@heroui/react"
+import { saturdayClient } from "../../utils/client"
+import { makeLogtoClient } from "../../utils/auth"
+import type { components } from "../../types/saturday"
+
+type PublicEvent = components["schemas"]["PublicEvent"]
+type UpdateClientEventInputBody = components["schemas"]["UpdateClientEventInputBody"]
+
+interface EditRepairModalProps {
+ isOpen: boolean
+ onClose: () => void
+ event: PublicEvent
+ onSaved: () => void
+}
+
+export default function EditRepairModal({ isOpen, onClose, event, onSaved }: EditRepairModalProps) {
+ const [loading, setLoading] = useState(false)
+ const [formData, setFormData] = useState
({
+ problem: "",
+ model: "",
+ phone: "",
+ qq: "",
+ })
+
+ useEffect(() => {
+ if (event) {
+ setFormData({
+ problem: event.problem || "",
+ model: event.model || "",
+ phone: event.phone || "",
+ qq: event.qq || "",
+ })
+ }
+ }, [event])
+
+ const handleSubmit = async (e: React.FormEvent) => {
+ e.preventDefault()
+ setLoading(true)
+
+ try {
+ const logtoToken = await makeLogtoClient().getAccessToken()
+
+ const { error } = await saturdayClient.PATCH("/client/events/{EventId}", {
+ params: {
+ path: {
+ EventId: event.eventId,
+ },
+ },
+ headers: {
+ Authorization: `Bearer ${logtoToken}`,
+ },
+ body: formData,
+ })
+
+ if (error) {
+ throw new Error("Failed to update event")
+ }
+
+ onSaved()
+ }
+ catch (err) {
+ console.error("Error updating event:", err)
+ // Could add error handling/toast here
+ }
+ finally {
+ setLoading(false)
+ }
+ }
+
+ const handleClose = () => {
+ if (!loading) {
+ onClose()
+ }
+ }
+
+ return (
+
+
+
+
+
+ )
+}
diff --git a/src/pages/repair/EventDetail.tsx b/src/pages/repair/EventDetail.tsx
index 9f4c36c..22ad863 100644
--- a/src/pages/repair/EventDetail.tsx
+++ b/src/pages/repair/EventDetail.tsx
@@ -199,7 +199,7 @@ const EventDetail = forwardRef
- {props.children(event)}
+ {props.children && props.children(event)}
)
diff --git a/src/pages/repair/RepairHistoryCard.tsx b/src/pages/repair/RepairHistoryCard.tsx
new file mode 100644
index 0000000..c6b3dbb
--- /dev/null
+++ b/src/pages/repair/RepairHistoryCard.tsx
@@ -0,0 +1,54 @@
+import { Card, CardBody, Chip } from "@heroui/react"
+import { EventStatusChip } from "./EventDetail"
+import dayjs from "dayjs"
+import type { components } from "../../types/saturday"
+
+type PublicEvent = components["schemas"]["PublicEvent"]
+
+interface RepairHistoryCardProps {
+ event: PublicEvent
+ onViewDetail: (event: PublicEvent) => void
+}
+
+export default function RepairHistoryCard({ event, onViewDetail }: RepairHistoryCardProps) {
+ const handleCardClick = () => {
+ onViewDetail(event)
+ }
+
+ return (
+
+ )
+}
diff --git a/src/pages/repair/RepairHistoryPage.tsx b/src/pages/repair/RepairHistoryPage.tsx
new file mode 100644
index 0000000..1ccd066
--- /dev/null
+++ b/src/pages/repair/RepairHistoryPage.tsx
@@ -0,0 +1,84 @@
+import { useState, useEffect } from "react"
+import { Button, Spinner } from "@heroui/react"
+import { makeLogtoClient } from "../../utils/auth"
+import UserRepairHistory from "./UserRepairHistory"
+import type { UserInfoResponse } from "@logto/browser"
+
+export default function RepairHistoryPage() {
+ const [userInfo, setUserInfo] = useState