jichoi / calendar star
류윤주 류윤주 07-30
250730 류윤주 수정
@d457ebf46ac638303962cbc2b54972a1502ddae6
 
client/resources/scss/common/component/_pagination.scss (added)
+++ client/resources/scss/common/component/_pagination.scss
@@ -0,0 +1,15 @@
+.pagination{
+    ul{
+        @include flex-layout(flex, center, center);
+        gap: 1rem;
+        li{
+            width: 4rem;
+            height: 4rem;
+            @include flex-layout(flex, center, center);
+            cursor: pointer;
+            // padding: 1rem;
+            border: 1px solid #ddd;
+            border-radius: 1rem;
+        }
+    }
+}(파일 끝에 줄바꿈 문자 없음)
client/views/component/Pagination.vue
--- client/views/component/Pagination.vue
+++ client/views/component/Pagination.vue
@@ -2,9 +2,9 @@
   <div class="pagination">
     <ul>
       <li class="arrow" :class="{ disabled: currentPage <= 1 }" @click="changePage(currentPage - 1)">&lt;</li>
-      <template v-for="pageNum in displayedPageNumbers" :key="pageNum">
-        <li :class="{ active: currentPage === pageNum, disabled: currentPage === pageNum }" @click="changePage(pageNum)">{{ pageNum }}</li>
-      </template>
+      <li v-for="pageNum in displayedPageNumbers" :key="pageNum">
+        <span :class="{ active: currentPage === pageNum, disabled: currentPage === pageNum }" @click="changePage(pageNum)">{{ pageNum }}</span>
+      </li>
       <li class="arrow" :class="{ disabled: currentPage >= totalPages }" @click="changePage(currentPage + 1)">&gt;</li>
     </ul>
   </div>
client/views/layout/LeftNavBar.vue
--- client/views/layout/LeftNavBar.vue
+++ client/views/layout/LeftNavBar.vue
@@ -21,15 +21,15 @@
           <summary @click.prevent="toggleMenu(menu.name)">
             <p>{{ menu.title }}</p>
             <div class="icon">
-              <img src="/client/resources/img/topmenuicon.png" alt="">
+              <img src="/client/resources/img/topmenuicon.png" alt="" style="vertical-align: middle;">
             </div>
           </summary>
           <ul>
             <li v-for="item in menu.items" :key="item.name">
-              <router-link :to="{ name: item.name }" exact-active-class="active-link" v-slot="{ isExactActive }">
+              <router-link :to="{ name: item.name }" exact-active-cl.ass="active-link" v-slot="{ isExactActive }">
                 <p>{{ item.title }}</p>
                 <div class="icon" v-if="isExactActive">
-                  <img src="/client/resources/img/menuicon.png" alt="">
+                  <img src="/client/resources/img/menuicon.png" alt="" style="vertical-align: middle;">
                 </div>
               </router-link>
             </li>
@@ -37,14 +37,14 @@
         </details>
         <!-- 시스템 관리 -->
         <ul v-if="section.key === 'system'" class="menu-box danil">
-          <router-link v-for="item in section.items" :key="item.name" :to="{ name: item.name }" exact-active-class="active-link">
-            <li>
+          <li v-for="item in section.items" :key="item.name">
+              <router-link  :to="{ name: item.name }" exact-active-class="active-link">
               <p>{{ item.title }}</p>
               <div class="icon">
-                <img src="/client/resources/img/menuicon.png" alt="">
+                <img src="/client/resources/img/menuicon.png" alt="" style="vertical-align: middle;">
               </div>
-            </li>
-          </router-link>
+            </router-link>
+          </li>
         </ul>
       </template>
     </div>
client/views/pages/App.vue
--- client/views/pages/App.vue
+++ client/views/pages/App.vue
@@ -1,5 +1,5 @@
 <template>
-  <div v-if="isLoginPage" class="login">
+  <div v-if="isLoginPage" class="login-wrap">
     <router-view />
   </div>
   <div v-else class="container">
client/views/pages/Manager/system/AuthorManagement.vue
--- client/views/pages/Manager/system/AuthorManagement.vue
+++ client/views/pages/Manager/system/AuthorManagement.vue
@@ -1,35 +1,86 @@
 <template>
-  <div class="card ">
+  <div class="card " style="height: 100%;">
     <div class="card-body ">
       <h2 class="card-title">사용자 권한 관리</h2>
