FPSMS-frontend
Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.
 
 

185 строки
5.2 KiB

  1. "use client";
  2. import React, { useTransition } from "react";
  3. import ProductionRecordingModal from "./ProductionRecordingModal";
  4. import {
  5. Box,
  6. Button,
  7. Table,
  8. TableBody,
  9. TableCell,
  10. TableContainer,
  11. TableHead,
  12. TableRow,
  13. Paper,
  14. Typography,
  15. Chip,
  16. } from "@mui/material";
  17. import { Material } from "./types";
  18. import { useTranslation } from "react-i18next";
  19. import QualityCheckModal from "./QualityCheckModal";
  20. import { sampleItem } from "./dummyData";
  21. interface ProcessData {
  22. id: string;
  23. processName: string;
  24. status: "Not Started" | "In Progress" | "Completed";
  25. recordedData?: any; // You can type this based on your actual data structure
  26. materials: Material[];
  27. }
  28. interface ProductionProcessProps {
  29. processes: ProcessData[];
  30. }
  31. interface ProductionRecordingModalProps {
  32. isOpen: boolean;
  33. onClose: () => void;
  34. process?: ProcessData | null;
  35. onDataRecorded?: (processId: string, data: any) => void;
  36. }
  37. const ProductionProcess: React.FC<ProductionProcessProps> = ({ processes }) => {
  38. const [isModalOpen, setIsModalOpen] = React.useState<boolean>(false);
  39. const [selectedProcess, setSelectedProcess] =
  40. React.useState<ProcessData | null>(null);
  41. const [isQCModalOpen, setIsQCModalOpen] = React.useState<boolean>(false);
  42. const { t } = useTranslation("productionProcess");
  43. console.log("production process");
  44. const handleOpenModal = (process: ProcessData) => {
  45. setSelectedProcess(process);
  46. setIsModalOpen(true);
  47. };
  48. const handleCloseModal = () => {
  49. setIsModalOpen(false);
  50. setSelectedProcess(null);
  51. };
  52. const handleQCOpenModal = (process: ProcessData) => {
  53. setSelectedProcess(process);
  54. setIsQCModalOpen(true);
  55. };
  56. const handleQCCloseModal = () => {
  57. setIsQCModalOpen(false);
  58. setSelectedProcess(null);
  59. };
  60. const handleDataRecorded = (processId: string, data: any) => {
  61. const updated = processes.map((process) =>
  62. process.id === processId
  63. ? { ...process, status: "Completed", recordedData: data }
  64. : process,
  65. );
  66. console.log(updated);
  67. };
  68. const getStatusColor = (status: ProcessData["status"]) => {
  69. switch (status) {
  70. case "Not Started":
  71. return "default";
  72. case "In Progress":
  73. return "warning";
  74. case "Completed":
  75. return "success";
  76. default:
  77. return "default";
  78. }
  79. };
  80. return (
  81. <Box sx={{ p: 3 }}>
  82. <Typography variant="h4" component="h1" gutterBottom sx={{ mb: 3 }}>
  83. Production Process Recording
  84. </Typography>
  85. <TableContainer component={Paper} sx={{ boxShadow: 2 }}>
  86. <Table sx={{ minWidth: 650 }}>
  87. <TableHead>
  88. <TableRow sx={{ bgcolor: "grey.50" }}>
  89. <TableCell sx={{ fontWeight: "bold" }}>Process ID</TableCell>
  90. <TableCell sx={{ fontWeight: "bold" }}>Process Name</TableCell>
  91. <TableCell sx={{ fontWeight: "bold" }}>Status</TableCell>
  92. <TableCell sx={{ fontWeight: "bold" }}>Action</TableCell>
  93. </TableRow>
  94. </TableHead>
  95. <TableBody>
  96. {processes.map((process) => (
  97. <TableRow
  98. key={process.id}
  99. sx={{
  100. "&:last-child td, &:last-child th": { border: 0 },
  101. "&:hover": { bgcolor: "grey.50" },
  102. }}
  103. >
  104. <TableCell component="th" scope="row">
  105. {process.id}
  106. </TableCell>
  107. <TableCell>{process.processName}</TableCell>
  108. <TableCell>
  109. <Chip
  110. label={t(process.status)}
  111. color={getStatusColor(process.status)}
  112. size="small"
  113. />
  114. </TableCell>
  115. <TableCell>
  116. <Button
  117. variant="contained"
  118. color="primary"
  119. size="small"
  120. onClick={() => handleOpenModal(process)}
  121. sx={{
  122. fontWeight: 500,
  123. textTransform: "none",
  124. }}
  125. >
  126. {process.status === "Completed"
  127. ? "View/Edit Data"
  128. : "Record Data"}
  129. </Button>
  130. <Button
  131. variant="contained"
  132. color="primary"
  133. size="small"
  134. onClick={() => handleQCOpenModal(process)}
  135. sx={{
  136. fontWeight: 500,
  137. textTransform: "none",
  138. }}
  139. >
  140. {t("Quality Check")}
  141. </Button>
  142. </TableCell>
  143. </TableRow>
  144. ))}
  145. </TableBody>
  146. </Table>
  147. </TableContainer>
  148. {selectedProcess && (
  149. <ProductionRecordingModal
  150. isOpen={isModalOpen}
  151. onClose={handleCloseModal}
  152. jobProcess={selectedProcess}
  153. onDataRecorded={handleDataRecorded}
  154. />
  155. )}
  156. {
  157. <QualityCheckModal
  158. isOpen={isQCModalOpen}
  159. onClose={() => handleQCCloseModal()}
  160. item={sampleItem}
  161. />
  162. }
  163. </Box>
  164. );
  165. };
  166. export default ProductionProcess;