류윤주 류윤주 05-12
Merge branch 'master' of http://210.180.118.83/jhpark/cms_frontend
@f97005a84d173470613ac6048ad546342fae34ba
 
client/resources/js/defaultMenuSatisfactionParams.js (added)
+++ client/resources/js/defaultMenuSatisfactionParams.js
@@ -0,0 +1,12 @@
+// 관리자 정보 객체
+const defaultMenuDgstfnParams = {
+  menuId: '',
+  rspnsFive: 'N',
+  rspnsFour: 'N',
+  rspnsThree: 'N',
+  rspnsTwo: 'N',
+  rspnsOne: 'N',
+  opnn: '',
+};
+
+export { defaultMenuDgstfnParams };(파일 끝에 줄바꿈 문자 없음)
client/resources/js/queryParams.js
--- client/resources/js/queryParams.js
+++ client/resources/js/queryParams.js
@@ -40,9 +40,9 @@
         /** 게시판 pageId 추출 **/
         fnBbsIdExtraction() {
             if(this.$route.path != null && this.$route.path != undefined && this.$route.path != '') {
-                console.log("this.$route.path", this.$route.path)
+                console.log("this.$route.path: ", this.$route.path);
                 let url = this.$filters.logicalPath(this.$route.path);
-                console.log("url", url)
+                console.log("url: ", url);
                 const regex = /^\/[^\/]+\/([^\/]+)\//; // 두 번째 '/'와 세 번째 '/' 사이의 문자열 추출
                 const match = url.match(regex); // 라우터 경로와 정규식 매칭
                 if(match) {
client/views/component/userInfo/UserAuthorList.vue
--- client/views/component/userInfo/UserAuthorList.vue
+++ client/views/component/userInfo/UserAuthorList.vue
@@ -1,7 +1,5 @@
 <template>
-
-
-    <label class="form-title"><span v-if="editMode != 'view'">*</span> 사용자 권한</label>
+    <label class="form-title"><span v-if="editMode != 'view'">* </span>사용자 권한</label>
     <div :class="{'form-group':editMode != 'view'}">
       <button  v-show="editMode != 'view'" class="btn sm ico-plus-w auth-btn" @click="fnAuthAddModalOpen">권한 추가</button>
       <template v-if="mbrVO.authorList != null && mbrVO.authorList != []">
@@ -128,7 +126,12 @@
         const response = await findAllSystem(params);
         this.originalList = response.data.data;
       } catch (error) {
-        alert("에러가 발생했습니다.\n관리자에게 문의해주세요.");
+        const errorData = error.response.data;
+        if (errorData.message != null && errorData.message != "") {
+          alert(error.response.data.message);
+        } else {
+          alert("에러가 발생했습니다.\n관리자에게 문의해주세요.");
+        }
       }
     },
     // 사용자권한 선택
client/views/component/userInfo/UserInfoInsert.vue
--- client/views/component/userInfo/UserInfoInsert.vue
+++ client/views/component/userInfo/UserInfoInsert.vue
@@ -8,270 +8,156 @@
             <p><span>*</span>필수입력</p>
           </div>
           <div class="form-content">
-            <div  class="layout">
-                <label class="form-title"><span>*</span> 아이디</label>
-                <input
-                  type="text"
-                  class="form-control sm"
-                  v-model="mbrVO.lgnId"
-                  ref="mbrId"
-                  minlength="5"
-                  maxlength="50"
-                  placeholder="아이디를 입력하세요."
-                  :disabled="mbrVO.mbrId != null"
-                />
+            <div class="layout">
+              <label class="form-title"><span>*</span>아이디</label>
+              <input type="text" class="form-control sm" v-model="mbrVO.lgnId" ref="mbrId" minlength="5" maxlength="50"
+                placeholder="아이디를 입력하세요." :disabled="mbrVO.mbrId != null" />
+            </div>
+            <div class="layout">
+              <label class="form-title"><span>*</span>이름</label>
+              <input type="text" class="form-control sm" ref="mbrNm" v-model="mbrVO.mbrNm" minlength="2" maxlength="50"
+                placeholder="이름을 입력하세요." />
+            </div>
+            <div class="layout">
+              <label class="form-title">
+                <p v-if="pageId == null"><span>*</span>비밀번호</p>
+                <p v-else>비밀번호변경</p>
+              </label>
+              <div class="form-group">
+                <input type="password" class="form-control sm" ref="newPswd" v-model="pswd.newPswd" minlength="9"
+                  placeholder="영문, 숫자, 특수문자 조합 9자 이상" />
+                <span :class="{
+                  'red-text': pswd.errorPwd,
+                }">
+                  영문, 숫자, 특수문자를 조합하여 입력해주세요. (9자 이상)
+                </span>
               </div>
-              <div  class="layout">
-                <label class="form-title"><span>*</span> 이름</label>
-                <input
-                  type="text"
-                  class="form-control sm"
-                  ref="mbrNm"
-                  v-model="mbrVO.mbrNm"
-                  minlength="2"
-                  maxlength="50"
-                  placeholder="이름을 입력하세요."
-                />
+            </div>
+            <div class="layout">
+              <label class="form-title">
+                <p v-if="pageId == null"><span>*</span>비밀번호확인</p>
+                <p v-else>비밀번호변경 확인</p>
+              </label>
+              <input type="password" :class="{ 'form-control sm': true, 'error': pswd.pswdChk }" ref="newPswdChk"
+                v-model="pswd.newPswdChk" minlength="9" :placeholder="pageId == null
+                    ? '비밀번호 확인을 입력하세요.'
+                    : '변경할 비밀번호 확인을 입력하세요'
+                  " />
+            </div>
+            <!-- <template v-if="showOpt.isMblNo || showOpt.isTelNo"> -->
+              <div v-if="showOpt.isMblNo" class="layout">
+                <label class="form-title"><span>*</span>휴대폰번호</label>
+                <input type="text" class="form-control sm" ref="mblTelno" v-model="mbrVO.mblTelno" minlength="10"
+                  maxlength="11" oninput="this.value = this.value.replace(/[^0-9.]/g, '').replace(/(\.*)/g, '');"
+                  placeholder="휴대폰번호를 입력하세요." />
               </div>
-              <div  class="layout">
-                <label class="form-title">
-                  <p v-if="pageId == null"><span>*</span> 비밀번호</p>
-                  <p v-else>비밀번호변경</p>
-                </label>
-                <div class="form-group">
-                  <input
-                    type="password"
-                    class="form-control sm"
-                    ref="newPswd"
-                    v-model="pswd.newPswd"
-                    minlength="9"
-                    placeholder="영문, 숫자, 특수문자 조합 9자 이상"
-                  />
-                  <span
-                    :class="{
-                      'red-text': pswd.errorPwd,
-                    }"
-                  >
-                    영문, 숫자, 특수문자를 조합하여 입력해주세요. (9자 이상)
-                  </span>
+            <!-- </template> -->
+            <div v-if="showOpt.isTelNo" class="layout">
+              <label class="form-title">전화번호</label>
+              <input type="text" class="form-control sm" ref="telno" v-model="mbrVO.telno"
+                oninput="this.value = this.value.replace(/[^0-9.]/g, '').replace(/(\.*)/g, '');"
+                placeholder="전화번호를 입력해주세요." />
+            </div>
+            <!-- <template v-if="showOpt.isEml || showOpt.isSmsAgree || showOpt.isEmlAgree"> -->
+              <div v-if="showOpt.isEml" class="layout">
+                <label class="form-title"><span>*</span>이메일</label>
+                <div class="check-area">
+                  <input type="text" class="form-control sm" ref="emailId" v-model="email.id" oninput="this.value =
+                        this.value.replace(/[ㄱ-ㅎ|ㅏ-ㅣ|가-힣]/g, '');" placeholder="이메일을 입력하세요." />
+                  <div>@</div>
+                  <template v-if="email.select == 'self'">
+                    <input type="text" class="form-control sm" ref="emailAddress" v-model="email.address" />
+                  </template>
+                  <select class="form-select sm" ref="emailSelect" v-model="email.select">
+                    <option value="">선택하세요</option>
+                    <option value="self">직접입력</option>
+                    <option value="naver.com">naver.com</option>
+                    <option value="google.com">google.com</option>
+                    <option value="hanmail.net">hanmail.net</option>
+                    <option value="nate.com">nate.com</option>
+                    <option value="kakao.com">kakao.com</option>
+                  </select>
                 </div>
               </div>
-              <div  class="layout">
-                <label class="form-title">
-                  <p v-if="pageId == null"><span>*</span> 비밀번호확인</p>
-                  <p v-else>비밀번호변경 확인</p>
-                </label>
-                <input
-                  type="password"
-                  :class="{ 'form-control sm': true, 'error': pswd.pswdChk }"
-                  ref="newPswdChk"
-                  v-model="pswd.newPswdChk"
-                  minlength="9"
-                  :placeholder="
-                    pageId == null
-                      ? '비밀번호 확인을 입력하세요.'
-                      : '변경할 비밀번호 확인을 입력하세요'
-                  "
-                />
-              </div>
-              <template v-if="showOpt.isMblNo || showOpt.isTelNo">
-                <div v-if="showOpt.isMblNo"  class="layout">
-                  <label  class="form-title"><span>*</span> 휴대폰번호</label>
-                  <input
-                    type="text"
-                    class="form-control sm"
-                    ref="mblTelno"
-                    v-model="mbrVO.mblTelno"
-                    minlength="10"
-                    maxlength="11"
-                    oninput="this.value = this.value.replace(/[^0-9.]/g, '').replace(/(\.*)/g, '');"
-                    placeholder="휴대폰번호를 입력하세요."
-                  />
-                </div>
-              </template>
-              <div v-if="showOpt.isTelNo"  class="layout">
-                <label class="form-title">전화번호</label>
-                <input
-                  type="text"
-                  class="form-control sm"
-                  ref="telno"
-                  v-model="mbrVO.telno"
-                  oninput="this.value = this.value.replace(/[^0-9.]/g, '').replace(/(\.*)/g, '');"
-                  placeholder="전화번호를 입력하세요."
-                />
-              </div>
-              <template v-if="showOpt.isEml || showOpt.isSmsAgree || showOpt.isEmlAgree">
-                <div v-if="showOpt.isEml"  class="layout">
-                  <label  class="form-title"><span>*</span> 이메일</label>
-                  <div class="check-area">
-                      <input
-                        type="text"
-                        class="form-control sm"
-                        ref="emailId"
-                        v-model="email.id"
-                        oninput="this.value =
-                        this.value.replace(/[ㄱ-ㅎ|ㅏ-ㅣ|가-힣]/g, '');"
-                        placeholder="이메일을 입력하세요."
-                      />
-                      <div>@</div>
-                      <template v-if="email.select == 'self'">
-                        <input
-                          type="text"
-                          class="form-control sm"
-                          ref="emailAddress"
-                          v-model="email.address"
-                        />
-                      </template>
-                      <select
-                        class="form-select sm"
-                        ref="emailSelect"
-                        v-model="email.select"
-                      >
-                        <option value="">선택하세요</option>
-                        <option value="self">직접입력</option>
-                        <option value="naver.com">naver.com</option>
-                        <option value="google.com">google.com</option>
-                        <option value="hanmail.net">hanmail.net</option>
-                        <option value="nate.com">nate.com</option>
-                        <option value="kakao.com">kakao.com</option>
-                      </select>
+              <div v-if="showOpt.isSmsAgree" class="layout">
+                <label class="form-title"><span>*</span>문자수신</label>
+                <div class="check-area">
+                  <div class="form-check">
+                    <input type="radio" name="smsRcptnAgreYn" id="smsY" class="mr5" v-model="mbrVO.smsRcptnAgreYn"
+                      value="Y" />
+                    <label for="smsY">수신</label>
+                  </div>
+                  <div class="form-check">
+                    <input type="radio" name="smsRcptnAgreYn" id="smsN" class="mr5" v-model="mbrVO.smsRcptnAgreYn"
+                      value="N" />
+                    <label for="smsN">미수신</label>
                   </div>
                 </div>
-                <div v-if="showOpt.isSmsAgree"  class="layout">
-                    <label class="form-title"><span>*</span> 
-                      문자수신
-                    </label>
-                    <div class="check-area">
-                      <div class="form-check">
-                        <input
-                          type="radio"
-                          name="smsRcptnAgreYn"
-                          id="smsY"
-                          class="mr5"
-                          v-model="mbrVO.smsRcptnAgreYn"
-                          value="Y"
-                        />
-                        <label for="smsY">수신</label>
-                      </div>
-                      <div class="form-check">
-                        <input
-                          type="radio"
-                          name="smsRcptnAgreYn"
-                          id="smsN"
-                          class="mr5"
-                          v-model="mbrVO.smsRcptnAgreYn"
-                          value="N"
-                        />
-                        <label for="smsN">미수신</label>
-                      </div>
-                    </div>
+              </div>
+              <div v-if="showOpt.isEmlAgree" class="layout">
+                <label class="form-title"><span>*</span>이메일수신</label>
+                <div class="check-area">
+                  <div class="form-check">
+                    <input type="radio" name="emlRcptnAgreYn" id="y" class="mr5" v-model="mbrVO.emlRcptnAgreYn"
+                      value="Y" />
+                    <label for="y">수신</label>
                   </div>
-                  <div v-if="showOpt.isEmlAgree"  class="layout">
-                    <label class="form-title"><span>*</span> 
-                      이메일수신
-                    </label>
-                    <div class="check-area">
-                      <div class="form-check">
-                        <input
-                          type="radio"
-                          name="emlRcptnAgreYn"
-                          id="y"
-                          class="mr5"
-                          v-model="mbrVO.emlRcptnAgreYn"
-                          value="Y"
-                        />
-                        <label for="y">수신</label>
-                      </div>
-                      <div class="form-check">
-                        <input
-                          type="radio"
-                          name="emlRcptnAgreYn"
-                          id="n"
-                          class="mr5"
-                          v-model="mbrVO.emlRcptnAgreYn"
-                          value="N"
-                        />
-                        <label for="n">미수신</label>
-                      </div>
-                    </div>
+                  <div class="form-check">
+                    <input type="radio" name="emlRcptnAgreYn" id="n" class="mr5" v-model="mbrVO.emlRcptnAgreYn"
+                      value="N" />
+                    <label for="n">미수신</label>
                   </div>
-              </template>
-              <template  v-if="showOpt.isAddr">
-                <div  class="layout">
-                  <label class="form-title"><span>*</span> 우편번호</label>
-                      <input
-                        type="text"
-                        class="form-control sm"
-                        v-model="mbrVO.zip"
-                        readonly
-                      />
+                </div>
+              </div>
+            <!-- </template> -->
+            <template v-if="showOpt.isAddr">
+              <div class="layout">
+                <label class="form-title"><span>*</span>우편번호</label>
+                <input type="text" class="form-control sm" v-model="mbrVO.zip" readonly />
 
-                      <button
-                        :class="{
-                          'large-btn': true,
-                          'blue-border-btn': pageRole == 'adm',
-                          'green-border-btn': pageRole == 'portal',
-                        }"
-                        @click="fnZipSearch"
-                      >
-                        찾기
-                      </button>
-                </div>
-                <div  class="layout">
-                  <label class="form-title"><span>*</span> 주소</label>
-                  <input
-                    type="text"
-                    class="form-control sm"
-                    v-model="mbrVO.addr"
-                    readonly
-                  />
-                </div>
-                <div  class="layout">
-                  <label class="form-title">
-                    상세주소
-                  </label>
-                  <input
-                    type="text"
-                    class="form-control sm"
-                    ref="daddr"
-                    v-model="mbrVO.daddr"
-                    placeholder="상세주소를 입력하세요."
-                  />
-                </div>
-              </template>
-              <template  v-if="showOpt.isStts && pageRole == 'adm'">
-                <div  class="layout">
-                      <label class="form-title"><span>*</span> 회원상태</label>
-                      <select class="form-select sm" v-model="mbrVO.mbrStts">
-                        <option value="1">승인</option>
-                        <option value="2">승인대기</option>
-                        <option value="0">탈퇴</option>
-                        <option value="3">차단</option>
-                      </select>
-                  </div>
-                  <div class="layout" v-if="showOpt.isCntrlDt">
-                      <label class="form-title">차단일</label>
-                      <input
-                        type="date"
-                        class="form-control sm"
-                        ref="cntrlDt"
-                        v-model="mbrVO.cntrlDt"
-                      />
-                    </div>
-              </template>
-              <div  class="layout border-bottom" v-if="showOpt.isCntrlRsn">
-                <label class="form-title">차단 사유</label>
-                <input
-                  type="text"
-                  class="form-control sm"
-                  ref="cntrlRsn"
-                  v-model="mbrVO.cntrlRsn"
-                  placeholder="차단 사유를 입력하세요."
-                />
+                <button :class="{
+                  'large-btn': true,
+                  'blue-border-btn': pageRole == 'adm',
+                  'green-border-btn': pageRole == 'portal',
+                }" @click="fnZipSearch">
+                  찾기
+                </button>
               </div>
-              <div v-if="showOpt.isAuthor && pageRole == 'adm'"  class="layout grid-column">
-                  <UserAuthorList :mbrVO="mbrVO" />
+              <div class="layout">
+                <label class="form-title"><span>*</span>주소</label>
+                <input type="text" class="form-control sm" v-model="mbrVO.addr" readonly />
               </div>
+              <div class="layout">
+                <label class="form-title">
+                  상세주소
+                </label>
+                <input type="text" class="form-control sm" ref="daddr" v-model="mbrVO.daddr"
+                  placeholder="상세주소를 입력해주세요." />
+              </div>
+            </template>
+            <div v-if="showOpt.isAuthor && pageRole == 'adm'" class="layout">
+              <UserAuthorList :mbrVO="mbrVO" />
+            </div>
+            <!-- <template v-if="showOpt.isStts && pageRole == 'adm' && pageId != null"> -->
+              <div class="layout" v-if="showOpt.isStts && pageRole == 'adm' && pageId != null">
+                <label class="form-title"><span>*</span>회원상태</label>
+                <select class="form-select sm" v-model="mbrVO.mbrStts">
+                  <option value="1">승인</option>
+                  <option value="2">승인대기</option>
+                  <option value="0">탈퇴</option>
+                  <option value="3">차단</option>
+                </select>
+              </div>
+              <div class="layout border-bottom" v-if="showOpt.isCntrlDt && pageRole == 'adm' && pageId != null">
+                <label class="form-title">차단일</label>
+                <input type="date" class="form-control sm" ref="cntrlDt" v-model="mbrVO.cntrlDt" />
+              </div>
+            <!-- </template> -->
+            <div class="layout" v-if="showOpt.isCntrlRsn && pageRole == 'adm' && pageId != null">
+              <label class="form-title">차단 사유</label>
+              <input type="text" class="form-control sm" ref="cntrlRsn" v-model="mbrVO.cntrlRsn"
+                placeholder="차단 사유를 입력해주세요." />
+            </div>
           </div>
         </div>
       </div>
@@ -280,17 +166,14 @@
 
 
   <div class="btn-wrap">
-      <button
-        :class="{
-          'btn sm main': true,
-          // 'blue-btn': pageRole == 'adm',
-          // 'green-btn': pageRole == 'portal',
-        }"
-        @click="fnUpsert"
-      >
-        {{ pageId == null ? "등록" : "수정" }}
-      </button>
-      <button class="btn sm tertiary" @click="fnCancel">취소</button>
+    <button :class="{
+      'btn sm main': true,
+      // 'blue-btn': pageRole == 'adm',
+      // 'green-btn': pageRole == 'portal',
+    }" @click="fnUpsert">
+      {{ pageId == null ? "등록" : "수정" }}
+    </button>
+    <button class="btn sm tertiary" @click="fnCancel">취소</button>
   </div>
 </template>
 