-      <div class="flex align-top">
-        <div class="sch-form-wrap search">
-          <div class="tbl-wrap table-scroll">
+      <div class="d-flex align-stretch gap30">
+        <div class="left-zone">
+          <div class="tbl-wrap">
             <table id="myTable" class="tbl data">
               <thead>
                 <tr>
-                  <th>권한 목록</th>
+                  <th style="border-radius: 1rem 1rem 0 0;">권한 목록</th>
                 </tr>
               </thead>
               <tbody>
                 <tr v-for="(item, idx) of lists" :key="idx" @click="findData(item.authorCode)">
-                  <td :class="{ 'selected': selectedAuthor == item.authorCode, 'muted': item.useAt === 'N' }">{{ item.authorNm }}</td>
+                  <td :class="{ 'selected': selectedAuthor == item.authorCode, 'muted': item.useAt === 'N' }" style="border-radius: 0 0 1rem 1rem;">{{ item.authorNm }}</td>
                 </tr>
               </tbody>
             </table>
           </div>
         </div>
-        <div>
-          <div class="sch-form-wrap title-wrap">
-            <h3><img :src="h3icon" alt="">권한 정보</h3>
-            <div class="buttons">
-              <button type="button" class="btn sm tertiary" @click="fnResetForm">신규</button>
-              <button type="button" class="btn sm secondary" v-if="!isEditMode" @click="fnSave">등록</button>
-              <button type="button" class="btn sm secondary" v-else @click="fnUpdate">수정</button>
-              <button type="button" class="btn sm btn-red" v-if="isEditMode" @click="fnDelete">삭제</button>
+        <div class="right-zone">
+          <div class="d-flex justify-between align-center mb20">
+            <h3 class="sub-title">권한 정보</h3>
+            <div class="d-flex gap10">
+              <button class="btn sm tertiary" @click="fnResetForm">신규</button>
+              <button class="btn sm secondary" v-if="!isEditMode" @click="fnSave">등록</button>
+              <button class="btn sm secondary" v-else @click="fnUpdate">수정</button>
+              <button class="btn sm btn-red" v-if="isEditMode" @click="fnDelete">삭제</button>
             </div>
           </div>
-          <div class="tbl-wrap row g-3 pt-3 needs-validation detail">
+          <div class="tbl-wrap" style="height: calc(100% - 60px);">
+            <table class="tbl data grid-table" style="border: none; width: 100%;height: 100%;">
+              <!-- <colgroup>
+                <col style="width: 20%;">
+                <col style="width: 80%;">   
+              </colgroup> -->
+              <tbody>
+                <tr>
+                  <th scope="row" style="border-radius: 1rem 0 0 0;">
+                    권한코드 <sup>*</sup>
+                  </th>
+                  <td style="border-radius: 0 1rem 0 0;"> 
+                    <input type="text" class="form-control sm" id="authorCode" v-model="data.authorCode" />
+                  </td>
+                </tr>
+                <tr>
+                  <th scope="row" >
+                      권한명 <sup>*</sup>
+                  </th>
+                  <td>
+                    <input type="text" class="form-control sm" id="authorNm" v-model="data.authorNm" />
+                  </td>
+                </tr>
+                <tr>
+                  <th scope="row">
+                      사용여부 <sup>*</sup>
+                  </th>
+                  <td>
+                    <div class="chk-area">
+                      <div class="form-check" style="display: inline-block; margin-right: 1rem;">
+                        <input type="radio" name="useAt" id="useAtTrue" value="Y" v-model="data.useAt" :disabled="!hasAuthorCode">
+                        <label for="useAtTrue">사용</label>
+                      </div>
+                      <div class="form-check" style="display: inline-block;">
+                        <input type="radio" name="useAt" id="useAtFalse" value="N" v-model="data.useAt" :disabled="!hasAuthorCode">
+                        <label for="useAtFalse">미사용</label>
+                      </div>
+                    </div>
+                  </td>
+                </tr>
+                <tr>
+                  <th scope="row" style="border-radius: 0 0 0 1rem;">
+                       권한설명
+                  </th>
+                  <td  style="border-radius: 0 0 1rem 0;">
+                    <textarea name="dc" id="dc" class="form-control" v-model="data.dc" style="height: 100%;"></textarea>
+                  </td>
+                </tr>
+              </tbody>
+            </table>
+          </div>
+          <!-- <div class="tbl-wrap" style="border: none;">
             <div class="col-12">
               <label for="authorCode" class="form-label">
                 <p>권한코드 <span class="require"><img :src="require" alt=""></span></p>
