trithuc-mvc-react 3.1.6 → 3.1.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -14,6 +14,7 @@ import { TableRowRenderSM } from "./TableRowRenderSM";
|
|
|
14
14
|
import TableToolbar from "./TableToolbar";
|
|
15
15
|
import { useDataTable } from "./hooks";
|
|
16
16
|
import DeleteConfirmationDialog from "./DeleteConfirmationDialog";
|
|
17
|
+
import DeleteMultipleConfirmationDialog from "./DeleteMultipleConfirmationDialog";
|
|
17
18
|
const defaultQueryOptions = {
|
|
18
19
|
staleTime: 1000 * 60 * 1, // Thời gian dữ liệu có thể sử dụng lại trước khi gọi lại API
|
|
19
20
|
cacheTime: 1000 * 60 * 30, // Thời gian dữ liệu được lưu trong cache trước khi bị xóa
|
|
@@ -3,6 +3,9 @@ import { Box, Button, Card, Grid, IconButton, Stack, Tooltip, Typography, useMed
|
|
|
3
3
|
import { useEffect, useMemo, useState } from "react";
|
|
4
4
|
|
|
5
5
|
import { Add, Refresh } from "@mui/icons-material";
|
|
6
|
+
import BarChartIcon from "@mui/icons-material/BarChart";
|
|
7
|
+
import PieChartIcon from "@mui/icons-material/PieChart";
|
|
8
|
+
import TableChartIcon from "@mui/icons-material/TableChart";
|
|
6
9
|
import PropTypes from "prop-types";
|
|
7
10
|
import { DataTableContext } from "./context";
|
|
8
11
|
import DataTable from "./DataTable";
|
|
@@ -60,7 +63,9 @@ DataManagement.propTypes = {
|
|
|
60
63
|
onAddClick: PropTypes.func,
|
|
61
64
|
onEditClick: PropTypes.func,
|
|
62
65
|
tabPanel: PropTypes.node,
|
|
63
|
-
titleAddButton: PropTypes.string
|
|
66
|
+
titleAddButton: PropTypes.string,
|
|
67
|
+
thongKe: PropTypes.object,
|
|
68
|
+
bieuDo: PropTypes.object
|
|
64
69
|
};
|
|
65
70
|
const getDefaultValues = (filters = []) => {
|
|
66
71
|
const defaultValues = {};
|
|
@@ -101,13 +106,18 @@ function DataManagement({
|
|
|
101
106
|
}
|
|
102
107
|
},
|
|
103
108
|
defaultRowsPerPage = 5,
|
|
104
|
-
titleAddButton = "Thêm"
|
|
109
|
+
titleAddButton = "Thêm",
|
|
110
|
+
thongKe,
|
|
111
|
+
bieuDo
|
|
105
112
|
}) {
|
|
106
113
|
const [openEditorDialog, setOpenEditorDialog] = useState(false);
|
|
107
114
|
const [selectedEditItem, setSelectedEditItem] = useState(null);
|
|
108
115
|
const [openViewDialog, setOpenViewDialog] = useState(false);
|
|
109
116
|
|
|
110
|
-
const { canCreate } = usePermission(apiUrl ? apiUrl : tableName);
|
|
117
|
+
const { canCreate, canThongKe, canBieuDo } = usePermission(apiUrl ? apiUrl : tableName);
|
|
118
|
+
|
|
119
|
+
const [viewMode, setViewMode] = useState("table"); // "table" | "thongke" | "bieudo"
|
|
120
|
+
|
|
111
121
|
const { defaults, filters } = useMemo(() => {
|
|
112
122
|
const filters = tableFilters.filter(({ type }) => type !== "default");
|
|
113
123
|
const defaultFilters = tableFilters.filter(({ type }) => type === "default");
|
|
@@ -165,7 +175,9 @@ function DataManagement({
|
|
|
165
175
|
hasTabpanel,
|
|
166
176
|
backParentNavigator,
|
|
167
177
|
defaultRowsPerPage,
|
|
168
|
-
titleAddButton
|
|
178
|
+
titleAddButton,
|
|
179
|
+
thongKe,
|
|
180
|
+
bieuDo
|
|
169
181
|
};
|
|
170
182
|
}, [
|
|
171
183
|
reserPage,
|
|
@@ -184,7 +196,9 @@ function DataManagement({
|
|
|
184
196
|
setOpenViewDialog,
|
|
185
197
|
onEditClick,
|
|
186
198
|
backParentNavigator,
|
|
187
|
-
defaultRowsPerPage
|
|
199
|
+
defaultRowsPerPage,
|
|
200
|
+
thongKe,
|
|
201
|
+
bieuDo
|
|
188
202
|
]);
|
|
189
203
|
const isSmallScreen = useMediaQuery(theme.breakpoints.down("sm")); // Xác định màn hình nhỏ
|
|
190
204
|
const methods = useForm({ defaultValues: getDefaultValues(filters) });
|
|
@@ -319,6 +333,40 @@ function DataManagement({
|
|
|
319
333
|
width: rightBoxMinWidth ? `${rightBoxMinWidth}px` : "auto" // Sử dụng chiều rộng đo được
|
|
320
334
|
}}
|
|
321
335
|
>
|
|
336
|
+
{(viewMode === "thongke" || viewMode === "bieudo") && (
|
|
337
|
+
<Tooltip title="Danh sách dữ liệu">
|
|
338
|
+
<IconButton size={elementSize} color="primary" onClick={() => setViewMode("table")} sx={{ ml: 0.5, mr: 0.5 }}>
|
|
339
|
+
<TableChartIcon fontSize="inherit" />
|
|
340
|
+
</IconButton>
|
|
341
|
+
</Tooltip>
|
|
342
|
+
)}
|
|
343
|
+
|
|
344
|
+
{canThongKe && (
|
|
345
|
+
<Tooltip title="Thống kê">
|
|
346
|
+
<IconButton
|
|
347
|
+
size={elementSize}
|
|
348
|
+
color={viewMode === "thongke" ? "secondary" : "primary"}
|
|
349
|
+
onClick={() => setViewMode("thongke")}
|
|
350
|
+
sx={{ ml: 0.5, mr: 0.5 }}
|
|
351
|
+
>
|
|
352
|
+
<BarChartIcon fontSize="inherit" />
|
|
353
|
+
</IconButton>
|
|
354
|
+
</Tooltip>
|
|
355
|
+
)}
|
|
356
|
+
|
|
357
|
+
{canBieuDo && (
|
|
358
|
+
<Tooltip title="Biểu đồ">
|
|
359
|
+
<IconButton
|
|
360
|
+
size={elementSize}
|
|
361
|
+
color={viewMode === "bieudo" ? "secondary" : "primary"}
|
|
362
|
+
onClick={() => setViewMode("bieudo")}
|
|
363
|
+
sx={{ ml: 0.5, mr: 0.5 }}
|
|
364
|
+
>
|
|
365
|
+
<PieChartIcon fontSize="inherit" />
|
|
366
|
+
</IconButton>
|
|
367
|
+
</Tooltip>
|
|
368
|
+
)}
|
|
369
|
+
|
|
322
370
|
<HuongDanButton tableName={tableName} size={elementSize} />
|
|
323
371
|
<Tooltip title="Làm mới">
|
|
324
372
|
<IconButton
|
|
@@ -370,25 +418,32 @@ function DataManagement({
|
|
|
370
418
|
|
|
371
419
|
<Card className="custom-card-DataManagement">
|
|
372
420
|
{tabPanel}
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
421
|
+
{viewMode === "table" && (
|
|
422
|
+
<>
|
|
423
|
+
<FilterGod tableName={tableName} filters={filters} elementSize={elementSize} setPage={setPage} />
|
|
424
|
+
{backParentNavigator}
|
|
425
|
+
{!isSmallScreen ? (
|
|
426
|
+
<DataTable
|
|
427
|
+
multipleActions={multipleActions}
|
|
428
|
+
page={page}
|
|
429
|
+
setPage={setPage}
|
|
430
|
+
disableEdit={disableEdit}
|
|
431
|
+
disableDelete={disableDelete}
|
|
432
|
+
/>
|
|
433
|
+
) : (
|
|
434
|
+
<DataTableSM
|
|
435
|
+
multipleActions={multipleActions}
|
|
436
|
+
page={page}
|
|
437
|
+
setPage={setPage}
|
|
438
|
+
disableEdit={disableEdit}
|
|
439
|
+
disableDelete={disableDelete}
|
|
440
|
+
/>
|
|
441
|
+
)}
|
|
442
|
+
</>
|
|
391
443
|
)}
|
|
444
|
+
{viewMode === "thongke" && thongKe}
|
|
445
|
+
|
|
446
|
+
{viewMode === "bieudo" && bieuDo}
|
|
392
447
|
</Card>
|
|
393
448
|
</FormProvider>
|
|
394
449
|
|
package/hooks/usePermission.js
CHANGED
|
@@ -11,7 +11,20 @@ const usePermission = (tableName) => {
|
|
|
11
11
|
}
|
|
12
12
|
const { permissionMap, setPermission } = context;
|
|
13
13
|
const permission = permissionMap[tableName];
|
|
14
|
-
const {
|
|
14
|
+
const {
|
|
15
|
+
canEdit,
|
|
16
|
+
canDelete,
|
|
17
|
+
canDeleteMulti,
|
|
18
|
+
canSave,
|
|
19
|
+
canCreate,
|
|
20
|
+
canAction,
|
|
21
|
+
canView,
|
|
22
|
+
canImport,
|
|
23
|
+
canExportWord,
|
|
24
|
+
canPayment,
|
|
25
|
+
canThongKe,
|
|
26
|
+
canBieuDo
|
|
27
|
+
} = useMemo(() => {
|
|
15
28
|
if (permission) {
|
|
16
29
|
if (permission.TrangThaiXuLy !== undefined && permission.ObjTrangThai) {
|
|
17
30
|
const status = permission.ObjTrangThai.find((t) => t.StatusId === permission.TrangThaiXuLy) || {};
|
|
@@ -24,7 +37,10 @@ const usePermission = (tableName) => {
|
|
|
24
37
|
canAction: status.Action ?? false,
|
|
25
38
|
canView: status.View ?? false,
|
|
26
39
|
canImport: status.ImportFile ?? false,
|
|
27
|
-
canExportWord: status.ExportWord ?? false
|
|
40
|
+
canExportWord: status.ExportWord ?? false,
|
|
41
|
+
canPayment: status.Payment ?? false,
|
|
42
|
+
canThongKe: status.ThongKe ?? false,
|
|
43
|
+
canBieuDo: status.BieuDo ?? false
|
|
28
44
|
};
|
|
29
45
|
} else {
|
|
30
46
|
return {
|
|
@@ -36,7 +52,10 @@ const usePermission = (tableName) => {
|
|
|
36
52
|
canAction: permission.Action ?? false,
|
|
37
53
|
canView: permission.View ?? false,
|
|
38
54
|
canImport: permission.ImportFile ?? false,
|
|
39
|
-
canExportWord: permission.ExportWord ?? false
|
|
55
|
+
canExportWord: permission.ExportWord ?? false,
|
|
56
|
+
canPayment: permission.Payment ?? false,
|
|
57
|
+
canThongKe: permission.ThongKe ?? false,
|
|
58
|
+
canBieuDo: permission.BieuDo ?? false
|
|
40
59
|
};
|
|
41
60
|
}
|
|
42
61
|
} else {
|
|
@@ -50,7 +69,10 @@ const usePermission = (tableName) => {
|
|
|
50
69
|
canAction: false,
|
|
51
70
|
canView: false,
|
|
52
71
|
canImport: false,
|
|
53
|
-
canExportWord: false
|
|
72
|
+
canExportWord: false,
|
|
73
|
+
canPayment: false,
|
|
74
|
+
canThongKe: false,
|
|
75
|
+
canBieuDo: false
|
|
54
76
|
};
|
|
55
77
|
}
|
|
56
78
|
}, [permission]);
|
|
@@ -70,7 +92,10 @@ const usePermission = (tableName) => {
|
|
|
70
92
|
canAction,
|
|
71
93
|
canView,
|
|
72
94
|
canImport,
|
|
73
|
-
canExportWord
|
|
95
|
+
canExportWord,
|
|
96
|
+
canPayment,
|
|
97
|
+
canThongKe,
|
|
98
|
+
canBieuDo
|
|
74
99
|
};
|
|
75
100
|
};
|
|
76
101
|
export default usePermission;
|