@@ -400,7 +283,12 @@
         }
         this.changeFormat(); // 휴대폰번호, 전화번호, 이메일 표기변경
       } catch (error) {
-        alert("에러가 발생했습니다.\n관리자에게 문의해주세요.");
+        const errorData = error.response.data;
+        if (errorData.message != null && errorData.message != "") {
+          alert(error.response.data.message);
+        } else {
+          alert("에러가 발생했습니다.\n관리자에게 문의해주세요.");
+        }
       }
     },
     // 표기변경
client/views/component/userInfo/UserInfoView.vue
--- client/views/component/userInfo/UserInfoView.vue
+++ client/views/component/userInfo/UserInfoView.vue
@@ -29,9 +29,7 @@
                 </div>
                 <template v-if="showOpt.isMblNo || showOpt.isTelNo">
                   <div v-if="showOpt.isMblNo" class="layout">
-                    <p class="form-title">
-                      휴대폰번호
-                    </p>
+                    <p class="form-title">휴대폰번호</p>
                     <p>{{ mbrVO.mblTelno }}</p>
                     <!-- <input
                       type="text"
@@ -84,9 +82,7 @@
                       </div>
          
                       <div v-if="showOpt.isSmsAgree"  class="layout">
-                        <p class="form-title">
-                          문자수신
-                        </p>
+                        <p class="form-title">문자수신</p>
                         <p>{{ mbrVO.smsRcptnAgreYn }}</p>
                         <!-- <div class="check-area">
                           <div class="form-check">
@@ -117,9 +113,7 @@
                       </div>
 
                       <div v-if="showOpt.isEmlAgree"  class="layout">
-                        <p class="form-title">
-                          이메일수신
-                        </p>
+                        <p class="form-title">이메일수신</p>
                         <p>{{ mbrVO.emlRcptnAgreYn }}</p>
                         <!-- <div class="check-area">
                           <div class="form-check">
@@ -152,9 +146,7 @@
                   <template v-if="showOpt.isAddr">
         
                         <div  class="layout">
-                          <p class="form-title">
-                            우편번호
-                          </p>
+                          <p class="form-title">우편번호</p>
                           <p>{{ '(' + mbrVO.zip + ')'+ mbrVO.addr + mbrVO.daddr}}</p>
                           <!-- <input
                             type="text"
@@ -185,12 +177,12 @@
                           />
                         </div> -->
                   </template>
-                  <template v-if="showOpt.isStts && pageRole == 'adm'">
-            
-                      <div  class="layout">
-                          <p class="form-title">
-                            회원상태
-                          </p>
+                  <div v-if="showOpt.isAuthor && pageRole == 'adm'" class="layout">
+                      <UserAuthorList :mbrVO="mbrVO" editMode="view" />
+                  </div>
+                  <!-- <template v-if="showOpt.isStts && pageRole == 'adm'"> -->
+                      <div class="layout" v-if="showOpt.isStts && pageRole == 'adm'">
+                          <p class="form-title">회원상태</p>
                           <p v-if="mbrVO.mbrStts  == 0">탈퇴</p>
                           <p v-else-if="mbrVO.mbrStts  == 1">승인</p>
                           <p v-else-if="mbrVO.mbrStts  == 2">승인대기</p>
@@ -202,7 +194,7 @@
                             <option value="3">차단</option>
                           </select> -->
                       </div>
-                      <div class="layout">
+                      <div class="layout border-bottom" v-if="showOpt.isCntrlDt && pageRole == 'adm'">
                           <p class="form-title">차단일</p>
                           <p>{{ mbrVO.cntrlDt }}</p>
                           <!-- <input
@@ -212,8 +204,8 @@
                             disabled
                           /> -->
                         </div>
-                      <div  class="layout border-bottom">
-                        <p  class="form-title">차단 사유</p>
+                      <div class="layout" v-if="showOpt.isCntrlRsn && pageRole == 'adm'">
+                        <p class="form-title">차단 사유</p>
                         <p>{{ mbrVO.cntrlRsn }}</p>
                         <!-- <input
                           type="text"
@@ -222,10 +214,7 @@
                           disabled
                         /> -->
                       </div>
-                  </template>
-                  <div v-if="showOpt.isAuthor && pageRole == 'adm'" class="layout grid-column">
-                      <UserAuthorList :mbrVO="mbrVO" editMode="view" />
-                  </div>
+                  <!-- </template> -->
               </div>
             </div>
         </div>
@@ -328,7 +317,12 @@
         this.mbrVO = response.data.data;
         this.changeFormat(); // 휴대폰번호, 전화번호, 이메일 표기변경
       } catch (error) {
-        alert("에러가 발생했습니다.\n관리자에게 문의해주세요.");
+        const errorData = error.response.data;
+        if (errorData.message != null && errorData.message != "") {
+          alert(error.response.data.message);
+        } else {
+          alert("에러가 발생했습니다.\n관리자에게 문의해주세요.");
+        }
       }
     },
 
@@ -400,7 +394,12 @@
         alert(response.data["message"]);
         this.fnList();
       } catch (error) {
-        alert("에러가 발생했습니다.\n관리자에게 문의해주세요.");
+        const errorData = error.response.data;
+        if (errorData.message != null && errorData.message != "") {
+          alert(error.response.data.message);
+        } else {
+          alert("에러가 발생했습니다.\n관리자에게 문의해주세요.");
+        }
       }
     },
   },
client/views/layout/AdminHeader.vue
--- client/views/layout/AdminHeader.vue
+++ client/views/layout/AdminHeader.vue
@@ -34,7 +34,6 @@
     data() {
         return {
             mbrNm: store.state.mbrNm,
-            pgNm: store.state.menu && store.state.menu.menuNm ? store.state.menu.menuNm : "홈",
         }
     },
     created() {
@@ -63,20 +62,44 @@
 
     },
     watch: {
-        'pgNm'(newValue,oldValue){
-            console.log(oldValue)
-        },
         '$store.state.menu'(newValue) {
-            this.pgNm = newValue.menuNm
+            if(newValue) {
+                this.pgNm = newValue.menuNm
+            }
+        },
+        'this.$route.path'(newValue) {
+            if(newValue) {
+            }
         },
 
     },
     computed: {
-
         pgNm() {
-            return store.state.menu && store.state.menu.menuNm ? store.state.menu.menuNm : "홈";
-        }
+            const route = this.$route;
+            const storeMenu = store.state.menu;
 
+            if (route?.meta?.korName) {
+                if (route.path === '/adm/main.page') {
+                    return "홈";
+                }
+
+                if (route.meta.typeId.includes("BBS_MNG")) {
+                    const matchedMenu = store.state.flatMenuList.find(menu => menu.menuTypeCtgry === route.meta.typeId);
+                    if (matchedMenu) {
+                        return matchedMenu.menuNm;
+                    }
+                }
+
+                if (storeMenu?.menuNm) {
+                    return storeMenu.menuNm;
+                } else {
+                    return route.meta.korName;
+                }
+            }
+
+            return "홈";
+            // return store.state.menu && store.state.menu.menuNm ? store.state.menu.menuNm : "홈";
+        }
     },
     mounted() {
 
client/views/layout/AdminMenu.vue
--- client/views/layout/AdminMenu.vue
+++ client/views/layout/AdminMenu.vue
@@ -130,7 +130,7 @@
             if (menu.linkType === "0") {
                 // 현재창
                 this.$router.push({
-                path: menu.routerUrl,
+                    path: menu.routerUrl,
                 });
             } else if (menu.linkType === "1") {
                 // 새창
@@ -202,10 +202,21 @@
                 return formatted;
             });
         },
+
+        // 모든 메뉴 닫기
+        closeAllMenus(menus) {
+            for (const menu of menus) {
+                menu.isOpen = false;
+
+                if (Array.isArray(menu.childList) && menu.childList.length > 0) {
+                    this.closeAllMenus(menu.childList); // 재귀로 하위 메뉴까지 모두 닫기
+                }
+            }
+        }
     },
     watch: {
         // 나중에 네비게이션 가드에서 form 받을 수 있으면 form adm/main으로 갈때 sotre.state값0로 바꿔주기
-        $route(to) {
+        $route(to, from) {
             this.currentPath = to.path;
         },
         "$store.state.mbrNm"(newVal) {
@@ -218,7 +229,13 @@
                     this.menuCheck();
                 }
             }
-        }
+        },
+        '$store.state.menu'(newValue) {
+            if(!newValue) {
+                this.closeAllMenus(this.menuList);
+                this.activeMenus = [];
+            }
+        },
     }
 };
 </script>
client/views/layout/menuSatisfaction.vue
--- client/views/layout/menuSatisfaction.vue
+++ client/views/layout/menuSatisfaction.vue
@@ -1,59 +1,52 @@
 <template>
     <div v-if="dgstfnExmnUseYn == 'Y'" class="menu-satisfaction">
         <div v-if="rspnsYn == 'N'" class="satisfaction-wrap">
-           <div class="layout">
-            <div class="check-list">
-                <label class="form-title">{{pgNm}} 만족도 조사</label>
-                <div class="check-area">
-                    <div class="form-check">
-                        <input type="radio" name="rspns" id="rspnsFive" class="mr5" v-model="checkRspns"
-                            value="5" />
-                        <label for="rspnsFive">매우 만족</label>
-                    </div>
-                    <div class="form-check">
-                        <input type="radio" name="rspns" id="rspnsFour" class="mr5" v-model="checkRspns"
-                            value="4" />
-                        <label for="rspnsFour">만족</label>
-                    </div>
-                    <div class="form-check">
-                        <input type="radio" name="rspns" id="rspnsThree" class="mr5" v-model="checkRspns"
-                            value="3" />
-                        <label for="rspnsThree">보통</label>
-                    </div>
-                    <div class="form-check">
-                        <input type="radio" name="rspns" id="rspnsTwo" class="mr5" v-model="checkRspns"
-                            value="2" />
-                        <label for="rspnsTwo">불만족</label>
-                    </div>
-                    <div class="form-check">
-                        <input type="radio" name="rspns" id="rspnsOne" class="mr5" v-model="checkRspns"
-                            value="1" />
-                        <label for="rspnsOne">매우 불만족</label>
+            <div class="layout">
+                <div class="check-list">
+                    <label class="form-title">{{ pgNm }} 만족도 조사</label>
+                    <div class="check-area">
+                        <div class="form-check">
+                            <input type="radio" name="rspns" id="rspnsFive" class="mr5" v-model="checkRspns"
+                                value="5" />
+                            <label for="rspnsFive">매우 만족</label>
+                        </div>
+                        <div class="form-check">
+                            <input type="radio" name="rspns" id="rspnsFour" class="mr5" v-model="checkRspns"
+                                value="4" />
+                            <label for="rspnsFour">만족</label>
+                        </div>
+                        <div class="form-check">
+                            <input type="radio" name="rspns" id="rspnsThree" class="mr5" v-model="checkRspns"
+                                value="3" />
+                            <label for="rspnsThree">보통</label>
+                        </div>
+                        <div class="form-check">
+                            <input type="radio" name="rspns" id="rspnsTwo" class="mr5" v-model="checkRspns" value="2" />
+                            <label for="rspnsTwo">불만족</label>
+                        </div>
+                        <div class="form-check">
+                            <input type="radio" name="rspns" id="rspnsOne" class="mr5" v-model="checkRspns" value="1" />
+                            <label for="rspnsOne">매우 불만족</label>
+                        </div>
                     </div>
                 </div>
+                <div class="layout write-zone">
+                    <input type="text" class="form-control sm" v-model="menuDgstfn.opnn" placeholder="의견을 남겨주세요" maxlength="50"/>
+                    <button class="btn sm" @click="save">제출</button>
+                </div>
             </div>
-            <div class="layout write-zone">
-                <input
-                type="text"
-                class="form-control sm"
-                v-model="menuDgstfn.opnn"
-                placeholder="의견을 남겨주세요"
-                />
-                <button class="btn sm" @click="save">제출</button>
-            </div>
-           </div>
         </div>
-        <div v-else-if="rspnsYn == 'Y'">
+        <div v-else-if="rspnsYn == 'Y'" class="satisfaction-wrap">
             <label class="form-title">설문에 참여해주셔서 감사합니다.</label>
         </div>
     </div>
     <div v-else>
-        <label class="form-title">[만족도 조사 비활성화 상태]</label>
     </div>
 </template>
 
 <script>
 import store from "../pages/AppStore.js";
+import { defaultMenuDgstfnParams } from '../../resources/js/defaultMenuSatisfactionParams.js';
 import { menuFindByMenu } from '../../resources/api/menu.js';
 import { findByMenuId, save } from '../../resources/api/menuDgstfn.js';
 
@@ -67,38 +60,30 @@
             dgstfnExmnUseYn: "N", // 메뉴 만족도 사용 여부
             rspnsYn: 'N', // 응답 여부
             checkRspns: '', // '5' ~ '1' 중 하나
-            menuDgstfn: {
-                rspnsFive: 'N',
-                rspnsFour: 'N',
-                rspnsThree: 'N',
-                rspnsTwo: 'N',
-                rspnsOne: 'N',
-                opnn: '', // 의견
-            }, // 메뉴 만족도
+            menuDgstfn: { ...defaultMenuDgstfnParams }, // 메뉴 만족도
         }
     },
     created() {
     },
     methods: {
         // 상세 조회
-        async fnView(menuId) {
+        async fnView() {
             try {
+                this.checkRspns = ''; // 응답 초기화
+                this.menuDgstfn = { ...defaultMenuDgstfnParams }; // 응답 초기화
                 const params = { menuId: this.menuId };
                 const res = await menuFindByMenu(params);
                 if (res.status == 200) {
                     this.dgstfnExmnUseYn = res.data.data.dgstfnExmnUseYn;
 
-                     // 부모에게 전달
-                    this.$emit('menuChecck', res.data.data.dgstfnExmnUseYn);
-
-                    if(res.data.data.dgstfnExmnUseYn == 'Y') {
+                    this.$emit('menuChecck', this.dgstfnExmnUseYn);
+                    if (res.data.data.dgstfnExmnUseYn == 'Y') {
                         this.fnViewByMenuId();
-                    } else {
-                        this.dgstfnExmnUseYn = 'N';
                     }
                 }
+                // 부모에게 전달
             } catch (error) {
-                alert(error.response.data.message);
+                alert(error.res.data.message);
             }
         },
 
@@ -108,21 +93,24 @@
                 const params = { menuId: this.menuId };
                 const res = await findByMenuId(params);
                 if (res.status == 200) {
-                    if(res.data.data != null) {
+                    if (res.data.data != null) {
                         this.rspnsYn = 'Y'; // 응답
                     } else {
                         this.rspnsYn = 'N'; // 미응답
                     }
                 }
             } catch (error) {
-                alert(error.response.data.message);
+                alert(error.res.data.message);
             }
         },
 
         // 저장
         async save() {
             try {
-                this.checkRspnsVal(); // 응답 값 체크
+                // 응답 값 체크
+                if (!this.checkRspnsVal()) {
+                    return;
+                }
                 this.menuDgstfn.menuId = this.menuId; // 메뉴 ID
                 const res = await save(this.menuDgstfn);
                 if (res.status == 200) {
@@ -135,31 +123,56 @@
         },
 
         // 선택 응답값 체크
-        checkRspnsVal () {
+        checkRspnsVal() {
+            if (this.checkRspns == null || this.checkRspns == '') {
+                alert("응답을 선택해주세요.");
+                return false;
+            }
+
+            if (this.menuDgstfn.opnn != null && this.menuDgstfn.opnn != '') {
+                if(this.menuDgstfn.opnn.length > 50) {
+                    alert("의견은 50자 이내로 입력해주세요.");
+                    return false;
+                }
+            }
             const rspnsVal = this.checkRspns;
             this.menuDgstfn.rspnsFive = rspnsVal === '5' ? 'Y' : 'N';
             this.menuDgstfn.rspnsFour = rspnsVal === '4' ? 'Y' : 'N';
             this.menuDgstfn.rspnsThree = rspnsVal === '3' ? 'Y' : 'N';
             this.menuDgstfn.rspnsTwo = rspnsVal === '2' ? 'Y' : 'N';
             this.menuDgstfn.rspnsOne = rspnsVal === '1' ? 'Y' : 'N';
+            return true;
         }
 
     },
     watch: {
-        'pgNm'(newValue, oldValue) {
+        $route: {
+            immediate: true,
+            handler(to) {
+                if (this.$store.state.menu && to.path !== this.$filters.ctxPath('/adm/main.page') && !to.path.includes('/view.page') && !to.path.includes('/insert.page')) {
+                    this.pgNm = this.$store.state.menu.menuNm;
+                    this.menuId = this.$store.state.menu.menuId;
+                    this.fnView();
+                } else {
+                    this.dgstfnExmnUseYn = 'N'; // 초기화
+                }
+            }
         },
+
         '$store.state.menu'(newValue) {
-            this.pgNm = newValue.menuNm
-            this.menuId = newValue.menuId
-            this.fnView();
+            if (newValue) {
+                this.pgNm = newValue.menuNm;
+                this.menuId = newValue.menuId;
+                this.fnView();
+            } else {
+                this.$emit('menuChecck', 'N');
+            }
         },
     },
     computed: {
-
         pgNm() {
             return store.state.menu && store.state.menu.menuNm ? store.state.menu.menuNm : "홈";
         }
-
     },
     mounted() {
 
client/views/pages/App.vue
--- client/views/pages/App.vue
+++ client/views/pages/App.vue
@@ -10,7 +10,7 @@
     </main>
   </div> 
   <div v-else v-cloak class="user-wrap relative">
-    <UserHeader v-if="path != this.$filters.ctxPath('/login.page')"/>
+    <UserHeader v-if="path != this.$filters.ctxPath('/login.page') && !$route.path.includes('/popup.page')"/>
     <main class="main-wrap">
       <Breadcrumb v-if="$route.path !== this.$filters.ctxPath('/adm/main.page') && $route.path !== this.$filters.ctxPath('/main.page')" />
       <router-view />
@@ -36,13 +36,16 @@
   methods: {
     // 메뉴 만족도 조사 사용 여부
     menuYnCheck(yn) {
-      console.log("menuYnCheck", yn);
+      // console.log("menuYnCheck", yn);
       this.menuUse = yn;
     },
   },
   watch: {
     $route(to, from) {
       this.path = to.path;
+      if(this.path.includes('/insert.page') || this.path.includes('/view.page')) {
+        this.menuUse = "N";
+      }
     },
   },
   computed: {
client/views/pages/AppRouter.js
--- client/views/pages/AppRouter.js
+++ client/views/pages/AppRouter.js
@@ -10,14 +10,14 @@
 
 const beforeRoutes = [
   /* 메인화면 */
-  { path: "/", name: "main", component: Main },
+  { path: "/", name: "main", korName: "홈", component: Main },
 
   // 관리자
   {
     path: "/adm",
     children: [
-      { path: "commonSelectListOne.page", name: "CommonSelectListOne", component: CommonSelectListOne },
-      { path: "commonSelectList.page", name: "CommonSelectList", component: CommonSelectList },
+      { path: "commonSelectListOne.page", name: "CommonSelectListOne", korName: "", component: CommonSelectListOne },
+      { path: "commonSelectList.page", name: "CommonSelectList", korName: "", component: CommonSelectList },
     ],
   },
 ];
@@ -55,8 +55,9 @@
       const newRoutes = res.data.data.map(route => ({
         path: route.pageCrs,
         name: route.contsEngNm,
+        korName: route.contsKornNm,
         component: () => import(`${route.compnCrs}`),
-        meta: { authrt: route.authrtList, typeId: route.contsId }
+        meta: { authrt: route.authrtList, typeId: route.contsId, korName: route.contsKornNm }
       }));
       return newRoutes;
     }else {
client/views/pages/AppStore.js
--- client/views/pages/AppStore.js
+++ client/views/pages/AppStore.js
@@ -4,7 +4,7 @@
 
 export default createStore({
   plugins: [createPersistedState({
-    paths: ['loginMode', 'authorization', 'mbrId', 'mbrNm', 'roles', 'contextPath', 'pageAuth', 'menu']
+    paths: ['loginMode', 'authorization', 'mbrId', 'mbrNm', 'roles', 'contextPath', 'pageAuth']
   })],
   state: {
     authorization: null,
@@ -65,6 +65,21 @@
     },
     setMenuList(state, menuList) {
       state.menuList = menuList;
+      // 메뉴트리 펼치기
+      const flattenMenus = (menus) => {
+        const result = [];
+
+        for (const menu of menus) {
+          result.push(menu);
+          if (menu.childList?.length) {
+            result.push(...flattenMenus(menu.childList));
+          }
+        }
+
+        return result;
+      }
+      const flattenedMenuList = flattenMenus(menuList);
+      state.flatMenuList = flattenedMenuList;
     },
     setContextPath(state, ctx) {
       state.contextPath = ctx;
client/views/pages/adm/authority/authority/AuthorityInsert.vue
--- client/views/pages/adm/authority/authority/AuthorityInsert.vue
+++ client/views/pages/adm/authority/authority/AuthorityInsert.vue
@@ -19,7 +19,7 @@
                   :disabled="!submitStts"
                 />
                 <span class="red-text">
-                  권한 코드는 ROLE_ + 영문(대문자) 형태로 입력해주세요.
+                  권한 코드는 ROLE_ + 영문(대문자) 형태로 입력하세요.
                 </span>
               </div>
             </div>
@@ -30,7 +30,7 @@
                 type="text"
                 class="form-control sm"
                 ref="authrtNm"
-                placeholder="권한명을 입력해주세요."
+                placeholder="권한명을 입력하세요."
                 v-model="authrt.authrtNm"
               />
             </div>
@@ -42,7 +42,7 @@
                 id="authrtExpln"
                 v-model="authrt.authrtExpln"
                 class="form-control sm area"
-                placeholder="권한에 대한 설명을 입력해주세요"
+                placeholder="권한에 대한 설명을 입력해주세요."
               ></textarea>
             </div>
           </div>
@@ -95,7 +95,12 @@
           }
         }
       } catch (error) {
-        // console.log("error : ", error);
+        const errorData = error.response.data;
+        if (errorData.message != null && errorData.message != "") {
+          alert(error.response.data.message);
+        } else {
+          alert("에러가 발생했습니다.\n관리자에게 문의해주세요.");
+        }
       }
     },
     // 저장
@@ -116,7 +121,12 @@
             });
           }
         } catch (error) {
-          alert(error.response.data.message);
+          const errorData = error.response.data;
+          if (errorData.message != null && errorData.message != "") {
+            alert(error.response.data.message);
+          } else {
+            alert("에러가 발생했습니다.\n관리자에게 문의해주세요.");
+          }
         }
       } else {
         try {
@@ -136,13 +146,18 @@
             });
           }
         } catch (error) {
-          alert(error.response.data.message);
+          const errorData = error.response.data;
+          if (errorData.message != null && errorData.message != "") {
+            alert(error.response.data.message);
+          } else {
+            alert("에러가 발생했습니다.\n관리자에게 문의해주세요.");
+          }
         }
       }
     },
     // 취소
     fnCancel() {
-      if (!confirm("등록을 취소하시겠습니까?")) {
+      if (!confirm("작성을 취소하시겠습니까?")) {
         return;
       }
       if (this.pageId == null || this.pageId == undefined) {
@@ -160,7 +175,7 @@
     },
     validation() {
       if (!this.authrt.authrtCd || this.authrt.authrtCd.trim() === "") {
-        alert("권한코드를 입력해주세요.");
+        alert("권한코드를 입력하세요.");
         this.$refs.authrtCd.focus();
         return false;
       }
@@ -171,13 +186,13 @@
       }
       const alpha = /^[A-Z_]*$/;
       if (!alpha.test(this.authrt.authrtCd)) {
-        alert("권한코드는 영문(대문자)과 언더바(_)만 사용하여 작성해주세요.");
+        alert("권한코드는 영문(대문자)과 언더바(_)만 사용하여 작성하세요.");
         this.$refs.authrtCd.focus();
         return false;
       }
       this.authrt.authrtCd = this.authrt.authrtCd.trim(); // 완성된 권한코드 공백 제거
       if (!this.authrt.authrtNm || this.authrt.authrtNm.trim() === "") {
-        alert("권한명을 입력해주세요.");
+        alert("권한명을 입력하세요.");
         this.$refs.authrtNm.focus();
         return false;
       }
client/views/pages/adm/authority/authority/AuthoritySelectList.vue
--- client/views/pages/adm/authority/authority/AuthoritySelectList.vue
+++ client/views/pages/adm/authority/authority/AuthoritySelectList.vue
@@ -105,7 +105,12 @@
         this.makeTbody();
         console.log("this.list : ", this.list);
       } catch (error) {
-        // console.log("error : ", error);
+        const errorData = error.response.data;
+        if (errorData.message != null && errorData.message != "") {
+          alert(error.response.data.message);
+        } else {
+          alert("에러가 발생했습니다.\n관리자에게 문의해주세요.");
+        }
       }
     },
     // 상세 조회