@@ -61,7 +112,7 @@
                 </div>
               </div>
             </div>
-          </div>
+          </div> -->
         </div>
       </div>
     </div>
client/views/pages/Manager/system/CodeManagementInsert.vue
--- client/views/pages/Manager/system/CodeManagementInsert.vue
+++ client/views/pages/Manager/system/CodeManagementInsert.vue
@@ -2,53 +2,45 @@
   <div class="card">
     <div class="card-body">
       <h2 class="card-title">공통코드 {{ isEditMode ? '수정' : '등록' }}</h2>
-      <p class="require">* 필수입력</p>
-      <div class="tbl-wrap needs-validation detail">
-        <table class="tbl data radius-table">
-          <colgroup>
-            <col style="width: 25%;">
-            <col style="width: 75%;">
-          </colgroup>
-          <tbody>
+      <p style="text-align: right;"><sup>*</sup>필수입력</p>
+      <div class="tbl-wrap" style="height: calc(100% - 94px);">
+        <table class="tbl data radius-table grid-table">
+          <tbody style="grid-template-rows: auto auto auto auto auto auto 1fr;">
             <tr>
               <th>상위코드</th>
               <td>
-                <input type="text" id="parentCode" v-model="formData.upperCode" readonly />
-                <button type="button" class="btn sm primary" @click="handleModalOpen"> 검색 </button>
+                <div class="input-group">
+                    <input type="text" id="parentCode" class="form-control sm" v-model="formData.upperCode" readonly style="width: calc(100% - 4rem);"/>
+                    <button class="btn sm primary" @click="handleModalOpen"> 검색 </button>
+                </div>
               </td>
             </tr>
             <tr>
               <th>상위코드 명</th>
               <td>
-                <input type="text" id="parentCodeName" v-model="formData.upperCodeNm" readonly />
+                <input type="text" id="parentCodeName" class="form-control sm" v-model="formData.upperCodeNm" readonly />
               </td>
             </tr>
             <tr>
-              <th>코드 *</th>
+              <th>코드<sup>*</sup></th>
               <td>
-                <input type="text" id="code" v-model="formData.code" :disabled="isEditMode" />
+                <input type="text" id="code" class="form-control sm" v-model="formData.code" :disabled="isEditMode" />
               </td>
             </tr>
             <tr>
-              <th>코드명 *</th>
+              <th>코드명<sup>*</sup></th>
               <td>
-                <input type="text" id="codeName" v-model="formData.codeNm" />
+                <input type="text" id="codeName" class="form-control sm" v-model="formData.codeNm" />
               </td>
             </tr>
             <tr>
               <th>코드 설정값</th>
               <td>
-                <input type="text" id="codeValue" v-model="formData.codeValue" />
+                <input type="text" id="codeValue" class="form-control sm" v-model="formData.codeValue" />
               </td>
             </tr>
             <tr>
-              <th>설명</th>
-              <td>
-                <textarea name="description" id="description" v-model="formData.dc"></textarea>
-              </td>
-            </tr>
-            <tr>
-              <th>사용여부 *</th>
+              <th>사용여부<sup>*</sup></th>
               <td>
                 <div class="chk-area">
                   <div class="form-check">
@@ -62,21 +54,27 @@
                 </div>
               </td>
             </tr>
+            <tr>
+              <th>설명</th>
+              <td>
+                <textarea name="description" id="description" v-model="formData.dc" style="width: 100%;height: 100%;"></textarea>
+              </td>
+            </tr>
           </tbody>
         </table>
       </div>
-      <div class="buttons">
-        <template v-if="!isEditMode">
-          <button type="button" class="btn sm primary" @click="handleCreate">등록</button>
-          <button type="button" class="btn sm tertiary" @click="handleNavigation('list')">취소</button>
-        </template>
-        <template v-else>
-          <button type="button" class="btn sm primary" @click="handleUpdate">수정</button>
-          <button type="button" class="btn sm tertiary" @click="handleNavigation('view', codeId)">취소</button>
-        </template>
-      </div>
     </div>
   </div>
