
Merge branch 'master' of http://210.180.118.83/jhpark/cms_frontend
@3c776f583545570ccb8390e04cc3e307cd01db6d
--- client/views/component/Breadcrumb/Breadcrumb.vue
+++ client/views/component/Breadcrumb/Breadcrumb.vue
... | ... | @@ -16,10 +16,20 @@ |
16 | 16 |
}; |
17 | 17 |
}, |
18 | 18 |
watch: { |
19 |
+ // 페이지 이동 시 동작 |
|
19 | 20 |
$route: { |
20 | 21 |
immediate: true, |
21 | 22 |
handler() { |
22 | 23 |
this.generateBreadcrumb(); |
24 |
+ } |
|
25 |
+ }, |
|
26 |
+ // 새로고침 시 동작 |
|
27 |
+ '$store.state.menuList': { |
|
28 |
+ immediate: true, |
|
29 |
+ handler(val) { |
|
30 |
+ if (val && val.length > 0) { |
|
31 |
+ this.generateBreadcrumb(); |
|
32 |
+ } |
|
23 | 33 |
} |
24 | 34 |
} |
25 | 35 |
}, |
... | ... | @@ -27,8 +37,6 @@ |
27 | 37 |
generateBreadcrumb() { |
28 | 38 |
const menuState = this.$store.state; |
29 | 39 |
const currentPath = this.$route.path; |
30 |
- |
|
31 |
- console.log('menuState',menuState) |
|
32 | 40 |
|
33 | 41 |
// 관리자: childList 기반 |
34 | 42 |
const findFromTree = (menus, path, trail = []) => { |
--- client/views/component/comment/CommentItem.vue
+++ client/views/component/comment/CommentItem.vue
... | ... | @@ -19,17 +19,16 @@ |
19 | 19 |
</div> |
20 | 20 |
|
21 | 21 |
<div class="layout end btn-wrap pb10"> |
22 |
- <button v-if="comment.isUpdate != true" :class="{ |
|
22 |
+ <button v-if="comment.useYn == 'Y' && comment.isUpdate != true" |
|
23 |
+ :class="{ |
|
23 | 24 |
'green': !showReplyInput[comment.cmntId], |
24 | 25 |
'gray': showReplyInput[comment.cmntId], |
25 | 26 |
}" @click="toggleReplyInput(comment.cmntId)"> |
26 | 27 |
{{ showReplyInput[comment.cmntId] ? "취소" : "답글 달기" }} |
27 | 28 |
</button> |
28 | 29 |
|
29 |
- <button v-if=" |
|
30 |
- (roles[0].authority == 'ROLE_ADMIN' || mbrId == comment.rgtr) && |
|
31 |
- !showReplyInput[comment.cmntId] |
|
32 |
- " :class="{ |
|
30 |
+ <button v-if="comment.useYn == 'Y' && mbrId == comment.rgtr && !showReplyInput[comment.cmntId]" |
|
31 |
+ :class="{ |
|
33 | 32 |
'ml5 comment-item-btn icon-btn radius pd5': true, |
34 | 33 |
'dark-gray': pageRole == 'adm', |
35 | 34 |
'dark-gray': |
... | ... | @@ -38,7 +37,8 @@ |
38 | 37 |
수정 |
39 | 38 |
</button> |
40 | 39 |
|
41 |
- <button v-if="roles[0].authority == 'ROLE_ADMIN' || mbrId == comment.rgtr" @click="fnDeleteCmnt(comment.cmntId)" |
|
40 |
+ <button v-if="comment.useYn == 'Y' && (roles[0].authority == 'ROLE_ADMIN' || mbrId == comment.rgtr)" |
|
41 |
+ @click="fnDeleteCmnt(comment.cmntId)" |
|
42 | 42 |
class="ml5 icon-btn red radius pd5"> |
43 | 43 |
삭제 |
44 | 44 |
</button> |
--- client/views/component/userInfo/UserAuthorList.vue
+++ client/views/component/userInfo/UserAuthorList.vue
... | ... | @@ -15,7 +15,7 @@ |
15 | 15 |
> |
16 | 16 |
<p>{{ auth.authrtNm }}</p> |
17 | 17 |
<button |
18 |
- v-show="editMode != 'view'" |
|
18 |
+ v-show="editMode != 'view' && auth.sysPvsnYn == '1'" |
|
19 | 19 |
class="btn-ico sm ico-close" |
20 | 20 |
@click="fnAuthDelete(index)" |
21 | 21 |
> |
... | ... | @@ -121,7 +121,11 @@ |
121 | 121 |
// axios: 사용자권한 목록 조회 |
122 | 122 |
async fnAuthViewList() { |
123 | 123 |
try { |
124 |
- const response = await findAllSystem(); |
|
124 |
+ let params = { |
|
125 |
+ useYn: 'Y', |
|
126 |
+ sysPvsnYn: '1', |
|
127 |
+ }; |
|
128 |
+ const response = await findAllSystem(params); |
|
125 | 129 |
this.originalList = response.data.data; |
126 | 130 |
} catch (error) { |
127 | 131 |
alert("에러가 발생했습니다.\n관리자에게 문의해주세요."); |
... | ... | @@ -133,6 +137,7 @@ |
133 | 137 |
mbrId: this.mbrVO.mbrId, |
134 | 138 |
authrtNm: authrt.authrtNm, |
135 | 139 |
authrtCd: authrt.authrtCd, |
140 |
+ sysPvsnYn: authrt.sysPvsnYn, |
|
136 | 141 |
rgtr: null, |
137 | 142 |
regDt: null, |
138 | 143 |
}); |
... | ... | @@ -160,10 +165,10 @@ |
160 | 165 |
|
161 | 166 |
// 사용자권한 삭제 |
162 | 167 |
fnAuthDelete(index) { |
163 |
- if (this.mbrVO.authorList.length < 2) { |
|
164 |
- alert("사용자 권한은 최소 1개 이상 존재해야 합니다."); |
|
165 |
- return; |
|
166 |
- } |
|
168 |
+ // if (this.mbrVO.authorList.length < 2) { |
|
169 |
+ // alert("사용자 권한은 최소 1개 이상 존재해야 합니다."); |
|
170 |
+ // return; |
|
171 |
+ // } |
|
167 | 172 |
this.mbrVO.authorList.splice(index, 1); |
168 | 173 |
}, |
169 | 174 |
}, |
--- client/views/component/userInfo/UserInfoInsert.vue
+++ client/views/component/userInfo/UserInfoInsert.vue
... | ... | @@ -588,10 +588,10 @@ |
588 | 588 |
} |
589 | 589 |
} |
590 | 590 |
// 사용자 권한 |
591 |
- if (this.mbrVO.authorList.length < 1) { |
|
592 |
- alert("사용자의 권한을 최소 1개 이상 추가하세요."); |
|
593 |
- return false; |
|
594 |
- } |
|
591 |
+ // if (this.mbrVO.authorList.length < 1) { |
|
592 |
+ // alert("사용자의 권한을 최소 1개 이상 추가하세요."); |
|
593 |
+ // return false; |
|
594 |
+ // } |
|
595 | 595 |
} |
596 | 596 |
} |
597 | 597 |
|
--- client/views/layout/AdminMenu.vue
+++ client/views/layout/AdminMenu.vue
... | ... | @@ -54,13 +54,20 @@ |
54 | 54 |
}, |
55 | 55 |
created() { |
56 | 56 |
this.findAll(); |
57 |
- this.menuCheck(); |
|
57 |
+ // this.menuCheck(); |
|
58 | 58 |
}, |
59 | 59 |
methods: { |
60 |
+ // 새로고침 시 메뉴 체크 |
|
60 | 61 |
menuCheck() { |
61 |
- const menu = store.state.menu; |
|
62 |
+ let menu = store.state.menu; |
|
62 | 63 |
if (menu) { |
63 |
- this.checkMenu = menu.menuId; |
|
64 |
+ // this.checkMenu = menu.menuId; |
|
65 |
+ this.activeMenus = this.getParentMenus(menu); |
|
66 |
+ for (const mu of this.activeMenus) { |
|
67 |
+ if (mu.childList && mu.childList.length > 0) { |
|
68 |
+ mu.isOpen = true; // 하위 메뉴가 있을 시 메뉴 펼치기 |
|
69 |
+ } |
|
70 |
+ } |
|
64 | 71 |
} |
65 | 72 |
}, |
66 | 73 |
async findAll() { |
... | ... | @@ -85,8 +92,6 @@ |
85 | 92 |
|
86 | 93 |
// 전체 메뉴 트리 store에 저장 |
87 | 94 |
this.$store.commit('setMenuList', this.menuList); |
88 |
- |
|
89 |
- console.log("menulist",this.menuList) |
|
90 | 95 |
} |
91 | 96 |
} catch (error) { |
92 | 97 |
alert('에러가 발생했습니다.\n관리자에게 문의하세요.'); |
... | ... | @@ -125,24 +130,28 @@ |
125 | 130 |
}, |
126 | 131 |
|
127 | 132 |
isActive(menuId) { |
128 |
- return this.activeMenus.includes(menuId); |
|
133 |
+ // return this.activeMenus.includes(menuId); |
|
134 |
+ return this.activeMenus.some(menu => menu.menuId === menuId); |
|
129 | 135 |
}, |
130 | 136 |
|
131 | 137 |
getParentMenus(menu) { |
132 | 138 |
let parents = []; |
133 | 139 |
while (menu) { |
134 |
- parents.push(menu.menuId); |
|
140 |
+ // parents.push(menu.menuId); |
|
141 |
+ parents.push(menu); |
|
135 | 142 |
menu = this.findParent(menu); |
136 | 143 |
} |
137 | 144 |
return parents; |
138 | 145 |
}, |
139 | 146 |
findParent(menu) { |
140 | 147 |
for (const parent of this.menuList) { |
141 |
- if (parent.childList && parent.childList.includes(menu)) { |
|
142 |
- return parent; |
|
148 |
+ if (parent.childList?.some(child => child.menuId === menu.menuId)) { |
|
149 |
+ // if (parent.childList && parent.childList.includes(menu)) { |
|
150 |
+ return parent; |
|
143 | 151 |
} |
144 | 152 |
for (const child of parent.childList || []) { |
145 |
- if (child.childList && child.childList.includes(menu)) { |
|
153 |
+ if (child.childList?.some(grand => grand.menuId === menu.menuId)) { |
|
154 |
+ // if (child.childList && child.childList.includes(menu)) { |
|
146 | 155 |
return child; |
147 | 156 |
} |
148 | 157 |
} |
... | ... | @@ -172,11 +181,19 @@ |
172 | 181 |
watch: { |
173 | 182 |
// 나중에 네비게이션 가드에서 form 받을 수 있으면 form adm/main으로 갈때 sotre.state값0로 바꿔주기 |
174 | 183 |
$route(to) { |
175 |
- this.currentPath = to.path; |
|
184 |
+ this.currentPath = to.path; |
|
176 | 185 |
}, |
177 | 186 |
"$store.state.mbrNm"(newVal) { |
178 | 187 |
this.mbrNm = newVal; |
179 | 188 |
}, |
189 |
+ '$store.state.menuList': { |
|
190 |
+ immediate: true, |
|
191 |
+ handler(val) { |
|
192 |
+ if (val && val.length > 0) { |
|
193 |
+ this.menuCheck(); |
|
194 |
+ } |
|
195 |
+ } |
|
196 |
+ } |
|
180 | 197 |
} |
181 | 198 |
}; |
182 | 199 |
</script> |
--- client/views/pages/adm/boardManagement/boardManagement/BoardManagementInsert.vue
+++ client/views/pages/adm/boardManagement/boardManagement/BoardManagementInsert.vue
... | ... | @@ -5,10 +5,11 @@ |
5 | 5 |
<div class="form-box mb30"> |
6 | 6 |
<div class="form-box-title"> |
7 | 7 |
<p>기본 설정</p> |
8 |
+ <p><span>*</span>필수입력</p> |
|
8 | 9 |
</div> |
9 | 10 |
<div class="form-content"> |
10 | 11 |
<div class="layout"> |
11 |
- <label class="form-title">게시판명</label> |
|
12 |
+ <label class="form-title"><span>*</span>게시판명</label> |
|
12 | 13 |
<input type="text" class="form-control sm" v-model="bbsMng.bbsNm" |
13 | 14 |
placeholder="게시판명을 입력하세요." /> |
14 | 15 |
</div> |
... | ... | @@ -23,7 +24,7 @@ |
23 | 24 |
placeholder="게시판 설명을 입력하세요." /> |
24 | 25 |
</div> |
25 | 26 |
<div class="layout"> |
26 |
- <label class="form-title">게시판 유형</label> |
|
27 |
+ <label class="form-title"><span>*</span>게시판 유형</label> |
|
27 | 28 |
<select name="" id="" class="form-select sm" @change="typeSelect" |
28 | 29 |
:disabled="bbsMng.bbsMngId != null"> |
29 | 30 |
<option :value="null" disabled :selected="bbsMng.bbsTypeId == null"> |
... | ... | @@ -35,11 +36,11 @@ |
35 | 36 |
</select> |
36 | 37 |
</div> |
37 | 38 |
<div class="layout"> |
38 |
- <label class="form-title">목록 개수</label> |
|
39 |
+ <label class="form-title"><span>*</span>목록 개수</label> |
|
39 | 40 |
<input type="number" class="form-control sm" v-model="bbsMng.artclCnt" /> |
40 | 41 |
</div> |
41 | 42 |
<div class="layout"> |
42 |
- <label class="form-title">페이지 유형</label> |
|
43 |
+ <label class="form-title"><span>*</span>페이지 유형</label> |
|
43 | 44 |
<select name="" id="" class="form-select sm" v-model="bbsMng.cd"> |
44 | 45 |
<option :value="null" disabled>선택해주세요</option> |
45 | 46 |
<option v-for="(item, idx) in pageTypeList" :value="item.cd" :key="idx"> |
... | ... | @@ -52,10 +53,11 @@ |
52 | 53 |
<div class="form-box"> |
53 | 54 |
<div class="form-box-title"> |
54 | 55 |
<p>세부설정</p> |
56 |
+ <p><span>*</span>필수입력</p> |
|
55 | 57 |
</div> |
56 | 58 |
<div class="form-content"> |
57 | 59 |
<div class="layout"> |
58 |
- <label class="form-title">첨부파일 기능</label> |
|
60 |
+ <label class="form-title"><span>*</span>첨부파일 기능</label> |
|
59 | 61 |
<div class="check-area"> |
60 | 62 |
<div class="form-check"> |
61 | 63 |
<input type="radio" name="file" id="file-y" class="mr5" value="Y" |
... | ... | @@ -70,7 +72,7 @@ |
70 | 72 |
</div> |
71 | 73 |
</div> |
72 | 74 |
<div class="layout"> |
73 |
- <label class="form-title">공지글 기능</label> |
|
75 |
+ <label class="form-title"><span>*</span>공지글 기능</label> |
|
74 | 76 |
<div class="check-area"> |
75 | 77 |
<div class="form-check"> |
76 | 78 |
<input type="radio" name="notice" id="notice-y" class="mr5" value="Y" |
... | ... | @@ -85,7 +87,7 @@ |
85 | 87 |
</div> |
86 | 88 |
</div> |
87 | 89 |
<div class="layout"> |
88 |
- <label class="form-title">첨부파일 확장자</label> |
|
90 |
+ <label class="form-title"><span>*</span>첨부파일 확장자</label> |
|
89 | 91 |
<div class="form-group"> |
90 | 92 |
<div class="layout border-none"> |
91 | 93 |
<input type="text" class="form-control sm" v-model="inputExtNm" placeholder="첨부파일 확장자를 입력하세요" |
... | ... | @@ -110,15 +112,15 @@ |
110 | 112 |
</div> |
111 | 113 |
</div> |
112 | 114 |
<div class="layout"> |
113 |
- <label class="form-title">파일크기 제한</label> |
|
115 |
+ <label class="form-title"><span>*</span>파일크기 제한</label> |
|
114 | 116 |
<div class="input-group"> |
115 | 117 |
<input type="number" class="form-control sm" v-model="bbsMng.fileSzLmt" |
116 |
- placeholder="첨부파일 파일 크기를 입력하세요(0 입력 시 제한 없음)" /> |
|
118 |
+ :placeholder="'첨부파일 파일 크기를 입력하세요(0 입력 시 최대' + maxFileSize + 'MB)'" /> |
|
117 | 119 |
<span>MByte</span> |
118 | 120 |
</div> |
119 | 121 |
</div> |
120 | 122 |
<div class="layout"> |
121 |
- <label class="form-title">비밀글 기능</label> |
|
123 |
+ <label class="form-title"><span>*</span>비밀글 기능</label> |
|
122 | 124 |
<div class="check-area"> |
123 | 125 |
<div class="form-check"> |
124 | 126 |
<input type="radio" name="private" id="private-y" class="mr5" value="Y" |
... | ... | @@ -133,7 +135,7 @@ |
133 | 135 |
</div> |
134 | 136 |
</div> |
135 | 137 |
<div class="border-bottom layout"> |
136 |
- <label class="form-title">이전글/다음글 기능</label> |
|
138 |
+ <label class="form-title"><span>*</span>이전글/다음글 기능</label> |
|
137 | 139 |
<div class="check-area"> |
138 | 140 |
<div class="form-check"> |
139 | 141 |
<input type="radio" name="bf" id="bf-y" class="mr5" value="Y" |
... | ... | @@ -148,7 +150,7 @@ |
148 | 150 |
</div> |
149 | 151 |
</div> |
150 | 152 |
<div class="layout"> |
151 |
- <label class="form-title">댓글 기능</label> |
|
153 |
+ <label class="form-title"><span>*</span>댓글 기능</label> |
|
152 | 154 |
<div class="check-area"> |
153 | 155 |
<div class="form-check"> |
154 | 156 |
<input type="radio" name="comment" id="comment-y" class="mr5" value="Y" |
... | ... | @@ -187,6 +189,7 @@ |
187 | 189 |
bbsMng: {}, |
188 | 190 |
bbsTypeList: [], |
189 | 191 |
pageTypeList: [], |
192 |
+ maxFileSize: null, // 시스템 최대 파일 크기 |
|
190 | 193 |
inputExtNm: "", |
191 | 194 |
selectedType: "", |
192 | 195 |
}; |
... | ... | @@ -248,6 +251,7 @@ |
248 | 251 |
|
249 | 252 |
this.bbsTypeList = res.data.data.bbsTypeList; |
250 | 253 |
this.pageTypeList = res.data.data.pageTypeList; |
254 |
+ this.maxFileSize = res.data.data.maxFileSize; // 시스템 최대 파일 크기 |
|
251 | 255 |
} |
252 | 256 |
} catch (error) { |
253 | 257 |
alert("에러가 발생했습니다.\n시스템관리자에게 문의하세요."); |
... | ... | @@ -344,12 +348,16 @@ |
344 | 348 |
alert('댓글 기능을 선택해주세요.'); |
345 | 349 |
return false; |
346 | 350 |
} */ |
351 |
+ if (this.bbsMng.fileSzLmt > this.maxFileSize) { |
|
352 |
+ alert('파일크기는 최대 ' + this.maxFileSize + 'MB까지 가능합니다.'); |
|
353 |
+ return false; |
|
354 |
+ } |
|
347 | 355 |
if ( |
348 | 356 |
this.bbsMng.fileSzLmt < 0 || |
349 | 357 |
this.bbsMng.fileSzLmt == null || |
350 | 358 |
this.bbsMng.fileSzLmt == "" |
351 | 359 |
) { |
352 |
- this.bbsMng.fileSzLmt = 0; |
|
360 |
+ this.bbsMng.fileSzLmt = this.maxFileSize; // 시스템 최대 파일 크기 |
|
353 | 361 |
/* if (this.bbsMng.atchFileUseYn == 'Y') { |
354 | 362 |
alert('파일 크기는 0 이상을 입력해주세요.'); |
355 | 363 |
return false; |
--- client/views/pages/adm/boardManagement/template/commonTemplate/CommonInsert.vue
+++ client/views/pages/adm/boardManagement/template/commonTemplate/CommonInsert.vue
... | ... | @@ -47,11 +47,11 @@ |
47 | 47 |
</div> |
48 | 48 |
<div class="form-content grid-none overflow-y"> |
49 | 49 |
<div class="layout"> |
50 |
- <label for="" class="form-title">제목</label> |
|
50 |
+ <label for="" class="form-title"><span>*</span>제목</label> |
|
51 | 51 |
<input type="text" class="form-control sm" v-model="bbsCn.bbsNm" placeholder="제목을 입력하세요." /> |
52 | 52 |
</div> |
53 | 53 |
<div class="layout" ref="first"> |
54 |
- <label for="" class="form-title">내용</label> |
|
54 |
+ <label for="" class="form-title"><span>*</span>내용</label> |
|
55 | 55 |
<div class="w_100 h_100"> |
56 | 56 |
<ckeditorComponent ref="ckeditor5" :bbsCn.sync="bbsCn"></ckeditorComponent> |
57 | 57 |
</div> |
... | ... | @@ -324,6 +324,7 @@ |
324 | 324 |
formData.append("multipartImgList", imgFile); |
325 | 325 |
} |
326 | 326 |
// axios 호출 |
327 |
+ console.log("등록 Authorization 확인: ", this.$store.state.authorization); |
|
327 | 328 |
await defaultAxios({ |
328 | 329 |
url: this.$filters.ctxPath("/sys/bbsCn/saveBbsCn.file"), |
329 | 330 |
method: "post", |
... | ... | @@ -385,6 +386,7 @@ |
385 | 386 |
for (const imgFile of this.imgFileList) { |
386 | 387 |
formData.append("multipartImgList", imgFile); |
387 | 388 |
} |
389 |
+ console.log("수정 Authorization 확인: ", this.$store.state.authorization); |
|
388 | 390 |
// axios 호출 |
389 | 391 |
defaultAxios({ |
390 | 392 |
url: this.$filters.ctxPath("/sys/bbsCn/updateBbsCn.file"), |
... | ... | @@ -412,7 +414,7 @@ |
412 | 414 |
}, |
413 | 415 |
// 유효성 검사 |
414 | 416 |
Validation() { |
415 |
- if (this.bbsCn.bbsNm == null || this.bbsCn.bbsNm.trim() == "") { |
|
417 |
+ if (!this.bbsCn.bbsNm || this.bbsCn.bbsNm.trim() === "") { |
|
416 | 418 |
alert("게시판 제목을 입력해주세요."); |
417 | 419 |
return false; |
418 | 420 |
} |
--- client/views/pages/adm/boardManagement/template/faqTemplate/FaqInsert.vue
+++ client/views/pages/adm/boardManagement/template/faqTemplate/FaqInsert.vue
... | ... | @@ -9,7 +9,7 @@ |
9 | 9 |
</div> |
10 | 10 |
<div class="form-content grid-none"> |
11 | 11 |
<div class="layout" ref="first"> |
12 |
- <label for="" class="form-title">내용</label> |
|
12 |
+ <label for="" class="form-title"><span>*</span>내용</label> |
|
13 | 13 |
<template v-if="ansPageId != null"> |
14 | 14 |
<textarea class="form-control area" placeholder="답변을 입력하세요." v-model="bbsCn.ansCn" style="height: 100%;"></textarea> |
15 | 15 |
</template> |
... | ... | @@ -280,7 +280,7 @@ |
280 | 280 |
// 등록 |
281 | 281 |
async fnSave() { |
282 | 282 |
// 내용 null검사 |
283 |
- if (this.bbsCn.bbsCn === null || this.bbsCn.bbsCn.trim() == "") { |
|
283 |
+ if (!this.bbsCn.bbsCn || this.bbsCn.bbsCn.trim() === "") { |
|
284 | 284 |
alert("내용을 입력하세요."); |
285 | 285 |
return; |
286 | 286 |
} |
--- client/views/pages/adm/boardManagement/template/galleryTemplate/GalleryInsert.vue
+++ client/views/pages/adm/boardManagement/template/galleryTemplate/GalleryInsert.vue
... | ... | @@ -9,7 +9,7 @@ |
9 | 9 |
</div> |
10 | 10 |
<div class="form-content grid-none overflow-y"> |
11 | 11 |
<div class="layout"> |
12 |
- <label for="" class="form-title">제목</label> |
|
12 |
+ <label for="" class="form-title"><span>*</span>제목</label> |
|
13 | 13 |
<input |
14 | 14 |
type="text" |
15 | 15 |
class="form-control sm" |
... | ... | @@ -18,13 +18,13 @@ |
18 | 18 |
/> |
19 | 19 |
</div> |
20 | 20 |
<div class="layout" ref="first"> |
21 |
- <label for="" class="form-title">내용</label> |
|
21 |
+ <label for="" class="form-title"><span>*</span>내용</label> |
|
22 | 22 |
<div class="w_100 h_100"> |
23 | 23 |
<ckeditorComponent ref="ckeditor5" :bbsCn.sync="bbsCn"></ckeditorComponent> |
24 | 24 |
</div> |
25 | 25 |
</div> |
26 | 26 |
<div class="layout"> |
27 |
- <label for="" class="form-title">이미지 파일</label> |
|
27 |
+ <label for="" class="form-title"><span>*</span>이미지 파일</label> |
|
28 | 28 |
<div> |
29 | 29 |
<label for="imgFile" class="file-upload">파일찾기</label> |
30 | 30 |
<input type="file" id="imgFile" ref="imgFile" @change="fnImgFileInsert" multiple accept="image/*" class="sr-only"/> |
... | ... | @@ -420,7 +420,7 @@ |
420 | 420 |
}, |
421 | 421 |
// 유효성 검사 |
422 | 422 |
Validation() { |
423 |
- if (this.bbsCn.bbsNm == null || this.bbsCn.bbsNm.trim() == "") { |
|
423 |
+ if (!this.bbsCn.bbsNm || this.bbsCn.bbsNm.trim() === "") { |
|
424 | 424 |
alert("게시판 제목을 입력해주세요."); |
425 | 425 |
return false; |
426 | 426 |
} |
--- client/views/pages/adm/boardManagement/template/videoTemplate/VideoInsert.vue
+++ client/views/pages/adm/boardManagement/template/videoTemplate/VideoInsert.vue
... | ... | @@ -9,7 +9,7 @@ |
9 | 9 |
</div> |
10 | 10 |
<div class="form-content grid-none overflow-y"> |
11 | 11 |
<div class="layout"> |
12 |
- <label for="" class="form-title">제목</label> |
|
12 |
+ <label for="" class="form-title"><span>*</span>제목</label> |
|
13 | 13 |
<input |
14 | 14 |
type="text" |
15 | 15 |
class="form-control sm" |
... | ... | @@ -18,13 +18,13 @@ |
18 | 18 |
/> |
19 | 19 |
</div> |
20 | 20 |
<div class="layout" ref="first"> |
21 |
- <label for="" class="form-title">내용</label> |
|
21 |
+ <label for="" class="form-title"><span>*</span>내용</label> |
|
22 | 22 |
<div class="w_100 h_100"> |
23 | 23 |
<ckeditorComponent ref="ckeditor5" :bbsCn.sync="bbsCn"></ckeditorComponent> |
24 | 24 |
</div> |
25 | 25 |
</div> |
26 | 26 |
<div class="layout"> |
27 |
- <label for="" class="form-title">영상 URL</label> |
|
27 |
+ <label for="" class="form-title"><span>*</span>영상 URL</label> |
|
28 | 28 |
<input |
29 | 29 |
type="text" |
30 | 30 |
class="form-control sm" |
... | ... | @@ -746,7 +746,7 @@ |
746 | 746 |
}, |
747 | 747 |
// 유효성 검사 |
748 | 748 |
Validation() { |
749 |
- if (this.bbsCn.bbsNm == null || this.bbsCn.bbsNm.trim() == "") { |
|
749 |
+ if (!this.bbsCn.bbsNm || this.bbsCn.bbsNm.trim() === "") { |
|
750 | 750 |
alert("게시판 제목을 입력해주세요."); |
751 | 751 |
return false; |
752 | 752 |
} |
... | ... | @@ -772,7 +772,7 @@ |
772 | 772 |
} |
773 | 773 |
|
774 | 774 |
// url null 검사 |
775 |
- if (this.bbsCn.vdoUrl == null || this.bbsCn.vdoUrl.trim() == "") { |
|
775 |
+ if (!this.bbsCn.vdoUrl || this.bbsCn.vdoUrl.trim() === "") { |
|
776 | 776 |
alert("영상 URL을 입력해주세요."); |
777 | 777 |
return false; |
778 | 778 |
} |
--- client/views/pages/adm/boardManagement/wordsManagement/WordsManagementSelectList.vue
+++ client/views/pages/adm/boardManagement/wordsManagement/WordsManagementSelectList.vue
... | ... | @@ -146,6 +146,10 @@ |
146 | 146 |
// 금지어 등록 |
147 | 147 |
async fnSave() { |
148 | 148 |
try { |
149 |
+ if (this.wordsArr.length == 0) { |
|
150 |
+ alert('등록할 금지어를 추가해주세요.') |
|
151 |
+ return |
|
152 |
+ } |
|
149 | 153 |
const param = { |
150 | 154 |
wordsArr: this.wordsArr |
151 | 155 |
} |
--- client/views/pages/adm/departmentManagement/DepartmentManagement.vue
+++ client/views/pages/adm/departmentManagement/DepartmentManagement.vue
... | ... | @@ -38,6 +38,7 @@ |
38 | 38 |
<div class="form-box"> |
39 | 39 |
<div class="form-box-title"> |
40 | 40 |
<p>부서 정보</p> |
41 |
+ <p><span>*</span>필수입력</p> |
|
41 | 42 |
</div> |
42 | 43 |
<div class="form-content"> |
43 | 44 |
<div class="layout"> |
... | ... | @@ -50,7 +51,7 @@ |
50 | 51 |
/> |
51 | 52 |
</div> |
52 | 53 |
<div class="layout"> |
53 |
- <label class="form-title">부서명</label> |
|
54 |
+ <label class="form-title"><span>*</span>부서명</label> |
|
54 | 55 |
<input |
55 | 56 |
type="text" |
56 | 57 |
class="form-control sm" |
... | ... | @@ -60,7 +61,7 @@ |
60 | 61 |
/> |
61 | 62 |
</div> |
62 | 63 |
<div class="grid-column layout"> |
63 |
- <label class="form-title">부서권한</label> |
|
64 |
+ <label class="form-title"><span>*</span>부서권한</label> |
|
64 | 65 |
<select |
65 | 66 |
class="form-select sm" |
66 | 67 |
:disabled="isFormDisabled" |
... | ... | @@ -266,6 +267,7 @@ |
266 | 267 |
const res = await findByDept(params); |
267 | 268 |
if (res.status == 200) { |
268 | 269 |
this.fnReset(); // 초기화 |
270 |
+ this.mblTelnoSplit(res.data.data.deptMbr); |
|
269 | 271 |
this.viewDept = res.data.data.dept; // 부서 정보 |
270 | 272 |
this.deptMbr = res.data.data.deptMbr; // 부서에 등록된 사용자 목록 |
271 | 273 |
this.selectedDeptId = this.viewDept.deptId; |
... | ... | @@ -286,9 +288,8 @@ |
286 | 288 |
}, |
287 | 289 |
// 저장 |
288 | 290 |
async fnSave() { |
289 |
- // 부서 권한 설정 |
|
290 |
- if (!this.fnDeptAuthrt()) { |
|
291 |
- alert("부서 권한을 지정해주세요."); |
|
291 |
+ // 유효성 검사 |
|
292 |
+ if (this.validation() == false) { |
|
292 | 293 |
return false; |
293 | 294 |
} |
294 | 295 |
// 신규 등록 및 수정 설정 |
... | ... | @@ -304,13 +305,15 @@ |
304 | 305 |
alert(error.response.data.message); |
305 | 306 |
} |
306 | 307 |
}, |
307 |
- // 부서권한 설정 |
|
308 |
- fnDeptAuthrt() { |
|
309 |
- if ( |
|
310 |
- this.selectedAuthrt == null || |
|
311 |
- this.selectedAuthrt == "" || |
|
312 |
- this.selectedAuthrt == undefined |
|
313 |
- ) { |
|
308 |
+ // 유효성 검사 |
|
309 |
+ validation() { |
|
310 |
+ if (!this.viewDept.deptNm || this.viewDept.deptNm.trim() === "") { |
|
311 |
+ alert("부서명을 입력해주세요."); |
|
312 |
+ return false; |
|
313 |
+ } |
|
314 |
+ // 부서권한 검사 |
|
315 |
+ if (!this.selectedAuthrt) { |
|
316 |
+ alert("부서 권한을 지정해주세요."); |
|
314 | 317 |
return false; |
315 | 318 |
} |
316 | 319 |
let authrtList = []; |
... | ... | @@ -424,6 +427,8 @@ |
424 | 427 |
const res = await findByMbr(params); |
425 | 428 |
// alert(res.data.message); |
426 | 429 |
if (res.status == 200) { |
430 |
+ this.mblTelnoSplit(res.data.data.mbrList); |
|
431 |
+ this.mblTelnoSplit(res.data.data.deptMbr); |
|
427 | 432 |
this.mbrList = res.data.data.mbrList; // 부서에 등록되지 않은 사용자 목록 |
428 | 433 |
this.deptMbr = res.data.data.deptMbr; // 부서에 등록된 사용자 목록 |
429 | 434 |
this.makeTbody(); |
... | ... | @@ -511,6 +516,17 @@ |
511 | 516 |
this.topBoxHeight = this.$refs.topBox.offsetHeight; |
512 | 517 |
} |
513 | 518 |
}, |
519 |
+ |
|
520 |
+ // 휴대폰번호 표기 변환 |
|
521 |
+ mblTelnoSplit(data) { |
|
522 |
+ for (const item of data) { |
|
523 |
+ const mblTelno = item["mblTelno"]; |
|
524 |
+ const start = mblTelno.substring(0, 3); |
|
525 |
+ const middle = mblTelno.substring(3, mblTelno.length - 4); |
|
526 |
+ const end = mblTelno.substring(mblTelno.length - 4, mblTelno.length); |
|
527 |
+ item["mblTelno"] = start + "-" + middle + "-" + end; |
|
528 |
+ } |
|
529 |
+ }, |
|
514 | 530 |
}, |
515 | 531 |
watch: { |
516 | 532 |
topBoxHeight() { |
--- client/views/pages/adm/popup/PopupManagementInsert.vue
+++ client/views/pages/adm/popup/PopupManagementInsert.vue
... | ... | @@ -5,10 +5,11 @@ |
5 | 5 |
<div class="form-box"> |
6 | 6 |
<div class="form-box-title"> |
7 | 7 |
<p>기본정보</p> |
8 |
+ <p><span>*</span>필수입력</p> |
|
8 | 9 |
</div> |
9 | 10 |
<div class="form-content"> |
10 | 11 |
<div class="layout"> |
11 |
- <label class="form-title">제목</label> |
|
12 |
+ <label class="form-title"><span>*</span>제목</label> |
|
12 | 13 |
<input |
13 | 14 |
type="text" |
14 | 15 |
class="form-control sm" |
... | ... | @@ -18,7 +19,7 @@ |
18 | 19 |
/> |
19 | 20 |
</div> |
20 | 21 |
<div class="layout"> |
21 |
- <label class="form-title">게시일</label> |
|
22 |
+ <label class="form-title"><span>*</span>게시일</label> |
|
22 | 23 |
<div class="input-group"> |
23 | 24 |
<div class="form-control sm cal"> |
24 | 25 |
<VueDatePicker |
... | ... | @@ -44,7 +45,7 @@ |
44 | 45 |
</div> |
45 | 46 |
</div> |
46 | 47 |
<div class="layout"> |
47 |
- <label class="form-title">팝업크기</label> |
|
48 |
+ <label class="form-title"><span>*</span>팝업크기</label> |
|
48 | 49 |
<div class="input-group"> |
49 | 50 |
<select class="form-select sm fixed" v-model="popup['popupSizeType']"> |
50 | 51 |
<option value="fixed">고정값</option> |
... | ... | @@ -90,7 +91,7 @@ |
90 | 91 |
</div> |
91 | 92 |
</div> |
92 | 93 |
<div class="layout"> |
93 |
- <label class="form-title">업로드 형식</label> |
|
94 |
+ <label class="form-title"><span>*</span>업로드 형식</label> |
|
94 | 95 |
<div class="check-area"> |
95 | 96 |
<div class="form-check"> |
96 | 97 |
<input |
... | ... | @@ -116,7 +117,7 @@ |
116 | 117 |
</div> |
117 | 118 |
<template v-if="popup['popupType'] == 'image'"> |
118 | 119 |
<div class="layout"> |
119 |
- <label class="form-title">이미지 첨부파일</label> |
|
120 |
+ <label class="form-title"><span>*</span>이미지 첨부파일</label> |
|
120 | 121 |
|
121 | 122 |
<div v-for="(file, index) of this.fileList" :key="index" class="input-group" style="height: 100%" > |
122 | 123 |
<p v-if="file['fileId'] != null"> |
... | ... | @@ -145,7 +146,7 @@ |
145 | 146 |
</div> |
146 | 147 |
|
147 | 148 |
<div class="layout"> |
148 |
- <label class="form-title">링크 URL</label> |
|
149 |
+ <label class="form-title"><span>*</span>링크 URL</label> |
|
149 | 150 |
<input |
150 | 151 |
type="text" |
151 | 152 |
class="form-control sm" |
... | ... | @@ -158,7 +159,7 @@ |
158 | 159 |
</template> |
159 | 160 |
<template v-if="popup['popupType'] == 'video'"> |
160 | 161 |
<div class="layout"> |
161 |
- <label class="form-title">동영상 URL</label> |
|
162 |
+ <label class="form-title"><span>*</span>동영상 URL</label> |
|
162 | 163 |
<input |
163 | 164 |
type="text" |
164 | 165 |
class="form-control sm" |
... | ... | @@ -168,9 +169,10 @@ |
168 | 169 |
ref="vdoUrl" |
169 | 170 |
/> |
170 | 171 |
</div> |
172 |
+ <div class="layout"></div> |
|
171 | 173 |
</template> |
172 | 174 |
<div class="layout"> |
173 |
- <label class="form-title">팝업 노출 페이지</label> |
|
175 |
+ <label class="form-title"><span>*</span>팝업 노출 페이지</label> |
|
174 | 176 |
<select |
175 | 177 |
class="form-select sm " |
176 | 178 |
v-model="popup['pageType']" |
... | ... | @@ -187,7 +189,7 @@ |
187 | 189 |
</select> |
188 | 190 |
</div> |
189 | 191 |
<div class="layout"> |
190 |
- <label class="form-title">순서</label> |
|
192 |
+ <label class="form-title"><span>*</span>순서</label> |
|
191 | 193 |
<select class="form-select sm " v-model="popup['sn']" ref="sn"> |
192 | 194 |
<option value="0">순서를 선택하세요.</option> |
193 | 195 |
<option value="1">1</option> |
... | ... | @@ -338,44 +340,41 @@ |
338 | 340 |
|
339 | 341 |
// 유효성 검사 |
340 | 342 |
valiadtion() { |
341 |
- if (this.popup["popupTtl"] == null || this.popup["popupTtl"] == "") { |
|
343 |
+ if (!this.popup["popupTtl"] || this.popup["popupTtl"].trim() === "") { |
|
342 | 344 |
alert("제목을 입력해주세요."); |
343 | 345 |
this.$refs.popupTtl.focus(); |
344 | 346 |
return false; |
345 | 347 |
} |
346 |
- if (this.popup["bgngDt"] == null || this.popup["bgngDt"] == "") { |
|
348 |
+ if (!this.popup["bgngDt"]) { |
|
347 | 349 |
alert("시작일을 입력해주세요."); |
348 | 350 |
this.$refs.bgngDt.focus(); |
349 | 351 |
return false; |
350 | 352 |
} |
351 |
- if (this.popup["endDt"] == null || this.popup["endDt"] == "") { |
|
353 |
+ if (!this.popup["endDt"]) { |
|
352 | 354 |
alert("종료일을 입력해주세요."); |
353 | 355 |
this.$refs.endDt.focus(); |
354 | 356 |
return false; |
355 | 357 |
} |
356 |
- if ( |
|
357 |
- this.popup["popupSizeType"] == "null" || |
|
358 |
- this.popup["popupSizeType"] == "" |
|
359 |
- ) { |
|
358 |
+ if (!this.popup["popupSizeType"]) { |
|
360 | 359 |
alert("팝업 크기를 선택해주세요."); |
361 | 360 |
return false; |
362 | 361 |
} |
363 | 362 |
if (this.popup["popupSizeType"] == "fixed") { |
364 |
- if (this.popup["popupSize"] == null || this.popup["popupSize"] == "") { |
|
363 |
+ if (!this.popup["popupSize"]) { |
|
365 | 364 |
alert("팝업 크기를 선택해주세요."); |
366 | 365 |
return false; |
367 | 366 |
} |
368 | 367 |
} else if (this.popup["popupSizeType"] == "custom") { |
369 |
- if (this.popup["wdthLen"] == null || this.popup["wdthLen"] == "") { |
|
368 |
+ if (!this.popup["wdthLen"]) { |
|
370 | 369 |
alert("팝업 가로 크기를 선택해주세요."); |
371 | 370 |
return false; |
372 | 371 |
} |
373 |
- if (this.popup["vrtcLen"] == null || this.popup["vrtcLen"] == "") { |
|
372 |
+ if (!this.popup["vrtcLen"]) { |
|
374 | 373 |
alert("팝업 세로 크기를 선택해주세요."); |
375 | 374 |
return false; |
376 | 375 |
} |
377 | 376 |
} |
378 |
- if (this.popup["popupType"] == null || this.popup["popupType"] == "") { |
|
377 |
+ if (!this.popup["popupType"]) { |
|
379 | 378 |
alert("업로드 형식을 선택해주세요."); |
380 | 379 |
return false; |
381 | 380 |
} |
... | ... | @@ -384,31 +383,31 @@ |
384 | 383 |
alert("이미지 첨부파일을 선택해주세요."); |
385 | 384 |
return false; |
386 | 385 |
} |
387 |
- if (this.popup["linkUrl"] == null || this.popup["linkUrl"] == "") { |
|
386 |
+ if (!this.popup["linkUrl"]) { |
|
388 | 387 |
alert("링크 URL을 선택해주세요."); |
389 | 388 |
this.$refs.linkUrl.focus(); |
390 | 389 |
return false; |
391 | 390 |
} |
392 | 391 |
} else if (this.popup["popupType"] == "video") { |
393 |
- if (this.popup["vdoUrl"] == null || this.popup["vdoUrl"] == "") { |
|
392 |
+ if (!this.popup["vdoUrl"]) { |
|
394 | 393 |
alert("동영상 URL을 선택해주세요."); |
395 | 394 |
this.$refs.vdoUrl.focus(); |
396 | 395 |
return false; |
397 | 396 |
} |
398 | 397 |
} |
399 |
- if (this.popup["sn"] == null || this.popup["sn"] == "") { |
|
398 |
+ if (!this.popup["sn"]) { |
|
400 | 399 |
alert("순서를 선택해주세요."); |
401 | 400 |
this.$refs.sn.focus(); |
402 | 401 |
return false; |
403 | 402 |
} |
404 |
- if (this.popup["pageType"] == null || this.popup["pageType"] == "") { |
|
403 |
+ if (!this.popup["pageType"]) { |
|
405 | 404 |
alert("팝업 노출 페이지를 선택해주세요."); |
406 | 405 |
return false; |
407 | 406 |
} |
408 |
- if (this.popup["popupUseYn"] == null || this.popup["popupUseYn"] == "") { |
|
409 |
- alert("사용 유무를 선택해주세요."); |
|
410 |
- return false; |
|
411 |
- } |
|
407 |
+ // if (!this.popup["popupUseYn"]) { |
|
408 |
+ // alert("사용 유무를 선택해주세요."); |
|
409 |
+ // return false; |
|
410 |
+ // } |
|
412 | 411 |
}, |
413 | 412 |
|
414 | 413 |
//─────axios─────┐ |
--- client/views/pages/adm/preferences/commonCodeManagement/CommonCodeManagement.vue
+++ client/views/pages/adm/preferences/commonCodeManagement/CommonCodeManagement.vue
... | ... | @@ -30,6 +30,7 @@ |
30 | 30 |
<div class="form-box sch-full"> |
31 | 31 |
<div class="form-box-title"> |
32 | 32 |
<p>공통코드정보</p> |
33 |
+ <p><span>*</span>필수입력</p> |
|
33 | 34 |
</div> |
34 | 35 |
<div class="form-content" style="grid-template-rows: auto auto auto 1fr;"> |
35 | 36 |
<div class="layout"> |
... | ... | @@ -41,12 +42,12 @@ |
41 | 42 |
<input type="text" class="form-control sm" disabled v-model="viewCode.upCdNm" /> |
42 | 43 |
</div> |
43 | 44 |
<div class="layout"> |
44 |
- <label for="" class="form-title">코드</label> |
|
45 |
+ <label for="" class="form-title"><span>*</span>코드</label> |
|
45 | 46 |
<input type="text" class="form-control sm" :disabled="isFormDisabled || !submitStts" |
46 | 47 |
v-model="viewCode.cd" placeholder="코드를 입력해주세요"/> |
47 | 48 |
</div> |
48 | 49 |
<div class="layout"> |
49 |
- <label for="" class="form-title">코드명</label> |
|
50 |
+ <label for="" class="form-title"><span>*</span>코드명</label> |
|
50 | 51 |
<input type="text" class="form-control sm" :disabled="isFormDisabled" v-model="viewCode.cdNm" placeholder="코드명을 입력해주세요"/> |
51 | 52 |
</div> |
52 | 53 |
<div class="layout"> |
... | ... | @@ -54,7 +55,7 @@ |
54 | 55 |
<input type="text" class="form-control sm" :disabled="isFormDisabled" v-model="viewCode.cdVl" placeholder="코드값을 입력해주세요"/> |
55 | 56 |
</div> |
56 | 57 |
<div class="border-bottom layout"> |
57 |
- <label for="" class="form-title">사용여부</label> |
|
58 |
+ <label for="" class="form-title"><span>*</span>사용여부</label> |
|
58 | 59 |
<div class="check-area"> |
59 | 60 |
<div class="form-check"> |
60 | 61 |
<input type="radio" name="code" id="y" value="Y" :disabled="isFormDisabled" |
... | ... | @@ -240,11 +241,7 @@ |
240 | 241 |
this.submitStts = true; |
241 | 242 |
}, |
242 | 243 |
validation() { |
243 |
- if ( |
|
244 |
- this.viewCode.cd == null || |
|
245 |
- this.viewCode.cd == "" || |
|
246 |
- this.viewCode.cd == undefined |
|
247 |
- ) { |
|
244 |
+ if (!this.viewCode.cd || this.viewCode.cd.trim() === "") { |
|
248 | 245 |
alert("코드를 입력해주세요."); |
249 | 246 |
return false; |
250 | 247 |
} |
... | ... | @@ -253,11 +250,7 @@ |
253 | 250 |
alert("코드는 영문과 언더바(_)만 사용하여 작성해주세요."); |
254 | 251 |
return false; |
255 | 252 |
} |
256 |
- if ( |
|
257 |
- this.viewCode.cdNm == null || |
|
258 |
- this.viewCode.cdNm == "" || |
|
259 |
- this.viewCode.cdNm == undefined |
|
260 |
- ) { |
|
253 |
+ if (!this.viewCode.cdNm || this.viewCode.cdNm.trim() === "") { |
|
261 | 254 |
alert("코드명을 입력해주세요."); |
262 | 255 |
return false; |
263 | 256 |
} |
--- client/views/pages/adm/preferences/contentTypeManagement/ContentTypeManagementInsert.vue
+++ client/views/pages/adm/preferences/contentTypeManagement/ContentTypeManagementInsert.vue
... | ... | @@ -5,11 +5,12 @@ |
5 | 5 |
<div class="form-box"> |
6 | 6 |
<div class="form-box-title"> |
7 | 7 |
<p>기본정보</p> |
8 |
+ <p><span>*</span>필수입력</p> |
|
8 | 9 |
</div> |
9 | 10 |
<div class="form-content"> |
10 | 11 |
<div class="layout"> |
11 | 12 |
<label for="" class="form-title"> |
12 |
- 콘텐츠 한글명 |
|
13 |
+ <span>*</span>콘텐츠 한글명 |
|
13 | 14 |
</label> |
14 | 15 |
<input |
15 | 16 |
type="text" |
... | ... | @@ -21,7 +22,7 @@ |
21 | 22 |
</div> |
22 | 23 |
<div class="layout"> |
23 | 24 |
<label for="" class="form-title"> |
24 |
- 콘텐츠 영문명 |
|
25 |
+ <span>*</span>콘텐츠 영문명 |
|
25 | 26 |
</label> |
26 | 27 |
<input |
27 | 28 |
type="text" |
... | ... | @@ -35,13 +36,16 @@ |
35 | 36 |
<label for="" class="form-title"> |
36 | 37 |
관리자 PATH |
37 | 38 |
</label> |
38 |
- <input |
|
39 |
- type="text" |
|
40 |
- class="form-control sm" |
|
41 |
- v-model="contsTypeVO.mngrPageCrs" |
|
42 |
- ref="mngrPageCrs" |
|
43 |
- placeholder="관리자 path를 입력해주세요" |
|
44 |
- /> |
|
39 |
+ <div class="form-group"> |
|
40 |
+ <input |
|
41 |
+ type="text" |
|
42 |
+ class="form-control sm" |
|
43 |
+ v-model="contsTypeVO.mngrPageCrs" |
|
44 |
+ ref="mngrPageCrs" |
|
45 |
+ placeholder="관리자 path를 입력해주세요" |
|
46 |
+ /> |
|
47 |
+ <span><strong>관리자 PATH</strong> 또는 <strong>사용자 PATH</strong> 중 하나는 필수입니다</span> |
|
48 |
+ </div> |
|
45 | 49 |
</div> |
46 | 50 |
<div class="layout"> |
47 | 51 |
<label for="" class="form-title"> |
... | ... | @@ -57,7 +61,7 @@ |
57 | 61 |
</div> |
58 | 62 |
<div class="layout"> |
59 | 63 |
<label for="" class="form-title"> |
60 |
- COMPONENT_URL |
|
64 |
+ <span>*</span>COMPONENT_URL |
|
61 | 65 |
</label> |
62 | 66 |
<input |
63 | 67 |
type="text" |
... | ... | @@ -69,7 +73,7 @@ |
69 | 73 |
</div> |
70 | 74 |
<div class="layout"> |
71 | 75 |
<label for="" class="form-title"> |
72 |
- 메뉴노출 |
|
76 |
+ <span>*</span>메뉴노출 |
|
73 | 77 |
</label> |
74 | 78 |
<div class="check-area"> |
75 | 79 |
<div class="form-check"> |
--- client/views/pages/adm/system/LoginPolicy/LoginPolicy.vue
+++ client/views/pages/adm/system/LoginPolicy/LoginPolicy.vue
... | ... | @@ -4,8 +4,8 @@ |
4 | 4 |
<div class="scroll"> |
5 | 5 |
<div open class="form-box"> |
6 | 6 |
<div class="form-box-title"> |
7 |
- <p class="summary-style pl10">기본 정보</p> |
|
8 |
- <span style="color: red;"> ※ 로그인 정책을 변경하면 전체 사용자가 로그아웃됩니다.</span> |
|
7 |
+ <p>기본정보</p> |
|
8 |
+ <p><span>*</span>로그인 정책을 변경하면 전체 사용자가 로그아웃됩니다.</p> |
|
9 | 9 |
</div> |
10 | 10 |
<div class="form-content"> |
11 | 11 |
<div class="layout"> |
--- client/views/pages/adm/system/networkAccessControl/NetworkAccessControlInsert.vue
+++ client/views/pages/adm/system/networkAccessControl/NetworkAccessControlInsert.vue
... | ... | @@ -9,7 +9,7 @@ |
9 | 9 |
</div> |
10 | 10 |
<div class="form-content"> |
11 | 11 |
<div class="layout"> |
12 |
- <label for="" class="form-title"><span>*</span> 제어 유형</label> |
|
12 |
+ <label for="" class="form-title"><span>*</span>제어 유형</label> |
|
13 | 13 |
<select name="selectType" id="selectType" class="form-select sm" |
14 | 14 |
v-model="accesCtrl.cntrlType"> |
15 | 15 |
<option value="">전체</option> |
... | ... | @@ -18,14 +18,14 @@ |
18 | 18 |
</select> |
19 | 19 |
</div> |
20 | 20 |
<div class="layout border-bottom"> |
21 |
- <label for="" class="form-title"><span>*</span> 제어 IP</label> |
|
21 |
+ <label for="" class="form-title"><span>*</span>제어 IP</label> |
|
22 | 22 |
<div class="form-group"> |
23 | 23 |
<input type="text" class="form-control sm" v-model="accesCtrl.cntrlIp" placeholder="1~255 범위의 숫자로 구성하여 형식에 맞게 작성해주세요." /> |
24 | 24 |
<span>ex) 192.168.0.1 / 192.168.0.*</span> |
25 | 25 |
</div> |
26 | 26 |
</div> |
27 | 27 |
<div class="layout"> |
28 |
- <label for="" class="form-title"><span>*</span> 제어 경로</label> |
|
28 |
+ <label for="" class="form-title"><span>*</span>제어 경로</label> |
|
29 | 29 |
<input type="text" class="form-control sm" v-model="accesCtrl.cntrlCrs" placeholder="제어할 경로 URL을 입력하세요."/> |
30 | 30 |
</div> |
31 | 31 |
</div> |
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?