@@ -141,7 +146,12 @@
           this.findAll();
         }
       } catch (error) {
-        alert("에러가 발생했습니다.\n시스템관리자에게 문의하세요.");
+        const errorData = error.response.data;
+        if (errorData.message != null && errorData.message != "") {
+          alert(error.response.data.message);
+        } else {
+          alert("에러가 발생했습니다.\n관리자에게 문의해주세요.");
+        }
       }
     },
     // tbody 생성
client/views/pages/adm/authority/authority/AuthoritySelectListOne.vue
--- client/views/pages/adm/authority/authority/AuthoritySelectListOne.vue
+++ client/views/pages/adm/authority/authority/AuthoritySelectListOne.vue
@@ -89,7 +89,12 @@
           this.authrt = res.data.data.authrt;
         }
       } catch (error) {
-        // console.log("error : ", error);
+        const errorData = error.response.data;
+        if (errorData.message != null && errorData.message != "") {
+          alert(error.response.data.message);
+        } else {
+          alert("에러가 발생했습니다.\n관리자에게 문의해주세요.");
+        }
       }
     },
     // 목록으로 이동
@@ -131,7 +136,12 @@
           });
         }
       } catch (error) {
-        alert("에러가 발생했습니다.\n시스템관리자에게 문의하세요.");
+        const errorData = error.response.data;
+        if (errorData.message != null && errorData.message != "") {
+          alert(error.response.data.message);
+        } else {
+          alert("에러가 발생했습니다.\n관리자에게 문의해주세요.");
+        }
       }
     },
     // 사용
@@ -148,7 +158,12 @@
           window.location.reload(); // 새로고침
         }
       } catch (error) {
-        alert("에러가 발생했습니다.\n시스템관리자에게 문의하세요.");
+        const errorData = error.response.data;
+        if (errorData.message != null && errorData.message != "") {
+          alert(error.response.data.message);
+        } else {
+          alert("에러가 발생했습니다.\n관리자에게 문의해주세요.");
+        }
       }
     },
   },
client/views/pages/adm/boardManagement/boardManagement/BoardManagementInsert.vue
--- client/views/pages/adm/boardManagement/boardManagement/BoardManagementInsert.vue
+++ client/views/pages/adm/boardManagement/boardManagement/BoardManagementInsert.vue
@@ -16,19 +16,19 @@
                         <div class="layout">
                             <label class="form-title">게시판 상단 정보</label>
                             <input type="text" class="form-control sm" v-model="bbsMng.bbsUpInfo"
-                                placeholder="게시판 상단에 표기될 정보를 입력하세요." />
+                                placeholder="게시판 상단에 표기될 정보를 입력해주세요." />
                         </div>
                         <div class="layout">
                             <label class="form-title">게시판 설명</label>
                             <input type="text" class="form-control sm" v-model="bbsMng.bbsExpln"
-                                placeholder="게시판 설명을 입력하세요." />
+                                placeholder="게시판 설명을 입력해주세요." />
                         </div>
                         <div class="layout">
                             <label class="form-title"><span>*</span>게시판 유형</label>
                             <select name="" id="" class="form-select sm" @change="typeSelect"
                                 :disabled="bbsMng.bbsMngId != null">
                                 <option :value="null" disabled :selected="bbsMng.bbsTypeId == null">
-                                    선택해주세요
+                                    선택하세요
                                 </option>
                                 <option v-for="(item, idx) in bbsTypeList" :value="item.bbsTypeId" :key="idx">
                                     {{ item.bbsTypeKornNm }}
@@ -42,7 +42,7 @@
                         <div class="layout">
                             <label class="form-title"><span>*</span>페이지 유형</label>
                             <select name="" id="" class="form-select sm" v-model="bbsMng.cd">
-                                <option :value="null" disabled>선택해주세요</option>
+                                <option :value="null" disabled>선택하세요</option>
                                 <option v-for="(item, idx) in pageTypeList" :value="item.cd" :key="idx">
                                     {{ item.cdNm }}
                                 </option>
@@ -90,7 +90,7 @@
                             <label class="form-title"><span>*</span>첨부파일 확장자</label>
                             <div class="form-group">
                                 <div class="layout border-none">
-                                    <input type="text" class="form-control sm" v-model="inputExtNm" placeholder="첨부파일 확장자를 입력하세요"
+                                    <input type="text" class="form-control sm" v-model="inputExtNm" placeholder="첨부파일 확장자를 입력하세요."
                                         @keyup.enter="addinputExtNm" />
                                     <button class="btn-ico xsm ico-plus" @click="addinputExtNm" title="추가"></button>
                                 </div>
@@ -115,7 +115,7 @@
                             <label class="form-title"><span>*</span>파일크기 제한</label>
                             <div class="input-group">
                                 <input type="number" class="form-control sm" v-model="bbsMng.fileSzLmt"
-                                    :placeholder="'첨부파일 파일 크기를 입력하세요(0 입력 시 최대' + maxFileSize + 'MB)'" />
+                                    :placeholder="'첨부파일 파일 크기를 입력하세요.(0 입력 시 최대' + maxFileSize + 'MB)'" />
                                 <span>MByte</span>
                             </div>
                         </div>
@@ -215,7 +215,7 @@
             }, */
         // 목록으로 이동
         fnCancel() {
-            if (!confirm("등록을 취소하시겠습니까?")) {
+            if (!confirm("작성을 취소하시겠습니까?")) {
                 return;
             }
             if (this.bbsMng.bbsMngId == null || this.bbsMng.bbsMngId == 0) {
@@ -256,7 +256,12 @@
                     this.maxFileSize = res.data.data.maxFileSize; // 시스템 최대 파일 크기
                 }
             } catch (error) {
-                alert("에러가 발생했습니다.\n시스템관리자에게 문의하세요.");
+                const errorData = error.response.data;
+                if (errorData.message != null && errorData.message != "") {
+                    alert(error.response.data.message);
+                } else {
+                    alert("에러가 발생했습니다.\n관리자에게 문의해주세요.");
+                }
             }
         },
 
@@ -285,7 +290,12 @@
                     });
                 }
             } catch (error) {
-                alert("에러가 발생했습니다.\n시스템관리자에게 문의하세요.");
+                const errorData = error.response.data;
+                if (errorData.message != null && errorData.message != "") {
+                    alert(error.response.data.message);
+                } else {
+                    alert("에러가 발생했습니다.\n관리자에게 문의해주세요.");
+                }
             }
         },
         // 수정