+  <div class="d-flex justify-end align-center gap10">
+    <template v-if="!isEditMode">
+      <button type="button" class="btn sm primary" @click="handleCreate">등록</button>
+      <button type="button" class="btn sm tertiary" @click="handleNavigation('list')">취소</button>
+    </template>
+    <template v-else>
+      <button type="button" class="btn sm primary" @click="handleUpdate">수정</button>
+      <button type="button" class="btn sm tertiary" @click="handleNavigation('view', codeId)">취소</button>
+    </template>
+  </div>
   <CodeSelectorModal v-if="isModalVisible" :current-code-id="codeId" @select="handleCodeSelect" @close="handleModalClose" />
 </template>
 <script>
client/views/pages/Manager/system/CodeManagementList.vue
--- client/views/pages/Manager/system/CodeManagementList.vue
+++ client/views/pages/Manager/system/CodeManagementList.vue
@@ -1,69 +1,63 @@
 <template>
-  <div class="col-lg-12">
     <div class="card">
       <div class="card-body">
         <h2 class="card-title">공통코드 관리</h2>
-        <div class="sch-form-wrap">
-          <div class="input-group">
-            <select name="searchType" id="searchType" class="form-select" v-model="searchParams.searchType">
-              <option value="">전체</option>
-              <option v-for="(item, index) of searchOptions" :key="index" :value="item.key"> {{ item.label }} </option>
-            </select>
-            <div class="sch-input">
-              <input type="text" class="form-control" v-model="searchParams.searchText" @keyup.enter="handleSearch" placeholder="검색어를 입력하세요">
-              <button class="ico-sch" @click="handleSearch" type="button">
-                <SearchOutlined />
-              </button>
+        <div>
+          <div class="search-wrap mb20">
+              <select name="searchType" id="searchType" class="form-select sm" v-model="searchParams.searchType">
+                <option value="">전체</option>
+                <option v-for="(item, index) of searchOptions" :key="index" :value="item.key"> {{ item.label }} </option>
+              </select>
+                <input type="text" class="form-control sm" v-model="searchParams.searchText" @keyup.enter="handleSearch" placeholder="검색어를 입력하세요">
+                <button class="btn-ico md ico-sch" @click="handleSearch"></button>
             </div>
-          </div>
-        </div>
-        <div class="tbl-wrap">
-          <table id="codeTable" class="tbl data">
-            <colgroup>
-              <col style="width: 18%;">
-              <col style="width: 18%;">
-              <col style="width: 18%;">
-              <col style="width: 18%;">
-              <col style="width: 18%;">
-              <col style="width: 10%;">
-            </colgroup>
-            <thead>
-              <tr>
-                <th>상위코드</th>
-                <th>상위코드명</th>
-                <th>코드</th>
-                <th>코드명</th>
-                <th>등록일</th>
-                <th>사용여부</th>
-              </tr>
-            </thead>
-            <tbody>
-              <template v-if="codeList.length > 0">
-                <tr v-for="(code, index) in codeList" :key="index" :class="{ expired: code.useAt === 'N' }" @click="handleNavigation('view', code.code)">
-                  <td>{{ code.upperCode }}</td>
-                  <td>{{ code.upperCodeNm }}</td>
-                  <td>{{ code.code }}</td>
-                  <td>{{ code.codeNm }}</td>
-                  <td>{{ formatDate(code.rgsde) }}</td>
-                  <td>{{ getActiveStatusText(code.useAt) }}</td>
+          <div class="tbl-wrap">
+            <table id="codeTable" class="tbl data">
+              <colgroup>
+                <col style="width: 18%;">
+                <col style="width: 18%;">
+                <col style="width: 18%;">
+                <col style="width: 18%;">
+                <col style="width: 18%;">
+                <col style="width: 10%;">
+              </colgroup>
+              <thead>
+                <tr>
+                  <th style="border-radius: 1rem 0 0 0;">상위코드</th>
+                  <th>상위코드명</th>
+                  <th>코드</th>
+                  <th>코드명</th>
+                  <th>등록일</th>
+                  <th style="border-radius: 0 1rem 0 0;">사용여부</th>
                 </tr>
