
--- client/resources/css/main.css
+++ client/resources/css/main.css
... | ... | @@ -16,13 +16,141 @@ |
16 | 16 |
.join-btn{ |
17 | 17 |
background-color: transparent; |
18 | 18 |
} |
19 |
-/* 카테고리 */ |
|
20 |
-.category{font-size: 1.6rem;} |
|
21 |
-.category-btn{padding: 0; border-radius: 0;} |
|
22 |
-.category ul{list-style: disc;} |
|
23 |
-.category > ul >li{list-style: circle; } |
|
24 |
-.category > ul > li > ul > li{list-style: circle; border: 1px solid red; } |
|
19 |
+.react-calendar{width: 90%; } |
|
20 |
+.highlight{ |
|
21 |
+ font-weight: 900; |
|
22 |
+ background-color: #18924e; |
|
23 |
+} |
|
24 |
+/* 카테고리 기관 추가*/ |
|
25 |
+/* hierarchy menu */ |
|
26 |
+.hierarchy-menu { |
|
27 |
+ background-color: #f8f8f8; |
|
28 |
+ color: #333333; |
|
29 |
+ overflow-y: auto; |
|
30 |
+} |
|
31 |
+.hierarchy-menu a { |
|
32 |
+ color: #333333; |
|
33 |
+ text-decoration: none; |
|
34 |
+} |
|
25 | 35 |
|
36 |
+.category a span{ |
|
37 |
+ font-size: 1.6rem; |
|
38 |
+ padding-left: 20px; |
|
39 |
+} |
|
40 |
+ |
|
41 |
+/* List */ |
|
42 |
+.hierarchy-menu ul { |
|
43 |
+ list-style: none; |
|
44 |
+ margin: 0; |
|
45 |
+ padding: 10px 0 0 0; |
|
46 |
+ position: relative; |
|
47 |
+} |
|
48 |
+.hierarchy-menu ul ul:before { |
|
49 |
+ content: ''; |
|
50 |
+ position: absolute; |
|
51 |
+ top: 0; |
|
52 |
+ bottom: 27px; |
|
53 |
+ left: 6px; |
|
54 |
+ border-left: 1px dashed #373E4B; |
|
55 |
+} |
|
56 |
+.hierarchy-menu > ul { |
|
57 |
+ padding: 15px 0 10px 25px; |
|
58 |
+} |
|
59 |
+.hierarchy-menu > ul ul { |
|
60 |
+ padding-left: 16px; |
|
61 |
+} |
|
62 |
+ |
|
63 |
+/* List items */ |
|
64 |
+.hierarchy-menu ul li { |
|
65 |
+ display: block; |
|
66 |
+ position: relative; |
|
67 |
+} |
|
68 |
+.hierarchy-menu > ul ul li:before { |
|
69 |
+ content: ''; |
|
70 |
+ display: block; |
|
71 |
+ height: 0px; |
|
72 |
+ width: 50px; |
|
73 |
+ border-bottom: 1px solid #7A7F87; |
|
74 |
+ position: absolute; |
|
75 |
+ left: -10px; |
|
76 |
+ top: 16px; |
|
77 |
+} |
|
78 |
+.hierarchy-menu > ul ul li:after { |
|
79 |
+ content: ''; |
|
80 |
+ display: block; |
|
81 |
+ height: 43px; |
|
82 |
+ width: 0; |
|
83 |
+ border-left: 1px solid #7A7F87; |
|
84 |
+ position: absolute; |
|
85 |
+ left: -10px; |
|
86 |
+ top: -27px; |
|
87 |
+} |
|
88 |
+.hierarchy-menu > ul ul li.group-lvl:before { |
|
89 |
+ width: 50px; |
|
90 |
+} |
|
91 |
+.hierarchy-menu > ul ul li:first-child:after { |
|
92 |
+ height: 28px; |
|
93 |
+ top: -12px; |
|
94 |
+} |
|
95 |
+ |
|
96 |
+/* Links */ |
|
97 |
+.category ul .max-agency{ |
|
98 |
+ margin-left: 0px; |
|
99 |
+ width: 50%; |
|
100 |
+} |
|
101 |
+.category ul .top-agency{ |
|
102 |
+ margin-left: 49px; |
|
103 |
+ width: 50%; |
|
104 |
+} |
|
105 |
+.category .low-agency{ |
|
106 |
+ margin-left: 87px; |
|
107 |
+} |
|
108 |
+.category .low-agency span{ |
|
109 |
+ padding-left: 49px; |
|
110 |
+} |
|
111 |
+.hierarchy-menu ul a { |
|
112 |
+ display: block; |
|
113 |
+ padding: 6px 0; |
|
114 |
+ height: 44px; |
|
115 |
+ position: relative; |
|
116 |
+ color: #333333; |
|
117 |
+ transition: 100ms; |
|
118 |
+} |
|
119 |
+.hierarchy-menu ul a:hover { |
|
120 |
+ color: #7e9d9c; |
|
121 |
+} |
|
122 |
+.hierarchy-menu ul a.active { |
|
123 |
+ color: #333333; |
|
124 |
+ font-weight: bold; |
|
125 |
+} |
|
126 |
+ |
|
127 |
+.category li.sub-nav > a:before { |
|
128 |
+ position: absolute; |
|
129 |
+ left: 0px; |
|
130 |
+ top: 14px; |
|
131 |
+ content: ''; |
|
132 |
+ width: 5px; |
|
133 |
+ height: 5px; |
|
134 |
+ border-bottom: 1px solid #333333; |
|
135 |
+ border-right: 1px solid #333333; |
|
136 |
+ -ms-transform: rotate(-45deg); |
|
137 |
+ -webkit-transform: rotate(-45deg); |
|
138 |
+ transform: rotate(-45deg); |
|
139 |
+} |
|
140 |
+.hierarchy-menu li.sub-nav.open > a:before { |
|
141 |
+ -ms-transform: rotate(45deg); |
|
142 |
+ -webkit-transform: rotate(45deg); |
|
143 |
+ transform: rotate(45deg); |
|
144 |
+} |
|
145 |
+.hierarchy-menu li.sub-nav.open > a { |
|
146 |
+ color: #333333; |
|
147 |
+} |
|
148 |
+.hierarchy-menu li.sub-nav > ul { |
|
149 |
+ display: block; |
|
150 |
+} |
|
151 |
+.hierarchy-menu li.sub-nav.open > ul { |
|
152 |
+ display: block; |
|
153 |
+} |
|
26 | 154 |
|
27 | 155 |
|
28 | 156 |
/* -----------------------------------------------지자체 */ |
+++ client/views/component/Calendar.jsx
... | ... | @@ -0,0 +1,34 @@ |
1 | +import React, { useState } from "react"; | |
2 | +import Calendar from "react-calendar"; | |
3 | +import "react-calendar/dist/Calendar.css"; | |
4 | +import moment from "moment"; | |
5 | + | |
6 | +export default function CalendarComponent(props) { | |
7 | + const [value, setValue] = useState(new Date()); | |
8 | + const mark = ["12-02-2023", "21-02-2023", "05-02-2023", "02-02-2023"]; | |
9 | + return ( | |
10 | + <div className="w-full h-full p-10"> | |
11 | + <Calendar | |
12 | + className="w-96 h-full rounded-xl bg-violet-300" | |
13 | + onChange={setValue} | |
14 | + value={value} | |
15 | + tileClassName={({ date, view }) => { | |
16 | + // if (mark.find((x) => x === moment(date).format("DD-MM-YYYY"))) { | |
17 | + // return "highlight"; | |
18 | + // } | |
19 | + let day = date.getDate() | |
20 | + let month = date.getMonth()+1 | |
21 | + if(date.getMonth()<10){ | |
22 | + month = '0'+day | |
23 | + } | |
24 | + const realDate =day+'-'+month+'-'+date.getFullYear() | |
25 | + if(mark.find(val=> val === realDate)){ | |
26 | + return 'highlight' | |
27 | + } | |
28 | + | |
29 | + }} | |
30 | + /> | |
31 | + </div> | |
32 | + ); | |
33 | +} | |
34 | + |
--- client/views/layout/Menu.jsx
+++ client/views/layout/Menu.jsx
... | ... | @@ -8,6 +8,7 @@ |
8 | 8 |
import SpeakerPhoneIcon from "@mui/icons-material/SpeakerPhone"; |
9 | 9 |
import SettingsIcon from "@mui/icons-material/Settings"; |
10 | 10 |
import CallIcon from '@mui/icons-material/Call'; |
11 |
+import ConstructionIcon from '@mui/icons-material/Construction'; |
|
11 | 12 |
|
12 | 13 |
export const items = [ |
13 | 14 |
{ |
... | ... | @@ -25,7 +26,7 @@ |
25 | 26 |
{ |
26 | 27 |
title: "장비 관리", |
27 | 28 |
icon: ( |
28 |
- <SpeakerPhoneIcon |
|
29 |
+ <SettingsIcon |
|
29 | 30 |
sx={{ fontSize: 20, color: "#ffffff", marginRight: 1 }} |
30 | 31 |
/> |
31 | 32 |
), |
... | ... | @@ -46,7 +47,7 @@ |
46 | 47 |
}, |
47 | 48 |
{ |
48 | 49 |
title: "문의게시판", |
49 |
- path: "/EquipmentManagementSelectReturn", |
|
50 |
+ path: "/QandA", |
|
50 | 51 |
icon: ( |
51 | 52 |
<SpeakerPhoneIcon |
52 | 53 |
sx={{ fontSize: 20, color: "#ffffff", marginRight: 1 }} |
--- client/views/pages/App.jsx
+++ client/views/pages/App.jsx
... | ... | @@ -22,7 +22,7 @@ |
22 | 22 |
|
23 | 23 |
const getLogin = () => { |
24 | 24 |
setIsLogin(true); |
25 |
- navigate(""); |
|
25 |
+ navigate("/Main"); |
|
26 | 26 |
}; |
27 | 27 |
|
28 | 28 |
const { title } = items.find( |
--- client/views/pages/AppRoute.jsx
+++ client/views/pages/AppRoute.jsx
... | ... | @@ -33,6 +33,7 @@ |
33 | 33 |
import EquipmentManagementSelectAdd from "./equipment/EquipmentManagementSelectAdd.jsx"; |
34 | 34 |
import RiskInsert from "./authority/RiskInsert.jsx"; |
35 | 35 |
import AuthorityManagement from "./authority/AuthorityManagement.jsx"; |
36 |
+import QandA from "./authority/QandA.jsx"; |
|
36 | 37 |
|
37 | 38 |
function AppRoute() { |
38 | 39 |
return ( |
... | ... | @@ -90,6 +91,7 @@ |
90 | 91 |
<Route path="/EquipmentManagementSelectAdd" element={<EquipmentManagementSelectAdd />}></Route> |
91 | 92 |
<Route path="/RiskInsert" element={<RiskInsert />}></Route> |
92 | 93 |
<Route path="/AuthorityManagement" element={<AuthorityManagement />}></Route> |
94 |
+ <Route path="/QandA" element={<QandA />}></Route> |
|
93 | 95 |
</Routes> |
94 | 96 |
); |
95 | 97 |
} |
--- client/views/pages/equipment/EquipmentManagementSelect.jsx
+++ client/views/pages/equipment/EquipmentManagementSelect.jsx
... | ... | @@ -8,6 +8,7 @@ |
8 | 8 |
|
9 | 9 |
|
10 | 10 |
export default function EquipmentManagementSelect() { |
11 |
+ |
|
11 | 12 |
const [modalOpen, setModalOpen] = React.useState(false); |
12 | 13 |
const openModal = () => { |
13 | 14 |
setModalOpen(true); |
... | ... | @@ -54,7 +55,6 @@ |
54 | 55 |
"장비명", |
55 | 56 |
"시리얼 넘버", |
56 | 57 |
"입고일자", |
57 |
- "사용여부", |
|
58 | 58 |
"납품 기관", |
59 | 59 |
]; |
60 | 60 |
const key3= [ |
... | ... | @@ -62,7 +62,6 @@ |
62 | 62 |
"equipment_name", |
63 | 63 |
"serialNumber", |
64 | 64 |
"name", |
65 |
- "use", |
|
66 | 65 |
"management",]; |
67 | 66 |
const content3 = [ |
68 | 67 |
{ |
... | ... | @@ -70,7 +69,6 @@ |
70 | 69 |
equipment_name: "스마트약상자", |
71 | 70 |
serialNumber: "ABCD-1", |
72 | 71 |
name: "2022.12.02", |
73 |
- use: "사용", |
|
74 | 72 |
management: ( |
75 | 73 |
<Button |
76 | 74 |
className={"btn-small gray-btn"} |
... | ... | @@ -84,7 +82,6 @@ |
84 | 82 |
equipment_name: "스마트약상자", |
85 | 83 |
serialNumber: "ABCD-1", |
86 | 84 |
name: "2022.12.02", |
87 |
- use: "미사용", |
|
88 | 85 |
management: (<Button |
89 | 86 |
className={"btn-small gray-btn"} |
90 | 87 |
btnName={"선택"} |
--- client/views/pages/equipment/EquipmentManagementSelectAdd.jsx
+++ client/views/pages/equipment/EquipmentManagementSelectAdd.jsx
... | ... | @@ -6,6 +6,13 @@ |
6 | 6 |
import ContentTitle from "../../component/ContentTitle.jsx"; |
7 | 7 |
|
8 | 8 |
export default function EquipmentManagementSelectAdd() { |
9 |
+ const [modalOpen, setModalOpen] = React.useState(false); |
|
10 |
+ const openModal = () => { |
|
11 |
+ setModalOpen(true); |
|
12 |
+ }; |
|
13 |
+ const closeModal = () => { |
|
14 |
+ setModalOpen(false); |
|
15 |
+ }; |
|
9 | 16 |
const navigate = useNavigate(); |
10 | 17 |
//게시판 |
11 | 18 |
const thead = [ |
... | ... | @@ -13,6 +20,7 @@ |
13 | 20 |
"기관명", |
14 | 21 |
"요청일자", |
15 | 22 |
"요청수량", |
23 |
+ "사용자(사용등록번호)", |
|
16 | 24 |
"처리여부", |
17 | 25 |
]; |
18 | 26 |
const key = [ |
... | ... | @@ -20,6 +28,7 @@ |
20 | 28 |
"name", |
21 | 29 |
"date", |
22 | 30 |
"period_of_use", |
31 |
+ "address", |
|
23 | 32 |
"visit", |
24 | 33 |
]; |
25 | 34 |
const content = [ |
... | ... | @@ -27,14 +36,14 @@ |
27 | 36 |
No: 1, |
28 | 37 |
name: "A복지관", |
29 | 38 |
date: "2023-01-27", |
30 |
- period_of_use: "1대", |
|
39 |
+ period_of_use: "2대", |
|
40 |
+ address: "김복남(2022020901) / 김삼남(2022020801)", |
|
31 | 41 |
visit:( |
32 | 42 |
<div className="btn-wrap"> |
33 | 43 |
<Button |
34 | 44 |
className={"btn-small green-btn"} |
35 | 45 |
btnName={"승인"} |
36 | 46 |
/> |
37 |
- <Button className={"btn-small green-btn"} btnName={"보류"} /> |
|
38 | 47 |
</div> |
39 | 48 |
), |
40 | 49 |
}, |
... | ... | @@ -42,20 +51,21 @@ |
42 | 51 |
No: 2, |
43 | 52 |
name: "B복지관", |
44 | 53 |
date: "2023-01-27", |
45 |
- period_of_use: "2대", |
|
54 |
+ period_of_use: "1대", |
|
55 |
+ address: "김사남(2023020102)", |
|
46 | 56 |
visit:( |
47 | 57 |
<div className="btn-wrap"> |
48 | 58 |
<Button |
49 | 59 |
className={"btn-small green-btn"} |
50 | 60 |
btnName={"승인"} |
51 | 61 |
/> |
52 |
- <Button className={"btn-small green-btn"} btnName={"보류"} /> |
|
53 | 62 |
</div> |
54 | 63 |
), |
55 | 64 |
}, |
56 | 65 |
]; |
57 | 66 |
return ( |
58 | 67 |
<main> |
68 |
+ |
|
59 | 69 |
<div className="content-wrap"> |
60 | 70 |
<ContentTitle contentTitle={"장비 추가 요청"} /> |
61 | 71 |
<div className="board-wrap"> |
--- client/views/pages/main/Main2.jsx
+++ client/views/pages/main/Main2.jsx
... | ... | @@ -4,6 +4,7 @@ |
4 | 4 |
import Map from "../../component/chart/Map.jsx"; |
5 | 5 |
import Chart1 from "../../component/chart/Chart1.jsx"; |
6 | 6 |
import Chart2 from "../../component/chart/Chart2.jsx"; |
7 |
+import Calendar from "../../component/Calendar.jsx"; |
|
7 | 8 |
import AddCircleIcon from '@mui/icons-material/AddCircle'; |
8 | 9 |
import PersonIcon from '@mui/icons-material/Person'; |
9 | 10 |
|
... | ... | @@ -139,11 +140,15 @@ |
139 | 140 |
<Title title={"금일 반납/교환 예정 리스트"} explanation={"장비 반납/교환 리스트를 확인하세요."} /> |
140 | 141 |
<AddCircleIcon sx={{ fontSize: 20, color: "#1976d2" }} /> |
141 | 142 |
</div> |
142 |
- <Table head={tableHead} contents={content} contentKey={Key} /> |
|
143 |
+ <div className="flex" > |
|
144 |
+ <div style={{ width:"50%" }}><Calendar /></div> |
|
145 |
+ <div style={{ width:"50%" }}><Table head={tableHead} contents={content} contentKey={Key} /></div> |
|
146 |
+ </div> |
|
147 |
+ |
|
143 | 148 |
</div> |
144 | 149 |
<div className="content-box combine-left"> |
145 | 150 |
<div className="flex margin-bottom"> |
146 |
- <Title title={"금주 반납/교환 예정 리스트"} explanation={"장비 반납/교환 리스트를 확인하세요."} /> |
|
151 |
+ <Title title={"약상자 추가 예정 리스트"} explanation={"장비 반납/교환 리스트를 확인하세요."} /> |
|
147 | 152 |
<AddCircleIcon sx={{ fontSize: 20, color: "#1976d2" }} /> |
148 | 153 |
</div> |
149 | 154 |
<Table head={tableHead2} contents={content2} contentKey={Key2} /> |
Add a comment
Delete comment
Once you delete this comment, you won't be able to recover it. Are you sure you want to delete this comment?