
--- client/views/layout/Header.vue
+++ client/views/layout/Header.vue
... | ... | @@ -31,7 +31,7 @@ |
31 | 31 |
this.$store.commit('setStoreReset'); |
32 | 32 |
|
33 | 33 |
localStorage.removeItem('isLoggedIn'); |
34 |
- this.$router.push('/login.page'); |
|
34 |
+ this.$router.push('/login.page'); |
|
35 | 35 |
} catch (error) { |
36 | 36 |
console.error("로그아웃 중 오류 발생:", error); |
37 | 37 |
alert("로그아웃에 실패했습니다. 다시 시도해주세요."); |
--- client/views/layout/Menu.vue
+++ client/views/layout/Menu.vue
... | ... | @@ -1,78 +1,59 @@ |
1 | 1 |
<template> |
2 |
- <ul class="menu"> |
|
3 |
- <li class="nav-item"> |
|
4 |
- <router-link to="/approval-management.page" class="nav-link " active-class="active"> |
|
5 |
- <span>결재관리</span></router-link> |
|
6 |
- </li><!-- End Dashboard Nav --> |
|
7 |
- <i class="fa-solid fa-bars"></i> |
|
8 |
- |
|
9 |
- <li class="nav-item"> |
|
10 |
- <router-link to="/attendance-management.page" class="nav-link " active-class="active"> |
|
11 |
- <span>근태관리</span></router-link> |
|
12 |
- </li> |
|
13 |
- <i class="fas fa-bars"></i> |
|
14 |
- <li class="nav-item"> |
|
15 |
- <router-link to="/task-management.page" class="nav-link " active-class="active"> |
|
16 |
- <span>업무관리</span></router-link> |
|
17 |
- </li> |
|
18 |
- <i class="fas fa-bars"></i> |
|
19 |
- <li class="nav-item"> |
|
20 |
- <router-link to="/financial-management.page" class="nav-link " active-class="active"> |
|
21 |
- <span>재무관리</span></router-link> |
|
22 |
- </li> |
|
23 |
- <i class="fas fa-bars"></i> |
|
24 |
- <li class="nav-item"> |
|
25 |
- <router-link to="/asset-management.page" class="nav-link " active-class="active"> |
|
26 |
- <span>자산관리</span></router-link> |
|
27 |
- </li><!-- End Register Page Nav --> |
|
28 |
- <i class="fas fa-bars"></i> |
|
29 |
- <li class="nav-item"> |
|
30 |
- <router-link to="/hr-management.page" class="nav-link " active-class="active"> |
|
31 |
- <span>인사관리</span></router-link> |
|
32 |
- </li><!-- End Login Page Nav --> |
|
33 |
- <i class="fas fa-bars"></i> |
|
34 |
- <li class="nav-item"> |
|
35 |
- <router-link to="/system-management.page" class="nav-link " active-class="active"> |
|
36 |
- <span>시스템관리</span></router-link> |
|
37 |
- </li> |
|
38 |
- |
|
39 |
- |
|
40 |
- </ul><!-- End Profile Dropdown Items --> |
|
41 |
- |
|
2 |
+ <ul class="menu"> |
|
3 |
+ <li class="nav-item"> |
|
4 |
+ <router-link to="/approval-management" class="nav-link " active-class="active"><span>결재관리</span></router-link> |
|
5 |
+ </li> |
|
6 |
+ <i class="fa-solid fa-bars"></i> |
|
7 |
+ <li class="nav-item"> |
|
8 |
+ <router-link to="/attendance-management" class="nav-link " active-class="active"><span>근태관리</span></router-link> |
|
9 |
+ </li> |
|
10 |
+ <i class="fas fa-bars"></i> |
|
11 |
+ <li class="nav-item"> |
|
12 |
+ <router-link to="/task-management" class="nav-link " active-class="active"><span>업무관리</span></router-link> |
|
13 |
+ </li> |
|
14 |
+ <i class="fas fa-bars"></i> |
|
15 |
+ <li class="nav-item"> |
|
16 |
+ <router-link to="/financial-management" class="nav-link " active-class="active"><span>재무관리</span></router-link> |
|
17 |
+ </li> |
|
18 |
+ <i class="fas fa-bars"></i> |
|
19 |
+ <li class="nav-item"> |
|
20 |
+ <router-link to="/asset-management" class="nav-link " active-class="active"><span>자산관리</span></router-link> |
|
21 |
+ </li> |
|
22 |
+ <i class="fas fa-bars"></i> |
|
23 |
+ <li class="nav-item"> |
|
24 |
+ <router-link to="/hr-management" class="nav-link " active-class="active"><span>인사관리</span></router-link> |
|
25 |
+ </li> |
|
26 |
+ <i class="fas fa-bars"></i> |
|
27 |
+ <li class="nav-item"> |
|
28 |
+ <router-link to="/system-management" class="nav-link " active-class="active"><span>시스템관리</span></router-link> |
|
29 |
+ </li> |
|
30 |
+ </ul> |
|
42 | 31 |
</template> |
43 |
- |
|
44 | 32 |
<script> |
45 | 33 |
export default { |
46 | 34 |
name: "ProfileImage", |
47 | 35 |
data() { |
48 | 36 |
return { |
37 |
+ logo: "/client/resources/img/logo.png", |
|
49 | 38 |
isLoggedIn: false, |
50 | 39 |
userName: '', |
51 |
- logo: "/client/resources/img/logo.png", |
|
52 | 40 |
}; |
53 | 41 |
}, |
54 | 42 |
methods: { |
55 | 43 |
handleLogout() { |
56 |
- // Clear login-related data from localStorage |
|
57 | 44 |
localStorage.removeItem('loggedInUser'); |
58 |
- this.isLoggedIn = false; // Update login status |
|
59 |
- this.$router.push("/login"); // Redirect to login page after logout |
|
45 |
+ this.isLoggedIn = false; |
|
46 |
+ this.$router.push("/login"); |
|
60 | 47 |
}, |
61 | 48 |
toggleSidebar() { |
62 |
- // `toggle-sidebar` 클래스가 있으면 제거, 없으면 추가 |
|
63 | 49 |
document.body.classList.toggle("toggle-sidebar"); |
64 | 50 |
}, |
65 | 51 |
}, |
66 | 52 |
created() { |
67 |
- // Check if there is any login data in localStorage |
|
68 | 53 |
const loggedInUser = localStorage.getItem('loggedInUser'); |
69 | 54 |
if (loggedInUser) { |
70 | 55 |
this.isLoggedIn = true; |
71 | 56 |
} |
72 | 57 |
}, |
73 |
- components: { |
|
74 |
- }, |
|
75 | 58 |
}; |
76 |
-</script> |
|
77 |
- |
|
78 |
-<style></style>(파일 끝에 줄바꿈 문자 없음) |
|
59 |
+</script>(파일 끝에 줄바꿈 문자 없음) |
--- client/views/pages/AboutView.vue
... | ... | @@ -1,15 +0,0 @@ |
1 | -<template> | |
2 | - <div class="about"> | |
3 | - <h2>This is an about page</h2> | |
4 | - </div> | |
5 | -</template> | |
6 | - | |
7 | -<style> | |
8 | -@media (min-width: 1024px) { | |
9 | - .about { | |
10 | - min-height: 100vh; | |
11 | - display: flex; | |
12 | - align-items: center; | |
13 | - } | |
14 | -} | |
15 | -</style> |
--- client/views/pages/App.vue
+++ client/views/pages/App.vue
... | ... | @@ -1,42 +1,38 @@ |
1 | 1 |
<template> |
2 |
- <div v-if="isLoginPage" class="login"> |
|
3 |
- <!-- 로그인 페이지에는 헤더 없음 --> |
|
4 |
- <router-view /> |
|
5 |
- </div> |
|
6 |
- <div v-else class="container"> |
|
7 |
- <Header /> |
|
8 |
- |
|
9 |
- <main class="main-wrap"> |
|
10 |
- <router-view /> |
|
11 |
- </main> |
|
12 |
- </div> |
|
13 |
- |
|
2 |
+ <div v-if="isLoginPage" class="login"> |
|
3 |
+ <router-view /> |
|
4 |
+ </div> |
|
5 |
+ <div v-else class="container"> |
|
6 |
+ <Header /> |
|
7 |
+ <main class="main-wrap"> |
|
8 |
+ <template v-if="!isMainPage"> |
|
9 |
+ <LeftNavBar /> |
|
10 |
+ <div class="content"> |
|
11 |
+ <router-view /> |
|
12 |
+ </div> |
|
13 |
+ </template> |
|
14 |
+ <template v-else> |
|
15 |
+ <router-view /> |
|
16 |
+ </template> |
|
17 |
+ </main> |
|
18 |
+ </div> |
|
14 | 19 |
</template> |
15 |
- |
|
16 | 20 |
<script> |
17 | 21 |
import Header from '../layout/Header.vue'; |
18 |
- |
|
19 | 22 |
import Footer from '../layout/Footer.vue'; |
23 |
+import LeftNavBar from '../layout/LeftNavBar.vue'; |
|
20 | 24 |
|
21 | 25 |
const App = { |
22 |
- data: () => { |
|
23 |
- return {} |
|
24 |
- }, |
|
25 |
- methods: {}, |
|
26 |
- watch: {}, |
|
27 |
- computed: { |
|
28 |
- isLoginPage() { |
|
29 |
- return this.$route.path === '/login.page'; |
|
30 |
- }, |
|
31 |
- }, |
|
32 |
- components: { |
|
33 |
- 'Header': Header, |
|
34 |
- |
|
35 |
- 'Footer': Footer, |
|
36 |
- }, |
|
37 |
- mounted: () => {} |
|
26 |
+ components: { Header, Footer, LeftNavBar }, |
|
27 |
+ computed: { |
|
28 |
+ isMainPage() { |
|
29 |
+ return this.$route.path === '/'; |
|
30 |
+ }, |
|
31 |
+ isLoginPage() { |
|
32 |
+ return this.$route.path === '/login.page'; |
|
33 |
+ }, |
|
34 |
+ }, |
|
38 | 35 |
} |
39 | 36 |
|
40 | 37 |
export default App; |
41 | 38 |
</script> |
42 |
- |
--- client/views/pages/AppRouter.js
+++ client/views/pages/AppRouter.js
... | ... | @@ -5,12 +5,12 @@ |
5 | 5 |
import Join from '../pages/User/Join.vue'; |
6 | 6 |
import MyPage from '../pages/User/MyPage.vue'; |
7 | 7 |
|
8 |
-// 직원 |
|
8 |
+// 미확인 파일 |
|
9 | 9 |
import ChuljangList from '../pages/Employee/ChuljangList.vue'; |
10 | 10 |
import HyugaList from '../pages/Employee/HyugaList.vue'; |
11 | 11 |
import HyugaOk from '../pages/Employee/HyugaOk.vue'; |
12 |
+ |
|
12 | 13 |
// 결재관리 |
13 |
-import approval from '../pages/Manager/approval/approval.vue'; |
|
14 | 14 |
import approvalList from '../pages/Manager/approval/approvalList.vue'; |
15 | 15 |
import approvalRequest from '../pages/Manager/approval/approvalRequest.vue'; |
16 | 16 |
import ChuljangPumui from '../pages/Manager/approval/ChuljangPumui.vue'; |
... | ... | @@ -24,14 +24,13 @@ |
24 | 24 |
import ChuljangInsert from '../pages/Manager/attendance/ChuljangInsert.vue'; |
25 | 25 |
import myAttendance from '../pages/Manager/attendance/myAttendance.vue'; |
26 | 26 |
import buseoAttendance from '../pages/Manager/attendance/buseoAttendance.vue'; |
27 |
-import attendance from '../pages/Manager/attendance/attendance.vue'; |
|
28 | 27 |
import AttendanceDetail from '../pages/Manager/attendance/AttendanceDetail.vue'; |
29 | 28 |
import hyugaStatue from '../pages/Manager/attendance/hyugaStatue.vue'; |
30 | 29 |
import HyugaInsert from '../pages/Manager/attendance/HyugaInsert.vue'; |
31 | 30 |
import HyugaDetail from '../pages/Manager/attendance/HyugaDetail.vue'; |
32 | 31 |
import BokmyeongInsert from '../pages/Manager/attendance/BokmyeongInsert.vue'; |
32 |
+ |
|
33 | 33 |
//업무관리 |
34 |
-import task from '../pages/Manager/task/task.vue'; |
|
35 | 34 |
import projectStatue from '../pages/Manager/task/projectStatue.vue'; |
36 | 35 |
import projectDetail from '../pages/Manager/task/projectDetail.vue'; |
37 | 36 |
import meetingInsert from '../pages/Manager/task/meetingInsert.vue'; |
... | ... | @@ -39,29 +38,29 @@ |
39 | 38 |
import projectInsert from '../pages/Manager/task/projectInsert.vue'; |
40 | 39 |
import projectTuib from '../pages/Manager/task/projectTuib.vue'; |
41 | 40 |
import projectTuibDetail from '../pages/Manager/task/projectTuibDetail.vue'; |
41 |
+ |
|
42 | 42 |
//재무관리 |
43 |
-import financial from '../pages/Manager/financial/financial.vue'; |
|
44 | 43 |
import salaryList from '../pages/Manager/financial/salaryList.vue'; |
45 | 44 |
import employeeSalaryList from '../pages/Manager/financial/employeeSalaryList.vue'; |
46 | 45 |
import employeeSalaryDetail from '../pages/Manager/financial/employeeSalaryDetail.vue'; |
47 | 46 |
import employeeSalaryInsert from '../pages/Manager/financial/employeeSalaryInsert.vue'; |
48 | 47 |
import ChuljangCostList from '../pages/Manager/financial/ChuljangCostList.vue'; |
49 | 48 |
import MeetingCostList from '../pages/Manager/financial/MeetingCostList.vue'; |
49 |
+ |
|
50 | 50 |
//자산관리 |
51 |
-import asset from '../pages/Manager/asset/asset.vue'; |
|
52 | 51 |
import VhcleList from '../pages/Manager/asset/VhcleList.vue'; |
53 | 52 |
import CardList from '../pages/Manager/asset/CardList.vue'; |
54 | 53 |
import VhcleInfoManagement from '../pages/Manager/asset/VhcleInfoManagement.vue'; |
55 | 54 |
import CardInfoManagement from '../pages/Manager/asset/CardInfoManagement.vue'; |
55 |
+ |
|
56 | 56 |
//인사관리 |
57 |
-import hr from '../pages/Manager/hr/hr.vue'; |
|
58 | 57 |
import hrSearch from '../pages/Manager/hr/hrSearch.vue'; |
59 | 58 |
import hrManagement from '../pages/Manager/hr/hrManagement.vue'; |
60 | 59 |
import hrDetail from '../pages/Manager/hr/hrDetail.vue'; |
61 | 60 |
import hrInsert from '../pages/Manager/hr/hrInsert.vue'; |
62 | 61 |
import buseoManagement from '../pages/Manager/hr/buseoManagement.vue'; |
62 |
+ |
|
63 | 63 |
//시스템관리 |
64 |
-import system from '../pages/Manager/system/system.vue'; |
|
65 | 64 |
import userManagement from '../pages/Manager/system/userManagement.vue'; |
66 | 65 |
import accessControlManagement from '../pages/Manager/system/accessControlManagement.vue'; |
67 | 66 |
import commonCodeManagement from '../pages/Manager/system/commonCodeManagement.vue'; |
... | ... | @@ -69,39 +68,24 @@ |
69 | 68 |
import commonCodeDetail from '../pages/Manager/system/commonCodeDetail.vue'; |
70 | 69 |
|
71 | 70 |
const routes = [ |
72 |
- /* 메인화면 */ |
|
73 | 71 |
{ path: '/', name: '/', component: Main }, |
74 | 72 |
{ path: '/login.page', name: 'Login', component: Login }, |
75 | 73 |
{ path: '/join.page', name: 'Join', component: Join }, |
76 | 74 |
{ path: '/MyPage.page', name: 'MyPage', component: MyPage }, |
77 |
- { path: '/ChuljangList.page', name: 'ChuljangList', component: ChuljangList }, |
|
78 |
- { path: '/HyugaList.page', name: 'HyugaList', component: HyugaList }, |
|
79 |
- { path: '/HyugaOk.page', name: 'HyugaOk', component: HyugaOk }, |
|
75 |
+ // 결재관리 |
|
80 | 76 |
{ |
81 |
- path: '/approval-management.page', name: 'approval', component: approval, redirect: '/approval-management.page/approvalRequest.page', |
|
77 |
+ path: '/approval-management', name: 'approval', redirect: '/approval-management/approvalRequest.page', |
|
82 | 78 |
children: [ |
83 |
- { |
|
84 |
- path: 'approvalRequest.page', // => /approval-management.page/list |
|
85 |
- name: 'approvalRequest', |
|
86 |
- component: approvalRequest, |
|
87 |
- children: [ |
|
88 |
- |
|
89 |
- ] |
|
90 |
- }, |
|
91 |
- { |
|
92 |
- path: 'approvalList.page', // => /approval-management.page/detail/123 |
|
93 |
- name: 'approvalList', |
|
94 |
- component: approvalList, |
|
95 |
- children: [ |
|
96 |
- ] |
|
97 |
- }, |
|
79 |
+ { path: 'approvalRequest.page', name: 'approvalRequest', component: approvalRequest, }, |
|
80 |
+ { path: 'approvalList.page', name: 'approvalList', component: approvalList, }, |
|
98 | 81 |
{ path: 'ChuljangPumui.page', name: 'ChuljangPumui', component: ChuljangPumui }, |
99 | 82 |
{ path: 'ChuljangBokmyeong.page', name: 'ChuljangBokmyeong', component: ChuljangBokmyeong }, |
100 | 83 |
{ path: 'Hyuga.page', name: 'Hyuga', component: Hyuga }, |
101 | 84 |
] |
102 |
- }, //결재관리 |
|
85 |
+ }, |
|
86 |
+ // 근태관리 |
|
103 | 87 |
{ |
104 |
- path: '/attendance-management.page', name: 'attendance', component: attendance, redirect: '/attendance-management.page/myAttendance.page', |
|
88 |
+ path: '/attendance-management', name: 'attendance', redirect: '/attendance-management/myAttendance.page', |
|
105 | 89 |
children: [ |
106 | 90 |
{ path: 'myAttendance.page', name: 'myAttendance', component: myAttendance }, |
107 | 91 |
{ path: 'buseoAttendance.page', name: 'buseoAttendance', component: buseoAttendance }, |
... | ... | @@ -115,9 +99,10 @@ |
115 | 99 |
{ path: 'ChuljangBokmyeongDetail.page', name: 'ChuljangBokmyeongDetail', component: ChuljangBokmyeongDetail }, |
116 | 100 |
{ path: 'ChuljangDetailAll.page', name: 'ChuljangDetailAll', component: ChuljangDetailAll }, |
117 | 101 |
] |
118 |
- }, //근태관리 |
|
102 |
+ }, |
|
103 |
+ // 업무관리 |
|
119 | 104 |
{ |
120 |
- path: '/task-management.page', name: 'task', component: task, redirect: '/task-management.page/projectStatue.page', |
|
105 |
+ path: '/task-management', name: 'task', redirect: '/task-management/projectStatue.page', |
|
121 | 106 |
children: [ |
122 | 107 |
{ path: 'projectStatue.page', name: 'projectStatue', component: projectStatue }, |
123 | 108 |
{ path: 'projectDetail.page', name: 'projectDetail', component: projectDetail }, |
... | ... | @@ -127,9 +112,10 @@ |
127 | 112 |
{ path: 'projectTuib.page', name: 'projectTuib', component: projectTuib }, |
128 | 113 |
{ path: 'projectTuibDetail.page', name: 'projectTuibDetail', component: projectTuibDetail }, |
129 | 114 |
] |
130 |
- }, //업무관리 |
|
115 |
+ }, |
|
116 |
+ // 재무관리 |
|
131 | 117 |
{ |
132 |
- path: '/financial-management.page', name: 'financial', component: financial, redirect: '/financial-management.page/salaryList.page', |
|
118 |
+ path: '/financial-management', name: 'financial', redirect: '/financial-management/salaryList.page', |
|
133 | 119 |
children: [ |
134 | 120 |
{ path: 'salaryList.page', name: 'salaryList', component: salaryList }, |
135 | 121 |
{ path: 'employeeSalaryList.page', name: 'employeeSalaryList', component: employeeSalaryList }, |
... | ... | @@ -138,9 +124,10 @@ |
138 | 124 |
{ path: 'ChuljangCostList.page', name: 'ChuljangCostList', component: ChuljangCostList }, |
139 | 125 |
{ path: 'MeetingCostList.page', name: 'MeetingCostList', component: MeetingCostList }, |
140 | 126 |
] |
141 |
- }, //재무관리 |
|
127 |
+ }, |
|
128 |
+ // 자산관리 |
|
142 | 129 |
{ |
143 |
- path: '/asset-management.page', name: 'asset', component: asset, redirect: '/asset-management.page/VhcleList.page', |
|
130 |
+ path: '/asset-management', name: 'asset', redirect: '/asset-management/VhcleList.page', |
|
144 | 131 |
children: [ |
145 | 132 |
{ path: 'VhcleList.page', name: 'VhcleList', component: VhcleList }, |
146 | 133 |
{ path: 'VhcleInfoManagement.page', name: 'VhcleInfoManagement', component: VhcleInfoManagement }, |
... | ... | @@ -148,9 +135,10 @@ |
148 | 135 |
{ path: 'CardInfoManagement.page', name: 'CardInfoManagement', component: CardInfoManagement }, |
149 | 136 |
|
150 | 137 |
] |
151 |
- }, //자산관리 |
|
138 |
+ }, |
|
139 |
+ // 인사관리 |
|
152 | 140 |
{ |
153 |
- path: '/hr-management.page', name: 'hr', component: hr, redirect: '/hr-management.page/hrSearch.page', |
|
141 |
+ path: '/hr-management', name: 'hr', redirect: '/hr-management.page/hrSearch.page', |
|
154 | 142 |
children: [ |
155 | 143 |
{ path: 'hrSearch.page', name: 'hrSearch', component: hrSearch }, |
156 | 144 |
{ path: 'hrManagement.page', name: 'hrManagement', component: hrManagement }, |
... | ... | @@ -158,9 +146,10 @@ |
158 | 146 |
{ path: 'hrInsert.page', name: 'hrInsert', component: hrInsert }, |
159 | 147 |
{ path: 'buseoManagement.page', name: 'buseoManagement', component: buseoManagement }, |
160 | 148 |
] |
161 |
- }, //인사관리 |
|
149 |
+ }, |
|
150 |
+ // 시스템관리 |
|
162 | 151 |
{ |
163 |
- path: '/system-management.page', name: 'system', component: system, redirect: { name: 'userManagement' }, |
|
152 |
+ path: '/system-management', name: 'system', redirect: { name: 'userManagement' }, |
|
164 | 153 |
children: [ |
165 | 154 |
{ path: 'userManagement.page', name: 'userManagement', component: userManagement }, |
166 | 155 |
{ path: 'accessControlManagement.page', name: 'accessControlManagement', component: accessControlManagement }, |
... | ... | @@ -168,7 +157,7 @@ |
168 | 157 |
{ path: 'commonCodeInsert.page', name: 'commonCodeInsert', component: commonCodeInsert }, |
169 | 158 |
{ path: 'commonCodeDetail.page', name: 'commonCodeDetail', component: commonCodeDetail }, |
170 | 159 |
] |
171 |
- }, //시스템관리 |
|
160 |
+ }, |
|
172 | 161 |
]; |
173 | 162 |
|
174 | 163 |
const AppRouter = createRouter({ |
... | ... | @@ -176,21 +165,16 @@ |
176 | 165 |
routes, |
177 | 166 |
}); |
178 | 167 |
|
179 |
-// Add navigation guard |
|
180 | 168 |
AppRouter.beforeEach((to, from, next) => { |
181 |
- // Check login status |
|
182 | 169 |
const isLoggedIn = localStorage.getItem('isLoggedIn') === 'true'; |
183 |
- |
|
184 |
- // If not logged in and trying to access any page other than login, redirect to login page |
|
185 | 170 |
if (!isLoggedIn && to.path !== '/login.page') { |
186 | 171 |
next('/login.page'); |
187 | 172 |
} |
188 |
- // If logged in and trying to access login page, redirect to main page |
|
189 | 173 |
else if (isLoggedIn && to.path === '/login.page') { |
190 | 174 |
next('/'); |
191 | 175 |
} |
192 | 176 |
else { |
193 |
- next(); // Proceed to requested route |
|
177 |
+ next(); |
|
194 | 178 |
} |
195 | 179 |
}); |
196 | 180 |
|
--- client/views/pages/HomeView.vue
... | ... | @@ -1,8 +0,0 @@ |
1 | -<script setup> | |
2 | -</script> | |
3 | - | |
4 | -<template> | |
5 | - <main> | |
6 | - 홈 | |
7 | - </main> | |
8 | -</template> |
--- client/views/pages/Manager/approval/approval.vue
+++ client/views/pages/Manager/approval/approval.vue
... | ... | @@ -13,36 +13,35 @@ |
13 | 13 |
</div> |
14 | 14 |
</div> |
15 | 15 |
</div> |
16 |
- |
|
17 |
- |
|
18 | 16 |
<details class="menu-box" open> |
19 |
- <summary><p>결재</p><div class="icon"><img :src="topmenuicon" alt=""></div></summary> |
|
20 |
- <ul> |
|
21 |
- <li> <router-link :to="{ name: 'approvalRequest' }" exact-active-class="active-link" v-slot="{ isExactActive }"> |
|
22 |
- <p>결재 요청</p> |
|
23 |
- <div class="icon" v-if="isExactActive"> |
|
24 |
- <img :src="menuicon" alt=""> |
|
25 |
- </div> |
|
26 |
- </router-link></li> |
|
27 |
- <li> |
|
28 |
- <router-link :to="{ name: 'approvalList' }" exact-active-class="active-link" v-slot="{ isExactActive }"> |
|
29 |
- <p>승인 대기 목록</p> |
|
30 |
- <div class="icon" v-if="isExactActive"> |
|
31 |
- <img :src="menuicon" alt=""> |
|
32 |
- </div> |
|
33 |
- </router-link> |
|
34 |
- </li> |
|
35 |
- </ul> |
|
17 |
+ <summary> |
|
18 |
+ <p>결재</p> |
|
19 |
+ <div class="icon"><img :src="topmenuicon" alt=""></div> |
|
20 |
+ </summary> |
|
21 |
+ <ul> |
|
22 |
+ <li> <router-link :to="{ name: 'approvalRequest' }" exact-active-class="active-link" v-slot="{ isExactActive }"> |
|
23 |
+ <p>결재 요청</p> |
|
24 |
+ <div class="icon" v-if="isExactActive"> |
|
25 |
+ <img :src="menuicon" alt=""> |
|
26 |
+ </div> |
|
27 |
+ </router-link></li> |
|
28 |
+ <li> |
|
29 |
+ <router-link :to="{ name: 'approvalList' }" exact-active-class="active-link" v-slot="{ isExactActive }"> |
|
30 |
+ <p>승인 대기 목록</p> |
|
31 |
+ <div class="icon" v-if="isExactActive"> |
|
32 |
+ <img :src="menuicon" alt=""> |
|
33 |
+ </div> |
|
34 |
+ </router-link> |
|
35 |
+ </li> |
|
36 |
+ </ul> |
|
36 | 37 |
</details> |
37 | 38 |
</div> |
38 | 39 |
</div> |
39 | 40 |
<!-- End Page Title --> |
40 | 41 |
<div class="content"> |
41 | 42 |
<router-view></router-view> |
42 |
- |
|
43 | 43 |
</div> |
44 | 44 |
</template> |
45 |
- |
|
46 | 45 |
<script> |
47 | 46 |
import { ref } from 'vue'; |
48 | 47 |
|
... | ... | @@ -139,5 +138,4 @@ |
139 | 138 |
}, |
140 | 139 |
}; |
141 | 140 |
</script> |
142 |
- |
|
143 | 141 |
<style scoped></style> |
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?