-              </template>
-              <tr v-else>
-                <td colspan="6" class="text-center">등록된 코드가 없습니다.</td>
-              </tr>
-            </tbody>
-          </table>
-        </div>
-        <Pagination :search="searchParams" @onChange="handlePageChange" />
-        <div class="buttons">
-          <button type="button" class="btn sm primary" @click="handleNavigation('edit')">등록</button>
+              </thead>
+              <tbody>
+                <template v-if="codeList.length > 0">
+                  <tr v-for="(code, index) in codeList" :key="index" :class="{ expired: code.useAt === 'N' }" @click="handleNavigation('view', code.code)">
+                    <td>{{ code.upperCode }}</td>
+                    <td>{{ code.upperCodeNm }}</td>
+                    <td>{{ code.code }}</td>
+                    <td>{{ code.codeNm }}</td>
+                    <td>{{ formatDate(code.rgsde) }}</td>
+                    <td>{{ getActiveStatusText(code.useAt) }}</td>
+                  </tr>
+                </template>
+                <tr v-else>
+                  <td colspan="6" class="text-center" style="border-radius: 0  0 1rem 1rem;">등록된 코드가 없습니다.</td>
+                </tr>
+              </tbody>
+            </table>
+          </div>
         </div>
       </div>
     </div>
-  </div>
+    <div class="d-flex justify-between align-center">
+          <div></div>
+          <Pagination :search="searchParams" @onChange="handlePageChange" />
+          <button class="btn sm primary" @click="handleNavigation('edit')">등록</button>
+    </div>
 </template>
 <script>
-import { SearchOutlined } from '@ant-design/icons-vue';
 import Pagination from "../../../component/Pagination.vue";
 // API
 import { findCodesProc } from "../../../../resources/api/code";
@@ -72,7 +66,6 @@
   name: 'CodeListPage',
 
   components: {
-    SearchOutlined,
     Pagination,
   },
 
client/views/pages/Manager/system/MenuAuthorManagement.vue
--- client/views/pages/Manager/system/MenuAuthorManagement.vue
+++ client/views/pages/Manager/system/MenuAuthorManagement.vue
@@ -2,40 +2,40 @@
   <div class="card">
     <div class="card-body">
       <h2 class="card-title">접근제어관리</h2>
-      <div class="flex align-top">
-        <div class="sch-form-wrap search">
-          <div class="tbl-wrap table-scroll">
+      <div class="d-flex align-stretch gap30">
+        <div class="left-zone">
+          <div class="tbl-wrap">
             <table id="myTable" class="tbl data">
               <thead>
                 <tr>
-                  <th>권한목록</th>
+                  <th style="border-radius: 1rem 1rem 0 0;">권한목록</th>
                 </tr>
               </thead>
               <tbody>
-                <tr v-for="(item, idx) of authorLists" :key="idx" @click="findMenuAuthorList(item.authorCode)">
-                  <td v-if="item.useAt === 'Y'" :class="{ 'selected': selectedAuthor == item.authorCode }">{{ item.authorNm }}</td>
+                <tr v-for="(item, idx) of authorLists" :key="idx" @click="findMenuAuthorList(item.authorCode)" >
+                  <td v-if="item.useAt === 'Y'" :class="{ 'selected': selectedAuthor == item.authorCode }" style="border-radius: 0 0 1rem 1rem;">{{ item.authorNm }}</td>
                 </tr>
               </tbody>
             </table>
           </div>
         </div>
-        <div style="width: 100%;">
-          <div class="tbl-wrap chk-area">
+        <div class="right-zone">
+          <div class="tbl-wrap">
             <table id="myTable" class="tbl data">
               <thead>
                 <tr>
-                  <th>메뉴명</th>
+                  <th style="border-radius: 1rem 0 0 0;">메뉴명</th>
                   <th>전체</th>
                   <th>읽기</th>
                   <th>쓰기</th>
                   <th>수정</th>
-                  <th>삭제</th>
+                  <th style="border-radius: 0 1rem 0 0;">삭제</th>
                 </tr>
               </thead>
               <tbody>
                 <template v-if="menuAuthorLists.length > 0">
                   <tr v-for="(item, idx) in menuAuthorLists" :key="idx">
-                    <td :style="getMenuStyle(item)"> {{ item.menuNm }} </td>
+                    <td :style="getMenuStyle(item)" style="border-radius: 0 0 0 1rem;"> {{ item.menuNm }} </td>
                     <td>
                       <div class="form-check">
                         <input type="checkbox" :id="`all_${idx}`" :checked="isAllChecked(item)" @change="toggleAll(idx)" />
