From e56eaab69acf919e74eb89272f6abf0888a749ef Mon Sep 17 00:00:00 2001 From: xion Date: Thu, 3 Apr 2025 15:35:24 +0800 Subject: [PATCH] add temp ticket --- package.json | 1 + packages/.gitkeep | 0 pnpm-workspace.yaml | 3 - script/clear.ts | 9 +++ src/pages/App.tsx | 88 ++++++++++++++++++++++++++++- src/pages/ModalForm.tsx | 121 ++++++++++++++++++++++++++++++++++++++++ submodules/.gitkeep | 0 turbo.json | 22 -------- 8 files changed, 216 insertions(+), 28 deletions(-) delete mode 100644 packages/.gitkeep delete mode 100644 pnpm-workspace.yaml create mode 100644 src/pages/ModalForm.tsx delete mode 100644 submodules/.gitkeep delete mode 100644 turbo.json diff --git a/package.json b/package.json index 6b433e7..9797218 100644 --- a/package.json +++ b/package.json @@ -42,6 +42,7 @@ "@types/react-dom": "^19.1.1", "@vitejs/plugin-basic-ssl": "^2.0.0", "@vitejs/plugin-react": "^4.3.4", + "commander": "^13.1.0", "tailwindcss": "^4.1.1", "typescript": "^5.8.2", "vite": "^6.2.4" diff --git a/packages/.gitkeep b/packages/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml deleted file mode 100644 index 4214824..0000000 --- a/pnpm-workspace.yaml +++ /dev/null @@ -1,3 +0,0 @@ -packages: - - 'submodules/*' - - 'packages/*' diff --git a/script/clear.ts b/script/clear.ts index 88faa5f..2fb36c1 100644 --- a/script/clear.ts +++ b/script/clear.ts @@ -1,5 +1,6 @@ import fs from 'fs'; import path from 'path'; +import { program } from 'commander'; export const root = process.cwd(); @@ -9,3 +10,11 @@ export const clearWorkspace = () => { fs.rmSync(path.join(root, file), { recursive: true, force: true }); } }; + +// clearWorkspace(); +program.option('-c, --clear', 'clear workspace').action((opts) => { + if (opts.clear) { + clearWorkspace(); + } +}); +program.parse(process.argv); diff --git a/src/pages/App.tsx b/src/pages/App.tsx index 5c2b2ba..42b0d73 100644 --- a/src/pages/App.tsx +++ b/src/pages/App.tsx @@ -1,5 +1,87 @@ -import { basename } from '../modules/basename'; -console.log('basename', basename); +import { useState } from 'react'; +import { Box, Button, Paper, Table, TableBody, TableCell, TableContainer, TableHead, TableRow, IconButton } from '@mui/material'; +import { Edit, Delete } from 'lucide-react'; +import { ModalForm } from './ModalForm'; + +// 定义工单类型 +interface Ticket { + id: number; + title: string; + status: string; + priority: string; + createTime: string; +} + export const App = () => { - return
123
; + const [tickets, setTickets] = useState([]); + const [open, setOpen] = useState(false); + const [selectedTicket, setSelectedTicket] = useState(null); + + const handleCreate = () => { + setSelectedTicket(null); + setOpen(true); + }; + + const handleEdit = (ticket: Ticket) => { + setSelectedTicket(ticket); + setOpen(true); + }; + + const handleDelete = (id: number) => { + setTickets(tickets.filter((ticket) => ticket.id !== id)); + }; + + const handleSave = (data: Ticket) => { + if (selectedTicket) { + setTickets(tickets.map((t) => (t.id === selectedTicket.id ? data : t))); + } else { + setTickets([...tickets, { ...data, id: Date.now() }]); + } + setOpen(false); + }; + + return ( + + +

工单管理

+ +
+ + + + + + 标题 + 状态 + 优先级 + 创建时间 + 操作 + + + + {tickets.map((ticket) => ( + + {ticket.title} + {ticket.status} + {ticket.priority} + {ticket.createTime} + + handleEdit(ticket)}> + + + handleDelete(ticket.id)}> + + + + + ))} + +
+
+ + setOpen(false)} onSave={handleSave} ticket={selectedTicket} /> +
+ ); }; diff --git a/src/pages/ModalForm.tsx b/src/pages/ModalForm.tsx new file mode 100644 index 0000000..8708631 --- /dev/null +++ b/src/pages/ModalForm.tsx @@ -0,0 +1,121 @@ +import { useEffect } from 'react'; +import { useForm, Controller } from 'react-hook-form'; +import { + Dialog, + DialogTitle, + DialogContent, + DialogActions, + Button, + TextField, + MenuItem, + Box +} from '@mui/material'; + +interface Ticket { + id: number; + title: string; + status: string; + priority: string; + createTime: string; +} + +interface ModalFormProps { + open: boolean; + onClose: () => void; + onSave: (data: Ticket) => void; + ticket: Ticket | null; +} + +export const ModalForm = ({ open, onClose, onSave, ticket }: ModalFormProps) => { + const { control, handleSubmit, reset } = useForm({ + defaultValues: { + title: '', + status: '待处理', + priority: '中', + createTime: new Date().toLocaleString() + } + }); + + useEffect(() => { + if (ticket) { + reset(ticket); + } else { + reset({ + title: '', + status: '待处理', + priority: '中', + createTime: new Date().toLocaleString() + }); + } + }, [ticket, reset]); + + const onSubmit = (data: Ticket) => { + onSave(data); + }; + + return ( + + {ticket ? '编辑工单' : '创建工单'} +
+ + + ( + + )} + /> + + ( + + 待处理 + 处理中 + 已完成 + + )} + /> + + ( + + + + + + )} + /> + + + + + + +
+
+ ); +}; \ No newline at end of file diff --git a/submodules/.gitkeep b/submodules/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/turbo.json b/turbo.json deleted file mode 100644 index 2163d21..0000000 --- a/turbo.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "$schema": "https://turbo.build/schema.json", - "tasks": { - "build": { - "dependsOn": [ - "^build" - ], - "outputs": [ - "dist/**" - ] - }, - "dev:lib": { - "persistent": true, - "cache": true - }, - "build:lib": { - "dependsOn": [ - "^build:lib" - ] - } - } -} \ No newline at end of file