@@ -310,17 +320,22 @@
                     });
                 }
             } catch (error) {
-                alert("에러가 발생했습니다.\n시스템관리자에게 문의하세요.");
+                const errorData = error.response.data;
+                if (errorData.message != null && errorData.message != "") {
+                    alert(error.response.data.message);
+                } else {
+                    alert("에러가 발생했습니다.\n관리자에게 문의해주세요.");
+                }
             }
         },
         // 유효성 검사
         Validation() {
             if (this.bbsMng.bbsNm == null || this.bbsMng.bbsNm == "") {
-                alert("게시판 명을 입력해주세요.");
+                alert("게시판 명을 입력하세요.");
                 return false;
             }
             if (this.bbsMng.bbsTypeId == null || this.bbsMng.bbsTypeId == "") {
-                alert("게시판 유형을 선택해주세요.");
+                alert("게시판 유형을 선택하세요.");
                 return false;
             }
             if (
@@ -328,31 +343,31 @@
                 this.bbsMng.artclCnt == "" ||
                 this.bbsMng.artclCnt < 1
             ) {
-                alert("목록 개수는 1 이상을 입력해주세요.");
+                alert("목록 개수는 1 이상을 입력하세요.");
                 return false;
             }
             if (this.bbsMng.cd == null || this.bbsMng.cd == "") {
-                alert("페이지 유형을 선택해주세요.");
+                alert("페이지 유형을 선택하세요.");
                 return false;
             }
             /* if (this.bbsMng.atchFileUseYn == null || this.bbsMng.atchFileUseYn == '') {
-                      alert('첨부파일 기능을 선택해주세요.');
+                      alert('첨부파일 기능을 선택하세요.');
                       return false;
                   }
                   if (this.bbsMng.ntcUseYn == null || this.bbsMng.ntcUseYn == '') {
-                      alert('공지글 기능을 선택해주세요.');
+                      alert('공지글 기능을 선택하세요.');
                       return false;
                   }
                   if (this.bbsMng.prvtPstUseYn == null || this.bbsMng.prvtPstUseYn == '') {
-                      alert('비밀글 기능을 선택해주세요.');
+                      alert('비밀글 기능을 선택하세요.');
                       return false;
                   }
                   if (this.bbsMng.bfrAftrPstUseYn == null || this.bbsMng.bfrAftrPstUseYn == '') {
-                      alert('이전글/다음글 기능을 선택해주세요.');
+                      alert('이전글/다음글 기능을 선택하세요.');
                       return false;
                   }
                   if (this.bbsMng.cmntUseYn == null || this.bbsMng.cmntUseYn == '') {
-                      alert('댓글 기능을 선택해주세요.');
+                      alert('댓글 기능을 선택하세요.');
                       return false;
                   } */
             if (this.bbsMng.fileSzLmt > this.maxFileSize) {
@@ -366,7 +381,7 @@
             ) {
                 this.bbsMng.fileSzLmt = this.maxFileSize; // 시스템 최대 파일 크기
                 /* if (this.bbsMng.atchFileUseYn == 'Y') {
-                            alert('파일 크기는 0 이상을 입력해주세요.');
+                            alert('파일 크기는 0 이상을 입력하세요.');
                             return false;
                         } else {
                             this.bbsMng.fileSzLmt = 0;
@@ -378,7 +393,7 @@
         addinputExtNm: function () {
             // 입력받은 확장자 앞에 .이 있는지 확인하고 .이 있으면 제거
             if (this.inputExtNm == null || this.inputExtNm.trim() == "") {
-                alert("확장자를 입력해주세요.");
+                alert("확장자를 추가하세요.");
                 return;
             }
             if (this.inputExtNm.indexOf(".") === 0) {
client/views/pages/adm/boardManagement/boardManagement/BoardManagementSelectList.vue
--- client/views/pages/adm/boardManagement/boardManagement/BoardManagementSelectList.vue
+++ client/views/pages/adm/boardManagement/boardManagement/BoardManagementSelectList.vue
@@ -6,7 +6,7 @@
                 <option value="">전체</option>
                 <option v-for="(item, idx) in codeList" :key="idx" :value="item.cd">{{ item.cdNm }}</option>
             </select> -->
-            <input type="text" class="form-control sm border-none" v-model="search.searchText" placeholder="게시판 명을 입력해주세요" @keyup.enter="findAll">
+            <input type="text" class="form-control sm border-none" v-model="search.searchText" placeholder="게시판 명을 입력하세요." @keyup.enter="findAll">
 
             <button class="btn-ico xsm ico-sch" @click="findAll">
                 <span class="sr-only">검색</span>
@@ -23,7 +23,7 @@
                         </colgroup>
                         <thead>
                             <tr>
-                                <th rowspan="2">번호</th>
+                                <th rowspan="2">NO</th>
                                 <th rowspan="2">게시판명</th>
                                 <th rowspan="2">유형</th>
                                 <th colspan="5">세부기능</th>
@@ -65,7 +65,7 @@
             :click="findAll"
         />
 
-        <button class="btn sm" @click="fnAdd">등록</button>
+        <button class="btn sm main" @click="fnAdd">등록</button>
 
     </div>
 </template>
@@ -110,7 +110,12 @@
                 // this.codeList = res.data.data.codeList; // 검색 조건 항목
                 this.makeTbody();
             } catch (error) {
-                alert('에러가 발생했습니다.\n시스템관리자에게 문의하세요.');
+                const errorData = error.response.data;
+                if (errorData.message != null && errorData.message != "") {
+                    alert(error.response.data.message);
+                } else {
+                    alert("에러가 발생했습니다.\n관리자에게 문의해주세요.");
+                }
             }
         },
         // 상세 조회
client/views/pages/adm/boardManagement/boardManagement/BoardManagementSelectListOne.vue
--- client/views/pages/adm/boardManagement/boardManagement/BoardManagementSelectListOne.vue
+++ client/views/pages/adm/boardManagement/boardManagement/BoardManagementSelectListOne.vue
@@ -4,7 +4,7 @@
       <div class="scroll">
         <div class="form-box mb30">
           <div class="form-box-title">
-            <p >기본 설정</p>
+            <p >기본설정</p>
           </div>
           <div class="form-content">
             <div class="layout">
@@ -73,7 +73,7 @@
               </div>
               <div class="layout">
                 <p class="form-title">페이지 유형</p>
-                <p>{{ bbsMng.cd }}</p>
+                <p>{{ pageTypeName }}</p>
                 <!-- <select
                   name=""
                   id=""
@@ -328,7 +328,12 @@
           this.pageTypeList = res.data.data.pageTypeList;
         }
       } catch (error) {
-        alert("에러가 발생했습니다.\n시스템관리자에게 문의하세요.");
+        const errorData = error.response.data;
+        if (errorData.message != null && errorData.message != "") {
+          alert(error.response.data.message);
+        } else {
+          alert("에러가 발생했습니다.\n관리자에게 문의해주세요.");
+        }
       }
     },
     // 목록으로 이동
@@ -361,12 +366,22 @@
           });
         }
       } catch (error) {
-        alert("에러가 발생했습니다.\n시스템관리자에게 문의하세요.");
+        const errorData = error.response.data;
+        if (errorData.message != null && errorData.message != "") {
+          alert(error.response.data.message);
+        } else {
+          alert("에러가 발생했습니다.\n관리자에게 문의해주세요.");
+        }
       }
     },
   },
   watch: {},
-  computed: {},
+  computed: {
+    pageTypeName() {
+      const match = this.pageTypeList.find(item => item.cd === this.bbsMng.cd);
+      return match ? match.cdNm : this.bbsMng.cd;
+    }
+  },
   components: {},
   mounted() {},
 };
client/views/pages/adm/boardManagement/template/commonTemplate/CommonInsert copy.vue
--- client/views/pages/adm/boardManagement/template/commonTemplate/CommonInsert copy.vue
+++ client/views/pages/adm/boardManagement/template/commonTemplate/CommonInsert copy.vue
@@ -298,7 +298,7 @@
 
     // 취소 버튼 동작
     fnCancel() {
-      if (!confirm("등록을 취소하시겠습니까?")) {
+      if (!confirm("작성을 취소하시겠습니까?")) {
         return;
       }
       if (this.bbsCn.bbsId == null || this.bbsCn.bbsId == 0) {
client/views/pages/adm/boardManagement/template/commonTemplate/CommonInsert.vue
--- client/views/pages/adm/boardManagement/template/commonTemplate/CommonInsert.vue
+++ client/views/pages/adm/boardManagement/template/commonTemplate/CommonInsert.vue
@@ -229,7 +229,7 @@
 
     // 취소 버튼 동작
     fnCancel() {
-      if (!confirm("등록을 취소하시겠습니까?")) {
+      if (!confirm("작성을 취소하시겠습니까?")) {
         return;
       }
       if (this.bbsCn.bbsId == null || this.bbsCn.bbsId == 0) {
@@ -262,7 +262,12 @@
           this.$refs.ckeditor5.createEditor();
         }
       } catch (error) {
-        alert("에러가 발생했습니다.\n시스템관리자에게 문의하세요.");
+        const errorData = error.response.data;
+        if (errorData.message != null && errorData.message != "") {
+          alert(error.response.data.message);
+        } else {
+          alert("에러가 발생했습니다.\n관리자에게 문의해주세요.");
+        }
       }
     },
     // 첨부파일 등록
@@ -346,8 +351,12 @@
           });
         })
         .catch((error) => {
-          const message = error.response.data.message;
-          alert(message);
+          const errorData = error.response.data;
+          if (errorData.message != null && errorData.message != "") {
+            alert(error.response.data.message);
+          } else {
+            alert("에러가 발생했습니다.\n관리자에게 문의해주세요.");
+          }
         });
     },
     // 수정
@@ -408,14 +417,18 @@
           });
         })
         .catch((error) => {
-          const message = error.response.data.message;
-          alert(message);
+          const errorData = error.response.data;
+          if (errorData.message != null && errorData.message != "") {
+            alert(error.response.data.message);
+          } else {
+            alert("에러가 발생했습니다.\n관리자에게 문의해주세요.");
+          }
         });
     },
     // 유효성 검사
     Validation() {
       if (!this.bbsCn.bbsNm || this.bbsCn.bbsNm.trim() === "") {
-        alert("게시판 제목을 입력해주세요.");
+        alert("게시판 제목을 입력하세요.");
         return false;
       }
 
@@ -436,14 +449,14 @@
         (this.isEmpty(this.bbsCn.bbsCn) ||
           this.removeHtmlAndSpace(this.bbsCn.bbsCn) === "")
       ) {
-        alert("게시판 내용을 입력해주세요.");
+        alert("게시판 내용을 입력하세요.");
         return false;
       }
       if (
         this.bbsCn.ntcPstYn === "Y" &&
         (this.bbsCn.ntcBgngDt === null || this.bbsCn.ntcEndDt === null)
       ) {
-        alert("공지기간을 올바르게 설정해주세요.");
+        alert("공지기간을 올바르게 설정하세요.");
         return false;
       }
 
client/views/pages/adm/boardManagement/template/commonTemplate/CommonSelectList.vue
--- client/views/pages/adm/boardManagement/template/commonTemplate/CommonSelectList.vue
+++ client/views/pages/adm/boardManagement/template/commonTemplate/CommonSelectList.vue
@@ -150,7 +150,7 @@
   data() {
     return {
       pageRole: this.$store.state.userType,
-      colgroup: ["5%", "45%", "20%", "25%", "5"],
+      colgroup: ["5%", "45%", "20%", "25%", "5%"],
       thead: ["NO", "제목", "작성자", "작성일", "조회수"],
       tbody: [],
       search: { ...defaultSearchParams },
@@ -174,9 +174,20 @@
     };
   },
   created() {
-    this.fnBbsIdExtraction();
-    this.resotreQueryParams("queryParams");
-    this.findAll();
+    // this.fnBbsIdExtraction();
+    // this.resotreQueryParams("queryParams");
+    // this.findAll();
+  },
+  // 컴포넌트(페이지) 초기 진입 시
+  beforeRouteEnter(to, from, next) {
+    next(vm => {
+      vm.fnInit();
+    });
+  },
+  // 동일 컴포넌트로 재진입 시
+  beforeRouteUpdate(to, from, next) {
+    this.fnInit();
+    next();
   },
   methods: {
     // 목록 조회
@@ -196,7 +207,12 @@
         this.ntcList = [];
         this.makeTbody();
       } catch (error) {
-        alert("에러가 발생했습니다.\n시스템관리자에게 문의하세요.");
+        const errorData = error.response.data;
+        if (errorData.message != null && errorData.message != "") {
+          alert(error.response.data.message);
+        } else {
+          alert("에러가 발생했습니다.\n관리자에게 문의해주세요.");
+        }
       }
     },
     // 상세 조회
@@ -245,7 +261,7 @@
       if (bbsMng.prvtPstYn === "Y") {
         this.lockList.push(idx);
 
-        // 작성자와 로그인한 사용자가 같을 때, 관리자 일 경우 title 표시
+        // 작성자와 로그인한 사용자가 같거나, 로그인한 사용자가 관리자 일 경우 title 표시
         if (bbsMng.rgtr != this.mbrId && this.roles != "ROLE_ADMIN") {
           return "비밀글입니다.";
         }
@@ -274,16 +290,23 @@
       this.search = { ...defaultSearchParams };
       this.findAll();
     },
+
+    // 초기 조회
+    fnInit() {
+      this.fnBbsIdExtraction();
+      this.resotreQueryParams("queryParams");
+      this.findAll();
+    }
   },
   watch: {
     $route(to, from) {
       // path가 다를 때만 조회
-      if (to.path !== from.path) {
-        this.fnBbsIdExtraction();
-        this.resotreQueryParams("queryParams");
-        this.findAll();
-        this.path = this.$store.state.path;
-      }
+      // if (to.path !== from.path) {
+      //   this.fnBbsIdExtraction();
+      //   this.resotreQueryParams("queryParams");
+      //   this.findAll();
+      //   this.path = this.$store.state.path;
+      // }
     },
   },
   computed: {},
client/views/pages/adm/boardManagement/template/commonTemplate/CommonSelectListOne.vue
--- client/views/pages/adm/boardManagement/template/commonTemplate/CommonSelectListOne.vue
+++ client/views/pages/adm/boardManagement/template/commonTemplate/CommonSelectListOne.vue
@@ -77,7 +77,7 @@
               >
                 {{ prevBbsCn.bbsNm }}
               </td>
-              <td v-else class="pd10">이전글이 없습니다</td>
+              <td v-else class="pd10">이전글이 없습니다.</td>
             </tr>
             <tr>
               <td class="pd10 text-ct">다음글</td>
@@ -88,7 +88,7 @@
               >
                 {{ nextBbsCn.bbsNm }}
               </td>
-              <td v-else class="pd10">다음글이 없습니다</td>
+              <td v-else class="pd10">다음글이 없습니다.</td>
             </tr>
           </tbody>
         </table>
@@ -229,7 +229,7 @@
             >
               <a :href="`${path}/view.page?pageId=${prevBbsCn.bbsId}`">{{ prevBbsCn.bbsNm }}</a>
             </td>
-            <td v-else class="pd10">이전글이 없습니다</td>
+            <td v-else class="pd10">이전글이 없습니다.</td>
           </tr>
           <tr>
             <td class="pd10 text-ct">다음글</td>
@@ -238,7 +238,7 @@
             >
               <a :href="`${path}/view.page?pageId=${nextBbsCn.bbsId}`">{{ nextBbsCn.bbsNm }}</a>
             </td>
-            <td v-else class="pd10">다음글이 없습니다</td>
+            <td v-else class="pd10">다음글이 없습니다.</td>
           </tr>
         </tbody>
       </table>
@@ -348,7 +348,12 @@
           this.updateVwCnt();
         }
       } catch (error) {
-        alert("에러가 발생했습니다.\n시스템관리자에게 문의하세요.");
+        const errorData = error.response.data;
+        if (errorData.message != null && errorData.message != "") {
+          alert(error.response.data.message);
+        } else {
+          alert("에러가 발생했습니다.\n관리자에게 문의해주세요.");
+        }
       }
     },
     // 댓글 조회
@@ -362,7 +367,12 @@
           this.cmntList = res.data.data.cmntList;
         }
       } catch (error) {
-        alert("에러가 발생했습니다.\n시스템관리자에게 문의하세요.");
+        const errorData = error.response.data;
+        if (errorData.message != null && errorData.message != "") {
+          alert(error.response.data.message);
+        } else {
+          alert("에러가 발생했습니다.\n관리자에게 문의해주세요.");
+        }
       }
     },
     // 첨부파일 다운로드 로직
@@ -391,7 +401,12 @@
         document.body.removeChild(link);
         window.URL.revokeObjectURL(url);
       } catch (error) {
-        alert("파일 다운로드 중 오류가 발생했습니다.");
+        const errorData = error.response.data;
+        if (errorData.message != null && errorData.message != "") {
+          alert(error.response.data.message);
+        } else {
+          alert("파일 다운로드 중 오류가 발생했습니다.");
+        }
       }
     },
     // 목록으로 이동
@@ -433,7 +448,12 @@
           });
         }
       } catch (error) {
-        alert("에러가 발생했습니다.\n시스템관리자에게 문의하세요.");
+        const errorData = error.response.data;
+        if (errorData.message != null && errorData.message != "") {
+          alert(error.response.data.message);
+        } else {
+          alert("에러가 발생했습니다.\n관리자에게 문의해주세요.");
+        }
       }
     },
     // 조회수 증가
@@ -444,7 +464,12 @@
         };
         const res = await updateVwCnt(params);
       } catch (error) {
-        alert("에러가 발생했습니다.\n시스템관리자에게 문의하세요.");
+        const errorData = error.response.data;
+        if (errorData.message != null && errorData.message != "") {
+          alert(error.response.data.message);
+        } else {
+          alert("에러가 발생했습니다.\n관리자에게 문의해주세요.");
+        }
       }
     },
 
@@ -469,8 +494,12 @@
           this.getCmntList();
         }
       } catch (error) {
-        const message = error.response.data.message;
-        alert(message);
+        const errorData = error.response.data;
+        if (errorData.message != null && errorData.message != "") {
+          alert(error.response.data.message);
+        } else {
+          alert("에러가 발생했습니다.\n관리자에게 문의해주세요.");
+        }
       }
     },
     // onDelete(commentId) {
client/views/pages/adm/boardManagement/template/faqTemplate/FaqInsert.vue
--- client/views/pages/adm/boardManagement/template/faqTemplate/FaqInsert.vue
+++ client/views/pages/adm/boardManagement/template/faqTemplate/FaqInsert.vue
@@ -111,7 +111,7 @@
                   </div>
                 </div>
             </div>
-            <div class="layout" ref="five" v-if="bbsMng.prvtPstUseYn === 'Y'" >
+            <div class="layout" ref="five" v-if="bbsMng.prvtPstUseYn === 'Y' && ansPageId == null" >
               <label class="form-title">비밀글</label>
               <div class="check-area">
                 <div class="form-check">
@@ -223,7 +223,12 @@
           }
         }
       } catch (error) {
-        alert("에러가 발생했습니다.\n시스템관리자에게 문의하세요.");
+        const errorData = error.response.data;
+        if (errorData.message != null && errorData.message != "") {
+          alert(error.response.data.message);
+        } else {
+          alert("에러가 발생했습니다.\n관리자에게 문의해주세요.");
+        }
       }
     },
     /*
@@ -317,8 +322,12 @@
           });
         })
         .catch((error) => {
-          const message = error.response.data.message;
-          alert(message);
+          const errorData = error.response.data;
+          if (errorData.message != null && errorData.message != "") {
+            alert(error.response.data.message);
+          } else {
+            alert("에러가 발생했습니다.\n관리자에게 문의해주세요.");
+          }
         });
     },
     // 수정
@@ -376,9 +385,12 @@
           });
         })
         .catch((error) => {
-          // console.log(error)
-          const message = error.response.data.message;
-          alert(message);
+          const errorData = error.response.data;
+          if (errorData.message != null && errorData.message != "") {
+            alert(error.response.data.message);
+          } else {
+            alert("에러가 발생했습니다.\n관리자에게 문의해주세요.");
+          }
         });
     },
     // 질의 답변 등록
@@ -394,8 +406,12 @@
           });
         }
       } catch (error) {
-        const message = error.response.data.message;
-        alert(message);
+        const errorData = error.response.data;
+        if (errorData.message != null && errorData.message != "") {
+          alert(error.response.data.message);
+        } else {
+          alert("에러가 발생했습니다.\n관리자에게 문의해주세요.");
+        }
       }
     },
     // 질의 답변 수정
@@ -409,14 +425,18 @@
           });
         }
       } catch (error) {
-        const message = error.response.data.message;
-        alert(message);
+        const errorData = error.response.data;
+        if (errorData.message != null && errorData.message != "") {
+          alert(error.response.data.message);
+        } else {
+          alert("에러가 발생했습니다.\n관리자에게 문의해주세요.");
+        }
       }
     },
 
     // 취소 버튼 동작
     fnCancel() {
-      if (!confirm("등록을 취소하시겠습니까?")) {
+      if (!confirm("작성을 취소하시겠습니까?")) {
         return;
       }
 
client/views/pages/adm/boardManagement/template/faqTemplate/FaqSelectList.vue
--- client/views/pages/adm/boardManagement/template/faqTemplate/FaqSelectList.vue
+++ client/views/pages/adm/boardManagement/template/faqTemplate/FaqSelectList.vue
@@ -81,6 +81,7 @@
                   <span>Q.</span>
                   <div v-if="item.prvtPstYn == 'Y'">
                     <!-- {{ item.rgtr == mbrId || roles == 'ROLE_ADMIN' ? item.bbsCn : '[ 비밀글입니다 ]' }} -->
+                    <svg-icon type="mdi" :path="lockPath" :width="18" :height="18"></svg-icon>
                     <p
                       v-html="
                         item.rgtr == mbrId || roles == 'ROLE_ADMIN'
@@ -131,6 +132,7 @@
                 <div>
                   <template v-if="item.prvtPstYn == 'Y'">
                     <!-- {{ item.rgtr == mbrId || roles == 'ROLE_ADMIN' ? item.ansCn : '[ 비밀 답글입니다 ]' }} -->
+                    <svg-icon type="mdi" :path="lockPath" :width="18" :height="18"></svg-icon>
                     <p
                       v-html="
                         item.rgtr == mbrId || roles == 'ROLE_ADMIN'
@@ -256,7 +258,8 @@
                       <td>
                         <div class="layout">
                           <span class="state question">Q</span>
-                          <div v-if="item.prvtPstYn == 'Y'">
+                          <div v-if="item.prvtPstYn == 'Y'" class="layout">
+                            <svg-icon type="mdi" :path="lockPath" :width="18" :height="18"></svg-icon>
                             <p
                               v-html="
                                 item.rgtr == mbrId || roles == 'ROLE_ADMIN'
@@ -308,7 +311,8 @@
                       <td colspan="3">
                         <div class="layout">
                           <span class="state answer">A</span>
-                          <div v-if="item.prvtPstYn == 'Y'">
+                          <div v-if="item.prvtPstYn == 'Y'" class="layout">
+                            <svg-icon type="mdi" :path="lockPath" :width="18" :height="18"></svg-icon>
                             <p
                               v-html="
                                 item.rgtr == mbrId || roles == 'ROLE_ADMIN'
@@ -377,6 +381,7 @@
 </template>
 
 <script>
+import { mdiLock  } from '@mdi/js';
 import PaginationButton from "../../../../../component/pagination/PaginationButton.vue";
 import {
   findAll,
@@ -392,6 +397,7 @@
   mixins: [queryParams],
   data() {
     return {
+      lockPath: mdiLock,
       pageRole: this.$store.state.userType,
       path: this.$store.state.path,
       pageAuth: this.$store.state.pageAuth,
@@ -414,9 +420,20 @@
     };
   },
   created() {
-    this.fnBbsIdExtraction();
-    this.resotreQueryParams("queryParams");
-    this.findAll();
+    // this.fnBbsIdExtraction();
+    // this.resotreQueryParams("queryParams");
+    // this.findAll();
+  },
+  // 컴포넌트(페이지) 초기 진입 시
+  beforeRouteEnter(to, from, next) {
+    next(vm => {
+      vm.fnInit();
+    });
+  },
+  // 동일 컴포넌트로 재진입 시
+  beforeRouteUpdate(to, from, next) {
+    this.fnInit();
+    next();
   },
   methods: {
     toggle(index) {
@@ -435,13 +452,17 @@
       try {
         const res = await findAll(toRaw(this.search));
         this.list = res.data.data.list; // 게시판 관리 목록
-        console.log("검색갯수",this.list.length);
         this.listCnt = res.data.data.pagination.totalRecordCount; // 게시판 관리 목록 갯수
         this.search = res.data.data.pagination; // 페이징처리 및 검색 내용
         // this.codeList = res.data.data.codeList; // 검색 조건 항목
         this.bbsMng = res.data.data.bbsMng;
       } catch (error) {
-        alert("에러가 발생했습니다.\n시스템관리자에게 문의하세요.");
+        const errorData = error.response.data;
+        if (errorData.message != null && errorData.message != "") {
+          alert(error.response.data.message);
+        } else {
+          alert("에러가 발생했습니다.\n관리자에게 문의해주세요.");
+        }
       }
     },
     // 등록페이지 이동
@@ -482,7 +503,12 @@
           this.findAll();
         }
       } catch (error) {
-        alert("에러가 발생했습니다.\n시스템관리자에게 문의하세요.");
+        const errorData = error.response.data;
+        if (errorData.message != null && errorData.message != "") {
+          alert(error.response.data.message);
+        } else {
+          alert("에러가 발생했습니다.\n관리자에게 문의해주세요.");
+        }
       }
     },
 
@@ -498,7 +524,12 @@
           this.findAll();
         }
       } catch (error) {
-        alert("에러가 발생했습니다.\n시스템관리자에게 문의하세요.");
+        const errorData = error.response.data;
+        if (errorData.message != null && errorData.message != "") {
+          alert(error.response.data.message);
+        } else {
+          alert("에러가 발생했습니다.\n관리자에게 문의해주세요.");
+        }
       }
     },
     // 검색 조건 초기화
@@ -506,17 +537,24 @@
       this.search = { ...defaultSearchParams };
       this.findAll();
     },
+
+    // 초기 조회
+    fnInit() {
+      this.fnBbsIdExtraction();
+      this.resotreQueryParams("queryParams");
+      this.findAll();
+    }
   },
   watch: {
     $route(to, from) {
       // path가 다를 때만 조회
-      if (to.path !== from.path) {
-        this.fnBbsIdExtraction();
-        this.resotreQueryParams("queryParams");
-        this.findAll();
-        this.path = this.$store.state.path;
-        this.isOpen = null;
-      }
+      // if (to.path !== from.path) {
+      //   this.fnBbsIdExtraction();
+      //   this.resotreQueryParams("queryParams");
+      //   this.findAll();
+      //   this.path = this.$store.state.path;
+      //   this.isOpen = null;
+      // }
     },
   },
   computed: {},
client/views/pages/adm/boardManagement/template/galleryTemplate/GalleryInsert.vue
--- client/views/pages/adm/boardManagement/template/galleryTemplate/GalleryInsert.vue
+++ client/views/pages/adm/boardManagement/template/galleryTemplate/GalleryInsert.vue
@@ -210,7 +210,7 @@
   methods: {
     // 목록으로 이동
     fnCancel() {
-      if (!confirm("등록을 취소하시겠습니까?")) {
+      if (!confirm("작성을 취소하시겠습니까?")) {
         return;
       }
       if (this.bbsCn.bbsId == null || this.bbsCn.bbsId == 0) {
@@ -244,7 +244,12 @@
           this.$refs.ckeditor5.createEditor();
         }
       } catch (error) {
-        alert("에러가 발생했습니다.\n시스템관리자에게 문의하세요.");
+        const errorData = error.response.data;
+        if (errorData.message != null && errorData.message != "") {
+          alert(error.response.data.message);
+        } else {
+          alert("에러가 발생했습니다.\n관리자에게 문의해주세요.");
+        }
       }
     },
     // 이미지 파일 등록
@@ -360,8 +365,12 @@
           });
         })
         .catch((error) => {
-          const message = error.response.data.message;
-          alert(message);
+          const errorData = error.response.data;
+          if (errorData.message != null && errorData.message != "") {
+            alert(error.response.data.message);
+          } else {
+            alert("에러가 발생했습니다.\n관리자에게 문의해주세요.");
+          }
         });
     },
     // 수정
@@ -421,14 +430,18 @@
           });
         })
         .catch((error) => {
-          const message = error.response.data.message;
-          alert(message);
+          const errorData = error.response.data;
+          if (errorData.message != null && errorData.message != "") {
+            alert(error.response.data.message);
+          } else {
+            alert("에러가 발생했습니다.\n관리자에게 문의해주세요.");
+          }
         });
     },
     // 유효성 검사
     Validation() {
       if (!this.bbsCn.bbsNm || this.bbsCn.bbsNm.trim() === "") {
-        alert("게시판 제목을 입력해주세요.");
+        alert("게시판 제목을 입력하세요.");
         return false;
       }
 
@@ -448,13 +461,13 @@
         (this.isEmpty(this.bbsCn.bbsCn) ||
           this.removeHtmlAndSpace(this.bbsCn.bbsCn) === "")
       ) {
-        alert("게시판 내용을 입력해주세요.");
+        alert("게시판 내용을 입력하세요.");
         return false;
       }
 
       //  이미지 파일 null 검사
       if (this.imgFileList.length < 1) {
-        alert("이미지 파일을 첨부해주세요.");
+        alert("이미지 파일을 첨부하세요.");
         return false;
       }
 
@@ -462,7 +475,7 @@
         this.bbsCn.ntcPstYn === "Y" &&
         (this.bbsCn.ntcBgngDt === null || this.bbsCn.ntcEndDt === null)
       ) {
-        alert("공지기간을 올바르게 설정해주세요.");
+        alert("공지기간을 올바르게 설정하세요.");
         return false;
       }
 
client/views/pages/adm/boardManagement/template/galleryTemplate/GallerySelectList.vue
--- client/views/pages/adm/boardManagement/template/galleryTemplate/GallerySelectList.vue
+++ client/views/pages/adm/boardManagement/template/galleryTemplate/GallerySelectList.vue
@@ -52,6 +52,7 @@
             </div> -->
         </div>
     </template>
+    <!-- 관리자 -->
     <template v-else>
         <div class="search-wrap">
             <div></div>
@@ -77,25 +78,27 @@
                     <div class="tbl-wrap">
                         <table class="tbl data cursor">
                             <colgroup>
-                                <!-- <col width="10%" /> -->
-                                <col width="60%" />
+                                <col width="5%" />
+                                <col width="50%" />
                                 <col width="15%" />
                                 <col width="15%" />
+                                <col width="5%" />
                             </colgroup>
                             <thead>
                                 <tr>
-                                    <!-- <th>NO</th> -->
+                                    <th>NO</th>
                                     <th>제목</th>
                                     <th>작성자</th>
                                     <th>작성일</th>
+                                    <th>조회수</th>
                                 </tr>
                             </thead>
                             <tbody>
                                 <template v-if="list.length > 0">
                                     <tr v-for="(item, idx) in list" :key="idx" @click="fnView(idx)">
-                                        <!-- <td>
-                           
-                                        </td> -->
+                                        <td>
+                                            {{ listCnt - idx - (search.currentPage - 1) * search.recordSize }}
+                                        </td>
                                         <td>
                                             <div class="layout">
                                                 <img :src="item.absltPath"  class="thumbnail" />
@@ -114,6 +117,9 @@
                                         </td>
                                         <td>
                                             {{ item.regDt }}
+                                        </td>
+                                        <td>
+                                            {{  item.inqCnt }}
                                         </td>
                                     </tr>
                                 </template>
@@ -195,9 +201,20 @@
         }
     },
     created() {
-        this.fnBbsIdExtraction();
-        this.resotreQueryParams('queryParams');
-        this.findAll();
+        // this.fnBbsIdExtraction();
+        // this.resotreQueryParams('queryParams');
+        // this.findAll();
+    },
+    // 컴포넌트(페이지) 초기 진입 시
+    beforeRouteEnter(to, from, next) {
+        next(vm => {
+            vm.fnInit();
+        });
+    },
+    // 동일 컴포넌트로 재진입 시
+    beforeRouteUpdate(to, from, next) {
+        this.fnInit();
+        next();
     },
     methods: {
         // 목록 조회
@@ -212,7 +229,12 @@
                 this.bbsMng = res.data.data.bbsMng;
                 
             } catch (error) {
-                alert('에러가 발생했습니다.\n시스템관리자에게 문의하세요.');
+                const errorData = error.response.data;
+                if (errorData.message != null && errorData.message != "") {
+                    alert(error.response.data.message);
+                } else {
+                    alert("에러가 발생했습니다.\n관리자에게 문의해주세요.");
+                }
             }
         },
         // 상세 조회
@@ -236,18 +258,24 @@
         fnSearchReset() {
             this.search = { ...defaultSearchParams };
             this.findAll();
-        }
+        },
 
+        // 초기 조회
+        fnInit() {
+            this.fnBbsIdExtraction();
+            this.resotreQueryParams("queryParams");
+            this.findAll();
+        }
     },
     watch: {
         $route(to, from) {
             // path가 다를 때만 조회
-            if (to.path !== from.path) {
-                this.fnBbsIdExtraction();
-                this.resotreQueryParams('queryParams');
-                this.findAll();
-                this.path = this.$store.state.path;
-            }
+            // if (to.path !== from.path) {
+            //     this.fnBbsIdExtraction();
+            //     this.resotreQueryParams('queryParams');
+            //     this.findAll();
+            //     this.path = this.$store.state.path;
+            // }
         }
 
     },
client/views/pages/adm/boardManagement/template/galleryTemplate/GallerySelectListOne.vue
--- client/views/pages/adm/boardManagement/template/galleryTemplate/GallerySelectListOne.vue
+++ client/views/pages/adm/boardManagement/template/galleryTemplate/GallerySelectListOne.vue
@@ -113,7 +113,7 @@
               >
               <a :href="`${path}/view.page?pageId=${prevBbsCn.bbsId}`">{{ prevBbsCn.bbsNm }}</a>
               </td>
-              <td v-else>이전글이 없습니다</td>
+              <td v-else>이전글이 없습니다.</td>
             </tr>
             <tr>
               <td>다음글</td>
@@ -122,7 +122,7 @@
               >
               <a :href="`${path}/view.page?pageId=${nextBbsCn.bbsId}`">{{ nextBbsCn.bbsNm }}</a>
               </td>
-              <td v-else>다음글이 없습니다</td>
+              <td v-else>다음글이 없습니다.</td>
             </tr>
           </tbody>
         </table>
@@ -246,7 +246,12 @@
           this.updateVwCnt();
         }
       } catch (error) {
-        alert("에러가 발생했습니다.\n시스템관리자에게 문의하세요.");
+        const errorData = error.response.data;
+        if (errorData.message != null && errorData.message != "") {
+          alert(error.response.data.message);
+        } else {
+          alert("에러가 발생했습니다.\n관리자에게 문의해주세요.");
+        }
       }
     },
     // 댓글 조회
@@ -260,7 +265,12 @@
           this.cmntList = res.data.data.cmntList;
         }
       } catch (error) {
-        alert("에러가 발생했습니다.\n시스템관리자에게 문의하세요.");
+        const errorData = error.response.data;
+        if (errorData.message != null && errorData.message != "") {
+          alert(error.response.data.message);
+        } else {
+          alert("에러가 발생했습니다.\n관리자에게 문의해주세요.");
+        }
       }
     },
     // 첨부파일 다운로드 로직
@@ -289,7 +299,12 @@
         document.body.removeChild(link);
         window.URL.revokeObjectURL(url);
       } catch (error) {
-        alert("파일 다운로드 중 오류가 발생했습니다.");
+        const errorData = error.response.data;
+        if (errorData.message != null && errorData.message != "") {
+          alert(error.response.data.message);
+        } else {
+          alert("파일 다운로드 중 오류가 발생했습니다.");
+        }
       }
     },
     // 목록으로 이동
@@ -331,7 +346,12 @@
           });
         }
       } catch (error) {
-        alert("에러가 발생했습니다.\n시스템관리자에게 문의하세요.");
+        const errorData = error.response.data;
+        if (errorData.message != null && errorData.message != "") {
+          alert(error.response.data.message);
+        } else {
+          alert("에러가 발생했습니다.\n관리자에게 문의해주세요.");
+        }
       }
     },
     // 조회수 증가
@@ -342,7 +362,12 @@
         };
         const res = await updateVwCnt(params);
       } catch (error) {
-        alert("에러가 발생했습니다.\n시스템관리자에게 문의하세요.");
+        const errorData = error.response.data;
+        if (errorData.message != null && errorData.message != "") {
+          alert(error.response.data.message);
+        } else {
+          alert("에러가 발생했습니다.\n관리자에게 문의해주세요.");
+        }
       }
     },
     // 댓글 등록 로직
@@ -366,8 +391,12 @@
           this.getCmntList();
         }
       } catch (error) {
-        const message = error.response.data.message;
-        alert(message);
+        const errorData = error.response.data;
+        if (errorData.message != null && errorData.message != "") {
+          alert(error.response.data.message);
+        } else {
+          alert("에러가 발생했습니다.\n관리자에게 문의해주세요.");
+        }
       }
     },
     isReply(isReply) {
client/views/pages/adm/boardManagement/template/videoTemplate/VideoInsert.vue
--- client/views/pages/adm/boardManagement/template/videoTemplate/VideoInsert.vue
+++ client/views/pages/adm/boardManagement/template/videoTemplate/VideoInsert.vue
@@ -538,7 +538,7 @@
     // 추가 수정 필요
     // 목록으로 이동
     fnCancel() {
-      if (!confirm("등록을 취소하시겠습니까?")) {
+      if (!confirm("작성을 취소하시겠습니까?")) {
         return;
       }
       if (this.bbsCn.bbsId == null || this.bbsCn.bbsId == 0) {
@@ -572,7 +572,12 @@
           this.$refs.ckeditor5.createEditor();
         }
       } catch (error) {
-        alert("에러가 발생했습니다.\n시스템관리자에게 문의하세요.");
+        const errorData = error.response.data;
+        if (errorData.message != null && errorData.message != "") {
+          alert(error.response.data.message);
+        } else {
+          alert("에러가 발생했습니다.\n관리자에게 문의해주세요.");
+        }
       }
     },
     // 썸네일 등록
@@ -688,8 +693,12 @@
           });
         })
         .catch((error) => {
-          const message = error.response.data.message;
-          alert(message);
+          const errorData = error.response.data;
+          if (errorData.message != null && errorData.message != "") {
+            alert(error.response.data.message);
+          } else {
+            alert("에러가 발생했습니다.\n관리자에게 문의해주세요.");
+          }
         });
     },
     // 수정
@@ -749,14 +758,18 @@
           });
         })
         .catch((error) => {
-          const message = error.response.data.message;
-          alert(message);
+          const errorData = error.response.data;
+          if (errorData.message != null && errorData.message != "") {
+            alert(error.response.data.message);
+          } else {
+            alert("에러가 발생했습니다.\n관리자에게 문의해주세요.");
+          }
         });
     },
     // 유효성 검사
     Validation() {
       if (!this.bbsCn.bbsNm || this.bbsCn.bbsNm.trim() === "") {
-        alert("게시판 제목을 입력해주세요.");
+        alert("게시판 제목을 입력하세요.");
         return false;
       }
 
@@ -776,13 +789,13 @@
         (this.isEmpty(this.bbsCn.bbsCn) ||
           this.removeHtmlAndSpace(this.bbsCn.bbsCn) === "")
       ) {
-        alert("게시판 내용을 입력해주세요.");
+        alert("게시판 내용을 입력하세요.");
         return false;
       }
 
       // url null 검사
       if (!this.bbsCn.vdoUrl || this.bbsCn.vdoUrl.trim() === "") {
-        alert("영상 URL을 입력해주세요.");
+        alert("영상 URL을 입력하세요.");
         return false;
       }
       const pattern = /youtu\.be|youtube\.com/;
@@ -795,7 +808,7 @@
         this.bbsCn.ntcPstYn === "Y" &&
         (this.bbsCn.ntcBgngDt === null || this.bbsCn.ntcEndDt === null)
       ) {
-        alert("공지기간을 올바르게 설정해주세요.");
+        alert("공지기간을 올바르게 설정하세요.");
         return false;
       }
 
client/views/pages/adm/boardManagement/template/videoTemplate/VideoSelectList.vue
--- client/views/pages/adm/boardManagement/template/videoTemplate/VideoSelectList.vue
+++ client/views/pages/adm/boardManagement/template/videoTemplate/VideoSelectList.vue
@@ -24,25 +24,27 @@
                     <div class="tbl-wrap">
                         <table class="tbl data cursor">
                             <colgroup>
-                                <!-- <col width="10%" /> -->
-                                <col width="60%" />
+                                <col width="5%" />
+                                <col width="50%" />
                                 <col width="15%" />
                                 <col width="15%" />
+                                <col width="5%" />
                             </colgroup>
                             <thead>
                                 <tr>
-                                    <!-- <th>NO</th> -->
+                                    <th>NO</th>
                                     <th>제목</th>
                                     <th>작성자</th>
                                     <th>작성일</th>
+                                    <th>조회수</th>
                                 </tr>
                             </thead>
                             <tbody>
                                 <template v-if="list.length > 0">
                                     <tr v-for="(item, idx) in list" :key="idx" @click="fnView(idx)" >
-                                        <!-- <td>
-                           
-                                        </td> -->
+                                        <td>
+                                            {{ listCnt - idx - (search.currentPage - 1) * search.recordSize }}
+                                        </td>
                                         <td>
                                             <div class="layout">
                                                 <img v-if="item.absltPath" :src="item.absltPath"  class="thumbnail"/>
@@ -62,6 +64,9 @@
                                         </td>
                                         <td>
                                             {{ item.regDt }}
+                                        </td>
+                                        <td>
+                                            {{  item.inqCnt }}
                                         </td>
                                     </tr>
                                 </template>
@@ -150,9 +155,20 @@
         }
     },
     created() {
-        this.fnBbsIdExtraction();
-        this.resotreQueryParams('queryParams');
-        this.findAll();
+        // this.fnBbsIdExtraction();
+        // this.resotreQueryParams('queryParams');
+        // this.findAll();
+    },
+    // 컴포넌트(페이지) 초기 진입 시
+    beforeRouteEnter(to, from, next) {
+        next(vm => {
+            vm.fnInit();
+        });
+    },
+    // 동일 컴포넌트로 재진입 시
+    beforeRouteUpdate(to, from, next) {
+        this.fnInit();
+        next();
     },
     methods: {
         // 목록 조회
@@ -167,7 +183,12 @@
                 this.bbsMng = res.data.data.bbsMng;
                 
             } catch (error) {
-                alert('에러가 발생했습니다.\n시스템관리자에게 문의하세요.');
+                const errorData = error.response.data;
+                if (errorData.message != null && errorData.message != "") {
+                    alert(error.response.data.message);
+                } else {
+                    alert("에러가 발생했습니다.\n관리자에게 문의해주세요.");
+                }
             }
         },
         // 상세 조회
@@ -197,17 +218,24 @@
         fnSearchReset() {
             this.search = { ...defaultSearchParams };
             this.findAll();
+        },
+
+        // 초기 조회
+        fnInit() {
+            this.fnBbsIdExtraction();
+            this.resotreQueryParams("queryParams");
+            this.findAll();
         }
     },
     watch: {
         $route(to, from) {
             // path가 다를 때만 조회
-            if (to.path !== from.path) {
-                this.fnBbsIdExtraction();
-                this.resotreQueryParams('queryParams');
-                this.findAll();
-                this.path = this.$store.state.path;
-            }
+            // if (to.path !== from.path) {
+            //     this.fnBbsIdExtraction();
+            //     this.resotreQueryParams('queryParams');
+            //     this.findAll();
+            //     this.path = this.$store.state.path;
+            // }
         }
     },
     computed: {
client/views/pages/adm/boardManagement/template/videoTemplate/VideoSelectListOne.vue
--- client/views/pages/adm/boardManagement/template/videoTemplate/VideoSelectListOne.vue
+++ client/views/pages/adm/boardManagement/template/videoTemplate/VideoSelectListOne.vue
@@ -140,7 +140,7 @@
               >
                 {{ prevBbsCn.bbsNm }}
               </td>
-              <td v-else class="pd10">이전글이 없습니다</td>
+              <td v-else class="pd10">이전글이 없습니다.</td>
             </tr>
             <tr>
               <td class="pd10 text-ct">다음글</td>
@@ -151,7 +151,7 @@
               >
                 {{ nextBbsCn.bbsNm }}
               </td>
-              <td v-else class="pd10">다음글이 없습니다</td>
+              <td v-else class="pd10">다음글이 없습니다.</td>
             </tr>
           </tbody>
         </table>
@@ -302,7 +302,7 @@
                 >
                 <a :href="`${path}/view.page?pageId=${prevBbsCn.bbsId}`">{{ prevBbsCn.bbsNm }}</a>
                 </td>
-                <td v-else>이전글이 없습니다</td>
+                <td v-else>이전글이 없습니다.</td>
               </tr>
               <tr>
                 <td>다음글</td>
@@ -311,7 +311,7 @@
                 >
                 <a :href="`${path}/view.page?pageId=${nextBbsCn.bbsId}`">{{ nextBbsCn.bbsNm }}</a>
                 </td>
-                <td v-else>다음글이 없습니다</td>
+                <td v-else>다음글이 없습니다.</td>
               </tr>
             </tbody>
           </table>
@@ -419,7 +419,12 @@
           this.updateVwCnt();
         }
       } catch (error) {
-        alert("에러가 발생했습니다.\n시스템관리자에게 문의하세요.");
+        const errorData = error.response.data;
+        if (errorData.message != null && errorData.message != "") {
+          alert(error.response.data.message);
+        } else {
+          alert("에러가 발생했습니다.\n관리자에게 문의해주세요.");
+        }
       }
     },
     // 댓글 조회
@@ -433,7 +438,12 @@
           this.cmntList = res.data.data.cmntList;
         }
       } catch (error) {
-        alert("에러가 발생했습니다.\n시스템관리자에게 문의하세요.");
+        const errorData = error.response.data;
+        if (errorData.message != null && errorData.message != "") {
+          alert(error.response.data.message);
+        } else {
+          alert("에러가 발생했습니다.\n관리자에게 문의해주세요.");
+        }
       }
     },
     // 첨부파일 다운로드 로직
@@ -462,7 +472,12 @@
         document.body.removeChild(link);
         window.URL.revokeObjectURL(url);
       } catch (error) {
-        alert("파일 다운로드 중 오류가 발생했습니다.");
+        const errorData = error.response.data;
+        if (errorData.message != null && errorData.message != "") {
+          alert(error.response.data.message);
+        } else {
+          alert("파일 다운로드 중 오류가 발생했습니다.");
+        }
       }
     },
     // 목록으로 이동
@@ -504,7 +519,12 @@
           });
         }
       } catch (error) {
-        alert("에러가 발생했습니다.\n시스템관리자에게 문의하세요.");
+        const errorData = error.response.data;
+        if (errorData.message != null && errorData.message != "") {
+          alert(error.response.data.message);
+        } else {
+          alert("에러가 발생했습니다.\n관리자에게 문의해주세요.");
+        }
       }
     },
     // 조회수 증가
@@ -515,7 +535,12 @@
         };
         const res = await updateVwCnt(params);
       } catch (error) {
-        alert("에러가 발생했습니다.\n시스템관리자에게 문의하세요.");
+        const errorData = error.response.data;
+        if (errorData.message != null && errorData.message != "") {
+          alert(error.response.data.message);
+        } else {
+          alert("에러가 발생했습니다.\n관리자에게 문의해주세요.");
+        }
       }
     },
     // 댓글 등록 로직
@@ -539,8 +564,12 @@
           this.getCmntList();
         }
       } catch (error) {
-        const message = error.response.data.message;
-        alert(message);
+        const errorData = error.response.data;
+        if (errorData.message != null && errorData.message != "") {
+          alert(error.response.data.message);
+        } else {
+          alert("에러가 발생했습니다.\n관리자에게 문의해주세요.");
+        }
       }
     },
     isReply(isReply) {
client/views/pages/adm/boardManagement/wordsManagement/WordsManagementSelectList.vue
--- client/views/pages/adm/boardManagement/wordsManagement/WordsManagementSelectList.vue
+++ client/views/pages/adm/boardManagement/wordsManagement/WordsManagementSelectList.vue
@@ -6,7 +6,7 @@
                 <option value="">전체</option>
                 <option v-for="(item, idx) in codeList" :key="idx" :value="item.cd">{{ item.cdNm }}</option>
             </select> -->
-            <input type="text" class="form-control sm border-none"  placeholder="금지어를 입력해주세요."
+            <input type="text" class="form-control sm border-none"  placeholder="금지어를 입력하세요."
                 v-model="search.searchText" @keyup.enter="fnFindAllWord" />
             <button class="btn-ico xsm ico-sch" @click="fnFindAllWord">
                 <span class="sr-only">검색</span>
@@ -46,7 +46,7 @@
             <button class="btn-close" @click="modalClose"></button>
         </template>
         <div class="input-group">
-            <input type="text" class="form-control sm" placeholder="추가할 금지어를 입력해주세요." v-model="inputWordNm"
+            <input type="text" class="form-control sm" placeholder="추가할 금지어를 입력하세요." v-model="inputWordNm"
                 @keyup.enter="addinputWord" style="width: calc(100% - 100px);"/>
             <button class="btn sm ico-before ico-plus-w main" @click="addinputWord">추가</button>
         </div>
@@ -122,7 +122,7 @@
         // 금지어 추가 (리스트 생성)
         addinputWord: function () {
             if (this.inputWordNm.trim() == '') {
-                alert('금지어를 입력해주세요.')
+                alert('금지어를 입력하세요.')
                 return
             }
             this.wordsArr.push(this.inputWordNm)
@@ -141,14 +141,19 @@
                     this.makeTbody();
                 }
             } catch (error) {
-                alert('에러가 발생했습니다.\n시스템관리자에게 문의하세요.');
+                const errorData = error.response.data;
+                if (errorData.message != null && errorData.message != "") {
+                    alert(error.response.data.message);
+                } else {
+                    alert("에러가 발생했습니다.\n관리자에게 문의해주세요.");
+                }
             }
         },
         // 금지어 등록
         async fnSave() {
             try {
                 if (this.wordsArr.length == 0) {
-                    alert('등록할 금지어를 추가해주세요.')
+                    alert('등록할 금지어를 추가하세요.')
                     return
                 }
                 const param = {
@@ -162,7 +167,12 @@
                     this.fnFindAllWord();
                 }
             } catch (error) {
-                alert('에러가 발생했습니다.\n시스템관리자에게 문의하세요.');
+                const errorData = error.response.data;
+                if (errorData.message != null && errorData.message != "") {
+                    alert(error.response.data.message);
+                } else {
+                    alert("에러가 발생했습니다.\n관리자에게 문의해주세요.");
+                }
             }
         },
         // 삭제할 워드 선택
@@ -177,7 +187,7 @@
         // 삭제 버튼 로직
         async fnDelete() {
             if (this.delWords.length === 0) {
-                alert('삭제할 금지어를 선택해주세요.');
+                alert('삭제할 금지어를 선택하세요.');
                 return;
             }
             if (!confirm('선택한 금지어를 삭제하시겠습니까?')) {
@@ -201,7 +211,12 @@
                     
                 }
             } catch (error) {
-                alert('에러가 발생했습니다.\n시스템관리자에게 문의하세요.');
+                const errorData = error.response.data;
+                if (errorData.message != null && errorData.message != "") {
+                    alert(error.response.data.message);
+                } else {
+                    alert("에러가 발생했습니다.\n관리자에게 문의해주세요.");
+                }
             }
         },
 
client/views/pages/adm/departmentManagement/DepartmentManagement.vue
--- client/views/pages/adm/departmentManagement/DepartmentManagement.vue
+++ client/views/pages/adm/departmentManagement/DepartmentManagement.vue
@@ -57,7 +57,7 @@
                     class="form-control sm"
                     :disabled="isFormDisabled"
                     v-model="viewDept.deptNm"
-                    placeholder="부서명을 입력해주세요"
+                    placeholder="부서명을 입력하세요."
                   />
                 </div>
                 <div  class="grid-column layout">
@@ -84,7 +84,7 @@
                     style="min-height: 3rem"
                     :disabled="isFormDisabled"
                     v-model="viewDept.deptExpln"
-                    placeholder="부서에 대한 설명을 입력해주세요"
+                    placeholder="부서에 대한 설명을 입력해주세요."
                   ></textarea>
                 </div>
               </div>
@@ -98,12 +98,11 @@
                   <span v-if="submitStts"> 등록 </span>
                   <span v-else>수정</span>
                 </button>
-
-    
                 <button
                   class="btn sm red"
                   :disabled="isFormDisabled"
                   @click="fnDel"
+                  v-if="pageAuth.delAuthrt == 'Y' && selectedDeptId != null"
                 >
                   삭제
                 </button>
@@ -235,6 +234,7 @@
       newDept: {}, // 신규 부서 등록
       viewDept: {}, // 사용자에게 보여질 부서정보
       searchText: "", // 사용자 정보 검색
+      originDept: null, // 변경전 부서 정보
 
       submitStts: true,
       topBoxHeight: 0, 
@@ -258,7 +258,12 @@
           this.newDept.useYn = "Y";
         }
       } catch (error) {
-        alert(error.response.data.message);
+        const errorData = error.response.data;
+        if (errorData.message != null && errorData.message != "") {
+          alert(error.response.data.message);
+        } else {
+          alert("에러가 발생했습니다.\n관리자에게 문의해주세요.");
+        }
       }
     },
     // 상세 조회
@@ -280,7 +285,12 @@
           this.submitStts = false;
         }
       } catch (error) {
-        alert(error.response.data.message);
+        const errorData = error.response.data;
+        if (errorData.message != null && errorData.message != "") {
+          alert(error.response.data.message);
+        } else {
+          alert("에러가 발생했습니다.\n관리자에게 문의해주세요.");
+        }
       }
     },
     // 부서 선택
@@ -304,18 +314,23 @@
           // this.selectedDeptId = res.data.data.deptId;
         }
       } catch (error) {
-        alert(error.response.data.message);
+        const errorData = error.response.data;
+        if (errorData.message != null && errorData.message != "") {
+          alert(error.response.data.message);
+        } else {
+          alert("에러가 발생했습니다.\n관리자에게 문의해주세요.");
+        }
       }
     },
     // 유효성 검사
     validation() {
       if (!this.viewDept.deptNm || this.viewDept.deptNm.trim() === "") {
-        alert("부서명을 입력해주세요.");
+        alert("부서명을 입력하세요.");
         return false;
       }
       // 부서권한 검사
       if (!this.selectedAuthrt) {
-        alert("부서 권한을 지정해주세요.");
+        alert("부서 권한을 지정하세요.");
         return false;
       }
       let authrtList = [];
@@ -327,7 +342,7 @@
     // 삭제
     async fnDel() {
       if (Object.keys(this.viewDept).length === 0) {
-        alert("삭제 대상을 지정해주세요.");
+        alert("삭제 대상을 지정하세요.");
         return false;
       }
       if (
@@ -345,7 +360,12 @@
           this.findAll(); // 목록 재조회
         }
       } catch (error) {
-        alert(error.response.data.message);
+        const errorData = error.response.data;
+        if (errorData.message != null && errorData.message != "") {
+          alert(error.response.data.message);
+        } else {
+          alert("에러가 발생했습니다.\n관리자에게 문의해주세요.");
+        }
       }
     },
     // 최상위 신규 객체 생성
@@ -364,7 +384,7 @@
         // Object.keys(this.viewDept).length === 0 ||
         this.selectedDeptId == null
       ) {
-        alert("상위 부서를 지정해주세요.");
+        alert("상위 부서를 지정하세요.");
         return;
       } else {
         if (!confirm("작성 중인 부서정보는 저장되지 않습니다.\n계속 하시겠습니까?")) {
@@ -385,6 +405,7 @@
       this.selectedAuthrt = "";
       this.mbrList = []; // 부서에 등록되지 않은 사용자 정보 초기화
       this.deptMbr = []; // 부서에 등록된 사용자 정보 초기화
+      this.originDept = this.viewDept.deptId; // null
       this.makeTbody();
       this.makeMbrTobdy();
     },
@@ -416,7 +437,12 @@
           this.findByDept();
         }
       } catch (error) {
-        alert(error.response.data.message);
+        const errorData = error.response.data;
+        if (errorData.message != null && errorData.message != "") {
+          alert(error.response.data.message);
+        } else {
+          alert("에러가 발생했습니다.\n관리자에게 문의해주세요.");
+        }
       }
     },
     // 사용자 정보 검색
@@ -437,7 +463,12 @@
           this.makeMbrTobdy();
         }
       } catch (error) {
-        alert(error.response.data.message);
+        const errorData = error.response.data;
+        if (errorData.message != null && errorData.message != "") {
+          alert(error.response.data.message);
+        } else {
+          alert("에러가 발생했습니다.\n관리자에게 문의해주세요.");
+        }
       }
     },
     // 사용자 부서 등록
@@ -453,7 +484,14 @@
         if (res.status == 200) {
           this.fnFindByMbr();
         }
-      } catch (error) {}
+      } catch (error) {
+        const errorData = error.response.data;
+        if (errorData.message != null && errorData.message != "") {
+          alert(error.response.data.message);
+        } else {
+          alert("에러가 발생했습니다.\n관리자에게 문의해주세요.");
+        }
+      }
     },
     // tbody 생성
     makeTbody() {
@@ -510,7 +548,12 @@
           this.findByDept();
         }
       } catch (error) {
-        alert(error.res.data.message);
+        const errorData = error.response.data;
+        if (errorData.message != null && errorData.message != "") {
+          alert(error.response.data.message);
+        } else {
+          alert("에러가 발생했습니다.\n관리자에게 문의해주세요.");
+        }
       }
     },
     updateHeight() {
client/views/pages/adm/log/LoginLog.vue
--- client/views/pages/adm/log/LoginLog.vue
+++ client/views/pages/adm/log/LoginLog.vue
@@ -167,7 +167,12 @@
         this.codeList = response.data.data.codeList;
         this.makeTbody();
       } catch (error) {
-        alert("에러가 발생했습니다.\n시스템관리자에게 문의하세요.");
+        const errorData = error.response.data;
+        if (errorData.message != null && errorData.message != "") {
+          alert(error.response.data.message);
+        } else {
+          alert("에러가 발생했습니다.\n관리자에게 문의해주세요.");
+        }
       }
     },
     //─────axios─────┘
client/views/pages/adm/log/PersonalDataLog.vue
--- client/views/pages/adm/log/PersonalDataLog.vue
+++ client/views/pages/adm/log/PersonalDataLog.vue
@@ -198,7 +198,12 @@
         this.codeList = response.data.data.codeList;
         this.makeTbody();
       } catch (error) {
-        alert("에러가 발생했습니다.\n시스템관리자에게 문의하세요.");
+        const errorData = error.response.data;
+        if (errorData.message != null && errorData.message != "") {
+          alert(error.response.data.message);
+        } else {
+          alert("에러가 발생했습니다.\n관리자에게 문의해주세요.");
+        }
       }
     },
     // 상세 조회
@@ -208,7 +213,12 @@
         this.prvcInqHstry = response.data.data;
         this.fnModalOpen();
       } catch (error) {
-        alert("에러가 발생했습니다.\n시스템관리자에게 문의하세요.");
+        const errorData = error.response.data;
+        if (errorData.message != null && errorData.message != "") {
+          alert(error.response.data.message);
+        } else {
+          alert("에러가 발생했습니다.\n관리자에게 문의해주세요.");
+        }
       }
     },
     //─────axios─────┘},
client/views/pages/adm/main/Main.vue
--- client/views/pages/adm/main/Main.vue
+++ client/views/pages/adm/main/Main.vue
@@ -96,10 +96,9 @@
 import cntnStatsSave from "../../../../resources/js/cntnStatsSave";
 
 // API
-import {
-  adminMainProc
-} from "../../../../resources/api/main";
+import { adminMainProc } from "../../../../resources/api/main";
 import { findBySysMenu } from "../../../../resources/api/menu";
+import { sysListByPageProc } from "../../../../resources/api/popup";
 
 const App = {
   mixins: [queryParams, cntnStatsSave],
@@ -134,6 +133,16 @@
     };
   },
   created() {
+    // 쿠키 초기화
+    const today = new Date();
+      let tomorrow = new Date(today.setDate(today.getDate() + 1));
+      tomorrow.setHours(0, 0, 0, 0);
+      tomorrow = new Date(tomorrow);
+      if (this.$cookies.get("popup") == null) {
+        this.$cookies.set("popup", [], tomorrow);
+      }
+    this.fnPopupList();
+
     this.reSetMenu();
     this.fnMenuList();
     this.fnAdminMain();
@@ -199,7 +208,12 @@
         this.chartData = datas;
 
       } catch (error) {
-        alert("에러가 발생했습니다.\n시스템관리자에게 문의하세요.");
+        const errorData = error.response.data;
+        if (errorData.message != null && errorData.message != "") {
+          alert(error.response.data.message);
+        } else {
+          alert("에러가 발생했습니다.\n관리자에게 문의해주세요.");
+        }
       }
     },
     // 게시판 제목 출력
@@ -221,7 +235,12 @@
           this.menuList = response.data.data.menuList;
         }
       } catch (error) {
-        alert("에러가 발생했습니다.\n시스템관리자에게 문의하세요.");
+        const errorData = error.response.data;
+        if (errorData.message != null && errorData.message != "") {
+          alert(error.response.data.message);
+        } else {
+          alert("에러가 발생했습니다.\n관리자에게 문의해주세요.");
+        }
       }
     },
 
@@ -274,6 +293,49 @@
       }
     },
 
+    // 팝업조회(상세)
+    async fnPopupList() {
+      let data = {
+        pageType: this.$store.state.userType,
+      };
+      try {
+        const response = await sysListByPageProc(data);
+        let popupList = response.data.data;
+        if (popupList != null && popupList.length > 0) {
+          this.fnShowPopup(popupList);
+        }
+      } catch (error) {
+        const errorData = error.response.data;
+        if (errorData.message != null && errorData.message != "") {
+          alert(error.response.data.message);
+        } else {
+          alert("에러가 발생했습니다.\n관리자에게 문의해주세요.");
+        }
+      }
+    },
+    // 팝업 표시
+    fnShowPopup(popupList) {
+      for (let popup of popupList) {
+        let count = false;
+        const popupCookies = this.$cookies.get("popup");
+        if (popupCookies.length > 0) {
+          for (let cookie of popupCookies) {
+            if (popup.popupId == cookie) {
+              count = true;
+            }
+          }
+        }
+        if (!count) {
+          let size = "width=" + popup.wdthLen + ", height=" + popup.vrtcLen;
+          window.open(
+            "/cmmn/popup.page?popupId=" + popup.popupId,
+            "_blank",
+            size + ", scrollbars=no, resizable=no, toolbars=no, menubar=no"
+          );
+        }
+      }
+    },
+
   },
 };
 
client/views/pages/adm/member/adminManagement/AdminManagementSelectList.vue
--- client/views/pages/adm/member/adminManagement/AdminManagementSelectList.vue
+++ client/views/pages/adm/member/adminManagement/AdminManagementSelectList.vue
@@ -93,7 +93,7 @@
 
       colgroup: ["5%", "19%", "19%", "15%", "10%", "8%"],
       thead: [
-        "번호",
+        "NO",
         "아이디",
         "이름",
         "휴대폰번호",
@@ -126,7 +126,12 @@
         this.search = response.data["data"]["pagination"];
         this.makeTbody();
       } catch (error) {
-        alert("에러가 발생했습니다.\n관리자에게 문의해주세요.");
+        const errorData = error.response.data;
+        if (errorData.message != null && errorData.message != "") {
+          alert(error.response.data.message);
+        } else {
+          alert("에러가 발생했습니다.\n관리자에게 문의해주세요.");
+        }
       }
     },
     // 휴대폰번호 표기 변환
@@ -180,7 +185,12 @@
         alert(response.data.message);
         this.fnViewList();
       } catch (error) {
-        alert("에러가 발생했습니다.\n관리자에게 문의해주세요.");
+        const errorData = error.response.data;
+        if (errorData.message != null && errorData.message != "") {
+          alert(error.response.data.message);
+        } else {
+          alert("에러가 발생했습니다.\n관리자에게 문의해주세요.");
+        }
       }
     },
 
client/views/pages/adm/member/userManagement/UserManagementSelectList.vue
--- client/views/pages/adm/member/userManagement/UserManagementSelectList.vue
+++ client/views/pages/adm/member/userManagement/UserManagementSelectList.vue
@@ -121,7 +121,7 @@
 
       colgroup: ["5%", "15%", "10%", "13%", "15%", "10%", "8%"],
       thead: [
-        "번호",
+        "NO",
         "아이디",
         "이름",
         "이메일",
@@ -163,7 +163,12 @@
         this.search = response.data.data.pagination;
         this.makeTbody();
       } catch (error) {
-        alert("에러가 발생했습니다.\n관리자에게 문의해주세요.");
+        const errorData = error.response.data;
+        if (errorData.message != null && errorData.message != "") {
+          alert(error.response.data.message);
+        } else {
+          alert("에러가 발생했습니다.\n관리자에게 문의해주세요.");
+        }
       }
     },
     // 휴대폰번호 표기 변환
@@ -232,7 +237,7 @@
         this.prvcInqHstry["inqRsn"] == null ||
         this.prvcInqHstry["inqRsn"] == ""
       ) {
-        alert("사유를 입력해주세요.");
+        alert("사유를 입력하세요.");
         this.$refs.inqRsn.focus();
         return;
       }
@@ -271,7 +276,12 @@
         alert(response.data.message);
         this.fnViewList();
       } catch (error) {
-        alert("에러가 발생했습니다.\n관리자에게 문의해주세요.");
+        const errorData = error.response.data;
+        if (errorData.message != null && errorData.message != "") {
+          alert(error.response.data.message);
+        } else {
+          alert("에러가 발생했습니다.\n관리자에게 문의해주세요.");
+        }
       }
     },
 
client/views/pages/adm/menuManagement/menuManagement/MenuManagement.vue
--- client/views/pages/adm/menuManagement/menuManagement/MenuManagement.vue
+++ client/views/pages/adm/menuManagement/menuManagement/MenuManagement.vue
@@ -38,7 +38,7 @@
                 <div  class="layout">
                   <label class="form-title"><span>*</span>메뉴명</label>
                   <input type="text" class="form-control sm" ref="menuNm" v-model="viewMenu.menuNm"
-                    :disabled="!editMode || viewMenu.sysPvsnYn == 0" placeholder="메뉴명을 입력해주세요"/>
+                    :disabled="!editMode || viewMenu.sysPvsnYn == 0" placeholder="메뉴명을 입력하세요."/>
                 </div>
                 <div class="grid-column layout">
                   <label class="form-title"><span>*</span>메뉴 타입</label>
@@ -63,7 +63,7 @@
                     </template>
                     <template v-if="viewMenu.menuType == 'link'">
                       <input type="text" class="form-control sm" ref="linkUrl" v-model="viewMenu.linkUrl"
-                        :disabled="!editMode || viewMenu.sysPvsnYn == 0"  :style="{ width: inputWidth + 'px' }" placeholder="링크를 입력해주세요"/>
+                        :disabled="!editMode || viewMenu.sysPvsnYn == 0"  :style="{ width: inputWidth + 'px' }" placeholder="링크를 입력하세요."/>
                     </template>
                   </div>
                 </div>
@@ -129,7 +129,7 @@
                 </div>
                 <div class="grid-column layout">
                   <label class="form-title">메뉴 설명</label>
-                  <textarea  v-model="viewMenu.menuExpln" :disabled="!editMode" class="form-control sm area" style="height: 100%;" placeholder="메뉴에 대한 설명을 입력해주세요"></textarea>
+                  <textarea  v-model="viewMenu.menuExpln" :disabled="!editMode" class="form-control sm area" style="height: 100%;" placeholder="메뉴에 대한 설명을 입력해주세요."></textarea>
                 </div>
                 <div  class="layout">
                   <label class="form-title">등록자</label>
@@ -265,7 +265,7 @@
     // 삭제
     fnDelete() {
       if (Object.keys(this.viewMenu).length === 0) {
-        alert("삭제 대상을 선택해주세요.");
+        alert("삭제 대상을 선택하세요.");
         return false;
       }
 
@@ -535,7 +535,12 @@
           this.axiosViewDetail(data);
         }
       } catch (error) {
-        alert(error.res.data.message);
+        const errorData = error.response.data;
+        if (errorData.message != null && errorData.message != "") {
+          alert(error.response.data.message);
+        } else {
+          alert("에러가 발생했습니다.\n관리자에게 문의해주세요.");
+        }
       }
     },
 
client/views/pages/adm/menuManagement/menuSatisfactionManagement/MenuSatisfactionSelectList.vue
--- client/views/pages/adm/menuManagement/menuSatisfactionManagement/MenuSatisfactionSelectList.vue
+++ client/views/pages/adm/menuManagement/menuSatisfactionManagement/MenuSatisfactionSelectList.vue
@@ -74,15 +74,16 @@
       // pageAuth: JSON.parse(localStorage.getItem("vuex")).pageAuth,
       search: { ...defaultSearchParams },
       satisfaction: false,
-      colgroup: ["30%", "10%", "10%", "10%", "10%", "10%", "10%", "10%"],
+      colgroup: ["25%", "5%", "10%", "10%", "10%", "10%", "10%", "10%", "10%"],
       colgroup2: ["8%", "12%", "12%", "12%", "12%", "12%", "32%"],
       thead: [
         "메뉴명",
-        "매우 만족",
-        "만족",
-        "보통",
-        "불만족",
-        "매우 불만족",
+        "응답 수",
+        "매우 만족(5)",
+        "만족(4)",
+        "보통(3)",
+        "불만족(2)",
+        "매우 불만족(1)",
         "평균 점수",
         "상세보기",
       ],
@@ -147,6 +148,7 @@
       this.tbody = [];
       this.tbody = this.menuList.map((menu) => ({
         menuNm: menu.menuNm, // 메뉴명
+        rspnsTotCnt: menu.rspnsTotCnt, // 응답 총 개수
         rspnsFiveCnt: menu.rspnsFiveCnt, // 매우만족
         rspnsFourCnt: menu.rspnsFourCnt, // 만족
         rspnsThreeCnt: menu.rspnsThreeCnt, // 보통
@@ -159,8 +161,8 @@
     // 만족도 tbody 생성
     makeStfndgTbody() {
       this.stfndgTbody = [];
-      this.stfndgTbody = this.menuStfndgList.map((menuStfndg, index) => ({
-        no: index + 1, // 번호
+      this.stfndgTbody = this.menuStfndgList.map((menuStfndg, idx) => ({
+        no: idx + (this.menuStfndgList.length - (2 * idx)), // 번호
         // regIp: menuStfndg.regIp, // 등록IP
         rspnsFive: menuStfndg.rspnsFive, // 매우만족
         rspnsFour: menuStfndg.rspnsFour, // 만족
client/views/pages/adm/popup/PopupManagementInsert.vue
--- client/views/pages/adm/popup/PopupManagementInsert.vue
+++ client/views/pages/adm/popup/PopupManagementInsert.vue
@@ -146,11 +146,11 @@
               </div>
           
               <div class="layout">
-                <label class="form-title"><span>*</span>링크 URL</label>
+                <label class="form-title">링크 URL</label>
                 <input
                   type="text"
                   class="form-control sm"
-                  placeholder="이미지 주소를 입력하세요."
+                  placeholder="이미지 주소를 입력해주세요."
                   v-model="popup['linkUrl']"
                   :disabled="popup['popupType'] != 'image'"
                   ref="linkUrl"
@@ -191,13 +191,38 @@
             <div  class="layout">
               <label class="form-title"><span>*</span>순서</label>
               <select class="form-select sm " v-model="popup['sn']" ref="sn">
-                <option value="0">순서를 선택하세요.</option>
+                <option value="">순서를 선택하세요.</option>
                 <option value="1">1</option>
                 <option value="2">2</option>
                 <option value="3">3</option>
                 <option value="4">4</option>
                 <option value="5">5</option>
               </select>
+            </div>
+            <div  class="layout">
+              <label class="form-title"><span>*</span>사용 유무</label>
+              <div class="check-area">
+                <div class="form-check">
+                  <input
+                    type="radio"
+                    id="useY"
+                    class="mr5"
+                    v-model="popup['popupUseYn']"
+                    value="Y"
+                  />
+                  <label for="useY">사용</label>
+                </div>
+                <div class="form-check">
+                  <input
+                    type="radio"
+                    id="useN"
+                    class="mr5"
+                    v-model="popup['popupUseYn']"
+                    value="N"
+                  />
+                  <label for="useN">미사용</label>
+                </div>
+              </div>
             </div>
           </div>
         </div>
@@ -341,73 +366,73 @@
     // 유효성 검사
     valiadtion() {
       if (!this.popup["popupTtl"] || this.popup["popupTtl"].trim() === "") {
-        alert("제목을 입력해주세요.");
+        alert("제목을 입력하세요.");
         this.$refs.popupTtl.focus();
         return false;
       }
       if (!this.popup["bgngDt"]) {
-        alert("시작일을 입력해주세요.");
+        alert("시작일을 입력하세요.");
         this.$refs.bgngDt.focus();
         return false;
       }
       if (!this.popup["endDt"]) {
-        alert("종료일을 입력해주세요.");
+        alert("종료일을 입력하세요.");
         this.$refs.endDt.focus();
         return false;
       }
       if (!this.popup["popupSizeType"]) {
-        alert("팝업 크기를 선택해주세요.");
+        alert("팝업 크기 타입을 선택하세요.");
         return false;
       }
       if (this.popup["popupSizeType"] == "fixed") {
         if (!this.popup["popupSize"]) {
-          alert("팝업 크기를 선택해주세요.");
+          alert("팝업 크기를 선택하세요.");
           return false;
         }
       } else if (this.popup["popupSizeType"] == "custom") {
         if (!this.popup["wdthLen"]) {
-          alert("팝업 가로 크기를 선택해주세요.");
+          alert("팝업 가로 크기를 입력하세요.");
           return false;
         }
         if (!this.popup["vrtcLen"]) {
-          alert("팝업 세로 크기를 선택해주세요.");
+          alert("팝업 세로 크기를 입력하세요.");
           return false;
         }
       }
       if (!this.popup["popupType"]) {
-        alert("업로드 형식을 선택해주세요.");
+        alert("업로드 형식을 선택하세요.");
         return false;
       }
       if (this.popup["popupType"] == "image") {
         if (this.fileList.length < 1) {
-          alert("이미지 첨부파일을 선택해주세요.");
+          alert("이미지 첨부파일을 추가하세요.");
           return false;
         }
-        if (!this.popup["linkUrl"]) {
-          alert("링크 URL을 선택해주세요.");
-          this.$refs.linkUrl.focus();
-          return false;
-        }
+        // if (this.popup["linkUrl"].trim() == '') {
+        //   alert("링크 URL을 입력하세요.");
+        //   this.$refs.linkUrl.focus();
+        //   return false;
+        // }
       } else if (this.popup["popupType"] == "video") {
-        if (!this.popup["vdoUrl"]) {
-          alert("동영상 URL을 선택해주세요.");
+        if (this.popup["vdoUrl"].trim() == '') {
+          alert("동영상 URL을 입력하세요.");
           this.$refs.vdoUrl.focus();
           return false;
         }
       }
       if (!this.popup["sn"]) {
-        alert("순서를 선택해주세요.");
+        alert("순서를 선택하세요.");
         this.$refs.sn.focus();
         return false;
       }
       if (!this.popup["pageType"]) {
-        alert("팝업 노출 페이지를 선택해주세요.");
+        alert("팝업 노출 페이지를 선택하세요.");
         return false;
       }
-      // if (!this.popup["popupUseYn"]) {
-      //   alert("사용 유무를 선택해주세요.");
-      //   return false;
-      // }
+      if (!this.popup["popupUseYn"]) {
+        alert("사용 유무를 선택해주세요.");
+        return false;
+      }
     },
 
     //─────axios─────┐
client/views/pages/adm/popup/PopupManagementSelectList.vue
--- client/views/pages/adm/popup/PopupManagementSelectList.vue
+++ client/views/pages/adm/popup/PopupManagementSelectList.vue
@@ -74,7 +74,7 @@
       pageAuth: JSON.parse(localStorage.getItem("vuex")).pageAuth,
 
       colgroup: ["5%", "40%", "10%", "15%", "15%", "15%"],
-      thead: ["no", "제목", "사용여부", "시작일", "종료일", "작성자"],
+      thead: ["NO", "제목", "사용여부", "시작일", "종료일", "작성자"],
       tbody: [],
       search: { ...defaultSearchParams },
       list: [],
@@ -135,7 +135,12 @@
         this.search = response.data.data.pagination;
         this.makeTbody();
       } catch (error) {
-        alert("에러가 발생했습니다.\n시스템관리자에게 문의하세요.");
+        const errorData = error.response.data;
+        if (errorData.message != null && errorData.message != "") {
+          alert(error.response.data.message);
+        } else {
+          alert("에러가 발생했습니다.\n관리자에게 문의해주세요.");
+        }
       }
     },
     //─────axios─────┘
client/views/pages/adm/popup/PopupManagementSelectListOne.vue
--- client/views/pages/adm/popup/PopupManagementSelectListOne.vue
+++ client/views/pages/adm/popup/PopupManagementSelectListOne.vue
@@ -20,7 +20,7 @@
             </div>
             <div class="layout">
               <p class="form-title">게시일</p>
-              <p>{{ popup['bgngDt'] +"-"+  popup['endDt'] }}</p>
+              <p>{{ popup['bgngDt'] +" ~ "+  popup['endDt'] }}</p>
          
                   <!-- <input
                     type="datetime"
@@ -107,8 +107,8 @@
               </div> -->
             </div>
             <div class="layout">
-              <p class="form-title">업로드 형식 </p>
-              <p>{{ popup['popupType'] }}</p>
+              <p class="form-title">업로드 형식</p>
+              <p>{{ popupTypeName }}</p>
               <!-- <div class="flex align-center no-gutters">
                 <div class="gd-5">
                   <input
@@ -193,8 +193,8 @@
                 </div>
             </template>
               <div class="layout">
-                <p class="form-title point-font2 mb10"> 팝업 노출 페이지</p>
-                <p>{{ popup['pageType'] }}</p>
+                <p class="form-title point-font2 mb10">팝업 노출 페이지</p>
+                <p>{{ pageTypeName }}</p>
                 <!-- <select
                   class="full-input"
                   v-model="popup['pageType']"
@@ -227,6 +227,10 @@
                   <option value="4">4</option>
                   <option value="5">5</option>
                 </select> -->
+              </div>
+              <div class="layout">
+                <p class="form-title">사용 유무</p>
+                <p>{{ popup['popupUseYn'] }}</p>
               </div>
           </div>
         </div>
@@ -340,7 +344,12 @@
           }
         }
       } catch (error) {
-        alert("에러가 발생했습니다.\n시스템관리자에게 문의하세요.");
+        const errorData = error.response.data;
+        if (errorData.message != null && errorData.message != "") {
+          alert(error.response.data.message);
+        } else {
+          alert("에러가 발생했습니다.\n관리자에게 문의해주세요.");
+        }
       }
     },
     // 삭제
@@ -352,13 +361,33 @@
           this.fnList();
         }
       } catch (error) {
-        alert("에러가 발생했습니다.\n시스템관리자에게 문의하세요.");
+        const errorData = error.response.data;
+        if (errorData.message != null && errorData.message != "") {
+          alert(error.response.data.message);
+        } else {
+          alert("에러가 발생했습니다.\n관리자에게 문의해주세요.");
+        }
       }
     },
     //─────axios─────┘
   },
   watch: {},
-  computed: {},
+  computed: {
+    popupTypeName() {
+      // 팝업 타입
+      const popupTypeList = [
+        { cd: "image", cdNm: "이미지" },
+        { cd: "video", cdNm: "영상" },
+      ];
+      const match = popupTypeList.find(item => item.cd === this.popup['popupType']);
+      return match ? match.cdNm : this.popup['popupType'];
+    },
+
+    pageTypeName() {
+      const match = this.codeList.find(item => item.cd === this.popup['pageType']);
+      return match ? match.cdNm : this.popup['pageType'];
+    }
+  },
   components: {},
   mounted() {},
 };
client/views/pages/adm/preferences/commonCodeManagement/CommonCodeManagement.vue
--- client/views/pages/adm/preferences/commonCodeManagement/CommonCodeManagement.vue
+++ client/views/pages/adm/preferences/commonCodeManagement/CommonCodeManagement.vue
@@ -44,15 +44,15 @@
                 <div class="layout">
                   <label for="" class="form-title"><span>*</span>코드</label>
                   <input type="text" class="form-control sm" :disabled="isFormDisabled || !submitStts"
-                    v-model="viewCode.cd" placeholder="코드를 입력해주세요"/>
+                    v-model="viewCode.cd" placeholder="코드를 입력하세요."/>
                 </div>
                 <div class="layout">
                   <label for="" class="form-title"><span>*</span>코드명</label>
-                  <input type="text" class="form-control sm" :disabled="isFormDisabled" v-model="viewCode.cdNm" placeholder="코드명을 입력해주세요"/>
+                  <input type="text" class="form-control sm" :disabled="isFormDisabled" v-model="viewCode.cdNm" placeholder="코드명을 입력하세요."/>
                 </div>
                 <div class="layout">
                   <label for="" class="form-title">코드값</label>
-                  <input type="text" class="form-control sm" :disabled="isFormDisabled" v-model="viewCode.cdVl" placeholder="코드값을 입력해주세요"/>
+                  <input type="text" class="form-control sm" :disabled="isFormDisabled" v-model="viewCode.cdVl" placeholder="코드값을 입력해주세요."/>
                 </div>
                 <div class="border-bottom layout">
                   <label for="" class="form-title"><span>*</span>사용여부</label>
@@ -71,7 +71,7 @@
                 </div>
                 <div class="grid-column layout">
                   <label for="textarea" class="form-title" style="vertical-align: top;">코드설명</label>
-                  <textarea class="form-control sm" id="textarea" :disabled="isFormDisabled" v-model="viewCode.cdExpln" style="height: 100%;" placeholder="코드설명을 입력해주세요"></textarea>
+                  <textarea class="form-control sm" id="textarea" :disabled="isFormDisabled" v-model="viewCode.cdExpln" style="height: 100%;" placeholder="코드설명을 입력해주세요."></textarea>
                 </div>
               </div>
             </div>
@@ -144,7 +144,12 @@
           this.newCode.useYn = "Y";
         }
       } catch (error) {
-        alert(error.response.data.message);
+        const errorData = error.response.data;
+        if (errorData.message != null && errorData.message != "") {
+          alert(error.response.data.message);
+        } else {
+          alert("에러가 발생했습니다.\n관리자에게 문의해주세요.");
+        }
       }
     },
     fnViewDetail(cd) {
@@ -163,7 +168,12 @@
           this.submitStts = false;
         }
       } catch (error) {
-        alert(error.response.data.message);
+        const errorData = error.response.data;
+        if (errorData.message != null && errorData.message != "") {
+          alert(error.response.data.message);
+        } else {
+          alert("에러가 발생했습니다.\n관리자에게 문의해주세요.");
+        }
       }
     },
     // 저장
@@ -187,13 +197,18 @@
           // this.selectedCd = res.data.data.cd;
         }
       } catch (error) {
-        alert(error.response.data.message);
+        const errorData = error.response.data;
+        if (errorData.message != null && errorData.message != "") {
+          alert(error.response.data.message);
+        } else {
+          alert("에러가 발생했습니다.\n관리자에게 문의해주세요.");
+        }
       }
     },
     // 삭제
     async fnDel() {
       if (Object.keys(this.viewCode).length === 0) {
-        alert("삭제 대상을 지정해주세요.");
+        alert("삭제 대상을 지정하세요.");
         return false;
       }
       if (this.viewCode.sysPvsnYn == 0) {
@@ -214,7 +229,12 @@
           this.findAll();
         }
       } catch (error) {
-        alert(error.response.data.message);
+        const errorData = error.response.data;
+        if (errorData.message != null && errorData.message != "") {
+          alert(error.response.data.message);
+        } else {
+          alert("에러가 발생했습니다.\n관리자에게 문의해주세요.");
+        }
       }
     },
     // 최상위 신규 객체 생성
@@ -233,7 +253,7 @@
     subAdd() {
       // if (Object.keys(this.viewCode).length === 0) {
       if (this.selectedCd == null) {
-        alert("상위 코드를 지정해주세요.");
+        alert("상위 코드를 지정하세요.");
         return;
       } else {
         if (!confirm("작성 중인 공통코드정보는 저장되지 않습니다.\n계속 하시겠습니까?")) {
@@ -250,16 +270,16 @@
     },
     validation() {
       if (!this.viewCode.cd || this.viewCode.cd.trim() === "") {
-        alert("코드를 입력해주세요.");
+        alert("코드를 입력하세요.");
         return false;
       }
       const alpha = /^[a-zA-Z_]*$/;
       if (!alpha.test(this.viewCode.cd)) {
-        alert("코드는 영문과 언더바(_)만 사용하여 작성해주세요.");
+        alert("코드는 영문과 언더바(_)만 사용하여 작성하세요.");
         return false;
       }
       if (!this.viewCode.cdNm || this.viewCode.cdNm.trim() === "") {
-        alert("코드명을 입력해주세요.");
+        alert("코드명을 입력하세요.");
         return false;
       }
       return true;
@@ -279,7 +299,12 @@
           this.findByCd();
         }
       } catch (error) {
-        alert(error.res.data.message);
+        const errorData = error.response.data;
+        if (errorData.message != null && errorData.message != "") {
+          alert(error.response.data.message);
+        } else {
+          alert("에러가 발생했습니다.\n관리자에게 문의해주세요.");
+        }
       }
     },
   },
client/views/pages/adm/preferences/contentTypeManagement/ContentTypeManagementInsert.vue
--- client/views/pages/adm/preferences/contentTypeManagement/ContentTypeManagementInsert.vue
+++ client/views/pages/adm/preferences/contentTypeManagement/ContentTypeManagementInsert.vue
@@ -17,7 +17,7 @@
                   class="form-control sm"
                   v-model="contsTypeVO.contsKornNm"
                   ref="contsKornNm"
-                  placeholder="콘텐츠 한글명을 입력해주세요"
+                  placeholder="콘텐츠 한글명을 입력하세요."
                 />
               </div>
               <div class="layout">
@@ -29,7 +29,7 @@
                   class="form-control sm"
                   v-model="contsTypeVO.contsEngNm"
                   ref="contsEngNm"
-                  placeholder="콘텐츠 영문명을 입력해주세요"
+                  placeholder="콘텐츠 영문명을 입력하세요."
                 />
               </div>
               <div class="layout">
@@ -42,9 +42,9 @@
                     class="form-control sm"
                     v-model="contsTypeVO.mngrPageCrs"
                     ref="mngrPageCrs"
-                    placeholder="관리자 path를 입력해주세요"
+                    placeholder="관리자 path를 입력하세요."
                   />
-                  <span><strong>관리자 PATH</strong> 또는 <strong>사용자 PATH</strong> 중 하나는 필수입니다</span>
+                  <span><strong>관리자 PATH</strong> 또는 <strong>사용자 PATH</strong> 중 하나는 필수입니다.</span>
                 </div>
               </div>
               <div class="layout">
@@ -56,7 +56,7 @@
                   class="form-control sm"
                   v-model="contsTypeVO.pageCrs"
                   ref="pageCrs"
-                  placeholder="사용자 path를 입력해주세요"
+                  placeholder="사용자 path를 입력하세요."
                 />
               </div>
               <div class="layout">
@@ -68,7 +68,7 @@
                   class="form-control sm"
                   v-model="contsTypeVO.compnCrs"
                   ref="compnCrs"
-                  placeholder="component url을 입력해주세요"
+                  placeholder="COMPONENT URL을 입력하세요."
                 />
               </div>
               <div class="layout">
@@ -143,7 +143,12 @@
         const response = await findByContsType(data);
         this.contsTypeVO = response.data.data;
       } catch (error) {
-        alert("에러가 발생했습니다.\n관리자에게 문의해주세요.");
+        const errorData = error.response.data;
+        if (errorData.message != null && errorData.message != "") {
+          alert(error.response.data.message);
+        } else {
+          alert("에러가 발생했습니다.\n관리자에게 문의해주세요.");
+        }
       }
     },
 
@@ -180,21 +185,26 @@
           });
         }
       } catch (error) {
-        alert("에러가 발생했습니다.\n관리자에게 문의해주세요.");
+        const errorData = error.response.data;
+        if (errorData.message != null && errorData.message != "") {
+          alert(error.response.data.message);
+        } else {
+          alert("에러가 발생했습니다.\n관리자에게 문의해주세요.");
+        }
       }
     },
     // 유효성 검사
     validation() {
       // 콘텐츠 한글명
       if (this.isEmpty(this.contsTypeVO.contsKornNm)) {
-        alert("콘텐츠 한글명을 입력해주세요.");
+        alert("콘텐츠 한글명을 입력하세요.");
         this.$refs.contsKornNm.focus();
         return false;
       }
 
       // 콘텐츠 영문명
       if (this.isEmpty(this.contsTypeVO.contsEngNm)) {
-        alert("콘텐츠 영문명을 입력해주세요.");
+        alert("콘텐츠 영문명을 입력하세요.");
         this.$refs.contsEngNm.focus();
         return false;
       }
@@ -203,7 +213,7 @@
       let mngrPageCrs = this.isEmpty(this.contsTypeVO.mngrPageCrs);
       let pageCrs = this.isEmpty(this.contsTypeVO.pageCrs);
       if (mngrPageCrs && pageCrs) {
-        alert("관리자 PATH 혹은 사용자 PATH를 입력해주세요.");
+        alert("관리자 PATH 혹은 사용자 PATH를 입력하세요.");
         return false;
       }
 
@@ -225,14 +235,14 @@
 
       // COMPONENT_URL
       if (this.isEmpty(this.contsTypeVO.compnCrs)) {
-        alert("COMPONENT_URL을 입력해주세요.");
+        alert("COMPONENT_URL을 입력하세요.");
         this.$refs.compnCrs.focus();
         return false;
       }
 
       // 메뉴노출
       if (this.isEmpty(this.contsTypeVO.expsrYn)) {
-        alert("메뉴노출을 선택해주세요.");
+        alert("메뉴노출을 선택하세요.");
         return false;
       }
 
client/views/pages/adm/preferences/contentTypeManagement/ContentTypeManagementSelectList.vue
--- client/views/pages/adm/preferences/contentTypeManagement/ContentTypeManagementSelectList.vue
+++ client/views/pages/adm/preferences/contentTypeManagement/ContentTypeManagementSelectList.vue
@@ -69,7 +69,7 @@
   //    pageAuth: JSON.parse(localStorage.getItem("vuex")).pageAuth, // 페이지 권한
 
       colgroup: ["5%", "40%", "40%", "15%"],
-      thead: ["번호", "콘텐츠 한글명", "콘텐츠 영문명", "메뉴노출"],
+      thead: ["NO", "콘텐츠 한글명", "콘텐츠 영문명", "메뉴노출"],
       tbody: [],
       search: { ...defaultSearchParams },
       list: [],
@@ -90,7 +90,12 @@
         this.search = response.data["data"]["pagination"];
         this.makeTbody();
       } catch (error) {
-        alert("에러가 발생했습니다.\n관리자에게 문의해주세요.");
+        const errorData = error.response.data;
+        if (errorData.message != null && errorData.message != "") {
+          alert(error.response.data.message);
+        } else {
+          alert("에러가 발생했습니다.\n관리자에게 문의해주세요.");
+        }
       }
     },
     // tbody 생성
client/views/pages/adm/statistics/BbsStatistics.vue
--- client/views/pages/adm/statistics/BbsStatistics.vue
+++ client/views/pages/adm/statistics/BbsStatistics.vue
@@ -171,7 +171,12 @@
           this.bbsCnt = response.data.data.bbsCnt;
         }
       } catch (error) {
-        alert("에러가 발생했습니다.\n관리자에게 문의해주세요.");
+        const errorData = error.response.data;
+        if (errorData.message != null && errorData.message != "") {
+          alert(error.response.data.message);
+        } else {
+          alert("에러가 발생했습니다.\n관리자에게 문의해주세요.");
+        }
       }
     },
 
@@ -235,7 +240,12 @@
             window.URL.revokeObjectURL(url);
           })
           .catch((error) => {
-            alert("에러가 발생했습니다.\n관리자에게 문의해주세요.");
+            const errorData = error.response.data;
+            if (errorData.message != null && errorData.message != "") {
+              alert(error.response.data.message);
+            } else {
+              alert("에러가 발생했습니다.\n관리자에게 문의해주세요.");
+            }
           });
       });
     },
client/views/pages/adm/statistics/MenuStatistics.vue
--- client/views/pages/adm/statistics/MenuStatistics.vue
+++ client/views/pages/adm/statistics/MenuStatistics.vue
@@ -171,7 +171,12 @@
         };
         this.menuCnt = response.data.data.menuCnt;
       } catch (error) {
-        alert("에러가 발생했습니다.\n관리자에게 문의해주세요.");
+        const errorData = error.response.data;
+        if (errorData.message != null && errorData.message != "") {
+          alert(error.response.data.message);
+        } else {
+          alert("에러가 발생했습니다.\n관리자에게 문의해주세요.");
+        }
       }
     },
 
@@ -235,7 +240,12 @@
             window.URL.revokeObjectURL(url);
           })
           .catch((error) => {
-            alert("에러가 발생했습니다.\n관리자에게 문의해주세요.");
+            const errorData = error.response.data;
+            if (errorData.message != null && errorData.message != "") {
+              alert(error.response.data.message);
+            } else {
+              alert("에러가 발생했습니다.\n관리자에게 문의해주세요.");
+            }
           });
       });
     },
client/views/pages/adm/statistics/UserStatistics.vue
--- client/views/pages/adm/statistics/UserStatistics.vue
+++ client/views/pages/adm/statistics/UserStatistics.vue
@@ -161,7 +161,12 @@
         this.chartData = datas;
         this.totalCnt = response.data.data.totalCnt;
       } catch (error) {
-        alert("에러가 발생했습니다.\n관리자에게 문의해주세요.");
+        const errorData = error.response.data;
+        if (errorData.message != null && errorData.message != "") {
+          alert(error.response.data.message);
+        } else {
+          alert("에러가 발생했습니다.\n관리자에게 문의해주세요.");
+        }
       }
     },
 
@@ -225,7 +230,12 @@
             window.URL.revokeObjectURL(url);
           })
           .catch((error) => {
-            alert("에러가 발생했습니다.\n관리자에게 문의해주세요.");
+            const errorData = error.response.data;
+            if (errorData.message != null && errorData.message != "") {
+              alert(error.response.data.message);
+            } else {
+              alert("에러가 발생했습니다.\n관리자에게 문의해주세요.");
+            }
           });
       });
     },
client/views/pages/adm/system/LoginPolicy/LoginPolicy.vue
--- client/views/pages/adm/system/LoginPolicy/LoginPolicy.vue
+++ client/views/pages/adm/system/LoginPolicy/LoginPolicy.vue
@@ -56,7 +56,7 @@
                   <button class="btn sm main" @click="fnSave">저장</button>
                 </div>
                 <span class="ml10 gray">
-                  <strong>/경로</strong> 형식으로 입력해주세요.
+                  <strong>/</strong> 또는 <strong>/경로</strong> 형식으로 입력하세요.
                 </span>
               </div>
             </div>
@@ -160,7 +160,12 @@
           this.defaultCntxtPth = res.data.data;
         }
       } catch (error) {
-        alert(error.response.data.message);
+        const errorData = error.response.data;
+        if (errorData.message != null && errorData.message != "") {
+            alert(error.response.data.message);
+        } else {
+            alert("에러가 발생했습니다.\n관리자에게 문의해주세요.");
+        }
       }
     },
 
@@ -195,7 +200,12 @@
             alert(res.data.message);
           }
         } catch (error) {
-          alert('에러가 발생했습니다.\n시스템관리자에게 문의하세요.');
+          const errorData = error.response.data;
+          if (errorData.message != null && errorData.message != "") {
+              alert(error.response.data.message);
+          } else {
+              alert("에러가 발생했습니다.\n관리자에게 문의해주세요.");
+          }
         }
       }
     },
client/views/pages/adm/system/networkAccessControl/NetworkAccessControlInsert.vue
--- client/views/pages/adm/system/networkAccessControl/NetworkAccessControlInsert.vue
+++ client/views/pages/adm/system/networkAccessControl/NetworkAccessControlInsert.vue
@@ -20,7 +20,7 @@
                             <div class="layout border-bottom">
                                 <label for="" class="form-title"><span>*</span>제어 IP</label>
                                 <div class="form-group">
-                                    <input type="text" class="form-control sm" v-model="accesCtrl.cntrlIp"  placeholder="1~255 범위의 숫자로 구성하여 형식에 맞게 작성해주세요." />
+                                    <input type="text" class="form-control sm" v-model="accesCtrl.cntrlIp"  placeholder="1~255 범위의 숫자로 구성하여 형식에 맞게 작성하세요." />
                                     <span>ex) 192.168.0.1 / 192.168.0.*</span>
                                 </div>
                             </div>
@@ -59,7 +59,7 @@
     methods: {
         // 목록으로 이동
         fnCancel() {
-            if (!confirm('등록을 취소하시겠습니까?')) {
+            if (!confirm('작성을 취소하시겠습니까?')) {
                 return;
             }
             if (this.accesCtrl.acsCntrlId == null || this.accesCtrl.acsCntrlId == 0) {
@@ -88,7 +88,12 @@
                 }
                 this.codeList = res.data.data.codeList; // 유형
             } catch (error) {
-                alert('에러가 발생했습니다.\n시스템관리자에게 문의하세요.');
+                const errorData = error.response.data;
+                if (errorData.message != null && errorData.message != "") {
+                    alert(error.response.data.message);
+                } else {
+                    alert("에러가 발생했습니다.\n관리자에게 문의해주세요.");
+                }
             }
         },
 
@@ -117,7 +122,12 @@
                     });
                 }
             } catch (error) {
-                alert('에러가 발생했습니다.\n시스템관리자에게 문의하세요.');
+                const errorData = error.response.data;
+                if (errorData.message != null && errorData.message != "") {
+                    alert(error.response.data.message);
+                } else {
+                    alert("에러가 발생했습니다.\n관리자에게 문의해주세요.");
+                }
             }
         },
         // 수정
@@ -137,7 +147,12 @@
                     });
                 }
             } catch (error) {
-                alert('에러가 발생했습니다.\n시스템관리자에게 문의하세요.');
+                const errorData = error.response.data;
+                if (errorData.message != null && errorData.message != "") {
+                    alert(error.response.data.message);
+                } else {
+                    alert("에러가 발생했습니다.\n관리자에게 문의해주세요.");
+                }
             }
         },
         // 유효성 검사
@@ -145,18 +160,18 @@
             // const ipFilter = /^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/;
             const ipFilter = /^(\*|[1-9]?[0-9]|1\d\d|2[0-4]\d|25[0-5])(\.(\*|[1-9]?[0-9]|1\d\d|2[0-4]\d|25[0-5])){3}$/;
             if (this.accesCtrl.cntrlType == null || this.accesCtrl.cntrlType == '') {
-                alert('제어 유형을 지정해주세요.');
+                alert('제어 유형을 지정하세요.');
                 return false;
             }
             if (this.accesCtrl.cntrlIp == null || this.accesCtrl.cntrlIp == '') {
-                alert('제어 IP를 입력해주세요.');
+                alert('제어 IP를 입력하세요.');
                 return false;
             } else if (!ipFilter.test(this.accesCtrl.cntrlIp)) {
-                alert('ip 형식이 다릅니다.');
+                alert('IP 형식이 다릅니다.');
                 return false;
             }
             if (this.accesCtrl.cntrlCrs == null || this.accesCtrl.cntrlCrs == '') {
-                alert('제어 경로를 입력해주세요.');
+                alert('제어 경로를 입력하세요.');
                 return false;
             }
             return true;
client/views/pages/adm/system/networkAccessControl/NetworkAccessControlSelectList.vue
--- client/views/pages/adm/system/networkAccessControl/NetworkAccessControlSelectList.vue
+++ client/views/pages/adm/system/networkAccessControl/NetworkAccessControlSelectList.vue
@@ -108,7 +108,12 @@
         this.codeList = res.data.data.codeList; // 검색 조건 항목
         this.makeTbody();
       } catch (error) {
-        alert(error.response.data.message);
+        const errorData = error.response.data;
+        if (errorData.message != null && errorData.message != "") {
+          alert(error.response.data.message);
+        } else {
+          alert("에러가 발생했습니다.\n관리자에게 문의해주세요.");
+        }
       }
     },
     // 상세 조회
client/views/pages/adm/system/networkAccessControl/NetworkAccessControlSelectListOne.vue
--- client/views/pages/adm/system/networkAccessControl/NetworkAccessControlSelectListOne.vue
+++ client/views/pages/adm/system/networkAccessControl/NetworkAccessControlSelectListOne.vue
@@ -78,7 +78,12 @@
           this.accesCtrl = res.data.data.accesCtrl;
         }
       } catch (error) {
-        // console.log("fnSelectOne : ", error);
+        const errorData = error.response.data;
+        if (errorData.message != null && errorData.message != "") {
+          alert(error.response.data.message);
+        } else {
+          alert("에러가 발생했습니다.\n관리자에게 문의해주세요.");
+        }
       }
     },
     // 목록으로 이동
@@ -111,7 +116,12 @@
           });
         }
       } catch (error) {
-        alert("에러가 발생했습니다.\n시스템관리자에게 문의하세요.");
+        const errorData = error.response.data;
+        if (errorData.message != null && errorData.message != "") {
+          alert(error.response.data.message);
+        } else {
+          alert("에러가 발생했습니다.\n관리자에게 문의해주세요.");
+        }
       }
     },
   },
client/views/pages/popup/PopUp.vue
--- client/views/pages/popup/PopUp.vue
+++ client/views/pages/popup/PopUp.vue
@@ -91,7 +91,12 @@
           this.downloadFile();
         }
       } catch (error) {
-        alert("에러가 발생했습니다.\n시스템관리자에게 문의하세요.");
+        const errorData = error.response.data;
+        if (errorData.message != null && errorData.message != "") {
+            alert(error.response.data.message);
+        } else {
+            alert("에러가 발생했습니다.\n관리자에게 문의해주세요.");
+        }
       }
     },
     // 팝업 닫기
@@ -139,10 +144,18 @@
           new Blob([response.data], { type: "image/" + file.extnNm })
         );
       } catch (error) {
-        alert("에러가 발생했습니다.\n시스템관리자에게 문의하세요.");
+        const errorData = error.response.data;
+        if (errorData.message != null && errorData.message != "") {
+            alert(error.response.data.message);
+        } else {
+            alert("에러가 발생했습니다.\n관리자에게 문의해주세요.");
+        }
       }
     },
     fnMove() {
+      if(this.popup.linkUrl.trim() == "") {
+        return;
+      }
       window.opener.location = this.popup.linkUrl;
       this.fnClose();
     },
Add a comment
List