@@ -60,7 +60,7 @@
                         <label :for="`updt_${idx}`"></label>
                       </div>
                     </td>
-                    <td>
+                    <td  style="border-radius: 0 0 1rem 0;">
                       <div class="form-check">
                         <input type="checkbox" :id="`delete_${idx}`" :checked="item.delete === 'Y'" @change="updatePermission(idx, 'delete', $event)" />
                         <label :for="`delete_${idx}`"></label>
@@ -70,19 +70,20 @@
                 </template>
                 <template v-else>
                   <tr>
-                    <td colspan="6">조회된 정보가 없습니다.</td>
+                    <td colspan="6" style="border-radius: 0 0 1rem 1rem;text-align: center;">조회된 정보가 없습니다.</td>
                   </tr>
                 </template>
               </tbody>
             </table>
           </div>
-          <div>
-            <button type="button" class="btn sm secondary" @click="fnUpdate">저장</button>
-          </div>
         </div>
       </div>
     </div>
   </div>
+  <div class="d-flex justify-between align-center">
+      <div></div>
+      <button type="button" class="btn sm secondary" @click="fnUpdate">저장</button>
+  </div>
 </template>
 <script>
 // API
client/views/pages/User/Login.vue
--- client/views/pages/User/Login.vue
+++ client/views/pages/User/Login.vue
@@ -1,31 +1,26 @@
 <template>
-  <div class="">
-    <div class="card mb-3">
-              <div class="card-body">
-                <div class="pb-2">
-                  <h2 class="card-title text-center pb-0 fs-4"><img :src="logo" alt="로고"></h2>
-                </div>
+  <div class="login">
+      <div class="logo">
+        <h2 class="card-title"><img :src="logo" alt="로고"></h2>
+      </div>
+      <div class="row g-3 needs-validation" :class="{ 'was-validated': formSubmitted }">
+        <div class="box">
+          <label for="yourUsername" class="form-label id">아이디</label>
+          <div class="input-group has-validation">
+            <input v-model="userInfo.loginId" ref="loginId" type="text" name="username" class="form-control sm" id="yourUsername" placeholder="아이디를 입력하세요." required>
+          </div>
+        </div>
 
-                <div class="row g-3 needs-validation" :class="{ 'was-validated': formSubmitted }">
-                  <div class="box">
-                    <label for="yourUsername" class="form-label"><img :src="idIcon" alt="아이디 아이콘">아이디</label>
-                    <div class="input-group has-validation">
-                      <input v-model="userInfo.loginId" ref="loginId" type="text" name="username" class="form-control sm" id="yourUsername" placeholder="아이디를 입력하세요." required>
-                    </div>
-                  </div>
+        <div class="box">
+          <label for="yourPassword" class="form-label pw">비밀번호</label>
+          <input v-model="userInfo.password" ref="password" type="password" name="password" class="form-control sm" id="yourPassword"  placeholder="비밀번호를 입력하세요." required @keydown.enter="handleLogin"/>
+        </div>
 
-                  <div class="box">
-                    <label for="yourPassword" class="form-label"><img :src="passwordIcon" alt="비밀번호 아이콘">비밀번호</label>
-                    <input v-model="userInfo.password" ref="password" type="password" name="password" class="form-control sm" id="yourPassword"  placeholder="비밀번호를 입력하세요." required @keydown.enter="handleLogin"/>
-                  </div>
-
-                  <div class="box">
-                    <button class="btn md" type="submit" @click="handleLogin"><img :src="loginIcon" alt="로그인 아이콘">로그인</button>
-                  </div>
-                </div>
-              </div>
-            </div>
-  </div>
+        <div class="box">
+          <button class="btn md" type="submit" @click="handleLogin"><img :src="loginIcon" alt="로그인 아이콘">로그인</button>
+        </div>
+      </div>
+    </div>
 </template>
 
 <script>
@@ -35,8 +30,6 @@
   data() {
     return {
       // 임시 로그인 정보
-      idIcon: "/client/resources/img/id.png",
-      passwordIcon: "/client/resources/img/password.png",
       loginIcon: "/client/resources/img/loginicon.png",
       formSubmitted: false,
       logo: "/client/resources/img/logo.png", // 경로를 Vue 프로젝트 구조에 맞게 설정
Add a comment
List