
--- Global.js
+++ Global.js
... | ... | @@ -4,6 +4,7 @@ |
4 | 4 |
const LOG_BASE_DIR = `${__dirname}/server/logs`; |
5 | 5 |
const SERVICE_STATUS = process.env.NODE_ENV;//development, production |
6 | 6 |
const PORT = 80; |
7 |
+const SYSTEM_VIEW_TYPE = 'admin';//admin, government, agency, guardian |
|
7 | 8 |
|
8 | 9 |
module.exports = { |
9 | 10 |
PROJECT_NAME, |
--- client/resources/css/common.css
+++ client/resources/css/common.css
... | ... | @@ -301,4 +301,8 @@ |
301 | 301 |
hr { |
302 | 302 |
border-top: 1px solid #d1e4e3; |
303 | 303 |
margin-top: 2rem |
304 |
-}(No newline at end of file) |
|
304 |
+} |
|
305 |
+ |
|
306 |
+/* 컬러 */ |
|
307 |
+.yellow{background: #f2db71;} |
|
308 |
+.sky{background-color: #d1e4e3;} |
--- client/resources/css/main.css
+++ client/resources/css/main.css
... | ... | @@ -822,8 +822,7 @@ |
822 | 822 |
} |
823 | 823 |
|
824 | 824 |
.tab-menu li { |
825 |
- width: 200px; |
|
826 |
- padding: 1rem; |
|
825 |
+ padding: 1rem 2rem; |
|
827 | 826 |
background-color: #f8f8f8; |
828 | 827 |
border-radius: 0.5rem 0.5rem 0 0; |
829 | 828 |
font-size: 1.6rem; |
--- client/resources/css/reset.css
+++ client/resources/css/reset.css
... | ... | @@ -31,12 +31,13 @@ |
31 | 31 |
vertical-align: top; |
32 | 32 |
} |
33 | 33 |
|
34 |
+.th{border: 1px solid #e4dccf;} |
|
35 |
+.td{border: 1px solid #e4dccf;} |
|
34 | 36 |
table { |
35 | 37 |
width: 100%; |
36 | 38 |
border-collapse: collapse; |
37 |
- border-bottom: 1px solid #e4dccf; |
|
39 |
+ border: 1px solid #e4dccf; |
|
38 | 40 |
} |
39 |
- |
|
40 | 41 |
th{ |
41 | 42 |
padding: 0.5rem; |
42 | 43 |
font-weight: bold; |
... | ... | @@ -46,11 +47,10 @@ |
46 | 47 |
} |
47 | 48 |
|
48 | 49 |
td { |
49 |
- padding: 1rem; |
|
50 |
+ padding: 0.5rem; |
|
50 | 51 |
color: #333333; |
51 | 52 |
font-size: 1.6rem; |
52 | 53 |
text-align: center; |
53 |
- border-top: 1px solid #ececec; |
|
54 | 54 |
} |
55 | 55 |
tr{cursor: pointer;} |
56 | 56 |
|
+++ client/views/component/AgencySearch.jsx
... | ... | @@ -0,0 +1,221 @@ |
1 | +import { style } from "d3"; | |
2 | +import React, { useState } from "react"; | |
3 | + | |
4 | +import Button from "./Button.jsx"; | |
5 | + | |
6 | +const CATEGORY_LIST = [ | |
7 | + { id: 0, data: "서울" }, | |
8 | + { id: 1, data: "인천" }, | |
9 | + { id: 2, data: "경기" }, | |
10 | + { id: 3, data: "경북" }, | |
11 | + { id: 4, data: "경남" }, | |
12 | + { id: 5, data: "전북" }, | |
13 | + { id: 6, data: "전남" }, | |
14 | + { id: 7, data: "제주" }, | |
15 | +]; | |
16 | +const CATEGORY_LIST1 = [ | |
17 | + { id: 0, data: "전체" }, | |
18 | + { id: 0, data: "광현리" }, | |
19 | + { id: 1, data: "금구리" }, | |
20 | + { id: 2, data: "내량리" }, | |
21 | + { id: 3, data: "대북리" }, | |
22 | + { id: 4, data: "대흥리" }, | |
23 | + { id: 5, data: "동부리" }, | |
24 | + { id: 6, data: "무성리" }, | |
25 | + { id: 7, data: "사직리" }, | |
26 | + { id: 8, data: "삽령리" }, | |
27 | + { id: 9, data: "상곡리" }, | |
28 | + { id: 10, data: "서부리" }, | |
29 | + { id: 11, data: "수서리" }, | |
30 | + { id: 12, data: "오곡리" }, | |
31 | + { id: 13, data: "외량리" }, | |
32 | + { id: 14, data: "용대리" }, | |
33 | + { id: 15, data: "정리" }, | |
34 | + { id: 15, data: "하곡리" }, | |
35 | +]; | |
36 | +const CATEGORY_LIST2 = [ | |
37 | + { id: 0, data: "전체" }, | |
38 | + { id: 0, data: "사리리" }, | |
39 | + { id: 1, data: "보현리" }, | |
40 | + { id: 2, data: "복성리" }, | |
41 | + { id: 3, data: "위성리" }, | |
42 | + { id: 4, data: "달산리" }, | |
43 | + { id: 5, data: "송원리" }, | |
44 | + { id: 6, data: "신계리" }, | |
45 | + { id: 7, data: "도산리" }, | |
46 | + { id: 8, data: "서경리" }, | |
47 | + { id: 9, data: "평호리" }, | |
48 | + { id: 10, data: "산법리" }, | |
49 | + { id: 11, data: "내의리" }, | |
50 | + { id: 12, data: "봉황리" }, | |
51 | + { id: 13, data: "봉소리" }, | |
52 | +]; | |
53 | +const CATEGORY_LIST3 = [ | |
54 | + { id: 0, data: "전체" }, | |
55 | + { id: 0, data: "노행리" }, | |
56 | + { id: 1, data: "오천리" }, | |
57 | + { id: 2, data: "성리" }, | |
58 | + { id: 3, data: "병수리" }, | |
59 | + { id: 4, data: "불로리" }, | |
60 | + { id: 5, data: "내리리" }, | |
61 | + { id: 6, data: "중구리" }, | |
62 | + { id: 7, data: "거매리" }, | |
63 | + { id: 8, data: "장군리" }, | |
64 | + { id: 9, data: "장기리" }, | |
65 | + { id: 10, data: "금매리" }, | |
66 | + { id: 11, data: "화계리" }, | |
67 | + { id: 12, data: "마시리" }, | |
68 | + { id: 13, data: "매곡리" }, | |
69 | + { id: 14, data: "고곡리" }, | |
70 | +]; | |
71 | +const CATEGORY_LIST4 = [ | |
72 | + { id: 0, data: "전체" }, | |
73 | + { id: 0, data: "창평리" }, | |
74 | + { id: 1, data: "가호리" }, | |
75 | + { id: 2, data: "춘산리" }, | |
76 | + { id: 3, data: "대율리" }, | |
77 | + { id: 4, data: "동산리" }, | |
78 | + { id: 5, data: "남산리" }, | |
79 | + { id: 6, data: "명산리" }, | |
80 | + { id: 7, data: "신화리" }, | |
81 | +]; | |
82 | + | |
83 | +const CATEGORY_LIST5 = [ | |
84 | + { id: 0, data: "전체" }, | |
85 | + { id: 0, data: "나호리" }, | |
86 | + { id: 1, data: "이화리" }, | |
87 | + { id: 2, data: "두북리" }, | |
88 | + { id: 3, data: "선곡리" }, | |
89 | + { id: 4, data: "미성리" }, | |
90 | + { id: 5, data: "모산리" }, | |
91 | + { id: 6, data: "문덕리" }, | |
92 | + { id: 7, data: "달산리" }, | |
93 | + { id: 8, data: "봉산리" }, | |
94 | +]; | |
95 | + | |
96 | +const CATEGORY_LIST6 = [ | |
97 | + { id: 0, data: "전체" }, | |
98 | + { id: 0, data: "읍내리" }, | |
99 | + { id: 1, data: "수북리" }, | |
100 | + { id: 2, data: "수서리" }, | |
101 | + { id: 3, data: "이지리" }, | |
102 | + { id: 4, data: "파전리" }, | |
103 | + { id: 5, data: "신덕리" }, | |
104 | + { id: 6, data: "지호리" }, | |
105 | + { id: 7, data: "연계리" }, | |
106 | + { id: 8, data: "매성리" }, | |
107 | + { id: 9, data: "원산리" }, | |
108 | + { id: 10, data: "금양리" }, | |
109 | +]; | |
110 | +const CATEGORY_LIST7 = [ | |
111 | + { id: 0, data: "전체" }, | |
112 | + { id: 0, data: "백학리" }, | |
113 | + { id: 1, data: "삼산리" }, | |
114 | + { id: 2, data: "봉림리" }, | |
115 | + { id: 3, data: "무암리" }, | |
116 | + { id: 4, data: "운산리" }, | |
117 | + { id: 5, data: "화본리" }, | |
118 | + { id: 6, data: "화전리" }, | |
119 | +]; | |
120 | + | |
121 | +const CATEGORY_LIST8 = [ | |
122 | + { id: 0, data: "전체" }, | |
123 | + { id: 0, data: "화수리" }, | |
124 | + { id: 1, data: "화북리" }, | |
125 | + { id: 2, data: "괴산리" }, | |
126 | + { id: 3, data: "학성리" }, | |
127 | + { id: 4, data: "장곡리" }, | |
128 | + { id: 5, data: "인곡리" }, | |
129 | + { id: 6, data: "양지리" }, | |
130 | + { id: 7, data: "낙전리" }, | |
131 | + { id: 8, data: "가암리" }, | |
132 | + { id: 9, data: "석산리" }, | |
133 | + { id: 10, data: "학암리" }, | |
134 | +]; | |
135 | + | |
136 | +const locations = [ | |
137 | + { | |
138 | + id: "no1", | |
139 | + label: "군위읍", | |
140 | + list: CATEGORY_LIST1, | |
141 | + }, | |
142 | + { | |
143 | + id: "no2", | |
144 | + label: "소보면", | |
145 | + list: CATEGORY_LIST2, | |
146 | + }, | |
147 | +]; | |
148 | + | |
149 | +export default function DetailSearch({}) { | |
150 | + const [checkedList, setCheckedList] = useState([]); | |
151 | + const [selectArea, setSelectArea] = React.useState(); | |
152 | + | |
153 | + const onCheckedElement = (checked, item) => { | |
154 | + if (checked) { | |
155 | + setCheckedList([...checkedList, item]); | |
156 | + } else if (!checked) { | |
157 | + setCheckedList(checkedList.filter((el) => el !== item)); | |
158 | + } | |
159 | + }; | |
160 | + | |
161 | + const onRemove = (item) => { | |
162 | + setCheckedList(checkedList.filter((el) => el !== item)); | |
163 | + }; | |
164 | + | |
165 | + const categories = locations.map((location) => ( | |
166 | + <li> | |
167 | + <label htmlFor={location.id}>{location.label}</label> | |
168 | + <input type="radio" name="location" id={location.id} /> | |
169 | + <div className="area-list flex"> | |
170 | + <ul className="flex"> | |
171 | + {location.list.map((item) => ( | |
172 | + <li className="flex-start"> | |
173 | + <input | |
174 | + type="checkbox" | |
175 | + className="checkCon" | |
176 | + id={item.id} | |
177 | + value={item.data} | |
178 | + onChange={(e) => { | |
179 | + onCheckedElement(e.target.checked, e.target.value); | |
180 | + }} | |
181 | + checked={checkedList.includes(item.data) ? true : false} | |
182 | + /> | |
183 | + <label htmlFor={item.id}>{item.data}</label> | |
184 | + </li> | |
185 | + ))} | |
186 | + </ul> | |
187 | + </div> | |
188 | + </li> | |
189 | + )); | |
190 | + | |
191 | + return ( | |
192 | + <div className="search-group"> | |
193 | + <div className="search-area flex"> | |
194 | + <div className="detail-search" style={{padding:"0 5rem", width:"100%"}}> | |
195 | + <table> | |
196 | + <tbody> | |
197 | + <tr> | |
198 | + <th>기관명 검색</th> | |
199 | + <td colSpan={3}> | |
200 | + <div className="flex"> | |
201 | + <select name="" id=""> | |
202 | + <option value="">전체</option> | |
203 | + <option value="">복지관1</option> | |
204 | + <option value="">복지관2</option> | |
205 | + <option value="">병원1</option> | |
206 | + <option value="">병원2</option> | |
207 | + </select> | |
208 | + <input type="text" /> | |
209 | + </div> | |
210 | + </td> | |
211 | + </tr> | |
212 | + </tbody> | |
213 | + </table> | |
214 | + </div> | |
215 | + <div className="btn-box flex-center"> | |
216 | + <Button className={"btn-large green-btn"} btnName={"조회"} /> | |
217 | + </div> | |
218 | + </div> | |
219 | + </div> | |
220 | + ); | |
221 | +} |
+++ client/views/component/Calendar_agency.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/component/chart/Chart2_agency.jsx
... | ... | @@ -0,0 +1,233 @@ |
1 | +import React, { Component } from "react"; | |
2 | +import * as am5 from "@amcharts/amcharts5"; | |
3 | +import * as am5xy from "@amcharts/amcharts5/xy"; | |
4 | +import am5themes_Animated from "@amcharts/amcharts5/themes/Animated"; | |
5 | + | |
6 | +class Chart2_1 extends Component { | |
7 | + componentDidMount() { | |
8 | + let root = am5.Root.new("Chart2_1"); | |
9 | + | |
10 | + root._logo.dispose(); | |
11 | + // Set themes | |
12 | +// https://www.amcharts.com/docs/v5/concepts/themes/ | |
13 | +root.setThemes([ | |
14 | + am5themes_Animated.new(root) | |
15 | +]); | |
16 | + | |
17 | + | |
18 | +// Create chart | |
19 | +// https://www.amcharts.com/docs/v5/charts/xy-chart/ | |
20 | +let chart = root.container.children.push(am5xy.XYChart.new(root, { | |
21 | + panX: true, | |
22 | + panY: true, | |
23 | + wheelX: "panX", | |
24 | + wheelY: "zoomX", | |
25 | + pinchZoomX:true | |
26 | +})); | |
27 | + | |
28 | + | |
29 | +// Add cursor | |
30 | +// https://www.amcharts.com/docs/v5/charts/xy-chart/cursor/ | |
31 | +let cursor = chart.set("cursor", am5xy.XYCursor.new(root, { | |
32 | + behavior: "none" | |
33 | +})); | |
34 | +cursor.lineY.set("visible", false); | |
35 | + | |
36 | + | |
37 | +// The data | |
38 | +let data = [{ | |
39 | + "year": "1월", | |
40 | + "아침": 100, | |
41 | + "점심": 20, | |
42 | + "저녁": 18 | |
43 | +}, { | |
44 | + "year": "2월", | |
45 | + "아침": 13, | |
46 | + "점심": 83, | |
47 | + "저녁": 46 | |
48 | +}, { | |
49 | + "year": "3월", | |
50 | + "아침": 17, | |
51 | + "점심": 91, | |
52 | + "저녁": 13 | |
53 | +}, { | |
54 | + "year": "4월", | |
55 | + "아침": 130, | |
56 | + "점심": 64, | |
57 | + "저녁": 17 | |
58 | +}, { | |
59 | + "year": "5월", | |
60 | + "아침": 160, | |
61 | + "점심": 69, | |
62 | + "저녁": 15 | |
63 | +}, { | |
64 | + "year": "6월", | |
65 | + "아침": 183, | |
66 | + "점심": 21, | |
67 | + "저녁": 19 | |
68 | +}, { | |
69 | + "year": "7월", | |
70 | + "아침": 161, | |
71 | + "점심": 77, | |
72 | + "저녁": 12 | |
73 | +}, { | |
74 | + "year": "8월", | |
75 | + "아침": 28, | |
76 | + "점심": 60, | |
77 | + "저녁": 11 | |
78 | +}, { | |
79 | + "year": "9월", | |
80 | + "아침": 75, | |
81 | + "점심": 64, | |
82 | + "저녁": 7 | |
83 | +}, { | |
84 | + "year": "10월", | |
85 | + "아침": 12, | |
86 | + "점심": 64, | |
87 | + "저녁": 93 | |
88 | +}, { | |
89 | + "year": "11월", | |
90 | + "아침": 18, | |
91 | + "점심": 67, | |
92 | + "저녁": 11 | |
93 | +}, { | |
94 | + "year": "12월", | |
95 | + "아침": 13, | |
96 | + "점심": 63, | |
97 | + "저녁": 87 | |
98 | +}]; | |
99 | + | |
100 | + | |
101 | +// Create axes | |
102 | +// https://www.amcharts.com/docs/v5/charts/xy-chart/axes/ | |
103 | +let xAxis = chart.xAxes.push(am5xy.CategoryAxis.new(root, { | |
104 | + categoryField: "year", | |
105 | + startLocation: 0.5, | |
106 | + endLocation: 0.5, | |
107 | + renderer: am5xy.AxisRendererX.new(root, {}), | |
108 | + tooltip: am5.Tooltip.new(root, {}) | |
109 | +})); | |
110 | + | |
111 | +xAxis.data.setAll(data); | |
112 | + | |
113 | +let yAxis = chart.yAxes.push(am5xy.ValueAxis.new(root, { | |
114 | + renderer: am5xy.AxisRendererY.new(root, {}) | |
115 | +})); | |
116 | + | |
117 | +// Add series | |
118 | +// https://www.amcharts.com/docs/v5/charts/xy-chart/series/ | |
119 | + | |
120 | +function createSeries(name, field) { | |
121 | + let series = chart.series.push(am5xy.LineSeries.new(root, { | |
122 | + name: name, | |
123 | + xAxis: xAxis, | |
124 | + yAxis: yAxis, | |
125 | + stacked:true, | |
126 | + valueYField: field, | |
127 | + categoryXField: "year", | |
128 | + tooltip: am5.Tooltip.new(root, { | |
129 | + pointerOrientation: "horizontal", | |
130 | + labelText: "[bold]{name}[/]\n{categoryX}: {valueY}" | |
131 | + }) | |
132 | + })); | |
133 | + | |
134 | + series.fills.template.setAll({ | |
135 | + fillOpacity: 0.5, | |
136 | + visible: true | |
137 | + }); | |
138 | + | |
139 | + series.data.setAll(data); | |
140 | + series.appear(1000); | |
141 | +} | |
142 | + | |
143 | +createSeries("아침", "아침"); | |
144 | +createSeries("점심", "점심"); | |
145 | +createSeries("저녁", "저녁"); | |
146 | + | |
147 | +// Add scrollbar | |
148 | +// https://www.amcharts.com/docs/v5/charts/xy-chart/scrollbars/ | |
149 | +// chart.set("scrollbarX", am5.Scrollbar.new(root, { | |
150 | +// orientation: "horizontal" | |
151 | +// })); | |
152 | + | |
153 | +// Create axis ranges | |
154 | +// https://www.amcharts.com/docs/v5/charts/xy-chart/axes/axis-ranges/ | |
155 | +let rangeDataItem = xAxis.makeDataItem({ | |
156 | + category: "1월", | |
157 | + endCategory: "12월" | |
158 | +}); | |
159 | + | |
160 | +let range = xAxis.createAxisRange(rangeDataItem); | |
161 | + | |
162 | +rangeDataItem.get("grid").setAll({ | |
163 | + stroke: am5.color(0x00ff33), | |
164 | + strokeOpacity: 0.5, | |
165 | + strokeDasharray: [3] | |
166 | +}); | |
167 | + | |
168 | +rangeDataItem.get("axisFill").setAll({ | |
169 | + fill: am5.color(0x00ff33), | |
170 | + fillOpacity: 0.1, | |
171 | + visible:true | |
172 | +}); | |
173 | + | |
174 | +// rangeDataItem.get("label").setAll({ | |
175 | +// inside: true, | |
176 | +// text: "Fines for speeding increased", | |
177 | +// rotation: 90, | |
178 | +// centerX: am5.p100, | |
179 | +// centerY: am5.p100, | |
180 | +// location: 0, | |
181 | +// paddingBottom: 10, | |
182 | +// paddingRight: 15 | |
183 | +// }); | |
184 | + | |
185 | + | |
186 | +let rangeDataItem2 = xAxis.makeDataItem({ | |
187 | + category: "1월" | |
188 | +}); | |
189 | + | |
190 | +let range2 = xAxis.createAxisRange(rangeDataItem2); | |
191 | + | |
192 | +rangeDataItem2.get("grid").setAll({ | |
193 | + stroke: am5.color(0x00ff33), | |
194 | + strokeOpacity: 1, | |
195 | + strokeDasharray: [3] | |
196 | +}); | |
197 | + | |
198 | +rangeDataItem2.get("axisFill").setAll({ | |
199 | + fill: am5.color(0x00ff33), | |
200 | + fillOpacity: 0.1, | |
201 | + visible:true | |
202 | +}); | |
203 | + | |
204 | +// rangeDataItem2.get("label").setAll({ | |
205 | +// inside: true, | |
206 | +// text: "Motorcycle fee introduced", | |
207 | +// rotation: 90, | |
208 | +// centerX: am5.p100, | |
209 | +// centerY: am5.p100, | |
210 | +// location: 0, | |
211 | +// paddingBottom: 10, | |
212 | +// paddingRight: 15 | |
213 | +// }); | |
214 | + | |
215 | +// Make stuff animate on load | |
216 | +// https://www.amcharts.com/docs/v5/concepts/animations/ | |
217 | +chart.appear(1000, 100); | |
218 | + | |
219 | + this.root = root; | |
220 | + } | |
221 | + | |
222 | + componentWillUnmount() { | |
223 | + if (this.root) { | |
224 | + this.root.dispose(); | |
225 | + } | |
226 | + } | |
227 | + | |
228 | + render() { | |
229 | + return <div id="Chart2_1" style={{ width: "100%", height: "15vh" }}></div>; | |
230 | + } | |
231 | +} | |
232 | + | |
233 | +export default Chart2_1; |
+++ client/views/component/chart/Chart4.jsx
... | ... | @@ -0,0 +1,76 @@ |
1 | +import React, { Component } from "react"; | |
2 | +import * as am5 from "@amcharts/amcharts5"; | |
3 | +import * as am5percent from "@amcharts/amcharts5/percent"; | |
4 | +import am5themes_Animated from "@amcharts/amcharts5/themes/Animated"; | |
5 | + | |
6 | +class Chart4 extends Component { | |
7 | + componentDidMount() { | |
8 | + let root = am5.Root.new("Chart4"); | |
9 | + | |
10 | + root._logo.dispose(); | |
11 | + root.setThemes([am5themes_Animated.new(root)]); | |
12 | + | |
13 | + // Create chart | |
14 | + // https://www.amcharts.com/docs/v5/charts/percent-charts/sliced-chart/ | |
15 | + let chart = root.container.children.push(am5percent.SlicedChart.new(root, { | |
16 | + layout: root.verticalLayout | |
17 | + })); | |
18 | + | |
19 | + | |
20 | + // Create series | |
21 | + // https://www.amcharts.com/docs/v5/charts/percent-charts/sliced-chart/#Series | |
22 | + let series = chart.series.push(am5percent.PyramidSeries.new(root, { | |
23 | + orientation: "vertical", | |
24 | + valueField: "value", | |
25 | + categoryField: "category" | |
26 | + })); | |
27 | + | |
28 | + | |
29 | + // Set data | |
30 | + // https://www.amcharts.com/docs/v5/charts/percent-charts/sliced-chart/#Setting_data | |
31 | + series.data.setAll([ | |
32 | + { value: 10, category: "부계면" }, | |
33 | + { value: 9, category: "소보면" }, | |
34 | + { value: 6, category: "군위읍" }, | |
35 | + { value: 5, category: "우보면" }, | |
36 | + { value: 4, category: "의흥면" }, | |
37 | + { value: 3, category: "삼국유사면" }, | |
38 | + { value: 3, category: "산성면" }, | |
39 | + { value: 2, category: "효령면" } | |
40 | + ].reverse()); | |
41 | + | |
42 | + | |
43 | + // Play initial series animation | |
44 | + // https://www.amcharts.com/docs/v5/concepts/animations/#Animation_of_series | |
45 | + series.appear(); | |
46 | + | |
47 | + | |
48 | + // Create legend | |
49 | + // https://www.amcharts.com/docs/v5/charts/percent-charts/legend-percent-series/ | |
50 | + let legend = chart.children.push(am5.Legend.new(root, { | |
51 | + centerX: am5.percent(50), | |
52 | + x: am5.percent(50), | |
53 | + marginTop: 15, | |
54 | + marginBottom: 15 | |
55 | + })); | |
56 | + | |
57 | + legend.data.setAll(am5.array.copy(series.dataItems).reverse()); | |
58 | + | |
59 | + | |
60 | + // Make stuff animate on load | |
61 | + // https://www.amcharts.com/docs/v5/concepts/animations/ | |
62 | + chart.appear(1000, 100); | |
63 | + | |
64 | + this.root = root; | |
65 | + } | |
66 | + componentWillUnmount() { | |
67 | + if (this.root) { | |
68 | + this.root.dispose(); | |
69 | + } | |
70 | + } | |
71 | + render() { | |
72 | + return <div id="Chart4" style={{ width: "100%", height: "80%" }}></div> | |
73 | + } | |
74 | +} | |
75 | + | |
76 | +export default Chart4; |
+++ client/views/component/chart/Chart5.jsx
... | ... | @@ -0,0 +1,66 @@ |
1 | +import React, { Component } from "react"; | |
2 | +import * as am5 from "@amcharts/amcharts5"; | |
3 | +import * as am5percent from "@amcharts/amcharts5/percent"; | |
4 | +import am5themes_Animated from "@amcharts/amcharts5/themes/Animated"; | |
5 | + | |
6 | +class Chart5 extends Component { | |
7 | + componentDidMount() { | |
8 | + let root = am5.Root.new("Chart5"); | |
9 | + | |
10 | + | |
11 | +// Set themes | |
12 | +// https://www.amcharts.com/docs/v5/concepts/themes/ | |
13 | +root.setThemes([ | |
14 | + am5themes_Animated.new(root) | |
15 | +]); | |
16 | + | |
17 | + | |
18 | +// Create chart | |
19 | +// https://www.amcharts.com/docs/v5/charts/percent-charts/sliced-chart/ | |
20 | +let chart = root.container.children.push(am5percent.SlicedChart.new(root, { | |
21 | + layout: root.verticalLayout | |
22 | +})); | |
23 | + | |
24 | + | |
25 | +// Create series | |
26 | +// https://www.amcharts.com/docs/v5/charts/percent-charts/sliced-chart/#Series | |
27 | +let series = chart.series.push(am5percent.PictorialStackedSeries.new(root, { | |
28 | + alignLabels: true, | |
29 | + orientation: "vertical", | |
30 | + valueField: "value", | |
31 | + categoryField: "category", | |
32 | + svgPath: "M53.5,476c0,14,6.833,21,20.5,21s20.5-7,20.5-21V287h21v189c0,14,6.834,21,20.5,21 c13.667,0,20.5-7,20.5-21V154h10v116c0,7.334,2.5,12.667,7.5,16s10.167,3.333,15.5,0s8-8.667,8-16V145c0-13.334-4.5-23.667-13.5-31 s-21.5-11-37.5-11h-82c-15.333,0-27.833,3.333-37.5,10s-14.5,17-14.5,31v133c0,6,2.667,10.333,8,13s10.5,2.667,15.5,0s7.5-7,7.5-13 V154h10V476 M61.5,42.5c0,11.667,4.167,21.667,12.5,30S92.333,85,104,85s21.667-4.167,30-12.5S146.5,54,146.5,42 c0-11.335-4.167-21.168-12.5-29.5C125.667,4.167,115.667,0,104,0S82.333,4.167,74,12.5S61.5,30.833,61.5,42.5z" | |
33 | +})); | |
34 | + | |
35 | +series.labelsContainer.set("width", 100); | |
36 | +series.ticks.template.set("location", 0.6); | |
37 | + | |
38 | + | |
39 | +// Set data | |
40 | +// https://www.amcharts.com/docs/v5/charts/percent-charts/sliced-chart/#Setting_data | |
41 | +series.data.setAll([ | |
42 | + { value: 10, category: "A복지관" }, | |
43 | + { value: 9, category: "B복지관" }, | |
44 | + { value: 6, category: "C복지관" }, | |
45 | + { value: 5, category: "D복지관" }, | |
46 | + { value: 4, category: "E복지관" }, | |
47 | +]); | |
48 | + | |
49 | + | |
50 | +// Play initial series animation | |
51 | +// https://www.amcharts.com/docs/v5/concepts/animations/#Animation_of_series | |
52 | +chart.appear(1000, 100); | |
53 | + // end am5.ready() | |
54 | + this.root = root; | |
55 | + } | |
56 | + componentWillUnmount() { | |
57 | + if (this.root) { | |
58 | + this.root.dispose(); | |
59 | + } | |
60 | + } | |
61 | + render() { | |
62 | + return <div id="Chart5" style={{ width: "100%", height: "80%" }}></div> | |
63 | + } | |
64 | +} | |
65 | + | |
66 | +export default Chart5; |
--- client/views/layout/Header.jsx
+++ client/views/layout/Header.jsx
... | ... | @@ -3,6 +3,7 @@ |
3 | 3 |
import Weather from "../pages/main/Weather.jsx"; |
4 | 4 |
|
5 | 5 |
function Header({ title }) { |
6 |
+ |
|
6 | 7 |
const [headerData, setHeaderData] = React.useState(0); |
7 | 8 |
|
8 | 9 |
return ( |
--- client/views/layout/Menu.jsx
+++ client/views/layout/Menu.jsx
... | ... | @@ -1,62 +1,8 @@ |
1 | 1 |
import React from "react"; |
2 | 2 |
import SidebarItem from "./SidebarItem.jsx"; |
3 | 3 |
import Button from "../component/Button.jsx"; |
4 |
-import HouseIcon from "@mui/icons-material/House"; |
|
5 |
-import PersonIcon from "@mui/icons-material/Person"; |
|
6 |
-import Diversity1Icon from "@mui/icons-material/Diversity1"; |
|
7 |
-import DoorFrontIcon from "@mui/icons-material/DoorFront"; |
|
8 |
-import SpeakerPhoneIcon from "@mui/icons-material/SpeakerPhone"; |
|
9 |
-import SettingsIcon from "@mui/icons-material/Settings"; |
|
10 |
-import CallIcon from '@mui/icons-material/Call'; |
|
11 |
-import ConstructionIcon from '@mui/icons-material/Construction'; |
|
12 | 4 |
|
13 |
-export const items = [ |
|
14 |
- { |
|
15 |
- title: "Home", |
|
16 |
- path: "/Main", |
|
17 |
- icon: <HouseIcon sx={{ fontSize: 20, color: "#ffffff", marginRight: 1 }} />, |
|
18 |
- }, |
|
19 |
- { |
|
20 |
- title: "사용자 관리", |
|
21 |
- path: "/UserAuthoriySelect", |
|
22 |
- icon: ( |
|
23 |
- <PersonIcon sx={{ fontSize: 20, color: "#ffffff", marginRight: 1 }} /> |
|
24 |
- ), |
|
25 |
- }, |
|
26 |
- { |
|
27 |
- title: "장비 관리", |
|
28 |
- icon: ( |
|
29 |
- <SettingsIcon |
|
30 |
- sx={{ fontSize: 20, color: "#ffffff", marginRight: 1 }} |
|
31 |
- /> |
|
32 |
- ), |
|
33 |
- childrens: [ |
|
34 |
- { |
|
35 |
- title: "장비 조회", |
|
36 |
- path: "/EquipmentManagementSelect", |
|
37 |
- }, |
|
38 |
- { |
|
39 |
- title: "장비 반납/교환 요청", |
|
40 |
- path: "/EquipmentManagementSelectReturn", |
|
41 |
- }, |
|
42 |
- { |
|
43 |
- title: "장비 추가 요청", |
|
44 |
- path: "/EquipmentManagementSelectAdd", |
|
45 |
- }, |
|
46 |
- ], |
|
47 |
- }, |
|
48 |
- { |
|
49 |
- title: "문의게시판", |
|
50 |
- path: "/QandA", |
|
51 |
- icon: ( |
|
52 |
- <SpeakerPhoneIcon |
|
53 |
- sx={{ fontSize: 20, color: "#ffffff", marginRight: 1 }} |
|
54 |
- /> |
|
55 |
- ), |
|
56 |
- }, |
|
57 |
-]; |
|
58 |
- |
|
59 |
-export default function Sidebar() { |
|
5 |
+export default function Sidebar({items}) { |
|
60 | 6 |
const [menuToggle, setMenuToggle] = React.useState(false); |
61 | 7 |
|
62 | 8 |
return ( |
--- client/views/pages/App.jsx
+++ client/views/pages/App.jsx
... | ... | @@ -6,11 +6,11 @@ |
6 | 6 |
import React from "react"; |
7 | 7 |
|
8 | 8 |
//Application의 Route 정보를 관리하는 Component |
9 |
-import AppRoute from "./AppRoute.jsx"; |
|
9 |
+import AllApp, {AdminApp, GovernmentApp} from "./AppRoute.jsx"; |
|
10 | 10 |
|
11 | 11 |
//Test Layout |
12 | 12 |
import Header from "../layout/Header.jsx"; |
13 |
-import Menu, { items } from "../layout/Menu.jsx"; |
|
13 |
+import Menu from "../layout/Menu.jsx"; |
|
14 | 14 |
import Login from "./login/Login.jsx"; |
15 | 15 |
import { useLocation, useNavigate } from "react-router"; |
16 | 16 |
import Weather from "./main/Weather.jsx"; |
... | ... | @@ -25,18 +25,24 @@ |
25 | 25 |
navigate("/Main"); |
26 | 26 |
}; |
27 | 27 |
|
28 |
- const { title } = items.find( |
|
28 |
+ |
|
29 |
+ const menuItems = AllApp.menuItems; //AdminApp, GovernmentApp, AllApp |
|
30 |
+ const AppRoute = AllApp.AppRoute; |
|
31 |
+ |
|
32 |
+ |
|
33 |
+ const { title } = menuItems.find( |
|
29 | 34 |
(item) => |
30 | 35 |
item.path === location.pathname || |
31 | 36 |
location.pathname.startsWith(item.prefix) || |
32 | 37 |
item.childrens?.some((child) => location.pathname.startsWith(child.path)) |
33 | 38 |
) ?? { title: '' }; |
39 |
+ |
|
34 | 40 |
return ( |
35 | 41 |
<div id="App"> |
36 | 42 |
{isLogin ? ( |
37 | 43 |
<div id="layout"> |
38 | 44 |
<Header title={title} /> |
39 |
- <Menu /> |
|
45 |
+ <Menu items={menuItems}/> |
|
40 | 46 |
<div id="pages"> |
41 | 47 |
<AppRoute /> |
42 | 48 |
</div> |
--- client/views/pages/AppRoute.jsx
+++ client/views/pages/AppRoute.jsx
... | ... | @@ -7,8 +7,20 @@ |
7 | 7 |
//react router 라이브러리 import |
8 | 8 |
import { Routes, Route } from "react-router-dom"; |
9 | 9 |
|
10 |
+import HouseIcon from "@mui/icons-material/House"; |
|
11 |
+import PersonIcon from "@mui/icons-material/Person"; |
|
12 |
+import Diversity1Icon from "@mui/icons-material/Diversity1"; |
|
13 |
+import DoorFrontIcon from "@mui/icons-material/DoorFront"; |
|
14 |
+import SpeakerPhoneIcon from "@mui/icons-material/SpeakerPhone"; |
|
15 |
+import SettingsIcon from "@mui/icons-material/Settings"; |
|
16 |
+import CallIcon from '@mui/icons-material/Call'; |
|
17 |
+import ConstructionIcon from '@mui/icons-material/Construction'; |
|
18 |
+ |
|
10 | 19 |
import Test from "./Test/Test.jsx"; |
11 |
-import Main2 from "./main/Main2.jsx"; |
|
20 |
+import Main_government from "./main/Main_government.jsx"; |
|
21 |
+import Main_guardian from "./main/Main_guardian.jsx"; |
|
22 |
+import Main_agency from "./main/Main_agency.jsx"; |
|
23 |
+import Main from "./main/Main.jsx"; |
|
12 | 24 |
import SeniorSelect from "./senior_management/SeniorSelect.jsx"; |
13 | 25 |
import SeniorInsert from "./senior_management/SeniorInsert.jsx"; |
14 | 26 |
import SeniorSelectOne from "./senior_management/SeniorSelectOne.jsx"; |
... | ... | @@ -23,19 +35,490 @@ |
23 | 35 |
import EquipmentRentalInsert from "./equipment/EquipmentRentalInsert.jsx"; |
24 | 36 |
import EquipmentManagementSelect from "./equipment/EquipmentManagementSelect.jsx"; |
25 | 37 |
import EquipmentManagementSelectOne from "./equipment/EquipmentManagementSelectOne.jsx"; |
26 |
-import UserAuthoriySelect from "./authority/UserAuthoriySelect.jsx"; |
|
38 |
+import UserAuthoriySelect from "./user_management/UserAuthoriySelect.jsx"; |
|
39 |
+import UserAuthoriySelect_admin from "./user_management/UserAuthoriySelect_admin.jsx"; |
|
27 | 40 |
import MyInfoUpdate from "./authority/MyInfoUpdate.jsx"; |
28 | 41 |
import CallInsert from "./callcenter/CallInsert.jsx"; |
29 | 42 |
import CallSelect from "./callcenter/CallSelect.jsx"; |
30 |
-import CallSelectOne from "./callcenter/CallSelectOne.jsx"; |
|
43 |
+import CallSelectOne from "./setting/RiskSet.jsx"; |
|
31 | 44 |
import CallUpdate from "./callcenter/CallUpdate.jsx"; |
32 |
-import EquipmentManagementSelectReturn from "./equipment/EquipmentManagementSelectReturn.jsx"; |
|
45 |
+import EquipmentInquiry from "./equipment/EquipmentInquiry.jsx"; |
|
33 | 46 |
import EquipmentManagementSelectAdd from "./equipment/EquipmentManagementSelectAdd.jsx"; |
34 |
-import RiskInsert from "./authority/RiskInsert.jsx"; |
|
35 |
-import AuthorityManagement from "./authority/AuthorityManagement.jsx"; |
|
36 |
-import QandA from "./authority/QandA.jsx"; |
|
47 |
+import RiskSet from "./setting/RiskSet.jsx"; |
|
48 |
+import QandA from "./callcenter/QandA.jsx"; |
|
49 |
+import UserSelectOk from "./user_management/UserSelectOk.jsx"; |
|
50 |
+import AuthorityManagement from "./setting/AuthorityManagement.jsx"; |
|
51 |
+import AgencyInsert from "./user_management/AgencyInsert.jsx"; |
|
52 |
+import AgencySelect from "./user_management/AgencySelect.jsx"; |
|
53 |
+import ProtectorSelect from "./user_management/ProtectorSelect.jsx"; |
|
37 | 54 |
|
38 |
-function AppRoute() { |
|
55 |
+const AllAppMenuItems = [ |
|
56 |
+ { |
|
57 |
+ title: "Home", |
|
58 |
+ path: "/Main", |
|
59 |
+ icon: <HouseIcon sx={{ fontSize: 20, color: "#ffffff", marginRight: 1 }} />, |
|
60 |
+ }, |
|
61 |
+ { |
|
62 |
+ title: "사용자 관리", |
|
63 |
+ path: "/UserAuthoriySelect", |
|
64 |
+ icon: ( |
|
65 |
+ <PersonIcon sx={{ fontSize: 20, color: "#ffffff", marginRight: 1 }} /> |
|
66 |
+ ), |
|
67 |
+ }, |
|
68 |
+ { |
|
69 |
+ title: "시니어 관리", |
|
70 |
+ path: "/UserAuthoriySelect_admin", |
|
71 |
+ icon: ( |
|
72 |
+ <PersonIcon sx={{ fontSize: 20, color: "#ffffff", marginRight: 1 }} /> |
|
73 |
+ ), |
|
74 |
+ }, |
|
75 |
+ { |
|
76 |
+ title: "시행기관관리", |
|
77 |
+ prefix: "/Medicine", |
|
78 |
+ icon: ( |
|
79 |
+ <Diversity1Icon sx={{ fontSize: 20, color: "#ffffff", marginRight: 1 }} /> |
|
80 |
+ ), |
|
81 |
+ childrens: [ |
|
82 |
+ { |
|
83 |
+ title: "기관 조회", |
|
84 |
+ path: "/AgencySelect", |
|
85 |
+ }, |
|
86 |
+ { |
|
87 |
+ title: "사용자 계정 승인", |
|
88 |
+ path: "/UserSelectOk", |
|
89 |
+ }, |
|
90 |
+ ], |
|
91 |
+ }, |
|
92 |
+ { |
|
93 |
+ title: "건강 관리", |
|
94 |
+ prefix: "/Medicine", |
|
95 |
+ icon: ( |
|
96 |
+ <Diversity1Icon sx={{ fontSize: 20, color: "#ffffff", marginRight: 1 }} /> |
|
97 |
+ ), |
|
98 |
+ childrens: [ |
|
99 |
+ { |
|
100 |
+ title: "복약 관리", |
|
101 |
+ path: "/MedicineCareSelect", |
|
102 |
+ }, |
|
103 |
+ { |
|
104 |
+ title: "댁내 온도 관리", |
|
105 |
+ path: "/TemperatureManagementSelect", |
|
106 |
+ }, |
|
107 |
+ { |
|
108 |
+ title: "문진표 작성", |
|
109 |
+ path: "/TemperatureManagementSelect", |
|
110 |
+ }, |
|
111 |
+ ], |
|
112 |
+ }, |
|
113 |
+ |
|
114 |
+ { |
|
115 |
+ title: "방문 관리", |
|
116 |
+ prefix: "/Visit", |
|
117 |
+ icon: ( |
|
118 |
+ <DoorFrontIcon sx={{ fontSize: 20, color: "#ffffff", marginRight: 1 }} /> |
|
119 |
+ ), |
|
120 |
+ childrens: [ |
|
121 |
+ { |
|
122 |
+ title: "방문 관리", |
|
123 |
+ path: "/VisitSelect", |
|
124 |
+ }, |
|
125 |
+ ], |
|
126 |
+ }, |
|
127 |
+ { |
|
128 |
+ title: "장비 관리", |
|
129 |
+ icon: ( |
|
130 |
+ <SettingsIcon |
|
131 |
+ sx={{ fontSize: 20, color: "#ffffff", marginRight: 1 }} |
|
132 |
+ /> |
|
133 |
+ ), |
|
134 |
+ childrens: [ |
|
135 |
+ { |
|
136 |
+ title: "장비 조회", |
|
137 |
+ path: "/EquipmentManagementSelect", |
|
138 |
+ }, |
|
139 |
+ { |
|
140 |
+ title: "장비 문의 요청", |
|
141 |
+ path: "/EquipmentInquiry", |
|
142 |
+ }, |
|
143 |
+ // { |
|
144 |
+ // title: "장비 추가 요청", |
|
145 |
+ // path: "/EquipmentManagementSelectAdd", |
|
146 |
+ // }, |
|
147 |
+ ], |
|
148 |
+ }, |
|
149 |
+ { |
|
150 |
+ title: "문의게시판", |
|
151 |
+ path: "/QandA", |
|
152 |
+ icon: ( |
|
153 |
+ <SpeakerPhoneIcon |
|
154 |
+ sx={{ fontSize: 20, color: "#ffffff", marginRight: 1 }} |
|
155 |
+ /> |
|
156 |
+ ), |
|
157 |
+ }, |
|
158 |
+ { |
|
159 |
+ title: "설정", |
|
160 |
+ icon: ( |
|
161 |
+ <SettingsIcon |
|
162 |
+ sx={{ fontSize: 20, color: "#ffffff", marginRight: 1 }} |
|
163 |
+ /> |
|
164 |
+ ), |
|
165 |
+ childrens: [ |
|
166 |
+ { |
|
167 |
+ title: "위험 기준 관리", |
|
168 |
+ path: "/RiskSet", |
|
169 |
+ }, |
|
170 |
+ { |
|
171 |
+ title: "사용자 권한 관리", |
|
172 |
+ path: "/AuthorityManagement", |
|
173 |
+ }, |
|
174 |
+ // { |
|
175 |
+ // title: "장비 추가 요청", |
|
176 |
+ // path: "/EquipmentManagementSelectAdd", |
|
177 |
+ // }, |
|
178 |
+ ], |
|
179 |
+ }, |
|
180 |
+]; |
|
181 |
+ |
|
182 |
+function AllAppRoute() { |
|
183 |
+ return ( |
|
184 |
+ <Routes> |
|
185 |
+ <Route path="/Test" element={<Test />}></Route> |
|
186 |
+ <Route path="/Main" element={<Main />}></Route> |
|
187 |
+ <Route path="/Main_government" element={<Main_government />}></Route> |
|
188 |
+ <Route path="/Main_guardian" element={<Main_guardian />}></Route> |
|
189 |
+ <Route path="/Main_agency" element={<Main_agency />}></Route> |
|
190 |
+ <Route path="/SeniorSelect" element={<SeniorSelect />}></Route> |
|
191 |
+ <Route path="/SeniorInsert" element={<SeniorInsert />}></Route> |
|
192 |
+ <Route path="/SeniorSelectOne" element={<SeniorSelectOne />}></Route> |
|
193 |
+ <Route |
|
194 |
+ path="/MedicineCareSelect" |
|
195 |
+ element={<MedicineCareSelect />} |
|
196 |
+ ></Route> |
|
197 |
+ <Route |
|
198 |
+ path="/MedicineCareSelectOne" |
|
199 |
+ element={<MedicineCareSelectOne />} |
|
200 |
+ ></Route> |
|
201 |
+ <Route |
|
202 |
+ path="/TemperatureManagementSelect" |
|
203 |
+ element={<TemperatureManagementSelect />} |
|
204 |
+ ></Route> |
|
205 |
+ <Route |
|
206 |
+ path="/TemperatureManagementSelectOne" |
|
207 |
+ element={<TemperatureManagementSelectOne />} |
|
208 |
+ ></Route> |
|
209 |
+ <Route |
|
210 |
+ path="/MedicineStatistics" |
|
211 |
+ element={<MedicineStatistics />} |
|
212 |
+ ></Route> |
|
213 |
+ <Route path="/VisitInsert" element={<VisitInsert />}></Route> |
|
214 |
+ <Route path="/VisitSelect" element={<VisitSelect />}></Route> |
|
215 |
+ <Route path="/VisitSelectOne" element={<VisitSelectOne />}></Route> |
|
216 |
+ <Route |
|
217 |
+ path="/EquipmentRentalInsert" |
|
218 |
+ element={<EquipmentRentalInsert />} |
|
219 |
+ ></Route> |
|
220 |
+ <Route |
|
221 |
+ path="/EquipmentManagementSelect" |
|
222 |
+ element={<EquipmentManagementSelect />} |
|
223 |
+ ></Route> |
|
224 |
+ <Route |
|
225 |
+ path="/EquipmentManagementSelectOne" |
|
226 |
+ element={<EquipmentManagementSelectOne />} |
|
227 |
+ ></Route> |
|
228 |
+ <Route |
|
229 |
+ path="/UserAuthoriySelect" |
|
230 |
+ element={<UserAuthoriySelect />} |
|
231 |
+ ></Route> |
|
232 |
+ <Route path="/MyInfoUpdate" element={<MyInfoUpdate />}></Route> |
|
233 |
+ <Route path="/CallInsert" element={<CallInsert />}></Route> |
|
234 |
+ <Route path="/CallUpdate" element={<CallUpdate />}></Route> |
|
235 |
+ <Route path="/CallSelect" element={<CallSelect />}></Route> |
|
236 |
+ <Route path="/CallSelectOne" element={<CallSelectOne />}></Route> |
|
237 |
+ <Route path="/EquipmentInquiry" element={<EquipmentInquiry />}></Route> |
|
238 |
+ <Route path="/EquipmentManagementSelectAdd" element={<EquipmentManagementSelectAdd />}></Route> |
|
239 |
+ <Route path="/RiskSet" element={<RiskSet />}></Route> |
|
240 |
+ <Route path="/AuthorityManagement" element={<AuthorityManagement />}></Route> |
|
241 |
+ <Route path="/UserAuthoriySelect_admin" element={<UserAuthoriySelect_admin />}></Route> |
|
242 |
+ <Route path="/QandA" element={<QandA />}></Route> |
|
243 |
+ <Route path="/UserSelectOk" element={<UserSelectOk />}></Route> |
|
244 |
+ <Route path="/AuthorityManagement" element={<AuthorityManagement />}></Route> |
|
245 |
+ <Route path="/AgencyInsert" element={<AgencyInsert />}></Route> |
|
246 |
+ <Route path="/AgencySelect" element={<AgencySelect />}></Route> |
|
247 |
+ <Route path="/ProtectorSelect" element={<ProtectorSelect />}></Route> |
|
248 |
+ </Routes> |
|
249 |
+ ); |
|
250 |
+} |
|
251 |
+ |
|
252 |
+ |
|
253 |
+ |
|
254 |
+const AdminAppMenuItems = [ |
|
255 |
+ { |
|
256 |
+ title: "Home", |
|
257 |
+ path: "/Main", |
|
258 |
+ icon: <HouseIcon sx={{ fontSize: 20, color: "#ffffff", marginRight: 1 }} />, |
|
259 |
+ }, |
|
260 |
+ { |
|
261 |
+ title: "사용자 관리", |
|
262 |
+ path: "/UserAuthoriySelect", |
|
263 |
+ icon: ( |
|
264 |
+ <PersonIcon sx={{ fontSize: 20, color: "#ffffff", marginRight: 1 }} /> |
|
265 |
+ ), |
|
266 |
+ }, |
|
267 |
+ // { |
|
268 |
+ // title: "시니어 관리", |
|
269 |
+ // path: "/UserAuthoriySelect_admin", |
|
270 |
+ // icon: ( |
|
271 |
+ // <PersonIcon sx={{ fontSize: 20, color: "#ffffff", marginRight: 1 }} /> |
|
272 |
+ // ), |
|
273 |
+ // }, |
|
274 |
+ // { |
|
275 |
+ // title: "사용자 계정 승인", |
|
276 |
+ // path: "/UserSelectOk", |
|
277 |
+ // icon: ( |
|
278 |
+ // <PersonIcon sx={{ fontSize: 20, color: "#ffffff", marginRight: 1 }} /> |
|
279 |
+ // ), |
|
280 |
+ // }, |
|
281 |
+ // { |
|
282 |
+ // title: "건강 관리", |
|
283 |
+ // prefix: "/Medicine", |
|
284 |
+ // icon: ( |
|
285 |
+ // <Diversity1Icon sx={{ fontSize: 20, color: "#ffffff", marginRight: 1 }} /> |
|
286 |
+ // ), |
|
287 |
+ // childrens: [ |
|
288 |
+ // { |
|
289 |
+ // title: "복약 관리", |
|
290 |
+ // path: "/MedicineCareSelect", |
|
291 |
+ // }, |
|
292 |
+ // { |
|
293 |
+ // title: "댁내 온도 관리", |
|
294 |
+ // path: "/TemperatureManagementSelect", |
|
295 |
+ // }, |
|
296 |
+ // { |
|
297 |
+ // title: "문진표 작성", |
|
298 |
+ // path: "/TemperatureManagementSelect", |
|
299 |
+ // }, |
|
300 |
+ // ], |
|
301 |
+ // }, |
|
302 |
+ |
|
303 |
+ // { |
|
304 |
+ // title: "방문 관리", |
|
305 |
+ // prefix: "/Visit", |
|
306 |
+ // icon: ( |
|
307 |
+ // <DoorFrontIcon sx={{ fontSize: 20, color: "#ffffff", marginRight: 1 }} /> |
|
308 |
+ // ), |
|
309 |
+ // childrens: [ |
|
310 |
+ // { |
|
311 |
+ // title: "방문 관리", |
|
312 |
+ // path: "/VisitSelect", |
|
313 |
+ // }, |
|
314 |
+ // ], |
|
315 |
+ // }, |
|
316 |
+ // { |
|
317 |
+ // title: "장비 관리", |
|
318 |
+ // icon: ( |
|
319 |
+ // <SettingsIcon |
|
320 |
+ // sx={{ fontSize: 20, color: "#ffffff", marginRight: 1 }} |
|
321 |
+ // /> |
|
322 |
+ // ), |
|
323 |
+ // childrens: [ |
|
324 |
+ // { |
|
325 |
+ // title: "장비 조회", |
|
326 |
+ // path: "/EquipmentManagementSelect", |
|
327 |
+ // }, |
|
328 |
+ // { |
|
329 |
+ // title: "장비 문의 요청", |
|
330 |
+ // path: "/EquipmentInquiry", |
|
331 |
+ // }, |
|
332 |
+ // // { |
|
333 |
+ // // title: "장비 추가 요청", |
|
334 |
+ // // path: "/EquipmentManagementSelectAdd", |
|
335 |
+ // // }, |
|
336 |
+ // ], |
|
337 |
+ // }, |
|
338 |
+ { |
|
339 |
+ title: "문의게시판", |
|
340 |
+ path: "/QandA", |
|
341 |
+ icon: ( |
|
342 |
+ <SpeakerPhoneIcon |
|
343 |
+ sx={{ fontSize: 20, color: "#ffffff", marginRight: 1 }} |
|
344 |
+ /> |
|
345 |
+ ), |
|
346 |
+ }, |
|
347 |
+ // { |
|
348 |
+ // title: "설정", |
|
349 |
+ // icon: ( |
|
350 |
+ // <SettingsIcon |
|
351 |
+ // sx={{ fontSize: 20, color: "#ffffff", marginRight: 1 }} |
|
352 |
+ // /> |
|
353 |
+ // ), |
|
354 |
+ // childrens: [ |
|
355 |
+ // { |
|
356 |
+ // title: "위험 기준 관리", |
|
357 |
+ // path: "/RiskSet", |
|
358 |
+ // }, |
|
359 |
+ // { |
|
360 |
+ // title: "사용자 권한 관리", |
|
361 |
+ // path: "/AuthorityManagement", |
|
362 |
+ // }, |
|
363 |
+ // // { |
|
364 |
+ // // title: "장비 추가 요청", |
|
365 |
+ // // path: "/EquipmentManagementSelectAdd", |
|
366 |
+ // // }, |
|
367 |
+ // ], |
|
368 |
+ // }, |
|
369 |
+]; |
|
370 |
+function AdminAppRoute() { |
|
371 |
+ return ( |
|
372 |
+ <Routes> |
|
373 |
+ <Route path="/Test" element={<Test />}></Route> |
|
374 |
+ <Route path="/Main" element={<Main />}></Route> |
|
375 |
+ <Route path="/Main_government" element={<Main_government />}></Route> |
|
376 |
+ <Route path="/Main_guardian" element={<Main_guardian />}></Route> |
|
377 |
+ <Route path="/Main_agency" element={<Main_agency />}></Route> |
|
378 |
+ <Route |
|
379 |
+ path="/EquipmentRentalInsert" |
|
380 |
+ element={<EquipmentRentalInsert />} |
|
381 |
+ ></Route> |
|
382 |
+ <Route |
|
383 |
+ path="/EquipmentManagementSelect" |
|
384 |
+ element={<EquipmentManagementSelect />} |
|
385 |
+ ></Route> |
|
386 |
+ <Route |
|
387 |
+ path="/EquipmentManagementSelectOne" |
|
388 |
+ element={<EquipmentManagementSelectOne />} |
|
389 |
+ ></Route> |
|
390 |
+ <Route path="/MyInfoUpdate" element={<MyInfoUpdate />}></Route> |
|
391 |
+ <Route path="/CallInsert" element={<CallInsert />}></Route> |
|
392 |
+ <Route path="/CallUpdate" element={<CallUpdate />}></Route> |
|
393 |
+ <Route path="/CallSelect" element={<CallSelect />}></Route> |
|
394 |
+ <Route path="/CallSelectOne" element={<CallSelectOne />}></Route> |
|
395 |
+ <Route path="/EquipmentInquiry" element={<EquipmentInquiry />}></Route> |
|
396 |
+ <Route path="/EquipmentManagementSelectAdd" element={<EquipmentManagementSelectAdd />}></Route> |
|
397 |
+ <Route path="/RiskSet" element={<RiskSet />}></Route> |
|
398 |
+ <Route path="/AuthorityManagement" element={<AuthorityManagement />}></Route> |
|
399 |
+ <Route path="/UserAuthoriySelect_admin" element={<UserAuthoriySelect_admin />}></Route> |
|
400 |
+ <Route path="/QandA" element={<QandA />}></Route> |
|
401 |
+ <Route path="/UserSelectOk" element={<UserSelectOk />}></Route> |
|
402 |
+ <Route path="/AuthorityManagement" element={<AuthorityManagement />}></Route> |
|
403 |
+ </Routes> |
|
404 |
+ ); |
|
405 |
+} |
|
406 |
+ |
|
407 |
+ |
|
408 |
+const GovernmentAppMenuItems = [ |
|
409 |
+ { |
|
410 |
+ title: "Home", |
|
411 |
+ path: "/Main", |
|
412 |
+ icon: <HouseIcon sx={{ fontSize: 20, color: "#ffffff", marginRight: 1 }} />, |
|
413 |
+ }, |
|
414 |
+ { |
|
415 |
+ title: "사용자 관리", |
|
416 |
+ path: "/UserAuthoriySelect", |
|
417 |
+ icon: ( |
|
418 |
+ <PersonIcon sx={{ fontSize: 20, color: "#ffffff", marginRight: 1 }} /> |
|
419 |
+ ), |
|
420 |
+ }, |
|
421 |
+ { |
|
422 |
+ title: "시니어 관리", |
|
423 |
+ path: "/UserAuthoriySelect_admin", |
|
424 |
+ icon: ( |
|
425 |
+ <PersonIcon sx={{ fontSize: 20, color: "#ffffff", marginRight: 1 }} /> |
|
426 |
+ ), |
|
427 |
+ }, |
|
428 |
+ { |
|
429 |
+ title: "사용자 계정 승인", |
|
430 |
+ path: "/UserSelectOk", |
|
431 |
+ }, |
|
432 |
+ { |
|
433 |
+ title: "건강 관리", |
|
434 |
+ prefix: "/Medicine", |
|
435 |
+ icon: ( |
|
436 |
+ <Diversity1Icon sx={{ fontSize: 20, color: "#ffffff", marginRight: 1 }} /> |
|
437 |
+ ), |
|
438 |
+ childrens: [ |
|
439 |
+ { |
|
440 |
+ title: "복약 관리", |
|
441 |
+ path: "/MedicineCareSelect", |
|
442 |
+ }, |
|
443 |
+ { |
|
444 |
+ title: "댁내 온도 관리", |
|
445 |
+ path: "/TemperatureManagementSelect", |
|
446 |
+ }, |
|
447 |
+ { |
|
448 |
+ title: "문진표 작성", |
|
449 |
+ path: "/TemperatureManagementSelect", |
|
450 |
+ }, |
|
451 |
+ ], |
|
452 |
+ }, |
|
453 |
+ |
|
454 |
+ { |
|
455 |
+ title: "방문 관리", |
|
456 |
+ prefix: "/Visit", |
|
457 |
+ icon: ( |
|
458 |
+ <DoorFrontIcon sx={{ fontSize: 20, color: "#ffffff", marginRight: 1 }} /> |
|
459 |
+ ), |
|
460 |
+ childrens: [ |
|
461 |
+ { |
|
462 |
+ title: "방문 관리", |
|
463 |
+ path: "/VisitSelect", |
|
464 |
+ }, |
|
465 |
+ ], |
|
466 |
+ }, |
|
467 |
+ { |
|
468 |
+ title: "장비 관리", |
|
469 |
+ icon: ( |
|
470 |
+ <SettingsIcon |
|
471 |
+ sx={{ fontSize: 20, color: "#ffffff", marginRight: 1 }} |
|
472 |
+ /> |
|
473 |
+ ), |
|
474 |
+ childrens: [ |
|
475 |
+ { |
|
476 |
+ title: "장비 조회", |
|
477 |
+ path: "/EquipmentManagementSelect", |
|
478 |
+ }, |
|
479 |
+ { |
|
480 |
+ title: "장비 문의 요청", |
|
481 |
+ path: "/EquipmentInquiry", |
|
482 |
+ }, |
|
483 |
+ // { |
|
484 |
+ // title: "장비 추가 요청", |
|
485 |
+ // path: "/EquipmentManagementSelectAdd", |
|
486 |
+ // }, |
|
487 |
+ ], |
|
488 |
+ }, |
|
489 |
+ { |
|
490 |
+ title: "문의게시판", |
|
491 |
+ path: "/QandA", |
|
492 |
+ icon: ( |
|
493 |
+ <SpeakerPhoneIcon |
|
494 |
+ sx={{ fontSize: 20, color: "#ffffff", marginRight: 1 }} |
|
495 |
+ /> |
|
496 |
+ ), |
|
497 |
+ }, |
|
498 |
+ { |
|
499 |
+ title: "설정", |
|
500 |
+ icon: ( |
|
501 |
+ <SettingsIcon |
|
502 |
+ sx={{ fontSize: 20, color: "#ffffff", marginRight: 1 }} |
|
503 |
+ /> |
|
504 |
+ ), |
|
505 |
+ childrens: [ |
|
506 |
+ { |
|
507 |
+ title: "위험 기준 관리", |
|
508 |
+ path: "/RiskSet", |
|
509 |
+ }, |
|
510 |
+ { |
|
511 |
+ title: "사용자 권한 관리", |
|
512 |
+ path: "/AuthorityManagement", |
|
513 |
+ }, |
|
514 |
+ // { |
|
515 |
+ // title: "장비 추가 요청", |
|
516 |
+ // path: "/EquipmentManagementSelectAdd", |
|
517 |
+ // }, |
|
518 |
+ ], |
|
519 |
+ }, |
|
520 |
+]; |
|
521 |
+function GovernmentAppRoute() { |
|
39 | 522 |
return ( |
40 | 523 |
<Routes> |
41 | 524 |
<Route path="/Test" element={<Test />}></Route> |
... | ... | @@ -87,7 +570,7 @@ |
87 | 570 |
<Route path="/CallUpdate" element={<CallUpdate />}></Route> |
88 | 571 |
<Route path="/CallSelect" element={<CallSelect />}></Route> |
89 | 572 |
<Route path="/CallSelectOne" element={<CallSelectOne />}></Route> |
90 |
- <Route path="/EquipmentManagementSelectReturn" element={<EquipmentManagementSelectReturn />}></Route> |
|
573 |
+ <Route path="/EquipmentInquiry" element={<EquipmentInquiry />}></Route> |
|
91 | 574 |
<Route path="/EquipmentManagementSelectAdd" element={<EquipmentManagementSelectAdd />}></Route> |
92 | 575 |
<Route path="/RiskInsert" element={<RiskInsert />}></Route> |
93 | 576 |
<Route path="/AuthorityManagement" element={<AuthorityManagement />}></Route> |
... | ... | @@ -96,4 +579,9 @@ |
96 | 579 |
); |
97 | 580 |
} |
98 | 581 |
|
99 |
-export default AppRoute; |
|
582 |
+const AllApp = {'menuItems': AllAppMenuItems, 'AppRoute': AllAppRoute}; |
|
583 |
+const AdminApp = {'menuItems': AdminAppMenuItems, 'AppRoute': AdminAppRoute}; |
|
584 |
+const GovernmentApp = {'menuItems': GovernmentAppMenuItems, 'AppRoute': GovernmentAppRoute}; |
|
585 |
+ |
|
586 |
+export default AllApp; |
|
587 |
+export {AdminApp, GovernmentApp}; |
--- client/views/pages/callcenter/CallInsert.jsx
+++ client/views/pages/callcenter/CallInsert.jsx
... | ... | @@ -1,7 +1,103 @@ |
1 |
-import React from 'react' |
|
1 |
+import React from "react"; |
|
2 |
+import Button from "../../component/Button.jsx"; |
|
3 |
+import ContentTitle from "../../component/ContentTitle.jsx"; |
|
4 |
+import { useNavigate } from "react-router"; |
|
2 | 5 |
|
3 | 6 |
export default function CallInsert() { |
7 |
+ const navigate = useNavigate(); |
|
4 | 8 |
return ( |
5 |
- <div>CallInsert</div> |
|
6 |
- ) |
|
9 |
+ <main> |
|
10 |
+ <div className="content-wrap row"> |
|
11 |
+ <ContentTitle contentTitle={"문의글 작성"} /> |
|
12 |
+ <p>작성자 정보</p> |
|
13 |
+ <table className="margin-bottom2 senior-insert"> |
|
14 |
+ <tr> |
|
15 |
+ <th>작성자</th> |
|
16 |
+ <td> |
|
17 |
+ <input type="text" placeholder="자동입력부분" /> |
|
18 |
+ </td> |
|
19 |
+ </tr> |
|
20 |
+ |
|
21 |
+ <tr> |
|
22 |
+ <th>소속 기관</th> |
|
23 |
+ <td colSpan={3}> |
|
24 |
+ <input type="text" placeholder="자동입력부분" /> |
|
25 |
+ </td> |
|
26 |
+ </tr> |
|
27 |
+ <tr> |
|
28 |
+ <th>연락처</th> |
|
29 |
+ <td colSpan={3}> |
|
30 |
+ <input type="text" placeholder="자동입력부분" /> |
|
31 |
+ </td> |
|
32 |
+ </tr> |
|
33 |
+ <tr> |
|
34 |
+ <th>구분</th> |
|
35 |
+ <td colSpan={3} className="flex"> |
|
36 |
+ <select name="year" id="year"> |
|
37 |
+ <option value="">반납</option> |
|
38 |
+ <option value="">교환</option> |
|
39 |
+ <option value="">추가</option> |
|
40 |
+ <option value="">기타</option> |
|
41 |
+ </select> |
|
42 |
+ </td> |
|
43 |
+ </tr> |
|
44 |
+ <tr> |
|
45 |
+ <th>내용</th> |
|
46 |
+ <td colSpan={3}> |
|
47 |
+ <textarea className="medicine" cols="30" rows="2"></textarea> |
|
48 |
+ </td> |
|
49 |
+ </tr> |
|
50 |
+ </table> |
|
51 |
+ <p>시니어 정보</p> |
|
52 |
+ <table className="margin-bottom2 senior-insert"> |
|
53 |
+ <tr> |
|
54 |
+ <th>시니어 선택</th> |
|
55 |
+ <td colSpan={3} className="flex width"> |
|
56 |
+ <select> |
|
57 |
+ <option value="">시니어1</option> |
|
58 |
+ <option value="">시니어2</option> |
|
59 |
+ </select> |
|
60 |
+ </td> |
|
61 |
+ </tr> |
|
62 |
+ <tr> |
|
63 |
+ <th>시니어 이름</th> |
|
64 |
+ <td> |
|
65 |
+ <input type="text" placeholder="자동입력부분" /> |
|
66 |
+ </td> |
|
67 |
+ <th>시니어등록번호</th> |
|
68 |
+ <td> |
|
69 |
+ <input type="text" placeholder="자동입력부분" /> |
|
70 |
+ </td> |
|
71 |
+ </tr> |
|
72 |
+ <tr> |
|
73 |
+ <th>시니어 연락처</th> |
|
74 |
+ <td> |
|
75 |
+ <input type="text" placeholder="자동입력부분" /> |
|
76 |
+ </td> |
|
77 |
+ <th>시니어 주소</th> |
|
78 |
+ <td> |
|
79 |
+ <input type="text" placeholder="자동입력부분" /> |
|
80 |
+ </td> |
|
81 |
+ </tr> |
|
82 |
+ |
|
83 |
+ </table> |
|
84 |
+ <div className="btn-wrap flex-center"> |
|
85 |
+ <Button |
|
86 |
+ className={"btn-large gray-btn"} |
|
87 |
+ btnName={"이전"} |
|
88 |
+ onClick={() => { |
|
89 |
+ navigate("/EquipmentManagementSelectReturn"); |
|
90 |
+ }} |
|
91 |
+ /> |
|
92 |
+ <Button |
|
93 |
+ className={"btn-large green-btn"} |
|
94 |
+ btnName={"등록"} |
|
95 |
+ onClick={() => { |
|
96 |
+ navigate("/EquipmentManagementSelectReturn"); |
|
97 |
+ }} |
|
98 |
+ /> |
|
99 |
+ </div> |
|
100 |
+ </div> |
|
101 |
+ </main> |
|
102 |
+ ); |
|
7 | 103 |
} |
--- client/views/pages/callcenter/CallSelect.jsx
+++ client/views/pages/callcenter/CallSelect.jsx
... | ... | @@ -1,7 +1,103 @@ |
1 |
-import React from 'react' |
|
1 |
+import React from "react"; |
|
2 |
+import Button from "../../component/Button.jsx"; |
|
3 |
+import ContentTitle from "../../component/ContentTitle.jsx"; |
|
4 |
+import { useNavigate } from "react-router"; |
|
2 | 5 |
|
3 |
-export default function CallSelect() { |
|
6 |
+export default function CallInsert() { |
|
7 |
+ const navigate = useNavigate(); |
|
4 | 8 |
return ( |
5 |
- <div>CallSelect</div> |
|
6 |
- ) |
|
9 |
+ <main> |
|
10 |
+ <div className="content-wrap row"> |
|
11 |
+ <ContentTitle contentTitle={"장비문의"} /> |
|
12 |
+ <p>작성자 정보</p> |
|
13 |
+ <table className="margin-bottom2 senior-insert"> |
|
14 |
+ <tr> |
|
15 |
+ <th>작성자</th> |
|
16 |
+ <td> |
|
17 |
+ <input type="text" placeholder="자동입력부분" /> |
|
18 |
+ </td> |
|
19 |
+ </tr> |
|
20 |
+ |
|
21 |
+ <tr> |
|
22 |
+ <th>소속 기관</th> |
|
23 |
+ <td colSpan={3}> |
|
24 |
+ <input type="text" placeholder="자동입력부분" /> |
|
25 |
+ </td> |
|
26 |
+ </tr> |
|
27 |
+ <tr> |
|
28 |
+ <th>연락처</th> |
|
29 |
+ <td colSpan={3}> |
|
30 |
+ <input type="text" placeholder="자동입력부분" /> |
|
31 |
+ </td> |
|
32 |
+ </tr> |
|
33 |
+ <tr> |
|
34 |
+ <th>구분</th> |
|
35 |
+ <td colSpan={3} className="flex"> |
|
36 |
+ <select name="year" id="year"> |
|
37 |
+ <option value="">반납</option> |
|
38 |
+ <option value="">교환</option> |
|
39 |
+ <option value="">추가</option> |
|
40 |
+ <option value="">기타</option> |
|
41 |
+ </select> |
|
42 |
+ </td> |
|
43 |
+ </tr> |
|
44 |
+ <tr> |
|
45 |
+ <th>내용</th> |
|
46 |
+ <td colSpan={3}> |
|
47 |
+ <textarea className="medicine" cols="30" rows="2"></textarea> |
|
48 |
+ </td> |
|
49 |
+ </tr> |
|
50 |
+ </table> |
|
51 |
+ <p>시니어 정보</p> |
|
52 |
+ <table className="margin-bottom2 senior-insert"> |
|
53 |
+ <tr> |
|
54 |
+ <th>시니어 선택</th> |
|
55 |
+ <td colSpan={3} className="flex width"> |
|
56 |
+ <select> |
|
57 |
+ <option value="">시니어1</option> |
|
58 |
+ <option value="">시니어2</option> |
|
59 |
+ </select> |
|
60 |
+ </td> |
|
61 |
+ </tr> |
|
62 |
+ <tr> |
|
63 |
+ <th>시니어 이름</th> |
|
64 |
+ <td> |
|
65 |
+ <input type="text" placeholder="자동입력부분" /> |
|
66 |
+ </td> |
|
67 |
+ <th>시니어등록번호</th> |
|
68 |
+ <td> |
|
69 |
+ <input type="text" placeholder="자동입력부분" /> |
|
70 |
+ </td> |
|
71 |
+ </tr> |
|
72 |
+ <tr> |
|
73 |
+ <th>시니어 연락처</th> |
|
74 |
+ <td> |
|
75 |
+ <input type="text" placeholder="자동입력부분" /> |
|
76 |
+ </td> |
|
77 |
+ <th>시니어 주소</th> |
|
78 |
+ <td> |
|
79 |
+ <input type="text" placeholder="자동입력부분" /> |
|
80 |
+ </td> |
|
81 |
+ </tr> |
|
82 |
+ |
|
83 |
+ </table> |
|
84 |
+ <div className="btn-wrap flex-center"> |
|
85 |
+ <Button |
|
86 |
+ className={"btn-large gray-btn"} |
|
87 |
+ btnName={"이전"} |
|
88 |
+ onClick={() => { |
|
89 |
+ navigate("/EquipmentManagementSelectReturn"); |
|
90 |
+ }} |
|
91 |
+ /> |
|
92 |
+ <Button |
|
93 |
+ className={"btn-large green-btn"} |
|
94 |
+ btnName={"등록"} |
|
95 |
+ onClick={() => { |
|
96 |
+ navigate("/EquipmentManagementSelectReturn"); |
|
97 |
+ }} |
|
98 |
+ /> |
|
99 |
+ </div> |
|
100 |
+ </div> |
|
101 |
+ </main> |
|
102 |
+ ); |
|
7 | 103 |
} |
--- client/views/pages/callcenter/CallSelectOne.jsx
... | ... | @@ -1,7 +0,0 @@ |
1 | -import React from 'react' | |
2 | - | |
3 | -export default function CallSelectOne() { | |
4 | - return ( | |
5 | - <div>CallSelectOne</div> | |
6 | - ) | |
7 | -} |
--- client/views/pages/authority/QandA.jsx
+++ client/views/pages/callcenter/QandA.jsx
... | ... | @@ -10,14 +10,12 @@ |
10 | 10 |
//게시판 |
11 | 11 |
const thead = [ |
12 | 12 |
"No", |
13 |
- "제목", |
|
14 | 13 |
"작성자", |
15 | 14 |
"작성일자", |
16 | 15 |
"상태", |
17 | 16 |
]; |
18 | 17 |
const key = [ |
19 | 18 |
"No", |
20 |
- "title", |
|
21 | 19 |
"name", |
22 | 20 |
"date", |
23 | 21 |
"work", |
... | ... | @@ -25,31 +23,26 @@ |
25 | 23 |
const content = [ |
26 | 24 |
{ |
27 | 25 |
No: 1, |
28 |
- title: ( |
|
29 |
- <p style={{textDecoration:"underline"}}>질문입니다.</p> |
|
30 |
- ), |
|
31 | 26 |
name: "홍**", |
32 | 27 |
date: "2022-08-01", |
33 | 28 |
work: "답변완료" |
34 |
- }, |
|
35 |
- { |
|
36 |
- No: 2, |
|
37 |
- title: ( |
|
38 |
- <p style={{textDecoration:"underline"}}>질문입니다.</p> |
|
39 |
- ), |
|
40 |
- name: "홍**", |
|
41 |
- date: "2022-08-01", |
|
42 |
- work: ( |
|
43 |
- <p style={{color:"red"}}>처리전</p> |
|
44 |
- ), |
|
45 |
- }, |
|
46 |
- |
|
29 |
+ }, |
|
47 | 30 |
]; |
48 | 31 |
return ( |
49 | 32 |
<main> |
50 | 33 |
<div className="content-wrap"> |
51 |
- <ContentTitle contentTitle={"Q&A"} /> |
|
34 |
+ <ContentTitle contentTitle={"문의게시판"} /> |
|
52 | 35 |
<div className="board-wrap"> |
36 |
+ <div className="btn-wrap flex-end"> |
|
37 |
+ <Button |
|
38 |
+ className={"btn-small green-btn"} |
|
39 |
+ btnName={"등록"} |
|
40 |
+ onClick={() => { |
|
41 |
+ navigate("/CallInsert"); |
|
42 |
+ }} |
|
43 |
+ /> |
|
44 |
+ <Button className={"btn-small green-btn"} btnName={"삭제"} /> |
|
45 |
+ </div> |
|
53 | 46 |
<Table className="equipment-detail" head={thead} contents={content} contentKey={key} /> |
54 | 47 |
</div> |
55 | 48 |
</div> |
+++ client/views/pages/equipment/EquipmentInquiry.jsx
... | ... | @@ -0,0 +1,68 @@ |
1 | +import React from "react"; | |
2 | +import Button from "../../component/Button.jsx"; | |
3 | +import Table from "../../component/Table.jsx"; | |
4 | +import Modal from "../../component/Modal.jsx"; | |
5 | +import { useNavigate } from "react-router"; | |
6 | +import ContentTitle from "../../component/ContentTitle.jsx"; | |
7 | + | |
8 | +export default function EquipmentInquiry() { | |
9 | + const navigate = useNavigate(); | |
10 | + //게시판 | |
11 | + const thead = [ | |
12 | + "No", | |
13 | + "장비명", | |
14 | + "시리얼 넘버", | |
15 | + "기관명", | |
16 | + "요청일자", | |
17 | + "구분", | |
18 | + "처리여부", | |
19 | + ]; | |
20 | + const key = [ | |
21 | + "No", | |
22 | + "equipment_name", | |
23 | + "serialNumber", | |
24 | + "name", | |
25 | + "date", | |
26 | + "category", | |
27 | + "finish" | |
28 | + ]; | |
29 | + const content = [ | |
30 | + { | |
31 | + No: 1, | |
32 | + equipment_name: "스마트약상자", | |
33 | + serialNumber: "ABCD-1", | |
34 | + name: "A복지관", | |
35 | + date: "2023-01-27", | |
36 | + category: "교환", | |
37 | + finish: ( | |
38 | + <select> | |
39 | + <option value="">처리중</option> | |
40 | + <option value="">처리완료</option> | |
41 | + </select> | |
42 | + ), | |
43 | + }, | |
44 | + | |
45 | + ]; | |
46 | + return ( | |
47 | + <main> | |
48 | + <div className="content-wrap"> | |
49 | + <ContentTitle contentTitle={"장비 문의 요청"} /> | |
50 | + <div className="board-wrap"> | |
51 | + <div className="btn-wrap flex-end margin-bottom"> | |
52 | + <Button | |
53 | + className={"btn-small green-btn"} | |
54 | + btnName={"등록"} | |
55 | + onClick={() => { | |
56 | + navigate("/CallInsert"); | |
57 | + }} | |
58 | + /> | |
59 | + <Button className={"btn-small green-btn "} btnName={"삭제"} /> | |
60 | + </div> | |
61 | + <Table className="equipment-detail" head={thead} contents={content} contentKey={key} onClick={() => { | |
62 | + navigate("/CallSelect"); | |
63 | + }}/> | |
64 | + </div> | |
65 | + </div> | |
66 | + </main> | |
67 | + ); | |
68 | +} |
--- client/views/pages/equipment/EquipmentManagementSelectReturn.jsx
... | ... | @@ -1,81 +0,0 @@ |
1 | -import React from "react"; | |
2 | -import Button from "../../component/Button.jsx"; | |
3 | -import Table from "../../component/Table.jsx"; | |
4 | -import Modal from "../../component/Modal.jsx"; | |
5 | -import { useNavigate } from "react-router"; | |
6 | -import ContentTitle from "../../component/ContentTitle.jsx"; | |
7 | - | |
8 | -export default function EquipmentManagementSelectOne() { | |
9 | - const navigate = useNavigate(); | |
10 | - //게시판 | |
11 | - const thead = [ | |
12 | - "No", | |
13 | - "장비명", | |
14 | - "시리얼 넘버", | |
15 | - "기관명", | |
16 | - "요청일자", | |
17 | - "교환/반납", | |
18 | - "처리예정일", | |
19 | - "완료일", | |
20 | - ]; | |
21 | - const key = [ | |
22 | - "No", | |
23 | - "equipment_name", | |
24 | - "serialNumber", | |
25 | - "name", | |
26 | - "date", | |
27 | - "period_of_use", | |
28 | - "visit", | |
29 | - "finish" | |
30 | - ]; | |
31 | - const content = [ | |
32 | - { | |
33 | - No: 1, | |
34 | - equipment_name: "스마트약상자", | |
35 | - serialNumber: "ABCD-1", | |
36 | - name: "A복지관", | |
37 | - date: "2023-01-27", | |
38 | - period_of_use: "교환", | |
39 | - visit:(<div> | |
40 | - <input type="date" /> | |
41 | - </div>), | |
42 | - finish:(<div> | |
43 | - <input type="date" /> | |
44 | - </div>), | |
45 | - }, | |
46 | - { | |
47 | - No: 2, | |
48 | - equipment_name: "스마트약상자", | |
49 | - serialNumber: "ABCD-1", | |
50 | - name: "B복지관", | |
51 | - date: "2023-01-27", | |
52 | - period_of_use: "반납", | |
53 | - visit:(<div> | |
54 | - <input type="date" /> | |
55 | - </div>), | |
56 | - finish:(<div> | |
57 | - <input type="date" /> | |
58 | - </div>), | |
59 | - }, | |
60 | - ]; | |
61 | - return ( | |
62 | - <main> | |
63 | - <div className="content-wrap"> | |
64 | - <ContentTitle contentTitle={"장비 반납/교환 요청"} /> | |
65 | - <div className="board-wrap"> | |
66 | - {/*<div className="btn-wrap flex-end margin-bottom"> | |
67 | - <Button | |
68 | - className={"btn-small green-btn"} | |
69 | - btnName={"등록"} | |
70 | - onClick={() => { | |
71 | - navigate("/SeniorInsert"); | |
72 | - }} | |
73 | - /> | |
74 | - <Button className={"btn-small green-btn "} btnName={"삭제"} /> | |
75 | - </div> */} | |
76 | - <Table className="equipment-detail" head={thead} contents={content} contentKey={key} /> | |
77 | - </div> | |
78 | - </div> | |
79 | - </main> | |
80 | - ); | |
81 | -} |
--- client/views/pages/healthcare/medicinecare/MedicineCareSelect.jsx
+++ client/views/pages/healthcare/medicinecare/MedicineCareSelect.jsx
... | ... | @@ -9,12 +9,13 @@ |
9 | 9 |
const navigate = useNavigate(); |
10 | 10 |
|
11 | 11 |
//게시판 |
12 |
- const thead = ["No", "이름", "생년월일", "연락처", "주소", "최근 복약률",]; |
|
13 |
- const key = ["No", "name", "birth", "phone", "address", "average"]; |
|
12 |
+ const thead = ["No", "이름","시니어등록번호", "생년월일", "연락처", "주소", "최근 복약률",]; |
|
13 |
+ const key = ["No", "name","number", "birth", "phone", "address", "average"]; |
|
14 | 14 |
const content = [ |
15 | 15 |
{ |
16 | 16 |
No: 1, |
17 | 17 |
name: "김복남", |
18 |
+ number: "00000001", |
|
18 | 19 |
birth: "1948.11.15", |
19 | 20 |
phone: "010-1234-5678", |
20 | 21 |
address: "경상북도 군위군 삼국유사면", |
... | ... | @@ -23,6 +24,7 @@ |
23 | 24 |
{ |
24 | 25 |
No: 2, |
25 | 26 |
name: "홍길동", |
27 |
+ number: "00000001", |
|
26 | 28 |
birth: "1948.08.02", |
27 | 29 |
phone: "010-1234-3333", |
28 | 30 |
address: "경상북도 군위군 군위읍", |
--- client/views/pages/healthcare/temperature/TemperatureManagementSelect.jsx
+++ client/views/pages/healthcare/temperature/TemperatureManagementSelect.jsx
... | ... | @@ -8,24 +8,28 @@ |
8 | 8 |
export default function TemperatureManagementSelect() { |
9 | 9 |
const navigate = useNavigate(); |
10 | 10 |
//게시판 |
11 |
- const thead = ["No", "이름", "생년월일", "연락처", "주소", "최근 온도",]; |
|
12 |
- const key = ["No", "name", "birth", "phone", "address", "temp",]; |
|
11 |
+ const thead = ["No", "이름","시니어등록번호", "생년월일", "연락처", "주소", "최근 최저 온도","최근 최고 온도",]; |
|
12 |
+ const key = ["No", "name", "number","birth", "phone", "address", "low", "high"]; |
|
13 | 13 |
const content = [ |
14 | 14 |
{ |
15 | 15 |
No: 1, |
16 | 16 |
name: "김복남", |
17 |
+ number: "00000001", |
|
17 | 18 |
birth: "1948.11.15", |
18 | 19 |
phone: "010-1234-5678", |
19 | 20 |
address: "경상북도 군위군 삼국유사면", |
20 |
- temp: "18°C", |
|
21 |
+ low: "18°C", |
|
22 |
+ high: "18°C", |
|
21 | 23 |
}, |
22 | 24 |
{ |
23 | 25 |
No: 2, |
24 | 26 |
name: "홍길동", |
27 |
+ number: "00000001", |
|
25 | 28 |
birth: "1945.05.08", |
26 | 29 |
phone: "010-1234-5678", |
27 | 30 |
address: "경상북도 군위군 군위읍", |
28 |
- temp: "10°C", |
|
31 |
+ low: "10°C", |
|
32 |
+ high: "10°C", |
|
29 | 33 |
}, |
30 | 34 |
]; |
31 | 35 |
return ( |
--- client/views/pages/main/Main.jsx
+++ client/views/pages/main/Main.jsx
... | ... | @@ -1,110 +1,159 @@ |
1 | 1 |
import React from "react"; |
2 | 2 |
import Title from "../../component/Title.jsx"; |
3 |
-import Table from "./../../component/Table.jsx"; |
|
4 |
-import Map from "./Map.jsx"; |
|
5 |
-import RowChart from "./RowChart.jsx"; |
|
6 |
-import Chart1 from "./Chart1.jsx"; |
|
7 |
-import Chart2 from "./Chart2.jsx"; |
|
8 |
-import Chart3 from "./Chart3.jsx"; |
|
9 |
-import Weather from "./Weather.jsx"; |
|
10 |
-import Donut1 from "./Donut1.jsx"; |
|
11 |
-import Donut2 from "./Donut2.jsx"; |
|
12 |
-import Donut3 from "./Donut3.jsx"; |
|
13 |
-import AddCircleIcon from "@mui/icons-material/AddCircle"; |
|
3 |
+import Table from "../../component/Table.jsx"; |
|
4 |
+import Map from "../../component/chart/Map.jsx"; |
|
5 |
+import Chart1 from "../../component/chart/Chart1.jsx"; |
|
6 |
+import Chart2 from "../../component/chart/Chart2.jsx"; |
|
7 |
+import Calendar from "../../component/Calendar.jsx"; |
|
8 |
+import AddCircleIcon from '@mui/icons-material/AddCircle'; |
|
9 |
+import PersonIcon from '@mui/icons-material/Person'; |
|
14 | 10 |
|
15 |
-function Main() { |
|
16 |
- const tableHead = ["이름", "시리얼 넘버", "위치"]; |
|
17 |
- const Key = ["name", "serialNumber", "location"]; |
|
11 |
+ |
|
12 |
+export default function Main2() { |
|
13 |
+ |
|
14 |
+ const tableHead = [ |
|
15 |
+ "연번", |
|
16 |
+ "계약업체명", |
|
17 |
+ "반납/교환", |
|
18 |
+ "담당자 연락처", |
|
19 |
+ "주소", |
|
20 |
+ ]; |
|
21 |
+ const Key = [ |
|
22 |
+ "name", |
|
23 |
+ "level_of_care", |
|
24 |
+ "birth", |
|
25 |
+ "phone", |
|
26 |
+ "address", |
|
27 |
+ ]; |
|
18 | 28 |
const content = [ |
19 | 29 |
{ |
20 |
- name: "스마트약상자", |
|
21 |
- serialNumber: "ABCD-1", |
|
22 |
- location: "대구광역시 서구 상중이동", |
|
30 |
+ name: "1", |
|
31 |
+ level_of_care: "A복지관", |
|
32 |
+ birth: "교환", |
|
33 |
+ phone: "010-1234-5678", |
|
34 |
+ address: "경상북도 군위군 삼국유사면", |
|
23 | 35 |
}, |
24 | 36 |
{ |
25 |
- name: "스마트약상자", |
|
26 |
- serialNumber: "ABCD-2", |
|
27 |
- location: "대구광역시 서구 내당4동", |
|
37 |
+ name: "2", |
|
38 |
+ level_of_care: "B병원", |
|
39 |
+ birth: "반납", |
|
40 |
+ phone: "010-3333-3333", |
|
41 |
+ address: "경상북도 군위군 삼국유사면", |
|
28 | 42 |
}, |
29 | 43 |
{ |
30 |
- name: "스마트약상자", |
|
31 |
- serialNumber: "ABCD-3", |
|
32 |
- location: "대구광역시 서구 내당2,3동", |
|
44 |
+ name: "3", |
|
45 |
+ level_of_care: "C복지관", |
|
46 |
+ birth: "교환", |
|
47 |
+ phone: "010-3333-4444", |
|
48 |
+ address: "경상북도 군위군 삼국유사면", |
|
33 | 49 |
}, |
34 | 50 |
{ |
35 |
- name: "스마트약상자", |
|
36 |
- serialNumber: "ABCD-4", |
|
37 |
- location: "대구광역시 서구 평리3동", |
|
51 |
+ name: "4", |
|
52 |
+ level_of_care: "D복지관", |
|
53 |
+ birth: "교환", |
|
54 |
+ phone: "010-3333-5555", |
|
55 |
+ address: "경상북도 군위군 삼국유사면", |
|
38 | 56 |
}, |
39 | 57 |
{ |
40 |
- name: "스마트약상자", |
|
41 |
- serialNumber: "ABCD-5", |
|
42 |
- location: "대구광역시 서구 내당1동", |
|
58 |
+ name: "5", |
|
59 |
+ level_of_care: "E복지관", |
|
60 |
+ birth: "반납", |
|
61 |
+ phone: "010-3333-6666", |
|
62 |
+ address: "경상북도 군위군 삼국유사면", |
|
63 |
+ }, |
|
64 |
+ ]; |
|
65 |
+ const tableHead2 = [ |
|
66 |
+ "연번", |
|
67 |
+ "계약업체명", |
|
68 |
+ "반납/교환", |
|
69 |
+ "담당자 연락처", |
|
70 |
+ "주소", |
|
71 |
+ ]; |
|
72 |
+ const Key2 = [ |
|
73 |
+ "name", |
|
74 |
+ "level_of_care", |
|
75 |
+ "birth", |
|
76 |
+ "phone", |
|
77 |
+ "address", |
|
78 |
+ ]; |
|
79 |
+ const content2 = [ |
|
80 |
+ { |
|
81 |
+ name: "1", |
|
82 |
+ level_of_care: "A복지관", |
|
83 |
+ birth: "교환", |
|
84 |
+ phone: "010-1234-5678", |
|
85 |
+ address: "경상북도 군위군 삼국유사면", |
|
86 |
+ }, |
|
87 |
+ { |
|
88 |
+ name: "2", |
|
89 |
+ level_of_care: "B병원", |
|
90 |
+ birth: "반납", |
|
91 |
+ phone: "010-3333-3333", |
|
92 |
+ address: "경상북도 군위군 삼국유사면", |
|
93 |
+ }, |
|
94 |
+ { |
|
95 |
+ name: "3", |
|
96 |
+ level_of_care: "C복지관", |
|
97 |
+ birth: "교환", |
|
98 |
+ phone: "010-3333-4444", |
|
99 |
+ address: "경상북도 군위군 삼국유사면", |
|
100 |
+ }, |
|
101 |
+ { |
|
102 |
+ name: "4", |
|
103 |
+ level_of_care: "D복지관", |
|
104 |
+ birth: "교환", |
|
105 |
+ phone: "010-3333-5555", |
|
106 |
+ address: "경상북도 군위군 삼국유사면", |
|
107 |
+ }, |
|
108 |
+ { |
|
109 |
+ name: "5", |
|
110 |
+ level_of_care: "E복지관", |
|
111 |
+ birth: "반납", |
|
112 |
+ phone: "010-3333-6666", |
|
113 |
+ address: "경상북도 군위군 삼국유사면", |
|
43 | 114 |
}, |
44 | 115 |
]; |
45 | 116 |
|
46 | 117 |
return ( |
47 | 118 |
<main> |
48 |
- <div className="main-grid-government"> |
|
119 |
+ <div className="main-grid-agency"> |
|
120 |
+ <ul className="content-box statistics flex combine-left"> |
|
121 |
+ <li> |
|
122 |
+ <p>전체 장비 대여수</p> |
|
123 |
+ <p>200개</p> |
|
124 |
+ </li> |
|
125 |
+ <li> |
|
126 |
+ <p>계약 업체 수</p> |
|
127 |
+ <p>20개 </p> |
|
128 |
+ </li> |
|
129 |
+ <li> |
|
130 |
+ <p>교환 예정 장비 수</p> |
|
131 |
+ <p>3개</p> |
|
132 |
+ </li> |
|
133 |
+ <li> |
|
134 |
+ <p>반납 예정 장비 수</p> |
|
135 |
+ <p>10개</p> |
|
136 |
+ </li> |
|
137 |
+ </ul> |
|
49 | 138 |
<div className="content-box combine-left"> |
50 | 139 |
<div className="flex margin-bottom"> |
51 |
- <Title title={"케어 노인 분포 현황"} /> |
|
140 |
+ <Title title={"금일 반납/교환 예정 리스트"} explanation={"장비 반납/교환 리스트를 확인하세요."} /> |
|
52 | 141 |
<AddCircleIcon sx={{ fontSize: 20, color: "#1976d2" }} /> |
53 | 142 |
</div> |
54 |
- <Map /> |
|
55 |
- </div> |
|
56 |
- <div className="content-box "> |
|
57 |
- <div className="margin-bottom"> |
|
58 |
- <Title title={"노인 분포도"} /> |
|
143 |
+ <div className="flex" > |
|
144 |
+ <div style={{ width:"50%" }}><Calendar /></div> |
|
145 |
+ <div style={{ width:"50%" }}><Table head={tableHead} contents={content} contentKey={Key} /></div> |
|
59 | 146 |
</div> |
60 |
- <RowChart /> |
|
61 |
- </div> |
|
62 |
- <div className="content-box"> |
|
63 |
- <div className="margin-bottom"> |
|
64 |
- <Title title={"요양 등급별 노인 현황"} /> |
|
65 |
- </div> |
|
66 |
- <Donut1 /> |
|
67 |
- </div> |
|
68 |
- <div className="content-box"> |
|
69 |
- <div> |
|
70 |
- <div className="flex margin-bottom"> |
|
71 |
- <Title title={"노인 외출 현황"} /> |
|
72 |
- <AddCircleIcon sx={{ fontSize: 20, color: "#1976d2" }} /> |
|
73 |
- </div> |
|
74 |
- <Donut2 /> |
|
75 |
- </div> |
|
76 |
- </div> |
|
77 |
- <div className="content-box"> |
|
78 |
- <div className="flex margin-bottom"> |
|
79 |
- <Title title={"장기 미복약 현황"} /> |
|
80 |
- <AddCircleIcon sx={{ fontSize: 20, color: "#1976d2" }} /> |
|
81 |
- </div> |
|
82 |
- <Donut3 /> |
|
83 |
- </div> |
|
84 |
- <div className="content-box combine-right-government"> |
|
85 |
- <div className="flex margin-bottom"> |
|
86 |
- <Title title={"약상자 여닫음 횟수 통계"} /> |
|
87 |
- <AddCircleIcon sx={{ fontSize: 20, color: "#1976d2" }} /> |
|
88 |
- </div> |
|
89 |
- <Chart1 /> |
|
90 |
- </div> |
|
147 |
+ |
|
148 |
+ </div> |
|
91 | 149 |
<div className="content-box combine-left"> |
92 | 150 |
<div className="flex margin-bottom"> |
93 |
- <Title title={"월별 방문 현황 통계"} /> |
|
151 |
+ <Title title={"약상자 추가 예정 리스트"} explanation={"장비 반납/교환 리스트를 확인하세요."} /> |
|
94 | 152 |
<AddCircleIcon sx={{ fontSize: 20, color: "#1976d2" }} /> |
95 | 153 |
</div> |
96 |
- <Chart3 /> |
|
97 |
- </div> |
|
98 |
- <div className="content-box combine-right-government"> |
|
99 |
- <div className="flex margin-bottom"> |
|
100 |
- <Title title={"장비현황"} /> |
|
101 |
- <AddCircleIcon sx={{ fontSize: 20, color: "#1976d2" }} /> |
|
102 |
- </div> |
|
103 |
- <Table head={tableHead} contents={content} contentKey={Key} /> |
|
104 |
- </div> |
|
154 |
+ <Table head={tableHead2} contents={content2} contentKey={Key2} /> |
|
155 |
+ </div> |
|
105 | 156 |
</div> |
106 | 157 |
</main> |
107 | 158 |
); |
108 | 159 |
} |
109 |
- |
|
110 |
-export default Main; |
--- client/views/pages/main/Main2.jsx
... | ... | @@ -1,159 +0,0 @@ |
1 | -import React from "react"; | |
2 | -import Title from "../../component/Title.jsx"; | |
3 | -import Table from "../../component/Table.jsx"; | |
4 | -import Map from "../../component/chart/Map.jsx"; | |
5 | -import Chart1 from "../../component/chart/Chart1.jsx"; | |
6 | -import Chart2 from "../../component/chart/Chart2.jsx"; | |
7 | -import Calendar from "../../component/Calendar.jsx"; | |
8 | -import AddCircleIcon from '@mui/icons-material/AddCircle'; | |
9 | -import PersonIcon from '@mui/icons-material/Person'; | |
10 | - | |
11 | - | |
12 | -export default function Main2() { | |
13 | - | |
14 | - const tableHead = [ | |
15 | - "연번", | |
16 | - "계약업체명", | |
17 | - "반납/교환", | |
18 | - "담당자 연락처", | |
19 | - "주소", | |
20 | - ]; | |
21 | - const Key = [ | |
22 | - "name", | |
23 | - "level_of_care", | |
24 | - "birth", | |
25 | - "phone", | |
26 | - "address", | |
27 | - ]; | |
28 | - const content = [ | |
29 | - { | |
30 | - name: "1", | |
31 | - level_of_care: "A복지관", | |
32 | - birth: "교환", | |
33 | - phone: "010-1234-5678", | |
34 | - address: "경상북도 군위군 삼국유사면", | |
35 | - }, | |
36 | - { | |
37 | - name: "2", | |
38 | - level_of_care: "B병원", | |
39 | - birth: "반납", | |
40 | - phone: "010-3333-3333", | |
41 | - address: "경상북도 군위군 삼국유사면", | |
42 | - }, | |
43 | - { | |
44 | - name: "3", | |
45 | - level_of_care: "C복지관", | |
46 | - birth: "교환", | |
47 | - phone: "010-3333-4444", | |
48 | - address: "경상북도 군위군 삼국유사면", | |
49 | - }, | |
50 | - { | |
51 | - name: "4", | |
52 | - level_of_care: "D복지관", | |
53 | - birth: "교환", | |
54 | - phone: "010-3333-5555", | |
55 | - address: "경상북도 군위군 삼국유사면", | |
56 | - }, | |
57 | - { | |
58 | - name: "5", | |
59 | - level_of_care: "E복지관", | |
60 | - birth: "반납", | |
61 | - phone: "010-3333-6666", | |
62 | - address: "경상북도 군위군 삼국유사면", | |
63 | - }, | |
64 | - ]; | |
65 | - const tableHead2 = [ | |
66 | - "연번", | |
67 | - "계약업체명", | |
68 | - "반납/교환", | |
69 | - "담당자 연락처", | |
70 | - "주소", | |
71 | - ]; | |
72 | - const Key2 = [ | |
73 | - "name", | |
74 | - "level_of_care", | |
75 | - "birth", | |
76 | - "phone", | |
77 | - "address", | |
78 | - ]; | |
79 | - const content2 = [ | |
80 | - { | |
81 | - name: "1", | |
82 | - level_of_care: "A복지관", | |
83 | - birth: "교환", | |
84 | - phone: "010-1234-5678", | |
85 | - address: "경상북도 군위군 삼국유사면", | |
86 | - }, | |
87 | - { | |
88 | - name: "2", | |
89 | - level_of_care: "B병원", | |
90 | - birth: "반납", | |
91 | - phone: "010-3333-3333", | |
92 | - address: "경상북도 군위군 삼국유사면", | |
93 | - }, | |
94 | - { | |
95 | - name: "3", | |
96 | - level_of_care: "C복지관", | |
97 | - birth: "교환", | |
98 | - phone: "010-3333-4444", | |
99 | - address: "경상북도 군위군 삼국유사면", | |
100 | - }, | |
101 | - { | |
102 | - name: "4", | |
103 | - level_of_care: "D복지관", | |
104 | - birth: "교환", | |
105 | - phone: "010-3333-5555", | |
106 | - address: "경상북도 군위군 삼국유사면", | |
107 | - }, | |
108 | - { | |
109 | - name: "5", | |
110 | - level_of_care: "E복지관", | |
111 | - birth: "반납", | |
112 | - phone: "010-3333-6666", | |
113 | - address: "경상북도 군위군 삼국유사면", | |
114 | - }, | |
115 | - ]; | |
116 | - | |
117 | - return ( | |
118 | - <main> | |
119 | - <div className="main-grid-agency"> | |
120 | - <ul className="content-box statistics flex combine-left"> | |
121 | - <li> | |
122 | - <p>전체 장비 대여수</p> | |
123 | - <p>200개</p> | |
124 | - </li> | |
125 | - <li> | |
126 | - <p>계약 업체 수</p> | |
127 | - <p>20개 </p> | |
128 | - </li> | |
129 | - <li> | |
130 | - <p>교환 예정 장비 수</p> | |
131 | - <p>3개</p> | |
132 | - </li> | |
133 | - <li> | |
134 | - <p>반납 예정 장비 수</p> | |
135 | - <p>10개</p> | |
136 | - </li> | |
137 | - </ul> | |
138 | - <div className="content-box combine-left"> | |
139 | - <div className="flex margin-bottom"> | |
140 | - <Title title={"금일 반납/교환 예정 리스트"} explanation={"장비 반납/교환 리스트를 확인하세요."} /> | |
141 | - <AddCircleIcon sx={{ fontSize: 20, color: "#1976d2" }} /> | |
142 | - </div> | |
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 | - | |
148 | - </div> | |
149 | - <div className="content-box combine-left"> | |
150 | - <div className="flex margin-bottom"> | |
151 | - <Title title={"약상자 추가 예정 리스트"} explanation={"장비 반납/교환 리스트를 확인하세요."} /> | |
152 | - <AddCircleIcon sx={{ fontSize: 20, color: "#1976d2" }} /> | |
153 | - </div> | |
154 | - <Table head={tableHead2} contents={content2} contentKey={Key2} /> | |
155 | - </div> | |
156 | - </div> | |
157 | - </main> | |
158 | - ); | |
159 | -} |
+++ client/views/pages/main/Main_agency.jsx
... | ... | @@ -0,0 +1,160 @@ |
1 | +import React from "react"; | |
2 | +import Title from "../../component/Title.jsx"; | |
3 | +import Table from "../../component/Table.jsx"; | |
4 | +import Map from "../../component/chart/Map.jsx"; | |
5 | +import Chart from "../../component/chart/Chart.jsx"; | |
6 | +import Chart5 from "../../component/chart/Chart5.jsx"; | |
7 | +import Chart2 from "../../component/chart/Chart2.jsx"; | |
8 | +import Chart2_agency from "../../component/chart/Chart2_agency.jsx"; | |
9 | +import Chart4 from "../../component/chart/Chart4.jsx"; | |
10 | +import ClusteredColumnChart from "../../component/chart/ClusteredColumnChart.jsx"; | |
11 | +import Donut1 from "../../component/chart/Donut1.jsx"; | |
12 | +import RowChart from "../../component/chart/RowChart.jsx"; | |
13 | +import AddCircleIcon from "@mui/icons-material/AddCircle"; | |
14 | +import Calendar_agency from "../../component/Calendar_agency.jsx"; | |
15 | +import BatteryCharging20Icon from '@mui/icons-material/BatteryCharging20'; | |
16 | +import DeviceThermostatIcon from '@mui/icons-material/DeviceThermostat'; | |
17 | +import MedicationIcon from '@mui/icons-material/Medication'; | |
18 | +import ElderlyIcon from '@mui/icons-material/Elderly'; | |
19 | + | |
20 | +export default function Main2() { | |
21 | + const tableHead = ["방문날짜", "방문사유", "방문 상세 사유"]; | |
22 | + const Key = ["date", "reason", "detail_reason"]; | |
23 | + const content = [ | |
24 | + { | |
25 | + date: "2022.12.12", | |
26 | + reason: "어르신케어", | |
27 | + detail_reason: "하루동안 미복약으로 방문. 방문시 두통을 호소하셔 병원 동행", | |
28 | + }, | |
29 | + ]; | |
30 | + | |
31 | + //노인리스트 | |
32 | + const tableHead2 = [ | |
33 | + "이름", | |
34 | + "요양등급", | |
35 | + "생년월일", | |
36 | + "연락처", | |
37 | + "주소", | |
38 | + "기저질환", | |
39 | + ]; | |
40 | + const Key2 = [ | |
41 | + "name", | |
42 | + "level_of_care", | |
43 | + "birth", | |
44 | + "phone", | |
45 | + "address", | |
46 | + "management_number", | |
47 | + ]; | |
48 | + const content2 = [ | |
49 | + { | |
50 | + name: "김복남", | |
51 | + level_of_care: "1등급", | |
52 | + birth: "1948.11.15", | |
53 | + phone: "010-1234-5678", | |
54 | + address: "경상북도 군위군 삼국유사면", | |
55 | + management_number: "혈압", | |
56 | + }, | |
57 | + { | |
58 | + name: "홍길동", | |
59 | + level_of_care: "2등급", | |
60 | + birth: "1948.05.18", | |
61 | + phone: "010-3333-3333", | |
62 | + address: "경상북도 군위군 삼국유사면", | |
63 | + management_number: "당뇨", | |
64 | + }, | |
65 | + { | |
66 | + name: "김말순", | |
67 | + level_of_care: "3등급", | |
68 | + birth: "1939.03.19", | |
69 | + phone: "010-3333-4444", | |
70 | + address: "경상북도 군위군 삼국유사면", | |
71 | + management_number: "천식", | |
72 | + }, | |
73 | + { | |
74 | + name: "신정길", | |
75 | + level_of_care: "1등급", | |
76 | + birth: "1945.05.19", | |
77 | + phone: "010-3333-5555", | |
78 | + address: "경상북도 군위군 삼국유사면", | |
79 | + management_number: "폐렴", | |
80 | + }, | |
81 | + { | |
82 | + name: "김정남", | |
83 | + level_of_care: "1등급", | |
84 | + birth: "1945.05.19", | |
85 | + phone: "010-3333-6666", | |
86 | + address: "경상북도 군위군 삼국유사면", | |
87 | + management_number: "인지장애", | |
88 | + }, | |
89 | + ]; | |
90 | + | |
91 | + return ( | |
92 | + <main> | |
93 | + <div className="main-grid-agency"> | |
94 | + <ul className="content-box statistics" background="#f7acba"> | |
95 | + <li> | |
96 | + <p><ElderlyIcon sx={{ width: "50px", height: "50px", color: "#ffffff", background:"#bf0629", borderRadius:"50px" }}/></p> | |
97 | + <p>나의 관리 대상자</p> | |
98 | + <p>40</p> | |
99 | + </li> | |
100 | + </ul> | |
101 | + <ul className="content-box statistics" background="#8ef3d1"> | |
102 | + <li> | |
103 | + <p><MedicationIcon sx={{ width: "50px", height: "50px", color: "#ffffff", background:"#076143", borderRadius:"50px" }}/></p> | |
104 | + <p>미복약 위험 대상자</p> | |
105 | + <p>40</p> | |
106 | + </li> | |
107 | + </ul> | |
108 | + <ul className="content-box statistics" background="#ebe7b9" > | |
109 | + <li> | |
110 | + <p><DeviceThermostatIcon sx={{ width: "50px", height: "50px", color: "#ffffff", background:"#f1de05", borderRadius:"50px" }}/></p> | |
111 | + <p>댁내 온도 위험 대상자</p> | |
112 | + <p>40</p> | |
113 | + </li> | |
114 | + </ul> | |
115 | + <ul className="content-box statistics" background="#5f9af3"> | |
116 | + <li> | |
117 | + <p><BatteryCharging20Icon sx={{ width: "50px", height: "50px", color: "#ffffff", background:"#5f9af3", borderRadius:"50px" }}/></p> | |
118 | + <p>배터리 부족 대상자 </p> | |
119 | + <p>40</p> | |
120 | + </li> | |
121 | + </ul> | |
122 | + | |
123 | + <div className="content-box bg-1 combine-left-government2 combine-middle-government"> | |
124 | + <div className="flex"> | |
125 | + <Title title={"약상자 사용자 수(명)"} explanation={"월별 약상자 사용 인원"} /> | |
126 | + <AddCircleIcon sx={{ fontSize: 20, color: "#1976d2" }} /> | |
127 | + </div> | |
128 | + <Chart2 /> | |
129 | + </div> | |
130 | + <div className="content-box bg-2 combine-left-government2 combine-bottom-government6"> | |
131 | + <div className="flex"> | |
132 | + <Title title={"복용률 통계"} explanation={"월별 약상자 사용 인원"} /> | |
133 | + <AddCircleIcon sx={{ fontSize: 20, color: "#1976d2" }} /> | |
134 | + </div> | |
135 | + <Chart2_agency /> | |
136 | + </div> | |
137 | + <div className="content-box bg-1 combine-left-government2 combine-bottom-government7"> | |
138 | + <div className="flex"> | |
139 | + <Title title={"월별 복지사 인원 및 인건비 현황"} explanation={"월별 약상자 사용 인원"} /> | |
140 | + <AddCircleIcon sx={{ fontSize: 20, color: "#1976d2" }} /> | |
141 | + </div> | |
142 | + <Chart /> | |
143 | + </div> | |
144 | + <div className="content-box combine-right-government2 combine-bottom-government5"> | |
145 | + <div className="flex"> | |
146 | + <Title title={"방문한지 2"} explanation={"최근 6개월간 방문 횟수의 변화를 확인할 수 있습니다."} /> | |
147 | + <AddCircleIcon sx={{ fontSize: 20, color: "#1976d2" }} /> | |
148 | + </div> | |
149 | + <RowChart /> | |
150 | + </div> | |
151 | + <div className="content-box combine-right-government combine-middle-government"> | |
152 | + <div className="flex"> | |
153 | + <Title title={"방문 달력"} explanation={"방문 일정을 캘린더로 관리하세요."} /> | |
154 | + </div> | |
155 | + <Calendar_agency /> | |
156 | + </div> | |
157 | + </div> | |
158 | + </main> | |
159 | + ); | |
160 | +} |
+++ client/views/pages/main/Main_government.jsx
... | ... | @@ -0,0 +1,155 @@ |
1 | +import React,{useState} from "react"; | |
2 | +import Title from "../../component/Title.jsx"; | |
3 | +import Map from "../../component/chart/Map.jsx"; | |
4 | +import Chart5 from "../../component/chart/Chart5.jsx"; | |
5 | +import Chart2 from "../../component/chart/Chart2.jsx"; | |
6 | +import Donut1 from "../../component/chart/Donut1.jsx"; | |
7 | +import RowChart from "../../component/chart/RowChart.jsx"; | |
8 | +import AddCircleIcon from "@mui/icons-material/AddCircle"; | |
9 | +import BatteryCharging20Icon from '@mui/icons-material/BatteryCharging20'; | |
10 | +import DeviceThermostatIcon from '@mui/icons-material/DeviceThermostat'; | |
11 | +import MedicationIcon from '@mui/icons-material/Medication'; | |
12 | +import ElderlyIcon from '@mui/icons-material/Elderly'; | |
13 | + | |
14 | +export default function Main2() { | |
15 | + const [cityName, setCityName] = useState("군위군"); | |
16 | + // const tableHead = ["방문날짜", "방문사유", "방문 상세 사유"]; | |
17 | + // const Key = ["date", "reason", "detail_reason"]; | |
18 | + // const content = [ | |
19 | + // { | |
20 | + // date: "2022.12.12", | |
21 | + // reason: "어르신케어", | |
22 | + // detail_reason: "하루동안 미복약으로 방문. 방문시 두통을 호소하셔 병원 동행", | |
23 | + // }, | |
24 | + // ]; | |
25 | + | |
26 | + // //노인리스트 | |
27 | + // const tableHead2 = [ | |
28 | + // "이름", | |
29 | + // "요양등급", | |
30 | + // "생년월일", | |
31 | + // "연락처", | |
32 | + // "주소", | |
33 | + // "기저질환", | |
34 | + // ]; | |
35 | + // const Key2 = [ | |
36 | + // "name", | |
37 | + // "level_of_care", | |
38 | + // "birth", | |
39 | + // "phone", | |
40 | + // "address", | |
41 | + // "management_number", | |
42 | + // ]; | |
43 | + // const content2 = [ | |
44 | + // { | |
45 | + // name: "김복남", | |
46 | + // level_of_care: "1등급", | |
47 | + // birth: "1948.11.15", | |
48 | + // phone: "010-1234-5678", | |
49 | + // address: "경상북도 군위군 삼국유사면", | |
50 | + // management_number: "혈압", | |
51 | + // }, | |
52 | + // { | |
53 | + // name: "홍길동", | |
54 | + // level_of_care: "2등급", | |
55 | + // birth: "1948.05.18", | |
56 | + // phone: "010-3333-3333", | |
57 | + // address: "경상북도 군위군 삼국유사면", | |
58 | + // management_number: "당뇨", | |
59 | + // }, | |
60 | + // { | |
61 | + // name: "김말순", | |
62 | + // level_of_care: "3등급", | |
63 | + // birth: "1939.03.19", | |
64 | + // phone: "010-3333-4444", | |
65 | + // address: "경상북도 군위군 삼국유사면", | |
66 | + // management_number: "천식", | |
67 | + // }, | |
68 | + // { | |
69 | + // name: "신정길", | |
70 | + // level_of_care: "1등급", | |
71 | + // birth: "1945.05.19", | |
72 | + // phone: "010-3333-5555", | |
73 | + // address: "경상북도 군위군 삼국유사면", | |
74 | + // management_number: "폐렴", | |
75 | + // }, | |
76 | + // { | |
77 | + // name: "김정남", | |
78 | + // level_of_care: "1등급", | |
79 | + // birth: "1945.05.19", | |
80 | + // phone: "010-3333-6666", | |
81 | + // address: "경상북도 군위군 삼국유사면", | |
82 | + // management_number: "인지장애", | |
83 | + // }, | |
84 | + // ]; | |
85 | + | |
86 | + return ( | |
87 | + <main> | |
88 | + <div className="main-grid-government"> | |
89 | + <ul className="content-box statistics" background="#f7acba"> | |
90 | + <li> | |
91 | + <p><ElderlyIcon sx={{ width: "50px", height: "50px", color: "#ffffff", background:"#bf0629", borderRadius:"50px" }}/></p> | |
92 | + <p>{cityName} 전체 대상자</p> | |
93 | + <p>400</p> | |
94 | + </li> | |
95 | + </ul> | |
96 | + <ul className="content-box statistics" background="#8ef3d1"> | |
97 | + <li> | |
98 | + <p><MedicationIcon sx={{ width: "50px", height: "50px", color: "#ffffff", background:"#076143", borderRadius:"50px" }}/></p> | |
99 | + <p>{cityName} 미복약 위험 대상자</p> | |
100 | + <p>400</p> | |
101 | + </li> | |
102 | + </ul> | |
103 | + <ul className="content-box statistics" background="#ebe7b9" > | |
104 | + <li> | |
105 | + <p><DeviceThermostatIcon sx={{ width: "50px", height: "50px", color: "#ffffff", background:"#f1de05", borderRadius:"50px" }}/></p> | |
106 | + <p>{cityName} 댁내 온도 위험 대상자</p> | |
107 | + <p>400</p> | |
108 | + </li> | |
109 | + </ul> | |
110 | + <ul className="content-box statistics" background="#5f9af3"> | |
111 | + <li> | |
112 | + <p><BatteryCharging20Icon sx={{ width: "50px", height: "50px", color: "#ffffff", background:"#5f9af3", borderRadius:"50px" }}/></p> | |
113 | + <p>{cityName} 배터리 부족 대상자 </p> | |
114 | + <p>400</p> | |
115 | + </li> | |
116 | + </ul> | |
117 | + <div className="content-box combine-all-government combine-bottom-government2"> | |
118 | + <div className="flex"> | |
119 | + <Title title={`${cityName} 월별 방문 횟수`} explanation={"최근 6개월간 방문 횟수의 변화를 확인할 수 있습니다."} /> | |
120 | + <AddCircleIcon sx={{ fontSize: 20, color: "#1976d2" }} /> | |
121 | + </div> | |
122 | + <RowChart /> | |
123 | + </div> | |
124 | + <div className="content-box combine-left-government combine-bottom-government2 main-main"> | |
125 | + <div className="flex"> | |
126 | + <Title title={"지역별 케어 노인 분포 현황"} explanation={"지역 선택 시 해당 지역의 시니어리스트가 보여집니다."} /> | |
127 | + <AddCircleIcon sx={{ fontSize: 20, color: "#1976d2" }} /> | |
128 | + </div> | |
129 | + <Map setCityName={setCityName} /> | |
130 | + </div> | |
131 | + <div className="content-box combine-left-government2"> | |
132 | + <div className="flex"> | |
133 | + <Title title={`${cityName} 복용률 평균`} explanation={"해당 지역의 대상자 복용률이 그래프로 보여집니다."} /> | |
134 | + <AddCircleIcon sx={{ fontSize: 20, color: "#1976d2" }} /> | |
135 | + </div> | |
136 | + <Chart2 /> | |
137 | + </div> | |
138 | + <div className="content-box combine-right-government2"> | |
139 | + <div className="flex"> | |
140 | + <Title title={`기관별 시니어 등록 현황`} explanation={"약상자 사용자의 데이터 차트가 보여집니다."} /> | |
141 | + <AddCircleIcon sx={{ fontSize: 20, color: "#1976d2" }} /> | |
142 | + </div> | |
143 | + <Chart5 /> | |
144 | + </div> | |
145 | + <div className="content-box combine-right-government"> | |
146 | + <div className="flex"> | |
147 | + <Title title={`기관별 약상자 사용 현황`} explanation={""} /> | |
148 | + <AddCircleIcon sx={{ fontSize: 20, color: "#1976d2" }} /> | |
149 | + </div> | |
150 | + <Donut1 /> | |
151 | + </div> | |
152 | + </div> | |
153 | + </main> | |
154 | + ); | |
155 | +} |
+++ client/views/pages/main/Main_guardian.jsx
... | ... | @@ -0,0 +1,146 @@ |
1 | +import React from "react"; | |
2 | +import Title from "../../component/Title.jsx"; | |
3 | +import Table from "../../component/Table.jsx"; | |
4 | +import Chart1 from "../../component/chart/Chart1.jsx"; | |
5 | +import CalendarComponent from "../../component/Calendar.jsx"; | |
6 | +import AddCircleIcon from "@mui/icons-material/AddCircle"; | |
7 | +import CallIcon from '@mui/icons-material/Call'; | |
8 | +import ClearIcon from '@mui/icons-material/Clear'; | |
9 | +import BatteryCharging20Icon from '@mui/icons-material/BatteryCharging20'; | |
10 | +import DeviceThermostatIcon from '@mui/icons-material/DeviceThermostat'; | |
11 | +import MedicationIcon from '@mui/icons-material/Medication'; | |
12 | +import AssignmentTurnedInIcon from '@mui/icons-material/AssignmentTurnedIn'; | |
13 | +import CheckCircleOutlineIcon from '@mui/icons-material/CheckCircleOutline'; | |
14 | + | |
15 | +export default function Main_guardian() { | |
16 | + const tableHead1 = ["", "", "", "", "", ""]; | |
17 | + const Key1 = ["morning", "morning2", "lunch","lunch2", "dinner","dinner2"]; | |
18 | + const content1 = [ | |
19 | + { | |
20 | + morning: "아침", | |
21 | + morning2:( | |
22 | + <CheckCircleOutlineIcon sx={{ width: "3rem", height: "3rem", color: "#067943", borderRadius: "50px" }}/> | |
23 | + ), | |
24 | + lunch: "점심", | |
25 | + lunch2: ( | |
26 | + <CheckCircleOutlineIcon sx={{ width: "3rem", height: "3rem", color: "#067943", borderRadius: "50px" }}/> | |
27 | + ), | |
28 | + dinner: "저녁", | |
29 | + dinner2: ( | |
30 | + <CheckCircleOutlineIcon sx={{ width: "3rem", height: "3rem", color: "#067943", borderRadius: "50px" }}/> | |
31 | + ), | |
32 | + } | |
33 | + ]; | |
34 | + const tableHead2 = ["", "", "", "", "", ""]; | |
35 | + const Key2 = ["morning", "morning2", "lunch","lunch2", "dinner","dinner2"]; | |
36 | + const content2 = [ | |
37 | + { | |
38 | + morning: "아침", | |
39 | + morning2:( | |
40 | + <ClearIcon sx={{ width: "3rem", height: "3rem", color: "#bf0629", borderRadius: "50px" }}/> | |
41 | + ), | |
42 | + lunch: "점심", | |
43 | + lunch2: ( | |
44 | + <ClearIcon sx={{ width: "3rem", height: "3rem", color: "#bf0629", borderRadius: "50px" }}/> | |
45 | + ), | |
46 | + dinner: "저녁", | |
47 | + dinner2: ( | |
48 | + <ClearIcon sx={{ width: "3rem", height: "3rem", color: "#bf0629", borderRadius: "50px" }}/> | |
49 | + ), | |
50 | + } | |
51 | + ]; | |
52 | + const tableHead3 = ["월", "화", "수", "목", "금", "토", "일"]; | |
53 | + const Key3 = ["mon", "tue", "wed","thu", "fri","sat","sun"]; | |
54 | + const content3 = [ | |
55 | + { | |
56 | + mon: "24°C", | |
57 | + tue: "24°C", | |
58 | + wed: "24°C", | |
59 | + thu: "24°C", | |
60 | + fri: "24°C", | |
61 | + sat: "24°C", | |
62 | + sun: "24°C", | |
63 | + } | |
64 | + ]; | |
65 | + | |
66 | + | |
67 | + return ( | |
68 | + <> | |
69 | + <main> | |
70 | + <div className="main-grid-guardian"> | |
71 | + <ul className="content-box statistics"> | |
72 | + <li className="flex-start"> | |
73 | + <p><AssignmentTurnedInIcon sx={{ width: "5rem", height: "5rem", color: "#bf0629", borderRadius: "50px" }} /></p> | |
74 | + <p>방문 체크</p> | |
75 | + <p>이번달 보호사님이 방문한 횟수는 총 4회 입니다.</p> | |
76 | + </li> | |
77 | + <Calendar /> | |
78 | + </ul> | |
79 | + <ul className="content-box statistics"> | |
80 | + <li className="flex-start"> | |
81 | + <p><MedicationIcon sx={{ width: "5rem", height: "5rem", color: "#0dd390", borderRadius: "50px" }} /></p> | |
82 | + <p>복약 체크</p> | |
83 | + <p>약을 잘 복용하고 계신지 체크해주세요</p> | |
84 | + </li> | |
85 | + <li className="flex"> | |
86 | + <p className="guardian-table-text">어제</p> | |
87 | + <p className="guardian-table-inner"><Table | |
88 | + className={"guardian-table"} | |
89 | + head={tableHead1} | |
90 | + contents={content1} | |
91 | + contentKey={Key1} | |
92 | + /></p> | |
93 | + </li> | |
94 | + <li className="flex"> | |
95 | + <p className="guardian-table-text">2일 전</p> | |
96 | + <p className="guardian-table-inner"><Table | |
97 | + className={"guardian-table"} | |
98 | + head={tableHead2} | |
99 | + contents={content2} | |
100 | + contentKey={Key2} | |
101 | + /></p> | |
102 | + </li> | |
103 | + <li className="flex"> | |
104 | + <p className="guardian-table-text">3일 전</p> | |
105 | + <p className="guardian-table-inner"><Table | |
106 | + className={"guardian-table"} | |
107 | + head={tableHead1} | |
108 | + contents={content1} | |
109 | + contentKey={Key1} | |
110 | + /></p> | |
111 | + </li> | |
112 | + </ul> | |
113 | + <ul className="content-box statistics"> | |
114 | + <li className="flex-start"> | |
115 | + <p><DeviceThermostatIcon sx={{ width: "5rem", height: "5rem", color: "#f1de05", borderRadius: "50px" }} /></p> | |
116 | + <p>온도 체크</p> | |
117 | + <p>댁내 온도가 적절한지 체크해보세요.</p> | |
118 | + </li> | |
119 | + <li className="flex"> | |
120 | + <p className="guardian-table-inner"><Table | |
121 | + className={"guardian-table1"} | |
122 | + head={tableHead3} | |
123 | + contents={content3} | |
124 | + contentKey={Key3} | |
125 | + /></p> | |
126 | + </li> | |
127 | + </ul> | |
128 | + <ul className="content-box statistics"> | |
129 | + <li className="flex-start"> | |
130 | + <p><BatteryCharging20Icon sx={{ width: "5rem", height: "5rem", color: "#5f9af3", borderRadius: "50px" }} /></p> | |
131 | + <p>현재 스마트 약상자의 배터리가 40% 입니다.</p> | |
132 | + <p></p> | |
133 | + </li> | |
134 | + <li> | |
135 | + <p className="red">충전이 필요합니다.</p> | |
136 | + </li> | |
137 | + </ul> | |
138 | + <div className="content-box combine-left combine-all-government"> | |
139 | + <Title title={"김복남 어르신"} explanation={"방문, 복약, 온도, 배터리 현황을 확인하세요."} /> | |
140 | + | |
141 | + </div> | |
142 | + </div> | |
143 | + </main> | |
144 | + </> | |
145 | + ); | |
146 | +} |
--- client/views/pages/authority/AuthorityManagement.jsx
+++ client/views/pages/setting/AuthorityManagement.jsx
... | ... | @@ -178,6 +178,57 @@ |
178 | 178 |
<div className="btn-wrap flex-end"> |
179 | 179 |
<Button className={"btn-small green-btn"} btnName={"저장"} /> |
180 | 180 |
</div> |
181 |
+ <SubTitle className="margin-bottom" explanation={"각 메뉴에 대한 설명"} /> |
|
182 |
+ <table className="explain-table"> |
|
183 |
+ <thead> |
|
184 |
+ <tr> |
|
185 |
+ <th rowSpan="2">메뉴</th> |
|
186 |
+ <th rowSpan="2">소메뉴</th> |
|
187 |
+ <th rowSpan="2">상세설명</th> |
|
188 |
+ </tr> |
|
189 |
+ </thead> |
|
190 |
+ <tbody> |
|
191 |
+ <tr> |
|
192 |
+ <td>사용자 관리</td> |
|
193 |
+ <td>-</td> |
|
194 |
+ <td>사용자(노인, 보호자 등)를 등록하고 삭제할 수 있다.</td> |
|
195 |
+ </tr> |
|
196 |
+ <tr> |
|
197 |
+ <td rowSpan="3">건강관리</td> |
|
198 |
+ <td>복약관리</td> |
|
199 |
+ <td>사용자(노인)의 아침, 점심, 저녁 복약여부를 확인하고 관리할 수 있다.</td> |
|
200 |
+ </tr> |
|
201 |
+ <tr> |
|
202 |
+ <td>댁내온도관리</td> |
|
203 |
+ <td>사용자(노인)의 아침, 점심, 저녁 댁내온도를 확인하고 관리할 수 있다.</td> |
|
204 |
+ </tr> |
|
205 |
+ <tr> |
|
206 |
+ <td>복약통계</td> |
|
207 |
+ <td>시행기관에 등록되어 있는 사용자(노인)의 복약 통계 자료를 볼 수 있다.</td> |
|
208 |
+ </tr> |
|
209 |
+ <tr> |
|
210 |
+ <td>방문 관리</td> |
|
211 |
+ <td>-</td> |
|
212 |
+ <td>시행기관의 복지사가 사용자(노인)을 방문한 내역을 확인하고 관리할 수 있다.</td> |
|
213 |
+ </tr> |
|
214 |
+ <tr> |
|
215 |
+ <td>장비 관리</td> |
|
216 |
+ <td>-</td> |
|
217 |
+ <td>시행기관에서 관리하고 있는 장비(전체, 미사용, 사용)현황을 관리하고 사용자를 등록할 수 있다.</td> |
|
218 |
+ </tr> |
|
219 |
+ <tr> |
|
220 |
+ <td>고객지원센터</td> |
|
221 |
+ <td>-</td> |
|
222 |
+ <td>장비업체에 교환/반납 요청을 할 수 있다.</td> |
|
223 |
+ </tr> |
|
224 |
+ <tr> |
|
225 |
+ <td>Q&A</td> |
|
226 |
+ <td>-</td> |
|
227 |
+ <td>사용자(노인, 보호자 등)질문을 등록하고 답변할 수 있다.</td> |
|
228 |
+ </tr> |
|
229 |
+ |
|
230 |
+ </tbody> |
|
231 |
+ </table> |
|
181 | 232 |
</div> |
182 | 233 |
</div> |
183 | 234 |
</div> |
+++ client/views/pages/setting/RiskSet.jsx
... | ... | @@ -0,0 +1,239 @@ |
1 | +import React from "react"; | |
2 | +import Table from "../../component/Table.jsx"; | |
3 | +import Button from "../../component/Button.jsx"; | |
4 | +import SubTitle from "../../component/SubTitle.jsx"; | |
5 | +import ContentTitle from "../../component/ContentTitle.jsx"; | |
6 | +import Modal from "../../component/Modal.jsx"; | |
7 | +import { useNavigate } from "react-router"; | |
8 | + | |
9 | +export default function EquipmentManagementSelect() { | |
10 | + const navigate = useNavigate(); | |
11 | + const thead1 = [ | |
12 | + "", | |
13 | + "", | |
14 | + "", | |
15 | + "", | |
16 | + "", | |
17 | + "", | |
18 | + ]; | |
19 | + const key1 = [ | |
20 | + "text", | |
21 | + "date", | |
22 | + "text1", | |
23 | + "text4", | |
24 | + "temp", | |
25 | + "text2", | |
26 | + "text3",]; | |
27 | + const content1 = [ | |
28 | + { | |
29 | + text: "댁내온도가 최근", | |
30 | + date: ( | |
31 | + <select style={{ | |
32 | + width: "100%" | |
33 | + }}> | |
34 | + <option value="">1일</option> | |
35 | + <option value="">3일</option> | |
36 | + <option value="">일주일</option> | |
37 | + <option value="">한달</option> | |
38 | + </select> | |
39 | + ), | |
40 | + text1: "평균 온도가", | |
41 | + text4: ( | |
42 | + <select style={{ | |
43 | + width: "100%" | |
44 | + }}> | |
45 | + <option value="">영상</option> | |
46 | + <option value="">영하</option> | |
47 | + </select> | |
48 | + ), | |
49 | + temp: ( | |
50 | + <select style={{ | |
51 | + width: "100%" | |
52 | + }}> | |
53 | + <option value="">5℃</option> | |
54 | + <option value="">10℃</option> | |
55 | + <option value="">15℃</option> | |
56 | + <option value="">20℃</option> | |
57 | + <option value="">25℃</option> | |
58 | + <option value="">30℃</option> | |
59 | + <option value="">35℃</option> | |
60 | + <option value="">40℃</option> | |
61 | + <option value="">45℃</option> | |
62 | + <option value="">50℃</option> | |
63 | + <option value="">55℃</option> | |
64 | + </select> | |
65 | + ), | |
66 | + text2: ( | |
67 | + <select style={{ | |
68 | + width: "100%" | |
69 | + }}> | |
70 | + <option value="">이하</option> | |
71 | + <option value="">이상</option> | |
72 | + </select> | |
73 | + ), | |
74 | + text3: "일 경우 위험알림으로 지정합니다.", | |
75 | + }, | |
76 | + ]; | |
77 | + const thead2 = [ | |
78 | + "", | |
79 | + "", | |
80 | + "", | |
81 | + "", | |
82 | + ]; | |
83 | + const key2 = [ | |
84 | + "text", | |
85 | + "date", | |
86 | + "text1", | |
87 | + "text2",]; | |
88 | + const content2 = [ | |
89 | + { | |
90 | + text: "미복약 횟수가 최근", | |
91 | + date: ( | |
92 | + <select style={{ | |
93 | + width: "100%" | |
94 | + }}> | |
95 | + <option value="">1일</option> | |
96 | + <option value="">3일</option> | |
97 | + <option value="">일주일</option> | |
98 | + <option value="">한달</option> | |
99 | + </select> | |
100 | + ), | |
101 | + text1: ( | |
102 | + <select style={{ | |
103 | + width: "100%" | |
104 | + }}> | |
105 | + <option value="">3회</option> | |
106 | + <option value="">6회</option> | |
107 | + <option value="">9회</option> | |
108 | + <option value="">12회</option> | |
109 | + <option value="">15회</option> | |
110 | + <option value="">21회 이상</option> | |
111 | + </select> | |
112 | + ), | |
113 | + text2: "일 경우 위험알림으로 지정합니다.", | |
114 | + }, | |
115 | + ]; | |
116 | + const thead3 = [ | |
117 | + "", | |
118 | + "", | |
119 | + "", | |
120 | + "", | |
121 | + "", | |
122 | + "", | |
123 | + ]; | |
124 | + const key3 = [ | |
125 | + "text", | |
126 | + "date", | |
127 | + "text1", | |
128 | + "text4", | |
129 | + "temp", | |
130 | + "text2", | |
131 | + "text3",]; | |
132 | + const content3 = [ | |
133 | + { | |
134 | + text: "배터리 잔량이 최근", | |
135 | + date: ( | |
136 | + <select style={{ | |
137 | + width: "100%" | |
138 | + }}> | |
139 | + <option value="">1일</option> | |
140 | + <option value="">3일</option> | |
141 | + <option value="">일주일</option> | |
142 | + <option value="">한달</option> | |
143 | + </select> | |
144 | + ), | |
145 | + text4: ( | |
146 | + <select style={{ | |
147 | + width: "100%" | |
148 | + }}> | |
149 | + <option value="">10%</option> | |
150 | + <option value="">20%</option> | |
151 | + <option value="">30%</option> | |
152 | + <option value="">40%</option> | |
153 | + <option value="">50%</option> | |
154 | + </select> | |
155 | + ), | |
156 | + text3: "이하일 경우 위험알림으로 지정합니다.", | |
157 | + }, | |
158 | + ]; | |
159 | + | |
160 | + | |
161 | + | |
162 | + const data = [ | |
163 | + { | |
164 | + id: 1, | |
165 | + title: "온도 관리", | |
166 | + description: ( | |
167 | + <Table | |
168 | + className={"protector-user"} | |
169 | + head={thead1} | |
170 | + contents={content1} | |
171 | + contentKey={key1} | |
172 | + /> | |
173 | + ), | |
174 | + }, | |
175 | + { | |
176 | + id: 2, | |
177 | + title: "복약 관리", | |
178 | + description: ( | |
179 | + <Table | |
180 | + className={"caregiver-user"} | |
181 | + head={thead2} | |
182 | + contents={content2} | |
183 | + contentKey={key2} | |
184 | + /> | |
185 | + ), | |
186 | + }, | |
187 | + { | |
188 | + id: 3, | |
189 | + title: "배터리 관리", | |
190 | + description: ( | |
191 | + <Table | |
192 | + className={"caregiver-user"} | |
193 | + head={thead3} | |
194 | + contents={content3} | |
195 | + contentKey={key3} | |
196 | + /> | |
197 | + ), | |
198 | + }, | |
199 | + ]; | |
200 | + const [index, setIndex] = React.useState(1); | |
201 | + return ( | |
202 | + <main> | |
203 | +<ContentTitle contentTitle={"위험 기준 관리 "} /> | |
204 | + <div className="tab-container"> | |
205 | + <ul className="tab-menu"> | |
206 | + {data.map((item) => ( | |
207 | + <li | |
208 | + key={item.id} | |
209 | + className={index === item.id ? "active" : null} | |
210 | + onClick={() => setIndex(item.id)} | |
211 | + > | |
212 | + {item.title} | |
213 | + </li> | |
214 | + ))} | |
215 | + </ul> | |
216 | + <div className="content-wrap"> | |
217 | + <SubTitle | |
218 | + className="margin-bottom" | |
219 | + explanation={"지정한 기준에 따라 메인 화면에 위험 알림 대상자 수를 표시하여 줍니다."} | |
220 | + color={"#333333"} | |
221 | + /> | |
222 | + <div className="btn-wrap flex-end margin-bottom "> | |
223 | + <Button | |
224 | + className={"btn-small green-btn"} | |
225 | + btnName={"저장"} | |
226 | + /> | |
227 | + </div> | |
228 | + <ul className="tab-content"> | |
229 | + {data | |
230 | + .filter((item) => index === item.id) | |
231 | + .map((item) => ( | |
232 | + <li>{item.description}</li> | |
233 | + ))} | |
234 | + </ul> | |
235 | + </div> | |
236 | + </div> | |
237 | + </main> | |
238 | + ); | |
239 | +} |
+++ client/views/pages/user_management/AgencyInsert.jsx
... | ... | @@ -0,0 +1,70 @@ |
1 | +import React from "react"; | |
2 | +import Button from "../../component/Button.jsx"; | |
3 | +import ContentTitle from "../../component/ContentTitle.jsx"; | |
4 | + | |
5 | +export default function ServiceInsert() { | |
6 | + return ( | |
7 | + <main> | |
8 | + <div className="content-wrap"> | |
9 | + <ContentTitle contentTitle={"시행기관 등록"} /> | |
10 | + <div className="margin-bottom2 insert"> | |
11 | + {/* <div className="flex30"> | |
12 | + <div className="flex margin-bottom"> | |
13 | + <input | |
14 | + type="text" | |
15 | + name="" | |
16 | + id="" | |
17 | + className="flex80" | |
18 | + placeholder="사용자 검색" | |
19 | + /> | |
20 | + <Button btnName={"검색"} className={"flex20"} /> | |
21 | + </div> | |
22 | + <ul className="user-list"> | |
23 | + <li>검색 내역이 없습니다.</li> | |
24 | + </ul> | |
25 | + </div> */} | |
26 | + <table className="flex70 margin-bottom"> | |
27 | + <tbody className="equipment-insert"> | |
28 | + <tr> | |
29 | + <th>기관명</th> | |
30 | + <td colSpan={5}> | |
31 | + <input type="text" name="" id="" /> | |
32 | + </td> | |
33 | + </tr> | |
34 | + <tr> | |
35 | + <th>사업자번호</th> | |
36 | + <td> | |
37 | + <input type="text" name="" id="" /> | |
38 | + </td> | |
39 | + <th>사용계정(ID)</th> | |
40 | + <t> | |
41 | + <input type="text" name="" id="" /> | |
42 | + </t> | |
43 | + </tr> | |
44 | + <tr> | |
45 | + <th>담당 부서 연락처</th> | |
46 | + <td> | |
47 | + <input type="text" name="" id="" /> | |
48 | + </td> | |
49 | + <th>담당자</th> | |
50 | + <td> | |
51 | + <input type="text" name="" id="" /> | |
52 | + </td> | |
53 | + </tr> | |
54 | + <tr> | |
55 | + <th>주소</th> | |
56 | + <td colSpan={5}> | |
57 | + <input type="text" name="" id="" /> | |
58 | + </td> | |
59 | + </tr> | |
60 | + </tbody> | |
61 | + </table> | |
62 | + </div> | |
63 | + <div className="btn-wrap flex-center"> | |
64 | + <Button className={"btn-large gray-btn"} btnName={"취소"} /> | |
65 | + <Button className={"btn-large green-btn"} btnName={"등록"} /> | |
66 | + </div> | |
67 | + </div> | |
68 | + </main> | |
69 | + ); | |
70 | +} |
+++ client/views/pages/user_management/AgencySelect.jsx
... | ... | @@ -0,0 +1,126 @@ |
1 | +import React from "react"; | |
2 | +import Table from "../../component/Table.jsx"; | |
3 | +import Button from "../../component/Button.jsx"; | |
4 | +import { useNavigate } from "react-router"; | |
5 | +import AgencySearch from "../../component/AgencySearch.jsx"; | |
6 | +import ContentTitle from "../../component/ContentTitle.jsx"; | |
7 | +import SubTitle from "../../component/SubTitle.jsx"; | |
8 | + | |
9 | +export default function SeniorSelect() { | |
10 | + const navigate = useNavigate(); | |
11 | + | |
12 | + //게시판 | |
13 | + const thead = [ | |
14 | + "No", | |
15 | + "기관명", | |
16 | + "사업자번호", | |
17 | + "담당 부서 연락처(담당자)", | |
18 | + "관리 장비 개수", | |
19 | + "관리 시니어 인원", | |
20 | + "주소", | |
21 | + "사용자관리", | |
22 | + "기관통계보기", | |
23 | + ]; | |
24 | + const key = [ | |
25 | + "No", | |
26 | + "name", | |
27 | + "BusinessNumber", | |
28 | + "phone", | |
29 | + "Fax", | |
30 | + "senior", | |
31 | + "address", | |
32 | + "worker", | |
33 | + "statistics", | |
34 | + ]; | |
35 | + const content = [ | |
36 | + { | |
37 | + No: 1, | |
38 | + name: "B복지관", | |
39 | + BusinessNumber: "515-82-00000", | |
40 | + phone: "053-811-1234(김대리)", | |
41 | + Fax: "80대", | |
42 | + senior:"75명", | |
43 | + address: "경상북도 군위군 삼국유사면", | |
44 | + worker: ( | |
45 | + <Button | |
46 | + className={"btn-small gray-btn"} | |
47 | + btnName={"상세보기"} | |
48 | + onClick={() => { | |
49 | + navigate("/ProtectorSelect"); | |
50 | + }} | |
51 | + /> | |
52 | + ), | |
53 | + statistics: ( | |
54 | + <Button | |
55 | + className={"btn-small gray-btn"} | |
56 | + btnName={"통계보기"} | |
57 | + onClick={() => { | |
58 | + navigate("/MedicineStatistics"); | |
59 | + }} | |
60 | + /> | |
61 | + ), | |
62 | + }, | |
63 | + ]; | |
64 | + | |
65 | + //select option 동적 생성 | |
66 | + // const optionList = () => { | |
67 | + // let year = []; | |
68 | + // let month = []; | |
69 | + // let days = []; | |
70 | + // let currentDate = new Date(); | |
71 | + // let currentYear = currentDate.getFullYear(); | |
72 | + | |
73 | + // for (let i = 1910; i < currentYear.length; i++) { | |
74 | + // year.push(i); | |
75 | + // } | |
76 | + | |
77 | + // for (let j = 1; i < 13; j++) { | |
78 | + // month.push(j); | |
79 | + // } | |
80 | + | |
81 | + // for (let k = 1; i < 32; k++) { | |
82 | + // days.push(k); | |
83 | + // } | |
84 | + // return year, month, days; | |
85 | + // }; | |
86 | + | |
87 | + // React.useEffect(() => { | |
88 | + // optionList(); | |
89 | + // }, []); | |
90 | + | |
91 | + return ( | |
92 | + <main> | |
93 | + <div className="content-wrap"> | |
94 | + <ContentTitle contentTitle={"기관 조회"} /> | |
95 | + <div> | |
96 | + <AgencySearch /> | |
97 | + <div className="board-wrap"> | |
98 | + <div className="flex"> | |
99 | + <div className="total flex"> | |
100 | + <p className="total-equip">총 장비 개수 : 500대</p> | |
101 | + <p className="total-senior">전체 시니어(노인)인원 : 500명</p> | |
102 | + </div> | |
103 | + <div className="btn-wrap flex-end margin-bottom "> | |
104 | + <Button | |
105 | + className={"btn-small green-btn"} | |
106 | + btnName={"등록"} | |
107 | + onClick={() => { | |
108 | + navigate("/AgencyInsert"); | |
109 | + }} | |
110 | + /> | |
111 | + <Button className={"btn-small green-btn"} btnName={"삭제"} /> | |
112 | + </div> | |
113 | + </div > | |
114 | + <Table | |
115 | + className={"senior-table"} | |
116 | + head={thead} | |
117 | + contents={content} | |
118 | + contentKey={key} | |
119 | + /> | |
120 | + | |
121 | + </div> | |
122 | + </div> | |
123 | + </div> | |
124 | + </main> | |
125 | + ); | |
126 | +} |
+++ client/views/pages/user_management/ProtectorSelect.jsx
... | ... | @@ -0,0 +1,127 @@ |
1 | +import React from "react"; | |
2 | +import Table from "../../component/Table.jsx"; | |
3 | +import Button from "../../component/Button.jsx"; | |
4 | +import { useNavigate } from "react-router"; | |
5 | +import DetailSearch from "../../component/AgencySearch.jsx"; | |
6 | +import ContentTitle from "../../component/ContentTitle.jsx"; | |
7 | +import SubTitle from "../../component/SubTitle.jsx"; | |
8 | + | |
9 | +export default function SeniorSelect() { | |
10 | + const navigate = useNavigate(); | |
11 | + | |
12 | + //게시판 | |
13 | + const thead = [ | |
14 | + "No", | |
15 | + "소속기관명", | |
16 | + "이름", | |
17 | + "성별", | |
18 | + "생년월일", | |
19 | + "연락처", | |
20 | + "ID", | |
21 | + "담당 대상자(어르신) (명)", | |
22 | + ]; | |
23 | + const key = [ | |
24 | + "No", | |
25 | + "center", | |
26 | + "name", | |
27 | + "gender", | |
28 | + "birth", | |
29 | + "phone", | |
30 | + "ID", | |
31 | + "worker", | |
32 | + ]; | |
33 | + const content = [ | |
34 | + { | |
35 | + No: 1, | |
36 | + center: "A복지관", | |
37 | + name: "홍길동", | |
38 | + gender: "여", | |
39 | + birth: "920516", | |
40 | + phone: "010-1234-1234", | |
41 | + ID: "a123", | |
42 | + worker: "5명" | |
43 | + }, | |
44 | + { | |
45 | + No: 2, | |
46 | + center: "A복지관", | |
47 | + name: "홍길동", | |
48 | + gender: "여", | |
49 | + birth: "920506", | |
50 | + phone: "010-1234-1234", | |
51 | + ID: "b123", | |
52 | + worker: "5명" | |
53 | + }, | |
54 | + { | |
55 | + No: 3, | |
56 | + center: "A복지관", | |
57 | + name: "홍길동", | |
58 | + gender: "여", | |
59 | + birth: "920519", | |
60 | + phone: "010-1234-1234", | |
61 | + ID: "c123", | |
62 | + worker: "8명" | |
63 | + }, | |
64 | + | |
65 | + ]; | |
66 | + | |
67 | + //select option 동적 생성 | |
68 | + // const optionList = () => { | |
69 | + // let year = []; | |
70 | + // let month = []; | |
71 | + // let days = []; | |
72 | + // let currentDate = new Date(); | |
73 | + // let currentYear = currentDate.getFullYear(); | |
74 | + | |
75 | + // for (let i = 1910; i < currentYear.length; i++) { | |
76 | + // year.push(i); | |
77 | + // } | |
78 | + | |
79 | + // for (let j = 1; i < 13; j++) { | |
80 | + // month.push(j); | |
81 | + // } | |
82 | + | |
83 | + // for (let k = 1; i < 32; k++) { | |
84 | + // days.push(k); | |
85 | + // } | |
86 | + // return year, month, days; | |
87 | + // }; | |
88 | + | |
89 | + // React.useEffect(() => { | |
90 | + // optionList(); | |
91 | + // }, []); | |
92 | + | |
93 | + return ( | |
94 | + <main> | |
95 | + <div className="content-wrap"> | |
96 | + <ContentTitle contentTitle={"사용자 조회"} /> | |
97 | + <div> | |
98 | + <div className="board-wrap"> | |
99 | + <div className="flex"> | |
100 | + <SubTitle className="margin-bottom" explanation={"해당 시행기관의 사용자를 관리할 수 있습니다."} /> | |
101 | + <div className="btn-wrap flex-end margin-bottom "> | |
102 | + <Button | |
103 | + className={"btn-small green-btn"} | |
104 | + btnName={"등록"} | |
105 | + onClick={() => { | |
106 | + navigate("/SeniorInsert"); | |
107 | + }} | |
108 | + /> | |
109 | + <Button className={"btn-small green-btn"} btnName={"삭제"} /> | |
110 | + </div> | |
111 | + </div > | |
112 | + <Table | |
113 | + className={"senior-table"} | |
114 | + head={thead} | |
115 | + contents={content} | |
116 | + contentKey={key} | |
117 | + onClick={() => { | |
118 | + navigate("/SeniorSelectOne"); | |
119 | + }} | |
120 | + /> | |
121 | + | |
122 | + </div> | |
123 | + </div> | |
124 | + </div> | |
125 | + </main> | |
126 | + ); | |
127 | +} |
--- client/views/pages/authority/UserAuthoriySelect.jsx
+++ client/views/pages/user_management/UserAuthoriySelect.jsx
No changes |
+++ client/views/pages/user_management/UserAuthoriySelect_admin.jsx
... | ... | @@ -0,0 +1,239 @@ |
1 | +import React from "react"; | |
2 | +import Table from "../../component/Table.jsx"; | |
3 | +import Button from "../../component/Button.jsx"; | |
4 | +import SubTitle from "../../component/SubTitle.jsx"; | |
5 | +import Modal from "../../component/Modal.jsx"; | |
6 | +import { useNavigate } from "react-router"; | |
7 | + | |
8 | +export default function UserAuthoriySelect_admin() { | |
9 | + const navigate = useNavigate(); | |
10 | + const [modalOpen, setModalOpen] = React.useState(false); | |
11 | + const openModal = () => { | |
12 | + setModalOpen(true); | |
13 | + }; | |
14 | + const closeModal = () => { | |
15 | + setModalOpen(false); | |
16 | + }; | |
17 | + | |
18 | + const thead1 = [ | |
19 | + "No", | |
20 | + "시니어 이름", | |
21 | + "시니어 등록번호", | |
22 | + "시니어 연락처", | |
23 | + "성별", | |
24 | + "생년월일", | |
25 | + "주소", | |
26 | + "대상자 관리", | |
27 | + ]; | |
28 | + const key1 = ["No", "name", "Id","call", "gender", "birth", "address", "management"]; | |
29 | + const content1 = [ | |
30 | + { | |
31 | + No: 1, | |
32 | + name: "김복남", | |
33 | + Id: "20230131", | |
34 | + call: "010-1234-1234", | |
35 | + gender: "여", | |
36 | + birth: "1948.11.15", | |
37 | + address: "경상북도 군위군 삼국유사면", | |
38 | + management: ( | |
39 | + <Button | |
40 | + className={"btn-small gray-btn"} | |
41 | + btnName={"보호자(가족) 보기"} | |
42 | + onClick={openModal} | |
43 | + /> | |
44 | + ), | |
45 | + }, | |
46 | + ]; | |
47 | + | |
48 | + const thead2 = [ | |
49 | + "No", | |
50 | + "시니어 이름", | |
51 | + "시니어 등록번호", | |
52 | + "시니어 연락처", | |
53 | + "성별", | |
54 | + "생년월일", | |
55 | + "주소", | |
56 | + "담당 복지사(연락처)", | |
57 | + "대상자 관리", | |
58 | + ]; | |
59 | + const key2 = [ | |
60 | + "No", "name", "Id","call", "gender", "birth", "address", "protect","management" | |
61 | + ]; | |
62 | + const content2 = [ | |
63 | + { | |
64 | + No: 1, | |
65 | + name: "김복남", | |
66 | + Id: "20230131", | |
67 | + call:"010-1234-1234", | |
68 | + gender: "여", | |
69 | + birth: "1948.11.15", | |
70 | + address: "경상북도 군위군 삼국유사면", | |
71 | + protect: "홍길동(010-1234-1234)", | |
72 | + management: ( | |
73 | + <Button | |
74 | + className={"btn-small gray-btn"} | |
75 | + btnName={"보호자(가족) 보기"} | |
76 | + onClick={openModal} | |
77 | + /> | |
78 | + ), | |
79 | + }, | |
80 | + ]; | |
81 | + const thead3 = [ | |
82 | + "No", | |
83 | + "사용자명", | |
84 | + "사용자ID", | |
85 | + "대상자와의 관계", | |
86 | + "보호자 연락처", | |
87 | + ]; | |
88 | + const key3 = [ | |
89 | + "No", | |
90 | + "name", | |
91 | + "Id", | |
92 | + "relationship", | |
93 | + "phone", | |
94 | + ]; | |
95 | + const content3 = [ | |
96 | + { | |
97 | + No: 1, | |
98 | + name: "김훈", | |
99 | + Id: "admin2", | |
100 | + relationship: "아들", | |
101 | + phone: "010-1234-1234", | |
102 | + }, | |
103 | + ]; | |
104 | + const thead4 = [ | |
105 | + "No", | |
106 | + "어르신 성함", | |
107 | + "사용자등록번호", | |
108 | + "성별", | |
109 | + "생년월일", | |
110 | + "주소", | |
111 | + "관계", | |
112 | + ]; | |
113 | + const key4 = ["No", "name", "Id", "gender", "birth", "address", "management"]; | |
114 | + const content4 = [ | |
115 | + { | |
116 | + No: 1, | |
117 | + name: "김복남", | |
118 | + Id: "20230131", | |
119 | + gender: "여", | |
120 | + birth: "1948.11.15", | |
121 | + address: "경상북도 군위군 삼국유사면", | |
122 | + management: "부" | |
123 | + }, | |
124 | + ]; | |
125 | + | |
126 | + | |
127 | + | |
128 | + const data = [ | |
129 | + { | |
130 | + id: 1, | |
131 | + title: "내가 관리하는 시니어(노인)", | |
132 | + description: ( | |
133 | + <Table | |
134 | + className={"protector-user"} | |
135 | + head={thead1} | |
136 | + contents={content1} | |
137 | + contentKey={key1} | |
138 | + /> | |
139 | + ), | |
140 | + }, | |
141 | + { | |
142 | + id: 2, | |
143 | + title: "전체 시니어(노인)", | |
144 | + description: ( | |
145 | + <Table | |
146 | + className={"caregiver-user"} | |
147 | + head={thead2} | |
148 | + contents={content2} | |
149 | + contentKey={key2} | |
150 | + /> | |
151 | + ), | |
152 | + }, | |
153 | + ]; | |
154 | + const [index, setIndex] = React.useState(1); | |
155 | + return ( | |
156 | + <main> | |
157 | + <Modal open={modalOpen} close={closeModal} header="'김복남'님의 가족"> | |
158 | + <div className="board-wrap"> | |
159 | + <div className="btn-wrap flex-end margin-bottom"> | |
160 | + <Button | |
161 | + className={"btn-small green-btn"} | |
162 | + btnName={"등록"} | |
163 | + onClick={() => { | |
164 | + navigate("/SeniorInsert"); | |
165 | + }} | |
166 | + /> | |
167 | + <Button className={"btn-small green-btn"} btnName={"삭제"} /> | |
168 | + </div> | |
169 | + <div> | |
170 | + <Table | |
171 | + className={"caregiver-user"} | |
172 | + head={thead3} | |
173 | + contents={content3} | |
174 | + contentKey={key3} | |
175 | + /> | |
176 | + </div> | |
177 | + <div> | |
178 | + <Button | |
179 | + className={"btn-100 green-btn"} | |
180 | + btnName={"닫기"} | |
181 | + onClick={closeModal} | |
182 | + /> | |
183 | + </div> | |
184 | + </div> | |
185 | + </Modal> | |
186 | + | |
187 | + <div className="tab-container"> | |
188 | + <ul className="tab-menu"> | |
189 | + {data.map((item) => ( | |
190 | + <li | |
191 | + key={item.id} | |
192 | + className={index === item.id ? "active" : null} | |
193 | + onClick={() => setIndex(item.id)} | |
194 | + > | |
195 | + {item.title} | |
196 | + </li> | |
197 | + ))} | |
198 | + </ul> | |
199 | + <div className="content-wrap"> | |
200 | + <div className="search-management flex-start margin-bottom2"> | |
201 | + <select name="management-agency"> | |
202 | + <option value="기관전체">전체</option> | |
203 | + <option value="군위군청">시니어</option> | |
204 | + <option value="대구보훈병원">복지사</option> | |
205 | + <option value="대구보훈병원">보호자</option> | |
206 | + </select> | |
207 | + <select> | |
208 | + <option value="이름">이름</option> | |
209 | + <option value="아이디">아이디</option> | |
210 | + <option value="아이디">등록번호</option> | |
211 | + </select> | |
212 | + <input type="text" /> | |
213 | + <Button | |
214 | + className={"btn-small gray-btn"} | |
215 | + btnName={"검색"} | |
216 | + /> | |
217 | + </div> | |
218 | + <div className="btn-wrap flex-end"> | |
219 | + <Button | |
220 | + className={"btn-small green-btn"} | |
221 | + btnName={"등록"} | |
222 | + onClick={() => { | |
223 | + navigate("/SeniorInsert"); | |
224 | + }} | |
225 | + /> | |
226 | + <Button className={"btn-small green-btn"} btnName={"삭제"} /> | |
227 | + </div> | |
228 | + <ul className="tab-content"> | |
229 | + {data | |
230 | + .filter((item) => index === item.id) | |
231 | + .map((item) => ( | |
232 | + <li>{item.description}</li> | |
233 | + ))} | |
234 | + </ul> | |
235 | + </div> | |
236 | + </div> | |
237 | + </main> | |
238 | + ); | |
239 | +} |
+++ client/views/pages/user_management/UserSelectOk.jsx
... | ... | @@ -0,0 +1,143 @@ |
1 | +import React from "react"; | |
2 | +import Table from "../../component/Table.jsx"; | |
3 | +import Button from "../../component/Button.jsx"; | |
4 | +import { useNavigate } from "react-router"; | |
5 | +import DetailSearch from "../../component/AgencySearch.jsx"; | |
6 | +import ContentTitle from "../../component/ContentTitle.jsx"; | |
7 | +import SubTitle from "../../component/SubTitle.jsx"; | |
8 | + | |
9 | +export default function SeniorSelect() { | |
10 | + const navigate = useNavigate(); | |
11 | + | |
12 | + //게시판 | |
13 | + const thead = [ | |
14 | + "No", | |
15 | + "소속기관명", | |
16 | + "이름", | |
17 | + "성별", | |
18 | + "생년월일", | |
19 | + "연락처", | |
20 | + "ID", | |
21 | + "승인여부", | |
22 | + ]; | |
23 | + const key = [ | |
24 | + "No", | |
25 | + "center", | |
26 | + "name", | |
27 | + "gender", | |
28 | + "birth", | |
29 | + "phone", | |
30 | + "ID", | |
31 | + "worker", | |
32 | + ]; | |
33 | + const content = [ | |
34 | + { | |
35 | + No: 1, | |
36 | + center: "A복지관", | |
37 | + name: "홍길동", | |
38 | + gender: "여", | |
39 | + birth: "920516", | |
40 | + phone: "010-1234-1234", | |
41 | + ID: "a123", | |
42 | + worker: (<div className="btn-wrap"> | |
43 | + <Button | |
44 | + className={"btn-small green-btn"} | |
45 | + btnName={"승인"} | |
46 | + onClick={() => { | |
47 | + navigate("/SeniorInsert"); | |
48 | + }} | |
49 | + /> | |
50 | + <Button className={"btn-small green-btn"} btnName={"반려"} /> | |
51 | + </div>) | |
52 | + }, | |
53 | + { | |
54 | + No: 2, | |
55 | + center: "A복지관", | |
56 | + name: "홍길동", | |
57 | + gender: "여", | |
58 | + birth: "920506", | |
59 | + phone: "010-1234-1234", | |
60 | + ID: "b123", | |
61 | + worker: (<div className="btn-wrap"> | |
62 | + <Button | |
63 | + className={"btn-small green-btn"} | |
64 | + btnName={"승인"} | |
65 | + onClick={() => { | |
66 | + navigate("/SeniorInsert"); | |
67 | + }} | |
68 | + /> | |
69 | + <Button className={"btn-small green-btn"} btnName={"반려"} /> | |
70 | + </div>) | |
71 | + }, | |
72 | + { | |
73 | + No: 3, | |
74 | + center: "A복지관", | |
75 | + name: "홍길동", | |
76 | + gender: "여", | |
77 | + birth: "920519", | |
78 | + phone: "010-1234-1234", | |
79 | + ID: "c123", | |
80 | + worker: (<div className="btn-wrap"> | |
81 | + <Button | |
82 | + className={"btn-small green-btn"} | |
83 | + btnName={"승인"} | |
84 | + onClick={() => { | |
85 | + navigate("/SeniorInsert"); | |
86 | + }} | |
87 | + /> | |
88 | + <Button className={"btn-small green-btn"} btnName={"반려"} /> | |
89 | + </div>) | |
90 | + }, | |
91 | + | |
92 | + ]; | |
93 | + | |
94 | + //select option 동적 생성 | |
95 | + // const optionList = () => { | |
96 | + // let year = []; | |
97 | + // let month = []; | |
98 | + // let days = []; | |
99 | + // let currentDate = new Date(); | |
100 | + // let currentYear = currentDate.getFullYear(); | |
101 | + | |
102 | + // for (let i = 1910; i < currentYear.length; i++) { | |
103 | + // year.push(i); | |
104 | + // } | |
105 | + | |
106 | + // for (let j = 1; i < 13; j++) { | |
107 | + // month.push(j); | |
108 | + // } | |
109 | + | |
110 | + // for (let k = 1; i < 32; k++) { | |
111 | + // days.push(k); | |
112 | + // } | |
113 | + // return year, month, days; | |
114 | + // }; | |
115 | + | |
116 | + // React.useEffect(() => { | |
117 | + // optionList(); | |
118 | + // }, []); | |
119 | + | |
120 | + return ( | |
121 | + <main> | |
122 | + <div className="content-wrap"> | |
123 | + <ContentTitle contentTitle={"사용자 계정 승인"} /> | |
124 | + <div> | |
125 | + <div className="board-wrap"> | |
126 | + <div className="flex"> | |
127 | + <SubTitle className="margin-bottom" explanation={"승인버튼을 누르면 시행기관의 복지사로 등록됩니다."} /> | |
128 | + | |
129 | + </div > | |
130 | + <Table | |
131 | + className={"senior-table"} | |
132 | + head={thead} | |
133 | + contents={content} | |
134 | + contentKey={key} | |
135 | + | |
136 | + /> | |
137 | + | |
138 | + </div> | |
139 | + </div> | |
140 | + </div> | |
141 | + </main> | |
142 | + ); | |
143 | +} |
--- client/views/pages/visit/visit/VisitSelect.jsx
+++ client/views/pages/visit/visit/VisitSelect.jsx
... | ... | @@ -11,37 +11,33 @@ |
11 | 11 |
|
12 | 12 |
//게시판 |
13 | 13 |
const thead = [ |
14 |
- "No", |
|
15 |
- "방문날짜", |
|
16 |
- "방문 보호사", |
|
17 |
- "방문 대상자", |
|
18 |
- "방문 사유", |
|
19 |
- "방문 상세 사유", |
|
14 |
+ "No", "이름","시니어등록번호", "생년월일", "연락처", "주소", ,"최근 방문일","방문목적","상세사유", |
|
20 | 15 |
]; |
21 | 16 |
const key = [ |
22 |
- "No", |
|
23 |
- "outing_period", |
|
24 |
- "caregiver", |
|
25 |
- "name", |
|
26 |
- "reason", |
|
27 |
- "reason_detail", |
|
17 |
+ "No", "name","number", "birth", "phone", "address","visit","reason" ,"reason_detail" |
|
28 | 18 |
]; |
29 | 19 |
const content = [ |
30 | 20 |
{ |
31 | 21 |
No: 1, |
32 |
- outing_period: "2022.12.01", |
|
33 |
- caregiver: "김철수", |
|
34 |
- name: "김말복", |
|
35 |
- reason: "정기내원", |
|
36 |
- reason_detail: "하루동안 미복약으로 방문.", |
|
22 |
+ name: "김복남", |
|
23 |
+ number: "00000001", |
|
24 |
+ birth: "1948.11.15", |
|
25 |
+ phone: "010-1234-5678", |
|
26 |
+ address: "경상북도 군위군 삼국유사면", |
|
27 |
+ visit: "2023.02.08", |
|
28 |
+ reason: "정기방문", |
|
29 |
+ reason_detail: "정기방문일", |
|
37 | 30 |
}, |
38 | 31 |
{ |
39 | 32 |
No: 2, |
40 |
- outing_period: "2022.12.14", |
|
41 |
- caregiver: "김양순", |
|
42 |
- name: "홍길동", |
|
43 |
- reason: "정기내원", |
|
44 |
- reason_detail: "두통을 호소하셔서 병원 동행, 단순 두통으로 두통약 처방", |
|
33 |
+ name: "박영남", |
|
34 |
+ number: "00000002", |
|
35 |
+ birth: "1948.11.15", |
|
36 |
+ phone: "010-1234-5678", |
|
37 |
+ address: "경상북도 군위군 삼국유사면", |
|
38 |
+ visit: "2023.02.08", |
|
39 |
+ reason: "병원동행", |
|
40 |
+ reason_detail: "두통을 호소하심", |
|
45 | 41 |
}, |
46 | 42 |
]; |
47 | 43 |
return ( |
... | ... | @@ -65,7 +61,7 @@ |
65 | 61 |
}} |
66 | 62 |
/> |
67 | 63 |
</div> |
68 |
- <div className="btn-wrap flex-end"> |
|
64 |
+ {/* <div className="btn-wrap flex-end"> |
|
69 | 65 |
<Button |
70 | 66 |
className={"btn-small green-btn"} |
71 | 67 |
btnName={"등록"} |
... | ... | @@ -74,7 +70,7 @@ |
74 | 70 |
}} |
75 | 71 |
/> |
76 | 72 |
<Button className={"btn-small green-btn"} btnName={"삭제"} /> |
77 |
- </div> |
|
73 |
+ </div> */} |
|
78 | 74 |
</div> |
79 | 75 |
</div> |
80 | 76 |
</main> |
--- client/views/pages/visit/visit/VisitSelectOne.jsx
+++ client/views/pages/visit/visit/VisitSelectOne.jsx
... | ... | @@ -1,73 +1,64 @@ |
1 | 1 |
import React from "react"; |
2 |
-import Button from "../../../component/Button.jsx"; |
|
2 |
+import { useNavigate } from "react-router"; |
|
3 |
+import DetailSearch from "../../../component/DetailSearch.jsx"; |
|
4 |
+import Table from "../../../component/Table.jsx"; |
|
3 | 5 |
import ContentTitle from "../../../component/ContentTitle.jsx"; |
4 |
-import Chart2 from "../../../component/chart/Chart2.jsx"; |
|
6 |
+import SubTitle from "../../../component/SubTitle.jsx"; |
|
5 | 7 |
import TableTitle from "../../../component/Tabletitle.jsx"; |
8 |
+import Chart2 from "../../../component/chart/Chart2.jsx"; |
|
9 |
+import Button from "../../../component/Button.jsx"; |
|
6 | 10 |
|
7 |
-export default function VisitSelectOne() { |
|
11 |
+export default function MedicineCareSelect() { |
|
12 |
+ const navigate = useNavigate(); |
|
13 |
+ |
|
14 |
+ //게시판 |
|
15 |
+ const thead = ["No","방문일", "방문목적", "상세사유", ]; |
|
16 |
+ const key = ["No", "birth", "phone", "address", ]; |
|
17 |
+ const content = [ |
|
18 |
+ { |
|
19 |
+ No: 1, |
|
20 |
+ birth: "2023.02.08", |
|
21 |
+ phone: "정기방문", |
|
22 |
+ address: "정기방문일", |
|
23 |
+ }, |
|
24 |
+ { |
|
25 |
+ No: 2, |
|
26 |
+ birth: "2023.01.08", |
|
27 |
+ phone: "정기방문", |
|
28 |
+ address: "정기방문일", |
|
29 |
+ }, |
|
30 |
+ ]; |
|
31 |
+ |
|
8 | 32 |
return ( |
9 | 33 |
<main> |
10 | 34 |
<div className="content-wrap"> |
11 |
- <ContentTitle contentTitle={"방문 관리 상세페이지"} /> |
|
12 |
- <div> |
|
13 |
- <div className="detail-graph"> |
|
14 |
- <TableTitle tableTitle={" 님의 방문 내역"} /> |
|
15 |
- <Chart2 /> |
|
16 |
- </div> |
|
17 |
- <table className="senior-detail margin-bottom"> |
|
18 |
- <tr> |
|
19 |
- <th>대상자</th> |
|
20 |
- <td>김말복</td> |
|
21 |
- <th>사용자등록번호</th> |
|
22 |
- <td> |
|
23 |
- 202280102 |
|
24 |
- </td> |
|
25 |
- </tr> |
|
26 |
- <tr> |
|
27 |
- <th>생년월일</th> |
|
28 |
- <td>1945.11.05</td> |
|
29 |
- <th>성별</th> |
|
30 |
- <td>여</td> |
|
31 |
- </tr> |
|
32 |
- <tr> |
|
33 |
- <th>주소</th> |
|
34 |
- <td>경상북도 군위군 삼국유사면</td> |
|
35 |
- <th>방문날짜</th> |
|
36 |
- <td>2022.12.23</td> |
|
37 |
- </tr> |
|
38 |
- <tr> |
|
39 |
- <th>방문보호사</th> |
|
40 |
- <td>김철수</td> |
|
41 |
- <th>보호사 연락처</th> |
|
42 |
- <td>010-1234-1234</td> |
|
43 |
- </tr> |
|
44 |
- <tr> |
|
45 |
- <th>방문사유</th> |
|
46 |
- <td colSpan={3}>정기방문</td> |
|
47 |
- </tr> |
|
48 |
- <tr> |
|
49 |
- <th>방문 상세 사유</th> |
|
50 |
- <td colSpan={3} style={{ height: "197px", overflow: "auto", textAlign: "left" }}>하루동안 미복약으로 방문.</td> |
|
51 |
- </tr> |
|
52 |
- </table> |
|
35 |
+ <ContentTitle contentTitle={"방문 상세 페이지"}/> |
|
36 |
+ <div className="detail-graph"> |
|
37 |
+ <TableTitle tableTitle={" 님의 방문 내역"}/> |
|
38 |
+ <Chart2 /> |
|
39 |
+ </div> |
|
40 |
+ <div className="board-wrap"> |
|
41 |
+ <Table |
|
42 |
+ className={"medicine-table"} |
|
43 |
+ head={thead} |
|
44 |
+ contents={content} |
|
45 |
+ contentKey={key} |
|
46 |
+ onClick={() => { |
|
47 |
+ navigate("/MedicineCareSelectOne"); |
|
48 |
+ }} |
|
49 |
+ /> |
|
53 | 50 |
<div className="btn-wrap flex-center"> |
54 | 51 |
<Button |
55 | 52 |
className={"btn-large gray-btn"} |
56 | 53 |
btnName={"이전"} |
57 | 54 |
onClick={() => { |
58 |
- navigate("/SeniorSelect"); |
|
59 |
- }} |
|
60 |
- /> |
|
61 |
- <Button |
|
62 |
- className={"btn-large green-btn"} |
|
63 |
- btnName={"수정"} |
|
64 |
- onClick={() => { |
|
65 |
- navigate("/SeniorInsert"); |
|
55 |
+ navigate("/VisitSelect"); |
|
66 | 56 |
}} |
67 | 57 |
/> |
68 | 58 |
</div> |
69 | 59 |
</div> |
70 | 60 |
</div> |
61 |
+ |
|
71 | 62 |
</main> |
72 | 63 |
); |
73 | 64 |
} |
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?